Rational polynomial usage (sarpy.processing.rational_polynomial)

General purpose rational polynomial tools

exception sarpy.processing.rational_polynomial.SarpyRatPolyError

Bases: SarpyError

A custom exception class for rational polynomial fitting errors.

add_note()

Exception.add_note(note) – add a note to the exception

with_traceback()

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

sarpy.processing.rational_polynomial.get_default_coefficient_ordering(variables: int, order: int) Sequence[Tuple[int, ...]]

Gets a sensible coefficient ordering of a polynomial of given number of variables and order.

Parameters:
  • variables (int) –

  • order (int) –

Returns:

coefficient_list – List of the form [(exponent 0, exponent 1, …)], determining the ordering of monomial terms in the associated multivariable polynomial.

Return type:

Tuple[Tuple[int, …]]

sarpy.processing.rational_polynomial.rational_poly_fit_1d(x: ndarray, data: ndarray, coeff_list: Sequence[int | Tuple[int]], cond: float | None = None) Tuple[ndarray, ndarray]

Fits a one variable rational polynomial according to the input coefficient listing order.

Parameters:
  • x (numpy.ndarray) –

  • data (numpy.ndarray) –

  • coeff_list (List[int|Tuple[int]]) –

  • cond (None|float) – Passed through to scipy.linalg.lstsq().

Returns:

  • numerator (numpy.ndarray)

  • denominator (numpy.ndarray)

Raises:

SarpyRatPolyError – Convergence failures passed through

sarpy.processing.rational_polynomial.rational_poly_fit_2d(x: ndarray, y: ndarray, data: ndarray, coeff_list: Sequence[Tuple[int, int]], cond: float | None = None) Tuple[ndarray, ndarray]

Fits a two variable rational polynomial according to the input coefficient listing order.

Parameters:
  • x (numpy.ndarray) –

  • y (numpy.ndarray) –

  • data (numpy.ndarray) –

  • coeff_list (Sequence[Tuple[int, int]]) –

  • cond (None|float) – Passed through to scipy.linalg.lstsq().

Returns:

  • numerator (numpy.ndarray)

  • denominator (numpy.ndarray)

Raises:

SarpyRatPolyError – Convergence failures passed through

sarpy.processing.rational_polynomial.rational_poly_fit_3d(x: ndarray, y: ndarray, z: ndarray, data: ndarray, coeff_list: Sequence[Tuple[int, int, int]], cond: float | None = None) Tuple[ndarray, ndarray]

Fits a three variable rational polynomial according to the input coefficient listing order.

Parameters:
  • x (numpy.ndarray) –

  • y (numpy.ndarray) –

  • z (numpy.ndarray) –

  • data (numpy.ndarray) –

  • coeff_list (Sequence[Tuple[int, int, int]]) –

  • cond (None|float) – Passed through to scipy.linalg.lstsq().

Returns:

  • numerator (numpy.ndarray)

  • denominator (numpy.ndarray)

Raises:

SarpyRatPolyError – Convergence failures passed through

class sarpy.processing.rational_polynomial.RationalPolynomial(numerator: Sequence[float] | ndarray, denominator: Sequence[float] | ndarray, coeff_list: Sequence[Tuple[int, ...]], input_offsets: Sequence[float], input_scales: Sequence[float], output_offset: float, output_scale: float)

Bases: object

A basic rational polynomial implementation. This assumes the data model input_data -> output_data via the relation

\[\begin{split}X = (x, y, ...) & = (input\_data - input\_offset)/input\_scale \\ (output\_data - output\_offset)/output\_scale & = Data = numerator(X)/denominator(X) \\ output\_data & = (numerator(X)/denominator(X))*output_scale + output\_offset\end{split}\]

This object is callable, and acts as the evaluation function after construction. That is, suppose we have

property variables: int

The number of independent variables.

Return type:

int

property coefficient_list: Sequence[Tuple[int, ...]]

The coefficient list.

Return type:

Sequence

property numerator: Sequence[float]

The numerator coefficients.

Return type:

Sequence

property denominator: Sequence[float]

The denominator coefficients.

Return type:

Sequence

sarpy.processing.rational_polynomial.get_rational_poly_1d(x: ndarray, data: ndarray, coeff_list: Sequence[int | Tuple[int]] | None = None, order: int | None = None, cond: float | None = None) RationalPolynomial

Gets the RationalPolynomial instance that comes from fitting the provided data.

Parameters:
  • x (numpy.ndarray) –

  • data (numpy.ndarray) –

  • coeff_list (None|Sequence) –

  • order (None|int) –

  • cond (None|float) – Passed through to scipy.linalg.lstsq().

Return type:

RationalPolynomial

Raises:

SarpyRatPolyError – Convergence failures passed through

sarpy.processing.rational_polynomial.get_rational_poly_2d(x: ndarray, y: ndarray, data: ndarray, coeff_list: Sequence[Tuple[int, int]] | None = None, order: int | None = None, cond: float | None = None) RationalPolynomial

Gets the RationalPolynomial instance that comes from fitting the provided data.

Parameters:
  • x (numpy.ndarray) –

  • y (numpy.ndarray) –

  • data (numpy.ndarray) –

  • coeff_list (None|Sequence) –

  • order (None|int) –

  • cond (None|float) – Passed through to scipy.linalg.lstsq().

Return type:

RationalPolynomial

Raises:

SarpyRatPolyError – Convergence failures passed through

sarpy.processing.rational_polynomial.get_rational_poly_3d(x: ndarray, y: ndarray, z: ndarray, data: ndarray, coeff_list: Sequence[Tuple[int, int]] | None = None, order: int | None = None, cond: float | None = None) RationalPolynomial

Gets the RationalPolynomial instance that comes from fitting the provided data.

Parameters:
  • x (numpy.ndarray) –

  • y (numpy.ndarray) –

  • z (numpy.ndarray) –

  • data (numpy.ndarray) –

  • coeff_list (None|Sequence) –

  • order (None|int) –

  • cond (None|float) – Passed through to scipy.linalg.lstsq().

Return type:

RationalPolynomial

Raises:

SarpyRatPolyError – Convergence failures passed through

class sarpy.processing.rational_polynomial.CombinedRationalPolynomial(*collection: List[RationalPolynomial])

Bases: object

Assemble a collection of RationalPolynomial objects with the same number of variables into a single multi-variable output object.