diff --git a/Golden_Repo/j/JupyterExtension-jupyterai/JupyterExtension-jupyterai-0.9.0-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterExtension-jupyterai/JupyterExtension-jupyterai-0.9.0-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..a9a307a38ef19a385bf26877d54ddba87620a649 --- /dev/null +++ b/Golden_Repo/j/JupyterExtension-jupyterai/JupyterExtension-jupyterai-0.9.0-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,130 @@ +easyblock = 'PythonBundle' + +name = 'JupyterExtension-jupyterai' +version = '0.9.0' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://jupyter-ai.readthedocs.io' +description = """ +A generative AI extension for JupyterLab +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), + ('Rust', '1.60.0'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), + ('protobuf-python', '3.19.4'), +] + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'download_dep_fail': True, + 'use_pip_for_deps': False, + 'sanity_pip_check': True, + 'filter': ('python -c "import %(ext_name)s"', ''), +} + +exts_list = [ + ('faiss_cpu', '1.7.4', { + 'modulename': False, + 'source_tmpl': '%(name)s-%(version)s-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl', + 'checksums': ['dca531952a2e3eac56f479ff22951af4715ee44788a3fe991d208d766d3f95f3'], + }), + ('webcolors', '1.13', { + 'checksums': ['c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a'], + }), + ('uri-template', '1.3.0', { + 'checksums': ['0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7'], + }), + ('typing_extensions', '4.5.0', { + 'checksums': ['5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb'], + }), + ('numexpr', '2.8.4', { + 'checksums': ['d5432537418d18691b9115d615d6daa17ee8275baef3edf1afbbf8bc69806147'], + }), + ('jsonpointer', '2.4', { + 'checksums': ['585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88'], + }), + ('jsonpath-ng', '1.5.3', { + 'checksums': ['a273b182a82c1256daab86a313b937059261b5c5f8c4fa3fc38b882b344dd567'], + }), + ('importlib_metadata', '5.2.0', { + 'checksums': ['404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd'], + }), + ('grpcio', '1.51.3', { + 'modulename': False, + 'checksums': ['be7b2265b7527bb12109a7727581e274170766d5b3c9258d4e466f4872522d7a'], + }), + ('fqdn', '1.5.1', { + 'checksums': ['105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f'], + }), + ('typing_inspect', '0.9.0', { + 'checksums': ['b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78'], + }), + ('tiktoken', '0.4.0', { + 'checksums': ['59b20a819969735b48161ced9b92f05dc4519c17be4015cfb73b65270a243620'], + }), + ('ray', '2.4.0', { + 'source_tmpl': '%(name)s-%(version)s-cp310-cp310-manylinux2014_x86_64.whl', + 'checksums': ['5ed5a29795b122e9e2b832d5224ab9b1cc235beab700d2a413b23c63b3d3c80c'], + }), + ('pydantic', '1.10.10', { + 'checksums': ['3b8d5bd97886f9eb59260594207c9f57dce14a6f869c6ceea90188715d29921a'], + }), + ('marshmallow', '3.19.0', { + 'checksums': ['90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78'], + }), + ('arrow', '1.2.3', { + 'checksums': ['3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1'], + }), + ('openapi-schema-pydantic', '1.2.4', { + 'checksums': ['3e22cf58b74a69f752cc7e5f1537f6e44164282db2700cbbcd3bb99ddd065196'], + }), + ('openai', '0.27.8', { + 'checksums': ['2483095c7db1eee274cebac79e315a986c4e55207bb4fa7b82d185b3a2ed9536'], + }), + ('marshmallow-enum', '1.5.1', { + 'checksums': ['38e697e11f45a8e64b4a1e664000897c659b60aa57bfa18d44e226a9920b6e58'], + }), + ('isoduration', '20.11.0', { + 'checksums': ['ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9'], + }), + ('dataclasses-json', '0.5.9', { + 'checksums': ['e9ac87b73edc0141aafbce02b44e93553c3123ad574958f0fe52a534b6707e8e'], + }), + ('langchain', '0.0.159', { + 'source_tmpl': '%(name)s-%(version)s-py3-none-any.whl', + 'checksums': ['d9df75405d6f02cc683bef5b3e79fbf9ca3b22c5ff198dd823b5393c568e2ec4'], + }), + ('jupyter_ai_magics', version, { + 'checksums': ['53d403df3015796c330b496c04609fac16590937be6670fe725d9349f0522059'], + }), + ('jupyter_ai', version, { + 'checksums': ['ce3c37ae69c90dd62340ef1dc1df2e1cc35c7420eba2aba8b88e9ce97c3b336d'], + }), +] + +modextrapaths = { + 'JUPYTER_EXTRA_LABEXTENSIONS_PATH': ['share/jupyter/labextensions'], +} + +sanity_check_paths = { + 'files': [], + 'dirs': [ + 'share/jupyter/labextensions', + 'lib/python%(pyshortver)s/site-packages' + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterExtension-nglview/JupyterExtension-nglview-3.0.6-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterExtension-nglview/JupyterExtension-nglview-3.0.6-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..aec36fbabae88b65bb198c22b0eb54c8318a5d88 --- /dev/null +++ b/Golden_Repo/j/JupyterExtension-nglview/JupyterExtension-nglview-3.0.6-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,57 @@ +easyblock = 'PythonBundle' + +name = 'JupyterExtension-nglview' +version = '3.0.6' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'http://nglviewer.org/nglview/' +description = """ +Jupyter widget to interactively view molecular structures and trajectories +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'download_dep_fail': True, + 'use_pip_for_deps': False, + 'sanity_pip_check': True, + 'filter': ('python -c "import %(ext_name)s"', ''), +} + +exts_list = [ + ('versioneer', '0.28', { + 'checksums': ['7175ca8e7bb4dd0e3c9779dd2745e5b4a6036304af3f5e50bd896f10196586d6'], + }), + ('nglview', '%(version)s', { + 'checksums': ['2afd95128118953813634472a7ec5eb596bff4b0d8acf5900045ccc2aa783bbb'], + }), +] + +modextrapaths = { + 'JUPYTER_EXTRA_LABEXTENSIONS_PATH': ['share/jupyter/labextensions'], +} + +sanity_check_paths = { + 'files': [], + 'dirs': [ + 'share/jupyter/labextensions', + 'lib/python%(pyshortver)s/site-packages' + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterExtension-nvdashboard/JupyterExtension-nvdashboard-0.8.0-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterExtension-nvdashboard/JupyterExtension-nvdashboard-0.8.0-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..2aa4147749a8cb18f227ec0c33ed44082447790b --- /dev/null +++ b/Golden_Repo/j/JupyterExtension-nvdashboard/JupyterExtension-nvdashboard-0.8.0-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,58 @@ +easyblock = 'PythonBundle' + +name = 'JupyterExtension-nvdashboard' +version = '0.8.0' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://github.com/rapidsai/jupyterlab-nvdashboard' +description = """ +A JupyterLab extension for displaying GPU usage dashboards +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), + # NVIDIA Management Library is on our clusters located at system level +] + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'download_dep_fail': True, + 'use_pip_for_deps': False, + 'sanity_pip_check': True, + 'filter': ('python -c "import %(ext_name)s"', ''), +} + +exts_list = [ + ('pynvml', '11.5.0', { + 'checksums': ['d027b21b95b1088b9fc278117f9f61b7c67f8e33a787e9f83f735f0f71ac32d0'], + }), + ('jupyterlab_nvdashboard', '0.8.0', { + 'checksums': ['48e9b535b4139b5d1274844281fd1dd8e244123fb1b2b2ec42442cdbbcd535ab'], + }), +] + +modextrapaths = { + 'JUPYTER_EXTRA_LABEXTENSIONS_PATH': ['share/jupyter/labextensions'], +} + +sanity_check_paths = { + 'files': [], + 'dirs': [ + 'share/jupyter/labextensions', + 'lib/python%(pyshortver)s/site-packages' + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterExtension-slurmprovisioner/JupyterExtension-slurmprovisioner-0.6.0-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterExtension-slurmprovisioner/JupyterExtension-slurmprovisioner-0.6.0-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..19be3ea315f5136101454d5cbdc515285ac4e31e --- /dev/null +++ b/Golden_Repo/j/JupyterExtension-slurmprovisioner/JupyterExtension-slurmprovisioner-0.6.0-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,63 @@ +easyblock = 'PythonBundle' + +name = 'JupyterExtension-slurmprovisioner' +version = '0.6.0' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://github.com/FZJ-JSC/jupyter-slurm-provisioner-extension' +description = """ +A JupyterLab extension for using a slurm kernel provisioner +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'download_dep_fail': True, + 'use_pip_for_deps': False, + 'sanity_pip_check': True, + 'filter': ('python -c "import %(ext_name)s"', ''), +} + +exts_list = [ + ('jupyter-slurm-provisioner', '0.6.0', { + 'checksums': ['24141dc4abfb009d424837a5d78159c2b63e0243d63618cacebcf4f23edc101f'], + }), + ('jupyter_slurm_provisioner_extension', '0.3.0', { + 'patches': ['jupyter-slurm-provisioner-extension_jserv3.patch'], + 'checksums': [ + 'fa2cf94d180f08ad47563b9bdcc4c66b2f0831dff85e2203a8cb6bc8d90b8a58', + '65d2cb1224c4444cf6bfe6b18ff603b75d0263292afc226f5a912e2905a914e1', + ], + }), +] + +modextrapaths = { + 'JUPYTER_EXTRA_LABEXTENSIONS_PATH': ['share/jupyter/labextensions'], + 'JUPYTER_PATH': ['share/jupyter'], + 'JUPYTER_CONFIG_PATH': ['etc/jupyter'], +} + +sanity_check_paths = { + 'files': [], + 'dirs': [ + 'share/jupyter/labextensions', + 'lib/python%(pyshortver)s/site-packages' + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterExtension-slurmprovisioner/jupyter-slurm-provisioner-extension_jserv3.patch b/Golden_Repo/j/JupyterExtension-slurmprovisioner/jupyter-slurm-provisioner-extension_jserv3.patch new file mode 100644 index 0000000000000000000000000000000000000000..6a13402e0195c70b3548efc39a24d19cb54c452d --- /dev/null +++ b/Golden_Repo/j/JupyterExtension-slurmprovisioner/jupyter-slurm-provisioner-extension_jserv3.patch @@ -0,0 +1,12 @@ +diff -Naur jupyter_slurm_provisioner_extension.orig/jupyter_slurm_provisioner_extension-0.3.0/setup.py jupyter_slurm_provisioner_extension/jupyter_slurm_provisioner_extension-0.3.0/setup.py +--- jupyter_slurm_provisioner_extension.orig/jupyter_slurm_provisioner_extension-0.3.0/setup.py 2022-12-02 16:54:56.000000000 +0100 ++++ jupyter_slurm_provisioner_extension/jupyter_slurm_provisioner_extension-0.3.0/setup.py 2023-06-05 21:43:30.684253118 +0200 +@@ -57,7 +57,7 @@ + long_description_content_type="text/markdown", + packages=setuptools.find_packages(), + install_requires=[ +- "jupyter_server>=1.6,<2", ++ "jupyter_server>=1.6,<3", + "jupyter-slurm-provisioner>=0.1.8" + ], + extras_require={ diff --git a/Golden_Repo/j/JupyterKernel-Bash/JupyterKernel-Bash-0.9.0-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-Bash/JupyterKernel-Bash-0.9.0-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..db90d81b2b873d293c5ce9671f0b63d65a2bbb21 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Bash/JupyterKernel-Bash-0.9.0-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,96 @@ +easyblock = 'PythonBundle' + +name = 'JupyterKernel-Bash' +version = '0.9.0' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://github.com/takluyver/bash_kernel' +description = """ +Native Bash kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'filter': ('python -c "import %(ext_name)s"', ''), + 'download_dep_fail': True, + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'sanity_pip_check': True, + 'use_pip_for_deps': False, +} + +exts_list = [ + ('bash_kernel', '0.9.0', { + 'checksums': ['0423f0512ef6f83a654e1439a369718899a38f27948fe21b665b2df1dbf3a7c7'], + }), +] + +local_jupyter_path = 'share/jupyter' + +modextrapaths = { + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + +postinstallcmds = [ + # Create virtual environment to ensure we install in the correct directory !!! + 'python3 -m venv %(installdir)s --system-site-packages', + ( + '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n' + '#!/bin/bash\n' + 'source %%(installdir)s/bin/activate\n' + 'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:${PYTHONPATH}\n' + 'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n' + 'EOF' + ) % (local_jupyter_path), + + # Jupyter Kernel: Bash - https://github.com/takluyver/bash_kernel + # installs bash_kernel in $JUPYTER_DATA_DIR/kernels + 'source %(builddir)s/env.sh && ${EBROOTPYTHON}/bin/python3 -m bash_kernel.install --user', + 'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share', + + # Ensure we remove the virtuel environment to avoid wrong search path for python packages + 'rm -f %(installdir)s/pyvenv.cfg', + 'rm -rf %(installdir)s/bin', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/_distutils_hack', + 'rm -f %(installdir)s/lib/python%(pyshortver)s/site-packages/distutils-precedence.pth', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip-*', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pkg_resources', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools-*', +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +# full_sanity_check = True +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/bash/kernel.json', + ], + 'dirs': [ + 'lib/python%(pyshortver)s/site-packages', + 'share/jupyter/kernels/bash/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-Cling/JupyterKernel-Cling-20230205-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-Cling/JupyterKernel-Cling-20230205-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..9980ddaaee1994d28e66590977b523446155d33e --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Cling/JupyterKernel-Cling-20230205-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,95 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-Cling' +version = '20230205' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://github.com/root-project/cling' +description = """ +Native C kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), + ('Cling', version), +] + +local_jupyter_path = 'share/jupyter' + +modextrapaths = { + 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + +postinstallcmds = [ + # Create virtual environment to ensure we install in the correct directory !!! + 'python3 -m venv %(installdir)s --system-site-packages', + ( + '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n' + '#!/bin/bash\n' + 'source %%(installdir)s/bin/activate\n' + 'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:${PYTHONPATH}\n' + 'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n' + 'EOF' + ) % (local_jupyter_path), + + # Jupyter Kernel: Cling (C++) + ( + 'source %(builddir)s/env.sh && ' + ' pip3 install --upgrade --no-deps --force-reinstall ${EBROOTCLING}/share/cling/Jupyter/kernel && ' + ' jupyter-kernelspec install --prefix=%(installdir)s ${EBROOTCLING}/share/cling/Jupyter/kernel/cling-cpp17 && ' + ' install -m 0755 ${EBROOTCLING}/share/cling/Jupyter/kernel/scripts/jupyter-cling-kernel %(installdir)s/bin/ ' + ), + + # correct shebang to correct python binary + ( + 'source %(builddir)s/env.sh && ' + ' abs2python="#! ${EBROOTPYTHON}/bin/python" && ' + ' sed "1s@^.*@$abs2python@g" -i %(installdir)s/bin/jupyter-cling-kernel' + ), + 'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share', + + # Ensure we remove the virtuel environment to avoid wrong search path for python packages + 'rm -f %(installdir)s/pyvenv.cfg', + 'rm -f %(installdir)s/bin/python', + 'rm -f %(installdir)s/bin/python3', + 'rm -f %(installdir)s/bin/activate', + 'rm -f %(installdir)s/bin/activate*', + 'rm -f %(installdir)s/bin/easy_install*', + 'rm -f %(installdir)s/bin/pip*', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/_distutils_hack', + 'rm -f %(installdir)s/lib/python%(pyshortver)s/site-packages/distutils-precedence.pth', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip-*', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pkg_resources', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools-*', +] + +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/cling-cpp17/kernel.json', + ], + 'dirs': [ + 'lib/python%(pyshortver)s/site-packages', + 'share/jupyter/kernels/cling-cpp17/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-Julia/JupyterKernel-Julia-1.8.5-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-Julia/JupyterKernel-Julia-1.8.5-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..116e8204b611caa02ca8cbab50dabcaa08cccf17 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Julia/JupyterKernel-Julia-1.8.5-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,129 @@ +easyblock = 'JuliaBundle' + +name = 'JupyterKernel-Julia' +version = '1.8.5' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://github.com/JuliaLang/IJulia.jl' +description = """ +Native Julia kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('Julia', version, '', ('gcccoremkl', '11.3.0-2022.1.0')), +] + +components = [ + ('julia', '0.6.1', { + 'easyblock': 'PythonPackage', + 'use_pip': True, + 'sources': ['v%(version)s.tar.gz'], + 'source_urls': ['https://github.com/JuliaPy/pyjulia/archive/'], + 'checksums': [('sha256', 'dffe739075d5a3ab68b8127df3481d5152e87698020966d45fa77efd8671b690')], + 'download_dep_fail': True, + 'start_dir': 'pyjulia-%(version)s', + }), +] + +local_jupyter_path = 'share/jupyter' + +exts_defaultclass = 'JuliaPackage' +exts_list = [ + ('ZMQ', '1.2.1', { + 'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://github.com/JuliaInterop/ZMQ.jl/archive/'], + 'checksums': [('sha256', '8b42555340d0208e5a36cd5e8f29a3f0d44c13c064382d4b1e5d00c1c4a9dd96')], + }), + ('Interact', '0.10.5', { + 'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://github.com/JuliaGizmos/Interact.jl/archive/'], + 'checksums': ['68b347b97fce2f7aeb26e9c03466406f5183fe7d758066bf6111554ca73c3382'], + }), + ('LanguageServer', '4.4.0', { + 'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://github.com/julia-vscode/LanguageServer.jl/archive/'], + 'checksums': ['42fd14603c150311a5c46c27889b89f46663ffaee3e321eccdb6ea908c647a54'], + }), + ('SymbolServer', '7.2.1', { + 'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://github.com/julia-vscode/SymbolServer.jl/archive/'], + 'checksums': ['049a62a61a2a12e837bac208800e102bf36c78672081885e97134c482e645f65'], + }), + ('IJulia', '1.24.2', { + # installs ijulia in JULIA_DEPOT_PATH and kernel in $JUPYTER_DATA_DIR/kernels + 'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://github.com/JuliaLang/IJulia.jl/archive/'], + 'checksums': ['de215348c7c41e1ca15c0d21f5f9a78bedce77b02ef89d67f38702c4d57ee80d'], + 'preinstallopts': 'export JUPYTER_DATA_DIR=%%(installdir)s/%s' % local_jupyter_path + }), +] + +modextrapaths = { + 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], + 'JUPYTER_PATH': [local_jupyter_path], # add search path for kernelspecs +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + +postinstallcmds = [ + # Create virtual environment to ensure we install in the correct directory !!! + 'python3 -m venv %(installdir)s --system-site-packages', + 'mkdir -p %%(installdir)s/%s' % local_jupyter_path, + ( + '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n' + '#!/bin/bash\n' + 'source %%(installdir)s/bin/activate\n' + 'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:${PYTHONPATH}\n' + '' + 'export JULIA_DEPOT_PATH=${EBJULIA_STD_DEPOT_PATH}:${EBJULIA_ADMIN_DEPOT_PATH}\n' + 'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n' + 'EOF' + ) % (local_jupyter_path), + + # configure Python<->Julia bridge (of python package julia) + 'source %(builddir)s/env.sh && python -c "import julia; julia.install()"', + + # Ensure we remove the virtuel environment to avoid wrong search path for python packages + 'rm -f %(installdir)s/pyvenv.cfg', + 'rm -f %(installdir)s/bin/python', + 'rm -f %(installdir)s/bin/python3', + 'rm -f %(installdir)s/bin/activate', + 'rm -f %(installdir)s/bin/activate*', + 'rm -f %(installdir)s/bin/easy_install*', + 'rm -f %(installdir)s/bin/pip*', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/_distutils_hack', + 'rm -f %(installdir)s/lib/python%(pyshortver)s/site-packages/distutils-precedence.pth', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip-*', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pkg_resources', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools-*', +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +# full_sanity_check = True +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/julia-%(version_major_minor)s/kernel.json', + ], + 'dirs': [ + 'lib/python%(pyshortver)s/site-packages', + 'share/jupyter/kernels/julia-%(version_major_minor)s/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-Octave/JupyterKernel-Octave-8.2.0-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-Octave/JupyterKernel-Octave-8.2.0-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..4ed65fd95881364319bbaf565bfa1ea341725822 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Octave/JupyterKernel-Octave-8.2.0-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,140 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-Octave' +version = '8.2.0' +local_octavever = version +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://github.com/Calysto/octave_kernel' +description = """ +Native Octave kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), + ('Octave', local_octavever, '', ('gcccoremkl', '11.3.0-2022.1.0')), # ensure it is available +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + +local_jupyter_path = 'share/jupyter' +local_kernel_dir = 'octave' +local_kernel_name = 'Octave-%s' % local_octavever + +modextrapaths = { + 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + +postinstallcmds = [ + # Create virtual environment to ensure we install in the correct directory !!! + 'python3 -m venv %(installdir)s --system-site-packages', + ( + '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n' + '#!/bin/bash\n' + 'source %%(installdir)s/bin/activate\n' + 'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:${PYTHONPATH}\n' + 'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n' + 'EOF' + ) % (local_jupyter_path), + + # enable use of Octave from production stage + # '--no-deps' only because we know its installed in module Jupyter + 'source %(builddir)s/env.sh && pip3 install --upgrade --no-deps --force-reinstall ipykernel ', + 'rm -rf %(installdir)s/share/jupyter/kernels/', # remove any kernel installed by ipykernel + # 'source %(builddir)s/env.sh && pip3 install --upgrade --no-deps --force-reinstall ipyparallel ', + + # install Python package octave_kernel + # we rely on pip for automatic installation of dependencies! + 'source %(builddir)s/env.sh && pip3 install --upgrade --no-deps --force-reinstall metakernel==0.29.0 ', + 'source %(builddir)s/env.sh && pip3 install --upgrade --no-deps --force-reinstall octave_kernel==0.34.2 ', + + # write kernel.sh + ( + '{ cat >> %%(builddir)s/env.sh; } << \'EOF\'\n' + 'export KERNEL_DIR=%s\n' + 'export KERNEL_NAME=%s\n' + 'EOF' + ) % (local_kernel_dir, local_kernel_name), + ( + '{ source %%(builddir)s/env.sh && ' + ' cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.sh; } << EOF\n' + '#!/bin/bash \n' + '\n' + '# Load required modules \n' + 'module purge \n' + 'module load Stages/${STAGE} \n' + 'module load GCCcore/.11.3.0 \n' + '\n' + 'module load Python/%%(pyver)s \n' + 'module load JupyterLab/%s \n' + 'module load Octave/%s \n' + '\n' + 'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:\${PYTHONPATH} \n' + '\n' + 'exec python \$@\n' + 'EOF' + ) % (local_kernel_dir, local_jupyterver, local_octavever), + 'source %(builddir)s/env.sh && chmod +x %(installdir)s/share/jupyter/kernels/${KERNEL_DIR}/kernel.sh', + + # write kernel.json + ( + '{ source %%(builddir)s/env.sh && ' + ' cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.json; } << \'EOF\'\n' + '{ \n' + ' "argv": [ \n' + ' "%%(installdir)s/share/jupyter/kernels/%s/kernel.sh", \n' + ' "-m", \n' + ' "octave_kernel", \n' + ' "-f", \n' + ' "{connection_file}" \n' + ' ], \n' + ' "display_name": "%s", \n' + ' "mimetype": "text/x-octave", \n' + ' "language": "python", \n' + ' "name": "%s" \n' + '}\n' + 'EOF' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_name, local_kernel_name), + + # ensure correct permissions + 'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share', + + # Ensure we remove the virtuel environment to avoid wrong search path for python packages + 'rm -f %(installdir)s/pyvenv.cfg', + 'rm -rf %(installdir)s/bin', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/_distutils_hack', + 'rm -f %(installdir)s/lib/python%(pyshortver)s/site-packages/distutils-precedence.pth', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip-*', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pkg_resources', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools-*', +] + +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + 'share/jupyter/kernels/%s/kernel.json' % local_kernel_dir, + ], + 'dirs': [ + 'lib/python%(pyshortver)s/site-packages', + 'share/jupyter/kernels/octave/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-PyDeepLearning/JupyterKernel-PyDeepLearning-2023.5-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-PyDeepLearning/JupyterKernel-PyDeepLearning-2023.5-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..26c0a8b43fdc7148ba98fc92a800ba8a1c97f20a --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyDeepLearning/JupyterKernel-PyDeepLearning-2023.5-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,161 @@ +easyblock = 'PythonBundle' + +name = 'JupyterKernel-PyDeepLearning' +version = '2023.5' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://www.fz-juelich.de' +description = """ +Special DeepLearning kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), + # just ensure they exist + ('CUDA', '11.7', '', SYSTEM), + ('OpenCV', '4.7.0', '-CUDA-%(cudaver)s-contrib', ('gcccoremkl', '11.3.0-2022.1.0')), + ('TensorFlow', '2.11.0', '-CUDA-%(cudaver)s', ('gcccoremkl', '11.3.0-2022.1.0')), + ('protobuf-python', '3.19.4'), + # ('PyTorch', '1.12', '-CUDA-%(cudaver)s', ''), + # ('PyTorch-Geometric', '2.1.0', ''), + # ('torchvision', '0.13.1', '-CUDA-11.7'), + # ('torchaudio', '0.12.1'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + + +components = [ + ('logos', '1.0', { + 'easyblock': 'Binary', + 'sources': [ + {'filename': 'logo-32x32.png.base64', 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-32x32.png"}, + {'filename': 'logo-64x64.png.base64', 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-64x64.png"}, + {'filename': 'logo-128x128.png.base64', 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-128x128.png"}, + ], + 'checksums': [ + '08651dd90fd0ce20a8f3d62bdbeacf34dfae7a73e61fde912d080222aa00e6b7', + 'c3230068b407ff172b369208c20a24ed04971ce38e2fdf9116100102e14221a8', + 'baa78f71dd2bb4e51eab0c653535365e54a717506622bcff4f834d653a17a2bf', + ], + }), +] + +exts_default_options = { + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'sanity_pip_check': False, # skip as it requires protobuf, TensorFlow + 'download_dep_fail': True, + 'use_pip_for_deps': False, +} + +exts_list = [ + ('lmdb', '1.1.1', { + 'checksums': ['165cd1669b29b16c2d5cc8902b90fede15a7ee475c54d466f1444877a3f511ac'], + }), + ('gviz_api', '1.9.0', { + 'checksums': ['43d13ccc21834d0501b33a291ef3265e933dbb4bbdca3d34b1ed0a048c0ef640'], + }), + ('tensorboard_plugin_profile', '2.5.0', { + 'checksums': ['f832698d87a773b9a017fc4dd5cf598a1ff942ccfbf3392c83fe12c949ab9f52'], + }), + ('tensorflow_hub', '0.12.0', { + 'source_tmpl': 'tensorflow_hub-0.12.0-py2.py3-none-any.whl', + 'checksums': ['822fe5f7338c95efcc3a534011c6689e4309ba2459def87194179c4de8a6e1fc'], + 'unpack_sources': False, + 'modulename': False, # skip sanity check as 'import' will fail without TensorFlow + }), +] + +local_kernel_dir = 'pydeeplearning' +local_kernel_name = 'PyDeepLearning-%s' % version + +modextrapaths = { + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs + 'HOROVOD_MPI_THREADS_DISABLE': ['1'], # no mpi by default +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + +postinstallcmds = [ + # create kernel skeleton + ( + 'python -m ipykernel install --name=%s --prefix=%%(installdir)s && ' + 'rm -f %%(installdir)s/share/jupyter/kernels/%s/logo-svg.svg && ' + 'mv %%(installdir)s/logo-32x32.png %%(installdir)s/share/jupyter/kernels/%s/logo-32x32.png && ' + 'mv %%(installdir)s/logo-64x64.png %%(installdir)s/share/jupyter/kernels/%s/logo-64x64.png && ' + 'mv %%(installdir)s/logo-128x128.png %%(installdir)s/share/jupyter/kernels/%s/logo-128x128.png' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir), + + # write kernel.sh + ( + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.sh; } << EOF\n' + '#!/bin/bash \n' + '\n' + '# Load required modules \n' + 'module purge \n' + 'module load Stages/${STAGE} \n' + 'module load GCC \n' + 'module load OpenMPI \n' + 'module load %s/.%s%s \n' + '\n' + 'module load OpenCV/4.7.0-CUDA-11.7-contrib \n' + 'module load TensorFlow/2.11.0-CUDA-11.7 \n' + 'module load protobuf-python/.3.19.4 \n' + 'module load PyTorch/1.12.0-CUDA-11.7 \n' + 'module load PyTorch-Geometric/2.1.0-PyTorch-1.12.0-CUDA-11.7 \n' + 'module load torchvision/0.13.1-CUDA-11.7 \n' + 'module load torchaudio/0.12.1 \n' + '\n' + 'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:\$PYTHONPATH \n' + 'exec python -m ipykernel \$@\n' + '\n' + 'EOF' + ) % (local_kernel_dir, name, version, versionsuffix), + 'chmod +x %%(installdir)s/share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + + # write kernel.json + ( + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.json; } << \'EOF\'\n' + '{ \n' + ' "argv": [ \n' + ' "%%(installdir)s/share/jupyter/kernels/%s/kernel.sh", \n' + ' "-m", \n' + ' "ipykernel_launcher", \n' + ' "-f", \n' + ' "{connection_file}" \n' + ' ], \n' + ' "display_name": "%s", \n' + ' "language": "python", \n' + ' "name": "%s", \n' + ' "metadata": { \n' + ' "debugger": true \n' + ' } \n' + '}\n' + 'EOF' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_name, local_kernel_name), +] + +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + 'share/jupyter/kernels/%s/kernel.json' % local_kernel_dir, + ], + 'dirs': [ + 'share/jupyter/kernels/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-PyEarthSystem/JupyterKernel-PyEarthSystem-2023.5-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-PyEarthSystem/JupyterKernel-PyEarthSystem-2023.5-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..d72ef7b83a06a4335dd03bc99580a0658965ed3e --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyEarthSystem/JupyterKernel-PyEarthSystem-2023.5-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,174 @@ +easyblock = 'PythonBundle' + +name = 'JupyterKernel-PyEarthSystem' +version = '2023.5' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://www.fz-juelich.de' +description = """ +Special Earth System Modeling kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +# toolchain = {'name': 'gcccoremkl', 'version': '11.3.0-2022.1.0'} +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), + # just ensure they exist (if they can be loaded here) + # ('NVHPC', '23.1'), + ('netcdf4-python', '1.6.1', '-serial'), + ('SciPy-bundle', '2022.05', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('xarray', '2022.9.0', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('dask', '2022.12.0', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('TensorFlow', '2.11.0', '-CUDA-11.7', ('gcccoremkl', '11.3.0-2022.1.0')), + ('Cartopy', '0.21.0'), + ('Ninja', '1.10.2'), + ('git', '2.36.0', '-nodocs'), + ('GSL', '2.7'), + ('gnuplot', '5.4.4'), + ('ncview', '2.1.8'), + ('GPicView', '0.2.5'), + ('ImageMagick', '7.1.0-37'), + ('GDAL', '3.5.0'), + ('numba', '0.56.4', '-CUDA-11.7', ('gcccoremkl', '11.3.0-2022.1.0')), + # ('ParaStationMPI', '5.7.0-1'), + # ('NCO', '5.1.4'), + # req. GCC-toolchain not NVHPC-toolchain), + # ('CDO', '2.1.1'), + # ('mpi4py', '3.1.4'), + # ('PyTorch', '1.12.0', '-CUDA-11.7'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + +components = [ + ('logos', '1.0', { + 'easyblock': 'Binary', + 'sources': [ + {'filename': 'logo-32x32.png.base64', 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-32x32.png"}, + {'filename': 'logo-64x64.png.base64', 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-64x64.png"}, + {'filename': 'logo-128x128.png.base64', 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-128x128.png"}, + ], + 'checksums': [ + 'f5dc53fd44adf3317014b9b34d40947fbe0f41206a77881c73c30e31a5b14852', + '465720735e479f2161bf64c91eaa7673b63d7e67934c6de27843e1eddad2ac8b', + '7de45ccf75e9fa58fe98585bfc0d094f2dd91087632db764fea807e410b3b201', + ], + }), +] + +exts_default_options = { + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'sanity_pip_check': False, # skip as it requires protobuf, TensorFlow + 'download_dep_fail': True, + 'use_pip_for_deps': False, +} + +exts_list = [ +] + +local_kernel_dir = 'pyearthsystem' +local_kernel_name = 'PyEarthSystem-%s' % version + +modextrapaths = { + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs + 'HOROVOD_MPI_THREADS_DISABLE': ['1'], # no mpi by default +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + +postinstallcmds = [ + # create kernel skeleton + ( + 'python -m ipykernel install --name=%s --prefix=%%(installdir)s && ' + 'rm -f %%(installdir)s/share/jupyter/kernels/%s/logo-svg.svg && ' + 'mv %%(installdir)s/logo-32x32.png %%(installdir)s/share/jupyter/kernels/%s/logo-32x32.png && ' + 'mv %%(installdir)s/logo-64x64.png %%(installdir)s/share/jupyter/kernels/%s/logo-64x64.png && ' + 'mv %%(installdir)s/logo-128x128.png %%(installdir)s/share/jupyter/kernels/%s/logo-128x128.png' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir), + + # write kernel.sh + ( + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.sh; } << EOF\n' + '#!/bin/bash \n' + '\n' + '# Load required modules \n' + 'module load Stages/${STAGE} \n' + 'module load NVHPC/23.1 \n' + 'module load %s/.%s%s \n' + '\n' + 'module load netcdf4-python/1.6.1-serial \n' + 'module load SciPy-bundle/2022.05 \n' + 'module load xarray/2022.9.0 \n' + 'module load dask/2022.12.0 \n' + 'module load TensorFlow/2.11.0-CUDA-11.7 \n' + 'module load Cartopy/0.21.0 \n' + 'module load Ninja/1.10.2 \n' + 'module load git/2.36.0-nodocs \n' + 'module load GSL/2.7 \n' + 'module load gnuplot/5.4.4 \n' + 'module load ncview/2.1.8 \n' + 'module load GPicView/0.2.5 \n' + 'module load ImageMagick/7.1.0-37 \n' + 'module load GDAL/3.5.0 \n' + 'module load numba/0.56.4-CUDA-11.7 \n' + '\n' + 'module load ParaStationMPI/5.7.0-1 \n' + 'module load NCO/5.1.4 \n' + '\n' + '# req. GCC-toolchain not NVHPC-toolchain \n' + '# module load CDO/2.1.1 \n' + '# module load mpi4py/3.1.4 \n' + '# module load PyTorch/1.12.0-CUDA-11.7 \n' + '\n' + 'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:\$PYTHONPATH \n' + 'exec python -m ipykernel \$@\n' + '\n' + 'EOF' + ) % (local_kernel_dir, name, version, versionsuffix), + 'chmod +x %%(installdir)s/share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + + # write kernel.json + ( + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.json; } << \'EOF\'\n' + '{ \n' + ' "argv": [ \n' + ' "%%(installdir)s/share/jupyter/kernels/%s/kernel.sh", \n' + ' "-m", \n' + ' "ipykernel_launcher", \n' + ' "-f", \n' + ' "{connection_file}" \n' + ' ], \n' + ' "display_name": "%s", \n' + ' "language": "python", \n' + ' "name": "%s", \n' + ' "metadata": { \n' + ' "debugger": true \n' + ' } \n' + '}\n' + 'EOF' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_name, local_kernel_name), +] + +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + 'share/jupyter/kernels/%s/kernel.json' % local_kernel_dir, + ], + 'dirs': [ + 'share/jupyter/kernels/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-PyEarthSystem/logo-128x128.png.base64 b/Golden_Repo/j/JupyterKernel-PyEarthSystem/logo-128x128.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..c501076be2b42c15267241b3d6b250dca8c9e469 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyEarthSystem/logo-128x128.png.base64 @@ -0,0 +1,165 @@ +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 +QmCC diff --git a/Golden_Repo/j/JupyterKernel-PyEarthSystem/logo-32x32.png.base64 b/Golden_Repo/j/JupyterKernel-PyEarthSystem/logo-32x32.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..acbf822bc238fe525a40b1bd090ed83e0c105b99 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyEarthSystem/logo-32x32.png.base64 @@ -0,0 +1,36 @@ +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 diff --git a/Golden_Repo/j/JupyterKernel-PyEarthSystem/logo-64x64.png.base64 b/Golden_Repo/j/JupyterKernel-PyEarthSystem/logo-64x64.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..bf3fd58aa6584fb9fd176a8904618ed2a76bcf91 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyEarthSystem/logo-64x64.png.base64 @@ -0,0 +1,78 @@ +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 diff --git a/Golden_Repo/j/JupyterKernel-PyQuantum/JupyterKernel-PyQuantum-2023.5-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-PyQuantum/JupyterKernel-PyQuantum-2023.5-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..617a25379d850101a53994704226fa1af08dd647 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyQuantum/JupyterKernel-PyQuantum-2023.5-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,156 @@ +easyblock = 'PythonBundle' + +name = 'JupyterKernel-PyQuantum' + +# Versioning scheme: +# major_version: software stage of modules loaded by the kernel +# minor version: release month +local_kernel_stage = 2023 +version = f'{local_kernel_stage}.5' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://www.fz-juelich.de' +description = """ +Kernel for quantum computing in Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services for interactive computing across +dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +# Not relevant to check any of these since we will load versions from another stage +builddependencies = [ + ('binutils', '2.38'), + # ('Cartopy', '0.21.0'), + # ('Cirq', '1.0.0'), + # ('DWave', '6.3.0', '', ('gcccoremkl', '11.3.0-2022.4.0')), + # ('PyQuil', '3.3.3'), + # ('Qiskit', '0.41.0', '', ('gpsmkl', '2022')), + # ('Qiskit-juqcs', '0.5.0', '', ('gpsmkl', '2022')), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + +components = [ + ('logos', '1.0', { + 'easyblock': 'Binary', + 'sources': [ + {'filename': 'logo-32x32.png.base64', + 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-32x32.png"}, + {'filename': 'logo-64x64.png.base64', + 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-64x64.png"}, + {'filename': 'logo-128x128.png.base64', + 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-128x128.png"}, + ], + 'checksums': [ + 'd252acdbbd8838aff9ff183ce249b5a4c2ef43a6309680f2a4cb13029813e3e9', + 'b7c900cab9761d24acb1ff98e42cc61c5a14d7c71ee2c91aa4de35508a927dc9', + 'c2ed9885240b3fbeabf7f8eeef14152f80cf55dc13d8de26f4d8a7a046a8e015', + ], + + }), +] + +exts_default_options = { + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'sanity_pip_check': True, + 'download_dep_fail': True, + 'use_pip_for_deps': False, +} + +# additional Python packages +exts_list = [ +] + +local_kernel_name = 'PyQuantum-%s' % version +# ipykernel will lowercase the kernel name +local_kernel_dir = local_kernel_name.lower() + +modextrapaths = { + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + + +postinstallcmds = [ + # create kernel skeleton + ( + 'python -m ipykernel install --name=%s --prefix=%%(installdir)s && ' + 'rm -f %%(installdir)s/share/jupyter/kernels/%s/logo-svg.svg && ' + 'mv %%(installdir)s/logo-32x32.png %%(installdir)s/share/jupyter/kernels/%s/logo-32x32.png && ' + 'mv %%(installdir)s/logo-64x64.png %%(installdir)s/share/jupyter/kernels/%s/logo-64x64.png && ' + 'mv %%(installdir)s/logo-128x128.png %%(installdir)s/share/jupyter/kernels/%s/logo-128x128.png' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir), + + # write kernel.sh + ( + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.sh; } << EOF \n' + '#!/bin/bash \n' + '\n' + '# Load required modules \n' + 'module purge \n' + f'module load Stages/{local_kernel_stage} \n' + 'module load GCC/11.3.0 \n' + 'module load ParaStationMPI \n' + 'module load Cartopy/0.21.0 \n' + 'module load Cirq/1.0.0 \n' + 'module load DWave/6.3.0 \n' + 'module load PyQuil/3.3.3 \n' + 'module load Qiskit/0.41.0 \n' + # 'module load Qiskit-juqcs/0.5.0 \n' # not yet compatible with current Qiskit + 'module load pulser/0.12.0 \n' + 'module load myqlm/1.7.3 \n' + 'module load %s/.%s%s \n' + '\n' + 'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:\$PYTHONPATH \n' + 'exec python -m ipykernel \$@\n' + '\n' + 'EOF' + ) % (local_kernel_dir, name, version, versionsuffix), + 'chmod +x %%(installdir)s/share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + + # write kernel.json + ( + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.json; } << \'EOF\'\n' + '{ \n' + ' "argv": [ \n' + ' "%%(installdir)s/share/jupyter/kernels/%s/kernel.sh", \n' + ' "-m", \n' + ' "ipykernel_launcher", \n' + ' "-f", \n' + ' "{connection_file}" \n' + ' ], \n' + ' "display_name": "%s", \n' + ' "language": "python", \n' + ' "name": "%s", \n' + ' "metadata": { \n' + ' "debugger": true \n' + ' } \n' + '}\n' + 'EOF' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_name, local_kernel_name), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +# full_sanity_check = True +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + 'share/jupyter/kernels/%s/kernel.json' % local_kernel_dir, + ], + 'dirs': [ + 'share/jupyter/kernels/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-PyQuantum/logo-128x128.png.base64 b/Golden_Repo/j/JupyterKernel-PyQuantum/logo-128x128.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..4a8f9967247763e6e53e234ef9c9d37638c72cab --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyQuantum/logo-128x128.png.base64 @@ -0,0 +1,217 @@ +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 +TbOsXhKTl23JTDKkOvT2WJEYCJDeKRShskiVgVdtblPK6/xltVLhce+2fe1Fx/06nS42Nnby5MkL +FixYtmyZJnxC+lxVVe3UDA0oJhN+mtj4gnFDF0R2u33BggUxMTEZGRmHDh0qKSmuq6uvqG3/63N1 +qqrGRwsJDr09Soy2CNE2wWoRdGIwDKCoXJKox0tb2pV2D3V2qLUNAWcnI4To9fqkpKTExITMzMkL +FiyYO3duVlZWdHR0KLvEZjYyxrfmF1+1fO4nB4p1Ag41uj2NBhqrc0gppX6/v62traqq6tixY+Vl +ZdXVVQ0N9c0trW63R5NRrF+z7J6bVwt1GY3GiAhrdJQtxh6Xnp6RlZWVlZU1efLkuLg4k8nUJ7fn +1oc3PvfRLpNBH5Ckq5cveO5X12H0/5UBoSFJUkdHR2tra1NTU21tbVNTU2trq9Pp7Ozs1LpeDsQA +7RQ3LY8zLi7O4XAkJyfb7fbIyEij0dhHvGo+l0rZhne/2Hnk+Bm5mbdeeo5eFMYjaniaMQCCp9VR +SZJ8Pp/X6/V0jVA8JywDtDCvxWKxWCyhsyQ1rAn+dwcav6OQtTszxhhjlFJK6eCnLmgNcAVB0F4M +0aigLNiDEeHTklFo4o9l/2aMmSP2zRj9+D+DR9d4QOwo3AAAAABJRU5ErkJggg== diff --git a/Golden_Repo/j/JupyterKernel-PyQuantum/logo-32x32.png.base64 b/Golden_Repo/j/JupyterKernel-PyQuantum/logo-32x32.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..83d4dafe09db57bfbe013f45ae19f261b98dc6ce --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyQuantum/logo-32x32.png.base64 @@ -0,0 +1,35 @@ +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 diff --git a/Golden_Repo/j/JupyterKernel-PyQuantum/logo-64x64.png.base64 b/Golden_Repo/j/JupyterKernel-PyQuantum/logo-64x64.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..cbb1ae369d4c71500d7fad8e5565d6b8d25401d9 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyQuantum/logo-64x64.png.base64 @@ -0,0 +1,87 @@ +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 diff --git a/Golden_Repo/j/JupyterKernel-PyVisualization/JupyterKernel-PyVisualization-2023.5-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-PyVisualization/JupyterKernel-PyVisualization-2023.5-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..cc9d7dae2b50a0efb70be35c6e0b3b5a9518407a --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyVisualization/JupyterKernel-PyVisualization-2023.5-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,131 @@ +easyblock = 'PythonBundle' + +name = 'JupyterKernel-PyVisualization' +version = '2023.5' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://www.fz-juelich.de' +description = """ +Special Jupyter kernel including visualization tools. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), + # check for existance + # ('ParaView', '5.11.0', '-EGL', ('gpsmkl', '2022a')), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + +components = [ + ('logos', '1.0', { + 'easyblock': 'Binary', + 'sources': [ + {'filename': 'logo-32x32.png.base64', 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-32x32.png"}, + {'filename': 'logo-64x64.png.base64', 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-64x64.png"}, + {'filename': 'logo-128x128.png.base64', 'extract_cmd': "base64 -d %s > %%(builddir)s/logo-128x128.png"}, + ], + 'checksums': [ + ('sha256', '84323b573eabc75b9fae94109186e2978939d09bcc5df3e851a27b9888a2d844'), + ('sha256', 'b4e80ac4ad7f3bc319ccde862518c148727474afdb3afd098bd4fcaebb7d7bf3'), + ('sha256', '567e6571a1770da70df1bb0a9dbe28b3b83fee2975490a65a09731516b27d8c7'), + ], + }), +] + +exts_default_options = { + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'sanity_pip_check': True, + 'download_dep_fail': True, + 'use_pip_for_deps': False, +} + +exts_list = [ +] + +local_kernel_dir = 'pyvisualization' +local_kernel_name = 'PyVisualization-%s' % version + +modextrapaths = { + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + +postinstallcmds = [ + # create kernel skeleton + ( + 'python -m ipykernel install --name=%s --prefix=%%(installdir)s && ' + 'rm -f %%(installdir)s/share/jupyter/kernels/%s/logo-svg.svg && ' + 'mv %%(installdir)s/logo-32x32.png %%(installdir)s/share/jupyter/kernels/%s/logo-32x32.png && ' + 'mv %%(installdir)s/logo-64x64.png %%(installdir)s/share/jupyter/kernels/%s/logo-64x64.png && ' + 'mv %%(installdir)s/logo-128x128.png %%(installdir)s/share/jupyter/kernels/%s/logo-128x128.png' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir), + + # write kernel.sh + ( + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.sh; } << EOF\n' + '#!/bin/bash \n' + '\n' + '# Load required modules \n' + 'module purge \n' + 'module load Stages/${STAGE} \n' + 'module load GCC/11.3.0 \n' + 'module load ParaStationMPI \n' + 'module load %s/.%s%s \n' + '\n' + 'module load ParaView/5.11.0-EGL \n' + '\n' + 'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:\$PYTHONPATH \n' + 'exec python -m ipykernel \$@\n' + '\n' + 'EOF' + ) % (local_kernel_dir, name, version, versionsuffix), + 'chmod +x %%(installdir)s/share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + + # write kernel.json + ( + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.json; } << \'EOF\'\n' + '{ \n' + ' "argv": [ \n' + ' "%%(installdir)s/share/jupyter/kernels/%s/kernel.sh", \n' + ' "-m", \n' + ' "ipykernel_launcher", \n' + ' "-f", \n' + ' "{connection_file}" \n' + ' ], \n' + ' "display_name": "%s", \n' + ' "language": "python", \n' + ' "name": "%s", \n' + ' "metadata": { \n' + ' "debugger": true \n' + ' } \n' + '}\n' + 'EOF' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_name, local_kernel_name), +] + +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + 'share/jupyter/kernels/%s/kernel.json' % local_kernel_dir, + ], + 'dirs': [ + 'share/jupyter/kernels/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-PyVisualization/logo-128x128.png.base64 b/Golden_Repo/j/JupyterKernel-PyVisualization/logo-128x128.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..eb55970852c1f47ac4e00c4eb99e1062ac942be8 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyVisualization/logo-128x128.png.base64 @@ -0,0 +1,229 @@ +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 +QmCC diff --git a/Golden_Repo/j/JupyterKernel-PyVisualization/logo-32x32.png.base64 b/Golden_Repo/j/JupyterKernel-PyVisualization/logo-32x32.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..3d6f3a3f2a8931f26edf0d2a36ad63722254eef6 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyVisualization/logo-32x32.png.base64 @@ -0,0 +1,30 @@ +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 diff --git a/Golden_Repo/j/JupyterKernel-PyVisualization/logo-64x64.png.base64 b/Golden_Repo/j/JupyterKernel-PyVisualization/logo-64x64.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..3803d73352011e8d0bad7eaf26d19920a1e09ea7 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyVisualization/logo-64x64.png.base64 @@ -0,0 +1,79 @@ +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 +RU5ErkJggg== diff --git a/Golden_Repo/j/JupyterKernel-R/JupyterKernel-R-4.2.1-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-R/JupyterKernel-R-4.2.1-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..bbe36cca0ce5473e08ca0bfddf61dfc6754120fa --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-R/JupyterKernel-R-4.2.1-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,110 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-R' +version = '4.2.1' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://github.com/IRkernel/IRkernel' +description = """ +Native R kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), + ('R', version, '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('IRkernel', '1.3.2', '-R-%(version)s', ('gcccoremkl', '11.3.0-2022.1.0')), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + +local_kernel_dir = 'ir40' +local_kernel_name = 'R-%s' % version + +modextrapaths = { + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + +postinstallcmds = [ + # create kernel skeleton + ( + 'module purge && ' + 'module load Stages/${STAGE} && ' + 'module load GCCcore/.11.3.0 && ' + 'module load JupyterLab/%s && ' + 'module load R/%s && ' + 'module load IRkernel/1.3.2-R-%s && ' + 'R -e \'IRkernel::installspec(name="%s", displayname="%s", prefix="%%(installdir)s")\' && ' + # force options(bitmapType='cairo') -> https://github.com/IRkernel/IRkernel/issues/388 + 'sed -i "s#IRkernel::main()#options(bitmapType=\'cairo\') ; IRkernel::main()#g" ' + ' %%(installdir)s/share/jupyter/kernels/%s/kernel.json' + ) % (local_jupyterver, version, version, + local_kernel_dir, local_kernel_name, local_kernel_dir), + + # write kernel.sh + ( + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.sh; } << EOF \n' + '#!/bin/bash \n' + '\n' + '# Load required modules \n' + 'module purge \n' + 'module load Stages/\${STAGE} \n' + 'module load GCCcore/.11.3.0 \n' + 'module load R/%s \n' + 'module load IRkernel/1.3.2-R-%s \n' + '\n' + 'exec \${EBROOTR}/lib64/R/bin/R "\$@"\n' + '\n' + 'EOF' + ) % (local_kernel_dir, version, version), + 'chmod +x %%(installdir)s/share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + + # write kernel.json + ( + 'cp %%(installdir)s/share/jupyter/kernels/%s/kernel.json ' + ' %%(installdir)s/share/jupyter/kernels/%s/kernel.json.orig && ' + '{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.json; } << \'EOF\'\n' + '{ \n' + ' "argv": [ \n' + ' "%%(installdir)s/share/jupyter/kernels/%s/kernel.sh", \n' + ' "--slave", \n' + ' "-e", \n' + ' "options(bitmapType=\'cairo\') ; IRkernel::main()", \n' + ' "--args", \n' + ' "{connection_file}" \n' + ' ], \n' + ' "display_name": "%s", \n' + ' "language": "R", \n' + ' "name": "%s" \n' + '}\n' + 'EOF' + ) % (local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir, + local_kernel_name, local_kernel_dir), +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +# full_sanity_check = True +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir, + 'share/jupyter/kernels/%s/kernel.json' % local_kernel_dir, + ], + 'dirs': [ + 'share/jupyter/kernels/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-Ruby/JupyterKernel-Ruby-3.0.5-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterKernel-Ruby/JupyterKernel-Ruby-3.0.5-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..66ff3a22dd426c66357a2c61d7b21528f2f71b45 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Ruby/JupyterKernel-Ruby-3.0.5-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,59 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-Ruby' +version = '3.0.5' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://github.com/SciRuby/iruby' +description = """ +Native Ruby kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), + ('Ruby', '%(version)s'), +] + +local_jupyter_path = 'share/jupyter' + +modextrapaths = { + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH +modluafooter = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +""" + +postinstallcmds = [ + 'echo "#!/bin/bash" > %(builddir)s/env.sh', + 'echo "export JUPYTER_DATA_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_path, + + # install Ruby kernel in $JUPYTHER_PATH + 'source %(builddir)s/env.sh && iruby register --force ', + + # ensure correct permissions + 'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share', +] + +sanity_check_paths = { + 'files': [ + 'share/jupyter/kernels/ruby/kernel.json', + ], + 'dirs': [ + 'share/jupyter/kernels/ruby/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterLab/401html.patch b/Golden_Repo/j/JupyterLab/401html.patch new file mode 100644 index 0000000000000000000000000000000000000000..c3e71a800541a396377737132022c67a077d7564 --- /dev/null +++ b/Golden_Repo/j/JupyterLab/401html.patch @@ -0,0 +1,135 @@ +diff -Naur jupyterlab-2.2.9.orig/401.html jupyterlab-2.2.9/401.html +--- jupyterlab-2.2.9.orig/401.html 1970-01-01 01:00:00.000000000 +0100 ++++ jupyterlab-2.2.9/401.html 2020-12-11 23:24:45.301738818 +0100 +@@ -0,0 +1,131 @@ ++<!DOCTYPE html> ++<html><head> ++ <meta http-equiv="Refresh" content="0; url=https://jupyter-jsc.fz-juelich.de/hub/logout?stopall=false&alldevices=false" /> ++ ++ <meta http-equiv="content-type" content="text/html; charset=UTF-8"> ++ <meta charset="utf-8"> ++ ++ <title>jupyter-jsc</title> ++ <meta http-equiv="X-UA-Compatible" content="chrome=1"> ++ <meta property="og:image" content="/hub/static/images/mini_website.jpg"> ++ <meta property="og:locale" content="en_US"> ++ <meta property="og:site_name" content="jupyter-jsc"> ++ <meta property="og:title" content="jupyter-jsc"> ++ <meta property="og:type" content="website"> ++ <meta property="og:url" content="https://jupyter-jsc.fz-juelich.de/"> ++ ++ <link rel="stylesheet" href="/hub/static/css/style.min.css" type="text/css"> ++ <link rel="stylesheet" href="/hub/static/css/j4j_font.min.htm" type="text/css"> ++ <link rel="stylesheet" href="/hub/static/css/j4j_base.min.css" type="text/css"> ++ <link rel="stylesheet" href="/hub/static/css/j4j_base_header.min.css" type="text/css"> ++ <link rel="stylesheet" href="/hub/static/css/j4j_base_footer.min.css" type="text/css"> ++ <link rel="icon" href="/hub//static/images/favicon.svg" type="jpg/png"> ++ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.2/jquery-confirm.min.css"> ++ <link rel="stylesheet" href="/hub/static/css/j4j_page_home.min.css" type="text/css"> ++ <link rel="stylesheet" href="/hub/static/css/spawn_style.css" type="text/css"> ++ ++<body> ++ ++<div id="container"> ++ ++ <div id="header-background"> ++ <div id="header"> ++ <nav class="navbar navbar-default"> ++ <div class="container-fluid"> ++ <div class="navbar-header"> ++ <span id="jupyterhub-logo" class="pull-left"><a href="https://www.fz-juelich.de/jsc" target="_blank"><img src="/hub/static/images/jsc.png" alt="JupyterHub" class="jpy-logo" title="Home"></a></span> ++ </div> ++ ++ <div id="thenavbar"> ++ <ul class="nav navbar-nav"> ++ ++ <li><a href="https://jupyter-jsc.fz-juelich.de/hub/start">Start</a></li> ++ ++ <li id="navbarbtn-links" class="main-menu-btn menu-btn"><a>Links</a> ++ <div id="navbarmenu-links" class="menu-box"> ++ <ul> ++ <li id="navbarbtn-links-1" class="menu-btn"><a>jupyter-jsc</a> ++ <div id="navbarmenu-links-1" class="menu-box menu-sub-box show-sub-header" style=""> ++ <ul> ++ <li class=""><a href="https://jupyter-jsc.fz-juelich.de/nbviewer/github/kreuzert/Jupyter-JSC/blob/master/Extensions.ipynb">Extensions at jupyter-jsc</a></li> ++ <li class=""><a href="https://jupyter-jsc.fz-juelich.de/nbviewer/github/kreuzert/Jupyter-JSC/blob/master/FAQ.ipynb">HDFCloud FAQ</a></li> ++ <li class=""><a href="https://jupyter-jsc.fz-juelich.de/static/files/projects.html">Link Projects to Home</a></li> ++ <li class=""><a href="https://jupyter-jsc.fz-juelich.de/static/files/kernel.html">Setup your own kernel</a></li> ++ <li class=""><a target="_blank" href="https://www.unicore.eu/about-unicore/case-studies/jupyter-at-jsc/">jupyter-jsc at unicore.eu</a></li> ++ </ul> ++ </div> ++ </li> ++ <li id="navbarbtn-links-2" class="menu-btn"><a>Jupyter</a> ++ <div id="navbarmenu-links-2" class="menu-box menu-sub-box show-sub-header" style=""> ++ <ul> ++ <li class=""><a target="_blank" href="https://www-jupyter.org/">Home</a></li> ++ <li class=""><a target="_blank" href="https://newsletter.jupyter.org/">Newsletter</a></li> ++ <li class=""><a target="_blank" href="https://www.youtube.com/watch?v=HW29067qVWk">Introduction Video</a></li> ++ <li class=""><a target="_blank" href="https://blog.jupyter.org/">Blog</a></li> ++ <li class=""><a target="_blank" href="https://jupyter.org/documentation.html">Documentation</a></li> ++ <li class=""><a target="_blank" href="https://www.oreilly.com/topics/jupyter">O'Reilly on Jupyter</a></li> ++ <li class=""><a target="_blank" href="https://twitter.com/projectjupyter">Twitter</a></li> ++ <li class=""><a target="_blank" href="https://github.com/trending/jupyter-notebook">Jupyter-Notebooks</a></li> ++ </ul> ++ </div> ++ </li> ++ <li id="navbarbtn-links-3" class="menu-btn"><a>JSC</a> ++ <div id="navbarmenu-links-3" class="menu-box menu-sub-box show-sub-header" style=""> ++ <ul> ++ <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/Expertise/Supercomputers/JUWELS/JUWELS_node.html">JUWELS</a></li> ++ <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/Expertise/Supercomputers/JURECA/JURECA_node.html">JURECA</a></li> ++ <li class=""><a target="_blank" href="https://hbp-hpc-platform.fz-juelich.de/?page_id=1073">JURON</a></li> ++ <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/News/Newsletter/newsletter_node.html">Newsletter</a></li> ++ <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/News/Events/events_node.html">Events</a></li> ++ <li class=""><a target="_blank" href="https://twitter.com/fzj_jsc">Twitter</a></li> ++ </ul> ++ </div> ++ </li> ++ </ul> ++ </div> ++ </li> ++ ++ </ul> ++ </div> ++ </div> ++ </nav> ++ </div> ++ </div> ++ ++<div id="body"> ++<div class="background-wrapper"> ++ <div class="content" id="JupyterLabs-div"> ++ ++ <!--<center><h2 style="color:red">jupyter-jsc maintenance: 25-02-2020 - 26-02-2020</h2></center>--> ++ <h2> ++ The access token of your browser session to the running JupyterLab has expired. ++ </h2> ++ <p> ++ Unfortunately you have to log out and log in again from the Jupyter-JSC to regain access permission.<br> ++ <a href="https://jupyter-jsc.fz-juelich.de/hub/logout?stopall=false&alldevices=false"> Logout now </a> ++ </p> ++ ++ </div> ++</div> ++</div> ++ ++<div class="footer"> ++ <div class="footer-top-background"> ++ </div> ++ <div class="footer-bottom-background"> ++ <div class="footer-bottom"> ++ <div class="footer-links"> ++ <span>© Forschungszentrum Jülich</span> ++ <a href="https://jupyter-jsc.fz-juelich.de/hub/imprint">Imprint</a> ++ <a href="https://jupyter-jsc.fz-juelich.de/hub/privacy">Privacy Policy</a> ++ <a href="mailto:ds-support@fz-juelich.de?subject=jupyter-jsc Support&body=Please describe your problem here. (english or german)">Support</a> ++ <a href="https://jupyter-jsc.fz-juelich.de/hub/terms">Terms of Service</a> ++ </div> ++ <a href="https://www.helmholtz.de/en/" target="_blank"><img class="helmholtz-logo" src="/hub/static/images/helmholtz.png"></a> ++ </div> ++ </div> ++</div> ++ ++</div> <!-- container --> ++ ++</body></html> diff --git a/Golden_Repo/j/JupyterLab/JupyterLab-2023.3.6-GCCcore-11.3.0.eb b/Golden_Repo/j/JupyterLab/JupyterLab-2023.3.6-GCCcore-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..92502da744c167c6701a31d312c152ae20ae3df0 --- /dev/null +++ b/Golden_Repo/j/JupyterLab/JupyterLab-2023.3.6-GCCcore-11.3.0.eb @@ -0,0 +1,888 @@ +easyblock = 'PythonBundle' + +name = 'JupyterLab' +version = '2023.3.6' + +local_jlab_version = '3.6.5' + +homepage = 'http://www.jupyter.org' +description = """ +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('IPython', '8.14.0'), + ('ZeroMQ', '4.3.4'), + ('PyYAML', '6.0'), + ('nodejs', '16.15.1'), # '-corepack'), + ('git', '2.36.0', '-nodocs'), # for jupyterlab_git (req. >=2.0) + ('SciPy-bundle', '2022.05', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('matplotlib', '3.5.2', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('bokeh', '2.4.2', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('HDF5', '1.12.2', '-serial'), + ('h5py', '3.7.0', '-serial'), + ('dask', '2022.12.0', '', ('gcccoremkl', '11.3.0-2022.1.0')), + # for bokeh exports + # https://chromedriver.storage.googleapis.com/114.0.5735.16/chromedriver_linux64.zip + # ('ChromeDriver', '114.0.5735.16') + + # Extras + ('Pandoc', '2.19.2', '', SYSTEM), # For doc-generation + ('texlive', '20220321'), + ('netcdf4-python', '1.6.1', '-serial'), + ('FFmpeg', '4.4.2'), # for pydub + ('LLVM', '14.0.3'), # llvmlite + ('Seaborn', '0.12.1', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('sympy', '1.11.1', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('Seaborn', '0.12.1', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('xarray', '2022.9.0', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('scikit-build', '0.15.0'), + ('scikit-learn', '1.1.2', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('scikit-image', '0.19.3', '', ('gcccoremkl', '11.3.0-2022.1.0')), + ('numba', '0.56.4', '-CUDA-11.7', ('gcccoremkl', '11.3.0-2022.1.0')), + ('Shapely', '1.8.5.post1'), +] + +osdependencies = [('openssl')] + +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'filter': ('python -c "import %(ext_name)s"', ''), + 'download_dep_fail': True, + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'sanity_pip_check': True, + 'use_pip_for_deps': False, +} + +# Dependencies can partly tested, created and updated using findPythonDeps.sh: +# https://gist.github.com/Flamefire/49426e502cd8983757bd01a08a10ae0d +exts_list = [ + # general + ('hatchling', '1.13.0', { + 'checksums': ['f8d275a2cc720735286b7c2e2bc35da05761e6d3695c2fa416550395f10c53c7'], + }), + ('hatch_nodejs_version', '0.3.1', { + 'checksums': ['0e55fd713d92c5c1ccfee778efecaa780fd8bcd276d4ca7aff9f6791f6f76d9c'], + }), + ('hatch_jupyter_builder', '0.8.3', { + 'checksums': ['0dbd14a8aef6636764f88a8fd1fcc9a91921e5c50356e6aab251782f264ae960'], + }), + ('pyzmq', '24.0.1', { # overwrite + 'modulename': 'zmq', + 'checksums': ['216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77'], + }), + ('websocket-client', '1.5.1', { + 'modulename': 'websocket', + 'checksums': ['3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40'], + }), + ('traitlets', '5.9.0', { # overwrite + 'checksums': ['f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9'], + }), + ('sniffio', '1.3.0', { + 'checksums': ['e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101'], + }), + ('anyio', '3.6.2', { + 'checksums': ['25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421'], + }), + # nbclassic ##################################### + ('overrides', '7.3.1', { + 'checksums': ['8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2'], + }), + ('jupyter_server', '2.7.0', { + 'checksums': ['36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f'], + }), + ('jupyter_server_terminals', '0.4.4', { + 'checksums': ['57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d'], + }), + ('notebook_shim', '0.2.3', { + 'checksums': ['f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9'], + }), + ('jupyter_core', '5.3.1', { # overwrite + 'checksums': ['5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba'], + }), + ('jupyter_client', '8.2.0', { # overwrite + 'checksums': ['9fe233834edd0e6c0aa5f05ca2ab4bdea1842bfd2d8a932878212fc5301ddaf0'], + }), + ('deprecation', '2.1.0', { + 'checksums': ['72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff'], + }), + ('rfc3339_validator', '0.1.4', { + 'checksums': ['138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b'], + }), + ('rfc3986_validator', '0.1.1', { + 'checksums': ['3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055'], + }), + ('jupyter_events', '0.6.3', { + 'checksums': ['9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3'], + }), + ('python-json-logger', '2.0.7', { + 'modulename': 'pythonjsonlogger', + 'checksums': ['23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c'], + }), + ('nbclassic', '1.0.0', { + 'checksums': ['0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3'], + }), + # jupyterlab-server ############################# + ('requests', '2.30.0', { + 'checksums': ['239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4'], + }), + ('jsonschema', '4.17.3', { + 'checksums': ['0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d'], + }), + ('json5', '0.9.11', { + 'checksums': ['4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b'], + }), + ('jupyterlab_server', '2.23.0', { + 'checksums': ['83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7'], + }), + # jupyter_server_ydoc ########################### + ('y_py', '0.5.9', { + 'sources': ['%(name)s-%(version)s-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl'], + 'checksums': ['bc9052a814e8b7ec756371a191f38de68b956437e0bb429c2dd503e658f298f9'], + }), + ('jupyter_ydoc', '0.2.4', { + 'checksums': ['a3f670a69135e90493ffb91d6788efe2632bf42c6cc42a25f25c2e6eddd55a0e'], + }), + ('jupyter_server_fileid', '0.9.0', { + 'checksums': ['171538b7c7d08d11dbc57d4e6da196e0c258e4c2cd29249ef1e032bb423677f8'], + }), + ('jupyter_server_ydoc', '0.8.0', { + 'checksums': ['a6fe125091792d16c962cc3720c950c2b87fcc8c3ecf0c54c84e9a20b814526c'], + }), + ('aiosqlite', '0.19.0', { + 'checksums': ['95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d'], + }), + ('aiofiles', '22.1.0', { + 'checksums': ['9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6'], + }), + ('ypy_websocket', '0.8.2', { + 'checksums': ['491b2cc4271df4dde9be83017c15f4532b597dc43148472eb20c5aeb838a5b46'], + }), + # jupyterlab #################################### + ('jupyterlab', local_jlab_version, { + 'patches': [ + ('401html.patch', 1), + # 'jupyterlab-rendermime_p14618.patch' + ], + 'checksums': [ + 'ac0cb19756be1d1e14b2be1f23c603de46e0f0113960fce9888889ca55ae8923', + '094c89560472168c5ca24b3907d4a6a5b090352ef0c7657995d735246cc338f5', # 401html.patch + ], + }), + # jupyter-server-proxy ########################## + ('aiosignal', '1.3.1', { + 'checksums': ['54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc'], + }), + ('async-timeout', '4.0.2', { + 'checksums': ['2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15'], + }), + ('frozenlist', '1.3.3', { + 'checksums': ['58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a'], + }), + ('multidict', '6.0.4', { + 'checksums': ['3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49'], + }), + ('yarl', '1.9.2', { + 'checksums': ['04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571'], + }), + ('aiohttp', '3.8.4', { + 'checksums': ['bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c'], + }), + ('simpervisor', '0.4', { + 'checksums': ['cec79e13cdbd6edb04a5c98c1ff8d4bd9713e706c069226909a1ef0e89d393c5'], + }), + ('jupyter_server_proxy', '4.0.0', { + 'patches': [ + 'jupyter-server-proxy_timeout.patch', # timeout after 15s instead of 5s + ], + 'checksums': [ + 'f5dc12dd204baca71b013df3522c14403692a2d37cb7adcd77851dbab71533b5', + '632f95c305dd5363978399a383a077a738069cc4fc13832276a6c9c6e36714e8', + ], + # Regular HTTP requests + Unix sockets works already with Tornado 6.2 + # BUT (!)) websocket connection + Unix sockets needs Tornado 6.3, + # https://github.com/jupyterhub/jupyter-server-proxy/pull/337 + }), + # jupyterlab_lsp ################################ + ('python-lsp-jsonrpc', '1.0.0', { + 'modulename': 'pylsp_jsonrpc', + 'checksums': ['7bec170733db628d3506ea3a5288ff76aa33c70215ed223abdb0d95e957660bd'], + }), + ('docstring-to-markdown', '0.12', { + 'checksums': ['40004224b412bd6f64c0f3b85bb357a41341afd66c4b4896709efa56827fb2bb'], + }), + ('python-lsp-server', '1.7.3', { + 'modulename': 'pylsp', + 'checksums': ['a31b0525be6ec831c7d2b476b744e5aa5074633e1d1b77ee97f332cde15983ea'], + }), + ('jupyter-lsp', '2.2.0', { + 'checksums': ['8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1'], + }), + ('jupyterlab-lsp', '4.2.0', { + 'checksums': ['3aab01c8cac040a8d3a9ebfa4085223b054b7fbd6219d3c7b560f6a9766ca2f3'], + }), + # jupyter-matplotlib ############################ + ('ipympl', '0.9.3', { + 'checksums': ['49bab75c05673a6881d1aaec5d8ac81d4624f73d292d154c5fb7096f10236a2b'], + }), + # jupyterlab_iframe ############################# + ('tornado_proxy_handlers', '0.0.5', { + 'checksums': ['8250177dbc7567fa2d3cfd22d0a7de71e34cceb8e56c7b7d7c2e5f92ffb5c60a'], + }), + ('jupyterlab_iframe', '0.4.4', { + 'patches': [('jupyterlab-iframe.config', '.')], + 'checksums': [ + 'f381ffef2a866eea0a9e3e56f428064b117a9155f9f7605c4bf0eb74d03dc378', + '5bdd4bd545aa66c8cb534975d77a0c4a23c9993f507e479b23a06ae9618f695f', + ], + }), + # ipyleaflet #################################### + ('branca', '0.6.0', { + 'checksums': ['55949855214504c7583b71b9a03a84dce2e96a84027613bb53b42d04844ce24e'], + }), + ('traittypes', '0.2.1', { + 'checksums': ['be6fa26294733e7489822ded4ae25da5b4824a8a7a0e0c2dccfde596e3489bd6'], + }), + ('xyzservices', '2023.2.0', { + 'checksums': ['3342bba410d7941290eed0e58a2e5aadb0f7b97863ec4283b283c406ee723a28'], + }), + ('ipyleaflet', '0.17.3', { + 'checksums': ['adca9ebdf009ad55d3e94976191474bfb85d13aa79854698e9b0922338a6fc66'], + }), + # ipyvue ######################################## + ('ipyvue', '1.9.2', { + 'checksums': ['da3f2a6115d1f27995e7efa0e0e267eb976ade5ca982aa3da3106c70d6f878db'], + }), + ('ipyvuetify', '1.8.10', { + 'checksums': ['9ba44279479f33f5cb83af406aa813050ee96201955c2cba087fd23a843d5b4e'], + }), + # ipywebrtc ##################################### + ('ipywebrtc', '0.6.0', { + 'checksums': ['f8ac3cc02b3633b59f388aef67961cff57f90028fd303bb3886c63c3d631da13'], + }), + # bqplot ######################################## + ('bqplot', '0.12.39', { + 'checksums': ['14d8de6f9a4d1945bbea6c1320ea4d1c93256f72683774f6e0020dcc579f3dd2'], + }), + # ipyvolume ##################################### + ('ipydatawidgets', '4.3.5', { + 'checksums': ['394f2489576587cfd755377a09a067f46cad22081965092021fd1abcbe7852a8'], + }), + ('pythreejs', '2.4.2', { + 'checksums': ['a568bfdc4c3797c4c2339158928edc7dcf6fa4a267b08e3cec5121e2078b5bd6'], + }), + ('ipyvolume', '0.6.3', { + 'checksums': ['823226f90a59ce08b1da2699a9ec505f34f65f01ce43accd80e7d3554082d035'], + }), + # jupyterlab-system-monitor ##################### + ('jupyter_resource_usage', '0.7.2', { + 'patches': [('jupyter-resource-usage.config', '.')], + 'checksums': [ + 'ab596a1f2f6ced9e5d063f56b772d88527d2539d61831fbfb80a37f940d3e9df', + '7634bf6c4d941e20dca4d910441315047147aedec073f620e15048ec6b31b053', + ], + }), + ('jupyterlab-topbar', '0.6.1', { + 'checksums': ['f1f9144fd09c29b8921f378662f26c65a460967d9c48eeea8018cea49626fb5f'], + 'modulename': False, + }), + ('jupyterlab-controlbtn', '0.5.1', { + 'source_tmpl': '%(version)s.tar.gz', + 'source_urls': ['https://github.com/jhgoebbert/jupyterlab-controlbtn/archive/'], + 'checksums': ['ac4c2165d79dd84f2fea0086cc6c3a851cfb239918bb628163b812abb54a4b46'], + 'modulename': False, + }), + ('jupyterlab-system-monitor', '0.8.0', { + 'checksums': ['f8d03d3ee26c84300c85e570f1a9d5f69bdcfa85e9a298f5716b67e36d0d94df'], + 'modulename': False, + }), + # jupyterlab-gitlab ############################# + # requirement jupyter-server<2,>=1.6 + ('jupyterlab_gitlab', '3.0.0', { + 'patches': [ + 'jupyterlab-gitlab_jserv2.patch', + ('jupyterlab-gitlab.config', '.'), + ], + 'checksums': [ + '5b0367b82e3170d8274465285a36be9c331dac5674d9ba7e8e2b5dd4972d64f7', + 'fe6196f8128169e994519a37bec14171711116fe98c4729a0969750611d2b499', + 'e3e0b6b294b726e9aecaa4d2b210aa834b7327cba99f97663c2f9297b14eb2a3', + ], + }), + # jupyterlab_git ################################ + ('smmap', '5.0.0', { + 'checksums': ['c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936'], + }), + ('gitdb', '4.0.10', { + 'checksums': ['6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a'], + }), + ('GitPython', '3.1.31', { + 'modulename': 'git', + 'checksums': ['8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573'], + }), + ('jupyterlab_git', '0.41.0', { + 'checksums': ['51767daa002f08a7cf0b372114eb706eff2f34f12d70b5347700464e6887483e'], + }), + ('jupyter_server_mathjax', '0.2.6', { + 'checksums': ['bb1e6b6dc0686c1fe386a22b5886163db548893a99c2810c36399e9c4ca23943'], + }), + # nbdime ######################################## + ('nbdime', '3.2.1', { + 'checksums': ['31409a30f848ffc6b32540697e82d5a0a1b84dcc32716ca74e78bcc4b457c453'], + }), + # jupyterlab-latex ############################## + ('jupyterlab_latex', '3.2.0', { + 'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://github.com/jupyterlab/jupyterlab-latex/archive/'], + 'checksums': ['b396cb1a86ccec019a72f2aad10c47a3680294ff946da3cf8980ed955b7fd5ac'], + }), + # jupyterlab_plugin_playground ################## + ('jupyterlab_plugin_playground', '0.4.0', { # 0.4.0 on PyPi installs 0.3.0 + 'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://github.com/jupyterlab/jupyterlab-plugin-playground/archive/'], + 'checksums': ['d64f51315692402def435008d2ca8c3168c7e39e23933aeffc46405583b3b81b'], + }), + # sidecar ####################################### + ('sidecar', '0.5.2', { + 'checksums': ['fd4558417ce786fb59b81e44f7d6868e4a5beccbdb2ae29506f2b3d1c4f85c80'], + }), + # jupyterlab-s3-browser ######################### + ('jmespath', '1.0.1', { + 'checksums': ['90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe'], + }), + ('botocore', '1.29.76', { + 'checksums': ['c2f67b6b3f8acf2968eafca06526f07b9fb0d27bac4c68a635d51abb675134a7'], + }), + ('aioitertools', '0.11.0', { + 'checksums': ['42c68b8dd3a69c2bf7f2233bf7df4bb58b557bca5252ac02ed5187bbc67d6831'], + }), + ('s3transfer', '0.6.1', { + 'checksums': ['640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9'], + }), + ('fsspec', '2023.5.0', { + 'checksums': ['b3b56e00fb93ea321bc9e5d9cf6f8522a0198b20eb24e02774d329e9c6fb84ce'], + }), + ('wrapt', '1.15.0', { + 'checksums': ['d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a'], + }), + ('aiobotocore', '2.5.0', { + 'checksums': ['6a5b397cddd4f81026aa91a14c7dd2650727425740a5af8ba75127ff663faf67'], + }), + ('singleton-decorator', '1.0.0', { + 'checksums': ['1a90ad8a8a738be591c9c167fdd677c5d4a43d1bc6b1c128227be1c5e03bee07'], + }), + ('s3fs', '2023.5.0', { + 'checksums': ['106b5d9a1000e6af413f918156ba4b96789ac832b7e08c99d186eb08164e6981'], + }), + ('boto3', '1.26.76', { + 'checksums': ['30c7d967ed1c6b5a05643e42cae9d4d36c3f1cb6782637ddc7007a104cfd9027'], + }), + ('jupyterlab_s3_browser', 'c8e319b717251cc3265cfaab2fdb5221c3072238', { + 'source_tmpl': '%(version)s.tar.gz', + 'source_urls': ['https://github.com/IBM/jupyterlab-s3-browser/archive/'], + 'patches': ['jupyterlab-s3-browser_pr86_s3v2.patch'], + 'checksums': [ + 'e614d3ba4d28af503f6a01f3ac37c626bcf6335c22174643ac1527b681e5b770', + '7f35ed49cb705f7f85962e09996516c54be2386d98d28cf0320810b589fba1bf', + ], + }), + # jupyterlab-favorites ########################## + ('jsonmerge', '1.9.0', { + 'checksums': ['a2d1f80021c5c1d70a49e31f862b5f068f9db066080d8561e80654de74a3584d'], + }), + ('jupyterlab-favorites', '3.1.1', { + 'patches': [('update_favorites_json', '.')], + 'checksums': [ + 'ab1bb4e3686d7acf5bef7a34b07869913d48dd609783e671d0edfda13c2b3fb0', + '496a9ef8bb7f399907a8923e1386d541528e77e237ea7e3abe5b28d432a9bd11', + ], + }), + # jupyterlab-recents ############################ + ('jupyterlab_recents', '3.2.0', { + 'checksums': ['d295fe2506e24fe7a38d8651c265033528df94a9d535b84f88e28e295017dc01'], + }), + # jupyterlab-spellchecker ####################### + ('jupyterlab-spellchecker', '0.7.3', { + 'checksums': ['5b862228479b33b95b9d4eb47482b4a11c6732efb2c8c8123c7f88efc3695e76'], + }), + ('tenacity', '8.2.2', { + 'checksums': ['43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0'], + }), + # plotly ######################################## + ('plotly', '5.15.0', { + 'checksums': ['822eabe53997d5ebf23c77e1d1fcbf3bb6aa745eb05d532afd4b6f9a2e2ab02f'], + }), + # jupyter-bokeh ################################# + ('jupyter_bokeh', '3.0.4', { + 'checksums': ['ba3b032f52a039d9e5ed8f6c50f3f9a00dcb97005871c24673a3b3a05465aef5'], + }), + # pyviz ######################################### + ('param', '1.13.0', { + 'checksums': ['59d55048d42a85e148a69837df42bd11c3391d47fad15ba57d118e145f001ef2'], + }), + ('pyct', '0.5.0', { + 'checksums': ['dd9f4ac5cbd8e37c352c04036062d3c5f67efec76d404761ef16b0cbf26aa6a0'], + }), + ('pyviz_comms', '2.2.1', { + 'checksums': ['a26145b8ce43d2d934b3c6826d77b913ce105c528eb2e494c890b3e3525ddf33'], + }), + # panel ######################################### + ('tqdm', '4.65.0', { + 'checksums': ['1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5'], + }), + ('Markdown', '3.4.3', { + 'checksums': ['8bf101198e004dc93e84a12a7395e31aac6a9c9942848ae1d99b9d72cf9b3520'], + 'modulename': 'markdown', + }), + ('panel', '0.14.4', { + 'checksums': ['b853d2f53d7738ec6372525360c5bf9427a71ed990685ccac703bc9b442e9951'], + }), + # holoviews ##################################### + ('colorcet', '3.0.1', { + 'checksums': ['51455a20353d12fac91f953772d8409f2474e6a0db1af3fa4f7005f405a2480b'], + }), + ('holoviews', '1.16.0', { + 'checksums': ['13416a251858ead03049570d9e7b39cdf1918d39e64530a18e552b6771115a1a'], + }), + # jupyterlab_code_formatter ##################### + ('isort', '5.12.0', { + 'checksums': ['8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504'], + }), + ('mypy_extensions', '1.0.0', { + 'checksums': ['75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782'], + }), + ('black', '22.12.0', { + 'checksums': ['229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f'], + }), + ('jupyterlab_code_formatter', '1.6.1', { + 'checksums': ['ddf084383292ceceddcaae043f4c62b93d27a85850578a280f8fded9a1b93a32'], + }), + # voila ######################################### + ('websockets', '11.0.3', { + 'checksums': ['88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016'], + }), + # voila 0.4.0 has requirement jupyter-client<=7.4.1,>=6.1.3 and jupyter-server<2 + # voila >= 0.5.0a5 is not compatible with Jlab 3.6.5 (check 'jupyter labextension list') + ('voila', '0.5.0a4', { + 'checksums': ['cd381d13d0513ff663c6a87850be9e575a3f796e561549cba4a5864a9aa0d72f'], + }), + ('voila-material', '0.4.0', { + 'checksums': ['0827a27f0f23ca87bd8f565c4c227c754516d2a120ffce0f7ab1ee12fdec959f'], + 'modulename': False, + }), + # voila-gridstack 0.3.1 has requirement voila<0.5.0,>=0.2 + # ('voila_gridstack', '0.3.1', { + # 'checksums': [''], + # 'modulename': False, + # }), + # voila-vuetify 0.6.0 has requirement voila<0.5,>=0.2.0 + # ('voila-vuetify', '0.6.0', { + # 'checksums': [''], + # 'modulename': False, + # }), + # jupyterlab-tour ############################### + ('jupyterlab-tour', '3.1.4', { + 'checksums': ['f1d80ec906f689134d259203caf281ea53b8c2353c4a265c29947b557e009229'], + }), + # jupyterlab_hdf ################################ + ('orjson', '3.8.12', { + 'source_tmpl': 'orjson-3.8.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl', + 'unpack_sources': False, + 'checksums': ['83e8c740a718fa6d511a82e463adc7ab17631c6eea81a716b723e127a9c51d57'], + }), + ('tifffile', '2023.4.12', { + 'checksums': ['2fa99f9890caab919d932a0acaa9d0f5843dc2ef3594e212963932e20713badd'], + }), + ('h5grove', '0.0.14', { + 'checksums': ['ead42d2d98f28ef363c83bd4ba421f25f02c111c615201093707a670b9978704'], + }), + ('jupyterlab_hdf', '1.3.0', { + 'checksums': ['d15c80c25be26bf4f95e9cad58dd28839ef3924b6eddaf336166aac121dd4819'], + }), + # jupyterhub #################################### + ('greenlet', '2.0.2', { + 'checksums': ['e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0'], + }), + ('SQLAlchemy', '2.0.13', { + 'modulename': 'sqlalchemy', + 'checksums': ['8d97b37b4e60073c38bcf94e289e3be09ef9be870de88d163f16e08f2b9ded1a'], + }), + ('pamela', '1.0.0', { + 'checksums': ['65c9389bef7d1bb0b168813b6be21964df32016923aac7515bdf05366acbab6c'], + }), + ('oauthlib', '3.2.2', { + 'checksums': ['9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918'], + }), + ('Mako', '1.2.4', { + 'modulename': 'mako', + 'checksums': ['d60a3903dc3bb01a18ad6a89cdbe2e4eadc69c0bc8ef1e3773ba53d44c3f7a34'], + }), + ('alembic', '1.11.0', { + 'checksums': ['d8bf706124e96e526889ac9c87a0d50debd9ef325ef32ae5391cf0315bdab4e1'], + }), + ('pyOpenSSL', '22.0.0', { + 'modulename': 'OpenSSL', + 'checksums': ['660b1b1425aac4a1bea1d94168a85d99f0b3144c869dd4390d27629d0087f1bf'], + }), + ('certipy', '0.1.3', { + 'checksums': ['695704b7716b033375c9a1324d0d30f27110a28895c40151a90ec07ff1032859'], + }), + ('ruamel.yaml', '0.17.26', { + 'checksums': ['baa2d0a5aad2034826c439ce61c142c07082b76f4791d54145e131206e998059'], + }), + ('ruamel.yaml.clib', '0.2.7', { + 'checksums': ['1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497'], + 'modulename': False, + }), + ('jupyter_telemetry', '0.1.0', { + 'checksums': ['445c613ae3df70d255fe3de202f936bba8b77b4055c43207edf22468ac875314'], + }), + ('jupyterhub', '3.1.1', { # 4.0.1 fails with our backendspawner + 'checksums': ['bfdbc55d7cd29ed2b2c84d2fc7943ad13efdfc4a77740519c5dad1079ff75953'], + }), # copy 401.html -> <jupyter-install-dir>/share/jupyter/lab/static/ + # jupyter_kernel_gateway ######################## + # jupyter-kernel-gateway 2.5.2 has requirement jupyter-client<8.0,>=5.2.0, but you have jupyter-client 8.2.0. + # https://github.com/jupyter-server/kernel_gateway/issues/377 + # ('jupyter_kernel_gateway', '2.5.2', { + # 'checksums': [''], + # }), + # ipyparallel ################################### + ('ipyparallel', '8.6.1', { + 'checksums': ['a39aa5ef9560170bf0e9afedca9ff045e1b9c1832c49303377edcc91cea9fb77'], + }), + # papermill ##################################### + ('textwrap3', '0.9.2', { + 'source_tmpl': 'textwrap3-0.9.2.zip', + 'checksums': ['5008eeebdb236f6303dcd68f18b856d355f6197511d952ba74bc75e40e0c3414'], + }), + ('ansiwrap', '0.8.4', { + 'source_tmpl': 'ansiwrap-%(version)s.zip', + 'checksums': ['ca0c740734cde59bf919f8ff2c386f74f9a369818cdc60efe94893d01ea8d9b7'], + }), + ('papermill', '2.4.0', { + 'checksums': ['6f8f8a9b06b39677f207c09100c8d386bcf592f0cbbdda9f0f50e81445697627'], + }), + # dask ########################################## + ('dask_labextension', '6.1.0', { + 'checksums': ['397cf6f2106650954c3f3bf84fe269a4fb72fb6bf56e6089c75cc3bbf9ff12ae'], + 'preinstallopts': ( + # https://github.com/jupyterlab/jupyterlab/issues/14335#issuecomment-1611586421 + 'jlpm install && ' + 'jlpm upgrade --caret --scope jupyterlab && ' + # Minimize dependency versions + 'jlpm add -D yarn-deduplicate@^5.0.0 && ' + 'jlpm yarn-deduplicate -s fewer && ' + 'jlpm install && ' + ) + }), + # nbdev ######################################### + ('watchdog', '3.0.0', { + 'checksums': ['4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9'], + }), + ('execnb', '0.1.5', { + 'checksums': ['9ee029e0e3007c0deedc32723918c5c3bcbb64bb0b08a11fc521485ea361fa4d'], + }), + ('fastcore', '1.5.29', { + 'checksums': ['f1a2eb04eb7933f3f9eb4064852817df44dc96e20fab5658c14c035815269a3f'], + }), + ('astunparse', '1.6.3', { + 'checksums': ['5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872'], + }), + ('ghapi', '1.0.3', { + 'checksums': ['1804443a2c12261b247bea08a930445fcb5b8fac1c65f8e9e6504b5842ce8f00'], + }), + ('nbdev', '2.3.12', { + 'checksums': ['01058da82abd20458c2a4906e5bc34a64bd6b6f20c2a405b028b5f4d14533024'], + }), + # pyunicore ##################################### + ('PyJWT', '2.7.0', { + 'modulename': 'jwt', + 'checksums': ['bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074'], + }), + ('pyunicore', '0.15.0', { + 'checksums': ['dc57ef05b1681b20471e8a4a72067671f74b4d41601099fe80324293439175d5'], + }), + # dash ########################################## + # dash-extension `jupyterlab-dash` is part of plotly and does not need to be installed explicitly + ('blinker', '1.6.2', { + 'checksums': ['4afd3de66ef3a9f8067559fb7a1cbe555c17dcbe15971b05d1b625c3e7abe213'], + }), + ('Werkzeug', '2.2.3', { + 'checksums': ['2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe'], + }), + ('itsdangerous', '2.1.2', { + 'checksums': ['5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a'], + }), + ('Flask', '2.2.5', { + 'modulename': 'flask', + 'checksums': ['edee9b0a7ff26621bd5a8c10ff484ae28737a2410d99b0bb9a6850c7fb977aa0'], + }), + ('cachelib', '0.9.0', { + 'checksums': ['38222cc7c1b79a23606de5c2607f4925779e37cdcea1c2ad21b8bae94b5425a5'], + }), + ('Flask-Caching', '2.0.2', { + 'modulename': 'flask_caching', + 'checksums': ['24b60c552d59a9605cc1b6a42c56cdb39a82a28dab4532bbedb9222ae54ecb4e'], + }), + ('dash', '2.11.1', { + 'checksums': ['1acc4c634311cb306a1086fff315c1f2aaa3898bac362d93bc8db6b1a6474e5c'], + }), + ('dash_core_components', '2.0.0', { + 'checksums': ['c6733874af975e552f95a1398a16c2ee7df14ce43fa60bb3718a3c6e0b63ffee'], + }), + ('dash_html_components', '2.0.0', { + 'checksums': ['8703a601080f02619a6390998e0b3da4a5daabe97a1fd7a9cebc09d015f26e50'], + }), + ('dash_table', '5.0.0', { + 'checksums': ['18624d693d4c8ef2ddec99a6f167593437a7ea0bf153aa20f318c170c5bc7308'], + }), + ('dash_renderer', '1.9.1', { + 'checksums': ['73a69e3d145880e68e42723ad10182251d92b44f3efe92b8763145cfd2158e7e'], + }), + ('dash-bootstrap-components', '1.4.1', { + 'checksums': ['05c2e2767a8ab104fc950d15482d09dde59d21f1e9bd5809d30672e61b7f420c'], + }), + ('dash_daq', '0.5.0', { + 'checksums': ['a1d85b6799f7b885652fbc44aebdb58c41254616a8d350b943beeb42ade4256a'], + }), + ('dash_player', '1.1.0', { + 'checksums': ['d1b38690c922de44e7b56647abc9cafa2c3e75743f52a9b1ff9613095c640524'], + }), + ('retrying', '1.3.4', { + 'checksums': ['345da8c5765bd982b1d1915deb9102fd3d1f7ad16bd84a9700b85f64d24e8f3e'], + }), + ('ansi2html', '1.8.0', { + 'checksums': ['38b82a298482a1fa2613f0f9c9beb3db72a8f832eeac58eb2e47bf32cd37f6d5'], + }), +] + +local_jupyter_config_path = 'etc/jupyter' +local_jupyter_path = 'share/jupyter' +local_jupyterlab_dir = 'share/jupyter/lab' + +modextrapaths = { + # search path to find installable data files, such as kernelspecs and notebook extensions + 'JUPYTER_PATH': [local_jupyter_path], + # do NOT set JUPYTER_CONFIG_DIR: if not set, if will be ${HOME}/.jupyter, which is just right + 'JUPYTER_CONFIG_PATH': [local_jupyter_config_path], # config dir at install time. + # ATTENTION: not config dir at runtime, because this is fixed to {sys.prefix}/etc/jupyter/ +} + +modextravars = { + 'JUPYTER': '%(installdir)s/bin/jupyter', + 'JUPYTERLAB_DIR': '%%(installdir)s/%s' % local_jupyterlab_dir, +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is first entry in JUPYTHER_PATH and JUPYTER_DATA_DIR +# and the JUPYTER_CONFIG_PATH starts with $HOME/.jupyter +# https://jupyter.readthedocs.io/en/latest/projects/jupyter-directories.html#envvar-JUPYTER_PATH +modluafooter = """ +setenv("JUPYTER_DATA_DIR", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +prepend_path("JUPYTER_CONFIG_PATH", pathJoin(os.getenv("HOME"), ".jupyter")) +""" + +postinstallcmds = [ + # ensure we install in the correct directory !!! + 'python3 -m venv %(installdir)s --system-site-packages', + + # create setup-environment-script + 'echo "#!/bin/bash" > %(builddir)s/env.sh', + 'echo "source %(installdir)s/bin/activate" >> %(builddir)s/env.sh', + ( + 'echo "export PYTHONPATH=' + '%(installdir)s/lib/python%(pyshortver)s/site-packages:' + '${EBROOTPYTHON}/lib/python%(pyshortver)s/site-packages:' + '${PYTHONPATH}" >> %(builddir)s/env.sh' + ), + 'echo "export JUPYTER=%(installdir)s/bin/jupyter" >> %(builddir)s/env.sh', + 'echo "export JUPYTER_PATH=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_path, + 'echo "export JUPYTERLAB_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyterlab_dir, + # Config dir at install time. ATTENTION: not config dir at runtime. This is picked up by JUPYTER_CONFIG_PATH + 'echo "export JUPYTER_CONFIG_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_config_path, + # jupyter will use $JUPYTER_CONFIG_DIR with "--user" + 'echo "export JUPYTER_DATA_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_path, + 'echo "export PATH=%(installdir)s/bin:${PATH}" >> %(builddir)s/env.sh', + + # build JupyterLab app directory for all previous installed extensions in one go + 'source %(builddir)s/env.sh && jupyter lab build --dev-build=False', # --minimize=False + + # store default in ../share/jupyter/lab/schemas/jupyterlab-favorites/favorites.json + # create dynamic defaults for $HOME, $SCRATCH, $PROJECT with the following script + ( + 'install -m 0755 ' + ' %(builddir)s/jupyterlabfavorites/jupyterlab-favorites-3.1.1/update_favorites_json ' + ' %(installdir)s/bin/ ' + ), + + # language server for jupyter-lsp + # https://jupyterlab-lsp.readthedocs.io/en/latest/Language%20Servers.html + # must be installed _after_ 'jupyter lab build' as this clears the prefix + ( + 'source %(builddir)s/env.sh && npm install --prefix %(installdir)s/share/jupyter/lab/staging/ ' + ' bash-language-server@2.1.0 ' + ' dockerfile-language-server-nodejs@0.9.0 ' + ' pyright@1.1.309 ' + ' sql-language-server@1.5.1 ' + ' typescript-language-server@0.11.2 typescript@5.0.4 ' + ' vscode-css-languageserver-bin@1.4.0 ' + ' vscode-html-languageserver-bin@1.4.0 ' + ' vscode-json-languageserver-bin@1.0.1 ' + ' yaml-language-server@1.12.0 ' + ), + # more: javascript-typescript-langserver, jedi-language-server, julia-language-server, + # python-language-server, r-languageserver, texlab, unified-language-server + + # jupyterlab server extensions + # 'source %(builddir)s/env.sh && jupyter serverextension enable --py jupyterlab_sql', + 'source %(builddir)s/env.sh && jupyter serverextension enable --py jupyterlab_iframe', + 'source %(builddir)s/env.sh && jupyter serverextension enable --py jupyterlab_s3_browser', + + # STILL NEEDED ??? + # dask_labextension + # ( + # 'cp %(builddir)s/dask_labextension/dask_labextension-6.1.0/' + # 'dask_labextension/labextension/schemas/dask-labextension/plugin.json ' + # ' %(installdir)s/share/jupyter/labextensions/dask-labextension/schemas/dask-labextension/plugin.json' + # ), + + # Send2Trash + ( + '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n' + 'c.FileContentsManager.delete_to_trash = False\n' + 'EOF' + ), + # iframe-extension + ( + 'cat %(builddir)s/jupyterlab_iframe/jupyterlab_iframe-0.4.4/jupyterlab-iframe.config ' + ' >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py' + ), + # jupyter-resource-usage (displayed by jupyterlab-system-monitor) + ( + 'cat %(builddir)s/jupyter_resource_usage/jupyter_resource_usage-0.7.2/jupyter-resource-usage.config ' + ' >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py' + ), + # jupyterlab-gitlab + ( + 'cat %(builddir)s/jupyterlab_gitlab/jupyterlab_gitlab-3.0.0/jupyterlab-gitlab.config ' + ' >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py' + ), + + # Add the default_setting_override.json file for modifications of the system-wide default settings + 'mkdir -p %(installdir)s/etc/jupyter/labconfig/ ', + ( + '{ cat > %(installdir)s/etc/jupyter/labconfig/default_setting_overrides.json; } << \'EOF\'\n' + '{\n' + ' "jupyterlab-gitlab:drive": {\n' + ' "baseUrl": "https://gitlab.jsc.fz-juelich.de",\n' + ' "defaultRepo": "jupyter4jsc/j4j_notebooks"\n' + ' },\n' + ' "@jupyter-lsp/jupyterlab-lsp:plugin": {\n' + ' "language_servers": {\n' + ' "pyright": {\n' + ' "serverSettings": {\n' + ' "python.analysis.useLibraryCodeForTypes": true\n' + ' },\n' + ' "priority": 75\n' + ' }\n' + ' },\n' + ' "loggingConsole": "browser",\n' + ' "loggingLevel": "warn",\n' + ' "logAllCommunication": false,\n' + ' "setTrace": null\n' + ' },\n' + ' "@jupyterlab/extensionmanager-extension:plugin": {\n' + ' "enabled": false\n' + ' }\n' + '}\n' + 'EOF' + ), + # Disable extensions we do not want to show up, but which we want to have installed + ( + '{ cat > %(installdir)s/etc/jupyter/labconfig/page_config.json; } << \'EOF\'\n' + '{\n' + ' "disabledExtensions": {\n' + ' "ipyparallel-labextension": true\n' + ' }\n' + '}\n' + 'EOF' + ), + + # add webpage, which leads back to https://jupyter-jsc.fz-juelich.de + 'cp %%(builddir)s/jupyterlab/jupyterlab-%s/401.html %%(installdir)s/share/jupyter/lab/static/' % local_jlab_version, + + # ################################################### + # IMPORTANT: + # start JupyterLab once (for 60 seconds) to allow some cleanup at first start + # ################################################### + ( + 'source %(builddir)s/env.sh && ' + '{(jupyter lab --no-browser) & } && JLAB_PID=$! && ' + 'sleep 60 && ' + 'jupyter lab list --json 2>&1 | grep $JLAB_PID | ' + 'awk \'{for(i=1;i<=NF;i++)if($i=="\\"port\\":")print $(i+1)}\' | sed \'s/,*$//g\' | ' + 'xargs -i jupyter lab stop {}' + ), + + # Ensure Jupyter does not want to build anything on startup + # The build_config.json file is used to track the local directories that have been installed + # using jupyter labextension install <directory>, as well as core extensions that have been explicitly uninstalled. + # 'if [ -e %(installdir)s/share/jupyter/lab/settings/build_config.json ]; then exit 1; fi ', + ( + '{ cat > %(installdir)s/share/jupyter/lab/settings/build_config.json; } << \'EOF\'\n' + '{\n' + ' "local_extensions": {}\n' + '}\n' + 'EOF' + ), + + # Ensure we remove the virtual environment to avoid wrong search path for python packages + 'rm -f %(installdir)s/pyvenv.cfg', + 'rm -f %(installdir)s/bin/python', + 'rm -f %(installdir)s/bin/python3', + 'rm -f %(installdir)s/bin/activate', + 'rm -f %(installdir)s/bin/activate*', + 'rm -f %(installdir)s/bin/easy_install*', + 'rm -f %(installdir)s/bin/pip*', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/_distutils_hack', + 'rm -f %(installdir)s/lib/python%(pyshortver)s/site-packages/distutils-precedence.pth', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pip-*', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/pkg_resources', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools', + 'rm -rf %(installdir)s/lib/python%(pyshortver)s/site-packages/setuptools-*', + + # Compile Python files to byte-code to speedup execution + # ERROR: returns with exit code 1, because some files cannot be compiled for different reasons + # ################################################### + # Disable possible, because sanity check will # + # force the compile of all python packages anyway# + # ################################################### + # 'source %(builddir)s/env.sh && python -m compileall %(installdir)s', + + # ################################################### + # IMPORTANT: must be done manual after eb-install: # + # ################################################### + # 'chmod -R g-w %(installdir)s ', # software-group must not modify the installation on accident + # 'chmod -R ugo-w %(installdir)s/share ', # Noone should add files/configs to the global share after install + # 'chmod -R ug-w ...../2023/software/Python/3.10.6-GCCcore-11.3.0/share ', # Python module, too +] + +# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module +# full_sanity_check = True # would result in sanity-errors about yaml,ipython_genutils,IPython,traitlets +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterLab/jupyter-resource-usage.config b/Golden_Repo/j/JupyterLab/jupyter-resource-usage.config new file mode 100644 index 0000000000000000000000000000000000000000..27da2299b6ef51b28f15f4a55c145dd232183b5a --- /dev/null +++ b/Golden_Repo/j/JupyterLab/jupyter-resource-usage.config @@ -0,0 +1,62 @@ +import os +########################### +# set memory limit for ResourceDisplay +########################### +# Get the cgroup path for the current process +subsystem = 'memory' +with open('/proc/self/cgroup', 'r') as f: + for line in f: + parts = line.strip().split(':') + subsystems = parts[1].strip().split(',') + for ssystem in parts[1].strip().split(','): + if subsystem == ssystem: + cgroup_path = parts[2] + +# Check if there is a memory limit in the cgroup +memory_cgroup_path = f'/sys/fs/cgroup/{subsystem}/{cgroup_path}' +if not os.path.isdir(memory_cgroup_path): + memory_cgroup_path = f'/sys/fs/cgroup/{subsystem}/' + +with open(os.path.join(memory_cgroup_path, 'memory.limit_in_bytes'), 'r') as f: + memory_limit_in_bytes = int(f.read().strip()) + +physical_memory = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') +if memory_limit_in_bytes < 0 or memory_limit_in_bytes > physical_memory: + memory_limit = physical_memory +else: + memory_limit = memory_limit_in_bytes + +c.ResourceUseDisplay.mem_limit = memory_limit +c.ResourceUseDisplay.mem_warning_threshold = 0.1 + +########################### +# set cpu limit for ResourceDisplay +########################### +# Get the cgroup path for the current process +subsystem = 'cpu' +with open('/proc/self/cgroup', 'r') as f: + for line in f: + parts = line.strip().split(':') + subsystems = parts[1].strip().split(',') + for ssystem in parts[1].strip().split(','): + if subsystem == ssystem: + cgroup_path = parts[2] + +# Check if there is a CPU limit in the cgroup +cpu_cgroup_path = f'/sys/fs/cgroup/{subsystem}/{cgroup_path}' +if not os.path.isdir(cpu_cgroup_path): + cpu_cgroup_path = f'/sys/fs/cgroup/{subsystem}/' + +with open(os.path.join(cpu_cgroup_path, 'cpu.cfs_quota_us'), 'r') as f: + cpu_cfs_quota_us = int(f.read().strip()) +with open(os.path.join(cpu_cgroup_path, 'cpu.cfs_period_us'), 'r') as f: + cpu_cfs_period_us = int(f.read().strip()) + +if cpu_cfs_quota_us < 0: + cpu_limit = os.cpu_count() +else: + cpu_limit = cpu_cfs_quota_us / cpu_cfs_period_us + +c.ResourceUseDisplay.track_cpu_percent = True +c.ResourceUseDisplay.cpu_limit = cpu_limit +c.ResourceUseDisplay.cpu_warning_threshold = 0.1 diff --git a/Golden_Repo/j/JupyterLab/jupyter-server-proxy_timeout.patch b/Golden_Repo/j/JupyterLab/jupyter-server-proxy_timeout.patch new file mode 100644 index 0000000000000000000000000000000000000000..1e7652fbbea883e11d7fab34645c446b2afac676 --- /dev/null +++ b/Golden_Repo/j/JupyterLab/jupyter-server-proxy_timeout.patch @@ -0,0 +1,25 @@ +diff -Naur jupyter_server_proxy-4.0.0.orig/jupyter_server_proxy/config.py jupyter_server_proxy-4.0.0/jupyter_server_proxy/config.py +--- jupyter_server_proxy-4.0.0.orig/jupyter_server_proxy/config.py 2020-02-02 01:00:00.000000000 +0100 ++++ jupyter_server_proxy-4.0.0/jupyter_server_proxy/config.py 2023-05-18 22:24:29.149273196 +0200 +@@ -138,7 +138,7 @@ + name=name, + command=server_process_config.get("command", list()), + environment=server_process_config.get("environment", {}), +- timeout=server_process_config.get("timeout", 5), ++ timeout=server_process_config.get("timeout", 20), + absolute_url=server_process_config.get("absolute_url", False), + port=server_process_config.get("port", 0), + unix_socket=server_process_config.get("unix_socket", None), +diff -Naur jupyter_server_proxy-4.0.0.orig/jupyter_server_proxy/handlers.py jupyter_server_proxy-4.0.0/jupyter_server_proxy/handlers.py +--- jupyter_server_proxy-4.0.0.orig/jupyter_server_proxy/handlers.py 2023-05-18 22:19:39.559270969 +0200 ++++ jupyter_server_proxy-4.0.0/jupyter_server_proxy/handlers.py 2023-05-18 22:22:16.157555535 +0200 +@@ -771,7 +771,7 @@ + """ + Return timeout (in s) to wait before giving up on process readiness + """ +- return 5 ++ return 20 + + async def _http_ready_func(self, p): + if self.unix_socket is not None: + diff --git a/Golden_Repo/j/JupyterLab/jupyterlab-gitlab.config b/Golden_Repo/j/JupyterLab/jupyterlab-gitlab.config new file mode 100644 index 0000000000000000000000000000000000000000..495187f5639927304dc94a0389b1882d7548f3c1 --- /dev/null +++ b/Golden_Repo/j/JupyterLab/jupyterlab-gitlab.config @@ -0,0 +1,5 @@ +# no username+password needed, if repo is public or we have the token for a specific URL +# c.GitLabConfig.access_token = "<API-TOKEN>" +# c.GitLabConfig.allow_client_side_access_token = False +c.GitLabConfig.url = "https://gitlab.version.fz-juelich.de" +c.GitLabConfig.validate_cert = True diff --git a/Golden_Repo/j/JupyterLab/jupyterlab-gitlab_jserv2.patch b/Golden_Repo/j/JupyterLab/jupyterlab-gitlab_jserv2.patch new file mode 100644 index 0000000000000000000000000000000000000000..3192aeb36332cc5043f7a9f7e2686d3c5e68b019 --- /dev/null +++ b/Golden_Repo/j/JupyterLab/jupyterlab-gitlab_jserv2.patch @@ -0,0 +1,12 @@ +diff -Naur jupyterlab_gitlab-3.0.0.orig/setup.py jupyterlab_gitlab-3.0.0/setup.py +--- jupyterlab_gitlab-3.0.0.orig/setup.py 2021-08-23 10:22:54.000000000 +0200 ++++ jupyterlab_gitlab-3.0.0/setup.py 2023-06-01 22:44:47.114685590 +0200 +@@ -55,7 +55,7 @@ + long_description=long_description, + long_description_content_type="text/markdown", + packages=setuptools.find_packages(), +- install_requires=["jupyter_server>=1.6,<2"], ++ install_requires=["jupyter_server>=1.6,<3"], + zip_safe=False, + include_package_data=True, + python_requires=">=3.6", diff --git a/Golden_Repo/j/JupyterLab/jupyterlab-iframe.config b/Golden_Repo/j/JupyterLab/jupyterlab-iframe.config new file mode 100644 index 0000000000000000000000000000000000000000..bc71b0076b3222090f359964aa81026681d39722 --- /dev/null +++ b/Golden_Repo/j/JupyterLab/jupyterlab-iframe.config @@ -0,0 +1,2 @@ +# c.JupyterLabIFrame.iframes = ['list', 'of', 'sites'] +c.JupyterLabIFrame.welcome = "http://www.fz-juelich.de/jsc" diff --git a/Golden_Repo/j/JupyterLab/jupyterlab-s3-browser_pr86_s3v2.patch b/Golden_Repo/j/JupyterLab/jupyterlab-s3-browser_pr86_s3v2.patch new file mode 100644 index 0000000000000000000000000000000000000000..1b050fb962e41bee0de86185f4afd4ba34fa9c58 --- /dev/null +++ b/Golden_Repo/j/JupyterLab/jupyterlab-s3-browser_pr86_s3v2.patch @@ -0,0 +1,133 @@ +From ceb148c0e7af29e8b18ae6f6f17d080b4aed7196 Mon Sep 17 00:00:00 2001 +From: Tom Ridley <ridley2@jsfl05.jusuf> +Date: Fri, 22 Jul 2022 16:57:10 +0200 +Subject: [PATCH 1/2] Added signature version variable and try/except behaviour + to account for older S3 interfaces + +--- + jupyterlab_s3_browser/__init__.py | 6 ++++++ + jupyterlab_s3_browser/handlers.py | 28 +++++++++++++++++++++++++++- + 2 files changed, 33 insertions(+), 1 deletion(-) + +diff --git a/jupyterlab_s3_browser/__init__.py b/jupyterlab_s3_browser/__init__.py +index 9d56a88..ebb06ec 100755 +--- a/jupyterlab_s3_browser/__init__.py ++++ b/jupyterlab_s3_browser/__init__.py +@@ -45,6 +45,12 @@ class JupyterLabS3(Configurable): + config=True, + help="(Optional) Token if you use STS as auth method", + ) ++ ++ signature_version = Unicode( ++ default_value="", ++ config=True, ++ help="Signature version variable to support older S3 interfaces", ++ ) + + + def _load_jupyter_server_extension(server_app): +diff --git a/jupyterlab_s3_browser/handlers.py b/jupyterlab_s3_browser/handlers.py +index a611be7..b9494c6 100644 +--- a/jupyterlab_s3_browser/handlers.py ++++ b/jupyterlab_s3_browser/handlers.py +@@ -8,6 +8,8 @@ + import boto3 + import tornado + from botocore.exceptions import NoCredentialsError ++from botocore.exceptions import ClientError ++from botocore.client import Config + from jupyter_server.base.handlers import APIHandler + from jupyter_server.utils import url_path_join + from pathlib import Path +@@ -28,6 +30,7 @@ def create_s3fs(config): + secret=config.client_secret, + token=config.session_token, + client_kwargs={"endpoint_url": config.endpoint_url}, ++ config_kwargs={'signature_version': config.signature_version}, + ) + + else: +@@ -43,6 +46,7 @@ def create_s3_resource(config): + aws_secret_access_key=config.client_secret, + aws_session_token=config.session_token, + endpoint_url=config.endpoint_url, ++ config=Config(signature_version=config.signature_version) + ) + + else: +@@ -107,6 +111,7 @@ def test_s3_credentials(endpoint_url, client_id, client_secret, session_token): + aws_secret_access_key=client_secret, + endpoint_url=endpoint_url, + aws_session_token=session_token, ++ config=Config(signature_version=signature_version), + ) + all_buckets = test.buckets.all() + logging.debug( +@@ -146,6 +151,7 @@ def get(self, path=""): + config.client_id, + config.client_secret, + config.session_token, ++ config.signature_version + ) + logging.debug("...successfully authenticated") + +@@ -174,14 +180,34 @@ def post(self, path=""): + client_id = req["client_id"] + client_secret = req["client_secret"] + session_token = req["session_token"] ++ signature_version = 's3v4' + +- test_s3_credentials(endpoint_url, client_id, client_secret, session_token) ++ test_s3_credentials(endpoint_url, client_id, client_secret, session_token, signature_version) + + self.config.endpoint_url = endpoint_url + self.config.client_id = client_id + self.config.client_secret = client_secret + self.config.session_token = session_token ++ self.config.signature_version = signature_version + ++ self.finish(json.dumps({"success": True})) ++ except ClientError as pe: ++ req = json.loads(self.request.body) ++ endpoint_url = req["endpoint_url"] ++ client_id = req["client_id"] ++ client_secret = req["client_secret"] ++ session_token = req["session_token"] ++ signature_version = 's3' ++ ++ test_s3_credentials(endpoint_url, client_id, client_secret, session_token,signature_version) ++ ++ self.config.endpoint_url = endpoint_url ++ self.config.client_id = client_id ++ self.config.client_secret = client_secret ++ self.config.session_token = session_token ++ self.config.signature_version = signature_version ++ ++ logging.info("authenticated with s3 credentials signature_version") + self.finish(json.dumps({"success": True})) + except Exception as err: + logging.info("unable to authenticate using credentials") + +From 73770b0eaf865a52fe100d705796407e4bbd8af9 Mon Sep 17 00:00:00 2001 +From: tktridley <77678086+tktridley@users.noreply.github.com> +Date: Wed, 27 Jul 2022 10:56:26 +0200 +Subject: [PATCH 2/2] Update handlers.py + +Fixed function definition +--- + jupyterlab_s3_browser/handlers.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/jupyterlab_s3_browser/handlers.py b/jupyterlab_s3_browser/handlers.py +index b9494c6..301ff7b 100644 +--- a/jupyterlab_s3_browser/handlers.py ++++ b/jupyterlab_s3_browser/handlers.py +@@ -100,7 +100,7 @@ def has_aws_s3_role_access(): + return False + + +-def test_s3_credentials(endpoint_url, client_id, client_secret, session_token): ++def test_s3_credentials(endpoint_url, client_id, client_secret, session_token, signature_version): + """ + Checks if we're able to list buckets with these credentials. + If not, it throws an exception. diff --git a/Golden_Repo/j/JupyterLab/update_favorites_json b/Golden_Repo/j/JupyterLab/update_favorites_json new file mode 100755 index 0000000000000000000000000000000000000000..23447ca8a472710f3a32af7f46fb42695ca26750 --- /dev/null +++ b/Golden_Repo/j/JupyterLab/update_favorites_json @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 + +import logging +import argparse +import os + +import json5 +import jsonschema + +from jsonmerge import Merger + +parser = argparse.ArgumentParser() +parser.add_argument('--debug', action='store_true') + +logging.basicConfig() +if parser.parse_args().debug: + logging.getLogger().setLevel(logging.DEBUG) +else: + logging.getLogger().setLevel(logging.INFO) + +merge_schema = { + "jupyter.lab.setting-icon": "jupyterlab-favorites:filledStar", + "jupyter.lab.setting-icon-label": "Favorites", + "title": "Favorites", + "description": "Favorites settings.", + "type": "object", + "additionalProperties": False, + "properties": { + "favorites": { + "title": "Favorites", + "description": "The list of favorites.", + "items": {"$ref": "#/definitions/favorite"}, + "type": "array", + "default": [], + "mergeStrategy": "arrayMergeById", + "mergeOptions": {"idRef": "name"}, + }, + "showWidget": { + "title": "Show Widget", + "description": "Toggles the favorites widget above the filebrowser breadcrumbs.", + "type": "boolean", + "default": True, + }, + }, + "definitions": { + "favorite": { + "properties": { + "root": {"type": "string"}, + "path": {"type": "string"}, + "contentType": {"type": "string"}, + "iconLabel": {"type": "string"}, + "name": {"type": "string"}, + "default": {"type": "boolean"}, + "hidden": {"type": "boolean"}, + }, + "required": ["root", "path"], + "type": "object", + } + }, +} +logging.debug(f"JSON schema for merging: {json5.dumps(merge_schema, indent=4)}") + + +def validate(instance, schema): + try: + jsonschema.validate(instance=instance, schema=schema) + except jsonschema.ValidationError as e: + logging.error("Exception occurred", exc_info=True) + return e.schema["error_msg"] + + +def fav_jsonstr(envvar, jsonstr): + path = os.getenv(envvar) + hidden = "true" if not path else "false" + jsonstr += f""" + {{ + "root": "/", + "contentType": "directory", + "iconLabel": "ui-components:folder", + "path": "{path}", + "name": "${envvar}", + "hidden": {hidden} + }}""" + return jsonstr + + +# create favorite-json for $HOME, $SCRATCH, $PROJECT +sys_fav_jsonstr = """{ + "favorites": [""" +sys_fav_jsonstr = fav_jsonstr("HOME", sys_fav_jsonstr) + "," +sys_fav_jsonstr = fav_jsonstr("PROJECT", sys_fav_jsonstr) + "," +sys_fav_jsonstr = fav_jsonstr("SCRATCH", sys_fav_jsonstr) +sys_fav_jsonstr += """ + ], + "showWidget": true +}""" +logging.debug(f"JSON for additional favorites: {sys_fav_jsonstr}") +validate(instance=json5.loads(sys_fav_jsonstr), schema=merge_schema) + +# get path to favorites.jupyterlab-settings +settings_dpath = os.getenv( + "JUPYTERLAB_SETTINGS_DIR", + os.path.join(os.environ["HOME"], ".jupyter/lab/user-settings"), +) +fav_settings_dpath = os.path.join(settings_dpath, "@jlab-enhanced/favorites/") +fav_settings_fpath = os.path.join(fav_settings_dpath, "favorites.jupyterlab-settings") +logging.debug(f"settings file path: {fav_settings_fpath}") + +# if user settings file exists we need to merge +if os.path.exists(fav_settings_fpath): + logging.debug(f"settings file exists: {fav_settings_fpath}") + + # read user-settings + user_fav_json = {} + with open(fav_settings_fpath, "r") as fav_file: + try: + user_fav_json = json5.load(fav_file) + except ValueError: # includes simplejson.decoder.JSONDecodeError + logging.error("Decoding JSON has FAILED", exc_info=True) + + # merge JSONs + fav_merger = Merger(merge_schema) + try: + merged_json = fav_merger.merge(user_fav_json, json5.loads(sys_fav_jsonstr)) + except: + logging.error("Merging JSONs has FAILED", exc_info=True) + + # print result + logging.debug(f"merged settings file: {json5.dumps(merged_json, indent=4)}") + + # validate result + validate(instance=merged_json, schema=merge_schema) + + # write JSON to file + jsonstr = json5.dumps(merged_json, indent=4) + try: + with open(fav_settings_fpath, "w") as fav_file: + fav_file.write(jsonstr) + logging.info(f"Writing merged settings file SUCCESSFULL") + except: + logging.error("Writing settings file FAILED", exc_info=True) + +# if user settings file does NOT exist - we need to create it +else: + logging.debug( + f"settings file {fav_settings_fpath} does not exist - creating a new one" + ) + + # create file with content + try: + os.makedirs(fav_settings_dpath, exist_ok=True) + with open(fav_settings_fpath, "w") as fav_file: + fav_file.write(sys_fav_jsonstr) + logging.info(f"Writing new settings file SUCCESSFULL") + except: + logging.error("Writing settings file FAILED", exc_info=True) + diff --git a/Golden_Repo/j/JupyterLabCollection/JupyterLabCollection-2023.3.6-GCCcore-11.3.0.eb b/Golden_Repo/j/JupyterLabCollection/JupyterLabCollection-2023.3.6-GCCcore-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..fc7fc951a4d88e1f7f96409a9b47eeeaa59df789 --- /dev/null +++ b/Golden_Repo/j/JupyterLabCollection/JupyterLabCollection-2023.3.6-GCCcore-11.3.0.eb @@ -0,0 +1,35 @@ +easyblock = 'Bundle' + +name = 'JupyterLabCollection' +version = '2023.3.6' + +homepage = 'http://www.jupyter.org' +description = """ +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} + +dependencies = [ + # ('JupyterKernel-XPython', '0.12.3', '-' + version), + ('JupyterProxy-XpraHTML5', '0.3.5', '-' + version), + # ('JupyterProxy-RStudio', '1.4', '-' + version), + # ('JupyterProxy-Matlab', '0.2.0', '-' + version), + ('JupyterKernel-Bash', '0.9.0', '-' + version), + ('JupyterKernel-Cling', '20230205', '-' + version), + # ('JupyterKernel-JavaScript', '5.2.1', '-' + version), + ('JupyterKernel-Julia', '1.8.5', '-' + version), + ('JupyterKernel-Octave', '8.2.0', '-' + version), + ('JupyterKernel-PyVisualization', '2023.5', '-' + version), + ('JupyterKernel-PyQuantum', '2023.5', '-' + version), + ('JupyterKernel-PyDeepLearning', '2023.5', '-' + version), + ('JupyterKernel-PyEarthSystem', '2023.5', '-' + version), + ('JupyterKernel-R', '4.2.1', '-' + version), + ('JupyterKernel-Ruby', '3.0.5', '-' + version), + ('JupyterLab', version), +] + +skipsteps = ['configure', 'build', 'install', 'sanity_check'] + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterProxy-XpraHTML5/JupyterProxy-XpraHTML5-0.3.5-GCCcore-11.3.0-2023.3.6.eb b/Golden_Repo/j/JupyterProxy-XpraHTML5/JupyterProxy-XpraHTML5-0.3.5-GCCcore-11.3.0-2023.3.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..d4f1a14ac58f6f655be9eb9b8a931ccaaa15e8bb --- /dev/null +++ b/Golden_Repo/j/JupyterProxy-XpraHTML5/JupyterProxy-XpraHTML5-0.3.5-GCCcore-11.3.0-2023.3.6.eb @@ -0,0 +1,77 @@ +easyblock = 'PythonBundle' + +name = 'JupyterProxy-XpraHTML5' +version = '0.3.5' +local_jupyterver = '2023.3.6' +versionsuffix = '-' + local_jupyterver + +homepage = 'https://xpra.org' +description = """ +Jupyter proxy for Xpra HTML5 sessions. +Xpra is an open-source multi-platform persistent remote display server and client +for forwarding applications and desktop screens. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.38'), + # check for existance + ('xpra', '4.4.6'), + ('jsc-xdg-menu', '2023.5'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('JupyterLab', local_jupyterver), +] + +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'download_dep_fail': True, + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, +} + +exts_list = [ + ('jupyter-xprahtml5-proxy', version, { + 'checksums': [ + '71343b98d06d8c36a74a9368c5919414cb77990f01b12c911217391b25935b2b', + ], + }), +] + +postinstallcmds = [ + # write xpra + ( + '{ cat > %(installdir)s/lib/python%(pyshortver)s/' + 'site-packages/jupyter_xprahtml5_proxy/bin/xpra; } << EOF \n' + '#!/bin/bash \n' + '\n' + '# Load required modules \n' + 'module purge \n' + 'module load Stages/${STAGE} \n' + 'module load GCCcore/.11.3.0 \n' + 'module load xpra \n' + 'module load jsc-xdg-menu/.2023.5 \n' + '\n' + 'if ! command -v xterm &> /dev/null \n' + 'then \n' + ' echo "xterm not found - trying to load the xterm-module" \n' + ' module load xterm \n' + 'fi \n' + '\n' + 'xpra "\$@" \n' + '\n' + 'EOF' + ), + 'chmod +x %(installdir)s/lib/python%(pyshortver)s/site-packages/jupyter_xprahtml5_proxy/bin/xpra' +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/jsc-xdg-menu/jsc-xdg-menu-2023.5-GCCcore-11.3.0.eb b/Golden_Repo/j/jsc-xdg-menu/jsc-xdg-menu-2023.5-GCCcore-11.3.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..a9ba61041fe6fe1ae71a31eb8227bc498c5f3b76 --- /dev/null +++ b/Golden_Repo/j/jsc-xdg-menu/jsc-xdg-menu-2023.5-GCCcore-11.3.0.eb @@ -0,0 +1,40 @@ +easyblock = 'Binary' + +name = 'jsc-xdg-menu' +version = '2023.5' + +homepage = '' +description = """setup JSC`s desktop menu""" + +toolchain = {'name': 'GCCcore', 'version': '11.3.0'} + +source_urls = ['https://gitlab.version.fz-juelich.de/goebbert1/jsc-xdg-menu/-/archive/%(version)s/'] +sources = ['%(name)s-%(version)s.tar.gz'] +checksums = ['75ccb12bd102797f12122d7faa6014ad43d66beb5e4a1b1c5ecc17b5673af724'] + +builddependencies = [ + # just ensure they exist + ('Blender', '3.4.1', '-binary'), + # ('CubeGUI', '4.8.1'), # not installed on HDFML + ('GPicView', '0.2.5'), + ('HDFView', '3.1.4'), + ('Nsight-Compute', '2023.1.0'), + ('Nsight-Systems', '2023.2.1'), + # ('ParaView', '5.11.0', '', ('gpsmkl', '2022a')), + # ('TotalView', '2022.4.27'), # not installed on HDFML + # ('Vampir', '10.2.0', '', SYSTEM), +] + +extract_sources = True, +install_cmd = 'cp -a %(builddir)s/%(name)s-%(version)s/* %(installdir)s/' + +modextravars = {'XDG_MENU_PREFIX': 'jsc-'} +modextrapaths = {'XDG_CONFIG_DIRS': 'config', + 'XDG_DATA_DIRS': 'data'} + +sanity_check_paths = { + 'files': ['README.md', 'config/menus/jsc-applications.menu'], + 'dirs': ['bin', 'config/menus', 'data/applications', 'data/desktop-directories'], +} + +moduleclass = 'vis' diff --git a/acls.yml b/acls.yml index 36b6b04413af2a74365c8a678a49fcf72938335e..7ffe5ef36a17ec4f23309c90e81df4f84eaaf8cc 100644 --- a/acls.yml +++ b/acls.yml @@ -163,10 +163,10 @@ software: - name: 'Julia.MPI' owner: 'goebbert1' mpi: True - - name: 'Jupyter' + - name: 'JupyterLab' owner: 'goebbert1' base: True - - name: 'JupyterCollection' + - name: 'JupyterLabCollection' owner: 'goebbert1' base: True - name: 'JupyterExtension-nvdashboard' @@ -175,6 +175,15 @@ software: - name: 'JupyterExtension-elyra' owner: 'goebbert1' base: True + - name: 'JupyterExtension-jupyterai' + owner: 'goebbert1' + base: True + - name: 'JupyterExtension-nglview' + owner: 'goebbert1' + base: True + - name: 'JupyterExtension-slurmprovisioner' + owner: 'goebbert1' + base: True - name: 'JupyterKernel-Bash' owner: 'goebbert1' base: True @@ -190,6 +199,9 @@ software: - name: 'JupyterKernel-Octave' owner: 'goebbert1' base: True + - name: 'JupyterKernel-PyEarthSystem' + owner: 'goebbert1' + base: True - name: 'JupyterKernel-PyParaView' owner: 'goebbert1' base: True