{"id":37073513,"url":"https://github.com/yunruse/noether","last_synced_at":"2026-01-14T08:37:42.819Z","repository":{"id":57446563,"uuid":"156014553","full_name":"yunruse/Noether","owner":"yunruse","description":"Just another units package","archived":false,"fork":false,"pushed_at":"2025-08-25T00:05:45.000Z","size":819,"stargazers_count":9,"open_issues_count":17,"forks_count":0,"subscribers_count":2,"default_branch":"release","last_synced_at":"2025-08-25T02:16:06.852Z","etag":null,"topics":["calculator","python","units"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yunruse.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-11-03T18:59:47.000Z","updated_at":"2025-08-24T23:51:31.000Z","dependencies_parsed_at":"2023-02-18T17:00:32.539Z","dependency_job_id":"73810d6d-2bf3-47c7-9254-2e95a57951c5","html_url":"https://github.com/yunruse/Noether","commit_stats":{"total_commits":739,"total_committers":3,"mean_commits":"246.33333333333334","dds":"0.19485791610284164","last_synced_commit":"73c6504dadd42f9de3d4546cc08f0deb4e130a00"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/yunruse/Noether","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yunruse%2FNoether","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yunruse%2FNoether/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yunruse%2FNoether/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yunruse%2FNoether/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yunruse","download_url":"https://codeload.github.com/yunruse/Noether/tar.gz/refs/heads/release","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yunruse%2FNoether/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414668,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:31:27.429Z","status":"ssl_error","status_checked_at":"2026-01-14T08:31:19.098Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["calculator","python","units"],"created_at":"2026-01-14T08:37:42.195Z","updated_at":"2026-01-14T08:37:42.796Z","avatar_url":"https://github.com/yunruse.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Noether\n`523 units, 60 prefixes`\n\n[![PyPI](https://img.shields.io/pypi/v/noether?color=blue)](https://pypi.org/packages/noether)\n\n**Noether** is a unit-enriched Python package, akin to Wolfram Alpha or gnu `units`. It has a large (and expanding) catalogue of up-to-date units and constants, allowing code to be written directly in the units they are concerned with while also ensuring e.g. you don't mistakenly add an energy to a length.\n\nJust grab Python 3.10 or later and `pip install noether` to run!\n\nDevelopment is ongoing, especially in expanding the unit catalogue and improving unit display mechanisms.\n\n## Usage \n\nNoether can be used as a Python package or as a CLI:\n\n```sh\n$ alias noe='python -im noether'\n$ noe marathon\nmarathon  # length, 42195 m, Race length based on Greek legend, set by convention from 1908 Summer Olympics\n$ noe 23degC @ degF\n73.4 °F  # temperature\n$ noe 'horsepower @ dB(kW)'\n-1.33418061 dB(kW)  # power, 0.73549875 kW\n```\n\nThe CLI allows a few niceties such as slightly terser syntax, but otherwise behaves identically to Python:\n\n```sh\n$ noe 5cm @ in --value\n1.9685039370078738\n$ noe\n\u003e\u003e\u003e 5*cm @ inch\n1.9685039370078738 in  # length\n```\n\nIn addition to `@` for display, you can more permanently set display units:\n\n```py\n\u003e\u003e\u003e display(inch)\n\u003e\u003e\u003e 5 * cm\n\u003e\u003e\u003e mile\nmile  # length, 63360 in\n```\n\nUnits propagate uncertainty automatically under most operations:\n\n```py\n\u003e\u003e\u003e m(5, 0.1)**3\n125 ± 7.5 m**3  # volume\n```\n\nYou can define your own units and dimensions:\n\n```py\n\u003e\u003e\u003e foo = Unit(3e11 * furlong / fortnight, 'foo')\n\u003e\u003e\u003e c @ foo\n6.008724999284181 foo  # speed\n\n\u003e\u003e\u003e health = Dimension.new('health', 'H')\n\u003e\u003e\u003e apple = Unit(health, 'apple', 'a')\n\u003e\u003e\u003e apple / day\napple / day  # health / time, 1.1574074074074073e-05 a / s\n```\n\nVarious `conf` settings allow for customisation to behaviour:\n\n```py\n\u003e\u003e\u003e conf.info_spectrum = True\n\u003e\u003e\u003e nm(400)\n4e-07 m  # length, visible, purple\n```\n\nUse `conf.save()` to save to (by default) `~/.config/noether.toml`.\n\n\n## Roadmap\n\nThe approximate roadmap for future releases is:\n- Support for GNU `units`, including exporting a file to work directly in `units`\n- A custom format (likely YAML) for defining the catalogue far more quickly\n- Support for numpy, matplotlib\n\n## For more, see...\n\n- [CHANGELOG.md](https://github.com/yunruse/Noether/blob/release/CHANGELOG.md)\n- [CONTRIBUTING.md](https://github.com/yunruse/Noether/blob/release/CONTRIBUTING.md)\n- [LICENSE.txt](https://github.com/yunruse/Noether/blob/release/LICENSE.txt)\n\nOther unit packages include::\n\n- [gnu `units`](https://www.gnu.org/software/units/), a command-line tool you likely already have\n- [pint](https://github.com/hgrecco/pint), a Python package with numpy support\n- [units](https://pypi.org/project/units/), a simple Python package for defining your own units\n- [unyt](https://pypi.org/project/unyt/), a Python package with numpy support\n- [Wolfram Alpha](https://www.wolframalpha.com), a comprehensive online intelligence engine\n\n### 📚 _**Did you know?**_\n\n```\n\u003e\u003e\u003e lunation / (year % lunation)\n2.7153489666011486\n```\nA [**lunation**](https://en.wikipedia.org/wiki/Lunar_month#Synodic_month) (about 29 days) separates one full moon from another. Every so often a thirteenth full moon occurs in a year - \"a [blue moon](https://en.wikipedia.org/wiki/Blue_moon)\". \"Once in a blue moon\" is actually only every 2.71 years or so - not as rare as you'd think. Don't tell Sinatra!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyunruse%2Fnoether","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyunruse%2Fnoether","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyunruse%2Fnoether/lists"}