From 48e09be08c6ad31a9dbb51a52e93c3a338264798 Mon Sep 17 00:00:00 2001 From: paugier Date: Thu, 13 Jun 2024 11:58:59 +0200 Subject: [PATCH] Meson! --- .gitignore | 1 + Makefile | 6 + meson.build | 67 ++++++ meson.options | 27 +++ noxfile.py | 17 +- pdm.lock | 498 +++++++++------------------------------- pylandstats/meson.build | 20 ++ pyproject.toml | 21 +- setup.py | 33 --- 9 files changed, 253 insertions(+), 437 deletions(-) create mode 100644 meson.build create mode 100644 meson.options create mode 100644 pylandstats/meson.build delete mode 100644 setup.py diff --git a/.gitignore b/.gitignore index 3e98b21..ed1a071 100644 --- a/.gitignore +++ b/.gitignore @@ -113,6 +113,7 @@ output/ # Transonic __pythran__ __numba__ +__python__ # PDM .pdm-python diff --git a/Makefile b/Makefile index 9250c56..0717bea 100644 --- a/Makefile +++ b/Makefile @@ -7,3 +7,9 @@ lock: test: pdm test + +build_doc: + nox -s doc -R + +test_in_nox_env: + nox -s test diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..f061cc1 --- /dev/null +++ b/meson.build @@ -0,0 +1,67 @@ +project( + 'pylandstats', + 'cpp', + license: 'GPL-3.0-or-later', + meson_version: '>= 1.1.0', + default_options: [ + 'buildtype=release', + 'cpp_std=c++11', + ], +) + +# https://mesonbuild.com/Python-module.html +py_mod = import('python') +py = py_mod.find_installation('python3', pure: false) +py_dep = py.dependency() + +backend = get_option('transonic-backend') + +if backend.contains(',') + backends = backend.split(',') +else + backends = [backend] +endif + +use_pythran = backend.contains('pythran') +if use_pythran + incdir_numpy = run_command('transonic-get-include', 'numpy', check: true).stdout().strip() + inc_np = include_directories(incdir_numpy) + np_dep = declare_dependency(include_directories: inc_np) + + incdir_pythran = run_command('transonic-get-include', 'pythran', check: true).stdout().strip() + pythran = find_program('pythran', native: true) + + cpp_args_pythran = [ + '-DENABLE_PYTHON_MODULE', + '-D__PYTHRAN__=3', + '-DPYTHRAN_BLAS_NONE' + ] + + if get_option('use-xsimd') == true + # xsimd is unvendored from pythran by conda-forge, and due to a compiler + # activation bug the default /include/ may not be visible (see + # gh-15698). Hence look for xsimd explicitly. + xsimd_dep = dependency('xsimd', required: false) + pythran_dep = declare_dependency( + include_directories: incdir_pythran, + dependencies: xsimd_dep, + ) + cpp_args_pythran += ['-DUSE_XSIMD'] + else + pythran_dep = declare_dependency( + include_directories: incdir_pythran, + ) + endif + + pythran_complex_hook = get_option('pythran-complex-hook') + if pythran_complex_hook == 'os-dependent' + pythran_complex_hook = host_machine.system() == 'linux' + endif + + if get_option('native') + cpp_args_pythran += ['-march=native', '-Ofast'] + endif + +endif + +subdir('pylandstats') diff --git a/meson.options b/meson.options new file mode 100644 index 0000000..a543b9f --- /dev/null +++ b/meson.options @@ -0,0 +1,27 @@ +option( + 'transonic-backend', + type: 'string', + value: 'pythran,python,numba', + description: + 'pythran,python,numba (default), cython, numpy, numba; ' + + 'or comma separated value representing multi-backends', +) +option( + 'native', + type: 'boolean', + value: false, + description: 'Performance oriented and not portable build', +) +option( + 'use-xsimd', + type: 'boolean', + value: true, + description: 'Turns on xsimd vectorization', +) +option( + 'pythran-complex-hook', + type: 'combo', + choices: ['os-dependent', 'true', 'false'], + value: 'os-dependent', + description: 'Pythran complex_hook option', +) diff --git a/noxfile.py b/noxfile.py index 4c638e4..8b94367 100644 --- a/noxfile.py +++ b/noxfile.py @@ -1,4 +1,4 @@ -"""Task runner for the developer +"""Task runner for the developer. # Usage @@ -20,13 +20,21 @@ @nox.session def doc(session): - command = "pdm sync --clean -G doc" + """Build the documentation in a Nox environment.""" + command = "pdm sync --clean -G doc --no-self" session.run_install(*command.split(), external=True) + + # for documentation, we don't need the other backends + command = "pip install . -C setup-args=-Dtransonic-backend=python" + session.run_install(*command.split(), external=True) + session.run("sphinx-build", "docs", "docs/_build") + print(f"file://{os.getcwd()}/docs/_build/index.html") @nox.session def wheel(session): + """Build the wheel.""" session.install("build", "twine") session.run("python", "-m", "build") session.run("twine", "check", "dist/*") @@ -34,9 +42,12 @@ def wheel(session): @nox.session def test(session): - command = "pdm sync --clean -G test" + """Run the test in a Nox environment.""" + command = "pdm sync --clean --prod -G test --no-self" session.run_install(*command.split(), external=True) + session.install(".", "--no-deps", external=True) + session.run( "pytest", "-v", diff --git a/pdm.lock b/pdm.lock index 1535b79..388dc53 100644 --- a/pdm.lock +++ b/pdm.lock @@ -2,10 +2,10 @@ # It is not intended for manual editing. [metadata] -groups = ["default", "dev", "doc", "test"] +groups = ["default", "build", "dev", "doc", "test"] strategy = ["cross_platform", "inherit_metadata"] lock_version = "4.4.1" -content_hash = "sha256:1b3f5f1cdfb6edbaa9da387901132705969ec2aed28f5a403ce8100e9c5c6ddf" +content_hash = "sha256:7e08e54ce6cd314dbdab494e9e4dea6867a84df3feb37ebfb63e2c928a024441" [[package]] name = "accessible-pygments" @@ -95,7 +95,7 @@ name = "autopep8" version = "2.2.0" requires_python = ">=3.8" summary = "A tool that automatically formats Python code to conform to the PEP 8 style guide" -groups = ["default"] +groups = ["build", "default"] dependencies = [ "pycodestyle>=2.11.0", "tomli; python_version < \"3.11\"", @@ -116,18 +116,6 @@ files = [ {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] -[[package]] -name = "backports-tarfile" -version = "1.2.0" -requires_python = ">=3.8" -summary = "Backport of CPython tarfile module" -groups = ["dev"] -marker = "python_version < \"3.12\"" -files = [ - {file = "backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34"}, - {file = "backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991"}, -] - [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -147,7 +135,7 @@ name = "beniget" version = "0.4.1" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" summary = "Extract semantic information about static Python code" -groups = ["default"] +groups = ["build", "default"] dependencies = [ "gast~=0.5.0", ] @@ -192,41 +180,12 @@ files = [ {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, ] -[[package]] -name = "build" -version = "1.2.1" -requires_python = ">=3.8" -summary = "A simple, correct Python build frontend" -groups = ["dev"] -dependencies = [ - "colorama; os_name == \"nt\"", - "importlib-metadata>=4.6; python_full_version < \"3.10.2\"", - "packaging>=19.1", - "pyproject-hooks", - "tomli>=1.1.0; python_version < \"3.11\"", -] -files = [ - {file = "build-1.2.1-py3-none-any.whl", hash = "sha256:75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4"}, - {file = "build-1.2.1.tar.gz", hash = "sha256:526263f4870c26f26c433545579475377b2b7588b6f1eac76a001e873ae3e19d"}, -] - -[[package]] -name = "cachetools" -version = "5.3.3" -requires_python = ">=3.7" -summary = "Extensible memoizing collections and decorators" -groups = ["dev"] -files = [ - {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, - {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, -] - [[package]] name = "certifi" version = "2024.6.2" requires_python = ">=3.6" summary = "Python package for providing Mozilla's CA Bundle." -groups = ["default", "dev", "doc"] +groups = ["default", "doc"] files = [ {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, @@ -237,8 +196,8 @@ name = "cffi" version = "1.16.0" requires_python = ">=3.8" summary = "Foreign Function Interface for Python calling C code." -groups = ["dev", "doc"] -marker = "platform_python_implementation != \"PyPy\" and sys_platform == \"linux\" or implementation_name == \"pypy\"" +groups = ["doc"] +marker = "implementation_name == \"pypy\"" dependencies = [ "pycparser", ] @@ -300,17 +259,6 @@ files = [ {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] -[[package]] -name = "chardet" -version = "5.2.0" -requires_python = ">=3.7" -summary = "Universal encoding detector for Python 3" -groups = ["dev"] -files = [ - {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, - {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, -] - [[package]] name = "charset-normalizer" version = "3.3.2" @@ -646,51 +594,6 @@ files = [ {file = "coverage-7.5.3.tar.gz", hash = "sha256:04aefca5190d1dc7a53a4c1a5a7f8568811306d7a8ee231c42fb69215571944f"}, ] -[[package]] -name = "cryptography" -version = "42.0.8" -requires_python = ">=3.7" -summary = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -groups = ["dev"] -marker = "sys_platform == \"linux\"" -dependencies = [ - "cffi>=1.12; platform_python_implementation != \"PyPy\"", -] -files = [ - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, - {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, - {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, - {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, - {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, - {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, - {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, -] - [[package]] name = "cycler" version = "0.12.1" @@ -787,7 +690,7 @@ name = "docutils" version = "0.21.2" requires_python = ">=3.9" summary = "Docutils -- Python Documentation Utilities" -groups = ["dev", "doc"] +groups = ["doc"] files = [ {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, @@ -931,7 +834,7 @@ name = "gast" version = "0.5.4" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" summary = "Python AST that abstracts the underlying Python version" -groups = ["default"] +groups = ["build", "default"] files = [ {file = "gast-0.5.4-py3-none-any.whl", hash = "sha256:6fc4fa5fa10b72fb8aab4ae58bcb023058386e67b6fa2e3e34cec5c769360316"}, {file = "gast-0.5.4.tar.gz", hash = "sha256:9c270fe5f4b130969b54174de7db4e764b09b4f7f67ccfc32480e29f78348d97"}, @@ -1020,7 +923,7 @@ name = "idna" version = "3.7" requires_python = ">=3.5" summary = "Internationalized Domain Names in Applications (IDNA)" -groups = ["dev", "doc"] +groups = ["doc"] files = [ {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, @@ -1127,48 +1030,6 @@ files = [ {file = "ipython-8.18.0.tar.gz", hash = "sha256:4feb61210160f75e229ce932dbf8b719bff37af123c0b985fd038b14233daa16"}, ] -[[package]] -name = "jaraco-classes" -version = "3.4.0" -requires_python = ">=3.8" -summary = "Utility functions for Python class constructs" -groups = ["dev"] -dependencies = [ - "more-itertools", -] -files = [ - {file = "jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790"}, - {file = "jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd"}, -] - -[[package]] -name = "jaraco-context" -version = "5.3.0" -requires_python = ">=3.8" -summary = "Useful decorators and context managers" -groups = ["dev"] -dependencies = [ - "backports-tarfile; python_version < \"3.12\"", -] -files = [ - {file = "jaraco.context-5.3.0-py3-none-any.whl", hash = "sha256:3e16388f7da43d384a1a7cd3452e72e14732ac9fe459678773a3608a812bf266"}, - {file = "jaraco.context-5.3.0.tar.gz", hash = "sha256:c2f67165ce1f9be20f32f650f25d8edfc1646a8aeee48ae06fb35f90763576d2"}, -] - -[[package]] -name = "jaraco-functools" -version = "4.0.1" -requires_python = ">=3.8" -summary = "Functools like those found in stdlib" -groups = ["dev"] -dependencies = [ - "more-itertools", -] -files = [ - {file = "jaraco.functools-4.0.1-py3-none-any.whl", hash = "sha256:3b24ccb921d6b593bdceb56ce14799204f473976e2a9d4b15b04d0f2c2326664"}, - {file = "jaraco_functools-4.0.1.tar.gz", hash = "sha256:d33fa765374c0611b52f8b3a795f8900869aa88c84769d4d1746cd68fb28c3e8"}, -] - [[package]] name = "jedi" version = "0.19.1" @@ -1183,18 +1044,6 @@ files = [ {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] -[[package]] -name = "jeepney" -version = "0.8.0" -requires_python = ">=3.7" -summary = "Low-level, pure Python DBus protocol wrapper." -groups = ["dev"] -marker = "sys_platform == \"linux\"" -files = [ - {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, - {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, -] - [[package]] name = "jinja2" version = "3.1.4" @@ -1296,26 +1145,6 @@ files = [ {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, ] -[[package]] -name = "keyring" -version = "25.2.1" -requires_python = ">=3.8" -summary = "Store and access your passwords safely." -groups = ["dev"] -dependencies = [ - "SecretStorage>=3.2; sys_platform == \"linux\"", - "importlib-metadata>=4.11.4; python_version < \"3.12\"", - "jaraco-classes", - "jaraco-context", - "jaraco-functools", - "jeepney>=0.4.2; sys_platform == \"linux\"", - "pywin32-ctypes>=0.2.0; sys_platform == \"win32\"", -] -files = [ - {file = "keyring-25.2.1-py3-none-any.whl", hash = "sha256:2458681cdefc0dbc0b7eb6cf75d0b98e59f9ad9b2d4edd319d18f68bdca95e50"}, - {file = "keyring-25.2.1.tar.gz", hash = "sha256:daaffd42dbda25ddafb1ad5fec4024e5bbcfe424597ca1ca452b299861e49f1b"}, -] - [[package]] name = "kiwisolver" version = "1.4.5" @@ -1448,7 +1277,7 @@ name = "markdown-it-py" version = "3.0.0" requires_python = ">=3.8" summary = "Python port of markdown-it. Markdown parsing, done right!" -groups = ["dev", "doc"] +groups = ["doc"] dependencies = [ "mdurl~=0.1", ] @@ -1590,21 +1419,39 @@ name = "mdurl" version = "0.1.2" requires_python = ">=3.7" summary = "Markdown URL utilities" -groups = ["dev", "doc"] +groups = ["doc"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] [[package]] -name = "more-itertools" -version = "10.3.0" -requires_python = ">=3.8" -summary = "More routines for operating on iterables, beyond itertools" -groups = ["dev"] +name = "meson" +version = "1.4.1" +requires_python = ">=3.7" +summary = "A high performance build system" +groups = ["build"] files = [ - {file = "more-itertools-10.3.0.tar.gz", hash = "sha256:e5d93ef411224fbcef366a6e8ddc4c5781bc6359d43412a65dd5964e46111463"}, - {file = "more_itertools-10.3.0-py3-none-any.whl", hash = "sha256:ea6a02e24a9161e51faad17a8782b92a0df82c12c1c8886fec7f0c3fa1a1b320"}, + {file = "meson-1.4.1-py3-none-any.whl", hash = "sha256:d5acc3abae2dad3c70ddcbd10acac92b78b144d34d43f40f5b8ac31dfd8a826a"}, + {file = "meson-1.4.1.tar.gz", hash = "sha256:1b8aad738a5f6ae64294cc8eaba9a82988c1c420204484ac02ef782e5bba5f49"}, +] + +[[package]] +name = "meson-python" +version = "0.16.0" +requires_python = ">=3.7" +summary = "Meson Python build backend (PEP 517)" +groups = ["build"] +dependencies = [ + "meson>=0.63.3; python_version < \"3.12\"", + "meson>=1.2.3; python_version >= \"3.12\"", + "packaging>=19.0", + "pyproject-metadata>=0.7.1", + "tomli>=1.0.0; python_version < \"3.11\"", +] +files = [ + {file = "meson_python-0.16.0-py3-none-any.whl", hash = "sha256:842dc9f5dc29e55fc769ff1b6fe328412fe6c870220fc321060a1d2d395e69e8"}, + {file = "meson_python-0.16.0.tar.gz", hash = "sha256:9068c17e36c89d6c7ff709fffb2a8a9925e8cd0b02629728e5ceaf2ec505cb5f"}, ] [[package]] @@ -1706,27 +1553,26 @@ files = [ ] [[package]] -name = "nh3" -version = "0.2.17" -summary = "Python bindings to the ammonia HTML sanitization library." -groups = ["dev"] +name = "ninja" +version = "1.11.1.1" +summary = "Ninja is a small build system with a focus on speed" +groups = ["build"] files = [ - {file = "nh3-0.2.17-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:551672fd71d06cd828e282abdb810d1be24e1abb7ae2543a8fa36a71c1006fe9"}, - {file = "nh3-0.2.17-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c551eb2a3876e8ff2ac63dff1585236ed5dfec5ffd82216a7a174f7c5082a78a"}, - {file = "nh3-0.2.17-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:66f17d78826096291bd264f260213d2b3905e3c7fae6dfc5337d49429f1dc9f3"}, - {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0316c25b76289cf23be6b66c77d3608a4fdf537b35426280032f432f14291b9a"}, - {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:22c26e20acbb253a5bdd33d432a326d18508a910e4dcf9a3316179860d53345a"}, - {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:85cdbcca8ef10733bd31f931956f7fbb85145a4d11ab9e6742bbf44d88b7e351"}, - {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40015514022af31975c0b3bca4014634fa13cb5dc4dbcbc00570acc781316dcc"}, - {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba73a2f8d3a1b966e9cdba7b211779ad8a2561d2dba9674b8a19ed817923f65f"}, - {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c21bac1a7245cbd88c0b0e4a420221b7bfa838a2814ee5bb924e9c2f10a1120b"}, - {file = "nh3-0.2.17-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d7a25fd8c86657f5d9d576268e3b3767c5cd4f42867c9383618be8517f0f022a"}, - {file = "nh3-0.2.17-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:c790769152308421283679a142dbdb3d1c46c79c823008ecea8e8141db1a2062"}, - {file = "nh3-0.2.17-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:b4427ef0d2dfdec10b641ed0bdaf17957eb625b2ec0ea9329b3d28806c153d71"}, - {file = "nh3-0.2.17-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a3f55fabe29164ba6026b5ad5c3151c314d136fd67415a17660b4aaddacf1b10"}, - {file = "nh3-0.2.17-cp37-abi3-win32.whl", hash = "sha256:1a814dd7bba1cb0aba5bcb9bebcc88fd801b63e21e2450ae6c52d3b3336bc911"}, - {file = "nh3-0.2.17-cp37-abi3-win_amd64.whl", hash = "sha256:1aa52a7def528297f256de0844e8dd680ee279e79583c76d6fa73a978186ddfb"}, - {file = "nh3-0.2.17.tar.gz", hash = "sha256:40d0741a19c3d645e54efba71cb0d8c475b59135c1e3c580f879ad5514cbf028"}, + {file = "ninja-1.11.1.1-py2.py3-none-macosx_10_9_universal2.macosx_10_9_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:376889c76d87b95b5719fdd61dd7db193aa7fd4432e5d52d2e44e4c497bdbbee"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:ecf80cf5afd09f14dcceff28cb3f11dc90fb97c999c89307aea435889cb66877"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:84502ec98f02a037a169c4b0d5d86075eaf6afc55e1879003d6cab51ced2ea4b"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:73b93c14046447c7c5cc892433d4fae65d6364bec6685411cb97a8bcf815f93a"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:18302d96a5467ea98b68e1cae1ae4b4fb2b2a56a82b955193c637557c7273dbd"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aad34a70ef15b12519946c5633344bc775a7656d789d9ed5fdb0d456383716ef"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:d491fc8d89cdcb416107c349ad1e3a735d4c4af5e1cb8f5f727baca6350fdaea"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_i686.whl", hash = "sha256:7563ce1d9fe6ed5af0b8dd9ab4a214bf4ff1f2f6fd6dc29f480981f0f8b8b249"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:9df724344202b83018abb45cb1efc22efd337a1496514e7e6b3b59655be85205"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_s390x.whl", hash = "sha256:3e0f9be5bb20d74d58c66cc1c414c3e6aeb45c35b0d0e41e8d739c2c0d57784f"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:76482ba746a2618eecf89d5253c0d1e4f1da1270d41e9f54dfbd91831b0f6885"}, + {file = "ninja-1.11.1.1-py2.py3-none-win32.whl", hash = "sha256:fa2ba9d74acfdfbfbcf06fad1b8282de8a7a8c481d9dee45c859a8c93fcc1082"}, + {file = "ninja-1.11.1.1-py2.py3-none-win_amd64.whl", hash = "sha256:95da904130bfa02ea74ff9c0116b4ad266174fafb1c707aa50212bc7859aebf1"}, + {file = "ninja-1.11.1.1-py2.py3-none-win_arm64.whl", hash = "sha256:185e0641bde601e53841525c4196278e9aaf4463758da6dd1e752c0a0f54136a"}, + {file = "ninja-1.11.1.1.tar.gz", hash = "sha256:9d793b08dd857e38d0b6ffe9e6b7145d7c485a42dcfea04905ca0cdb6017cc3c"}, ] [[package]] @@ -1780,7 +1626,7 @@ name = "numpy" version = "1.26.4" requires_python = ">=3.9" summary = "Fundamental package for array computing in Python" -groups = ["default"] +groups = ["build", "default"] files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -1825,7 +1671,7 @@ name = "packaging" version = "24.1" requires_python = ">=3.8" summary = "Core utilities for Python packages" -groups = ["default", "dev", "doc", "test"] +groups = ["build", "default", "dev", "doc", "test"] files = [ {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, @@ -1996,28 +1842,6 @@ files = [ {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, ] -[[package]] -name = "pip" -version = "24.0" -requires_python = ">=3.7" -summary = "The PyPA recommended tool for installing Python packages." -groups = ["dev"] -files = [ - {file = "pip-24.0-py3-none-any.whl", hash = "sha256:ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc"}, - {file = "pip-24.0.tar.gz", hash = "sha256:ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2"}, -] - -[[package]] -name = "pkginfo" -version = "1.11.1" -requires_python = ">=3.8" -summary = "Query metadata from sdists / bdists / installed packages." -groups = ["dev"] -files = [ - {file = "pkginfo-1.11.1-py3-none-any.whl", hash = "sha256:bfa76a714fdfc18a045fcd684dbfc3816b603d9d075febef17cb6582bea29573"}, - {file = "pkginfo-1.11.1.tar.gz", hash = "sha256:2e0dca1cf4c8e39644eed32408ea9966ee15e0d324c62ba899a393b3c6b467aa"}, -] - [[package]] name = "platformdirs" version = "4.2.2" @@ -2034,12 +1858,22 @@ name = "pluggy" version = "1.5.0" requires_python = ">=3.8" summary = "plugin and hook calling mechanisms for python" -groups = ["dev", "test"] +groups = ["test"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] +[[package]] +name = "ply" +version = "3.11" +summary = "Python Lex & Yacc" +groups = ["build"] +files = [ + {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, + {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, +] + [[package]] name = "pre-commit" version = "3.7.1" @@ -2114,7 +1948,7 @@ name = "pycodestyle" version = "2.11.1" requires_python = ">=3.8" summary = "Python style guide checker" -groups = ["default"] +groups = ["build", "default"] files = [ {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, @@ -2125,8 +1959,8 @@ name = "pycparser" version = "2.22" requires_python = ">=3.8" summary = "C parser in Python" -groups = ["dev", "doc"] -marker = "platform_python_implementation != \"PyPy\" and sys_platform == \"linux\" or implementation_name == \"pypy\"" +groups = ["doc"] +marker = "implementation_name == \"pypy\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -2158,7 +1992,7 @@ name = "pygments" version = "2.18.0" requires_python = ">=3.8" summary = "Pygments is a syntax highlighting package written in Python." -groups = ["dev", "doc"] +groups = ["doc"] files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -2215,29 +2049,17 @@ files = [ ] [[package]] -name = "pyproject-api" -version = "1.6.1" -requires_python = ">=3.8" -summary = "API to interact with the python pyproject.toml based projects" -groups = ["dev"] +name = "pyproject-metadata" +version = "0.8.0" +requires_python = ">=3.7" +summary = "PEP 621 metadata parsing" +groups = ["build"] dependencies = [ - "packaging>=23.1", - "tomli>=2.0.1; python_version < \"3.11\"", + "packaging>=19.0", ] files = [ - {file = "pyproject_api-1.6.1-py3-none-any.whl", hash = "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675"}, - {file = "pyproject_api-1.6.1.tar.gz", hash = "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538"}, -] - -[[package]] -name = "pyproject-hooks" -version = "1.1.0" -requires_python = ">=3.7" -summary = "Wrappers to call pyproject.toml-based build backend hooks." -groups = ["dev"] -files = [ - {file = "pyproject_hooks-1.1.0-py3-none-any.whl", hash = "sha256:7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2"}, - {file = "pyproject_hooks-1.1.0.tar.gz", hash = "sha256:4b37730834edbd6bd37f26ece6b44802fb1c1ee2ece0e54ddff8bfc06db86965"}, + {file = "pyproject_metadata-0.8.0-py3-none-any.whl", hash = "sha256:ad858d448e1d3a1fb408ac5bac9ea7743e7a8bbb472f2693aaa334d2db42f526"}, + {file = "pyproject_metadata-0.8.0.tar.gz", hash = "sha256:376d5a00764ac29440a54579f88e66b7d9cb7e629d35c35a1c7248bfebc9b455"}, ] [[package]] @@ -2299,6 +2121,23 @@ files = [ {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, ] +[[package]] +name = "pythran" +version = "0.16.1" +requires_python = ">=3.7" +summary = "Ahead of Time compiler for numeric kernels" +groups = ["build"] +dependencies = [ + "beniget~=0.4.0", + "gast~=0.5.0", + "numpy", + "ply>=3.4", + "setuptools", +] +files = [ + {file = "pythran-0.16.1.tar.gz", hash = "sha256:861748c0f9c7d422b32724b114b3817d818ed4eab86c09781aa0a3f7ceabb7f9"}, +] + [[package]] name = "pytz" version = "2024.1" @@ -2328,18 +2167,6 @@ files = [ {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] -[[package]] -name = "pywin32-ctypes" -version = "0.2.2" -requires_python = ">=3.6" -summary = "A (partial) reimplementation of pywin32 using ctypes/cffi" -groups = ["dev"] -marker = "sys_platform == \"win32\"" -files = [ - {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, - {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, -] - [[package]] name = "pyyaml" version = "6.0.1" @@ -2514,22 +2341,6 @@ files = [ {file = "rasterio-1.3.10.tar.gz", hash = "sha256:ce182c735b4f9e8735d90600607ecab15ef895eb8aa660bf665751529477e326"}, ] -[[package]] -name = "readme-renderer" -version = "43.0" -requires_python = ">=3.8" -summary = "readme_renderer is a library for rendering readme descriptions for Warehouse" -groups = ["dev"] -dependencies = [ - "Pygments>=2.5.1", - "docutils>=0.13.1", - "nh3>=0.2.14", -] -files = [ - {file = "readme_renderer-43.0-py3-none-any.whl", hash = "sha256:19db308d86ecd60e5affa3b2a98f017af384678c63c88e5d4556a380e674f3f9"}, - {file = "readme_renderer-43.0.tar.gz", hash = "sha256:1818dd28140813509eeed8d62687f7cd4f7bad90d4db586001c5dc09d4fde311"}, -] - [[package]] name = "referencing" version = "0.35.1" @@ -2550,7 +2361,7 @@ name = "requests" version = "2.32.3" requires_python = ">=3.8" summary = "Python HTTP for Humans." -groups = ["dev", "doc"] +groups = ["doc"] dependencies = [ "certifi>=2017.4.17", "charset-normalizer<4,>=2", @@ -2562,46 +2373,6 @@ files = [ {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] -[[package]] -name = "requests-toolbelt" -version = "1.0.0" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -summary = "A utility belt for advanced users of python-requests" -groups = ["dev"] -dependencies = [ - "requests<3.0.0,>=2.0.1", -] -files = [ - {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, - {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, -] - -[[package]] -name = "rfc3986" -version = "2.0.0" -requires_python = ">=3.7" -summary = "Validating URI References per RFC 3986" -groups = ["dev"] -files = [ - {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"}, - {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, -] - -[[package]] -name = "rich" -version = "13.7.1" -requires_python = ">=3.7.0" -summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -groups = ["dev"] -dependencies = [ - "markdown-it-py>=2.2.0", - "pygments<3.0.0,>=2.13.0", -] -files = [ - {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, - {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, -] - [[package]] name = "rpds-py" version = "0.18.1" @@ -2702,7 +2473,7 @@ name = "ruff" version = "0.4.8" requires_python = ">=3.7" summary = "An extremely fast Python linter and code formatter, written in Rust." -groups = ["test"] +groups = ["dev", "test"] files = [ {file = "ruff-0.4.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7663a6d78f6adb0eab270fa9cf1ff2d28618ca3a652b60f2a234d92b9ec89066"}, {file = "ruff-0.4.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eeceb78da8afb6de0ddada93112869852d04f1cd0f6b80fe464fd4e35c330913"}, @@ -2760,28 +2531,12 @@ files = [ {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, ] -[[package]] -name = "secretstorage" -version = "3.3.3" -requires_python = ">=3.6" -summary = "Python bindings to FreeDesktop.org Secret Service API" -groups = ["dev"] -marker = "sys_platform == \"linux\"" -dependencies = [ - "cryptography>=2.0", - "jeepney>=0.6", -] -files = [ - {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, - {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, -] - [[package]] name = "setuptools" version = "70.0.0" requires_python = ">=3.8" summary = "Easily download, build, install, upgrade, and uninstall Python packages" -groups = ["default"] +groups = ["build", "default"] files = [ {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, @@ -3071,7 +2826,7 @@ name = "tomli" version = "2.0.1" requires_python = ">=3.7" summary = "A lil' TOML parser" -groups = ["default", "dev", "doc", "test"] +groups = ["build", "default", "doc", "test"] marker = "python_version < \"3.11\"" files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, @@ -3120,29 +2875,6 @@ files = [ {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, ] -[[package]] -name = "tox" -version = "4.15.1" -requires_python = ">=3.8" -summary = "tox is a generic virtualenv management and test command line tool" -groups = ["dev"] -dependencies = [ - "cachetools>=5.3.2", - "chardet>=5.2", - "colorama>=0.4.6", - "filelock>=3.13.1", - "packaging>=23.2", - "platformdirs>=4.1", - "pluggy>=1.3", - "pyproject-api>=1.6.1", - "tomli>=2.0.1; python_version < \"3.11\"", - "virtualenv>=20.25", -] -files = [ - {file = "tox-4.15.1-py3-none-any.whl", hash = "sha256:f00a5dc4222b358e69694e47e3da0227ac41253509bca9f45aa8f012053e8d9d"}, - {file = "tox-4.15.1.tar.gz", hash = "sha256:53a092527d65e873e39213ebd4bd027a64623320b6b0326136384213f95b7076"}, -] - [[package]] name = "traitlets" version = "5.14.3" @@ -3159,7 +2891,7 @@ name = "transonic" version = "0.7.0" requires_python = ">=3.9" summary = "Make your Python code fly at transonic speeds!" -groups = ["default"] +groups = ["build", "default"] dependencies = [ "autopep8", "beniget~=0.4.0", @@ -3171,28 +2903,6 @@ files = [ {file = "transonic-0.7.0.tar.gz", hash = "sha256:51de47d018b4c54ba37710cb004cb93646ae9163fbc3fa3d200133fd9262abfe"}, ] -[[package]] -name = "twine" -version = "5.1.0" -requires_python = ">=3.8" -summary = "Collection of utilities for publishing packages on PyPI" -groups = ["dev"] -dependencies = [ - "importlib-metadata>=3.6", - "keyring>=15.1", - "pkginfo>=1.8.1", - "readme-renderer>=35.0", - "requests-toolbelt!=0.9.0,>=0.8.0", - "requests>=2.20", - "rfc3986>=1.4.0", - "rich>=12.0.0", - "urllib3>=1.26.0", -] -files = [ - {file = "twine-5.1.0-py3-none-any.whl", hash = "sha256:fe1d814395bfe50cfbe27783cb74efe93abeac3f66deaeb6c8390e4e92bacb43"}, - {file = "twine-5.1.0.tar.gz", hash = "sha256:4d74770c88c4fcaf8134d2a6a9d863e40f08255ff7d8e2acb3cbbd57d25f6e9d"}, -] - [[package]] name = "typing-extensions" version = "4.12.2" @@ -3220,7 +2930,7 @@ name = "urllib3" version = "2.2.1" requires_python = ">=3.8" summary = "HTTP library with thread-safe connection pooling, file post, and more." -groups = ["dev", "doc"] +groups = ["doc"] files = [ {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, diff --git a/pylandstats/meson.build b/pylandstats/meson.build new file mode 100644 index 0000000..fad6648 --- /dev/null +++ b/pylandstats/meson.build @@ -0,0 +1,20 @@ + +python_sources = [ + '__init__.py', + 'landscape.py', + 'multilandscape.py', + 'settings.py', + 'spatiotemporal.py', + 'zonal.py', +] + +py.install_sources( + python_sources, + subdir: 'pylandstats' +) + +run_command(['transonic', '--meson', '--backend', backend, 'landscape.py'], check: true) + +foreach be : backends + subdir('__' + be + '__') +endforeach diff --git a/pyproject.toml b/pyproject.toml index 58b57a5..686805f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [build-system] -requires = ["setuptools>=61.0", "wheel", "numpy", "pythran>=0.16.0", "transonic>=0.4.0"] -build-backend = "setuptools.build_meta" +requires = ["meson-python", "numpy", "pythran>=0.16.1", "transonic>=0.4.0"] +build-backend = 'mesonpy' [project] name = "pylandstats" @@ -90,7 +90,7 @@ skip = "*-musllinux_i686" [tool.codespell] ignore-words-list = "te" -skip = "CHANGELOG.md" +skip = "CHANGELOG.md,pdm.lock" [tool.pdm] @@ -98,14 +98,21 @@ distribution = true ignore_package_warnings = ["ipython"] [tool.pdm.dev-dependencies] -dev = ["build", "commitizen", "pre-commit", "pip", "toml", "tox", "twine"] -doc = ["pydata-sphinx-theme", "sphinx", "myst-nb",] +build = [ + "meson-python", + "numpy", + "transonic>=0.6.2", + "pythran>=0.16.1", + "ninja", +] +dev = ["commitizen", "pre-commit", "toml", "ruff"] +doc = ["pydata-sphinx-theme", "sphinx", "myst-nb", "pip"] [tool.pdm.options] lock = ["-G", ":all"] # for Meson -# sync = ["--no-isolation"] -# install = ["--no-isolation"] +sync = ["--clean", "--no-isolation"] +install = ["--clean", "--no-isolation"] [tool.pdm.scripts] test = "pytest tests" diff --git a/setup.py b/setup.py deleted file mode 100644 index 52cf70f..0000000 --- a/setup.py +++ /dev/null @@ -1,33 +0,0 @@ -"""pylandstats setup script.""" - -import platform -from pathlib import Path - -from setuptools import setup - -# pythran imports must go AFTER setuptools imports -# See: https://github.com/pypa/setuptools/issues/309 and https://bit.ly/300HKtK -from transonic.dist import init_transonic_extensions, make_backend_files - -here = Path(__file__).parent.absolute() - -if platform.system() == "Windows": - backend = "numba" -else: - backend = "pythran" - -paths = ["pylandstats/landscape.py"] -make_backend_files([here / path for path in paths], backend=backend) - -if platform.system() == "Linux": - compile_args = ("-O3", "-DUSE_XSIMD") -else: - compile_args = ("-O3",) - -extensions = init_transonic_extensions( - "pylandstats", compile_args=compile_args, backend=backend -) - -setup( - ext_modules=extensions, -)