diff --git a/.github/workflows/check_docs.yml b/.github/workflows/check_docs.yml index 2faac24..d6cb578 100644 --- a/.github/workflows/check_docs.yml +++ b/.github/workflows/check_docs.yml @@ -24,7 +24,7 @@ jobs: path: .venv key: nipanel-with-docs-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} - name: Install nipanel (with docs) - run: poetry install -v --extras docs + run: poetry install -v --only main,docs - name: Generate docs run: poetry run sphinx-build docs docs/_build -b html -W - name: Upload docs artifact diff --git a/.github/workflows/check_nipanel.yml b/.github/workflows/check_nipanel.yml index 1170090..57363f1 100644 --- a/.github/workflows/check_nipanel.yml +++ b/.github/workflows/check_nipanel.yml @@ -24,7 +24,7 @@ jobs: path: .venv key: nipanel-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} - name: Install nipanel - run: poetry install -v --extras "dev docs examples lint test" + run: poetry install -v --with examples,docs - name: Lint run: poetry run ni-python-styleguide lint - name: Mypy static analysis (Linux) diff --git a/.github/workflows/run_unit_tests.yml b/.github/workflows/run_unit_tests.yml index 3b08287..fbbb820 100644 --- a/.github/workflows/run_unit_tests.yml +++ b/.github/workflows/run_unit_tests.yml @@ -31,7 +31,7 @@ jobs: path: .venv key: nipanel-${{ runner.os }}-py${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} - name: Install nipanel - run: poetry install -v --extras test + run: poetry install -v - name: Run unit tests and code coverage run: poetry run pytest ./tests/unit -v --cov=nipanel --junitxml=test_results/nipanel-${{ matrix.os }}-py${{ matrix.python-version }}.xml - name: Upload test results diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c7c9edf..fa385fd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,6 +21,19 @@ See [GitHub's official documentation](https://help.github.com/articles/using-pul # Getting Started +To contribute to this project, it is recommended that you follow these steps: + +1. Ensure you have poetry installed +1. Fork the repository on GitHub. +1. Install `nipanel` dependencies using `poetry install` +1. Run the regression tests on your system (see Testing section). At this point, if any tests fail, do not begin development. Try to investigate these failures. If you're unable to do so, report an issue through our [GitHub issues page](https://github.com/ni/nipanel-python/issues). +1. Write new tests that demonstrate your bug or feature. Ensure that these new tests fail. +1. Make your change. +1. Run all the regression tests again (including the tests you just added), and confirm that they all pass. +1. Run `poetry run nps lint` to check that the updated code follows NI's Python coding conventions. If this reports errors, first run `poetry run nps fix` in order to sort imports and format the code with Black, then manually fix any remaining errors. +1. Run `poetry run mypy` to statically type-check the updated code. +1. Send a GitHub Pull Request to the main repository's main branch. GitHub Pull Requests are the expected method of code collaboration on this project. + # Testing ## Simple development loop @@ -31,17 +44,17 @@ git fetch git switch --create users/{username}/{branch-purpose} origin/main # Install the project dependencies -poetry install --extras docs +poetry install --with docs # ✍ Make source changes # Run the analyzers -- see files in .github/workflows for details -poetry run ni-python-styleguide lint +poetry run nps lint poetry run mypy poetry run bandit -c pyproject.toml -r src/nipanel # Apply safe fixes -poetry run ni-python-styleguide fix +poetry run nps fix # Run the tests poetry run pytest -v @@ -54,7 +67,7 @@ start docs\_build\index.html ## Running examples 1. Run the **PythonPanelService** (not part of this repo, provided seperately) -2. `poetry install --extras examples` to get the dependencies needed for the examples +2. `poetry install --with examples` to get the dependencies needed for the examples 3. Run the examples with these command(s): - `poetry run python examples/hello/hello.py` - `poetry run python examples/all_types/all_types.py` diff --git a/examples/all_types/README.md b/examples/all_types/README.md index b71ee90..38bc03b 100644 --- a/examples/all_types/README.md +++ b/examples/all_types/README.md @@ -13,6 +13,6 @@ This is an example for `nipanel` that demonstrates all supported data types. ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run python examples/all_types/all_types.py ``` diff --git a/examples/hello/README.md b/examples/hello/README.md index c186428..f183157 100644 --- a/examples/hello/README.md +++ b/examples/hello/README.md @@ -13,6 +13,6 @@ This is a simple `nipanel` example that displays a Streamlit app. ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run python examples/hello/hello.py ``` diff --git a/examples/nidaqmx/nidaqmx_analog_input_filtering/README.md b/examples/nidaqmx/nidaqmx_analog_input_filtering/README.md index 6e4a9da..caf340c 100644 --- a/examples/nidaqmx/nidaqmx_analog_input_filtering/README.md +++ b/examples/nidaqmx/nidaqmx_analog_input_filtering/README.md @@ -17,7 +17,7 @@ Script demonstrates analog input data getting continuously acquired, and being f ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run python examples\nidaqmx\nidaqmx_analog_input_filtering\nidaqmx_analog_input_filtering.py ``` diff --git a/examples/nidaqmx/nidaqmx_analog_output_voltage/README.md b/examples/nidaqmx/nidaqmx_analog_output_voltage/README.md index 3b88f2c..a25d7ac 100644 --- a/examples/nidaqmx/nidaqmx_analog_output_voltage/README.md +++ b/examples/nidaqmx/nidaqmx_analog_output_voltage/README.md @@ -17,6 +17,6 @@ This is a nipanel example that displays an interactive Streamlit app and updates ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run examples\nidaqmx\nidaqmx_analog_output_voltage\nidaqmx_analog_output_voltage.py ``` \ No newline at end of file diff --git a/examples/nidaqmx/nidaqmx_continuous_analog_input/README.md b/examples/nidaqmx/nidaqmx_continuous_analog_input/README.md index 09185be..e387eab 100644 --- a/examples/nidaqmx/nidaqmx_continuous_analog_input/README.md +++ b/examples/nidaqmx/nidaqmx_continuous_analog_input/README.md @@ -17,6 +17,6 @@ This is a nipanel example that displays an interactive Streamlit app and updates ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run examples\nidaqmx\nidaqmx_continuous_analog_input\nidaqmx_continuous_analog_input.py ``` diff --git a/examples/niscope/nicope_ex_fetch_forever/README.md b/examples/niscope/nicope_ex_fetch_forever/README.md index b71434d..8806356 100644 --- a/examples/niscope/nicope_ex_fetch_forever/README.md +++ b/examples/niscope/nicope_ex_fetch_forever/README.md @@ -18,6 +18,6 @@ Script demonstrates NIScope waveform data getting continuously acquired. ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run examples\niscope\niscope_ex_fetch_forever\niscope_ex_fetch_forever.py ``` diff --git a/examples/niscope/niscope_binary_acquisition/README.md b/examples/niscope/niscope_binary_acquisition/README.md index 5fd59fa..d704b9c 100644 --- a/examples/niscope/niscope_binary_acquisition/README.md +++ b/examples/niscope/niscope_binary_acquisition/README.md @@ -18,6 +18,6 @@ Script demonstrates waveform data getting continuously acquired and being conver ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run examples\niscope\niscope_binary_acquisition\niscope_binary_acquisition.py ``` diff --git a/examples/niscope/niscope_configured_acquisition/README.md b/examples/niscope/niscope_configured_acquisition/README.md index 5611e5e..2aaf1ad 100644 --- a/examples/niscope/niscope_configured_acquisition/README.md +++ b/examples/niscope/niscope_configured_acquisition/README.md @@ -18,6 +18,6 @@ Script demonstrates how to configure vertical, horizontal, and triggering proper ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run examples\niscope\niscope_configured_acquisition\niscope_configured_acquisition.py ``` diff --git a/examples/performance_checker/README.md b/examples/performance_checker/README.md index 9697144..fe40401 100644 --- a/examples/performance_checker/README.md +++ b/examples/performance_checker/README.md @@ -16,6 +16,6 @@ This example measures the performance of a streamlit panel with a graph. ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run python examples/performance_checker/performance_checker.py ``` diff --git a/examples/simple_graph/README.md b/examples/simple_graph/README.md index c40b94e..a8ba9a8 100644 --- a/examples/simple_graph/README.md +++ b/examples/simple_graph/README.md @@ -16,6 +16,6 @@ This example demonstrates using `nipanel` with Streamlit to display a dynamic si ### Usage ```pwsh -poetry install --extras examples +poetry install --with examples poetry run python examples/simple_graph/simple_graph.py ``` diff --git a/poetry.lock b/poetry.lock index a58d595..9e52480 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4,10 +4,10 @@ name = "alabaster" version = "0.7.16" description = "A light, configurable Sphinx theme" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "python_version == \"3.9\" and extra == \"docs\"" +groups = ["docs"] +markers = "python_version == \"3.9\"" files = [ {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, @@ -17,10 +17,10 @@ files = [ name = "alabaster" version = "1.0.0" description = "A light, configurable Sphinx theme" -optional = true +optional = false python-versions = ">=3.10" -groups = ["main"] -markers = "python_version >= \"3.10\" and extra == \"docs\"" +groups = ["docs"] +markers = "python_version >= \"3.10\"" files = [ {file = "alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b"}, {file = "alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e"}, @@ -32,7 +32,7 @@ version = "5.5.0" description = "Vega-Altair: A declarative statistical visualization library for Python." optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "altair-5.5.0-py3-none-any.whl", hash = "sha256:91a310b926508d560fe0148d02a194f38b824122641ef528113d029fcd129f8c"}, {file = "altair-5.5.0.tar.gz", hash = "sha256:d960ebe6178c56de3855a68c47b516be38640b73fb3b5111c2a9ca90546dd73d"}, @@ -55,10 +55,9 @@ save = ["vl-convert-python (>=1.7.0)"] name = "astroid" version = "3.3.11" description = "An abstract syntax tree for Python with inference support." -optional = true +optional = false python-versions = ">=3.9.0" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "astroid-3.3.11-py3-none-any.whl", hash = "sha256:54c760ae8322ece1abd213057c4b5bba7c49818853fc901ef09719a60dbf9dec"}, {file = "astroid-3.3.11.tar.gz", hash = "sha256:1e5a5011af2920c7c67a53f65d536d65bfa7116feeaf2354d8b94f29573bb0ce"}, @@ -73,7 +72,7 @@ version = "25.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, @@ -91,10 +90,9 @@ tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" a name = "babel" version = "2.17.0" description = "Internationalization utilities" -optional = true +optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, @@ -107,10 +105,9 @@ dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)" name = "bandit" version = "1.8.6" description = "Security oriented static analyser for python code." -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "bandit-1.8.6-py3-none-any.whl", hash = "sha256:3348e934d736fcdb68b6aa4030487097e23a501adf3e7827b63658df464dddd0"}, {file = "bandit-1.8.6.tar.gz", hash = "sha256:dbfe9c25fc6961c2078593de55fd19f2559f9e45b99f1272341f5b95dea4e56b"}, @@ -136,7 +133,7 @@ version = "25.1.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "lint"] files = [ {file = "black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32"}, {file = "black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da"}, @@ -183,7 +180,7 @@ version = "1.9.0" description = "Fast, simple object-to-object and broadcast signaling" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, @@ -195,7 +192,7 @@ version = "6.1.0" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "cachetools-6.1.0-py3-none-any.whl", hash = "sha256:1c7bb3cf9193deaf3508b7c5f2a79986c13ea38965c5adcff1f84519cf39163e"}, {file = "cachetools-6.1.0.tar.gz", hash = "sha256:b4c4f404392848db3ce7aac34950d17be4d864da4b8b66911008e430bc544587"}, @@ -207,7 +204,7 @@ version = "2025.7.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["main", "docs", "examples"] files = [ {file = "certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2"}, {file = "certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995"}, @@ -219,7 +216,7 @@ version = "3.4.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["main", "docs", "examples"] files = [ {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, @@ -321,7 +318,7 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["main", "examples", "lint"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -357,21 +354,20 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main"] -markers = "(extra == \"test\" or extra == \"docs\") and sys_platform == \"win32\" or platform_system == \"Windows\"" +groups = ["main", "docs", "examples", "lint", "test"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "platform_system == \"Windows\"", docs = "sys_platform == \"win32\"", examples = "platform_system == \"Windows\"", lint = "platform_system == \"Windows\"", test = "sys_platform == \"win32\""} [[package]] name = "coverage" version = "7.10.1" description = "Code coverage measurement for Python" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"test\"" +groups = ["test"] files = [ {file = "coverage-7.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1c86eb388bbd609d15560e7cc0eb936c102b6f43f31cf3e58b4fd9afe28e1372"}, {file = "coverage-7.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b4ba0f488c1bdb6bd9ba81da50715a372119785458831c73428a8566253b86b"}, @@ -511,7 +507,7 @@ version = "2.1.0" description = "A library to handle automated deprecations" optional = false python-versions = "*" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"}, @@ -524,10 +520,10 @@ packaging = "*" name = "distro" version = "1.9.0" description = "Distro - an OS platform information API" -optional = true +optional = false python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"examples\" and sys_platform == \"linux\"" +groups = ["examples"] +markers = "sys_platform == \"linux\"" files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -537,10 +533,9 @@ files = [ name = "docutils" version = "0.21.2" description = "Docutils -- Python Documentation Utilities" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, @@ -550,10 +545,10 @@ files = [ name = "exceptiongroup" version = "1.3.0" description = "Backport of PEP 654 (exception groups)" -optional = true +optional = false python-versions = ">=3.7" -groups = ["main"] -markers = "python_version < \"3.11\" and extra == \"test\"" +groups = ["test"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, @@ -569,10 +564,9 @@ test = ["pytest (>=6)"] name = "extra-streamlit-components" version = "0.1.80" description = "An all-in-one place, to find complex or just natively unavailable components on streamlit." -optional = true +optional = false python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "extra_streamlit_components-0.1.80-py3-none-any.whl", hash = "sha256:7a8c151da5dcd1f1f97b6c29caa812a1d77928d20fc4bf42a3a4fd788274dd9e"}, {file = "extra_streamlit_components-0.1.80.tar.gz", hash = "sha256:87d6c38e07381501d8882796adef17d1c1d4e3a79615864d95c1163d2bc136f6"}, @@ -585,10 +579,10 @@ streamlit = ">=1.40.1" name = "flake8" version = "5.0.4" description = "the modular source code checker: pep8 pyflakes and co" -optional = true +optional = false python-versions = ">=3.6.1" -groups = ["main"] -markers = "python_version < \"3.12\" and extra == \"lint\"" +groups = ["lint"] +markers = "python_version < \"3.12\"" files = [ {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, @@ -603,10 +597,10 @@ pyflakes = ">=2.5.0,<2.6.0" name = "flake8" version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" -optional = true +optional = false python-versions = ">=3.8.1" -groups = ["main"] -markers = "python_version >= \"3.12\" and extra == \"lint\"" +groups = ["lint"] +markers = "python_version >= \"3.12\"" files = [ {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, @@ -621,10 +615,9 @@ pyflakes = ">=3.1.0,<3.2.0" name = "flake8-black" version = "0.3.6" description = "flake8 plugin to call black as a code style validator" -optional = true +optional = false python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "flake8-black-0.3.6.tar.gz", hash = "sha256:0dfbca3274777792a5bcb2af887a4cad72c72d0e86c94e08e3a3de151bb41c34"}, {file = "flake8_black-0.3.6-py3-none-any.whl", hash = "sha256:fe8ea2eca98d8a504f22040d9117347f6b367458366952862ac3586e7d4eeaca"}, @@ -642,10 +635,9 @@ develop = ["build", "twine"] name = "flake8-docstrings" version = "1.7.0" description = "Extension for flake8 which uses pydocstyle to check docstrings" -optional = true +optional = false python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "flake8_docstrings-1.7.0-py2.py3-none-any.whl", hash = "sha256:51f2344026da083fc084166a9353f5082b01f72901df422f74b4d953ae88ac75"}, {file = "flake8_docstrings-1.7.0.tar.gz", hash = "sha256:4c8cc748dc16e6869728699e5d0d685da9a10b0ea718e090b1ba088e67a941af"}, @@ -659,10 +651,9 @@ pydocstyle = ">=2.1" name = "flake8-import-order" version = "0.18.2" description = "Flake8 and pylama plugin that checks the ordering of import statements." -optional = true +optional = false python-versions = "*" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "flake8-import-order-0.18.2.tar.gz", hash = "sha256:e23941f892da3e0c09d711babbb0c73bc735242e9b216b726616758a920d900e"}, {file = "flake8_import_order-0.18.2-py2.py3-none-any.whl", hash = "sha256:82ed59f1083b629b030ee9d3928d9e06b6213eb196fe745b3a7d4af2168130df"}, @@ -678,7 +669,7 @@ version = "4.0.12" description = "Git Object Database" optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"}, {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"}, @@ -693,7 +684,7 @@ version = "3.1.45" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77"}, {file = "gitpython-3.1.45.tar.gz", hash = "sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c"}, @@ -777,7 +768,7 @@ version = "0.3.0.dev1" description = "Hightime Python API" optional = false python-versions = "<4.0,>=3.9" -groups = ["main"] +groups = ["main", "examples", "test"] files = [ {file = "hightime-0.3.0.dev1-py3-none-any.whl", hash = "sha256:33b05864264655929f6ecaade8a1f27070f1e3a2028e304e051825cbe6a505c9"}, {file = "hightime-0.3.0.dev1.tar.gz", hash = "sha256:e1ad569c034b61be5b906a5dc4b226af6b6fe4985f2550edc8b575a4df5fdaf0"}, @@ -789,7 +780,7 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" -groups = ["main"] +groups = ["main", "docs", "examples"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -802,10 +793,9 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, @@ -815,10 +805,10 @@ files = [ name = "importlib-metadata" version = "8.7.0" description = "Read metadata from Python packages" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "python_version == \"3.9\" and extra == \"docs\"" +groups = ["docs"] +markers = "python_version == \"3.9\"" files = [ {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"}, {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"}, @@ -840,10 +830,9 @@ type = ["pytest-mypy"] name = "iniconfig" version = "2.1.0" description = "brain-dead simple config-ini parsing" -optional = true +optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"test\"" +groups = ["test"] files = [ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, @@ -853,10 +842,9 @@ files = [ name = "isort" version = "6.0.1" description = "A Python utility / library to sort Python imports." -optional = true +optional = false python-versions = ">=3.9.0" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615"}, {file = "isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450"}, @@ -872,7 +860,7 @@ version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["main", "docs", "examples"] files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, @@ -890,7 +878,7 @@ version = "4.25.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "jsonschema-4.25.0-py3-none-any.whl", hash = "sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716"}, {file = "jsonschema-4.25.0.tar.gz", hash = "sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f"}, @@ -912,7 +900,7 @@ version = "2025.4.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af"}, {file = "jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608"}, @@ -925,10 +913,9 @@ referencing = ">=0.31.0" name = "m2r2" version = "0.3.4" description = "Markdown and reStructuredText in a single file." -optional = true +optional = false python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "m2r2-0.3.4-py3-none-any.whl", hash = "sha256:1a445514af8a229496bfb1380c52da8dd38313e48600359ee92b2c9d2e4df34a"}, {file = "m2r2-0.3.4.tar.gz", hash = "sha256:e278f5f337e9aa7b2080fcc3e94b051bda9615b02e36c6fb3f23ff019872f043"}, @@ -962,10 +949,9 @@ testing = ["pytest"] name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" -optional = true +optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -990,7 +976,7 @@ version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "docs", "examples"] files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -1059,10 +1045,9 @@ files = [ name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -optional = true +optional = false python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -1072,10 +1057,9 @@ files = [ name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -optional = true +optional = false python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -1085,10 +1069,9 @@ files = [ name = "mistune" version = "0.8.4" description = "The fastest markdown parser in pure Python" -optional = true +optional = false python-versions = "*" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, @@ -1098,10 +1081,9 @@ files = [ name = "mypy" version = "1.17.1" description = "Optional static typing for Python" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "mypy-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3fbe6d5555bf608c47203baa3e72dbc6ec9965b3d7c318aa9a4ca76f465bd972"}, {file = "mypy-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80ef5c058b7bce08c83cac668158cb7edea692e458d21098c7d3bce35a5d43e7"}, @@ -1162,7 +1144,7 @@ version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "lint"] files = [ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, @@ -1174,7 +1156,7 @@ version = "2.0.1" description = "Extremely lightweight compatibility layer between dataframe libraries" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "narwhals-2.0.1-py3-none-any.whl", hash = "sha256:837457e36a2ba1710c881fb69e1f79ce44fb81728c92ac378f70892a53af8ddb"}, {file = "narwhals-2.0.1.tar.gz", hash = "sha256:235e61ca807bc21110ca36a4d53888ecc22c42dcdf50a7c886e10dde3fd7f38c"}, @@ -1301,10 +1283,9 @@ protobuf = ">=4.21" name = "ni-python-styleguide" version = "0.4.7" description = "NI's internal and external Python linter rules and plugins" -optional = true +optional = false python-versions = "<4.0,>=3.7" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "ni_python_styleguide-0.4.7-py3-none-any.whl", hash = "sha256:4b1ae36315a53d1ef0f996cf868cfca997e3a80b431808e46c632467eacd2d09"}, {file = "ni_python_styleguide-0.4.7.tar.gz", hash = "sha256:b510bb6974bdb907d0d10f14e985e90304d5f02590f5bafab333ebbaa663ef81"}, @@ -1333,10 +1314,9 @@ toml = ">=0.10.1" name = "nidaqmx" version = "1.2.0" description = "NI-DAQmx Python API" -optional = true +optional = false python-versions = "<4.0,>=3.9" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "nidaqmx-1.2.0-py3-none-any.whl", hash = "sha256:c2b8d6d39556a7920d966bf4aff6f5229e8df3bdf3b49c24dc68a2d42dfd5d30"}, {file = "nidaqmx-1.2.0.tar.gz", hash = "sha256:faeea9889a2dae03b7e23f525a44889264a5cfbf5590558e3792c28871620c87"}, @@ -1366,10 +1346,9 @@ grpc = ["grpcio (>=1.49.0,<2.0)", "protobuf (>=4.21)"] name = "niscope" version = "1.4.9" description = "NI-SCOPE Python API" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "niscope-1.4.9-py3-none-any.whl", hash = "sha256:0b03f1e665ef22ba614defc476149500bc6ddf20e64534476d7496b4f58b30c0"}, {file = "niscope-1.4.9.tar.gz", hash = "sha256:e85493c9d3f707fac1b280352ea2c1cacd71fd733d6faf9a22a05853492fe87a"}, @@ -1386,10 +1365,9 @@ grpc = ["grpcio (>=1.59.0,<2.0)", "protobuf (>=4.21.6)"] name = "nitclk" version = "1.4.9" description = "NI-TClk Python API" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "nitclk-1.4.9-py3-none-any.whl", hash = "sha256:fa62a03fd8a820246f0adebb59f95249ad086dd407dab9102204338343833b45"}, {file = "nitclk-1.4.9.tar.gz", hash = "sha256:86835d4c8f08411433bd7c6dce26a346eef5120e476510bebdbaeb2700582cf5"}, @@ -1419,10 +1397,9 @@ typing-extensions = ">=4.13.2" name = "nodeenv" version = "1.9.1" description = "Node.js virtual environment builder" -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -1432,10 +1409,9 @@ files = [ name = "nodejs-wheel-binaries" version = "22.17.1" description = "unoffical Node.js package" -optional = true +optional = false python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "nodejs_wheel_binaries-22.17.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:1f4d208c0c087a2909b6e9e6e0735da083dc997aa74e9b302703b0798b2faa4c"}, {file = "nodejs_wheel_binaries-22.17.1-py2.py3-none-macosx_11_0_x86_64.whl", hash = "sha256:457ada98c6e3e03c7fd3f7d6a55572b70af7155c8dd908246373c63697226db6"}, @@ -1454,7 +1430,7 @@ version = "2.0.2" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "dev", "examples"] markers = "python_version < \"3.11\"" files = [ {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, @@ -1510,7 +1486,7 @@ version = "2.3.2" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.11" -groups = ["main"] +groups = ["main", "dev", "examples"] markers = "python_version >= \"3.11\"" files = [ {file = "numpy-2.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:852ae5bed3478b92f093e30f785c98e0cb62fa0a939ed057c31716e18a7a22b9"}, @@ -1595,7 +1571,7 @@ version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "docs", "examples", "lint", "test"] files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, @@ -1607,7 +1583,7 @@ version = "2.3.1" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "pandas-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:22c2e866f7209ebc3a8f08d75766566aae02bcc91d196935a1d9e59c7b990ac9"}, {file = "pandas-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3583d348546201aff730c8c47e49bc159833f971c2899d6097bce68b9112a4f1"}, @@ -1694,7 +1670,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "lint"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -1704,10 +1680,9 @@ files = [ name = "pbr" version = "6.1.1" description = "Python Build Reasonableness" -optional = true +optional = false python-versions = ">=2.6" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "pbr-6.1.1-py2.py3-none-any.whl", hash = "sha256:38d4daea5d9fa63b3f626131b9d34947fd0c8be9b05a29276870580050a25a76"}, {file = "pbr-6.1.1.tar.gz", hash = "sha256:93ea72ce6989eb2eed99d0f75721474f69ad88128afdef5ac377eb797c4bf76b"}, @@ -1720,10 +1695,9 @@ setuptools = "*" name = "pep8-naming" version = "0.15.1" description = "Check PEP-8 naming conventions, plugin for flake8" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "pep8_naming-0.15.1-py3-none-any.whl", hash = "sha256:eb63925e7fd9e028c7f7ee7b1e413ec03d1ee5de0e627012102ee0222c273c86"}, {file = "pep8_naming-0.15.1.tar.gz", hash = "sha256:f6f4a499aba2deeda93c1f26ccc02f3da32b035c8b2db9696b730ef2c9639d29"}, @@ -1738,7 +1712,7 @@ version = "11.3.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "pillow-11.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860"}, {file = "pillow-11.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad"}, @@ -1863,7 +1837,7 @@ version = "4.3.8" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "lint"] files = [ {file = "platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4"}, {file = "platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc"}, @@ -1878,10 +1852,9 @@ type = ["mypy (>=1.14.1)"] name = "pluggy" version = "1.6.0" description = "plugin and hook calling mechanisms for python" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"test\"" +groups = ["test"] files = [ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, @@ -1895,10 +1868,9 @@ testing = ["coverage", "pytest", "pytest-benchmark"] name = "prettytable" version = "3.16.0" description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "prettytable-3.16.0-py3-none-any.whl", hash = "sha256:b5eccfabb82222f5aa46b798ff02a8452cf530a352c31bddfa29be41242863aa"}, {file = "prettytable-3.16.0.tar.gz", hash = "sha256:3c64b31719d961bf69c9a7e03d0c1e477320906a98da63952bc6698d6164ff57"}, @@ -1916,7 +1888,7 @@ version = "5.29.5" description = "" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "protobuf-5.29.5-cp310-abi3-win32.whl", hash = "sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079"}, {file = "protobuf-5.29.5-cp310-abi3-win_amd64.whl", hash = "sha256:3f76e3a3675b4a4d867b52e4a5f5b78a2ef9565549d4037e06cf7b0942b1d3fc"}, @@ -1937,7 +1909,7 @@ version = "21.0.0" description = "Python library for Apache Arrow" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "pyarrow-21.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e563271e2c5ff4d4a4cbeb2c83d5cf0d4938b891518e676025f7268c6fe5fe26"}, {file = "pyarrow-21.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fee33b0ca46f4c85443d6c450357101e47d53e6c3f008d658c27a2d020d44c79"}, @@ -1991,10 +1963,10 @@ test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] name = "pycodestyle" version = "2.9.1" description = "Python style guide checker" -optional = true +optional = false python-versions = ">=3.6" -groups = ["main"] -markers = "python_version < \"3.12\" and extra == \"lint\"" +groups = ["lint"] +markers = "python_version < \"3.12\"" files = [ {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, @@ -2004,10 +1976,10 @@ files = [ name = "pycodestyle" version = "2.11.1" description = "Python style guide checker" -optional = true +optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "python_version >= \"3.12\" and extra == \"lint\"" +groups = ["lint"] +markers = "python_version >= \"3.12\"" files = [ {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, @@ -2019,7 +1991,7 @@ version = "0.9.1" description = "Widget for deck.gl maps" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "pydeck-0.9.1-py2.py3-none-any.whl", hash = "sha256:b3f75ba0d273fc917094fa61224f3f6076ca8752b93d46faf3bcfd9f9d59b038"}, {file = "pydeck-0.9.1.tar.gz", hash = "sha256:f74475ae637951d63f2ee58326757f8d4f9cd9f2a457cf42950715003e2cb605"}, @@ -2037,10 +2009,9 @@ jupyter = ["ipykernel (>=5.1.2) ; python_version >= \"3.4\"", "ipython (>=5.8.0) name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" -optional = true +optional = false python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, @@ -2056,10 +2027,9 @@ toml = ["tomli (>=1.2.3) ; python_version < \"3.11\""] name = "pyecharts" version = "2.0.8" description = "Python options, make charting easier" -optional = true +optional = false python-versions = "*" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "pyecharts-2.0.8-py3-none-any.whl", hash = "sha256:8b711ba139f39f89bc1b2a869d7adda89dc74c910d158a1f9063109fe66bc985"}, {file = "pyecharts-2.0.8.tar.gz", hash = "sha256:908dbd939862dd3c76bb53697bdb41d3cdd0b5ba48ca69a76a6085d0aa27dbdf"}, @@ -2080,10 +2050,10 @@ selenium = ["snapshot-selenium"] name = "pyflakes" version = "2.5.0" description = "passive checker of Python programs" -optional = true +optional = false python-versions = ">=3.6" -groups = ["main"] -markers = "python_version < \"3.12\" and extra == \"lint\"" +groups = ["lint"] +markers = "python_version < \"3.12\"" files = [ {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, @@ -2093,10 +2063,10 @@ files = [ name = "pyflakes" version = "3.1.0" description = "passive checker of Python programs" -optional = true +optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "python_version >= \"3.12\" and extra == \"lint\"" +groups = ["lint"] +markers = "python_version >= \"3.12\"" files = [ {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, @@ -2106,10 +2076,9 @@ files = [ name = "pygments" version = "2.19.2" description = "Pygments is a syntax highlighting package written in Python." -optional = true +optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"lint\" or extra == \"test\" or extra == \"docs\"" +groups = ["docs", "lint", "test"] files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, @@ -2122,10 +2091,9 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pyright" version = "1.1.403" description = "Command line wrapper for pyright" -optional = true +optional = false python-versions = ">=3.7" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "pyright-1.1.403-py3-none-any.whl", hash = "sha256:c0eeca5aa76cbef3fcc271259bbd785753c7ad7bcac99a9162b4c4c7daed23b3"}, {file = "pyright-1.1.403.tar.gz", hash = "sha256:3ab69b9f41c67fb5bbb4d7a36243256f0d549ed3608678d381d5f51863921104"}, @@ -2145,10 +2113,9 @@ nodejs = ["nodejs-wheel-binaries"] name = "pytest" version = "8.4.1" description = "pytest: simple powerful testing with Python" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"test\"" +groups = ["test"] files = [ {file = "pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7"}, {file = "pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c"}, @@ -2170,10 +2137,9 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests name = "pytest-cov" version = "6.2.1" description = "Pytest plugin for measuring coverage." -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"test\"" +groups = ["test"] files = [ {file = "pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5"}, {file = "pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2"}, @@ -2191,10 +2157,9 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] name = "pytest-mock" version = "3.14.1" description = "Thin-wrapper around the mock package for easier use with pytest" -optional = true +optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"test\"" +groups = ["test"] files = [ {file = "pytest_mock-3.14.1-py3-none-any.whl", hash = "sha256:178aefcd11307d874b4cd3100344e7e2d888d9791a6a1d9bfe90fbc1b74fd1d0"}, {file = "pytest_mock-3.14.1.tar.gz", hash = "sha256:159e9edac4c451ce77a5cdb9fc5d1100708d2dd4ba3c3df572f14097351af80e"}, @@ -2212,7 +2177,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -2227,7 +2192,7 @@ version = "3.8" description = "Strict separation of settings from code." optional = false python-versions = "*" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "python-decouple-3.8.tar.gz", hash = "sha256:ba6e2657d4f376ecc46f77a3a615e058d93ba5e465c01bbe57289bfb7cce680f"}, {file = "python_decouple-3.8-py3-none-any.whl", hash = "sha256:d0d45340815b25f4de59c974b855bb38d03151d81b037d9e3f463b0c9f8cbd66"}, @@ -2239,7 +2204,7 @@ version = "2025.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, @@ -2280,10 +2245,9 @@ files = [ name = "pyyaml" version = "6.0.2" description = "YAML parser and emitter for Python" -optional = true +optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"lint\" or extra == \"docs\"" +groups = ["docs", "lint"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -2346,7 +2310,7 @@ version = "0.36.2" description = "JSON Referencing + Python" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, @@ -2363,7 +2327,7 @@ version = "2.32.4" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "docs", "examples"] files = [ {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, @@ -2383,10 +2347,9 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rich" version = "14.1.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = true +optional = false python-versions = ">=3.8.0" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f"}, {file = "rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8"}, @@ -2403,10 +2366,10 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "roman-numerals-py" version = "3.1.0" description = "Manipulate well-formed Roman numerals" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "python_version >= \"3.11\" and extra == \"docs\"" +groups = ["docs"] +markers = "python_version >= \"3.11\"" files = [ {file = "roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c"}, {file = "roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d"}, @@ -2422,7 +2385,7 @@ version = "0.26.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "rpds_py-0.26.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4c70c70f9169692b36307a95f3d8c0a9fcd79f7b4a383aad5eaa0e9718b79b37"}, {file = "rpds_py-0.26.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:777c62479d12395bfb932944e61e915741e364c843afc3196b694db3d669fcd0"}, @@ -2574,10 +2537,9 @@ files = [ name = "setuptools" version = "80.9.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, @@ -2596,10 +2558,9 @@ type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.deve name = "simplejson" version = "3.20.1" description = "Simple, fast, extensible JSON encoder/decoder for Python" -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.5" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "simplejson-3.20.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f5272b5866b259fe6c33c4a8c5073bf8b359c3c97b70c298a2f09a69b52c7c41"}, {file = "simplejson-3.20.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5c0de368f3052a59a1acf21f8b2dd28686a9e4eba2da7efae7ed9554cb31e7bc"}, @@ -2719,7 +2680,7 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -2731,7 +2692,7 @@ version = "5.0.2" description = "A pure Python implementation of a sliding window memory map manager" optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"}, {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"}, @@ -2741,10 +2702,9 @@ files = [ name = "snowballstemmer" version = "3.0.1" description = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*" -groups = ["main"] -markers = "extra == \"lint\" or extra == \"docs\"" +groups = ["docs", "lint"] files = [ {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"}, {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"}, @@ -2754,10 +2714,10 @@ files = [ name = "sphinx" version = "7.4.7" description = "Python documentation generator" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "python_version == \"3.9\" and extra == \"docs\"" +groups = ["docs"] +markers = "python_version == \"3.9\"" files = [ {file = "sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"}, {file = "sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe"}, @@ -2792,10 +2752,10 @@ test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools name = "sphinx" version = "8.1.3" description = "Python documentation generator" -optional = true +optional = false python-versions = ">=3.10" -groups = ["main"] -markers = "python_version == \"3.10\" and extra == \"docs\"" +groups = ["docs"] +markers = "python_version == \"3.10\"" files = [ {file = "sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2"}, {file = "sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927"}, @@ -2829,10 +2789,10 @@ test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools name = "sphinx" version = "8.2.3" description = "Python documentation generator" -optional = true +optional = false python-versions = ">=3.11" -groups = ["main"] -markers = "python_version >= \"3.11\" and extra == \"docs\"" +groups = ["docs"] +markers = "python_version >= \"3.11\"" files = [ {file = "sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3"}, {file = "sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348"}, @@ -2866,10 +2826,9 @@ test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "pytest-xdis name = "sphinx-autoapi" version = "3.6.0" description = "Sphinx API documentation generator" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "sphinx_autoapi-3.6.0-py3-none-any.whl", hash = "sha256:f3b66714493cab140b0e896d33ce7137654a16ac1edb6563edcbd47bf975f711"}, {file = "sphinx_autoapi-3.6.0.tar.gz", hash = "sha256:c685f274e41d0842ae7e199460c322c4bd7fec816ccc2da8d806094b4f64af06"}, @@ -2889,10 +2848,9 @@ stdlib_list = {version = "*", markers = "python_version < \"3.10\""} name = "sphinx-rtd-theme" version = "3.0.2" description = "Read the Docs theme for Sphinx" -optional = true +optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl", hash = "sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13"}, {file = "sphinx_rtd_theme-3.0.2.tar.gz", hash = "sha256:b7457bc25dda723b20b086a670b9953c859eab60a2a03ee8eb2bb23e176e5f85"}, @@ -2910,10 +2868,9 @@ dev = ["bump2version", "transifex-client", "twine", "wheel"] name = "sphinxcontrib-applehelp" version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, @@ -2928,10 +2885,9 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "2.0.0" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, @@ -2946,10 +2902,9 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, @@ -2964,10 +2919,9 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" -optional = true +optional = false python-versions = ">=2.7" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, @@ -2980,10 +2934,9 @@ Sphinx = ">=1.8" name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -optional = true +optional = false python-versions = ">=3.5" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {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"}, @@ -2996,10 +2949,9 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "2.0.0" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, @@ -3014,10 +2966,9 @@ test = ["defusedxml (>=0.7.1)", "pytest"] name = "sphinxcontrib-serializinghtml" version = "2.0.0" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"docs\"" +groups = ["docs"] files = [ {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, @@ -3032,10 +2983,10 @@ test = ["pytest"] name = "stdlib-list" version = "0.11.1" description = "A list of Python Standard Libraries (2.7 through 3.13)." -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "python_version == \"3.9\" and extra == \"docs\"" +groups = ["docs"] +markers = "python_version == \"3.9\"" files = [ {file = "stdlib_list-0.11.1-py3-none-any.whl", hash = "sha256:9029ea5e3dfde8cd4294cfd4d1797be56a67fc4693c606181730148c3fd1da29"}, {file = "stdlib_list-0.11.1.tar.gz", hash = "sha256:95ebd1d73da9333bba03ccc097f5bac05e3aa03e6822a0c0290f87e1047f1857"}, @@ -3052,10 +3003,9 @@ test = ["coverage[toml]", "pytest", "pytest-cov"] name = "stevedore" version = "5.4.1" description = "Manage dynamic plugins for Python applications" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"lint\"" +groups = ["lint"] files = [ {file = "stevedore-5.4.1-py3-none-any.whl", hash = "sha256:d10a31c7b86cba16c1f6e8d15416955fc797052351a56af15e608ad20811fcfe"}, {file = "stevedore-5.4.1.tar.gz", hash = "sha256:3135b5ae50fe12816ef291baff420acb727fcd356106e3e9cbfa9e5985cd6f4b"}, @@ -3070,7 +3020,7 @@ version = "1.48.1" description = "A faster way to build and share data apps" optional = false python-versions = "!=3.9.7,>=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "streamlit-1.48.1-py3-none-any.whl", hash = "sha256:1da4081c8cc23d574c4ab66f0bb59d6a6000ecf2f06b35242d56cfe16f2bd612"}, {file = "streamlit-1.48.1.tar.gz", hash = "sha256:c6e2a9f24471746bbeaa54a288f5fdfc6e2bcf3ba9a9753fde5d49ed424391f1"}, @@ -3107,10 +3057,9 @@ sql = ["SQLAlchemy (>=2.0.0)"] name = "streamlit-echarts" version = "0.4.0" description = "Echarts custom component for Streamlit" -optional = true +optional = false python-versions = ">=3.6" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "streamlit-echarts-0.4.0.tar.gz", hash = "sha256:33cc5329b99ddce8b64ce6c4607733e02db575c379af6394a8c78ae5df14934d"}, {file = "streamlit_echarts-0.4.0-py3-none-any.whl", hash = "sha256:aa86679da0e7680ee43b7a6def31439273a686a8d71de522c55655047e80ec9b"}, @@ -3127,7 +3076,7 @@ version = "9.1.2" description = "Retry code until it succeeds" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, @@ -3143,7 +3092,7 @@ version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["main"] +groups = ["main", "docs", "examples", "lint"] files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -3155,7 +3104,7 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "docs", "lint", "test"] markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, @@ -3198,7 +3147,7 @@ version = "6.5.1" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7"}, {file = "tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6"}, @@ -3231,10 +3180,9 @@ files = [ name = "types-grpcio" version = "1.0.0.20250703" description = "Typing stubs for grpcio" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["dev"] files = [ {file = "types_grpcio-1.0.0.20250703-py3-none-any.whl", hash = "sha256:78d1bfc33b58a56697ef99e666e34be4c6887631341c75fdd28d58587aef5d9f"}, {file = "types_grpcio-1.0.0.20250703.tar.gz", hash = "sha256:baf100184e5353cb60f045fb4fd47f37a360bedf0f19581535e4c3a3a1f7912b"}, @@ -3244,10 +3192,9 @@ files = [ name = "types-protobuf" version = "6.30.2.20250822" description = "Typing stubs for protobuf" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"dev\"" +groups = ["dev"] files = [ {file = "types_protobuf-6.30.2.20250822-py3-none-any.whl", hash = "sha256:5584c39f7e36104b5f8bdfd31815fa1d5b7b3455a79ddddc097b62320f4b1841"}, {file = "types_protobuf-6.30.2.20250822.tar.gz", hash = "sha256:faacbbe87bd8cba4472361c0bd86f49296bd36f7761e25d8ada4f64767c1bde9"}, @@ -3259,11 +3206,12 @@ version = "4.14.1" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "docs", "examples", "lint", "test"] files = [ {file = "typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76"}, {file = "typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36"}, ] +markers = {docs = "python_version < \"3.11\"", test = "python_version < \"3.11\""} [[package]] name = "tzdata" @@ -3271,7 +3219,7 @@ version = "2025.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" -groups = ["main"] +groups = ["main", "examples"] files = [ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, @@ -3281,10 +3229,9 @@ files = [ name = "tzlocal" version = "5.3.1" description = "tzinfo object for the local timezone" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "tzlocal-5.3.1-py3-none-any.whl", hash = "sha256:eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d"}, {file = "tzlocal-5.3.1.tar.gz", hash = "sha256:cceffc7edecefea1f595541dbd6e990cb1ea3d19bf01b2809f362a03dd7921fd"}, @@ -3302,7 +3249,7 @@ version = "2.5.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "docs", "examples"] files = [ {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, @@ -3320,7 +3267,7 @@ version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" -groups = ["main"] +groups = ["main", "examples"] markers = "platform_system != \"Darwin\"" files = [ {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, @@ -3362,10 +3309,9 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" -optional = true +optional = false python-versions = "*" -groups = ["main"] -markers = "extra == \"examples\"" +groups = ["examples"] files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -3375,10 +3321,10 @@ files = [ name = "zipp" version = "3.23.0" description = "Backport of pathlib-compatible object wrapper for zip files" -optional = true +optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "python_version == \"3.9\" and extra == \"docs\"" +groups = ["docs"] +markers = "python_version == \"3.9\"" files = [ {file = "zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e"}, {file = "zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166"}, @@ -3392,14 +3338,7 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] -[extras] -dev = ["numpy", "numpy", "numpy", "types-grpcio", "types-protobuf"] -docs = ["Sphinx", "m2r2", "sphinx-autoapi", "sphinx-rtd-theme", "toml"] -examples = ["extra-streamlit-components", "nidaqmx", "niscope", "streamlit-echarts"] -lint = ["bandit", "mypy", "ni-python-styleguide", "pyright"] -test = ["hightime", "pytest", "pytest-cov", "pytest-mock"] - [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0,!=3.9.7" -content-hash = "6ced3c92dbf3577f96316f858f4c4ab08efed70934a4f4e5bb0b55044f634a05" +content-hash = "f69f750c851b8db71435615ba4b2929413e2a51a4b690902378a965d67beb0f1" diff --git a/pyproject.toml b/pyproject.toml index 1dfd60b..0917a27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,63 +2,74 @@ name = "nipanel" version = "0.1.0" description = "NI Panel Python API" -authors = [ - {name = "NI", email = "opensource@ni.com"} -] +authors = [{name = "NI", email = "opensource@ni.com"}] readme = "README.md" -requires-python = ">=3.9,<4.0,!=3.9.7" # Exclude 3.9.7 due to streamlit not supporting it -dependencies = [ - "grpcio>=1.49.0,<2.0", - "protobuf>=4.21", - "ni-measurement-plugin-sdk>=2.4.0dev1", - "typing-extensions>=4.13.2", - "streamlit>=1.24", - "nitypes>=0.1.0dev8", - "numpy>=1.22", - "debugpy>=1.8.1", - "ni-protobuf-types>=0.1.0dev3", - "ni-panels-v1-proto>=0.1.0dev1", -] +dynamic = ["dependencies"] -[project.optional-dependencies] -dev = [ - "types-grpcio>=1.0", - "types-protobuf>=4.21", - "numpy>=1.22; python_version>='3.9' and python_version<'3.12'", - "numpy>=1.26; python_version>='3.12' and python_version<'3.13'", - "numpy>=2.1; python_version>='3.13'", -] -lint = [ - "bandit[toml]>=1.7", - "ni-python-styleguide>=0.4.1", - "mypy>=1.0", - "pyright[nodejs]>=1.1.400", -] -test = [ - "pytest>=7.2", - "pytest-cov>=4.0", - "pytest-mock>=3.0", - "hightime>=0.2.2", -] -docs = [ - "Sphinx>=8.2; python_version>='3.11'", - "sphinx-rtd-theme>=1.0.0", - "sphinx-autoapi>=1.8.4", - "m2r2>=0.3.2", - "toml>=0.10.2", -] -examples = [ - "streamlit-echarts>=0.4.0", - "extra-streamlit-components>=0.1.80", - "nidaqmx>=0.8.0", - "niscope>=1.4.9", -] +[project.urls] +repository = "https://github.com/ni/nipanel-python" [tool.poetry] packages = [{ include = "nipanel", from = "src" }] +requires-poetry = '>=2.1,<3.0' + +[tool.poetry.dependencies] +python = ">=3.9,<4.0,!=3.9.7" # Exclude 3.9.7 due to streamlit not supporting it +grpcio = {version=">=1.49.0,<2.0"} +protobuf = {version=">=4.21"} +ni-measurement-plugin-sdk = {version=">=2.4.0dev1", allow-prereleases = true } +typing-extensions = ">=4.13.2" +streamlit = ">=1.24" +nitypes = {version=">=0.1.0dev8", allow-prereleases=true} +numpy = ">=1.22" +debugpy = ">=1.8.1" +ni-protobuf-types = { version = ">=0.1.0dev3", allow-prereleases = true } +ni-panels-v1-proto = { version = ">=0.1.0dev1", allow-prereleases = true } + +[tool.poetry.group.dev.dependencies] +types-grpcio = ">=1.0" +types-protobuf = ">=4.21" +numpy = [ + { version = ">=1.22", python = ">=3.9,<3.12" }, + { version = ">=1.26", python = ">=3.12,<3.13" }, + { version = ">=2.1", python = "^3.13" }, +] + +[tool.poetry.group.lint.dependencies] +bandit = { version = ">=1.7", extras = ["toml"] } +ni-python-styleguide = ">=0.4.1" +mypy = ">=1.0" +pyright = { version = ">=1.1.400", extras = ["nodejs"] } + +[tool.poetry.group.test.dependencies] +pytest = ">=7.2" +pytest-cov = ">=4.0" +pytest-mock = ">=3.0" +# Use a prerelease version of hightime for testing. +hightime = { version = ">=0.2.2", allow-prereleases = true } + +[tool.poetry.group.docs] +optional = true + +[tool.poetry.group.docs.dependencies] +# The latest Sphinx requires a recent Python version. +Sphinx = { version = ">=8.2", python = "^3.11" } +sphinx-rtd-theme = ">=1.0.0" +sphinx-autoapi = ">=1.8.4" +m2r2 = ">=0.3.2" +toml = ">=0.10.2" + +[tool.poetry.group.examples] +optional = true + +[tool.poetry.group.examples.dependencies] +streamlit-echarts = ">=0.4.0" +extra-streamlit-components = "^0.1.80" +nidaqmx = { version = ">=0.8.0", allow-prereleases = true } +niscope = "^1.4.9" [build-system] -requires = ["poetry-core>=1.8.0"] +requires = ["poetry-core>=2.1.0,<3.0"] build-backend = "poetry.core.masonry.api" [tool.ni-python-styleguide] @@ -96,4 +107,3 @@ testpaths = ["src/nipanel", "tests"] [tool.pyright] include = ["examples/", "src/", "tests/"] -exclude = ["examples/nidaqmx/nidaqmx_continuous_analog_input.py","examples/niscope/niscope_ex_fetch_forever.py"] \ No newline at end of file