Skip to main content

feynlag

Tree-level Feynman rules from Beyond-Standard-Model Lagrangians, in pure SymPy.

You declare particle fields with their gauge and discrete-symmetry representations, write the Lagrangian explicitly with library building blocks (Dmu, dag, Bilinear), and feynlag takes it from there:

  • gauge / discrete invariance and hermiticity checks,
  • electroweak symmetry breaking: VEV expansion, tadpole conditions,
  • mass-matrix extraction and diagonalization (orthogonal, unitary, SVD for Dirac fermions, Takagi for Majorana),
  • rotation from the weak basis to the physical (mass) basis,
  • vertex extraction (SSS, SSSS, VSS, VVS, VVSS, VVV, VVVV, FFS, FFV, plus four-fermion and Majorana/Weinberg operators) with derivative couplings taken to momentum space,
  • model consistency in one call (Model.validate()): invariance, hermiticity, anomaly cancellation, charge conservation,
  • export: LaTeX vertex tables and UFO (MadGraph et al.),
  • phenomenology (feynlag.pheno): decay widths and branching ratios (tree-level 1→2, off-shell h→WW*/ZZ*, loop-induced h→gg/γγ/Zγ) and tree-level 2→2 cross sections with forward–backward asymmetries.

Parameters are split into external (fixed by experiment, e.g. v, m_h, g) and internal (derived: tadpole solutions, mixing angles, inverted quartics), forming a dependency chain that closes the UFO parameter card.

Documentation

Full docs, including an Algorithms Manual deriving the physics and design of every pipeline stage (invariance checking, EWSB/tadpoles, mass matrices, diagonalization, vertex extraction, export), tutorial notebooks, an examples gallery, and the API reference: https://moiseszeleny.github.io/feynlag/

Install

pip install feynlag            # add [numeric] for SciPy-backed integration

For development:

pip install -e .[dev]
pytest

Quick tour

import sympy as sp
from feynlag import (ExternalParameter, InternalParameter, SU2, U1, Scalar,
                     Lagrangian, Model, Dmu, dag)

gw  = ExternalParameter("gw", 0.6535, positive=True)
g1  = ExternalParameter("g1", 0.3580, positive=True)
SU2L, U1Y = SU2("SU2L", coupling=gw), U1("U1Y", coupling=g1)

v   = ExternalParameter("v", 246.0, positive=True, unit_dim=1)
lam = ExternalParameter("lam", 0.129)
mu2 = InternalParameter("mu2", unit_dim=2)      # defined by the tadpole

H = Scalar("H", reps={SU2L: 2, U1Y: sp.Rational(1, 2)},
           component_names=["Gp", "H0"])
H.expand_vev({H.components[1]: v})              # H0 -> (v + h + i G0)/√2

HdH = (dag(H) * H.mat)[0]
DH  = Dmu(H)
L = Lagrangian()
L.add((dag(DH) * DH)[0], sector="kinetic")
L.add(mu2.s * HdH - lam.s * HdH**2, sector="potential")

m = Model("SM", gauge_groups=[SU2L, U1Y],
          fields=[H, SU2L.bosons("W"), U1Y.bosons("B")],
          parameters=[gw, g1, v, lam, mu2], lagrangian=L)

m.check_invariance()          # gauge invariance, hermiticity, dim ≤ 4
m.solve_tadpoles([mu2])       # {mu2: lam v²}, registered as internal

h = sp.Symbol("H0_r", real=True)
m.mass_matrix([h])            # Matrix([[2 lam v²]])
m.feynman_rules([h])          # {(h,h,h): -6i lam v, (h,h,h,h): -6i lam}

See examples/ for full runs: sm_scalar_gauge.py (complete SM: Higgs + electroweak gauge + leptons + quark/QCD sector), sm_vll.py (SM + a vector-like lepton doublet, biunitary mass-matrix diagonalization), sm_u1x.py (SM × U(1)_X with a Z′, symbolic charges, chained rotations), thdm.py (2HDM with the α rotation), thdm_s3.py (3HDM+S₃, where the tadpole conditions force the √3 vacuum alignment), sm_ckm.py (CKM quark mixing), fermi_theory.py (four-fermion muon decay), sm_weinberg.py and sm_seesaw.py (Majorana neutrino masses), sm_decays.py and sm_higgs_decays.py (widths and the full Higgs branching-ratio table), and ee_to_ff.py (2→2 scattering). The docs site walks these models stage by stage in ten executed tutorial notebooks.

Validation

The test suite pins the physics, not just the code (dual verification: symbolic difference and random-point numeric checks):

  • SM Higgs: μ² = λv², m_h² = 2λv², h³ = −3i m_h²/v, h⁴ = −3i m_h²/v²
  • SM gauge: m_W = gv/2, Weinberg rotation, hWW = i g m_W g^{μν}, γW⁺W⁻ = e, ZW⁺W⁻ = g cosθ_W, scalar-QED Goldstone vertices
  • SM leptons: hℓℓ = −i m_ℓ/v, Wℓν = i g/√2 γ^μ P_L, Z couplings ∝ T³ − Q sin²θ_W
  • 2HDM: tadpoles, all three mass matrices and rotation angles vs the Gunion–Haber/Branco expressions
  • 3HDM+S₃: invariant potential from the library's CG products; the tadpole system forces the √3 alignment
  • UFO: generated model imports cleanly; parameters resolve in dependency order; hWW coupling pinned numerically

Status / roadmap

feynlag 0.1 is a beta: the tree-level pipeline above is complete and tested (400+ tests pinning physical results), and the exported SM UFO is cross-checked against MadGraph (e+e-→μ+μ- and the gauge-cancelling e+e-→W+W- reproduce the stock sm cross sections to MC precision, and a four-fermion UFO reproduces the muon width — see docs/benchmark.md).

Known limitations (planned, see docs/roadmap.md):

  • no R_ξ gauge fixing or ghosts (Goldstone bosons are kept, but no gauge-fixing terms, ghost vertices or ξ dependence);
  • Majorana vertices are symbolic-only, not yet exported to UFO;
  • 2→2 scattering handles single-diagram processes only (no interference yet), and VVV decays are not implemented;
  • no NLO / UFO 2.0 extensions.

Unsupported cases raise NotImplementedError rather than returning a plausible-looking wrong answer.

License

MIT — see LICENSE.

Metadata

Release files for feynlag 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for feynlag 0.3.0
File Size Uploaded
feynlag-0.3.0.tar.gz 167.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for feynlag 0.3.0
File Interpreter ABI Platform
feynlag-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 357.1 kB

Release files / feynlag-0.3.0.tar.gz

Download URL feynlag-0.3.0.tar.gz
Size 167.9 kB
Tags Source
SHA-256 checksum
How to use checksums
272136525fb85045c065ededae54533c161b88b999ea331b168daa8889088f25
BLAKE2b-256 checksum
How to use checksums
f2e91a24d12165f89cfada81a1eb98b590c69874deb56ceea15d4e842e50fda7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.

Transparency log

Release files / feynlag-0.3.0-py3-none-any.whl

Download URL feynlag-0.3.0-py3-none-any.whl
Size 189.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cf2ddd5f84bbef905c0dc3a397411f5b4a5c66630310d6c87eb0cc69bf0c96f3
BLAKE2b-256 checksum
How to use checksums
44f31b413f0dd33eb469c518ea6eff189f551df4ad60bd4a578e10e5fdf73f4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page