jaxvacua.freezer.ConifoldFreezer#

class ConifoldFreezer(model, conifold_index=0)#

Bases: Freezer

Integrates out the conifold modulus \(z_{\text{cf}}\) (index 0) in coniLCS models.

Near the conifold locus, the conifold modulus acquires a parametrically large mass from the flux superpotential. Its leading-order EOM gives

(3)#\[z_{\text{cf}} = -\frac{1}{2\pi i} \exp\!\Bigl(-\frac{2\pi i\,\widetilde{W}_1}{n_{\text{cf}}(M_1 - \tau H_1)}\Bigr)\]

where \(\widetilde{W}_1\) is the effective superpotential contribution from the bulk moduli and \(n_{\text{cf}}\) is the conifold degree.

Parameters:
  • model (Any) – A flux EFT model with "coniLCS" in model.periods.limit.

  • conifold_index (int) – Index of the conifold modulus in the moduli array. Defaults to 0.

Note

The conifold degree \(n_{\text{cf}}\) is not a constructor argument; it is exposed read-only through the ncf property (sourced from model.lcs_tree.conifold.ncf).

__init__(model, conifold_index=0)#

Initialise the ConifoldFreezer.

Parameters:
  • model (Any) – A flux EFT model with "coniLCS" in model.periods.limit.

  • conifold_index (int) – Index of the conifold modulus in the moduli array. Defaults to 0.

_conifold_index#

Stored index of the conifold modulus.

Type:

int

Methods

DW_light(z_light, z_light_c, tau, tau_c, fluxes)

Covariant derivatives \(D_i W\) for the light moduli (+ \(D_\tau W\)) with the conifold modulus on-shell. General basis: project the full \(D_i W\) onto the bulk directions, \(D_a W = D_i W\, \text{bulk\_embedding}^{i}{}_{a}\) (the conifold component \(D_i W\,e_q^i = \partial_{z_{\rm cf}}W \approx 0\) on-shell).

DW_x_light(x_light, fluxes, **kwargs)

Gradient of the superpotential \(\partial_{x^a} W\) in real coordinates for the light moduli, with heavy moduli on-shell.

G_x_light(x_light, fluxes[, x_full, method])

Reduced Kähler metric of the light fields in the real interleaved basis, obtained by integrating out the heavy moduli at the level of the Kähler potential.

K_x_light(x_light, fluxes, **kwargs)

Real Kähler potential \(\mathrm{Re}\,K\) evaluated at the light-field coordinates, with the heavy moduli integrated out on-shell.

V_x_light(x_light, fluxes[, noscale])

Scalar potential \(V\) evaluated at the light-field coordinates, with heavy moduli on-shell.

__init__(model[, conifold_index])

Initialise the ConifoldFreezer.

bulk_mass_spectrum(x_light, fluxes, **kwargs)

Bulk mass spectrum of a coniLCS vacuum with the conifold modulus integrated out. Identical to light_mass_spectrum() (here the "bulk" fields are the base-class "light" fields); the alias provides the conifold/throat vocabulary used in the literature. The on-shell apply_correction=True z_cf-solve default is applied.

dDW_x_light(x_light, fluxes, **kwargs)

Hessian \(\partial_{x^a}\partial_{x^b} W\) in real coordinates for the light moduli.

dV_x_light(x_light, fluxes[, noscale])

Gradient of the scalar potential \(\nabla_\phi V\) with respect to the real light-field coordinates, with heavy moduli on-shell.

ddV_x_light(x_light, fluxes[, noscale, ...])

Reduced Hessian of the scalar potential \(\partial_{\phi^\alpha}\partial_{\phi^\beta} V\) with respect to the real light-field coordinates, with the heavy moduli on-shell.

full_real_point(x_light, fluxes, **kwargs)

Full real coordinate vector with the heavy moduli on-shell -- the value accepted by the x_full argument of ddV_x_light() and light_mass_spectrum().

light_mass_spectrum(x_light, fluxes, **kwargs)

Conifold-aware override of Freezer.light_mass_spectrum(): defaults the z_cf solve to apply_correction=True (the Kähler-covariant correction needed for the analytic seed to reproduce the stored vacuum), then defers to the base implementation.

reconstruct_full_moduli(z_light, tau, ...)

Reconstruct the full modulus vector from the light (bulk) moduli with the conifold modulus on-shell. Aligned: index scatter (base class). General: \(z_{\rm full} = z_{\rm cf}\,e_q + \text{bulk\_embedding}\,z_{\rm light}\).

solve_heavy(z_light, tau, fluxes[, conj, ...])

Solve for \(z_{\text{cf}}\) from its leading-order EOM by delegating to jaxvacua.conifold.zcf_solver.compute_zcf() (the unified complex-coord dispatcher attached to the model).

superpotential(z_light, tau, fluxes, **kwargs)

Superpotential of the reduced theory.

Attributes

heavy_indices

Description: Indices of the heavy (conifold) modulus; always a length-1 tuple.

lcs_tree

Description: The bound model's period tree, model.lcs_tree.

light_indices

Description: Indices of the light moduli (complement of heavy_indices).

n_heavy

Description: Number of heavy moduli.

n_light

Description: Number of light moduli.

ncf

Description: Conifold degree \(n_{\text{cf}}\), sourced from self.model.lcs_tree.conifold.ncf (single source of truth).

DW_light(z_light, z_light_c, tau, tau_c, fluxes, assume_conjugate=False, **kwargs)#

Covariant derivatives \(D_i W\) for the light moduli (+ \(D_\tau W\)) with the conifold modulus on-shell. General basis: project the full \(D_i W\) onto the bulk directions, \(D_a W = D_i W\, \text{bulk\_embedding}^{i}{}_{a}\) (the conifold component \(D_i W\,e_q^i = \partial_{z_{\rm cf}}W \approx 0\) on-shell).

Parameters:
  • z_light (Array) – Complex light (bulk) moduli, length n_light.

  • z_light_c (Array) – Complex conjugate of z_light.

  • tau (complex) – Axio-dilaton.

  • tau_c (complex) – Complex conjugate of tau.

  • fluxes (Array) – Full flux vector.

  • assume_conjugate (bool) – Reuse \(\overline{z_{\rm full}}\) instead of a second heavy solve – evaluation only, see the warning on Freezer.DW_light(). Defaults to False.

  • **kwargs – Forwarded to reconstruct_full_moduli() / solve_heavy().

Returns:
  • Array – Complex vector [D_a W (light moduli), D_tau W] of length

  • ``n_light + 1``.

DW_x_light(x_light, fluxes, **kwargs)#

Gradient of the superpotential \(\partial_{x^a} W\) in real coordinates for the light moduli, with heavy moduli on-shell.

This is the analogue of model.DW_x but restricted to the light degrees of freedom.

Parameters:
  • x_light (Array) – Real variables for light moduli and axio-dilaton.

  • fluxes (Array) – Full flux vector.

Returns:

Array – Real gradient restricted to light directions.

Return type:

Array

G_x_light(x_light, fluxes, x_full=None, method='pullback', **kwargs)#

Reduced Kähler metric of the light fields in the real interleaved basis, obtained by integrating out the heavy moduli at the level of the Kähler potential.

Parameters:
  • x_light (Array) – Real coordinates for light moduli and axio-dilaton.

  • fluxes (Array) – Full flux vector.

  • x_full (Optional[Array]) – Full real point with the heavy moduli on-shell (see full_real_point()). Supplying it skips the heavy solve entirely; "autodiff" ignores it, since it must differentiate through that solve.

  • method (str) – "pullback" (default, first-order) or "autodiff" (the through-the-solve reference).

  • **kwargs – Forwarded to the heavy solve / K_x_light().

Returns:
  • Array – Reduced Kähler metric in the real interleaved basis, of shape

  • `` (2 * n_light + 2, 2 * n_light + 2)

Raises:

ValueError – If method is not one of {"pullback", "autodiff"}.

Return type:

Array

K_x_light(x_light, fluxes, **kwargs)#

Real Kähler potential \(\mathrm{Re}\,K\) evaluated at the light-field coordinates, with the heavy moduli integrated out on-shell.

Parameters:
  • x_light (Array) – Real coordinates for light moduli and axio-dilaton.

  • fluxes (Array) – Full flux vector.

Returns:

float\(\mathrm{Re}\,K(z_{\rm heavy}^\ast(\phi), \phi)\).

Return type:

float

V_x_light(x_light, fluxes, noscale=True, **kwargs)#

Scalar potential \(V\) evaluated at the light-field coordinates, with heavy moduli on-shell.

Parameters:
  • x_light (Array) – Real coordinates for light moduli and axio-dilaton.

  • fluxes (Array) – Full flux vector.

  • noscale (bool) – If True, uses the no-scale scalar potential \(V = e^K K^{I\bar J} D_I W D_{\bar J}\bar W\). Defaults to True.

Returns:

float – Value of \(V\) with heavy moduli at their on-shell values.

Return type:

float

bulk_mass_spectrum(x_light, fluxes, **kwargs)#

Bulk mass spectrum of a coniLCS vacuum with the conifold modulus integrated out. Identical to light_mass_spectrum() (here the “bulk” fields are the base-class “light” fields); the alias provides the conifold/throat vocabulary used in the literature. The on-shell apply_correction=True z_cf-solve default is applied.

Parameters:
  • x_light (Array) – Real bulk-field coordinates (moduli + axio-dilaton).

  • fluxes (Array) – Full flux vector.

  • **kwargs – Forwarded to light_mass_spectrum() (reduction, dw_tol, x_full, eig_backend, …).

Returns:
  • LightSpectrum – The reduced bulk-field spectrum with its stability

  • diagnostics.

Return type:

LightSpectrum

dDW_x_light(x_light, fluxes, **kwargs)#

Hessian \(\partial_{x^a}\partial_{x^b} W\) in real coordinates for the light moduli.

Parameters:
  • x_light (Array) – Real variables for light moduli and axio-dilaton.

  • fluxes (Array) – Full flux vector.

Returns:

Array – Hessian restricted to light directions.

Return type:

Array

dV_x_light(x_light, fluxes, noscale=True, **kwargs)#

Gradient of the scalar potential \(\nabla_\phi V\) with respect to the real light-field coordinates, with heavy moduli on-shell.

Parameters:
  • x_light (Array) – Real coordinates for light moduli and axio-dilaton.

  • fluxes (Array) – Full flux vector.

  • noscale (bool) – If True, uses the no-scale scalar potential. Defaults to True.

Returns:
  • Array – Gradient \(\partial_{\phi^\alpha} V\), restricted to

  • light directions, of shape `` (2 * n_light + 2,)

Return type:

Array

ddV_x_light(x_light, fluxes, noscale=True, reduction='frozen', x_full=None, **kwargs)#

Reduced Hessian of the scalar potential \(\partial_{\phi^\alpha}\partial_{\phi^\beta} V\) with respect to the real light-field coordinates, with the heavy moduli on-shell.

Warning

reduction="frozen" omits the integrate-out back-reaction \(-H_{\ell h} H_{hh}^{-1} H_{h\ell}\), which can dominate (or flip the sign of) the lightest light mass in a conifold throat. It equals "autodiff" only for LCS in mode="ansatz" (the linear ansatz map, where \(\partial^2 x_{\rm full}/\partial\phi^2 = 0\)); in mode="eom" it keeps the constant ansatz tangent at the on-shell point, so on an exponentially small mass it can be \(O(10^2)\) off. For any vacuum mass prefer reduction="tangent" (fast + exact) or "autodiff" (robust off-shell); "schur" computes the V-minimum reduction (right for a genuinely heavy modulus, but off the racetrack mass for a PFV) and also loses precision when the heavy/light hierarchy is large. Note light_mass_spectrum() pairs the frozen Hessian with the substituted reduced metric, so its eigenvalues are a hybrid (a no-back-reaction Hessian against a with-back-reaction metric), not the naive frozen masses.

Parameters:
  • x_light (Array) – Real coordinates for light moduli and axio-dilaton.

  • fluxes (Array) – Full flux vector.

  • noscale (bool) – If True, uses the no-scale scalar potential. Defaults to True.

  • reduction (str) – Reduction scheme, one of {"frozen", "schur", "autodiff", "tangent"}. Defaults to "frozen" (the backwards-compatible leading-order block; note light_mass_spectrum() resolves its own, per-class default instead). For a mass at a vacuum "tangent" is the fast + exact choice; "schur" gives the V-minimum reduction (right for a genuinely heavy modulus, not for a PFV flat direction). Distinct from the mode keyword (forwarded via **kwargs to the heavy solve).

  • x_full (Optional[Array]) – Full real point at which to evaluate the Hessian for "frozen"/"schur" (e.g. the stored vacuum, with the heavy field on-shell). If None (default) the heavy field is reconstructed from the analytic solve via _real_light_to_full(). Ignored by "autodiff" (which differentiates through the solve).

Returns:
  • Array – Reduced Hessian restricted to light directions, of shape

  • `` (2 * n_light + 2, 2 * n_light + 2)

Return type:

Array

full_real_point(x_light, fluxes, **kwargs)#

Full real coordinate vector with the heavy moduli on-shell – the value accepted by the x_full argument of ddV_x_light() and light_mass_spectrum().

Parameters:
  • x_light (Array) – Real coordinates for light moduli and axio-dilaton.

  • fluxes (Array) – Full flux vector.

  • **kwargs – Forwarded to the heavy solve.

Returns:

Array – Full real coordinate vector of length 2*(h12+1).

Return type:

Array

property heavy_indices: Tuple[int, ...]#

Description: Indices of the heavy (conifold) modulus; always a length-1 tuple.

Returns:

tuple[int, …] – The single conifold-modulus index.

property lcs_tree: Any#

Description: The bound model’s period tree, model.lcs_tree.

A delegating property rather than a stored attribute on purpose. Storing it would (i) duplicate the entire period/GV payload as a second set of traced children in every compiled kernel (freezers are registered pytrees, see _register_freezer_pytree()), and (ii) freeze a snapshot of a mutable object, so an in-place lcs_tree edit would leave the freezer disagreeing with its own model.

Returns:

Any – The model’s lcs_tree.

property light_indices: Tuple[int, ...]#

Description: Indices of the light moduli (complement of heavy_indices).

Returns:

tuple[int, …] – The light-modulus indices.

light_mass_spectrum(x_light, fluxes, **kwargs)#

Conifold-aware override of Freezer.light_mass_spectrum(): defaults the z_cf solve to apply_correction=True (the Kähler-covariant correction needed for the analytic seed to reproduce the stored vacuum), then defers to the base implementation.

Parameters:
  • x_light (Array) – Real light-field coordinates (moduli + axio-dilaton).

  • fluxes (Array) – Full flux vector.

  • **kwargs – Forwarded to Freezer.light_mass_spectrum() (reduction, noscale, dw_tol, x_full, eig_backend, …); apply_correction defaults to True.

Returns:
  • LightSpectrum – The reduced light-field spectrum with its stability

  • diagnostics.

Return type:

LightSpectrum

property n_heavy: int#

Description: Number of heavy moduli.

Returns:

int – The number of heavy moduli.

property n_light: int#

Description: Number of light moduli.

Returns:

int – The number of light moduli.

property ncf: int#

Description: Conifold degree \(n_{\text{cf}}\), sourced from self.model.lcs_tree.conifold.ncf (single source of truth).

Returns:

int – The conifold degree \(n_{\text{cf}}\).

reconstruct_full_moduli(z_light, tau, fluxes, **kwargs)#

Reconstruct the full modulus vector from the light (bulk) moduli with the conifold modulus on-shell. Aligned: index scatter (base class). General: \(z_{\rm full} = z_{\rm cf}\,e_q + \text{bulk\_embedding}\,z_{\rm light}\).

Parameters:
  • z_light (Array) – Complex light (bulk) moduli, length n_light.

  • tau (complex) – Axio-dilaton.

  • fluxes (Array) – Full flux vector.

  • **kwargs – Forwarded to solve_heavy() (e.g. the z_cf solve mode and apply_correction).

Returns:
  • Array – Full complex modulus vector of length h12 with

  • :math:`z_{rm cf}` on-shell.

solve_heavy(z_light, tau, fluxes, conj=False, mode='manual', apply_correction=False)#

Solve for \(z_{\text{cf}}\) from its leading-order EOM by delegating to jaxvacua.conifold.zcf_solver.compute_zcf() (the unified complex-coord dispatcher attached to the model).

Parameters:
  • z_light (Array) – Bulk (light) moduli values.

  • tau (complex) – Axio-dilaton.

  • fluxes (Array) – Full flux vector.

  • conj (bool) – Conjugate conventions. Defaults to False.

  • mode (str) – One of {"manual", "autodiff", "pfv"}. Routes through model.W_log_coeff(..., mode=mode). Defaults to "manual" (closed-form kappa / a_matrix / b_vector + Li assembly).

  • apply_correction (bool) – If True, add the Kähler-covariant correction log_coeff_K_corr to the log coefficient before exponentiating. Defaults to False.

Returns:

Array – Value of \(z_{\text{cf}}\) (length-1 array).

Return type:

Array

superpotential(z_light, tau, fluxes, **kwargs)#

Superpotential of the reduced theory.

Parameters:
  • z_light (Array) – Light moduli values.

  • tau (complex) – Axio-dilaton.

  • fluxes (Array) – Full flux vector.

Returns:

complex\(W(z_{\text{light}}, \tau)\) with heavy moduli on-shell.

Return type:

complex