From 7386ea2dcab8dc8d0caa2fb9c1300d219317d59f Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Thu, 7 Mar 2024 12:21:00 -0500 Subject: [PATCH 01/17] Adding link to documentation --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b3b4793..e51f5d1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,6 +51,6 @@ sphinx-rtd-theme = "^2.0.0" [tool.poetry.urls] "Qoherent" = "https://www.qoherent.ai/" -"Documentation" = "" +"Documentation" = "http://docs.radiointelligence.io/" "Source" = "https://github.com/qoherent/ria" "Issues" = "https://github.com/qoherent/ria/issues" From 090b3d5d730758da6f9a59735270bedfb83bb40c Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Thu, 7 Mar 2024 12:22:07 -0500 Subject: [PATCH 02/17] Developed diagnostics.print_version_info module to collecting system, dependency, and CUDA information, and printing out this information. --- ria/__init__.py | 4 + ria/diagnostics/__init__.py | 0 ria/diagnostics/print_version_info.py | 120 ++++++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 ria/diagnostics/__init__.py create mode 100644 ria/diagnostics/print_version_info.py diff --git a/ria/__init__.py b/ria/__init__.py index e69de29..87c3142 100644 --- a/ria/__init__.py +++ b/ria/__init__.py @@ -0,0 +1,4 @@ +from importlib.metadata import version +__version__ = version('ria') + +from ria.diagnostics.print_version_info import print_version_info diff --git a/ria/diagnostics/__init__.py b/ria/diagnostics/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ria/diagnostics/print_version_info.py b/ria/diagnostics/print_version_info.py new file mode 100644 index 0000000..cd5ab87 --- /dev/null +++ b/ria/diagnostics/print_version_info.py @@ -0,0 +1,120 @@ +""" +This module includes functions for collecting system, dependency, and CUDA information, and printing out this +information. + +This module draws inspiration from Pandas' util._print_versions.py module. +""" +import locale +import os +import platform +import struct +import sys +import torch + +from importlib.metadata import version, PackageNotFoundError +from typing import Any + + +def print_version_info() -> None: + """Print out system, dependency, and CUDA information. + + This information is valuable for debugging, and we kindly ask contributors to include + the result when submitting a bug report. + + :return: None + """ + print(f"\nRIA Core Version: {version('ria')}") + + sys_info = _get_sys_info() + cuda_info = _get_cuda_info() + dependency_info = _get_dependency_info() + + print("\nSYSTEM") + print("------") + max_len = max(len(x) for x in sys_info) + for k, v in sys_info.items(): + print(f"{k:<{max_len}}: {v}") + + print("\nCUDA") + print("----") + max_len = max(len(x) for x in cuda_info) + for k, v in cuda_info.items(): + print(f"{k:<{max_len}}: {v}") + + print("\nDEPENDENCIES") + print("------------") + max_len = max(len(x) for x in dependency_info) + for k, v in dependency_info.items(): + print(f"{k:<{max_len}}: {v}") + + print("\nPlease include the above version information in all bug reports.\n") + + +def _get_sys_info() -> dict[str, Any]: + """ :return: A dictionary of relevant system information. """ + uname_result = platform.uname() + language_code, encoding = locale.getlocale() + + return { + "commit": "", # TODO: Get commit hash. + "python": ".".join([str(i) for i in sys.version_info]), + "python-bits": struct.calcsize("P") * 8, + "OS": uname_result.system, + "OS-release": uname_result.release, + "Version": uname_result.version, + "machine": uname_result.machine, + "processor": uname_result.processor, + "byteorder": sys.byteorder, + "LC_ALL": os.environ.get("LC_ALL"), + "LANG": os.environ.get("LANG"), + "LOCALE": {"language-code": language_code, "encoding": encoding}, + } + + +def _get_cuda_info() -> dict[str, Any]: + """:return: A dictionary of relevant cuda information. """ + if torch.cuda.is_available(): + return { + "available": True, + "device": torch.cuda.get_device_name(0), + "version": torch.version.cuda, + "count": torch.cuda.device_count(), + "index": torch.version.cuda + } + + else: + return { + "available": False, + "device": None, + "version": None, + "count": None, + "index": None + } + + +def _get_dependency_info() -> dict[str, Any]: + """:return: A dictionary containing project dependencies along with their respective version numbers. """ + deps = [ + # required: + "matplotlib", + "torch", + "dateutil", + # install/build: + "poetry" + "pip", + # test: + "pytest", + # docs: + "sphinx", + # other: + ] + + result: dict[str, Any] = {} + for d in deps: + try: + result[d] = version(d) + except PackageNotFoundError: + # TODO: Find dependency version information for packages without metadata. + result[d] = "COULD NOT RESOLVE" + + return result From 0dc693a9285423f6c1916dd209710bcfcb2d81dd Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Thu, 7 Mar 2024 12:24:02 -0500 Subject: [PATCH 03/17] Increasing version number to 0.1.2. --- pyproject.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e51f5d1..cff0729 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ria" -version = "0.1.0" +version = "0.1.2" description = "Let's build intelligent radios together. πŸ“‘πŸš€" readme = "README.md" license = "Proprietary" @@ -31,7 +31,6 @@ classifiers = [ "Typing :: Typed" ] - [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" From 1c84e01af182e3eacdc5e723deb9c1a3f7cad7ac Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 13:40:21 -0500 Subject: [PATCH 04/17] Adding issue and pull request templates --- .github/ISSUE_TEMPLATE/bug-report.md | 61 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature-request.md | 56 +++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 42 ++++++++++++++++ 3 files changed, 159 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug-report.md create mode 100644 .github/ISSUE_TEMPLATE/feature-request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 0000000..f2c1b41 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,61 @@ +--- +name: Bug report +about: Report a bug +title: 'BUG: [A clear and concise title, including the ''BUG: '' prefix]' +labels: bug 🐞, needs triage πŸ“₯ +assignees: '' + +--- + +Thank you for submitting a bug report. We value your feedback. Before proceeding with a new issue, please take a +moment to review the issue tracker for any existing reports related to the same bug. + +Many user applications of RIA Core require interfacing with external radio hardware. Prior to submitting a +bug report, please confirm that the issue you're experiencing is attributable to RIA Core, rather than your +hardware/driver configuration. If you are unsure, feel free to ask in our [support formum](https://github.com/qoherent/michael/discussions/categories/support). + +**Description:** +[A clear and concise description of the issue.] + + +**Project Area:** +Which aspect of RIA Core are you experiencing issues with? +- [ ] An importable module (e.g., using `from ria import curate` in your Python project) +- [ ] A project script (e.g., executing `ria curate` from the command line) +- [ ] Project documentation or tutorials, including code snippets and graphics +- [ ] CI or DevOps, including our Pytest test suite + + +**Steps to Reproduce:** +[Steps to reproduce. Please add any relevant scripts or code snippets, although they should be self-contained.] + + +**Expected Behavior:** +[A clear and concise description what you expected to happen.] + + +**Actual Behavior:** +[A clear and concise description of what actually happened.] + + +**Screenshots** +[Add screenshots to help explain the problem.] + + +**Version and Environment Information:** +[Replace this line with the output of `ria.print_version_info()`.] + + +**Radio Hardware and Driver Information:** +[Please provide any relevant information about your radio hardware and driver +configurations, including the manufacturer and model number or your radio, as well as +driver version details.] + + +**Additional context:** +[Any additional details or context about the issue.] + + +Once your bug report has been submitted, it will be triaged by an authorized Qoherent team member. +Please wait for the issue to be triaged before starting development. This is to ensure your efforts +are focused effectively. Thank you for your patience and understanding. diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md new file mode 100644 index 0000000..c17727c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -0,0 +1,56 @@ +--- +name: Feature request +about: Propose an enhancement or new feature +title: "[Add a clear and concise title]" +labels: enhancement ✨, needs triage πŸ“₯ +assignees: '' + +--- + +Thank you for submitting a feature request. We value your feedback. Before proceeding with a new issue, please +take a moment to review the issue tracker for any existing requests related to the same feature. + +Please be aware that RIA Core serves as the open-source core of a broader software engineering initiative. +The feature you're requesting might already be available within [RIA Hub](https://riahub.ai/) or through an +alternative Qoherent solution. In such cases, we will, during our triaging process, provide any relevant +information in the issue comments and label the request with `wont fix ❌`. + +**Description:** +[A clear and concise description of the feature you'd like to see implemented.] + + +**Project Area:** +To which aspect of RIA Core does this request pertain? +- [ ] The enhancement or addition of an importable module (i.e., using `import ria` in your Python project) +- [ ] The enhancement or addition or a project script (i.e., executing `ria curate` from the command line) +- [ ] Our radio interface tools, such as requesting support for a new radio +- [ ] Project documentation or tutorials, including new or improved code snippets and graphics +- [ ] CI and DevOps, such as new or improved unit tests or GitHub workflows + + +**Is your feature request related to a problem you're having? If so, please describe:** +[A clear and concise description of the problem you're experiencing. E.g., I'm always frustrated when ...] + + +**Is your feature request related to a specific project or research initiative in which you're currently involved? +If so, please describe:** +[A clear and concise description of how your feature request relates to any specific projects or research +initiatives in which you are currently involved.] + + +**Please share any ideas or suggestions you have for potential solutions:** +[A clear and concise description of any ideas or suggestions you have for potential solutions. +Please include any relevant screenshots or design mockups.] + + +**Describe alternatives you've considered:** +[A clear and concise description of any alternative solutions, products, or features you've considered.] + + +**Additional context:** +[Any additional details or context about the requested feature.] + + +Once your feature request has been submitted, it will be triaged by an authorized Qoherent team member. +Please wait for the issue to be triaged before starting development. This is to ensure your efforts are +focused effectively. Thank you for your patience and understanding. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..3849edc --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,42 @@ +**Description:** +[Provide a clear and concise description of the changes and their purpose. Please include any relevant screenshots or +design notes.] + + +**Related Issue:** +[Please reference any issues being addressed by this pull request, as well as any related issues.] + + +**Outstanding Sub-Issues:** +[If there are any outstanding sub-issues or parts of the addressed issues that have not yet been wholly addressed by +this pull request, please describe them here.] + + +**Tips for the Reviewer:** +[Please provide any information to assist the reviewer in examining your code, such as specifying the order +in which files should be reviewed or highlighting anything they should look out for.] + + +**Hardware/Driver Requirements:** +[Please let us know if any specific radio hardware or drivers are required to test and review these changes.] + + +**Checklist:** +Please be sure to check all boxes honestly. This is to ensure a smooth development process, and to reduce the +likelihood of needing to make additional changes later on. +- [ ] I understand that changes authored by individuals who have not signed a Contributor License Agreement (CLA), +or whose authorship we cannot verify, may not be accepted. +- [ ] These contribution address a triaged issue. +- [ ] I have performed a self-review of my code and my changes generate no new warnings. +- [ ] I have included unit tests for my code contributions, and all tests are passing. +- [ ] The docstrings are complete, include doctests demonstrating usage, and are properly formatted. +I have verified that any updates to the project documentation are complete and look okay. +- [ ] I have confirmed all my code contributions are formatted in accordance with the project's Flake8 style +configuration. +- [ ] No unnecessary changes have been made to the Poetry lock file, but `pyproject.toml` and the Poetry lock file +have been updated to reflect any dependency changes. +- [ ] I acknowledge that upon the submission of this pull request, Qoherent will assume the copyright for this +contribution. + +A heartfelt thank you from everyone at Qoherent and the broader radio community for taking the time to contribute to +RIA Core. πŸ™πŸ’– From 25176a1d31d96186f7704ece6a2a589e88baa590 Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 14:20:32 -0500 Subject: [PATCH 05/17] Adding community health documents --- .github/CODE_OF_CONDUCT.md | 27 ++-- .github/CODING.md | 245 +++++++++++++++++++++++++++++++++ .github/CONTRIBUTING.md | 70 ++++++++++ .github/DIVERSITY_STATEMENT.md | 14 ++ .github/SECURITY.md | 2 + 5 files changed, 345 insertions(+), 13 deletions(-) create mode 100644 .github/CODING.md create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/DIVERSITY_STATEMENT.md create mode 100644 .github/SECURITY.md diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index f081a00..8f15189 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -1,22 +1,23 @@ -Welcome to RIA Core! We strive to maintain a friendly, respectful, and inclusive community where everyone feels -valued and heard. To ensure a positive experience for all contributors, we kindly insist that you adhere to the -following guidelines: +Welcome to RIA Core by Qoherent! πŸ‘‹ -**Be Respectful:** We treat others with kindness, empathy, and respect. +We strive to maintain a respectful, inclusive, and collaborative community where everyone feels valued and heard. +To ensure a positive experience for all contributors, we kindly insist that you adhere to the following guidelines: -**Be Inclusive:** We welcome diverse perspectives and constructive feedback, but not personal attacks, discrimination, -harassment or derogatory language. +**🌟 Be Respectful:** We believe in treating others with kindness, empathy, and respect. +Please keep your interactions and communications civil, and refrain from self-promotion or +engaging in any disruptive, unethical, or inappropriate behavior. -**Be Professional:** We maintain professionalism in all our interactions and communications. Please refrain from -self-promotion or engaging in disruptive behavior. +**🌍 Be Inclusive:** We welcome diverse perspectives and constructive feedback, but not personal attacks, discrimination, +harassment, or insulting/derogatory language. Please refer to our [Diversity Statement](./DIVERSITY_STATEMENT.md) for +additional information regarding our commitment to inclusivity. -**Be Collaborative:** We believe in the power of teamwork and cooperation, support one another, and -celebrate each other's successes. +**🀝 Be Collaborative:** Teamwork makes the dream work! We believe in supporting one another and in celebrating +each other's successes. If you encounter any violations of this code of conduct or witness inappropriate behavior, -please report it to [info@qoherent.ai](info@qoherent.ai) promptly, so we can address the issue. +please report it to [info@qoherent.ai](mailto:info@qoherent.ai) promptly, so we can address the issue. By participating in this project, you agree to abide by this code of conduct. Violations may result in consequences, -including but not limited to warnings, temporary or permanent bans, or removal of contributions. +including but not limited to warnings, temporary or permanent bans, or removal or editing of contributions. -Thank you for helping us maintain a positive and welcoming community! Let's build intelligent radios, together! +Thank you for helping us maintain a positive and welcoming community! πŸ™ diff --git a/.github/CODING.md b/.github/CODING.md new file mode 100644 index 0000000..80487ca --- /dev/null +++ b/.github/CODING.md @@ -0,0 +1,245 @@ +Qoherent welcomes code contributions from all participants who have signed a Contributor License Agreement (CLA). +If you're interested in contributing to our codebase but haven't yet completed a CLA, please reach out to us at +[info@qoherent.ai](mailto:info@qoherent.ai) for more details. + +Not a coder? There are many other ways to get involved with the project. Please check out our +[Contributing Guidelines](./CONTRIBUTING.md) for additional opportunities and information. + + +## Coding guidelines + +To ensure smooth development, reduce frustration, and minimize conflicts, we kindly insist that all code +contributions must adhere to these guidelines. + +Think there's a better approach? We encourage challenges and discussions to continuously enhance and +refine our approach. You're welcome to present your ideas and rationale on our [ideas forum](https://github.com/qoherent/michael/discussions/categories/ideas). + +### General guidelines + +RIA Core is a Python project. However, we occasionally integrate snippets of C where necessary to enhance performance. + +Limit lines to 119 characters. This includes code, comments, docstrings. + +All contributions must include appropriate unit tests and doctests. Please refer to our [testing guidelines](#testing-guidelines) +for more information. + +All contributions must be well documented, with ample inline comments and with a copious amount of complete +docstrings. Please refer to our [documentation guidelines](#documentation-guidelines) for more information. + +### Python-specific guidelines + +We use [Flake8](https://flake8.pycqa.org/en/latest/) for code linting and style enforcement. All Python code must +be formatted in accordance with the Flake8 configuration settings defined in the [tox.ini](../tox.ini) file +in the root of the project. + +To ensure a consistent development environment, this project uses [Poetry](https://python-poetry.org/) for dependency management. +[Start here](https://python-poetry.org/docs/basic-usage/) for information on basic Poetry usage. Please refrain from making unnecessary updates to the +`poetry.lock` file. + +RIA Core is a typed project. Please include complete type annotations for all function parameters and return values. + +Prefer [keyword arguments](https://docs.python.org/3/glossary.html#term-argument?highlight=keyword%20argument) over positional arguments. + +### C-specific guidelines + +Coming soon: We are still developing our C-specific coding guidelines and the corresponding continuous integration (CI) +tests. In the meantime, please format your C code in accordance with [Google's C/C++ Style Guide](https://google.github.io/styleguide/cppguide.html). + +### Documentation guidelines + +We use [Sphinx](https://www.sphinx-doc.org/en/master/) to auto-generate the project's [docs](http://docs.radiointelligence.io/). All docstrings must adhere to the +[Sphinx docstring format](https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html#the-sphinx-docstring-format). + +Types mentioning in the docstring should be expressed in plain English rather than using Python's type hint syntax +For example, write "int or float, optional" instead of "Optional[int | float]". + +Please refer to [PEP-257](https://peps.python.org/pep-0257/) for further docstring conventions. + +### Testing guidelines + +We use [Pytest](https://docs.pytest.org/en/8.0.x/) to make our unit testing more efficient and expressive. To run our Pytest test suite: + +1. [Activate a Poetry shell](https://python-poetry.org/docs/basic-usage/#activating-the-virtual-environment), ensuring that the `test` dependency group, which includes all the necessary dependencies for running tests, +are installed. + + +2. Run tests with `poetry run pytest`. + +Please include doctests as they provide clear and accessible examples of how to use RIA Core. + +### Guidelines for Git and GitHub + +RIA Core development adheres to the standard [Git feature branch workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow). More information can be found in our +section on [Our development process](#our-development-process). + +Branch names should begin with the corresponding issue number. For instance, if you are addressing issue #7 +regarding README updates, your branch should be named as follows: "7-readme-updates". + +Please avoid making changes to the commit history of open pull requests. + +Please keep your commits [atomic](https://www.pauline-vos.nl/atomic-commits/). This makes your changes easier to understand and review. + +Please keep your pull requests concise and focused. We recommend limiting your pull requests to around 300 lines. + +## Building docs + +We use [Sphinx](https://www.sphinx-doc.org/en/master/) to auto-generate the project's [docs](http://docs.radiointelligence.io/). When making changes, we use `sphinx-autobuild` to +auto-detect these changes. This means you only need to build the docs once, and any changes to the source code or +configurations are live-reload in the browser. + +1. [Activate a Poetry shell](https://python-poetry.org/docs/basic-usage/#activating-the-virtual-environment), ensuring that the `docs` dependency group, which includes all the necessary +dependencies for building the docs, are installed. + + +2. Navigate to the `docs` directory and execute: +```commandline +make clean +sphinx-autobuild ./source ./build/html +``` + + +3. A working copy of the docs will now be available at http://localhost:8000/, and any changes made to the source +code or configurations will be automatically reflected there. + + +**Important:** if you've added new modules, you may need to execute `sphinx-apidoc -o ./source ../ria` (from +within the `docs` directory) and manually update the `index.rst` files to include links to any the new +pages. More information on how we use sphinx-apidoc to auto-generate documentation from the docstrings can be +found [here](https://sphinx-rtd-tutorial.readthedocs.io/en/latest/build-the-docs.html#generating-documentation-from-docstrings). + + +## Our development process + +Contributors develop on their own forked copy of the RIA Core project and propose changes to the upstream project +through [pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests). + +Proposed changes must pass our suite of CI tests and be approved by an authorized Qoherent team member prior to being +merged in to the upstream repository. + +If you encounter any issues with our development process, please don't hesitate to [reach out for support](https://github.com/qoherent/ria/discussions/categories/support). + +### Initial setup for first-time contributors +If you are a first-time contributor, please complete the following steps to initialize your development environment: + +1. Please ensure you have reviewed our [Code of Conduct](./CODE_OF_CONDUCT.md), [Contributing Guidelines](./CONTRIBUTING.md), and the above +[Coding Guidelines](#coding-guidelines). Additionally, ensure you've reviewed and signed a Contributor License Agreement. + + +2. Ensure that [Python](https://www.python.org/downloads/), [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), and [Poetry](https://python-poetry.org/docs/) are installed on the computer you intend to use for +development, and that you're logged into your account on [GitHub](https://github.com/). + + +3. Visit the [RIA Core](https://github.com/qoherent/ria) project on GitHub, and use the [Fork button](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo#forking-a-repository) to create your own copy of the project. + + +4. Clone down your project fork to your local computer: +```commandline +git clone https://github.com/your-username/ria.git +``` + + +5. Add RIA Core as an upstream repository: +```commandline +git remote add upstream https://github.com/qoherent/ria.git +``` + + +6. Pull the latest changes from upstream: +```commandline +git pull upstream main +``` + + +7. Initialize Poetry from the `pyproject.toml` file at the root of the project: +```commandline +poetry init +``` + +Give yourself a pat on the back - you're now set up and ready to begin development! πŸŽ‰ + + +### Author your contribution + +**Important:** First-time contributors should complete the prerequisite [setup instructions](#initial-setup-for-first-time-contributors) before starting +development. Please do not begin development on any issues until the `needs triage πŸ“₯` label has been removed. This +is to ensure your efforts are focused effectively. We appreciate your patience and understanding. + +1. Pull the latest changes from upstream and ensure that your Poetry environment is up-to-date. This is important +to ensure you are working off the latest version of the project and to minimize merge conflicts, as well as to +maintain a consistent development environment with other contributors. +```commandline +git pull upstream main +poetry update +``` + + +2. Create a new local feature branch. It is important to choose a meaningful branch name since it will +appear in the merge message. Keep in mind that branch names should start with the corresponding issue number. +```commandline +git checkout -b \#-my-feature-branch +``` + + +3. Develop your contribution on your local feature branch, committing regularly as you progress. Don't forget to +include tests for and document your code. + + +4. Ensure all unit tests are passing: +```commandline +poetry run pytest +``` + + +4. Confirm your changes are formatted in accordance with our Flake8 style configuration: +```commandline +flake8 . +``` + + +5. Ensure that docstrings are properly formatted in the [Sphinx docstring format](https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html#the-sphinx-docstring-format) and that the Sphinx +documentation, which is generated from these docstrings in a semi-automatic manner, looks okay. Please refer +to [Building docs](#building-docs) for more information on building, inspecting, and updating the project's docs. + + +5. Once you have completed development, all tests are passing, and there are no Flake8 errors or warnings, push +your changes to your project fork on GitHub. This will require you to [authenticate with GitHub](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/about-authentication-to-github). + + +### Submit your contribution for review + +1. Ensure your changes align with our [Coding Guidelines](#coding-guidelines). + + +2. If your change introduces a deprecation, we ask that you discuss this on the [discussion forum](https://github.com/qoherent/ria/discussions/categories/general) prior +to submitting a pull request. + + +3. Submit your pull request: + 1. Navigate to your fork on GitHub: [https://github.com/your-username/ria.git](). + 2. Your new feature branch will show up with a green Pull Request button. + 3. Fill out our pull request template honestly and to the best of your abilities, ensuring that you check + all checkboxes. β˜‘οΈ + + +4. Your pull request will trigger a suite of CI tests to build and test the code on your branch, as well as to +check for code coverage and style issues. If any of these CI tests fail, you will need to make changes. + + +5. Once your proposed changes pass our suite of automated tests, they will be reviewed by an authorized member of +the Qoherent development team, who will provide inline and/or general feedback. If your pull request hasn't been +reviewed within a week, please ping us on the [discussion forum](https://github.com/qoherent/ria/discussions/categories/general) to ensure it hasn't slipped through the cracks. + + +6. Once your changes have been approved by an authorized Qoherent team member, we will merge them into the +upstream repository. You receive an automated notification from GitHub once your pull request has been merged, at +which time the branch containing your changes can then be safely deleted. + + +7. If your contribution introduces a new feature or significantly alters functionality, we kindly ask that you post +on the [discussion forum](https://github.com/qoherent/ria/discussions/categories/general) to explain your changes. This is especially important if your changes introduce any +user-facing modifications we need to mention in the release notes. + + +A heartfelt thank you from everyone at Qoherent and the broader radio community for taking the time to contribute +to RIA Core. We understand that you're busy and deeply appreciate your time and expertise in helping us in our mission +to drive the creation of intelligent radios! πŸ™πŸ’– diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..a56686f --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,70 @@ +Thank you for your interest in contributing to RIA Core! πŸš€ + +There are many ways to contribute to the project, including code contributions, +documentation and tutorial enhancements and translations, providing support in the discussions forum, +and graphic design. + +If you’re unsure where to start or how your skills fit in, please reach out on our [discussion board](https://github.com/qoherent/ria/discussions/categories/general). +If you prefer to talk privately, please feel free to email us at [info@qoherent.ai](mailto:info@qoherent.ai). + +Qoherent is dedicated to fostering a friendly, safe, and inclusive environment for everyone. +We kindly insist that all contributors review and adhere to our [Code of Conduct](.github/CODE_OF_CONDUCT.md). + + +## Bug reports and feature requests + +We value your feedback, are always eager to hear about any issues you encounter or features you'd like to see +implemented. Kindly submit bug reports and feature requests via the GitHub issue tracker [here](https://github.com/qoherent/ria/issues). + +Upon submission, bug reports and feature requests will be triaged internally by an authorized Qoherent team member +to confirm alignment with our [Code of Conduct](./CODE_OF_CONDUCT.md) and organizational objectives. + +To request features tailored for the specialized needs of your project or research initiative, or that may not align +with the needs of the general community, please [contact us](https://www.qoherent.ai/contact/) directly. We'd be +happy to collaborate with you. + + +## Engaging in the discussions forum + +We encourage community engagement in the [discussions forum](https://github.com/qoherent/ria/discussions), especially in the [support channel](https://github.com/qoherent/ria/discussions/categories/support). Engaging +in the forum is a great opportunity to learn, meet potential future collaborators, and show off your projects. + +Please ensure that your posts and communications align with our [Code of Conduct](./CODE_OF_CONDUCT.md). + + +## Documentation and tutorial enhancements + +We're always excited to welcome contributors to our documentation and tutorial materials. Whether you're passionate +about improving docstrings, writing tutorials, crafting how-to guides, providing in-depth explanations, or translating +our content into other languages, community contributions play a vital role in enhancing the +usability and accessibility of RIA Core. + +While company branding and identity graphics, as well as marketing materials, are managed internally, +we warmly welcome community contributions of illustrations, diagrams, and visualizations for our documentation +and educational materials. + +If you are interested in contributing to our documentation and tutorial materials, please reach out on our +[discussion forum](https://github.com/qoherent/ria/discussions/categories/general). + + +## Code contributions + +All code in this repository, unless otherwise specified, is the exclusive copyright of Qoherent Inc. + +To ensure your protection as a code contributor, as well as the protection of Qoherent and its users, we require all +external contributors to sign a Contributor License Agreement (CLA). The CLA does not alter your rights +under the [project licence](../LICENSE), but it does transfer the copyright of your contributions to Qoherent Inc. +For further details or to complete the CLA, please contact us at [info@qoherent.ai](mailto:info@qoherent.ai). + +Trivial fixes or documentation updates may be accepted without prior submission of a CLA, but we reserve the +right and responsibility to reject any changes authored by individuals who have not signed a CLA, or whose +authorship we cannot verify. + +Please do not begin development on any issues until the `needs triage πŸ“₯` label has been removed. This is to ensure +your efforts are focused effectively. We appreciate your patience and understanding. + +Since all proposed changes require approval from an authorized Qoherent team member prior to merge, we recommend you +leave the code review process to us. + +For more information on authoring code contributions and to learn about our development process, please +refer to our [coding guidelines](./CODING.md). diff --git a/.github/DIVERSITY_STATEMENT.md b/.github/DIVERSITY_STATEMENT.md new file mode 100644 index 0000000..f39007d --- /dev/null +++ b/.github/DIVERSITY_STATEMENT.md @@ -0,0 +1,14 @@ +At Qoherent, we believe diversity promotes creativity, innovation, and understanding. + +We warmly welcome and encourage participation from everyone, regardless of how they identify or may be perceived, +to the extent that participation does not conflict with our [Code of Conduct](./CODE_OF_CONDUCT.md). + +Though we welcome people fluent in all languages, RIA Core development is conducted in English. + +We strive to ensure that our resources, documentation, and communication channels are accessible to individuals of +all abilities. We welcome feedback and suggestions for improving accessibility through our open [discussion forum](https://github.com/qoherent/ria/discussions/categories/general). + +Our standards for behaviour are detailed in the project's [Code of Conduct](./CODE_OF_CONDUCT.md). +We kindly insist all participants uphold these standards in all their interactions and communications. + +Let's build intelligent radios, together! πŸ“‘πŸš€ diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..7dd9a06 --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,2 @@ +To report a security vulnerability, please submit a bug report via the GitHub issue tracker [here](https://github.com/qoherent/ria/issues). Be sure to +explicitly mention in the report that the issue pertains to a security concern. From 1474ad688af45f304431af5239488b98db05d133 Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 14:24:03 -0500 Subject: [PATCH 06/17] Updating the contribution section of the README with references to the project's community health documents. --- README.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 537c761..9ce7307 100644 --- a/README.md +++ b/README.md @@ -142,23 +142,26 @@ lte_nr_classifier.to_onnx("models/classifier.onnx") If RIA's syntax feels familiar, that's because RIA is built on [PyTorch](https://pytorch.org/docs/stable/data.html) and [PyTorch Lightning](https://lightning.ai/docs/pytorch/stable/)! +Please refer to the [documentation](http://docs.radiointelligence.io/) for additional usage examples. If you +encounter any difficulties, don't hesitate to reach out on our open [support forum](https://github.com/qoherent/ria/discussions/categories/support). + Additional back-ends can be made available. Please [contact us](https://www.qoherent.ai/contact/) for further details. ## 🀝 Contribution -We welcome contributions from the community! Whether it's a bug fix, new feature, or improvement, your -input is valuable. If you would like to contribute directly to RIA, you will be invited to sign a contributor -agreement, email us at [info@qoherent.ai](info@qoherent.ai) for more information. +We welcome contributions from the community! Whether it's an enhancement, bug fix, or new how-to guide, your +input is valuable. To get started, please visit our [Contribution Guidelines](./.github/CONTRIBUTING.md). + +If you encounter any issues or to report a security vulnerability, please submit a [bug report](https://github.com/qoherent/ria/issues/new/choose). -If you have a larger project in mind, please [contact us](https://www.qoherent.ai/contact/) directly, -we'd love to collaborate with you. πŸš€ +If you have a larger project in mind, please [contact us](https://www.qoherent.ai/contact/) directly, we'd love to collaborate with you. πŸš€ -If you are having issues, please let us know by posting the issue on our GitHub issue tracker -[here](https://github.com/qoherent/ria/issues). +Qoherent is dedicated to fostering a friendly, safe, and inclusive environment for everyone. For more information on +our commitment to diversity, please refer to our [Diversity Statement](./DIVERSITY_STATEMENT.md). -Qoherent is dedicated to fostering a friendly, safe, and inclusive environment for everyone. -Kindly review and adhere to our [Code of Conduct](.github/CODE_OF_CONDUCT.md). +We kindly insist that all contributors review and adhere to our [Code of Conduct](.github/CODE_OF_CONDUCT.md) and that all code contributors +review our [Coding Guidelines](.github/CODING.md) ## πŸ–ŠοΈ Authorship @@ -166,7 +169,7 @@ Kindly review and adhere to our [Code of Conduct](.github/CODE_OF_CONDUCT.md). RIA Core is developed and maintained by [Qoherent](https://www.qoherent.ai/), with the invaluable support of [many independent contributors](https://github.com/qoherent/ria/graphs/contributors). -If you are doing research with RIA, please cite our project: +If you are doing research with RIA, please cite the project: > [1] Qoherent Inc., "Radio Intelligence Apps," 2024. [Online]. Available: https://github.com/qoherent/ria From fa86258071e0f456666069367e6a07f60a8153e2 Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 14:31:42 -0500 Subject: [PATCH 07/17] Minor typo fix. --- .github/ISSUE_TEMPLATE/bug-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index f2c1b41..b5751bf 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -12,7 +12,7 @@ moment to review the issue tracker for any existing reports related to the same Many user applications of RIA Core require interfacing with external radio hardware. Prior to submitting a bug report, please confirm that the issue you're experiencing is attributable to RIA Core, rather than your -hardware/driver configuration. If you are unsure, feel free to ask in our [support formum](https://github.com/qoherent/michael/discussions/categories/support). +hardware/driver configuration. If you are unsure, feel free to ask in our [support forum](https://github.com/qoherent/michael/discussions/categories/support). **Description:** [A clear and concise description of the issue.] From 2b4ed4aa390f077e7a1a7814ff7bb9bc363ff3aa Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 14:32:44 -0500 Subject: [PATCH 08/17] Adding contact link for the support forum. --- .github/ISSUE_TEMPLATE/config.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..ab28b73 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,4 @@ +contact_links: + - name: Support + url: https://github.com/qoherent/ria/discussions/categories/support + about: "If you have any questions or need assistance, please don't hesitate to reach out on our open support forum." From 1f0896d00586382511bcd5f3bcd08bf8320d5ff1 Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 14:54:27 -0500 Subject: [PATCH 09/17] Adding _get_commit_hash() function to return the Git commit hash of the installed instance of RIA Core. --- ria/diagnostics/print_version_info.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ria/diagnostics/print_version_info.py b/ria/diagnostics/print_version_info.py index cd5ab87..3ef0103 100644 --- a/ria/diagnostics/print_version_info.py +++ b/ria/diagnostics/print_version_info.py @@ -9,7 +9,9 @@ import platform import struct import sys + import torch +import subprocess from importlib.metadata import version, PackageNotFoundError from typing import Any @@ -56,7 +58,7 @@ def _get_sys_info() -> dict[str, Any]: language_code, encoding = locale.getlocale() return { - "commit": "", # TODO: Get commit hash. + "commit": _get_commit_hash(), "python": ".".join([str(i) for i in sys.version_info]), "python-bits": struct.calcsize("P") * 8, "OS": uname_result.system, @@ -118,3 +120,16 @@ def _get_dependency_info() -> dict[str, Any]: result[d] = "COULD NOT RESOLVE" return result + + +def _get_commit_hash() -> str: + """ + :return: The Git commit hash of the installed instance of RIA Core. + + :raises RuntimeError: If Git is not installed or not accessible from the command line. + """ + try: + return subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip().decode('utf-8') + except subprocess.CalledProcessError as e: + raise RuntimeError("Unable to determine commit hash. Please ensure that Git is " + "installed and accessible from the command line.", e.output) From 00f6f26fdcb54e735e9d6f67636a2f0a88754bfe Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 16:13:33 -0500 Subject: [PATCH 10/17] Initialized RIA CLI with 'version' command. --- poetry.lock | 337 +++++++++++++++------------- pyproject.toml | 6 + scripts/dataset_manager/commands.py | 4 + scripts/diagnostics/__init__.py | 0 scripts/diagnostics/commands.py | 11 + scripts/model_builder/commands.py | 4 + scripts/ria_cli.py | 34 +++ scripts/utils/commands.py | 4 + 8 files changed, 243 insertions(+), 157 deletions(-) create mode 100644 scripts/dataset_manager/commands.py create mode 100644 scripts/diagnostics/__init__.py create mode 100644 scripts/diagnostics/commands.py create mode 100644 scripts/model_builder/commands.py create mode 100644 scripts/ria_cli.py create mode 100644 scripts/utils/commands.py diff --git a/poetry.lock b/poetry.lock index b259a35..7d355a7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -135,6 +135,20 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "colorama" version = "0.4.6" @@ -267,60 +281,60 @@ typing = ["typing-extensions (>=4.8)"] [[package]] name = "fonttools" -version = "4.47.2" +version = "4.49.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, - {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, - {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, - {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, - {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, - {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, - {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, - {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, - {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, - {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, - {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, - {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, - {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, + {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, + {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, + {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, + {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, + {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, + {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, + {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, + {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, + {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, + {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, + {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, + {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, + {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, + {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, + {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, + {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, + {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, + {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, + {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, + {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, + {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, + {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, + {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, + {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, + {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, + {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, + {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "pycairo", "scipy"] -lxml = ["lxml (>=4.0,<5)"] +lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] @@ -586,43 +600,52 @@ files = [ {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] name = "matplotlib" -version = "3.8.2" +version = "3.8.3" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, - {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, - {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, - {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, - {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, - {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, - {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, - {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, - {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, - {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, - {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, + {file = "matplotlib-3.8.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cf60138ccc8004f117ab2a2bad513cc4d122e55864b4fe7adf4db20ca68a078f"}, + {file = "matplotlib-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f557156f7116be3340cdeef7f128fa99b0d5d287d5f41a16e169819dcf22357"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f386cf162b059809ecfac3bcc491a9ea17da69fa35c8ded8ad154cd4b933d5ec"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3c5f96f57b0369c288bf6f9b5274ba45787f7e0589a34d24bdbaf6d3344632f"}, + {file = "matplotlib-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:83e0f72e2c116ca7e571c57aa29b0fe697d4c6425c4e87c6e994159e0c008635"}, + {file = "matplotlib-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c5c8290074ba31a41db1dc332dc2b62def469ff33766cbe325d32a3ee291aea"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5184e07c7e1d6d1481862ee361905b7059f7fe065fc837f7c3dc11eeb3f2f900"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7e7e0993d0758933b1a241a432b42c2db22dfa37d4108342ab4afb9557cbe3e"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b36ad07eac9740fc76c2aa16edf94e50b297d6eb4c081e3add863de4bb19a7"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c42dae72a62f14982f1474f7e5c9959fc4bc70c9de11cc5244c6e766200ba65"}, + {file = "matplotlib-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf5932eee0d428192c40b7eac1399d608f5d995f975cdb9d1e6b48539a5ad8d0"}, + {file = "matplotlib-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:40321634e3a05ed02abf7c7b47a50be50b53ef3eaa3a573847431a545585b407"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09074f8057917d17ab52c242fdf4916f30e99959c1908958b1fc6032e2d0f6d4"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5745f6d0fb5acfabbb2790318db03809a253096e98c91b9a31969df28ee604aa"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97653d869a71721b639714b42d87cda4cfee0ee74b47c569e4874c7590c55c5"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:242489efdb75b690c9c2e70bb5c6550727058c8a614e4c7716f363c27e10bba1"}, + {file = "matplotlib-3.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:83c0653c64b73926730bd9ea14aa0f50f202ba187c307a881673bad4985967b7"}, + {file = "matplotlib-3.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:ef6c1025a570354297d6c15f7d0f296d95f88bd3850066b7f1e7b4f2f4c13a39"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c4af3f7317f8a1009bbb2d0bf23dfaba859eb7dd4ccbd604eba146dccaaaf0a4"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c6e00a65d017d26009bac6808f637b75ceade3e1ff91a138576f6b3065eeeba"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7b49ab49a3bea17802df6872f8d44f664ba8f9be0632a60c99b20b6db2165b7"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6728dde0a3997396b053602dbd907a9bd64ec7d5cf99e728b404083698d3ca01"}, + {file = "matplotlib-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:813925d08fb86aba139f2d31864928d67511f64e5945ca909ad5bc09a96189bb"}, + {file = "matplotlib-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:cd3a0c2be76f4e7be03d34a14d49ded6acf22ef61f88da600a18a5cd8b3c5f3c"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fa93695d5c08544f4a0dfd0965f378e7afc410d8672816aff1e81be1f45dbf2e"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9764df0e8778f06414b9d281a75235c1e85071f64bb5d71564b97c1306a2afc"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5e431a09e6fab4012b01fc155db0ce6dccacdbabe8198197f523a4ef4805eb26"}, + {file = "matplotlib-3.8.3.tar.gz", hash = "sha256:7b416239e9ae38be54b028abbf9048aff5054a9aba5416bef0bd17f9162ce161"}, ] [package.dependencies] @@ -673,47 +696,47 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "numpy" -version = "1.26.3" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, - {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, - {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, - {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, - {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, - {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, - {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, - {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, - {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, - {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, - {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, + {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"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] @@ -837,13 +860,13 @@ files = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.3.101" +version = "12.4.99" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl", hash = "sha256:64335a8088e2b9d196ae8665430bc6a2b7e6ef2eb877a9c735c804bd4ff6467c"}, - {file = "nvidia_nvjitlink_cu12-12.3.101-py3-none-win_amd64.whl", hash = "sha256:1b2e317e437433753530792f13eece58f0aec21a2b05903be7bffe58a606cbd1"}, + {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c6428836d20fe7e327191c175791d38570e10762edc588fb46749217cd444c74"}, + {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-win_amd64.whl", hash = "sha256:991905ffa2144cb603d8ca7962d75c35334ae82bf92820b6ba78157277da1ad2"}, ] [[package]] @@ -985,13 +1008,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyparsing" -version = "3.1.1" +version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, ] [package.extras] @@ -999,13 +1022,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "8.0.0" +version = "8.0.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, - {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, + {file = "pytest-8.0.2-py3-none-any.whl", hash = "sha256:edfaaef32ce5172d5466b5127b42e0d6d35ebbe4453f0e3505d96afd93f6b096"}, + {file = "pytest-8.0.2.tar.gz", hash = "sha256:d4051d623a2e0b7e51960ba963193b09ce6daeb9759a451844a21e4ddedfc1bd"}, ] [package.dependencies] @@ -1021,13 +1044,13 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no [[package]] name = "python-dateutil" -version = "2.8.2" +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" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {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"}, ] [package.dependencies] @@ -1264,36 +1287,36 @@ files = [ [[package]] name = "torch" -version = "2.2.0" +version = "2.2.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" files = [ - {file = "torch-2.2.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:d366158d6503a3447e67f8c0ad1328d54e6c181d88572d688a625fac61b13a97"}, - {file = "torch-2.2.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:707f2f80402981e9f90d0038d7d481678586251e6642a7a6ef67fc93511cb446"}, - {file = "torch-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:15c8f0a105c66b28496092fca1520346082e734095f8eaf47b5786bac24b8a31"}, - {file = "torch-2.2.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:0ca4df4b728515ad009b79f5107b00bcb2c63dc202d991412b9eb3b6a4f24349"}, - {file = "torch-2.2.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:3d3eea2d5969b9a1c9401429ca79efc668120314d443d3463edc3289d7f003c7"}, - {file = "torch-2.2.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:0d1c580e379c0d48f0f0a08ea28d8e373295aa254de4f9ad0631f9ed8bc04c24"}, - {file = "torch-2.2.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9328e3c1ce628a281d2707526b4d1080eae7c4afab4f81cea75bde1f9441dc78"}, - {file = "torch-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:03c8e660907ac1b8ee07f6d929c4e15cd95be2fb764368799cca02c725a212b8"}, - {file = "torch-2.2.0-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:da0cefe7f84ece3e3b56c11c773b59d1cb2c0fd83ddf6b5f7f1fd1a987b15c3e"}, - {file = "torch-2.2.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:f81d23227034221a4a4ff8ef24cc6cec7901edd98d9e64e32822778ff01be85e"}, - {file = "torch-2.2.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:dcbfb2192ac41ca93c756ebe9e2af29df0a4c14ee0e7a0dd78f82c67a63d91d4"}, - {file = "torch-2.2.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:9eeb42971619e24392c9088b5b6d387d896e267889d41d267b1fec334f5227c5"}, - {file = "torch-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:c718b2ca69a6cac28baa36d86d8c0ec708b102cebd1ceb1b6488e404cd9be1d1"}, - {file = "torch-2.2.0-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:f11d18fceb4f9ecb1ac680dde7c463c120ed29056225d75469c19637e9f98d12"}, - {file = "torch-2.2.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:ee1da852bfd4a7e674135a446d6074c2da7194c1b08549e31eae0b3138c6b4d2"}, - {file = "torch-2.2.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0d819399819d0862268ac531cf12a501c253007df4f9e6709ede8a0148f1a7b8"}, - {file = "torch-2.2.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:08f53ccc38c49d839bc703ea1b20769cc8a429e0c4b20b56921a9f64949bf325"}, - {file = "torch-2.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:93bffe3779965a71dab25fc29787538c37c5d54298fd2f2369e372b6fb137d41"}, - {file = "torch-2.2.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:c17ec323da778efe8dad49d8fb534381479ca37af1bfc58efdbb8607a9d263a3"}, - {file = "torch-2.2.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:c02685118008834e878f676f81eab3a952b7936fa31f474ef8a5ff4b5c78b36d"}, - {file = "torch-2.2.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d9f39d6f53cec240a0e3baa82cb697593340f9d4554cee6d3d6ca07925c2fac0"}, - {file = "torch-2.2.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:51770c065206250dc1222ea7c0eff3f88ab317d3e931cca2aee461b85fbc2472"}, - {file = "torch-2.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:008e4c6ad703de55af760c73bf937ecdd61a109f9b08f2bbb9c17e7c7017f194"}, - {file = "torch-2.2.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:de8680472dd14e316f42ceef2a18a301461a9058cd6e99a1f1b20f78f11412f1"}, - {file = "torch-2.2.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:99e1dcecb488e3fd25bcaac56e48cdb3539842904bdc8588b0b255fde03a254c"}, + {file = "torch-2.2.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:8d3bad336dd2c93c6bcb3268e8e9876185bda50ebde325ef211fb565c7d15273"}, + {file = "torch-2.2.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:5297f13370fdaca05959134b26a06a7f232ae254bf2e11a50eddec62525c9006"}, + {file = "torch-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:5f5dee8433798888ca1415055f5e3faf28a3bad660e4c29e1014acd3275ab11a"}, + {file = "torch-2.2.1-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:b6d78338acabf1fb2e88bf4559d837d30230cf9c3e4337261f4d83200df1fcbe"}, + {file = "torch-2.2.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:6ab3ea2e29d1aac962e905142bbe50943758f55292f1b4fdfb6f4792aae3323e"}, + {file = "torch-2.2.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:d86664ec85902967d902e78272e97d1aff1d331f7619d398d3ffab1c9b8e9157"}, + {file = "torch-2.2.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d6227060f268894f92c61af0a44c0d8212e19cb98d05c20141c73312d923bc0a"}, + {file = "torch-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:77e990af75fb1675490deb374d36e726f84732cd5677d16f19124934b2409ce9"}, + {file = "torch-2.2.1-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:46085e328d9b738c261f470231e987930f4cc9472d9ffb7087c7a1343826ac51"}, + {file = "torch-2.2.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:2d9e7e5ecbb002257cf98fae13003abbd620196c35f85c9e34c2adfb961321ec"}, + {file = "torch-2.2.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ada53aebede1c89570e56861b08d12ba4518a1f8b82d467c32665ec4d1f4b3c8"}, + {file = "torch-2.2.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:be21d4c41ecebed9e99430dac87de1439a8c7882faf23bba7fea3fea7b906ac1"}, + {file = "torch-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:79848f46196750367dcdf1d2132b722180b9d889571e14d579ae82d2f50596c5"}, + {file = "torch-2.2.1-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:7ee804847be6be0032fbd2d1e6742fea2814c92bebccb177f0d3b8e92b2d2b18"}, + {file = "torch-2.2.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:84b2fb322ab091039fdfe74e17442ff046b258eb5e513a28093152c5b07325a7"}, + {file = "torch-2.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5c0c83aa7d94569997f1f474595e808072d80b04d34912ce6f1a0e1c24b0c12a"}, + {file = "torch-2.2.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:91a1b598055ba06b2c386415d2e7f6ac818545e94c5def597a74754940188513"}, + {file = "torch-2.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f93ddf3001ecec16568390b507652644a3a103baa72de3ad3b9c530e3277098"}, + {file = "torch-2.2.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:0e8bdd4c77ac2584f33ee14c6cd3b12767b4da508ec4eed109520be7212d1069"}, + {file = "torch-2.2.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:6a21bcd7076677c97ca7db7506d683e4e9db137e8420eb4a68fb67c3668232a7"}, + {file = "torch-2.2.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f1b90ac61f862634039265cd0f746cc9879feee03ff962c803486301b778714b"}, + {file = "torch-2.2.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ed9e29eb94cd493b36bca9cb0b1fd7f06a0688215ad1e4b3ab4931726e0ec092"}, + {file = "torch-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:c47bc25744c743f3835831a20efdcfd60aeb7c3f9804a213f61e45803d16c2a5"}, + {file = "torch-2.2.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:0952549bcb43448c8d860d5e3e947dd18cbab491b14638e21750cb3090d5ad3e"}, + {file = "torch-2.2.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:26bd2272ec46fc62dcf7d24b2fb284d44fcb7be9d529ebf336b9860350d674ed"}, ] [package.dependencies] @@ -1313,7 +1336,7 @@ nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \" nvidia-nccl-cu12 = {version = "2.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} sympy = "*" -triton = {version = "2.2.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +triton = {version = "2.2.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} typing-extensions = ">=4.8.0" [package.extras] @@ -1345,24 +1368,24 @@ tutorials = ["matplotlib", "pandas", "tabulate", "torch"] [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.10.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] [[package]] name = "urllib3" -version = "2.2.0" +version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"}, - {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"}, + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] [package.extras] @@ -1374,4 +1397,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "9b7c36ddcd684a65f29051bce66917a0948564ef6df76aedd434674e6c1b9054" +content-hash = "bccf006febe5fe6f1f98106b809a5f8b9f41fedda9a22c3d8509c0ec5d0d3259" diff --git a/pyproject.toml b/pyproject.toml index cff0729..e7513e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,9 @@ numpy = "^1.26.3" matplotlib = "^3.8.2" torch = "^2.2.0" +[tool.poetry.group.scripts.dependencies] +click = "^8.1.7" + [tool.poetry.group.test.dependencies] pytest = "^8.0.0" @@ -53,3 +56,6 @@ sphinx-rtd-theme = "^2.0.0" "Documentation" = "http://docs.radiointelligence.io/" "Source" = "https://github.com/qoherent/ria" "Issues" = "https://github.com/qoherent/ria/issues" + +[tool.poetry.scripts] +ria = "scripts.ria_cli:ria_cli" diff --git a/scripts/dataset_manager/commands.py b/scripts/dataset_manager/commands.py new file mode 100644 index 0000000..ca67216 --- /dev/null +++ b/scripts/dataset_manager/commands.py @@ -0,0 +1,4 @@ +""" +This module contains all the CLI bindings for the dataset manager package. +""" +import click diff --git a/scripts/diagnostics/__init__.py b/scripts/diagnostics/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scripts/diagnostics/commands.py b/scripts/diagnostics/commands.py new file mode 100644 index 0000000..5b13968 --- /dev/null +++ b/scripts/diagnostics/commands.py @@ -0,0 +1,11 @@ +""" +This module contains all the CLI bindings for the diagnostics package. +""" +import click + +from ria import print_version_info as print_version_info + + +@click.command(help="Print out system, dependency, and CUDA version information.") +def version(): + print_version_info() diff --git a/scripts/model_builder/commands.py b/scripts/model_builder/commands.py new file mode 100644 index 0000000..ef3cd11 --- /dev/null +++ b/scripts/model_builder/commands.py @@ -0,0 +1,4 @@ +""" +This module contains all the CLI bindings for the model builder package. +""" +import click diff --git a/scripts/ria_cli.py b/scripts/ria_cli.py new file mode 100644 index 0000000..c77e09b --- /dev/null +++ b/scripts/ria_cli.py @@ -0,0 +1,34 @@ +""" +This module contains the main CLI for the RIA application. +""" +import click + +from scripts.diagnostics import commands as diagnostic_commands +from scripts.dataset_manager import commands as dataset_manager_commands +from scripts.model_builder import commands as model_builder_commands +from scripts.utils import commands as utils_commands + + +@click.group() +@click.option('-v', '--verbose', is_flag=True, + help="Increase verbosity, especially useful for debugging.") +def ria_cli(verbose: bool): + print(dir(diagnostic_commands)) + if verbose: + click.echo("Verbose mode enabled.") + pass + + +modules = [ + diagnostic_commands, + dataset_manager_commands, + model_builder_commands, + utils_commands +] + +# Loop through the modules, binding all CLI commands to the ria group +for module in modules: + for command_name in dir(module): + command = getattr(module, command_name) + if isinstance(command, click.Command): + ria_cli.add_command(command) diff --git a/scripts/utils/commands.py b/scripts/utils/commands.py new file mode 100644 index 0000000..285ffb0 --- /dev/null +++ b/scripts/utils/commands.py @@ -0,0 +1,4 @@ +""" +This module contains all the CLI bindings for the utils package. +""" +import click From 83c12f6c96ebdbb22415523257a44055a2db0200 Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 16:41:48 -0500 Subject: [PATCH 11/17] Adding instructions for accessing RIA CLI usage information. --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9ce7307..91e2f11 100644 --- a/README.md +++ b/README.md @@ -88,8 +88,11 @@ Coming soon: Docker support for building images for both CPU and GPU targets. ## πŸ’» Usage -RIA Core consists of importable modules and a set of command-line bindings, -allowing you to execute key functionality from the command line. +RIA Core consists of importable modules that can be used within your Python projects, as well as a command-line +interface (CLI), allowing you to execute key functionality directly from the command line. + +The RIA CLI is automatically installed alongside RIA. Simply execute `ria --help` from the command line for +CLI usage information. For example, if we wanted to curate a dataset from a collection of SigMF recordings, apply an artificial IQ Imbalance, and save to file as a machine-learning ready dataset, we could do this from the command line with: From 3e4e4b713ea3dd7e2c55e750cd22823e91c7d815 Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 16:43:09 -0500 Subject: [PATCH 12/17] Adding developer instructions for integrating new scripts into the RIA CLI. --- .github/CODING.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/CODING.md b/.github/CODING.md index 80487ca..78fa99f 100644 --- a/.github/CODING.md +++ b/.github/CODING.md @@ -26,6 +26,10 @@ for more information. All contributions must be well documented, with ample inline comments and with a copious amount of complete docstrings. Please refer to our [documentation guidelines](#documentation-guidelines) for more information. +RIA Core's command-line interface (CLI) is powered by [Click](https://click.palletsprojects.com/en/8.1.x/). Each command should be placed in its respective +package's `commands.py` file in the `scripts` directory. By applying the `click.command` decorator, the command is +automatically integrated into the RIA CLI. + ### Python-specific guidelines We use [Flake8](https://flake8.pycqa.org/en/latest/) for code linting and style enforcement. All Python code must From 9e76280893ce61652424988f093a02b2d6d59605 Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 16:48:59 -0500 Subject: [PATCH 13/17] Adding a note that the RIA Core version and environment information can be accessed from the command line by executing 'ria version', or by calling the ria.print_version_info() function in Python. --- .github/ISSUE_TEMPLATE/bug-report.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index b5751bf..56acf65 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -43,7 +43,8 @@ Which aspect of RIA Core are you experiencing issues with? **Version and Environment Information:** -[Replace this line with the output of `ria.print_version_info()`.] +[Replace this line with RIA Core version and environment information. This information can be accessed by executing +`ria version` from the command line or by calling the `ria.print_version_info()` function in Python.] **Radio Hardware and Driver Information:** From 32f0d9b122b21588bf238a38f912b337823b156f Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 16:50:36 -0500 Subject: [PATCH 14/17] Removing unnecessary print statement --- scripts/ria_cli.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/ria_cli.py b/scripts/ria_cli.py index c77e09b..09eb9c2 100644 --- a/scripts/ria_cli.py +++ b/scripts/ria_cli.py @@ -1,5 +1,5 @@ """ -This module contains the main CLI for the RIA application. +This module contains the main group for the RIA Core CLI. """ import click @@ -13,7 +13,6 @@ @click.option('-v', '--verbose', is_flag=True, help="Increase verbosity, especially useful for debugging.") def ria_cli(verbose: bool): - print(dir(diagnostic_commands)) if verbose: click.echo("Verbose mode enabled.") pass @@ -26,7 +25,7 @@ def ria_cli(verbose: bool): utils_commands ] -# Loop through the modules, binding all CLI commands to the ria group +# Loop through the modules, binding all CLI commands to the ria group. for module in modules: for command_name in dir(module): command = getattr(module, command_name) From 7ce676ce353d38e44ee13aacff90ecf4e9103e31 Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Fri, 8 Mar 2024 17:20:16 -0500 Subject: [PATCH 15/17] Standardizing the length of the whitespace for all the sections. --- ria/diagnostics/print_version_info.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ria/diagnostics/print_version_info.py b/ria/diagnostics/print_version_info.py index 3ef0103..2e0889f 100644 --- a/ria/diagnostics/print_version_info.py +++ b/ria/diagnostics/print_version_info.py @@ -30,22 +30,20 @@ def print_version_info() -> None: sys_info = _get_sys_info() cuda_info = _get_cuda_info() dependency_info = _get_dependency_info() + max_len = 15 print("\nSYSTEM") print("------") - max_len = max(len(x) for x in sys_info) for k, v in sys_info.items(): print(f"{k:<{max_len}}: {v}") print("\nCUDA") print("----") - max_len = max(len(x) for x in cuda_info) for k, v in cuda_info.items(): print(f"{k:<{max_len}}: {v}") print("\nDEPENDENCIES") print("------------") - max_len = max(len(x) for x in dependency_info) for k, v in dependency_info.items(): print(f"{k:<{max_len}}: {v}") From 2cac398121fa02a7fd2e7b7b1b978c3b9c541c9c Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Mon, 11 Mar 2024 15:15:59 -0400 Subject: [PATCH 16/17] Renamed the 'scripts' package to 'ria_cli'. This was done so the package is easier to identify within site-packages --- {scripts => ria_cli}/__init__.py | 0 scripts/ria_cli.py => ria_cli/cli.py | 14 +++++++------- {scripts => ria_cli}/dataset_manager/__init__.py | 0 {scripts => ria_cli}/dataset_manager/commands.py | 0 {scripts => ria_cli}/diagnostics/__init__.py | 0 {scripts => ria_cli}/diagnostics/commands.py | 0 {scripts => ria_cli}/model_builder/__init__.py | 0 {scripts => ria_cli}/model_builder/commands.py | 0 {scripts => ria_cli}/utils/__init__.py | 0 {scripts => ria_cli}/utils/commands.py | 0 10 files changed, 7 insertions(+), 7 deletions(-) rename {scripts => ria_cli}/__init__.py (100%) rename scripts/ria_cli.py => ria_cli/cli.py (59%) rename {scripts => ria_cli}/dataset_manager/__init__.py (100%) rename {scripts => ria_cli}/dataset_manager/commands.py (100%) rename {scripts => ria_cli}/diagnostics/__init__.py (100%) rename {scripts => ria_cli}/diagnostics/commands.py (100%) rename {scripts => ria_cli}/model_builder/__init__.py (100%) rename {scripts => ria_cli}/model_builder/commands.py (100%) rename {scripts => ria_cli}/utils/__init__.py (100%) rename {scripts => ria_cli}/utils/commands.py (100%) diff --git a/scripts/__init__.py b/ria_cli/__init__.py similarity index 100% rename from scripts/__init__.py rename to ria_cli/__init__.py diff --git a/scripts/ria_cli.py b/ria_cli/cli.py similarity index 59% rename from scripts/ria_cli.py rename to ria_cli/cli.py index 09eb9c2..d2e2b8d 100644 --- a/scripts/ria_cli.py +++ b/ria_cli/cli.py @@ -3,16 +3,16 @@ """ import click -from scripts.diagnostics import commands as diagnostic_commands -from scripts.dataset_manager import commands as dataset_manager_commands -from scripts.model_builder import commands as model_builder_commands -from scripts.utils import commands as utils_commands +from ria_cli.diagnostics import commands as diagnostic_commands +from ria_cli.dataset_manager import commands as dataset_manager_commands +from ria_cli.model_builder import commands as model_builder_commands +from ria_cli.utils import commands as utils_commands @click.group() @click.option('-v', '--verbose', is_flag=True, help="Increase verbosity, especially useful for debugging.") -def ria_cli(verbose: bool): +def cli(verbose: bool): if verbose: click.echo("Verbose mode enabled.") pass @@ -25,9 +25,9 @@ def ria_cli(verbose: bool): utils_commands ] -# Loop through the modules, binding all CLI commands to the ria group. +# Loop through the modules, binding all commands to the CLI. for module in modules: for command_name in dir(module): command = getattr(module, command_name) if isinstance(command, click.Command): - ria_cli.add_command(command) + cli.add_command(command) diff --git a/scripts/dataset_manager/__init__.py b/ria_cli/dataset_manager/__init__.py similarity index 100% rename from scripts/dataset_manager/__init__.py rename to ria_cli/dataset_manager/__init__.py diff --git a/scripts/dataset_manager/commands.py b/ria_cli/dataset_manager/commands.py similarity index 100% rename from scripts/dataset_manager/commands.py rename to ria_cli/dataset_manager/commands.py diff --git a/scripts/diagnostics/__init__.py b/ria_cli/diagnostics/__init__.py similarity index 100% rename from scripts/diagnostics/__init__.py rename to ria_cli/diagnostics/__init__.py diff --git a/scripts/diagnostics/commands.py b/ria_cli/diagnostics/commands.py similarity index 100% rename from scripts/diagnostics/commands.py rename to ria_cli/diagnostics/commands.py diff --git a/scripts/model_builder/__init__.py b/ria_cli/model_builder/__init__.py similarity index 100% rename from scripts/model_builder/__init__.py rename to ria_cli/model_builder/__init__.py diff --git a/scripts/model_builder/commands.py b/ria_cli/model_builder/commands.py similarity index 100% rename from scripts/model_builder/commands.py rename to ria_cli/model_builder/commands.py diff --git a/scripts/utils/__init__.py b/ria_cli/utils/__init__.py similarity index 100% rename from scripts/utils/__init__.py rename to ria_cli/utils/__init__.py diff --git a/scripts/utils/commands.py b/ria_cli/utils/commands.py similarity index 100% rename from scripts/utils/commands.py rename to ria_cli/utils/commands.py From 7ec1cdc3c0b6b7783d7587b1b60dd0c99fa51047 Mon Sep 17 00:00:00 2001 From: Michael Luciuk Date: Mon, 11 Mar 2024 15:17:36 -0400 Subject: [PATCH 17/17] Specifying that the 'ria_cli' package is to be installed automatically alongside 'ria'. --- pyproject.toml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e7513e5..7b39526 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,6 +30,10 @@ classifiers = [ "Topic :: Scientific/Engineering :: Artificial Intelligence", "Typing :: Typed" ] +packages = [ + { include = "ria" }, + { include = "ria_cli" }, +] [build-system] requires = ["poetry-core>=1.0.0"] @@ -40,8 +44,6 @@ python = "^3.10" numpy = "^1.26.3" matplotlib = "^3.8.2" torch = "^2.2.0" - -[tool.poetry.group.scripts.dependencies] click = "^8.1.7" [tool.poetry.group.test.dependencies] @@ -58,4 +60,4 @@ sphinx-rtd-theme = "^2.0.0" "Issues" = "https://github.com/qoherent/ria/issues" [tool.poetry.scripts] -ria = "scripts.ria_cli:ria_cli" +ria = "ria_cli.cli:cli"