From 7b6cefc244420c788a926526eec199d88becaa88 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Mon, 7 Sep 2026 12:00:12 +0200 Subject: [PATCH 01/13] DX: add agent configurations to `.gitignore` --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 8858c39..02569c8 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,13 @@ pyvenv*/ .idea/ **.code-workspace +# Agent tooling +.agents/ +.claude/ +.codex/ +AGENTS.md +CLAUDE.md + # Exceptions !.cspell.json !.github/*.yml From 7e2aafa6d30b2a6ef35a3ce5d87a20cad099272b Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Tue, 8 Sep 2026 11:47:46 +0200 Subject: [PATCH 02/13] DOC: add D+ to pi+ pi+ pi- example --- docs/036/index.ipynb | 625 ++++++++++++++++++++++++ docs/036/pyproject.toml | 14 + docs/036/uv.lock | 1005 +++++++++++++++++++++++++++++++++++++++ docs/bibliography.bib | 28 ++ 4 files changed, 1672 insertions(+) create mode 100644 docs/036/index.ipynb create mode 100644 docs/036/pyproject.toml create mode 100644 docs/036/uv.lock diff --git a/docs/036/index.ipynb b/docs/036/index.ipynb new file mode 100644 index 0000000..c953f5e --- /dev/null +++ b/docs/036/index.ipynb @@ -0,0 +1,625 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "::::{margin}\n", + ":::{card} Bose-symmetric charm Dalitz model\n", + "TR-036\n", + "^^^\n", + "Formulate an illustrative $D^+\\to\\pi^+\\pi^+\\pi^-$ amplitude with QRules and AmpForm-DPD, display its formulas, and evaluate a Dalitz density with TensorWaves.\n", + ":::\n", + "::::" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# $D^+\\to\\pi^+\\pi^+\\pi^-$ with Dalitz-plot decomposition\n", + "\n", + "This report demonstrates a Bose-symmetric isobar model for $D^+\\to\\pi^+\\pi^+\\pi^-$ using [QRules](https://qrules.readthedocs.io/stable/) for transition generation, [AmpForm-DPD](https://ampform-dpd.readthedocs.io/stable/) for symbolic helicity amplitudes, and [TensorWaves](https://tensorwaves.readthedocs.io/) for numerical evaluation. The amplitude is checked for Bose symmetry and used to plot an illustrative Dalitz density.\n", + "\n", + "The resonance content follows two published analyses:\n", + "\n", + "- CLEO {cite}`CLEO:2007-DalitzThreePions`, Table II: $\\rho(770)$, $f_2(1270)$, $f_0(980)$, $f_0(1370)$, $f_0(1500)$, and a low-mass $\\sigma$ component, represented here by $f_0(500)$.\n", + "- LHCb {cite}`LHCb:2023-DalitzThreePions`, Table 2: also includes $\\omega(782)$, $\\rho(1450)$, and $\\rho(1700)$. Its S wave is determined with a quasi-model-independent parametrization, rather than separate scalar isobars. States tested without significant improvement, such as $\\rho_3(1690)$, are not included here.\n", + "\n", + "This nine-resonance example combines CLEO's scalar-isobar content with the additional LHCb vector states. It retains the package Breit–Wigner dynamics, masses, widths, and radii. CLEO instead uses a complex $\\sigma$ pole and a Flatté function for $f_0(980)$; LHCb uses Gounaris–Sakurai functions for the $\\rho$ states. The S wave, especially near the $K\\bar K$ threshold, therefore remains an approximation. The source fit-fraction ratios set the relative component strengths below; the result is a literature-informed illustration, not a reproduction of either fit. No CP violation is assumed.\n", + "\n", + "## Generate the decay chains\n", + "\n", + "Label $D^+$ by 0 and $(\\pi^+_1,\\pi^+_2,\\pi^-_3)$ by $(1,2,3)$. The charm decay is weak, so imposing strong-interaction conservation on the entire chain would incorrectly forbid it. We allow weak interactions in QRules; the selected neutral resonances also have strong-decay-compatible $J^P$ for their two-pion daughters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "mystnb": { + "code_prompt_show": "Import Python libraries and report package versions" + }, + "tags": [ + "hide-input", + "scroll-input" + ] + }, + "outputs": [], + "source": [ + "import logging\n", + "from importlib.metadata import version\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import qrules\n", + "import sympy as sp\n", + "from ampform.dynamics import EnergyDependentWidth\n", + "from ampform.dynamics.form_factor import BlattWeisskopfSquared, FormFactor\n", + "from ampform.io import aslatex\n", + "from ampform.kinematics.phasespace import BreakupMomentumSquared, Kallen\n", + "from ampform_dpd import DalitzPlotDecompositionBuilder\n", + "from ampform_dpd.adapter.qrules import normalize_state_ids, to_three_body_decay\n", + "from ampform_dpd.dynamics import RelativisticBreitWigner\n", + "from ampform_dpd.dynamics.builder import formulate_breit_wigner_with_form_factor\n", + "from ampform_dpd.io import as_markdown_table\n", + "from IPython.display import Markdown, Math\n", + "from matplotlib.colors import LogNorm\n", + "from sympy.physics.quantum.spin import Rotation as Wigner\n", + "from tensorwaves.function.sympy import create_function, create_parametrized_function\n", + "\n", + "logging.getLogger(\"qrules\").setLevel(logging.ERROR)\n", + "for package in (\"qrules\", \"ampform-dpd\", \"tensorwaves\"):\n", + " print(f\"{package}: {version(package)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "mystnb": { + "code_prompt_show": "Generate decay chains and display the resonance table" + }, + "tags": [ + "hide-input", + "scroll-input" + ] + }, + "outputs": [], + "source": [ + "# Central values: (fit fraction in %, phase in degrees, source).\n", + "# CLEO Table II; the three additional vectors use LHCb Table 2.\n", + "literature = {\n", + " \"rho(770)0\": (20.0, 0.0, \"CLEO\"),\n", + " \"f(0)(500)\": (41.8, -3.0, \"CLEO\"),\n", + " \"f(0)(980)\": (4.1, 12.0, \"CLEO\"),\n", + " \"f(2)(1270)\": (18.2, -123.0, \"CLEO\"),\n", + " \"f(0)(1370)\": (2.6, -21.0, \"CLEO\"),\n", + " \"f(0)(1500)\": (3.4, -44.0, \"CLEO\"),\n", + " \"omega(782)\": (0.103, -103.3, \"LHCb\"),\n", + " \"rho(1450)0\": (5.4, 47.0, \"LHCb\"),\n", + " \"rho(1700)0\": (5.7, -65.7, \"LHCb\"),\n", + "}\n", + "reference_fractions = {\"CLEO\": 20.0, \"LHCb\": 26.0}\n", + "resonance_names = list(literature)\n", + "reaction = qrules.generate_transitions(\n", + " initial_state=\"D+\",\n", + " final_state=[\"pi+\", \"pi+\", \"pi-\"],\n", + " allowed_intermediate_particles=resonance_names,\n", + " allowed_interaction_types=[\"weak\"],\n", + " formalism=\"canonical-helicity\",\n", + " number_of_threads=1,\n", + ")\n", + "reaction = normalize_state_ids(reaction)\n", + "decay = to_three_body_decay(reaction.transitions, min_ls=True)\n", + "assert [decay.states[i].name for i in range(4)] == [\"D+\", \"pi+\", \"pi+\", \"pi-\"]\n", + "assert {chain.resonance.name for chain in decay.chains} == set(resonance_names)\n", + "resonances = {chain.resonance.name: chain.resonance for chain in decay.chains}\n", + "Markdown(as_markdown_table(decay))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formulate and display the model\n", + "\n", + "Define\n", + "\n", + "$$s=\\sigma_1=(p_2+p_3)^2,\\qquad t=\\sigma_2=(p_1+p_3)^2,\\qquad u=\\sigma_3=(p_1+p_2)^2,$$\n", + "\n", + "The invariant relation, scattering angle, and dynamics definitions below are rendered from the model and package expression objects. All external spins are zero, so the Wigner functions reduce to Legendre polynomials.\n", + "\n", + "The dynamics factor $X_R$ is the product of the resonance lineshape and the production and decay form factors. $B_J^2$ is AmpForm's normalized Blatt–Weisskopf function, with $B_J^2(1)=1$. Both radii retain the package default of $1\\,\\mathrm{GeV}^{-1}$. Angular momentum requires $L_\\mathrm{production}=L_\\mathrm{decay}=J_R$; `canonical-helicity` supplies these orbital angular momenta to the dynamics builder.\n", + "\n", + "The installed AmpForm-DPD v0.2.4 builder passes $s^2$ to the decay form factor and the pole mass $m_R$ as a production daughter mass. The correction below replaces these arguments by $s$ and $\\sqrt{s}$, respectively. The Breit–Wigner, running width, and form-factor implementations remain those of the packages.\n", + "\n", + "The **Bose-symmetric amplitude and intensity** are\n", + "\n", + "$$\\mathcal A(s,t)=\\sum_R c_R\\left[X_R(s)P_{J_R}(z(s,t))+X_R(t)P_{J_R}(z(t,s))\\right],\\qquad I(s,t)=|\\mathcal A(s,t)|^2,$$\n", + "\n", + "AmpForm's `HelicityAmplitudeBuilder` includes identical-particle symmetrization automatically; the fix for this channel was released in v0.15.9 (see the [accepted answer in discussion #475](https://github.com/ComPWA/ampform/discussions/475)). This report uses `DalitzPlotDecompositionBuilder` from AmpForm-DPD instead.\n", + "\n", + "In AmpForm-DPD v0.2.4, `permute_equal_final_states` generates both particle assignments, but their helicity couplings must account for the daughter-order convention. Writing $z(s,t)=\\cos\\theta_{23}$, for equal pion masses the generated angles satisfy $\\cos\\theta_{31}(s,t)=-z(t,s)$. Consequently, $P_J(-z)=(-1)^J P_J(z)$ introduces a relative minus sign for the P wave if the two subsystems are summed with unchanged helicity couplings. Here we formulate subsystem 1 and explicitly exchange $s\\leftrightarrow t$ in its amplitude, retaining the same complex coefficient and daughter convention. The complex-amplitude symmetry check below verifies this construction.\n", + "\n", + "An overall $1/\\sqrt{2!}$ amplitude convention is absorbed into normalization. The plot covers the full labelled Dalitz domain; integration for an absolute identical-particle rate requires the corresponding $1/2!$ phase-space factor." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "full-width", + "scroll-output" + ] + }, + "outputs": [], + "source": [ + "s, t, u = sp.symbols(\"sigma1:4\", nonnegative=True)\n", + "m0, m1, m2, m3 = sp.symbols(\"m:4\", nonnegative=True)\n", + "\n", + "builder = DalitzPlotDecompositionBuilder(decay)\n", + "for name in resonance_names:\n", + " builder.dynamics_choices.register_builder(\n", + " name, formulate_breit_wigner_with_form_factor\n", + " )\n", + "model = builder.formulate(cleanup_summations=True, use_coefficients=True)\n", + "assert len(model.amplitudes) == 1\n", + "\n", + "# Correct form-factor kinematics in AmpForm-DPD v0.2.4.\n", + "form_factor_corrections = {}\n", + "for expression in model.amplitudes.values():\n", + " for ff in expression.atoms(FormFactor):\n", + " if ff.s == s**2:\n", + " form_factor_corrections[ff] = FormFactor(\n", + " s, ff.m1, ff.m2, ff.angular_momentum, ff.meson_radius\n", + " )\n", + " elif ff.s == m0**2:\n", + " form_factor_corrections[ff] = FormFactor(\n", + " m0**2, sp.sqrt(s), ff.m2, ff.angular_momentum, ff.meson_radius\n", + " )\n", + "model.amplitudes.update({\n", + " symbol: expression.xreplace(form_factor_corrections)\n", + " for symbol, expression in model.amplitudes.items()\n", + "})\n", + "Math(aslatex(model.amplitudes, terms_per_line=1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The kinematic definitions and spin factors are" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "mystnb": { + "code_prompt_show": "Render the model kinematics and Wigner functions" + }, + "tags": [ + "hide-input", + "scroll-input" + ] + }, + "outputs": [], + "source": [ + "x, y, z = sp.symbols(\"x y z\", real=True)\n", + "kinematic_definitions = {\n", + " u: model.invariants[u],\n", + " Kallen(x, y, z): Kallen(x, y, z).doit(),\n", + " **{\n", + " symbol: expression\n", + " for symbol, expression in model.variables.items()\n", + " if str(symbol).startswith(\"theta\")\n", + " },\n", + "}\n", + "for spin in sorted({resonance.spin for resonance in resonances.values()}):\n", + " wigner_d = Wigner.d(spin, 0, 0, sp.acos(z))\n", + " kinematic_definitions[wigner_d] = sp.expand_trig(wigner_d.doit()).simplify()\n", + "Math(aslatex(kinematic_definitions))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The tensor-wave lineshape illustrates the package dynamics. Each definition is obtained by evaluating one layer of its expression object; the barrier factors are shown for all three spins." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "mystnb": { + "code_prompt_show": "Render the Breit–Wigner, running width, and form factors" + }, + "tags": [ + "hide-input", + "scroll-input" + ] + }, + "outputs": [], + "source": [ + "# Use the model's tensor resonance to illustrate each layer of the dynamics.\n", + "tensor_chain = next(chain for chain in decay.chains if chain.resonance.spin == 2)\n", + "dynamics_expression, _ = formulate_breit_wigner_with_form_factor(tensor_chain)\n", + "dynamics_expression = dynamics_expression.xreplace(form_factor_corrections)\n", + "dynamics_definitions = {\n", + " sp.Function(f\"X_{{{tensor_chain.resonance.latex}}}\")(s): dynamics_expression,\n", + "}\n", + "line_shape = next(\n", + " expression\n", + " for amplitude_expression in model.amplitudes.values()\n", + " for expression in amplitude_expression.atoms(RelativisticBreitWigner)\n", + " if expression.angular_momentum == 2\n", + ")\n", + "width = next(iter(line_shape.doit(deep=False).atoms(EnergyDependentWidth)))\n", + "form_factor = FormFactor(\n", + " width.s, width.m_a, width.m_b, width.angular_momentum, width.meson_radius\n", + ")\n", + "breakup_momentum_squared = BreakupMomentumSquared(width.s, width.m_a, width.m_b)\n", + "expressions = [line_shape, width, form_factor, breakup_momentum_squared]\n", + "expressions += [BlattWeisskopfSquared(z, spin) for spin in (0, 1, 2)]\n", + "dynamics_definitions.update({\n", + " expression: expression.doit(deep=False) for expression in expressions\n", + "})\n", + "Math(aslatex(dynamics_definitions))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Retain the package coefficient names; set their numerical values below.\n", + "couplings = {\n", + " symbol: value\n", + " for symbol, value in model.parameter_defaults.items()\n", + " if isinstance(symbol, sp.Indexed)\n", + "}\n", + "fixed_parameters = {\n", + " symbol: value\n", + " for symbol, value in model.parameter_defaults.items()\n", + " if symbol not in couplings\n", + "}\n", + "\n", + "subamplitude = next(iter(model.amplitudes.values())).doit()\n", + "subamplitude = subamplitude.xreplace(model.variables).doit()\n", + "subamplitude = subamplitude.subs(u, model.invariants[u])\n", + "subamplitude = subamplitude.xreplace(fixed_parameters)\n", + "# Preserve the daughter convention when exchanging the identical pions.\n", + "amplitude = subamplitude + subamplitude.xreplace({s: t, t: s})\n", + "intensity = sp.Abs(amplitude) ** 2\n", + "intensity_function = create_parametrized_function(intensity, couplings, backend=\"numpy\")\n", + "amplitude_function = create_parametrized_function(amplitude, couplings, backend=\"numpy\")\n", + "\n", + "M = decay.states[0].mass\n", + "mpi = decay.states[1].mass\n", + "sigma_sum = M**2 + 3 * mpi**2\n", + "\n", + "coefficient_symbols = {\n", + " name: next(symbol for symbol in couplings if resonance.latex in str(symbol))\n", + " for name, resonance in resonances.items()\n", + "}\n", + "assert len(set(coefficient_symbols.values())) == len(resonance_names)\n", + "component_functions = {\n", + " name: create_function(amplitude.diff(symbol), backend=\"numpy\")\n", + " for name, symbol in coefficient_symbols.items()\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Physical Dalitz domain and numerical checks\n", + "\n", + "For a scalar parent, three-body phase space is constant in $ds\\,dt$ inside the kinematic boundary. Thus $I(s,t)$ is proportional to the Dalitz density without an additional momentum weight. The bounds below are rendered from the same symbolic expressions used for numerical evaluation.\n", + "\n", + "We evaluate only interior points, where scattering angles are defined. The checks below verify the corrected form-factor arguments, Bose symmetry of the **complex amplitude**, and finite nonnegative intensity. An intensity-only symmetry check would miss an antisymmetric amplitude." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "mystnb": { + "code_prompt_show": "Define Dalitz boundaries and validate the amplitude" + }, + "tags": [ + "hide-input", + "scroll-input" + ] + }, + "outputs": [], + "source": [ + "# Verify that both vertices use the running invariant mass.\n", + "for expression in model.amplitudes.values():\n", + " for ff in expression.atoms(FormFactor):\n", + " assert ff.s in {s, m0**2}\n", + " if ff.s == m0**2:\n", + " assert ff.m1 == sp.sqrt(s)\n", + "\n", + "# Define the equal-pion-mass boundary once, for rendering and evaluation.\n", + "pion_masses = {m2: m1, m3: m1}\n", + "center = ((model.invariants[u] + t) / 2).xreplace(pion_masses)\n", + "half_width = sp.sqrt(Kallen(s, m1**2, m1**2) * Kallen(m0**2, s, m1**2)) / (2 * s)\n", + "boundary_expressions = {\n", + " sp.Function(\"t_-\")(s): center - half_width,\n", + " sp.Function(\"t_+\")(s): center + half_width,\n", + "}\n", + "s_limits = {sp.Symbol(\"s_min\"): 4 * m1**2, sp.Symbol(\"s_max\"): (m0 - m1) ** 2}\n", + "boundary_masses = {m0: M, m1: mpi}\n", + "boundary_function = sp.lambdify(\n", + " s,\n", + " [\n", + " expression.xreplace(boundary_masses).doit()\n", + " for expression in boundary_expressions.values()\n", + " ],\n", + " \"numpy\",\n", + ")\n", + "\n", + "\n", + "def dalitz_limits(s_values):\n", + " # Keep square roots away from round-off at the exact endpoints.\n", + " return boundary_function(np.clip(s_values, lower + 1e-12, upper - 1e-12))\n", + "\n", + "\n", + "lower, upper = (\n", + " float(expression.xreplace(boundary_masses)) for expression in s_limits.values()\n", + ")\n", + "rng = np.random.default_rng(360)\n", + "s_test = rng.uniform(lower + 1e-6, upper - 1e-6, 2000)\n", + "t_min, t_max = dalitz_limits(s_test)\n", + "t_test = t_min + rng.uniform(1e-6, 1 - 1e-6, len(s_test)) * (t_max - t_min)\n", + "test_data = {\"sigma1\": s_test, \"sigma2\": t_test}\n", + "generated = amplitude_function(test_data)\n", + "np.testing.assert_allclose(\n", + " generated,\n", + " amplitude_function({\"sigma1\": t_test, \"sigma2\": s_test}),\n", + " rtol=1e-12,\n", + " atol=1e-12,\n", + ")\n", + "np.testing.assert_allclose(\n", + " intensity_function(test_data),\n", + " np.abs(generated) ** 2,\n", + " rtol=1e-12,\n", + " atol=1e-12,\n", + ")\n", + "assert np.isfinite(intensity_function(test_data)).all()\n", + "assert (intensity_function(test_data) >= 0).all()\n", + "print(f\"Bose symmetry and intensity checks passed at {len(s_test)} physical points.\")\n", + "Math(aslatex(s_limits | boundary_expressions))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Couplings informed by measured component strengths\n", + "\n", + "A coefficient of one has a different meaning for each unnormalized lineshape. Copying published magnitudes would also mix different angular and lineshape normalizations. Instead, let $a_R(s,t)$ be the Bose-symmetrized amplitude with coefficient one, and define\n", + "\n", + "$$N_R=\\int_{\\mathcal D}|a_R(s,t)|^2\\,ds\\,dt,\\qquad\n", + "r_R=\\frac{\\mathrm{FF}_R^{\\mathrm{source}}}{\\mathrm{FF}_{\\rho(770)}^{\\mathrm{source}}}.$$\n", + "\n", + "With $c_{\\rho(770)}=1$, choose\n", + "\n", + "$$c_R=\\sqrt{r_R\\frac{N_{\\rho(770)}}{N_R}}\\,e^{i\\phi_R}.$$\n", + "\n", + "This preserves **ratios of diagonal component integrals**, independently of the overall amplitude normalization. CLEO {cite}`CLEO:2007-DalitzThreePions` supplies the six original components; LHCb {cite}`LHCb:2023-DalitzThreePions` supplies the three additional vectors, using its own $\\rho(770)$ fraction as their reference. These are separate fits, not a combined experimental result. Their central phase values are adopted only as illustrative starting values in the DPD convention: an exact phase transfer would require matching each source's angular signs and dynamical phase conventions. No uncertainty propagation or refit is performed.\n", + "\n", + "The integrals use equal-area cells on the physical Dalitz domain. Comparing 500 and 1000 bins per axis checks numerical stability, including the narrow $\\omega$ band. The displayed model fractions are computed with the **coherent** denominator,\n", + "\n", + "$$\\mathrm{FF}^{\\mathrm{model}}_R=\n", + "\\frac{|c_R|^2N_R}{\\int_{\\mathcal D}|\\sum_k c_k a_k|^2\\,ds\\,dt}.$$\n", + "\n", + "They need not equal the source fractions or sum to one because of interference and the combined resonance content." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "mystnb": { + "code_prompt_show": "Normalize the resonance contributions and set literature-informed couplings" + }, + "tags": [ + "hide-input", + "scroll-input" + ] + }, + "outputs": [], + "source": [ + "def integration_grid(n_bins):\n", + " bin_edges = np.linspace(lower, upper, n_bins + 1)\n", + " bin_centers = (bin_edges[1:] + bin_edges[:-1]) / 2\n", + " grid_s, grid_t = np.meshgrid(bin_centers, bin_centers)\n", + " t_low, t_high = dalitz_limits(grid_s)\n", + " mask = (grid_t > t_low) & (grid_t < t_high)\n", + " data = {\"sigma1\": grid_s[mask], \"sigma2\": grid_t[mask]}\n", + " cell_area = ((upper - lower) / n_bins) ** 2\n", + " return bin_edges, grid_s, grid_t, mask, data, cell_area\n", + "\n", + "\n", + "def component_integrals(data, cell_area):\n", + " return {\n", + " name: float(np.sum(np.abs(function(data)) ** 2) * cell_area)\n", + " for name, function in component_functions.items()\n", + " }\n", + "\n", + "\n", + "*_, coarse_data, coarse_area = integration_grid(500)\n", + "coarse_norms = component_integrals(coarse_data, coarse_area)\n", + "edges, s_grid, t_grid, physical, grid_data, cell_area = integration_grid(1000)\n", + "norms = component_integrals(grid_data, cell_area)\n", + "assert all(np.isfinite(value) and value > 0 for value in norms.values())\n", + "normalization_change = max(abs(coarse_norms[name] / norms[name] - 1) for name in norms)\n", + "assert normalization_change < 0.01\n", + "\n", + "for name, (fraction, phase, source) in literature.items():\n", + " ratio = fraction / reference_fractions[source]\n", + " magnitude = np.sqrt(ratio * norms[\"rho(770)0\"] / norms[name])\n", + " couplings[coefficient_symbols[name]] = magnitude * np.exp(1j * np.deg2rad(phase))\n", + "parameters = {str(symbol): value for symbol, value in couplings.items()}\n", + "intensity_function.update_parameters(parameters)\n", + "amplitude_function.update_parameters(parameters)\n", + "\n", + "# Check the numerical intensity against the sum of the individual complex waves.\n", + "component_sum = sum(\n", + " couplings[coefficient_symbols[name]] * function(test_data)\n", + " for name, function in component_functions.items()\n", + ")\n", + "np.testing.assert_allclose(\n", + " amplitude_function(test_data), component_sum, rtol=1e-11, atol=1e-11\n", + ")\n", + "np.testing.assert_allclose(\n", + " component_sum,\n", + " amplitude_function({\"sigma1\": t_test, \"sigma2\": s_test}),\n", + " rtol=1e-11,\n", + " atol=1e-11,\n", + ")\n", + "coherent_integral = float(np.sum(intensity_function(grid_data)) * cell_area)\n", + "assert np.isfinite(coherent_integral)\n", + "assert coherent_integral > 0\n", + "model_fractions = {\n", + " name: abs(couplings[coefficient_symbols[name]]) ** 2 * norm / coherent_integral\n", + " for name, norm in norms.items()\n", + "}\n", + "for name, (fraction, _, source) in literature.items():\n", + " np.testing.assert_allclose(\n", + " model_fractions[name] / model_fractions[\"rho(770)0\"],\n", + " fraction / reference_fractions[source],\n", + " rtol=1e-12,\n", + " )\n", + "\n", + "rows = [\n", + " r\"| Resonance | Source | Source FF [%] | Starting phase [deg] | $\\lvert c_R\\rvert$ | Model FF [%] |\",\n", + " \"|---|---|---:|---:|---:|---:|\",\n", + "]\n", + "for name, (fraction, phase, source) in literature.items():\n", + " coefficient = couplings[coefficient_symbols[name]]\n", + " rows.append(\n", + " f\"| ${resonances[name].latex}$ | {source} | {fraction:g} | {phase:g} | \"\n", + " f\"{abs(coefficient):.4g} | {100 * model_fractions[name]:.3f} |\"\n", + " )\n", + "rows.extend([\n", + " f\"\\nLargest change in component integrals on grid refinement: {100 * normalization_change:.3f}%.\",\n", + " f\"\\nSum of model fit fractions: {100 * sum(model_fractions.values()):.2f}%.\",\n", + "])\n", + "Markdown(\"\\n\".join(rows))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dalitz plot\n", + "\n", + "The 1000 × 1000 regular grid avoids Monte Carlo fluctuations and resolves the narrow $\\omega(782)$ contribution. The color is the coherent intensity divided by its maximum on this grid, on a logarithmic scale; it is not a normalized probability density or a measured event count. The two axes distinguish the otherwise identical positive pions. Reflection about $s=t$ must leave the density unchanged." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "mystnb": { + "code_prompt_show": "Evaluate and plot the Dalitz density" + }, + "tags": [ + "hide-input", + "scroll-input" + ] + }, + "outputs": [], + "source": [ + "density = np.full(s_grid.shape, np.nan)\n", + "density[physical] = intensity_function(grid_data)\n", + "assert np.isfinite(density[physical]).all()\n", + "assert (density[physical] >= 0).all()\n", + "np.testing.assert_allclose(density, density.T, rtol=1e-10, atol=1e-11, equal_nan=True)\n", + "assert np.nanmax(density) > 0\n", + "relative_density = density / np.nanmax(density)\n", + "\n", + "fig, ax = plt.subplots(figsize=(7.5, 6.3), layout=\"constrained\")\n", + "mesh = ax.pcolormesh(\n", + " edges,\n", + " edges,\n", + " np.ma.masked_invalid(relative_density),\n", + " cmap=\"cividis\",\n", + " norm=LogNorm(vmin=1e-4, vmax=1),\n", + " rasterized=True,\n", + ")\n", + "boundary_s = np.linspace(lower, upper, 1500)\n", + "boundary_low, boundary_high = dalitz_limits(boundary_s)\n", + "ax.plot(boundary_s, boundary_low, color=\"black\", linewidth=0.8)\n", + "ax.plot(boundary_s, boundary_high, color=\"black\", linewidth=0.8)\n", + "ax.plot([lower, upper], [lower, upper], color=\"gray\", linestyle=\":\", linewidth=0.8)\n", + "plot_margin = 0.04 * (upper - lower)\n", + "ax.set(\n", + " xlabel=r\"$s=m^2(\\pi^+_2\\pi^-)$ [GeV$^2$]\",\n", + " ylabel=r\"$t=m^2(\\pi^+_1\\pi^-)$ [GeV$^2$]\",\n", + " title=r\"$D^+\\to\\pi^+\\pi^+\\pi^-$ — literature-informed isobar model\",\n", + " xlim=(lower - plot_margin, upper + plot_margin),\n", + " ylim=(lower - plot_margin, upper + plot_margin),\n", + " aspect=\"equal\",\n", + ")\n", + "fig.colorbar(mesh, ax=ax, label=r\"$I(s,t)/I_{\\mathrm{max}}$\", extend=\"min\")\n", + "fig.savefig(\"dalitz.png\", dpi=180)\n", + "fig.savefig(\"dalitz.svg\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The $\\rho(770)$, $f_0(980)$, and $f_2(1270)$ bands now have strengths informed by measured component ratios. The heavier states contribute broad structures and interference; their presence does not imply separate visible bands. The small $\\omega(782)$ contribution is concentrated near the $\\rho(770)$ band. The intensity remains symmetric under exchange of the positive pions." + ] + } + ], + "metadata": { + "colab": { + "toc_visible": true + }, + "kernelspec": { + "display_name": "Pyproject Local", + "language": "python", + "name": "pyproject_local_kernel" + }, + "language_info": { + "name": "python", + "version": "3.13.15" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/036/pyproject.toml b/docs/036/pyproject.toml new file mode 100644 index 0000000..08c2d1c --- /dev/null +++ b/docs/036/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "technical-report" +version = "0.1.0" +requires-python = "~=3.13.0" +dependencies = [ + "ampform-dpd~=0.2.3", + "ipykernel", + "matplotlib", + "numpy", + "qrules", + "tensorwaves", +] + +[tool.uv.workspace] diff --git a/docs/036/uv.lock b/docs/036/uv.lock new file mode 100644 index 0000000..b676191 --- /dev/null +++ b/docs/036/uv.lock @@ -0,0 +1,1005 @@ +version = 1 +revision = 3 +requires-python = "==3.13.*" + +[[package]] +name = "ampform" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "frozendict" }, + { name = "qrules" }, + { name = "sympy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3b/d2/08eecf35f3a299531ed70d3282597d4c440b5485f74b4b99ad6bb98474cb/ampform-0.16.0.tar.gz", hash = "sha256:c242aea47a53e46fe127f87f79a6038ae533ff3640b6128439b2286a3178c261", size = 413943, upload-time = "2026-02-16T15:42:42.772Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/3e/c5959630b8fbb520d6b82cd686e6bd775b7e6053c67b3ee4c71b22c95983/ampform-0.16.0-py3-none-any.whl", hash = "sha256:55f78106b872d1884f23a9f64c0ee6e08fddf12218c56f7635f1e20e88647f96", size = 89314, upload-time = "2026-02-16T15:42:41.489Z" }, +] + +[[package]] +name = "ampform-dpd" +version = "0.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ampform" }, + { name = "attrs" }, + { name = "cloudpickle" }, + { name = "frozendict" }, + { name = "numpy" }, + { name = "qrules" }, + { name = "sympy" }, + { name = "tensorwaves", extra = ["jax"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/d3/0f7fcb0b69af711560830f4952295832bba0249cd070f6a1db2638f3068a/ampform_dpd-0.2.4.tar.gz", hash = "sha256:b3fa738c5d7715c904df03bdd2c7747a96bb7c8e4167a948e0c3729f475aa7a3", size = 426932, upload-time = "2025-10-27T10:40:41.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/41/fdf5d0b22bf612d1be21734539b50bb231e5de79f776253ca1a5644be812/ampform_dpd-0.2.4-py3-none-any.whl", hash = "sha256:ad762de8ecec1792f6112134bda98686690d810c6cedee293e41c19bc778d475", size = 42665, upload-time = "2025-10-27T10:40:40.817Z" }, +] + +[[package]] +name = "appnope" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/f7/a82489c2b6ebe32d3e2831895ae19c77861f0eadf3bb16034484d965dbb2/appnope-1.0.0.tar.gz", hash = "sha256:685db59cb6043c3c2e528adc0b3bce3a5f8d09bcf7492c6ea650d1b7421f3c49", size = 5454, upload-time = "2026-08-20T21:36:13.748Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/c7/6b687cb0f83d2a51017d47953f2ee430ffad6fec2a8ebc964e0718a33eb1/appnope-1.0.0-py3-none-any.whl", hash = "sha256:6fe0c04218aab65c54c4ff81638cdbf848d89f5653b74d68638a137f200dd16e", size = 4158, upload-time = "2026-08-20T21:36:12.444Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/1e/faf0f247f6f881b98fc4d6d07e14085cb89d13665084e6d6ac1dc2c03d0b/asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2", size = 63136, upload-time = "2026-07-12T03:31:49.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933", size = 28702, upload-time = "2026-07-12T03:31:47.542Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/ef/008a1939e372c06329a3fce4279c02f328488f3526744906eeec3da7ad5f/cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be", size = 530807, upload-time = "2026-08-03T21:21:18.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/f4/035513d4117049066b4779dc3b7c0c0fdad175fa13731c9f4003f1cd1478/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e", size = 194248, upload-time = "2026-08-03T21:19:59.399Z" }, + { url = "https://files.pythonhosted.org/packages/76/af/2aeb4dbb5fc41a04161ae9ff1518de7cec08e164f44a8ce6a4cf7fd2cd1d/cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c", size = 196908, upload-time = "2026-08-03T21:20:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/a7/46/2e5fdde8555706dd98139a910ca11be02809f3f605ce956f655d0214e100/cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6", size = 184805, upload-time = "2026-08-03T21:20:02.02Z" }, + { url = "https://files.pythonhosted.org/packages/55/41/4c7042f317b9217502988f0873af87e16ad606dc20f84e546e3e6ce9764c/cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971", size = 184764, upload-time = "2026-08-03T21:20:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/43/1f/1c3d90d91811c8f86ced9ed637956c54bfe5b79ca98fe976d7f8c8979f6b/cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c", size = 214722, upload-time = "2026-08-03T21:20:04.377Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/3b5ce4c3b2192d250f04908f2bfd91ef34552ec8f7716a5d4abdb8d67bb2/cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125", size = 222369, upload-time = "2026-08-03T21:20:05.544Z" }, + { url = "https://files.pythonhosted.org/packages/02/10/4b3c75dde3d9663c9e02ba05c2668b954f671d4bbe346413ca8c696b295a/cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264", size = 210175, upload-time = "2026-08-03T21:20:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/df/62/14f74b9543e605d17701dc797b815958b8bb70b7624ce1b832ddad48ed6c/cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3", size = 208670, upload-time = "2026-08-03T21:20:08.04Z" }, + { url = "https://files.pythonhosted.org/packages/95/95/86342356ff5953b3fb06f7ef7c5bee212d45e770abc7218d451b9148313c/cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2", size = 221824, upload-time = "2026-08-03T21:20:09.274Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ff/7b3429ff53aafe931ed8a5fc69f481bbef7ba6de87ddcbb63d08f483f613/cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b", size = 225148, upload-time = "2026-08-03T21:20:10.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/34/a95870b9221e09cf4f2ce3178b1a210abdfe63a1bd357da940418d7b8d15/cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7", size = 223564, upload-time = "2026-08-03T21:20:12.165Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/839b50531021a647fb5e929f72cf97bc1ff702b5472166164b5b6e76b851/cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac", size = 175263, upload-time = "2026-08-03T21:20:13.559Z" }, + { url = "https://files.pythonhosted.org/packages/60/a6/8b149b2c3f2e11aaa1618ef64500b45f50f22c57a977a4dff1aff1f91042/cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d", size = 185688, upload-time = "2026-08-03T21:20:14.69Z" }, + { url = "https://files.pythonhosted.org/packages/01/9a/11f687cb39d6a3504060d5242f04f48c735afb4d3d533958a20594890cb2/cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973", size = 180078, upload-time = "2026-08-03T21:20:15.917Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, +] + +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, + { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, + { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, + { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, + { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, + { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, + { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, + { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, + { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "debugpy" +version = "1.8.21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/aa/12037145b7a56eaa5b29b41872f7a21b538e807e13f32c4d3c46e59be084/debugpy-1.8.21.tar.gz", hash = "sha256:a3c53278e84c94e11bd87c53970ec391d1a67396c8b22609fcac576520e611a6", size = 1697577, upload-time = "2026-06-01T19:30:35.156Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/6b/d817e1f8cc77aa055d37fba092e0febfdff40fe652d8d53d4cd7a86ad98d/debugpy-1.8.21-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:13678151fc401e2d68c9880b91e28714f797d40422994572b24560ef80910a88", size = 2477398, upload-time = "2026-06-01T19:30:57.644Z" }, + { url = "https://files.pythonhosted.org/packages/48/57/412421516afc3055fa577516f00beec3d663f9b0ab330639547ae6c57720/debugpy-1.8.21-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:ecbd158386c31ffe71d46f72d44d56e66331ab9b16cad649156d514368f23ab2", size = 3962096, upload-time = "2026-06-01T19:30:59.235Z" }, + { url = "https://files.pythonhosted.org/packages/c1/62/2c616337cf6ba7b07ebbc97f02c6c945a8e2f76b365e33ee809c32ee36d1/debugpy-1.8.21-cp313-cp313-win32.whl", hash = "sha256:2c2ae706dec41d99a9ca1f7ebc987a83e65578363be6f6b3ac9067504917fae1", size = 5336288, upload-time = "2026-06-01T19:31:00.79Z" }, + { url = "https://files.pythonhosted.org/packages/f8/99/9175103392f84c4b1bf7622888cdc68da07f0ff7d9e581266428f6776033/debugpy-1.8.21-cp313-cp313-win_amd64.whl", hash = "sha256:aa648733047443eb1d07682c4ef287d36a54507b643ffdf38b09a3ef002c72a0", size = 5376567, upload-time = "2026-06-01T19:31:02.56Z" }, + { url = "https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl", hash = "sha256:b1e37d333663c8851516a47364ef473da127f9caebe4417e6df6f5825a7e9a92", size = 5352888, upload-time = "2026-06-01T19:31:25.186Z" }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, +] + +[[package]] +name = "fonttools" +version = "4.64.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/41/0f072a712dc74496e03710e462a18a4cfd8a258ad055a4e22d28b43a7abd/fonttools-4.64.0.tar.gz", hash = "sha256:ecb2e59a7bc692fee64dda6010deb66222335693b30046f15cccf81233aa715f", size = 3664266, upload-time = "2026-08-31T15:44:33.685Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/7b/49b0054a79b9ed918c018e70e09b56eb5678ee8b44e59e126c79de4d8d73/fonttools-4.64.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9443eefff58aad558608f352092e1be6d278980e8c3b4e8621fcbfda97818500", size = 3092750, upload-time = "2026-08-31T15:43:02.705Z" }, + { url = "https://files.pythonhosted.org/packages/83/e2/08e73bd2f6e6248f071d3e9debe4c2b4cecda3a7dc057c56b44e255421c3/fonttools-4.64.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09657817b75575822bcd6098ef0ebf0386f34430839ee53109e70fd40a7f6539", size = 2583001, upload-time = "2026-08-31T15:43:04.923Z" }, + { url = "https://files.pythonhosted.org/packages/2f/58/6dc0ff0963fc1e12f53bac59175617ec5927342ee7a4ffb871b44d56d81b/fonttools-4.64.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d7995b906666037d7114c20a5566a372902747452af7d5bd4cd6bca8f1a2550", size = 5392765, upload-time = "2026-08-31T15:43:07.096Z" }, + { url = "https://files.pythonhosted.org/packages/7a/dd/4d3911049680da7b3aecf97cb5094e3a05554f5d94829358fc7664640456/fonttools-4.64.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2c42237b7e8c6813643e57d3efed3be094d4c06339dc2166b626e2cc5c12ee93", size = 5373969, upload-time = "2026-08-31T15:43:09.617Z" }, + { url = "https://files.pythonhosted.org/packages/48/0a/a2cf94121fd3ca9166bdb4863f71d6db32a5606b223c81e2ba99832a0612/fonttools-4.64.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:498f02ea92c9ca18c0f9c581ea93184a9d56c25b0af14189b0767adaf34235d8", size = 5333854, upload-time = "2026-08-31T15:43:11.985Z" }, + { url = "https://files.pythonhosted.org/packages/44/e2/632f4a8b94e6d7eea41e6d82f0ed337f64f5fb96f9910e2ac6b1689910e2/fonttools-4.64.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8252f20108e557532f91d7d6dd9af87c16ed6fa930f65516aa480fa2cfed3363", size = 5492828, upload-time = "2026-08-31T15:43:14.288Z" }, + { url = "https://files.pythonhosted.org/packages/ff/25/7fee1978fdedc1a2d978b76dddbea88785416f5774e7222327b867712d71/fonttools-4.64.0-cp313-cp313-win32.whl", hash = "sha256:45e3ecc3888f1637094fd75cd8fc727f3a4b06d1ddf89181126c071e244fd2a5", size = 2429011, upload-time = "2026-08-31T15:43:16.463Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ed/bb1c217c9e1fbfa59f42b266af57df937a703882a73e59a309773752228f/fonttools-4.64.0-cp313-cp313-win_amd64.whl", hash = "sha256:e4812f71c39d77ec5041348dafa400532adf7bf8f1fffa9aa6495fce5876d7b8", size = 2480199, upload-time = "2026-08-31T15:43:18.774Z" }, + { url = "https://files.pythonhosted.org/packages/82/f8/7188153c4b265c899cd035de6a062677d51f67118a4ba640902bd9683e90/fonttools-4.64.0-py3-none-any.whl", hash = "sha256:4a05783ff54ce4c7a28f18e5772efdf63c219374bd9ffc55452182e1cef8be60", size = 1195327, upload-time = "2026-08-31T15:44:31.741Z" }, +] + +[[package]] +name = "frozendict" +version = "2.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082, upload-time = "2025-11-11T22:40:14.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264, upload-time = "2025-11-11T22:40:12.836Z" }, +] + +[[package]] +name = "hepunits" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/1f/c5f7525bf7e5d14d61750f91845f9f9350a8f33f5ac95672cec92f317038/hepunits-2.4.6.tar.gz", hash = "sha256:bca6ada937147166d66e9fa152566f2378868d798211cad6990080399560fa34", size = 17985, upload-time = "2026-06-16T09:23:36.685Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/10/7f9c58d1ec6a0b7f7783fe552f3593f39cda30c2e1d7a9d148ae711e748d/hepunits-2.4.6-py3-none-any.whl", hash = "sha256:089c52c3b84ef67a159b5e9ee9bdd50e1a442e3fd0c101303cc409c1e9011c4d", size = 17090, upload-time = "2026-06-16T09:23:35.35Z" }, +] + +[[package]] +name = "iminuit" +version = "2.32.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e8/0d/48a09d00769634930b1bdbf1ea057a2747a81d07825cd6940784d8b6599f/iminuit-2.32.0.tar.gz", hash = "sha256:a32b34d18665959be75ad6bdb1dd80459bb94466c62b455631c00568accdf7d2", size = 1873843, upload-time = "2025-11-09T17:25:18.477Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/fa/dd9ad6d9d636e0f455ea4c94b5c66379a42b6f9ae1b0c2c641b386820262/iminuit-2.32.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ff549ee0c6f8dc956e3927b63a3edfb8f86c21032fd43e0330c9ec18d2a93bc5", size = 440613, upload-time = "2025-11-09T17:24:01.17Z" }, + { url = "https://files.pythonhosted.org/packages/00/49/c183a9ee8fd022ffb9c20fc615ddafe19ed6b74a2ab668ac12e35d19f5a0/iminuit-2.32.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:405ee46b44afea9e6cbbf9b35c606e8414a4acae834ad62ab7fadc09780f491d", size = 386816, upload-time = "2025-11-09T17:24:02.662Z" }, + { url = "https://files.pythonhosted.org/packages/11/05/dd8b6d74b405a56fce0a301d313376912b75fab8b5746aef2ebb51fedf54/iminuit-2.32.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acef55187be8dc2b31b77278549d4f851489a9405fdeaefca9b6006338cb5cd2", size = 411049, upload-time = "2025-11-09T17:24:04.536Z" }, + { url = "https://files.pythonhosted.org/packages/7e/59/41b2db65f3d2ca872a059b25d51dbdf15d45ecbde72bda1341af01cf7e9a/iminuit-2.32.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eadd4350bbf95dd3034a6cfd0da0a5b71909abf2b29faee58841a91905151892", size = 449068, upload-time = "2025-11-09T17:24:06.029Z" }, + { url = "https://files.pythonhosted.org/packages/25/91/e7249a4048f915808f26db16119add2b78567254440686b166737cc95687/iminuit-2.32.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:28a570f0ea4b8b2aca22ee8670cc91a2406d05c08c9e93226fcb46e6f23d843a", size = 1414103, upload-time = "2025-11-09T17:24:08.077Z" }, + { url = "https://files.pythonhosted.org/packages/13/de/22f057b424acb7b27a14b080eae97147ecd4525e34071ffb684faf2196e2/iminuit-2.32.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9e41de028b5267356e42478759c5650b868a3fdde736b8398909c0e79dff65aa", size = 1489998, upload-time = "2025-11-09T17:24:10.038Z" }, + { url = "https://files.pythonhosted.org/packages/09/71/494b646e38ab553eaf5fdd7994e4e5e741cf3cc6782bef1d8e2caae35130/iminuit-2.32.0-cp313-cp313-win32.whl", hash = "sha256:a66c46c0504b156e7d0bfb0118ce66b1f86e1d6b11f2f8d2f0ada356013828d3", size = 343980, upload-time = "2025-11-09T17:24:12.176Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b7/549f900cda2f304cd64750519f9c90f9e82160d3c9197006616100de4406/iminuit-2.32.0-cp313-cp313-win_amd64.whl", hash = "sha256:720861a28e929a8b65afb4079ebd52a7deaaef3c9cb0896a8eff4a2cada718cb", size = 393459, upload-time = "2025-11-09T17:24:13.801Z" }, + { url = "https://files.pythonhosted.org/packages/07/9b/75203dd1b8dbbd1274137ccc7b01dfc60975e1e70c228d4b2af4935928ed/iminuit-2.32.0-cp313-cp313-win_arm64.whl", hash = "sha256:f7bdb1c946b8e12d3214aea61769dde01e0bec88116968dd1ba04a0c56c5e160", size = 386055, upload-time = "2025-11-09T17:24:15.303Z" }, + { url = "https://files.pythonhosted.org/packages/41/a0/a8779f52016ad2bb599b7dac9c24a81453318cdcbd0ed674c85621c005c7/iminuit-2.32.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c81c345f0465935fa19f5372107ed1f859244f31a8fdf16ab7a9542d65b51abf", size = 460259, upload-time = "2025-11-09T17:24:16.811Z" }, + { url = "https://files.pythonhosted.org/packages/e5/78/f90fd6b5ddc977fd96c4db9fe3c5c104cc1e3d93f8397ba1fda69386b5fe/iminuit-2.32.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:2a16b252e61cd6cc70f5c7f0e4aa3c022f66866285755a1daf52919299a2bd88", size = 403872, upload-time = "2025-11-09T17:24:18.314Z" }, + { url = "https://files.pythonhosted.org/packages/e5/31/8e8271cc3709fc00831542bd66ec27d6ae2978e4e928c1d86141d2f64a36/iminuit-2.32.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c648765030f113ef0234a6fc0a226d51fa446a16bc5d6c5f6615ee1bfbf7e610", size = 416106, upload-time = "2025-11-09T17:24:19.87Z" }, + { url = "https://files.pythonhosted.org/packages/7b/71/76e96c414bff8fdb60e1ba1dcc7416b974f92bc56268e135b803e8d25f70/iminuit-2.32.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f1bcec8fbec49242c4bdbfd3657d3d3a4ff673bc673d411f459cd3f401d4b50", size = 451568, upload-time = "2025-11-09T17:24:21.984Z" }, + { url = "https://files.pythonhosted.org/packages/88/99/734905005ce9fcfd8bcf04801b879f04328619a5779fb24b4d71b3977b6f/iminuit-2.32.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d3032ae0bd875e763789456b384f2690a5eae27d6b2ee8ec2229b7d1985c8ea7", size = 1419372, upload-time = "2025-11-09T17:24:23.665Z" }, + { url = "https://files.pythonhosted.org/packages/62/2c/0aac9e481c13abff4b6b133a0c4afbc7d1ee255ae45a4b6bfeed0f7c1883/iminuit-2.32.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:185a6fca41631af288275f19102a434ce63c2b80cbcf1ea5872fea77317d688e", size = 1493083, upload-time = "2025-11-09T17:24:25.923Z" }, + { url = "https://files.pythonhosted.org/packages/f8/3b/d79c4f78501f7553bf5d5b7b51d4ee5c30fbdb8ea0a8befe965a2fbcd74a/iminuit-2.32.0-cp313-cp313t-win32.whl", hash = "sha256:bb40983f128eee0e0806b2fdc1647847cdab9974631a3908cfd4020dca1e00fa", size = 360348, upload-time = "2025-11-09T17:24:27.995Z" }, + { url = "https://files.pythonhosted.org/packages/fc/34/95db7a37e912b18899c7ef9fa9a796cf3089b7165d36e1db823568a6ae23/iminuit-2.32.0-cp313-cp313t-win_amd64.whl", hash = "sha256:cb7c32520f5c2aff6ef4997086995c152c829b7f16f06749ace58e5f5636c2c6", size = 413859, upload-time = "2025-11-09T17:24:29.647Z" }, + { url = "https://files.pythonhosted.org/packages/a0/53/19ed6051bec8bd61cfb7c705fe8217bafbf09769f91d80d7e78cfed720b7/iminuit-2.32.0-cp313-cp313t-win_arm64.whl", hash = "sha256:fc10dbcc10fa3addb78c43df5c4d0b4e69bc6b39b65a743090da39bf8f857d60", size = 397719, upload-time = "2025-11-09T17:24:31.132Z" }, +] + +[[package]] +name = "ipykernel" +version = "7.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio2" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/c4/e4a38f579de4225a561305666f7541cdabb30075def2aa1ac17bd73c1fb5/ipykernel-7.3.0.tar.gz", hash = "sha256:9acaaaf97d16355166e4085afe9d225bfbdf2b7ef520f9df3be8f2b248275e09", size = 184899, upload-time = "2026-06-10T08:41:25.481Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl", hash = "sha256:897eb64da762549ef610698fca5e9675195ec6ac8ec7f19d81ce1ca20c876057", size = 120583, upload-time = "2026-06-10T08:41:23.648Z" }, +] + +[[package]] +name = "ipython" +version = "9.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "psutil", marker = "sys_platform != 'cygwin' and sys_platform != 'emscripten'" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/32/99451b1283ec5d92ad77073f12e1c667dc10775384d8f15c2914207149dd/ipython-9.17.1.tar.gz", hash = "sha256:8919be8c27f20a6f4423145028063f6637b42a03ce57665bb12015ee1f073529", size = 4539289, upload-time = "2026-09-01T08:29:32.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/1e/65b59cf518c106aa755e7f7da3099027738687a862ec785060702a481320/ipython-9.17.1-py3-none-any.whl", hash = "sha256:6d1645743cfd1a07eb695d85aa2b5fa66721f8cbae9431d4049f7084bbf06509", size = 639038, upload-time = "2026-09-01T08:29:30.673Z" }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, +] + +[[package]] +name = "jax" +version = "0.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jaxlib" }, + { name = "ml-dtypes" }, + { name = "numpy" }, + { name = "opt-einsum" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/90/aa/c3b6ac3863a490661e255d2356802b54d57b533460fa221d30743d81a6c1/jax-0.11.1.tar.gz", hash = "sha256:43e0d45b1dac002eca04c2de73298395225dd0d4651e3f573a540eaa18abfd80", size = 2864119, upload-time = "2026-08-17T20:31:29.938Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/f4/5f9a286e1eeca9faa8b83885edccf63ab2f1b22e17f6a5ea66ac86b1afe4/jax-0.11.1-py3-none-any.whl", hash = "sha256:72ed60bf85a0b53d0f5b5cd61e37a8b25f369f6f88481feb98ab489894861a82", size = 3302513, upload-time = "2026-08-17T20:29:00.294Z" }, +] + +[[package]] +name = "jaxlib" +version = "0.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ml-dtypes" }, + { name = "numpy" }, + { name = "scipy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/22/d076bf545853d1f60ef906cb6d69751f9b149f857f4390de989d5165ed80/jaxlib-0.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c7518af3168ab4cf0a00b92f5463018baf0dad3faa3b358a3d688996afa6fd50", size = 63174384, upload-time = "2026-08-17T20:30:21.949Z" }, + { url = "https://files.pythonhosted.org/packages/a8/3c/5b0ce63c880d4f9cef492f04e11be7a60bdd3f529311839652b928e8b320/jaxlib-0.11.1-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:3a679a49b8d329b6e431f3aeb666467c6efac750e3b2ee90d0e74efe7959e643", size = 82774089, upload-time = "2026-08-17T20:30:25.232Z" }, + { url = "https://files.pythonhosted.org/packages/f5/28/ef1371618e784880e68c2ab5277d5ccbaf518a2a5ec9ec05ef90a9ee7d1b/jaxlib-0.11.1-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:7ebe86a7b891fcda83e7f634a677d285681a7b80b3ec9ed435536078a8371acf", size = 87901562, upload-time = "2026-08-17T20:30:28.873Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c7/f92d23dc89bdbe5193ad139aa8973eab485898f330de2033bc4fdd8ac4c9/jaxlib-0.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:8379a8902db216f21673e7591acedc8f925658c59d9d2ec9afd5e2244246986a", size = 68531205, upload-time = "2026-08-17T20:30:32.376Z" }, +] + +[[package]] +name = "jedi" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416, upload-time = "2026-05-01T23:38:47.814Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812, upload-time = "2026-05-01T23:38:43.919Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "jupyter-client" +version = "8.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/2a/906772148a06e48885039e0250c340b770a55bbf37b08d6ee0449df369c3/jupyter_client-8.10.0.tar.gz", hash = "sha256:9f7116294dca55f1785be880057d44544db9b1567718d92cb33c58886afb9497", size = 360653, upload-time = "2026-08-28T12:17:10.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/88/7c548de1f6c2ade7c931a3282da73f9274fa6a1531091be682f89c85efb9/jupyter_client-8.10.0-py3-none-any.whl", hash = "sha256:5f73f24f22fa25192cfff6b23c051932a2473a797b05734aff495b392103e14e", size = 110184, upload-time = "2026-08-28T12:17:09.028Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/e7/80988e32bf6f73919a113473a604f5a8f09094de312b9d52b79c2df7612b/jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407", size = 29032, upload-time = "2025-10-16T19:19:16.783Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/07/bd78e6a8fae171ea041ef5bba3ed21a003522fa088834b069b1909981f30/kiwisolver-1.5.1.tar.gz", hash = "sha256:f1303ef2eec81262a4b708c3e858afe58d7c75ad91c1c05266eda7673369859a", size = 104395, upload-time = "2026-08-28T10:28:27.153Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/c1/88018321d976f53c421e379c43bc6993e70ce0c8a3ec5edc4bfe102257f6/kiwisolver-1.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b6ae6a0328f0bc035741820fdeecdcd67bf4694eee03972e843663107122f450", size = 62272, upload-time = "2026-08-28T10:25:51.02Z" }, + { url = "https://files.pythonhosted.org/packages/85/d2/712bc17ea4f1d216034928069d612defbc6c95a471c55a7203a39faecb1a/kiwisolver-1.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:886fc26012f0e8b5f69d1cfe6d711f6b11f194621539bf8e6bb1c25c5dc82724", size = 64481, upload-time = "2026-08-28T10:25:52.22Z" }, + { url = "https://files.pythonhosted.org/packages/1b/e6/6c5380d676f43b6d918033962ea5e72360ca69e5a404154bc496b598ffdb/kiwisolver-1.5.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:aefe930d113798330e9462f7874542977869c0613cba3262e2de3a8d5dee8f3a", size = 66260, upload-time = "2026-08-28T10:25:53.387Z" }, + { url = "https://files.pythonhosted.org/packages/92/6a/7087f5822cc8bb272679641404b1966a42504dac9ee74e2b33840475a0aa/kiwisolver-1.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5ca5aebae78a0bc13c1943af4af615d4966c5b650b05d5aa83b50e427196fee", size = 123876, upload-time = "2026-08-28T10:25:54.644Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4b/9f385087ca09ee5ab9c09c6832561a7d2f7c78d3e5661d511e669f70e439/kiwisolver-1.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1ed0f5e49d0ceff8b72190824d9e59c062fbbc02c231b853112c78474b3f5ec2", size = 66487, upload-time = "2026-08-28T10:25:55.899Z" }, + { url = "https://files.pythonhosted.org/packages/47/8b/40d33ffd2f378094ed462e9a9a0907e59d4de9845e65a59561272da350d4/kiwisolver-1.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:77a4c8187a5948d7f8795adb765a3c7b553d07d86d88e43038fc32fc1fb9a3f3", size = 64673, upload-time = "2026-08-28T10:25:57.048Z" }, + { url = "https://files.pythonhosted.org/packages/ab/43/86aacc027959108b4c66eeae8b73cedb057dfa6eb3a335d05ad65197081c/kiwisolver-1.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:74ad5c3dad54a4641b4c28cd15ded70899d04459c6c7aeacafea716be97cce6d", size = 1477992, upload-time = "2026-08-28T10:25:58.479Z" }, + { url = "https://files.pythonhosted.org/packages/ed/40/b1d0369048c79733a32c8abb0f2718532e6630641368e33a81384246e844/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e46b23a2da695c364124817bc01d970effd5483147f8d66a6a7167e3f6b851", size = 1278821, upload-time = "2026-08-28T10:26:00.121Z" }, + { url = "https://files.pythonhosted.org/packages/61/a1/fa71c1792272ff9461432715ae60ffb7e11a4d7ac3bf68961b9cab6c60cf/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:75d9b1cf8258462dbdc1eeda718c96ea7f079324c09067f6daabfcf37712b7fe", size = 1296805, upload-time = "2026-08-28T10:26:01.868Z" }, + { url = "https://files.pythonhosted.org/packages/a3/49/3f0bd94af8e06ecc47eb834b195a06f05d48711ceb2352c56d6835160f0e/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fca690b00c4c48f6c2a547b0160ed511357093a4e4c9b47e0fadf3128066d89", size = 1346109, upload-time = "2026-08-28T10:26:03.59Z" }, + { url = "https://files.pythonhosted.org/packages/a4/44/3afe6ef9cf06d61220953a8963e94eca978491be1d9547cb01d82a1efa08/kiwisolver-1.5.1-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:876bbfd276473d3daffe30e8c975df4ed9429967b41a6cb362dbb5155b6f13ad", size = 988252, upload-time = "2026-08-28T10:26:05.306Z" }, + { url = "https://files.pythonhosted.org/packages/e4/30/a12bd7a7285a211e1747c3eec77b8c614dbfcc1dad942f7611a1a6921ae5/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f942903fde7363d1d879057ec5de01310efda2597161784d752fa9953a01a71a", size = 2228846, upload-time = "2026-08-28T10:26:07.312Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6b/233e2958abf0dab7b18d07e52f286e02e519d7651bfbbe97af9347564109/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c90d3022d8a94778939cda8638c6c8da8fa757b8958dad7ec868ce29c87681b8", size = 2325583, upload-time = "2026-08-28T10:26:09.093Z" }, + { url = "https://files.pythonhosted.org/packages/42/8e/7673060a27b01405b580058510adef34687069d229800239f5e44682d4d0/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8a34616dc2521cc8dc1d7d081734da63539f021ac0450ce950908340c6e7aa2f", size = 1978221, upload-time = "2026-08-28T10:26:11.127Z" }, + { url = "https://files.pythonhosted.org/packages/3f/7b/1b882fc1a8b4a0bb8084e7d1d85004116d08c92c0705d31f2928dec607f2/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:8bf4df63592c2a66b4f8edc5df2544998c288aa02f96ce0acd880cd1de8c8127", size = 2491819, upload-time = "2026-08-28T10:26:13.348Z" }, + { url = "https://files.pythonhosted.org/packages/39/9c/426deb49e62c5f69464b64bbeca064d3b758a7506b8913d986ef34f4619c/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d09037ca068d784ebc4aec290ef952ca27ac15dd9c0b5801a88c6e1096b83e6b", size = 2295520, upload-time = "2026-08-28T10:26:15.042Z" }, + { url = "https://files.pythonhosted.org/packages/f5/22/deabbb3ad6d918d74b7831b2d8ae7151b09d21c87974e5ee8a456f58c94c/kiwisolver-1.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:dc23390afe9f4ef9ac3bcc72a03a56eebbde03f4c571a32cb38f859cff9a6524", size = 70758, upload-time = "2026-08-28T10:26:16.504Z" }, + { url = "https://files.pythonhosted.org/packages/b9/71/02fa5c2fd92068bb8952847e70ee6c5cb280e7febe11653d17812acc53dd/kiwisolver-1.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:186884a58486651e3c217b6acea0a53eaa9498fdd472057c46f2f0fb5c25aad5", size = 68329, upload-time = "2026-08-28T10:26:17.658Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/64/f9a391af28f518b11ad45a8a712353c94a0aefce09d3703200e5c54b610a/matplotlib-3.11.1.tar.gz", hash = "sha256:69647db5746941c793d6e445a4cd349323ffb87d9cc958c2ad84a659b4832d30", size = 32612045, upload-time = "2026-07-18T03:39:46.63Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/6c/4798363b7fb5644e309fe1fac30216e9146c9f70859d80d588c18caf5317/matplotlib-3.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6771b0cd7838c6a857a7209814158c0ad09bfef878db3033dd82d70ad101f191", size = 9454341, upload-time = "2026-07-18T03:38:35.001Z" }, + { url = "https://files.pythonhosted.org/packages/59/98/6acadbe7f98df19d274bc107ac58bb439fa75df82c33dc110d71a4a8501f/matplotlib-3.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2abdee5ffa2fe11b2d19f7a5c63b785fb7c28cc46c7bc1814156341d9d1a33e1", size = 9283627, upload-time = "2026-07-18T03:38:37.061Z" }, + { url = "https://files.pythonhosted.org/packages/24/ea/65cec46fe241390ccea1b1754207ee28eb71c5ab866bd5f22fe47e538fa4/matplotlib-3.11.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0a19dcf73406d3746d25a5ed42d713604c9a3e024d129b102852b0d941cb9f3", size = 10035860, upload-time = "2026-07-18T03:38:39.663Z" }, + { url = "https://files.pythonhosted.org/packages/c7/10/63fdccccbabe002fb0960876baabc5e3f24d9c1bb4cfb25651457f74b3a0/matplotlib-3.11.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7389b77ed2ab0552f46d9a90b81b7b8e6dfcdc42adc36c37a0865799843e0e3e", size = 10843594, upload-time = "2026-07-18T03:38:42.144Z" }, + { url = "https://files.pythonhosted.org/packages/98/51/a1155945bff7b91381875022ac1522c5dfdac0d006be8e7df389b3134eae/matplotlib-3.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c90be0b73568da4f662afac580956a76e308437e641b4a45aa08925eeb67d95f", size = 10927962, upload-time = "2026-07-18T03:38:44.302Z" }, + { url = "https://files.pythonhosted.org/packages/0d/3a/3d5e1f42dc761bf53401a62a83ff93389b37de9d2c093b2a3aa49ac34f1b/matplotlib-3.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:68408341f2312836fbbdf6b3c78047f65b2d8752f5fd221c3e72d348f5b34f8b", size = 9334074, upload-time = "2026-07-18T03:38:46.616Z" }, + { url = "https://files.pythonhosted.org/packages/e2/db/3f5ea5a5b64060ef5e1ff60a19170423e41ce21b8497a6fe15a36e0b43e3/matplotlib-3.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c1f44890d435c1b4ef52f701ad5828cb450ea97bcc83918fda6be74965d6cd2", size = 9007662, upload-time = "2026-07-18T03:38:49.112Z" }, + { url = "https://files.pythonhosted.org/packages/98/6e/c7ae5e0531425b69c0826b00ebbc264c85cab853f1cd6e096c9983c2cdc1/matplotlib-3.11.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:5e510088c27a89d53580a752f959146893563e63c330e161d159b0fee652af6f", size = 9503790, upload-time = "2026-07-18T03:38:51.527Z" }, + { url = "https://files.pythonhosted.org/packages/92/79/15be162e0a2ed546939674e2e97d0e33ec2447d86d4d4e611fa295bb178c/matplotlib-3.11.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:1524e2bdd48a93557aa47ddcfe9c225dfdd57d5a01a5c49128c20f0632980ee1", size = 9336148, upload-time = "2026-07-18T03:38:53.564Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7f/36ffe144fc4aacfe0e3ed2318f72b6755d1e73b041d619b4d393e60f5a66/matplotlib-3.11.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:11664c551345553db92e61cae6cf1376f138f8c47cafdf13b64b18f3e3e9e464", size = 10049244, upload-time = "2026-07-18T03:38:55.911Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5f/55812d68c0a840d3a463638f48c00ab1fe338518ec49a640cb6473b444af/matplotlib-3.11.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e1f8922ba31959cf6a9dfb51be64b7f7bc582801a3957dc0c2f3afcd3537adf", size = 10860798, upload-time = "2026-07-18T03:38:58.282Z" }, + { url = "https://files.pythonhosted.org/packages/7a/64/cca444b4eb5e6c768c44fc5e1f0b5211f20ca2b282778051996e996a2bdf/matplotlib-3.11.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83235693abde86e5e0129998f80ee39fc7f58e6d56a88fafb28a9278833e9d5f", size = 10943282, upload-time = "2026-07-18T03:39:00.465Z" }, + { url = "https://files.pythonhosted.org/packages/e5/0f/a49c329d394f2e9ef38506982107e8b04ecf94dd41a9d8423ff82cc737c7/matplotlib-3.11.1-cp313-cp313t-win_amd64.whl", hash = "sha256:9a076f4fc5cdc43fdf510f5981418d25c2db4973418d9f22d8bb3dc8045ada78", size = 9383532, upload-time = "2026-07-18T03:39:02.468Z" }, + { url = "https://files.pythonhosted.org/packages/e4/50/103e86afb806d8f64d04ede14e4cfc09dbfc25f512421ff85fdd6ebd59cf/matplotlib-3.11.1-cp313-cp313t-win_arm64.whl", hash = "sha256:216fbb93a74add02ddb4cb38ef5348f59ac00b3e84567eaf16598772d40e150a", size = 9059665, upload-time = "2026-07-18T03:39:04.607Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "ml-dtypes" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/72/307d7c4bd0600601c7133fba5cb78af7db968152951c1cd473abb1cda782/ml_dtypes-0.6.0.tar.gz", hash = "sha256:5e60251d32ced5598972e4d5e06a2f044341f9291402551a3f6f0ec44f9299b0", size = 3032327, upload-time = "2026-08-13T14:14:40.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/51/fd1582b8f5ed8a9e7be0e161a6ea0dff70cb280479a12178df0b3a72700e/ml_dtypes-0.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:084dfe51a7ad58b171f05115f8226ed4233a454a1611371947e806e76f0c638d", size = 565468, upload-time = "2026-08-13T14:14:08.5Z" }, + { url = "https://files.pythonhosted.org/packages/d2/22/20fd70ca6ed12446cb92d5b2a7745bd185f9d8b8cdeeadad976574398e6b/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28d676428b104bb9717b0928bc5c5129f2d6b51b6727587cc4289e7bf8713cb5", size = 360232, upload-time = "2026-08-13T14:14:09.873Z" }, + { url = "https://files.pythonhosted.org/packages/89/a5/da8ae6c6f1babe4b68e3e55d43d39b529e29774f10e0910671a6b8c86eb8/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26b1f1fa4f0435a2946859823f6e2bf06796f1e9f10f5a05b08a5e3c8f46ff69", size = 410169, upload-time = "2026-08-13T14:14:11.036Z" }, + { url = "https://files.pythonhosted.org/packages/e2/55/4561acefa00fa4bcbfb82ca6a48578b41f372cd7dd7cdd6eb4720abc2e5f/ml_dtypes-0.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:fb87f46b4f7ad7b5d3ad8f4b452b024bd4229d44c8ff934798c1fe656210387a", size = 439357, upload-time = "2026-08-13T14:14:12.172Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5d/6a01538e507ef0ed5e879985b13a92467bf8960696fb1131f8b8cadc60ff/ml_dtypes-0.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:57ed0d6b4ac5e7868361303a9c57fbcf63b768236ee14456f585dfcf260d0292", size = 552278, upload-time = "2026-08-13T14:14:13.539Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "nest-asyncio2" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/73/731debf26e27e0a0323d7bda270dc2f634b398e38f040a09da1f4351d0aa/nest_asyncio2-1.7.2.tar.gz", hash = "sha256:1921d70b92cc4612c374928d081552efb59b83d91b2b789d935c665fa01729a8", size = 14743, upload-time = "2026-02-13T00:34:04.386Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl", hash = "sha256:f5dfa702f3f81f6a03857e9a19e2ba578c0946a4ad417b4c50a24d7ba641fe01", size = 7843, upload-time = "2026-02-13T00:34:02.691Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/01/11703282db468b85f6f7b8c7f22d058de5970d5c7e60a3a8aaa313c3de36/numpy-2.5.3.tar.gz", hash = "sha256:df2d5874ff183595a4ba404edd04f6bd9b5505c1d7708573f6a6c17489a67563", size = 20791231, upload-time = "2026-09-06T16:27:47.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/e5/8fb89cd46d14e35699d13bf943a5f5f441ecee8667120a1f6105ab89e349/numpy-2.5.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:66a78fe4556c60aceda5916f9eacd638b18e9e681016ec302dcb4682d6d4d034", size = 16991061, upload-time = "2026-09-06T16:25:00.411Z" }, + { url = "https://files.pythonhosted.org/packages/2f/06/9dc9e48b5e5e941c8b10350c5ff2d721da42a20517d911d15544246775ff/numpy-2.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92f30e89b8ee0ecf363033576c422b2f58fed6a80bed0aa48dff6d14c654663e", size = 12003676, upload-time = "2026-09-06T16:25:03.475Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2a/98282aa5b8f58b1157d440bb6282eed47e3632a5de53a714fbab17e659fe/numpy-2.5.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f9a2353b37a1a9e78fd82b27ad7e2a32a2d036604d18f02b05e3136c62ca3b09", size = 5439695, upload-time = "2026-09-06T16:25:05.978Z" }, + { url = "https://files.pythonhosted.org/packages/a1/f9/b6533d777be9d6ffd29dc1be0867e563e6e8cc9a220ff1b716adc317f060/numpy-2.5.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:ccbc4665079665c3cf3bab4db9f6b095370cd6437d66be549b6c2a1fd19e1958", size = 6779395, upload-time = "2026-09-06T16:25:08.599Z" }, + { url = "https://files.pythonhosted.org/packages/73/85/735720d04ec197c5dcfacdfc9922667c7f1f5f496a279b7ba4d7c74c4cc7/numpy-2.5.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c76d5dde9f445058f83d0c02af00557a4db91de9a9a57c0df87d1535001d654b", size = 15681750, upload-time = "2026-09-06T16:25:11.173Z" }, + { url = "https://files.pythonhosted.org/packages/3a/1b/3b16a9bc514a440a7a0883684111dcb1ef1aee960af2ca95da8fc775f124/numpy-2.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5fa86b80fd24bcd1aff83ad23be44ea323de3f787be8f8b15d4a65621e25321", size = 16708577, upload-time = "2026-09-06T16:25:14.171Z" }, + { url = "https://files.pythonhosted.org/packages/69/c4/386f397831b07328b639c96c5b62719346cf4baf07c68d927239752b1534/numpy-2.5.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd4cb9ad3c7889b9b3fe0a9a9fb5d2ed26f9879bff2608d9f01aed147a20d231", size = 17042047, upload-time = "2026-09-06T16:25:17.582Z" }, + { url = "https://files.pythonhosted.org/packages/5f/3e/a700ecbf36e85ae8328fd3b0e12eeddc22ed6358a64cb2bd913e0d195d65/numpy-2.5.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1302b90c0e52281681b2975adfe8a860cb7b12216a27b4b0b4207c44bf7bccf0", size = 18465724, upload-time = "2026-09-06T16:25:20.949Z" }, + { url = "https://files.pythonhosted.org/packages/41/ee/38e785e88a4045f6ad1d1f2808dcdfafdca48c760260c0587bf171e29fc9/numpy-2.5.3-cp313-cp313-win32.whl", hash = "sha256:1c80eabb4035ecf4ca9cd49cde8a9fdd69a729e63e6474887d1523ade7aa277f", size = 6129003, upload-time = "2026-09-06T16:25:23.664Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ec/100f2b1794ede74a9b3d7ec6b9736927f56713414c1dfe19ab6c383494bf/numpy-2.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:71cad2b2a7451ab79d8f5e71b453485b6775963d5cf794179144a7463fe6e8ec", size = 12560965, upload-time = "2026-09-06T16:25:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/80/b1/7dc825ca94c12acebbce4c37caa5e198695eb31424bc579679f32b1bb49d/numpy-2.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:8e4dd766076855b5ff7ea52fa5f07ce26286726e0f8bff446b7739d02e6ea204", size = 10482343, upload-time = "2026-09-06T16:25:29.772Z" }, +] + +[[package]] +name = "opt-einsum" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/b9/2ac072041e899a52f20cf9510850ff58295003aa75525e58343591b0cbfb/opt_einsum-3.4.0.tar.gz", hash = "sha256:96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac", size = 63004, upload-time = "2024-09-26T14:33:24.483Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl", hash = "sha256:69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd", size = 71932, upload-time = "2024-09-26T14:33:23.039Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "parso" +version = "0.8.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824, upload-time = "2026-05-01T23:13:02.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025, upload-time = "2026-05-01T23:12:58.867Z" }, +] + +[[package]] +name = "particle" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "hepunits" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/66/09911bbb658fdffe960903c12edecab95f6cced40fef4909d1cc04bd288b/particle-1.0.0.tar.gz", hash = "sha256:49145dec1cb5044b07f3e8e902280fa050950fa845b058003e69de519bb50492", size = 285766, upload-time = "2026-06-25T14:48:26.893Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/92/05078b696cddbdd60963577c895d5b77e5bf829197b08677351b11761c2b/particle-1.0.0-py3-none-any.whl", hash = "sha256:fc2656f53e729be76e45430f56aa65dc20dea069565a393032016544425b64bf", size = 245760, upload-time = "2026-06-25T14:48:25.238Z" }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "pillow" +version = "12.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, + { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, + { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/b7/802a56eca9f2fac455b8bab5375a2647b0f0e14a2cd63ef077de3c4a7658/platformdirs-4.11.7.tar.gz", hash = "sha256:4f41487eeeeeb07f3a6625e61d9bc0ae6809f92d3386dbd74392fbb76108104d", size = 35127, upload-time = "2026-09-01T13:35:10.502Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/6e/80993e10a0482f630cef528635789233224f36b1ffd11592aa15d13ff9ce/platformdirs-4.11.7-py3-none-any.whl", hash = "sha256:8a02cb259042c79d1cd0450facc2fe6dc9d303ae7901afbe33bf8ea0b188cef6", size = 23938, upload-time = "2026-09-01T13:35:09.02Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.53" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pygments" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + +[[package]] +name = "python-constraint2" +version = "2.7.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/a7/110e7519d38c6fd37ea60fdb821eb47db82abaaf4b9698bcb1bd281ba36d/python_constraint2-2.7.3.tar.gz", hash = "sha256:9e0dbf061a7be7f2837239cbc51e3d0c5f9521724fb07a987c64f0bf3bce6438", size = 851059, upload-time = "2026-08-18T14:27:31.914Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/23/6e66c8cd32639dfaaf981f36ff5831abd452f91ab8c1f136ae3295102d29/python_constraint2-2.7.3-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:07a62b3f6e634869d78feb88e1aab961a153ebd99b60e96457bee4ef8f3d1eb9", size = 1771409, upload-time = "2026-08-18T14:26:54.008Z" }, + { url = "https://files.pythonhosted.org/packages/1b/44/3312405204b1ab0d5c6675afb32f1e9bb6036e44eabc1afc1c7949bf7d43/python_constraint2-2.7.3-cp313-cp313-macosx_26_0_arm64.whl", hash = "sha256:5eaa369aafa55462327f8d3251bdffc957eb440e843f8b3e052e17a1aa91b826", size = 1839338, upload-time = "2026-08-18T14:26:55.585Z" }, + { url = "https://files.pythonhosted.org/packages/d7/47/34b25a17886627ffcda08ae92e766cb335bab25cf9ddc2df42dbc5861f72/python_constraint2-2.7.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:856efc362a40e362589968804a3df2d216a2294aeb8167373bd22bc615ffc7f1", size = 15028693, upload-time = "2026-08-18T14:26:57.443Z" }, + { url = "https://files.pythonhosted.org/packages/32/47/d072cb8ca6f78ec80bbc5ab55a0478cd28316293221ebdd8399368e5bdef/python_constraint2-2.7.3-cp313-cp313-manylinux_2_35_aarch64.whl", hash = "sha256:ea1bc9a4a2f44af902687cd306e9bfca3749598cc7552099babb43e0c1a86b98", size = 4033679, upload-time = "2026-08-18T14:26:59.955Z" }, + { url = "https://files.pythonhosted.org/packages/1c/15/aafbe5a62af42c803e63f9239ee46c61409ae7d119a333b452a8e6685eaf/python_constraint2-2.7.3-cp313-cp313-manylinux_2_35_x86_64.whl", hash = "sha256:7bbf0c3091233535245bd77712431b06cb8fda013af7befdd972efb51d1a6978", size = 4144799, upload-time = "2026-08-18T14:27:01.565Z" }, + { url = "https://files.pythonhosted.org/packages/74/07/3c30b1967ffd1ba391aba86c2af48bd6ecbe180d2364074ce03125624402/python_constraint2-2.7.3-cp313-cp313-manylinux_2_39_aarch64.whl", hash = "sha256:53285d0b18c93513f5e4dddad0765bb3035c481074d8cf07a03e681b04e8f559", size = 4125954, upload-time = "2026-08-18T14:27:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/8e/ba/045cb1fd049a504e318980eadbcc0af779f4bf9bc5bc2ce689b160b7ef0d/python_constraint2-2.7.3-cp313-cp313-manylinux_2_39_x86_64.whl", hash = "sha256:52b09510347272afa50535a50bc600b24ba221090377fad8a7267df9a5446eb9", size = 4283188, upload-time = "2026-08-18T14:27:05.256Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f9/a4c7ee0b9e56ccf02864109fe13b5b1d51e8a0bbb30fb610396ed2543aab/python_constraint2-2.7.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2574f5551f3d9ff4c9000b84ff3c997d2e82cadaf1a676628bae0b21ddc4c429", size = 14875680, upload-time = "2026-08-18T14:27:07.217Z" }, + { url = "https://files.pythonhosted.org/packages/be/e6/743024f2de428fcca0cb2ebfb2fbe772ce34e30e073389903986d812dc18/python_constraint2-2.7.3-cp313-cp313-win_amd64.whl", hash = "sha256:8ddfb08d2b1bd319f429cd0465874e81c1e4cbef253e0cff3878e8036de556f8", size = 848041, upload-time = "2026-08-18T14:27:09.945Z" }, + { url = "https://files.pythonhosted.org/packages/15/8b/5141a3173970c6cc03e2def47072f7c48a34f07356a764f74cbae9a5044e/python_constraint2-2.7.3-cp313-cp313-win_arm64.whl", hash = "sha256:e75e022dab016eceb6bdd2b14efb3b325f77aa9c03dd970473c5ba51fb8445f6", size = 848040, upload-time = "2026-08-18T14:27:11.48Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, +] + +[[package]] +name = "pyzmq" +version = "27.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/8d/5b3d5631c2f4b4b8862f64cd0c9eb777b5710eeb5125b4be8dd0a200a4c0/pyzmq-27.2.0.tar.gz", hash = "sha256:54d4259d1bfae24ecdb5ca79f7acc2eac6c286a02d6a0ae617797cb45f0726d3", size = 292316, upload-time = "2026-08-20T19:08:21.19Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/8a/153532fa53db30e116118164f3af269a1f3966b3e2ba32c89b12fe864bd8/pyzmq-27.2.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:591c8de5851c5ea372194469fe97587b97c3b641e9a70f31bb3474acbfde0241", size = 1431074, upload-time = "2026-08-20T19:06:40.601Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ef/c08b91248bb90a9efa81fa00ba81b69c157c74d0c5efbb2c319d91babb62/pyzmq-27.2.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:00e73942ef12cecbc7951c4a9104bb8ffaed742abb13af2da6833d90dd368cef", size = 973915, upload-time = "2026-08-20T19:06:42.037Z" }, + { url = "https://files.pythonhosted.org/packages/b4/78/a3a3a86c2b00fadb92ece1ca4f8f028d62b2ce9ac3526097239ab2d6fba9/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f8079d0521fe94bbb401fe9407578b28f3701627c8be2c9f7e0c5b77dcb0109", size = 697722, upload-time = "2026-08-20T19:06:43.325Z" }, + { url = "https://files.pythonhosted.org/packages/62/2c/d5828306f795e8d34676d266823b74e2101e0ad3760d12083de3e02abbb2/pyzmq-27.2.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dea74fd65f1fc5f7fe167916a473ebe6ed6174e5e5d9de11ea6583661be6cf43", size = 872258, upload-time = "2026-08-20T19:06:44.627Z" }, + { url = "https://files.pythonhosted.org/packages/09/52/51253b78fd8739293e283407eeecb14215c02c71b6519af21f6eed8e69cd/pyzmq-27.2.0-cp312-abi3-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dcc99ca132b667a4ed750afd42db4ea73288f18425a9b2e3c0af095665c491f5", size = 739591, upload-time = "2026-08-20T19:06:46.214Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3e/142c85b67a4c9678629b0cf6d5125b29663d75be69bfaa57a3cac344d780/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b8d5f66e4a8246cf77f7b8f7902af64f00553368fa0373c89d99b78f0ad79394", size = 1689031, upload-time = "2026-08-20T19:06:47.612Z" }, + { url = "https://files.pythonhosted.org/packages/0e/ee/0776fb0f98ed1eb74d77240087fef0ab045b6ad15cb09555c6c5134c98ad/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:d1526b42a2e725b84ed226f37becedc250c6347594e5ed304e4e9aff68c9aec3", size = 2059547, upload-time = "2026-08-20T19:06:49.064Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0e/ec77f691a4aebe29ab6329f996fb0e0270c876a3016086e3ca6ef733bcae/pyzmq-27.2.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f707bcf2c1d007d14d70531d4dd7b41060881c73efa845580bf6faaf9ea24d42", size = 1910457, upload-time = "2026-08-20T19:06:50.783Z" }, + { url = "https://files.pythonhosted.org/packages/30/97/1f5530ff4fc271b4597048371d5af972c2baab51be132ba15874e0327a6a/pyzmq-27.2.0-cp312-abi3-win32.whl", hash = "sha256:fdaaa4ea3242f6ad298eb5177eb042aea5c73c30e76d20caee7b15af20d24ec2", size = 563450, upload-time = "2026-08-20T19:06:52.307Z" }, + { url = "https://files.pythonhosted.org/packages/02/8b/b83f7780dad22e0878e4c7bd9158ebd24ed12bc3d5e3a471cd0576f77ded/pyzmq-27.2.0-cp312-abi3-win_amd64.whl", hash = "sha256:2c218c6ab8bc447ba62054b581fd30209689d199c6ecb253f79615ca74a38e12", size = 628633, upload-time = "2026-08-20T19:06:53.809Z" }, + { url = "https://files.pythonhosted.org/packages/52/aa/3918b5ac7f9987bd9c421b065074fd7409ded88f856f2c704a24341877ec/pyzmq-27.2.0-cp312-abi3-win_arm64.whl", hash = "sha256:348d6fd3e4b81ae4580622ea8c2ea60224e84b2ac1b3be4482e6edc7de06e7a3", size = 556006, upload-time = "2026-08-20T19:06:55.242Z" }, + { url = "https://files.pythonhosted.org/packages/83/5e/d0541596b48c5a19f85dcbea83d6673d8e91681cdf853eb194c31fc9766e/pyzmq-27.2.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:c551b9e2f86dc625fcb1a032c0d68042678caf96a8dd7c28796766b673bd5b52", size = 1127193, upload-time = "2026-08-20T19:06:56.545Z" }, + { url = "https://files.pythonhosted.org/packages/50/9f/8c7411bb283982d46e6d56dca6a095678c87eb0398daead12776d9881ac2/pyzmq-27.2.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:288cc790da0e3064a14a38ddc56ba169dada8c8af4cb86518db2bcbd380eedbb", size = 1166833, upload-time = "2026-08-20T19:06:58.011Z" }, +] + +[[package]] +name = "qrules" +version = "0.10.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "frozendict" }, + { name = "jsonschema" }, + { name = "particle" }, + { name = "python-constraint2" }, + { name = "pyyaml" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/b2/66d1d0c8a0551d6ff7cdb555e03582d271b0c4a3d07c2b413e36024a85b3/qrules-0.10.12.tar.gz", hash = "sha256:72b0fd0c3042f1b82b6d27f03f2636156f8e3070a8d915f3f2b31b535bd1d347", size = 334897, upload-time = "2026-09-04T12:32:04.51Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/31/a10f094959a0cc33e790511d4ae91ca3f1a10c54029c9b4c7e078198df22/qrules-0.10.12-py3-none-any.whl", hash = "sha256:8b3f0d7b412eb4d19ca8a4006a2bab7a9dd2c0e744fb85eae61e7d590a999705", size = 85931, upload-time = "2026-09-04T12:32:02.879Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, +] + +[[package]] +name = "scipy" +version = "1.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/74/66de6258867beb2ef08f35f9f2ac017a52cacd5081714d239ff1a442d458/scipy-1.18.1.tar.gz", hash = "sha256:52c4b7422442aba924d03ad4019852b08a92e64ea187b933135687bfe2747307", size = 30781235, upload-time = "2026-08-21T23:28:50.599Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/55/4540ee0f9c42a9ad7109d0d1a8cc70de54c3572b01c6693a2b1c70e90ceb/scipy-1.18.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:3ab3523da44749156e1f68b464dc56af11ae4cbc5c739a49d05f32b982eca9f3", size = 31089958, upload-time = "2026-08-21T23:24:35.8Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f5/769f36d14922b8071a43e95d24d18b6bdafad10d7f5cf647867e1ac052bc/scipy-1.18.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e6fb6a55cc0ba97b59a1f288fb86dc6fce8bdfc0fffcbfd015e3a954bf2a2d93", size = 28715106, upload-time = "2026-08-21T23:24:40.775Z" }, + { url = "https://files.pythonhosted.org/packages/9a/d7/21d890274f75ea37a8209d5519e72da3da90302e3b9fb8397a0918386a62/scipy-1.18.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ea324d9dd34c38bfb9bec8ca4d1b407db97dbb74029f566b8e322b1b6fe56fe6", size = 20456846, upload-time = "2026-08-21T23:24:45.066Z" }, + { url = "https://files.pythonhosted.org/packages/ec/01/798430ecea2e78ec7c02663d5f71c007bb6abeca931080debd40d7fa55ea/scipy-1.18.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:75b00eb8fb802090aa903f4ea1c7f5a584779f967361e68b7e98e531cc2d7174", size = 23087986, upload-time = "2026-08-21T23:24:49.539Z" }, + { url = "https://files.pythonhosted.org/packages/e6/5f/4634e9d35c68496e4e34cb6946eafab044458e6cedab42b40b6588e475b6/scipy-1.18.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d416b16cccfd70fbf62400e84d0bb2f4e6af519a45557f1692c749b37f14b315", size = 33998146, upload-time = "2026-08-21T23:24:54.714Z" }, + { url = "https://files.pythonhosted.org/packages/41/48/6450ed9243315322bbc19ac57b9b70d66a20bf1d38d124c96bc4bf6af9ea/scipy-1.18.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fdaf5ea890a6183d0565f51a61799d67081bd5b1cf03c5f4b3fd3732108625c9", size = 35312578, upload-time = "2026-08-21T23:25:00.44Z" }, + { url = "https://files.pythonhosted.org/packages/00/bd/bf5a4be6a3525676499f6dff307991739ff6fdcad1481b1aeb6745339f58/scipy-1.18.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c825cef2f49e46753726a7181a8e199804a912b29519ada542c6ebc654951899", size = 35612621, upload-time = "2026-08-21T23:25:06.144Z" }, + { url = "https://files.pythonhosted.org/packages/bd/4e/3c45c33e00a77996c4b1cb707929f833ba7b1d522ee29f882512c330676d/scipy-1.18.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e3b417bf8c2c7c16e8f58ad91db17783ec911ac16e7b50eb6eab6e809b4f5b07", size = 37457323, upload-time = "2026-08-21T23:25:12.483Z" }, + { url = "https://files.pythonhosted.org/packages/93/0e/e0348fbc0dbab65c114cf78957e7dfeb49f8e8b556b4d930cc12ff195e18/scipy-1.18.1-cp313-cp313-win_amd64.whl", hash = "sha256:559ed65f60c1af5a03f3912605a1b5114f522c7c32fb23c3376ae8f03219fe28", size = 36622841, upload-time = "2026-08-21T23:25:18.722Z" }, + { url = "https://files.pythonhosted.org/packages/50/a8/6a77f5f267c555108f0a864b6db714363dab567a8266422a79a385f9232b/scipy-1.18.1-cp313-cp313-win_arm64.whl", hash = "sha256:cd479fc04dd9401e3b4f49e76518768ef99c4f517a98c284eb091fd725719adf", size = 24399315, upload-time = "2026-08-21T23:25:23.458Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "technical-report" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "ampform-dpd" }, + { name = "ipykernel" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "qrules" }, + { name = "tensorwaves" }, +] + +[package.metadata] +requires-dist = [ + { name = "ampform-dpd", specifier = "~=0.2.3" }, + { name = "ipykernel" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "qrules" }, + { name = "tensorwaves" }, +] + +[[package]] +name = "tensorwaves" +version = "0.4.17" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "iminuit" }, + { name = "numpy" }, + { name = "pyyaml" }, + { name = "rich" }, + { name = "sympy" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/45/39e7607463dc244d89899d820b72f420d2d2f57e4a817f31b6df391eda17/tensorwaves-0.4.17.tar.gz", hash = "sha256:48cd540e44e39790688e6d08c3da172bd2eb57bec304435d865265975d1d3d62", size = 422266, upload-time = "2026-08-07T09:23:31.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/5b/73c844f4e3467ffad53afe9d53e08e687192a2b235f7af0bd77ab3af1e96/tensorwaves-0.4.17-py3-none-any.whl", hash = "sha256:2d6c505bc9cd6424fc123da831701bfd2acfb8b2ba75967fe2e57fef2da59233", size = 41446, upload-time = "2026-08-07T09:23:30.708Z" }, +] + +[package.optional-dependencies] +jax = [ + { name = "jax" }, + { name = "jaxlib" }, +] + +[[package]] +name = "tornado" +version = "6.5.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/10/d3/343e5bb989d6515b1646cf3d40135d73f3d5e45339bded401b56cdac24dd/tornado-6.5.8.tar.gz", hash = "sha256:9452e1b208a8bd771e2cb1f2ff564985b9b214bdebbe622793e1799e0a6bd23f", size = 520493, upload-time = "2026-08-07T02:12:42.971Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/d5/007086fd8df5489338e204f65adce33fd4f21a4999dbb2b9cff2f897b5f4/tornado-6.5.8-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:cc6aa787d7cfab7c3d35189dc7a56fbd2399a569624c730c6b55b3d6531d0403", size = 449487, upload-time = "2026-08-07T02:12:28.682Z" }, + { url = "https://files.pythonhosted.org/packages/70/c8/5a24a99495903f594f6a199dd7beead1cbc0a13e2cb9102727bcaaf2a997/tornado-6.5.8-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9715b5eb79735b2bcd454ce216a9275b7c0470e64ea1bf5742f78b2f72b26eeb", size = 447649, upload-time = "2026-08-07T02:12:30.306Z" }, + { url = "https://files.pythonhosted.org/packages/6e/de/f2e733f386b85962d1b1dc82cd63d169b5b4580062b35397eac9244a41fe/tornado-6.5.8-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:547d63f450d570c14fe0e8db2cfb14c9bbd1c2503b4a6612586267955aa47b58", size = 450707, upload-time = "2026-08-07T02:12:31.95Z" }, + { url = "https://files.pythonhosted.org/packages/0b/94/20efeee9a01c141e9ac47c397f81679dfda24b32768fc4fff24e76d36c2c/tornado-6.5.8-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e2360a0ffbe145eca8af0b19cb7203d79b1a98dd4cccdd6b368f6f49c2e3808", size = 451677, upload-time = "2026-08-07T02:12:33.512Z" }, + { url = "https://files.pythonhosted.org/packages/42/ec/a96ccb8ccf0de2b7bc2c5fa1608a4803735018242e90c4882365a9fd418f/tornado-6.5.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5d242290bdf7ab3151bc1065fdd75c0dcc21cbc7b49f22a4c56329c2d6566d22", size = 451510, upload-time = "2026-08-07T02:12:35.346Z" }, + { url = "https://files.pythonhosted.org/packages/29/b5/93185859245ad3f00e62175f29607346788b696369347f0146e0421286bb/tornado-6.5.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7b94ff0e128fe0542f3bd331fb44d06260fc4ac16881545159f34ef08aad4195", size = 450917, upload-time = "2026-08-07T02:12:36.963Z" }, + { url = "https://files.pythonhosted.org/packages/97/cf/fe33cf062834487d34d1559746a4a12521033c22645b6d74d4bca702e018/tornado-6.5.8-cp39-abi3-win32.whl", hash = "sha256:67832909c4779c64942380cb5f044a5c6163d00831472d80e25e115de9917836", size = 451952, upload-time = "2026-08-07T02:12:38.512Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e1/468ad54333e92ccb62627e62cb88e5fc14a2171daa67ed47b1b8542d5b86/tornado-6.5.8-cp39-abi3-win_amd64.whl", hash = "sha256:11881db6b7c168494be2c2d12e65931451bdf7ee718535418ae1d8855dd5a0ee", size = 452391, upload-time = "2026-08-07T02:12:39.971Z" }, + { url = "https://files.pythonhosted.org/packages/ad/3e/cd5e4f06e34cde33b8ef66cf36aa2b5ad46354cc1af7d2136bbe365fee1d/tornado-6.5.8-cp39-abi3-win_arm64.whl", hash = "sha256:68a7468c7e289f8514d7d664101753903217eff1bb6822c6b5994a0b5f5bcb26", size = 451411, upload-time = "2026-08-07T02:12:41.469Z" }, +] + +[[package]] +name = "tqdm" +version = "4.70.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, +] + +[[package]] +name = "traitlets" +version = "5.16.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/2e/a7fbfe268c8a3b32546930c0297c101d65a4a14c304ad5790a9f478f0e4e/traitlets-5.16.1.tar.gz", hash = "sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1", size = 166137, upload-time = "2026-08-03T08:32:36.848Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/66/0d785f0bc5e4315a96c989bb476d0fc07ea4f85132550c7b156ca2035d52/traitlets-5.16.1-py3-none-any.whl", hash = "sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b", size = 86211, upload-time = "2026-08-03T08:32:34.48Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/57/ed58088fafdf4c55a0ad6bde846502567645424d7ebf325230b9237f4085/wcwidth-0.8.3.tar.gz", hash = "sha256:d128512515fbf4612e0ff21fd6380399210318b7b54a9af59dff8454cf9730eb", size = 1458450, upload-time = "2026-08-28T18:10:06.875Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/0e/57f6bb3024a597b2e8ec4aee710ffe62ddc95af2e2bb1ee7a7abdc22c68c/wcwidth-0.8.3-py3-none-any.whl", hash = "sha256:d5b73dba6158a595ec9370350e7f2637bcac8d6c5e4fde34f30fcffb6103a5e4", size = 331669, upload-time = "2026-08-28T18:10:04.909Z" }, +] diff --git a/docs/bibliography.bib b/docs/bibliography.bib index 7e06f35..7f7c99a 100644 --- a/docs/bibliography.bib +++ b/docs/bibliography.bib @@ -42,6 +42,20 @@ @book{Byckling:1971vca isbn = {978-0-471-12885-4} } +@article{CLEO:2007-DalitzThreePions, + title = {Dalitz plot analysis of the $D^+ \to \pi^-\pi^+\pi^+$ decay}, + author = {Bonvicini, G. and others}, + collaboration = {CLEO}, + year = 2007, + month = jul, + journal = {Phys. Rev. D}, + volume = {76}, + pages = {012001}, + eprint = {0704.3954}, + doi = {10.1103/PhysRevD.76.012001}, + url = {https://arxiv.org/abs/0704.3954} +} + @article{Chung:1995dx, title = {Partial wave analysis in {$K$-matrix} formalism}, author = {Chung, Suh-Urk and Brose, J. and Hackmann, R. and Klempt, E. and Spanier, S. and Strassburger, C.}, @@ -117,6 +131,20 @@ @misc{Kutschke:1996-AngularDistributionCookbook url = {https://www.slideshare.net/slideshow/angdist/90661337} } +@article{LHCb:2023-DalitzThreePions, + title = {Amplitude analysis of the $D^+ \to \pi^-\pi^+\pi^+$ decay and measurement of the $\pi^-\pi^+$ $S$-wave amplitude}, + author = {Aaij, R. and others}, + collaboration = {LHCb}, + year = 2023, + month = jun, + journal = {JHEP}, + volume = {06}, + pages = {044}, + eprint = {2208.03300}, + doi = {10.1007/JHEP06(2023)044}, + url = {https://arxiv.org/abs/2208.03300} +} + @article{Marangotto:2019ucc, title = {Helicity {{Amplitudes}} for {{Generic Multibody Particle Decays Featuring Multiple Decay Chains}}}, author = {Marangotto, Daniele}, From f3babe8fb2430f4c628b21e3f2fd525a5ab2b29d Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Thu, 10 Sep 2026 17:13:07 +0200 Subject: [PATCH 03/13] DOC: illustrate TR-036 decay chains with Mermaid --- docs/036/index.ipynb | 27 ++++++++++++++++++++++++++- docs/_static/mermaid.css | 13 +++++++++++++ docs/conf.py | 13 +++++++++++++ pyproject.toml | 1 + uv.lock | 20 ++++++++++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 docs/_static/mermaid.css diff --git a/docs/036/index.ipynb b/docs/036/index.ipynb index c953f5e..53b6825 100644 --- a/docs/036/index.ipynb +++ b/docs/036/index.ipynb @@ -17,7 +17,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "\n", "\n", "# $D^+\\to\\pi^+\\pi^+\\pi^-$ with Dalitz-plot decomposition\n", "\n", @@ -70,6 +70,7 @@ "from ampform_dpd.io import as_markdown_table\n", "from IPython.display import Markdown, Math\n", "from matplotlib.colors import LogNorm\n", + "from qrules.io import asmermaid\n", "from sympy.physics.quantum.spin import Rotation as Wigner\n", "from tensorwaves.function.sympy import create_function, create_parametrized_function\n", "\n", @@ -126,6 +127,30 @@ "Markdown(as_markdown_table(decay))" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "mystnb": { + "code_prompt_show": "Draw the three-body decay chains" + }, + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "mermaid = asmermaid(\n", + " reaction,\n", + " collapse_graphs=True,\n", + " markdown=True,\n", + ")\n", + "Markdown(mermaid)" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/docs/_static/mermaid.css b/docs/_static/mermaid.css new file mode 100644 index 0000000..e3eb7fe --- /dev/null +++ b/docs/_static/mermaid.css @@ -0,0 +1,13 @@ +/* Render Mermaid diagrams at their natural size instead of stretching them over +the full page width. */ +pre.mermaid > svg { + height: auto !important; + max-width: 100% !important; + width: auto !important; +} + +/* Hide graph edges behind labels in Sphinx-rendered Mermaid diagrams. Target +the outer HTML wrapper so multiline labels have one continuous background. */ +pre.mermaid g.edgeLabel foreignObject > div { + background-color: var(--pst-color-on-background) !important; +} diff --git a/docs/conf.py b/docs/conf.py index 87c82b5..a4d8346 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -128,9 +128,11 @@ def install_ijulia() -> None: "sphinx_thebe", "sphinx_togglebutton", "sphinxcontrib.bibtex", + "sphinxcontrib.mermaid", ] graphviz_output_format = "svg" html_css_files = [ + "mermaid.css", "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css", ] html_favicon = "_static/favicon.ico" @@ -239,6 +241,16 @@ def install_ijulia() -> None: r"https://github.com/ComPWA/RUB-EP1-AG/.*", # private r"https://github.com/orgs/ComPWA/projects/\d+", # private ] +mermaid_height = "auto" +mermaid_init_config = { + "flowchart": { + "nodeSpacing": 30, + "rankSpacing": 40, + "useMaxWidth": False, + }, + "startOnLoad": False, + "themeVariables": {"fontSize": "12px"}, +} myst_enable_extensions = [ "amsmath", "colon_fence", @@ -246,6 +258,7 @@ def install_ijulia() -> None: "smartquotes", "substitution", ] +myst_fence_as_directive = ["mermaid"] myst_heading_anchors = 4 myst_substitutions = { "branch": BRANCH, diff --git a/pyproject.toml b/pyproject.toml index 0291847..ff0e6bb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,7 @@ doc = [ "sphinx-thebe", "sphinx-togglebutton", "sphinxcontrib-bibtex >=2", + "sphinxcontrib-mermaid", { include-group = "notebooks" } ] jupyter = [ diff --git a/uv.lock b/uv.lock index 671a7c6..5354f67 100644 --- a/uv.lock +++ b/uv.lock @@ -603,6 +603,7 @@ dev = [ { name = "sphinx-thebe" }, { name = "sphinx-togglebutton" }, { name = "sphinxcontrib-bibtex" }, + { name = "sphinxcontrib-mermaid" }, { name = "ty" }, ] doc = [ @@ -626,6 +627,7 @@ doc = [ { name = "sphinx-thebe" }, { name = "sphinx-togglebutton" }, { name = "sphinxcontrib-bibtex" }, + { name = "sphinxcontrib-mermaid" }, ] jupyter = [ { name = "jupyter-ruff" }, @@ -684,6 +686,7 @@ dev = [ { name = "sphinx-thebe" }, { name = "sphinx-togglebutton" }, { name = "sphinxcontrib-bibtex", specifier = ">=2" }, + { name = "sphinxcontrib-mermaid" }, { name = "ty" }, ] doc = [ @@ -703,6 +706,7 @@ doc = [ { name = "sphinx-thebe" }, { name = "sphinx-togglebutton" }, { name = "sphinxcontrib-bibtex", specifier = ">=2" }, + { name = "sphinxcontrib-mermaid" }, ] jupyter = [ { name = "jupyter-ruff" }, @@ -3224,6 +3228,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071, upload-time = "2019-01-21T16:10:14.333Z" }, ] +[[package]] +name = "sphinxcontrib-mermaid" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, + { name = "pyyaml" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8c/87/06537dff20aa57df2d0f2afa87edff4afa85dec6f57f03f7acc24f83ff88/sphinxcontrib_mermaid-2.1.1.tar.gz", hash = "sha256:f8d7f1b2f0ad69b7ebdd5cbf532fb4ee107893b5373bc2d0e9634089c0b2cfee", size = 22353, upload-time = "2026-09-01T16:10:23.671Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/6a/5bf2222b8084c7a7bc3ec23d470c91e3e03e82e4ce0bbacaa61f456ce7c1/sphinxcontrib_mermaid-2.1.1-py3-none-any.whl", hash = "sha256:3b9ac1a8e0b5154dec3c0acf9b5c54dd9ba58540e416f20858c300814c25648f", size = 16368, upload-time = "2026-09-01T16:10:22.377Z" }, +] + [[package]] name = "sphinxcontrib-qthelp" version = "2.0.0" From 116053af1f1c593a2b85acabe8a5e2c109ffce56 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Thu, 10 Sep 2026 18:30:52 +0200 Subject: [PATCH 04/13] DOC: add TR-036 mass projections of the Dalitz density --- docs/036/index.ipynb | 61 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/docs/036/index.ipynb b/docs/036/index.ipynb index 53b6825..4ff8fd6 100644 --- a/docs/036/index.ipynb +++ b/docs/036/index.ipynb @@ -8,7 +8,7 @@ ":::{card} Bose-symmetric charm Dalitz model\n", "TR-036\n", "^^^\n", - "Formulate an illustrative $D^+\\to\\pi^+\\pi^+\\pi^-$ amplitude with QRules and AmpForm-DPD, display its formulas, and evaluate a Dalitz density with TensorWaves.\n", + "Formulate an illustrative $D^+\\to\\pi^+\\pi^+\\pi^-$ amplitude with QRules and AmpForm-DPD, display its formulas, and evaluate a Dalitz density and mass projections with TensorWaves.\n", ":::\n", "::::" ] @@ -70,10 +70,12 @@ "from ampform_dpd.io import as_markdown_table\n", "from IPython.display import Markdown, Math\n", "from matplotlib.colors import LogNorm\n", + "from matplotlib_inline.backend_inline import set_matplotlib_formats\n", "from qrules.io import asmermaid\n", "from sympy.physics.quantum.spin import Rotation as Wigner\n", "from tensorwaves.function.sympy import create_function, create_parametrized_function\n", "\n", + "set_matplotlib_formats(\"svg\")\n", "logging.getLogger(\"qrules\").setLevel(logging.ERROR)\n", "for package in (\"qrules\", \"ampform-dpd\", \"tensorwaves\"):\n", " print(f\"{package}: {version(package)}\")" @@ -629,6 +631,63 @@ "source": [ "The $\\rho(770)$, $f_0(980)$, and $f_2(1270)$ bands now have strengths informed by measured component ratios. The heavier states contribute broad structures and interference; their presence does not imply separate visible bands. The small $\\omega(782)$ contribution is concentrated near the $\\rho(770)$ band. The intensity remains symmetric under exchange of the positive pions." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## One-dimensional mass projections\n", + "\n", + "The projections integrate the coherent AmpForm-DPD intensity over the physical Dalitz grid. Each has unit area in its pair-mass-squared variable. Bose symmetry makes the $s$ and $t$ projections identical; $u$ describes the same-charge pion pair. Projection bins align with the integration grid to avoid binning artifacts." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "jupyter": { + "source_hidden": true + }, + "mystnb": { + "code_prompt_show": "Project the intensity onto the three pair masses" + }, + "tags": [ + "hide-input", + "scroll-input" + ] + }, + "outputs": [], + "source": [ + "projection_edges = edges[::10]\n", + "projection_labels = {\n", + " \"s\": r\"$s=m^2(\\pi^+_2\\pi^-)$ [GeV$^2$]\",\n", + " \"t\": r\"$t=m^2(\\pi^+_1\\pi^-)$ [GeV$^2$]\",\n", + " \"u\": r\"$u=m^2(\\pi^+_1\\pi^+_2)$ [GeV$^2$]\",\n", + "}\n", + "projection_variables = {\n", + " \"s\": grid_data[\"sigma1\"],\n", + " \"t\": grid_data[\"sigma2\"],\n", + " \"u\": sigma_sum - grid_data[\"sigma1\"] - grid_data[\"sigma2\"],\n", + "}\n", + "projections = {}\n", + "fig, axes = plt.subplots(1, 3, figsize=(12, 3.5), layout=\"constrained\")\n", + "for ax, (name, values) in zip(axes, projection_variables.items(), strict=True):\n", + " projection, _ = np.histogram(\n", + " values, bins=projection_edges, weights=density[physical] * cell_area\n", + " )\n", + " np.testing.assert_allclose(projection.sum(), coherent_integral, rtol=1e-10)\n", + " projection /= coherent_integral * np.diff(projection_edges)\n", + " projections[name] = projection\n", + " ax.stairs(projection, projection_edges)\n", + " ax.set(\n", + " xlabel=projection_labels[name],\n", + " ylabel=r\"probability density [GeV$^{-2}$]\",\n", + " ylim=(0, None),\n", + " )\n", + "np.testing.assert_allclose(projections[\"s\"], projections[\"t\"], rtol=1e-10)\n", + "fig.savefig(\"projections-dpd.svg\")\n", + "plt.show()" + ] } ], "metadata": { From d367a0ce2e45f922db851ce434d92676c48f77e9 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Thu, 10 Sep 2026 16:58:41 +0200 Subject: [PATCH 05/13] DX: disable fullscreen button in the docs theme --- docs/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/conf.py b/docs/conf.py index a4d8346..04e873d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -179,6 +179,7 @@ def install_ijulia() -> None: "path_to_docs": "docs", "use_download_button": False, "use_edit_page_button": True, + "use_fullscreen_button": False, "use_issues_button": True, "use_repository_button": True, "use_source_button": True, From e9d35fcee521db036bf62f0f16d8bc91e76959af Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Thu, 10 Sep 2026 18:31:42 +0200 Subject: [PATCH 06/13] MAINT: remove `juliaup` from cSpell --- .cspell.json | 1 - 1 file changed, 1 deletion(-) diff --git a/.cspell.json b/.cspell.json index 5d13227..5f6cd2e 100644 --- a/.cspell.json +++ b/.cspell.json @@ -123,7 +123,6 @@ "itertools", "joinpath", "jpsi", - "juliaup", "kernelspec", "kwargs", "lambdifygenerated", From 5b7d089c46a2c567d6b5e7148b4d2e94f785f0ff Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Thu, 10 Sep 2026 20:47:55 +0200 Subject: [PATCH 07/13] DOC: render package versions as PyPI links --- docs/036/index.ipynb | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/docs/036/index.ipynb b/docs/036/index.ipynb index 4ff8fd6..a1ea90d 100644 --- a/docs/036/index.ipynb +++ b/docs/036/index.ipynb @@ -51,35 +51,7 @@ ] }, "outputs": [], - "source": [ - "import logging\n", - "from importlib.metadata import version\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import qrules\n", - "import sympy as sp\n", - "from ampform.dynamics import EnergyDependentWidth\n", - "from ampform.dynamics.form_factor import BlattWeisskopfSquared, FormFactor\n", - "from ampform.io import aslatex\n", - "from ampform.kinematics.phasespace import BreakupMomentumSquared, Kallen\n", - "from ampform_dpd import DalitzPlotDecompositionBuilder\n", - "from ampform_dpd.adapter.qrules import normalize_state_ids, to_three_body_decay\n", - "from ampform_dpd.dynamics import RelativisticBreitWigner\n", - "from ampform_dpd.dynamics.builder import formulate_breit_wigner_with_form_factor\n", - "from ampform_dpd.io import as_markdown_table\n", - "from IPython.display import Markdown, Math\n", - "from matplotlib.colors import LogNorm\n", - "from matplotlib_inline.backend_inline import set_matplotlib_formats\n", - "from qrules.io import asmermaid\n", - "from sympy.physics.quantum.spin import Rotation as Wigner\n", - "from tensorwaves.function.sympy import create_function, create_parametrized_function\n", - "\n", - "set_matplotlib_formats(\"svg\")\n", - "logging.getLogger(\"qrules\").setLevel(logging.ERROR)\n", - "for package in (\"qrules\", \"ampform-dpd\", \"tensorwaves\"):\n", - " print(f\"{package}: {version(package)}\")" - ] + "source": "import logging\nfrom importlib.metadata import version\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport qrules\nimport sympy as sp\nfrom ampform.dynamics import EnergyDependentWidth\nfrom ampform.dynamics.form_factor import BlattWeisskopfSquared, FormFactor\nfrom ampform.io import aslatex\nfrom ampform.kinematics.phasespace import BreakupMomentumSquared, Kallen\nfrom ampform_dpd import DalitzPlotDecompositionBuilder\nfrom ampform_dpd.adapter.qrules import normalize_state_ids, to_three_body_decay\nfrom ampform_dpd.dynamics import RelativisticBreitWigner\nfrom ampform_dpd.dynamics.builder import formulate_breit_wigner_with_form_factor\nfrom ampform_dpd.io import as_markdown_table\nfrom IPython.display import Markdown, Math\nfrom matplotlib.colors import LogNorm\nfrom matplotlib_inline.backend_inline import set_matplotlib_formats\nfrom qrules.io import asmermaid\nfrom sympy.physics.quantum.spin import Rotation as Wigner\nfrom tensorwaves.function.sympy import create_function, create_parametrized_function\n\nset_matplotlib_formats(\"svg\")\nlogging.getLogger(\"qrules\").setLevel(logging.ERROR)\npackage_versions = \"\\n\".join(\n f\"- [{package} {version(package)}](https://pypi.org/project/{package}/{version(package)})\"\n for package in (\"qrules\", \"ampform-dpd\", \"tensorwaves\")\n)\nMarkdown(package_versions)" }, { "cell_type": "code", From 313ec90d61c5473a6c77baacd3a6d59161ffef5c Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Thu, 10 Sep 2026 20:51:54 +0200 Subject: [PATCH 08/13] DOC: call `improve_latex_rendering` --- docs/036/index.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/036/index.ipynb b/docs/036/index.ipynb index a1ea90d..23d5369 100644 --- a/docs/036/index.ipynb +++ b/docs/036/index.ipynb @@ -51,7 +51,7 @@ ] }, "outputs": [], - "source": "import logging\nfrom importlib.metadata import version\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport qrules\nimport sympy as sp\nfrom ampform.dynamics import EnergyDependentWidth\nfrom ampform.dynamics.form_factor import BlattWeisskopfSquared, FormFactor\nfrom ampform.io import aslatex\nfrom ampform.kinematics.phasespace import BreakupMomentumSquared, Kallen\nfrom ampform_dpd import DalitzPlotDecompositionBuilder\nfrom ampform_dpd.adapter.qrules import normalize_state_ids, to_three_body_decay\nfrom ampform_dpd.dynamics import RelativisticBreitWigner\nfrom ampform_dpd.dynamics.builder import formulate_breit_wigner_with_form_factor\nfrom ampform_dpd.io import as_markdown_table\nfrom IPython.display import Markdown, Math\nfrom matplotlib.colors import LogNorm\nfrom matplotlib_inline.backend_inline import set_matplotlib_formats\nfrom qrules.io import asmermaid\nfrom sympy.physics.quantum.spin import Rotation as Wigner\nfrom tensorwaves.function.sympy import create_function, create_parametrized_function\n\nset_matplotlib_formats(\"svg\")\nlogging.getLogger(\"qrules\").setLevel(logging.ERROR)\npackage_versions = \"\\n\".join(\n f\"- [{package} {version(package)}](https://pypi.org/project/{package}/{version(package)})\"\n for package in (\"qrules\", \"ampform-dpd\", \"tensorwaves\")\n)\nMarkdown(package_versions)" + "source": "import logging\nfrom importlib.metadata import version\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport qrules\nimport sympy as sp\nfrom ampform.dynamics import EnergyDependentWidth\nfrom ampform.dynamics.form_factor import BlattWeisskopfSquared, FormFactor\nfrom ampform.io import aslatex, improve_latex_rendering\nfrom ampform.kinematics.phasespace import BreakupMomentumSquared, Kallen\nfrom ampform_dpd import DalitzPlotDecompositionBuilder\nfrom ampform_dpd.adapter.qrules import normalize_state_ids, to_three_body_decay\nfrom ampform_dpd.dynamics import RelativisticBreitWigner\nfrom ampform_dpd.dynamics.builder import formulate_breit_wigner_with_form_factor\nfrom ampform_dpd.io import as_markdown_table\nfrom IPython.display import Markdown, Math\nfrom matplotlib.colors import LogNorm\nfrom matplotlib_inline.backend_inline import set_matplotlib_formats\nfrom qrules.io import asmermaid\nfrom sympy.physics.quantum.spin import Rotation as Wigner\nfrom tensorwaves.function.sympy import create_function, create_parametrized_function\n\nimprove_latex_rendering()\nset_matplotlib_formats(\"svg\")\nlogging.getLogger(\"qrules\").setLevel(logging.ERROR)\npackage_versions = \"\\n\".join(\n f\"- [{package} {version(package)}](https://pypi.org/project/{package}/{version(package)})\"\n for package in (\"qrules\", \"ampform-dpd\", \"tensorwaves\")\n)\nMarkdown(package_versions)" }, { "cell_type": "code", From d7fa89fbeb7db27c1c7b05c6282e72e474dbdfcf Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Thu, 10 Sep 2026 21:04:17 +0200 Subject: [PATCH 09/13] MAINT: fix notebook rendering --- docs/036/index.ipynb | 46 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/docs/036/index.ipynb b/docs/036/index.ipynb index 23d5369..2d1f89e 100644 --- a/docs/036/index.ipynb +++ b/docs/036/index.ipynb @@ -51,7 +51,39 @@ ] }, "outputs": [], - "source": "import logging\nfrom importlib.metadata import version\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport qrules\nimport sympy as sp\nfrom ampform.dynamics import EnergyDependentWidth\nfrom ampform.dynamics.form_factor import BlattWeisskopfSquared, FormFactor\nfrom ampform.io import aslatex, improve_latex_rendering\nfrom ampform.kinematics.phasespace import BreakupMomentumSquared, Kallen\nfrom ampform_dpd import DalitzPlotDecompositionBuilder\nfrom ampform_dpd.adapter.qrules import normalize_state_ids, to_three_body_decay\nfrom ampform_dpd.dynamics import RelativisticBreitWigner\nfrom ampform_dpd.dynamics.builder import formulate_breit_wigner_with_form_factor\nfrom ampform_dpd.io import as_markdown_table\nfrom IPython.display import Markdown, Math\nfrom matplotlib.colors import LogNorm\nfrom matplotlib_inline.backend_inline import set_matplotlib_formats\nfrom qrules.io import asmermaid\nfrom sympy.physics.quantum.spin import Rotation as Wigner\nfrom tensorwaves.function.sympy import create_function, create_parametrized_function\n\nimprove_latex_rendering()\nset_matplotlib_formats(\"svg\")\nlogging.getLogger(\"qrules\").setLevel(logging.ERROR)\npackage_versions = \"\\n\".join(\n f\"- [{package} {version(package)}](https://pypi.org/project/{package}/{version(package)})\"\n for package in (\"qrules\", \"ampform-dpd\", \"tensorwaves\")\n)\nMarkdown(package_versions)" + "source": [ + "import logging\n", + "from importlib.metadata import version\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import qrules\n", + "import sympy as sp\n", + "from ampform.dynamics import EnergyDependentWidth\n", + "from ampform.dynamics.form_factor import BlattWeisskopfSquared, FormFactor\n", + "from ampform.io import aslatex, improve_latex_rendering\n", + "from ampform.kinematics.phasespace import BreakupMomentumSquared, Kallen\n", + "from ampform_dpd import DalitzPlotDecompositionBuilder\n", + "from ampform_dpd.adapter.qrules import normalize_state_ids, to_three_body_decay\n", + "from ampform_dpd.dynamics import RelativisticBreitWigner\n", + "from ampform_dpd.dynamics.builder import formulate_breit_wigner_with_form_factor\n", + "from ampform_dpd.io import as_markdown_table\n", + "from IPython.display import Markdown, Math\n", + "from matplotlib.colors import LogNorm\n", + "from matplotlib_inline.backend_inline import set_matplotlib_formats\n", + "from qrules.io import asmermaid\n", + "from sympy.physics.quantum.spin import Rotation as Wigner\n", + "from tensorwaves.function.sympy import create_function, create_parametrized_function\n", + "\n", + "improve_latex_rendering()\n", + "set_matplotlib_formats(\"svg\")\n", + "logging.getLogger(\"qrules\").setLevel(logging.ERROR)\n", + "package_versions = \"\\n\".join(\n", + " f\"- [{package} {version(package)}](https://pypi.org/project/{package}/{version(package)})\"\n", + " for package in (\"qrules\", \"ampform-dpd\", \"tensorwaves\")\n", + ")\n", + "Markdown(package_versions)" + ] }, { "cell_type": "code", @@ -421,8 +453,10 @@ "\n", "A coefficient of one has a different meaning for each unnormalized lineshape. Copying published magnitudes would also mix different angular and lineshape normalizations. Instead, let $a_R(s,t)$ be the Bose-symmetrized amplitude with coefficient one, and define\n", "\n", - "$$N_R=\\int_{\\mathcal D}|a_R(s,t)|^2\\,ds\\,dt,\\qquad\n", - "r_R=\\frac{\\mathrm{FF}_R^{\\mathrm{source}}}{\\mathrm{FF}_{\\rho(770)}^{\\mathrm{source}}}.$$\n", + "$$\n", + "N_R=\\int_{\\mathcal D}|a_R(s,t)|^2\\,ds\\,dt,\\qquad\n", + "r_R=\\frac{\\mathrm{FF}_R^{\\mathrm{source}}}{\\mathrm{FF}_{\\rho(770)}^{\\mathrm{source}}}.\n", + "$$\n", "\n", "With $c_{\\rho(770)}=1$, choose\n", "\n", @@ -432,8 +466,10 @@ "\n", "The integrals use equal-area cells on the physical Dalitz domain. Comparing 500 and 1000 bins per axis checks numerical stability, including the narrow $\\omega$ band. The displayed model fractions are computed with the **coherent** denominator,\n", "\n", - "$$\\mathrm{FF}^{\\mathrm{model}}_R=\n", - "\\frac{|c_R|^2N_R}{\\int_{\\mathcal D}|\\sum_k c_k a_k|^2\\,ds\\,dt}.$$\n", + "$$\n", + "\\mathrm{FF}^{\\mathrm{model}}_R=\n", + "\\frac{|c_R|^2N_R}{\\int_{\\mathcal D}|\\sum_k c_k a_k|^2\\,ds\\,dt}.\n", + "$$\n", "\n", "They need not equal the source fractions or sum to one because of interference and the combined resonance content." ] From cdecc1b35d5b266746859ef3cece59fc83f9433a Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Thu, 10 Sep 2026 21:34:30 +0200 Subject: [PATCH 10/13] MAINT: sync bibliography with Zotero --- docs/036/index.ipynb | 6 +++--- docs/bibliography.bib | 48 ++++++++++++++++++++++--------------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/docs/036/index.ipynb b/docs/036/index.ipynb index 2d1f89e..8acdbde 100644 --- a/docs/036/index.ipynb +++ b/docs/036/index.ipynb @@ -25,8 +25,8 @@ "\n", "The resonance content follows two published analyses:\n", "\n", - "- CLEO {cite}`CLEO:2007-DalitzThreePions`, Table II: $\\rho(770)$, $f_2(1270)$, $f_0(980)$, $f_0(1370)$, $f_0(1500)$, and a low-mass $\\sigma$ component, represented here by $f_0(500)$.\n", - "- LHCb {cite}`LHCb:2023-DalitzThreePions`, Table 2: also includes $\\omega(782)$, $\\rho(1450)$, and $\\rho(1700)$. Its S wave is determined with a quasi-model-independent parametrization, rather than separate scalar isobars. States tested without significant improvement, such as $\\rho_3(1690)$, are not included here.\n", + "- CLEO {cite}`CLEO:2007ktn`, Table II: $\\rho(770)$, $f_2(1270)$, $f_0(980)$, $f_0(1370)$, $f_0(1500)$, and a low-mass $\\sigma$ component, represented here by $f_0(500)$.\n", + "- LHCb {cite}`LHCb:2022lja`, Table 2: also includes $\\omega(782)$, $\\rho(1450)$, and $\\rho(1700)$. Its S wave is determined with a quasi-model-independent parametrization, rather than separate scalar isobars. States tested without significant improvement, such as $\\rho_3(1690)$, are not included here.\n", "\n", "This nine-resonance example combines CLEO's scalar-isobar content with the additional LHCb vector states. It retains the package Breit–Wigner dynamics, masses, widths, and radii. CLEO instead uses a complex $\\sigma$ pole and a Flatté function for $f_0(980)$; LHCb uses Gounaris–Sakurai functions for the $\\rho$ states. The S wave, especially near the $K\\bar K$ threshold, therefore remains an approximation. The source fit-fraction ratios set the relative component strengths below; the result is a literature-informed illustration, not a reproduction of either fit. No CP violation is assumed.\n", "\n", @@ -462,7 +462,7 @@ "\n", "$$c_R=\\sqrt{r_R\\frac{N_{\\rho(770)}}{N_R}}\\,e^{i\\phi_R}.$$\n", "\n", - "This preserves **ratios of diagonal component integrals**, independently of the overall amplitude normalization. CLEO {cite}`CLEO:2007-DalitzThreePions` supplies the six original components; LHCb {cite}`LHCb:2023-DalitzThreePions` supplies the three additional vectors, using its own $\\rho(770)$ fraction as their reference. These are separate fits, not a combined experimental result. Their central phase values are adopted only as illustrative starting values in the DPD convention: an exact phase transfer would require matching each source's angular signs and dynamical phase conventions. No uncertainty propagation or refit is performed.\n", + "This preserves **ratios of diagonal component integrals**, independently of the overall amplitude normalization. CLEO {cite}`CLEO:2007ktn` supplies the six original components; LHCb {cite}`LHCb:2022lja` supplies the three additional vectors, using its own $\\rho(770)$ fraction as their reference. These are separate fits, not a combined experimental result. Their central phase values are adopted only as illustrative starting values in the DPD convention: an exact phase transfer would require matching each source's angular signs and dynamical phase conventions. No uncertainty propagation or refit is performed.\n", "\n", "The integrals use equal-area cells on the physical Dalitz domain. Comparing 500 and 1000 bins per axis checks numerical stability, including the narrow $\\omega$ band. The displayed model fractions are computed with the **coherent** denominator,\n", "\n", diff --git a/docs/bibliography.bib b/docs/bibliography.bib index 6fef565..6e85015 100644 --- a/docs/bibliography.bib +++ b/docs/bibliography.bib @@ -42,20 +42,6 @@ @book{Byckling:1971vca isbn = {978-0-471-12885-4} } -@article{CLEO:2007-DalitzThreePions, - title = {Dalitz plot analysis of the $D^+ \to \pi^-\pi^+\pi^+$ decay}, - author = {Bonvicini, G. and others}, - collaboration = {CLEO}, - year = 2007, - month = jul, - journal = {Phys. Rev. D}, - volume = {76}, - pages = {012001}, - eprint = {0704.3954}, - doi = {10.1103/PhysRevD.76.012001}, - url = {https://arxiv.org/abs/0704.3954} -} - @article{Chung:1995dx, title = {Partial wave analysis in {$K$-matrix} formalism}, author = {Chung, Suh-Urk and Brose, J. and Hackmann, R. and Klempt, E. and Spanier, S. and Strassburger, C.}, @@ -80,6 +66,21 @@ @techreport{Chung:2014-SpinFormalismsUpdated url = {https://cds.cern.ch/record/186421/files/BNL-76975-2006-IR.pdf} } +@article{CLEO:2007ktn, + title = {Dalitz plot analysis of the {$D^+ \to \pi^-\pi^+\pi^+$} decay}, + author = {{CLEO Collaboration} and Bonvicini, G. and Cinabro, D. and Dubrovin, M. and Lincoln, A. and Asner, D. M. and Edwards, K. W. and Naik, P. and Briere, R. A. and Ferguson, T. and Tatishvili, G. and Vogel, H. and Watkins, M. E. and Rosner, J. L. and Adam, N. E. and Alexander, J. P. and Cassel, D. G. and Duboscq, J. E. and Ehrlich, R. and Fields, L. and Galik, R. S. and Gibbons, L. and Gray, R. and Gray, S. W. and Hartill, D. L. and Heltsley, B. K. and Hertz, D. and Jones, C. D. and Kandaswamy, J. and Kreinick, D. L. and Kuznetsov, V. E. and {Mahlke-Krüger}, H. and Mohapatra, D. and Onyisi, P. U. E. and Patterson, J. R. and Peterson, D. and Pivarski, J. and Riley, D. and Ryd, A. and Sadoff, A. J. and Schwarthoff, H. and Shi, X. and Stroiney, S. and Sun, W. M. and Wilksen, T. and Athar, S. B. and Patel, R. and Yelton, J. and Rubin, P. and Cawlfield, C. and Eisenstein, B. I. and Karliner, I. and Kim, D. and Lowrey, N. and Selen, M. and White, E. J. and Wiss, J. and Mitchell, R. E. and Shepherd, M. R. and Besson, D. and Pedlar, T. K. and {Cronin-Hennessy}, D. and Gao, K. Y. and Hietala, J. and Kubota, Y. and Klein, T. and Lang, B. W. and Poling, R. and Scott, A. W. and Smith, A. and Zweber, P. and Dobbs, S. and Metreveli, Z. and Seth, K. K. and Tomaradze, A. and Ernst, J. and Ecklund, K. M. and Severini, H. and Love, W. and Savinov, V. and Aquines, O. and Lopez, A. and Mehrabyan, S. and Mendez, H. and Ramirez, J. and Huang, G. S. and Miller, D. H. and Pavlunin, V. and Sanghi, B. and Shipsey, I. P. J. and Xin, B. and Adams, G. S. and Anderson, M. and Cummings, J. P. and Danko, I. and Hu, D. and Moziak, B. and Napolitano, J. and He, Q. and Insler, J. and Muramatsu, H. and Park, C. S. and Thorndike, E. H. and Yang, F. and Artuso, M. and Blusk, S. and Butt, J. and Horwitz, N. and Khalil, S. and Li, J. and Menaa, N. and Mountain, R. and Nisar, S. and Randrianarivony, K. and Sia, R. and Skwarnicki, T. and Stone, S. and Wang, J. C.}, + year = 2007, + month = jul, + journal = {Phys. Rev. D}, + volume = {76}, + number = {1}, + pages = {012001}, + issn = {1550-7998, 1550-2368}, + doi = {10.1103/PhysRevD.76.012001}, + url = {https://link.aps.org/doi/10.1103/PhysRevD.76.012001}, + collaboration = {CLEO Collaboration} +} + @article{Jacob:1959at, title = {On the General Theory of Collisions for Particles with Spin}, author = {Jacob, M. and Wick, G.C.}, @@ -131,18 +132,19 @@ @misc{Kutschke:1996-AngularDistributionCookbook url = {https://www.slideshare.net/slideshow/angdist/90661337} } -@article{LHCb:2023-DalitzThreePions, - title = {Amplitude analysis of the $D^+ \to \pi^-\pi^+\pi^+$ decay and measurement of the $\pi^-\pi^+$ $S$-wave amplitude}, - author = {Aaij, R. and others}, - collaboration = {LHCb}, +@article{LHCb:2022lja, + title = {Amplitude analysis of the {$D^+ \to \pi^-\pi^+\pi^+$} decay and measurement of the $\pi^-\pi^+$ {$S$-wave} amplitude}, + author = {{The LHCb collaboration} and Aaij, R. and Abdelmotteleb, A. S. W. and Abellan Beteta, C. and Abudinén, F. and Ackernley, T. and Adeva, B. and Adinolfi, M. and Afsharnia, H. and Agapopoulou, C. and Aidala, C. A. and Aiola, S. and Ajaltouni, Z. and Akar, S. and Akiba, K. and Albrecht, J. and Alessio, F. and Alexander, M. and Alfonso Albero, A. and Aliouche, Z. and Alvarez Cartelle, P. and Amalric, R. and Amato, S. and Amey, J. L. and Amhis, Y. and An, L. and Anderlini, L. and Andersson, M. and Andreianov, A. and Andreotti, M. and Andreou, D. and Ao, D. and Archilli, F. and Artamonov, A. and Artuso, M. and Aslanides, E. and Atzeni, M. and Audurier, B. and Bachmann, S. and Bachmayer, M. and Back, J. J. and {Bailly-reyre}, A. and Baladron Rodriguez, P. and Balagura, V. and Baldini, W. and Baptista De Souza Leite, J. and Barbetti, M. and Barlow, R. J. and Barsuk, S. and Barter, W. and Bartolini, M. and Baryshnikov, F. and Basels, J. M. and Bassi, G. and Batsukh, B. and Battig, A. and Bay, A. and Beck, A. and Becker, M. and Bedeschi, F. and Bediaga, I. B. and Beiter, A. and Belavin, V. and Belin, S. and Bellee, V. and Belous, K. and Belov, I. and Belyaev, I. and Benane, G. and Bencivenni, G. and {Ben-Haim}, E. and Berezhnoy, A. and Bernet, R. and Berninghoff, D. and Bernstein, H. C. and Bertella, C. and Bertolin, A. and Betancourt, C. and Betti, F. and Bezshyiko, {\relax Ia}. and Bhasin, S. and Bhom, J. and Bian, L. and Bieker, M. S. and Biesuz, N. V. and Bifani, S. and Billoir, P. and Biolchini, A. and Birch, M. and Bishop, F. C. R. and Bitadze, A. and Bizzeti, A. and Blago, M. P. and Blake, T. and Blanc, F. and Blusk, S. and Bobulska, D. and Boelhauve, J. A. and Garcia, O. Boente and Boettcher, T. and Boldyrev, A. and Bolognani, C. S. and Bondar, N. and Borghi, S. and Borsato, M. and Borsuk, J. T. and Bouchiba, S. A. and Bowcock, T. J. V. and Boyer, A. and Bozzi, C. and Bradley, M. J. and Braun, S. and Brea Rodriguez, A. and Brodzicka, J. and Brossa Gonzalo, A. and Brundu, D. and Buonaura, A. and Buonincontri, L. and Burke, A. T. and Burr, C. and Bursche, A. and Butkevich, A. and Butter, J. S. and Buytaert, J. and Byczynski, W. and Cadeddu, S. and Cai, H. and Calabrese, R. and Calefice, L. and Cali, S. and Calladine, R. and Calvi, M. and Calvo Gomez, M. and Campana, P. and Campora Perez, D. H. and Campoverde Quezada, A. F. and Capelli, S. and Capriotti, L. and Carbone, A. and Carboni, G. and Cardinale, R. and Cardini, A. and Carli, I. and Carniti, P. and Carus, L. and Casais Vidal, A. and Caspary, R. and Casse, G. and Cattaneo, M. and Cavallero, G. and Cavallini, V. and Celani, S. and Cerasoli, J. and Cervenkov, D. and Chadwick, A. J. and Chapman, M. G. and Charles, M. and Charpentier, {\relax Ph}. and Chavez Barajas, C. A. and Chefdeville, M. and Chen, C. and Chen, S. and Chernov, A. and Chernyshenko, S. and Chobanova, V. and Cholak, S. and Chrzaszcz, M. and Chubykin, A. and Chulikov, V. and Ciambrone, P. and Cicala, M. F. and Cid Vidal, X. and Ciezarek, G. and Ciullo, G. and Clarke, P. E. L. and Clemencic, M. and Cliff, H. V. and Closier, J. and Cobbledick, J. L. and Coco, V. and Coelho, J. A. B. and Cogan, J. and Cogneras, E. and Cojocariu, L. and Collins, P. and Colombo, T. and Congedo, L. and Contu, A. and Cooke, N. and Coombs, G. and Corredoira, I. and Corti, G. and Couturier, B. and Craik, D. C. and Crkovská, J. and Cruz Torres, M. and Currie, R. and Da Silva, C. L. and Dadabaev, S. and Dai, L. and Dai, X. and Dall’Occo, E. and Dalseno, J. and D’Ambrosio, C. and Danilina, A. and {d’Argent}, P. and Davies, J. E. and Davis, A. and De Aguiar Francisco, O. and De Boer, J. and De Bruyn, K. and De Capua, S. and De Cian, M. and De Freitas Carneiro Da Graca, U. and De Lucia, E. and De Miranda, J. M. and De Paula, L. and De Serio, M. and De Simone, D. and De Simone, P. and De Vellis, F. and De Vries, J. A. and Dean, C. T. and Debernardis, F. and Decamp, D. and Dedu, V. and Del Buono, L. and Delaney, B. and Dembinski, H.-P. and Denysenko, V. and Deschamps, O. and Dettori, F. and Dey, B. and Di Cicco, A. and Di Nezza, P. and Diachkov, I. and Didenko, S. and Dieste Maronas, L. and Ding, S. and Dobishuk, V. and Dolmatov, A. and Dong, C. and Donohoe, A. M. and Dordei, F. and Dos Reis, A. C. and Douglas, L. and Downes, A. G. and Dudek, M. W. and Dufour, L. and Duk, V. and Durante, P. and Durham, J. M. and Dutta, D. and Dziurda, A. and Dzyuba, A. and Easo, S. and Egede, U. and Egorychev, V. and Eidelman, S. and Eirea Orro, C. and Eisenhardt, S. and {Ek-In}, S. and Eklund, L. and Ely, S. and Ene, A. and Epple, E. and Escher, S. and Eschle, J. and Esen, S. and Evans, T. and Falcao, L. N. and Fan, Y. and Fang, B. and Farry, S. and Fazzini, D. and Feo, M. and Fernez, A. D. and Ferrari, F. and Ferreira Lopes, L. and Ferreira Rodrigues, F. and Ferreres Sole, S. and Ferrillo, M. and {Ferro-Luzzi}, M. and Filippov, S. and Fini, R. A. and Fiorini, M. and Firlej, M. and Fischer, K. M. and Fitzgerald, D. S. and Fitzpatrick, C. and Fiutowski, T. and Fleuret, F. and Fontana, M. and Fontanelli, F. and Forty, R. and {Foulds-Holt}, D. and Franco Lima, V. and Franco Sevilla, M. and Frank, M. and Franzoso, E. and Frau, G. and Frei, C. and Friday, D. A. and Fu, J. and Fuehring, Q. and Gabriel, E. and Galati, G. and Galati, M. D. and Gallas Torreira, A. and Galli, D. and Gambetta, S. and Gan, Y. and Gandelman, M. and Gandini, P. and Gao, Y. and Garau, M. and Garcia Martin, L. M. and Garcia Moreno, P. and García Pardiñas, J. and Garcia Plana, B. and Garcia Rosales, F. A. and Garrido, L. and Gaspar, C. and Geertsema, R. E. and Gerick, D. and Gerken, L. L. and Gersabeck, E. and Gersabeck, M. and Gershon, T. and Giambastiani, L. and Gibson, V. and Giemza, H. K. and Gilman, A. L. and Giovannetti, M. and Gioventù, A. and Gironella Gironell, P. and Giugliano, C. and Giza, M. A. and Gizdov, K. and Gkougkousis, E. L. and Gligorov, V. V. and Göbel, C. and Golobardes, E. and Golubkov, D. and Golutvin, A. and Gomes, A. and Gomez Fernandez, S. and Goncalves Abrantes, F. and Goncerz, M. and Gong, G. and Gorelov, I. V. and Gotti, C. and Grabowski, J. P. and Grammatico, T. and Granado Cardoso, L. A. and Graugés, E. and Graverini, E. and Graziani, G. and Grecu, A. T. and Greeven, L. M. and Grieser, N. A. and Grillo, L. and Gromov, S. and Gruberg Cazon, B. R. and Gu, C. and Guarise, M. and Guittiere, M. and Günther, P. A. and Gushchin, E. and Guth, A. and Guz, Y. and Gys, T. and Hadavizadeh, T. and Haefeli, G. and Haen, C. and Haimberger, J. and Haines, S. C. and {Halewood-leagas}, T. and Halvorsen, M. M. and Hamilton, P. M. and Hammerich, J. and Han, Q. and Han, X. and Hansen, E. B. and {Hansmann-Menzemer}, S. and Hao, L. and Harnew, N. and Harrison, T. and Hasse, C. and Hatch, M. and He, J. and Heijhoff, K. and Heinicke, K. and Henderson, C. and Henderson, R. D. L. and Hennequin, A. M. and Hennessy, K. and Henry, L. and Heuel, J. and Hicheur, A. and Hill, D. and Hilton, M. and Hollitt, S. E. and Horswill, J. and Hou, R. and Hou, Y. and Hu, J. and Hu, J. and Hu, W. and Hu, X. and Huang, W. and Huang, X. and Hulsbergen, W. and Hunter, R. J. and Hushchyn, M. and Hutchcroft, D. and Ibis, P. and Idzik, M. and Ilin, D. and Ilten, P. and Inglessi, A. and Iniukhin, A. and Ishteev, A. and Ivshin, K. and Jacobsson, R. and Jage, H. and Jaimes Elles, S. J. and Jakobsen, S. and Jans, E. and Jashal, B. K. and Jawahery, A. and Jevtic, V. and Jiang, X. and Jiang, Y. and John, M. and Johnson, D. and Jones, C. R. and Jones, T. P. and Jost, B. and Jurik, N. and Juszczak, I. and Kandybei, S. and Kang, Y. and Karacson, M. and Karpenkov, D. and Karpov, M. and Kautz, J. W. and Keizer, F. and Keller, D. M. and Kenzie, M. and Ketel, T. and Khanji, B. and Kharisova, A. and Kholodenko, S. and Kirn, T. and Kirsebom, V. S. and Kitouni, O. and Klaver, S. and Kleijne, N. and Klimaszewski, K. and Kmiec, M. R. and Koliiev, S. and Kondybayeva, A. and Konoplyannikov, A. and Kopciewicz, P. and Kopecna, R. and Koppenburg, P. and Korolev, M. and Kostiuk, I. and Kot, O. and Kotriakhova, S. and Kozachuk, A. and Kravchenko, P. and Kravchuk, L. and Krawczyk, R. D. and Kreps, M. and Kretzschmar, S. and Krokovny, P. and Krupa, W. and Krzemien, W. and Kubat, J. and Kucewicz, W. and Kucharczyk, M. and Kudryavtsev, V. and Kunde, G. J. and Kupsc, A. and Lacarrere, D. and Lafferty, G. and Lai, A. and Lampis, A. and Lancierini, D. and Landesa Gomez, C. and Lane, J. J. and Lane, R. and Lanfranchi, G. and Langenbruch, C. and Langer, J. and Lantwin, O. and Latham, T. and Lazzari, F. and Lazzaroni, M. and Le Gac, R. and Lee, S. H. and Lefèvre, R. and Leflat, A. and Legotin, S. and Lenisa, P. and Leroy, O. and Lesiak, T. and Leverington, B. and Li, A. and Li, H. and Li, K. and Li, P. and Li, S. and Li, T. and Li, Y. and Li, Z. and Liang, X. and Lin, C. and Lin, T. and Lindner, R. and Lisovskyi, V. and Litvinov, R. and Liu, G. and Liu, H. and Liu, Q. and Liu, S. and Lobo Salvia, A. and Loi, A. and Lollini, R. and Lomba Castro, J. and Longstaff, I. and Lopes, J. H. and López Soliño, S. and Lovell, G. H. and Lu, Y. and Lucarelli, C. and Lucchesi, D. and Luchuk, S. and Lucio Martinez, M. and Lukashenko, V. and Luo, Y. and Lupato, A. and Luppi, E. and Lusiani, A. and Lynch, K. and Lyu, X.-R. and Ma, L. and Ma, R. and Maccolini, S. and Machefert, F. and Maciuc, F. and Macko, V. and Mackowiak, P. and {Maddrell-Mander}, S. and Madhan Mohan, L. R. and Maevskiy, A. and Maisuzenko, D. and Majewski, M. W. and Malczewski, J. J. and Malde, S. and Malecki, B. and Malinin, A. and Maltsev, T. and Malygina, H. and Manca, G. and Mancinelli, G. and Manuzzi, D. and Manzari, C. A. and Marangotto, D. and Marchand, J. F. and Marconi, U. and Mariani, S. and Marin Benito, C. and Marinangeli, M. and Marks, J. and Marshall, A. M. and Marshall, P. J. and Martelli, G. and Martellotti, G. and Martinazzoli, L. and Martinelli, M. and Martinez Santos, D. and Martinez Vidal, F. and Massafferri, A. and Materok, M. and Matev, R. and Mathad, A. and Matiunin, V. and Matteuzzi, C. and Mattioli, K. R. and Mauri, A. and Maurice, E. and Mauricio, J. and Mazurek, M. and McCann, M. and Mcconnell, L. and McGrath, T. H. and McHugh, N. T. and McNab, A. and McNulty, R. and Mead, J. V. and Meadows, B. and Meier, G. and Melnychuk, D. and Meloni, S. and Merk, M. and Merli, A. and Meyer Garcia, L. and Miao, D. and Mikhasenko, M. and Milanes, D. A. and Millard, E. and Milovanovic, M. and Minard, M.-N. and Minotti, A. and Mitchell, S. E. and Mitreska, B. and Mitzel, D. S. and Mödden, A. and Mohammed, R. A. and Moise, R. D. and Mokhnenko, S. and Mombächer, T. and Monroy, I. A. and Monteil, S. and Morandin, M. and Morello, G. and Morello, M. J. and Moron, J. and Morris, A. B. and Morris, A. G. and Mountain, R. and Mu, H. and Muheim, F. and Mulder, M. and Müller, K. and Murphy, C. H. and Murray, D. and Murta, R. and Muzzetto, P. and Naik, P. and Nakada, T. and Nandakumar, R. and Nanut, T. and Nasteva, I. and Needham, M. and Neri, N. and Neubert, S. and Neufeld, N. and Neustroev, P. and Newcombe, R. and Niel, E. M. and Nieswand, S. and Nikitin, N. and Nolte, N. S. and Normand, C. and Novoa Fernandez, J. and Nunez, C. and {Oblakowska-Mucha}, A. and Obraztsov, V. and Oeser, T. and O’Hanlon, D. P. and Okamura, S. and Oldeman, R. and Oliva, F. and Olivares, M. E. and Onderwater, C. J. G. and O’Neil, R. H. and Otalora Goicochea, J. M. and Ovsiannikova, T. and Owen, P. and Oyanguren, A. and Ozcelik, O. and Padeken, K. O. and Pagare, B. and Pais, P. R. and Pajero, T. and Palano, A. and Palutan, M. and Pan, Y. and Panshin, G. and Papanestis, A. and Pappagallo, M. and Pappalardo, L. L. and Pappenheimer, C. and Parker, W. and Parkes, C. and Passalacqua, B. and Passaleva, G. and Pastore, A. and Patel, M. and Patrignani, C. and Pawley, C. J. and Pearce, A. and Pellegrino, A. and Pepe Altarelli, M. and Perazzini, S. and Pereima, D. and Pereiro Castro, A. and Perret, P. and Petric, M. and Petridis, K. and Petrolini, A. and Petrov, A. and Petrucci, S. and Petruzzo, M. and Pham, H. and Philippov, A. and Piandani, R. and Pica, L. and Piccini, M. and Pietrzyk, B. and Pietrzyk, G. and Pili, M. and Pinci, D. and Pisani, F. and Pizzichemi, M. and Placinta, V. and Plews, J. and Plo Casasus, M. and Polci, F. and Poli Lener, M. and Poliakova, M. and Poluektov, A. and Polukhina, N. and Polyakov, I. and Polycarpo, E. and Ponce, S. and Popov, D. and Popov, S. and Poslavskii, S. and Prasanth, K. and Promberger, L. and Prouve, C. and Pugatch, V. and Puill, V. and Punzi, G. and Qi, H. R. and Qian, W. and Qin, N. and Qu, S. and Quagliani, R. and Raab, N. V. and Rabadan Trejo, R. I. and Rachwal, B. and Rademacker, J. H. and Rajagopalan, R. and Rama, M. and Ramos Pernas, M. and Rangel, M. S. and Ratnikov, F. and Raven, G. and Rebollo De Miguel, M. and Redi, F. and Reich, J. and Reiss, F. and Remon Alepuz, C. and Ren, Z. and Renaudin, V. and Resmi, P. K. and Ribatti, R. and Ricci, A. M. and Ricciardi, S. and Richardson, K. and {Richardson-Slipper}, M. and Rinnert, K. and Robbe, P. and Robertson, G. and Rodrigues, A. B. and Rodrigues, E. and Rodriguez Lopez, J. A. and Rodriguez Rodriguez, E. and Rollings, A. and Roloff, P. and Romanovskiy, V. and Romero Lamas, M. and Romero Vidal, A. and Roth, J. D. and Rotondo, M. and Rudolph, M. S. and Ruf, T. and Ruiz Fernandez, R. A. and Ruiz Vidal, J. and Ryzhikov, A. and Ryzka, J. and Saborido Silva, J. J. and Sagidova, N. and Sahoo, N. and Saitta, B. and Salomoni, M. and Sanchez Gras, C. and Sanderswood, I. and Santacesaria, R. and Santamarina Rios, C. and Santimaria, M. and Santovetti, E. and Saranin, D. and Sarpis, G. and Sarpis, M. and Sarti, A. and Satriano, C. and Satta, A. and Saur, M. and Savrina, D. and Sazak, H. and Scantlebury Smead, L. G. and Scarabotto, A. and Schael, S. and Scherl, S. and Schiller, M. and Schindler, H. and Schmelling, M. and Schmidt, B. and Schmitt, S. and Schneider, O. and Schopper, A. and Schubiger, M. and Schulte, S. and Schune, M. H. and Schwemmer, R. and Sciascia, B. and Sciuccati, A. and Sellam, S. and Semennikov, A. and Senghi Soares, M. and Sergi, A. and Serra, N. and Sestini, L. and Seuthe, A. and Shang, Y. and Shangase, D. M. and Shapkin, M. and Shchemerov, I. and Shchutska, L. and Shears, T. and Shekhtman, L. and Shen, Z. and Sheng, S. and Shevchenko, V. and Shi, B. and Shields, E. B. and Shimizu, Y. and Shmanin, E. and Shupperd, J. D. and Siddi, B. G. and Silva Coutinho, R. and Simi, G. and Simone, S. and Singla, M. and Skidmore, N. and Skuza, R. and Skwarnicki, T. and Slater, M. W. and Smallwood, J. C. and Smeaton, J. G. and Smith, E. and Smith, K. and Smith, M. and Snoch, A. and Soares Lavra, L. and Sokoloff, M. D. and Soler, F. J. P. and Solomin, A. and Solovev, A. and Solovyev, I. and Song, R. and Souza De Almeida, F. L. and Souza De Paula, B. and Spaan, B. and Spadaro Norella, E. and Spiridenkov, E. and Spradlin, P. and Sriskaran, V. and Stagni, F. and Stahl, M. and Stahl, S. and Stanislaus, S. and Stein, E. N. and Steinkamp, O. and Stenyakin, O. and Stevens, H. and Stone, S. and Strekalina, D. and Suljik, F. and Sun, J. and Sun, L. and Sun, Y. and Svihra, P. and Swallow, P. N. and Swientek, K. and Szabelski, A. and Szumlak, T. and Szymanski, M. and Tan, Y. and Taneja, S. and Tanner, A. R. and Tat, M. D. and Terentev, A. and Teubert, F. and Thomas, E. and Thompson, D. J. D. and Thomson, K. A. and Tilquin, H. and Tisserand, V. and T’Jampens, S. and Tobin, M. and Tomassetti, L. and Tonani, G. and Tong, X. and Torres Machado, D. and Tou, D. Y. and Trifonova, E. and Trilov, S. M. and Trippl, C. and Tuci, G. and Tully, A. and Tuning, N. and Ukleja, A. and Unverzagt, D. J. and Ursov, E. and Usachov, A. and Ustyuzhanin, A. and Uwer, U. and Vagner, A. and Vagnoni, V. and Valassi, A. and Valenti, G. and Valls Canudas, N. and Van Beuzekom, M. and Van Dijk, M. and Van Hecke, H. and Van Herwijnen, E. and Van Hulse, C. B. and Van Veghel, M. and Vazquez Gomez, R. and Vazquez Regueiro, P. and Vázquez Sierra, C. and Vecchi, S. and Velthuis, J. J. and Veltri, M. and Venkateswaran, A. and Veronesi, M. and Vesterinen, M. and Vieira, D. and Vieites Diaz, M. and {Vilasis-Cardona}, X. and Vilella Figueras, E. and Villa, A. and Vincent, P. and Volle, F. C. and Vom Bruch, D. and Vorobyev, A. and Vorobyev, V. and Voropaev, N. and Vos, K. and Vrahas, C. and Waldi, R. and Walsh, J. and Wan, G. and Wang, C. and Wang, J. and Wang, J. and Wang, J. and Wang, J. and Wang, M. and Wang, R. and Wang, X. and Wang, Y. and Wang, Z. and Wang, Z. and Wang, Z. and Ward, J. A. and Watson, N. K. and Websdale, D. and Wei, Y. and Weisser, C. and Westhenry, B. D. C. and White, D. J. and Whitehead, M. and Wiederhold, A. R. and Wiedner, D. and Wilkinson, G. and Wilkinson, M. K. and Williams, I. and Williams, M. and Williams, M. R. J. and Williams, R. and Wilson, F. F. and Wislicki, W. and Witek, M. and Witola, L. and Wong, C. P. and Wormser, G. and Wotton, S. A. and Wu, H. and Wyllie, K. and Xiang, Z. and Xiao, D. and Xie, Y. and Xu, A. and Xu, J. and Xu, L. and Xu, L. and Xu, M. and Xu, Q. and Xu, Z. and Xu, Z. and Yang, D. and Yang, S. and Yang, Y. and Yang, Z. and Yang, Z. and Yeomans, L. E. and Yin, H. and Yu, J. and Yuan, X. and Zaffaroni, E. and Zavertyaev, M. and Zdybal, M. and Zenaiev, O. and Zeng, M. and Zhang, C. and Zhang, D. and Zhang, L. and Zhang, S. and Zhang, S. and Zhang, Y. and Zhang, Y. and Zharkova, A. and Zhelezov, A. and Zheng, Y. and Zhou, T. and Zhou, X. and Zhou, Y. and Zhovkovska, V. and Zhu, X. and Zhu, X. and Zhu, Z. and Zhukov, V. and Zou, Q. and Zucchelli, S. and Zuliani, D. and Zunica, G.}, year = 2023, month = jun, - journal = {JHEP}, - volume = {06}, - pages = {044}, - eprint = {2208.03300}, + journal = {J. High Energ. Phys.}, + volume = {2023}, + number = {6}, + pages = {44}, + issn = {1029-8479}, doi = {10.1007/JHEP06(2023)044}, - url = {https://arxiv.org/abs/2208.03300} + url = {https://link.springer.com/10.1007/JHEP06(2023)044}, + collaboration = {LHCb collaboration} } @article{Marangotto:2019ucc, From 9f6f0c81bdd600f1f8a6a161aba63b776e51f1a4 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Thu, 10 Sep 2026 21:43:06 +0200 Subject: [PATCH 11/13] MAINT: upgrade lock files --- docs/036/uv.lock | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/036/uv.lock b/docs/036/uv.lock index b676191..519a306 100644 --- a/docs/036/uv.lock +++ b/docs/036/uv.lock @@ -4,7 +4,7 @@ requires-python = "==3.13.*" [[package]] name = "ampform" -version = "0.16.0" +version = "0.16.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -12,9 +12,9 @@ dependencies = [ { name = "qrules" }, { name = "sympy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3b/d2/08eecf35f3a299531ed70d3282597d4c440b5485f74b4b99ad6bb98474cb/ampform-0.16.0.tar.gz", hash = "sha256:c242aea47a53e46fe127f87f79a6038ae533ff3640b6128439b2286a3178c261", size = 413943, upload-time = "2026-02-16T15:42:42.772Z" } +sdist = { url = "https://files.pythonhosted.org/packages/92/44/d41ae41c51ea936de9244134076c89209213de93f5c04443a69631f51fac/ampform-0.16.1.tar.gz", hash = "sha256:202077e8816adc5716a75df7b7e8db28fcfff1229e02badd19ce12897ee4637f", size = 484457, upload-time = "2026-09-09T17:12:22.673Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/3e/c5959630b8fbb520d6b82cd686e6bd775b7e6053c67b3ee4c71b22c95983/ampform-0.16.0-py3-none-any.whl", hash = "sha256:55f78106b872d1884f23a9f64c0ee6e08fddf12218c56f7635f1e20e88647f96", size = 89314, upload-time = "2026-02-16T15:42:41.489Z" }, + { url = "https://files.pythonhosted.org/packages/77/81/fd3c2c4bacdf14844ad1653f6a5386355feeac6a58c20a9508d7868bc330/ampform-0.16.1-py3-none-any.whl", hash = "sha256:0e9723fe22512b3aeb1e8720d486b5d5282905499dafc77be0006b5512132e56", size = 89187, upload-time = "2026-09-09T17:12:21.098Z" }, ] [[package]] @@ -181,19 +181,19 @@ wheels = [ [[package]] name = "fonttools" -version = "4.64.0" +version = "4.65.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d4/41/0f072a712dc74496e03710e462a18a4cfd8a258ad055a4e22d28b43a7abd/fonttools-4.64.0.tar.gz", hash = "sha256:ecb2e59a7bc692fee64dda6010deb66222335693b30046f15cccf81233aa715f", size = 3664266, upload-time = "2026-08-31T15:44:33.685Z" } +sdist = { url = "https://files.pythonhosted.org/packages/77/51/d63c7e52163ac14393a35bd14bd7c0da95f8f74be5d7cc988092f9965129/fonttools-4.65.0.tar.gz", hash = "sha256:762ba5431358d0dbd4a01982484a1d494fb267e91f974cdcf20b80eab8560f6f", size = 3674467, upload-time = "2026-09-10T15:35:54.955Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/7b/49b0054a79b9ed918c018e70e09b56eb5678ee8b44e59e126c79de4d8d73/fonttools-4.64.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9443eefff58aad558608f352092e1be6d278980e8c3b4e8621fcbfda97818500", size = 3092750, upload-time = "2026-08-31T15:43:02.705Z" }, - { url = "https://files.pythonhosted.org/packages/83/e2/08e73bd2f6e6248f071d3e9debe4c2b4cecda3a7dc057c56b44e255421c3/fonttools-4.64.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09657817b75575822bcd6098ef0ebf0386f34430839ee53109e70fd40a7f6539", size = 2583001, upload-time = "2026-08-31T15:43:04.923Z" }, - { url = "https://files.pythonhosted.org/packages/2f/58/6dc0ff0963fc1e12f53bac59175617ec5927342ee7a4ffb871b44d56d81b/fonttools-4.64.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d7995b906666037d7114c20a5566a372902747452af7d5bd4cd6bca8f1a2550", size = 5392765, upload-time = "2026-08-31T15:43:07.096Z" }, - { url = "https://files.pythonhosted.org/packages/7a/dd/4d3911049680da7b3aecf97cb5094e3a05554f5d94829358fc7664640456/fonttools-4.64.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2c42237b7e8c6813643e57d3efed3be094d4c06339dc2166b626e2cc5c12ee93", size = 5373969, upload-time = "2026-08-31T15:43:09.617Z" }, - { url = "https://files.pythonhosted.org/packages/48/0a/a2cf94121fd3ca9166bdb4863f71d6db32a5606b223c81e2ba99832a0612/fonttools-4.64.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:498f02ea92c9ca18c0f9c581ea93184a9d56c25b0af14189b0767adaf34235d8", size = 5333854, upload-time = "2026-08-31T15:43:11.985Z" }, - { url = "https://files.pythonhosted.org/packages/44/e2/632f4a8b94e6d7eea41e6d82f0ed337f64f5fb96f9910e2ac6b1689910e2/fonttools-4.64.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8252f20108e557532f91d7d6dd9af87c16ed6fa930f65516aa480fa2cfed3363", size = 5492828, upload-time = "2026-08-31T15:43:14.288Z" }, - { url = "https://files.pythonhosted.org/packages/ff/25/7fee1978fdedc1a2d978b76dddbea88785416f5774e7222327b867712d71/fonttools-4.64.0-cp313-cp313-win32.whl", hash = "sha256:45e3ecc3888f1637094fd75cd8fc727f3a4b06d1ddf89181126c071e244fd2a5", size = 2429011, upload-time = "2026-08-31T15:43:16.463Z" }, - { url = "https://files.pythonhosted.org/packages/dd/ed/bb1c217c9e1fbfa59f42b266af57df937a703882a73e59a309773752228f/fonttools-4.64.0-cp313-cp313-win_amd64.whl", hash = "sha256:e4812f71c39d77ec5041348dafa400532adf7bf8f1fffa9aa6495fce5876d7b8", size = 2480199, upload-time = "2026-08-31T15:43:18.774Z" }, - { url = "https://files.pythonhosted.org/packages/82/f8/7188153c4b265c899cd035de6a062677d51f67118a4ba640902bd9683e90/fonttools-4.64.0-py3-none-any.whl", hash = "sha256:4a05783ff54ce4c7a28f18e5772efdf63c219374bd9ffc55452182e1cef8be60", size = 1195327, upload-time = "2026-08-31T15:44:31.741Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5c/343a4225e83eb06f82c1d8bf41fc5e5f71eab2f62bc7ca215c764722c0a9/fonttools-4.65.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8b7bb52817a24731d2e4f4df0e71fdde05e6c806c8f8f1517b015d142fdacfa5", size = 3094663, upload-time = "2026-09-10T15:34:07.235Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c9/49b2401be932741d9218181c08948c96db32eab21ecaaf79283b752e13e7/fonttools-4.65.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e2c21772fcf70325189707b19f346812690bb1b0bd7e207e6ac205244806b303", size = 2584521, upload-time = "2026-09-10T15:34:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/51/c9/48b07e6c5cf44fa56f758a04c3772a66c0e9ba82bbe22077e4076746a62b/fonttools-4.65.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:64c9b26816415b5e3d899e9077109d327b22140fe3c4066644d8cdbad5bb1569", size = 5395399, upload-time = "2026-09-10T15:34:12.38Z" }, + { url = "https://files.pythonhosted.org/packages/fa/2d/5cc5a10c8ed56079d6c2e9e3e5920622529a2ae045c9f47a6055ccb1a319/fonttools-4.65.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6dd6243f60e2d6160c2966e1e14020dc261ffd741b69a2e4ca8bfd051592e4b7", size = 5376659, upload-time = "2026-09-10T15:34:15.239Z" }, + { url = "https://files.pythonhosted.org/packages/ab/6f/ccf33739d936bb3afa1655a225be7ee5d63d6d3c8b7d0e570bc5a2a7b899/fonttools-4.65.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:834962fd7cf21c58e81ac50a59e6ed2306f9df5e3dd481dad1cd7d2c4c60b773", size = 5336795, upload-time = "2026-09-10T15:34:17.817Z" }, + { url = "https://files.pythonhosted.org/packages/7e/c1/ffd17483f2094f0f4118974295b514b5b82afd4f6e3c80c23f01684e97a6/fonttools-4.65.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:580eb68ff7bd6954a7a76afddd864bfc66eaaf5f5c20dd6ead9186d0055a4ffe", size = 5496530, upload-time = "2026-09-10T15:34:20.241Z" }, + { url = "https://files.pythonhosted.org/packages/b1/19/9aca7712d0676ba5f8d1530ce20478a9bb09cccd0153d56693337379cdcf/fonttools-4.65.0-cp313-cp313-win32.whl", hash = "sha256:7a18b2ffd44249fe84289253197aa65ad4f2de554c0d381f18b1f5939bc6bc60", size = 2430392, upload-time = "2026-09-10T15:34:22.906Z" }, + { url = "https://files.pythonhosted.org/packages/1f/6f/f015dea0f4354e0798751b657cea2dee482914737f88bf1a078349ce92cf/fonttools-4.65.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ae1846b0f192fd485d26a455af19b8f5cf05aff08f9836f533913d8fcea133c", size = 2481620, upload-time = "2026-09-10T15:34:25.816Z" }, + { url = "https://files.pythonhosted.org/packages/e6/35/f894ceb867118c0261d0f69a9bd516b045a3754238f76c88a49513ac7a83/fonttools-4.65.0-py3-none-any.whl", hash = "sha256:3060b8c1fc2329fa20265b7c138614143ea7c1624e26c5c180c76aeb74deae6f", size = 1196441, upload-time = "2026-09-10T15:35:52.347Z" }, ] [[package]] @@ -575,15 +575,15 @@ wheels = [ [[package]] name = "particle" -version = "1.0.0" +version = "1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "hepunits" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c3/66/09911bbb658fdffe960903c12edecab95f6cced40fef4909d1cc04bd288b/particle-1.0.0.tar.gz", hash = "sha256:49145dec1cb5044b07f3e8e902280fa050950fa845b058003e69de519bb50492", size = 285766, upload-time = "2026-06-25T14:48:26.893Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/cf/c22d976f32b899e81da7e4e2a47b7d1c1a8f5a6ab38bc6e01d3f2b074714/particle-1.0.1.tar.gz", hash = "sha256:3f2ec4dbb8953c90ba83b891d6534cd82dc1aece4111b79998ff284ce377a922", size = 285779, upload-time = "2026-09-10T14:59:26.818Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/92/05078b696cddbdd60963577c895d5b77e5bf829197b08677351b11761c2b/particle-1.0.0-py3-none-any.whl", hash = "sha256:fc2656f53e729be76e45430f56aa65dc20dea069565a393032016544425b64bf", size = 245760, upload-time = "2026-06-25T14:48:25.238Z" }, + { url = "https://files.pythonhosted.org/packages/43/3d/c3a313039860766c56ec9d5d5e7d02e305c54d49960b4db69e3260253974/particle-1.0.1-py3-none-any.whl", hash = "sha256:9c63b270bd4d1e1ab0f7d7120d548b34ffd12ab7fcfed92dcd646ac4bfd5711c", size = 245606, upload-time = "2026-09-10T14:59:25.116Z" }, ] [[package]] @@ -620,11 +620,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.11.7" +version = "4.11.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/69/b7/802a56eca9f2fac455b8bab5375a2647b0f0e14a2cd63ef077de3c4a7658/platformdirs-4.11.7.tar.gz", hash = "sha256:4f41487eeeeeb07f3a6625e61d9bc0ae6809f92d3386dbd74392fbb76108104d", size = 35127, upload-time = "2026-09-01T13:35:10.502Z" } +sdist = { url = "https://files.pythonhosted.org/packages/53/18/f3bb8ef0d3b930692343da8aa4d3cbcd6749477c053959395ac81965a6e9/platformdirs-4.11.8.tar.gz", hash = "sha256:f23abafea7dd4276d1f29104b83598d7dcc567cafd07c9c951e66665645437fc", size = 37182, upload-time = "2026-09-08T22:20:42.866Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/6e/80993e10a0482f630cef528635789233224f36b1ffd11592aa15d13ff9ce/platformdirs-4.11.7-py3-none-any.whl", hash = "sha256:8a02cb259042c79d1cd0450facc2fe6dc9d303ae7901afbe33bf8ea0b188cef6", size = 23938, upload-time = "2026-09-01T13:35:09.02Z" }, + { url = "https://files.pythonhosted.org/packages/f4/e1/5b7b8bbb55084d1425bcb9bc823ff519e1b2be05f6ebb0089e2eacc38413/platformdirs-4.11.8-py3-none-any.whl", hash = "sha256:52f2f181bbfde907966932cc8312d967d02976422d66d537ea16092b8e291081", size = 24027, upload-time = "2026-09-08T22:20:41.537Z" }, ] [[package]] @@ -780,7 +780,7 @@ wheels = [ [[package]] name = "qrules" -version = "0.10.12" +version = "0.10.13" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -791,9 +791,9 @@ dependencies = [ { name = "pyyaml" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/b2/66d1d0c8a0551d6ff7cdb555e03582d271b0c4a3d07c2b413e36024a85b3/qrules-0.10.12.tar.gz", hash = "sha256:72b0fd0c3042f1b82b6d27f03f2636156f8e3070a8d915f3f2b31b535bd1d347", size = 334897, upload-time = "2026-09-04T12:32:04.51Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/19/22031f406c12f0f965ce6299b4a95afb6bd6c69782d825cee01e0d170eea/qrules-0.10.13.tar.gz", hash = "sha256:e68682e418d907be840791d1781f54f38bc5c7313b3fcc464151b4d554ac323a", size = 335212, upload-time = "2026-09-09T15:23:51.625Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/31/a10f094959a0cc33e790511d4ae91ca3f1a10c54029c9b4c7e078198df22/qrules-0.10.12-py3-none-any.whl", hash = "sha256:8b3f0d7b412eb4d19ca8a4006a2bab7a9dd2c0e744fb85eae61e7d590a999705", size = 85931, upload-time = "2026-09-04T12:32:02.879Z" }, + { url = "https://files.pythonhosted.org/packages/5b/dc/2a53d6de38c598e08266a52fa7bdfd213a816c3025190cdbcc0451f3b41c/qrules-0.10.13-py3-none-any.whl", hash = "sha256:8c0206d0e3b8bb2ad5f2cfce69512e22534fc666eff8ca32e51a5bd79ce93d2f", size = 86140, upload-time = "2026-09-09T15:23:50.337Z" }, ] [[package]] From 18c921ae69c604d918c7960af7bbd55b8cd72aea Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Fri, 11 Sep 2026 17:00:57 +0200 Subject: [PATCH 12/13] DOC: upgrade TR-036 to AmpForm-DPD v0.4.3 --- docs/036/index.ipynb | 9 +++++---- docs/036/pyproject.toml | 2 +- docs/036/uv.lock | 8 ++++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/036/index.ipynb b/docs/036/index.ipynb index 8acdbde..f70ed7f 100644 --- a/docs/036/index.ipynb +++ b/docs/036/index.ipynb @@ -171,7 +171,7 @@ "\n", "The dynamics factor $X_R$ is the product of the resonance lineshape and the production and decay form factors. $B_J^2$ is AmpForm's normalized Blatt–Weisskopf function, with $B_J^2(1)=1$. Both radii retain the package default of $1\\,\\mathrm{GeV}^{-1}$. Angular momentum requires $L_\\mathrm{production}=L_\\mathrm{decay}=J_R$; `canonical-helicity` supplies these orbital angular momenta to the dynamics builder.\n", "\n", - "The installed AmpForm-DPD v0.2.4 builder passes $s^2$ to the decay form factor and the pole mass $m_R$ as a production daughter mass. The correction below replaces these arguments by $s$ and $\\sqrt{s}$, respectively. The Breit–Wigner, running width, and form-factor implementations remain those of the packages.\n", + "The installed AmpForm-DPD v0.4.3 builder passes $s^2$ to the decay form factor and the pole mass $m_R$ as a production daughter mass. The correction below replaces these arguments by $s$ and $\\sqrt{s}$, respectively. The Breit–Wigner, running width, and form-factor implementations remain those of the packages.\n", "\n", "The **Bose-symmetric amplitude and intensity** are\n", "\n", @@ -179,7 +179,7 @@ "\n", "AmpForm's `HelicityAmplitudeBuilder` includes identical-particle symmetrization automatically; the fix for this channel was released in v0.15.9 (see the [accepted answer in discussion #475](https://github.com/ComPWA/ampform/discussions/475)). This report uses `DalitzPlotDecompositionBuilder` from AmpForm-DPD instead.\n", "\n", - "In AmpForm-DPD v0.2.4, `permute_equal_final_states` generates both particle assignments, but their helicity couplings must account for the daughter-order convention. Writing $z(s,t)=\\cos\\theta_{23}$, for equal pion masses the generated angles satisfy $\\cos\\theta_{31}(s,t)=-z(t,s)$. Consequently, $P_J(-z)=(-1)^J P_J(z)$ introduces a relative minus sign for the P wave if the two subsystems are summed with unchanged helicity couplings. Here we formulate subsystem 1 and explicitly exchange $s\\leftrightarrow t$ in its amplitude, retaining the same complex coefficient and daughter convention. The complex-amplitude symmetry check below verifies this construction.\n", + "In AmpForm-DPD v0.4.3, `permute_equal_final_states` generates both particle assignments, but their helicity couplings must account for the daughter-order convention. Writing $z(s,t)=\\cos\\theta_{23}$, for equal pion masses the generated angles satisfy $\\cos\\theta_{31}(s,t)=-z(t,s)$. Consequently, $P_J(-z)=(-1)^J P_J(z)$ introduces a relative minus sign for the P wave if the two subsystems are summed with unchanged helicity couplings. Here we formulate subsystem 1 and explicitly exchange $s\\leftrightarrow t$ in its amplitude, retaining the same complex coefficient and daughter convention. The complex-amplitude symmetry check below verifies this construction.\n", "\n", "An overall $1/\\sqrt{2!}$ amplitude convention is absorbed into normalization. The plot covers the full labelled Dalitz domain; integration for an absolute identical-particle rate requires the corresponding $1/2!$ phase-space factor." ] @@ -206,7 +206,7 @@ "model = builder.formulate(cleanup_summations=True, use_coefficients=True)\n", "assert len(model.amplitudes) == 1\n", "\n", - "# Correct form-factor kinematics in AmpForm-DPD v0.2.4.\n", + "# Correct form-factor kinematics in AmpForm-DPD v0.4.3.\n", "form_factor_corrections = {}\n", "for expression in model.amplitudes.values():\n", " for ff in expression.atoms(FormFactor):\n", @@ -291,7 +291,8 @@ "source": [ "# Use the model's tensor resonance to illustrate each layer of the dynamics.\n", "tensor_chain = next(chain for chain in decay.chains if chain.resonance.spin == 2)\n", - "dynamics_expression, _ = formulate_breit_wigner_with_form_factor(tensor_chain)\n", + "dynamics = formulate_breit_wigner_with_form_factor(tensor_chain)\n", + "dynamics_expression = dynamics.expression\n", "dynamics_expression = dynamics_expression.xreplace(form_factor_corrections)\n", "dynamics_definitions = {\n", " sp.Function(f\"X_{{{tensor_chain.resonance.latex}}}\")(s): dynamics_expression,\n", diff --git a/docs/036/pyproject.toml b/docs/036/pyproject.toml index 08c2d1c..eda2a31 100644 --- a/docs/036/pyproject.toml +++ b/docs/036/pyproject.toml @@ -3,7 +3,7 @@ name = "technical-report" version = "0.1.0" requires-python = "~=3.13.0" dependencies = [ - "ampform-dpd~=0.2.3", + "ampform-dpd~=0.4.3", "ipykernel", "matplotlib", "numpy", diff --git a/docs/036/uv.lock b/docs/036/uv.lock index 519a306..91c7df5 100644 --- a/docs/036/uv.lock +++ b/docs/036/uv.lock @@ -19,7 +19,7 @@ wheels = [ [[package]] name = "ampform-dpd" -version = "0.2.4" +version = "0.4.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ampform" }, @@ -31,9 +31,9 @@ dependencies = [ { name = "sympy" }, { name = "tensorwaves", extra = ["jax"] }, ] -sdist = { url = "https://files.pythonhosted.org/packages/93/d3/0f7fcb0b69af711560830f4952295832bba0249cd070f6a1db2638f3068a/ampform_dpd-0.2.4.tar.gz", hash = "sha256:b3fa738c5d7715c904df03bdd2c7747a96bb7c8e4167a948e0c3729f475aa7a3", size = 426932, upload-time = "2025-10-27T10:40:41.965Z" } +sdist = { url = "https://files.pythonhosted.org/packages/17/a7/80f1f776922c148462619045cac24a31b0bc71b6cb261f83d44260be2383/ampform_dpd-0.4.3.tar.gz", hash = "sha256:6fb7d3643fd146d2340318563a9d66e0bb8bb3dd98415e1a622c3043cc06ab51", size = 449674, upload-time = "2026-09-10T09:48:40.106Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/41/fdf5d0b22bf612d1be21734539b50bb231e5de79f776253ca1a5644be812/ampform_dpd-0.2.4-py3-none-any.whl", hash = "sha256:ad762de8ecec1792f6112134bda98686690d810c6cedee293e41c19bc778d475", size = 42665, upload-time = "2025-10-27T10:40:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/32/18/7fbcf42c3d9bb1c3bd3eb6b3547feffaca1b9f4cbaf6dd20369c08aec495/ampform_dpd-0.4.3-py3-none-any.whl", hash = "sha256:71412823e7b327f3d292307b4c14c8caa685044b6d16b7fe535a68fb7493b6aa", size = 52781, upload-time = "2026-09-10T09:48:38.882Z" }, ] [[package]] @@ -916,7 +916,7 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "ampform-dpd", specifier = "~=0.2.3" }, + { name = "ampform-dpd", specifier = "~=0.4.3" }, { name = "ipykernel" }, { name = "matplotlib" }, { name = "numpy" }, From 28fe52279f3c11bbbad65b2e88f29c7aa354c30c Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Fri, 11 Sep 2026 17:01:15 +0200 Subject: [PATCH 13/13] MAINT: upgrade lock files --- docs/036/uv.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/036/uv.lock b/docs/036/uv.lock index 91c7df5..11d45dc 100644 --- a/docs/036/uv.lock +++ b/docs/036/uv.lock @@ -672,11 +672,11 @@ wheels = [ [[package]] name = "pure-eval" -version = "0.2.3" +version = "0.2.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/9f/abfd2959e9261dd5217ca8551d4de211ca6ab26fe9b72cf44731ff6c4442/pure_eval-0.2.4.tar.gz", hash = "sha256:260c2774686e651b79f8b8e7fc9d80b3599ea6a66334b47d5f4abb69fc2c0ea1", size = 20563, upload-time = "2026-09-10T21:41:22.836Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, + { url = "https://files.pythonhosted.org/packages/6d/18/83376915176eb058cb86470eb7396388a13350b09a8f233a79303bbcbc5b/pure_eval-0.2.4-py3-none-any.whl", hash = "sha256:96cae060a313cfaad51bb761278bfb0e62dc0248d9315a81173752dc546cd37a", size = 11893, upload-time = "2026-09-10T21:41:21.532Z" }, ] [[package]] @@ -967,14 +967,14 @@ wheels = [ [[package]] name = "tqdm" -version = "4.70.0" +version = "4.70.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/ea/b2a5bd54b28a324dae8211928b2d730b6547500342c7e6c6dea08bd0a485/tqdm-4.70.1.tar.gz", hash = "sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4", size = 171846, upload-time = "2026-09-11T07:25:16.601Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, + { url = "https://files.pythonhosted.org/packages/a7/03/921a3d3c75785aca9ebfbfcabfbc3a1be12e2ab5265deb026d55a5a3f83e/tqdm-4.70.1-py3-none-any.whl", hash = "sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73", size = 80199, upload-time = "2026-09-11T07:25:14.599Z" }, ] [[package]]