diff --git a/README.md b/README.md
index 436ca05b13982951b058034dd1669722c58620bb..ba241d211ae26590d36ca7ec4efe7aed6b5ad089 100644
--- a/README.md
+++ b/README.md
@@ -80,6 +80,141 @@ You can also find them on this website: http://jobshop.jjvh.nl/
 # More Examples
 For more examples you can have a look at the test files in the `tests` directory.
 
+## Development Setup
+
+If you want to check out the code and implement new features or fix bugs, you can set up the project as follows:
+
+### Clone the Repository
+
+clone the repository in your favorite code editor (for example PyCharm, VSCode, Neovim, etc.)
+
+using https:
+```shell
+git clone https://github.com/Alexander-Nasuta/graph-jsp-env
+```
+or by using the GitHub CLI:
+```shell
+gh repo clone Alexander-Nasuta/graph-jsp-env
+```
+
+if you are using PyCharm, I recommend doing the following additional steps:
+
+- mark the `src` folder as source root (by right-clicking on the folder and selecting `Mark Directory as` -> `Sources Root`)
+- mark the `tests` folder as test root (by right-clicking on the folder and selecting `Mark Directory as` -> `Test Sources Root`)
+- mark the `resources` folder as resources root (by right-clicking on the folder and selecting `Mark Directory as` -> `Resources Root`)
+
+at the end your project structure should look like this:
+
+todo
+
+### Create a Virtual Environment (optional)
+
+Most Developers use a virtual environment to manage the dependencies of their projects.
+I personally use `conda` for this purpose.
+
+When using `conda`, you can create a new environment with the name 'my-graph-jsp-env' following command:
+
+```shell
+conda create -n my-graph-jsp-env python=3.11
+```
+
+Feel free to use any other name for the environment or an more recent version of python.
+Activate the environment with the following command:
+
+```shell
+conda activate jsp-instance-utils
+```
+
+Replace `jsp-instance-utils` with the name of your environment, if you used a different name.
+
+You can also use `venv` or `virtualenv` to create a virtual environment. In that case please refer to the respective documentation.
+
+### Install the Dependencies
+
+To install the dependencies for development purposes, run the following command:
+
+```shell
+pip install -r requirements_dev.txt
+pip install tox
+```
+
+The testing package `tox` is not included in the `requirements_dev.txt` file, because it sometimes causes issues when
+using github actions.
+Github Actions uses an own tox environment (namely 'tox-gh-actions'), which can cause conflicts with the tox environment on your local machine.
+
+Reference: [Automated Testing in Python with pytest, tox, and GitHub Actions](https://www.youtube.com/watch?v=DhUpxWjOhME).
+
+### Install the Project in Editable Mode
+
+To install the project in editable mode, run the following command:
+
+```shell
+pip install -e .
+```
+
+This will install the project in editable mode, so you can make changes to the code and test them immediately.
+
+### Run the Tests
+
+This project uses `pytest` for testing. To run the tests, run the following command:
+
+```shell
+pytest
+```
+
+For testing with `tox` run the following command:
+
+```shell
+tox
+```
+
+Tox will run the tests in a separate environment and will also check if the requirements are installed correctly.
+
+### Building and Publishing the Project to PyPi
+
+In order to publish the project to PyPi, the project needs to be built and then uploaded to PyPi.
+
+To build the project, run the following command:
+
+```shell
+python -m build
+```
+
+It is considered good practice use the tool `twine` for checking the build and uploading the project to PyPi.
+By default the build command creates a `dist` folder with the built project files.
+To check all the files in the `dist` folder, run the following command:
+
+```shell
+twine check dist/**
+```
+
+If the check is successful, you can upload the project to PyPi with the following command:
+
+```shell
+twine upload dist/**
+```
+
+### Documentation
+This project uses `sphinx` for generating the documentation.
+It also uses a lot of sphinx extensions to make the documentation more readable and interactive.
+For example the extension `myst-parser` is used to enable markdown support in the documentation (instead of the usual .rst-files).
+It also uses the `sphinx-autobuild` extension to automatically rebuild the documentation when changes are made.
+By running the following command, the documentation will be automatically built and served, when changes are made (make sure to run this command in the root directory of the project):
+
+```shell
+sphinx-autobuild ./docs/source/ ./docs/build/html/
+```
+
+This project features most of the extensions featured in this Tutorial: [Document Your Scientific Project With Markdown, Sphinx, and Read the Docs | PyData Global 2021](https://www.youtube.com/watch?v=qRSb299awB0).
+
+
+
+## Contact
+
+If you have any questions or feedback, feel free to contact me via [email](mailto:alexander.nasuta@wzl-iqs.rwth-aachen.de) or open an issue on repository.
+
+
+
 # License
 
 Distributed under the MIT License. See `LICENSE.txt` for more information.
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d0c3cbf1020d5c292abdedf27627c6abe25e2293
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS    ?=
+SPHINXBUILD   ?= sphinx-build
+SOURCEDIR     = source
+BUILDDIR      = build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/make.bat b/docs/make.bat
new file mode 100644
index 0000000000000000000000000000000000000000..dc1312ab09ca6fb0267dee6b28a38e69c253631a
--- /dev/null
+++ b/docs/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+	set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=source
+set BUILDDIR=build
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+	echo.
+	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+	echo.installed, then set the SPHINXBUILD environment variable to point
+	echo.to the full path of the 'sphinx-build' executable. Alternatively you
+	echo.may add the Sphinx directory to PATH.
+	echo.
+	echo.If you don't have Sphinx installed, grab it from
+	echo.https://www.sphinx-doc.org/
+	exit /b 1
+)
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css
new file mode 100644
index 0000000000000000000000000000000000000000..45dc49150a3c482a77ed5cfedc99d7fb6fadda14
--- /dev/null
+++ b/docs/source/_static/custom.css
@@ -0,0 +1,23 @@
+:root {
+    --logo-light: url("_static/logo-light.png");
+    --logo-dark: url("_static/logo-dark.png");
+}
+
+
+/* custom_admonitions.css */
+.admonition.custom-tip {
+    background-color: #e7f4e4;
+    border-left: 4px solid #4caf50;
+    padding: 10px;
+}
+
+.admonition.custom-note {
+    background-color: #e7e4f4;
+    border-left: 4px solid #4caf50;
+    padding: 10px;
+}
+
+p.block-mode {
+    display: block;
+    white-space: pre-wrap;
+}
\ No newline at end of file
diff --git a/docs/source/_static/logo-light.png b/docs/source/_static/logo-light.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8d352a677689c4bcbe42bfb7ec3a60c355df87c
Binary files /dev/null and b/docs/source/_static/logo-light.png differ
diff --git a/docs/source/conf.py b/docs/source/conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..5b1e595415bec63a290c6deb2364ee60a1e216a0
--- /dev/null
+++ b/docs/source/conf.py
@@ -0,0 +1,54 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# For the full list of built-in configuration values, see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Project information -----------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
+
+project = 'jsp-instance-utils'
+copyright = '2025, Alexander Nasuta'
+author = 'Alexander Nasuta'
+release = '1.0.2'
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+extensions = [
+    "myst_parser",
+    "sphinx.ext.duration",
+    "sphinx_copybutton",
+
+    "sphinx.ext.autosectionlabel",
+
+    "sphinx.ext.autosummary",
+    "sphinx.ext.doctest",
+
+    "sphinx.ext.autodoc",
+
+    "sphinx.ext.napoleon",
+]
+
+templates_path = ['_templates']
+exclude_patterns = []
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_theme = 'furo'
+html_title = f"Graph Job Shop Environment"
+html_static_path = ['_static']
+html_theme_options = {
+    "light_logo": "logo-light.png",
+    "dark_logo": "logo-light.png",
+}
+html_css_files = [
+    'custom.css',
+]
+
+# Configure autosectionlabel
+autosectionlabel_prefix_document = True
+autosectionlabel_maxdepth = 2
+
+# Exclude specific files
+autosectionlabel_exclude_files = ['README.md']
diff --git a/docs/source/index.rst b/docs/source/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..5738bd35b0b6abe9e634f8419c2410dbe2092fe2
--- /dev/null
+++ b/docs/source/index.rst
@@ -0,0 +1,17 @@
+.. jsp-instance-utils documentation master file, created by
+   sphinx-quickstart on Wed Mar 19 16:40:55 2025.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+jsp-instance-utils documentation
+================================
+
+Add your content using ``reStructuredText`` syntax. See the
+`reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html>`_
+documentation for details.
+
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Contents:
+
diff --git a/examples/JSSEnv_example.py b/examples/JSSEnv_example.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/examples/graph-jsp-env_example.py b/examples/graph-jsp-env_example.py
new file mode 100644
index 0000000000000000000000000000000000000000..35094613377c69e5077e1cf119d87302b244ade1
--- /dev/null
+++ b/examples/graph-jsp-env_example.py
@@ -0,0 +1,30 @@
+from jsp_instance_utils.instances import ft06, ft06_makespan
+from graph_jsp_env.disjunctive_graph_jsp_env import DisjunctiveGraphJspEnv
+import numpy as np
+
+
+def main():
+    env = DisjunctiveGraphJspEnv(
+        jps_instance=ft06,
+        reward_function_parameters={
+            "scaling_divisor": ft06_makespan
+        },
+    )
+
+    done = False
+    info = {}
+    while not done:
+        # get valid action mask. sample expects it to be a numpy array of type int8
+        mask = np.array(env.valid_action_mask()).astype(np.int8)
+        action = env.action_space.sample(mask=mask)
+        state, reward, terminated, truncated, info = env.step(action)
+
+        done = terminated or truncated
+
+    # console rendering
+    env.render(show=["gantt_console", "graph_console"])
+    print(f"makespan: {info['makespan']}")
+
+
+if __name__ == '__main__':
+    main()
diff --git a/examples/graph-matrix-jsp-env_example.py b/examples/graph-matrix-jsp-env_example.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/examples/kemmerling_example.py b/examples/kemmerling_example.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/examples/or-tools_example.py b/examples/or-tools_example.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pyproject.toml b/pyproject.toml
index 1dbc6a1e4f72fce19a13a7d81dd1cdad603cfd22..d51716980abaa561bd8763d69e2a24aa4e43ede8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -30,7 +30,25 @@ dev = [
     "pytest",
     "pytest-cov",
     "tox",
-    "twine"
+    "twine",
+    # for examples
+    "gym",
+    "gymnasium",
+    "JSSEnv",
+    "graph-jsp-env",
+    # documentation
+    "sphinx",
+    "myst-parser", # .md support for sphinx
+    "sphinx-autobuild",
+    #
+    "furo", # cool theme
+    "twine",
+    "sphinx-copybutton", # for code copy buttons
+    "nbsphinx", # for jupyter notebook support in sphinx
+    # for converting examples to notebooks
+    "jupytext",
+    "notebook",
+    "typing_extensions>=4.12.0",
 ]
 
 [project.urls]
diff --git a/requirements_dev.txt b/requirements_dev.txt
index b578fe418db6441f52c1874dbaa0f8399f9a5a8b..bf7b28df2a690efdcf914841681b5146e1843989 100644
--- a/requirements_dev.txt
+++ b/requirements_dev.txt
@@ -6,36 +6,145 @@
 #
 absl-py==2.1.0
     # via ortools
+alabaster==1.0.0
+    # via sphinx
+anyio==4.9.0
+    # via
+    #   httpx
+    #   jupyter-server
+    #   starlette
+    #   watchfiles
+argon2-cffi==23.1.0
+    # via jupyter-server
+argon2-cffi-bindings==21.2.0
+    # via argon2-cffi
+arrow==1.3.0
+    # via isoduration
+asttokens==3.0.0
+    # via stack-data
+async-lru==2.0.5
+    # via jupyterlab
+attrs==25.3.0
+    # via
+    #   jsonschema
+    #   referencing
+babel==2.17.0
+    # via
+    #   jupyterlab-server
+    #   sphinx
 backports-tarfile==1.1.0
     # via jaraco-context
 beautifulsoup4==4.12.3
-    # via jsp-instance-utils (pyproject.toml)
+    # via
+    #   furo
+    #   jsp-instance-utils (pyproject.toml)
+    #   nbconvert
+bleach[css]==6.2.0
+    # via nbconvert
 build==1.2.1
     # via pip-tools
 cachetools==5.3.3
     # via tox
 certifi==2024.2.2
-    # via requests
+    # via
+    #   httpcore
+    #   httpx
+    #   requests
+cffi==1.17.1
+    # via argon2-cffi-bindings
 chardet==5.2.0
     # via tox
 charset-normalizer==3.3.2
     # via requests
 click==8.1.7
-    # via pip-tools
+    # via
+    #   pip-tools
+    #   uvicorn
+cloudpickle==3.1.1
+    # via
+    #   gym
+    #   gymnasium
+codecov==2.1.13
+    # via jssenv
 colorama==0.4.6
-    # via tox
+    # via
+    #   build
+    #   click
+    #   ipython
+    #   pytest
+    #   sphinx
+    #   sphinx-autobuild
+    #   tox
+comm==0.2.2
+    # via ipykernel
+contourpy==1.3.1
+    # via matplotlib
 coverage[toml]==7.4.4
-    # via pytest-cov
+    # via
+    #   codecov
+    #   pytest-cov
+cycler==0.12.1
+    # via matplotlib
+debugpy==1.8.13
+    # via ipykernel
+decorator==5.2.1
+    # via ipython
+defusedxml==0.7.1
+    # via nbconvert
 distlib==0.3.8
     # via virtualenv
 docutils==0.21.1
-    # via readme-renderer
+    # via
+    #   myst-parser
+    #   nbsphinx
+    #   readme-renderer
+    #   sphinx
+executing==2.2.0
+    # via stack-data
+farama-notifications==0.0.4
+    # via gymnasium
+fastjsonschema==2.21.1
+    # via nbformat
 filelock==3.13.4
     # via
     #   tox
     #   virtualenv
+fonttools==4.56.0
+    # via matplotlib
+fqdn==1.5.1
+    # via jsonschema
+furo==2024.8.6
+    # via jsp-instance-utils (pyproject.toml)
+graph-jsp-env==1.0.0
+    # via jsp-instance-utils (pyproject.toml)
+gym==0.26.2
+    # via
+    #   jsp-instance-utils (pyproject.toml)
+    #   jssenv
+gym-notices==0.0.8
+    # via gym
+gymnasium==1.1.1
+    # via
+    #   graph-jsp-env
+    #   jsp-instance-utils (pyproject.toml)
+h11==0.14.0
+    # via
+    #   httpcore
+    #   uvicorn
+httpcore==1.0.7
+    # via httpx
+httpx==0.28.1
+    # via jupyterlab
 idna==3.7
-    # via requests
+    # via
+    #   anyio
+    #   httpx
+    #   jsonschema
+    #   requests
+imageio==2.37.0
+    # via jssenv
+imagesize==1.4.1
+    # via sphinx
 immutabledict==4.2.0
     # via ortools
 importlib-metadata==7.1.0
@@ -44,57 +153,248 @@ importlib-metadata==7.1.0
     #   twine
 iniconfig==2.0.0
     # via pytest
+ipykernel==6.29.5
+    # via jupyterlab
+ipython==9.0.2
+    # via ipykernel
+ipython-pygments-lexers==1.1.1
+    # via ipython
+isoduration==20.11.0
+    # via jsonschema
 jaraco-classes==3.4.0
     # via keyring
 jaraco-context==5.3.0
     # via keyring
 jaraco-functools==4.0.0
     # via keyring
+jedi==0.19.2
+    # via ipython
+jinja2==3.1.6
+    # via
+    #   jupyter-server
+    #   jupyterlab
+    #   jupyterlab-server
+    #   myst-parser
+    #   nbconvert
+    #   nbsphinx
+    #   sphinx
+json5==0.10.0
+    # via jupyterlab-server
+jsonpointer==3.0.0
+    # via jsonschema
+jsonschema[format-nongpl]==4.23.0
+    # via
+    #   jupyter-events
+    #   jupyterlab-server
+    #   nbformat
+jsonschema-specifications==2024.10.1
+    # via jsonschema
+jsp-vis==1.1.0
+    # via jsp-instance-utils (pyproject.toml)
+jssenv==1.0.2
+    # via jsp-instance-utils (pyproject.toml)
+jupyter-client==8.6.3
+    # via
+    #   ipykernel
+    #   jupyter-server
+    #   nbclient
+jupyter-core==5.7.2
+    # via
+    #   ipykernel
+    #   jupyter-client
+    #   jupyter-server
+    #   jupyterlab
+    #   nbclient
+    #   nbconvert
+    #   nbformat
+jupyter-events==0.12.0
+    # via jupyter-server
+jupyter-lsp==2.2.5
+    # via jupyterlab
+jupyter-server==2.15.0
+    # via
+    #   jupyter-lsp
+    #   jupyterlab
+    #   jupyterlab-server
+    #   notebook
+    #   notebook-shim
+jupyter-server-terminals==0.5.3
+    # via jupyter-server
+jupyterlab==4.3.6
+    # via notebook
+jupyterlab-pygments==0.3.0
+    # via nbconvert
+jupyterlab-server==2.27.3
+    # via
+    #   jupyterlab
+    #   notebook
+jupytext==1.16.7
+    # via jsp-instance-utils (pyproject.toml)
+kaleido==0.2.1
+    # via
+    #   graph-jsp-env
+    #   jsp-vis
+    #   jssenv
 keyring==25.1.0
     # via twine
+kiwisolver==1.4.8
+    # via matplotlib
 markdown-it-py==3.0.0
-    # via rich
+    # via
+    #   jupytext
+    #   mdit-py-plugins
+    #   myst-parser
+    #   rich
+markupsafe==3.0.2
+    # via
+    #   jinja2
+    #   nbconvert
+matplotlib==3.8.4
+    # via
+    #   graph-jsp-env
+    #   jsp-vis
+matplotlib-inline==0.1.7
+    # via
+    #   ipykernel
+    #   ipython
+mdit-py-plugins==0.4.2
+    # via
+    #   jupytext
+    #   myst-parser
 mdurl==0.1.2
     # via markdown-it-py
+mistune==3.1.2
+    # via nbconvert
 more-itertools==10.2.0
     # via
     #   jaraco-classes
     #   jaraco-functools
+myst-parser==4.0.1
+    # via jsp-instance-utils (pyproject.toml)
+narwhals==1.31.0
+    # via plotly
+nbclient==0.10.2
+    # via nbconvert
+nbconvert==7.16.6
+    # via
+    #   jupyter-server
+    #   nbsphinx
+nbformat==5.10.4
+    # via
+    #   jupyter-server
+    #   jupytext
+    #   nbclient
+    #   nbconvert
+    #   nbsphinx
+nbsphinx==0.9.7
+    # via jsp-instance-utils (pyproject.toml)
+nest-asyncio==1.6.0
+    # via ipykernel
+networkx==3.4.2
+    # via graph-jsp-env
 nh3==0.2.17
     # via readme-renderer
+notebook==7.3.3
+    # via jsp-instance-utils (pyproject.toml)
+notebook-shim==0.2.4
+    # via
+    #   jupyterlab
+    #   notebook
 numpy==1.26.4
     # via
+    #   contourpy
+    #   graph-jsp-env
+    #   gym
+    #   gymnasium
+    #   imageio
     #   jsp-instance-utils (pyproject.toml)
+    #   jsp-vis
+    #   jssenv
+    #   matplotlib
+    #   opencv-python
     #   ortools
     #   pandas
+opencv-python==4.11.0.86
+    # via
+    #   graph-jsp-env
+    #   jsp-vis
 ortools==9.9.3963
     # via jsp-instance-utils (pyproject.toml)
+overrides==7.7.0
+    # via jupyter-server
 packaging==24.0
     # via
     #   build
+    #   ipykernel
+    #   jupyter-events
+    #   jupyter-server
+    #   jupyterlab
+    #   jupyterlab-server
+    #   jupytext
+    #   matplotlib
+    #   nbconvert
+    #   plotly
     #   pyproject-api
     #   pytest
+    #   sphinx
     #   tox
 pandas==2.2.2
-    # via ortools
+    # via
+    #   graph-jsp-env
+    #   jsp-vis
+    #   jssenv
+    #   ortools
+pandocfilters==1.5.1
+    # via nbconvert
+parso==0.8.4
+    # via jedi
+pillow==11.1.0
+    # via
+    #   imageio
+    #   matplotlib
 pip-tools==7.4.1
     # via jsp-instance-utils (pyproject.toml)
 pkginfo==1.10.0
     # via twine
 platformdirs==4.2.0
     # via
+    #   jupyter-core
     #   tox
     #   virtualenv
+plotly==6.0.1
+    # via
+    #   graph-jsp-env
+    #   jsp-vis
+    #   jssenv
 pluggy==1.4.0
     # via
     #   pytest
     #   tox
+prometheus-client==0.21.1
+    # via jupyter-server
+prompt-toolkit==3.0.50
+    # via ipython
 protobuf==5.26.1
     # via ortools
+psutil==7.0.0
+    # via
+    #   ipykernel
+    #   jssenv
+pure-eval==0.2.3
+    # via stack-data
+pycparser==2.22
+    # via cffi
 pygments==2.17.2
     # via
+    #   furo
+    #   ipython
+    #   ipython-pygments-lexers
+    #   nbconvert
     #   readme-renderer
     #   rich
+    #   sphinx
+pyparsing==3.2.1
+    # via matplotlib
 pyproject-api==1.6.1
     # via tox
 pyproject-hooks==1.0.0
@@ -104,42 +404,186 @@ pyproject-hooks==1.0.0
 pytest==8.1.1
     # via
     #   jsp-instance-utils (pyproject.toml)
+    #   jssenv
     #   pytest-cov
 pytest-cov==5.0.0
     # via jsp-instance-utils (pyproject.toml)
 python-dateutil==2.9.0.post0
-    # via pandas
+    # via
+    #   arrow
+    #   jupyter-client
+    #   matplotlib
+    #   pandas
+python-json-logger==3.3.0
+    # via jupyter-events
 pytz==2024.1
     # via pandas
+pywin32==310
+    # via jupyter-core
+pywin32-ctypes==0.2.3
+    # via keyring
+pywinpty==2.0.15
+    # via
+    #   jupyter-server
+    #   jupyter-server-terminals
+    #   terminado
+pyyaml==6.0.2
+    # via
+    #   jupyter-events
+    #   jupytext
+    #   myst-parser
+pyzmq==26.3.0
+    # via
+    #   ipykernel
+    #   jupyter-client
+    #   jupyter-server
 readme-renderer==43.0
     # via twine
+referencing==0.36.2
+    # via
+    #   jsonschema
+    #   jsonschema-specifications
+    #   jupyter-events
 requests==2.31.0
     # via
+    #   codecov
     #   jsp-instance-utils (pyproject.toml)
+    #   jssenv
+    #   jupyterlab-server
     #   requests-toolbelt
+    #   sphinx
     #   twine
 requests-toolbelt==1.0.0
     # via twine
+rfc3339-validator==0.1.4
+    # via
+    #   jsonschema
+    #   jupyter-events
 rfc3986==2.0.0
     # via twine
+rfc3986-validator==0.1.1
+    # via
+    #   jsonschema
+    #   jupyter-events
 rich==13.7.1
-    # via twine
+    # via
+    #   graph-jsp-env
+    #   twine
+rpds-py==0.23.1
+    # via
+    #   jsonschema
+    #   referencing
+send2trash==1.8.3
+    # via jupyter-server
 six==1.16.0
-    # via python-dateutil
+    # via
+    #   python-dateutil
+    #   rfc3339-validator
+sniffio==1.3.1
+    # via anyio
+snowballstemmer==2.2.0
+    # via sphinx
 soupsieve==2.5
     # via beautifulsoup4
+sphinx==8.1.3
+    # via
+    #   furo
+    #   jsp-instance-utils (pyproject.toml)
+    #   myst-parser
+    #   nbsphinx
+    #   sphinx-autobuild
+    #   sphinx-basic-ng
+    #   sphinx-copybutton
+sphinx-autobuild==2024.10.3
+    # via jsp-instance-utils (pyproject.toml)
+sphinx-basic-ng==1.0.0b2
+    # via furo
+sphinx-copybutton==0.5.2
+    # via jsp-instance-utils (pyproject.toml)
+sphinxcontrib-applehelp==2.0.0
+    # via sphinx
+sphinxcontrib-devhelp==2.0.0
+    # via sphinx
+sphinxcontrib-htmlhelp==2.1.0
+    # via sphinx
+sphinxcontrib-jsmath==1.0.1
+    # via sphinx
+sphinxcontrib-qthelp==2.0.0
+    # via sphinx
+sphinxcontrib-serializinghtml==2.0.0
+    # via sphinx
+stack-data==0.6.3
+    # via ipython
+starlette==0.46.1
+    # via sphinx-autobuild
+terminado==0.18.1
+    # via
+    #   jupyter-server
+    #   jupyter-server-terminals
+tinycss2==1.4.0
+    # via bleach
+tornado==6.4.2
+    # via
+    #   ipykernel
+    #   jupyter-client
+    #   jupyter-server
+    #   jupyterlab
+    #   notebook
+    #   terminado
 tox==4.14.2
     # via jsp-instance-utils (pyproject.toml)
+traitlets==5.14.3
+    # via
+    #   comm
+    #   ipykernel
+    #   ipython
+    #   jupyter-client
+    #   jupyter-core
+    #   jupyter-events
+    #   jupyter-server
+    #   jupyterlab
+    #   matplotlib-inline
+    #   nbclient
+    #   nbconvert
+    #   nbformat
+    #   nbsphinx
 twine==5.0.0
     # via jsp-instance-utils (pyproject.toml)
+types-python-dateutil==2.9.0.20241206
+    # via arrow
+typing-extensions==4.12.2
+    # via
+    #   anyio
+    #   gymnasium
+    #   ipython
+    #   jsp-instance-utils (pyproject.toml)
+    #   referencing
 tzdata==2024.1
     # via pandas
+uri-template==1.3.0
+    # via jsonschema
 urllib3==2.2.1
     # via
     #   requests
     #   twine
+uvicorn==0.34.0
+    # via sphinx-autobuild
 virtualenv==20.25.3
     # via tox
+watchfiles==1.0.4
+    # via sphinx-autobuild
+wcwidth==0.2.13
+    # via prompt-toolkit
+webcolors==24.11.1
+    # via jsonschema
+webencodings==0.5.1
+    # via
+    #   bleach
+    #   tinycss2
+websocket-client==1.8.0
+    # via jupyter-server
+websockets==15.0.1
+    # via sphinx-autobuild
 wheel==0.43.0
     # via pip-tools
 zipp==3.18.1