This module provides several pseudo-type definitions which can be enforced and/or validated with custom contracts defined using the :pyputil.pcontracts
module
String representing a Matplotlib color space, one 'binary'
, 'Blues'
, 'BuGn'
, 'BuPu'
, 'GnBu'
, 'Greens'
, 'Greys'
, 'Oranges'
, 'OrRd'
, 'PuBu'
, 'PuBuGn'
, 'PuRd'
, 'Purples'
, 'RdPu'
, 'Reds'
, 'YlGn'
, 'YlGnBu'
, 'YlOrBr
', 'YlOrRd'
or None
String, integer, a list of strings or a list of integers that identify a column or columns within a comma-separated values (CSV) file.
Integers identify a column by position (column 0 is the leftmost column) whereas strings identify the column by name. Columns can be identified either by position or by name when the file has a header (first row of file containing column labels) but only by position when the file does not have a header.
None
indicates that no column filtering should be done
Integer, string, dictionary or list of integers, strings or dictionaries that specify the sort direction of a column or columns in a comma-separated values (CSV) file.
The sort direction can be either ascending, specified by the string 'A'
, or descending, specified by the string 'B'
(case insensitive). The default sort direction is ascending.
The column can be specified numerically or with labels depending on whether the CSV file was loaded with or without a header.
The full specification is a dictionary (or list of dictionaries if multiple columns are to be used for sorting) where the key is the column and the value is the sort order, thus valid examples are {'MyCol':'A'}
and [{'MyCol':'A'}, {3:'d'}]
.
When the default direction suffices it can be omitted; for example in [{'MyCol':'D'}, 3]
, the data is sorted first by MyCol in descending order and then by the 4th column (column 0 is the leftmost column in a CSV file) in ascending order
In its most general form a two-item tuple, where one item is of CsvColFilter pseudo-type and the other item is of CsvRowFilter pseudo-type (the order of the items is not mandated, i.e. the first item could be of pseudo-type CsvRowFilter and the second item could be of pseudo-type CsvColFilter or vice-versa).
The two-item tuple can be reduced to a one-item tuple when only a row or column filter needs to be specified, or simply to an object of either CsvRowFilter or CsvColFilter pseudo-type.
For example, all of the following are valid CsvDataFilter objects: ('MyCol', {'MyCol':2.5})
, ({'MyCol':2.5}, 'MyCol')
(filter in the column labeled MyCol and rows where the column labeled MyCol has the value 2.5), ('MyCol', )
(filter in column labeled MyCol and all rows) and {'MyCol':2.5}
(filter in all columns and only rows where the column labeled MyCol has the values 2.5)
None
, (None, )
or (None, None)
indicate that no row or column filtering should be done
String or a boolean that indicates what type of row and column filtering is to be performed in a comma-separated values (CSV) file. If True
, 'B'
or 'b'
it indicates that both row- and column-filtering are to be performed; if False
, 'N'
or 'n'
no filtering is to be performed, if 'R'
or 'r'
only row-filtering is to be performed, if 'C'
or 'c'
only column-filtering is to be performed
Dictionary whose elements are sub-filters with the following structure:
- column identifier (CsvColFilter) -- Dictionary key. Column to filter (as it appears in the comma-separated values file header when a string is given) or column number (when an integer is given, column zero is the leftmost column)
- value (list of strings or numbers, or string or number) -- Dictionary value. Column value to filter if a string or number, column values to filter if a list of strings or numbers
If a row filter sub-filter is a column value all rows which contain the specified value in the specified column are kept for that particular individual filter. The overall data set is the intersection of all the data sets specified by each individual sub-filter. For example, if the file to be processed is:
Ctrl | Ref | Result |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Then the filter specification rfilter = {'Ctrl':2, 'Ref':5}
would result in the following filtered data set:
Ctrl | Ref | Result |
---|---|---|
|
|
|
However, the filter specification rfilter = {'Ctrl':2, 'Ref':3}
would result in an empty list because the data set specified by the Ctrl individual sub-filter does not overlap with the data set specified by the Ref individual sub-filter.
If a row sub-filter is a list, the items of the list represent all the values to be kept for a particular column (strings or numbers). So for example rfilter = {'Ctrl':[2, 3], 'Ref':5}
would result in the following filtered data set:
Ctrl | Ref | Result |
---|---|---|
|
|
|
|
|
|
None
indicates that no row filtering should be done
String with a number represented in engineering notation. Optional leading whitespace can precede the mantissa; optional whitespace can also follow the engineering suffix. An optional sign (+ or -) can precede the mantissa after the leading whitespace. The suffix must be one of 'y'
, 'z'
, 'a'
, 'f'
, 'p'
, 'n'
, 'u'
, 'm'
, ' '
(space), 'k'
, 'M'
, 'G'
, 'T'
, 'P'
, 'E'
, 'Z'
or 'Y'
. The correspondence between suffix and floating point exponent is:
Exponent | Name | Suffix |
---|---|---|
1E-24 | yocto | y |
1E-21 | zepto | z |
1E-18 | atto | a |
1E-15 | femto | f |
1E-12 | pico | p |
1E-9 | nano | n |
1E-6 | micro | u |
1E-3 | milli | m |
1E+0 | ||
1E+3 | kilo | k |
1E+6 | mega | M |
1E+9 | giga | G |
1E+12 | tera | T |
1E+15 | peta | P |
1E+18 | exa | E |
1E+21 | zetta | Z |
1E+24 | yotta | Y |
A single character string, one of 'y'
, 'z'
, 'a'
, 'f'
, 'p'
, 'n'
, 'u'
, 'm'
, ' '
(space), 'k'
, 'M'
, 'G'
, 'T'
, 'P'
, 'E'
, 'Z'
or 'Y'
. EngineeringNotationNumber
lists the correspondence between suffix and floating point exponent
String with a valid file name
String with a file name that exists in the file system
Callable pointer or None
Numpy vector in which all elements are real (integers and/or floats) and monotonically increasing (each element is strictly greater than the preceding one)
String representing an interpolation type, one of 'STRAIGHT'
, 'STEP'
, 'CUBIC'
, 'LINREG'
(case insensitive) or None
String representing a Matplotlib line style, one of '-'
, '--'
, '-.'
, ':'
or None
String where hierarchy levels are denoted by node separator characters ('.'
by default). Node names cannot contain spaces, empty hierarchy levels, start or end with a node separator character.
For this example tree:
The node names are 'root'
, 'root.branch1'
, 'root.branch1.leaf1'
, 'root.branch1.leaf2'
and 'root.branch2'
Dictionary or list of dictionaries; each dictionary must contain exactly two keys:
- name (NodeName) Node name. See NodeName pseudo-type specification
- data (any) node data
The node data should be an empty list to create a node without data, for example: {'name':'a.b.c', 'data':[]}
Integer greater or equal to zero
Number in the [0, 1] range
Integer or float greater than zero or None
Integer, float or None
Numpy vector in which all elements are real (integers and/or floats)
putil.ptypes.color_space_option
putil.ptypes.csv_col_filter
putil.ptypes.csv_col_sort
putil.ptypes.csv_data_filter
putil.ptypes.csv_filtered
putil.ptypes.csv_row_filter
putil.ptypes.engineering_notation_number
putil.ptypes.engineering_notation_suffix
putil.ptypes.file_name
putil.ptypes.file_name_exists
putil.ptypes.function
putil.ptypes.increasing_real_numpy_vector
putil.ptypes.interpolation_option
putil.ptypes.line_style_option
putil.ptypes.non_negative_integer
putil.ptypes.offset_range
putil.ptypes.positive_real_num
putil.ptypes.real_num
putil.ptypes.real_numpy_vector