Skip to content
Snippets Groups Projects
Select Git revision
  • cecam2025
  • V210
  • V200 protected
  • legacy
  • beta0
5 results

CITATION.cff

Blame
  • JupyterKernel-Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.6.eb 4.59 KiB
    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 GCCcore/.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'