diff --git a/Golden_Repo/j/Jupyter/Jupyter-2020.2.6-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb b/Golden_Repo/j/Jupyter/Jupyter-2020.2.6-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb new file mode 100644 index 0000000000000000000000000000000000000000..a9b2b3497eb671688af31e11fc1a159b91cf6a99 --- /dev/null +++ b/Golden_Repo/j/Jupyter/Jupyter-2020.2.6-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb @@ -0,0 +1,1214 @@ +easyblock = 'Bundle' + +name = 'Jupyter' +version = '2020.2.6' +versionsuffix = '-Python-%(pyver)s' + +local_jlab_version = '2.2.9' + +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. +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), + ('unzip', '6.0'), + ('Autotools', '20200321'), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('Python', '3.8.5'), + ('libyaml', '0.2.5'), + ('Pandoc', '2.11.0.4', '', SYSTEM), # For doc-generation + ('texlive', '20200406'), + ('ITK', '5.1.2', '-nompi' + versionsuffix), + ('HDF5', '1.10.6', '-serial'), + ('h5py', '2.10.0', '-serial' + versionsuffix), + ('netcdf4-python', '1.5.4', '-serial' + versionsuffix), + ('FFmpeg', '4.3.1'), # for pydub + ('LLVM', '10.0.1'), # llvmlite + ('git', '2.28.0'), # for jupyterlab-git (req. >=2.0) + ('SciPy-Stack', '2020', versionsuffix), + ('scikit', '2020', versionsuffix), + ('numba', '0.51.1', versionsuffix), + ('Shapely', '1.7.1', versionsuffix), +] + +osdependencies = [('openssl'), ('git')] + +local_common_opts = { + 'req_py_majver': '3', + 'req_py_minver': '0' +} + +# this is a bundle of Python packages +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'filter': ('python -c "import %(ext_name)s"', ''), + 'download_dep_fail': True, # True + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, + 'sanity_pip_check': True, + 'use_pip_for_deps': False, # False +} + +components = [ + ('nodejs', '14.15.3', { + 'easyblock': 'ConfigureMake', + 'source_urls': ['http://nodejs.org/dist/v%(version)s/'], + 'sources': ['node-v%(version)s.tar.gz'], + 'start_dir': 'node-v%(version)s', + }), +] + +exts_list = [ + ('ptvsd', '4.3.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'ptvsd-4.3.2.zip'), + ('checksums', [('sha256', '3b05c06018fdbce5943c50fb0baac695b5c11326f9e21a5266c854306bda28ab')]), + ])), + ('pyOpenSSL', '19.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9a24494b2602aaf402be5c9e30a0b82d4a5c67528fe8fb475e3f3bc00dd69507')]), + ('modulename', 'OpenSSL'), + ])), + ('entrypoints', '0.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451')]), + ('use_pip', False), + ])), + ('async_generator', '1.10', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144')]), + ])), + ('nest_asyncio', '1.4.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'eaa09ef1353ebefae19162ad423eef7a12166bcc63866f8bff8f3635353cd9fa')]), + ])), + ('absl-py', '0.10.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'b20f504a7871a580be5268a18fbad48af4203df5d33dbc9272426cb806245a45')]), + ('modulename', 'absl'), + ])), + ('websockify', '0.9.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c35b5b79ebc517d3b784dacfb993be413a93cda5222c6f382443ce29c1a6cada')]), + ])), + ('typing_extensions', '3.7.4.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c')]), + ])), + # General Python packages + ('tornado', '6.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791')]), + ])), + ('bokeh', '2.2.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c4a3f97afe5f525019dd58ee8c4e3d43f53fe1b1ac264ccaae9b02c07b2abc17')]), + ])), + ('nbformat', '5.1.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1d223e64a18bfa7cdf2db2e9ba8a818312fc2a0701d2e910b58df66809385a56')]), + ])), + ('param', '1.9.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '8370d41616e257b8ed2e242ec531e0340b8c954bea414b791fa0ef6235959981')]), + ])), + # Jupyter-core and dependencies + ('alabaster', '0.7.12', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02')]), + ])), + ('Babel', '2.7.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'e86135ae101e31e2c8ec20a4e0c5220f4eed12487d5cf3f78be7e98d3a57fc28')]), + ('modulename', 'babel'), + ])), + ('snowballstemmer', '2.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52')]), + ])), + ('docutils', '0.15.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99')]), + ])), + ('imagesize', '1.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5')]), + ])), + ('sphinxcontrib-websupport', '1.1.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1501befb0fdf1d1c29a800fdbf4ef5dc5369377300ddbdd16d2cd40e54c6eefc')]), + ('modulename', 'sphinxcontrib'), + ])), + ('Sphinx', '1.8.5', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c7658aab75c920288a8cf6f09f244c6cfdae30d82d803ac1634d9f223a80ca08')]), + ('modulename', 'sphinx'), + ])), + ('ipynb', '0.5.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '8d834c777ca3885289938728cc382f081c86a58e92961e86f0aba60c96938ce5')]), + ])), + ('jupyter_core', '4.7.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '79025cb3225efcd36847d0840f3fc672c0abd7afd0de83ba8a1d3837619122b4')]), + ])), + ('retrying', '1.3.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b')]), + ])), + ('plotly', '4.14.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '7d8aaeed392e82fb8e0e48899f2d3d957b12327f9d38cdd5802bc574a8a39d91')]), + ])), + ('tikzplotlib', '0.9.8', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'bf205e74e27e9efefde70d7773675a8432dab600741ac8c0db93daaeb7fc957c')]), + ])), + # Jupyter client + ('jupyter_client', '6.1.11', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '649ca3aca1e28f27d73ef15868a7c7f10d6e70f761514582accec3ca6bb13085')]), + ])), + ('pynvml', '8.0.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c8d4eadc648c7e12a3c9182a9750afd8481b76412f83747bcc01e2aa829cde5d')]), + ])), + # Jupyter notebook and dependencies + ('singledispatch', '3.4.0.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c')]), + ])), + ('ipyparallel', '6.3.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '0a97b276c62db633e9e97a816282bdd166f9df74e28204f0c8fa54b71944cfdc')]), + ])), + ('ipykernel', '5.4.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '697103d218e9a8828025af7986e033c89e0b36e2b6eb84a5bda4739b9a27f3cb')]), + ])), + ('terminado', '0.9.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '89e6d94b19e4bc9dce0ffd908dfaf55cc78a9bf735934e915a4a96f65ac9704c')]), + ('use_pip', False), + ])), + ('bleach', '3.3.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '98b3170739e5e83dd9dc19633f074727ad848cbedb6026708c8ac2d3b697a433')]), + ])), + ('mistune', '0.8.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e')]), + ])), + ('pandocfilters', '1.4.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'bc63fbb50534b4b1f8ebe1860889289e8af94a23bff7445259592df25a3906eb')]), + ])), + ('testpath', '0.4.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '60e0a3261c149755f4399a1fff7d37523179a70fdc3abdf78de9fc2604aeec7e')]), + ('use_pip', False), + ])), + ('nbconvert', '6.0.7', dict(list(local_common_opts.items()) + [ + # !!! nbconvert will try to read from all paths in <jupyter-config-path> the file nbconvert/templates/conf.json + # ensure it has permissions (https://github.com/jupyter/nbconvert/issues/1430) + ('checksums', [('sha256', 'cbbc13a86dfbd4d1b5dee106539de0795b4db156c894c2c5dc382062bbc29002')]), + # 6.0.7 - patch for jupyter_contrib_nbextensions needed: + # https://github.com/ipython-contrib/jupyter_contrib_nbextensions/pull/1532 + ])), + ('Send2Trash', '1.5.0', dict(list(local_common_opts.items()) + [ # req. by widgetsnbextension + ('checksums', [('sha256', '60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2')]), + ('modulename', 'send2trash'), + ])), + ('argon2-cffi', '20.1.0', dict(list(local_common_opts.items()) + [ # req. for notebook >= 6.1 + ('checksums', [('sha256', 'd8029b2d3e4b4cea770e9e5a0104dd8fa185c1724a0f01528ae4826a6d25f97d')]), + ('modulename', 'argon2'), + ])), + ('notebook', '6.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '0464b28e18e7a06cec37e6177546c2322739be07962dd13bf712bcb88361f013')]), + ('patches', ['notebook-6.0.3_jsc.patch']), # allow others to read/write in .ipynb_checkpoints + ])), + ('version_information', '1.0.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '811b9cea4b376aa62a77dc729a937ce8e2844573b8686b5c1840147054fb938d')]), + ])), + ('lesscpy', '0.14.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '7b664f60818a16afa8cc9f1dd6d9b17f944e0ce94e50787d76f81bc7a8648cce')]), + ])), + ('prometheus_client', '0.9.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9da7b32f02439d8c04f7777021c304ed51d9ec180604700c1ba72a4d44dceb03')]), + ])), + ('jupyterthemes', '0.20.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '2a8ebc0c84b212ab99b9f1757fc0582a3f53930d3a75b2492d91a7c8b36ab41e')]), + ])), + # Jupyter Lab and dependencies + ('zipp', '3.4.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb')]), + ])), + ('jupyter-packaging', '0.7.12', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'b140325771881a7df7b7f2d14997b619063fe75ae756b9025852e4346000bbb8')]), + ])), + ('importlib_metadata', '3.4.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d')]), + ])), + ('jupyterlab_launcher', '0.13.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'f880eada0b8b1f524d5951dc6fcae0d13b169897fc8a247d75fb5beadd69c5f0')]), + ])), + ('sphinx_rtd_theme', '0.4.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '728607e34d60456d736cc7991fd236afb828b21b82f956c5ea75f94c8414040a')]), + ])), + ('commonmark', '0.9.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60')]), + ])), + ('recommonmark', '0.6.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '29cd4faeb6c5268c633634f2d69aef9431e0f4d347f90659fd0aab20e541efeb')]), + ])), + ('jupyterlab', local_jlab_version, dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '3be8f8edea173753dd838c1b6d3bbcb6f5c801121f824a477025c1b6a1d33dc6')]), + ('patches', [('401html.patch', 1)]) + ])), + ('json5', '0.8.5', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '124b0f0da1ed2ff3bfe3a3e9b8630abd3c650852465cb52c15ef60b8e82a73b0')]), + ])), + ('jupyterlab_server', '1.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '5431d9dde96659364b7cc877693d5d21e7b80cea7ae3959ecc2b87518e5f5d8c')]), + ])), + ('jupyter_kernel_gateway', '2.4.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '6424a9f118e757ef18e9bed7784ca05ad9e633945df328ac4d8810eadc6f6ccd')]), + ('modulename', 'kernel_gateway'), + ])), + ('nbclient', '0.5.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '0ed6e5700ad18818030a3a5f0f201408c5972d8e38793840cd9339488fd9f7c4')]), + ])), + # Jupyter Widgets and dependencies + ('defusedxml', '0.6.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5')]), + ])), + ('widgetsnbextension', '3.5.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '079f87d87270bce047512400efd70238820751a11d2d8cb137a5a5bdbaf255c7')]), + ])), + ('ipywidgets', '7.5.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'e945f6e02854a74994c596d9db83444a1850c01648f1574adf144fbbabe05c97')]), + ])), + # ('ipyscales', '0.6.0', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', 'f2c42776482081b2771a2789623e1744a4e578f5d51644c1450b53738292b069')]), + # ])), # fails because of PEP 517 + ('ipydatawidgets', '4.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'd9f94828c11e3b40350fb14a02e027f42670a7c372bcb30db18d552dcfab7c01')]), + ])), + ('traittypes', '0.2.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'be6fa26294733e7489822ded4ae25da5b4824a8a7a0e0c2dccfde596e3489bd6')]), + ])), + ('bqplot', '0.12.22', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '3f0eee5e2b03866f729ef295f9f46310dcafa832040064f40995a3e876986855')]), + ])), + ('jupyter_bokeh', '2.0.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'd337306021fb6a8e63556dbe2eaf539a8025aa76d9ba512b18189bfb1f708177')]), + ])), + ('pythreejs', '2.2.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'acceeac346054bcc280bf93f494557e6f5ab404860cfee584d72a6c3dde16463')]), + ])), + ('ipywebrtc', '0.5.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '4db2be7d0bfcbd142b2f9f9e8303b926832a632ed4a3bc5681b319a5f226285a')]), + ])), + ('ipyvolume', '0.6.0a6', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1a71c681dd39b514db966c4812bbbd1347ce082ee7a7bcc53f494e0546bf37ff')]), + ])), + ('branca', '0.3.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '3e762c9bdf40725f3d05ea1fda8fae9b470bfada6474e43a1242c8204a7bb15e')]), + ])), + ('ipyleaflet', '0.13.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c05f138327926bc81f29a629588bd656be5ff76dd8785c1e7eac5445b1d5a432')]), + ])), + ('ipympl', '0.5.8', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '0e2f2e540a2dfea61524b7993fc8552c9236b1aaa3826e1f382c75cb2fa5c382')]), + ])), # respect version lookup table: https://github.com/matplotlib/ipympl + # Jupyter Notebook Extensions + ('jupyter_nbextensions_configurator', '0.4.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'e5e86b5d9d898e1ffb30ebb08e4ad8696999f798fef3ff3262d7b999076e4e83')]), + ])), + ('jupyter_latex_envs', '1.4.6', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '070a31eb2dc488bba983915879a7c2939247bf5c3b669b398bdb36a9b5343872')]), + ('patches', ['jupyter_latex_envs-template_paths.patch']), + # support for nbconvert>=6.x -> https://github.com/jfbercher/jupyter_latex_envs/pull/58 + ('modulename', 'latex_envs'), + ])), + ('jupyter_highlight_selected_word', '0.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9fa740424859a807950ca08d2bfd28a35154cd32dd6d50ac4e0950022adc0e7b')]), + ])), + ('jupyter_contrib_core', '0.3.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'e65bc0e932ff31801003cef160a4665f2812efe26a53801925a634735e9a5794')]), + ])), + ('jupyter_contrib_nbextensions', '0.5.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'eecd28ecc2fc410226c0a3d4932ed2fac4860ccf8d9e9b1b29548835a35b22ab')]), + ('patches', ['jupyter_contrib_nbextensions-template_paths.patch']), + # support for nbconvert>=6.x -> https://github.com/ipython-contrib/jupyter_contrib_nbextensions/pull/1532 + ])), + ('rise', '5.7.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '641db777cb907bf5e6dc053098d7fd213813fa9a946542e52b900eb7095289a6')]), + ])), + ('idna-ssl', '1.1.0', dict(list(local_common_opts.items()) + [ # indirect dep of jupyter-server-proxy + ('checksums', [('sha256', 'a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c')]), + ])), + ('multidict', '4.7.5', dict(list(local_common_opts.items()) + [ # indirect dep of jupyter-server-proxy + ('checksums', [('sha256', 'aee283c49601fa4c13adc64c09c978838a7e812f85377ae130a24d7198c0331e')]), + ])), + ('yarl', '1.6.3', dict(list(local_common_opts.items()) + [ # indirect dep of jupyter-server-proxy + ('checksums', [('sha256', '8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10')]), + ])), + ('async-timeout', '3.0.1', dict(list(local_common_opts.items()) + [ # indirect dep of jupyter-server-proxy + ('checksums', [('sha256', '0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f')]), + ])), + ('aiohttp', '3.6.2', dict(list(local_common_opts.items()) + [ # indirect dep of jupyter-server-proxy + ('checksums', [('sha256', '259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326')]), + ])), + ('simpervisor', '0.3', dict(list(local_common_opts.items()) + [ # indirect dep of jupyter-server-proxy + ('checksums', [('sha256', 'd82e4527ae326747551e4bdfa632ff4ebef275ce721f80886c747adfdbf41c2e')]), + ])), + ('sniffio', '1.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de')]), + ])), + ('anyio', '2.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '8a56e08623dc55955a06719d4ad62de6009bb3f1dd04936e60b2104dd58da484')]), + ])), + ('jupyter_server', '1.1.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'b4b1f8f0c38e1faf418f3ff536cdb6d84dfb477d150abee5f0e65c7fd95fa527')]), + ])), + ('jupyter-server-proxy', '1.5.2', dict(list(local_common_opts.items()) + [ + ('source_urls', ['https://github.com/jupyterhub/jupyter-server-proxy/archive/']), + ('source_tmpl', 'v%(version)s.tar.gz'), + ('checksums', [('sha256', '140bd642c511519ddd2acc5f70e0b46a40bbc673c888dcb3b19981005286853b')]), + ('patches', ['jupyterserverproxy-urlfile.patch']), + ])), + # Jupyter Lab Extensions + ('jupyterlab_github', '2.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1f560a91711b779d08118161af044caff44159e315cb80ae830d3dfbded7bac9')]), + # do not use pypi for download -> we need to patch drive.json + ('source_urls', ['https://github.com/jupyterlab/jupyterlab-github/archive']), + ('source_tmpl', 'v%(version)s.tar.gz'), + ('patches', ['jupyterlab_github-%(version)s_jsc.patch']), + ])), + ('jupyterlab-gitlab', '2.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '31d3fbd9b139aca7704dd13967ac22c81e372b50c4db730f342ab7800db7a5c6')]), + # do not use pypi for download -> we need to patch drive.json + ('source_urls', ['https://gitlab.com/beenje/jupyterlab-gitlab/-/archive/%(version)s']), + ('source_tmpl', 'jupyterlab-gitlab-%(version)s.tar.gz'), + ('patches', ['jupyterlab-gitlab-%(version)s_jsc.patch']), + ])), + ('jupyterlab-quickopen', '0.5.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('90cba3a7e6ff8d2b3eaf2594079c25f82e2c158d2ec63ebd951e4042a7445f8e')]), + ])), + ('zstandard', '0.12.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'a110fb3ad1db344fbb563942d314ec5f0f3bdfd6753ec6331dded03ad6c2affb')]), + ])), + # ('jupyterlab_hdf', '0.5.1', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', '9397fed0487e5811d1147851c3d7781fc9a53eb9c7b4471eeebf555f38ddc02e')]), + # ])), + # ('elyra-server', '1.5.3', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', '36dd386862252636bd1ff9af657fbb2c51d59a84c99332be9d749c64eed3410f')]), + # ])), # req. kfp, kfp-notebook, minio, rfc3986-validator + # ('elyra-pipeline-editor-extension', '1.5.3', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', 'da134c224e968a1df643f74b99263a6ee21a557bda5615d779474e77a1f7e90c')]), + # ])), + # https://blog.kitware.com/itk-is-on-pypi-pip-install-itk-is-here/ + ('itk_core', '5.1.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'itk_core-5.1.2-cp38-cp38-manylinux1_x86_64.whl'), + ('checksums', [('sha256', '1f0254f0f134b709e6df3601dc38ccc45c2d5d5576fc10e1a0313d1fe8aefa84')]), + ('unpack_sources', False), + ('modulename', 'itk'), + ])), + ('itk_filtering', '5.1.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'itk_filtering-5.1.2-cp38-cp38-manylinux1_x86_64.whl'), + ('checksums', [('sha256', 'f4a1256c8c684329780b9f4326fb571023af1d96fbda7cb7b513b4a395a9cd42')]), + ('unpack_sources', False), + ('modulename', 'itk'), + ])), + ('itk_segmentation', '5.1.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'itk_segmentation-5.1.2-cp38-cp38-manylinux1_x86_64.whl'), + ('checksums', [('sha256', 'f81ba4881f7802eb5b911c4e1eac4706220647196ebda68477318630542db226')]), + ('unpack_sources', False), + ('modulename', 'itk'), + ])), + ('itk_numerics', '5.1.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'itk_numerics-5.1.2-cp38-cp38-manylinux1_x86_64.whl'), + ('checksums', [('sha256', '6ac84a6386cd51692ed9605b6daefcc6230ec976f93161c9c5d89cfdfe042eba')]), + ('unpack_sources', False), + ('modulename', 'itk'), + ])), + ('itk_registration', '5.1.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'itk_registration-5.1.2-cp38-cp38-manylinux1_x86_64.whl'), + ('checksums', [('sha256', 'd25b578ffb859f07cbad6987d1adb507e357d91f82863faeae337d8645b9d29d')]), + ('unpack_sources', False), + ('modulename', 'itk'), + ])), + ('itk_io', '5.1.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'itk_io-5.1.2-cp38-cp38-manylinux1_x86_64.whl'), + ('checksums', [('sha256', '6ecc528ce4ae42b6d14c972d51055856f130a13474463ba4bf187ed2afdb04b1')]), + ('unpack_sources', False), + ('modulename', 'itk'), + ])), + ('itk_meshtopolydata', '0.6.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'itk_meshtopolydata-0.6.2-cp38-cp38-manylinux1_x86_64.whl'), + ('checksums', [('sha256', '486e418808c27ccc76619737219fa57fcd1de2da5fcd0325ee8c4395965deb39')]), + ('unpack_sources', False), + ('modulename', 'itk'), + ])), + ('pyct', '0.4.6', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'df7b2d29f874cabdbc22e4f8cba2ceb895c48aa33da4e0fe679e89873e0a4c6e')]), + ])), + ('colorcet', '2.0.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '514813790a74b578c3eaff76b2102274c2ba8b0239c9504586df685223007dee')]), + ])), + ('itkwidgets', '0.32.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '11ee93007cf354405e01bf9a28fb1eb2fb0a5d139e1cdded1a07b47f7ee76972')]), + ])), + ('ujson', '3.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'abb1996ba1c1d2faf5b1e38efa97da7f64e5373a31f705b96fe0587f5f778db4')]), + ])), + # ('jupyterlab_iframe', '0.2.2', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', '7c26cddc5f29f0b5ac6ba4707ce811f9787282549d22098b691bcdcc6692238c')]), + # ('use_pip', False), + # ])), + ('python-dotenv', '0.10.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'f157d71d5fec9d4bd5f51c82746b6344dffa680ee85217c123f4a0c8117c4544')]), + ('modulename', 'dotenv'), + ])), + # ('ipyauth', '0.2.5', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', '189db0e9fd48cf52f333ef8ac1a71b9e3a9eec6561f5085e3d7239ca2588ba87')]), + # ])), + ('jupyterlab_latex', '2.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '722558144e6ce71abe4fba0fb01c13c37271fa2497881bfebe9b6422d1fc795b')]), + ])), + # ('jupyterlab_slurm', '2.0.0', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', '87ada82e7746745bcc47d19f3caf54cc18798b058aedcd5d1005e19b784c2d4f')]), + # ])), + ('jupyterlmod', '2.0.2', dict(list(local_common_opts.items()) + [ + ('source_urls', ['https://github.com/cmd-ntrf/jupyter-lmod/archive/']), + ('source_tmpl', '%(version)s.tar.gz'), + ('checksums', [('sha256', 'f547432afb30cb87c8dabf78fd4cc4c35ff4b6d2aafbae19c249b7d596015c6a')]), + ('patches', [ + 'jupyterlmod-urlfile.patch', + 'jupyterlmod-packagejson.patch', + ]), + ])), + ('nbresuse', '0.3.6', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '5ba19dd0b08ff19470aeb34cda2f07276a3fb1cd750bc53f3a3e06322664e98e')]), + ])), + ('colorama', '0.4.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d')]), + ])), + ('nbdime', '2.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '4e3efdcfda31c3074cb565cd8e76e2e5421b1c4560c3a00c56f8679dd15590e5')]), + ])), + ('smmap2', '2.0.5', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '29a9ffa0497e7f2be94ca0ed1ca1aa3cd4cf25a1f6b4f5f87f74b46ed91d609a')]), + ('modulename', 'smmap'), + ])), + ('gitdb2', '2.0.6', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1b6df1433567a51a4a9c1a5a0de977aa351a405cc56d7d35f3388bad1f630350')]), + ('modulename', 'gitdb'), + ])), + ('GitPython', '3.0.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '3237caca1139d0a7aa072f6735f5fd2520de52195e0fa1d8b83a9b212a2498b2')]), + ('modulename', 'git'), + ])), + ('jupyterlab_git', '0.23.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '20a4954d8d1b1eb6f9111cd15d6a598bd7ff72b08797cf5e86c5a55827c85a1d')]), + ])), + ('sidecar', '0.4.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '3e79de269ddd2c0eff1cb26025cb9f434cf9914b777cf03eeab8347f6de7160e')]), + ])), + ('pycodestyle', '2.6.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e')]), + ])), + ('autopep8', '1.4.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '4d8eec30cc81bc5617dbf1218201d770dc35629363547f17577c61683ccfb3ee')]), + ])), + ('yapf', '0.28.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '6f94b6a176a7c114cfa6bad86d40f259bbe0f10cf2fa7f2f4b3596fc5802a41b')]), + ])), + ('isort', '4.3.21', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1')]), + ])), + ('pathspec', '0.6.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'e285ccc8b0785beadd4c18e5708b12bb8fcf529a1e61215b3feff1d1e559ea5c')]), + ])), + ('typed_ast', '1.4.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a')]), + ])), + ('regex', '2019.11.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '720e34a539a76a1fedcebe4397290604cc2bdf6f81eca44adb9fb2ea071c0c69')]), + ])), + ('black', '19.3b0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c')]), + ])), + ('jupyterlab_code_formatter', '1.3.8', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '7c415caff528e55027e82c96b60dcab0537aa5cda168997f03a4964c51e2b7b5')]), + ])), + ############### + # extras + ('mccabe', '0.6.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f')]), + ])), + ('pyflakes', '2.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8')]), + ])), + ('flake8', '3.8.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'f04b9fcbac03b0a3e58c0ab3a0ecc462e023a9faf046d57794184028123aa208')]), + ])), + ('pydocstyle', '5.0.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'f4f5d210610c2d153fae39093d44224c17429e2ad7da12a8b419aba5c2f614b5')]), + ])), + ('rope', '0.16.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'd2830142c2e046f5fc26a022fe680675b6f48f81c7fc1f03a950706e746e9dfe')]), + ])), + # base for python language server + ('python-jsonrpc-server', '0.4.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '62c543e541f101ec5b57dc654efc212d2c2e3ea47ff6f54b2e7dcb36ecf20595')]), + ('modulename', 'pyls_jsonrpc'), + ])), + # test + ('versioneer', '0.18', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'ead1f78168150011189521b479d3a0dd2f55c94f5b07747b484fd693c3fbf335')]), + ])), + ('lazy-object-proxy', '1.4.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0')]), + ])), + ('wrapt', '1.12.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7')]), + ])), + ('astroid', '2.4.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '2f4078c2a41bf377eea06d71c9d2ba4eb8f6b1af2135bec27bbbb7d8f12bb703')]), + ])), + ('typed_ast', '1.4.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a')]), + ])), + ('pylint', '2.5.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '7dd78437f2d8d019717dbf287772d0b2dbdfd13fc016aa7faa08d67bccc46adc')]), + ])), + ('pytest-cov', '2.10.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '47bd0ce14056fdd79f93e1713f88fad7bdcc583dcd7783da86ef2f085a0bb88e')]), + ])), + ('pytest-xprocess', '0.13.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '779aeca517cd9c996d1544bdc510cb3cff40c48136d94bbce6148e27f30a93ff')]), + ])), + # python language server + ('python-language-server', '0.36.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9984c84a67ee2c5102c8e703215f407fcfa5e62b0ae86c9572d0ada8c4b417b0')]), + ('modulename', 'pyls'), + ])), + ('jupyter-lsp', '0.9.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '73b5cb47fbe672bee6c02ddc4f2fbe728dc3bff589b5741835ebb80a862163af')]), + ])), + + #################### + # Jupyter Hub + # ('SQLAlchemy', '1.3.10', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', '0f0768b5db594517e1f5e1572c73d14cf295140756431270d89496dc13d5e46c')]), + # ])), # part of Python module in version 1.3.1 + # ('python-oauth2', '1.1.1', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', 'd7a8544927ac18215ba5317edd8f640a5f1f0593921bcf3ce862178312c8c9a4')]), + # ('modulename', 'oauth2'), + # ])), # part of Python module + ('pamela', '1.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '65c9389bef7d1bb0b168813b6be21964df32016923aac7515bdf05366acbab6c')]), + ])), + ('certipy', '0.1.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '695704b7716b033375c9a1324d0d30f27110a28895c40151a90ec07ff1032859')]), + ])), + ('oauthlib', '3.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'bee41cc35fcca6e988463cacc3bcb8a96224f470ca547e697b604cc697b2f889')]), + ])), + ('ruamel.yaml', '0.16.5', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '412a6f5cfdc0525dee6a27c08f5415c7fd832a7afcb7a0ed7319628aed23d408')]), + ])), + ('ruamel.yaml.clib', '0.1.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'cee86ecc893a6a8ecaa7c6a9c2d06f75f614176210d78a5f155f8e78d6989509')]), + ('modulename', 'ruamel.yaml'), + ])), + ('python-json-logger', '0.1.11', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'b7a31162f2a01965a5efb94453ce69230ed208468b0bbc7fdfc56e6d8df2e281')]), + ('modulename', 'pythonjsonlogger'), + ])), + ('jupyter_telemetry', '0.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '445c613ae3df70d255fe3de202f936bba8b77b4055c43207edf22468ac875314')]), + ])), + ('jupyterhub', '1.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '852a70225a03abd631b36a207f3ffdf69326a0db4cef539825fde39ec1b713d7')]), + ('patches', ['jupyterhub-1.1.0_logoutcookie-2.0.patch']), + # copy 401.html -> <jupyter-install-dir>/share/jupyter/lab/static/ + ])), + ('appmode', '0.6.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'deac99adaa95e28fa8a56c072be653603cffa49dc06469701ac9c014b690e7c4')]), + ])), + ('HeapDict', '1.0.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '8495f57b3e03d8e46d5f1b2cc62ca881aca392fd5cc048dc0aa2e1a6d23ecdb6')]), + ])), + ('zict', '2.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '8e2969797627c8a663575c2fc6fcb53a05e37cdb83ee65f341fc6e0c3d0ced16')]), + ])), + ('tblib', '1.7.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '059bd77306ea7b419d4f76016aef6d7027cc8a0785579b5aad198803435f882c')]), + ])), + ('sortedcontainers', '2.3.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '59cc937650cf60d677c16775597c89a960658a09cf7c1a668f86e1e4464b10a1')]), + ])), + ('msgpack', '1.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9534d5cc480d4aff720233411a1f765be90885750b07df772380b34c10ecb5c0')]), + ])), + ('dask', '2.30.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'a1669022e25de99b227c3d83da4801f032415962dac431099bf0534648e41a54')]), + ])), + ('cloudpickle', '1.6.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9bc994f9e9447593bd0a45371f0e7ac7333710fcf64a4eb9834bf149f4ef2f32')]), + ])), + ('distributed', '2.30.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1421d3b84a0885aeb2c4bdc9e8896729c0f053a9375596c9de8864e055e2ac8e')]), + ])), + ('dask-jobqueue', '0.7.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1767f4146b2663d9d2eaef62b882a86e1df0bccdb8ae68ae3e5e546aa6796d35')]), + ])), + ('dask_labextension', '3.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c613f5c76b8fce4fae167eeab3377e0706e5045a27da1200b3b173025a94d94b')]), + ])), + ('Automat', '0.8.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '269a09dfb063a3b078983f4976d83f0a0d3e6e7aaf8e27d8df1095e09dc4a484')]), + ])), + ('PyHamcrest', '1.9.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '8ffaa0a53da57e89de14ced7185ac746227a8894dbd5a3c718bf05ddbd1d56cd')]), + ('modulename', 'hamcrest'), + ])), + ('pyasn1-modules', '0.2.8', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e')]), + ])), + ('service_identity', '18.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '0858a54aabc5b459d1aafa8a518ed2081a285087f349fe3e55197989232e2e2d')]), + ])), + ('Twisted', '19.7.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'd5db93026568f60cacdc0615fcd21d46f694a6bfad0ef3ff53cde2b4bb85a39d')]), + ('source_tmpl', '%(name)s-%(version)s.tar.bz2'), + ])), + ('autobahn', '19.10.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '734385b00547448b3f30a752cbfd2900d15924d77dc4a1699b8bce1ea8899f39')]), + ])), + ('constantly', '15.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35')]), + ])), + ('hyperlink', '19.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '4288e34705da077fada1111a24a0aa08bb1e76699c9ce49876af722441845654')]), + ])), + ('incremental', '17.5.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3')]), + ])), + ('txaio', '18.8.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '67e360ac73b12c52058219bb5f8b3ed4105d2636707a36a7cdafb56fe06db7fe')]), + ])), + ('zope.interface', '4.7.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'fd1101bd3fcb4f4cf3485bb20d6cb0b56909b94d3bd2a53a6cb9d381c3da3365')]), + ])), + ('wslink', '0.1.13', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '6983114e978717a2681815b1ef4b8a0fa2c80c89c6ed09b9554a36c5869cf935')]), + ])), + ('jupyterlab_pygments', '0.1.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'cfcda0873626150932f438eccf0f8bf22bfa92345b814890ab360d666b254146')]), + ])), + # ('jupyterlab-nvdashboard', '0.4.0', dict(list(local_common_opts.items()) + [ + # # throughs too many errors if nvtools or driver are not installed + # ('checksums', [('sha256', 'ff12f20076e8cb52ea3319ccf148458ba6230611b52b835b0eeea10ba37f7fe1')]), + # ])), + ('ipyvue', '1.5.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'e8549a7ac7dc45948a5f2735e17f97622313c7fea24ea3c1bd4a5ebf02bf5638')]), + ])), + ('ipyvuetify', '1.6.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'd0cfa23ae5a012b0b4f1772a2b2c472f2cc705e9357e16fbe74bf247d2d979f1')]), + ])), + ('voila', '0.2.6', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'e4b20c81e61f35b59958070e26d2843eb0aaaa25855b180e06e85b59f6dec02d')]), + ])), + ('voila-material', '0.4.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '0827a27f0f23ca87bd8f565c4c227c754516d2a120ffce0f7ab1ee12fdec959f')]), + ('modulename', 'voila'), # fake module name to trick the sanity check + ])), + ('voila-gridstack', '0.0.12', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '7c73e4373abc953cb16f708eafe6b09b11ecae7f130c2db233e184907894fdae')]), + ('modulename', 'voila'), + ])), + ('voila-vuetify', '0.5.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '522f4ec91eb3912a21215b6b04ad58070d1675809d7d4289ca8e42b577fde100')]), + ('modulename', 'voila'), + ])), + ('pydicom', '1.4.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9488495a9f3e202d1219f7cb165aee0de31efd512d938c0226d34147ce860391')]), + ])), + ('dicom_upload', '0.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'd03f309bbae2094d3db75ffaa9753cca5982d2096ec55720a1f54343cc4a6877')]), + ])), + ('jsfileupload', '0.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '245cd74a3c2ed4356df9a33d0072d8ab295b60b6fdfd69c6795396d455fc8a77')]), + ])), + ('pvlink', '0.3.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'a2d5f2c204e0e779a5b865742019b4646b8592d76de87cac724dc84f64eaf80f')]), + ])), + ('textwrap3', '0.9.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'textwrap3-0.9.2.zip'), + ('checksums', [('sha256', '5008eeebdb236f6303dcd68f18b856d355f6197511d952ba74bc75e40e0c3414')]), + ('use_pip', True), + ])), + ('ansiwrap', '0.8.4', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'ansiwrap-0.8.4.zip'), + ('checksums', [('sha256', 'ca0c740734cde59bf919f8ff2c386f74f9a369818cdc60efe94893d01ea8d9b7')]), + ])), + ('backports.weakref', '1.0.post1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'bc4170a29915f8b22c9e7c4939701859650f2eb84184aee80da329ac0b9825c2')]), + ])), + ('backports.tempfile', '1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1c648c452e8770d759bdc5a5e2431209be70d25484e1be24876cf2168722c762')]), + ])), + ('tqdm', '4.56.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'fe3d08dd00a526850568d542ff9de9bbc2a09a791da3c334f3213d8d0bbbca65')]), + ])), + ('tenacity', '6.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '72f397c2bb1887e048726603f3f629ea16f88cb3e61e4ed3c57e98582b8e3571')]), + ])), + ('papermill', '2.2.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1c452b1c5a9ab52b94c99d8b7705ae7173f6aa88a3d28a5d30cffba48a46f5b6')]), + ])), + ('pyviz_comms', '0.7.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '712df4cca33dda351de754742b24361eee8e4b7c1cfb0e24f50dcb802fa25624')]), + ])), + ('Markdown', '3.2.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1fafe3f1ecabfb514a5285fca634a53c1b32a81cb0feb154264d55bf2ff22c17')]), + ('modulename', 'markdown'), + ])), + ('panel', '0.9.5', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '53340615f30f67f3182793695ebe52bf25e7bbb0751aba6f29763244350d0f42')]), + ])), + ('holoviews', '1.13.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'cf2dd426cdc08bf2ca669268ca0432634574429e5b143314ee06ad88c5382802')]), + ])), + # PythonPackages for Tutorials + ('patsy', '0.5.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'f115cec4201e1465cd58b9866b0b0e7b941caafec129869057405bfe5b5e3991')]), + ])), + ('statsmodels', '0.10.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9cd2194c6642a8754e85f9a6e6912cdf996bebf6ff715d3cc67f65dadfd37cc9')]), + ])), + ('cftime', '1.2.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'ab5d5076f7d3e699758a244ada7c66da96bae36e22b9e351ce0ececc36f0a57f')]), + ])), + ('vega_datasets', '0.8.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'db8883dab72b6f414e1fafdbf1e8db7543bba6ed77912a4e0c197d74fcfa1c20')]), + ])), + ('Theano', '1.0.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '35c9bbef56b61ffa299265a42a4e8f8cb5a07b2997dabaef0f8830b397086913')]), + ('modulename', 'theano'), + ])), + ('altair', '3.3.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '9f7c521239ac5a207c3cffc29c5bdde0854fff0dec0b5f91f086ba8e5f1de8a9')]), + ])), + ('cssselect', '1.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'f95f8dedd925fd8f54edb3d2dfb44c190d9d18512377d3c1e2388d16126879bc')]), + ])), + ('smopy', '0.0.7', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '578b5bc2502176d210f176ab94e77974f43b32c95cd0768fb817ea2499199592')]), + ])), + ('memory_profiler', '0.55.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '5fa47b274c929dd2cbcd9190afb62fec110701251d2ac2d301caaf545c81afc1')]), + ])), + ('line_profiler', '3.1.0', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'line_profiler-3.1.0-cp38-cp38-manylinux1_x86_64.whl'), + ('checksums', [('sha256', 'a66e089e6d98ab8a70b5f89c0367c6780abad0f0b1d624dbe5edd8f0083986c7')]), + ('unpack_sources', False), # whl package instead of tar.gz because building with skbuild->cmake fails + ])), + ('xarray', '0.16.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '38e8439d6c91bcd5b7c0fca349daf8e0643ac68850c987262d53526e9d7d01e4')]), + ])), + ('arviz', '0.10.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'dc1f08ce02459989dd4f41fa6012e736cf2ba00ee44b29bebe0a451c58a68e42')]), + ])), + ('pymc3', '3.8', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1bb2915e4a29877c681ead13932b0b7d276f7f496e9c3f09ba96b977c99caf00')]), + ])), + ('numexpr', '2.7.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'b0d239d9827e1bcee08344fd05835823bc60aff97232e35a928214d03ff802b1')]), + ])), + ('ipythonblocks', '1.9.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'ba923cb7a003bddee755b5a7ac9e046ffc093a04b0bdede8a0a51ef900aed0ba')]), + ])), + ('pydub', '0.23.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'c362fa02da1eebd1d08bd47aa9b0102582dff7ca2269dbe9e043d228a0c1ea93')]), + ])), + ('multipledispatch', '0.6.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'a7ab1451fd0bf9b92cab3edbd7b205622fb767aeefb4fb536c2e3de9e0a38bea')]), + ])), + ('partd', '1.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '6e258bf0810701407ad1410d63d1a15cfd7b773fd9efe555dac6bb82cc8832b0')]), + ])), + ('locket', '0.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1fee63c1153db602b50154684f5725564e63a0f6d09366a1cb13dffcec179fb4')]), + ])), + ('fsspec', '0.6.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'ffd7cd5ac32f36698097c3d78c2c433d4c12f7e4bce3a3a4036fd3491188046d')]), + ])), + ('datashape', '0.5.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '2356ea690c3cf003c1468a243a9063144235de45b080b3652de4f3d44e57d783')]), + ])), + ('datashader', '0.11.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'b1f80415f72f92ccb660aaea7b2881ddd35d07254f7c44101709d42e819d6be6')]), + ])), + ('selenium', '3.141.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'deaf32b60ad91a4611b98d8002757f29e6f2c2d5fcaf202e1c9ad06d6772300d')]), + ])), + ('graphviz', '0.13.2', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'graphviz-0.13.2.zip'), + ('checksums', [('sha256', '60acbeee346e8c14555821eab57dbf68a169e6c10bce40e83c1bf44f63a62a01')]), + ])), + ('vincent', '0.4.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '5765bcd360140d2304e52728ad1d4382f3f919ea259a13932828680f2d84fcd3')]), + ])), + ('tailer', '0.4.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '78d60f23a1b8a2d32f400b3c8c06b01142ac7841b75d8a1efcb33515877ba531')]), + ])), + # Dash + ('Flask-Compress', '1.4.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '468693f4ddd11ac6a41bca4eb5f94b071b763256d54136f77957cfee635badb3')]), + ])), + ('hiredis', '1.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132')]), + ])), + ('redis', '3.5.3', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2')]), + ])), + ('Flask-Caching', '1.9.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'a0356ad868b1d8ec2d0e675a6fe891c41303128f8904d5d79e180d8b3f952aff')]), + ])), + ('dash', '1.16.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'fdfe2a16c4041c7769e06e4e0eaaeb65cfd8351797ed4b37efe001384637b6c7')]), + ])), + ('dash_renderer', '1.8.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '736f8e0dcce244699457b54a2ee262a04baf389db1a8f54e98c949bb3e7e487f')]), + ])), + ('dash_core_components', '1.12.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '803b54d01ca48b90f3fc1652f7be9f818ed2882da8975a51b99fc2d77dd2727e')]), + ])), + ('dash_html_components', '1.1.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '2c662e640528c890aaa0fa23d48e51c4d13ce69a97841d856ddcaaf2c6a47be3')]), + ])), + ('dash_table', '4.10.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1aa02180faef13434364286b60404d26164d1ce2779c765c9c52e6935991a4e9')]), + ])), + ('dash-bootstrap-components', '0.10.5', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '40500e692f59648dbc024b9e921a1e1410ee0bc97cfa963990e54e42523679b4')]), + ])), + ('dash_daq', '0.5.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'a1d85b6799f7b885652fbc44aebdb58c41254616a8d350b943beeb42ade4256a')]), + ])), + ('dash_player', '0.0.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '46114910b497f35f1aa496ed8b9ff1457d07c96171227961b671ba4164c537a0')]), + ])), + ('dash_canvas', '0.1.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '72fcfb37e1c0f68c08f6fa6cf0b5be67ecc66fcfb5253231ffc450957b640b31')]), + ])), + ('dash_bio', '0.4.8', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'a6f480b060488ab9be26129562a7bcb491ef40ae0ffae46f499fb7d5997de06c')]), + ])), + ('dash_cytoscape', '0.2.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '0669c79c197e4b150a5db7a278d1c7acebc947f3f5cbad5274835ebb44f712cd')]), + ])), + ('ansi2html', '1.5.2', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '96ae85ae7b26b7da674d87de2870ba4d1964bca733ae4614587080b6358c3ba9')]), + ])), + ('jupyter-dash', '0.4.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'eb5eb42ec8cb5e3388d41d895b5ef6e66812e3345cb271cc374318a1a589e687')]), + ])), + # more + ('fastcore', '1.3.6', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '550c201f6a0f7001994898260588e3df310968165c43ecc4fa3062dd6eee5956')]), + ])), + ('fastscript', '1.0.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '67d2315a508ffd0499af590fffaa63d276ce6eaff73ffbd60eb3315ba38d08fa')]), + ])), + # ('nbdev', '1.1.5', dict(list(local_common_opts.items()) + [ + # # nbdev < 2 needs nbconvert < 6, will change with nbdev >= 2 + # ('checksums', [('sha256', '0ce349625514e2865bbc023db597d791c45b572a7bbc8a49b320a327b9e7b721')]), + # ])), + ('PyJWT', '1.7.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96')]), + ('modulename', 'jwt'), + ])), + ('pyunicore', '0.9.5', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '10c091812d90e86f1371fe1373dada86be6afac41da44b762f0f5f86f9ddc3ae')]), + ])), + + # misc + # ('rpy2', '3.2.4', dict(list(local_common_opts.items()) + [ + # ('checksums', [('sha256', '3daf1a4b28c4e354ef989093f03b066908bf6e5082a6f4af72cc3fd928a28dc6')]), + # ])), +] + +local_jupyter_config_path = 'etc/jupyter' +local_jupyter_path = 'share/jupyter' +local_jupyterlab_dir = 'share/jupyter/lab' + +modextrapaths = { + 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], + # search path to find installable data files, such as kernelspecs and notebook extensions + 'JUPYTER_PATH': [local_jupyter_path], + 'JUPYTERLAB_DIR': [local_jupyterlab_dir], + # 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', + 'MKL_THREADING_LAYER': 'GNU', # https://github.com/Theano/Theano/issues/6568 +} + +# Ensure that the user-specific $HOME/.local/share/jupyter is fist 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 = """ +prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter")) +prepend_path("JUPYTER_DATA_DIR", 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', + + 'echo "#!/bin/bash" > %(builddir)s/env.sh', + 'echo "source %(installdir)s/bin/activate" >> %(builddir)s/env.sh', + ( + 'echo "export PYTHONPATH=' + '%(installdir)s/lib/python3.8/site-packages:${EBROOTPYTHON}/lib/python3.8/site-packages:${PYTHONPATH}"' + ' >> %(builddir)s/env.sh' + ), + # Jupyter Paths - http://jupyter.readthedocs.io/en/latest/projects/jupyter-directories.html + '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', + + # NodeJS packages + 'source %(builddir)s/env.sh && npm install -g phantomjs-prebuilt@2.1.16', # req. export_png/export_svg of bokeh + + # Jupyter Notebook Extensions + 'source %(builddir)s/env.sh && jupyter contrib nbextension install --user', + 'source %(builddir)s/env.sh && jupyter nbextensions_configurator enable --user', + 'source %(builddir)s/env.sh && jupyter nbextension enable codefolding/main --user', + + ('source %(builddir)s/env.sh && ' + ' jupyter nbextension install widgetsnbextension --py --nbextensions=${JUPYTER_PATH}/nbextensions'), + 'source %(builddir)s/env.sh && jupyter nbextension enable widgetsnbextension --py --user', + + 'source %(builddir)s/env.sh && jupyter nbextension enable ipyvuetify --py --user', + + 'source %(builddir)s/env.sh && jupyter nbextension install rise --py --nbextensions=${JUPYTER_PATH}/nbextensions', + 'source %(builddir)s/env.sh && jupyter nbextension enable rise --py --user', + + 'source %(builddir)s/env.sh && jupyter nbextension enable appmode --py --user', + 'source %(builddir)s/env.sh && jupyter serverextension enable appmode --py', + + # Jupyter Notebook Extensions + 'source %(builddir)s/env.sh && jupyter labextension install @jupyter-widgets/jupyterlab-manager@2.0.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install @jupyter-widgets/jupyterlab-sidecar@0.5.0 --no-build', + + # 'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/server-proxy@2.1.1 --no-build', + ('source %(builddir)s/env.sh && ' + ' cd %(builddir)s/jupyterserverproxy/jupyter-server-proxy-1.5.2/jupyterlab-server-proxy/ && ' + ' npm install && ' # install npm package dependencies incurrent directory + ' npm run build && ' # optional build step if using TypeScript, babel, etc. + ' jupyter labextension install --no-build'), # install the current directory as an extension' + # 'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/github@2.0.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/latex@2.0.1 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/git@0.23.3 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/toc@4.0.0 --no-build', + + 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-datawidgets@6.3.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-plotly@4.14.3 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-gitlab@2.0.0 --no-build', + # 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab_iframe@0.2.2 --no-build', + + # 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-lmod@0.8.1 --no-build', + # this might interfer with Xpra-icon: https://github.com/cmd-ntrf/jupyter-lmod/issues/30 + ('source %(builddir)s/env.sh && ' + ' cd %(builddir)s/jupyterlmod/jupyter-lmod-2.0.2/jupyterlab/ && ' + ' npm install && ' # install npm package dependencies incurrent directory + ' npm run build && ' # optional build step if using TypeScript, babel, etc. + ' jupyter labextension install --no-build'), # install the current directory as an extension + + # 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-nvdashboard@0.4.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-dash@0.4.0 --no-build', + + 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-topbar-extension@0.5.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-system-monitor@0.6.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-theme-toggle@0.5.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-control@1.1.1 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-favorites@2.0.0 --no-build', + # 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-slurm@2.0.0 --no-build', + + # store default in ../share/jupyter/lab/schemas/jupyterlab-favorites/favorites.json + # 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-tour@2.1.1 --no-build', + # tour-state on/off is saved in workspace-file in ~/.jupyter/lab/workspaces/ + + # respect the version lookup table at https://github.com/matplotlib/ipympl + 'source %(builddir)s/env.sh && jupyter labextension install jupyter-matplotlib@0.7.4 --no-build', + + 'source %(builddir)s/env.sh && jupyter labextension install jupyter-leaflet@0.13.3 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jupyter-threejs@2.2.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jupyter-vuetify@1.6.1 --no-build', + + 'source %(builddir)s/env.sh && jupyter labextension install nbdime-jupyterlab@2.0.1 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install dask-labextension@3.0.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install ipyvolume@0.6.0-alpha.5 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install plotlywidget@4.14.3 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install bqplot@0.5.22 --no-build', + + 'source %(builddir)s/env.sh && jupyter labextension install dicom-upload@0.2.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install jsfileupload@0.2.0 --no-build', + + # 'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/hdf5@0.5.1 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install @ijmbarr/jupyterlab_spellchecker@0.2.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install @pyviz/jupyterlab_pyviz@1.0.4 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install @bokeh/jupyter_bokeh@2.0.4 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install @jupyter-voila/jupyterlab-preview@1.1.0 --no-build', + + 'source %(builddir)s/env.sh && jupyter labextension install @parente/jupyterlab-quickopen@0.5.0 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install @ryantam626/jupyterlab_code_formatter@1.3.8 --no-build', + ('source %(builddir)s/env.sh && ' + ' jupyter labextension install @krassowski/jupyterlab_go_to_definition@1.0.0 --no-build'), + 'source %(builddir)s/env.sh && jupyter labextension install @krassowski/jupyterlab-lsp@2.1.3 --no-build', + + 'source %(builddir)s/env.sh && jupyter labextension install pvlink@0.3.1 --no-build', + 'source %(builddir)s/env.sh && jupyter labextension install itkwidgets@0.32.0 --no-build', + + # 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 + + # jupyterlab server extensions + 'source %(builddir)s/env.sh && jupyter serverextension enable jupyter_server_proxy --py', + 'source %(builddir)s/env.sh && jupyter serverextension enable jupyterlab_code_formatter --py', + # 'source %(builddir)s/env.sh && jupyter serverextension enable jupyterlab_sql --py', + # 'source %(builddir)s/env.sh && jupyter serverextension enable jupyterlab_iframe --py', + 'source %(builddir)s/env.sh && jupyter serverextension enable jupyterlab_git --py', + 'source %(builddir)s/env.sh && jupyter serverextension enable jupyter_lsp --py', + 'source %(builddir)s/env.sh && jupyter serverextension enable dask_labextension --py', + + # configure jupyterlab extensions + + # Send2Trash + # disable + ( + '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n' + 'c.FileContentsManager.delete_to_trash = False\n' + 'EOF' + ), + + # GitLab-extension + # for security reasons access-token must be set in the server extension: + ( + '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n' + '# no username+password needed, if repo is public or we have the token for a specific URL\n' + '# c.GitLabConfig.access_token = "<API-TOKEN>"\n' + '# c.GitLabConfig.allow_client_side_access_token = False\n' + 'c.GitLabConfig.url = "https://gitlab.version.fz-juelich.de"\n' + 'c.GitLabConfig.validate_cert = True\n' + 'EOF' + ), + + # GitHub-extension + # for security reasons access-token must be set in the server extension: + ( + '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n' + '# no username+password needed, if repo is public or we have the token for a specific URL\n' + '# c.GitHubConfig.access_token = "<API-TOKEN>"\n' + '# c.GitHubConfig.allow_client_side_access_token = False\n' + 'c.GitHubConfig.url = "https://github.com"\n' + 'c.GitHubConfig.validate_cert = True\n' + 'EOF' + ), + + # iframe-extension + ( + '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n' + '# c.JupyterLabIFrame.iframes = [\'list\', \'of\', \'sites\']\n' + 'c.JupyterLabIFrame.welcome = "http://www.fz-juelich.de/jsc"\n' + 'EOF' + ), + + # define .ipynb_checkpoints permissions + ( + '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n' + 'c.FileCheckpoints.checkpoint_permissions = 0o664\n' + 'c.FileCheckpoints.restore_permissions = 0o644\n' + 'c.FileCheckpoints.checkpoint_dir_umask = 0o002\n' + 'EOF' + ), + + # modify the installation files, which would be overwritten if done before (must be last commands to run) + ( + 'cp %(builddir)s/jupyterlabgitlab/jupyterlab-gitlab-2.0.0/schema/drive.json' + ' %(installdir)s/share/jupyter/lab/schemas/jupyterlab-gitlab/drive.json' + ), + + # Add the overrides file + ( + '{ cat > %(builddir)s/file_jupyter-overrides_jsc.patch; } << \'EOF\'\n' + 'diff -Naur share.orig/jupyter/lab/settings/overrides.json share/jupyter/lab/settings/overrides.json\n' + '--- share.orig/jupyter/lab/settings/overrides.json 1970-01-01 01:00:00.000000000 +0100\n' + '+++ share/jupyter/lab/settings/overrides.json 2019-11-26 13:40:46.560731000 +0100\n' + '@@ -0,0 +1,8 @@\n' + '+{\n' + '+ "jupyterlab-gitlab:drive": {\n' + '+ "baseUrl": "https://gitlab.version.fz-juelich.de"\n' + '+ },\n' + '+ "@parente/jupyterlab-quickopen:plugin": {\n' + '+ "relativeSearch": true\n' + '+ }\n' + '+}\n' + 'EOF' + ), + 'patch -p0 -d %(installdir)s < %(builddir)s/file_jupyter-overrides_jsc.patch', + + # 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 notebook list --json | grep $JLAB_PID | ' + 'awk \'{for(i=1;i<=NF;i++)if($i=="\\"port\\":")print $(i+1)}\' | sed \'s/,*$//g\' | ' + 'xargs -i jupyter notebook 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 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*', + + # 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 ...../2020/software/Python/3.8.5-GCCcore-9.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/JupyterCollection/JupyterCollection-2020.2.6-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb b/Golden_Repo/j/JupyterCollection/JupyterCollection-2020.2.6-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb new file mode 100644 index 0000000000000000000000000000000000000000..7dec1ebab970abd62d23238e23c261f1d4aaa801 --- /dev/null +++ b/Golden_Repo/j/JupyterCollection/JupyterCollection-2020.2.6-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb @@ -0,0 +1,35 @@ +easyblock = 'Bundle' + +name = 'JupyterCollection' +version = '2020.2.6' + +local_pysuffix = '-Python-3.8.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. +""" +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} + +dependencies = [ + ('JupyterProxy-XpraHTML5', '0.3.0', '-' + version), + # ('JupyterProxy-Matlab', '0.1.0', '-' + version), + ('JupyterKernel-Bash', '0.7.1', '-' + version), + ('JupyterKernel-Cling', '0.7', '-' + version), + ('JupyterKernel-JavaScript', '5.2.0', '-' + version), + ('JupyterKernel-Julia', '1.5.2', '-' + version), + ('JupyterKernel-Octave', '6.1.0', '-' + version), + ('JupyterKernel-PyParaView', '5.8.1', '-' + version), + ('JupyterKernel-PyQuantum', '1.1', '-' + version), + ('JupyterKernel-PyDeepLearning', '1.0', '-' + version), + ('JupyterKernel-R', '4.0.2', '-' + version), + ('JupyterKernel-Ruby', '2.7.1', '-' + version), + ('Jupyter', version, local_pysuffix), +] + +skipsteps = ['configure', 'build', 'install', 'sanity_check'] + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-Bash/JupyterKernel-Bash-0.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-Bash/JupyterKernel-Bash-0.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..b5b38519821c620b7458952b7791f196a48f98ff --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Bash/JupyterKernel-Bash-0.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,98 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-Bash' +version = '0.7.1' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-%(pyver)s' + +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. +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, local_pysuffix), +] + +local_common_opts = { + 'req_py_majver': '3', + 'req_py_minver': '0' +} + +exts_defaultclass = 'PythonPackage' +exts_filter = ('python -c "import %(ext_name)s"', '') +exts_default_options = { + 'download_dep_fail': True, + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, +} + +exts_list = [ + # 0.7.2 fails with BackendUnavailable. Might be fixable --no-use-pep517 + ('bash_kernel', '0.7.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '29f895819e076e3f225e37034b70b5265a559e2964e020c942024f51ea6153e8')]), + ('use_pip', True), + ])), +] + +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: 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 %(installdir)s/pyvenv.cfg', + 'rm -r %(installdir)s/bin', +] + +# 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-0.7-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-Cling/JupyterKernel-Cling-0.7-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..d0fd550e250dc3d550ccb2243e2bbed5cc3e467b --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Cling/JupyterKernel-Cling-0.7-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,93 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-Cling' +version = '0.7' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-%(pyver)s' + +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. +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, local_pysuffix), + ('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 ${EBROOTCLING}/share/cling/Jupyter/kernel', + ( + 'source %(builddir)s/env.sh && ' + ' jupyter-kernelspec install --prefix=%(installdir)s ${EBROOTCLING}/share/cling/Jupyter/kernel/cling-cpp17' + ), + + # 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 %(installdir)s/pyvenv.cfg', + 'rm %(installdir)s/bin/python', + 'rm %(installdir)s/bin/python3', + 'rm %(installdir)s/bin/activate', + 'rm %(installdir)s/bin/activate*', + 'rm %(installdir)s/bin/easy_install*', + 'rm %(installdir)s/bin/pip*', +] + +# 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/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-JavaScript/JupyterKernel-JavaScript-5.2.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-JavaScript/JupyterKernel-JavaScript-5.2.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..93841d50ef45ff696936b1227f04cc49c4ba1ba1 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-JavaScript/JupyterKernel-JavaScript-5.2.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,70 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-JavaScript' +version = '5.2.0' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-3.8.5' + +homepage = 'https://www.npmjs.com/package/ijavascript' +description = """ +Native JavaScript kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), +] + +dependencies = [ + ('Jupyter', local_jupyterver, local_pysuffix), +] + +local_jupyter_path = 'share/jupyter' + +modextrapaths = { + 'NODE_PATH': ['lib/node_modules'], # npm´s search path to extra modules + '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 = [ + ( + '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n' + '#!/bin/bash\n' + 'export PATH=%%(installdir)s/bin:${PATH}\n' + 'export NODE_PATH=%%(installdir)s/lib/node_modules\n' + 'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n' + 'EOF' + ) % (local_jupyter_path), + + 'source %(builddir)s/env.sh && npm install ijavascript@5.2.0 -g --prefix %(installdir)s', + # installs ijavascript in $JUPYTER_DATA_DIR/kernels + 'source %(builddir)s/env.sh && ijsinstall --install=local', + 'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share', +] + +# 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/javascript/kernel.json', + ], + 'dirs': [ + 'lib/node_modules/', + 'share/jupyter/kernels/javascript/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-Julia/JupyterKernel-Julia-1.5.2-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-Julia/JupyterKernel-Julia-1.5.2-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..e8addb10368bb9ab9dd1dc9f0864ca2755bfbbeb --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Julia/JupyterKernel-Julia-1.5.2-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,117 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-Julia' +version = '1.5.2' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-%(pyver)s' + +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. +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, local_pysuffix), + ('Julia', version), +] + +local_common_opts = { + 'req_py_majver': '3', + 'req_py_minver': '0' +} + +exts_defaultclass = 'PythonPackage' +exts_filter = ('python -c "import %(ext_name)s"', '') +exts_default_options = { + 'download_dep_fail': True, + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, +} + +exts_list = [ + ('julia', '0.5.6', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '378d0377f75bb0e3bfc4cce19a56d3bf5a9a7be38e370e3a7cf3359bf4cd0378')]), + ('use_pip', True), + ])), +] + +local_jupyter_path = 'share/jupyter' +local_julia_depot_path = "%(installdir)s/share/julia/site/" # for Julia packages needed for Jupyter + +modextrapaths = { + 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], + 'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs +} + +modextravars = { + 'JULIA_DEPOT_PATH': local_julia_depot_path, +} + +# 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 JULIA_DEPOT_PATH=%s\n' + 'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n' + 'EOF' + ) % (local_julia_depot_path, local_jupyter_path), + + # installs ijulia in JULIA_DEPOT_PATH and kernel in $JUPYTER_DATA_DIR/kernels + 'source %(builddir)s/env.sh && julia -e \'using Pkg; Pkg.add("IJulia"); Pkg.build("IJulia")\'', + + # to trigger the precompilation + 'source %(builddir)s/env.sh && julia -e \'using IJulia\'', + + # adjust permissions of precompiled files + 'for i in $(find %s); do chmod +r $i; done' % local_julia_depot_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 %(installdir)s/pyvenv.cfg', + 'rm %(installdir)s/bin/python', + 'rm %(installdir)s/bin/python3', + 'rm %(installdir)s/bin/activate', + 'rm %(installdir)s/bin/activate*', + 'rm %(installdir)s/bin/easy_install*', + 'rm %(installdir)s/bin/pip*', +] + +# 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-6.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-Octave/JupyterKernel-Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..8604c0b521d5c9fc9c1bd3a0c87a4cc489552b02 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Octave/JupyterKernel-Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,138 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-Octave' +version = '6.1.0' +local_octavever = '6.1.0' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-%(pyver)s' + +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. +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), + ('Octave', local_octavever, '-nompi'), # ensure it is available +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, local_pysuffix), + # no dependency to Octave as it is loaded in kernel.sh +] + +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 Stages/2020 + 'source %(builddir)s/env.sh && pip3 install ipykernel ', + 'rm -rf %(installdir)s/share/jupyter/kernels/', # remove any kernel installed by ipykernel + 'source %(builddir)s/env.sh && pip3 install ipyparallel ', + + # install Python package octave_kernel + 'source %(builddir)s/env.sh && pip3 install octave_kernel==0.32.0 ', + + # 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 use \$OTHERSTAGES \n' + 'module load Stages/${STAGE} \n' + 'module load GCC/9.3.0 \n' + '\n' \ + 'module load Python/%%(pyver)s \n' + 'module load Jupyter/%s%s \n' + 'module load Octave/%s-nompi \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_pysuffix, 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 %(installdir)s/pyvenv.cfg', + 'rm -r %(installdir)s/bin', +] + +# 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': [ + 'lib/python%(pyshortver)s/site-packages', + 'share/jupyter/kernels/octave/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterKernel-PyDeepLearning/JupyterKernel-PyDeepLearning-1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-PyDeepLearning/JupyterKernel-PyDeepLearning-1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..c80337c195b12e7c6ff9096758e511af6b17dec2 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyDeepLearning/JupyterKernel-PyDeepLearning-1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,153 @@ +easyblock = 'PythonBundle' + +name = 'JupyterKernel-PyDeepLearning' +version = '1.0' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-%(pyver)s' + +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. +""" +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), + # just ensure they exist + ('FFmpeg', '4.3.1'), + ('OpenCV', '4.5.0', local_pysuffix), + ('TensorFlow', '2.3.1', local_pysuffix), + ('PyTorch', '1.7.0', local_pysuffix), + ('OpenAI-Gym', '0.18.0', local_pysuffix), + # ('Horovod', '0.20.3', local_pysuffix, ('gomkl', '2020')), +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, local_pysuffix), +] + +local_common_opts = { + 'req_py_majver': '3', + 'req_py_minver': '0' +} + +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"}, + ], + }), +] + +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 = [ + ('lmdb', '1.1.1', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '165cd1669b29b16c2d5cc8902b90fede15a7ee475c54d466f1444877a3f511ac')]), + ])), + ('gviz_api', '1.9.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '43d13ccc21834d0501b33a291ef3265e933dbb4bbdca3d34b1ed0a048c0ef640')]), + ])), + ('tensorboard_plugin_profile', '2.4.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'dfbf254ee960440e3b2518324f876a6d6704c60b936887d99214fa36988a206a')]), + ])), + ('tensorflow_hub', '0.11.0', dict(list(local_common_opts.items()) + [ + ('source_tmpl', 'tensorflow_hub-0.11.0-py2.py3-none-any.whl'), + ('checksums', [('sha256', '19399a8abef10682b4f739a5aa78b43da3937df17f5d2afb0547945798787674')]), + ('unpack_sources', False), + ('modulename', False), # skip sanity check as it 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 && ' + '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), + + # 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 use \$OTHERSTAGES \n' + 'module load Stages/${STAGE} \n' + 'module load GCC/9.3.0 \n' + 'module load OpenMPI \n' + 'module load Horovod/0.20.3-Python-3.8.5 \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' + '}\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-PyDeepLearning/logo-128x128.png.base64 b/Golden_Repo/j/JupyterKernel-PyDeepLearning/logo-128x128.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..a45503592a47dc32687b032e19bd6f54555db86e --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyDeepLearning/logo-128x128.png.base64 @@ -0,0 +1,164 @@ +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 diff --git a/Golden_Repo/j/JupyterKernel-PyDeepLearning/logo-32x32.png.base64 b/Golden_Repo/j/JupyterKernel-PyDeepLearning/logo-32x32.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..598dc9165fe7f0925294b30f193892219c6f0545 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyDeepLearning/logo-32x32.png.base64 @@ -0,0 +1,24 @@ +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBI +WXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5QIGDS0sz9yJcgAAAB1pVFh0Q29tbWVudAAAAAAAQ3Jl +YXRlZCB3aXRoIEdJTVBkLmUHAAAEtUlEQVRYw8XXf6ifVR0H8Nd5vrvb6Eort7HOvckoytAFAxM0 +ZNpiWX+I/fpDqp27MaEIwjkVtRQjjWUzGIGlaNh2nyhKaOZCilbzB3OMJmVz0Ia2yrWzldW0/WD3 +7vs9/XEfr997d+/d9DJ24OF5zjmf8/m8z+f3w3TGYO5X55unw6IyvTGEg+cSwH+weToMZpwxZZ0r +XKpYLHgNO3QcF3we688ugDrPwNexRyhbCb24TuVVnJiA/j1Yit1S3DE9ABsOzMAAfiXFbV07z6vz +ahwf55hz8GWdzgOq6lp1bktx51vzgcG8RCvchwtHhde5V53f1lD8Fq0xZ4KF2GVF/z6lPIcFb80J +6/wxwWIprkFP184HsRyU8t9TtVj24RJ1vl0In1Q8q84tdZ6nzq0zM8EPXwq4Roqrm5Vj6twrxaNS +3KHOfeq8jvIihsceDrfjYZ3Ofiv6X2suczeO4B342liFTXz7KzBfio8186vxAXxfiu0uukvxYTzS +rCzHS1Lc0uxf35jgT1L8ZcPnuBSfOZ0JzsP/GiafxiK8gLXqfEsX3QH041al3IqhLuEfxWzFo7jI +j3IPLmxyxxQmGLnVUgw2K0ukeFPzvXWsuRG8LMXvTRC2nzFstVWxrc7bFXfid1LcPbkJ6jwL67ps +P5mD9igC5gm+gt3YRrlc8bwQvoBNUnzuzSaiT+AnTQguwyEDcdc44TdhvqCDDv5ueOinqllF6BwU +wrB2e62V7z42eubBHPS6oQnZ9VIsk/nAh5rbMBC3CK5S58u6hH8D26X4VSnegacwbNXCk1qlqKoT +Qiiq6rg6V036pteNeErxBG6eSgPvdOzfR7rmW7BSnS/CxXhcitu79ndjmTrfhX3YgUua9c+io84j +fFP8Y3OJL04FYMjsuTNxwsZ/zMQybKL8VerbMIbykYMtpRTBfine37Wzt3nv6tLcUnX+ZuO2m6cC +8KLKQuxVVVfhSSm+MC499wluUcpDlFcIF6jzCjyNK/AHDOi4x4o4os0Ut6rzM833yakA7GyY7JXi +byZ02+BGpdxpoO+Y+sBcvCyodRDsRxuPqVyP774RsoWBvpNT14IUf4/Fo2obzB/pUuN7m/brXwb6 +Rjy8hJFLtDuzlFLRaUmxM+ondb68ed8rhNvUeZ37c3W6WvA6yicF31HnDt6Pt+MHY3N/mUuYr6o+ +NZIHwhqsAW0PaFmrzsuwTYqb1flqcyxpomeSWlDne7XdZWUcaqrXl5CluGlMpRxx0FfwqhQfatY/ +jndJcWMzP08p/UL4nNK+T2itxs+l+OepasGzWq5sTNLG+8YJX4xFUrwNGzC7y4S/xgXqvKiZHzHQ +twc/Flo34Bfdwic2QYqPq/Pd6ny46WQ6p0TKyEMpPUIo4/YfxBp1Poy/SfFnUtyLb515QxLcgyVN +5mNDntkF8KgUjzaE/af2A03/wMOYNeqIb6ojWh6Hpbhex7fxtJY0CdBrJtBQH/ZL8TD+gnlTAQhn +2BWvwvlNqj3UNCdX4glcPEE5fr1nWIA7pDg0PQBvtNqXNeG4BzsVcwTXSfHU/4LBAwucDP+0KhZn +bQzmGeo851z+mp2Pa88lgJ7TOdnZBnCIsnE6DP4PRyPEcw8t2PkAAAAASUVORK5CYII= diff --git a/Golden_Repo/j/JupyterKernel-PyDeepLearning/logo-64x64.png.base64 b/Golden_Repo/j/JupyterKernel-PyDeepLearning/logo-64x64.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..769950452970288b5c15603ea996c8f56a9bb58f --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyDeepLearning/logo-64x64.png.base64 @@ -0,0 +1,63 @@ +iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI +WXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5QIGDS0XftdgVgAAAB1pVFh0Q29tbWVudAAAAAAAQ3Jl +YXRlZCB3aXRoIEdJTVBkLmUHAAANRklEQVR42u2be5BU1Z3HP7/bPQ+eQwiv2z2AoEaECLIkQdeA +UdSovHbXLfMo7p0ZshvMJoba7Jq19o8taytbZcWNKc2uWElWpvuaWleNEFejosQnIbobw4quiEQN +0H1QwSAzMI/uvmf/uL8Zenq6Z9qZgdmKniqq6el7zz2/7/n9vr/XucJojnR2OjATOIifODQaS3BG +FQBkHiJfQuTc0VrBKANACOT080MJAIAA9sMKwAHgKeAgH43RU79R9AJmNsI84DU8963RWEL8lM38 +47eE2rpGYA4wAegAfgccwHe79arZwAqgE/gDAiAwi4DPA1OAQpGmOUAbgdlJu2xX7guxo8aBpwCA +wFwDLNG5DwJ7wR4BqdcdXwBcwni7AMv/RuBUaYlBZjI4nwTGYTmI7+7+/8UBgbkSWAYUsHYzfuLN +ftekMnU4zlcAt1crLNvw3acHmfsCYK1qlKOxw3sU8rfTPDM/+m4wbaapPYfA7WWFB2hKduG5dwDZ +qv1/2rjAnwF5rH0Oa38KvAtMIha/dnTjgFRmLGnzWYQvAt3A43ju4UHvKxQ2A3VV6aFwsc79GH7i +UfzErznO7UAMmM9d2djpByDIOqTNGhznJoSrgI8DOSy/qer+5sZO4LcA2EEhmKjXnUyYrnMt1h4F +QuIy6fSSYKupAb6OMA04AbwOzMfShu+2lRBXDJwvAzV47l0lMx1SYhx4WN5EmImwGNinZvFxhI9h +yeG7R04vADG+DkwHXqNQuAdHYoizEKGj37VeskBg5gB1BNmz8BL7TgpmjyMyuPqK3Q2yAlhEYJJA +u6bRAjxxet1g2lwNTAX24rmtRSwdB8ZXuOs+oBnEJ23ux3dfUsm6Bn3e3SaGpVk5IAQaIzLEAX6O +7z5btIbPAAuVXF/Bc381sgCkD9YrIXViw38v+dUADQRmOp77dl8tcF8lMFuAtQjXEpjVwF6snQxi +B/QGlg3AWKANz72FVGYSIhPwEwdK3KQPnKNzCTCHwCwhxybWu+HIkKDElulOPI+f7Cz59RkF9NKy +90a7cRuQAeqBRYjMHLAWEAGVACwhd6gbPdpf+OyFwHzgGJZ7sLYVeAdIUMPnR9IEzgMEy+4yAr5A +YK4GziMwb+G5O8tccwjYRDo7ESEJsgBYgpQBITALgQv12w9oco+XmOIyhPm649N01/8NX11wKnMA +x/lH4DzSmUfxk3YkAJgaRWL5bEltbzwi64EaXcgaAjMX2O7ku98JW2b3FdBPHAOOkTZTECxwoQp8 +UvFhRgS2TeEn3i4BxwWuBCyWMQidUfQZdhYFXJ0EpjuS0Ylr5WnYAET25c8sFO3ERIRvAbXA77D8 +N8IyjfkXhPHadgKzB899oEIgboHJ6lUs1oJIz9oexE/sKSFFB8s6NZ3dwDYsqxDmI85y4Oe6rgs1 +UDqM7+aGbwKBuULjcGjNjqU5cUKF+DIQw9pn8BOP6tW/Jm2WIyxVG357ADhjWJ5A7PNY4jqXBTrw +9Rl977kcaAC68dx7dW1bgXmqSYsV2jq9fuvwOSAwTcDZev3LiM33qj7MAmJFwquau88oMUIqWzdI +qNuNl2irYh0NwHIgjmVTEbe0E5hbga8CPVHhe1gCfPed4QEQmKvUvZwg5E6aiuP8sIPQ+S5iCwPO +0ZToGlD86ssBTWr3z+K7mRKCfQ+4mdZsA46E/SLSIaXDgZkO/DXQSRjeQlPy+AiXxJZpHtGuJLUd +z30xAt2ej7X34Sf3kc5ei8hs3d0jeO6tp6sgsjqq2LBlWMIHZgrwGWAmlhjCMeAFLAVlgnoNdmr1 +jjEgDepVQGSsltUKwD1VPfPOg8J1jXboAKSy41T138V3/6dk5/4B2IVlG01u5yDCrwGWKiM7SG9B +YwFCuxLVM9jweSAylZBHkHA7oRzXnOFerI0DhQE3ImXqcFgDzAWEwOwHHsCrvMb4AMaxRKO+l8v8 +lgDqEBaTynyfpuSx/jH8fgdb81WN3XNYtiLsBlsAmQN8qXfHhW785EmbbXI7tIjaEzecqELLaoGN +mjqPUc0aD5zBZnMLLeVdYeVQWORs/X1f/2IG1wM7gRocp7nf75tNDFtzvbrA3yPyHXz3v/DcTrxE +Ds/dS8h3iyKB3AiY85Uq/BuEhRvx3L/VmuM4YnbVUDhgOpAntP13t9nNAQ8RmDOipCPTgJd8X9Vw +Ig4bdDGdILexbkb/ml2T20HaPImwAmEVgVnbuyZr78VPvEBgWoCF2HATfnIv6ex1iJxRgchzyiUB +TY09gG7FsgCRc4YCwHggh9iBbPydCCjnBgLzhs43V8nqMKFsomlGfgAzy6mWdav9i1aJe9xqB3Ac +nJ45uqLvOGUyyLgmTVIUNFkcQsAhbQTftUMJhJxBtER0YWfqoo5g+SW+u2PwwFosYmNYnqJw4lny +jkO8RnDykcC57vuI2Z/SGUbfC/kAJxQKcYjFVNAQjrblmdzwJ8ASHL5AkNmKFRAuVxn3lRN+MADa +gHHgjAXeK0l+piKyVAE4QKHQSswZjwX8xMDlqc2HammZoZ0h25MkhbScWegNtXvG+tl9/9YyKz8A +CT4MfAI4F5yzNbyqAY5RCH82FBMwwCcQPkZp91bkxsi+6SYkRXNjV68Lqxz0fBLhSghfB3RBtqCZ +T5xUtp68zfOVZJ5UphaIE9JFS7JAKlMHOBSsZX1jZ4V6Qxd3m+8RsgrhXNXMlyjwnzQnuz84AJY3 +EM7SWGB3Ge3YRYGHlRAHi/hWIFymav9WH38CeYRLEFlBrTwE7MRxVgNLcexm4FUcZx0wB4cYaZPC +d/eUfc46Nwds0X/DLYuHv1FWPYfWbLwE7Zvw3K1VCn8WwhVAB5Y78d37i6udulNhlM8rsUWfhSKi +y+v/cwjXcJeJMUKjsgb4yTYCsw+YTUw+BfxqSE8QrgW6sfaH/Q5CibUgcSw/wy8qYPruA8ADRYCn +1M6/BjRSw58C91cAfAxiLV6icyQaIw/qDq0mna0vIsHJpE1DFbs/V+OBbIVTYFZBqq02q1Bt+RSB +mdUv3wjMRoTvgPwTgdlIYBLDA6Agh4AjQC1CrIgEvw3cQKsZU6ZVNpHAXE1g/gahSQOU31dwgz3n +g8aSzk4nnR2rADcQZF3uNlJieu1YnlaTaOJfD4kKPwH4pnqlt4n6jjOAvyJlpg0dACd0NF5vw/ap +4b+MADFWluz4chznBuCzRN3fbi1MtFdg2pgKcxEi30RkkQJ8GchGLEv7m6b7hHqoOibaPydtphN1 +jWuAp8iFt9DVfSuWB4E4DmuHng6LyMmCRZ844n7gRuB8ApPA2icRORP4tFLYdmAH/gCZYtpMBTtd +J25Xt9qTAL2vJLiaVGZ3vwww5Cc43AAsRFikZhFi2cn63urvTgKzCphGKltLU6L7gwMQhgUcpxth +MlacIlXsJDA3A+uBJCJfUEHeB36A73ZUSFfrNV1drAj3BDk78NzniuZ/gsCMAz6tZwluL8kjjhJk +t4Gcr8+dpNlpnbpoCEyNakWesHLFavADEoHZAMzFsgm/zEGmwFwMXAaECDezroLwgZkNbNDdymse +UQ9MwfJYvwMSgYkB3wbGYe12/MSTlbUpexEiKyO+sluw5BBZq2a4E899aOidIcsrQAHhggpXjFMg +H68ofERE1+luPaZxxB1YntNCSbnIrqCu0EHkClIDeB0/sYOoQz0FZAMi3wCSwH7yWiYfMgBiX1Qm +P58gU64PvxiopSv85QBPWafCP4RX1MyU3udLBRBeA3YBORxaBlyn524G/kOB+C2whUP8kBY3HF5V +2EucIDDbgKvA2UBgvofn5nVnG3q9xF8kyz8oyNQquR0u2y4bbORy91FTMw+YQmAux9q9IGMJ2U9z +SbvMc3cpYFWP6pqjnrtDK0PjgW+p64kqfCdD1Qr3Jrvx3E1Y+/3+5mXrGeyc0PpZFkipqSxH5C8R +1hHj77UXOaxRfXc4OgvwOtCAsJHAfA2rbu9kM4IB7NSWcbPT+qXA5cYxOaDkKUSHo/boc/+YtLn0 +9AAQgZDWAKM7cn9crDuTI23mfeCnW86qyhdNtJcqAC/iubfhuQHYf1Yd/NzpAyCKxJ7Hc2/C0orl +EWA/0TGnlR+wV/BHSO/hp8Hq92doQPZKETcdBY4CQjo77fQBcBKIffjuDjz3Rxp8TCIw1Z3ZS5tZ +wDWqSdWMNtWUqaW6EQFj209VZ6jasQn4O2AhgZlEGG6hKflu/3LYgRjx+MVEp0hEg6Hk4KZif4HI +EuByAjNeS3QXKQ/soSl5YqgLH7mjsqnMJBzneqK2tAUOK2ke0781asU4psD/BMsEhDVYHqniqOwC +wNeYRFR7M3juvwxn2SP/vkBgVmo2GNL3/I+o4LtUQ7q0OboSax/BTzxdxdwTsPYCkBrgTXz31VNX +ERrq8NyHgYdJZxeAzADGIfYE8C7vy0t8o095WjTUrXbuNuDxkVzuqXthwk+8AkWsXX4cAJ7Uz4/G +aIzRfmdojtbw9+C5b4zGEkb7tbmZwCVE54z4MAJQWv//0AHQ489HzRTjowzAPrBbGaVX5j4awP8B +/cDmGnd36/sAAAAASUVORK5CYII= diff --git a/Golden_Repo/j/JupyterKernel-PyParaView/JupyterKernel-PyParaView-5.8.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-PyParaView/JupyterKernel-PyParaView-5.8.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..4c2d4960cf73a2d1b61447270f83976056828b09 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyParaView/JupyterKernel-PyParaView-5.8.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,134 @@ +easyblock = 'PythonBundle' + +name = 'JupyterKernel-PyParaView' +version = '5.8.1' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-%(pyver)s' + +homepage = 'https://www.paraview.org' +description = """ +Special ParaView kernel for Jupyter. +Project Jupyter exists to develop open-source software, open-standards, and services +for interactive computing across dozens of programming languages. +""" +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, local_pysuffix), + # ('ParaView', version, '-EGL' + local_pysuffix, ('gpsmkl', '2020')), +] + +local_common_opts = { + 'req_py_majver': '3', + 'req_py_minver': '0' +} + +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"}, + ], + }), +] + +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 = 'pyparaview' +local_kernel_name = 'PyParaView-%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 && ' + '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), + + # 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 use \$OTHERSTAGES \n' + 'module load Stages/${STAGE} \n' + 'module load GCC/9.3.0 \n' + 'module load ParaStationMPI \n' + 'module load %s/.%s%s \n' + '\n' + 'module load ParaView/%s-EGL%s \n' + 'module unload VTK \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, + version, local_pysuffix), + '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' + '}\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-PyParaView/logo-128x128.png.base64 b/Golden_Repo/j/JupyterKernel-PyParaView/logo-128x128.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..eb55970852c1f47ac4e00c4eb99e1062ac942be8 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyParaView/logo-128x128.png.base64 @@ -0,0 +1,229 @@ +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 +QmCC diff --git a/Golden_Repo/j/JupyterKernel-PyParaView/logo-32x32.png.base64 b/Golden_Repo/j/JupyterKernel-PyParaView/logo-32x32.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..3d6f3a3f2a8931f26edf0d2a36ad63722254eef6 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyParaView/logo-32x32.png.base64 @@ -0,0 +1,30 @@ +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 diff --git a/Golden_Repo/j/JupyterKernel-PyParaView/logo-64x64.png.base64 b/Golden_Repo/j/JupyterKernel-PyParaView/logo-64x64.png.base64 new file mode 100644 index 0000000000000000000000000000000000000000..3803d73352011e8d0bad7eaf26d19920a1e09ea7 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyParaView/logo-64x64.png.base64 @@ -0,0 +1,79 @@ +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 +RU5ErkJggg== diff --git a/Golden_Repo/j/JupyterKernel-PyQuantum/JupyterKernel-PyQuantum-1.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-PyQuantum/JupyterKernel-PyQuantum-1.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..9f1707ccc4011ca047fec9d27b8a2468f2e66d94 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-PyQuantum/JupyterKernel-PyQuantum-1.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,135 @@ +easyblock = 'PythonBundle' + +name = 'JupyterKernel-PyQuantum' +version = '1.1' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-%(pyver)s' + +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. +""" +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), + ('Cirq', '0.9.1', local_pysuffix), + ('DWave', '3.2.0', local_pysuffix), + ('PyQuil', '2.27.0', local_pysuffix), + # ('Qiskit', '0.23.5', local_pysuffix, ('gpsmkl', '2020')), +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, local_pysuffix), +] + +local_common_opts = { + 'req_py_majver': '3', + 'req_py_minver': '0' +} + +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"}, + ], + }), +] + +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_dir = 'pyquantum' +local_kernel_name = 'PyQuantum-%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 && ' + '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), + + # 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 use \$OTHERSTAGES \n' + 'module load Stages/${STAGE} \n' + 'module load GCC/9.3.0 \n' + 'module load ParaStationMPI \n' + 'module load Qiskit/0.23.5-Python-3.8.5 \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' + '}\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-R/JupyterKernel-R-4.0.2-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-R/JupyterKernel-R-4.0.2-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..fd59da64e06d6990887caf446fdfbee746cb2d61 --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-R/JupyterKernel-R-4.0.2-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,113 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-R' +version = '4.0.2' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-3.8.5' + +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. +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), + ('R', version, '-nompi'), +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, local_pysuffix), +] + +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 use $OTHERSTAGES && ' + 'module load Stages/${STAGE} && ' + 'module load GCCcore/.9.3.0 && ' + 'module load Jupyter/%s%s && ' + 'module load R/%s-nompi && ' + '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, local_pysuffix, 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 use \$OTHERSTAGES \n' + 'module load Stages/\${STAGE} \n' + 'module load GCCcore/.9.3.0 \n' + 'module load R/%s-nompi \n' + '\n' + 'exec \${EBROOTR}/lib64/R/bin/R "\$@"\n' + '\n' + 'EOF' + ) % (local_kernel_dir, 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-2.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterKernel-Ruby/JupyterKernel-Ruby-2.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..0bacdd8cc6582a6ef13de9d9f70aa3b88335ec9f --- /dev/null +++ b/Golden_Repo/j/JupyterKernel-Ruby/JupyterKernel-Ruby-2.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,65 @@ +easyblock = 'Bundle' + +name = 'JupyterKernel-Ruby' +version = '2.7.1' +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +local_pysuffix = '-Python-3.8.5' + +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. +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, local_pysuffix), + ('Ruby', '2.7.1'), +] + +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', +] + +# 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/ruby/kernel.json', + ], + 'dirs': [ + 'share/jupyter/kernels/ruby/', + ], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterProxy-Matlab/JupyterProxy-Matlab-0.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterProxy-Matlab/JupyterProxy-Matlab-0.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..9ff94876492897b9c64d0d1a12145d11c6339ce3 --- /dev/null +++ b/Golden_Repo/j/JupyterProxy-Matlab/JupyterProxy-Matlab-0.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,52 @@ +easyblock = 'PythonBundle' + +name = 'JupyterProxy-Matlab' +version = '0.1.0' + +local_jupyterver = '2020.2.6' +versionsuffix = '-' + local_jupyterver + +homepage = '' +description = """ +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, '-Python-%(pyver)s'), +] + +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'download_dep_fail': True, + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, +} + +local_common_opts = { + 'req_py_majver': '3', + 'req_py_minver': '0' +} + +exts_list = [ + ('jupyter-matlab-proxy', '0.1.0', dict(list(local_common_opts.items()) + [ + ('source_urls', ['https://github.com/mathworks/jupyter-matlab-proxy/archive/']), + ('source_tmpl', '%(version)s.tar.gz'), + ('checksums', [('sha256', '4be1f317681cb1ec5e24ee0bad82e4c8317026edb2b29c4bb4176173cd7eb623')]), + ])), +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/j/JupyterProxy-XpraHTML5/JupyterProxy-XpraHTML5-0.3.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb b/Golden_Repo/j/JupyterProxy-XpraHTML5/JupyterProxy-XpraHTML5-0.3.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..cdab28fc4b211bff7e0511b2766a9944f7466863 --- /dev/null +++ b/Golden_Repo/j/JupyterProxy-XpraHTML5/JupyterProxy-XpraHTML5-0.3.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb @@ -0,0 +1,86 @@ +easyblock = 'PythonBundle' + +name = 'JupyterProxy-XpraHTML5' +version = '0.3.0' + +local_jupyterver = '2020.2.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. +""" + +site_contacts = 'j.goebbert@fz-juelich.de' + +toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('binutils', '2.34'), + ('xpra', '4.0.4', '-Python-%(pyver)s'), # check for existance + ('jsc-xdg-menu', '2020.4'), # check for existance +] + +dependencies = [ + ('Python', '3.8.5'), + ('Jupyter', local_jupyterver, '-Python-%(pyver)s'), +] + +exts_defaultclass = 'PythonPackage' +exts_default_options = { + 'download_dep_fail': True, + 'source_urls': [PYPI_SOURCE], + 'use_pip': True, +} + +local_common_opts = { + 'req_py_majver': '3', + 'req_py_minver': '0' +} + +exts_list = [ + ('jupyter-xprahtml5-proxy', '0.3.0', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', 'db852682e8e366091e6a3984b60ac3d2e6b3197be2ef074440c11cb09e23b80b')]), + ('source_urls', ['https://github.com/FZJ-JSC/jupyter-xprahtml5-proxy/archive/']), + ('source_tmpl', 'v0.3.0_devel.tar.gz'), + ('modulename', 'jupyter_xprahtml5_proxy'), + ])), +] + +postinstallcmds = [ + # write launch_xpra.sh + ( + '{ cat > %(installdir)s/lib/python%(pyshortver)s/' + 'site-packages/jupyter_xprahtml5_proxy/share/launch_xpra.sh; } << EOF \n' + '#!/bin/bash \n' + '\n' + '# Load required modules \n' + 'module purge \n' + 'module use \$OTHERSTAGES \n' + 'module load Stages/${STAGE} \n' + 'module load GCCcore/.9.3.0 \n' + 'module load xpra/4.0.4-Python-3.8.5 \n' + 'module load jsc-xdg-menu/.2020.4 \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/share/launch_xpra.sh' +] + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools'