Numerical Representations

cdd.get_number_type_from_value(value)

Determine number type from a value.

Returns:

'fraction' if the value is Rational or str, otherwise 'float'.

Return type:

str

cdd.get_number_type_from_sequences(*data)

Determine number type from sequences.

Returns:

'fraction' if all elements are Rational or str, otherwise 'float'.

Return type:

str

class cdd.NumberTypeable(number_type='float')

Base class for any class which admits different numerical representations.

Parameters:

number_type (str) – The number type ('float' or 'fraction').

NumberTypeable.make_number(value)

Convert value into a number.

Parameters:

value (int, float, or str) – The value to convert.

Returns:

The converted value.

Return type:

NumberType

>>> nt = cdd.NumberTypeable('float')
>>> print(repr(nt.make_number('2/3'))) 
0.666666666...
>>> nt = cdd.NumberTypeable('fraction')
>>> print(repr(nt.make_number('2/3'))) 
Fraction(2, 3)
NumberTypeable.number_str(value)

Convert value into a string.

Parameters:

value (NumberType) – The value.

Returns:

A string for the value.

Return type:

str

>>> numbers = ['4', '2/3', '1.6', '-9/6', 1.12]
>>> nt = cdd.NumberTypeable('float')
>>> for number in numbers:
...     x = nt.make_number(number)
...     print(nt.number_str(x)) 
4.0
0.666666666...
1.6
-1.5
1.12
>>> nt = cdd.NumberTypeable('fraction')
>>> for number in numbers:
...     x = nt.make_number(number)
...     print(nt.number_str(x))
4
2/3
8/5
-3/2
1261007895663739/1125899906842624
NumberTypeable.number_repr(value)

Return representation string for value.

Parameters:

value (NumberType) – The value.

Returns:

A string for the value.

Return type:

str

>>> numbers = ['4', '2/3', '1.6', '-9/6', 1.12]
>>> nt = cdd.NumberTypeable('float')
>>> for number in numbers:
...     x = nt.make_number(number)
...     print(nt.number_repr(x))
4.0
0.666666666...
1.6...
-1.5
1.12...
>>> nt = cdd.NumberTypeable('fraction')
>>> for number in numbers:
...     x = nt.make_number(number)
...     print(nt.number_repr(x))
4
'2/3'
'8/5'
'-3/2'
'1261007895663739/1125899906842624'
NumberTypeable.number_cmp(num1, num2=None)

Compare values. Type checking may not be performed, for speed. If num2 is not specified, then num1 is compared against zero.

Parameters:
>>> a = cdd.NumberTypeable('float')
>>> a.number_cmp(0.0, 5.0)
-1
>>> a.number_cmp(5.0, 0.0)
1
>>> a.number_cmp(5.0, 5.0)
0
>>> a.number_cmp(1e-30)
0
>>> a = cdd.NumberTypeable('fraction')
>>> a.number_cmp(0, 1)
-1
>>> a.number_cmp(1, 0)
1
>>> a.number_cmp(0, 0)
0
>>> a.number_cmp(a.make_number(1e-30))
1
NumberTypeable.number_type

The number type as string ('float' or 'fraction').

NumberTypeable.NumberType

The number type as class (float or Fraction).