Metadata-Version: 2.1
Name: noether
Version: 0.1.2.post2
Summary: Work with physical measurements and constants
Home-page: https://github.com/yunruse/noether
Author: Mia yun Ruse
Author-email: mia@yunru.se
License: UNKNOWN
Project-URL: Bug Tracker, https://www.notion.so/yunruse/714348466a284bd1b0d1942c81688579
Keywords: physics unit measure constant measurement uncertainty
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: License :: OSI Approved
Classifier: Topic :: Scientific/Engineering
Classifier: Development Status :: 3 - Alpha
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: toml (>=0.10.0)

# Noether (in development: Alpha 0.1.2)

## The problem: million-dollar errors are easy to make

[We're](https://medium.com/predict/a-328-million-dollar-conversion-error-f6d525c85fd2) [all](https://www.pri.org/stories/2012-02-23/new-clues-emerge-centuries-old-swedish-shipwreck) [human](https://www.bbc.co.uk/news/magazine-27509559).
Whether you're a layman, a student or a NASA senior, it's immensely easy to make simple mistakes, especially when working with physical measurements. A good programming language will shout at you if you try to add a list to a number, so why shouldn't it stop you adding a metre to a minute? Enter Noether.

```bash
pip install noether&& python3.7 -im noether
```

You can use Noether as a calculator or in simulations (though at the moment it's not exactly performant). Noether is intended to compliment `numpy`, `matplotlib` and `scipy` with

- A disturbingly extensive and constantly-updated catalogue of scientific units, measurements and constants
- Automatic unit conversion, and propagation of dimension and statistical error

In the pipeline:

- Advanced support for more sophisticated statistical errors 
- Treat functions like code with [ASTley], and automagically graph them in a REPL
- Use [Astley]'s code analysis with Numba to ensure both code safety and performance 

[Astley]: https://github.com/yunruse/astley

## Units

BMI, bushel and byte; eotvos, erg and electronvolt; parsec, plethron and potrzebie. Noether has (almost) every unit known, with a thorough unit system allowing for automatic dimensional analysis.

```python
>>> 0.5 * gibibyte / second
4.295×10⁹bps <data rate>
>>> a = 12 * pixel / mm
>>> a
1.2×10⁴pix·m⁻¹ <image quality>
>>> display(ppi)
>>> a
304.8ppi <image quality>
>>> (joule / kilogram / kelvin)(12, 2)
12 ± 2K⁻¹·m²·s⁻² <specific heat capacity>
>>> e / electron.mass
(2.187×10¹¹ ± 1649)A·kg⁻¹·s
```

You may, of course, define your own units and dimensions on the fly:

```
>>> FF = Unit(furlong / fortnight, 'ff')
>>> display(FF)
>>> c
1.803×10¹²ff <velocity, speed>

>>> health = Dimension.new('health', dimsym='H', unitsym='a')
>>> apple = Unit(health)
>>> apple / day
1.157×10⁻⁵a·s⁻¹
```

## Installation and use

Noether currently requires Python 3.7 or above. It's easy to jump into a quick calculator-like instance quick:

```bash
pip install noether
python -im noether
```

This simply runs `import noether as noe` and `from noether import *`. We'll assume the latter has been done; it makes for a neater experience when working with units.

Some yet-undocumented submodules may happen to require `astley`,  `numpy`, `matplotlib` and `scipy` to use:

```bash
pip install numpy matplotlib
git clone https://github.com/yunruse/astley
# modify your PATH as needed
```

## Update log

Updates are released to the `master` branch every couple of weeks. They are not guaranteed to have a sturdy, documented and tested API just yet, but each release should be pretty dang stable.

Every single change I plan to make can be found on my [kanban board]. Thanks to internet magic, this appears live, exactly as I see and edit. If you have a feature suggestion, drop me an issue on GitHub. Bug fixes will stay in GitHub: they're much more important than features.

[kanban board]: https://www.notion.so/714348466a284bd1b0d1942c81688579

 - **Alpha 0.1.2** (2020-05-07):
   - Added basic config support.
   - This is the first PyPI release.

 - **Alpha 0.1.1** (2020-02-16):
   - Many bugfixes and units added.
   - Added `noether.fraction` with `ContinuedFraction` (and `Fraction` with shortcut).
   - Introduced basic backend for `UnitSystem` for quality of life (eg `display(imperial)`).
   - Made special tweaks so `python -m noether` lazy-loads at fast pace.

 - **Alpha 0.1** (2020-01-26):
   - Made many improvements to display of units.
   - The global `display` was added, alongside a wide range of particles.
   - A test suite begins development.

## Thank you!

This project has a decently large scope, and I want it to appeal to anybody who has ever needed to measure anything. Your feedback, no matter how small, means a lot to me!

## Legal (and academical)

Copyright (c) Mia yun Ruse ([yunru.se]) 2018–2020.
All scientific data shown remains in the public domain, and is cited where relevant.

This work is licensed under a [Creative Commons Attribution 4.0](cc) International
license. In non-legal terms: do whatever you like, including science! But if you
want to redistribute this project (derived or not), please credit me, or shoot me a
message and I'll see what I can do.

[yunru.se]: https://yunru.se/
[cc]: https://creativecommons.org/licenses/by/4.0/


