spinetoolbox


Namespinetoolbox JSON
Version 0.9.1 PyPI version JSON
download
home_pageNone
SummaryAn application to define, manage, and execute various energy system simulation models
upload_time2024-11-04 11:11:19
maintainerNone
docs_urlNone
authorNone
requires_python<3.13,>=3.9
licenseLGPL-3.0-or-later
keywords energy system modelling workflow optimisation database
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Spine Toolbox
Link to the documentation: [https://spine-toolbox.readthedocs.io/en/latest/?badge=latest](https://spine-toolbox.readthedocs.io/en/latest/?badge=latest)

[![Python](https://img.shields.io/badge/python-3.9%20|%203.10%20|%203.11%20|%203.12-blue.svg)](https://www.python.org/downloads/release/python-379/)
[![Documentation Status](https://readthedocs.org/projects/spine-toolbox/badge/?version=latest)](https://spine-toolbox.readthedocs.io/en/latest/?badge=latest)
[![Test suite](https://github.com/spine-tools/Spine-Toolbox/actions/workflows/test_runner.yml/badge.svg)](https://github.com/spine-tools/Spine-Toolbox/actions/workflows/test_runner.yml)
[![codecov](https://codecov.io/gh/spine-tools/Spine-Toolbox/branch/master/graph/badge.svg)](https://codecov.io/gh/spine-tools/Spine-Toolbox)
[![PyPI version](https://badge.fury.io/py/spinetoolbox.svg)](https://badge.fury.io/py/spinetoolbox)
[![Join the chat at https://gitter.im/spine-tools/Spine-Toolbox](https://badges.gitter.im/spine-tools/Spine-Toolbox.svg)](https://gitter.im/spine-tools/Spine-Toolbox?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

Spine Toolbox is an open source Python package to manage data, scenarios and workflows for modelling and simulation. 
You can have your local workflow, but work as a team through version control and SQL databases.

<p align="center" width="100%">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="./fig/spinetoolbox_logo.svg" width="50%">
    <img alt="Spine Toolbox" src="./fig/spinetoolbox_on_wht.svg" width="50%">
  </picture>
</p>

## License

Spine Toolbox is released under the GNU Lesser General Public License (LGPL) license. 
All accompanying documentation, original graphics and other material are released under the 
[Creative Commons BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/).
Licenses of all packages used by Spine Toolbox are listed in the Spine Toolbox User 
Guide.

## Attribution

If you use Spine Toolbox in a published work, please cite the following publication (Chicago/Turabian Style).

Kiviluoma Juha, Pallonetto Fabiano, Marin Manuel, Savolainen Pekka T., Soininen Antti, Vennström Per, Rinne Erkka, 
Huang Jiangyi, Kouveliotis-Lysikatos Iasonas, Ihlemann Maren, Delarue Erik, O’Dwyer Ciara, O’Donnel Terence, 
Amelin Mikael, Söder Lennart, and Dillon Joseph. 2022. "Spine Toolbox: A flexible open-source workflow management 
system with scenario and data management" SoftwareX, Vol. 17, 100967, https://doi.org/10.1016/j.softx.2021.100967.

## Installation

We provide three options for installing Spine Toolbox. The first two options also require that you **follow 
the Pre-installation steps**: 
- [Python/pipx](#installation-with-python-and-pipx) (we intend to make stable releases every month or so)
- [From source files](#installation-from-sources-using-git) (this is the cutting edge - and more likely to have bugs)
- [Windows executable as .zip bundle](https://spine-tools.github.io/Downloads/) (requires only unzipping the downloaded .zip file - however, the embedded Python is likely not usable for the Python tools you might want to run)
- [Windows installation package](#windows-64-bit-installer-package) (these are quite old - not recommended)

### Pre-installation

These steps apply to both [Python/pipx](#installation-with-python-and-pipx) option and to 
[From source files](#installation-from-sources-using-git) option.

1. If you don't have Python installed, please install it e.g. from 
[Python.org](https://www.python.org/downloads/).
Please note that we support Python versions from 3.9 to 3.12. (As of 21st Oct. 2024, Python 3.13 has issues with some of our dependencies)

2. Test that python is now in your PATH. Open a new terminal (e.g. Command Prompt) window and type 

       python --version

    The output should be the Python version. If it did not work (e.g. the output is *'python' command not found* or 
similar or the [Microsoft Store opens](https://learn.microsoft.com/en-us/windows/python/faqs#why-does-running-python-exe-open-the-microsoft-store-)),
you need to add the Python installation folder into the PATH environment variable. On Windows, this can be done 
from Windows Control Panel (use search with 'environment').
[See specific instructions for all operating systems from this link](https://realpython.com/add-python-to-path/).

3. Install Git. Windows version can be found here: https://git-scm.com/download/win.

4. Test that Git is now in your PATH. Open a new terminal after installing Git and type

       git --version

    If the output from this command is not the Git version, you need to add  `<git-install-path>/Git/cmd` into 
your PATH environment variable.

5. Upgrade `pip` to the latest version (pip is a package manager for Python)

       python -m pip install --upgrade pip

### Installation with Python and pipx

This works best for users that just want to use Spine Toolbox and keep it updated 
with new releases.

Once you have completed the [Pre-installation](#pre-installation) steps, do the following:

1. Install [pipx](https://pypa.github.io/pipx/). pipx helps in creating an isolated environment for Spine 
Toolbox to avoid package conflicts. Open a terminal and run

        python -m pip install --user pipx

    After pipx has been installed, run

        python -m pipx ensurepath

2. **Restart the terminal** or re-login for the changes of the latest command to take effect.

3. Choose which Spine Toolbox version to install. Latest *release* version from PyPi is installed using 

        python -m pipx install spinetoolbox

   or the latest *development* version using

        python -m pipx install git+https://github.com/spine-tools/spinetoolbox-dev

That’s it! To launch Spine Toolbox, open a terminal and run

    spinetoolbox

If for some reason the command is not found, the executable can be found under `~/.local/bin` 
(`%USERPROFILE%\.local\bin` on Windows).

### Upgrade when using pipx

To upgrade Spine Toolbox to the latest *release*, open a terminal and run

    python -m pipx upgrade spinetoolbox

or upgrade the *development* version with

    python -m pipx upgrade spinetoolbox-dev


### Installation from sources using Git

This option is for developers and other contributors who want to debug or edit Spine Toolbox source code. Once 
you have completed the [Pre-installation](#pre-installation) steps, do the following:

1. Clone this repository. Open a terminal, use the `cd` command to change the current directory to some data 
directory (preferably not a OneDrive folder on Windows), and run

       git clone https://github.com/spine-tools/Spine-Toolbox.git

    This creates a `Spine-Toolbox` directory into your current directory.

2. Use the `cd` command to go to `Spine-Toolbox` dir

       cd ./Spine-Toolbox

3. Create a Python virtual environment using

        python -m venv .venv

    This creates a `.venv` directory into the `Spine-Toolbox` directory, but you can create the virtual environment 
anywhere on your system. <br><br>

    Optional: Instead of venv, one can also use a
[miniconda](https://docs.conda.io/projects/conda/en/stable/glossary.html#miniconda-glossary) environment. 
You can [download miniconda from here](https://docs.conda.io/en/latest/miniconda.html). **Note: Anaconda 
environments are not supported.** Create a new Python 3.12 (check the supported Python versions above) miniconda environment without linking packages from the 
base environment using

        conda create -n spinetoolbox python=3.12

4. Activate the venv environment on Windows (provided that you are in `Spine-Toolbox` directory) using

       cd ./.venv/Scripts
       activate

    Or on bash, zsh 

       source .venv/bin/activate

    or on a Conda prompt (if you are using a miniconda environment instead of venv)

       conda activate spinetoolbox 

    **Make sure that the terminal prompt now indicates the active environment.**

5. Use the `cd ..` command to go back to the `Spine-Toolbox` directory (the one that 
contains `requirements.txt`) if needed.

6. Install Spine Toolbox along with its dependencies with

        python -m pip install -r requirements.txt
    
7. (Optional) Install additional development packages with

        python -m pip install -r dev-requirements.txt

8. Once the installation has finished, you can now launch Spine Toolbox using

       spinetoolbox

### Upgrade when using git

**To upgrade**, pull the latest changes from the Spine Toolbox repository (while in `Spine-Toolbox` directory)

    git pull
    git fetch --tags origin

and run (to upgrade the other Spine Toolbox packages)

    python -m pip install -U -r requirements.txt

**NOTE:** The version number of Spine packages are automatically
generated from Git tags during the `python -m pip install ...` step. 
This makes it important to fetch new tags from GitHub before running the 
`python -m pip install ...` when upgrading. This is true also for editable 
installations.

#### Additional comments for developers

If you are alternating between multiple branches, you should repeat
the `pip install -e .` step after switching a branch.  This ensures
the version number is updated correctly.  On the other hand if you do
not need the version number to be precise, it is okay to skip the
step.

To illustrate with an example, consider there are two feature branches
`P` and `Q` that you are working on. Both are based on `master` after
the release `0.6.18`.

```
 0.6.18
---o----o--o--o  P
    \
     o--o--o--o  Q
```

Then the versions are:
- `P`: `0.7.0.dev3+g<commit-hash-P>.d<commit-date-P>`,
- `Q`: `0.7.0.dev4+g<commit-hash-Q>.d<commit-date-Q>`.

The version should be available inside Python as:
```python
from spinetoolbox.version import version_tuple

print(version_tuple)
# P: (0, 7, 0, 'dev3', 'g<commit-hash-P>.d<commit-date-P>')
# Q: (0, 7, 0, 'dev4', 'g<commit-hash-Q>.d<commit-date-Q>')
```

So if your code uses any of the components of the `version_tuple` that
might change, you should re-run `pip install`, otherwise this can be 
ignored safely.

### Windows 64-bit installer package

There are old Windows installer packages available for a quick install, but they are
at this point (26.1.2023) quite obsolete and cannot be recommended for anything but 
a quick look at how Spine Toolbox looks and feels (although even that has changed).
Download the installer package from 
[here](https://github.com/spine-tools/Spine-Toolbox/releases),
run it, and follow the instructions to install Spine Toolbox.

### About requirements

Python 3.9 or later is required (check above for supported Python versions).

See the files `pyproject.toml` and `requirements.txt` for packages required to run Spine Toolbox.
(Additional packages needed for development are listed in `dev-requirements.txt`.)

The requirements include three packages ([`spinedb_api`](https://github.com/spine-tools/Spine-Database-API),
[`spine_engine`](https://github.com/spine-tools/spine-engine), and 
[`spine_items`](https://github.com/spine-tools/spine-items)), developed by the Spine project consortium.

### Building the User Guide

You can find the latest documentation on [readthedocs](https://spine-toolbox.readthedocs.io/en/latest/index.html).
If you want to build the documentation yourself,
source files for the User Guide can be found in `docs/source` directory. In order to 
build the HTML docs, you need to install the *development requirements* (see section 
'About requirements' above). This installs Sphinx (among other things), which 
is required in building the documentation. When Sphinx is installed, you can build the 
HTML pages from the user guide source files by using the `bin/build_doc.bat` script on 
Windows or the `bin/build_doc.py` script on Linux and Mac. After running the script, the 
index page can be found in `docs/build/html/index.html`. The User Guide can also 
be opened from Spine Toolbox menu Help->User Guide (F1).

### Troubleshooting

#### Obscure crashes that may produce a traceback related to PySide6's model classes

The first thing is to make sure that you are not using Anaconda. Only Miniconda is supported. Anaconda's base 
environment includes Qt related packages and we suspect that they leak some shared Qt libraries into environments,
even when specifically requesting that base environment packages should not be linked to environment packages. See
also [Problems in starting the application](#problems-in-starting-the-application) below.

#### Installation fails

Please make sure you are using Python 3.9 or later to install the requirements (check above for supported Python versions).

#### 'No Python' error when installing with pipx

If you see the following error when running the command `python -m pipx install spinetoolbox`

```
No Python at 'c:\python38\python.exe'
Fatal error from pip prevented installation. Full pip output in file:
```

Where c:\python38\python.exe may be some other path. To fix this, delete the folder 
`C:\Users\<user name>\.local\pipx\shared` and run the `python -m pipx install spinetoolbox` command again.

#### Installation fails on Linux
If Python runs into errors while installing on Linux systems, running the 
following command in a terminal may help:

```shell
$ sudo apt install libpq-dev
```

#### Problems in starting the application

If there are problems in starting Spine Toolbox, the chances are that the required 
packages were not installed successfully. In case this happens, the first thing you 
should check is that you don't have `Qt`, `PyQt4`, `PyQt5`, `PySide`, `PySide2`, and 
`PySide6` packages installed in the same environment. These do not play nice together 
and may introduce conflicts. In addition, make sure that you do not have multiple versions 
of these `Qt` related packages installed in the same environment. The easiest way 
to solve this problem is to create a blank (e.g. venv virtual environment) Python 
environment just for `PySide6` applications and installing the requirements again.

**Warning: Using the *conda-forge* channel for installing the requirements is not 
recommended.**

The required `qtconsole` package from the ***conda-forge*** channel also
installs `qt` and `PyQt` packages. Since this is a `PySide6` application, those 
are not needed and there is a chance of conflicts between the packages.

## Recorded Webinars showing the use of Spine Tools

### Spine Toolbox: Data, workflow and scenario management for modelling
*Wednesday Sep 8, 17:00-18:30 CEST (11:00-12:30 EDT) - Organized together with G-PST*

Spine Toolbox is an open source software to manage data, scenarios and workflows for modelling and simulation. You can have your local workflow, but work as a team through version control and SQL databases. This webinar gives a quick overview of the different functionalities and showcases them through two examples.

Recording Chapters:
- [00:00-00:05](https://www.youtube.com/watch?v=jaDIxonOmfY) Relation to G-PST Pillar 5 (Clayton Barrows, NREL)
- [00:05-00:35](https://youtu.be/jaDIxonOmfY?t=1350) Building a workflow in Spine Toolbox [PDF](http://www.spine-model.org/pdf/webinar/Spine%20Toolbox%20-%20Building%20a%20workflow%20in%20Toolbox%20by%20Juha%20Kiviluoma.pdf), *(Juha Kiviluoma, VTT)*
- [00:35-00:55](https://youtu.be/jaDIxonOmfY?t=2445) Example workflow from Canada to manage lots of input sources [PDF](http://www.spine-model.org/pdf/webinar/Spine%20Toolbox%20-%20Case%20in%20energy%20system%20integration%20with%20Toolbox%20by%20Madeleine%20McPherson%20and%20Jacob%20Monroe.pdf), *(Madeleine McPherson and Jake Monroe, University of Victoria)*
- [01:05-01:15](https://youtu.be/jaDIxonOmfY?t=3722) Example workflow from EU project TradeRES to serve
multiple models *(Milos Cvetkovic and Jim Hommes, TU Delft)*
- [01:15-01:30](https://youtu.be/jaDIxonOmfY?t=4500) Moderated Q&A 

### SpineOpt: A flexible energy system modelling framework in Julia
*Tuesday Sep 7, 14:00-15:30 CEST (8:00-9:30 EDT) - Organized together with EERA ESI*

The importance of operational details in planning future energy systems has been rapidly increasing. One driver for this is the increasing role of variable power generation, which requires that the energy system models consider higher temporal granularity, longer time series and new aspects in power system stability. Another important driver is a consequence of sector coupling through the electrification of transport, space heating and industries. As the other sectors become more integrated with electricity, they need to be modelled at a granularity that is sufficient for describing the potential flexibility they can bring to the power system dominated by variable and uncertain power generation.

This webinar will present the open source Julia based energy system modelling framework SpineOpt, which has been built with these challenges in mind. It can represent different energy sectors using representation typically available only in sector specific models and with highly adaptable temporal and stochastic structures available both for planning and operations. More information at https://spine-project.github.io/SpineOpt.jl/latest/index.html.

Recording Chapters:
- [00:00-00:08](https://www.youtube.com/watch?v=FiiqZNcx7Ds) Introduction [PDF](http://www.spine-model.org/pdf/webinar/SpineOpt_Introduction%20by%20Erik%20Delarue.pdf)
- [00:08-00:31](https://www.youtube.com/watch?v=FiiqZNcx7Ds&t=475s) Basic elements of SpineOpt and the flexible spatial structure [PDF](http://www.spine-model.org/pdf/webinar/SpineOpt_Basic%20elements%20of%20SpineOpt%20by%20Maren%20Ihlemann.pdf)
- [00:31-00:40](https://youtu.be/FiiqZNcx7Ds?t=1876) Adaptable temporal and stochastic structures [PDF](http://www.spine-model.org/pdf/webinar/SpineOpt_Flexible%20temporal%20and%20stochastic%20structure%20by%20Topi%20Rasku.pdf)
- [00:50-01:30](https://youtu.be/FiiqZNcx7Ds?t=3608) Representation of different energy sectors &
Attempts to make the model faster [PDF](http://www.spine-model.org/pdf/webinar/SpineOpt_Different%20energy%20sectors%20and%20accomodating%20complexity%20by%20Jody%20Dillon.pdf)
- [01:25-01:35](https://youtu.be/FiiqZNcx7Ds?t=5065) Q&A + Step-by-step 10 minute demo on how to build a simple model with SpineOpt using Spine Toolbox

### Demonstration of Spine modelling tools through selected case studies
*Thursday Sep 9, 14:00-16:00 CEST (8:00-10:00 EDT)*

[Full recording](https://youtu.be/i2fxDwsMuF8), all presentations slides [PDF](http://www.spine-model.org/pdf/webinar/Case_Studies_all_presentations.pdf)

Over the past 4 years, the EU project Spine has developed a set of open-source tools for modelling complex energy systems. This webinar demonstrates the Spine software through six selected case studies, covering topics such as sector coupling, co-optimization of operation and investments, stochastic modelling, and rolling horizon optimization. Each subsection described below consists of a brief introduction followed by a live demonstration of the particular case, where some of the outstanding features of Spine are highlighted and discussed.

Recording Chapters:
- [00:05-00:15](https://youtu.be/i2fxDwsMuF8?t=252) Introduction to Spine: This section uses a simple example to demonstrate the SpineOpt modelling principle. First, the user defines the different objects in their system, such as units and nodes, as well as the relationships between them, such as which units are connected to which nodes. Then, they specify values for certain pre-defined parameters such as node demand, unit capacity, cost, and conversion ratio. The resulting dataset is passed to SpineOpt which generates the corresponding optimisation model, optimizes it, and delivers the results.
- [00:15-00:30](https://youtu.be/i2fxDwsMuF8?t=939) Hydro: This section demonstrates hydropower modelling in Spine as performed in Case study A5. The objective is to model part of the Swedish hydropower system, namely the Skellefte river with its 15 power stations, by coupling the river system with the power system. The model maximizes income from electricity supply over one week with an hourly resolution, while respecting basic hydrological constraints.
- [00:29-00:45](https://youtu.be/i2fxDwsMuF8?t=1745) Building heating: This section demonstrates building heating modelling in Spine as performed in Case study A4. The objective is to model the Finnish power and district heating system coupled with an electrically heated residential building stock. The result is a rolling unit commitment and economic dispatch model, that optimizes system performance over one year at hourly resolution.  
- [00:45-00:57] Break
- [00:57-01:06](https://youtu.be/i2fxDwsMuF8?t=3411) Gas grid: This section demonstrates gas grid modelling in Spine as performed in Case study A2. The objective is to model a natural gas transmission system with pressure-driven gas and couple it with an electricity system to capture the flexibility provided by the gas network. The result is a dispatch model that co-optimizes operations in both systems over a day at hourly resolution.
- [01:06-01:22](https://youtu.be/i2fxDwsMuF8?t=3992) Stochastic: This section demonstrates stochastic modelling in Spine using a simple example system. Three different stochastic structures are demonstrated: purely deterministic, stochastic fan, and converging fan.
- [01:22-01:35](https://youtu.be/i2fxDwsMuF8?t=4970) Power grid investments: This section demonstrates power grid investment modelling in Spine as performed in case study C2. The objective is twofold: (i) to model the Nordic synchronous power system (Norway, Sweden, Finland, and Denmark) with high operational detail; and (ii) to find optimal transmission line investment decisions over a long-term horizon of 10 years, for three different wind penetration scenarios.      
- [01:35-01:40](https://youtu.be/i2fxDwsMuF8?t=5652) Q&A 

### SpineInterface: How to quickly and easily create new optimization models in Julia Friday
*Friday Sep 10, 14:00-15:30 CEST (8:00-9:30 EDT)*

[Full recording](https://youtu.be/cUopRUTzXpY), all presentations [PDF](http://www.spine-model.org/pdf/webinar/SpineInterface_all_presentations.pdf)

Creation of new optimisation models requires a lot of work to get the data to the models and the results out of the models. Spine Toolbox is an open source data and workflow management tool to assist with these tasks and can work with models written in any language. Meanwhile, SpineInterface is a Julia package that links the data management capabilities of Spine Toolbox with Julia/JuMP modelling environment in a very direct way.

The data interfaces of Spine Toolbox together with SpineInterface simplifies the process of developing optimization models by allowing the model developer to focus on the constraint equations. The required data structures and data are defined with a graphical interface in Spine Toolbox and are immediately available to the model developer inside the constraint equation code without any action or code required by the model developer. SpineInterface supports the full range of data parameter types supported by Toolbox and provides a mechanism for representation of time and time-based data, either time series, time patterns or arbitrarily varying temporal data.

This session will be of interest to model developers and/or students who want a significant head start in developing optimization models. The sessions will also be of interest to model developers who may wish to translate existing models developed in other platforms such as GAMS, into the Spine framework using SpineInterface. The power of SpineInterface will be demonstrated in an interactive session where the full modelling workflow will be illustrated from data structure design and implementation to constraint equation development.

Agenda:
- Overview of SpineInterface
- Toolbox concepts and data structures including the Spine data API
- SpineInterface: convenience functions and accessing Spine Toolbox data in Julia
- Defining a model data structure in Spine Toolbox
- Building and solving an optimization model using SpineInterface
- Q&A + live demo [00:45-01:21](https://youtu.be/cUopRUTzXpY?t=2737)

## Contribution Guide

All are welcome to contribute!

See detailed instructions for contribution in 
[Spine Toolbox User Guide](https://spine-toolbox.readthedocs.io/en/latest/contribution_guide.html).

Below are the bare minimum things you need to know.

### Setting up development environment

1. Install the developer requirements:

        python -m pip install -r dev-requirements.txt

2. It is also recommended to run `pre-commit install` in the respective root directories of spine-toolbox, spinedb_api,
   spine-engine and spine-items. This sets up git hooks for auto-formatting the files before committing.

### Coding style

- [Black](https://github.com/python/black) is used for Python code formatting.
  The project's GitHub page includes instructions on how to integrate Black in IDEs.
- [isort](https://pycqa.github.io/isort/) is used for formatting the Python import statements.
- Google style docstrings

Running the following line in the project root will take care of sorting the imports:

    isort .

### Linting

It is advisable to run [`pylint`](https://pylint.readthedocs.io/en/latest/) 
regularly on files that have been changed.
The project root includes a configuration file for `pylint`.
`pylint`'s user guide includes instructions on how to 
[integrate the tool in IDEs](https://pylint.readthedocs.io/en/latest/user_guide/ide-integration.html#pylint-in-pycharm).

### Unit tests

Unit tests are located in the `tests` directory.
You can run the entire test suite from project root by

    python -m unittest

### Reporting bugs
If you think you have found a bug, please check the following before creating a new 
issue:
1. **Make sure you’re on the latest version.** 
2. **Try older versions.**
3. **Try upgrading/downgrading the dependencies**
4. **Search the project’s bug/issue tracker to make sure it’s not a known issue.**

What to put in your bug report:
1. **Python version**. What version of the Python interpreter are you using? 32-bit 
    or 64-bit?
2. **OS**. What operating system are you on?
3. **Application Version**. Which version or versions of the software are you using? 
    If you have forked the project from Git, which branch and which commit? Otherwise, 
    supply the application version number (Help->About menu).
4. **How to recreate**. How can the developers recreate the bug? A screenshot 
    demonstrating the bug is usually the most helpful thing you can report. Relevant 
    output from the Event Log and debug messages from the console of your run, should 
    also be included.

### Feature requests
The developers of Spine Toolbox are happy to hear feature requests or ideas for improving 
existing functionality. The format for requesting new features is free. Just fill 
out the required fields on the issue tracker and give a description of the new feature. 
A picture accompanying the description is a good way to get your idea into development
faster. But before you make a new issue, please check that there isn't a related idea 
already open in the issue tracker.

&nbsp;
<hr>
<center>
<table width=500px frame="none">
<tr>
<td valign="middle" width=100px>
<img src=fig/eu-emblem-low-res.jpg alt="EU emblem" width=100%></td>
<td valign="middle">This work has been partially supported by EU project Mopo (2023-2026), which has received funding 
from European Climate, Infrastructure and Environment Executive Agency under the European Union’s HORIZON Research and 
Innovation Actions under grant agreement N°101095998.</td>
<tr>
<td valign="middle" width=100px>
<img src=fig/eu-emblem-low-res.jpg alt="EU emblem" width=100%></td>
<td valign="middle">This work has been partially supported by EU project Spine (2017-2021), which has received funding 
from the European Union’s Horizon 2020 research and innovation programme under grant agreement No 774629.</td>
</table>
</center>

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "spinetoolbox",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<3.13,>=3.9",
    "maintainer_email": null,
    "keywords": "energy system modelling, workflow, optimisation, database",
    "author": null,
    "author_email": "Spine Project consortium <spine_info@vtt.fi>",
    "download_url": "https://files.pythonhosted.org/packages/74/5a/8357d19624d75ee684147bfb3aad4da657e3773b7850ad31f32ddf30423f/spinetoolbox-0.9.1.tar.gz",
    "platform": null,
    "description": "# Spine Toolbox\nLink to the documentation: [https://spine-toolbox.readthedocs.io/en/latest/?badge=latest](https://spine-toolbox.readthedocs.io/en/latest/?badge=latest)\n\n[![Python](https://img.shields.io/badge/python-3.9%20|%203.10%20|%203.11%20|%203.12-blue.svg)](https://www.python.org/downloads/release/python-379/)\n[![Documentation Status](https://readthedocs.org/projects/spine-toolbox/badge/?version=latest)](https://spine-toolbox.readthedocs.io/en/latest/?badge=latest)\n[![Test suite](https://github.com/spine-tools/Spine-Toolbox/actions/workflows/test_runner.yml/badge.svg)](https://github.com/spine-tools/Spine-Toolbox/actions/workflows/test_runner.yml)\n[![codecov](https://codecov.io/gh/spine-tools/Spine-Toolbox/branch/master/graph/badge.svg)](https://codecov.io/gh/spine-tools/Spine-Toolbox)\n[![PyPI version](https://badge.fury.io/py/spinetoolbox.svg)](https://badge.fury.io/py/spinetoolbox)\n[![Join the chat at https://gitter.im/spine-tools/Spine-Toolbox](https://badges.gitter.im/spine-tools/Spine-Toolbox.svg)](https://gitter.im/spine-tools/Spine-Toolbox?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\nSpine Toolbox is an open source Python package to manage data, scenarios and workflows for modelling and simulation. \nYou can have your local workflow, but work as a team through version control and SQL databases.\n\n<p align=\"center\" width=\"100%\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"./fig/spinetoolbox_logo.svg\" width=\"50%\">\n    <img alt=\"Spine Toolbox\" src=\"./fig/spinetoolbox_on_wht.svg\" width=\"50%\">\n  </picture>\n</p>\n\n## License\n\nSpine Toolbox is released under the GNU Lesser General Public License (LGPL) license. \nAll accompanying documentation, original graphics and other material are released under the \n[Creative Commons BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/).\nLicenses of all packages used by Spine Toolbox are listed in the Spine Toolbox User \nGuide.\n\n## Attribution\n\nIf you use Spine Toolbox in a published work, please cite the following publication (Chicago/Turabian Style).\n\nKiviluoma Juha, Pallonetto Fabiano, Marin Manuel, Savolainen Pekka T., Soininen Antti, Vennstr\u00f6m Per, Rinne Erkka, \nHuang Jiangyi, Kouveliotis-Lysikatos Iasonas, Ihlemann Maren, Delarue Erik, O\u2019Dwyer Ciara, O\u2019Donnel Terence, \nAmelin Mikael, S\u00f6der Lennart, and Dillon Joseph. 2022. \"Spine Toolbox: A flexible open-source workflow management \nsystem with scenario and data management\" SoftwareX, Vol. 17, 100967, https://doi.org/10.1016/j.softx.2021.100967.\n\n## Installation\n\nWe provide three options for installing Spine Toolbox. The first two options also require that you **follow \nthe Pre-installation steps**: \n- [Python/pipx](#installation-with-python-and-pipx) (we intend to make stable releases every month or so)\n- [From source files](#installation-from-sources-using-git) (this is the cutting edge - and more likely to have bugs)\n- [Windows executable as .zip bundle](https://spine-tools.github.io/Downloads/) (requires only unzipping the downloaded .zip file - however, the embedded Python is likely not usable for the Python tools you might want to run)\n- [Windows installation package](#windows-64-bit-installer-package) (these are quite old - not recommended)\n\n### Pre-installation\n\nThese steps apply to both [Python/pipx](#installation-with-python-and-pipx) option and to \n[From source files](#installation-from-sources-using-git) option.\n\n1. If you don't have Python installed, please install it e.g. from \n[Python.org](https://www.python.org/downloads/).\nPlease note that we support Python versions from 3.9 to 3.12. (As of 21st Oct. 2024, Python 3.13 has issues with some of our dependencies)\n\n2. Test that python is now in your PATH. Open a new terminal (e.g. Command Prompt) window and type \n\n       python --version\n\n    The output should be the Python version. If it did not work (e.g. the output is *'python' command not found* or \nsimilar or the [Microsoft Store opens](https://learn.microsoft.com/en-us/windows/python/faqs#why-does-running-python-exe-open-the-microsoft-store-)),\nyou need to add the Python installation folder into the PATH environment variable. On Windows, this can be done \nfrom Windows Control Panel (use search with 'environment').\n[See specific instructions for all operating systems from this link](https://realpython.com/add-python-to-path/).\n\n3. Install Git. Windows version can be found here: https://git-scm.com/download/win.\n\n4. Test that Git is now in your PATH. Open a new terminal after installing Git and type\n\n       git --version\n\n    If the output from this command is not the Git version, you need to add  `<git-install-path>/Git/cmd` into \nyour PATH environment variable.\n\n5. Upgrade `pip` to the latest version (pip is a package manager for Python)\n\n       python -m pip install --upgrade pip\n\n### Installation with Python and pipx\n\nThis works best for users that just want to use Spine Toolbox and keep it updated \nwith new releases.\n\nOnce you have completed the [Pre-installation](#pre-installation) steps, do the following:\n\n1. Install [pipx](https://pypa.github.io/pipx/). pipx helps in creating an isolated environment for Spine \nToolbox to avoid package conflicts. Open a terminal and run\n\n        python -m pip install --user pipx\n\n    After pipx has been installed, run\n\n        python -m pipx ensurepath\n\n2. **Restart the terminal** or re-login for the changes of the latest command to take effect.\n\n3. Choose which Spine Toolbox version to install. Latest *release* version from PyPi is installed using \n\n        python -m pipx install spinetoolbox\n\n   or the latest *development* version using\n\n        python -m pipx install git+https://github.com/spine-tools/spinetoolbox-dev\n\nThat\u2019s it! To launch Spine Toolbox, open a terminal and run\n\n    spinetoolbox\n\nIf for some reason the command is not found, the executable can be found under `~/.local/bin` \n(`%USERPROFILE%\\.local\\bin` on Windows).\n\n### Upgrade when using pipx\n\nTo upgrade Spine Toolbox to the latest *release*, open a terminal and run\n\n    python -m pipx upgrade spinetoolbox\n\nor upgrade the *development* version with\n\n    python -m pipx upgrade spinetoolbox-dev\n\n\n### Installation from sources using Git\n\nThis option is for developers and other contributors who want to debug or edit Spine Toolbox source code. Once \nyou have completed the [Pre-installation](#pre-installation) steps, do the following:\n\n1. Clone this repository. Open a terminal, use the `cd` command to change the current directory to some data \ndirectory (preferably not a OneDrive folder on Windows), and run\n\n       git clone https://github.com/spine-tools/Spine-Toolbox.git\n\n    This creates a `Spine-Toolbox` directory into your current directory.\n\n2. Use the `cd` command to go to `Spine-Toolbox` dir\n\n       cd ./Spine-Toolbox\n\n3. Create a Python virtual environment using\n\n        python -m venv .venv\n\n    This creates a `.venv` directory into the `Spine-Toolbox` directory, but you can create the virtual environment \nanywhere on your system. <br><br>\n\n    Optional: Instead of venv, one can also use a\n[miniconda](https://docs.conda.io/projects/conda/en/stable/glossary.html#miniconda-glossary) environment. \nYou can [download miniconda from here](https://docs.conda.io/en/latest/miniconda.html). **Note: Anaconda \nenvironments are not supported.** Create a new Python 3.12 (check the supported Python versions above) miniconda environment without linking packages from the \nbase environment using\n\n        conda create -n spinetoolbox python=3.12\n\n4. Activate the venv environment on Windows (provided that you are in `Spine-Toolbox` directory) using\n\n       cd ./.venv/Scripts\n       activate\n\n    Or on bash, zsh \n\n       source .venv/bin/activate\n\n    or on a Conda prompt (if you are using a miniconda environment instead of venv)\n\n       conda activate spinetoolbox \n\n    **Make sure that the terminal prompt now indicates the active environment.**\n\n5. Use the `cd ..` command to go back to the `Spine-Toolbox` directory (the one that \ncontains `requirements.txt`) if needed.\n\n6. Install Spine Toolbox along with its dependencies with\n\n        python -m pip install -r requirements.txt\n    \n7. (Optional) Install additional development packages with\n\n        python -m pip install -r dev-requirements.txt\n\n8. Once the installation has finished, you can now launch Spine Toolbox using\n\n       spinetoolbox\n\n### Upgrade when using git\n\n**To upgrade**, pull the latest changes from the Spine Toolbox repository (while in `Spine-Toolbox` directory)\n\n    git pull\n    git fetch --tags origin\n\nand run (to upgrade the other Spine Toolbox packages)\n\n    python -m pip install -U -r requirements.txt\n\n**NOTE:** The version number of Spine packages are automatically\ngenerated from Git tags during the `python -m pip install ...` step. \nThis makes it important to fetch new tags from GitHub before running the \n`python -m pip install ...` when upgrading. This is true also for editable \ninstallations.\n\n#### Additional comments for developers\n\nIf you are alternating between multiple branches, you should repeat\nthe `pip install -e .` step after switching a branch.  This ensures\nthe version number is updated correctly.  On the other hand if you do\nnot need the version number to be precise, it is okay to skip the\nstep.\n\nTo illustrate with an example, consider there are two feature branches\n`P` and `Q` that you are working on. Both are based on `master` after\nthe release `0.6.18`.\n\n```\n 0.6.18\n---o----o--o--o  P\n    \\\n     o--o--o--o  Q\n```\n\nThen the versions are:\n- `P`: `0.7.0.dev3+g<commit-hash-P>.d<commit-date-P>`,\n- `Q`: `0.7.0.dev4+g<commit-hash-Q>.d<commit-date-Q>`.\n\nThe version should be available inside Python as:\n```python\nfrom spinetoolbox.version import version_tuple\n\nprint(version_tuple)\n# P: (0, 7, 0, 'dev3', 'g<commit-hash-P>.d<commit-date-P>')\n# Q: (0, 7, 0, 'dev4', 'g<commit-hash-Q>.d<commit-date-Q>')\n```\n\nSo if your code uses any of the components of the `version_tuple` that\nmight change, you should re-run `pip install`, otherwise this can be \nignored safely.\n\n### Windows 64-bit installer package\n\nThere are old Windows installer packages available for a quick install, but they are\nat this point (26.1.2023) quite obsolete and cannot be recommended for anything but \na quick look at how Spine Toolbox looks and feels (although even that has changed).\nDownload the installer package from \n[here](https://github.com/spine-tools/Spine-Toolbox/releases),\nrun it, and follow the instructions to install Spine Toolbox.\n\n### About requirements\n\nPython 3.9 or later is required (check above for supported Python versions).\n\nSee the files `pyproject.toml` and `requirements.txt` for packages required to run Spine Toolbox.\n(Additional packages needed for development are listed in `dev-requirements.txt`.)\n\nThe requirements include three packages ([`spinedb_api`](https://github.com/spine-tools/Spine-Database-API),\n[`spine_engine`](https://github.com/spine-tools/spine-engine), and \n[`spine_items`](https://github.com/spine-tools/spine-items)), developed by the Spine project consortium.\n\n### Building the User Guide\n\nYou can find the latest documentation on [readthedocs](https://spine-toolbox.readthedocs.io/en/latest/index.html).\nIf you want to build the documentation yourself,\nsource files for the User Guide can be found in `docs/source` directory. In order to \nbuild the HTML docs, you need to install the *development requirements* (see section \n'About requirements' above). This installs Sphinx (among other things), which \nis required in building the documentation. When Sphinx is installed, you can build the \nHTML pages from the user guide source files by using the `bin/build_doc.bat` script on \nWindows or the `bin/build_doc.py` script on Linux and Mac. After running the script, the \nindex page can be found in `docs/build/html/index.html`. The User Guide can also \nbe opened from Spine Toolbox menu Help->User Guide (F1).\n\n### Troubleshooting\n\n#### Obscure crashes that may produce a traceback related to PySide6's model classes\n\nThe first thing is to make sure that you are not using Anaconda. Only Miniconda is supported. Anaconda's base \nenvironment includes Qt related packages and we suspect that they leak some shared Qt libraries into environments,\neven when specifically requesting that base environment packages should not be linked to environment packages. See\nalso [Problems in starting the application](#problems-in-starting-the-application) below.\n\n#### Installation fails\n\nPlease make sure you are using Python 3.9 or later to install the requirements (check above for supported Python versions).\n\n#### 'No Python' error when installing with pipx\n\nIf you see the following error when running the command `python -m pipx install spinetoolbox`\n\n```\nNo Python at 'c:\\python38\\python.exe'\nFatal error from pip prevented installation. Full pip output in file:\n```\n\nWhere c:\\python38\\python.exe may be some other path. To fix this, delete the folder \n`C:\\Users\\<user name>\\.local\\pipx\\shared` and run the `python -m pipx install spinetoolbox` command again.\n\n#### Installation fails on Linux\nIf Python runs into errors while installing on Linux systems, running the \nfollowing command in a terminal may help:\n\n```shell\n$\u00a0sudo apt install libpq-dev\n```\n\n#### Problems in starting the application\n\nIf there are problems in starting Spine Toolbox, the chances are that the required \npackages were not installed successfully. In case this happens, the first thing you \nshould check is that you don't have `Qt`, `PyQt4`, `PyQt5`, `PySide`, `PySide2`, and \n`PySide6` packages installed in the same environment. These do not play nice together \nand may introduce conflicts. In addition, make sure that you do not have multiple versions \nof these `Qt` related packages installed in the same environment. The easiest way \nto solve this problem is to create a blank (e.g. venv virtual environment) Python \nenvironment just for `PySide6` applications and installing the requirements again.\n\n**Warning: Using the *conda-forge* channel for installing the requirements is not \nrecommended.**\n\nThe required `qtconsole` package from the ***conda-forge*** channel also\ninstalls `qt` and `PyQt` packages. Since this is a `PySide6` application, those \nare not needed and there is a chance of conflicts between the packages.\n\n## Recorded Webinars showing the use of Spine Tools\n\n### Spine Toolbox: Data, workflow and scenario management for modelling\n*Wednesday Sep 8, 17:00-18:30 CEST (11:00-12:30 EDT) - Organized together with G-PST*\n\nSpine Toolbox is an open source software to manage data, scenarios and workflows for modelling and simulation. You can have your local workflow, but work as a team through version control and SQL databases. This webinar gives a quick overview of the different functionalities and showcases them through two examples.\n\nRecording Chapters:\n- [00:00-00:05](https://www.youtube.com/watch?v=jaDIxonOmfY) Relation to G-PST Pillar 5 (Clayton Barrows, NREL)\n- [00:05-00:35](https://youtu.be/jaDIxonOmfY?t=1350) Building a workflow in Spine Toolbox [PDF](http://www.spine-model.org/pdf/webinar/Spine%20Toolbox%20-%20Building%20a%20workflow%20in%20Toolbox%20by%20Juha%20Kiviluoma.pdf), *(Juha Kiviluoma, VTT)*\n- [00:35-00:55](https://youtu.be/jaDIxonOmfY?t=2445) Example workflow from Canada to manage lots of input sources [PDF](http://www.spine-model.org/pdf/webinar/Spine%20Toolbox%20-%20Case%20in%20energy%20system%20integration%20with%20Toolbox%20by%20Madeleine%20McPherson%20and%20Jacob%20Monroe.pdf), *(Madeleine McPherson and Jake Monroe, University of Victoria)*\n- [01:05-01:15](https://youtu.be/jaDIxonOmfY?t=3722) Example workflow from EU project TradeRES to serve\nmultiple models *(Milos Cvetkovic and Jim Hommes, TU Delft)*\n- [01:15-01:30](https://youtu.be/jaDIxonOmfY?t=4500) Moderated Q&A \n\n### SpineOpt: A flexible energy system modelling framework in Julia\n*Tuesday Sep 7, 14:00-15:30 CEST (8:00-9:30 EDT) - Organized together with EERA ESI*\n\nThe importance of operational details in planning future energy systems has been rapidly increasing. One driver for this is the increasing role of variable power generation, which requires that the energy system models consider higher temporal granularity, longer time series and new aspects in power system stability. Another important driver is a consequence of sector coupling through the electrification of transport, space heating and industries. As the other sectors become more integrated with electricity, they need to be modelled at a granularity that is sufficient for describing the potential flexibility they can bring to the power system dominated by variable and uncertain power generation.\n\nThis webinar will present the open source Julia based energy system modelling framework SpineOpt, which has been built with these challenges in mind. It can represent different energy sectors using representation typically available only in sector specific models and with highly adaptable temporal and stochastic structures available both for planning and operations. More information at https://spine-project.github.io/SpineOpt.jl/latest/index.html.\n\nRecording Chapters:\n- [00:00-00:08](https://www.youtube.com/watch?v=FiiqZNcx7Ds) Introduction [PDF](http://www.spine-model.org/pdf/webinar/SpineOpt_Introduction%20by%20Erik%20Delarue.pdf)\n- [00:08-00:31](https://www.youtube.com/watch?v=FiiqZNcx7Ds&t=475s) Basic elements of SpineOpt and the flexible spatial structure [PDF](http://www.spine-model.org/pdf/webinar/SpineOpt_Basic%20elements%20of%20SpineOpt%20by%20Maren%20Ihlemann.pdf)\n- [00:31-00:40](https://youtu.be/FiiqZNcx7Ds?t=1876) Adaptable temporal and stochastic structures [PDF](http://www.spine-model.org/pdf/webinar/SpineOpt_Flexible%20temporal%20and%20stochastic%20structure%20by%20Topi%20Rasku.pdf)\n- [00:50-01:30](https://youtu.be/FiiqZNcx7Ds?t=3608) Representation of different energy sectors &\nAttempts to make the model faster [PDF](http://www.spine-model.org/pdf/webinar/SpineOpt_Different%20energy%20sectors%20and%20accomodating%20complexity%20by%20Jody%20Dillon.pdf)\n- [01:25-01:35](https://youtu.be/FiiqZNcx7Ds?t=5065) Q&A + Step-by-step 10 minute demo on how to build a simple model with SpineOpt using Spine Toolbox\n\n### Demonstration of Spine modelling tools through selected case studies\n*Thursday Sep 9, 14:00-16:00 CEST (8:00-10:00 EDT)*\n\n[Full recording](https://youtu.be/i2fxDwsMuF8), all presentations slides [PDF](http://www.spine-model.org/pdf/webinar/Case_Studies_all_presentations.pdf)\n\nOver the past 4 years, the EU project Spine has developed a set of open-source tools for modelling complex energy systems. This webinar demonstrates the Spine software through six selected case studies, covering topics such as sector coupling, co-optimization of operation and investments, stochastic modelling, and rolling horizon optimization. Each subsection described below consists of a brief introduction followed by a live demonstration of the particular case, where some of the outstanding features of Spine are highlighted and discussed.\n\nRecording Chapters:\n- [00:05-00:15](https://youtu.be/i2fxDwsMuF8?t=252) Introduction to Spine: This section uses a simple example to demonstrate the SpineOpt modelling principle. First, the user defines the different objects in their system, such as units and nodes, as well as the relationships between them, such as which units are connected to which nodes. Then, they specify values for certain pre-defined parameters such as node demand, unit capacity, cost, and conversion ratio. The resulting dataset is passed to SpineOpt which generates the corresponding optimisation model, optimizes it, and delivers the results.\n- [00:15-00:30](https://youtu.be/i2fxDwsMuF8?t=939) Hydro: This section demonstrates hydropower modelling in Spine as performed in Case study A5. The objective is to model part of the Swedish hydropower system, namely the Skellefte river with its 15 power stations, by coupling the river system with the power system. The model maximizes income from electricity supply over one week with an hourly resolution, while respecting basic hydrological constraints.\n- [00:29-00:45](https://youtu.be/i2fxDwsMuF8?t=1745) Building heating: This section demonstrates building heating modelling in Spine as performed in Case study A4. The objective is to model the Finnish power and district heating system coupled with an electrically heated residential building stock. The result is a rolling unit commitment and economic dispatch model, that optimizes system performance over one year at hourly resolution.  \n- [00:45-00:57] Break\n- [00:57-01:06](https://youtu.be/i2fxDwsMuF8?t=3411) Gas grid: This section demonstrates gas grid modelling in Spine as performed in Case study A2. The objective is to model a natural gas transmission system with pressure-driven gas and couple it with an electricity system to capture the flexibility provided by the gas network. The result is a dispatch model that co-optimizes operations in both systems over a day at hourly resolution.\n- [01:06-01:22](https://youtu.be/i2fxDwsMuF8?t=3992) Stochastic: This section demonstrates stochastic modelling in Spine using a simple example system. Three different stochastic structures are demonstrated: purely deterministic, stochastic fan, and converging fan.\n- [01:22-01:35](https://youtu.be/i2fxDwsMuF8?t=4970) Power grid investments: This section demonstrates power grid investment modelling in Spine as performed in case study C2. The objective is twofold: (i) to model the Nordic synchronous power system (Norway, Sweden, Finland, and Denmark) with high operational detail; and (ii) to find optimal transmission line investment decisions over a long-term horizon of 10 years, for three different wind penetration scenarios.      \n- [01:35-01:40](https://youtu.be/i2fxDwsMuF8?t=5652) Q&A \n\n### SpineInterface: How to quickly and easily create new optimization models in Julia Friday\n*Friday Sep 10, 14:00-15:30 CEST (8:00-9:30 EDT)*\n\n[Full recording](https://youtu.be/cUopRUTzXpY), all presentations [PDF](http://www.spine-model.org/pdf/webinar/SpineInterface_all_presentations.pdf)\n\nCreation of new optimisation models requires a lot of work to get the data to the models and the results out of the models. Spine Toolbox is an open source data and workflow management tool to assist with these tasks and can work with models written in any language. Meanwhile, SpineInterface is a Julia package that links the data management capabilities of Spine Toolbox with Julia/JuMP modelling environment in a very direct way.\n\nThe data interfaces of Spine Toolbox together with SpineInterface simplifies the process of developing optimization models by allowing the model developer to focus on the constraint equations. The required data structures and data are defined with a graphical interface in Spine Toolbox and are immediately available to the model developer inside the constraint equation code without any action or code required by the model developer. SpineInterface supports the full range of data parameter types supported by Toolbox and provides a mechanism for representation of time and time-based data, either time series, time patterns or arbitrarily varying temporal data.\n\nThis session will be of interest to model developers and/or students who want a significant head start in developing optimization models. The sessions will also be of interest to model developers who may wish to translate existing models developed in other platforms such as GAMS, into the Spine framework using SpineInterface. The power of SpineInterface will be demonstrated in an interactive session where the full modelling workflow will be illustrated from data structure design and implementation to constraint equation development.\n\nAgenda:\n- Overview of SpineInterface\n- Toolbox concepts and data structures including the Spine data API\n- SpineInterface: convenience functions and accessing Spine Toolbox data in Julia\n- Defining a model data structure in Spine Toolbox\n- Building and solving an optimization model using SpineInterface\n- Q&A + live demo [00:45-01:21](https://youtu.be/cUopRUTzXpY?t=2737)\n\n## Contribution Guide\n\nAll are welcome to contribute!\n\nSee detailed instructions for contribution in \n[Spine Toolbox User Guide](https://spine-toolbox.readthedocs.io/en/latest/contribution_guide.html).\n\nBelow are the bare minimum things you need to know.\n\n### Setting up development environment\n\n1. Install the developer requirements:\n\n        python -m pip install -r dev-requirements.txt\n\n2. It is also recommended to run `pre-commit install` in the respective root directories of spine-toolbox, spinedb_api,\n   spine-engine and spine-items. This sets up git hooks for auto-formatting the files before committing.\n\n### Coding style\n\n- [Black](https://github.com/python/black) is used for Python code formatting.\n  The project's GitHub page includes instructions on how to integrate Black in IDEs.\n- [isort](https://pycqa.github.io/isort/) is used for formatting the Python import statements.\n- Google style docstrings\n\nRunning the following line in the project root will take care of sorting the imports:\n\n    isort .\n\n### Linting\n\nIt is advisable to run [`pylint`](https://pylint.readthedocs.io/en/latest/) \nregularly on files that have been changed.\nThe project root includes a configuration file for `pylint`.\n`pylint`'s user guide includes instructions on how to \n[integrate the tool in IDEs](https://pylint.readthedocs.io/en/latest/user_guide/ide-integration.html#pylint-in-pycharm).\n\n### Unit tests\n\nUnit tests are located in the `tests` directory.\nYou can run the entire test suite from project root by\n\n    python -m unittest\n\n### Reporting bugs\nIf you think you have found a bug, please check the following before creating a new \nissue:\n1. **Make sure you\u2019re on the latest version.** \n2. **Try older versions.**\n3. **Try upgrading/downgrading the dependencies**\n4. **Search the project\u2019s bug/issue tracker to make sure it\u2019s not a known issue.**\n\nWhat to put in your bug report:\n1. **Python version**. What version of the Python interpreter are you using? 32-bit \n    or 64-bit?\n2. **OS**. What operating system are you on?\n3. **Application Version**. Which version or versions of the software are you using? \n    If you have forked the project from Git, which branch and which commit? Otherwise, \n    supply the application version number (Help->About menu).\n4. **How to recreate**. How can the developers recreate the bug? A screenshot \n    demonstrating the bug is usually the most helpful thing you can report. Relevant \n    output from the Event Log and debug messages from the console of your run, should \n    also be included.\n\n### Feature requests\nThe developers of Spine Toolbox are happy to hear feature requests or ideas for improving \nexisting functionality. The format for requesting new features is free. Just fill \nout the required fields on the issue tracker and give a description of the new feature. \nA picture accompanying the description is a good way to get your idea into development\nfaster. But before you make a new issue, please check that there isn't a related idea \nalready open in the issue tracker.\n\n&nbsp;\n<hr>\n<center>\n<table width=500px frame=\"none\">\n<tr>\n<td valign=\"middle\" width=100px>\n<img src=fig/eu-emblem-low-res.jpg alt=\"EU emblem\" width=100%></td>\n<td valign=\"middle\">This work has been partially supported by EU project Mopo (2023-2026), which has received funding \nfrom European Climate, Infrastructure and Environment Executive Agency under the European Union\u2019s HORIZON Research and \nInnovation Actions under grant agreement N\u00b0101095998.</td>\n<tr>\n<td valign=\"middle\" width=100px>\n<img src=fig/eu-emblem-low-res.jpg alt=\"EU emblem\" width=100%></td>\n<td valign=\"middle\">This work has been partially supported by EU project Spine (2017-2021), which has received funding \nfrom the European Union\u2019s Horizon 2020 research and innovation programme under grant agreement No 774629.</td>\n</table>\n</center>\n",
    "bugtrack_url": null,
    "license": "LGPL-3.0-or-later",
    "summary": "An application to define, manage, and execute various energy system simulation models",
    "version": "0.9.1",
    "project_urls": {
        "Documentation": "https://spine-toolbox.readthedocs.io/",
        "Repository": "https://github.com/spine-tools/Spine-Toolbox"
    },
    "split_keywords": [
        "energy system modelling",
        " workflow",
        " optimisation",
        " database"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5d7b2e086b6d8a478bb7d1f05168cf6c894700af241edd16b0b0c2c025e77827",
                "md5": "6db878005587b34d5fd515e23cbde834",
                "sha256": "8d89894d25dd1fede374de7419e0ec10c0631156647e1ab10d7d03f58a4c8168"
            },
            "downloads": -1,
            "filename": "spinetoolbox-0.9.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6db878005587b34d5fd515e23cbde834",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.13,>=3.9",
            "size": 1754459,
            "upload_time": "2024-11-04T11:11:17",
            "upload_time_iso_8601": "2024-11-04T11:11:17.066816Z",
            "url": "https://files.pythonhosted.org/packages/5d/7b/2e086b6d8a478bb7d1f05168cf6c894700af241edd16b0b0c2c025e77827/spinetoolbox-0.9.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "745a8357d19624d75ee684147bfb3aad4da657e3773b7850ad31f32ddf30423f",
                "md5": "ae76f8be40de7c54e877ec86bb4fa12a",
                "sha256": "4d3c497c28155c732483976001062f37d62a5877174e7a1308ab527d5c6c072d"
            },
            "downloads": -1,
            "filename": "spinetoolbox-0.9.1.tar.gz",
            "has_sig": false,
            "md5_digest": "ae76f8be40de7c54e877ec86bb4fa12a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.13,>=3.9",
            "size": 4762093,
            "upload_time": "2024-11-04T11:11:19",
            "upload_time_iso_8601": "2024-11-04T11:11:19.549024Z",
            "url": "https://files.pythonhosted.org/packages/74/5a/8357d19624d75ee684147bfb3aad4da657e3773b7850ad31f32ddf30423f/spinetoolbox-0.9.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-04 11:11:19",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "spine-tools",
    "github_project": "Spine-Toolbox",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "spinetoolbox"
}
        
Elapsed time: 0.33382s