Metadata-Version: 2.1
Name: qrules
Version: 0.10.2
Summary: Rule-based particle reaction problem solver on a quantum number level
Author-email: Common Partial Wave Analysis <compwa-admin@ep1.rub.de>
Maintainer-email: compwa-admin@ep1.rub.de
License: GPLv3 or later
Project-URL: Changelog, https://github.com/ComPWA/qrules/releases
Project-URL: Documentation, https://qrules.rtfd.io
Project-URL: Source, https://github.com/ComPWA/qrules
Project-URL: Tracker, https://github.com/ComPWA/qrules/issues
Keywords: HEP,PWA,amplitude analysis,partial wave analysis,particle physics,particles,physics
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: Topic :: Scientific/Engineering
Classifier: Typing :: Typed
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: PyYAML
Requires-Dist: attrs >=20.1.0
Requires-Dist: jsonschema
Requires-Dist: particle
Requires-Dist: tqdm >=4.24.0
Requires-Dist: python-constraint ; python_version < "3.8.0"
Requires-Dist: typing-extensions ; python_version < "3.8.0"
Requires-Dist: python-constraint2 ; python_version >= "3.8.0"
Provides-Extra: all
Requires-Dist: qrules[viz] ; extra == 'all'
Provides-Extra: dev
Requires-Dist: qrules[all] ; extra == 'dev'
Requires-Dist: qrules[doc] ; extra == 'dev'
Requires-Dist: qrules[jupyter] ; extra == 'dev'
Requires-Dist: qrules[sty] ; extra == 'dev'
Requires-Dist: qrules[test] ; extra == 'dev'
Requires-Dist: sphinx-autobuild ; extra == 'dev'
Requires-Dist: tox >=1.9 ; extra == 'dev'
Provides-Extra: doc
Requires-Dist: Sphinx >=3 ; extra == 'doc'
Requires-Dist: myst-nb ; extra == 'doc'
Requires-Dist: qrules[viz] ; extra == 'doc'
Requires-Dist: sphinx-book-theme ; extra == 'doc'
Requires-Dist: sphinx-codeautolink[ipython] ; extra == 'doc'
Requires-Dist: sphinx-comments ; extra == 'doc'
Requires-Dist: sphinx-copybutton ; extra == 'doc'
Requires-Dist: sphinx-design ; extra == 'doc'
Requires-Dist: sphinx-hep-pdgref ; extra == 'doc'
Requires-Dist: sphinx-thebe ; extra == 'doc'
Requires-Dist: sphinx-togglebutton ; extra == 'doc'
Requires-Dist: sphinxcontrib-bibtex >=2 ; extra == 'doc'
Requires-Dist: sphinx-api-relink >=0.0.4 ; extra == 'doc'
Requires-Dist: sphinx-pybtex-etal-style ; extra == 'doc'
Provides-Extra: jupyter
Requires-Dist: black ; extra == 'jupyter'
Requires-Dist: ipywidgets ; extra == 'jupyter'
Requires-Dist: isort ; extra == 'jupyter'
Requires-Dist: jupyterlab ; extra == 'jupyter'
Requires-Dist: jupyterlab-code-formatter ; extra == 'jupyter'
Requires-Dist: jupyterlab-lsp ; extra == 'jupyter'
Requires-Dist: python-lsp-server[rope] ; extra == 'jupyter'
Requires-Dist: jupyterlab-git ; extra == 'jupyter'
Requires-Dist: jupyterlab-myst ; extra == 'jupyter'
Requires-Dist: python-lsp-ruff ; extra == 'jupyter'
Provides-Extra: sty
Requires-Dist: mypy >=0.730 ; extra == 'sty'
Requires-Dist: pre-commit >=1.4.0 ; extra == 'sty'
Requires-Dist: qrules[types] ; extra == 'sty'
Requires-Dist: ruff ; extra == 'sty'
Provides-Extra: test
Requires-Dist: ipython ; extra == 'test'
Requires-Dist: nbmake ; extra == 'test'
Requires-Dist: pydot <2 ; extra == 'test'
Requires-Dist: pytest ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'
Requires-Dist: pytest-profiling ; extra == 'test'
Requires-Dist: pytest-xdist ; extra == 'test'
Requires-Dist: importlib-metadata ; (python_version < "3.8.0") and extra == 'test'
Requires-Dist: nbmake <1.3 ; (python_version == "3.7.*") and extra == 'test'
Provides-Extra: types
Requires-Dist: ipython ; extra == 'types'
Requires-Dist: pydot <2 ; extra == 'types'
Requires-Dist: pytest ; extra == 'types'
Requires-Dist: types-PyYAML ; extra == 'types'
Requires-Dist: types-setuptools ; extra == 'types'
Requires-Dist: sphinx-api-relink >=0.0.4 ; extra == 'types'
Provides-Extra: viz
Requires-Dist: graphviz ; extra == 'viz'

# Quantum Number Conservation Rules

[![10.5281/zenodo.5526360](https://zenodo.org/badge/doi/10.5281/zenodo.5526360.svg)](https://doi.org/10.5281/zenodo.5526360)
[![GPLv3+ license](https://img.shields.io/badge/License-GPLv3+-blue.svg)](https://www.gnu.org/licenses/gpl-3.0-standalone.html)

[![PyPI package](https://badge.fury.io/py/qrules.svg)](https://pypi.org/project/qrules)
[![Conda package](https://anaconda.org/conda-forge/qrules/badges/version.svg)](https://anaconda.org/conda-forge/qrules)
[![Supported Python versions](https://img.shields.io/pypi/pyversions/qrules)](https://pypi.org/project/qrules)

[![Binder](https://static.mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/ComPWA/qrules/stable?filepath=docs/usage)
[![Google Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/ComPWA/qrules/blob/stable)
[![Open in Visual Studio Code](https://img.shields.io/badge/vscode-open-blue?logo=visualstudiocode)](https://open.vscode.dev/ComPWA/qrules)
[![GitPod](https://img.shields.io/badge/gitpod-open-blue?logo=gitpod)](https://gitpod.io/#https://github.com/ComPWA/qrules)

[![Documentation](https://readthedocs.org/projects/qrules/badge/?version=latest)](https://qrules.readthedocs.io)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ComPWA/qrules/main.svg)](https://results.pre-commit.ci/latest/github/ComPWA/qrules/main)
[![pytest](https://github.com/ComPWA/qrules/workflows/pytest/badge.svg)](https://github.com/ComPWA/qrules/actions?query=branch%3Amain+workflow%3Apytest)
[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy.readthedocs.io)
[![Test coverage](https://codecov.io/gh/ComPWA/qrules/branch/main/graph/badge.svg)](https://codecov.io/gh/ComPWA/qrules)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/deeee5b9e2bb4b3daa655942c71e17da)](https://www.codacy.com/gh/ComPWA/qrules)
[![Spelling checked](https://img.shields.io/badge/cspell-checked-brightgreen.svg)](https://github.com/streetsidesoftware/cspell/tree/master/packages/cspell)
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

QRules is a Python package for **validating and generating particle reactions** using
quantum number conservation rules. The user only has to provide a certain set of
boundary conditions (initial and final state, allowed interaction types, expected decay
topologies, etc.). QRules will then span the space of allowed quantum numbers over all
allowed decay topologies and particle instances that correspond with the sets of allowed
quantum numbers it has found.

The resulting state transition objects are particularly useful for **amplitude analysis
/ Partial Wave Analysis** as they contain all information (such as expected masses,
widths, and spin projections) that is needed to formulate an amplitude model.

Visit [qrules.rtfd.io](https://qrules.readthedocs.io) for more information!

For an overview of **upcoming releases and planned functionality**, see
[here](https://github.com/ComPWA/qrules/milestones?direction=asc&sort=title&state=open).

## Available features

- **Input**: Particle database
  - Source of truth: PDG
  - Predefined particle list file
  - Option to overwrite and append with custom particle definitions
- **State transition graph**
  - Feynman graph like description of the reactions
  - Visualization of the decay topology
- **Conservation rules**
  - Open-closed design
  - Large set of predefined rules
    - Spin/Angular momentum conservation
    - Quark and Lepton flavor conservation (incl. isospin)
    - Baryon number conservation
    - EM-charge conservation
    - Parity, C-Parity, G-Parity conservation
    - Mass conservation
  - Predefined sets of conservation rules representing Strong, EM, Weak interactions

## Contribute

See [`CONTRIBUTING.md`](./CONTRIBUTING.md)
