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.

Release files for feynlag 0.1.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.1.0
File Size Uploaded
feynlag-0.1.0.tar.gz 158.6 kB Details

Built distribution (wheel)

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

Total release size: 339.3 kB

Release files / feynlag-0.1.0.tar.gz

Download URL feynlag-0.1.0.tar.gz
Size 158.6 kB
Tags Source
SHA-256 checksum
How to use checksums
1697c2af700d3cd3b4a0a6a3a7b2c20831aad100bac12f210b2c8227763f1fc3
BLAKE2b-256 checksum
How to use checksums
2333e297c9fa16e8551d8a663420d4be0559d05b3b11e552d345c0107e541f64
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 25, 2026.

Transparency log

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

Download URL feynlag-0.1.0-py3-none-any.whl
Size 180.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5bd674dec3069972069725e321ab31af8a7e10d78e9876e28296f315665b7023
BLAKE2b-256 checksum
How to use checksums
8199681740ad060cd9e3536629ecdd6ebb2596ccc04d24456c1d415037f1e4b0
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 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

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