Metadata-Version: 2.1
Name: gordo
Version: 6.0.4
Summary: Train and build models for Argo / Kubernetes
Home-page: https://github.com/equinor/gordo
Author: Equinor ASA
Author-email: fg_gpl@equinor.com
License: AGPLv3
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: dictdiffer~=0.8
Requires-Dist: dataclasses-json~=0.3
Requires-Dist: jinja2~=3.1
Requires-Dist: python-dateutil~=2.8
Requires-Dist: tensorflow~=2.16.0
Requires-Dist: scikeras~=0.13.0
Requires-Dist: scikit-learn<1.6.0
Requires-Dist: gunicorn~=22.0
Requires-Dist: keras<3.4.0
Requires-Dist: Flask<3.0.0,>=2.2.5
Requires-Dist: simplejson~=3.17
Requires-Dist: prometheus-client~=0.7
Requires-Dist: packaging>=24.0
Requires-Dist: gordo-client~=6.2
Provides-Extra: docs
Requires-Dist: sphinx~=7.2; extra == "docs"
Requires-Dist: sphinx-autobuild~=2021.3; extra == "docs"
Requires-Dist: sphinx-copybutton~=0.5; extra == "docs"
Requires-Dist: furo~=2023.8; extra == "docs"
Requires-Dist: sphinx-click~=4.4; extra == "docs"
Requires-Dist: ipython~=8.13; extra == "docs"
Requires-Dist: nbsphinx~=0.9; extra == "docs"
Requires-Dist: mlflow~=2.14; extra == "docs"
Requires-Dist: azureml-core~=1.56.0; extra == "docs"
Requires-Dist: peewee~=3.14; extra == "docs"
Requires-Dist: psycopg2-binary~=2.9; extra == "docs"
Provides-Extra: full
Requires-Dist: mlflow~=2.14; extra == "full"
Requires-Dist: azureml-core~=1.56.0; extra == "full"
Requires-Dist: peewee~=3.14; extra == "full"
Requires-Dist: psycopg2-binary~=2.9; extra == "full"
Provides-Extra: mlflow
Requires-Dist: mlflow~=2.14; extra == "mlflow"
Requires-Dist: azureml-core~=1.56.0; extra == "mlflow"
Provides-Extra: postgres
Requires-Dist: peewee~=3.14; extra == "postgres"
Requires-Dist: psycopg2-binary~=2.9; extra == "postgres"
Provides-Extra: tests
Requires-Dist: anyio==4.6.0; extra == "tests"
Requires-Dist: argon2-cffi==23.1.0; extra == "tests"
Requires-Dist: argon2-cffi-bindings==21.2.0; extra == "tests"
Requires-Dist: arrow==1.3.0; extra == "tests"
Requires-Dist: asttokens==2.4.1; extra == "tests"
Requires-Dist: async-lru==2.0.4; extra == "tests"
Requires-Dist: attrs==24.2.0; extra == "tests"
Requires-Dist: babel==2.16.0; extra == "tests"
Requires-Dist: beautifulsoup4==4.12.3; extra == "tests"
Requires-Dist: black==24.4.2; extra == "tests"
Requires-Dist: bleach==6.1.0; extra == "tests"
Requires-Dist: certifi==2024.8.30; extra == "tests"
Requires-Dist: cffi==1.17.1; extra == "tests"
Requires-Dist: charset-normalizer==3.4.0; extra == "tests"
Requires-Dist: click==8.1.7; extra == "tests"
Requires-Dist: comm==0.2.2; extra == "tests"
Requires-Dist: coverage[toml]==7.6.1; extra == "tests"
Requires-Dist: debugpy==1.8.6; extra == "tests"
Requires-Dist: decorator==5.1.1; extra == "tests"
Requires-Dist: defusedxml==0.7.1; extra == "tests"
Requires-Dist: docker==7.1.0; extra == "tests"
Requires-Dist: execnet==2.1.1; extra == "tests"
Requires-Dist: executing==2.1.0; extra == "tests"
Requires-Dist: fastjsonschema==2.20.0; extra == "tests"
Requires-Dist: filelock==3.16.1; extra == "tests"
Requires-Dist: fqdn==1.5.1; extra == "tests"
Requires-Dist: h11==0.14.0; extra == "tests"
Requires-Dist: httpcore==1.0.5; extra == "tests"
Requires-Dist: httpx==0.27.2; extra == "tests"
Requires-Dist: idna==3.10; extra == "tests"
Requires-Dist: iniconfig==2.0.0; extra == "tests"
Requires-Dist: ipykernel==6.29.5; extra == "tests"
Requires-Dist: ipython==8.27.0; extra == "tests"
Requires-Dist: isoduration==20.11.0; extra == "tests"
Requires-Dist: jedi==0.19.1; extra == "tests"
Requires-Dist: jinja2==3.1.4; extra == "tests"
Requires-Dist: json5==0.9.25; extra == "tests"
Requires-Dist: jsonpointer==3.0.0; extra == "tests"
Requires-Dist: jsonschema[format-nongpl]==4.23.0; extra == "tests"
Requires-Dist: jsonschema-specifications==2023.12.1; extra == "tests"
Requires-Dist: jupyter-client==8.6.3; extra == "tests"
Requires-Dist: jupyter-core==5.7.2; extra == "tests"
Requires-Dist: jupyter-events==0.10.0; extra == "tests"
Requires-Dist: jupyter-lsp==2.2.5; extra == "tests"
Requires-Dist: jupyter-server==2.14.2; extra == "tests"
Requires-Dist: jupyter-server-terminals==0.5.3; extra == "tests"
Requires-Dist: jupyterlab==4.2.5; extra == "tests"
Requires-Dist: jupyterlab-pygments==0.3.0; extra == "tests"
Requires-Dist: jupyterlab-server==2.27.3; extra == "tests"
Requires-Dist: markupsafe==3.0.2; extra == "tests"
Requires-Dist: matplotlib-inline==0.1.7; extra == "tests"
Requires-Dist: mistune==3.0.2; extra == "tests"
Requires-Dist: mock==5.1.0; extra == "tests"
Requires-Dist: mypy==1.11.2; extra == "tests"
Requires-Dist: mypy-extensions==1.0.0; extra == "tests"
Requires-Dist: nbclient==0.10.0; extra == "tests"
Requires-Dist: nbconvert==7.16.4; extra == "tests"
Requires-Dist: nbformat==5.10.4; extra == "tests"
Requires-Dist: nest-asyncio==1.6.0; extra == "tests"
Requires-Dist: notebook==7.2.2; extra == "tests"
Requires-Dist: notebook-shim==0.2.4; extra == "tests"
Requires-Dist: overrides==7.7.0; extra == "tests"
Requires-Dist: packaging==24.2; extra == "tests"
Requires-Dist: pandocfilters==1.5.1; extra == "tests"
Requires-Dist: parso==0.8.4; extra == "tests"
Requires-Dist: pathspec==0.12.1; extra == "tests"
Requires-Dist: pexpect==4.9.0; extra == "tests"
Requires-Dist: platformdirs==4.3.6; extra == "tests"
Requires-Dist: pluggy==1.5.0; extra == "tests"
Requires-Dist: prometheus-client==0.21.1; extra == "tests"
Requires-Dist: prompt-toolkit==3.0.48; extra == "tests"
Requires-Dist: psutil==6.0.0; extra == "tests"
Requires-Dist: ptyprocess==0.7.0; extra == "tests"
Requires-Dist: pure-eval==0.2.3; extra == "tests"
Requires-Dist: py-cpuinfo==9.0.0; extra == "tests"
Requires-Dist: pycparser==2.22; extra == "tests"
Requires-Dist: pyflakes==3.2.0; extra == "tests"
Requires-Dist: pygments==2.18.0; extra == "tests"
Requires-Dist: pytest==8.3.3; extra == "tests"
Requires-Dist: pytest-benchmark==4.0.0; extra == "tests"
Requires-Dist: pytest-cov==4.1.0; extra == "tests"
Requires-Dist: pytest-flakes==4.0.5; extra == "tests"
Requires-Dist: pytest-mock==3.14.0; extra == "tests"
Requires-Dist: pytest-mypy==0.10.3; extra == "tests"
Requires-Dist: pytest-timeout==2.3.1; extra == "tests"
Requires-Dist: pytest-xdist==3.6.1; extra == "tests"
Requires-Dist: python-dateutil==2.9.0.post0; extra == "tests"
Requires-Dist: python-json-logger==2.0.7; extra == "tests"
Requires-Dist: pyyaml==6.0.2; extra == "tests"
Requires-Dist: pyzmq==26.2.0; extra == "tests"
Requires-Dist: referencing==0.35.1; extra == "tests"
Requires-Dist: requests==2.32.3; extra == "tests"
Requires-Dist: responses==0.25.3; extra == "tests"
Requires-Dist: rfc3339-validator==0.1.4; extra == "tests"
Requires-Dist: rfc3986-validator==0.1.1; extra == "tests"
Requires-Dist: rpds-py==0.20.0; extra == "tests"
Requires-Dist: send2trash==1.8.3; extra == "tests"
Requires-Dist: six==1.17.0; extra == "tests"
Requires-Dist: sniffio==1.3.1; extra == "tests"
Requires-Dist: soupsieve==2.6; extra == "tests"
Requires-Dist: stack-data==0.6.3; extra == "tests"
Requires-Dist: terminado==0.18.1; extra == "tests"
Requires-Dist: tinycss2==1.3.0; extra == "tests"
Requires-Dist: tornado==6.4.1; extra == "tests"
Requires-Dist: traitlets==5.14.3; extra == "tests"
Requires-Dist: types-mock==5.1.0.20240425; extra == "tests"
Requires-Dist: types-python-dateutil==2.9.0.20240906; extra == "tests"
Requires-Dist: types-pytz==2024.2.0.20240913; extra == "tests"
Requires-Dist: types-pyyaml==6.0.12.20240917; extra == "tests"
Requires-Dist: types-requests==2.32.0.20240914; extra == "tests"
Requires-Dist: types-setuptools==75.1.0.20240917; extra == "tests"
Requires-Dist: types-simplejson==3.19.0.20240801; extra == "tests"
Requires-Dist: typing-extensions==4.12.2; extra == "tests"
Requires-Dist: uri-template==1.3.0; extra == "tests"
Requires-Dist: urllib3==2.2.3; extra == "tests"
Requires-Dist: wcwidth==0.2.13; extra == "tests"
Requires-Dist: webcolors==24.8.0; extra == "tests"
Requires-Dist: webencodings==0.5.1; extra == "tests"
Requires-Dist: websocket-client==1.8.0; extra == "tests"

<h1 align="center">Gordo</h1>
<div align="center">
 <!-- Uncomment line below once we decided on 'logo.png' -->
 <!--<img align="center" src="logo.png" width="250" height="250">-->
 <br />
 <strong>
   Building thousands of models with timeseries data to monitor systems.
 </strong>
</div>

<br />

<div align="center">
  <a href="https://scm-compliance-api.radix.equinor.com/repos/equinor/527971a2-15b2-4466-8c4d-0e718804f93d/badge">
    <img src="https://scm-compliance-api.radix.equinor.com/repos/equinor/527971a2-15b2-4466-8c4d-0e718804f93d/badge" alt="SCM Compliance"/>
  </a>
  <a href="https://github.com/equinor/gordo/actions?query=branch=master">
    <img src="https://github.com/equinor/gordo/workflows/CI/badge.svg?branch=master" alt="Build Status"/>
  </a>
</div>

---

# Table of Contents
* [About](#About)
* [Components](#Components)
* [Install](#Install)
	* [Python package ](#Python-package)
* [Developer manual](#Developer-manual)
	* [Setup](#Setup)
		* [How to update packages](#How-to-update-packages)
	* [Examples](#Examples)
	* [How to run tests locally](#How-to-run-tests-locally)
	* [Build the documentation](#Build-the-documentation)
* [Contributing](#Contributing)

---

## About

Gordo fulfills the role of inhaling config files and supplying components to the pipeline of:

1. Fetching data
2. Training model
3. Serving model

## Components

* [gordo-controller](https://github.com/equinor/gordo-controller/) - Kubernetes controller for the Gordo CRDs.
* [gordo-core](https://github.com/equinor/gordo-core/) - Gordo core library.
* [gordo-client](https://github.com/equinor/gordo-client/) - Gordo server's client. It can make predictions from deployed models.

---

[Documentation is available on Read the Docs](https://gordo1.readthedocs.io/)

---
## Install

[gordo-helm](https://github.com/equinor/gordo-helm) - you can use [gordo](https://github.com/equinor/gordo-helm/tree/main/charts/gordo) helm chart from this repository to deploy gordo infrastructure to your Kubernetes cluster. 

### Python package 

`pip install --upgrade gordo`  

With additional extras:
`pip install gordo[postgres,mlflow]`  

Bleeding edge:  
`pip install git+https://github.com/equinor/gordo.git`


## Developer manual

This section will explain how to start development of Gordo.

### Setup

Create and activate a virtual environment first. As a default option, it can be [venv](https://docs.python.org/3/library/venv.html) module.

Install pip-tools
```
pip install --upgrade pip
pip install --upgrade pip-tools
```

Install requirements
```
pip install -r requirements/full_requirements.txt
pip install -r requirements/test_requirements.txt
```

Install package:
```
python3 setup.py install
```

#### How to update packages

Note: you have to install `pip-tools` version higher then `6` for requirements to have same multi-line output format.

To update some package in `full_requirements.txt`:
- Change its version in `requirements.in` file;
- Compile and upgrade requirements:
```shell
pip-compile --upgrade --output-file=full_requirements.txt mlflow_requirements.in postgres_requirements.in requirements.in  
```

### Examples

See our [example](./examples) notebooks for how to develop with `gordo` locally.

### How to run tests locally

List of commands to run tests can be found [here](/setup.cfg).
Running of tests takes some time, so it's faster to run tests in parallel:
```
pytest -n auto -m 'not dockertest' --ignore benchmarks
```
Run docker-related tests:
```
pytest -m 'dockertest'
```

> **_NOTE:_**  To run tests it's required for your system to has (note: commands might differ from your OS):
> - Running docker daemon.
> - Available 5432 port for `postgres` container.

> **_NOTE:_** this example is for Pycharm IDE to use `breakpoints` in the code of the tests.  
> On the configuration setup for test running add to `Additional arguments:` in `pytest` 
> section following string: `--ignore benchmarks --cov-report= --no-cov ` 

### Build the documentation

This command will run the local documentation server:

```console
> cd docs/
> make watch
```

## Contributing
We welcome contributions to this project! To get started, please follow these steps:

1. Fork this repository to your own GitHub account and then clone it to your local device.

```
git clone https://github.com/your-account/your-project.git
```

2. Create a new branch for your feature or bug fix.

```
git checkout -b your-feature-or-bugfix-branch
```

3. Make your changes and commit them with a descriptive message.

```
git commit -m "Add a new feature" -a
```

4. Push your changes to your forked repository.

```
git push origin your-feature-or-bugfix-branch
```

5. Open a pull request in this repository and describe the changes you made.

We'll review your changes and work with you to get them merged into the main branch of the project.
