Metadata-Version: 2.4
Name: rmellipse
Version: 0.4.3a2
Summary: A package for propagating uncertainties according to the GUM.
Author-email: Daniel Cole Gray <daniel.c.gray@nist.gov>, "Zenn C. Roberts" <zenn.roberts@nist.gov>, "Aaron M. Hagerstrom" <aaron.hagerstrom@nist.gov>
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: Microsoft :: Windows
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE.md
Requires-Dist: pandas>=2.2.2
Requires-Dist: numpy>=2.0.0
Requires-Dist: matplotlib>=3.9.0
Requires-Dist: h5py>=3.11.0
Requires-Dist: scipy>=1.15.2
Requires-Dist: xarray>=2025.3.1
Requires-Dist: click>=8.2.1
Requires-Dist: pyyaml>=6.0.2
Requires-Dist: jsonschema>=4.25.0
Requires-Dist: cdcs>=0.2.6
Requires-Dist: h5netcdf>=1.6.4
Requires-Dist: tqdm>=4.67.1
Requires-Dist: keyring>=25.6.0
Requires-Dist: semver>=3.0.4
Requires-Dist: python-dotenv>=1.2.1
Requires-Dist: gitpython>=3.1.45
Requires-Dist: psutil>=7.1.2
Requires-Dist: dict-hash>=1.3.7
Dynamic: license-file

# Rocky Mountain Ellipse
Rocky Mountain Ellipse (RME) is a software package designed to provide an explicit digital record of the metrological traceability of a measurement result. In other words, RME will allows users to build a record that describes how a measurement result can be related to a reference through a documented unbroken chain of calibrations, each contributing to the [measurement uncertainty](https://jcgm.bipm.org/vim/en/2.41.html). To show the traceability of measurements, RME provides a flexible, explicit system to organize and annotate scientific data and data analysis workflows.Because measurement uncertainty is closely related to traceability, RME allows users to track how the uncertainty of a measurement results derives from other measurements by providing tools to facilitate measurement uncertainty propagation (linear finite-difference and Monte-Carlo) through arbitrary Python functions. The system is compatible with the BIPM Guide to the expression of uncertainty in measurement (GUM). RME is intended to be part of a [FAIR](https://www.go-fair.org/fair-principles/) software ecosystem that will facilitate re-use of code and data. This vision includes an online archive that could eventually store records of NIST’s entire traceability chain, and beyond. As part of that vision, this package focuses on the development of three core utilities:

1. arrschema, a Python module for annotating multi-dimensional array like data-structures with JSON documents, and validating in-memory representations of those structures.

2. RMEMeas and RMEProp, Python classes for correlated uncertainty propagation using [XArray](https://docs.xarray.dev/en/stable/).

3. A command line tool for producing, releasing, and managing datasets stored and obtained from a [CDCS](https://www.nist.gov/itl/ssd/information-systems-group/configurable-data-curation-system-cdcs)  based data archive.


Please see the [documentation](https://pages.nist.gov/rmellipse-ipages).

> [!NOTE]  
> RMEllipse is still in development. We expect to make changes that will break backward compatibility. Also, there are known bugs that we have not fixed yet. Specifically, we plan to re-write the Monte-Carlo uncertainty propagation algorithm in RMEProp. Please check back for updates. When we increment the version to 1.0, we expect that that version will be stable. 

## Installation

### Prerequisites:

- libhdf5-dev
- gnome-keyring

### Dependencies


Install the most recent stable build with [uv](https://docs.astral.sh/uv/):

```
uv add git+https://github.com/usnistgov/rmellipse --branch stable
```

Or with pip:

```
pip install git+https://github.com/usnistgov/rmellipse@stable
```

## Developer Tools
It is assumed you have the following programs installed on your computer.

* [uv](https://docs.astral.sh/uv/) for package management
* [git bash](https://git-scm.com/downloads) or similar terminal emulator to run shell scripts if you are on windows.

Clone the repo and run, from the root directory:
```
uv sync
```
This will generate the virtual environment for the package.

Install git pre-commit:
```
uv run pre-commit install
```

### Running Local Tests
In a bash terminal, run:

```
tools/test.sh
tools/test.sh open
```
This should execute all the defined tests with
[pytest](https://docs.pytest.org/en/stable/). In addition, the
open command will open a webpage with detailed reports about
code coverage.

### Building Local Documentation
Clean the local documentation build (this needs to be run sometimes
if you are modifying the documentation and it gets into a broken state). It will reset the build directories and the next call to
build it will be completely from scratch.
```
tools/docs.sh clean
```

To build a copy of the current state
of the documentation with your changes run:
```
tools/docs.sh html
```

To build the full documentation with tagged
versions and the most recent stable and development
changes (this takes a while and is usually only run
as part of the release jobs) run:

```
tools/docs.sh html-multiversioned
```

To open the documentation (you may have to call open
in a newe console) run

```
tools/docs.sh serve
tools/docs.sh open
```

This will serve a local copy of the documentation on your local host,
and the open command will launch your default web browser directly to that page.
Currently, this web page is on port 8000.

### Code Profiling
If you are writing a test script, you can run it in a code
profile from the cloned directory. This will open a webpage
to navigate the statistics of your tests script once it
complete.

```
tools/profile.sh <path/to/script.py>
```

## Acknowledgements
The development of RMEllipse is partially funded through the [CHIPS Metrology program](https://www.nist.gov/chips/research-development-programs/metrology-program). Our goal is to use it to disseminate RF calibration and uncertainty analysis techniques to monitor RF power delivered to plasma etching and deposition tools used in semiconductor manufacturing.

## Authors

Contributors names and contact info

Daniel C. Gray, Zenn C. Roberts, Aaron M. Hagerstrom

