{"id":25256990,"url":"https://github.com/galacticdynamics/quax-blocks","last_synced_at":"2025-10-27T02:31:37.426Z","repository":{"id":276245802,"uuid":"928660700","full_name":"GalacticDynamics/quax-blocks","owner":"GalacticDynamics","description":"Blocks for constructing `quax` classes","archived":false,"fork":false,"pushed_at":"2025-02-07T05:14:26.000Z","size":65,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-07T05:20:36.912Z","etag":null,"topics":["array","jax","quax"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GalacticDynamics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-07T02:19:00.000Z","updated_at":"2025-02-07T05:13:56.000Z","dependencies_parsed_at":"2025-02-08T15:15:18.936Z","dependency_job_id":null,"html_url":"https://github.com/GalacticDynamics/quax-blocks","commit_stats":null,"previous_names":["galacticdynamics/quax-blocks"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GalacticDynamics%2Fquax-blocks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GalacticDynamics%2Fquax-blocks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GalacticDynamics%2Fquax-blocks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GalacticDynamics%2Fquax-blocks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GalacticDynamics","download_url":"https://codeload.github.com/GalacticDynamics/quax-blocks/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238422923,"owners_count":19469657,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["array","jax","quax"],"created_at":"2025-02-12T06:32:13.245Z","updated_at":"2025-10-27T02:31:37.421Z","avatar_url":"https://github.com/GalacticDynamics.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align='center'\u003e quax-blocks \u003c/h1\u003e\n\u003ch3 align=\"center\"\u003eBuilding blocks for \u003ccode\u003eQuax\u003c/code\u003e classes\u003c/h3\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://pypi.org/project/quax-blocks/\"\u003e \u003cimg alt=\"PyPI: quax-blocks\" src=\"https://img.shields.io/pypi/v/quax-blocks?style=flat\" /\u003e \u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/quax-blocks/\"\u003e \u003cimg alt=\"PyPI versions: quax-blocks\" src=\"https://img.shields.io/pypi/pyversions/quax-blocks\" /\u003e \u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/quax-blocks/\"\u003e \u003cimg alt=\"quax-blocks license\" src=\"https://img.shields.io/github/license/GalacticDynamics/quax-blocks\" /\u003e \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/GalacticDynamics/quax-blocks/actions/workflows/ci.yml\"\u003e \u003cimg alt=\"CI status\" src=\"https://github.com/GalacticDynamics/quax-blocks/actions/workflows/ci.yml/badge.svg?branch=main\" /\u003e \u003c/a\u003e\n    \u003ca href=\"https://codecov.io/gh/GalacticDynamics/quax-blocks\"\u003e \u003cimg alt=\"codecov\" src=\"https://codecov.io/gh/GalacticDynamics/quax-blocks/graph/badge.svg\" /\u003e \u003c/a\u003e\n    \u003ca href=\"https://scientific-python.org/specs/spec-0000/\"\u003e \u003cimg alt=\"ruff\" src=\"https://img.shields.io/badge/SPEC-0-green?labelColor=%23004811\u0026color=%235CA038\" /\u003e \u003c/a\u003e\n    \u003ca href=\"https://docs.astral.sh/ruff/\"\u003e \u003cimg alt=\"ruff\" src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\" /\u003e \u003c/a\u003e\n    \u003ca href=\"https://pre-commit.com\"\u003e \u003cimg alt=\"pre-commit\" src=\"https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\" /\u003e \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n[`quax`](https://docs.kidger.site/quax/) enables JAX to work with custom\narray-ish objects. This library provides the building blocks, like comparison\noperators, for building `quax`-compatible classes.\n\n## Installation\n\n[![PyPI version][pypi-version]][pypi-link]\n[![PyPI platforms][pypi-platforms]][pypi-link]\n\n```bash\npip install quax-blocks\n```\n\n## Documentation\n\n### Rich Comparison Operators\n\n| Comparison Operator | Lax Operator         | NumPy Operator         |\n| ------------------- | -------------------- | ---------------------- |\n| All Comparisons     | `LaxComparisonMixin` | `NumpyComparisonMixin` |\n| `__eq__`            | `LaxEqMixin`         | `NumpyEqMixin`         |\n| `__ne__`            | `LaxNeMixin`         | `NumpyNeMixin`         |\n| `__lt__`            | `LaxLtMixin`         | `NumpyLtMixin`         |\n| `__le__`            | `LaxLeMixin`         | `NumpyLeMixin`         |\n| `__gt__`            | `LaxGtMixin`         | `NumpyGtMixin`         |\n| `__ge__`            | `LaxGeMixin`         | `NumpyGeMixin`         |\n\n### Binary Operators\n\n| Binary Operator        | Lax Operator        | NumPy Operator        |\n| ---------------------- | ------------------- | --------------------- |\n| All Binary Operations  | `LaxBinaryOpsMixin` | `NumpyBinaryOpsMixin` |\n| All Float Operations   | `LaxMathMixin`      | `NumpyMathMixin`      |\n| `__add__`              | `LaxAddMixin`       | `NumpyAddMixin`       |\n| `__radd__`             | `LaxRAddMixin`      | `NumpyRAddMixin`      |\n| `__sub__`              | `LaxSubMixin`       | `NumpySubMixin`       |\n| `__rsub__`             | `LaxRSubMixin`      | `NumpyRSubMixin`      |\n| `__mul__`              | `LaxMulMixin`       | `NumpyMulMixin`       |\n| `__rmul__`             | `LaxRMulMixin`      | `NumpyRMulMixin`      |\n| `__matmul__`           | `LaxMatMulMixin`    | `NumpyMatMulMixin`    |\n| `__rmatmul__`          | `LaxRMatMulMixin`   | `NumpyRMatMulMixin`   |\n| `__truediv__`          | `LaxTrueDivMixin`   | `NumpyTrueDivMixin`   |\n| `__rtruediv__`         | `LaxRTrueDivMixin`  | `NumpyRTrueDivMixin`  |\n| `__floordiv__`         | `LaxFloorDivMixin`  | `NumpyFloorDivMixin`  |\n| `__rfloordiv__`        | `LaxRFloorDivMixin` | `NumpyRFloorDivMixin` |\n| `__mod__`              | `LaxModMixin`       | `NumpyModMixin`       |\n| `__rmod__`             | `LaxRModMixin`      | `NumpyRModMixin`      |\n| `__divmod__`           | Not Implemented     | `NumpyDivModMixin`    |\n| `__rdivmod__`          | Not Implemented     | `NumpyRDivModMixin`   |\n| `__pow__`              | `LaxPowMixin`       | `NumpyPowMixin`       |\n| `__rpow__`             | `LaxRPowMixin`      | `NumpyRPowMixin`      |\n| All Bitwise Operations | `LaxBitwiseMixin`   | `NumpyBitwiseMixin`   |\n| `__lshift__`           | `LaxLShiftMixin`    | `NumpyLShiftMixin`    |\n| `__rlshift__`          | `LaxRLShiftMixin`   | `NumpyRLShiftMixin`   |\n| `__rshift__`           | `LaxRShiftMixin`    | `NumpyRShiftMixin`    |\n| `__rrshift__`          | `LaxRRShiftMixin`   | `NumpyRRShiftMixin`   |\n| `__and__`              | `LaxAndMixin`       | `NumpyAndMixin`       |\n| `__rand__`             | `LaxRAndMixin`      | `NumpyRAndMixin`      |\n| `__xor__`              | `LaxXorMixin`       | `NumpyXorMixin`       |\n| `__rxor__`             | `LaxRXorMixin`      | `NumpyRXorMixin`      |\n| `__or__`               | `LaxOrMixin`        | `NumpyOrMixin`        |\n| `__ror__`              | `LaxROrMixin`       | `NumpyROrMixin`       |\n\n### Unary Operators\n\n| Unary Operator       | Lax Operator    | NumPy Operator     |\n| -------------------- | --------------- | ------------------ |\n| All Unary Operations | `LaxUnaryMixin` | `NumpyUnaryMixin`  |\n| `__pos__`            | `LaxPosMixin`   | `NumpyPosMixin`    |\n| `__neg__`            | `LaxNegMixin`   | `NumpyNegMixin`    |\n| `__abs__`            | `LaxAbsMixin`   | `NumpyAbsMixin`    |\n| `__invert__`         | Not Implemented | `NumpyInvertMixin` |\n\n### Rounding Operators\n\n| Unary Operator | Lax Operator    | NumPy Operator    |\n| -------------- | --------------- | ----------------- |\n| `__round__`    | `LaxRoundMixin` | `NumpyRoundMixin` |\n| `__trunc__`    | `LaxTruncMixin` | `NumpyTruncMixin` |\n| `__floor__`    | `LaxFloorMixin` | `NumpyFloorMixin` |\n| `__ceil__`     | `LaxCeilMixin`  | `NumpyCeilMixin`  |\n\n### Containers\n\n| Container Operator | Lax Operator         | NumPy Operator         |\n| ------------------ | -------------------- | ---------------------- |\n| `__len__`          | `LaxLenMixin`        | `NumpyLenMixin`        |\n| `__length_hint__`  | `LaxLengthHintMixin` | `NumpyLengthHintMixin` |\n\n### Copy Operators\n\n| Copy Operator  | NumPy Operator       |\n| -------------- | -------------------- |\n| `__copy__`     | `NumpyCopyMixin`     |\n| `__deepcopy__` | `NumpyDeepCopyMixin` |\n\n## Development\n\n[![Actions Status][actions-badge]][actions-link]\n[![codecov][codecov-badge]][codecov-link]\n[![SPEC 0 — Minimum Supported Dependencies][spec0-badge]][spec0-link]\n[![pre-commit][pre-commit-badge]][pre-commit-link]\n[![ruff][ruff-badge]][ruff-link]\n\nWe welcome contributions!\n\n## Citation\n\n[![DOI][zenodo-badge]][zenodo-link]\n\nIf you found this library to be useful and want to support the development and\nmaintenance of lower-level utility libraries for the scientific community,\nconsider citing this work.\n\n\u003c!-- prettier-ignore-start --\u003e\n[actions-badge]:            https://github.com/GalacticDynamics/quax-blocks/workflows/CI/badge.svg\n[actions-link]:             https://github.com/GalacticDynamics/quax-blocks/actions\n[codecov-badge]:            https://codecov.io/gh/GalacticDynamics/quax-blocks/graph/badge.svg?token=9G19ONVD3U\n[codecov-link]:             https://codecov.io/gh/GalacticDynamics/quax-blocks\n[pre-commit-badge]:         https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\n[pre-commit-link]:          https://pre-commit.com\n[pypi-link]:                https://pypi.org/project/quax-blocks/\n[pypi-platforms]:           https://img.shields.io/pypi/pyversions/quax-blocks\n[pypi-version]:             https://img.shields.io/pypi/v/quax-blocks\n[ruff-badge]:               https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\n[ruff-link]:                https://docs.astral.sh/ruff/\n[spec0-badge]:              https://img.shields.io/badge/SPEC-0-green?labelColor=%23004811\u0026color=%235CA038\n[spec0-link]:               https://scientific-python.org/specs/spec-0000/\n[zenodo-badge]:             https://zenodo.org/badge/732262318.svg\n[zenodo-link]:              https://zenodo.org/doi/10.5281/zenodo.10850521\n\n\u003c!-- prettier-ignore-end --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgalacticdynamics%2Fquax-blocks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgalacticdynamics%2Fquax-blocks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgalacticdynamics%2Fquax-blocks/lists"}