Skip to content

Geode factorization

This page summarizes the Geode identity S - 1 = S1 · G and shows how to use the public APIs.

  • S: Hyper-Catalan generating function in variables t2, t3, ...
  • S1: linear part ∑ t_k
  • G: residual factor so that S-1 = S1·G

APIs

  • geodepoly.geode.S_eval(t: Mapping[int,complex], Fmax: int, use_geode: bool=False)
  • geodepoly.geode.eval_S_via_geode(t, Fmax)
  • geodepoly.geode.map_t_from_poly(coeffs)
  • geodepoly.geode.SeriesOptions
  • geodepoly.geode.solve_series(coeffs, opts)

Examples

Evaluate S directly vs. via Geode factoring:

from geodepoly.geode import S_eval, eval_S_via_geode

# only t2,t3 nonzero
vals = {2: 0.1, 3: -0.03}
S_direct = S_eval(vals, Fmax=8, use_geode=False)
S_geode  = eval_S_via_geode(vals, Fmax=8)

Map polynomial coefficients to t_k, then evaluate S to get the soft root step variable:

from geodepoly.geode import map_t_from_poly, S_eval

coeffs = [-6, 11, -6, 1]  # a0..a3 (monic cubic with roots 1,2,3)
t = map_t_from_poly(coeffs)
alpha = S_eval(t, Fmax=8)  # alpha(0)=1 branch

Series bootstrap to get a single root candidate:

from geodepoly.geode import SeriesOptions, solve_series

opts = SeriesOptions(Fmax=16, bootstrap=True, bootstrap_passes=3)
x = solve_series([-6, 11, -6, 1], opts)

Notes - Larger Fmax gives more accurate truncations but higher cost. - The Geode path is often more stable near the linearization boundary.