Select Git revision
JupyterKernel-PyQuantum-2023.5-GCCcore-11.3.0-2023.3.6.eb

Jens Henrik Goebbert authored
JupyterKernel-PyQuantum-2023.5-GCCcore-11.3.0-2023.3.6.eb 5.13 KiB
easyblock = 'PythonBundle'
name = 'JupyterKernel-PyQuantum'
# Versioning scheme:
# major_version: software stage of modules loaded by the kernel
# minor version: release month
local_kernel_stage = 2023
version = f'{local_kernel_stage}.5'
local_jupyterver = '2023.3.6'
versionsuffix = '-' + local_jupyterver
homepage = 'https://www.fz-juelich.de'
description = """
Kernel for quantum computing in Jupyter.
Project Jupyter exists to develop open-source software, open-standards, and services for interactive computing across
dozens of programming languages.
"""
toolchain = {'name': 'GCCcore', 'version': '11.3.0'}
toolchainopts = {'pic': True}
# Not relevant to check any of these since we will load versions from another stage
builddependencies = [
('binutils', '2.38'),
# ('Cartopy', '0.21.0'),
# ('Cirq', '1.0.0'),
# ('DWave', '6.3.0', '', ('gcccoremkl', '11.3.0-2022.4.0')),
# ('PyQuil', '3.3.3'),
# ('Qiskit', '0.41.0', '', ('gpsmkl', '2022')),
# ('Qiskit-juqcs', '0.8.0', '', ('gpsmkl', '2022')),
]
dependencies = [
('Python', '3.10.4'),
('JupyterLab', local_jupyterver),
]
components = [
('logos', '1.0', {
'easyblock': 'Binary',
'sources': [
{'filename': 'logo-32x32.png.base64',
'extract_cmd': "base64 -d %s > %%(builddir)s/logo-32x32.png"},
{'filename': 'logo-64x64.png.base64',
'extract_cmd': "base64 -d %s > %%(builddir)s/logo-64x64.png"},
{'filename': 'logo-128x128.png.base64',
'extract_cmd': "base64 -d %s > %%(builddir)s/logo-128x128.png"},
],
'checksums': [
'd252acdbbd8838aff9ff183ce249b5a4c2ef43a6309680f2a4cb13029813e3e9',
'b7c900cab9761d24acb1ff98e42cc61c5a14d7c71ee2c91aa4de35508a927dc9',
'c2ed9885240b3fbeabf7f8eeef14152f80cf55dc13d8de26f4d8a7a046a8e015',
],
}),
]
exts_default_options = {
'source_urls': [PYPI_SOURCE],
'use_pip': True,
'sanity_pip_check': True,
'download_dep_fail': True,
'use_pip_for_deps': False,
}
# additional Python packages
exts_list = [
]
local_kernel_name = 'PyQuantum-%s' % version
# ipykernel will lowercase the kernel name
local_kernel_dir = local_kernel_name.lower()
modextrapaths = {
'JUPYTER_PATH': ['share/jupyter'], # add search path for kernelspecs
}
# Ensure that the user-specific $HOME/.local/share/jupyter is first entry in JUPYTHER_PATH
modluafooter = """
prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
"""
postinstallcmds = [
# create kernel skeleton
(
'python -m ipykernel install --name=%s --prefix=%%(installdir)s && '
'rm -f %%(installdir)s/share/jupyter/kernels/%s/logo-svg.svg && '
'mv %%(installdir)s/logo-32x32.png %%(installdir)s/share/jupyter/kernels/%s/logo-32x32.png && '
'mv %%(installdir)s/logo-64x64.png %%(installdir)s/share/jupyter/kernels/%s/logo-64x64.png && '
'mv %%(installdir)s/logo-128x128.png %%(installdir)s/share/jupyter/kernels/%s/logo-128x128.png'
) % (local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir, local_kernel_dir),
# write kernel.sh
(
'{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.sh; } << EOF \n'
'#!/bin/bash \n'
'\n'
'# Load required modules \n'
'module purge \n'
f'module load Stages/{local_kernel_stage} \n'
'module load GCC/11.3.0 \n'
'module load ParaStationMPI \n'
'module load Cartopy/0.21.0 \n'
'module load Cirq/1.0.0 \n'
'module load DWave/6.3.0 \n'
'module load PyQuil/3.3.3 \n'
'module load Qiskit/0.41.0 \n'
'module load Qiskit-juqcs/0.8.0 \n'
'module load pulser/0.12.0 \n'
'module load myqlm/1.7.3 \n'
'module load %s/.%s%s \n'
'\n'
'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:\$PYTHONPATH \n'
'exec python -m ipykernel \$@\n'
'\n'
'EOF'
) % (local_kernel_dir, name, version, versionsuffix),
'chmod +x %%(installdir)s/share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir,
# write kernel.json
(
'{ cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.json; } << \'EOF\'\n'
'{ \n'
' "argv": [ \n'
' "%%(installdir)s/share/jupyter/kernels/%s/kernel.sh", \n'
' "-m", \n'
' "ipykernel_launcher", \n'
' "-f", \n'
' "{connection_file}" \n'
' ], \n'
' "display_name": "%s", \n'
' "language": "python", \n'
' "name": "%s", \n'
' "metadata": { \n'
' "debugger": true \n'
' } \n'
'}\n'
'EOF'
) % (local_kernel_dir, local_kernel_dir, local_kernel_name, local_kernel_name),
]
# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
# full_sanity_check = True
sanity_check_paths = {
'files': [
'share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir,
'share/jupyter/kernels/%s/kernel.json' % local_kernel_dir,
],
'dirs': [
'share/jupyter/kernels/',
],
}
moduleclass = 'tools'