From ac22d4a086971051cf37caf249b7318c619b7529 Mon Sep 17 00:00:00 2001
From: Nils Brueggemann <nils.brueggemann@mpimet.mpg.de>
Date: Tue, 18 Mar 2025 22:03:39 +0100
Subject: [PATCH 1/5] setup.py and MANIFEST.in: Make sure that PyPi is not
 missing the requirements.txt.

---
 MANIFEST.in | 1 +
 setup.py    | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 MANIFEST.in

diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..f9bd145
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1 @@
+include requirements.txt
diff --git a/setup.py b/setup.py
index 505b4f7..d545db1 100644
--- a/setup.py
+++ b/setup.py
@@ -21,6 +21,7 @@ setup(
     author_email='nils.brueggemann@mpimet.mpg.de',
     install_requires=install_requires,
     packages=find_packages(),
+    include_package_data=True,
     entry_points={
         'console_scripts': [
             'pyic_intake = scripts.pyic_intake:main',
-- 
GitLab


From aa53ba53f8af072d7e66808b891f8b6cdbb890b2 Mon Sep 17 00:00:00 2001
From: Nils Brueggemann <nils.brueggemann@mpimet.mpg.de>
Date: Tue, 18 Mar 2025 22:10:40 +0100
Subject: [PATCH 2/5] Only import ipdb if it is present.

---
 pyicon/pyicon_plotting.py | 4 +++-
 pyicon/pyicon_tb.py       | 4 +++-
 scripts/pyic_fig.py       | 4 +++-
 scripts/pyic_intake.py    | 4 +++-
 scripts/pyic_sec.py       | 3 +++
 scripts/pyic_view.py      | 4 +++-
 6 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/pyicon/pyicon_plotting.py b/pyicon/pyicon_plotting.py
index 0dd734d..ec1a84e 100644
--- a/pyicon/pyicon_plotting.py
+++ b/pyicon/pyicon_plotting.py
@@ -15,7 +15,9 @@ import cartopy
 import cartopy.crs as ccrs
 from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
 import cmocean
-from ipdb import set_trace as mybreak
+import importlib.util
+if importlib.util.find_spec("ipdb"):
+  from ipdb import set_trace as mybreak
 #from importlib import reload
 from .pyicon_tb import write_dataarray_to_nc
 from .pyicon_tb import identify_grid
diff --git a/pyicon/pyicon_tb.py b/pyicon/pyicon_tb.py
index d58ded2..9b83c69 100644
--- a/pyicon/pyicon_tb.py
+++ b/pyicon/pyicon_tb.py
@@ -18,7 +18,9 @@ import matplotlib.pyplot as plt
 import matplotlib
 # --- debugging
 #print('mybreak')
-from ipdb import set_trace as mybreak  
+import importlib.util
+if importlib.util.find_spec("ipdb"):
+  from ipdb import set_trace as mybreak
 #print('pnadas')
 import pandas as pd
 #print('xarray')
diff --git a/scripts/pyic_fig.py b/scripts/pyic_fig.py
index 5ad9e7d..04d5837 100755
--- a/scripts/pyic_fig.py
+++ b/scripts/pyic_fig.py
@@ -166,7 +166,9 @@ def main():
     import os
     import sys
     from pathlib import Path
-    from ipdb import set_trace as mybreak  
+    import importlib.util
+    if importlib.util.find_spec("ipdb"):
+      from ipdb import set_trace as mybreak
     #sys.path.append(f'{Path.home()}/pyicon/')
     import pyicon as pyic  
     print('Done loading modules.')
diff --git a/scripts/pyic_intake.py b/scripts/pyic_intake.py
index a3d2306..749d2b8 100755
--- a/scripts/pyic_intake.py
+++ b/scripts/pyic_intake.py
@@ -3,7 +3,9 @@ import os
 import glob
 import yaml
 import argparse
-from ipdb import set_trace as mybreak
+import importlib.util
+if importlib.util.find_spec("ipdb"):
+  from ipdb import set_trace as mybreak
 import sys
 from netCDF4 import Dataset
 import pandas as pd
diff --git a/scripts/pyic_sec.py b/scripts/pyic_sec.py
index 87c57d8..58bd3d4 100755
--- a/scripts/pyic_sec.py
+++ b/scripts/pyic_sec.py
@@ -147,6 +147,9 @@ def main():
     import sys
     from pathlib import Path
     from ipdb import set_trace as mybreak  
+    import importlib.util
+    if importlib.util.find_spec("ipdb"):
+      from ipdb import set_trace as mybreak
     #sys.path.append(f'{Path.home()}/pyicon/')
     import pyicon as pyic  
     print('Done loading modules.')
diff --git a/scripts/pyic_view.py b/scripts/pyic_view.py
index 3785dc5..eb6db36 100755
--- a/scripts/pyic_view.py
+++ b/scripts/pyic_view.py
@@ -9,7 +9,9 @@ import pyicon as pyic
 import cartopy.crs as ccrs
 import glob
 from pyicon import params
-from ipdb import set_trace as mybreak
+import importlib.util
+if importlib.util.find_spec("ipdb"):
+  from ipdb import set_trace as mybreak
 import cmocean
 from pyproj import Proj, CRS, Transformer
 
-- 
GitLab


From b753de8c36bfa8030cba819c3e1302fdf0974510 Mon Sep 17 00:00:00 2001
From: Nils Brueggemann <nils.brueggemann@mpimet.mpg.de>
Date: Tue, 18 Mar 2025 22:12:02 +0100
Subject: [PATCH 3/5] requirements.txt: Move installation of ipdb and pytest to
 separate file requirements_development.txt.

---
 requirements.txt             | 2 --
 requirements_development.txt | 2 ++
 2 files changed, 2 insertions(+), 2 deletions(-)
 create mode 100644 requirements_development.txt

diff --git a/requirements.txt b/requirements.txt
index 4c83d1e..86b7362 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,12 +6,10 @@ xarray
 pandas
 cmocean
 scipy
-ipdb
 ipywidgets
 ipykernel
 jupytext
 nbconvert
-pytest
 healpy
 cftime
 #cartopy         # cannot easily be installed with pip
diff --git a/requirements_development.txt b/requirements_development.txt
new file mode 100644
index 0000000..5778fd9
--- /dev/null
+++ b/requirements_development.txt
@@ -0,0 +1,2 @@
+ipdb
+pytest
\ No newline at end of file
-- 
GitLab


From 791fbd972cfb01730af01d3c8303289fa271e819 Mon Sep 17 00:00:00 2001
From: Nils Brueggemann <nils.brueggemann@mpimet.mpg.de>
Date: Wed, 19 Mar 2025 11:19:03 +0100
Subject: [PATCH 4/5] setup.py: Allow for more installation option.

---
 setup.py | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/setup.py b/setup.py
index d545db1..37b2e0f 100644
--- a/setup.py
+++ b/setup.py
@@ -10,6 +10,12 @@ with open("README.md", "r", encoding="utf-8") as f:
 with open("requirements.txt") as f:
     install_requires = f.read().strip().split("\n")
 
+with open("requirements_documentation.txt") as f:
+    documentation_requires = f.read().strip().split("\n")
+
+with open("requirements_development.txt") as f:
+    development_requires = f.read().strip().split("\n")
+
 setup(
     name='pyicon-diagnostics',
     version=version,
@@ -20,6 +26,11 @@ setup(
     author='The pyicon development team',
     author_email='nils.brueggemann@mpimet.mpg.de',
     install_requires=install_requires,
+    extras_require={
+        "dev": development_requires,
+        "doc": documentation_requires,
+        "full": development_requires+documentation_requires,
+    },
     packages=find_packages(),
     include_package_data=True,
     entry_points={
-- 
GitLab


From 15675b0994bbdae526fabde1e21a8123598a0b6a Mon Sep 17 00:00:00 2001
From: Nils Brueggemann <nils.brueggemann@mpimet.mpg.de>
Date: Wed, 19 Mar 2025 11:22:56 +0100
Subject: [PATCH 5/5] doc: Introduce way to install also dependencies

---
 doc/doc-installation.md | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/doc/doc-installation.md b/doc/doc-installation.md
index 9406abb..fe2afa5 100644
--- a/doc/doc-installation.md
+++ b/doc/doc-installation.md
@@ -19,6 +19,12 @@ cd pyicon
 pip install -e .
 ``` 
 
+For a more complete installation that includes dependencies for testing, 
+debugging and compiling the documentation use:
+```
+pip install -e .[full]
+```
+
 ### On an arbitrary system
 
 pyicon is developed for python 3.8 or later. Other versions might work as well but are not supported so far.
@@ -37,6 +43,12 @@ cd pyicon
 pip install -e .
 ```
 
+For a more complete installation that includes dependencies for testing, 
+debugging and compiling the documentation use:
+```
+pip install -e .[full]
+```
+
 The above instructions will provide a minimum python environment that will be sufficient for most applications. 
 However, some more advanced features might require the installation of further python packages.
 For a complete list of python packages that is supposed to cover all aspects can be obtained from the latest 
-- 
GitLab