Skip to content
Snippets Groups Projects
Select Git revision
  • 23a2c7211a6f7b94bf294b94424e4669775c9a8e
  • 2023 default protected
2 results

JupyterKernel-PyQuantum-2023.5-GCCcore-11.3.0-2023.3.6.eb

Blame
  • 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'