diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 00000000..3e7712f9 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,12 @@ +## Dependencies + +### More on tools + +The `runcardsrunner` package is managed by `poetry`. This has been chosen to +automate a series of tasks, and to grant reproducible installations maintaining +a `poetry.lock` file. + +It might happen (frequently) that `poetry` complains about version +dependencies, if inconsistent. This is not `poetry`'s fault, and it's a useful +warning that will prevent to just break when installed by an user with a +different environment. diff --git a/.gitignore b/.gitignore index 280ec9af..8f56b783 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ .prefix/ -# ignore any folder like '-YYYYMMDDHHmmss' -*-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/ +results/ # madgraph junk py.py additional_command diff --git a/README.md b/README.md index 5480a4fa..31075f3b 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,17 @@ There is no released version currently. ### Dev -For development the dependencies can be bootstrapped by running: +For development you need the following tools: -```sh -./rr install -``` +- `poetry`, follow [installation + instructions](https://python-poetry.org/docs/#installation) +- `poetry-dynamic-versioning`, used to manage the version (see + [repo](https://github.com/mtkennerly/poetry-dynamic-versioning)) +- `pre-commit`, to run maintenance hooks before commits (see + [instructions](https://pre-commit.com/#install)) -See [below](#non-python-dependencies) for a few dependencies (already available -on most systems). +See [below](.github/CONTRIBUTING.md#non-python-dependencies) for a few more +dependencies (already available on most systems). ## Documentation @@ -32,26 +35,3 @@ cd docs make html make view ``` - -### Non Python dependencies - -Even if the bootstrap script and the installation management try to reduce as -much as possible the amount of dependencies, still a few ingredients have to be -available on the system. - -To run `./rr install`: - -- `python` itself -- `pip` available as a module of the `python` that is running `rr` (as usually - is) -- `curl` - -To install `pineappl`: - -- `pkg-config` -- `openssl.pc` (e.g. on Debian available in the `libssl-dev` package) - -To install `mg5amc@nlo` and its dependencies: - -- `gfortran` -- `wget` diff --git a/docs/source/conf.py b/docs/source/conf.py index 54570a56..153723af 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -115,7 +115,7 @@ # Thanks https://github.com/bskinn/sphobjinv intersphinx_mapping = { "python": ("https://docs.python.org/3/", None), - "scipy": ("https://docs.scipy.org/doc/scipy/reference", None), + "scipy": ("https://docs.scipy.org/doc/scipy", None), "numpy": ("https://numpy.org/doc/stable", None), "pygit2": ("https://www.pygit2.org/", None), "pandas": ("https://pandas.pydata.org/docs/", None), diff --git a/docs/source/index.rst b/docs/source/index.rst index 8c7641f6..2bedafc6 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -28,6 +28,30 @@ There are two ways of installing ``rr``, that are: and in this case, ``rr`` to be used is always the one provided as executable. in the repository. +Non Python dependencies +----------------------- + +Even if the bootstrap script and the installation management try to reduce as +much as possible the amount of dependencies, still a few ingredients have to be +available on the system. + +To run the CLI: + +- ``python`` itself +- ``pip`` available as a module of the ``python`` that is running ``rr`` (as usually + is) +- ``curl`` + +To install ``pineappl``: + +- ``pkg-config`` +- ``openssl.pc`` (e.g. on Debian available in the ``libssl-dev`` package) + +To install ``mg5amc@nlo`` and its dependencies: + +- ``gfortran`` +- ``wget`` + .. toctree:: :maxdepth: 1 diff --git a/merge_grids.sh b/merge_grids.sh deleted file mode 100755 index 85f9e2c2..00000000 --- a/merge_grids.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash - -common_substring() { - # from https://stackoverflow.com/a/17475354/812178 - printf "%s\n" "$@" | sed -e 'N;s/^\(.*\).*\n\1.*$/\1\n\1/;D' -} - -# exit script at the first sign of an error -set -o errexit - -# the following exits if undeclared variables are used -set -o nounset - -# exit if some program in a pipeline fails -set -o pipefail - -array=( $(for i in "$@"; do basename $i; done) ) -grid="$(common_substring "${array[@]}")" -grid="${grid%_}".pineappl - -# merge grids -pineappl merge "${grid}" "$@" - -# get all keys, possibly ones that are exclusive to a single grid -keys=( $(for i in "$@"; do - pineappl info --keys $i -done | sort -u) ) - -grids=( "$@" ) - -# extract the results from each grid -for (( i=0; i != ${#grids[@]}; i++ )); do - pineappl info "${grids[$i]}" --get results | \ - sed '/^ [0-9].*/!d' | \ - sed 's/^ 0.000000e+00 0.000000e+00 0.000 0.000 0.0000 0.0000 0.0000$//' \ - > tmp.results.$i -done - -# extract the header from the first grid -pineappl info "${grids[0]}" --get results | sed -e '/^ [0-9]/d' -e '$ d' > tmp.results - -# paste the results together and remove leading and trailing spaces -paste -d ' ' tmp.results.* | sed -e 's/^ */ /' -e 's/ +$//' >> tmp.results -rm tmp.results.* - -# set the results metadata in the new grid -pineappl set "${grid}" "${grid}".tmp --entry_from_file results tmp.results -mv "${grid}".tmp "${grid}" -rm tmp.results - -for key in "${keys[@]}"; do - # skip results - if [[ ${key} == results ]]; then - continue - fi - - lhs=$(pineappl info "${grid}" --get "${key}") - for g in "$@"; do - rhs=$(pineappl info "${g}" --get "${key}") - if ! diff <(echo "${lhs}") <(echo "${rhs}") >/dev/null; then - # TODO: what do we do in this case? - echo ${key} differs - fi - done -done - -lz4 -9 "${grid}" -rm "${grid}" diff --git a/poetry.lock b/poetry.lock index 4a64c6a0..831824d4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -121,32 +121,6 @@ SQLAlchemy = ">=1.4.29,<2.0.0" [package.extras] docs = ["Sphinx (>=4.3.2,<5.0.0)", "sphinx-rtd-theme (>=1.0.0,<2.0.0)", "sphinxcontrib-bibtex (>=2.4.1,<3.0.0)"] -[[package]] -name = "black" -version = "21.12b0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -click = ">=7.1.2" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" -platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] -uvloop = ["uvloop (>=0.15.2)"] - [[package]] name = "breezy" version = "3.2.2" @@ -619,14 +593,6 @@ category = "main" optional = false python-versions = ">=3.5" -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "numba" version = "0.55.2" @@ -691,14 +657,6 @@ python-versions = ">=3.6" qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["docopt", "pytest (<6.0.0)"] -[[package]] -name = "pathspec" -version = "0.9.0" -description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - [[package]] name = "patiencediff" version = "0.2.2" @@ -769,7 +727,7 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa [[package]] name = "pineappl" -version = "0.5.3" +version = "0.5.4" description = "Python bindings to PineAPPL" category = "main" optional = false @@ -1273,11 +1231,11 @@ tests = ["pytest", "typeguard", "pygments", "littleutils", "cython"] [[package]] name = "tomli" -version = "1.2.3" +version = "2.0.1" description = "A lil' TOML parser" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "tomlkit" @@ -1400,7 +1358,7 @@ docs = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-bibtex"] [metadata] lock-version = "1.1" python-versions = ">=3.8,<3.11" -content-hash = "a883e68b04e46f6e6e1ff9cb35ab5a307cf6456133232841de6919ca0debcf3e" +content-hash = "0f5589c19b4a954abc22fc4323c313df713d944e7a4d043f942b29772d497023" [metadata.files] a3b2bbc3ced97675ac3a71df45f55ba = [ @@ -1412,10 +1370,7 @@ a3b2bbc3ced97675ac3a71df45f55ba = [ {file = "a3b2bbc3ced97675ac3a71df45f55ba-6.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0147a1d9dab10f8b23ef5fc97f570ce044e9f8409bfee2fbce551180fafcbb2e"}, {file = "a3b2bbc3ced97675ac3a71df45f55ba-6.4.0.tar.gz", hash = "sha256:1bd60035f9862db1130be035f631c2cfcf90d2ee0cfc6f33ce29fbf8a70b5a04"}, ] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] +alabaster = [] appdirs = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, @@ -1424,25 +1379,17 @@ appnope = [ {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, ] -astroid = [ - {file = "astroid-2.11.7-py3-none-any.whl", hash = "sha256:86b0a340a512c65abf4368b80252754cda17c02cdbbd3f587dddf98112233e7b"}, - {file = "astroid-2.11.7.tar.gz", hash = "sha256:bb24615c77f4837c707669d16907331374ae8a964650a66999da3f5ca68dc946"}, -] +astroid = [] asttokens = [ {file = "asttokens-2.0.5-py2.py3-none-any.whl", hash = "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c"}, {file = "asttokens-2.0.5.tar.gz", hash = "sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5"}, ] -atomicwrites = [ - {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, -] +atomicwrites = [] attrs = [ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] -babel = [ - {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, - {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, -] +babel = [] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, @@ -1451,102 +1398,20 @@ banana-hep = [ {file = "banana-hep-0.6.5.tar.gz", hash = "sha256:748923aae41d5be0e117516698e523935d5f68146b53a8565372c7489137b0f1"}, {file = "banana_hep-0.6.5-py3-none-any.whl", hash = "sha256:6a8da394b0492cdd11f454a73c81727aff1bc96b206f1ca109cecdd087b980cd"}, ] -black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, -] -breezy = [ - {file = "breezy-3.2.2.tar.gz", hash = "sha256:187a6e45208dd05d81750736720c83710cf48094f547ec4081c571259559a4d5"}, -] -certifi = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, -] -cffi = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, - {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, -] +breezy = [] +certifi = [] +cffi = [] +charset-normalizer = [] click = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] -colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, -] +colorama = [] commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] -configobj = [ - {file = "configobj-5.0.6.tar.gz", hash = "sha256:a2f5650770e1c87fb335af19a9b7eb73fc05ccf22144eb68db7d00cd2bcb0902"}, -] +configobj = [] cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, @@ -1555,37 +1420,9 @@ decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -dill = [ - {file = "dill-0.3.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"}, - {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, -] -docutils = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] -dulwich = [ - {file = "dulwich-0.20.45-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:9b689b05bc7baa5cb20ebff54291085b598a9bdf7caeab23daf93b46421d96ff"}, - {file = "dulwich-0.20.45-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7cf5171034d9d61b928bd5f9c509000e895d1ba29bd6ea850b9e4f93fca0f7"}, - {file = "dulwich-0.20.45-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22d433ba9c776f2b0e19b1186e01e25ca286175e20f4ac422141db94eeaac08b"}, - {file = "dulwich-0.20.45-cp310-cp310-win_amd64.whl", hash = "sha256:6e02babb44bdad17b6c9c50b4f9df42f6e511e3a51555ac07dd85ec904efe0b1"}, - {file = "dulwich-0.20.45-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:042bc206764968b17338e32c52bb6a116154eb87a63651971946917dfa37a359"}, - {file = "dulwich-0.20.45-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e405ac9426288ca782c45e066f816d878b4a529acf4d4b0b2a5bb45a804dfec"}, - {file = "dulwich-0.20.45-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c8c0fc7d2e3b0ad6a4faadf96f0626fa50935ababfd774b9b94edaa28f0668ec"}, - {file = "dulwich-0.20.45-cp36-cp36m-win_amd64.whl", hash = "sha256:35015e43207752cf7924860e85a3c2290c652c0c3ee81e7c95c52d34638f605d"}, - {file = "dulwich-0.20.45-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d89f53a739ac3394b5ef2f178480569b7d36d4fe7b4bb49678582914530ce35b"}, - {file = "dulwich-0.20.45-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abb1b0e1e50192ce7204c4e14f24c989c5920c56de908365f4e66c6e3458945"}, - {file = "dulwich-0.20.45-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eb4189d72a0e2f3070e2abdbd10a05c0e62355cd5496761d6e68f1e865ac6fad"}, - {file = "dulwich-0.20.45-cp37-cp37m-win_amd64.whl", hash = "sha256:efe46167eb02ba85d9c2e993635e7543e1e04bb3261112e9d54daff2385ae5df"}, - {file = "dulwich-0.20.45-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:3f2c137a0003e80e384d116e65b453f8a704c2d393c30a47b447764e7f9c05a1"}, - {file = "dulwich-0.20.45-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65334bd7a1d91054516a49f86343e9c2549740bbddebcbb4763c8aacf2aac48c"}, - {file = "dulwich-0.20.45-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5e41044ac51a4b3454d67e5f691808540470deeb6a852d7c5c6ca44c48b4cdc3"}, - {file = "dulwich-0.20.45-cp38-cp38-win_amd64.whl", hash = "sha256:d8b6aae7af8edbfac8038e1777ae820efac33c7c22a8025d3254bbd53ec725b5"}, - {file = "dulwich-0.20.45-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:bb75268cec2f3ae6f6b7addbc0db50db2e9e42b2ad8364e74b9f5b17ab0053b5"}, - {file = "dulwich-0.20.45-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3f64870f2f206dda3308cb73563f5f59fdc084179271651a0488d12ab4185b9"}, - {file = "dulwich-0.20.45-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:49852f12c1e1d50039f927e9fdee1bd00a9b428c31b078ba5ba9fc1cf88e9d3e"}, - {file = "dulwich-0.20.45-cp39-cp39-win_amd64.whl", hash = "sha256:3136bcaf7508522a2aa63f856743f06129261bc5a03331aa6a0654fa6d04a4ae"}, - {file = "dulwich-0.20.45.tar.gz", hash = "sha256:70710dd9ca2a442190c7e506892db074c318ac762e221f7529b8ce34802041b7"}, -] +dill = [] +docutils = [] +dulwich = [] eko = [ {file = "eko-0.9.4-py3-none-any.whl", hash = "sha256:5bdfa3bf718f3670706ce0644716ca51699804d3dcca5b2dc6264f8b9bcdb7e8"}, {file = "eko-0.9.4.tar.gz", hash = "sha256:c2325284a391cdd9119eb991a243df50a6e5de3f8bee7faae19d27c83278507a"}, @@ -1598,13 +1435,8 @@ fancycompleter = [ {file = "fancycompleter-0.9.1-py3-none-any.whl", hash = "sha256:dd076bca7d9d524cc7f25ec8f35ef95388ffef9ef46def4d3d25e9b044ad7080"}, {file = "fancycompleter-0.9.1.tar.gz", hash = "sha256:09e0feb8ae242abdfd7ef2ba55069a46f011814a80fe5476be48f51b00247272"}, ] -fastbencode = [ - {file = "fastbencode-0.0.9.tar.gz", hash = "sha256:a508632c645f2e3ffbb4984cb544035c8946d6fec8cfe0aec5e556340773ce9c"}, -] -fonttools = [ - {file = "fonttools-4.34.4-py3-none-any.whl", hash = "sha256:d73f25b283cd8033367451122aa868a23de0734757a01984e4b30b18b9050c72"}, - {file = "fonttools-4.34.4.zip", hash = "sha256:9a1c52488045cd6c6491fd07711a380f932466e317cb8e016fc4e99dc7eac2f0"}, -] +fastbencode = [] +fonttools = [] greenlet = [ {file = "greenlet-1.1.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6"}, {file = "greenlet-1.1.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a"}, @@ -1666,125 +1498,25 @@ idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] -imagesize = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.12.0-py3-none-any.whl", hash = "sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23"}, - {file = "importlib_metadata-4.12.0.tar.gz", hash = "sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670"}, -] +imagesize = [] +importlib-metadata = [] ipython = [ {file = "ipython-8.4.0-py3-none-any.whl", hash = "sha256:7ca74052a38fa25fe9bedf52da0be7d3fdd2fb027c3b778ea78dfe8c212937d1"}, {file = "ipython-8.4.0.tar.gz", hash = "sha256:f2db3a10254241d9b447232cec8b424847f338d9d36f9a577a6192c332a46abd"}, ] -isort = [ - {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, - {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, -] +isort = [] jedi = [ {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, ] -jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -kiwisolver = [ - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, - {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, -] -latexcodec = [ - {file = "latexcodec-2.0.1-py2.py3-none-any.whl", hash = "sha256:c277a193638dc7683c4c30f6684e3db728a06efb0dc9cf346db8bd0aa6c5d271"}, - {file = "latexcodec-2.0.1.tar.gz", hash = "sha256:2aa2551c373261cefe2ad3a8953a6d6533e68238d180eb4bb91d7964adb3fe9a"}, -] -lazy-object-proxy = [ - {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8561da8b3dd22d696244d6d0d5330618c993a215070f473b699e00cf1f3f6443"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win32.whl", hash = "sha256:898322f8d078f2654d275124a8dd19b079080ae977033b713f677afcfc88e2b9"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:85b232e791f2229a4f55840ed54706110c80c0a210d076eee093f2b2e33e1bfd"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46ff647e76f106bb444b4533bb4153c7370cdf52efc62ccfc1a28bdb3cc95442"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f3bb77efe1367b2515f8cb4790a11cffae889148ad33adad07b9b55e0ab22c"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c19814163728941bb871240d45c4c30d33b8a2e85972c44d4e63dd7107faba44"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e40f2013d96d30217a51eeb1db28c9ac41e9d0ee915ef9d00da639c5b63f01a1"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2052837718516a94940867e16b1bb10edb069ab475c3ad84fd1e1a6dd2c0fcfc"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win32.whl", hash = "sha256:6a24357267aa976abab660b1d47a34aaf07259a0c3859a34e536f1ee6e76b5bb"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6aff3fe5de0831867092e017cf67e2750c6a1c7d88d84d2481bd84a2e019ec35"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a6e94c7b02641d1311228a102607ecd576f70734dc3d5e22610111aeacba8a0"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ce15276a1a14549d7e81c243b887293904ad2d94ad767f42df91e75fd7b5b6"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e368b7f7eac182a59ff1f81d5f3802161932a41dc1b1cc45c1f757dc876b5d2c"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ecbb350991d6434e1388bee761ece3260e5228952b1f0c46ffc800eb313ff42"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:553b0f0d8dbf21890dd66edd771f9b1b5f51bd912fa5f26de4449bfc5af5e029"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:c7a683c37a8a24f6428c28c561c80d5f4fd316ddcf0c7cab999b15ab3f5c5c69"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:df2631f9d67259dc9620d831384ed7732a198eb434eadf69aea95ad18c587a28"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07fa44286cda977bd4803b656ffc1c9b7e3bc7dff7d34263446aec8f8c96f88a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dca6244e4121c74cc20542c2ca39e5c4a5027c81d112bfb893cf0790f96f57e"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91ba172fc5b03978764d1df5144b4ba4ab13290d7bab7a50f12d8117f8630c38"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:043651b6cb706eee4f91854da4a089816a6606c1428fd391573ef8cb642ae4f7"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b9e89b87c707dd769c4ea91f7a31538888aad05c116a59820f28d59b3ebfe25a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:9d166602b525bf54ac994cf833c385bfcc341b364e3ee71e3bf5a1336e677b55"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f3953eb575b45480db6568306893f0bd9d8dfeeebd46812aa09ca9579595148"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dd7ed7429dbb6c494aa9bc4e09d94b778a3579be699f9d67da7e6804c422d3de"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ed0c2b380eb6248abdef3cd425fc52f0abd92d2b07ce26359fcbc399f636ad"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7096a5e0c1115ec82641afbdd70451a144558ea5cf564a896294e346eb611be1"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f769457a639403073968d118bc70110e7dce294688009f5c24ab78800ae56dc8"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:39b0e26725c5023757fc1ab2a89ef9d7ab23b84f9251e28f9cc114d5b59c1b09"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"}, - {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, -] +jinja2 = [] +kiwisolver = [] +latexcodec = [] +lazy-object-proxy = [] leprohq = [ {file = "LeProHQ-0.2.3-py3-none-any.whl", hash = "sha256:5dc27db91a554187715996cf9844442549802d505ed189dd501baefbf8735c58"}, ] -lhapdf-management = [ - {file = "lhapdf_management-0.2-py3-none-any.whl", hash = "sha256:7529f1ca5029ab93fb3beeba95a3a6db46f642632c69cdfc5d8bdeb75da82b83"}, - {file = "lhapdf_management-0.2.tar.gz", hash = "sha256:d9999cdf1eda9f90fe0d56d4b7ec1538975d0536594869d088523e66f7c86254"}, -] +lhapdf-management = [] llvmlite = [ {file = "llvmlite-0.38.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7dd2bd1d6406e7789273e3f8a304ed5d9adcfaa5768052fca7dc233a857be98"}, {file = "llvmlite-0.38.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a5e0ed215a576f0f872f47a70b8cb49864e0aefc8586aff5ce83e3bff47bc23"}, @@ -1838,48 +1570,7 @@ lz4 = [ {file = "lz4-3.1.10-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:59afeb136957ed7a2058e4ef61cb2d0f5894ca866a8bfca5ff43d49a5cbe4aa2"}, {file = "lz4-3.1.10.tar.gz", hash = "sha256:439e575ecfa9ecffcbd63cfed99baefbe422ab9645b1e82278024d8a21d9720b"}, ] -markupsafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] +markupsafe = [] matplotlib = [ {file = "matplotlib-3.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:03bbb3f5f78836855e127b5dab228d99551ad0642918ccbf3067fcd52ac7ac5e"}, {file = "matplotlib-3.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49a5938ed6ef9dda560f26ea930a2baae11ea99e1c2080c8714341ecfda72a89"}, @@ -1921,18 +1612,8 @@ matplotlib-inline = [ {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, ] -mccabe = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, -] -more-itertools = [ - {file = "more-itertools-8.13.0.tar.gz", hash = "sha256:a42901a0a5b169d925f6f217cd5a190e32ef54360905b9c39ee7db5313bfec0f"}, - {file = "more_itertools-8.13.0-py3-none-any.whl", hash = "sha256:c5122bffc5f104d37c1626b8615b511f3427aa5389b94d61e5ef8236bfbc3ddb"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] +mccabe = [] +more-itertools = [] numba = [ {file = "numba-0.55.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:dd05f7c0ce64b6977596aa4e5a44747c6ef414d7989da1c7672337c54381a5ef"}, {file = "numba-0.55.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e36232eccd172c583b1f021c5c48744c087ae6fc9dc5c5f0dd2cb2286e517bf8"}, @@ -2018,17 +1699,7 @@ parso = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -patiencediff = [ - {file = "patiencediff-0.2.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e15b894d1941ed773b6c5f7479985fc17ec81bab33f82e3b736ab1920c1804d6"}, - {file = "patiencediff-0.2.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:f196516e980f17302317f2f6f6a4c2897c6107c34c5268d9d37b820e98fd0deb"}, - {file = "patiencediff-0.2.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:830be20a2e74972843362d7bc4b7a7929ff63205eade553d83256e51843b64d4"}, - {file = "patiencediff-0.2.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5fcc3f9dc12040ddfb8165317af3425c4d2be49b147def22a72a44d43fff5141"}, - {file = "patiencediff-0.2.2.tar.gz", hash = "sha256:456d9fc47fe43f9aea863059ea2c6df5b997285590e4b7f9ee8fbb6c3419b5a7"}, -] +patiencediff = [] pdbpp = [ {file = "pdbpp-0.10.3-py2.py3-none-any.whl", hash = "sha256:79580568e33eb3d6f6b462b1187f53e10cd8e4538f7d31495c9181e2cf9665d1"}, {file = "pdbpp-0.10.3.tar.gz", hash = "sha256:d9e43f4fda388eeb365f2887f4e7b66ac09dce9b6236b76f63616530e2f669f5"}, @@ -2064,98 +1735,12 @@ pickleshare = [ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] -pillow = [ - {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"}, - {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831e648102c82f152e14c1a0938689dbb22480c548c8d4b8b248b3e50967b88c"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc1d2451e8a3b4bfdb9caf745b58e6c7a77d2e469159b0d527a4554d73694d1"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:136659638f61a251e8ed3b331fc6ccd124590eeff539de57c5f80ef3a9594e58"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c66f70fb539301e064f6478d7453e820d8a2c631da948a23384865cd95544"}, - {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"}, - {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"}, - {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:408673ed75594933714482501fe97e055a42996087eeca7e5d06e33218d05aa8"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:727dd1389bc5cb9827cbd1f9d40d2c2a1a0c9b32dd2261db522d22a604a6eec9"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:15928f824870535c85dbf949c09d6ae7d3d6ac2d6efec80f3227f73eefba741c"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a"}, - {file = "Pillow-9.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5b87da55a08acb586bad5c3aa3b86505f559b84f39035b233d5bf844b0834b1"}, - {file = "Pillow-9.2.0-cp311-cp311-win32.whl", hash = "sha256:b6d5e92df2b77665e07ddb2e4dbd6d644b78e4c0d2e9272a852627cdba0d75cf"}, - {file = "Pillow-9.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bf088c1ce160f50ea40764f825ec9b72ed9da25346216b91361eef8ad1b8f8c"}, - {file = "Pillow-9.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:2c58b24e3a63efd22554c676d81b0e57f80e0a7d3a5874a7e14ce90ec40d3069"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef7592281f7c174d3d6cbfbb7ee5984a671fcd77e3fc78e973d492e9bf0eb3f"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd7b9c7139dc8258d164b55696ecd16c04607f1cc33ba7af86613881ffe4ac8"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a138441e95562b3c078746a22f8fca8ff1c22c014f856278bdbdd89ca36cff1b"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:93689632949aff41199090eff5474f3990b6823404e45d66a5d44304e9cdc467"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:f3fac744f9b540148fa7715a435d2283b71f68bfb6d4aae24482a890aed18b59"}, - {file = "Pillow-9.2.0-cp37-cp37m-win32.whl", hash = "sha256:fa768eff5f9f958270b081bb33581b4b569faabf8774726b283edb06617101dc"}, - {file = "Pillow-9.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:69bd1a15d7ba3694631e00df8de65a8cb031911ca11f44929c97fe05eb9b6c1d"}, - {file = "Pillow-9.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:030e3460861488e249731c3e7ab59b07c7853838ff3b8e16aac9561bb345da14"}, - {file = "Pillow-9.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74a04183e6e64930b667d321524e3c5361094bb4af9083db5c301db64cd341f3"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d33a11f601213dcd5718109c09a52c2a1c893e7461f0be2d6febc2879ec2402"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fd6f5e3c0e4697fa7eb45b6e93996299f3feee73a3175fa451f49a74d092b9f"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a647c0d4478b995c5e54615a2e5360ccedd2f85e70ab57fbe817ca613d5e63b8"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4134d3f1ba5f15027ff5c04296f13328fecd46921424084516bdb1b2548e66ff"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:bc431b065722a5ad1dfb4df354fb9333b7a582a5ee39a90e6ffff688d72f27a1"}, - {file = "Pillow-9.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1536ad017a9f789430fb6b8be8bf99d2f214c76502becc196c6f2d9a75b01b76"}, - {file = "Pillow-9.2.0-cp38-cp38-win32.whl", hash = "sha256:2ad0d4df0f5ef2247e27fc790d5c9b5a0af8ade9ba340db4a73bb1a4a3e5fb4f"}, - {file = "Pillow-9.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ec52c351b35ca269cb1f8069d610fc45c5bd38c3e91f9ab4cbbf0aebc136d9c8"}, - {file = "Pillow-9.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ed2c4ef2451de908c90436d6e8092e13a43992f1860275b4d8082667fbb2ffc"}, - {file = "Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ad2f835e0ad81d1689f1b7e3fbac7b01bb8777d5a985c8962bedee0cc6d43da"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea98f633d45f7e815db648fd7ff0f19e328302ac36427343e4432c84432e7ff4"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7761afe0126d046974a01e030ae7529ed0ca6a196de3ec6937c11df0df1bc91c"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a54614049a18a2d6fe156e68e188da02a046a4a93cf24f373bffd977e943421"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5aed7dde98403cd91d86a1115c78d8145c83078e864c1de1064f52e6feb61b20"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:13b725463f32df1bfeacbf3dd197fb358ae8ebcd8c5548faa75126ea425ccb60"}, - {file = "Pillow-9.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:808add66ea764ed97d44dda1ac4f2cfec4c1867d9efb16a33d158be79f32b8a4"}, - {file = "Pillow-9.2.0-cp39-cp39-win32.whl", hash = "sha256:337a74fd2f291c607d220c793a8135273c4c2ab001b03e601c36766005f36885"}, - {file = "Pillow-9.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:fac2d65901fb0fdf20363fbd345c01958a742f2dc62a8dd4495af66e3ff502a4"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ad2277b185ebce47a63f4dc6302e30f05762b688f8dc3de55dbae4651872cdf3"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7b502bc34f6e32ba022b4a209638f9e097d7a9098104ae420eb8186217ebbb"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1f14f5f691f55e1b47f824ca4fdcb4b19b4323fe43cc7bb105988cad7496be"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:dfe4c1fedfde4e2fbc009d5ad420647f7730d719786388b7de0999bf32c0d9fd"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:f07f1f00e22b231dd3d9b9208692042e29792d6bd4f6639415d2f23158a80013"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1802f34298f5ba11d55e5bb09c31997dc0c6aed919658dfdf0198a2fe75d5490"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d4cafe22f050b46d983b71c707162d63d796a1235cdf8b9d7a112e97b15bac"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96b5e6874431df16aee0c1ba237574cb6dff1dcb173798faa6a9d8b399a05d0e"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"}, - {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, -] -pineappl = [ - {file = "pineappl-0.5.3-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:95ee314d9598ae34d56a9360643dccd221056e0393d6ce552f49308956583af1"}, - {file = "pineappl-0.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd5addb165ca1adf4c9a21ee500220b2c3c58d872385685f636a3335ed582a0d"}, - {file = "pineappl-0.5.3-cp310-none-win_amd64.whl", hash = "sha256:b3ee5b0332ba8977c90aad893df985dde9cc16b1ebca7defead906a4846b913f"}, - {file = "pineappl-0.5.3-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:ce90a16ce35024ae654cb5001c19c50bebd1bfe3e1f68b32effb53c879295fd3"}, - {file = "pineappl-0.5.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dae5315223277e02417b10e382bdfca6d5e1af4d4992461ae9ae52968569606"}, - {file = "pineappl-0.5.3-cp37-none-win_amd64.whl", hash = "sha256:b89ffd7acd5233f7be4add1449859e116c657868d03d01400aa02430146a9168"}, - {file = "pineappl-0.5.3-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0db53eb1fefe583837b1e8f41ccdda38729c79ae788c8f2303559701552b7682"}, - {file = "pineappl-0.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62a78920e04e7fb6b31e187e83078c50bfbdd66ab40ee4b1e3301b0892ca95ce"}, - {file = "pineappl-0.5.3-cp38-none-win_amd64.whl", hash = "sha256:7b6056dafc83bb3e8ff8ae3806cd248a0ecee69709b85e84c3241eee9ebf78e6"}, - {file = "pineappl-0.5.3-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:4c87e279aafe61cd6738be235db23ebb403b55595ba0fa0b560c488dd82c8209"}, - {file = "pineappl-0.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d8e0fcb6f9334d330a157c40012fc5f8a3048fa1448b066dd3e3dbd9b2b40f"}, - {file = "pineappl-0.5.3-cp39-none-win_amd64.whl", hash = "sha256:df9a91c436435a197074b6f24bd464a5a3fe54aa0677b473ea759624be7e2ab0"}, - {file = "pineappl-0.5.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c14323b788630fcb1614b9a1451d12aa18c9e565a81041694906e49d315bcdd8"}, - {file = "pineappl-0.5.3.tar.gz", hash = "sha256:389563737cbe69360a6350759d7ded95fea3156c01d2f02705bcf51f45542d74"}, -] -pkgconfig = [ - {file = "pkgconfig-1.5.5-py3-none-any.whl", hash = "sha256:d20023bbeb42ee6d428a0fac6e0904631f545985a10cdd71a20aa58bc47a4209"}, - {file = "pkgconfig-1.5.5.tar.gz", hash = "sha256:deb4163ef11f75b520d822d9505c1f462761b4309b1bb713d08689759ea8b899"}, -] -platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] -pluggy = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, -] -prompt-toolkit = [ - {file = "prompt_toolkit-3.0.30-py3-none-any.whl", hash = "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289"}, - {file = "prompt_toolkit-3.0.30.tar.gz", hash = "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0"}, -] +pillow = [] +pineappl = [] +pkgconfig = [] +platformdirs = [] +pluggy = [] +prompt-toolkit = [] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -2168,61 +1753,18 @@ py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] -pybtex = [ - {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, - {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, -] -pybtex-docutils = [ - {file = "pybtex-docutils-1.0.2.tar.gz", hash = "sha256:43aa353b6d498fd5ac30f0073a98e332d061d34fe619d3d50d1761f8fd4aa016"}, - {file = "pybtex_docutils-1.0.2-py3-none-any.whl", hash = "sha256:6f9e3c25a37bcaac8c4f69513272706ec6253bb708a93d8b4b173f43915ba239"}, -] +pybtex = [] +pybtex-docutils = [] pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] -pygit2 = [ - {file = "pygit2-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e7f56bf5338ec79e7521204ddf4f6848cd2ccd1de4ea8b2c0af163ed4b08ade"}, - {file = "pygit2-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:487ae81134b44b1e0173b3e9a478f93f18c1c22d53241d1fc8047e400094582b"}, - {file = "pygit2-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f84826586d5e7f32e560d0d55fd35484cebd49fefccfe8a3727bd4b7c4788b92"}, - {file = "pygit2-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81e1d25b2a0be1a8cd7d4131fe5af8efddc7015f522638e2c53fe820800e4de6"}, - {file = "pygit2-1.9.2-cp310-cp310-win32.whl", hash = "sha256:d52113184c38455bbc9576003054311d8c283a547a12790baf0210ccfd0cc90f"}, - {file = "pygit2-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:5f038afaeaf5cd1fa35ae02073f42558eb7daf6cbc57cdc41e5ee9dfdad6a653"}, - {file = "pygit2-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:14b51a909debdfdaa7757a581a1c6f6d1a5b150870da68881d3bd9d5b94842c7"}, - {file = "pygit2-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308ce00e8a1f8d8dc3858b3e21f0ea701cdde675966aea68fcccf559cb5e9577"}, - {file = "pygit2-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6724885e4a31a843fd6d7d6cd90baef5c61a774d222fabbe39505c0b3dd2c55b"}, - {file = "pygit2-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:eb2d916ec03c1dda7ab04506d42ef2c0bac2590827c5d15fec49b67f39f02704"}, - {file = "pygit2-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ebe0b2371fe4d91adc5014cc94dc85497bec6a5e1e557856bb45f586e31519bd"}, - {file = "pygit2-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9bfd9d089942482ca0b5f426396b76fb86b25ca3414546388d8cfa8824ab1188"}, - {file = "pygit2-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:871682c3a910d71cc8bf6f8be4474085bf3eb27864a090f2132f6fa50fe2eb30"}, - {file = "pygit2-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe3eec281222c5778eed6a4185d0442a7d7aaac552039359d5ec4c5b8737baa3"}, - {file = "pygit2-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cef5b08544b895a75ed7908ca6c0d730b890ffeba7f2b46e5c8aec458786802"}, - {file = "pygit2-1.9.2-cp38-cp38-win32.whl", hash = "sha256:0a0aaadca823c2e6d1f6319190f53c55c8323a810a1d1117e378e907c98cf613"}, - {file = "pygit2-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:55593d734a30e824f9136e0afcd15b287125ef41dac7833f564da454ba0969d0"}, - {file = "pygit2-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:da12d67bdb43736e3bd6464623e8aff06796527ea8525f65b76a776f26c7fa24"}, - {file = "pygit2-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a5bf52fb75dc2d2da814996b8006559d0b57b573775f757a1997f89eabfdb0a"}, - {file = "pygit2-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a1ebd104105cc56ae2ba100090228a4db8cbeb7a480e8657a803d674331b82d"}, - {file = "pygit2-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0c18ed4ce7f06e6885ab01f1b1f80468e09d1bd72265e14575be0b44a581ae7"}, - {file = "pygit2-1.9.2-cp39-cp39-win32.whl", hash = "sha256:d2cb8571cd02acf739b26d2c2bb4828f7cfb4e23b564d6c4442bffe8714ec8e5"}, - {file = "pygit2-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:75a95ddab5d256c35377a2892bd5f5f3121552c3ae9af9b06eaa7ac426220d22"}, - {file = "pygit2-1.9.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bf160b3653168e5d11e6de9589018db55ef51a0859bf4a3719aa8cc0998c584e"}, - {file = "pygit2-1.9.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:084bc622205b6f495a0c7e6d8dde9a2e42967bd6b8e16e28d21725dbcc837e1a"}, - {file = "pygit2-1.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3068375e81a473d01d23d86abc5e978bac7bd277a91538416d31e06d0e97402f"}, - {file = "pygit2-1.9.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3f737e8eb42a818de2e604bfca125e79e3f386e8b77cceb1fe881f7603c378c2"}, - {file = "pygit2-1.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:490d6ba5ae4a539d147644e9ce20a2c5dd55dd3ea177cec78971b7422c0540d4"}, - {file = "pygit2-1.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6198c1010af273d91c182997693d61b2d00edeecdef9c39beef711568bec984"}, - {file = "pygit2-1.9.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8cdf963725b1f6bfad12a9238a421587af682164d90b3d5a81224d4a112ed4f6"}, - {file = "pygit2-1.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4625e8957b9e7e72a300d42e27e5392ac449517397fb22045b8c3e468f4b6f06"}, - {file = "pygit2-1.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6d7b3613ef8358f24d32e4a1ef976218e351e84953c474d1fa1d29b28484db"}, - {file = "pygit2-1.9.2.tar.gz", hash = "sha256:20894433df1146481aacae37e2b0f3bbbfdea026db2f55061170bd9823e40b19"}, -] +pygit2 = [] pygments = [ {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, ] -pylint = [ - {file = "pylint-2.14.5-py3-none-any.whl", hash = "sha256:fabe30000de7d07636d2e82c9a518ad5ad7908590fe135ace169b44839c15f90"}, - {file = "pylint-2.14.5.tar.gz", hash = "sha256:487ce2192eee48211269a0e976421f334cf94de1806ca9d0a99449adcdf0285e"}, -] +pylint = [] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, @@ -2235,10 +1777,7 @@ pyreadline = [ pyrepl = [ {file = "pyrepl-0.9.0.tar.gz", hash = "sha256:292570f34b5502e871bbb966d639474f2b57fbfcd3373c2d6a2f3d56e681a775"}, ] -pytest = [ - {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, - {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, -] +pytest = [] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, @@ -2286,10 +1825,7 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] -requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] +requests = [] rich = [ {file = "rich-10.16.2-py3-none-any.whl", hash = "sha256:c59d73bd804c90f747c8d7b1d023b88f2a9ac2454224a4aeaf959b21eeb42d03"}, {file = "rich-10.16.2.tar.gz", hash = "sha256:720974689960e06c2efdb54327f8bf0cdbdf4eae4ad73b6c94213cad405c371b"}, @@ -2319,120 +1855,32 @@ scipy = [ {file = "scipy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:9dd4012ac599a1e7eb63c114d1eee1bcfc6dc75a29b589ff0ad0bb3d9412034f"}, {file = "scipy-1.8.1.tar.gz", hash = "sha256:9e3fb1b0e896f14a85aa9a28d5f755daaeeb54c897b746df7a55ccb02b340f33"}, ] -setuptools-scm = [ - {file = "setuptools_scm-7.0.5-py3-none-any.whl", hash = "sha256:7930f720905e03ccd1e1d821db521bff7ec2ac9cf0ceb6552dd73d24a45d3b02"}, - {file = "setuptools_scm-7.0.5.tar.gz", hash = "sha256:031e13af771d6f892b941adb6ea04545bbf91ebc5ce68c78aaf3fff6e1fb4844"}, -] +setuptools-scm = [] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -sphinx = [ - {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, - {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, -] -sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, - {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-bibtex = [ - {file = "sphinxcontrib-bibtex-2.4.2.tar.gz", hash = "sha256:65b023ee47f35f1f03ac4d71c824e67c624c7ecac1bb26e83623271a01f9da86"}, - {file = "sphinxcontrib_bibtex-2.4.2-py3-none-any.whl", hash = "sha256:608512afde6b732148cdc9123550bd560bf48e071d1fb7bb1bab4f4437ff04f4"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -sqlalchemy = [ - {file = "SQLAlchemy-1.4.39-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:4770eb3ba69ec5fa41c681a75e53e0e342ac24c1f9220d883458b5596888e43a"}, - {file = "SQLAlchemy-1.4.39-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:752ef2e8dbaa3c5d419f322e3632f00ba6b1c3230f65bc97c2ff5c5c6c08f441"}, - {file = "SQLAlchemy-1.4.39-cp27-cp27m-win32.whl", hash = "sha256:b30e70f1594ee3c8902978fd71900d7312453922827c4ce0012fa6a8278d6df4"}, - {file = "SQLAlchemy-1.4.39-cp27-cp27m-win_amd64.whl", hash = "sha256:864d4f89f054819cb95e93100b7d251e4d114d1c60bc7576db07b046432af280"}, - {file = "SQLAlchemy-1.4.39-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8f901be74f00a13bf375241a778455ee864c2c21c79154aad196b7a994e1144f"}, - {file = "SQLAlchemy-1.4.39-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1745987ada1890b0e7978abdb22c133eca2e89ab98dc17939042240063e1ef21"}, - {file = "SQLAlchemy-1.4.39-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ede13a472caa85a13abe5095e71676af985d7690eaa8461aeac5c74f6600b6c0"}, - {file = "SQLAlchemy-1.4.39-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7f13644b15665f7322f9e0635129e0ef2098409484df67fcd225d954c5861559"}, - {file = "SQLAlchemy-1.4.39-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26146c59576dfe9c546c9f45397a7c7c4a90c25679492ff610a7500afc7d03a6"}, - {file = "SQLAlchemy-1.4.39-cp310-cp310-win32.whl", hash = "sha256:91d2b89bb0c302f89e753bea008936acfa4e18c156fb264fe41eb6bbb2bbcdeb"}, - {file = "SQLAlchemy-1.4.39-cp310-cp310-win_amd64.whl", hash = "sha256:50e7569637e2e02253295527ff34666706dbb2bc5f6c61a5a7f44b9610c9bb09"}, - {file = "SQLAlchemy-1.4.39-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:107df519eb33d7f8e0d0d052128af2f25066c1a0f6b648fd1a9612ab66800b86"}, - {file = "SQLAlchemy-1.4.39-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f24d4d6ec301688c59b0c4bb1c1c94c5d0bff4ecad33bb8f5d9efdfb8d8bc925"}, - {file = "SQLAlchemy-1.4.39-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7b2785dd2a0c044a36836857ac27310dc7a99166253551ee8f5408930958cc60"}, - {file = "SQLAlchemy-1.4.39-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6e2c8581c6620136b9530137954a8376efffd57fe19802182c7561b0ab48b48"}, - {file = "SQLAlchemy-1.4.39-cp36-cp36m-win32.whl", hash = "sha256:fbc076f79d830ae4c9d49926180a1140b49fa675d0f0d555b44c9a15b29f4c80"}, - {file = "SQLAlchemy-1.4.39-cp36-cp36m-win_amd64.whl", hash = "sha256:0ec54460475f0c42512895c99c63d90dd2d9cbd0c13491a184182e85074b04c5"}, - {file = "SQLAlchemy-1.4.39-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:6f95706da857e6e79b54c33c1214f5467aab10600aa508ddd1239d5df271986e"}, - {file = "SQLAlchemy-1.4.39-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:621f050e72cc7dfd9ad4594ff0abeaad954d6e4a2891545e8f1a53dcdfbef445"}, - {file = "SQLAlchemy-1.4.39-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05a05771617bfa723ba4cef58d5b25ac028b0d68f28f403edebed5b8243b3a87"}, - {file = "SQLAlchemy-1.4.39-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20bf65bcce65c538e68d5df27402b39341fabeecf01de7e0e72b9d9836c13c52"}, - {file = "SQLAlchemy-1.4.39-cp37-cp37m-win32.whl", hash = "sha256:f2a42acc01568b9701665e85562bbff78ec3e21981c7d51d56717c22e5d3d58b"}, - {file = "SQLAlchemy-1.4.39-cp37-cp37m-win_amd64.whl", hash = "sha256:6d81de54e45f1d756785405c9d06cd17918c2eecc2d4262dc2d276ca612c2f61"}, - {file = "SQLAlchemy-1.4.39-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5c2d19bfb33262bf987ef0062345efd0f54c4189c2d95159c72995457bf4a359"}, - {file = "SQLAlchemy-1.4.39-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14ea8ff2d33c48f8e6c3c472111d893b9e356284d1482102da9678195e5a8eac"}, - {file = "SQLAlchemy-1.4.39-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec3985c883d6d217cf2013028afc6e3c82b8907192ba6195d6e49885bfc4b19d"}, - {file = "SQLAlchemy-1.4.39-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1962dfee37b7fb17d3d4889bf84c4ea08b1c36707194c578f61e6e06d12ab90f"}, - {file = "SQLAlchemy-1.4.39-cp38-cp38-win32.whl", hash = "sha256:047ef5ccd8860f6147b8ac6c45a4bc573d4e030267b45d9a1c47b55962ff0e6f"}, - {file = "SQLAlchemy-1.4.39-cp38-cp38-win_amd64.whl", hash = "sha256:b71be98ef6e180217d1797185c75507060a57ab9cd835653e0112db16a710f0d"}, - {file = "SQLAlchemy-1.4.39-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:365b75938049ae31cf2176efd3d598213ddb9eb883fbc82086efa019a5f649df"}, - {file = "SQLAlchemy-1.4.39-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7a7667d928ba6ee361a3176e1bef6847c1062b37726b33505cc84136f657e0d"}, - {file = "SQLAlchemy-1.4.39-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c6d00cb9da8d0cbfaba18cad046e94b06de6d4d0ffd9d4095a3ad1838af22528"}, - {file = "SQLAlchemy-1.4.39-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0538b66f959771c56ff996d828081908a6a52a47c5548faed4a3d0a027a5368"}, - {file = "SQLAlchemy-1.4.39-cp39-cp39-win32.whl", hash = "sha256:d1f665e50592caf4cad3caed3ed86f93227bffe0680218ccbb293bd5a6734ca8"}, - {file = "SQLAlchemy-1.4.39-cp39-cp39-win_amd64.whl", hash = "sha256:8b773c9974c272aae0fa7e95b576d98d17ee65f69d8644f9b6ffc90ee96b4d19"}, - {file = "SQLAlchemy-1.4.39.tar.gz", hash = "sha256:8194896038753b46b08a0b0ae89a5d80c897fb601dd51e243ed5720f1f155d27"}, -] -stack-data = [ - {file = "stack_data-0.3.0-py3-none-any.whl", hash = "sha256:aa1d52d14d09c7a9a12bb740e6bdfffe0f5e8f4f9218d85e7c73a8c37f7ae38d"}, - {file = "stack_data-0.3.0.tar.gz", hash = "sha256:77bec1402dcd0987e9022326473fdbcc767304892a533ed8c29888dacb7dddbc"}, -] +snowballstemmer = [] +sphinx = [] +sphinx-rtd-theme = [] +sphinxcontrib-applehelp = [] +sphinxcontrib-bibtex = [] +sphinxcontrib-devhelp = [] +sphinxcontrib-htmlhelp = [] +sphinxcontrib-jsmath = [] +sphinxcontrib-qthelp = [] +sphinxcontrib-serializinghtml = [] +sqlalchemy = [] +stack-data = [] tomli = [ - {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, -] -tomlkit = [ - {file = "tomlkit-0.11.1-py3-none-any.whl", hash = "sha256:1c5bebdf19d5051e2e1de6cf70adfc5948d47221f097fcff7a3ffc91e953eaf5"}, - {file = "tomlkit-0.11.1.tar.gz", hash = "sha256:61901f81ff4017951119cd0d1ed9b7af31c821d6845c8c477587bbdcd5e5854e"}, -] -tqdm = [ - {file = "tqdm-4.64.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"}, - {file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"}, -] -traitlets = [ - {file = "traitlets-5.3.0-py3-none-any.whl", hash = "sha256:65fa18961659635933100db8ca120ef6220555286949774b9cfc106f941d1c7a"}, - {file = "traitlets-5.3.0.tar.gz", hash = "sha256:0bb9f1f9f017aa8ec187d8b1b2a7a6626a2a1d877116baba52a129bfa124f8e2"}, -] -typing-extensions = [ - {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, - {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, -] -urllib3 = [ - {file = "urllib3-1.26.10-py2.py3-none-any.whl", hash = "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec"}, - {file = "urllib3-1.26.10.tar.gz", hash = "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6"}, -] + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +tomlkit = [] +tqdm = [] +traitlets = [] +typing-extensions = [] +urllib3 = [] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, @@ -2506,11 +1954,5 @@ wrapt = [ {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] -yadism = [ - {file = "yadism-0.11.2-py3-none-any.whl", hash = "sha256:108e14cad6ba24dcfc37743399d98fc726f91a8056080ef9887a1911aafef078"}, - {file = "yadism-0.11.2.tar.gz", hash = "sha256:760b31ab27fcaa681329aea51f42bb655bc50b42392761ac89cc48d0f84b3c1f"}, -] -zipp = [ - {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, - {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, -] +yadism = [] +zipp = [] diff --git a/pyproject.toml b/pyproject.toml index deda98d2..fc7c8538 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ python = ">=3.8,<3.11" click = "^8.0.1" rich = "^10.6.0" PyYAML = "^6.0.0" -yadism = "^0.11.0" +yadism = "^0.11.2" pandas = "^1.3.0" lz4 = "^3.1.3" breezy = "^3.2.1" @@ -18,25 +18,25 @@ pygit2 = "^1.6.1" requests = "^2.26.0" a3b2bbc3ced97675ac3a71df45f55ba = "^6.4.0" lhapdf-management = "^0.2" -pineappl = "0.5.3" +pineappl = "0.5.4" +more-itertools = "^8.10.0" +appdirs = "^1.4.4" +tomli = "^2.0.1" # docs dependencies (for readthedocs) Sphinx = { version = "^4.2.0", optional = true } sphinx-rtd-theme = { version = "^1.0.0", optional = true } sphinxcontrib-bibtex = { version = "^2.4.1", optional = true } -more-itertools = "^8.10.0" eko = {extras = ["box"], version = "^0.9.4"} [tool.poetry.dev-dependencies] pytest = "^5.2" +pylint = "^2.11.1" pdbpp = "^0.10.3" -black = "^21.9b0" -isort = "^5.9.3" ipython = "^8.0" Sphinx = "^4.2.0" sphinx-rtd-theme = "^1.0.0" sphinxcontrib-bibtex = "^2.4.1" -pylint = "^2.11.1" [tool.poetry.extras] docs = ["sphinx", "sphinx-rtd-theme", "sphinxcontrib-bibtex"] diff --git a/rr b/rr deleted file mode 100755 index 1c2402a5..00000000 --- a/rr +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Zero-dependency bootstrap script -""" -import argparse -import os -import pathlib -import shutil -import site -import subprocess -import sys - -here = pathlib.Path(".").parent.absolute() - - -def parse_args(): - parser = argparse.ArgumentParser() - - silence = parser.add_mutually_exclusive_group() - silence.add_argument( - "-y", "--yes", action="store_true", help="yes to every questions" - ) - silence.add_argument( - "-n", "--no", action="store_true", help="no to every questions" - ) - silence.add_argument( - "--default", action="store_true", help="default to every questions" - ) - - parser.add_argument( - "--user", - action="store_true", - help="install user wide (only relevant for pip installation)", - ) - - return parser.parse_args() - - -def load_options(yes, no, default): - yes_choice = "[Y/n]" - no_choice = "[y/N]" - - def question(input_text, default_yes): - if not any([yes, no, default]): - choice = yes_choice if default_yes else no_choice - answer = input(f"{input_text} {choice} ") - else: - if yes: - answer = "y" - elif no: - answer = "n" - else: - answer = "y" if default_yes else "n" - return answer - - return question - - -def repo_management(pipx, user): - if pipx: - print("installing management dependecies with pipx...") - subprocess.run("pipx install poetry".split()) - subprocess.run("pipx inject poetry poetry-dynamic-versioning".split()) - subprocess.run("pipx install pre-commit".split()) - else: - print("installing management dependecies with pip...") - install_poetry_url = "https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py" - pip = f"{sys.executable} -m pip" - - proc = subprocess.run( - f"curl -sSL {install_poetry_url}".split(), capture_output=True - ) - subprocess.run(f"{sys.executable} -".split(), input=proc.stdout) - subprocess.run(f"{pip} install{user} poetry-dynamic-versioning".split()) - subprocess.run(f"{pip} install{user} pre-commit".split()) - - -def update_path(): - """ - Since in some environments the User Scripts Directory (PEP-370) is not part - of the path, let's include it to make user to be able to run `poetry`. - - (for `pre-commit` the user will have to do on its own, since it's not run by - this script) - """ - scripts_base_dir = ( - site.getuserbase() + "/bin" - if not sys.platform.startswith("win") - else r"\Scripts" - ) - os.environ["PATH"] += os.pathsep + str(scripts_base_dir) - - -if __name__ == "__main__": - update_path() - if sys.argv[1] != "install" or len(sys.argv) > 2: - subprocess.run("poetry run rr".split() + sys.argv[1:]) - else: - sys.argv = [sys.argv[0]] + sys.argv[2:] - args = parse_args() - - question = load_options(args.yes, args.no, args.default) - - if shutil.which("pipx") is not None: - pipx_answer = question("Do you want to install with pipx?", False) - else: - pipx_answer = "no" - - pipx = pipx_answer.lower() in ["y", "yes"] - user = " --user" if args.user else "" - repo_management(pipx, user) - - subprocess.run("poetry install".split()) - if sys.version_info < (3, 8): - env_path = ( - subprocess.run("poetry env info -p".split(), capture_output=True) - .stdout.decode() - .strip() - ) - python_exe = pathlib.Path(env_path).absolute() / "bin" / "python" - subprocess.run(f"{python_exe} -m pip install cached_property".split()) - subprocess.run("pre-commit install".split()) diff --git a/run_dis.sh b/run_dis.sh deleted file mode 100755 index 0c255532..00000000 --- a/run_dis.sh +++ /dev/null @@ -1,161 +0,0 @@ -#!/bin/bash - -prefix=$(pwd)/.prefix - -export LC_ALL=C - -yesno() { - echo -n "$@" "[Y/n]" - read -r reply - - if [[ -z $reply ]]; then - reply=Y - fi - - case "${reply}" in - Yes | yes | Y | y) return 0 ;; - No | no | N | n) return 1 ;; - *) - echo "I didn't understand your reply '${reply}'" - yesno "$@" - ;; - esac -} - -install_pineappl() { ( - mkdir -p "${prefix}" - - cargo=$(which cargo 2>/dev/null || true) - git=$(which git 2>/dev/null) - pip=$(which pip 2>/dev/null || true) - maturin=$(which maturin 2>/dev/null || true) - - repo=https://github.com/N3PDF/pineappl.git - - if [[ ! -x ${cargo} ]]; then - export CARGO_HOME=${prefix}/cargo - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs >/tmp/rustup-init - bash /tmp/rustup-init --profile minimal --no-modify-path -y - export PATH=${prefix}/cargo/bin:${PATH} - cargo="${prefix}"/cargo/bin/cargo - elif [[ -d ${prefix}/cargo ]]; then - export CARGO_HOME=${prefix}/cargo - fi - - if [[ -d ${prefix}/pineappl2 ]]; then - "${git}" pull - else - "${git}" clone ${repo} -b pyo3 "${prefix}"/pineappl2 - fi - - if [[ ! -x ${maturin} ]]; then - pyver=$(python --version | cut -d' ' -f 2 | cut -d. -f1,2) - export PATH="${prefix}"/bin:${PATH} - export PYTHONPATH="${prefix}"/lib/python${pyver}/site-packages - "${pip}" install --prefix "${prefix}" maturin - fi - - pushd . >/dev/null - cd "${prefix}"/pineappl2/pineappl_py - maturin build --manylinux off - popd >/dev/null - "${pip}" install --prefix "${prefix}" "${prefix}"/pineappl2/pineappl_py/target/wheels/pineappl_py*.whl -); } - -install_yadism() { ( - mkdir -p "${prefix}" - - pip=$(which pip 2>/dev/null || true) - - if [[ -x ${pip} ]]; then - pyver=$(python --version | cut -d' ' -f 2 | cut -d. -f1,2) - export PATH="${prefix}"/bin:${PATH} - export PYTHONPATH="${prefix}"/lib/python${pyver}/site-packages - "${pip}" install --prefix "${prefix}" yadism - fi -); } - -# exit script at the first sign of an error -set -o errexit - -# the following exits if undeclared variables are used -set -o nounset - -# exit if some program in a pipeline fails -set -o pipefail - -# if we've installed dependencies set the correct paths -if [[ -d ${prefix} ]]; then - pyver=$(python --version | cut -d' ' -f 2 | cut -d. -f1,2) - export PYTHONPATH="${prefix}"/lib/python${pyver}/site-packages:${PYTHONPATH:-} - export PATH=${prefix}/mg5amc/bin:${prefix}/bin:${PATH:-} - export LD_LIBRARY_PATH=${prefix}/lib:${LD_LIBRARY_PATH:-} - export PKG_CONFIG_PATH=${prefix}/lib/pkgconfig:${PKG_CONFIG_PATH:-} -fi - -install_pineappl= -install_yadism= - -if [[ ! -d "${prefix}"/pineappl2 ]]; then - install_pineappl=yes - echo "PineAPPL (pyo3) wasn't found" -fi - -if pip show yadism 2>&1 | grep 'Package(s) not found' >/dev/null; then - install_yadism=yes - echo "yadism wasn't found" -fi - -if [[ -n ${install_pineappl}${install_yadism} ]]; then - if yesno "Do you want to install the missing dependencies (into \`.prefix\`)?"; then - if [[ -n ${install_pineappl} ]]; then - install_pineappl - fi - if [[ -n ${install_yadism} ]]; then - install_yadism - fi - - pyver=$(python --version | cut -d' ' -f 2 | cut -d. -f1,2) - export PYTHONPATH="${prefix}"/lib/python${pyver}/site-packages:${PYTHONPATH:-} - export PATH=${prefix}/mg5amc/bin:${prefix}/bin:${PATH:-} - export LD_LIBRARY_PATH=${prefix}/lib:${LD_LIBRARY_PATH:-} - export PKG_CONFIG_PATH=${prefix}/lib/pkgconfig:${PKG_CONFIG_PATH:-} - else - exit 1 - fi -fi - -# name of the dataset -dataset="$1" - -# name of the directory where the output is written to -output="${dataset}"-$(date +%Y%m%d%H%M%S) - -if [[ -d $output ]]; then - # since we add a date postfix to the name this shouldn't happen - echo "Error: output directory already exists" >&2 - exit 1 -fi - -mkdir "${output}" -cd "${output}" - -python ../run_dis.py ../nnpdf31_proc/"${dataset}"/observable.yaml "${dataset}" - -grid="${dataset}".pineappl - -if [[ -f ../nnpdf31_proc/"${dataset}"/metadata.txt ]]; then - eval "$(awk -F= "BEGIN { printf \"pineappl set ${grid} ${grid}.tmp \" } - { printf \"--entry %s '%s' \", \$1, \$2 }" \ - ../nnpdf31_proc/"${dataset}"/metadata.txt)" -fi - -mv "${grid}".tmp "${grid}" - -lz4=$(which lz4 2>/dev/null || true) - -# compress the grid with `lz4` if it's available -if [[ -x ${lz4} ]]; then - lz4 -9 "${grid}" - rm "${grid}" -fi diff --git a/run_implement_user_defined_cuts.py b/run_implement_user_defined_cuts.py deleted file mode 100755 index 92348642..00000000 --- a/run_implement_user_defined_cuts.py +++ /dev/null @@ -1,961 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -import os.path -import sys - -cuts_variables = { - "abscoscs": """c variables for abscoscs cuts - real*8 zcoscs,zenl,zptxl,zptyl,zpzl,zenal,zptxal,zptyal,zpzal - real*8 zpzll,zmll,zp1p,zp1m,zp2p,zp2m,zpt2ll - integer zlep,zalep -""", - "atlas_dy3d_8tev": """c variables for atlas_dy3d_8tev cut - real*8 ppl(0:3),pplb(0:3) - real*8 p1p,p1m,p2p,p2m,pzll,pt2ll - real*8 xmll,xyll,xcos,xlimit -""", - "atlas_wzrap11_cf": """c variables for atlas_wzrap11_cf cut - real*8 ppl(0:4),pplb(0:4) - real*8 xyll,xeta1,xeta2 -""", - "atlas_1jet_8tev_r06": """c variables for atlas_1jet_8tev_r06 cuts - real*8 xptj,xyj - logical xjet -""", - "cms_2jet_3d_8tev": """c - real*8 xystar,xyboost,xptavg -""", - "ptmiss": """c variables for ptmiss cut - real*8 xptmiss(1:2) -""", - "mtw": """c variables for ptmiss cut - real*8 xmtw -""", -} - -cuts_code = { - "mjj": """c cut on the invariant mass of the leading jets - if (invm2_04(pjet(0,1),pjet(0,2),1d0) .lt. ({})**2) then - passcuts_user=.false. - return - endif - -""", - "dyjj": """c cut on the rapidity separation of the leading jets - tmpvar=atanh(pjet(3,1)/pjet(0,1)) - & -atanh(pjet(3,2)/pjet(0,2)) - if (abs(tmpvar) .lt. {}) then - passcuts_user=.false. - return - endif - -""", - "mmllmax": """c cut for mmllmax (SFOS lepton pairs) - do i=1,nexternal-1 - if (is_a_lm(i) .or. is_a_lp(i)) then - do j=i+1,nexternal - if (ipdg_reco(i) .eq. -ipdg_reco(j)) then - if (invm2_04(p_reco(0,i),p_reco(0,j),1d0) .gt. {}**2) then - passcuts_user=.false. - return - endif - endif - enddo - endif - enddo - -""", - "ptl1min": """c cut for ptl1min (leading lepton) - j = 0 - do i=1,nexternal - if (is_a_lm(i) .or. is_a_lp(i)) then - if (j.eq.0 .or. pt_04(p_reco(0,i)).ge.pt_04(p_reco(0,j))) then - j = i - endif - endif - enddo - if (pt_04(p_reco(0,j)) .lt. {}) then - passcuts_user=.false. - return - endif - -""", - "ptj1min": """c cut for ptl1min (leading jet) - if (pt(pjet(0,1)) .lt. {}) then - passcuts_user=.false. - return - endif - -""", - "yll": """c cut on the rapidity of the two leading leptons - j = 0 ! leading lepton index - mm = 0 ! subleading lepton index - do i=1,nexternal - if (is_a_lm(i) .or. is_a_lp(i)) then - tmpvar = pt_04(p_reco(0,i)) - if (j.eq.0) then - j = i - else if (mm.eq.0) then - if (tmpvar.ge.pt_04(p_reco(0,j))) then - mm = j - j = i - else if (tmpvar.ge.pt_04(p_reco(0,mm))) then - mm = i - endif - else if (tmpvar.ge.pt_04(p_reco(0,j))) then - mm = j - j = i - else if (tmpvar.ge.pt_04(p_reco(0,mm))) then - mm = i - endif - endif - enddo - if (abs(atanh((p_reco(3,j)+p_reco(3,mm)) - & /(p_reco(0,j)+p_reco(0,mm)))) .gt. {}) then - passcuts_user=.false. - return - endif - -""", - "ptzmin": """c cut on the pt of SFOS lepton pairs - do i=1,nexternal-1 - if (is_a_lm(i) .or. is_a_lp(i)) then - do j=i+1,nexternal - if (ipdg_reco(i) .eq. -ipdg_reco(j)) then - if (((p_reco(1,i)+p_reco(1,j))**2+ - & (p_reco(2,i)+p_reco(2,j))**2) .lt. {}**2) then - passcuts_user=.false. - return - endif - endif - enddo - endif - enddo - -""", - "ptzmax": """c cut on the pt of SFOS lepton pairs - do i=1,nexternal-1 - if (is_a_lm(i) .or. is_a_lp(i)) then - do j=i+1,nexternal - if (ipdg_reco(i) .eq. -ipdg_reco(j)) then - if (((p_reco(1,i)+p_reco(1,j))**2+ - & (p_reco(2,i)+p_reco(2,j))**2) .gt. {}**2) then - passcuts_user=.false. - return - endif - endif - enddo - endif - enddo - -""", - "yz": """c cut on the rapidity of SFOS lepton pairs - do i=1,nexternal-1 - if (is_a_lm(i) .or. is_a_lp(i)) then - do j=i+1,nexternal - if (ipdg_reco(i) .eq. -ipdg_reco(j)) then - if (abs(atanh((p_reco(3,i)+p_reco(3,j)) - & /(p_reco(0,i)+p_reco(0,j)))) .gt. {}) then - passcuts_user=.false. - return - endif - endif - enddo - endif - enddo - -""", - "yh": """c cut on Higgs particles - do i=1,nexternal - if (ipdg_reco(i) .eq. 25) then - if (abs(atanh(p_reco(3,i)/p_reco(0,i))) - & .gt. {}) then - passcuts_user=.false. - return - endif - endif - enddo - -""", - "yt": """c cut on top particles - do i=1,nexternal - if (ipdg_reco(i).eq.6 .or. ipdg_reco(i).eq.-6) then - if (abs(atanh(p_reco(3,i)/p_reco(0,i))) - & .gt. {}) then - passcuts_user=.false. - return - endif - endif - enddo - -""", - "abscoscsmin": """c cut on the minimum of the absolute value of the cosine of the Collins-Soper angle of SFOS pairs - do i=1,nexternal-1 - if (is_a_lm(i) .or. is_a_lp(i)) then - do j=i+1,nexternal - if (ipdg_reco(i) .eq. -ipdg_reco(j)) then - if (is_a_lm(i)) then - zlep=i - zalep=j - else - zlep=j - zalep=i - endif - zenl=p_reco(0,zlep) - zptxl=p_reco(1,zlep) - zptyl=p_reco(2,zlep) - zpzl=p_reco(3,zlep) - zenal=p_reco(0,zalep) - zptxal=p_reco(1,zalep) - zptyal=p_reco(2,zalep) - zpzal=p_reco(3,zalep) -c implementation of first formula on page 6 of https://arxiv.org/abs/1710.05167 - zp1p=zenl+zpzl - zp1m=zenl-zpzl - zp2p=zenal+zpzal - zp2m=zenal-zpzal - zpzll=zpzl+zpzal - zpt2ll=(zptxl+zptxal)*(zptxl+zptxal)+ - & (zptyl+zptyal)*(zptyl+zptyal) - zmll=sqrt((zenl+zenal)*(zenl+zenal)-(zpt2ll+zpzll*zpzll)) - zcoscs=sign((zp1p*zp2m-zp1m*zp2p)/ - & sqrt(zmll*zmll+zpt2ll)/zmll,zpzll) - - if (abs(zcoscs) .lt. {}) then - passcuts_user=.false. - return - endif - endif - enddo - endif - enddo - -""", - "minetal": """c cut on the minimum pseudorapidity of leptons - do i=1,nexternal-1 - if (is_a_lm(i) .or. is_a_lp(i)) then - if (abs(atanh(p_reco(3,i)/sqrt(p_reco(1,i)**2+p_reco(2,i)**2+ - & p_reco(3,i)**2))) .lt. {}) then - passcuts_user=.false. - return - endif - endif - enddo - -""", - "abscoscsmax": """c cut on the maximum of the absolute value of the cosine of the Collins-Soper angle of SFOS pairs - do i=1,nexternal-1 - if (is_a_lm(i) .or. is_a_lp(i)) then - do j=i+1,nexternal - if (ipdg_reco(i) .eq. -ipdg_reco(j)) then - if (is_a_lm(i)) then - zlep=i - zalep=j - else - zlep=j - zalep=i - endif - zenl=p_reco(0,zlep) - zptxl=p_reco(1,zlep) - zptyl=p_reco(2,zlep) - zpzl=p_reco(3,zlep) - zenal=p_reco(0,zalep) - zptxal=p_reco(1,zalep) - zptyal=p_reco(2,zalep) - zpzal=p_reco(3,zalep) -c implementation of first formula on page 6 of https://arxiv.org/abs/1710.05167 - zp1p=zenl+zpzl - zp1m=zenl-zpzl - zp2p=zenal+zpzal - zp2m=zenal-zpzal - zpzll=zpzl+zpzal - zpt2ll=(zptxl+zptxal)*(zptxl+zptxal)+ - & (zptyl+zptyal)*(zptyl+zptyal) - zmll=sqrt((zenl+zenal)*(zenl+zenal)-(zpt2ll+zpzll*zpzll)) - zcoscs=sign((zp1p*zp2m-zp1m*zp2p)/ - & sqrt(zmll*zmll+zpt2ll)/zmll,zpzll) - - if (abs(zcoscs) .gt. {}) then - passcuts_user=.false. - return - endif - endif - enddo - endif - enddo - -""", - "yzmin": """c cut on the rapidity of SFOS lepton pairs - do i=1,nexternal-1 - if (is_a_lm(i) .or. is_a_lp(i)) then - do j=i+1,nexternal - if (ipdg_reco(i) .eq. -ipdg_reco(j)) then - if (abs(atanh((p_reco(3,i)+p_reco(3,j)) - & /(p_reco(0,i)+p_reco(0,j)))) .lt. {}) then - passcuts_user=.false. - return - endif - endif - enddo - endif - enddo - -""", - "atlas_dy3d_8tev": """c - if ({}) then - do j = nincoming+1, nexternal - if (iPDG_reco(j).eq.13) ppl(0:3)=p_reco(0:3,j) - if (iPDG_reco(j).eq.-13) pplb(0:3)=p_reco(0:3,j) - enddo - - p1p = ppl(0) + ppl(3) - p1m = ppl(0) - ppl(3) - p2p = pplb(0) + pplb(3) - p2m = pplb(0) - pplb(3) - pzll = ppl(3) + pplb(3) - pt2ll = (ppl(1) + pplb(1)) * (ppl(1) + pplb(1)) + - & (ppl(2) + pplb(2)) * (ppl(2) + pplb(2)) - - xmll=sqrt((ppl(0)+pplb(0))**2-(ppl(1)+pplb(1))**2- - & (ppl(2)+pplb(2))**2-(ppl(3)+pplb(3))**2) - xyll=abs(atanh((ppl(3)+pplb(3))/(ppl(0)+pplb(0)))) - xcos = sign((p1p*p2m-p1m*p2p)/sqrt(xmll*xmll+pt2ll)/xmll,pzll) - - if (xmll.lt.46d0) then - passcuts_user=.false. - return - elseif (xmll.lt.66d0) then - if (xcos.lt.-0.7d0) then - xlimit=2.0d0 - elseif (xcos.lt.-0.4d0) then - xlimit=2.2d0 - elseif (xcos.lt.0.0d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.4d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.7d0) then - xlimit=2.2d0 - else - xlimit=2.0d0 - endif - elseif (xmll.lt.80d0) then - if (xcos.lt.-0.7d0) then - xlimit=2.0d0 - elseif (xcos.lt.-0.4d0) then - xlimit=2.2d0 - elseif (xcos.lt.0.0d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.4d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.7d0) then - xlimit=2.2d0 - else - xlimit=2.0d0 - endif - elseif (xmll.lt.91d0) then - if (xcos.lt.-0.7d0) then - xlimit=2.2d0 - elseif (xcos.lt.-0.4d0) then - xlimit=2.2d0 - elseif (xcos.lt.0.0d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.4d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.7d0) then - xlimit=2.2d0 - else - xlimit=2.2d0 - endif - elseif (xmll.lt.102d0) then - if (xcos.lt.-0.7d0) then - xlimit=2.2d0 - elseif (xcos.lt.-0.4d0) then - xlimit=2.2d0 - elseif (xcos.lt.0.0d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.4d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.7d0) then - xlimit=2.2d0 - else - xlimit=2.2d0 - endif - elseif (xmll.lt.116d0) then - if (xcos.lt.-0.7d0) then - xlimit=2.0d0 - elseif (xcos.lt.-0.4d0) then - xlimit=2.2d0 - elseif (xcos.lt.0.0d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.4d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.7d0) then - xlimit=2.2d0 - else - xlimit=2.0d0 - endif - elseif (xmll.lt.150d0) then - if (xcos.lt.-0.7d0) then - xlimit=1.8d0 - elseif (xcos.lt.-0.4d0) then - xlimit=2.2d0 - elseif (xcos.lt.0.0d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.4d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.7d0) then - xlimit=2.2d0 - else - xlimit=1.8d0 - endif - elseif (xmll.lt.200d0) then - if (xcos.lt.-0.7d0) then - xlimit=1.6d0 - elseif (xcos.lt.-0.4d0) then - xlimit=2.0d0 - elseif (xcos.lt.0.0d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.4d0) then - xlimit=2.4d0 - elseif (xcos.lt.0.7d0) then - xlimit=2.0d0 - else - xlimit=1.6d0 - endif - else - passcuts_user=.false. - return - endif - - if (xyll.gt.xlimit) then - passcuts_user=.false. - return - endif - endif -""", - "atlas_wzrap11_cf": """c - if ({}) then - do i = nincoming+1, nexternal - if (iPDG_reco(i).eq.13) then - ppl(0:4)=p_reco(0:4,i) - xeta1=abs(eta_04(p_reco(0,i))) - elseif (iPDG_reco(i).eq.-13) then - pplb(0:4)=p_reco(0:4,i) - xeta2=abs(eta_04(p_reco(0,i))) - endif - enddo - - xyll=abs(atanh((ppl(3)+pplb(3))/(ppl(0)+pplb(0)))) - - if (xyll.lt.1.2d0 .or. xyll.gt.3.6d0) then - passcuts_user=.false. - return - endif - - if (xeta1.lt.2.5d0) then - if (xeta2.lt.2.5d0 .or. xeta2.gt.4.9d0) then - passcuts_user=.false. - return - endif - elseif (xeta2.lt.2.5d0) then - if (xeta1.lt.2.5d0 .or. xeta1.gt.4.9d0) then - passcuts_user=.false. - return - endif - else - passcuts_user=.false. - return - endif - endif -""", - "atlas_2jet_7tev_r06_0005": """c - if ({}) then - if (njet < 2) then - passcuts_user=.false. - return - endif - - block - real*8 xystar, xmjj - - xystar = 0.5d0 * abs(atanh(pjet(3,1)/pjet(0,1))- - $ atanh(pjet(3,2)/pjet(0,2))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xystar > 0.5d0 .or. xmjj < 260d0 .or. xmjj > 4270d0) then - passcuts_user=.false. - return - endif - end block - endif - -""", - "atlas_2jet_7tev_r06_0510": """c - if ({}) then - if (njet < 2) then - passcuts_user=.false. - return - endif - - block - real*8 xystar, xmjj - - xystar = 0.5d0 * abs(atanh(pjet(3,1)/pjet(0,1))- - $ atanh(pjet(3,2)/pjet(0,2))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xystar < 0.5d0 .or. xystar > 1.0d0 .or. xmjj < 310d0 .or. xmjj > 4270d0) then - passcuts_user=.false. - return - endif - end block - endif - -""", - "atlas_2jet_7tev_r06_1015": """c - if ({}) then - if (njet < 2) then - passcuts_user=.false. - return - endif - - block - real*8 xystar, xmjj - - xystar = 0.5d0 * abs(atanh(pjet(3,1)/pjet(0,1))- - $ atanh(pjet(3,2)/pjet(0,2))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xystar < 1.0d0 .or. xystar > 1.5d0 .or. xmjj < 510d0 .or. xmjj > 4640d0) then - passcuts_user=.false. - return - endif - end block - endif - -""", - "atlas_2jet_7tev_r06_1520": """c - if ({}) then - if (njet < 2) then - passcuts_user=.false. - return - endif - - block - real*8 xystar, xmjj - - xystar = 0.5d0 * abs(atanh(pjet(3,1)/pjet(0,1))- - $ atanh(pjet(3,2)/pjet(0,2))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xystar < 1.5d0 .or. xystar > 2.0d0 .or. xmjj < 760d0 .or. xmjj > 4640d0) then - passcuts_user=.false. - return - endif - end block - endif - -""", - "atlas_2jet_7tev_r06_2025": """c - if ({}) then - if (njet < 2) then - passcuts_user=.false. - return - endif - - block - real*8 xystar, xmjj - - xystar = 0.5d0 * abs(atanh(pjet(3,1)/pjet(0,1))- - $ atanh(pjet(3,2)/pjet(0,2))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xystar < 2.0d0 .or. xystar > 2.5d0 .or. xmjj < 1310d0 .or. xmjj > 5040d0) then - passcuts_user=.false. - return - endif - end block - endif - -""", - "atlas_2jet_7tev_r06_2530": """c - if ({}) then - if (njet < 2) then - passcuts_user=.false. - return - endif - - block - real*8 xystar, xmjj - - xystar = 0.5d0 * abs(atanh(pjet(3,1)/pjet(0,1))- - $ atanh(pjet(3,2)/pjet(0,2))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xystar < 2.5d0 .or. xystar > 3.0d0 .or. xmjj < 2120d0 .or. xmjj > 5040d0) then - passcuts_user=.false. - return - endif - end block - endif - -""", - "atlas_1jet_8tev_r06": """c - if ({}) then - xjet=.false. - - do i=1,njet - xyj = dabs(atanh(pjet(3,i)/pjet(0,i))) - xptj = pt_04(pjet(0,i)) - - if (xyj.lt.0.5d0) then - if (xptj.le.2500d0) then - xjet=.true. -c exit - endif - else if (xyj.lt.1.0d0) then - if (xptj.le.2500d0) then - xjet=.true. - exit - endif - else if (xyj.lt.1.5d0) then - if (xptj.le.1992d0) then - xjet=.true. - exit - endif - else if (xyj.lt.2.0d0) then - if (xptj.le.1310d0) then - xjet=.true. - exit - endif - else if (xyj.lt.2.5d0) then - if (xptj.le.838d0) then - xjet=.true. - exit - endif - else if (xyj.lt.3.0d0) then - if (xptj.le.556d0) then - xjet=.true. - exit - endif - endif - enddo - - if (.not. xjet) then - passcuts_user=.false. - return - endif - endif - -""", - "cms_2jets_7tev_0005": """c - if ({}) then - block - real*8 xymax, xmjj - - if (njet < 2) then - passcuts_user = .false. - return - end if - - xymax = max(abs(atanh(pjet(3,1)/pjet(0,1))), - $ abs(atanh(pjet(3,2)/pjet(0,2)))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xymax > 0.5d0 .or. xmjj < 197d0 .or. xmjj > 4010d0) then - passcuts_user=.false. - return - end if - end block - end if - -""", - "cms_2jets_7tev_0510": """c - if ({}) then - block - real*8 xymax, xmjj - - if (njet < 2) then - passcuts_user = .false. - return - end if - - xymax = max(abs(atanh(pjet(3,1)/pjet(0,1))), - $ abs(atanh(pjet(3,2)/pjet(0,2)))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xymax < 0.5d0 .or. xymax > 1.0d0 .or. xmjj < 270d0 .or. xmjj > 4010d0) then - passcuts_user=.false. - return - end if - end block - end if - -""", - "cms_2jets_7tev_1015": """c - if ({}) then - block - real*8 xymax, xmjj - - if (njet < 2) then - passcuts_user = .false. - return - end if - - xymax = max(abs(atanh(pjet(3,1)/pjet(0,1))), - $ abs(atanh(pjet(3,2)/pjet(0,2)))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xymax < 1.0d0 .or. xymax > 1.5d0 .or. xmjj < 419d0 .or. xmjj > 4509d0) then - passcuts_user=.false. - return - end if - end block - end if - -""", - "cms_2jets_7tev_1520": """c - if ({}) then - block - real*8 xymax, xmjj - - if (njet < 2) then - passcuts_user = .false. - return - end if - - xymax = max(abs(atanh(pjet(3,1)/pjet(0,1))), - $ abs(atanh(pjet(3,2)/pjet(0,2)))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xymax < 1.5d0 .or. xymax > 2.0d0 .or. xmjj < 565d0 .or. xmjj > 5058d0) then - passcuts_user=.false. - return - end if - end block - end if - -""", - "cms_2jets_7tev_2025": """c - if ({}) then - block - real*8 xymax, xmjj - - if (njet < 2) then - passcuts_user = .false. - return - end if - - xymax = max(abs(atanh(pjet(3,1)/pjet(0,1))), - $ abs(atanh(pjet(3,2)/pjet(0,2)))) - xmjj = sqrt(invm2_04(pjet(0,1),pjet(0,2),1d0)) - - if (xymax < 2.0d0 .or. xymax > 2.5d0 .or. xmjj < 1000d0 .or. xmjj > 5058d0) then - passcuts_user=.false. - return - end if - end block - end if - -""", - "cms_2jet_3d_8tev": """c - if ({}) then - if (njet.lt.2) then - passcuts_user=.false. - return - endif - - xystar = 0.5d0 * dabs(atanh(pjet(3,1)/pjet(0,1))- - $ atanh(pjet(3,2)/pjet(0,2))) - xyboost = 0.5d0 * dabs(atanh(pjet(3,1)/pjet(0,1))+ - $ atanh(pjet(3,2)/pjet(0,2))) - xptavg = 0.5d0 * (pt_04(pjet(0,1)) + pt_04(pjet(0,2))) - - if (xptavg.lt.133d0) then - passcuts_user=.false. - return - endif - - if (xyboost.lt.1d0) then - if (xystar.lt.1d0) then - if (xptavg.gt.1784d0) then - passcuts_user=.false. - return - endif - elseif (xystar.lt.2d0) then - if (xptavg.gt.1248d0) then - passcuts_user=.false. - return - endif - elseif (xystar.lt.3d0) then - if (xptavg.gt.548d0) then - passcuts_user=.false. - return - endif - else - passcuts_user=.false. - return - endif - else if (xyboost.lt.2d0) then - if (xystar.lt.1d0) then - if (xptavg.gt.1032d0) then - passcuts_user=.false. - return - endif - elseif (xystar.lt.2d0) then - if (xptavg.gt.686d0) then - passcuts_user=.false. - return - endif - else - passcuts_user=.false. - return - endif - else if (xyboost.lt.3d0) then - if (xystar.lt.1d0) then - if (xptavg.gt.430d0) then - passcuts_user=.false. - return - endif - else - passcuts_user=.false. - return - endif - else - passcuts_user=.false. - return - endif - endif - -""", - "ptmiss": """c cut on the sum of all missing transverse momentum - xptmiss=0d0 - - do i=3,nexternal - if (abs(ipdg_reco(i)).eq.12 .or. - & abs(ipdg_reco(i)).eq.14 .or. - & abs(ipdg_reco(i)).eq.16) then - xptmiss(1)=xptmiss(1)+p_reco(1,i) - xptmiss(2)=xptmiss(2)+p_reco(2,i) - endif - enddo - - if (xptmiss(1)**2+xptmiss(2)**2.lt.(({})**2)) then - passcuts_user=.false. - return - endif - -""", - "mtw": """c cut on the transverse mass of W bosons - do i=3,nexternal - do j=i+1,nexternal - if (is_a_lm(i) .or. is_a_lp(i) .or. - & is_a_lm(j) .or. is_a_lp(j)) then - if (abs(ipdg_reco(i)+ipdg_reco(j)).eq.1) then - xmtw=2d0*sqrt((p_reco(1,i)**2+p_reco(2,i)**2)* - & (p_reco(1,j)**2+p_reco(2,j)**2))- - & 2d0*(p_reco(1,i)*p_reco(1,j)+p_reco(2,i)*p_reco(2,j)) - if (xmtw.lt.(({})**2)) then - passcuts_user=.false. - return - endif - endif - endif - enddo - enddo - -""", -} - -if __name__ == "__main__": - if len(sys.argv) < 5: - print("Error: wrong number of arguments: {}".format(sys.argv)) - exit(1) - - # the name of the file we want to patch - filename = sys.argv[1] - - if not os.path.exists(filename): - print("Error: cut file `{}` does not exist".format(filename)) - exit(2) - - for i in zip(sys.argv[2::3], sys.argv[3::3], sys.argv[4::3]): - name = i[0] - - # check if the cut is recognised - if not name in cuts_code: - print("Error: unrecognised cut: {}".format(name)) - exit(3) - - if i[1] != "=": - print("Error: wrong argument format") - exit(4) - - with open(filename, "r") as fd: - contents = fd.readlines() - - insertion_marker = "logical function passcuts_user" - marker_pos = -1 - - for lineno, value in enumerate(contents): - if insertion_marker in value: - marker_pos = lineno - break - - if marker_pos == -1: - print( - "Error: could not find insertion marker `{}` in cut file `{}`".format( - insertion_marker, filename - ) - ) - exit(5) - - marker_pos = marker_pos + 8 - - for name in cuts_variables: - if any(i[0].startswith(name) for i in zip(sys.argv[2::3])): - contents.insert(marker_pos, cuts_variables[name]) - - insertion_marker = "USER-DEFINED CUTS" - marker_pos = -1 - - for lineno, value in enumerate(contents): - if insertion_marker in value: - marker_pos = lineno - break - - if marker_pos == -1: - print( - "Error: could not find insertion marker `{}` in cut file `{}`".format( - insertion_marker, filename - ) - ) - exit(5) - - # skip some lines with comments - marker_pos = marker_pos + 4 - # insert and empty line - contents.insert(marker_pos - 1, "\n") - - for i in zip(reversed(sys.argv[2::3]), reversed(sys.argv[4::3])): - name = i[0] - value = i[1] - - if value == "True": - value = ".true." - elif value == "False": - value = ".false." - else: - try: - float(value) - except ValueError: - print("Error: format of value `{}` not understood".format(value)) - exit(6) - value = value + "d0" - - code = cuts_code[name].format(value) - contents.insert(marker_pos, code) - - with open(filename, "w") as fd: - fd.writelines(contents) diff --git a/runcardsrunner.toml b/runcardsrunner.toml new file mode 100644 index 00000000..40ceb911 --- /dev/null +++ b/runcardsrunner.toml @@ -0,0 +1,25 @@ +# No configuration value is mandatory, those uncommented are just those needed +# to run with the current repository layout. +# Not even the file itself is mandatory, if not present, root is simply set to +# $PWD. +# Values specified (both uncommented and commented) are defaults, if not +# explicitly declared to be different. + +[paths] +# paths relative to the location of this file +runcards = "nnpdf31_proc" # default: "runcards" +results = "results" +# theories = "theories" +# prefix = ".prefix" +# bin = ".prefix/bin" +# lib = ".prefix/lib" +# mg5amc = ".prefix/mg5amc" +# pineappl = ".prefix/pineappl" +# cargo = ".prefix/cargo" +# lhapdf = ".prefix/lhapdf" +# lhapdf_data_alternative = ".prefix/share/LHAPDF" + +[commands] +# mg5 = ".prefix/mg5amc/bin/mg5_aMC" +# vrap = ".prefix/bin/Vrap" +# pineappl = ".prefix/bin/pineappl" diff --git a/runcardsrunner/__init__.py b/runcardsrunner/__init__.py index 67dab754..f2a8a71e 100644 --- a/runcardsrunner/__init__.py +++ b/runcardsrunner/__init__.py @@ -2,5 +2,4 @@ __version__ = "0.0.0" -from . import cli, external, install, paths, tools from .cli import command diff --git a/runcardsrunner/cli/__init__.py b/runcardsrunner/cli/__init__.py index 7216222d..73709707 100644 --- a/runcardsrunner/cli/__init__.py +++ b/runcardsrunner/cli/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- -from . import install, list, merge, run, update +from . import configs, info, install, list, merge, run, update from ._base import command diff --git a/runcardsrunner/cli/_base.py b/runcardsrunner/cli/_base.py index 4b0991d4..8377103a 100644 --- a/runcardsrunner/cli/_base.py +++ b/runcardsrunner/cli/_base.py @@ -1,9 +1,44 @@ # -*- coding: utf-8 -*- +import pathlib +import warnings + import click +from .. import configs + CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"]) @click.group(context_settings=CONTEXT_SETTINGS) -def command(): - pass +@click.option( + "-c", + "--configs", + "cfg", + default=None, + type=click.Path(resolve_path=True, path_type=pathlib.Path), + help="Explicitly specify config file (it has to be a valid TOML file).", +) +def command(cfg): + try: + cfgpath = configs.detect(cfg) + except FileNotFoundError: + warnings.warn("No configuration file detected.") + cfgpath = None + + base_configs = configs.load(cfgpath) + configs.configs["paths"] = configs.basic_paths(base_configs["paths"]["root"]) + + # update once, to make all paths pathlib objects + configs.nestupdate(configs.configs, base_configs) + configs.force_paths() + + # set all the other defaults, they might depend on paths + configs.configs["paths"] = configs.paths(configs.configs["paths"]) + configs.configs["commands"] = configs.commands(configs.configs["paths"]) + + # final update + configs.nestupdate(configs.configs, base_configs) + configs.force_paths() + + if cfg is not None: + print(f"Configurations loaded from '{cfg}'") diff --git a/runcardsrunner/cli/configs.py b/runcardsrunner/cli/configs.py new file mode 100644 index 00000000..59489ee3 --- /dev/null +++ b/runcardsrunner/cli/configs.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +import rich + +from .. import configs +from ._base import command + + +@command.command("configs") +def subcommand(): + """Query loaded configurations.""" + main() + + +def main(): + rich.print(configs.configs) diff --git a/runcardsrunner/cli/info.py b/runcardsrunner/cli/info.py new file mode 100644 index 00000000..d6f748a8 --- /dev/null +++ b/runcardsrunner/cli/info.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +import pathlib + +import click +import rich + +from .. import configs, info, tools +from ._base import command + + +# Meta-function to generate the group `info` +@command.group("info") +def subcommand(): + """Retrieve information about managed objects.""" + + +@subcommand.command("runcards") +@click.argument("datasets", nargs=-1) +@click.option("-m", "--metadata", is_flag=True, help="Retrieve metadata.") +@click.option("-k", "--kind", is_flag=True, help="Retrieve datasets kind.") +def runcards(datasets, metadata, kind): + """Inspect runcards. + + Obtain information about DATASET runcard. + + """ + # collect requested info in a dictionary + infod = {} + + for dataset in datasets: + # if does not contain `/`, it is just an identity + dataset = pathlib.Path(dataset).name + path = configs.configs["paths"]["runcards"] / dataset + + if not path.is_dir(): + # if not found, set empty and keep going with the others + infod[dataset] = None + continue + + infod[dataset] = dict(path=str(path.absolute())) + datainfo = infod[dataset] + + if metadata: + metadata = path / "metadata.txt" + with open(metadata, encoding="utf-8") as fd: + datainfo["metadata"] = tools.parse_metadata(fd) + + if kind: + datainfo["kind"] = info.label(dataset).kind.name + + rich.print_json(data=infod) + + +@subcommand.command("configs") +def subconfigs(): + """Inspect loaded configs.""" + + rich.print_json(data=configs.raw(configs.configs)) diff --git a/runcardsrunner/cli/install.py b/runcardsrunner/cli/install.py index c75dfe34..061ad600 100644 --- a/runcardsrunner/cli/install.py +++ b/runcardsrunner/cli/install.py @@ -8,14 +8,16 @@ @command.group("install") def subcommand(): """Install utilities.""" + install.init_prefix() @subcommand.command() +@click.option("--capi", is_flag=True, default=True, help="install PineAPPL CAPI") @click.option("--cli", is_flag=True, help="install PineAPPL CLI as well") -def pineappl(cli): - """Install pineappl.""" +def pineappl(capi, cli): + """Install PineAPPL.""" install.update_environ() - install.pineappl(cli) + install.pineappl(capi=capi, cli=cli) @subcommand.command() @@ -30,3 +32,10 @@ def vrap(): """Install Hawaiian VRAP.""" install.update_environ() install.hawaiian_vrap() + + +@subcommand.command() +def lhapdf(): + """Install LHAPDF.""" + install.update_environ() + install.lhapdf() diff --git a/runcardsrunner/cli/list.py b/runcardsrunner/cli/list.py index 11448f98..7c58251f 100644 --- a/runcardsrunner/cli/list.py +++ b/runcardsrunner/cli/list.py @@ -2,7 +2,7 @@ import rich import rich.markdown -from .. import external, paths +from .. import configs, external from ._base import command @@ -14,13 +14,13 @@ def subcommand(): @subcommand.command() def runcards(): """List available runcards.""" - main(paths.runcards) + main(configs.configs["paths"]["runcards"]) @subcommand.command() def theories(): """List available theories.""" - main(paths.theories, files=True, prefix="theory_") + main(configs.configs["paths"]["theories"], files=True, prefix="theory_") @subcommand.group() diff --git a/runcardsrunner/cli/run.py b/runcardsrunner/cli/run.py index 3954840e..0cbe16cf 100644 --- a/runcardsrunner/cli/run.py +++ b/runcardsrunner/cli/run.py @@ -6,8 +6,8 @@ import rich import yaml -from .. import install, log, table, tools -from ..external import mg5, positivity, vrap, yad +from .. import info, install, log, table, tools +from ..external import mg5 from ._base import command @@ -50,7 +50,7 @@ def main(dataset, theory, pdf): if "-" in dataset: try: dataset, timestamp = dataset.split("-") - except: + except ValueError: raise ValueError( f"'{dataset}' not valid. '-' is only allowed once," " to separate dataset name from timestamp." @@ -58,21 +58,10 @@ def main(dataset, theory, pdf): rich.print(dataset) - if yad.is_dis(dataset): - color = "red" - external = yad.Yadism - elif positivity.is_positivity(dataset): - color = "yellow" - external = positivity.Positivity - elif vrap.is_vrap(dataset): - color = "green" - external = vrap.Vrap - else: - color = "blue" - external = mg5.Mg5 - - rich.print(f"Computing [{color}]{dataset}[/]...") - runner = external(dataset, theory, pdf, timestamp=timestamp) + datainfo = info.label(dataset) + + rich.print(f"Computing [{datainfo.color}]{dataset}[/]...") + runner = datainfo.external(dataset, theory, pdf, timestamp=timestamp) install_reqs(runner, pdf) run_dataset(runner) @@ -91,9 +80,9 @@ def install_reqs(runner, pdf): """ t0 = time.perf_counter() + install.init_prefix() install.update_environ() runner.install() - install.pineappl() # install chosen PDF set install.lhapdf_conf(pdf) diff --git a/runcardsrunner/cli/update.py b/runcardsrunner/cli/update.py index e384600b..598b7d7b 100644 --- a/runcardsrunner/cli/update.py +++ b/runcardsrunner/cli/update.py @@ -5,14 +5,18 @@ import click import rich -from .. import paths, tools +from .. import configs, tools from ._base import command @command.command("update") @click.argument("datasets", nargs=-1) def subcommand(datasets): - """Update datasets metadata.""" + """Update datasets metadata. + + DATASETS are an arbitrary number of datasets to be updated (if empty, do + nothing). + """ main(datasets) @@ -24,13 +28,10 @@ def main(datasets): if "pineappl" in dataset: dataset = pathlib.Path(dataset).stem - metadata = paths.runcards / dataset / "metadata.txt" + metadata = configs.configs["paths"]["runcards"] / dataset / "metadata.txt" - entries = {} with open(metadata) as fd: - for line in fd.readlines(): - k, v = line.split("=") - entries[k] = v + entries = tools.parse_metadata(fd) dest = path.parent / (path.name + ".tmp") tools.update_grid_metadata(path, dest, entries) diff --git a/runcardsrunner/configs.py b/runcardsrunner/configs.py new file mode 100644 index 00000000..af19bb61 --- /dev/null +++ b/runcardsrunner/configs.py @@ -0,0 +1,291 @@ +# -*- coding: utf-8 -*- +import copy +import os +import pathlib +import shutil +import tempfile +import warnings +from typing import Optional + +import appdirs +import tomli + +NAME = "runcardsrunner.toml" +"""Name of the config while (wherever it is placed)""" + +PATHS_SECTIONS = ("paths", "commands") +"""Sections containing only paths""" + +configs = {} +"Holds loaded configurations" + + +def detect(path: Optional[os.PathLike] = None) -> pathlib.Path: + """Detect configuration files. + + Parameters + ---------- + path: os.PathLike or None + optional explicit path to file to be used as configs (default: `None`) + + Returns + ------- + pathlib.Path + configuration file path + + Raises + ------ + FileNotFoundError + in case no valid configuration file is found + + """ + paths = [] + + if path is not None: + path = pathlib.Path(path) + paths.append(path) + + paths.append(pathlib.Path.cwd()) + paths.append(pathlib.Path.home()) + paths.append(pathlib.Path(appdirs.user_config_dir())) + + for p in paths: + configs_file = p / NAME if p.is_dir() else p + + if configs_file.is_file(): + return configs_file + + if p == path: + warnings.warn("Configuration path specified is not valid.") + + raise FileNotFoundError("No configurations file detected.") + + +def load(path: Optional[os.PathLike] = None) -> dict: + """Load configuration file. + + If no path is explicitly passed, a minimal configuration is used instead + (just setting root folder to the current one). + + Parameters + ---------- + path: os.PathLike or None + the path to the configuration file (default: `None`) + + Returns + ------- + dict + loaded configurations + + """ + if path is None: + warnings.warn("Using default minimal configuration ('root = $PWD').") + return {"paths": {"root": pathlib.Path.cwd()}} + + with open(path, "rb") as fd: + loaded = tomli.load(fd) + + # ensure root + try: + root = pathlib.Path(loaded["paths"]["root"]) + except KeyError: + root = pathlib.Path(path).parent + root = root.absolute() + loaded["paths"]["root"] = root + + # make all paths actual path objects, relative to root, if appropriate + for sec in PATHS_SECTIONS: + # all sections are optional in configs file (while root is filled in any + # case above), thus skip those not present + if sec not in loaded: + continue + + for key, value in loaded[sec].items(): + path = pathlib.Path(value) + # if `path` is absolute, `root` will be simply ignored + loaded[sec][key] = root / path + + return loaded + + +def nestupdate(base: dict, update: dict): + """Merge nested dictionaries. + + Pay attention, `base` will be mutated in place. + So the second one will overwrite the first. + + Note + ---- + Modifying in place avoids a lot of copies. + But not being performance intensive, it would be possible to obtain a non + in-place alternative just adding a first line:: + + base = copy.deepcopy(base) + + but it would be called at every recursion (the lots of copies above). + A simpler alternative is just to copy before calling, if needed:: + + mycopy = copy.deepcopy(mydict) + nestupdate(mycopy, update) + + that will make a single copy. + + Note + ---- + Another option could appear to be using something like + :class:`collections.ChainMap`. This is a smart way to implement cascade + configurations, but it is not going to support nesting:: + + configs = ChainMap({'a': {'b': 0}}, {'a': {'c': 1}}) + + in this case, even if there is no clash for ``configs['a']['c']``, this + would result in a :class:`KeyError` (since once ``configs['a']`` is + executed, the result is just a normal :class:`dict`, and the first one + encountered). + Any refinement would involve a custom :meth:`__geitem__`, with even more + complicate logic. + + Parameters + ---------- + base: dict + dictionary to be updated + update: dict + dictionary containing update + + """ + + def newval(old, val): + """Build new value. + + If one of the two is not a dictionary, simply use update value `val`. + If they are both dictionaries, start recursion. + + """ + if not isinstance(val, dict) or not isinstance(old, dict): + return val + + nestupdate(old, val) + return old + + # add every value of update into base + for key, val in update.items(): + try: + # attempt to merge update value with old one + old = base[key] + base[key] = newval(old, val) + except KeyError: + # if value did not exist, simply add it + base[key] = val + + +def basic_paths(root: pathlib.Path) -> dict: + """Build all default independent paths. + + Independent on anything but ``root``. + + """ + paths = {} + + paths["root"] = root + paths["runcards"] = root / "runcards" + paths["theories"] = root / "theories" + paths["prefix"] = root / ".prefix" + paths["results"] = root / "results" + + paths["rust_init"] = pathlib.Path(tempfile.mktemp()) + + return paths + + +def paths(paths: dict) -> dict: + """Build all default dependent paths.""" + paths = copy.deepcopy(paths) + + prefix = paths["prefix"] + paths["bin"] = prefix / "bin" + paths["lib"] = prefix / "lib" + paths["mg5amc"] = prefix / "mg5amc" + paths["pineappl"] = prefix / "pineappl" + paths["cargo"] = prefix / "cargo" + paths["lhapdf"] = prefix / "lhapdf" + paths["lhapdf_data_alternative"] = prefix / "share" / "LHAPDF" + + return paths + + +def commands(paths: dict) -> dict: + """Set all default commands.""" + commands = {} + + commands["mg5"] = paths["mg5amc"] / "bin" / "mg5_aMC" + commands["vrap"] = paths["prefix"] / "bin" / "Vrap" + pineappl = shutil.which("pineappl") + commands["pineappl"] = ( + pathlib.Path(pineappl) + if pineappl is not None + else paths["prefix"] / "bin" / "pineappl" + ) + + return commands + + +def force_paths(): + """Convert values in chosen sections to paths.""" + for sec in PATHS_SECTIONS: + # robust to early usage + if sec not in configs: + continue + + for key, val in configs[sec].items(): + configs[sec][key] = pathlib.Path(val).absolute() + + +def rawscalar(value): + """Turn scalar into serializable equivalent. + + Available conversions:: + + pathlib.Path -> str + + Parameters + ---------- + value: any + value to convert + + Returns + ------- + any + converted value, if no converter available the original one + + """ + if isinstance(value, pathlib.Path): + return str(value) + + return value + + +def raw(original: dict) -> dict: + """Convert configs (or dict) into serializable equivalent. + + Parameters + ---------- + original: dict + original dictionary to convert + + Returns + ------- + dict + converted dictionary + + See Also + -------- + :func:`rawscalar`, used to convert individual elements + + """ + rawd = copy.deepcopy(original) + + for key, val in rawd.items(): + val = rawscalar(val) + rawd[key] = val if not isinstance(val, dict) else raw(val) + + return rawd diff --git a/runcardsrunner/external/interface.py b/runcardsrunner/external/interface.py index 4afe7101..1cb266e2 100644 --- a/runcardsrunner/external/interface.py +++ b/runcardsrunner/external/interface.py @@ -6,7 +6,7 @@ import pygit2 -from .. import paths, tools +from .. import __version__, configs, tools class External(abc.ABC): @@ -35,14 +35,16 @@ def __init__(self, name, theory, pdf, timestamp=None): if timestamp is None: self.dest = tools.create_output_folder(self.name) else: - self.dest = paths.root / (self.name + "-" + self.timestamp) + self.dest = configs.configs["paths"]["results"] / ( + self.name + "-" + self.timestamp + ) if not self.grid.exists(): tools.decompress(self.grid.with_suffix(".pineappl.lz4")) @property def source(self): """Runcard base directory.""" - return paths.runcards / self.name + return configs.configs["paths"]["runcards"] / self.name @property def grid(self): @@ -91,7 +93,7 @@ def results(self): """ @abc.abstractmethod - def collect_versions(self): + def collect_versions(self) -> dict: """Collect necessary version informations. Returns @@ -105,16 +107,22 @@ def collect_versions(self): def annotate_versions(self): """Add version informations as meta data.""" results_log = self.dest / "results.log" - # TODO: add pineappl version - # pineappl = paths.pineappl_exe() versions = self.collect_versions() - versions["runcard_gitversion"] = pygit2.Repository(paths.root).describe( + # the rr version will also pin pineappl_py version and all the other + # python dependencies versions + versions["rr"] = __version__ + versions["runcard_gitversion"] = pygit2.Repository( + configs.configs["paths"]["root"] + ).describe( always_use_long_format=True, describe_strategy=pygit2.GIT_DESCRIBE_TAGS, dirty_suffix="-dirty", show_commit_oid_as_fallback=True, ) + # TODO: add pineappl version + # pineappl = configs.configs["commands"]["pineappl"]() + versions["pineappl_capi"] = "???" entries = {} entries.update(versions) diff --git a/runcardsrunner/external/mg5/__init__.py b/runcardsrunner/external/mg5/__init__.py index a60d95f5..e589019b 100644 --- a/runcardsrunner/external/mg5/__init__.py +++ b/runcardsrunner/external/mg5/__init__.py @@ -8,9 +8,7 @@ import pandas as pd import pineappl -from ... import install, log -from ... import paths as gpaths -from ... import tools +from ... import configs, install, log, tools from .. import interface from . import paths @@ -29,6 +27,7 @@ def mg5_dir(self): @staticmethod def install(): + install.pineappl() install.mg5amc() @property @@ -43,7 +42,7 @@ def run(self): # create output folder log.subprocess( - [str(gpaths.mg5_exe), str(output_file)], + [str(configs.configs["commands"]["mg5"]), str(output_file)], cwd=self.dest, out=(self.dest / "output.log"), ) @@ -60,7 +59,7 @@ def run(self): # enforce proper analysis # - copy analysis.f - analysis = (gpaths.runcards / self.name / "analysis.f").read_text() + analysis = (self.source / "analysis.f").read_text() (self.mg5_dir / "FixedOrderAnalysis" / f"{self.name}.f").write_text(analysis) # - update analysis card analysis_card = self.mg5_dir / "Cards" / "FO_analyse_card.dat" @@ -75,7 +74,7 @@ def run(self): # launch file; for the time being we create the file here, but in the # future it should be read from the theory database EDIT: now available # in self.theory - variables = json.loads((gpaths.pkg / "variables.json").read_text()) + variables = json.loads((paths.subpkg.parents[1] / "variables.json").read_text()) variables["LHAPDF_ID"] = self.pdf_id # replace the variables with their values @@ -140,7 +139,7 @@ def run(self): # launch run log.subprocess( - [str(gpaths.mg5_exe), str(launch_file)], + [str(configs.configs["commands"]["mg5"]), str(launch_file)], cwd=self.dest, out=self.dest / "launch.log", ) @@ -207,19 +206,27 @@ def collect_versions(self): versions = {} versions["mg5amc_revno"] = ( subprocess.run( - "brz revno".split(), cwd=gpaths.mg5amc, stdout=subprocess.PIPE + "brz revno".split(), + cwd=configs.configs["paths"]["mg5amc"], + stdout=subprocess.PIPE, ) .stdout.decode() .strip() ) mg5amc_repo = ( subprocess.run( - "brz info".split(), cwd=gpaths.mg5amc, stdout=subprocess.PIPE + "brz info".split(), + cwd=configs.configs["paths"]["mg5amc"], + stdout=subprocess.PIPE, ) .stdout.decode() .strip() ) - versions["mg5amc_repo"] = re.search(r"\s*parent branch:\s*(.*)", mg5amc_repo)[1] + + repo = re.search(r"\s*parent branch:\s*(.*)", mg5amc_repo) + if repo is None: + print("Invalid mg5 repository") + versions["mg5amc_repo"] = repo[1] if repo is not None else None return versions diff --git a/runcardsrunner/external/positivity.py b/runcardsrunner/external/positivity.py index 73199edc..d9fedb5d 100644 --- a/runcardsrunner/external/positivity.py +++ b/runcardsrunner/external/positivity.py @@ -7,7 +7,7 @@ import pineappl import yaml -from .. import paths +from .. import configs from . import interface @@ -22,7 +22,7 @@ def is_positivity(name): name : str dataset name """ - return (paths.runcards / name / "positivity.yaml").exists() + return (configs.configs["paths"]["runcards"] / name / "positivity.yaml").exists() class Positivity(interface.External): @@ -30,7 +30,9 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def run(self): - with open(paths.runcards / self.name / "positivity.yaml") as o: + with open( + configs.configs["paths"]["runcards"] / self.name / "positivity.yaml" + ) as o: self.runcard = yaml.safe_load(o) def generate_pineappl(self): diff --git a/runcardsrunner/external/vrap.py b/runcardsrunner/external/vrap.py index 379d2978..115b5538 100644 --- a/runcardsrunner/external/vrap.py +++ b/runcardsrunner/external/vrap.py @@ -25,7 +25,7 @@ from pineappl.bin import BinRemapper from pineappl.grid import Grid -from .. import install, paths +from .. import configs, install from . import interface _PINEAPPL = "test.pineappl.lz4" @@ -41,7 +41,7 @@ def is_vrap(name): """ Checks whether this is a dataset to be run with vrap """ - return (paths.runcards / name / "vrap.yaml").exists() + return (configs.configs["paths"]["runcards"] / name / "vrap.yaml").exists() def yaml_to_vrapcard(yaml_dict, pdf, output_file): @@ -122,7 +122,9 @@ def run(self): """ for b, kin_card in enumerate(self._kin_cards): sp.run( - [paths.vrap_exe, self._input_card, kin_card], cwd=self.dest, check=True + [configs.configs["commands"]["vrap"], self._input_card, kin_card], + cwd=self.dest, + check=True, ) tmppine = self.dest / _PINEAPPL @@ -193,7 +195,11 @@ def results(self): def collect_versions(self): """Currently the version is defined by this file""" - vrap_run = sp.run([paths.vrap_exe, "--version"], capture_output=True, check=True) + vrap_run = sp.run( + [configs.configs["commands"]["vrap"], "--version"], + capture_output=True, + check=True, + ) vrap_version = vrap_run.stdout.decode().split()[-1] return {"vrap_version": vrap_version} diff --git a/runcardsrunner/external/yad.py b/runcardsrunner/external/yad.py index 5b48202b..0674dff6 100644 --- a/runcardsrunner/external/yad.py +++ b/runcardsrunner/external/yad.py @@ -7,7 +7,7 @@ import yadism.output import yaml -from .. import log, paths, tools +from .. import configs, log, tools from . import interface @@ -22,7 +22,7 @@ def is_dis(name): name : str dataset name """ - return (paths.runcards / name / "observable.yaml").exists() + return (configs.configs["paths"]["runcards"] / name / "observable.yaml").exists() class Yadism(interface.External): @@ -30,9 +30,15 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # load runcards - with open(paths.runcards / self.name / "observable.yaml") as o: + with open( + configs.configs["paths"]["runcards"] / self.name / "observable.yaml" + ) as o: self.obs = yaml.safe_load(o) + @property + def output(self): + return self.grid.with_suffix(".tar") + def run(self): print("Running yadism...") @@ -45,17 +51,17 @@ def run(self): raise log.WhileRedirectedError(file=run_log) # dump output - out.dump_yaml_to_file(self.grid.with_suffix(".yaml")) + out.dump_tar(self.output) def generate_pineappl(self): - out = yadism.output.Output.load_yaml_from_file(self.grid.with_suffix(".yaml")) + out = yadism.output.Output.load_tar(self.output) out.dump_pineappl_to_file( str(self.grid), next(iter(self.obs["observables"].keys())) ) def results(self): pdf = lhapdf.mkPDF(self.pdf) - out = yadism.output.Output.load_yaml_from_file(self.grid.with_suffix(".yaml")) + out = yadism.output.Output.load_tar(self.output) pdf_out = out.apply_pdf_alphas_alphaqed_xir_xif( pdf, lambda muR: lhapdf.mkAlphaS(self.pdf).alphasQ(muR), diff --git a/runcardsrunner/info.py b/runcardsrunner/info.py new file mode 100644 index 00000000..1f1bfddd --- /dev/null +++ b/runcardsrunner/info.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +import dataclasses +import enum +import typing + +from .external import interface, mg5, positivity, vrap, yad + + +class Kind(enum.Enum): + dis = enum.auto() + positivity = enum.auto() + ftdy = enum.auto() + hadronic = enum.auto() + + +@dataclasses.dataclass +class Info: + color: str + external: typing.Type[interface.External] + kind: Kind + + +def label(dataset: str) -> Info: + if yad.is_dis(dataset): + return Info(color="red", external=yad.Yadism, kind=Kind.dis) + if positivity.is_positivity(dataset): + return Info( + color="yellow", external=positivity.Positivity, kind=Kind.positivity + ) + if vrap.is_vrap(dataset): + return Info(color="green", external=vrap.Vrap, kind=Kind.ftdy) + + return Info(color="blue", external=mg5.Mg5, kind=Kind.hadronic) diff --git a/runcardsrunner/install.py b/runcardsrunner/install.py index faee6192..31f85b51 100644 --- a/runcardsrunner/install.py +++ b/runcardsrunner/install.py @@ -12,24 +12,35 @@ import pygit2 import requests -from . import paths, tools +from . import configs, tools from .external import vrap -paths.prefix.mkdir(exist_ok=True) -paths.bin.mkdir(exist_ok=True) -paths.lib.mkdir(exist_ok=True) - -mg5_repo = "lp:~maddevelopers/mg5amcnlo/3.3.1" +MG5_REPO = "lp:~maddevelopers/mg5amcnlo/3.3.1" "bazaar/breeze repo location for MG5aMC\\@NLO" -mg5_convert = """ +MG5_CONVERT = """ set auto_convert_model True import model loop_qcd_qed_sm_Gmu quit """ -"instructions to set the correct model for MG5aMC\\@NLO" +"Instructions to set the correct model for MG5aMC\\@NLO." + +PINEAPPL_REPO = "https://github.com/N3PDF/pineappl.git" +"Git repo location for pineappl." + +LHAPDF_VERSION = "LHAPDF-6.4.0" +"Version of LHAPDF to be used by default (if not already available)." + -pineappl_repo = "git://github.com/N3PDF/pineappl.git" -"git repo location for pineappl" +def init_prefix(): + configs.configs["paths"]["prefix"].mkdir(exist_ok=True) + configs.configs["paths"]["bin"].mkdir(exist_ok=True) + configs.configs["paths"]["lib"].mkdir(exist_ok=True) + + +def is_exe(command: os.PathLike) -> bool: + """Check if given path exists and is executable.""" + command = pathlib.Path(command) + return command.exists() and os.access(command, os.X_OK) def mg5amc(): @@ -41,23 +52,24 @@ def mg5amc(): whether the main executable is now existing. """ - # define availability condition - condition = lambda: paths.mg5_exe.exists() and os.access(paths.mg5_exe, os.X_OK) + mg5 = configs.configs["commands"]["mg5"] - if condition(): + if is_exe(mg5): print("✓ Found mg5amc") return True print("Installing...") # download madgraph in prefix (if not present) - subprocess.run(f"brz branch {mg5_repo} {paths.mg5amc}".split()) + subprocess.run( + f"brz branch {MG5_REPO} {configs.configs['paths']['mg5amc']}".split() + ) # in case we're using python3, we need to convert the model file - subprocess.run(f"{paths.mg5_exe}", input=mg5_convert, encoding="ascii") + subprocess.run(f"{mg5}", input=MG5_CONVERT, encoding="ascii") # retest availability - return condition() + return is_exe(mg5) def hawaiian_vrap(): @@ -69,9 +81,9 @@ def hawaiian_vrap(): bool whether vrap is now installed """ - condition = lambda: paths.vrap_exe.exists() and os.access(paths.vrap_exe, os.X_OK) + vrapx = configs.configs["commands"]["vrap"] - if condition(): + if is_exe(vrapx): print("✓ Found vrap") return True @@ -93,11 +105,13 @@ def hawaiian_vrap(): build_dir = tmp_vrap / "build" build_dir.mkdir(exist_ok=True) subprocess.run( - ["../src/configure", "--prefix", paths.prefix], cwd=build_dir, check=True + ["../src/configure", "--prefix", configs.configs["paths"]["prefix"]], + cwd=build_dir, + check=True, ) subprocess.run(["make", "install"], cwd=build_dir, check=True) - return condition() + return is_exe(vrapx) def cargo(): @@ -117,28 +131,33 @@ def cargo(): if cargo_exe is not None: return cargo_exe + cargo_home = configs.configs["paths"]["cargo"] + # if there is not a user cargo update environment - os.environ["CARGO_HOME"] = str(paths.cargo) - if paths.cargo.is_dir(): - return str(paths.cargo / "bin" / "cargo") + os.environ["CARGO_HOME"] = str(cargo_home) + if cargo_home.is_dir(): + return str(cargo_home / "bin" / "cargo") + + rust_init = configs.configs["paths"]["rust_init"] # if cargo not available let's install with requests.get("https://sh.rustup.rs") as r: - with open(paths.rust_init, "wb") as f: + with open(rust_init, "wb") as f: f.write(r.content) # install location is controlled by CARGO_HOME variable - subprocess.run( - f"bash {paths.rust_init} --profile minimal --no-modify-path -y".split() - ) + subprocess.run(f"bash {rust_init} --profile minimal --no-modify-path -y".split()) - return str(paths.cargo / "bin" / "cargo") + return str(cargo_home / "bin" / "cargo") -def pineappl(cli=False): +def pineappl(capi=True, cli=False): """Initialize `PineAPPL `_. Parameters ---------- + capi : bool + whether to install PineAPPl CAPI (by default `True`, since it's the + only thing required) cli : bool whether to install even PineAPPL CLI (by default `False`, since it's not required to run) @@ -150,10 +169,14 @@ def pineappl(cli=False): """ # define availability condition - installed = lambda: pkgconfig.exists("pineappl_capi") - cli_installed = lambda: shutil.which("pineappl") is not None + def installed(): + return pkgconfig.exists("pineappl_capi") - if installed() and (not cli or cli_installed()): + def cli_installed(): + return shutil.which("pineappl") is not None + + # check if there is something to do at all + if (not capi or installed()) and (not cli or cli_installed()): print("✓ Found pineappl") return True @@ -162,12 +185,14 @@ def pineappl(cli=False): if not pkgconfig.exists("lhapdf"): lhapdf() - if not installed(): + if capi and not installed(): try: - repo = pygit2.Repository(paths.pineappl) + repo = pygit2.Repository(configs.configs["paths"]["pineappl"]) tools.git_pull(repo) except pygit2.GitError: - repo = pygit2.clone_repository(pineappl_repo, paths.pineappl) + repo = pygit2.clone_repository( + PINEAPPL_REPO, configs.configs["paths"]["pineappl"] + ) cargo_exe = cargo() subprocess.run([cargo_exe] + "install --force cargo-c".split()) @@ -175,8 +200,11 @@ def pineappl(cli=False): subprocess.run( [cargo_exe] + "cinstall --release --prefix".split() - + [str(paths.prefix), "--manifest-path=pineappl_capi/Cargo.toml"], - cwd=paths.pineappl, + + [ + str(configs.configs["paths"]["prefix"]), + "--manifest-path=pineappl_capi/Cargo.toml", + ], + cwd=configs.configs["paths"]["pineappl"], ) if cli and not cli_installed(): @@ -184,9 +212,10 @@ def pineappl(cli=False): subprocess.run( [cargo_exe] + "install --path pineappl_cli --root".split() - + [str(paths.prefix)], - cwd=paths.pineappl, + + [str(configs.configs["paths"]["prefix"])], + cwd=configs.configs["paths"]["pineappl"], ) + configs.configs["commands"]["pineappl"] = shutil.which("pineappl") # retest availability return installed() and (not cli or cli_installed()) @@ -236,18 +265,41 @@ def lhapdf_conf(pdf): return except PermissionError: pass - paths.lhapdf_data_alternative.mkdir(parents=True, exist_ok=True) - shutil.copy2(paths.lhapdf_conf, paths.lhapdf_data_alternative) - update_lhapdf_path(paths.lhapdf_data_alternative) + + lhapdf_data = configs.configs["paths"]["lhapdf_data_alternative"] + lhapdf_data.mkdir(parents=True, exist_ok=True) + shutil.copy2( + pathlib.Path(__file__).absolute().parent / "confs" / "lhapdf.conf", lhapdf_data + ) + update_lhapdf_path(lhapdf_data) def lhapdf(): - """Install `LHAPDF `_ C++ library.""" - version = "LHAPDF-6.4.0" - lhapdf_tar = paths.lhapdf_dir / (version + ".tar.gz") - lhapdf_code = paths.lhapdf_dir / version + """Install `LHAPDF `_ C++ library. - paths.lhapdf_dir.mkdir(exist_ok=True) + Not needed: + - for `mg5`, since it's vendored + - for `yadism`, since we depend on the PyPI version + """ + # define availability condition + def installed(): + try: + # test python package availability + import lhapdf # pylint: disable=unused-import + except ModuleNotFoundError: + return False + return pkgconfig.exists("lhapdf") + + # check if there is something to do at all + if installed(): + print("✓ Found lhapdf") + return True + + lhapdf_dest = configs.configs["paths"]["lhapdf"] + lhapdf_tar = lhapdf_dest / (LHAPDF_VERSION + ".tar.gz") + lhapdf_code = lhapdf_dest / LHAPDF_VERSION + + lhapdf_dest.mkdir(exist_ok=True) with requests.get( f"https://lhapdf.hepforge.org/downloads/?f={lhapdf_tar.name}" ) as r: @@ -255,16 +307,21 @@ def lhapdf(): f.write(r.content) with tarfile.open(lhapdf_tar, "r:gz") as tar: - tar.extractall(paths.lhapdf_dir) + + tar.extractall(lhapdf_dest) env = os.environ.copy() env["PYTHON"] = sys.executable subprocess.run( - f"./configure --prefix={paths.prefix}".split(), env=env, cwd=lhapdf_code + f"./configure --prefix={configs.configs['paths']['prefix']}".split(), + env=env, + cwd=lhapdf_code, ) subprocess.run("make", cwd=lhapdf_code) subprocess.run("make install".split(), cwd=lhapdf_code) + return installed() + def update_environ(): """Adjust necessary environment files.""" @@ -274,8 +331,12 @@ def prepend(name, value): os.environ[name] = "" os.environ[name] = str(value) + os.pathsep + os.environ[name] + lib = configs.configs["paths"]["lib"] pyver = ".".join(sys.version.split(".")[:2]) - prepend("PYTHONPATH", paths.prefix / "lib" / f"python{pyver}" / "site-packages") - prepend("PATH", paths.prefix / "bin") - prepend("LD_LIBRARY_PATH", paths.prefix / "lib") - prepend("PKG_CONFIG_PATH", paths.prefix / "lib" / "pkgconfig") + prepend( + "PYTHONPATH", + lib / f"python{pyver}" / "site-packages", + ) + prepend("PATH", configs.configs["paths"]["bin"]) + prepend("LD_LIBRARY_PATH", lib) + prepend("PKG_CONFIG_PATH", lib / "pkgconfig") diff --git a/runcardsrunner/paths.py b/runcardsrunner/paths.py deleted file mode 100644 index e94bb165..00000000 --- a/runcardsrunner/paths.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -import pathlib -import shutil -import tempfile - -pkg = pathlib.Path(__file__).absolute().parent -root = pkg.parent - -# internal -lhapdf_conf = pkg / "confs" / "lhapdf.conf" - -# external -runcards = root / "nnpdf31_proc" -theories = root / "theories" - -# prefix and locally installed -prefix = root / ".prefix" -bin = prefix / "bin" -lib = prefix / "lib" -mg5amc = prefix / "mg5amc" -mg5_exe = mg5amc / "bin" / "mg5_aMC" -vrap_exe = bin / "Vrap" -pineappl = prefix / "pineappl" -cargo = prefix / "cargo" -lhapdf_dir = prefix / "lhapdf" -# lhapdf data -lhapdf_data_alternative = prefix / "share" / "LHAPDF" - - -def pineappl_exe(): - p = shutil.which("pineappl") - if p is not None: - return pathlib.Path() - else: - raise OSError("pineappl installation not found.") - - -# tmp -rust_init = tempfile.mktemp() diff --git a/runcardsrunner/tools.py b/runcardsrunner/tools.py index 21660c8a..9f4fa305 100644 --- a/runcardsrunner/tools.py +++ b/runcardsrunner/tools.py @@ -9,7 +9,7 @@ import pygit2 import rich -from . import paths +from . import configs def create_output_folder(name): @@ -26,8 +26,10 @@ def create_output_folder(name): path to output folder """ - target = paths.root / (name + datetime.datetime.now().strftime("-%Y%m%d%H%M%S")) - target.mkdir(exist_ok=True) + target = configs.configs["paths"]["results"] / ( + name + datetime.datetime.now().strftime("-%Y%m%d%H%M%S") + ) + target.mkdir(exist_ok=True, parents=True) return target @@ -256,3 +258,28 @@ def common_substring(s1, s2, *sn): # sort by length and take the first shortest = min(enumerate(len(s) for s in ss), key=lambda el: el[1])[0] return ss[shortest] + + +def parse_metadata(file): + """Parse metadata file. + + Parameters + ---------- + file : io.TextIOBase + the file to read + + Returns + ------- + dict + the metadata entries + + """ + entries = {} + for line in file.readlines(): + if line[-1] == "\n": + line = line[:-1] + + k, v = line.split("=") + entries[k] = v + + return entries diff --git a/update_metadata.sh b/update_metadata.sh deleted file mode 100755 index 2250ef96..00000000 --- a/update_metadata.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# exit script at the first sign of an error -set -o errexit - -# the following exits if undeclared variables are used -set -o nounset - -# exit if some program in a pipeline fails -set -o pipefail - -for i in $(find "$@" -name '*.pineappl.lz4'); do - dataset=$(basename $i) - dataset=${dataset%.pineappl.lz4} - - export grid=${i} - export metadata=nnpdf31_proc/${dataset}/metadata.txt - - if [[ ! -f ${metadata} ]]; then - echo "Skipping ${i#./}, couldn't find metadata (is the git repository on the right branch?)" - continue - else - echo "Updating ${i#./}" - fi - - eval $(awk -F= "BEGIN { printf \"pineappl set ${grid} ${grid}.tmp \" } { printf \"--entry %s '%s' \", \$1, \$2 }" ${metadata}) - - lz4 -9 ${i}.tmp 2>/dev/null - rm ${i}.tmp - mv ${i}.tmp.lz4 ${i} -done