httk.core.exactmath¶
Exact math on rationals and decimals: type-preserving transcendentals.
This module provides the transcendental and helper functions used by
FracVector. Every value is computed with 100% exact
integer/rational arithmetic, so results are platform-independent and deterministic by
construction — no floating point is used anywhere in the computation.
Two output domains are supported, selected by a single documented rule. All scalar functions also
accept ScalarLike and VectorLike inputs. Vectors are mapped elementwise and retain their
shape. The optional keyword-only coerce= presents the natural result through a requested view
or value type following httk.core.coerce_view() semantics — the exact backend is retained
behind view presentations (use httk.core.unview() on the result for a plain value);
coerce="natural" returns the pre-presentation result unchanged. By default, presentation is
view-neutral and best-effort: ordinary inputs are presented in the input type family, while
strings, bools, and Backend inputs retain the natural result. Explicit coercion propagates
coercion failures. exact=True keeps its exact SurdScalar/SurdVector result unless an explicit
coerce= is supplied.
The default presentation therefore returns an int for an integral integer result, an exact
Fraction for non-integral integer results, a float for float inputs (and explicit
coerce=float is lossy), nested lists for list inputs, native tuple views for tuple inputs, and
float64 numpy views for numpy inputs. Numpy view values are lossy, but the exact result remains
recoverable with unwrap(). Decimal inputs or digits= select the Decimal domain. Fraction
inputs remain Fractions. Surd inputs are embedded back into the Surd family
when the natural result is rational.
The exact-symbolic domain is selected by exact=True on sqrt and degree-mode trigonometric
functions. It returns exact squarefree-radical values (or exact inverse angles), with no
approximation. Exact trigonometry is available only for the complete surd-cosine angle set:
multiples of 15 and 36 degrees; unsupported values raise ValueError. Exact inverse
trigonometry accepts surd values and returns exact degree Fractions.
When a genuinely irrational SurdScalar is used by ordinary Fraction-mode functions, it is
reduced to the deterministic Fraction hub at the active Decimal context precision plus three guard
digits. Exact symbolic operations preserve the surd and never use that lossy approximation.
In the Fraction domain each function returns a rational (fractions.Fraction)
approximation to a target precision prec (the error bound), with limit controlling the
result denominator. In the Decimal domain the same rational algorithms
drive Ziv’s adaptive strategy to produce a correctly rounded Decimal to digits significant
digits (default: the active decimal.getcontext() precision, matching stdlib Decimal’s own
model) under rounding ("half_even" = correctly rounded, "down" = correct truncation
toward zero). A Decimal input is converted to a Fraction exactly (fractions.Fraction
accepts a Decimal), so the rational core is identical in both domains; this gives deterministic
cos/sin/atan2/… for Decimals, which the stdlib decimal module does not offer.
The implementation uses the standard-library fractions.
Attributes¶
Functions¶
|
Yield the terms of the continued fraction expansion of |
|
Return the rational number with the smallest denominator in |
Reconstruct a |
|
|
Parse a numeric string into a central value and an uncertainty (delta). |
|
Convert a numeric-like object into a |
|
Return the integer square root of |
|
Return the square root of |
|
Return the cosine of |
|
Return the sine of |
|
Return the tangent of |
|
Return |
|
Return the logarithm of |
|
Return the base-10 logarithm of |
|
Return the arc sine of |
|
Return the arc cosine of |
|
Return the arc tangent of |
|
Return the arc tangent of |
|
Return pi. |
Module Contents¶
- httk.core.exactmath.get_continued_fraction(p, q)[source]¶
Yield the terms of the continued fraction expansion of
p/q.
- httk.core.exactmath.best_rational_in_interval(low, high)[source]¶
Return the rational number with the smallest denominator in
[low, high].- Parameters:
low (Any) – Lower endpoint of the interval.
high (Any) – Upper endpoint of the interval.
- Returns:
The rational in the interval with the smallest denominator.
- Return type:
- httk.core.exactmath.fraction_from_continued_fraction(cf)[source]¶
Reconstruct a
fractions.Fractionfrom continued-fraction terms.- Parameters:
- Returns:
The reconstructed rational value.
- Return type:
- httk.core.exactmath.string_to_val_and_delta(arg, min_accuracy=fractions.Fraction(1, 10000))[source]¶
Parse a numeric string into a central value and an uncertainty (delta).
Recognizes plain decimals, fractions (
"2/3"), scientific notation, and explicit standard-deviation notation ("0.33342(10)"). When no explicit uncertainty is present andmin_accuracyis not None, an uncertainty is inferred from the number of written digits (capped atmin_accuracy).- Parameters:
arg (str) – Numeric text, including a decimal, fraction, scientific notation, or uncertainty notation.
min_accuracy (fractions.Fraction | None) – Upper bound for inferred uncertainty, or
Noneto disable inference.
- Returns:
The central value and its absolute uncertainty.
- Return type:
- httk.core.exactmath.any_to_fraction(arg, min_accuracy=fractions.Fraction(1, 10000))[source]¶
Convert a numeric-like object into a
fractions.Fraction.Strings are parsed for uncertainty via
string_to_val_and_delta(). With the default1/10000,0.33is taken to mean0.3300(= 33/100), whereas0.3333is taken to mean1/3. Setmin_accuracytoNoneto convert strings exactly.- Parameters:
arg (Any) – Value accepted by the
fractions.Fractionconstructor.min_accuracy (fractions.Fraction | None) – Minimum assumed accuracy for string input, or
Nonefor exact conversion.
- Returns:
The converted rational value.
- Return type:
- httk.core.exactmath.sqrt(x, prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None, exact=False, *, coerce=None)[source]¶
Return the square root of
x.Fraction domain (Fraction/int/str input, no
digits=): a rational approximation withinprec(exact for perfect squares),limitcontrolling the denominator. Decimal domain (Decimal input ordigits=given): the correctly-rounded Decimal todigitssignificant digits underrounding.With
exact=Truethe output-domain rule is overridden: scalar input yields an exactSurdScalar, while vector input yields aSurdVector. Both are squarefree-radical results with no approximation at all (sqrt(2, exact=True)squares back to exactly2,sqrt(9/4, exact=True)is the rational3/2).xmust be a nonnegative rational;prec/limit/digits/roundingare ignored in this mode.- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector value whose square root is required.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unlessxis Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.exact (bool) – Whether to return an exact squarefree-radical result.
coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The square root in the selected output domain, preserving vector shape.
- Raises:
ValueError – If the input is negative, exact input is not rational, or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.cos(x, prec=default_accuracy, limit=True, degrees=False, digits=None, rounding='half_even', max_refinements=None, exact=False, *, coerce=None)[source]¶
Return the cosine of
x(radians unlessdegreesis True). See the module docstring for the type-preservation rule; Decimal mode renders the special-angle exact values exactly (e.g.cos(Decimal("60"), degrees=True) == Decimal("0.5")).- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector angle.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.degrees (bool) – Whether to interpret the angle in degrees instead of radians.
digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unlessxis Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.exact (bool) – Whether to return the exact supported degree-mode surd result.
coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The cosine in the selected output domain, preserving vector shape.
- Raises:
ValueError – If exact mode is not degree mode, the angle is unsupported, or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.sin(x, prec=default_accuracy, limit=True, degrees=False, digits=None, rounding='half_even', max_refinements=None, exact=False, *, coerce=None)[source]¶
Return the sine of
x(radians unlessdegreesis True). See the module docstring for the type-preservation rule.- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector angle.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.degrees (bool) – Whether to interpret the angle in degrees instead of radians.
digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unlessxis Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.exact (bool) – Whether to return the exact supported degree-mode surd result.
coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The sine in the selected output domain, preserving vector shape.
- Raises:
ValueError – If exact mode is not degree mode, the angle is unsupported, or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.tan(x, degrees=False, prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None, exact=False, *, coerce=None)[source]¶
Return the tangent of
x. See the module docstring for the type-preservation rule.- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector angle.
degrees (bool) – Whether to interpret the angle in degrees instead of radians.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unlessxis Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.exact (bool) – Whether to return the exact supported degree-mode surd result.
coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The tangent in the selected output domain, preserving vector shape.
- Raises:
ValueError – If exact mode is not degree mode, the angle is unsupported, tangent is undefined, or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.exp(x, prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None, *, coerce=None)[source]¶
Return
eraised to the powerx. See the module docstring for the type-preservation rule.- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector exponent.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unlessxis Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The exponential in the selected output domain, preserving vector shape.
- Raises:
ValueError – If Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.log(x, base=None, prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None, *, coerce=None)[source]¶
Return the logarithm of
xtobase(natural log whenbaseis None). See the module docstring for the type-preservation rule; a Decimalbasealso promotes the result.- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector value whose logarithm is required.
base (httk.core.vectors.scalar_like.ScalarLike | None) – Logarithm base, or
Nonefor the natural logarithm.prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unless an input is Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The logarithm in the selected output domain, preserving vector shape.
- Raises:
ValueError – If the logarithm domain or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.log10(x, prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None, *, coerce=None)[source]¶
Return the base-10 logarithm of
x. See the module docstring for the type-preservation rule.max_refinementsis honored and is forwarded to the logarithm implementation.- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector value whose base-10 logarithm is required.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unlessxis Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The base-10 logarithm in the selected output domain, preserving vector shape.
- Raises:
ValueError – If the logarithm domain or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.asin(x, degrees=False, prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None, exact=False, *, coerce=None)[source]¶
Return the arc sine of
x(radians, or degrees ifdegrees). See the module docstring for the type-preservation rule.- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector value whose inverse sine is required.
degrees (bool) – Whether to return the angle in degrees instead of radians.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unlessxis Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.exact (bool) – Whether to return the exact supported degree-mode angle.
coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The inverse sine in the selected output domain, preserving vector shape.
- Raises:
ValueError – If exact mode is not degree mode, the angle is unsupported, or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.acos(x, degrees=False, prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None, exact=False, *, coerce=None)[source]¶
Return the arc cosine of
x(radians, or degrees ifdegrees). See the module docstring for the type-preservation rule.- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector value whose inverse cosine is required.
degrees (bool) – Whether to return the angle in degrees instead of radians.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unlessxis Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.exact (bool) – Whether to return the exact supported degree-mode angle.
coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The inverse cosine in the selected output domain, preserving vector shape.
- Raises:
ValueError – If exact mode is not degree mode, the angle is unsupported, or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.atan(x, degrees=False, prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None, exact=False, *, coerce=None)[source]¶
Return the arc tangent of
x(radians, or degrees ifdegrees). See the module docstring for the type-preservation rule.- Parameters:
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector value whose inverse tangent is required.
degrees (bool) – Whether to return the angle in degrees instead of radians.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unlessxis Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.exact (bool) – Whether to return the exact supported degree-mode angle.
coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The inverse tangent in the selected output domain, preserving vector shape.
- Raises:
ValueError – If exact mode is not degree mode, the angle is unsupported, or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.atan2(y, x, degrees=False, prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None, exact=False, *, coerce=None)[source]¶
Return the arc tangent of
y/xwithmath.atan2()quadrant conventions (radians, or degrees ifdegrees). See the module docstring for the type-preservation rule; a Decimal in either argument promotes the result (atan2(Decimal, Fraction)returns a Decimal). Vector inputs are mapped elementwise; a scalar argument is broadcast across the vector.- Parameters:
y (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector ordinate.
x (httk.core.vectors.scalar_like.ScalarLike | httk.core.vectors.vector_like.VectorLike) – Scalar or vector abscissa.
degrees (bool) – Whether to return the angle in degrees instead of radians.
prec (fractions.Fraction) – Maximum absolute error requested for Fraction-mode approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode unless an input is Decimal.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.exact (bool) – Whether to return the exact supported degree-mode angle.
coerce (Any) – Optional output view or value type;
"natural"disables presentation coercion.
- Returns:
The quadrant-aware angle in the selected output domain, preserving vector shape.
- Raises:
ValueError – If exact mode is not degree mode, the angle is unsupported, or Decimal-mode parameters are invalid.
- Return type:
Any
- httk.core.exactmath.pi(prec=default_accuracy, limit=True, digits=None, rounding='half_even', max_refinements=None)[source]¶
Return pi.
With no
digits=the Fraction contract holds (a rational withinprec,limitcontrolling the denominator);pi(digits=n)returns the correctly-rounded Decimal tonsignificant digits underrounding.- Parameters:
prec (fractions.Fraction) – Maximum absolute error requested for the Fraction approximation.
limit (bool) – Whether to constrain the approximation’s denominator using
prec.digits (int | None) – Significant digits for Decimal mode, or
Nonefor Fraction mode.rounding (str) – Decimal rounding mode:
"half_even"or"down".max_refinements (int | None) – Maximum Decimal refinements, or
Nonefor the normal adaptive limit.
- Returns:
Pi in the Fraction or Decimal domain selected by
digits.- Raises:
ValueError – If Decimal-mode parameters are invalid.
- Return type: