Metadata-Version: 2.4
Name: pymedm
Version: 2.2.8
Summary: Penalized Maximum-Entropy Dasymetric Modeling (P-MEDM) in Python.
Author-email: "Joe V. Tuccillo" <tuccillojv@ornl.gov>, "James D. Gaboardi" <gaboardijd@ornl.gov>
Maintainer: Joe V. Tuccillo, James D. Gaboardi
Project-URL: Home, https://github.com/likeness-pop
Project-URL: Repository, https://github.com/likeness-pop/pymedm
Classifier: Development Status :: 1 - Planning
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: GIS
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: NOTICE
Requires-Dist: jax>=0.4.31
Requires-Dist: jaxlib>=0.4.31
Requires-Dist: jaxopt>=0.8.3
Requires-Dist: multiprocess>=0.70.15
Requires-Dist: packaging
Requires-Dist: numpy>=1.26
Requires-Dist: pandas>=2.2
Requires-Dist: scipy>=1.12
Provides-Extra: tests
Requires-Dist: pre-commit; extra == "tests"
Requires-Dist: pytest; extra == "tests"
Requires-Dist: pytest-cov; extra == "tests"
Requires-Dist: pytest-xdist; extra == "tests"
Requires-Dist: ruff; extra == "tests"
Requires-Dist: setuptools_scm; extra == "tests"
Requires-Dist: watermark; extra == "tests"
Provides-Extra: notebooks
Requires-Dist: ipywidgets; extra == "notebooks"
Requires-Dist: jupyterlab; extra == "notebooks"
Provides-Extra: jax-gpu
Requires-Dist: jax[cuda12]<=0.4.31; extra == "jax-gpu"
Requires-Dist: jaxlib[cuda12]<=0.4.31; extra == "jax-gpu"
Requires-Dist: cuda-nvcc; extra == "jax-gpu"
Requires-Dist: cudatoolkit; extra == "jax-gpu"
Provides-Extra: all
Requires-Dist: pymedm[notebooks,tests]; extra == "all"
Provides-Extra: cuda-gpu
Requires-Dist: pymedm[jax_gpu,notebooks,tests]; extra == "cuda-gpu"
Dynamic: license-file

# PyMEDM: Penalized Maximum-Entropy Dasymetric Modeling (P-MEDM) in Python

![tag](https://img.shields.io/github/v/release/likeness-pop/pymedm?include_prereleases&sort=semver)
[![PyPI version](https://badge.fury.io/py/pymedm.svg)](https://badge.fury.io/py/pymedm)
[![Conda Version](https://img.shields.io/conda/vn/conda-forge/pymedm.svg)](https://anaconda.org/conda-forge/pymedm)

[![Continuous Integration](https://github.com/likeness-pop/pymedm/actions/workflows/continuous_integration.yml/badge.svg)](https://github.com/likeness-pop/pymedm/actions/workflows/continuous_integration.yml)
[![codecov](https://codecov.io/gh/likeness-pop/pymedm/branch/develop/graph/badge.svg)](https://codecov.io/gh/likeness-pop/pymedm)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

This is a GPU-ready Python port of [PMEDMrcpp](https://bitbucket.org/jovtc/pmedmrcpp/src/master) via `jax` and `jaxopt`. Support for usage on Windows is not guaranteed.

## Installation

### Conda-forge (recommended)

The `pymedm` feedstock is available via the [conda-forge channel](https://github.com/conda-forge/pymedm-feedstock).

```
$ conda install --channel conda-forge pymedm
```

### PyPI

`pymedm` is available on the [Python Package Index](https://pypi.org/project/pymedm/).

```
$ pip install pymedm
```

### Source

#### Directly via GitHub + `pip`

```
$ pip install git+https://github.com/likeness-pop/pymedm.git@develop
```

#### Download + `pip`

Download the source distribution (``.tar.gz``) and decompress where desired. From that location:

```
$ pip install .
```

## Usage

* See usage examples in [`./notebooks/`](https://github.com/likeness-pop/pymedm/tree/main/notebooks)

## Development

1. Clone the repository to the desired location.
2. Install in editable mode
   * Navigate to where the repo was cloned locally.
   * Within that directory:
      ```
      $ pip install -e .
      ```
3. Open an Issue for discussion
4. In a branch off `develop`, implement update/bug fix/etc.
5. Create a minimal Pull Request with clear description linked back to the associated issue from (3.)
6. Wait for review from maintainers
7. Adjust as directed
8. Once merged, fetch down `origin/develop` and merge into the local `develop`
9. Delete the branch created in (4.)
10. Start over at (2.)

## References

1. **Leyk, S., Nagle, N. N., & Buttenfield, B. P.** (2013). Maximum entropy dasymetric modeling for demographic small area estimation. Geographical Analysis, 45(3), 285-306.
2. **Nagle, N. N., Buttenfield, B. P., Leyk, S., & Spielman, S.** (2014). Dasymetric modeling and uncertainty. Annals of the Association of American Geographers, 104(1), 80-95.
