diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..ee24b84 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,131 @@ +# GitHub Copilot Instructions for AIMBAT + +## Code Style and Standards + +### PEP 8 Compliance + +- Follow [PEP 8](https://peps.python.org/pep-0008/) style guide for all Python code +- Use 4 spaces for indentation (no tabs) +- Maximum line length: 88 characters (Black default) +- Use blank lines to separate functions and classes +- Imports should be grouped: standard library, third-party, local + +### Code Formatting + +- All code must pass **Black** formatting + - Target Python versions: 3.12, 3.13, 3.14 + - Line length: 88 characters + - Run `black .` before committing + +- All code must pass **Ruff** linting + - Configuration in `pyproject.toml` + - Run `ruff check .` before committing + - Fix issues with `ruff check --fix .` + +### Language + +- Use **British English** spelling in all: + - Comments + - Docstrings + - Variable names + - Documentation + - Error messages +- Examples: + - `colour` not `color` + - `normalise` not `normalize` + - `initialise` not `initialize` + - `behaviour` not `behavior` + - `centre` not `center` + +### Documentation Style + +#### Docstrings + +- Use **Google Style** docstrings for all public functions, classes, and methods +- Format: + + ```python + def function_name(param1: type1, param2: type2) -> return_type: + """Brief one-line description. + + Longer description if needed, explaining the purpose and behaviour + of the function in more detail. + + Args: + param1: Description of param1. + param2: Description of param2. + Multi-line descriptions should be indented. + + Returns: + Description of the return value. + + Raises: + ErrorType: Description of when this error is raised. + + Examples: + >>> function_name(value1, value2) + expected_output + """ + ``` + +#### Type Hints + +- Use type hints for all function parameters and return values +- Use modern Python type syntax (Python 3.12+): + - `list[str]` not `List[str]` + - `dict[str, int]` not `Dict[str, int]` + - `type1 | type2` not `Union[type1, type2]` + - `type | None` not `Optional[type]` + +### Testing + +- Write tests for all new functionality +- Use pytest framework +- Tests should be in the `tests/` directory +- Use descriptive test names: `test_function_does_expected_behaviour` +- Try to mirror the directory structure of `src/aimbat/` in `tests/` + +### Commit Messages + +- Use clear, descriptive commit messages +- Follow conventional commits format when appropriate +- Use British English spelling + +## Review Priorities + +- Take the above Code Style and Standards into account when reviewing pull requests +- Suggest improvements to code style, efficiency, documentation, and testing +- Suggest improvements to variable names, function names, and overall code readability +- Suggest newer syntax features where appropriate +- Check spelling +- Check if docstrings in existing code follow Google style and suggest improvements if needed + +## Project-Specific Guidelines + +### Seismology Domain + +- Follow seismological conventions for variable names +- Use proper units and document them +- Maintain scientific accuracy in all calculations + +### Dependencies + +- Minimum Python version: 3.12 +- Core dependencies: pysmo, sqlmodel, numpy, scipy, matplotlib +- Keep dependencies up to date + +### File Organisation + +- Source code in `src/aimbat/` +- Tests in `tests/` +- Documentation in `docs/` +- Use appropriate module structure + +## Before Committing + +1. Run `black .` to format code +2. Run `ruff check --fix .` to check and fix linting issues +3. Run tests with `pytest` +4. Verify type hints with `mypy` +5. Check British English spelling +6. Ensure docstrings follow Google style diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0517e8a..0385cc1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,12 +8,10 @@ on: - master types: - completed - push: - tags: - - "v?[0-9]+.[0-9]+.[0-9]+-?*" jobs: build: + if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest strategy: matrix: @@ -35,31 +33,3 @@ jobs: - name: Build sdist and wheel run: | uv build - - name: Upload build artifacts - if: ${{ matrix.python-version == '3.14' && github.event.workflow_run.conclusion == 'success'}} - uses: actions/upload-artifact@v4 - with: - name: packages - path: dist - - publish: - needs: build - runs-on: ubuntu-latest - - steps: - - name: Download build artifacts - uses: actions/download-artifact@v4 - with: - name: packages - path: dist - - name: Publish distribution ๐Ÿ“ฆ to Test PyPI - if: startsWith(github.ref, 'refs/tags') - uses: pypa/gh-action-pypi-publish@release/v1 - with: - password: ${{ secrets.TEST_PYPI_API_TOKEN }} - repository_url: https://test.pypi.org/legacy/ - - name: Publish distribution ๐Ÿ“ฆ to PyPI - if: startsWith(github.ref, 'refs/tags') - uses: pypa/gh-action-pypi-publish@release/v1 - with: - password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..53fc0ea --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,127 @@ +name: release + +on: + push: + tags: + - "v[0-9]+.[0-9]+.[0-9]+" + - "v[0-9]+.[0-9]+.[0-9]+rc[0-9]+" + - "v[0-9]+.[0-9]+.[0-9]+.dev[0-9]+" + +jobs: + build: + permissions: + contents: read + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install uv + uses: astral-sh/setup-uv@v6 + with: + enable-cache: true + python-version: "3.14" + - name: Build sdist and wheel + run: uv build + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: packages + path: dist + + publish-testpypi: + needs: build + runs-on: ubuntu-latest + permissions: + id-token: write + environment: + name: testpypi + url: https://test.pypi.org/p/aimbat + steps: + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: packages + path: dist + - name: Publish to Test PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ + + publish-pypi: + needs: publish-testpypi + # Only publish to PyPI if it's NOT a dev release + if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '.dev') + runs-on: ubuntu-latest + permissions: + id-token: write + environment: + name: pypi + url: https://pypi.org/p/aimbat + steps: + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: packages + path: dist + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + + github-release: + needs: build + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.RELEASE_TOKEN }} + - name: Install uv + uses: astral-sh/setup-uv@v6 + with: + enable-cache: true + - name: Determine pre-release status + id: prerelease + run: | + VERSION=$(uvx --with hatch-vcs hatch version) + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + if [[ "$VERSION" =~ (a|b|rc|dev) ]]; then + echo "is_prerelease=true" >> "$GITHUB_OUTPUT" + else + echo "is_prerelease=false" >> "$GITHUB_OUTPUT" + fi + - name: Generate release notes + uses: orhun/git-cliff-action@v4 + with: + config: cliff.toml + args: --latest --strip header + env: + OUTPUT: RELEASE_NOTES.md + - name: Update CHANGELOG.md + if: steps.prerelease.outputs.is_prerelease == 'false' + uses: orhun/git-cliff-action@v4 + with: + config: cliff.toml + args: --tag ${{ github.ref_name }} + env: + OUTPUT: CHANGELOG.md + - name: Commit CHANGELOG.md + if: steps.prerelease.outputs.is_prerelease == 'false' + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add CHANGELOG.md + git commit -m "docs: update CHANGELOG.md for ${{ github.ref_name }}" + git push origin HEAD:master + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: packages + path: dist + - name: Create GitHub release + uses: softprops/action-gh-release@v2 + with: + body_path: RELEASE_NOTES.md + prerelease: ${{ steps.prerelease.outputs.is_prerelease }} + files: dist/* diff --git a/CHANGELOG.md b/CHANGELOG.md index 069a2e2..eadf278 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ All notable changes to the **AIMBAT** project will be documented in this file. - Artifact@v4 +### ๐ŸŽจ Styling + +- Switch to formatting with black + ### ๐Ÿ› Bug Fixes - Fix type hint @@ -25,6 +29,15 @@ All notable changes to the **AIMBAT** project will be documented in this file. - Add CNAME file - Installation instructions using uv ([#190](https://github.com/pysmo/aimbat/issues/190)) - Add asciinema +- Switch to zensical + +### ๐Ÿ“ฆ Miscellaneous + +- Ignore black commit in git blame +- Add py312 to matrix +- Switch to uv +- Rename some commands to group them a bit better +- Update to new pysmo names ### ๐Ÿ” Other Changes @@ -36,316 +49,37 @@ All notable changes to the **AIMBAT** project will be documented in this file. - Don't fail-fast (i.e. continue checks for other python versions) - Add command to download sample data - Use descriptors for defaults -- Merge pull request #109 from pysmo/descriptor-defaults - -Use descriptors for defaults - Cleanup aimbat defaults class -- Merge branch 'aimbat_V2' - Add checkdata command -- Merge branch 'checkdata' - Rename package from pysmo.aimbat to aimbat ([#129](https://github.com/pysmo/aimbat/issues/129)) - -* rename package from pysmo.aimbat to aimbat -* add tox -* add workflows -* update deps -* Add docs packages to pyproject - Setup docs structure ([#130](https://github.com/pysmo/aimbat/issues/130)) - -* Setup docs structure - Cleanup defaults script -- Merge pull request #131 from pysmo/defaults - -cleanup defaults script - Add cli for project -- Merge pull request #132 from pysmo/cli-project - -add cli for project - Switch to using sqlmodel to save project metadata. -- Merge pull request #133 from pysmo/project-defaults - -Switch to using sqlmodel to save project metadata. - Add devcontainer config - Add .tox and nohup.out to gitignore - Add autodoc to docs ([#134](https://github.com/pysmo/aimbat/issues/134)) - -* Add autodoc to docs - -* Dont lint docs foler with flake8 -- Merge "command" files into "lib" files. -- Merge pull request #135 from pysmo/move-commands-into-lib - -Merge "command" files into "lib" files. - Update Readme - Fix text alignment - Add accent colour to theme and add watch directory to make live-docs -- Add id column to default table -- Merge pull request #136 from pysmo/defaults-table - -refactor: add id column to default table -- Merge pull request #137 from pysmo/docs-flowchart - -docs: add AIMBAT workflow -- Merge pull request #139 from pysmo/checkdata - -feat: initial checks in checkdata lib -- Switch to formatting with black -- Ignore black commit in git blame -- Merge pull request #140 from pysmo/black - -Introduce Black formatting to project -- Bump urllib3 from 2.0.4 to 2.0.7 - -Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.4 to 2.0.7. -- [Release notes](https://github.com/urllib3/urllib3/releases) -- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) -- [Commits](https://github.com/urllib3/urllib3/compare/2.0.4...2.0.7) - ---- -updated-dependencies: -- dependency-name: urllib3 - dependency-type: indirect -... - -Signed-off-by: dependabot[bot] -- Merge pull request #143 from pysmo/dependabot/pip/urllib3-2.0.7 - -Bump urllib3 from 2.0.4 to 2.0.7 -- Bump pillow from 10.0.0 to 10.0.1 - -Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.0.0 to 10.0.1. -- [Release notes](https://github.com/python-pillow/Pillow/releases) -- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) -- [Commits](https://github.com/python-pillow/Pillow/compare/10.0.0...10.0.1) - ---- -updated-dependencies: -- dependency-name: pillow - dependency-type: indirect -... - -Signed-off-by: dependabot[bot] -- Merge pull request #142 from pysmo/dependabot/pip/pillow-10.0.1 - -Bump pillow from 10.0.0 to 10.0.1 -- Add py312 to matrix -- Merge pull request #144 from pysmo/py312 - -chore: add py312 to matrix -- Merge pull request #149 from pysmo/add-data - -feat: add add-data to project -- Bump actions/setup-python from 4 to 5 - -Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5. -- [Release notes](https://github.com/actions/setup-python/releases) -- [Commits](https://github.com/actions/setup-python/compare/v4...v5) - ---- -updated-dependencies: -- dependency-name: actions/setup-python - dependency-type: direct:production - update-type: version-update:semver-major -... - -Signed-off-by: dependabot[bot] -- Merge pull request #150 from pysmo/dependabot/github_actions/actions/setup-python-5 - -Bump actions/setup-python from 4 to 5 -- Bump codecov/codecov-action from 3 to 4 - -Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3 to 4. -- [Release notes](https://github.com/codecov/codecov-action/releases) -- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) -- [Commits](https://github.com/codecov/codecov-action/compare/v3...v4) - ---- -updated-dependencies: -- dependency-name: codecov/codecov-action - dependency-type: direct:production - update-type: version-update:semver-major -... - -Signed-off-by: dependabot[bot] -- Merge pull request #151 from pysmo/dependabot/github_actions/codecov/codecov-action-4 - -Bump codecov/codecov-action from 3 to 4 -- Bump actions/checkout from 3 to 4 - -Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. -- [Release notes](https://github.com/actions/checkout/releases) -- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) -- [Commits](https://github.com/actions/checkout/compare/v3...v4) - ---- -updated-dependencies: -- dependency-name: actions/checkout - dependency-type: direct:production - update-type: version-update:semver-major -... - -Signed-off-by: dependabot[bot] -- Merge pull request #153 from pysmo/dependabot/github_actions/actions/checkout-4 - -Bump actions/checkout from 3 to 4 -- Merge pull request #155 from pysmo/fix-artifactsV4 - -ci: artifact@v4 -- Merge pull request #156 from pysmo/data-list - -feat: list data -- Merge pull request #159 from pysmo/parameter-tables - -feat: add parameters to data -- Merge pull request #162 from pysmo/snapshots - -feat: add parameter snapshots -- Merge pull request #163 from pysmo/docs-data - -docs: update data section -- Merge pull request #164 from pysmo/utils-plotseis - -feat: add plotseis -- Merge pull request #166 from pysmo/icecream - -feat: add icecream to print debug information -- Merge pull request #169 from pysmo/event-select - -feat: add event select function and cli command -- Bump codecov/codecov-action from 4 to 5 - -Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5. -- [Release notes](https://github.com/codecov/codecov-action/releases) -- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) -- [Commits](https://github.com/codecov/codecov-action/compare/v4...v5) - ---- -updated-dependencies: -- dependency-name: codecov/codecov-action - dependency-type: direct:production - update-type: version-update:semver-major -... +- Add logging ([#189](https://github.com/pysmo/aimbat/issues/189)) -Signed-off-by: dependabot[bot] -- Merge pull request #167 from pysmo/dependabot/github_actions/codecov/codecov-action-5 +### ๐Ÿ”ง Refactoring -Bump codecov/codecov-action from 4 to 5 +- Add id column to default table - Split lib and cli files to speed up cli ([#170](https://github.com/pysmo/aimbat/issues/170)) -- Merge pull request #173 from pysmo/feat-filter-tables - -feat: print table data for active events by default -- Merge pull request #174 from pysmo/feat-rollback - -feat: add snapshot rollback - Move AimbatDefaults class to other models and rename some things. -- Merge pull request #175 from pysmo/move-defaults - -refactor: move AimbatDefaults class to other models and rename some tโ€ฆ - Save active event in a single row table -- Merge pull request #176 from pysmo/active-event-table - -refactor: save active event in a single row table -- Add test data for 3 events instead of just a single sac file -- Merge pull request #177 from pysmo/test-data - -test: add test data for 3 events instead of just a single sac file - Move defaults directly to model instead of the yaml nonsense -- Merge pull request #178 from pysmo/simplify-defaults - -refactor: move defaults directly to model instead of the yaml nonsense -- Merge pull request #179 from pysmo/more-enums - -feat: add enum types for Event and Seismogram parameters -- Switch to uv -- Merge pull request #186 from pysmo/switch-to-uv - -chore: switch to uv -- Merge pull request #187 from pysmo/plot-cmd - -feat: add plot command group -- Merge pull request #188 from pysmo/iccs-tw-pick - -feat: add time window picker -- Add logging ([#189](https://github.com/pysmo/aimbat/issues/189)) - -* feat: Add logging - -* format tutorial - -* add logging to checkdata - -* remove unused import -- Rename some commands to group them a bit better -- Merge pull request #191 from pysmo/rename-commands - -refactor: rename some commands to group them a bit better - Use more classes for tests ([#192](https://github.com/pysmo/aimbat/issues/192)) - Rely on pydantic for validation instead of doing it manually ([#193](https://github.com/pysmo/aimbat/issues/193)) -- Merge pull request #194 from pysmo/iccs-select-ccnorm - -feat: add iccs ccnorm selector -- Update to new pysmo names -- Merge pull request #195 from pysmo/iccs-select-ccnorm - -chore: update to new pysmo names -- Merge pull request #196 from pysmo/active-event-db-trigger - -feat: use a trigger to ensure only one event can be active - Use uuid as datbase id instead of int -- Merge pull request #197 from pysmo/uuid-keys - -refactor: use uuid as datbase id instead of int -- Merge pull request #198 from pysmo/update-iccs-options - -feat: update cli and lib to use new iccs options - Use window_pre and window_post as defaults instead of the whole timewindow -- Merge pull request #199 from pysmo/window-defaults - -refactor: use window_pre and window_post as defaults instead of the wโ€ฆ -- Merge pull request #200 from pysmo/fix-uuid-when-none-available - -fix: listing snapshots when there were non causes error -- Merge pull request #201 from pysmo/feat-delete-items - -feat: add ability to delete seismograms, events, and stations from prโ€ฆ - Better relationships between tables -- Merge pull request #202 from pysmo/reverse-data-dep - -refactor: better relationships between tables - Use env vars for defaults -- Merge pull request #203 from pysmo/dotenv - -refactor: use env vars for defaults -- Merge pull request #204 from pysmo/pydantic-settings - -feat: use pydantic-settings - Single uuid function for all classes -- Merge pull request #205 from pysmo/single-uuid-func - -refactor: single uuid function for all classes - Make data reading more modular -- Merge pull request #206 from pysmo/datasource - -refactor: make data reading more modular -- Merge pull request #207 from pysmo/feat-dump - -feat: add dump option to main tables -- Merge pull request #208 from pysmo/short-exceptions - -feat: add simple errors to cli -- Merge pull request #209 from pysmo/asciinema - -docs: add asciinema -- Merge pull request #210 from pysmo/station-loc-channel - -feat: use channel and location in station table -- Merge pull request #211 from pysmo/feat-use-pysmo-iccs-defaults - -feat: use pysmo defaults for ICCS - Move aimbat source to src directory -- Merge pull request #212 from pysmo/mv-src - -refactor: move aimbat source to src directory ### ๐Ÿš€ New Features @@ -374,4 +108,9 @@ refactor: move aimbat source to src directory - Add simple errors to cli - Use channel and location in station table - Use pysmo defaults for ICCS +- Add bandpass filtering ([#214](https://github.com/pysmo/aimbat/issues/214)) + +### ๐Ÿงช Testing + +- Add test data for 3 events instead of just a single sac file diff --git a/cliff.toml b/cliff.toml index 80cf50c..d653a89 100644 --- a/cliff.toml +++ b/cliff.toml @@ -10,7 +10,11 @@ All notable changes to the **AIMBAT** project will be documented in this file. body = """ {% if version %}\ - ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} + {% if previous.version %}\ + ## [{{ version | trim_start_matches(pat="v") }}](https://github.com/pysmo/aimbat/compare/{{ previous.version }}...{{ version }}) - {{ timestamp | date(format="%Y-%m-%d") }} + {% else %}\ + ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} + {% endif %}\ {% else %}\ ## [Unreleased] {% endif %}\ @@ -19,7 +23,7 @@ body = """ {% for commit in commits %} - {% if commit.scope %}**({{ commit.scope }})** {% endif %}\ {% if commit.breaking %}[**breaking**] {% endif %}\ - {{ commit.message | upper_first }}\ + {{ commit.message | split(pat="\n") | first | upper_first }}\ {% endfor %} {% endfor %}\n """ @@ -38,10 +42,18 @@ commit_preprocessors = [ # The categorization logic commit_parsers = [ + { message = "^.*\\(deps(-dev)?\\).*", skip = true }, + { message = "^Merge", skip = true }, + { message = "Signed-off-by: dependabot\\[bot\\]", skip = true }, + { message = "Potential fix for code scanning alert", skip = true }, { message = "^feat", group = "๐Ÿš€ New Features" }, { message = "^fix", group = "๐Ÿ› Bug Fixes" }, { message = "^perf", group = "โšก Performance Improvements" }, { message = "^docs", group = "๐Ÿ“š Documentation" }, + { message = "^refactor", group = "๐Ÿ”ง Refactoring" }, + { message = "^test", group = "๐Ÿงช Testing" }, + { message = "^style", group = "๐ŸŽจ Styling" }, + { message = "^chore", group = "๐Ÿ“ฆ Miscellaneous" }, { message = "^ci|^build", group = "โš™๏ธ DevOps & Infrastructure" }, { message = ".*uv.lock", group = "โš™๏ธ DevOps & Infrastructure" }, { message = ".*", group = "๐Ÿ” Other Changes" }, diff --git a/pyproject.toml b/pyproject.toml index 8c106ba..316d49b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "aimbat" -version = "2.0.0-dev0" +dynamic = ["version"] description = "AIMBAT: Automated and Interactive Measurement of Body-wave Arrival Times." authors = [ { name = "Xiaoting Lou", email = "xlou@u.northwestern.edu" }, @@ -64,18 +64,14 @@ default-groups = [ [tool.uv.sources] pysmo = { git = "https://github.com/pysmo/pysmo", rev = "master" } -[tool.hatch.build.targets.sdist] -exclude = [ - "tests", - "docs", -] - +[tool.hatch.version] +source = "vcs" [tool.hatch.build.targets.wheel] packages = ["src/aimbat"] [build-system] -requires = ["hatchling"] +requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" [tool.pytest.ini_options] diff --git a/src/aimbat/cli/data.py b/src/aimbat/cli/data.py index f885fb4..2fe4643 100644 --- a/src/aimbat/cli/data.py +++ b/src/aimbat/cli/data.py @@ -57,7 +57,7 @@ def cli_data_add( ) -> None: """Add or update data files in the AIMBAT project. - Parameters: + Args: seismogram_files: Seismogram files to be added. filetype: Specify type of seismogram file. show_progress_bar: Display progress bar. @@ -77,7 +77,7 @@ def cli_data_list( ) -> None: """Print information on the data stored in AIMBAT. - Parameters: + Args: all_events: Select data for all events. """ diff --git a/src/aimbat/cli/event.py b/src/aimbat/cli/event.py index fbdbd68..c7c5e52 100644 --- a/src/aimbat/cli/event.py +++ b/src/aimbat/cli/event.py @@ -97,7 +97,7 @@ def cli_event_delete( ) -> None: """Delete existing event. - Parameters: + Args: event_id: Event ID. """ @@ -130,7 +130,7 @@ def cli_event_activate( ) -> None: """Select the event to be active for Processing. - Parameters: + Args: event_id: Event ID number. """ @@ -147,7 +147,7 @@ def cli_event_parameter_get( ) -> None: """Get parameter value for the active event. - Parameters: + Args: name: Event parameter name. """ @@ -165,7 +165,7 @@ def cli_event_parameter_set( ) -> None: """Set parameter value for the active event. - Parameters: + Args: name: Event parameter name. value: Event parameter value. """ diff --git a/src/aimbat/cli/iccs.py b/src/aimbat/cli/iccs.py index 5225262..ce02d9b 100644 --- a/src/aimbat/cli/iccs.py +++ b/src/aimbat/cli/iccs.py @@ -104,7 +104,7 @@ def cli_iccs_run( ) -> None: """Run the ICCS algorithm. - Parameters: + Args: autoflip: Whether to automatically flip seismograms (multiply data by -1). autoselect: Whether to automatically de-select seismograms. """ @@ -151,7 +151,7 @@ def cli_iccs_update_pick( ) -> None: """Pick a new arrival time. - Parameters: + Args: use_seismogram_image: Use the seismogram image to update pick. """ @@ -174,7 +174,7 @@ def cli_iccs_update_timewindow( ) -> None: """Pick a new time window. - Parameters: + Args: use_seismogram_image: Use the seismogram image to pick the time window. """ diff --git a/src/aimbat/cli/seismogram.py b/src/aimbat/cli/seismogram.py index d8c3f4e..8989952 100644 --- a/src/aimbat/cli/seismogram.py +++ b/src/aimbat/cli/seismogram.py @@ -94,7 +94,7 @@ def cli_seismogram_delete( ) -> None: """Delete existing seismogram. - Parameters: + Args: seismogram_id: Seismogram ID. """ @@ -114,7 +114,7 @@ def cli_seismogram_get( ) -> None: """Get the value of a processing parameter. - Parameters: + Args: seismogram_id: Seismogram ID number. name: Name of the seismogram parameter. """ @@ -137,7 +137,7 @@ def cli_seismogram_set( ) -> None: """Set value of a processing parameter. - Parameters: + Args: seismogram_id: Seismogram ID number. name: Name of the seismogram parameter. value: Value of the seismogram parameter. @@ -161,7 +161,7 @@ def cli_seismogram_list( ) -> None: """Print information on the seismograms in the active event. - Parameters: + Args: all_events: Select seismograms for all events.""" table_parameters = table_parameters or TableParameters() diff --git a/src/aimbat/cli/snapshot.py b/src/aimbat/cli/snapshot.py index 325bb61..b8b4142 100644 --- a/src/aimbat/cli/snapshot.py +++ b/src/aimbat/cli/snapshot.py @@ -60,7 +60,7 @@ def cli_snapshot_create( ) -> None: """Create new snapshot. - Parameters: + Args: comment: Create snapshot with optional comment. """ @@ -77,7 +77,7 @@ def cli_snapshot_rollback( ) -> None: """Rollback to snapshot. - Parameters: + Args: snapshot_id: Snapshot ID Number. """ @@ -94,7 +94,7 @@ def cli_snapshop_delete( ) -> None: """Delete existing snapshot. - Parameters: + Args: snapshot_id: Snapshot ID Number. """ @@ -112,7 +112,7 @@ def cli_snapshot_list( ) -> None: """Print information on the snapshots for the active event. - Parameters: + Args: all_events: Select snapshots for all events. """ diff --git a/src/aimbat/cli/station.py b/src/aimbat/cli/station.py index f326ee3..9124211 100644 --- a/src/aimbat/cli/station.py +++ b/src/aimbat/cli/station.py @@ -47,7 +47,7 @@ def cli_station_delete( ) -> None: """Delete existing station. - Parameters: + Args: station_id: Station ID. """ @@ -65,7 +65,7 @@ def cli_station_list( ) -> None: """Print information on the stations used in the active event. - Parameters: + Args: all_events: Select stations for all events. """ diff --git a/src/aimbat/cli/utils/app.py b/src/aimbat/cli/utils/app.py index 5e2aac8..5bfa17f 100644 --- a/src/aimbat/cli/utils/app.py +++ b/src/aimbat/cli/utils/app.py @@ -31,7 +31,7 @@ def cli_checkdata( ) -> None: """Check if there are any problems with SAC files before adding them to a project. - Parameters: + Args: sacfiles: One or more SAC files. """ diff --git a/src/aimbat/cli/utils/sampledata.py b/src/aimbat/cli/utils/sampledata.py index c05fd41..ead5aa8 100644 --- a/src/aimbat/cli/utils/sampledata.py +++ b/src/aimbat/cli/utils/sampledata.py @@ -38,7 +38,7 @@ def sampledata_cli_download( Downloads an example dataset to the directory specified in the `sampledata_dir` AIMBAT default variable. - Parameters: + Args: force: Delete the download directory and re-download." """ diff --git a/src/aimbat/config.py b/src/aimbat/config.py index 97d68f2..0f43c02 100644 --- a/src/aimbat/config.py +++ b/src/aimbat/config.py @@ -158,7 +158,7 @@ def cli_settings_list( They can be changed using environment variables of the same name, or by adding a `.env` file to the current working directory. - Parameters: + Args: pretty: Print the table in a pretty format. """ print_settings_table(pretty) diff --git a/src/aimbat/lib/common.py b/src/aimbat/lib/common.py index 21d3a27..92d16a1 100644 --- a/src/aimbat/lib/common.py +++ b/src/aimbat/lib/common.py @@ -41,7 +41,7 @@ def string_to_uuid( ) -> UUID: """Determine a UUID from a string containing the first few characters. - Parameters: + Args: session: Database session. id: Input string to find UUID for. aimbat_class: Aimbat class to use to find UUID. diff --git a/src/aimbat/lib/data.py b/src/aimbat/lib/data.py index bcfc302..7c5622e 100644 --- a/src/aimbat/lib/data.py +++ b/src/aimbat/lib/data.py @@ -107,7 +107,7 @@ def add_files_to_project( ) -> None: """Add files to the AIMBAT database. - Parameters: + Args: datasources: List of data sources to add. datatype: Type of data. disable_progress_bar: Do not display progress bar. @@ -156,7 +156,7 @@ def add_files_to_project( def get_data_for_active_event(session: Session) -> Sequence[AimbatDataSource]: """Returns the AimbatFiles belonging to the active event. - Parameters: + Args: session: Database session. Returns: @@ -177,7 +177,7 @@ def get_data_for_active_event(session: Session) -> Sequence[AimbatDataSource]: def print_data_table(short: bool, all_events: bool = False) -> None: """Print a pretty table with AIMBAT data. - Parameters: + Args: short: Shorten UUIDs and format data. all_events: Print all files instead of limiting to the active event. """ diff --git a/src/aimbat/lib/event.py b/src/aimbat/lib/event.py index ff5ccb4..6bc6520 100644 --- a/src/aimbat/lib/event.py +++ b/src/aimbat/lib/event.py @@ -31,7 +31,7 @@ def delete_event_by_id(session: Session, event_id: UUID) -> None: """Delete an AimbatEvent from the database by ID. - Parameters: + Args: session: Database session. event_id: Event ID. @@ -52,7 +52,7 @@ def delete_event_by_id(session: Session, event_id: UUID) -> None: def delete_event(session: Session, event: AimbatEvent) -> None: """Delete an AimbatEvent from the database. - Parameters: + Args: session: Database session. event: Event to delete. """ @@ -67,7 +67,7 @@ def get_active_event(session: Session) -> AimbatEvent: """ Return the currently active event (i.e. the one being processed). - Parameters: + Args: session: SQL session. Returns: @@ -98,7 +98,7 @@ def set_active_event_by_id(session: Session, event_id: UUID) -> None: """ Set the currently selected event (i.e. the one being processed) by its ID. - Parameters: + Args: session: SQL session. event_id: ID of AIMBAT Event to set as active one. @@ -122,7 +122,7 @@ def set_active_event(session: Session, event: AimbatEvent) -> None: """ Set the active event (i.e. the one being processed). - Parameters: + Args: session: SQL session. event: AIMBAT Event to set as active. """ @@ -137,7 +137,7 @@ def set_active_event(session: Session, event: AimbatEvent) -> None: def get_completed_events(session: Session) -> Sequence[AimbatEvent]: """Get the events marked as completed. - Parameters: + Args: session: SQL session. """ @@ -155,7 +155,7 @@ def get_events_using_station( ) -> Sequence[AimbatEvent]: """Get all events that use a particular station. - Parameters: + Args: session: Database session. station: Station to return events for. @@ -203,7 +203,7 @@ def get_event_parameter( ) -> timedelta | bool | float: """Get event parameter value for the active event. - Parameters: + Args: session: Database session. name: Name of the parameter. """ @@ -244,7 +244,7 @@ def set_event_parameter( ) -> None: """Set event parameter value for the active event. - Parameters: + Args: session: Database session. name: Name of the parameter. value: Value to set. @@ -265,7 +265,7 @@ def set_event_parameter( def print_event_table(short: bool = True) -> None: """Print a pretty table with AIMBAT events. - Parameters: + Args: short: Shorten and format the output to be more human-readable. """ diff --git a/src/aimbat/lib/iccs.py b/src/aimbat/lib/iccs.py index 5042355..3e875bc 100644 --- a/src/aimbat/lib/iccs.py +++ b/src/aimbat/lib/iccs.py @@ -17,7 +17,7 @@ def create_iccs_instance(session: Session) -> ICCS: """Create an ICCS instance for the active event. - Parameters: + Args: session: Database session. Returns: @@ -43,7 +43,7 @@ def create_iccs_instance(session: Session) -> ICCS: def run_iccs(session: Session, iccs: ICCS, autoflip: bool, autoselect: bool) -> None: """Run ICCS algorithm. - Parameters: + Args: session: Database session. iccs: ICCS instance. autoflip: Whether to automatically flip seismograms. @@ -60,7 +60,7 @@ def run_iccs(session: Session, iccs: ICCS, autoflip: bool, autoselect: bool) -> def plot_stack(iccs: ICCS, context: bool, all: bool) -> None: """Plot the ICCS stack. - Parameters: + Args: iccs: ICCS instance. context: Whether to use seismograms with extra context. all: Whether to plot all seismograms. @@ -73,7 +73,7 @@ def plot_stack(iccs: ICCS, context: bool, all: bool) -> None: def plot_seismograms(iccs: ICCS, context: bool, all: bool) -> None: """Plot the ICCS seismograms as an image. - Parameters: + Args: iccs: ICCS instance. context: Whether to use seismograms with extra context. all: Whether to plot all seismograms. @@ -89,7 +89,7 @@ def update_pick( ) -> None: """Update the pick for the active event. - Parameters: + Args: iccs: ICCS instance. context: Whether to use seismograms with extra context. all: Whether to plot all seismograms. @@ -107,7 +107,7 @@ def update_timewindow( ) -> None: """Update the time window for the active event. - Parameters: + Args: iccs: ICCS instance. context: Whether to use seismograms with extra context. all: Whether to plot all seismograms. @@ -129,7 +129,7 @@ def update_timewindow( def update_min_ccnorm(session: Session, iccs: ICCS, context: bool, all: bool) -> None: """Update the minimum cross correlation coefficient for the active event. - Parameters: + Args: iccs: ICCS instance. context: Whether to use seismograms with extra context. all: Whether to plot all seismograms. diff --git a/src/aimbat/lib/io/_io.py b/src/aimbat/lib/io/_io.py index 81b5dbf..8e863b2 100644 --- a/src/aimbat/lib/io/_io.py +++ b/src/aimbat/lib/io/_io.py @@ -31,7 +31,7 @@ class DataType(StrEnum): def create_station(datasource: str | PathLike, datatype: DataType) -> AimbatStation: """Read station data from a data source and create an AimbatStation. - Parameters: + Args: datasource: Name of the data source. datatype: AIMBAT compatible datatype. @@ -55,7 +55,7 @@ def create_station(datasource: str | PathLike, datatype: DataType) -> AimbatStat def create_event(datasource: str | PathLike, datatype: DataType) -> AimbatEvent: """Read event data from a data source and create an AimbatEvent. - Parameters: + Args: datasource: Name of the data source. datatype: AIMBAT compatible datatype. @@ -81,7 +81,7 @@ def create_seismogram( ) -> AimbatSeismogram: """Read seismogram data from a data source and create an AimbatSeismogram. - Parameters: + Args: datasource: Name of the data source. datatype: AIMBAT compatible datatype. @@ -107,7 +107,7 @@ def read_seismogram_data( ) -> npt.NDArray[np.float64]: """Read seismogram data from a data source. - Parameters: + Args: datasource: Name of the data source. datatype: AIMBAT compatible filetype. @@ -133,7 +133,7 @@ def write_seismogram_data( ) -> None: """Write seismogram data to a data source. - Parameters: + Args: datasource: Name of the data source. datatype: AIMBAT compatible filetype. data: Seismogram data diff --git a/src/aimbat/lib/io/_sac.py b/src/aimbat/lib/io/_sac.py index 9fcd836..2cd29c9 100644 --- a/src/aimbat/lib/io/_sac.py +++ b/src/aimbat/lib/io/_sac.py @@ -17,7 +17,7 @@ def read_seismogram_data_from_sacfile( ) -> npt.NDArray[np.float64]: """Read seismogram data from a SAC file. - Parameters: + Args: sacfile: Name of the SAC file. Returns: @@ -34,7 +34,7 @@ def write_seismogram_data_to_sacfile( ) -> None: """Write seismogram data to a SAC file. - Parameters: + Args: sacfile: Name of the SAC file. data: Seismogram data. """ @@ -49,7 +49,7 @@ def write_seismogram_data_to_sacfile( def create_station_from_sacfile(sacfile: str | PathLike) -> AimbatStation: """Create an AimbatStation instance from a SAC file. - Parameters: + Args: sacfile: Name of the SAC file. Returns: @@ -68,7 +68,7 @@ def create_station_from_sacfile(sacfile: str | PathLike) -> AimbatStation: def create_event_from_sacfile(sacfile: str | PathLike) -> AimbatEvent: """Create an AimbatSeismogram instance from a SAC file. - Parameters: + Args: sacfile: Name of the SAC file. """ @@ -88,7 +88,7 @@ def create_seismogram_from_sacfile_and_pick_header( ) -> AimbatSeismogram: """Create an AimbatSeismogram instance from a SAC file. - Parameters: + Args: sacfile: Name of the SAC file. sac_pick_header: SAC header to use as t0 in AIMBAT. """ diff --git a/src/aimbat/lib/seismogram.py b/src/aimbat/lib/seismogram.py index 597a14d..6212a1f 100644 --- a/src/aimbat/lib/seismogram.py +++ b/src/aimbat/lib/seismogram.py @@ -34,7 +34,7 @@ def delete_seismogram_by_id(session: Session, seismogram_id: uuid.UUID) -> None: """Delete an AimbatSeismogram from the database by ID. - Parameters: + Args: session: Database session. seismogram_id: Seismogram ID. @@ -53,7 +53,7 @@ def delete_seismogram_by_id(session: Session, seismogram_id: uuid.UUID) -> None: def delete_seismogram(session: Session, seismogram: AimbatSeismogram) -> None: """Delete an AimbatSeismogram from the database. - Parameters: + Args: session: Database session. seismogram: Seismogram to delete. """ @@ -69,7 +69,7 @@ def get_seismogram_parameter_by_id( ) -> bool | datetime: """Get parameter value from an AimbatSeismogram by ID. - Parameters: + Args: session: Database session. seismogram_id: Seismogram ID. name: Name of the parameter value to return. @@ -114,7 +114,7 @@ def get_seismogram_parameter( ) -> bool | datetime: """Get parameter value from an AimbatSeismogram instance. - Parameters: + Args: seismogram: Seismogram. name: Name of the parameter value to return. @@ -135,7 +135,7 @@ def set_seismogram_parameter_by_id( ) -> None: """Set parameter value for an AimbatSeismogram by ID. - Parameters: + Args: session: Database session seismogram_id: Seismogram id. name: Name of the parameter. @@ -192,7 +192,7 @@ def set_seismogram_parameter( ) -> None: """Set parameter value for an AimbatSeismogram instance. - Parameters: + Args: session: Database session seismogram: Seismogram to set parameter for. name: Name of the parameter. @@ -215,7 +215,7 @@ def get_selected_seismograms( ) -> Sequence[AimbatSeismogram]: """Get the selected seismograms for the active avent. - Parameters: + Args: session: Database session. all_events: Get the selected seismograms for all events. @@ -251,7 +251,7 @@ def get_selected_seismograms( def print_seismogram_table(short: bool, all_events: bool = False) -> None: """Prints a pretty table with AIMBAT seismograms. - Parameters: + Args: short: Shorten and format the output to be more human-readable. all_events: Print seismograms for all events. """ @@ -345,7 +345,7 @@ def dump_seismogram_table() -> None: def plot_seismograms(use_qt: bool = False) -> Figure: """Plot all seismograms for a particular event ordered by great circle distance. - Parameters: + Args: use_qt: Plot with pqtgraph instead of pyplot """ diff --git a/src/aimbat/lib/snapshot.py b/src/aimbat/lib/snapshot.py index af986c1..88d6b28 100644 --- a/src/aimbat/lib/snapshot.py +++ b/src/aimbat/lib/snapshot.py @@ -20,7 +20,7 @@ def create_snapshot(session: Session, comment: str | None = None) -> None: """Create a snapshot of the AIMBAT processing parameters. - Parameters: + Args: session: Database session. comment: Optional comment. """ @@ -68,7 +68,7 @@ def create_snapshot(session: Session, comment: str | None = None) -> None: def rollback_to_snapshot_by_id(session: Session, snapshot_id: uuid.UUID) -> None: """Rollback to an AIMBAT parameters snapshot. - Parameters: + Args: session: Database session. snapshot_id: Snapshot id. """ @@ -88,7 +88,7 @@ def rollback_to_snapshot_by_id(session: Session, snapshot_id: uuid.UUID) -> None def rollback_to_snapshot(session: Session, snapshot: AimbatSnapshot) -> None: """Rollback to an AIMBAT parameters snapshot. - Parameters: + Args: snapshot: Snapshot. """ @@ -128,7 +128,7 @@ def rollback_to_snapshot(session: Session, snapshot: AimbatSnapshot) -> None: def delete_snapshot_by_id(session: Session, snapshot_id: uuid.UUID) -> None: """Delete an AIMBAT parameter snapshot. - Parameters: + Args: session: Database session. snapshot_id: Snapshot id. """ @@ -148,7 +148,7 @@ def delete_snapshot_by_id(session: Session, snapshot_id: uuid.UUID) -> None: def delete_snapshot(session: Session, snapshot: AimbatSnapshot) -> None: """Delete an AIMBAT parameter snapshot. - Parameters: + Args: session: Database session. snapshot: Snapshot. """ @@ -164,7 +164,7 @@ def get_snapshots( ) -> Sequence[AimbatSnapshot]: """Get the snapshots for the active avent. - Parameters: + Args: session: Database session. all_events: Get the selected snapshots for all events. @@ -191,7 +191,7 @@ def get_snapshots( def print_snapshot_table(short: bool, all_events: bool) -> None: """Print a pretty table with AIMBAT snapshots. - Parameters: + Args: short: Shorten and format the output to be more human-readable. all_events: Print all snapshots instead of limiting to the active event. """ diff --git a/src/aimbat/lib/station.py b/src/aimbat/lib/station.py index 33e5474..ea24e8d 100644 --- a/src/aimbat/lib/station.py +++ b/src/aimbat/lib/station.py @@ -14,7 +14,7 @@ def delete_station_by_id(session: Session, station_id: uuid.UUID) -> None: """Delete an AimbatStation from the database by ID. - Parameters: + Args: session: Database session. station_id: Station ID. @@ -33,7 +33,7 @@ def delete_station_by_id(session: Session, station_id: uuid.UUID) -> None: def delete_station(session: Session, station: AimbatStation) -> None: """Delete an AimbatStation from the database. - Parameters: + Args: session: Database session. station: Station to delete. """ @@ -49,7 +49,7 @@ def get_stations_in_event( ) -> Sequence[AimbatStation]: """Get the stations for a particular event. - Parameters: + Args: session: Database session. event: Event to return stations for. @@ -75,7 +75,7 @@ def get_stations_in_event( def print_station_table(short: bool, all_events: bool = False) -> None: """Prints a pretty table with AIMBAT stations. - Parameters: + Args: short: Shorten and format the output to be more human-readable. all_events: Print stations for all events. """ diff --git a/src/aimbat/lib/utils/checkdata.py b/src/aimbat/lib/utils/checkdata.py index 39a5bdb..a8d697a 100644 --- a/src/aimbat/lib/utils/checkdata.py +++ b/src/aimbat/lib/utils/checkdata.py @@ -6,7 +6,7 @@ def checkdata_station(station: Station) -> list[str]: """Check if station information is complete. - Parameters: + Args: station: station object to test. """ @@ -38,7 +38,7 @@ def checkdata_station(station: Station) -> list[str]: def checkdata_event(event: Event) -> list[str]: """Check if event information is complete. - Parameters: + Args: event: event object to test. """ @@ -70,7 +70,7 @@ def checkdata_event(event: Event) -> list[str]: def checkdata_seismogram(seismogram: Seismogram) -> list[str]: """Check if seismogram information is complete. - Parameters: + Args: seismogram: seismogram object to test. """ @@ -90,7 +90,7 @@ def checkdata_seismogram(seismogram: Seismogram) -> list[str]: def run_checks(sacfiles: list[Path]) -> None: """Run all checks on one or more SAC files. - Parameters: + Args: sacfiles: SAC files to test. """ diff --git a/uv.lock b/uv.lock index 3491c36..793499b 100644 --- a/uv.lock +++ b/uv.lock @@ -4,7 +4,6 @@ requires-python = ">=3.12, <3.15" [[package]] name = "aimbat" -version = "2.0.0.dev0" source = { editable = "." } dependencies = [ { name = "cyclopts" }, @@ -688,62 +687,62 @@ wheels = [ [[package]] name = "librt" -version = "0.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/3f/4ca7dd7819bf8ff303aca39c3c60e5320e46e766ab7f7dd627d3b9c11bdf/librt-0.8.0.tar.gz", hash = "sha256:cb74cdcbc0103fc988e04e5c58b0b31e8e5dd2babb9182b6f9490488eb36324b", size = 177306, upload-time = "2026-02-12T14:53:54.743Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/53/f3bc0c4921adb0d4a5afa0656f2c0fbe20e18e3e0295e12985b9a5dc3f55/librt-0.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:17269dd2745dbe8e42475acb28e419ad92dfa38214224b1b01020b8cac70b645", size = 66511, upload-time = "2026-02-12T14:52:30.34Z" }, - { url = "https://files.pythonhosted.org/packages/89/4b/4c96357432007c25a1b5e363045373a6c39481e49f6ba05234bb59a839c1/librt-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f4617cef654fca552f00ce5ffdf4f4b68770f18950e4246ce94629b789b92467", size = 68628, upload-time = "2026-02-12T14:52:31.491Z" }, - { url = "https://files.pythonhosted.org/packages/47/16/52d75374d1012e8fc709216b5eaa25f471370e2a2331b8be00f18670a6c7/librt-0.8.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5cb11061a736a9db45e3c1293cfcb1e3caf205912dfa085734ba750f2197ff9a", size = 198941, upload-time = "2026-02-12T14:52:32.489Z" }, - { url = "https://files.pythonhosted.org/packages/fc/11/d5dd89e5a2228567b1228d8602d896736247424484db086eea6b8010bcba/librt-0.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4bb00bd71b448f16749909b08a0ff16f58b079e2261c2e1000f2bbb2a4f0a45", size = 210009, upload-time = "2026-02-12T14:52:33.634Z" }, - { url = "https://files.pythonhosted.org/packages/49/d8/fc1a92a77c3020ee08ce2dc48aed4b42ab7c30fb43ce488d388673b0f164/librt-0.8.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95a719a049f0eefaf1952673223cf00d442952273cbd20cf2ed7ec423a0ef58d", size = 224461, upload-time = "2026-02-12T14:52:34.868Z" }, - { url = "https://files.pythonhosted.org/packages/7f/98/eb923e8b028cece924c246104aa800cf72e02d023a8ad4ca87135b05a2fe/librt-0.8.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bd32add59b58fba3439d48d6f36ac695830388e3da3e92e4fc26d2d02670d19c", size = 217538, upload-time = "2026-02-12T14:52:36.078Z" }, - { url = "https://files.pythonhosted.org/packages/fd/67/24e80ab170674a1d8ee9f9a83081dca4635519dbd0473b8321deecddb5be/librt-0.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4f764b2424cb04524ff7a486b9c391e93f93dc1bd8305b2136d25e582e99aa2f", size = 225110, upload-time = "2026-02-12T14:52:37.301Z" }, - { url = "https://files.pythonhosted.org/packages/d8/c7/6fbdcbd1a6e5243c7989c21d68ab967c153b391351174b4729e359d9977f/librt-0.8.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f04ca50e847abc486fa8f4107250566441e693779a5374ba211e96e238f298b9", size = 217758, upload-time = "2026-02-12T14:52:38.89Z" }, - { url = "https://files.pythonhosted.org/packages/4b/bd/4d6b36669db086e3d747434430073e14def032dd58ad97959bf7e2d06c67/librt-0.8.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9ab3a3475a55b89b87ffd7e6665838e8458e0b596c22e0177e0f961434ec474a", size = 218384, upload-time = "2026-02-12T14:52:40.637Z" }, - { url = "https://files.pythonhosted.org/packages/50/2d/afe966beb0a8f179b132f3e95c8dd90738a23e9ebdba10f89a3f192f9366/librt-0.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e36a8da17134ffc29373775d88c04832f9ecfab1880470661813e6c7991ef79", size = 241187, upload-time = "2026-02-12T14:52:43.55Z" }, - { url = "https://files.pythonhosted.org/packages/02/d0/6172ea4af2b538462785ab1a68e52d5c99cfb9866a7caf00fdf388299734/librt-0.8.0-cp312-cp312-win32.whl", hash = "sha256:4eb5e06ebcc668677ed6389164f52f13f71737fc8be471101fa8b4ce77baeb0c", size = 54914, upload-time = "2026-02-12T14:52:44.676Z" }, - { url = "https://files.pythonhosted.org/packages/d4/cb/ceb6ed6175612a4337ad49fb01ef594712b934b4bc88ce8a63554832eb44/librt-0.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:0a33335eb59921e77c9acc05d0e654e4e32e45b014a4d61517897c11591094f8", size = 62020, upload-time = "2026-02-12T14:52:45.676Z" }, - { url = "https://files.pythonhosted.org/packages/f1/7e/61701acbc67da74ce06ddc7ba9483e81c70f44236b2d00f6a4bfee1aacbf/librt-0.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:24a01c13a2a9bdad20997a4443ebe6e329df063d1978bbe2ebbf637878a46d1e", size = 52443, upload-time = "2026-02-12T14:52:47.218Z" }, - { url = "https://files.pythonhosted.org/packages/6d/32/3edb0bcb4113a9c8bdcd1750663a54565d255027657a5df9d90f13ee07fa/librt-0.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7f820210e21e3a8bf8fde2ae3c3d10106d4de9ead28cbfdf6d0f0f41f5b12fa1", size = 66522, upload-time = "2026-02-12T14:52:48.219Z" }, - { url = "https://files.pythonhosted.org/packages/30/ab/e8c3d05e281f5d405ebdcc5bc8ab36df23e1a4b40ac9da8c3eb9928b72b9/librt-0.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4831c44b8919e75ca0dfb52052897c1ef59fdae19d3589893fbd068f1e41afbf", size = 68658, upload-time = "2026-02-12T14:52:50.351Z" }, - { url = "https://files.pythonhosted.org/packages/7c/d3/74a206c47b7748bbc8c43942de3ed67de4c231156e148b4f9250869593df/librt-0.8.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:88c6e75540f1f10f5e0fc5e87b4b6c290f0e90d1db8c6734f670840494764af8", size = 199287, upload-time = "2026-02-12T14:52:51.938Z" }, - { url = "https://files.pythonhosted.org/packages/fa/29/ef98a9131cf12cb95771d24e4c411fda96c89dc78b09c2de4704877ebee4/librt-0.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9646178cd794704d722306c2c920c221abbf080fede3ba539d5afdec16c46dad", size = 210293, upload-time = "2026-02-12T14:52:53.128Z" }, - { url = "https://files.pythonhosted.org/packages/5b/3e/89b4968cb08c53d4c2d8b02517081dfe4b9e07a959ec143d333d76899f6c/librt-0.8.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e1af31a710e17891d9adf0dbd9a5fcd94901a3922a96499abdbf7ce658f4e01", size = 224801, upload-time = "2026-02-12T14:52:54.367Z" }, - { url = "https://files.pythonhosted.org/packages/6d/28/f38526d501f9513f8b48d78e6be4a241e15dd4b000056dc8b3f06ee9ce5d/librt-0.8.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:507e94f4bec00b2f590fbe55f48cd518a208e2474a3b90a60aa8f29136ddbada", size = 218090, upload-time = "2026-02-12T14:52:55.758Z" }, - { url = "https://files.pythonhosted.org/packages/02/ec/64e29887c5009c24dc9c397116c680caffc50286f62bd99c39e3875a2854/librt-0.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f1178e0de0c271231a660fbef9be6acdfa1d596803464706862bef6644cc1cae", size = 225483, upload-time = "2026-02-12T14:52:57.375Z" }, - { url = "https://files.pythonhosted.org/packages/ee/16/7850bdbc9f1a32d3feff2708d90c56fc0490b13f1012e438532781aa598c/librt-0.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:71fc517efc14f75c2f74b1f0a5d5eb4a8e06aa135c34d18eaf3522f4a53cd62d", size = 218226, upload-time = "2026-02-12T14:52:58.534Z" }, - { url = "https://files.pythonhosted.org/packages/1c/4a/166bffc992d65ddefa7c47052010a87c059b44a458ebaf8f5eba384b0533/librt-0.8.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:0583aef7e9a720dd40f26a2ad5a1bf2ccbb90059dac2b32ac516df232c701db3", size = 218755, upload-time = "2026-02-12T14:52:59.701Z" }, - { url = "https://files.pythonhosted.org/packages/da/5d/9aeee038bcc72a9cfaaee934463fe9280a73c5440d36bd3175069d2cb97b/librt-0.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d0f76fc73480d42285c609c0ea74d79856c160fa828ff9aceab574ea4ecfd7b", size = 241617, upload-time = "2026-02-12T14:53:00.966Z" }, - { url = "https://files.pythonhosted.org/packages/64/ff/2bec6b0296b9d0402aa6ec8540aa19ebcb875d669c37800cb43d10d9c3a3/librt-0.8.0-cp313-cp313-win32.whl", hash = "sha256:e79dbc8f57de360f0ed987dc7de7be814b4803ef0e8fc6d3ff86e16798c99935", size = 54966, upload-time = "2026-02-12T14:53:02.042Z" }, - { url = "https://files.pythonhosted.org/packages/08/8d/bf44633b0182996b2c7ea69a03a5c529683fa1f6b8e45c03fe874ff40d56/librt-0.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:25b3e667cbfc9000c4740b282df599ebd91dbdcc1aa6785050e4c1d6be5329ab", size = 62000, upload-time = "2026-02-12T14:53:03.822Z" }, - { url = "https://files.pythonhosted.org/packages/5c/fd/c6472b8e0eac0925001f75e366cf5500bcb975357a65ef1f6b5749389d3a/librt-0.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:e9a3a38eb4134ad33122a6d575e6324831f930a771d951a15ce232e0237412c2", size = 52496, upload-time = "2026-02-12T14:53:04.889Z" }, - { url = "https://files.pythonhosted.org/packages/e0/13/79ebfe30cd273d7c0ce37a5f14dc489c5fb8b722a008983db2cfd57270bb/librt-0.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:421765e8c6b18e64d21c8ead315708a56fc24f44075059702e421d164575fdda", size = 66078, upload-time = "2026-02-12T14:53:06.085Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8f/d11eca40b62a8d5e759239a80636386ef88adecb10d1a050b38cc0da9f9e/librt-0.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:48f84830a8f8ad7918afd743fd7c4eb558728bceab7b0e38fd5a5cf78206a556", size = 68309, upload-time = "2026-02-12T14:53:07.121Z" }, - { url = "https://files.pythonhosted.org/packages/9c/b4/f12ee70a3596db40ff3c88ec9eaa4e323f3b92f77505b4d900746706ec6a/librt-0.8.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9f09d4884f882baa39a7e36bbf3eae124c4ca2a223efb91e567381d1c55c6b06", size = 196804, upload-time = "2026-02-12T14:53:08.164Z" }, - { url = "https://files.pythonhosted.org/packages/8b/7e/70dbbdc0271fd626abe1671ad117bcd61a9a88cdc6a10ccfbfc703db1873/librt-0.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:693697133c3b32aa9b27f040e3691be210e9ac4d905061859a9ed519b1d5a376", size = 206915, upload-time = "2026-02-12T14:53:09.333Z" }, - { url = "https://files.pythonhosted.org/packages/79/13/6b9e05a635d4327608d06b3c1702166e3b3e78315846373446cf90d7b0bf/librt-0.8.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5512aae4648152abaf4d48b59890503fcbe86e85abc12fb9b096fe948bdd816", size = 221200, upload-time = "2026-02-12T14:53:10.68Z" }, - { url = "https://files.pythonhosted.org/packages/35/6c/e19a3ac53e9414de43a73d7507d2d766cd22d8ca763d29a4e072d628db42/librt-0.8.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:995d24caa6bbb34bcdd4a41df98ac6d1af637cfa8975cb0790e47d6623e70e3e", size = 214640, upload-time = "2026-02-12T14:53:12.342Z" }, - { url = "https://files.pythonhosted.org/packages/30/f0/23a78464788619e8c70f090cfd099cce4973eed142c4dccb99fc322283fd/librt-0.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b9aef96d7593584e31ef6ac1eb9775355b0099fee7651fae3a15bc8657b67b52", size = 221980, upload-time = "2026-02-12T14:53:13.603Z" }, - { url = "https://files.pythonhosted.org/packages/03/32/38e21420c5d7aa8a8bd2c7a7d5252ab174a5a8aaec8b5551968979b747bf/librt-0.8.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4f6e975377fbc4c9567cb33ea9ab826031b6c7ec0515bfae66a4fb110d40d6da", size = 215146, upload-time = "2026-02-12T14:53:14.8Z" }, - { url = "https://files.pythonhosted.org/packages/bb/00/bd9ecf38b1824c25240b3ad982fb62c80f0a969e6679091ba2b3afb2b510/librt-0.8.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:daae5e955764be8fd70a93e9e5133c75297f8bce1e802e1d3683b98f77e1c5ab", size = 215203, upload-time = "2026-02-12T14:53:16.087Z" }, - { url = "https://files.pythonhosted.org/packages/b9/60/7559bcc5279d37810b98d4a52616febd7b8eef04391714fd6bdf629598b1/librt-0.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7bd68cebf3131bb920d5984f75fe302d758db33264e44b45ad139385662d7bc3", size = 237937, upload-time = "2026-02-12T14:53:17.236Z" }, - { url = "https://files.pythonhosted.org/packages/41/cc/be3e7da88f1abbe2642672af1dc00a0bccece11ca60241b1883f3018d8d5/librt-0.8.0-cp314-cp314-win32.whl", hash = "sha256:1e6811cac1dcb27ca4c74e0ca4a5917a8e06db0d8408d30daee3a41724bfde7a", size = 50685, upload-time = "2026-02-12T14:53:18.888Z" }, - { url = "https://files.pythonhosted.org/packages/38/27/e381d0df182a8f61ef1f6025d8b138b3318cc9d18ad4d5f47c3bf7492523/librt-0.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:178707cda89d910c3b28bf5aa5f69d3d4734e0f6ae102f753ad79edef83a83c7", size = 57872, upload-time = "2026-02-12T14:53:19.942Z" }, - { url = "https://files.pythonhosted.org/packages/c5/0c/ca9dfdf00554a44dea7d555001248269a4bab569e1590a91391feb863fa4/librt-0.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:3e8b77b5f54d0937b26512774916041756c9eb3e66f1031971e626eea49d0bf4", size = 48056, upload-time = "2026-02-12T14:53:21.473Z" }, - { url = "https://files.pythonhosted.org/packages/f2/ed/6cc9c4ad24f90c8e782193c7b4a857408fd49540800613d1356c63567d7b/librt-0.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:789911e8fa40a2e82f41120c936b1965f3213c67f5a483fc5a41f5839a05dcbb", size = 68307, upload-time = "2026-02-12T14:53:22.498Z" }, - { url = "https://files.pythonhosted.org/packages/84/d8/0e94292c6b3e00b6eeea39dd44d5703d1ec29b6dafce7eea19dc8f1aedbd/librt-0.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2b37437e7e4ef5e15a297b36ba9e577f73e29564131d86dd75875705e97402b5", size = 70999, upload-time = "2026-02-12T14:53:23.603Z" }, - { url = "https://files.pythonhosted.org/packages/0e/f4/6be1afcbdeedbdbbf54a7c9d73ad43e1bf36897cebf3978308cd64922e02/librt-0.8.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:671a6152edf3b924d98a5ed5e6982ec9cb30894085482acadce0975f031d4c5c", size = 220782, upload-time = "2026-02-12T14:53:25.133Z" }, - { url = "https://files.pythonhosted.org/packages/f0/8d/f306e8caa93cfaf5c6c9e0d940908d75dc6af4fd856baa5535c922ee02b1/librt-0.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8992ca186a1678107b0af3d0c9303d8c7305981b9914989b9788319ed4d89546", size = 235420, upload-time = "2026-02-12T14:53:27.047Z" }, - { url = "https://files.pythonhosted.org/packages/d6/f2/65d86bd462e9c351326564ca805e8457442149f348496e25ccd94583ffa2/librt-0.8.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:001e5330093d887b8b9165823eca6c5c4db183fe4edea4fdc0680bbac5f46944", size = 246452, upload-time = "2026-02-12T14:53:28.341Z" }, - { url = "https://files.pythonhosted.org/packages/03/94/39c88b503b4cb3fcbdeb3caa29672b6b44ebee8dcc8a54d49839ac280f3f/librt-0.8.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d920789eca7ef71df7f31fd547ec0d3002e04d77f30ba6881e08a630e7b2c30e", size = 238891, upload-time = "2026-02-12T14:53:29.625Z" }, - { url = "https://files.pythonhosted.org/packages/e3/c6/6c0d68190893d01b71b9569b07a1c811e280c0065a791249921c83dc0290/librt-0.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:82fb4602d1b3e303a58bfe6165992b5a78d823ec646445356c332cd5f5bbaa61", size = 250249, upload-time = "2026-02-12T14:53:30.93Z" }, - { url = "https://files.pythonhosted.org/packages/52/7a/f715ed9e039035d0ea637579c3c0155ab3709a7046bc408c0fb05d337121/librt-0.8.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:4d3e38797eb482485b486898f89415a6ab163bc291476bd95712e42cf4383c05", size = 240642, upload-time = "2026-02-12T14:53:32.174Z" }, - { url = "https://files.pythonhosted.org/packages/c2/3c/609000a333debf5992efe087edc6467c1fdbdddca5b610355569bbea9589/librt-0.8.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a905091a13e0884701226860836d0386b88c72ce5c2fdfba6618e14c72be9f25", size = 239621, upload-time = "2026-02-12T14:53:33.39Z" }, - { url = "https://files.pythonhosted.org/packages/b9/df/87b0673d5c395a8f34f38569c116c93142d4dc7e04af2510620772d6bd4f/librt-0.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:375eda7acfce1f15f5ed56cfc960669eefa1ec8732e3e9087c3c4c3f2066759c", size = 262986, upload-time = "2026-02-12T14:53:34.617Z" }, - { url = "https://files.pythonhosted.org/packages/09/7f/6bbbe9dcda649684773aaea78b87fff4d7e59550fbc2877faa83612087a3/librt-0.8.0-cp314-cp314t-win32.whl", hash = "sha256:2ccdd20d9a72c562ffb73098ac411de351b53a6fbb3390903b2d33078ef90447", size = 51328, upload-time = "2026-02-12T14:53:36.15Z" }, - { url = "https://files.pythonhosted.org/packages/bb/f3/e1981ab6fa9b41be0396648b5850267888a752d025313a9e929c4856208e/librt-0.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:25e82d920d4d62ad741592fcf8d0f3bda0e3fc388a184cb7d2f566c681c5f7b9", size = 58719, upload-time = "2026-02-12T14:53:37.183Z" }, - { url = "https://files.pythonhosted.org/packages/94/d1/433b3c06e78f23486fe4fdd19bc134657eb30997d2054b0dbf52bbf3382e/librt-0.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:92249938ab744a5890580d3cb2b22042f0dce71cdaa7c1369823df62bedf7cbc", size = 48753, upload-time = "2026-02-12T14:53:38.539Z" }, +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/9c/b4b0c54d84da4a94b37bd44151e46d5e583c9534c7e02250b961b1b6d8a8/librt-0.8.1.tar.gz", hash = "sha256:be46a14693955b3bd96014ccbdb8339ee8c9346fbe11c1b78901b55125f14c73", size = 177471, upload-time = "2026-02-17T16:13:06.101Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/21/d39b0a87ac52fc98f621fb6f8060efb017a767ebbbac2f99fbcbc9ddc0d7/librt-0.8.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a28f2612ab566b17f3698b0da021ff9960610301607c9a5e8eaca62f5e1c350a", size = 66516, upload-time = "2026-02-17T16:11:41.604Z" }, + { url = "https://files.pythonhosted.org/packages/69/f1/46375e71441c43e8ae335905e069f1c54febee63a146278bcee8782c84fd/librt-0.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:60a78b694c9aee2a0f1aaeaa7d101cf713e92e8423a941d2897f4fa37908dab9", size = 68634, upload-time = "2026-02-17T16:11:43.268Z" }, + { url = "https://files.pythonhosted.org/packages/0a/33/c510de7f93bf1fa19e13423a606d8189a02624a800710f6e6a0a0f0784b3/librt-0.8.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:758509ea3f1eba2a57558e7e98f4659d0ea7670bff49673b0dde18a3c7e6c0eb", size = 198941, upload-time = "2026-02-17T16:11:44.28Z" }, + { url = "https://files.pythonhosted.org/packages/dd/36/e725903416409a533d92398e88ce665476f275081d0d7d42f9c4951999e5/librt-0.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:039b9f2c506bd0ab0f8725aa5ba339c6f0cd19d3b514b50d134789809c24285d", size = 209991, upload-time = "2026-02-17T16:11:45.462Z" }, + { url = "https://files.pythonhosted.org/packages/30/7a/8d908a152e1875c9f8eac96c97a480df425e657cdb47854b9efaa4998889/librt-0.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bb54f1205a3a6ab41a6fd71dfcdcbd278670d3a90ca502a30d9da583105b6f7", size = 224476, upload-time = "2026-02-17T16:11:46.542Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b8/a22c34f2c485b8903a06f3fe3315341fe6876ef3599792344669db98fcff/librt-0.8.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:05bd41cdee35b0c59c259f870f6da532a2c5ca57db95b5f23689fcb5c9e42440", size = 217518, upload-time = "2026-02-17T16:11:47.746Z" }, + { url = "https://files.pythonhosted.org/packages/79/6f/5c6fea00357e4f82ba44f81dbfb027921f1ab10e320d4a64e1c408d035d9/librt-0.8.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adfab487facf03f0d0857b8710cf82d0704a309d8ffc33b03d9302b4c64e91a9", size = 225116, upload-time = "2026-02-17T16:11:49.298Z" }, + { url = "https://files.pythonhosted.org/packages/f2/a0/95ced4e7b1267fe1e2720a111685bcddf0e781f7e9e0ce59d751c44dcfe5/librt-0.8.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:153188fe98a72f206042be10a2c6026139852805215ed9539186312d50a8e972", size = 217751, upload-time = "2026-02-17T16:11:50.49Z" }, + { url = "https://files.pythonhosted.org/packages/93/c2/0517281cb4d4101c27ab59472924e67f55e375bc46bedae94ac6dc6e1902/librt-0.8.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:dd3c41254ee98604b08bd5b3af5bf0a89740d4ee0711de95b65166bf44091921", size = 218378, upload-time = "2026-02-17T16:11:51.783Z" }, + { url = "https://files.pythonhosted.org/packages/43/e8/37b3ac108e8976888e559a7b227d0ceac03c384cfd3e7a1c2ee248dbae79/librt-0.8.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e0d138c7ae532908cbb342162b2611dbd4d90c941cd25ab82084aaf71d2c0bd0", size = 241199, upload-time = "2026-02-17T16:11:53.561Z" }, + { url = "https://files.pythonhosted.org/packages/4b/5b/35812d041c53967fedf551a39399271bbe4257e681236a2cf1a69c8e7fa1/librt-0.8.1-cp312-cp312-win32.whl", hash = "sha256:43353b943613c5d9c49a25aaffdba46f888ec354e71e3529a00cca3f04d66a7a", size = 54917, upload-time = "2026-02-17T16:11:54.758Z" }, + { url = "https://files.pythonhosted.org/packages/de/d1/fa5d5331b862b9775aaf2a100f5ef86854e5d4407f71bddf102f4421e034/librt-0.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:ff8baf1f8d3f4b6b7257fcb75a501f2a5499d0dda57645baa09d4d0d34b19444", size = 62017, upload-time = "2026-02-17T16:11:55.748Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7c/c614252f9acda59b01a66e2ddfd243ed1c7e1deab0293332dfbccf862808/librt-0.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:0f2ae3725904f7377e11cc37722d5d401e8b3d5851fb9273d7f4fe04f6b3d37d", size = 52441, upload-time = "2026-02-17T16:11:56.801Z" }, + { url = "https://files.pythonhosted.org/packages/c5/3c/f614c8e4eaac7cbf2bbdf9528790b21d89e277ee20d57dc6e559c626105f/librt-0.8.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7e6bad1cd94f6764e1e21950542f818a09316645337fd5ab9a7acc45d99a8f35", size = 66529, upload-time = "2026-02-17T16:11:57.809Z" }, + { url = "https://files.pythonhosted.org/packages/ab/96/5836544a45100ae411eda07d29e3d99448e5258b6e9c8059deb92945f5c2/librt-0.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cf450f498c30af55551ba4f66b9123b7185362ec8b625a773b3d39aa1a717583", size = 68669, upload-time = "2026-02-17T16:11:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/06/53/f0b992b57af6d5531bf4677d75c44f095f2366a1741fb695ee462ae04b05/librt-0.8.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:eca45e982fa074090057132e30585a7e8674e9e885d402eae85633e9f449ce6c", size = 199279, upload-time = "2026-02-17T16:11:59.862Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ad/4848cc16e268d14280d8168aee4f31cea92bbd2b79ce33d3e166f2b4e4fc/librt-0.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c3811485fccfda840861905b8c70bba5ec094e02825598bb9d4ca3936857a04", size = 210288, upload-time = "2026-02-17T16:12:00.954Z" }, + { url = "https://files.pythonhosted.org/packages/52/05/27fdc2e95de26273d83b96742d8d3b7345f2ea2bdbd2405cc504644f2096/librt-0.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e4af413908f77294605e28cfd98063f54b2c790561383971d2f52d113d9c363", size = 224809, upload-time = "2026-02-17T16:12:02.108Z" }, + { url = "https://files.pythonhosted.org/packages/7a/d0/78200a45ba3240cb042bc597d6f2accba9193a2c57d0356268cbbe2d0925/librt-0.8.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5212a5bd7fae98dae95710032902edcd2ec4dc994e883294f75c857b83f9aba0", size = 218075, upload-time = "2026-02-17T16:12:03.631Z" }, + { url = "https://files.pythonhosted.org/packages/af/72/a210839fa74c90474897124c064ffca07f8d4b347b6574d309686aae7ca6/librt-0.8.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e692aa2d1d604e6ca12d35e51fdc36f4cda6345e28e36374579f7ef3611b3012", size = 225486, upload-time = "2026-02-17T16:12:04.725Z" }, + { url = "https://files.pythonhosted.org/packages/a3/c1/a03cc63722339ddbf087485f253493e2b013039f5b707e8e6016141130fa/librt-0.8.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4be2a5c926b9770c9e08e717f05737a269b9d0ebc5d2f0060f0fe3fe9ce47acb", size = 218219, upload-time = "2026-02-17T16:12:05.828Z" }, + { url = "https://files.pythonhosted.org/packages/58/f5/fff6108af0acf941c6f274a946aea0e484bd10cd2dc37610287ce49388c5/librt-0.8.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fd1a720332ea335ceb544cf0a03f81df92abd4bb887679fd1e460976b0e6214b", size = 218750, upload-time = "2026-02-17T16:12:07.09Z" }, + { url = "https://files.pythonhosted.org/packages/71/67/5a387bfef30ec1e4b4f30562c8586566faf87e47d696768c19feb49e3646/librt-0.8.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2af9e01e0ef80d95ae3c720be101227edae5f2fe7e3dc63d8857fadfc5a1d", size = 241624, upload-time = "2026-02-17T16:12:08.43Z" }, + { url = "https://files.pythonhosted.org/packages/d4/be/24f8502db11d405232ac1162eb98069ca49c3306c1d75c6ccc61d9af8789/librt-0.8.1-cp313-cp313-win32.whl", hash = "sha256:086a32dbb71336627e78cc1d6ee305a68d038ef7d4c39aaff41ae8c9aa46e91a", size = 54969, upload-time = "2026-02-17T16:12:09.633Z" }, + { url = "https://files.pythonhosted.org/packages/5c/73/c9fdf6cb2a529c1a092ce769a12d88c8cca991194dfe641b6af12fa964d2/librt-0.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:e11769a1dbda4da7b00a76cfffa67aa47cfa66921d2724539eee4b9ede780b79", size = 62000, upload-time = "2026-02-17T16:12:10.632Z" }, + { url = "https://files.pythonhosted.org/packages/d3/97/68f80ca3ac4924f250cdfa6e20142a803e5e50fca96ef5148c52ee8c10ea/librt-0.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:924817ab3141aca17893386ee13261f1d100d1ef410d70afe4389f2359fea4f0", size = 52495, upload-time = "2026-02-17T16:12:11.633Z" }, + { url = "https://files.pythonhosted.org/packages/c9/6a/907ef6800f7bca71b525a05f1839b21f708c09043b1c6aa77b6b827b3996/librt-0.8.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6cfa7fe54fd4d1f47130017351a959fe5804bda7a0bc7e07a2cdbc3fdd28d34f", size = 66081, upload-time = "2026-02-17T16:12:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/1b/18/25e991cd5640c9fb0f8d91b18797b29066b792f17bf8493da183bf5caabe/librt-0.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:228c2409c079f8c11fb2e5d7b277077f694cb93443eb760e00b3b83cb8b3176c", size = 68309, upload-time = "2026-02-17T16:12:13.756Z" }, + { url = "https://files.pythonhosted.org/packages/a4/36/46820d03f058cfb5a9de5940640ba03165ed8aded69e0733c417bb04df34/librt-0.8.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7aae78ab5e3206181780e56912d1b9bb9f90a7249ce12f0e8bf531d0462dd0fc", size = 196804, upload-time = "2026-02-17T16:12:14.818Z" }, + { url = "https://files.pythonhosted.org/packages/59/18/5dd0d3b87b8ff9c061849fbdb347758d1f724b9a82241aa908e0ec54ccd0/librt-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:172d57ec04346b047ca6af181e1ea4858086c80bdf455f61994c4aa6fc3f866c", size = 206907, upload-time = "2026-02-17T16:12:16.513Z" }, + { url = "https://files.pythonhosted.org/packages/d1/96/ef04902aad1424fd7299b62d1890e803e6ab4018c3044dca5922319c4b97/librt-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b1977c4ea97ce5eb7755a78fae68d87e4102e4aaf54985e8b56806849cc06a3", size = 221217, upload-time = "2026-02-17T16:12:17.906Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ff/7e01f2dda84a8f5d280637a2e5827210a8acca9a567a54507ef1c75b342d/librt-0.8.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:10c42e1f6fd06733ef65ae7bebce2872bcafd8d6e6b0a08fe0a05a23b044fb14", size = 214622, upload-time = "2026-02-17T16:12:19.108Z" }, + { url = "https://files.pythonhosted.org/packages/1e/8c/5b093d08a13946034fed57619742f790faf77058558b14ca36a6e331161e/librt-0.8.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4c8dfa264b9193c4ee19113c985c95f876fae5e51f731494fc4e0cf594990ba7", size = 221987, upload-time = "2026-02-17T16:12:20.331Z" }, + { url = "https://files.pythonhosted.org/packages/d3/cc/86b0b3b151d40920ad45a94ce0171dec1aebba8a9d72bb3fa00c73ab25dd/librt-0.8.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:01170b6729a438f0dedc4a26ed342e3dc4f02d1000b4b19f980e1877f0c297e6", size = 215132, upload-time = "2026-02-17T16:12:21.54Z" }, + { url = "https://files.pythonhosted.org/packages/fc/be/8588164a46edf1e69858d952654e216a9a91174688eeefb9efbb38a9c799/librt-0.8.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:7b02679a0d783bdae30d443025b94465d8c3dc512f32f5b5031f93f57ac32071", size = 215195, upload-time = "2026-02-17T16:12:23.073Z" }, + { url = "https://files.pythonhosted.org/packages/f5/f2/0b9279bea735c734d69344ecfe056c1ba211694a72df10f568745c899c76/librt-0.8.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:190b109bb69592a3401fe1ffdea41a2e73370ace2ffdc4a0e8e2b39cdea81b78", size = 237946, upload-time = "2026-02-17T16:12:24.275Z" }, + { url = "https://files.pythonhosted.org/packages/e9/cc/5f2a34fbc8aeb35314a3641f9956fa9051a947424652fad9882be7a97949/librt-0.8.1-cp314-cp314-win32.whl", hash = "sha256:e70a57ecf89a0f64c24e37f38d3fe217a58169d2fe6ed6d70554964042474023", size = 50689, upload-time = "2026-02-17T16:12:25.766Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/cd4d010ab2147339ca2b93e959c3686e964edc6de66ddacc935c325883d7/librt-0.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:7e2f3edca35664499fbb36e4770650c4bd4a08abc1f4458eab9df4ec56389730", size = 57875, upload-time = "2026-02-17T16:12:27.465Z" }, + { url = "https://files.pythonhosted.org/packages/84/0f/2143cb3c3ca48bd3379dcd11817163ca50781927c4537345d608b5045998/librt-0.8.1-cp314-cp314-win_arm64.whl", hash = "sha256:0d2f82168e55ddefd27c01c654ce52379c0750ddc31ee86b4b266bcf4d65f2a3", size = 48058, upload-time = "2026-02-17T16:12:28.556Z" }, + { url = "https://files.pythonhosted.org/packages/d2/0e/9b23a87e37baf00311c3efe6b48d6b6c168c29902dfc3f04c338372fd7db/librt-0.8.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2c74a2da57a094bd48d03fa5d196da83d2815678385d2978657499063709abe1", size = 68313, upload-time = "2026-02-17T16:12:29.659Z" }, + { url = "https://files.pythonhosted.org/packages/db/9a/859c41e5a4f1c84200a7d2b92f586aa27133c8243b6cac9926f6e54d01b9/librt-0.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a355d99c4c0d8e5b770313b8b247411ed40949ca44e33e46a4789b9293a907ee", size = 70994, upload-time = "2026-02-17T16:12:31.516Z" }, + { url = "https://files.pythonhosted.org/packages/4c/28/10605366ee599ed34223ac2bf66404c6fb59399f47108215d16d5ad751a8/librt-0.8.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2eb345e8b33fb748227409c9f1233d4df354d6e54091f0e8fc53acdb2ffedeb7", size = 220770, upload-time = "2026-02-17T16:12:33.294Z" }, + { url = "https://files.pythonhosted.org/packages/af/8d/16ed8fd452dafae9c48d17a6bc1ee3e818fd40ef718d149a8eff2c9f4ea2/librt-0.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9be2f15e53ce4e83cc08adc29b26fb5978db62ef2a366fbdf716c8a6c8901040", size = 235409, upload-time = "2026-02-17T16:12:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/89/1b/7bdf3e49349c134b25db816e4a3db6b94a47ac69d7d46b1e682c2c4949be/librt-0.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:785ae29c1f5c6e7c2cde2c7c0e148147f4503da3abc5d44d482068da5322fd9e", size = 246473, upload-time = "2026-02-17T16:12:36.656Z" }, + { url = "https://files.pythonhosted.org/packages/4e/8a/91fab8e4fd2a24930a17188c7af5380eb27b203d72101c9cc000dbdfd95a/librt-0.8.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d3a7da44baf692f0c6aeb5b2a09c5e6fc7a703bca9ffa337ddd2e2da53f7732", size = 238866, upload-time = "2026-02-17T16:12:37.849Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e0/c45a098843fc7c07e18a7f8a24ca8496aecbf7bdcd54980c6ca1aaa79a8e/librt-0.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5fc48998000cbc39ec0d5311312dda93ecf92b39aaf184c5e817d5d440b29624", size = 250248, upload-time = "2026-02-17T16:12:39.445Z" }, + { url = "https://files.pythonhosted.org/packages/82/30/07627de23036640c952cce0c1fe78972e77d7d2f8fd54fa5ef4554ff4a56/librt-0.8.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e96baa6820280077a78244b2e06e416480ed859bbd8e5d641cf5742919d8beb4", size = 240629, upload-time = "2026-02-17T16:12:40.889Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c1/55bfe1ee3542eba055616f9098eaf6eddb966efb0ca0f44eaa4aba327307/librt-0.8.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:31362dbfe297b23590530007062c32c6f6176f6099646bb2c95ab1b00a57c382", size = 239615, upload-time = "2026-02-17T16:12:42.446Z" }, + { url = "https://files.pythonhosted.org/packages/2b/39/191d3d28abc26c9099b19852e6c99f7f6d400b82fa5a4e80291bd3803e19/librt-0.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc3656283d11540ab0ea01978378e73e10002145117055e03722417aeab30994", size = 263001, upload-time = "2026-02-17T16:12:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/b9/eb/7697f60fbe7042ab4e88f4ee6af496b7f222fffb0a4e3593ef1f29f81652/librt-0.8.1-cp314-cp314t-win32.whl", hash = "sha256:738f08021b3142c2918c03692608baed43bc51144c29e35807682f8070ee2a3a", size = 51328, upload-time = "2026-02-17T16:12:45.148Z" }, + { url = "https://files.pythonhosted.org/packages/7c/72/34bf2eb7a15414a23e5e70ecb9440c1d3179f393d9349338a91e2781c0fb/librt-0.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:89815a22daf9c51884fb5dbe4f1ef65ee6a146e0b6a8df05f753e2e4a9359bf4", size = 58722, upload-time = "2026-02-17T16:12:46.85Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c8/d148e041732d631fc76036f8b30fae4e77b027a1e95b7a84bb522481a940/librt-0.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:bf512a71a23504ed08103a13c941f763db13fb11177beb3d9244c98c29fb4a61", size = 48755, upload-time = "2026-02-17T16:12:47.943Z" }, ] [[package]]