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.2.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.2.0
File Size Uploaded
feynlag-0.2.0.tar.gz 162.9 kB Details

Built distribution (wheel)

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

Total release size: 347.3 kB

Release files / feynlag-0.2.0.tar.gz

Download URL feynlag-0.2.0.tar.gz
Size 162.9 kB
Tags Source
SHA-256 checksum
How to use checksums
e36e037804b31f465dba02af1014cd36a784cc0ad18ebf4f6b767f4517a995ac
BLAKE2b-256 checksum
How to use checksums
4d5ddf08017526c133e88332c2ee30749c6dd53e543eb4989e3621b34fa5ff9b
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 Sep 26, 2026.

Transparency log

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

Download URL feynlag-0.2.0-py3-none-any.whl
Size 184.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4031f50c5550237717f05fb2f53b0839c9e13db7cec724ee01f59394fc08a23d
BLAKE2b-256 checksum
How to use checksums
f010e38d2ba8e3a2e3a951a38d55bc4fc28de6a6092789658823f45e7bb6b2d9
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 Sep 26, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.0

2 release files

This release

0.2.0 This release

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