Metadata-Version: 2.1
Name: ert
Version: 10.3.5
Summary: Ensemble based Reservoir Tool (ERT)
Author-email: Equinor ASA <fg_sib-scout@equinor.com>
License: GPL-3.0
Project-URL: Repository, https://github.com/equinor/ert
Platform: all
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Other Environment
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Natural Language :: English
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Physics
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: COPYING
Requires-Dist: aiohttp
Requires-Dist: cloudevents >=1.6.0
Requires-Dist: cloudpickle
Requires-Dist: cryptography
Requires-Dist: dask
Requires-Dist: deprecation
Requires-Dist: dnspython >=2
Requires-Dist: fastapi
Requires-Dist: filelock
Requires-Dist: httpx
Requires-Dist: humanize
Requires-Dist: iterative-ensemble-smoother >=0.2.6
Requires-Dist: jinja2
Requires-Dist: lark
Requires-Dist: lxml
Requires-Dist: matplotlib
Requires-Dist: netCDF4
Requires-Dist: numpy <2
Requires-Dist: orjson
Requires-Dist: packaging
Requires-Dist: pandas
Requires-Dist: pluggy >=1.3.0
Requires-Dist: psutil
Requires-Dist: pyarrow
Requires-Dist: pydantic >2
Requires-Dist: PyQt5
Requires-Dist: python-dateutil
Requires-Dist: python-multipart
Requires-Dist: pyyaml
Requires-Dist: qtpy
Requires-Dist: requests
Requires-Dist: resfo
Requires-Dist: scipy >=1.10.1
Requires-Dist: seaborn
Requires-Dist: tabulate
Requires-Dist: tqdm >=4.62.0
Requires-Dist: typing-extensions >=4.5
Requires-Dist: uvicorn >=0.17.0
Requires-Dist: websockets
Requires-Dist: xarray
Requires-Dist: xtgeo >=3.3.0
Requires-Dist: backports-datetime-fromisoformat ; python_version < "3.11"
Requires-Dist: importlib-resources ; python_version <= "3.8"
Requires-Dist: tables <3.9 ; python_version == "3.8"
Requires-Dist: tables ; python_version >= "3.9"
Provides-Extra: dev
Requires-Dist: furo ; extra == 'dev'
Requires-Dist: hypothesis !=6.102.0,>=5.49 ; extra == 'dev'
Requires-Dist: jsonpath-ng ; extra == 'dev'
Requires-Dist: jupyter ; extra == 'dev'
Requires-Dist: jupytext ; extra == 'dev'
Requires-Dist: nbsphinx ; extra == 'dev'
Requires-Dist: oil-reservoir-synthesizer ; extra == 'dev'
Requires-Dist: pytest-asyncio ; extra == 'dev'
Requires-Dist: pytest-benchmark ; extra == 'dev'
Requires-Dist: pytest-cov ; extra == 'dev'
Requires-Dist: pytest-memray ; extra == 'dev'
Requires-Dist: pytest-mock ; extra == 'dev'
Requires-Dist: pytest-mpl ; extra == 'dev'
Requires-Dist: pytest-qt ; extra == 'dev'
Requires-Dist: pytest-raises ; extra == 'dev'
Requires-Dist: pytest-rerunfailures ; extra == 'dev'
Requires-Dist: pytest-snapshot ; extra == 'dev'
Requires-Dist: pytest-timeout ; extra == 'dev'
Requires-Dist: pytest-xdist ; extra == 'dev'
Requires-Dist: pytest >6 ; extra == 'dev'
Requires-Dist: resdata ; extra == 'dev'
Requires-Dist: resfo ; extra == 'dev'
Requires-Dist: scikit-learn ; extra == 'dev'
Requires-Dist: sphinx ; extra == 'dev'
Requires-Dist: sphinx-argparse ; extra == 'dev'
Requires-Dist: sphinx-autoapi ; extra == 'dev'
Requires-Dist: sphinx-copybutton ; extra == 'dev'
Requires-Dist: sphinxcontrib.datatemplates ; extra == 'dev'
Requires-Dist: testpath ; extra == 'dev'
Requires-Dist: hypothesis >=6.11 ; (python_version >= "3.12") and extra == 'dev'
Provides-Extra: style
Requires-Dist: pre-commit ; extra == 'style'
Provides-Extra: types
Requires-Dist: mypy ; extra == 'types'
Requires-Dist: types-lxml ; extra == 'types'
Requires-Dist: types-requests ; extra == 'types'
Requires-Dist: types-PyYAML ; extra == 'types'
Requires-Dist: types-python-dateutil ; extra == 'types'
Requires-Dist: types-decorator ; extra == 'types'
Requires-Dist: types-docutils ; extra == 'types'
Requires-Dist: types-tqdm ; extra == 'types'
Requires-Dist: types-psutil ; extra == 'types'

<h1 align="center">
<img src="src/ert/gui/resources/gui/img/ert_icon.svg" width="200">
</h1>

[![Build Status](https://github.com/equinor/ert/actions/workflows/build.yml/badge.svg)](https://github.com/equinor/ert/actions/workflows/build.yml)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ert)](https://img.shields.io/pypi/pyversions/ert)
[![Code Style](https://github.com/equinor/ert/actions/workflows/style.yml/badge.svg)](https://github.com/equinor/ert/actions/workflows/style.yml)
[![Type checking](https://github.com/equinor/ert/actions/workflows/typing.yml/badge.svg)](https://github.com/equinor/ert/actions/workflows/typing.yml)
[![codecov](https://codecov.io/gh/equinor/ert/graph/badge.svg?token=keVAcWavZ1)](https://codecov.io/gh/equinor/ert)
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)

ert - Ensemble based Reservoir Tool - is designed for running
ensembles of dynamical models such as reservoir models,
in order to do sensitivity analysis and data assimilation.
ert supports data assimilation using the Ensemble Smoother (ES),
Ensemble Smoother with Multiple Data Assimilation (ES-MDA) and
Iterative Ensemble Smoother (IES).

## Installation

``` sh
$ pip install ert
$ ert --help
```

or, for the latest development version (requires Python development headers):

``` sh
$ pip install git+https://github.com/equinor/ert.git@main
$ ert --help
```

For examples and help with configuration, see the [ert Documentation](https://ert.readthedocs.io/en/latest/getting_started/configuration/poly_new/guide.html#configuration-guide).

## Developing

ert was originally written in C/C++ but is now only Python.

You might first want to make sure that some system level packages are installed
before attempting setup:

```
- pip
- python include headers
- (python) venv
- (python) setuptools
- (python) wheel
```

It is left as an exercise to the reader to figure out how to install these on
their respective system.

To start developing the Python code, we suggest installing ert in editable mode
into a [virtual environment](https://docs.python.org/3/library/venv.html) to
isolate the install (substitute the appropriate way of sourcing venv for your shell):

```sh
# Create and enable a virtualenv
python3 -m venv my_virtualenv
source my_virtualenv/bin/activate

# Update build dependencies
pip install --upgrade pip wheel setuptools

# Download and install ert
git clone https://github.com/equinor/ert
cd ert
pip install --editable .
```

### Test setup

Additional development packages must be installed to run the test suite:

```sh
pip install ".[dev]"
pytest tests/
```

[Git LFS](https://git-lfs.com/) must be installed to get all the files. This is packaged as `git-lfs` on Ubuntu, Fedora or macOS Homebrew. For Equinor RGS node users, it is possible to use `git` from Red Hat Software Collections:
```sh
source /opt/rh/rh-git227/enable
```
test-data/block_storage is a submodule and must be checked out.
```sh
git submodule update --init --recursive
```

If you checked out submodules without having git lfs installed, you can force git lfs to run in all submodules with:
```sh
git submodule foreach "git lfs pull"
```


### Style requirements

There are a set of style requirements, which are gathered in the `pre-commit`
configuration, to have it automatically run on each commit do:

``` sh
$ pip install pre-commit
$ pre-commit install
```

### Trouble with setup

As a simple test of your `ert` installation, you may try to run one of the
examples, for instance:

```
cd test-data/poly_example
# for non-gui trial run
ert test_run poly.ert
# for gui trial run
ert gui poly.ert
```

### Notes

The default maximum number of open files is normally relatively low on MacOS
and some Linux distributions. This is likely to make tests crash with mysterious
error-messages. You can inspect the current limits in your shell by issuing the
command `ulimit -a`. In order to increase maximum number of open files, run
`ulimit -n 16384` (or some other large number) and put the command in your
`.profile` to make it persist.

## Example usage

### Basic ert test
To test if ert itself is working, go to `test-data/poly_example` and start ert by running `poly.ert` with `ert gui`
```
cd test-data/poly_example
ert gui poly.ert
````
This opens up the ert graphical user interface.
Finally, test ert by starting and successfully running the experiment.

### ert with a reservoir simulator
To actually get ert to work at your site you need to configure details about
your system; at the very least this means you must configure where your
reservoir simulator is installed. In addition you might want to configure e.g.
queue system in the `site-config` file, but that is not strictly necessary for
a basic test.
