diff options
Diffstat (limited to 'python-correctionlib.spec')
-rw-r--r-- | python-correctionlib.spec | 388 |
1 files changed, 388 insertions, 0 deletions
diff --git a/python-correctionlib.spec b/python-correctionlib.spec new file mode 100644 index 0000000..022ff78 --- /dev/null +++ b/python-correctionlib.spec @@ -0,0 +1,388 @@ +%global _empty_manifest_terminate_build 0 +Name: python-correctionlib +Version: 2.2.2 +Release: 1 +Summary: A generic correction library +License: BSD 3-Clause License +URL: https://github.com/cms-nanoAOD/correctionlib +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/d7/a4/221534a863f2390d9c4011b68c819bc67537c17d6b2e82641437904886ff/correctionlib-2.2.2.tar.gz + +Requires: python3-numpy +Requires: python3-pydantic +Requires: python3-rich +Requires: python3-typing +Requires: python3-dataclasses +Requires: python3-typing-extensions +Requires: python3-pandas +Requires: python3-uproot +Requires: python3-requests +Requires: python3-scipy +Requires: python3-pytest +Requires: python3-pre-commit +Requires: python3-mypy +Requires: python3-uhi +Requires: python3-recommonmark +Requires: python3-Sphinx +Requires: python3-sphinx-copybutton +Requires: python3-sphinx-rtd-theme +Requires: python3-sphinx-jsonschema +Requires: python3-myst-parser +Requires: python3-nbsphinx +Requires: python3-pytest +Requires: python3-scipy + +%description +# correctionlib + +[![Actions Status][actions-badge]][actions-link] +[![Documentation Status][rtd-badge]][rtd-link] +[![Code style: black][black-badge]][black-link] + +[![conda version][conda-badge]][conda-link] +[![PyPI version][pypi-version]][pypi-link] +[![PyPI platforms][pypi-platforms]][pypi-link] + +[![GitHub Discussion][github-discussions-badge]][github-discussions-link] + +## Introduction +The purpose of this library is to provide a well-structured JSON data format for a +wide variety of ad-hoc correction factors encountered in a typical HEP analysis and +a companion evaluation tool suitable for use in C++ and python programs. +Here we restrict our definition of correction factors to a class of functions with +scalar inputs that produce a scalar output. + +In python, the function signature is: + +```python +from typing import Union + +def f(*args: Union[str,int,float]) -> float: + return ... +``` + +In C++, the evaluator implements this currently as: +```cpp +double Correction::evaluate(const std::vector<std::variant<int, double, std::string>>& values) const; +``` + +The supported function classes include: + + * multi-dimensional binned lookups; + * binned lookups pointing to multi-argument formulas with a restricted + math function set (`exp`, `sqrt`, etc.); + * categorical (string or integer enumeration) maps; + * input transforms (updating one input value in place); and + * compositions of the above. + +Each function type is represented by a "node" in a call graph and holds all +of its parameters in a JSON structure, described by the JSON schema. +Possible future extension nodes might include weigted sums (which, when composed with +the others, could represent a BDT) and perhaps simple MLPs. + +The tool should provide: + + * standardized, versioned [JSON schemas](https://json-schema.org/); + * forward-porting tools (to migrate data written in older schema versions); and + * a well-optimized C++ evaluator and python bindings (with numpy vectorization support). + +This tool will definitely not provide: + + * support for `TLorentzVector` or other object-type inputs (such tools should be written + as a higher-level tool depending on this library as a low-level tool) + +Formula support currently includes a mostly-complete subset of the ROOT library `TFormula` class, +and is implemented in a threadsafe standalone manner. The parsing grammar is formally defined +and parsed through the use of a header-only [PEG parser library](https://github.com/yhirose/cpp-peglib). +The supported features mirror CMSSW's [reco::formulaEvaluator](https://github.com/cms-sw/cmssw/pull/11516) +and fully passes the test suite for that utility with the purposeful exception of the `TMath::` namespace. +The python bindings may be able to call into [numexpr](https://numexpr.readthedocs.io/en/latest/user_guide.html), +though, due to the tree-like structure of the corrections, it may prove difficult to exploit vectorization +at levels other than the entrypoint. + +Detailed instructions for installing and using this package are provided in the [documentation][rtd-link]. + +## Creating new corrections + +A demo/tutorial of the features is available in the [documentation][rtd-link] and also available interactively +on [binder](https://mybinder.org/v2/gh/cms-nanoAOD/correctionlib/HEAD?labpath=binder%2Fcorrectionlib_tutorial.ipynb) + +The `correctionlib.schemav2` module provides a helpful framework for defining correction objects +and `correctionlib.convert` includes select conversion routines for common types. Nodes can be type-checked as they are +constructed using the [parse_obj](https://pydantic-docs.helpmanual.io/usage/models/#helper-functions) +class method or by directly constructing them using keyword arguments. + +## Developing +See CONTRIBUTING.md + +[actions-badge]: https://github.com/cms-nanoAOD/correctionlib/workflows/CI/badge.svg +[actions-link]: https://github.com/cms-nanoAOD/correctionlib/actions +[black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg +[black-link]: https://github.com/psf/black +[conda-badge]: https://img.shields.io/conda/vn/conda-forge/correctionlib.svg +[conda-link]: https://github.com/conda-forge/correctionlib-feedstock +[github-discussions-badge]: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github +[github-discussions-link]: https://github.com/cms-nanoAOD/correctionlib/discussions +[gitter-badge]: https://badges.gitter.im/https://github.com/cms-nanoAOD/correctionlib/community.svg +[gitter-link]: https://gitter.im/https://github.com/cms-nanoAOD/correctionlib/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge +[pypi-link]: https://pypi.org/project/correctionlib/ +[pypi-platforms]: https://img.shields.io/pypi/pyversions/correctionlib +[pypi-version]: https://badge.fury.io/py/correctionlib.svg +[rtd-badge]: https://github.com/cms-nanoAOD/correctionlib/actions/workflows/docs.yml/badge.svg +[rtd-link]: https://cms-nanoAOD.github.io/correctionlib/ + + +%package -n python3-correctionlib +Summary: A generic correction library +Provides: python-correctionlib +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +BuildRequires: python3-cffi +BuildRequires: gcc +BuildRequires: gdb +%description -n python3-correctionlib +# correctionlib + +[![Actions Status][actions-badge]][actions-link] +[![Documentation Status][rtd-badge]][rtd-link] +[![Code style: black][black-badge]][black-link] + +[![conda version][conda-badge]][conda-link] +[![PyPI version][pypi-version]][pypi-link] +[![PyPI platforms][pypi-platforms]][pypi-link] + +[![GitHub Discussion][github-discussions-badge]][github-discussions-link] + +## Introduction +The purpose of this library is to provide a well-structured JSON data format for a +wide variety of ad-hoc correction factors encountered in a typical HEP analysis and +a companion evaluation tool suitable for use in C++ and python programs. +Here we restrict our definition of correction factors to a class of functions with +scalar inputs that produce a scalar output. + +In python, the function signature is: + +```python +from typing import Union + +def f(*args: Union[str,int,float]) -> float: + return ... +``` + +In C++, the evaluator implements this currently as: +```cpp +double Correction::evaluate(const std::vector<std::variant<int, double, std::string>>& values) const; +``` + +The supported function classes include: + + * multi-dimensional binned lookups; + * binned lookups pointing to multi-argument formulas with a restricted + math function set (`exp`, `sqrt`, etc.); + * categorical (string or integer enumeration) maps; + * input transforms (updating one input value in place); and + * compositions of the above. + +Each function type is represented by a "node" in a call graph and holds all +of its parameters in a JSON structure, described by the JSON schema. +Possible future extension nodes might include weigted sums (which, when composed with +the others, could represent a BDT) and perhaps simple MLPs. + +The tool should provide: + + * standardized, versioned [JSON schemas](https://json-schema.org/); + * forward-porting tools (to migrate data written in older schema versions); and + * a well-optimized C++ evaluator and python bindings (with numpy vectorization support). + +This tool will definitely not provide: + + * support for `TLorentzVector` or other object-type inputs (such tools should be written + as a higher-level tool depending on this library as a low-level tool) + +Formula support currently includes a mostly-complete subset of the ROOT library `TFormula` class, +and is implemented in a threadsafe standalone manner. The parsing grammar is formally defined +and parsed through the use of a header-only [PEG parser library](https://github.com/yhirose/cpp-peglib). +The supported features mirror CMSSW's [reco::formulaEvaluator](https://github.com/cms-sw/cmssw/pull/11516) +and fully passes the test suite for that utility with the purposeful exception of the `TMath::` namespace. +The python bindings may be able to call into [numexpr](https://numexpr.readthedocs.io/en/latest/user_guide.html), +though, due to the tree-like structure of the corrections, it may prove difficult to exploit vectorization +at levels other than the entrypoint. + +Detailed instructions for installing and using this package are provided in the [documentation][rtd-link]. + +## Creating new corrections + +A demo/tutorial of the features is available in the [documentation][rtd-link] and also available interactively +on [binder](https://mybinder.org/v2/gh/cms-nanoAOD/correctionlib/HEAD?labpath=binder%2Fcorrectionlib_tutorial.ipynb) + +The `correctionlib.schemav2` module provides a helpful framework for defining correction objects +and `correctionlib.convert` includes select conversion routines for common types. Nodes can be type-checked as they are +constructed using the [parse_obj](https://pydantic-docs.helpmanual.io/usage/models/#helper-functions) +class method or by directly constructing them using keyword arguments. + +## Developing +See CONTRIBUTING.md + +[actions-badge]: https://github.com/cms-nanoAOD/correctionlib/workflows/CI/badge.svg +[actions-link]: https://github.com/cms-nanoAOD/correctionlib/actions +[black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg +[black-link]: https://github.com/psf/black +[conda-badge]: https://img.shields.io/conda/vn/conda-forge/correctionlib.svg +[conda-link]: https://github.com/conda-forge/correctionlib-feedstock +[github-discussions-badge]: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github +[github-discussions-link]: https://github.com/cms-nanoAOD/correctionlib/discussions +[gitter-badge]: https://badges.gitter.im/https://github.com/cms-nanoAOD/correctionlib/community.svg +[gitter-link]: https://gitter.im/https://github.com/cms-nanoAOD/correctionlib/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge +[pypi-link]: https://pypi.org/project/correctionlib/ +[pypi-platforms]: https://img.shields.io/pypi/pyversions/correctionlib +[pypi-version]: https://badge.fury.io/py/correctionlib.svg +[rtd-badge]: https://github.com/cms-nanoAOD/correctionlib/actions/workflows/docs.yml/badge.svg +[rtd-link]: https://cms-nanoAOD.github.io/correctionlib/ + + +%package help +Summary: Development documents and examples for correctionlib +Provides: python3-correctionlib-doc +%description help +# correctionlib + +[![Actions Status][actions-badge]][actions-link] +[![Documentation Status][rtd-badge]][rtd-link] +[![Code style: black][black-badge]][black-link] + +[![conda version][conda-badge]][conda-link] +[![PyPI version][pypi-version]][pypi-link] +[![PyPI platforms][pypi-platforms]][pypi-link] + +[![GitHub Discussion][github-discussions-badge]][github-discussions-link] + +## Introduction +The purpose of this library is to provide a well-structured JSON data format for a +wide variety of ad-hoc correction factors encountered in a typical HEP analysis and +a companion evaluation tool suitable for use in C++ and python programs. +Here we restrict our definition of correction factors to a class of functions with +scalar inputs that produce a scalar output. + +In python, the function signature is: + +```python +from typing import Union + +def f(*args: Union[str,int,float]) -> float: + return ... +``` + +In C++, the evaluator implements this currently as: +```cpp +double Correction::evaluate(const std::vector<std::variant<int, double, std::string>>& values) const; +``` + +The supported function classes include: + + * multi-dimensional binned lookups; + * binned lookups pointing to multi-argument formulas with a restricted + math function set (`exp`, `sqrt`, etc.); + * categorical (string or integer enumeration) maps; + * input transforms (updating one input value in place); and + * compositions of the above. + +Each function type is represented by a "node" in a call graph and holds all +of its parameters in a JSON structure, described by the JSON schema. +Possible future extension nodes might include weigted sums (which, when composed with +the others, could represent a BDT) and perhaps simple MLPs. + +The tool should provide: + + * standardized, versioned [JSON schemas](https://json-schema.org/); + * forward-porting tools (to migrate data written in older schema versions); and + * a well-optimized C++ evaluator and python bindings (with numpy vectorization support). + +This tool will definitely not provide: + + * support for `TLorentzVector` or other object-type inputs (such tools should be written + as a higher-level tool depending on this library as a low-level tool) + +Formula support currently includes a mostly-complete subset of the ROOT library `TFormula` class, +and is implemented in a threadsafe standalone manner. The parsing grammar is formally defined +and parsed through the use of a header-only [PEG parser library](https://github.com/yhirose/cpp-peglib). +The supported features mirror CMSSW's [reco::formulaEvaluator](https://github.com/cms-sw/cmssw/pull/11516) +and fully passes the test suite for that utility with the purposeful exception of the `TMath::` namespace. +The python bindings may be able to call into [numexpr](https://numexpr.readthedocs.io/en/latest/user_guide.html), +though, due to the tree-like structure of the corrections, it may prove difficult to exploit vectorization +at levels other than the entrypoint. + +Detailed instructions for installing and using this package are provided in the [documentation][rtd-link]. + +## Creating new corrections + +A demo/tutorial of the features is available in the [documentation][rtd-link] and also available interactively +on [binder](https://mybinder.org/v2/gh/cms-nanoAOD/correctionlib/HEAD?labpath=binder%2Fcorrectionlib_tutorial.ipynb) + +The `correctionlib.schemav2` module provides a helpful framework for defining correction objects +and `correctionlib.convert` includes select conversion routines for common types. Nodes can be type-checked as they are +constructed using the [parse_obj](https://pydantic-docs.helpmanual.io/usage/models/#helper-functions) +class method or by directly constructing them using keyword arguments. + +## Developing +See CONTRIBUTING.md + +[actions-badge]: https://github.com/cms-nanoAOD/correctionlib/workflows/CI/badge.svg +[actions-link]: https://github.com/cms-nanoAOD/correctionlib/actions +[black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg +[black-link]: https://github.com/psf/black +[conda-badge]: https://img.shields.io/conda/vn/conda-forge/correctionlib.svg +[conda-link]: https://github.com/conda-forge/correctionlib-feedstock +[github-discussions-badge]: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github +[github-discussions-link]: https://github.com/cms-nanoAOD/correctionlib/discussions +[gitter-badge]: https://badges.gitter.im/https://github.com/cms-nanoAOD/correctionlib/community.svg +[gitter-link]: https://gitter.im/https://github.com/cms-nanoAOD/correctionlib/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge +[pypi-link]: https://pypi.org/project/correctionlib/ +[pypi-platforms]: https://img.shields.io/pypi/pyversions/correctionlib +[pypi-version]: https://badge.fury.io/py/correctionlib.svg +[rtd-badge]: https://github.com/cms-nanoAOD/correctionlib/actions/workflows/docs.yml/badge.svg +[rtd-link]: https://cms-nanoAOD.github.io/correctionlib/ + + +%prep +%autosetup -n correctionlib-2.2.2 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-correctionlib -f filelist.lst +%dir %{python3_sitearch}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 2.2.2-1 +- Package Spec generated |