skypro 2.0.3
Skyprospector by Cepro
License: MIT
Requires Python: <4.0,>=3.10

# Skypro

Skypro is a collection of simulation and reporting tools for microgrids.

## Simulation CLI tool
The Skypro simulator can project microgrid behaviours, costs and revenues.
This tool is run on the command line using `skypro simulate`.
See `src/skypro/commands/simulator/README.md` for more information.

## Reporting CLI tool
The Skypro reporting tool collates data to documents and analyse real-world performance of microgrids.
This tool is run on the command line using `skypro report`.
See `src/skypro/commands/report/README.md` for more information.

## Reporting web app - DEPRECATED
The Skypro reporting web app makes reporting results accessible to non-cli users. It is now deprecated.
This is run using Streamlit.
See `src/skypro/reporting_webapp/README.md` for more information.

## Rates and energy flows
Information about the costs and revenues associated with using power are fundamental to the codebase and a high-level understanding of how they are modelled is important for interpreting results.
See `src/skypro/common/rates/README.md` for a background on how rates and energy flows are modelled in the codebase.

## Environment configuration
Skypro uses a JSON 'environment file' to contain general directory configurations as well as secrets.
By default Skypro looks for the environment file in `~/.simt/env.json`, but the location can be customised with the `--env` command line option.

The structure of this file should be as follows:
```json
{
    "vars": {
        "DIR_SHORTCUT_1": "/path/to/some/working/directory",
        "DIR_SHORTCUT_2": "/path/to/another/working/directory"
    },
    "flows": {
      "dbUrl": "url-with-credentials-for-the-flows-database"
    },
    "flux": {
      "dbUrl": "url-with-credentials-for-the-flux-database",
      "schema": "flux"
    },
    "rates": {
      "dbUrl": "url-with-credentials-for-the-rates-database"
    }
}
```
The `vars` section allows you to define arbitrary variables that are resolved in configuration file paths.
For example, if you're configuring a simulation run and all the load profiles are in a certain directory, then you could configure a variable like `"PROFILE_DIR": "~/myprofiles"`, and then
anywhere you use `$PROFILE_DIR` in the configuration it will be resolved appropriately.

The `flows` section configures how to access the Flows database - this is only used if Skypro is configured to pull data from the Flows database (e.g., plot meter readings).

The `flux` section (added in v2.0.0) configures how to access the Flux database - this is used for meter readings, BESS readings, and market data. The optional `schema` field defaults to "flux". For legacy databases where all data is in the `flows` schema, set `"schema": "flows"`.

The `rates` section configures how to access the Rates database - this is only used if Skypro is configured to pull data from a Rates database.


## Installation

```bash
pip install --upgrade skypro
```


## Development

### Running tests
To run the tests: `PYTHONPATH=src python -m unittest discover  --start-directory src`

Some of the tests akin to integration tests which run a whole simulation and check the results.
To run an individual integration test directly: `simulate --env src/tests/integration/fixtures/env.json --config src/tests/integration/fixtures/config.yaml -y --sim integrationTestPerfectHindsightLP`

### Publishing to PyPI
To publish a release to PyPI:
1. Make your code changes
2. Update the semver version number in `pyproject.toml`
3. Commit to git and push
4. Run `poetry build` and observe the new version number
5. Run `poetry publish` to publish

If this is your first time publishing then configure your PyPI token:
`poetry config pypi-token.pypi pypi-YYYYYYYY` using an API token from your account on pypi.org.

### Publishing feature branches to Test PyPI
To publish a feature branch for testing before merging:
1. Update version in `pyproject.toml` with a pre-release suffix (e.g., `2.1.0a1`)
2. Run `poetry build`
3. Run `poetry publish -r test-pypi` to publish

Users can install test versions with:
```bash
pip install --extra-index-url https://test.pypi.org/simple/ skypro==2.1.0a1
```

First-time Test PyPI setup:
1. `poetry config repositories.test-pypi https://test.pypi.org/legacy/`
2. `poetry config pypi-token.test-pypi pypi-YYYYYYYY` using a token from test.pypi.org.