Metadata-Version: 2.4
Name: tatc
Version: 3.6.0
Summary: Tradespace Analysis Toolkit for Constellations (TAT-C)
Author-email: "Paul T. Grogan" <paul.grogan@asu.edu>
License-Expression: BSD-3-Clause
Project-URL: Homepage, https://tatc.readthedocs.io
Project-URL: Repository, https://github.com/code-lab-org/tatc
Project-URL: Documentation, https://tatc.readthedocs.io
Project-URL: Issues, https://github.com/code-lab-org/tatc/issues
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 4 - Beta
Requires-Python: <3.15,>=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: geopandas>=0.13.2
Requires-Dist: numba
Requires-Dist: numpy
Requires-Dist: pandas
Requires-Dist: pydantic>=2.6
Requires-Dist: pyproj
Requires-Dist: shapely>=2
Requires-Dist: skyfield>=1.48
Requires-Dist: sgp4
Requires-Dist: spiceypy
Requires-Dist: typing-extensions
Requires-Dist: pyyaml
Provides-Extra: dev
Requires-Dist: black[jupyter]>=24.2; extra == "dev"
Requires-Dist: coverage; extra == "dev"
Requires-Dist: pylint; extra == "dev"
Requires-Dist: pylint-pydantic; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-xdist; extra == "dev"
Provides-Extra: docs
Requires-Dist: autodoc_pydantic>=2; extra == "docs"
Requires-Dist: docutils; extra == "docs"
Requires-Dist: myst-nb; extra == "docs"
Requires-Dist: sphinx>=7; extra == "docs"
Requires-Dist: sphinx-rtd-theme; extra == "docs"
Provides-Extra: examples
Requires-Dist: ipykernel; extra == "examples"
Requires-Dist: joblib; extra == "examples"
Requires-Dist: matplotlib; extra == "examples"
Requires-Dist: cartopy; extra == "examples"
Provides-Extra: osse
Requires-Dist: tatc[examples]; extra == "osse"
Requires-Dist: netcdf4; extra == "osse"
Requires-Dist: pydap; extra == "osse"
Requires-Dist: rioxarray; extra == "osse"
Requires-Dist: scipy; extra == "osse"
Requires-Dist: scikit-learn; extra == "osse"
Requires-Dist: seaborn; extra == "osse"
Requires-Dist: xarray; extra == "osse"
Provides-Extra: preprocess
Requires-Dist: rasterio; extra == "preprocess"
Provides-Extra: validation
Requires-Dist: tatc[examples,preprocess]; extra == "validation"
Requires-Dist: awsgnssroutils; extra == "validation"
Requires-Dist: earthaccess; extra == "validation"
Requires-Dist: h5py; extra == "validation"
Requires-Dist: hatanaka; extra == "validation"
Requires-Dist: metpy; extra == "validation"
Requires-Dist: netcdf4; extra == "validation"
Requires-Dist: requests; extra == "validation"
Requires-Dist: scipy; extra == "validation"
Dynamic: license-file

# Tradespace Analysis Toolkit for Constellations (TAT-C)

[![PyPI](https://img.shields.io/pypi/v/tatc.svg)](https://pypi.org/project/tatc/)
[![Python Versions](https://img.shields.io/pypi/pyversions/tatc.svg)](https://pypi.org/project/tatc/)
[![Unit Tests](https://github.com/code-lab-org/tatc/actions/workflows/unit-test.yml/badge.svg)](https://github.com/code-lab-org/tatc/actions/workflows/unit-test.yml)
[![Documentation](https://readthedocs.org/projects/tatc/badge/?version=latest)](https://tatc.readthedocs.io)
[![License](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)](LICENSE)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17363628.svg)](https://doi.org/10.5281/zenodo.17363628)

The Tradespace Analysis Toolkit for Constellations (TAT-C) provides low-level
data structures and functions for systems engineering analysis and design of
Earth-observing space missions suitable for pre-Phase A concept studies.

Documentation: [https://tatc.readthedocs.io](https://tatc.readthedocs.io)

Repository: [https://github.com/code-lab-org/tatc](https://github.com/code-lab-org/tatc)

## Installation

TAT-C requires Python 3.10&ndash;3.14. Install the latest release from PyPI:
```shell
pip install tatc
```

### Development Installation

To work with the source code, clone the repository and install the tatc library in "editable" mode:
```shell
pip install -e .
```

Note: the following optional dependencies are available with bracket notation: 
 * `pip install -e ".[dev]"`: for development (unit testing, coverage, and linting)
 * `pip install -e ".[docs]"`: for generating documentation
 * `pip install -e ".[examples]"`: for running optional examples
 * `pip install -e ".[osse]"`: for running optional observing system simulation experiment (OSSE) examples
 * `pip install -e ".[preprocess]"`: for preprocessing functions (e.g., terrain masks)
 * `pip install -e ".[validation]"`: for running validation notebooks (includes `examples` and `preprocess`)

Multiple optional dependencies can be installed with a comma-separated list (e.g., `pip install -e ".[dev,examples]"`)

## Development Tools

Development tools are applicable when working with the source code.

### Unit Tests

Run unit tests with pytest (installed with the `dev` optional dependencies):
```shell
pytest
```

Tests can run in parallel with `pytest-xdist` (e.g., with 8 workers):
```shell
pytest -n 8
```

Run a subset of tests by file, or by a keyword expression with `-k`:
```shell
pytest tests/analysis/test_point_sampling.py -k "geodataframe"
```

The tests are written with `unittest`, so `python -m unittest` also runs them without pytest.

Unit tests run numba-compiled functions (see below) compiled, which coverage cannot trace. To include them in a test coverage report, run the tests with the environment variable `NUMBA_DISABLE_JIT=1` (e.g., in bash):
```shell
NUMBA_DISABLE_JIT=1 coverage run -m pytest
```
including html output:
```shell
coverage html
```

### Compiled Functions

Numerical functions in `tatc.utils` are compiled with numba (`njit(cache=True)`), which caches the compiled machine code in `__pycache__` directories next to the source files (or in the directory set by the `NUMBA_CACHE_DIR` environment variable). Numba recompiles a function only if its own source file changes, so after editing values it uses from other modules (e.g., in `tatc/constants.py`) or other compiled functions it calls (e.g., in `tatc/utils/orbital.py`), clear the cache from the project root with:
```shell
python -c "import pathlib; [p.unlink() for p in pathlib.Path('src').rglob('*.nb[ci]')]"
```

### Documentation

Generate documentation from the `docs` directory using the command:
```shell
make html
```

### Code Style

This project uses the black code style, applied from the project root:
```shell
black .
```

Pull requests are also linted with pylint, which must score at least 9.0:
```shell
pylint --rcfile=.pylintrc src/tatc
```

## License

This project is licensed under the BSD 3-Clause License &mdash; see
[LICENSE](LICENSE) for details.

## Citation

If you use TAT-C in your research, please cite it using the metadata in
[CITATION.cff](CITATION.cff), or the DOI badge above for the latest release.

## Contact

Paul T. Grogan <paul.grogan@asu.edu>

## Acknowledgements

This project was supported in part by the National Aeronautics and Space
Administration (NASA) Earth Science Division (ESD) Earth Science Technology
Office (ESTO) Advanced Information Systems Technology (AIST) program. 
Financial support is acknowledged under NASA grant numbers: NNX17AE06G, 
80NSSC17K0586, 80NSSC20K1118, 80NSSC21K1515, 80NSSC22K1705, 80NSSC24K0575, 
80NSSC24K0921; NASA Jet Propulsion Laboratory subcontracts: 1689594, 1686623, 
1704657, 1705655; Texas A \& M University subaward M2403907.

Current Project Team
 * PI: Paul T. Grogan <paul.grogan@asu.edu>

Project Alumni
 * I. Josue Tapia-Tamayo
 * Suvan Kumar
 * Isaac Feldman
 * Hayden Daly
 * Lindsay Portelli
 * Matthew Sabatini
 * Evan Abel
 * Sigfried Hache
