Skip to content

Latest commit

 

History

History
364 lines (280 loc) · 11.2 KB

ptypes.rst

File metadata and controls

364 lines (280 loc) · 11.2 KB

ptypes module

This module provides several pseudo-type definitions which can be enforced and/or validated with custom contracts defined using the :pyputil.pcontracts module

Pseudo-types

ColorSpaceOption

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

CsvColFilter

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

CsvColSort

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

CsvDataFilter

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

CsvFiltered

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

CsvRowFilter

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

1

3

10

1

4

20

2

4

30

2

5

40

3

5

50

Then the filter specification rfilter = {'Ctrl':2, 'Ref':5} would result in the following filtered data set:

Ctrl Ref Result

2

5

40

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

2

5

40

3

5

50

None indicates that no row filtering should be done

EngineeringNotationNumber

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

EngineeringNotationSuffix

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

FileName

String with a valid file name

FileNameExists

String with a file name that exists in the file system

Function

Callable pointer or None

IncreasingRealNumpyVector

Numpy vector in which all elements are real (integers and/or floats) and monotonically increasing (each element is strictly greater than the preceding one)

InterpolationOption

String representing an interpolation type, one of 'STRAIGHT', 'STEP', 'CUBIC', 'LINREG' (case insensitive) or None

LineStyleOption

String representing a Matplotlib line style, one of '-', '--', '-.', ':' or None

NodeName

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'

NodesWithData

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':[]}

NonNegativeInteger

Integer greater or equal to zero

OffsetRange

Number in the [0, 1] range

PositiveRealNum

Integer or float greater than zero or None

RealNum

Integer, float or None

RealNumpyVector

Numpy vector in which all elements are real (integers and/or floats)

Contracts

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