pyuncertainnumber.pba.intervals.methods

web: github.com/marcodeangelis org: Univerity of Liverpool

MIT License

These methods are designed to behave neutrally on non-interval inputs. So, if a non-interval is passed equivalent rules for floats apply.

Interval to float methods, IR -> R:

Interval to bool methods, IR -> {0,1}:

Binary operations, IR2 -> IR Unary operations, IR -> IR

Parser, R^(nx2) -> IR^n, R^(mxnx2) -> IR^(mxn), R^(2xmxn) -> IR^(mxn) This method turns an array of compatible dimension into an interval (array).

Subintervalisation methods, IR -> IR^n.

Attributes

Functions

abs(x)

Return the absolute value of an Interval.

sqrt(x)

Return the square root of an Interval.

exp(x)

log(x)

max(x, y)

min(x, y)

env(x, y)

Return the envelope interval containing both x and y.

sin(x)

Implementation of Interval Arithmetic in CORA 2016

sin_vector(x)

cos(x)

Implementation of Interval Arithmetic in CORA 2016

cos_vector(x)

tan(x)

Implementation of Interval Arithmetic in CORA 2016

tan_vector(x)

straddle_zero(→ bool)

intersect(x, y)

contain(x, y)

almost_contain(x, y[, tol])

intersect_vector(x_, y_)

This function checks if the focal elements x, intersect the subpaving y.

intervalise(...)

This function casts an array-like structure into an Interval structure.

sizeit(→ pyuncertainnumber.pba.intervals.number.Interval)

Takes an unsized scalar interval and turns it in to a sized one.

unsizeit(→ pyuncertainnumber.pba.intervals.number.Interval)

Takes a sized scalar interval and turns it in to a unsized one.

tolist(x)

subintervalise(...)

split_interval(x[, y])

reconstitute(x_)

space_product(x_, y_)

bisect(x_[, i])

is_Interval(→ bool)

is_not_Interval(→ bool)

dot(x, y)

rowcol_old(W, x)

(m,n) x (n,1) -> (m,1)

rowcol_W_x(W, x)

Row by column multiplication between a matrix W and a column vector x.

rowcol_xT_WT(x, W)

Row by column multiplication between the row vector xT and the matrix transpose WT.

matmul(A, B)

(m,n) x (n,p) -> (m,p)

transpose(x)

Input an interval of shape (m,n) returns an interval of shape (n,m).

squeeze(x)

relu_nointerval(x)

relu_deriv(x)

relu(x)

relu_deriv_interval(x)

sigmoid(x)

sigmoid_deriv(x)

tanh(x)

tanh(x)

cosh(x)

tanh_deriv(x)

unpack(...)

unpack an array-like Interval object into a list of item intervals

load_interval_from_json(...)

Load a NumPy array from a JSON file saved by save_array_to_json().

Module Contents

pyuncertainnumber.pba.intervals.methods.numpy_min
pyuncertainnumber.pba.intervals.methods.numpy_max
pyuncertainnumber.pba.intervals.methods.numpy_sqrt
pyuncertainnumber.pba.intervals.methods.numpy_abs
pyuncertainnumber.pba.intervals.methods.numpy_exp
pyuncertainnumber.pba.intervals.methods.numpy_sum
pyuncertainnumber.pba.intervals.methods.numpy_sin
pyuncertainnumber.pba.intervals.methods.numpy_cos
pyuncertainnumber.pba.intervals.methods.numpy_tan
pyuncertainnumber.pba.intervals.methods.numpy_pi
pyuncertainnumber.pba.intervals.methods.numpy_inf
pyuncertainnumber.pba.intervals.methods.numpy_transpose
pyuncertainnumber.pba.intervals.methods.abs(x: pyuncertainnumber.pba.intervals.number.Interval)

Return the absolute value of an Interval.

If x is not of class Interval, absolute value is returned assuming input is numerical.

If x is neither a number (neither Interval not numeric), numpy will throw an exception.

pyuncertainnumber.pba.intervals.methods.sqrt(x: pyuncertainnumber.pba.intervals.number.Interval)

Return the square root of an Interval.

If x is not of class Interval, the square root is returned assuming input is numerical.

If x is neither a number (neither Interval not numeric), numpy will throw an exception.

pyuncertainnumber.pba.intervals.methods.exp(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.log(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.max(x: pyuncertainnumber.pba.intervals.number.Interval, y: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.min(x: pyuncertainnumber.pba.intervals.number.Interval, y: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.env(x: pyuncertainnumber.pba.intervals.number.Interval, y: pyuncertainnumber.pba.intervals.number.Interval)

Return the envelope interval containing both x and y.

pyuncertainnumber.pba.intervals.methods.sin(x: pyuncertainnumber.pba.intervals.number.Interval)

Implementation of Interval Arithmetic in CORA 2016

Matthias Althoff and Dmitry Grebenyuk

EPiC Series in Computing Volume 43, 2017, Pages 91-105

ARCH16. 3rd International Workshop on Applied Verification for Continuous and Hybrid Systems

pyuncertainnumber.pba.intervals.methods.sin_vector(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.cos(x: pyuncertainnumber.pba.intervals.number.Interval)

Implementation of Interval Arithmetic in CORA 2016

Matthias Althoff and Dmitry Grebenyuk

EPiC Series in Computing Volume 43, 2017, Pages 91-105

ARCH16. 3rd International Workshop on Applied Verification for Continuous and Hybrid Systems

pyuncertainnumber.pba.intervals.methods.cos_vector(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.tan(x: pyuncertainnumber.pba.intervals.number.Interval)

Implementation of Interval Arithmetic in CORA 2016

Matthias Althoff and Dmitry Grebenyuk

EPiC Series in Computing Volume 43, 2017, Pages 91-105

ARCH16. 3rd International Workshop on Applied Verification for Continuous and Hybrid Systems

pyuncertainnumber.pba.intervals.methods.tan_vector(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.straddle_zero(x: pyuncertainnumber.pba.intervals.number.Interval) bool
pyuncertainnumber.pba.intervals.methods.intersect(x: pyuncertainnumber.pba.intervals.number.Interval, y: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.contain(x: pyuncertainnumber.pba.intervals.number.Interval, y: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.almost_contain(x: pyuncertainnumber.pba.intervals.number.Interval, y: pyuncertainnumber.pba.intervals.number.Interval, tol=1e-09)
pyuncertainnumber.pba.intervals.methods.intersect_vector(x_: pyuncertainnumber.pba.intervals.number.Interval, y_: pyuncertainnumber.pba.intervals.number.Interval)

This function checks if the focal elements x, intersect the subpaving y.

x: A n-list of d-boxes or d-intervals, e.g. a subpaving. x.shape=(r,d) y: A m-list of d-boxes or d-intervals, e.g. a focal element. y.shape=(p,d)

out: A (rp)-list of d-arrays of booleans

pyuncertainnumber.pba.intervals.methods.intervalise(x_: Any, interval_index=-1) pyuncertainnumber.pba.intervals.number.Interval | Any

This function casts an array-like structure into an Interval structure. All array-like structures will be first coerced into an ndarray of floats. If the coercion is unsuccessful the following error is thrown: ValueError: setting an array element with a sequence.

For example this is the expected behaviour: (*) an ndarray of shape (4,2) will be cast as an Interval of shape (4,).

(*) an ndarray of shape (7,3,2) will be cast as an Interval of shape (7,3).

(*) an ndarray of shape (3,2,7) will be cast as a degenerate Interval of shape (3,2,7).

(*) an ndarray of shape (2,3,7) will be cast as an Interval of shape (3,7).

(*) an ndarray of shape (2,3,7,2) will be cast as an Interval of shape (2,3,7) if interval_index is set to -1.

If an ndarray has shape with multiple dimensions having size 2, then the last dimension is intervalised. So, an ndarray of shape (7,2,2) will be cast as an Interval of shape (7,2) with the last dimension intervalised. When the ndarray has shape (2,2) again is the last dimension that gets intervalised.

In case of ambiguity, e.g. (2,5,2), now the first dimension can be forced to be intervalised, selecting index=0, default is -1.

It returns an interval only if the input is an array-like structure, otherwise it returns the following numpy error: ValueError: setting an array element with a sequence.

TODO: Parse a list of mixed numbers: interval and ndarrays.

pyuncertainnumber.pba.intervals.methods.sizeit(x: pyuncertainnumber.pba.intervals.number.Interval) pyuncertainnumber.pba.intervals.number.Interval

Takes an unsized scalar interval and turns it in to a sized one.

pyuncertainnumber.pba.intervals.methods.unsizeit(x: pyuncertainnumber.pba.intervals.number.Interval) pyuncertainnumber.pba.intervals.number.Interval

Takes a sized scalar interval and turns it in to a unsized one.

pyuncertainnumber.pba.intervals.methods.tolist(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.subintervalise(x_: pyuncertainnumber.pba.intervals.number.Interval, n: int | tuple = 0) pyuncertainnumber.pba.intervals.number.Interval
Returns:

  • matrix Interval

pyuncertainnumber.pba.intervals.methods.split_interval(x: pyuncertainnumber.pba.intervals.number.Interval, y: float = None)
pyuncertainnumber.pba.intervals.methods.reconstitute(x_: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.space_product(x_: numpy.ndarray | pyuncertainnumber.pba.intervals.number.Interval, y_: numpy.ndarray | pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.bisect(x_: pyuncertainnumber.pba.intervals.number.Interval, i: int = None)
X:

Interval of shape (n,)

Bisect the largest box if i is None.

pyuncertainnumber.pba.intervals.methods.is_Interval(x: Any) bool
pyuncertainnumber.pba.intervals.methods.is_not_Interval(x: Any) bool
pyuncertainnumber.pba.intervals.methods.dot(x: pyuncertainnumber.pba.intervals.number.Interval, y: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.rowcol_old(W, x)

(m,n) x (n,1) -> (m,1) (m,n) x (n,p) -> (m,p) (1,n) x (n,1) -> (1,1)

pyuncertainnumber.pba.intervals.methods.rowcol_W_x(W, x)

Row by column multiplication between a matrix W and a column vector x.

(m,n) x (n,1) -> (m,1) (1,n) x (n,1) -> (1,1) The following cases are also accepted even though mathematically impossible (m,n) x (n,) -> (m,1) (1,n) x (n,1) -> (1,1) (1,n) x (1,n) -> (1,1)

pyuncertainnumber.pba.intervals.methods.rowcol_xT_WT(x, W)

Row by column multiplication between the row vector xT and the matrix transpose WT. (1,n) x (n,m) -> (1,m) (1,n) x (n,1) -> (1,1) The following cases are also accepted even though mathematically impossible (,n) x (n,m) -> (1,m) (n,1) x (n,m) -> (1,1)

pyuncertainnumber.pba.intervals.methods.matmul(A, B)

(m,n) x (n,p) -> (m,p) (1,n) x (n,1) -> (1,1)

pyuncertainnumber.pba.intervals.methods.transpose(x: pyuncertainnumber.pba.intervals.number.Interval)

Input an interval of shape (m,n) returns an interval of shape (n,m).

pyuncertainnumber.pba.intervals.methods.squeeze(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.relu_nointerval(x: numpy.ndarray)
pyuncertainnumber.pba.intervals.methods.relu_deriv(x: numpy.ndarray)
pyuncertainnumber.pba.intervals.methods.relu(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.relu_deriv_interval(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.sigmoid(x)
pyuncertainnumber.pba.intervals.methods.sigmoid_deriv(x)
pyuncertainnumber.pba.intervals.methods.tanh(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.tanh(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.cosh(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.tanh_deriv(x: pyuncertainnumber.pba.intervals.number.Interval)
pyuncertainnumber.pba.intervals.methods.unpack(x: pyuncertainnumber.pba.intervals.number.Interval) list[pyuncertainnumber.pba.intervals.number.Interval]

unpack an array-like Interval object into a list of item intervals

Returns:

a list of scalar Interval objects

Example

>>> x = Interval(lo=([0, 1]), hi=([1, 2]))
>>> unpack(x)
[Interval(0, 1), Interval(1, 2)]
pyuncertainnumber.pba.intervals.methods.load_interval_from_json(filename: str) pyuncertainnumber.pba.intervals.number.Interval

Load a NumPy array from a JSON file saved by save_array_to_json().

Note

Both .json and .json5 files are supported.

Example

>>> interval = load_interval_from_json("interval_data.json5")