pycommons package¶
pycommons is a package with utility functionality for Python projects. Some basic type handling routines. the type variable for the data elements in an iterator alias of TypeVar(‘T’) Check whether a value val is an integer in a given range. Via type annotation, this method actually accepts a value val of any type as input. However, if val is not an instance of int, it will throw an error. Also, if val is not in the prescribed range, it will throw an error, too. By default, the range is 0…1_000_000_000. I noticed that often, we think that only want to check a lower limit for val, e.g., that a number of threads or a population size should be val > 0. However, in such cases, there also always a reasonable upper limits. We never actually want an EA to have a population larger than, say, 1_000_000_000. That would make no sense. So indeed, whenever we have a lower limit for a parameter, we also should have an upper limit resulting from physical constraints. 1_000_000_000 is a reasonably sane upper limit in many situations. If we need smaller or larger limits, we can of course specify them. Notice that there is one strange border case: In Python, bool is a subtype of int, where True has value 1 and False has value 0. See <https://docs.python.org/3/library/functions.html#bool>. We therefore treat bool values indeed as instances of int. val if everything is OK TypeError – if val is not an int ValueError – if val is an int but outside the prescribed range The behavior in the border case of bool instances actually also being instances of int: Check whether a value val can be converted an integer in a given range. val if everything is OK TypeError – if val is None ValueError – if val is not None but can either not be converted to an int or to an int outside the prescribed range Ensure that an This function will solidify an source ( the resulting re-iterable iterator Create an error to raise if a type did not fit. a Convert a type to a string which represents its name. Get the fully-qualified class name of an object. obj ( the fully-qualified class name of the object An internal file with the version of the pycommons package.Subpackages¶
Path
Path.basename()
Path.contains()
Path.create_file_or_truncate()
Path.enforce_contains()
Path.enforce_dir()
Path.enforce_file()
Path.ensure_dir_exists()
Path.ensure_file_exists()
Path.ensure_parent_dir_exists()
Path.exists()
Path.is_dir()
Path.is_file()
Path.list_dir()
Path.open_for_read()
Path.open_for_write()
Path.read_all_str()
Path.relative_to()
Path.resolve_inside()
Path.up()
Path.write_all_str()
UTF8
delete_path()
directory_path()
file_path()
line_writer()
write_lines()
CsvReader
CsvWriter
KEY_MAXIMUM
KEY_MEAN_ARITH
KEY_MEAN_GEOM
KEY_MEDIAN
KEY_MINIMUM
KEY_N
KEY_STDDEV
KEY_VALUE
SampleStatistics
SampleStatistics.compact()
SampleStatistics.get_maximum()
SampleStatistics.get_mean_arith()
SampleStatistics.get_mean_geom()
SampleStatistics.get_median()
SampleStatistics.get_minimum()
SampleStatistics.get_n()
SampleStatistics.get_stddev()
SampleStatistics.max_mean()
SampleStatistics.maximum
SampleStatistics.mean_arith
SampleStatistics.mean_geom
SampleStatistics.median
SampleStatistics.min_mean()
SampleStatistics.minimum
SampleStatistics.n
SampleStatistics.stddev
from_samples()
from_single_value()
getter()
Submodules¶
pycommons.types module¶
>>> try:
... print(check_int_range(12, min_value=7, max_value=13))
... except (ValueError, TypeError) as err:
... print(err)
12
>>> try:
... print(check_int_range(123, min_value=7, max_value=13))
... except (ValueError, TypeError) as err:
... print(err)
... print(err.__class__)
Value=123 is invalid, must be in 7..13.
<class 'ValueError'>
>>> try:
... print(check_int_range(5.0, name="ThisIsFloat"))
... except (ValueError, TypeError) as err:
... print(err)
... print(err.__class__)
ThisIsFloat should be an instance of int but is float, namely '5.0'.
<class 'TypeError'>
>>> check_int_range(True, "true", 0, 2)
True
>>> check_int_range(False, "false", 0, 2)
False
>>> try:
... print(check_int_range(True, min_value=7, max_value=13))
... except (ValueError, TypeError) as err:
... print(err)
... print(err.__class__)
Value=True is invalid, must be in 7..13.
<class 'ValueError'>
>>> try:
... print(check_to_int_range(12))
... except (ValueError, TypeError) as err:
... print(err)
12
>>> try:
... print(check_to_int_range(12.0))
... except (ValueError, TypeError) as err:
... print(err)
12
>>> try:
... print(check_to_int_range("12"))
... except (ValueError, TypeError) as err:
... print(err)
12
>>> try:
... print(check_to_int_range("A"))
... except (ValueError, TypeError) as err:
... print(err)
... print(err.__class__)
Cannot convert value='A' to int, let alone in range 0..1000000000.
<class 'ValueError'>
>>> try:
... print(check_to_int_range(None))
... except (ValueError, TypeError) as err:
... print(err)
... print(err.__class__)
Cannot convert value=None to int, let alone in range 0..1000000000.
<class 'TypeError'>
Iterable
can be iterated over multiple times.Iterator
into an Iterable
. In Python, Iterator
is a sub-class of Iterable
. This means that if your function accepts instances of Iterable
as input, it may expect to be able to iterate over them multiple times. However, if an Iterator
is passed in, which also is an instance of Iterable
and thus fulfills the function’s type requirement, this is not the case. A typical example of this would be if a Generator
is passed in. A Generator
is an instance of Iterator
, which, in turn, is an instance of Iterable
. However, you can iterate over a Generator
only once.Union
[Iterable
[TypeVar
(T
)], Iterator
[TypeVar
(T
)]]) – the data source>>> a = [1, 2, 3]
>>> reiterable(a) is a
True
>>> a = (1, 2, 3)
>>> reiterable(a) is a
True
>>> a = {1, 2, 3}
>>> reiterable(a) is a
True
>>> a = {1: 1, 2: 2, 3: 3}
>>> reiterable(a) is a
True
>>> k = a.keys()
>>> reiterable(k) is k
True
>>> k = a.values()
>>> reiterable(k) is k
True
>>> reiterable((x for x in range(5)))
(0, 1, 2, 3, 4)
>>> try:
... reiterable(None)
... except TypeError as te:
... print(str(te)[:60])
source should be an instance of any in {typing.Iterable, typ
>>> try:
... reiterable(1)
... except TypeError as te:
... print(str(te)[:60])
source should be an instance of any in {typing.Iterable, typ
TypeError
with a descriptive information>>> type_error(1.3, "var", int)
TypeError("var should be an instance of int but is float, namely '1.3'.")
>>> type_error("x", "z", (int, float)).args[0]
"z should be an instance of any in {float, int} but is str, namely 'x'."
>>> type_error("x", "z", (int, float, None)).args[0]
"z should be an instance of any in {None, float, int} but is str, namely 'x'."
>>> type_error("x", "z", (int, float, type(None))).args[0]
"z should be an instance of any in {None, float, int} but is str, namely 'x'."
>>> type_error("f", "q", call=True).args[0]
"q should be a callable but is str, namely 'f'."
>>> type_error("1", "2", bool, call=True).args[0]
"2 should be an instance of bool or a callable but is str, namely '1'."
>>> type_error(None, "x", str)
TypeError('x should be an instance of str but is None.')
>>> type_name(None)
'None'
>>> type_name(type(None))
'None'
>>> type_name(int)
'int'
>>> from pycommons.io.path import file_path, Path
>>> type_name(Path)
'pycommons.io.path.Path'
>>> from typing import Callable
>>> type_name(Callable)
'typing.Callable'
>>> from typing import Callable as Ca
>>> type_name(Ca)
'typing.Callable'
>>> from typing import Callable as Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>>> type_name(Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
'typing.Callable'
>>> import typing as ttttttttttttttttttttttttttttttttttttttttttt
>>> type_name(ttttttttttttttttttttttttttttttttttttttttttt.Callable)
'typing.Callable'
Any
) – the object>>> from pycommons.io.path import Path, file_path
>>> type_name_of(Path)
'type'
>>> type_name_of(file_path(__file__))
'pycommons.io.path.Path'
>>> type_name_of(None)
'None'
>>> type_name_of(int)
'type'
>>> type_name_of(print)
'builtin_function_or_method'
>>> from typing import Callable
>>> type_name_of(Callable)
'typing._CallableType'
>>> from math import sin
>>> type_name_of(sin)
'builtin_function_or_method'
>>> import pycommons.io as iox
>>> type_name_of(iox)
'module'
pycommons.version module¶