diff --git a/build_artifacts/v2/v2.0/v2.0.0/CHANGELOG-cpu.md b/build_artifacts/v2/v2.0/v2.0.0/CHANGELOG-cpu.md new file mode 100644 index 00000000..04df08e9 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/CHANGELOG-cpu.md @@ -0,0 +1,46 @@ +# Change log: 2.0.0(cpu) + +## Upgrades: + +Package | Previous Version | Current Version +---|---|--- +python|3.10.14|3.11.9 +pytorch|2.0.0|2.3.1 +altair|5.3.0|5.4.0 +ipython|8.25.0|8.26.0 +jupyterlab|4.1.6|4.1.8 +amazon-q-developer-jupyterlab-ext|3.1.0|3.2.0 +langchain|0.1.9|0.2.5 +jupyter-ai|2.18.1|2.20.0 +amazon-sagemaker-jupyter-ai-q-developer|1.0.4|1.0.9 +amazon-sagemaker-jupyter-scheduler|3.1.0|3.1.3 +pandas|2.1.4|2.2.2 +amazon_sagemaker_sql_editor|0.1.9|0.1.11 +scipy|1.11.4|1.12.0 +matplotlib-base|3.8.4|3.9.2 +pip|23.3.2|24.2 +torchvision|0.15.2|0.18.1 +autogluon|0.8.3|1.1.1 +conda|23.11.0|24.7.1 +jupyter-collaboration|1.1.0|2.1.2 +jupyter-server-proxy|4.2.0|4.3.0 +jupyterlab-git|0.50.0|0.50.1 +keras|2.15.0|3.5.0 +langchain-aws|0.1.6|0.1.16 +py-xgboost-cpu|1.7.6|2.0.3 +sagemaker-code-editor|1.1.0|1.3.1 +sagemaker-headless-execution-driver|0.0.12|0.0.13 +sagemaker-jupyterlab-emr-extension|0.1.9|0.3.2 +sagemaker-python-sdk|2.224.1|2.227.0 +sagemaker-studio-analytics-extension|0.0.21|0.1.2 +tensorflow|2.15.0|2.17.0 +uvicorn|0.30.1|0.30.6 + +## What's new: + +Package | Version +---|--- +jupyter-activity-monitor-extension|0.3.1 +mlflow|2.15.1 +sagemaker-mlflow|0.1.0 +tf-keras|2.17.0 diff --git a/build_artifacts/v2/v2.0/v2.0.0/CHANGELOG-gpu.md b/build_artifacts/v2/v2.0/v2.0.0/CHANGELOG-gpu.md new file mode 100644 index 00000000..d1dbb763 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/CHANGELOG-gpu.md @@ -0,0 +1,46 @@ +# Change log: 2.0.0(gpu) + +## Upgrades: + +Package | Previous Version | Current Version +---|---|--- +python|3.10.14|3.11.9 +pytorch|2.0.0|2.3.1 +altair|5.3.0|5.4.0 +ipython|8.25.0|8.26.0 +jupyterlab|4.1.6|4.1.8 +amazon-q-developer-jupyterlab-ext|3.1.0|3.2.0 +langchain|0.1.9|0.2.5 +jupyter-ai|2.18.1|2.20.0 +amazon-sagemaker-jupyter-ai-q-developer|1.0.4|1.0.9 +amazon-sagemaker-jupyter-scheduler|3.1.0|3.1.3 +pandas|2.1.4|2.2.2 +amazon_sagemaker_sql_editor|0.1.9|0.1.11 +scipy|1.11.4|1.12.0 +matplotlib-base|3.8.4|3.9.2 +pip|23.3.2|24.2 +torchvision|0.15.2|0.18.1 +autogluon|0.8.3|1.1.1 +conda|23.11.0|24.7.1 +jupyter-collaboration|1.1.0|2.1.2 +jupyter-server-proxy|4.2.0|4.3.0 +jupyterlab-git|0.50.0|0.50.1 +keras|2.14.0|3.5.0 +langchain-aws|0.1.6|0.1.16 +py-xgboost-gpu|1.7.6|2.0.3 +sagemaker-code-editor|1.1.0|1.3.1 +sagemaker-headless-execution-driver|0.0.12|0.0.13 +sagemaker-jupyterlab-emr-extension|0.1.9|0.3.2 +sagemaker-python-sdk|2.224.1|2.227.0 +sagemaker-studio-analytics-extension|0.0.21|0.1.2 +tensorflow|2.14.0|2.17.0 +uvicorn|0.30.1|0.30.6 + +## What's new: + +Package | Version +---|--- +jupyter-activity-monitor-extension|0.3.1 +mlflow|2.15.1 +sagemaker-mlflow|0.1.0 +tf-keras|2.17.0 diff --git a/build_artifacts/v2/v2.0/v2.0.0/Dockerfile b/build_artifacts/v2/v2.0/v2.0.0/Dockerfile new file mode 100644 index 00000000..86d33a9e --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/Dockerfile @@ -0,0 +1,183 @@ +ARG TAG_FOR_BASE_MICROMAMBA_IMAGE +FROM mambaorg/micromamba:$TAG_FOR_BASE_MICROMAMBA_IMAGE + +ARG CUDA_MAJOR_MINOR_VERSION='' +ARG ENV_IN_FILENAME +ARG ARG_BASED_ENV_IN_FILENAME + +ARG AMZN_BASE="/opt/amazon/sagemaker" +ARG DB_ROOT_DIR="/opt/db" +ARG DIRECTORY_TREE_STAGE_DIR="${AMZN_BASE}/dir-staging" + +ARG NB_USER="sagemaker-user" +ARG NB_UID=1000 +ARG NB_GID=100 + +# https://www.openssl.org/source/ +ARG FIPS_VALIDATED_SSL=3.0.8 + +ENV SAGEMAKER_LOGGING_DIR="/var/log/sagemaker/" +ENV STUDIO_LOGGING_DIR="/var/log/studio/" +ENV EDITOR="nano" + +USER root +RUN usermod "--login=${NB_USER}" "--home=/home/${NB_USER}" --move-home "-u ${NB_UID}" "${MAMBA_USER}" && \ + groupmod "--new-name=${NB_USER}" --non-unique "-g ${NB_GID}" "${MAMBA_USER}" && \ + # Update the expected value of MAMBA_USER for the + # _entrypoint.sh consistency check. + echo "${NB_USER}" > "/etc/arg_mamba_user" && \ + : +ENV MAMBA_USER=$NB_USER +ENV USER=$NB_USER + +RUN apt-get update && apt-get upgrade -y && \ + apt-get install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client nano cron less mandoc && \ + # We just install tzdata below but leave default time zone as UTC. This helps packages like Pandas to function correctly. + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata krb5-user libkrb5-dev libsasl2-dev libsasl2-modules && \ + chmod g+w /etc/passwd && \ + echo "ALL ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ + touch /etc/krb5.conf.lock && chown ${NB_USER}:${MAMBA_USER} /etc/krb5.conf* && \ + # Note that we do NOT run `rm -rf /var/lib/apt/lists/*` here. If we did, anyone building on top of our images will + # not be able to run any `apt-get install` commands and that would hamper customizability of the images. + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + sudo ./aws/install && \ + rm -rf aws awscliv2.zip && \ + : && \ + echo "source /usr/local/bin/_activate_current_env.sh" | tee --append /etc/profile && \ +# CodeEditor - create server, user data dirs + mkdir -p /opt/amazon/sagemaker/sagemaker-code-editor-server-data /opt/amazon/sagemaker/sagemaker-code-editor-user-data \ + && chown $MAMBA_USER:$MAMBA_USER /opt/amazon/sagemaker/sagemaker-code-editor-server-data /opt/amazon/sagemaker/sagemaker-code-editor-user-data && \ +# create dir to store user data files + mkdir -p /opt/amazon/sagemaker/user-data \ + && chown $MAMBA_USER:$MAMBA_USER /opt/amazon/sagemaker/user-data && \ +# Merge in OS directory tree contents. + mkdir -p ${DIRECTORY_TREE_STAGE_DIR} +COPY dirs/ ${DIRECTORY_TREE_STAGE_DIR}/ +RUN rsync -a ${DIRECTORY_TREE_STAGE_DIR}/ / && \ + rm -rf ${DIRECTORY_TREE_STAGE_DIR} && \ +# CodeEditor - download the extensions + mkdir -p /etc/code-editor/extensions && \ + while IFS= read -r url || [ -n "$url" ]; do \ + echo "Downloading extension from ${url}..." && \ + wget --no-check-certificate -P /etc/code-editor/extensions "${url}"; \ + done < /etc/code-editor/extensions.txt + +USER $MAMBA_USER +COPY --chown=$MAMBA_USER:$MAMBA_USER $ENV_IN_FILENAME *.in /tmp/ +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +ARG CONDA_OVERRIDE_CUDA=$CUDA_MAJOR_MINOR_VERSION + +# Make sure that $ENV_IN_FILENAME has a newline at the end before the `tee` command runs. Otherwise, nasty things +# will happen. +RUN if [[ -z $ARG_BASED_ENV_IN_FILENAME ]] ; \ + then echo 'No ARG_BASED_ENV_IN_FILENAME passed' ; \ + else envsubst < /tmp/$ARG_BASED_ENV_IN_FILENAME | tee --append /tmp/$ENV_IN_FILENAME ; \ + fi && \ + # Enforce dependencies are all installed from conda-forge + micromamba install -y --name base --file /tmp/$ENV_IN_FILENAME && \ + micromamba clean --all --yes --force-pkgs-dirs && \ + rm -rf /tmp/*.in && \ + sudo ln -s $(which python3) /usr/bin/python && \ + # Update npm version + npm i -g npm && \ + # Enforce to use `conda-forge` as only channel, by removing `defaults` + conda config --remove channels defaults && \ + micromamba config append channels conda-forge --env && \ + # Configure CodeEditor - Install extensions and set preferences + extensionloc=/opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions && mkdir -p "${extensionloc}" \ + # Loop through all vsix files in /etc/code-editor/extensions and install them + && for ext in /etc/code-editor/extensions/*.vsix; do \ + echo "Installing extension ${ext}..."; \ + sagemaker-code-editor --install-extension "${ext}" --extensions-dir "${extensionloc}" --server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data; \ + done \ + # Copy the settings + && cp /etc/code-editor/code_editor_machine_settings.json /opt/amazon/sagemaker/sagemaker-code-editor-server-data/data/Machine/settings.json && \ + # Install glue kernels, and move to shared directory + # Also patching base kernel so Studio background code doesn't start session silently + install-glue-kernels && \ + SITE_PACKAGES=$(pip show aws-glue-sessions | grep Location | awk '{print $2}') && \ + jupyter-kernelspec install $SITE_PACKAGES/aws_glue_interactive_sessions_kernel/glue_pyspark --user && \ + jupyter-kernelspec install $SITE_PACKAGES/aws_glue_interactive_sessions_kernel/glue_spark --user && \ + mv /home/sagemaker-user/.local/share/jupyter/kernels/glue_pyspark /opt/conda/share/jupyter/kernels && \ + mv /home/sagemaker-user/.local/share/jupyter/kernels/glue_spark /opt/conda/share/jupyter/kernels && \ + sed -i '/if not store_history and (/i\ if "sm_analytics_runtime_check" in code:\n return await self._complete_cell()\n' \ + "$SITE_PACKAGES/aws_glue_interactive_sessions_kernel/glue_kernel_base/BaseKernel.py" && \ + # Install FIPS Provider for OpenSSL, on top of existing OpenSSL installation + # v3.0.8 is latest FIPS validated provider, so this is the one we install + # But we need to run tests against the installed version. + # see https://github.com/openssl/openssl/blob/master/README-FIPS.md https://www.openssl.org/source/ + INSTALLED_SSL=$(micromamba list | grep openssl | tr -s ' ' | cut -d ' ' -f 3 | head -n 1) && \ + # download source code for installed, and FIPS validated openssl versions + curl -L https://www.openssl.org/source/openssl-$FIPS_VALIDATED_SSL.tar.gz > openssl-$FIPS_VALIDATED_SSL.tar.gz && \ + curl -L https://www.openssl.org/source/openssl-$INSTALLED_SSL.tar.gz > openssl-$INSTALLED_SSL.tar.gz && \ + tar -xf openssl-$FIPS_VALIDATED_SSL.tar.gz && tar -xf openssl-$INSTALLED_SSL.tar.gz && cd openssl-$FIPS_VALIDATED_SSL && \ + # Configure both versions to enable FIPS and build + ./Configure enable-fips --prefix=/opt/conda --openssldir=/opt/conda/ssl && make && \ + cd ../openssl-$INSTALLED_SSL && \ + ./Configure enable-fips --prefix=/opt/conda --openssldir=/opt/conda/ssl && make && \ + # Copy validated provider to installed version for testing + cp ../openssl-$FIPS_VALIDATED_SSL/providers/fips.so providers/. && \ + cp ../openssl-$FIPS_VALIDATED_SSL/providers/fipsmodule.cnf providers/. && \ + make tests && cd ../openssl-$FIPS_VALIDATED_SSL && \ + # After tests pass, install FIPS provider and remove source code + make install_fips && cd .. && rm -rf ./openssl-* && \ +# Create new config file with fips-enabled. Then user can override OPENSSL_CONF to enable FIPS +# e.g. export OPENSSL_CONF=/opt/conda/ssl/openssl-fips.cnf + cp /opt/conda/ssl/openssl.cnf /opt/conda/ssl/openssl-fips.cnf && \ + sed -i "s:# .include fipsmodule.cnf:.include /opt/conda/ssl/fipsmodule.cnf:" /opt/conda/ssl/openssl-fips.cnf && \ + sed -i 's:# fips = fips_sect:fips = fips_sect:' /opt/conda/ssl/openssl-fips.cnf && \ +# Install Kerberos. +# Make sure no dependency is added/updated + pip install "krb5>=0.5.1,<0.6" && \ + pip show krb5 | grep Require | xargs -i sh -c '[ $(echo {} | cut -d: -f2 | wc -w) -eq 0 ] ' && \ +# https://stackoverflow.com/questions/122327 + SYSTEM_PYTHON_PATH=$(python3 -c "from __future__ import print_function;import sysconfig; print(sysconfig.get_paths().get('purelib'))") && \ + # Remove SparkRKernel as it's not supported \ + jupyter-kernelspec remove -f -y sparkrkernel && \ + # Patch Sparkmagic lib to support Custom Certificates \ + # https://github.com/jupyter-incubator/sparkmagic/pull/435/files \ + cp -a ${SYSTEM_PYTHON_PATH}/sagemaker_studio_analytics_extension/patches/configuration.py ${SYSTEM_PYTHON_PATH}/sparkmagic/utils/ && \ + cp -a ${SYSTEM_PYTHON_PATH}/sagemaker_studio_analytics_extension/patches/reliablehttpclient.py ${SYSTEM_PYTHON_PATH}/sparkmagic/livyclientlib/reliablehttpclient.py && \ + sed -i 's= "python"= "/opt/conda/bin/python"=g' /opt/conda/share/jupyter/kernels/pysparkkernel/kernel.json /opt/conda/share/jupyter/kernels/sparkkernel/kernel.json && \ + sed -i 's="Spark"="SparkMagic Spark"=g' /opt/conda/share/jupyter/kernels/sparkkernel/kernel.json && \ + sed -i 's="PySpark"="SparkMagic PySpark"=g' /opt/conda/share/jupyter/kernels/pysparkkernel/kernel.json && \ + # Configure RTC - disable jupyter_collaboration by default + jupyter labextension disable @jupyter/collaboration-extension + +# Patch glue kernels to use kernel wrapper +COPY patch_glue_pyspark.json /opt/conda/share/jupyter/kernels/glue_pyspark/kernel.json +COPY patch_glue_spark.json /opt/conda/share/jupyter/kernels/glue_spark/kernel.json + +USER root + +# Create logging directories for supervisor +RUN mkdir -p $SAGEMAKER_LOGGING_DIR && \ + chmod a+rw $SAGEMAKER_LOGGING_DIR && \ + mkdir -p ${STUDIO_LOGGING_DIR} && \ + chown ${NB_USER}:${MAMBA_USER} ${STUDIO_LOGGING_DIR} && \ + + # Clean up CodeEditor artifacts + rm -rf /etc/code-editor && \ + # Create supervisord runtime directory + mkdir -p /var/run/supervisord && \ + chmod a+rw /var/run/supervisord && \ + # Create root directory for DB + # Create logging directories for supervisor + mkdir -p $DB_ROOT_DIR && \ + chmod a+rw $DB_ROOT_DIR && \ + HOME_DIR="/home/${NB_USER}/licenses" \ + && mkdir -p ${HOME_DIR} \ + && curl -o ${HOME_DIR}/oss_compliance.zip https://aws-dlinfra-utilities.s3.amazonaws.com/oss_compliance.zip \ + && unzip ${HOME_DIR}/oss_compliance.zip -d ${HOME_DIR}/ \ + && cp ${HOME_DIR}/oss_compliance/test/testOSSCompliance /usr/local/bin/testOSSCompliance \ + && chmod +x /usr/local/bin/testOSSCompliance \ + && chmod +x ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh \ + && ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh ${HOME_DIR} python \ + && rm -rf ${HOME_DIR}/oss_compliance* + +ENV PATH="/opt/conda/bin:/opt/conda/condabin:$PATH" +WORKDIR "/home/${NB_USER}" +ENV SHELL=/bin/bash +ENV OPENSSL_MODULES=/opt/conda/lib64/ossl-modules/ +USER $MAMBA_USER diff --git a/build_artifacts/v2/v2.0/v2.0.0/RELEASE.md b/build_artifacts/v2/v2.0/v2.0.0/RELEASE.md new file mode 100644 index 00000000..c6cf6444 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/RELEASE.md @@ -0,0 +1,59 @@ +# Release notes: 2.0.0 + +Package | gpu| cpu +---|---|--- +python|3.11.9|3.11.9 +numpy|1.26.4|1.26.4 +jinja2|3.1.4|3.1.4 +pytorch|2.3.1|2.3.1 +altair|5.4.0|5.4.0 +boto3|1.34.131|1.34.131 +ipython|8.26.0|8.26.0 +jupyter-lsp|2.2.5|2.2.5 +jupyterlab|4.1.8|4.1.8 +amazon-q-developer-jupyterlab-ext|3.2.0|3.2.0 +langchain|0.2.5|0.2.5 +jupyter-ai|2.20.0|2.20.0 +amazon-sagemaker-jupyter-ai-q-developer|1.0.9|1.0.9 +jupyter-scheduler|2.7.1|2.7.1 +amazon-sagemaker-jupyter-scheduler|3.1.3|3.1.3 +pandas|2.2.2|2.2.2 +amazon-sagemaker-sql-magic|0.1.3|0.1.3 +jupyterlab-lsp|5.0.3|5.0.3 +amazon_sagemaker_sql_editor|0.1.11|0.1.11 +scipy|1.12.0|1.12.0 +matplotlib-base|3.9.2|3.9.2 +scikit-learn|1.4.2|1.4.2 +pip|24.2|24.2 +torchvision|0.18.1|0.18.1 +autogluon|1.1.1|1.1.1 +ipywidgets|8.1.3|8.1.3 +notebook|7.1.3|7.1.3 +aws-glue-sessions|1.0.6|1.0.6 +conda|24.7.1|24.7.1 +fastapi|0.110.3|0.110.3 +jupyter-activity-monitor-extension|0.3.1|0.3.1 +jupyter-collaboration|2.1.2|2.1.2 +jupyter-dash|0.4.2|0.4.2 +jupyter-server-proxy|4.3.0|4.3.0 +jupyterlab-git|0.50.1|0.50.1 +keras|3.5.0|3.5.0 +langchain-aws|0.1.16|0.1.16 +mlflow|2.15.1|2.15.1 +py-xgboost-gpu|2.0.3| +pyhive|0.7.0|0.7.0 +python-gssapi|1.8.3|1.8.3 +python-lsp-server|1.11.0|1.11.0 +sagemaker-code-editor|1.3.1|1.3.1 +sagemaker-headless-execution-driver|0.0.13|0.0.13 +sagemaker-jupyterlab-emr-extension|0.3.2|0.3.2 +sagemaker-jupyterlab-extension|0.3.2|0.3.2 +sagemaker-kernel-wrapper|0.0.2|0.0.2 +sagemaker-mlflow|0.1.0|0.1.0 +sagemaker-python-sdk|2.227.0|2.227.0 +sagemaker-studio-analytics-extension|0.1.2|0.1.2 +supervisor|4.2.5|4.2.5 +tensorflow|2.17.0|2.17.0 +tf-keras|2.17.0|2.17.0 +uvicorn|0.30.6|0.30.6 +py-xgboost-cpu| |2.0.3 diff --git a/build_artifacts/v2/v2.0/v2.0.0/cpu.env.in b/build_artifacts/v2/v2.0/v2.0.0/cpu.env.in new file mode 100644 index 00000000..9cbc5693 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/cpu.env.in @@ -0,0 +1,55 @@ +# This file is auto-generated. +conda-forge::jupyter-activity-monitor-extension +conda-forge::mlflow[version='>=2.13.2,<3.0'] +conda-forge::sagemaker-mlflow[version='>=0.1.0,<1.0'] +conda-forge::langchain-aws[version='>=0.1.6'] +conda-forge::jupyter-collaboration[version='>=1.1.0'] +conda-forge::sagemaker-code-editor[version='>=1.1.0'] +conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.9'] +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.3'] +conda-forge::amazon-sagemaker-jupyter-ai-q-developer[version='>=1.0.4'] +conda-forge::amazon-q-developer-jupyterlab-ext[version='>=3.1.0'] +conda-forge::langchain[version='>=0.1.9'] +conda-forge::fastapi[version='>=0.110.3'] +conda-forge::uvicorn[version='>=0.30.1'] +conda-forge::pytorch[version='>=2.0.0'] +conda-forge::tensorflow[version='>=2.15.0'] +conda-forge::python[version='>=3.10.14'] +conda-forge::pip[version='>=23.3.2'] +conda-forge::torchvision[version='>=0.15.2'] +conda-forge::numpy[version='>=1.26.4'] +conda-forge::pandas[version='>=2.1.4'] +conda-forge::scikit-learn[version='>=1.4.2'] +conda-forge::jinja2[version='>=3.1.4'] +conda-forge::matplotlib-base[version='>=3.8.4'] +conda-forge::sagemaker-headless-execution-driver[version='>=0.0.12'] +conda-forge::ipython[version='>=8.25.0'] +conda-forge::scipy[version='>=1.11.4'] +conda-forge::keras[version='>=2.15.0'] +conda-forge::py-xgboost-cpu[version='>=1.7.6'] +conda-forge::jupyterlab[version='>=4.1.6'] +conda-forge::ipywidgets[version='>=8.1.3'] +conda-forge::conda[version='>=23.11.0'] +conda-forge::boto3[version='>=1.34.131'] +conda-forge::sagemaker-python-sdk[version='>=2.224.1'] +conda-forge::supervisor[version='>=4.2.5'] +conda-forge::autogluon[version='>=0.8.3'] +conda-forge::aws-glue-sessions[version='>=1.0.6'] +conda-forge::sagemaker-kernel-wrapper[version='>=0.0.2'] +conda-forge::jupyter-ai[version='>=2.18.1'] +conda-forge::jupyter-scheduler[version='>=2.7.1'] +conda-forge::jupyter-lsp[version='>=2.2.5'] +conda-forge::jupyterlab-lsp[version='>=5.0.3'] +conda-forge::python-lsp-server[version='>=1.11.0'] +conda-forge::notebook[version='>=7.1.3'] +conda-forge::altair[version='>=5.3.0'] +conda-forge::sagemaker-studio-analytics-extension[version='>=0.0.21'] +conda-forge::jupyter-dash[version='>=0.4.2'] +conda-forge::sagemaker-jupyterlab-extension[version='>=0.3.2'] +conda-forge::sagemaker-jupyterlab-emr-extension[version='>=0.1.9'] +conda-forge::amazon-sagemaker-jupyter-scheduler[version='>=3.1.0'] +conda-forge::jupyter-server-proxy[version='>=4.2.0'] +conda-forge::jupyterlab-git[version='>=0.50.0'] +conda-forge::pyhive[version='>=0.7.0'] +conda-forge::python-gssapi[version='>=1.8.3'] +conda-forge::tf-keras diff --git a/build_artifacts/v2/v2.0/v2.0.0/cpu.env.out b/build_artifacts/v2/v2.0/v2.0.0/cpu.env.out new file mode 100644 index 00000000..556f5b26 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/cpu.env.out @@ -0,0 +1,693 @@ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +@EXPLICIT +https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h77fa898_0.conda#ca0fad6a41ddaef54a153b78eccb5037 +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda#57d7dc60e9325e3de37ff8dffd18e814 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-hc0a3c3a_0.conda#1cb187a157136398ddbaae90713e2498 +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda#4d056880988120e29d75bfff282e0f45 +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-18.1.8-hf5423f3_1.conda#8782406a10201b67bd6476ca70cf92a8 +https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2#562b26ba2e19059551a811e72ab7f793 +https://conda.anaconda.org/conda-forge/linux-64/_py-xgboost-mutex-2.0-cpu_0.tar.bz2#23b8f98a355030331f40d0245492f715 +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda#62ee74e96c5ebb0af99386de58cf9553 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda#b80f2f396ca2c28b8c14c437a4ed1e74 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda#e7ba12deb7020dd080c6c70e7b6f6a3d +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda#18aa975d2094c34aef978060ae7da7d8 +https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b +https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda#5aa797f8787fe7a17d1b0821485b5adc +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda#fcea371545eda051b6deafb24889fc69 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.7.4-hbcca054_0.conda#23ab7665c5f63cfb9f1f6195256daac6 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-h4bc722e_2.conda#e1b454497f9f7c1147fdde4b53f1b512 +https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda#d453b98d9c83e71da0741bb0ff4d76bc +https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda#161081fc7cec0bfda0d86d7cb595f8d8 +https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0 +https://conda.anaconda.org/conda-forge/linux-64/python-3.11.9-hb806964_0_cpython.conda#ac68acfa8b558ed406c75e98d3428d7b +https://conda.anaconda.org/conda-forge/noarch/absl-py-2.1.0-pyhd8ed1ab_0.conda#035d1d58677c13ec93122d9eb6b8803b +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_0.conda#6456c2620c990cd8dde2428a27ba0bc5 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_0.conda#f4ca84fbd6d06b0a052fb2d5b96dde41 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda#ae05ece66d3924ac3d48b4aa3fa96cec +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-23_linux64_openblas.conda#96c8450a40aa2b9733073a9460de972c +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-23_linux64_openblas.conda#eede29b40efa878cbe5bdcb767e97310 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-23_linux64_openblas.conda#2af0879961951987e464722fd00ec1e0 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-5_cp311.conda#139a8d40c8a2f430df31048949e450de +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda#a502d7aad449a1206efb366d6a12c52d +https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda#cbe1bb1f21567018ce595d9c2be0f0db +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py311h459d7ec_0.conda#9bc62d25dcf64eec484974a3123c9d57 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.15.4-pyhd8ed1ab_0.conda#0e7e4388e9d5283e22b35a9443bdbcc9 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda#a322b4185121935c871d201ae00ac143 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda#7b86ecb7d3557821c649b3c31e3eb9f2 +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240116.2-cxx17_he02047a_1.conda#c48fc56ec03229f294176923c3265c05 +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.25.3-h08a7969_0.conda#6945825cebd2aeb16af4c69d97c32c13 +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.48.0-hd590300_0.conda#7e8b914b1062dd4386e3de4d82a3ead6 +https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda#8b189310083baabfb622af68fd9d3ae3 +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda#d66573916ffcf376178462f1b61c941e +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-he7c6b58_4.conda#08a9265c637230c37cb1be4a6cad4536 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.1-default_hecaa2ac_1000.conda#f54aeebefb5c5ff84eca4fb05ca8aa3a +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.12.0-h434a139_3.conda#c667c11d1e488a38220ede8a34441bff +https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda#81d4a1a57d618adf0152db973d93b2ad +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.6.1-h3400bea_1.conda#ac00525f47c9fd0e0456a64caef525a6 +https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.3.1-cpu_mkl_h0bb0d08_100.conda#7ecacfd9230bc1e57801649fe3066206 +https://conda.anaconda.org/conda-forge/noarch/networkx-3.3-pyhd8ed1ab_1.conda#d335fd5704b46f4efb89a6774e81aef0 +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda#c94a5994ef49749880a8139cf9afcbe1 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h38ae2d0_2.conda#168e18a2bba4f8520e6c5e38982f5847 +https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-hfe3b2da_0.conda#289c71e83dc0daa7d4c81f04180778ca +https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.1.5-py311hc4f1f91_1.conda#30b83b4a5d116d790f8da79a4acac238 +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda#dbf6e2d89137da32fa6670f3bffc024e +https://conda.anaconda.org/conda-forge/noarch/sympy-1.13.2-pypyh2585a3b_103.conda#7327125b427c98b81564f164c4a75d4c +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda#ebe6952715e1d5eb567eeebf25250fa7 +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.3.1-cpu_mkl_py311hcb16b95_100.conda#73df2c21364f6ab06556926cac7aff60 +https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py311h61187de_0.conda#76439451605390254b85d8da6f8d962a +https://conda.anaconda.org/conda-forge/noarch/accelerate-0.21.0-pyhd8ed1ab_0.conda#172fa1bba08cd6b431a1739090ab0ffc +https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.1-py311h459d7ec_0.conda#b267e553a337e1878512621e374845c5 +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2#d1e1eb7e21a9e2c74279d87dafb68156 +https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda#5e4c0743c70186509d1412e03c2d8dfa +https://conda.anaconda.org/conda-forge/linux-64/multidict-6.0.5-py311h459d7ec_0.conda#4288ea5cbe686d1b18fc3efb36c009a5 +https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda#c0cc1420498b17414d8617d0b9f506ca +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py311h459d7ec_0.conda#fff0f2058e9d86c8bf5848ee93917a8d +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.5-py311h459d7ec_0.conda#0175d2636cc41dc019b51462c13ce225 +https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.11.0-pyhd8ed1ab_0.tar.bz2#59c40397276a286241c65faec5e1be3c +https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_0.tar.bz2#2cfa3e1cf3fb51bb9b17acc5b5e9ea11 +https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 +https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda#2cf4264fffb9e6eff6031c5b6884d61c +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda#cce9e7c3f1c307f2a5fb08a2922d6164 +https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025 +https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.19-pyhd8ed1ab_0.conda#6bb37c314b3cc1515dcf086ffe01c46e +https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.131-pyge310_1234567_0.conda#955a32ec433efee3e3ab19658ce1996d +https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py311h459d7ec_0.conda#6669b5529d206c1f880b642cdd17ae05 +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.13.2-pyhd8ed1ab_0.conda#c188c514ef97f345144d7840128c0a1d +https://conda.anaconda.org/conda-forge/noarch/aiohttp-cors-0.7.0-py_0.tar.bz2#276767d5ffa1515c293d25bd78f22a0b +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda#52d648bd608f5737b123f510bb5514b5 +https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8 +https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.0-pyhd8ed1ab_0.conda#05b6bcb391b5be17374f7ad0aeedc479 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.10.0-pyha770c72_0.conda#ae2ad334f34040e147cc5824b450463b +https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.3-pyhd8ed1ab_0.conda#82b36c572ecc0d42c612203769e19de5 +https://conda.anaconda.org/conda-forge/noarch/mako-1.3.5-pyhd8ed1ab_0.conda#29fddbfa0e2361636a98de4f46ead2ac +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.3-py311hb755f60_0.conda#6f4b03b4d1e0da0962ea02113382677c +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.32-py311h61187de_0.conda#2248e75f001930ba8389fe91c51be50b +https://conda.anaconda.org/conda-forge/noarch/alembic-1.13.2-pyhd8ed1ab_0.conda#0045ed5e28a7f2c252a30442408b36c4 +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py311hb3a8bbb_0.conda#db475e65fb621c2ec1dcdcc4e170b6f1 +https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda#0fc8b52192a8898627c3efae1003e9f6 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda#a0e4efb5f35786a05af4809a2fb1f855 +https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda#8a3a3d01629da20befa340919e3dd2c4 +https://conda.anaconda.org/conda-forge/noarch/narwhals-1.4.2-pyhd8ed1ab_0.conda#fc31373e7cd4393c47681113a9f1ffc6 +https://conda.anaconda.org/conda-forge/noarch/altair-5.4.0-pyhd8ed1ab_0.conda#724b2fcbf280b900289ad1c88f492dcd +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.2-pyhd8ed1ab_0.conda#80f00f9033aee2358171207746e09ea0 +https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.131-pyhd8ed1ab_0.conda#16cbd51eb7f0fc40a88c636006437c85 +https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda#3d081de3a6ea9f894bbb585e8e3a4dcb +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda#d02ae936e42063ca46af6cdad2dbd1e0 +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda#490730480d76cf9c8f8f2849719c6e2b +https://conda.anaconda.org/conda-forge/noarch/anyio-4.4.0-pyhd8ed1ab_0.conda#1fa97c6e8db1f82c64ff17a5efc4ae8e +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.7.4-pyhd8ed1ab_0.conda#24e7fd6ca65997938fff9e5ab6f653e4 +https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2#b21ed0883505ba1910994f1df031a428 +https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2#914d6646c4dbb1fd3ff539830a12fd71 +https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2#9f765cbfab6870c8435b9eefecd7a1f4 +https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2#b748fbf7060927a6e82df7cb5ee8f097 +https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda#a6b9a0158301e697e4d0a36a3d60e133 +https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.0-pyhd8ed1ab_0.conda#9f359af5a886fd6ca6b2b6ea02e58332 +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.10.0-hd8ed1ab_0.conda#c063ddbb9908499fd4f20b31dc67065a +https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda#3df84416a021220d8b5700c613af2dc5 +https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda#948d84721b578d426294e17a02e24cbb +https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.5-py311hf86e51f_0.conda#748a22f229ec0e62963b8045b8e6786c +https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364 +https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda#81534b420deb77da8833f2289b8d47ac +https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2 +https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda#779345c95648be40d22aaa89de7d4254 +https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263 +https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda#629f3203c99b32e0988910c93e77f3b6 +https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761 +https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda#68f0738df502a14213624b288c60c9ad +https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda#1247c861065d227781231950e14fe817 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda#b7f5c092b8f9800150d998a71b76d5a1 +https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda#5f25798dcefd8252ce5f9dc494d5f571 +https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda#e16be50e378d8a4533b989035b196ab8 +https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda#0f051f09d992e0d08941706ad519ee0e +https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af +https://conda.anaconda.org/conda-forge/noarch/ipython-8.26.0-pyh707e725_0.conda#f64d3520d5d00321c10f4dabb5b903f3 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py311h38be061_0.conda#f85e78497dfed6f6a4b865191f42de2e +https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d +https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2#30186d27e2c9fa62b45fb1476b7200e3 +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2#4d331e44109e3f0e19b4cb8f9b82f3e1 +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda#3f43953b7d3fb3aaa1d0d0723d91e368 +https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h75354e8_4.conda#03cc8d9838ad9dd0060ab532e81ccb21 +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.1.0-py311h759c1eb_0.conda#cb593185b7ad0343158081c2da456bfc +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py311h331c9d8_0.conda#e29e451c96bf8e81a5760b7565c6ed2c +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.2-pyhd8ed1ab_0.conda#3cdbb2fa84490e5fd44c9f9806c0d292 +https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda#6598c056f64dc8800d40add25e4e2c34 +https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda#b40131ab6a36ac2c09b7c57d4d3fbf99 +https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda#844d9eb3b43095b031874477f7d70088 +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.0-py311ha8e6434_0.conda#32259cd17741b52be10cd23a26cca23a +https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py311h459d7ec_4.conda#de5b16869a430949b02161b04b844a30 +https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4 +https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a +https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551 +https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3 +https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20240316-pyhd8ed1ab_0.conda#7831efa91d57475373ee52fb92e8d137 +https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508 +https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a +https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py311h38be061_0.conda#01a505ab9b4e3af12baa98b82f5fcafa +https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520 +https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f +https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c +https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda#eb48b812eb4fbb9ff238a6651fdbbcae +https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.21.1-pyhd8ed1ab_0.conda#26bce4b5405738c09304d4f4796b2c2a +https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960 +https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda#ed45423c41b3da15ea1df39b1f80c2ca +https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda#efba281bbdae5f6b0a1d53c6d4a97c93 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda#219b3833aa8ed91d47d1be6ca03f30be +https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561 +https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda#332493000404d8411859539a5a630865 +https://conda.anaconda.org/conda-forge/noarch/setuptools-72.1.0-pyhd8ed1ab_0.conda#e06d4c26df4f958a8d38696f2c344d15 +https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9 +https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e +https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2 +https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda#afcd1b53bcac8844540358e33f33d28f +https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda#5cbee699846772cc939bef23a0d524ed +https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda#b98d2018c01ce9980c03ee2850690fab +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda#0b57b5368ab7fc7cdc9e3511fa867214 +https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda#15b51397e0fe8ea7d7da60d83eb76ebc +https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9 +https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda#8662629d9a05f9cff364e31ca106c1ac +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda#e2d2abb421c13456a9a9f80272fdf543 +https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2#eb67e3cace64c66233e2d35949e20f92 +https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda#24fba5a9d161ad8103d4e84c0e1a3ed4 +https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda#9a19b94034dd3abb2b348c8b93388035 +https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda#778594b20097b5a948c59e50ae42482a +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda#f372c576b8774922da83cda2b12f9d29 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda#ca23c71f70a7c7935b3d03f0f1a5801d +https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda#885867f6adab3d7ecdf8ab6ca0785f51 +https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda#9669586875baeced8fc30c0826c3270e +https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda#5d8c241a9261e720a34a07a3e1ac4109 +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda#7f4a9e3fcff3f6356ae99244a014da6a +https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda#5ede4753180c7a550a443c430dc8ab52 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda#af8239bf1ba7e8c69b689f780f653488 +https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda#3d85618e2c97ab896b5b5e298d32b5b3 +https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.1.8-pyhd8ed1ab_0.conda#1116781efc9fd1654a9da329d5d3ba26 +https://conda.anaconda.org/conda-forge/noarch/amazon-q-developer-jupyterlab-ext-3.2.0-pyhd8ed1ab_0.conda#d7142222c9f8cdbfb475ac6f786a80fe +https://conda.anaconda.org/conda-forge/noarch/aws-embedded-metrics-3.2.0-pyhd8ed1ab_0.conda#e1c511655b6e9eb0265c9715c7fa410f +https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 +https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda#0badf9c54e24cecfb0ad2f99d680c163 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.8.0-pyhd8ed1ab_0.conda#bf68bf9ff9a18f1b17aa8c817225aee0 +https://conda.anaconda.org/conda-forge/noarch/deepmerge-1.1.1-pyhd8ed1ab_0.conda#d91c3d8ac3f2ab36ca4ea32ac42f731e +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py311h459d7ec_0.conda#13d385f635d7fbe9acc93600f67a6cb4 +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.8-py311h52f7536_0.conda#f33f59b8130753174992f409a41e112e +https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2#6d6552722448103793743dabfbda532d +https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda#f5580336fe091d46f9a2ea97da044550 +https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 +https://conda.anaconda.org/conda-forge/noarch/distributed-2024.8.0-pyhd8ed1ab_0.conda#f9a7fbaeb79d4b57d1ed742930b4eec4 +https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_2.conda#18c6deb6f9602e32446398203c8f0e91 +https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 +https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda#3ce482ec3066e6d809dbbb1d1679f215 +https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.21.3-pyhd8ed1ab_0.conda#2c99be9dade8ab821e0fd279c9895120 +https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda#4eccaeba205f0aed9ac3a9ea58568ca3 +https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_0.conda#9e924b76b91908a17e28a19a0ab88687 +https://conda.anaconda.org/conda-forge/noarch/dataclasses-json-0.6.7-pyhd8ed1ab_0.conda#c4bbd4cb04570e17833a4280617d6cd8 +https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda#bfdb7c5c6ad1077c82a69a8642c87aff +https://conda.anaconda.org/conda-forge/linux-64/orjson-3.10.7-py311hb3a8bbb_0.conda#bf27a1b7c076f31de15d1937ef6c55e6 +https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.17-py311h61187de_0.conda#05a1c582a55f4b147e1533672245e98e +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.99-pyhd8ed1ab_0.conda#699830f9ff8285d83667244a02f99109 +https://conda.anaconda.org/conda-forge/noarch/tenacity-8.5.0-pyhd8ed1ab_0.conda#354cbc1244395cabbaec2617906d3a27 +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.2.33-pyhd8ed1ab_0.conda#953ab0389ec87ffa7f77b31678c843c0 +https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.2.2-pyhd8ed1ab_0.conda#732d34d740166cb824724253fc814f6a +https://conda.anaconda.org/conda-forge/noarch/langchain-0.2.5-pyhd8ed1ab_0.conda#22ce86630c642b2d784796fc2913bc2e +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.2.12-pyhd8ed1ab_0.conda#531058cf6a591227798370c116a046c1 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.20.0-pyhd8ed1ab_0.conda#985361fcd075ec75bc5d96b2e3915cd1 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.20.0-pyhd8ed1ab_0.conda#4c5e858d76fe277627591f082f162860 +https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py311h46250e7_0.conda#1c3cc0b6fd796ba4ef2b562c23ee3e04 +https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.12.4-pyhd8ed1ab_0.conda#7f558701e9a089188cc81d620282ef28 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-common-0.1.21-pyhd8ed1ab_0.conda#b938dcd1d9d54a85bfd0c4411abe62d0 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-ai-q-developer-1.0.9-pyhd8ed1ab_0.conda#e473f66d59dc47dd2a686472a2a9a240 +https://conda.anaconda.org/conda-forge/noarch/croniter-1.4.1-pyhd8ed1ab_0.conda#7a4568626f8d6e7c63dcb25d5501a967 +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.3-ha770c72_0.conda#0a3af8b93ba501c6ba020deacc9df841 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.4-hd8ed1ab_1.conda#37cec2cf68f4c09563d8bc833791096b +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.4-hd8ed1ab_1.conda#ab83e3b9ca2b111d8f332e9dc8b2170f +https://conda.anaconda.org/conda-forge/noarch/jupyter_scheduler-2.7.1-pyha770c72_0.conda#141ab6dd2962acac184c84672adf2571 +https://conda.anaconda.org/conda-forge/noarch/jupyter-scheduler-2.7.1-hd8ed1ab_0.conda#f3fd741ca8607da2245aa4802e9a2a62 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-scheduler-3.1.3-pyhd8ed1ab_0.conda#a8a13e303f473e7f66c90ab06703728e +https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.0-py311hc6616f6_0.conda#f392b3f7a26db16f37cf82996dcfc84d +https://conda.anaconda.org/conda-forge/noarch/pyathena-3.9.0-pyhd8ed1ab_0.conda#e486c9f5bcaf4eea11d3c7ead950ef18 +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda#e71f31f8cfb0a91439f2086fc8aa0461 +https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.4-py311h9691dec_0.conda#bf616b82576b9a7c65ba3611cce36c23 +https://conda.anaconda.org/conda-forge/noarch/asn1crypto-1.5.1-pyhd8ed1ab_0.tar.bz2#f3f2ab3ce28979a24d1a988ba211eb9b +https://conda.anaconda.org/conda-forge/noarch/scramp-1.4.4-pyhd8ed1ab_0.tar.bz2#2fac165a69d120a1689e1955ba1a4bfd +https://conda.anaconda.org/conda-forge/noarch/redshift_connector-2.1.2-pyhd8ed1ab_0.conda#e6a525569f74610adc8dbc02377bd4ce +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-execution-0.1.3-pyhd8ed1ab_0.conda#4b2d24a39133e2dda52ece10bfe56810 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda#98206ea9954216ee7540f0c773f2104d +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.2-py311h14de704_1.conda#84e2dd379d4edec4dd6382861486104d +https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.5.1-pyhd8ed1ab_0.conda#e8af29e73e8b5906d8882c1f67222d34 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-magic-0.1.3-pyhd8ed1ab_0.conda#ff59aa43fe9d2a32db1d7cbbcb338467 +https://conda.anaconda.org/conda-forge/noarch/diskcache-5.6.3-pyhd8ed1ab_0.conda#4c33109f652b5d8c995ab243436c9370 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-lsp-5.0.3-pyhd8ed1ab_0.conda#63ec86c18fd4ab77ae3ada5d48bcf6fc +https://conda.anaconda.org/conda-forge/noarch/amazon_sagemaker_sql_editor-0.1.11-pyhd8ed1ab_0.conda#740d3ec2622063fce6c145374b644cd4 +https://conda.anaconda.org/conda-forge/noarch/aniso8601-9.0.1-pyhd8ed1ab_0.tar.bz2#36fba1a639f2d24723c5480345b78553 +https://conda.anaconda.org/conda-forge/linux-64/ansi2html-1.9.2-py311h38be061_1.conda#f1732173bdb38137d7919c7a00075780 +https://conda.anaconda.org/conda-forge/noarch/ansicolors-1.1.8-pyhd8ed1ab_0.tar.bz2#e4929dd673bcb012fab516878e72f6f6 +https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2#c88eaec8de9ae1fa161205aa18e7a5b1 +https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda#346722a0be40f6edc53f12640d301338 +https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda#192278292e20704f663b9c766909d67b +https://conda.anaconda.org/conda-forge/linux-64/astroid-3.2.4-py311h38be061_0.conda#1648d955b9af260d06a791c195ad57a7 +https://conda.anaconda.org/conda-forge/noarch/astunparse-1.6.3-pyhd8ed1ab_0.tar.bz2#000b6f68a0bfaba800ced7500c11780f +https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda#df359c09c41cd186fffb93a2d87aa6f5 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda#b0143a3e98136a680b728fdf9b42a258 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda#f730d54ba9cd543666d7220c9f7ed563 +https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 +https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda#c6e94fc2b2ec71ea33fe7c7da259acb4 +https://conda.anaconda.org/conda-forge/noarch/autogluon.common-1.1.1-pyhd8ed1ab_0.conda#af83f5eb1d39122861f80229f26075aa +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda#650a7807e689642dddd3590eb817beed +https://conda.anaconda.org/conda-forge/noarch/py4j-0.10.9.7-pyhd8ed1ab_0.tar.bz2#0f01a52cf858aef86632a8ab08011c0c +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.12.0-py311h64a7726_2.conda#24ca5107ab75c5521067b8ba505dfae5 +https://conda.anaconda.org/conda-forge/noarch/hyperopt-0.2.7-pyhd8ed1ab_0.tar.bz2#260711cc18720efc12925bfc90418e93 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.1-py311h9547e67_0.conda#74ad0ae64f1ef565e27eda87fa749e84 +https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda#aec6c91c7371c26392a06708a73c70e5 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda#f07002e225d7a60a694d42a7bf5ff53f +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda#5fc11c6020d421960607d821310fcd4d +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda#39f910d205726805a958da408ca194ba +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.53.1-py311h61187de_0.conda#bcbe6c9db1c25900c3808b8974e1bb90 +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda#009981dd9cfcaa4dbfa25ffaed86bcae +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_1.conda#2c65bdf442b0d37aad080c8a4e0d452f +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76bbff344f0134279f225174e9064c8f +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.21-h4bc722e_0.conda#36ce76665bf67f5aac36be7a0d21b7f3 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda#b26e8aa824079e1be0294e7152ca4559 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h46a8edc_4.conda#a7e3a62981350e232e0e7345b5aea580 +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 +https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda#2c80dc38fface310c9bd81b17037fee5 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2#be93aabceefa2fac576e971aef407908 +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.16-hd590300_0.conda#151cba22b85a989c2d6ef9633ffee1e4 +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda#7f2e286780f072ed750df46dc2631138 +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.4.0-py311h82a398c_0.conda#b9e0ac1f5564b6572a6d702c04207be8 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f +https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda#353823361b1d27eb3960efb076dfcaf6 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py311h74b4f7c_0.conda#de8e36c9792f14eed7e11e672f03fbf0 +https://conda.anaconda.org/conda-forge/noarch/colorful-0.5.6-pyhd8ed1ab_0.conda#a75276da977eecc9224dea358576e2ec +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.33.0-ha66036c_0.conda#b6927f788e85267beef6cbb292aaebdd +https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2023.09.01-h5a48ba9_2.conda#41c69fba59d495e8cf5ffda48a607e35 +https://conda.anaconda.org/conda-forge/linux-64/re2-2023.09.01-h7f4b329_2.conda#8f70e36268dea8eb666ef14c29bd3cda +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.62.2-h15f2491_0.conda#8dabe607748cb3d7002ad73cd06f1325 +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.62.2-py311ha6695c7_0.conda#5256f630309144ad1a6e4ec1736f5d66 +https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda#ec7398d21e2651e0dcb0044d03b9a339 +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.4-hfca40fe_0.conda#32ddb97f897740641d8d46a829ce1704 +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda#172bf1cd1ff8629f2b1179945ed45055 +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda#700ac6ea6d53d5510591c4344d5c989a +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.9.1-hdb1bdb2_0.conda#7da1d242ca3591e174a3c7d82230d3c0 +https://conda.anaconda.org/conda-forge/linux-64/gettext-tools-0.22.5-he02047a_3.conda#fcd2016d1d299f654f81021e27496818 +https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.22.5-he8f35ee_3.conda#4fab9799da9571266d05ca5503330655 +https://conda.anaconda.org/conda-forge/linux-64/libasprintf-devel-0.22.5-he8f35ee_3.conda#1091193789bb830127ed067a9e01ac57 +https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.22.5-he02047a_3.conda#efab66b82ec976930b96d62a976de8e7 +https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-devel-0.22.5-he02047a_3.conda#9aba7960731e6b4547b3a52f812ed801 +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.22.5-he02047a_3.conda#c7f243bbaea97cd6ea1edd693270100e +https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2#7245a044b4a1980ed83196176b78b73a +https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.7-hd590300_0.conda#2b7b0d827c6447cc1d85dc06d5b5de46 +https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.19.0-h166bdaf_0.tar.bz2#93840744a8552e9ebf6bb1a5dffc125a +https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda#2bf1915cc107738811368afcb0993a59 +https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2#56ee94e34b71742bbdfa832c974e47a8 +https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.7-h32866dd_0.conda#b3217a6e20b24a6dafa0f0b3d13995c6 +https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda#c384e4dcd3c345b54bfb79d9ff712349 +https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.191-h924a536_0.conda#73d050766060acd2b3a289f27d857090 +https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2#a730b2badd586580c5752cc73842e068 +https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda#776a8dd9e824f77abac30e6ef43a8f7a +https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda#93a8e71256479c62074356ef6ebf501b +https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda#ba445bf767ae6f0d959ff2b40c20912b +https://conda.anaconda.org/conda-forge/noarch/textual-0.76.0-pyhd8ed1ab_0.conda#e547297f25a7d5c240fa51427a6f90ea +https://conda.anaconda.org/conda-forge/linux-64/memray-1.13.4-py311h683c4d6_0.conda#452f1f130f3f531b09c6bd3368a2aae7 +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-h4ab18f5_1.conda#9653f1bf3766164d0e65fa723cabbc54 +https://conda.anaconda.org/conda-forge/linux-64/nodejs-20.12.2-hc19f0b3_1.conda#0b86ff6ab7bdce5076269f2bbbf6857d +https://conda.anaconda.org/conda-forge/noarch/cachetools-5.5.0-pyhd8ed1ab_0.conda#5bad039db72bd8f134a5cff3ebaa190d +https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.6.0-pyhd8ed1ab_0.conda#d528d00a110a974e75aa6db6a4f04dc7 +https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.4.0-pyhd8ed1ab_0.conda#8e40d7b2b3bdf9f3cab88d93d7dfaf3b +https://conda.anaconda.org/conda-forge/noarch/pyopenssl-24.2.1-pyhd8ed1ab_2.conda#85fa2fdd26d5a38792eb57bc72463f07 +https://conda.anaconda.org/conda-forge/noarch/pyu2f-0.1.5-pyhd8ed1ab_0.tar.bz2#caabbeaa83928d0c3e3949261daa18eb +https://conda.anaconda.org/conda-forge/noarch/rsa-4.9-pyhd8ed1ab_0.tar.bz2#03bf410858b2cefc267316408a77c436 +https://conda.anaconda.org/conda-forge/noarch/google-auth-2.33.0-pyhff2d567_0.conda#5a750d3f2f4bfb378322dda0d8a02018 +https://conda.anaconda.org/conda-forge/linux-64/protobuf-4.25.3-py311h7b78aeb_0.conda#fe6c263e6bd0ec098995b7cd176b0f95 +https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.63.2-pyhd8ed1ab_0.conda#2932e8c15f7836f47006309a373ff179 +https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.23.0-pyhd8ed1ab_0.conda#26c043ffe1c027eaed894d70ea04a18d +https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.19.1-pyhd8ed1ab_0.conda#3a194e077990a1e3a70d83ef09d8bcf9 +https://conda.anaconda.org/conda-forge/linux-64/opencensus-context-0.1.3-py311h38be061_2.conda#d6e0de91d4f50d84534e3771dbb3fbc5 +https://conda.anaconda.org/conda-forge/noarch/opencensus-0.11.3-pyhd8ed1ab_0.conda#17ec70761b45b88869622e09442b19f6 +https://conda.anaconda.org/conda-forge/linux-64/py-spy-0.3.14-h87a5ac0_0.tar.bz2#280f7f1025ef7c729d4c81d70540c8ad +https://conda.anaconda.org/conda-forge/linux-64/setproctitle-1.3.3-py311h459d7ec_0.conda#82a78657a66e78c04e614ceb772ee8da +https://conda.anaconda.org/conda-forge/linux-64/ray-core-2.31.0-py311h0847d76_1.conda#7f09125fa898a328275a9a3ed796369f +https://conda.anaconda.org/conda-forge/noarch/smart_open-7.0.4-pyhd8ed1ab_0.conda#2804ae86934b30c2afbd713d1448afe5 +https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda#db16c66b759a64dc5183d69cc3745a52 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.21.0-pyhd8ed1ab_0.conda#cb9a711f7c9f3074fe522e5a34481e60 +https://conda.anaconda.org/conda-forge/linux-64/ray-default-2.31.0-py311h48098de_1.conda#614d268cebf67836273b6758e0000002 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.27-h4bc722e_0.conda#817119e8a21a45d325f65d0d54710052 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.7.3-h8dac057_2.conda#577509458a061ddc9b089602ac6e1e98 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.18-h038f3f9_10.conda#76b09778c1bd489de8691349fd4a73d0 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.0-h3400bea_0.conda#5f17883266c5312a1fc73583f28ebae5 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.14.18-h0040ed1_5.conda#2f6316f09b3152fecc2d34ab69508e6a +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.7-ha1f794c_4.conda#b506fe315f908ea9b94036a1e5de5e6e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.19-h038f3f9_2.conda#6861cab6cddb5d713cb3db95c838d30f +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.25-h15d0e8c_6.conda#e0d292ba383ac09598c664186c0144cd +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.18-h038f3f9_10.conda#4bf9c8fcf2bb6793c55e5c5758b9b011 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.2-h570d160_21.conda#f6f77c408f324ed20bba4b32cb04d875 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.4-hc14a930_17.conda#f0e3f95a9f545d5975e8573f80cdb5fa +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.6.4-h558cea2_8.conda#af03e7b03e929396fb80ffac1a676c89 +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.27.5-hd0b8a3b_7.conda#059dc1576393ab4b807e74f90e5db6d9 +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.379-h7dc8893_3.conda#c077ea74db96ebfd3366a2bae0701448 +https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-he1b5a44_1004.tar.bz2#cddaf2c63ea4a5901cf09524c490ecdc +https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda#ff862eebdfeb2fd048ae9dc92510baca +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.28.0-h26d7fe4_0.conda#2c51703b4d775f8943c08a361788131b +https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2#c965a5aa0d5c1c37ffc62dff36e28400 +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.28.0-ha262f82_0.conda#9e7960f0b9ab3895ef73d92477c47dae +https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2#ede4266dc02e875fe1ea77b25dd43747 +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-ha2e4443_0.conda#6b7dcc7349efd123d493d2dbe85a045f +https://conda.anaconda.org/conda-forge/linux-64/orc-2.0.2-h669347b_0.conda#1e6c10f7d749a490612404efeb179eb8 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-15.0.2-hf4c2b5f_24_cpu.conda#4dd80e8d236e1147ea3ff01fc411cb40 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-15.0.2-h44f6110_24_cpu.conda#e3405759eb8deda302f0a68914e977ca +https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda#a1cfcc585f0c42bf8d5546bb1dfb668d +https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.20.0-hb90f79a_0.conda#9ce07c1750e779c9d4cc968047f78b0d +https://conda.anaconda.org/conda-forge/linux-64/libparquet-15.0.2-h7ca84d5_24_cpu.conda#4b1f2e1024b512e159291afd96d898ce +https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-15.0.2-h44f6110_24_cpu.conda#0448704bd1fc3b16f6b5608d2c38d736 +https://conda.anaconda.org/conda-forge/linux-64/libnl-3.10.0-h4bc722e_0.conda#6221e705f55cf0533f0777ae54ad86c6 +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-53.0-he02047a_0.conda#d60e9a23682287a041a4428927ea7aa5 +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.16.0-h209287a_5.conda#1bd6b5d51b155a3c03b6aa2702d37f3f +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-15.0.2-h55b8332_24_cpu.conda#c5445c6878608f0d515fe29bc1ef2334 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-15.0.2-h61825be_24_cpu.conda#23a80a834706f0c8bc55766152118284 +https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-hb3ce162_3.conda#a4d48c40dd5c60edbab7fd69c9a88967 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-15.0.2-hfcb4b9d_24_cpu.conda#c63a529a946c01affb17bed515040ab7 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-15.0.2-h61825be_24_cpu.conda#909169f6595ec743057d68de255a4a56 +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-15.0.2-py311hb545094_24_cpu.conda#a57b67589e797b6c79051c93a2aff511 +https://conda.anaconda.org/conda-forge/noarch/tensorboardx-2.6.2.2-pyhd8ed1ab_0.conda#eddae4814ac4040d88009779fc1e2d9e +https://conda.anaconda.org/conda-forge/linux-64/ray-tune-2.31.0-py311h38be061_1.conda#9244b753b2deab5cdd59c14498df9880 +https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_0.conda#25df261d4523d9f9783bcdb7208d872f +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda#df68d78237980a159bd7149f33c0e8fd +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.2-py311he08f58d_1.conda#fd4a80e35c05513590b33c83fc81dcc7 +https://conda.anaconda.org/conda-forge/noarch/autogluon.core-1.1.1-pyha770c72_2.conda#b6b8bb53119aab2be0c9661b0e4f76da +https://conda.anaconda.org/conda-forge/noarch/autogluon.features-1.1.1-pyhd8ed1ab_0.conda#726c446f8c8e74f9a5c8098a7a43084b +https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py311h38be061_1.conda#b8cfb13de4dbe349a41800644391de6a +https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2#a556fa60840fcb9dd739d186bfd252f7 +https://conda.anaconda.org/conda-forge/noarch/text-unidecode-1.3-pyhd8ed1ab_1.conda#ba8aba332d8868897ce44ad74015a7fe +https://conda.anaconda.org/conda-forge/noarch/python-slugify-8.0.4-pyhd8ed1ab_0.conda#4b11845622b3c3178c0e989235b53975 +https://conda.anaconda.org/conda-forge/noarch/cookiecutter-2.6.0-pyhca7485f_0.conda#d6260b53b9db90017321af0b45cc00da +https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda#78745f157d56877a2c6e7b386f66f3e2 +https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.24.5-pyhd8ed1ab_0.conda#c7bf55cfeefe35d28a15685c466ff61e +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.16-py311h459d7ec_0.conda#b97ca422458b9a0300d73b372d2900d6 +https://conda.anaconda.org/conda-forge/noarch/pyarrow-hotfix-0.6-pyhd8ed1ab_0.conda#ccc06e6ef2064ae129fab3286299abda +https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda#f08fb5c89edfc4aadee1c81d4cfb1fa1 +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.5.0-py311h61187de_0.conda#44bac99d0125c748894b9ffb6ce97811 +https://conda.anaconda.org/conda-forge/noarch/datasets-2.21.0-pyhd8ed1ab_0.conda#1b2d7c700663bfec50f6c553e5449da2 +https://conda.anaconda.org/conda-forge/noarch/responses-0.18.0-pyhd8ed1ab_0.tar.bz2#a10d30e613a2a1a78a89ceadf3832e7c +https://conda.anaconda.org/conda-forge/noarch/evaluate-0.4.1-pyhd8ed1ab_0.conda#ea228540526db4dde8ad8f2309bc1d40 +https://conda.anaconda.org/conda-forge/noarch/lightning-utilities-0.11.6-pyhd8ed1ab_0.conda#d11cdcbb48ed0599bd514f4e559326f8 +https://conda.anaconda.org/conda-forge/noarch/torchmetrics-1.2.1-pyhd8ed1ab_0.conda#f6468e9ea893241ad7b8eae519f7e3a5 +https://conda.anaconda.org/conda-forge/noarch/pytorch-lightning-2.3.3-pyhd8ed1ab_0.conda#1b60f192549a329c5f89923c09eaffdc +https://conda.anaconda.org/conda-forge/noarch/lightning-2.3.3-pyhd8ed1ab_0.conda#0eb92bdf47cab1f99f7d51effde04591 +https://conda.anaconda.org/conda-forge/noarch/gdown-5.2.0-pyhd8ed1ab_0.conda#29903392720ea0d6162b772ff97235c3 +https://conda.anaconda.org/conda-forge/linux-64/libsentencepiece-0.2.0-he81a138_2.conda#5000f6c9352c853e4c742e2ec88f9a43 +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-python-0.2.0-py311h7fa642f_2.conda#60ded67bfefb7f358f01a52556c79dfe +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-spm-0.2.0-he81a138_2.conda#153728c1e224f44390004b2f9666f1a8 +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-0.2.0-h38be061_2.conda#3071ca26573aac7def93bb02934d077b +https://conda.anaconda.org/conda-forge/linux-64/regex-2024.7.24-py311h61187de_0.conda#090222c7863ad3fe208a35998b81e5df +https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.4.4-py311hb3a8bbb_0.conda#257bc9b805a85e07176081980500e43f +https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.15.2-py311h6640629_0.conda#abd9da024f245854132f5375a1abb157 +https://conda.anaconda.org/conda-forge/noarch/transformers-4.38.2-pyhd8ed1ab_0.conda#b4845a44a293d3dff16f7db2bc3551bc +https://conda.anaconda.org/conda-forge/noarch/nlpaug-1.1.11-pyhd8ed1ab_1.conda#4e231f0fa7db9388cf4c8539d623ac62 +https://conda.anaconda.org/conda-forge/noarch/nltk-3.9.1-pyhd8ed1ab_0.conda#7e580f0694e487c3890d3ce67d5df98c +https://conda.anaconda.org/conda-forge/noarch/typish-1.9.3-pyhd8ed1ab_0.tar.bz2#81b3f3101aa2af117924d908a1b33c67 +https://conda.anaconda.org/conda-forge/noarch/nptyping-2.4.1-pyhd8ed1ab_0.tar.bz2#7929b4ae7565a66f0fab4b70cfb90594 +https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda#23cc056834cab53849b91f78d6ee3ea0 +https://conda.anaconda.org/conda-forge/noarch/markdown-3.6-pyhd8ed1ab_0.conda#06e9bebf748a0dea03ecbe1f0e27e909 +https://conda.anaconda.org/conda-forge/noarch/ordered-set-4.1.0-pyhd8ed1ab_0.tar.bz2#9a8714decb3967b290263817e876d8a9 +https://conda.anaconda.org/conda-forge/noarch/model-index-0.1.11-pyhd8ed1ab_0.conda#6aecca21351e44095ffd2901ee46337a +https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda#d44e3b085abcaef02983c6305b84b584 +https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyhd8ed1ab_0.conda#6721aef6bfe5937abe70181545dd2c51 +https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2#4759805cce2d914c38472f70bf4d8bcb +https://conda.anaconda.org/conda-forge/noarch/openmim-0.3.7-pyhd8ed1ab_0.conda#e081b8fa91b884435725f0caa13866ff +https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.2-h59595ed_0.conda#53fb86322bdb89496d7579fe3f02fd61 +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d +https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb +https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_2.conda#cbbe59391138ea5ad3658c76912e147f +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2#fee5683a3f04bd15cbd8318b096a27ab +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda#71004cbf7924e19c02746ccde9fd7123 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda#b462a33c0be1421532f28bfe8f4a7514 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda#93ee23f12bc2e684548181256edd2cf6 +https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a +https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda#bce9f945da8ad2ae9b1d7165a64d0f87 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2#b4a4381d54784606820704f7b5f05a15 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.9-hb711507_1.conda#4a6d410296d7e39f00bacdee7df046e9 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec +https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2#06feff3d2634e3097ce2fe681474b534 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda#ed67c36f215b310412b2af935bf3e530 +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hebfffa5_3.conda#fceaedf1cdbcb02df9699a0d9b005292 +https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda#da0ec11a6454ae19bff5b02ed881a2b1 +https://conda.anaconda.org/conda-forge/linux-64/nss-3.103-h593d115_0.conda#233bfe41968d6fb04eba9258bb5061ad +https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda#d8d7293c5b37f39b2ac32940621c6592 +https://conda.anaconda.org/conda-forge/linux-64/poppler-24.08.0-hb0d391f_0.conda#cbe41fbbe05b1f78182ced1f0defdf81 +https://conda.anaconda.org/conda-forge/noarch/pdf2image-1.17.0-pyhd8ed1ab_0.conda#7da27a820962d0b077fabdd764ab3f35 +https://conda.anaconda.org/conda-forge/noarch/pytesseract-0.3.10-pyhd8ed1ab_0.tar.bz2#04f4becceb0c032c5dbdae6ad18bd95e +https://conda.anaconda.org/conda-forge/noarch/pytorch-metric-learning-2.3.0-pyhd8ed1ab_0.conda#4cabfd1fea71818c6dfb74bc1cb75ec8 +https://conda.anaconda.org/conda-forge/noarch/imageio-2.35.1-pyh12aca89_0.conda#b03ff3631329c8ef17bae35d2bb216f7 +https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda#4809b9f4c6ce106d443c3f90b8e10db2 +https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda#ec6f70b8a5242936567d4f886726a372 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.7.0-py311h07ce7c0_0.conda#73a9996e4b765455696b53bf74865b09 +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-hef167b5_0.conda#54fe76ab3d0189acaef95156874db7f9 +https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2#c1ac6229d0bfd14f8354ff9ad2a26cad +https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.1-he02047a_0.conda#8fd1654184917db2cb74fc84cb4fff79 +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.15.1-hc57e6cf_0.conda#5f84961d86d0ef78851cb34f9d5e31fe +https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda#4336bd67920dd504cd8c6761d6a99645 +https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda#3bf7b9fd5a7136126e0234db4b87c8b6 +https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda#5aeabe88534ea4169d4c49998f293d6c +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda#5e97e271911b8b2001a8b71860c32faa +https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda#418c6ca5929a611cbd69204907a83995 +https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.6.6-he8a937b_2.conda#77d9955b4abddb811cb8ab1aa7d743e4 +https://conda.anaconda.org/conda-forge/linux-64/svt-av1-2.1.2-hac33072_0.conda#06c5dec4ebb47213b648a6c4dc8400d6 +https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.1.1-h9b56c87_0.conda#cb7355212240e92dcf9c73cb1f10e4a9 +https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.1.0-h00ab1b0_0.conda#88928158ccfe797eac29ef5e03f7d23d +https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.10.3-h66b40c8_0.conda#a394f85083195ab8aa33911f40d76870 +https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2#c66fe2d123249af7651ebde8984c51c2 +https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-hac33072_1.conda#df96b7266e49529d82de467b23977452 +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2024.6.1-py311h732c098_3.conda#34ee94453a09c0abc94b194207917b50 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.8.10-pyhd8ed1ab_0.conda#4299bb3917015d44536cd73001256b19 +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.20.0-py311h2872171_1.conda#24fca64735554fdf2794c69f5b3d9a06 +https://conda.anaconda.org/conda-forge/noarch/seqeval-1.2.2-pyhd3deb0d_0.tar.bz2#d4436c8a8b9fb6d60fe4e7b9f097f9bb +https://conda.anaconda.org/conda-forge/linux-64/tensorboard-data-server-0.7.0-py311h63ff55d_1.conda#6d6c84b8814b270aea7115c08d2343a0 +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.3-pyhd8ed1ab_0.conda#2e60f5f388845027ee87fca6bee4ac23 +https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.17.1-pyhd8ed1ab_0.conda#1a6c7a02498c952ba92e08b0abe0c48c +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.18.1-cpu_py311hf0a5325_1.conda#406d65d893423dd469627793aee64aee +https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 +https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-1.1.1-pyha770c72_1.conda#7972e15c0f60fe5e85e29162503a7d35 +https://conda.anaconda.org/conda-forge/noarch/plotly-5.23.0-pyhd8ed1ab_0.conda#41e535b9e479c72a6bffc69a4c85837c +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.12-hb9ae30d_0.conda#201db6c2d9a3c5e46573ac4cb2e92f4f +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda#f87c7b7c2cb45f323ffbce941c78ab7c +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda#76b32dcf243444aea9c6b804bcfa40b8 +https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 +https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h4c5309f_1.conda#7df02e445367703cd87a574046e3a6f0 +https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h6470451_5.conda#1483ba046164be27df7f6eddbcec3a12 +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hd3e95f3_10.conda#30ee3a29c84cf7b842a8c5828c4b7c13 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.3-h9564881_0.conda#a7045ed6fb8b68ef7be002ce615e3bf6 +https://conda.anaconda.org/conda-forge/linux-64/graphviz-12.0.0-hba01fac_0.conda#953e31ea00d46beb7e64a79fc291ec44 +https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.3-pyh717bed2_0.conda#031c005eb6d4513013d99ed163dd5f59 +https://conda.anaconda.org/conda-forge/linux-64/catboost-1.2.5-py311h38be061_0.conda#ecf3df8651e7da0ecc4eac9ed053f869 +https://conda.anaconda.org/conda-forge/noarch/fastcore-1.5.55-pyhd8ed1ab_0.conda#fbe9848aaaa6c34d7dcf748b884b2597 +https://conda.anaconda.org/conda-forge/noarch/fastprogress-1.0.3-pyhd8ed1ab_0.tar.bz2#1690639d3647fde6edf4f00c8f87c263 +https://conda.anaconda.org/conda-forge/noarch/fastdownload-0.0.7-pyhd8ed1ab_0.conda#29c29999a420c2d28c3a46b3eadb9373 +https://conda.anaconda.org/conda-forge/linux-64/catalogue-2.0.10-py311h38be061_0.conda#c758c1494b5d8b72e0010a6fd4dcfc7d +https://conda.anaconda.org/conda-forge/linux-64/cymem-2.0.8-py311hb755f60_1.conda#11c2737f2daa69bd2bb736cf6746b88d +https://conda.anaconda.org/conda-forge/linux-64/marisa-trie-1.1.0-py311hb755f60_1.conda#ed6e68b598bf259438e971eaedf99cf3 +https://conda.anaconda.org/conda-forge/noarch/language-data-1.2.0-pyhd8ed1ab_0.conda#327e4493631a600458cddf405cf08e85 +https://conda.anaconda.org/conda-forge/noarch/langcodes-3.4.0-pyhd8ed1ab_0.conda#9e7ff0b98c28359ea1f3ae7cebda7e5f +https://conda.anaconda.org/conda-forge/linux-64/murmurhash-1.0.10-py311hb755f60_1.conda#dfd99e186a8743e33704ded8f20ece56 +https://conda.anaconda.org/conda-forge/linux-64/preshed-3.0.9-py311hb755f60_1.conda#247abb13d6323d78b0764025d350f7d7 +https://conda.anaconda.org/conda-forge/noarch/spacy-legacy-3.0.12-pyhd8ed1ab_0.conda#bbe68ced56ea855f0223c329f1fd2fc0 +https://conda.anaconda.org/conda-forge/noarch/spacy-loggers-1.0.5-pyhd8ed1ab_0.conda#017fa97ac8c29416983dc9e67b27f6c8 +https://conda.anaconda.org/conda-forge/linux-64/srsly-2.4.8-py311hb755f60_1.conda#02a6177d2f3aff10074a806c2588c032 +https://conda.anaconda.org/conda-forge/linux-64/confection-0.1.4-py311h781c19f_0.conda#604215291567b4159f9e41e4602b742f +https://conda.anaconda.org/conda-forge/linux-64/cython-blis-0.7.10-py311h1f0f07a_2.conda#d9d8266fe78cf281d90857871164b86e +https://conda.anaconda.org/conda-forge/linux-64/wasabi-1.1.2-py311h38be061_1.conda#eaf8917c44ec3f19f9a94d395fcbc520 +https://conda.anaconda.org/conda-forge/linux-64/thinc-8.2.5-py311hfa30c88_0.conda#9eb418727266be4bfad948fcce7f0125 +https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda#d08db09a552699ee9e7eec56b4eb3899 +https://conda.anaconda.org/conda-forge/noarch/typer-0.9.4-pyhd8ed1ab_0.conda#01a14596daee2aff9cdc1167786231ea +https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.18.1-pyhd8ed1ab_0.conda#d6b3ce6270608b5b4df8d4a8ebb0085a +https://conda.anaconda.org/conda-forge/noarch/smart-open-7.0.4-hd8ed1ab_0.conda#8a8d365f12f22e986fc87e3f884eb12b +https://conda.anaconda.org/conda-forge/noarch/weasel-0.4.1-pyhd8ed1ab_1.conda#0487b5ffdbbee3fbcf3c0df1eb684928 +https://conda.anaconda.org/conda-forge/linux-64/spacy-3.7.5-py311hfa30c88_1.conda#9377c31ea56d7ba522d114eec41c9c21 +https://conda.anaconda.org/conda-forge/noarch/fastai-2.7.16-pyhd8ed1ab_0.conda#3a9c98ccde324b9d72594583448f20f2 +https://conda.anaconda.org/conda-forge/linux-64/lightgbm-4.3.0-py311hb755f60_0.conda#c4662ca83fd4e3bfd675ac78f8e1a2eb +https://conda.anaconda.org/conda-forge/linux-64/libxgboost-2.0.3-cpu_h7afb2cf_4.conda#6aa4fefb4e9f9b4e853d15642e521c5e +https://conda.anaconda.org/conda-forge/noarch/py-xgboost-2.0.3-cpu_pyh995e691_4.conda#44b233589a7448fe2a12344d6fd5ddbc +https://conda.anaconda.org/conda-forge/noarch/xgboost-2.0.3-cpu_pyhb8f9a19_4.conda#6d841f6e43095e98843e9ee49bd7c700 +https://conda.anaconda.org/conda-forge/noarch/autogluon.tabular-1.1.1-pyha770c72_1.conda#331058b08a7fbf116c1fc31adce8eb5b +https://conda.anaconda.org/conda-forge/noarch/gluonts-0.14.3-pyhd8ed1ab_0.conda#d0e04431d67a813a0f0eb5c5f61bc3dc +https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda#73301c133ded2bf71906aa2104edae8b +https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.43.0-py311hbde99c3_0.conda#4c60dfcba06b363be954401addee8800 +https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py311h4bc866e_0.conda#e32a210e9caf97383c35685fd2343512 +https://conda.anaconda.org/conda-forge/noarch/utilsforecast-0.0.10-pyhd8ed1ab_0.conda#d76268ae8c692159c771e26e4f6ff9fd +https://conda.anaconda.org/conda-forge/noarch/window-ops-0.0.15-pyhd8ed1ab_0.conda#b5ffd7d8295d4eda512216e23cf75a0f +https://conda.anaconda.org/conda-forge/noarch/mlforecast-0.10.0-pyhd8ed1ab_0.conda#b711b148f3c7219719f29a14a5da6e32 +https://conda.anaconda.org/conda-forge/noarch/patsy-0.5.6-pyhd8ed1ab_0.conda#a5b55d1cb110cdcedc748b5c3e16e687 +https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.2-py311h18e1886_0.conda#82c29bf38b3fb66da09736106609b5fe +https://conda.anaconda.org/conda-forge/noarch/statsforecast-1.4.0-pyhd8ed1ab_0.conda#aa803f915587fe4306dfe0234215caa9 +https://conda.anaconda.org/conda-forge/linux-64/ujson-5.10.0-py311h4332511_0.conda#442a260df22ffad7f666c7e3f119b5ab +https://conda.anaconda.org/conda-forge/noarch/autogluon.timeseries-1.1.1-pyhd8ed1ab_3.conda#e1dc1f5078d28a112ade43cb87a03513 +https://conda.anaconda.org/conda-forge/noarch/autogluon-1.1.1-pyhd8ed1ab_0.conda#768c470fc6719f42c9aceadd82404eb1 +https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.11.1-pyhd8ed1ab_0.conda#29ff12b36df16bb66fdccd4206aaebfb +https://conda.anaconda.org/conda-forge/noarch/autopep8-2.0.4-pyhd8ed1ab_0.conda#1053857605b5139c8f9818a029a71913 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.11-pyhd8ed1ab_0.conda#fc0cb2abcfcec65ecbdcde4289b62fea +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.11-pyhd8ed1ab_0.conda#95ba42a349c9d8eac28e30d0b637401f +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.3-pyhd8ed1ab_0.conda#a1323654e9d87b16642ef02a03b98b32 +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.47-hd8ed1ab_0.conda#3e0c82ddcfe27eb4ae77f887cfd9f45b +https://conda.anaconda.org/conda-forge/noarch/jupyter_console-6.6.3-pyhd8ed1ab_0.conda#7cf6f52a66f8e3cd9d8b6c231262dcab +https://conda.anaconda.org/conda-forge/noarch/notebook-7.1.3-pyhd8ed1ab_0.conda#a4b1e12d54210fa80f3eb3fc270f2480 +https://conda.anaconda.org/conda-forge/noarch/qtpy-2.4.1-pyhd8ed1ab_0.conda#7f391bd70d2abfb70f304ba5aa4e1261 +https://conda.anaconda.org/conda-forge/noarch/qtconsole-base-5.5.2-pyha770c72_0.conda#0f63ec743defb9de6728a98150a80839 +https://conda.anaconda.org/conda-forge/noarch/jupyter-1.0.0-pyhd8ed1ab_10.conda#056b8cc3d9b03f54fc49e6d70d7dc359 +https://conda.anaconda.org/conda-forge/noarch/mock-5.1.0-pyhd8ed1ab_0.conda#926c67c0310094cf421ad13f7d3f38e5 +https://conda.anaconda.org/conda-forge/noarch/nose-1.3.7-py_1006.tar.bz2#382019d5f8e9362ef6f60a8d4e7bce8f +https://conda.anaconda.org/conda-forge/noarch/hdijupyterutils-0.21.0-pyh1a96a4e_0.conda#4db6232a9b934edc1c1e2f7b7d5a5d40 +https://conda.anaconda.org/conda-forge/noarch/autovizwidget-0.21.0-pyh1a96a4e_0.conda#7db56991c3c823ddb394ed85df9b54f5 +https://conda.anaconda.org/conda-forge/noarch/aws-glue-sessions-1.0.6-pyhd8ed1ab_0.conda#3bb5f802626c75b95a42d3a61258b87b +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.2.0-py311hb3a8bbb_0.conda#0b19fb4accdc6064185d9b96b456ac10 +https://conda.anaconda.org/conda-forge/noarch/blinker-1.8.2-pyhd8ed1ab_0.conda#cf85c002319c15e9721934104aaa1137 +https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda#61de176bd62041f9cd5bd4fcd09eb0ff +https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda#35ef8bc24bd34074ebae3c943d551728 +https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.30-h3509ff9_0.conda#02539b77d25aa4f65b20246549e256c3 +https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.4.post0-hd590300_1.conda#82ca53502dfd5a64a80dee76dae14685 +https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.4.post0-h59595ed_1.conda#715e1d720ec1a03715bebd237972fca5 +https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h59595ed_0.conda#965eaacd7c18eb8361fd12bb9e7a57d7 +https://conda.anaconda.org/conda-forge/linux-64/libmamba-1.5.8-had39da4_0.conda#def669885dc103d8acb7ac2ac35e0b2f +https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2#878f923dd6acc8aeb47a75da6c4098be +https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.8-py311hf2555c7_0.conda#6ee8eb6fcdebba74be7663c654c161ca +https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.7.0-pyhd8ed1ab_0.conda#857c9e25f0a77c0bd7eb622d46d9418f +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py311h5cd10c7_0.conda#8efe4fe2396281627b3450af8357b190 +https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.10.0-pyhd8ed1ab_0.conda#3480386e00995f7a1dfb3b9aa2fe70fd +https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.3.0-pyh7900ff3_0.conda#0a7dce281ae2be81acab0aa963e6bb99 +https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda#bbdb409974cd6cb30071b1d978302726 +https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.4-py311h331c9d8_0.conda#2b9d917cb8b98e813459fffbb3844929 +https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.1.2-py311h38be061_0.conda#8056bb9339279f0eae65c44d58fd4f3c +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda#d3483c8fc2dc2cc3f5cf43e26d60cabf +https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py311h459d7ec_0.conda#9a5b1fabf02c6c91da7203d7d5d53ffd +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py311h459d7ec_0.conda#7865c897d89a39abc0056d89e37bd9e9 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py311h459d7ec_0.conda#4dccc0bc3bb4d6e5c30bccbd053c4f90 +https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda#08316d001eca8854392cf2837828ea11 +https://conda.anaconda.org/conda-forge/linux-64/conda-24.7.1-py311h38be061_0.conda#63a6341170bb4762fbf5557d8a6ba48f +https://conda.anaconda.org/conda-forge/noarch/contextlib2-21.6.0-pyhd8ed1ab_0.tar.bz2#5b26a831440be04c39531a8ce20f5d71 +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_0.conda#ff7ca04134ee8dde1d7cf491a78ef7c7 +https://conda.anaconda.org/conda-forge/noarch/flask-3.0.3-pyhd8ed1ab_0.conda#dcdb937144fa20d7757bf512db1ea769 +https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-pyhd8ed1ab_3.conda#1f7482562f2082f1b2abf8a3e2a41b63 +https://conda.anaconda.org/conda-forge/noarch/dash-2.17.1-pyhd8ed1ab_0.conda#5c0e028a64a3d5c16e22baef58c89c0e +https://conda.anaconda.org/conda-forge/noarch/databricks-sdk-0.30.0-pyhd8ed1ab_0.conda#0448ac4975b4383a8463f3df35cad59a +https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.14-pyh1a96a4e_0.conda#4e4c4236e1ca9bcd8816b921a4805882 +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py311h459d7ec_3.conda#41431936fe7624294df31197ae699c44 +https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.1-pyhd8ed1ab_0.conda#08a8552f094f8b77536d3fa88422bba4 +https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2#2807a0becd1d986fe1ef9b7f8135f215 +https://conda.anaconda.org/conda-forge/noarch/docker-py-7.1.0-pyhd8ed1ab_0.conda#3e547e36de765ca8f28a7623fb3f255a +https://conda.anaconda.org/conda-forge/noarch/docstring-to-markdown-0.15-pyhd8ed1ab_0.conda#a3a1e6af2926a3affcd6f2072871f551 +https://conda.anaconda.org/conda-forge/noarch/starlette-0.37.2-pyhd8ed1ab_0.conda#7e5550dfa3ed2c2019988cbb9f8302ea +https://conda.anaconda.org/conda-forge/noarch/fastapi-0.110.3-pyhd8ed1ab_0.conda#cb96bd86d974f1603c42a3a5b87167bf +https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2#34fc335fc50eef0b5ea708f2b5f54e0c +https://conda.anaconda.org/conda-forge/noarch/pyflakes-3.2.0-pyhd8ed1ab_0.conda#0cf7fef6aa123df28adb21a590065e3d +https://conda.anaconda.org/conda-forge/noarch/flake8-7.0.0-pyhd8ed1ab_0.conda#15bc58c860fc0a9abc26ec902df35252 +https://conda.anaconda.org/conda-forge/linux-64/flatbuffers-24.3.25-h59595ed_0.conda#2941a8c4e4871cdfa738c8c1a7611533 +https://conda.anaconda.org/conda-forge/noarch/gast-0.5.5-pyhd8ed1ab_0.conda#ebc1dc871c48673a0a922023a2e1eee2 +https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2#62f26a3d1387acee31322208f0cfa3e0 +https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda#623b19f616f2ca0c261441067e18ae40 +https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda#0b2154c1818111e17381b1df5b4b0176 +https://conda.anaconda.org/conda-forge/noarch/google-pasta-0.2.0-pyhd8ed1ab_1.conda#5257b8fdee0c88e6bd3a10d38bc3892a +https://conda.anaconda.org/conda-forge/noarch/graphql-core-3.2.3-pyhd8ed1ab_0.tar.bz2#87cafe8c7638a5ac6fd8ec8fb01f1508 +https://conda.anaconda.org/conda-forge/noarch/graphql-relay-3.2.0-pyhd8ed1ab_0.tar.bz2#1b2b83e3528f8fb83007161eff51073d +https://conda.anaconda.org/conda-forge/noarch/graphene-3.3-pyhd8ed1ab_0.conda#ed2ae94977dfd96566e6eaf373216728 +https://conda.anaconda.org/conda-forge/linux-64/gunicorn-22.0.0-py311h38be061_0.conda#25bf018a4d5974a5729a07c6132dcba5 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_hdf9ad27_105.conda#7e1729554e209627636a0f6fabcdd115 +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.11.0-nompi_py311h439e445_102.conda#854d8ab88db383ab8b5fb3e449980c53 +https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 +https://conda.anaconda.org/conda-forge/noarch/jupyter-activity-monitor-extension-0.3.1-pyhd8ed1ab_0.conda#f3548fc6b23bad6f0bc89b838095ff2d +https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.2-pyhd8ed1ab_0.conda#b3001efcd21df5156985c1f027d8d331 +https://conda.anaconda.org/conda-forge/linux-64/pycrdt-0.9.8-py311hb3a8bbb_0.conda#2af7ea6cbb47cb5edb4215693f3f0b2a +https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-2.1.1-pyhd8ed1ab_0.conda#4bf3cc3f29ca3ad96897de4fb62407a4 +https://conda.anaconda.org/conda-forge/noarch/sqlite-anyio-0.2.3-pyhd8ed1ab_0.conda#7020770f72be0328354c85c24ae4338f +https://conda.anaconda.org/conda-forge/noarch/pycrdt-websocket-0.14.1-pyhd8ed1ab_0.conda#1a2d515dd5a059b95e67633209b068ec +https://conda.anaconda.org/conda-forge/noarch/jupyter-collaboration-2.1.2-pyhd8ed1ab_0.conda#519ec29761b89614fe917b79b268f4d1 +https://conda.anaconda.org/conda-forge/noarch/jupyter-dash-0.4.2-pyhd8ed1ab_1.tar.bz2#9c77330b235666f244a7b8dcc7c0955a +https://conda.anaconda.org/conda-forge/noarch/jupyter-server-mathjax-0.2.6-pyh5bfe37b_1.conda#11ca195fc8a16770661a387bcce27c36 +https://conda.anaconda.org/conda-forge/noarch/simpervisor-1.0.0-pyhd8ed1ab_0.conda#1f6df17b16d6295a484d59e844fef6ee +https://conda.anaconda.org/conda-forge/noarch/jupyter-server-proxy-4.3.0-pyhd8ed1ab_0.conda#0324b3f9baed1cdb946cd484420acc77 +https://conda.anaconda.org/conda-forge/noarch/nbdime-4.0.1-pyhd8ed1ab_0.conda#dd76d44a144499f8ff3254fd20cdb7a2 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-git-0.50.1-pyhd8ed1ab_1.conda#2b60b39e08ca93efbb55bcbdf4e6a950 +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.4.0-py311h14de704_1.conda#1d5a4ca6317f1a6c877286d96f5e874f +https://conda.anaconda.org/conda-forge/noarch/namex-0.0.8-pyhd8ed1ab_0.conda#b96883bd4ee5a6aef4636674783a6d57 +https://conda.anaconda.org/conda-forge/linux-64/optree-0.12.1-py311hcddfd71_0.conda#e78f1029c9236772560a05cc59802a9d +https://conda.anaconda.org/conda-forge/noarch/keras-3.5.0-pyhd8ed1ab_1.conda#4c27053152424889605cd97865959493 +https://conda.anaconda.org/conda-forge/noarch/langchain-aws-0.1.16-pyhd8ed1ab_0.conda#790ff274a96ffc959cd4a68b9e60a285 +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.50-h4f305b6_0.conda#0d7ff1a8e69565ca3add6925e18e708f +https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.11.0-h4ab18f5_1.conda#14858a47d4cc995892e79f2b340682d7 +https://conda.anaconda.org/conda-forge/linux-64/libsecret-0.18.8-h329b89f_2.tar.bz2#9d6698e3c9585a75156d86f7ef229093 +https://conda.anaconda.org/conda-forge/noarch/opentelemetry-api-1.26.0-pyhd8ed1ab_0.conda#5f6c7912206a0d7dbc63cdbaa51bdd06 +https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.47b0-pyhd8ed1ab_0.conda#77ee89a21afec45a213869b27ce5a37b +https://conda.anaconda.org/conda-forge/noarch/opentelemetry-sdk-1.26.0-pyhd8ed1ab_0.conda#5d9c1e27c7c2edb53225b2099f4dcf34 +https://conda.anaconda.org/conda-forge/linux-64/mlflow-skinny-2.15.1-py311h38be061_0.conda#605a1587f814255eb608006e97afa50f +https://conda.anaconda.org/conda-forge/noarch/querystring_parser-1.2.4-pyhd8ed1ab_1.conda#124ce2752ddf974efebd074b53675b83 +https://conda.anaconda.org/conda-forge/linux-64/mlflow-ui-2.15.1-py311h38be061_0.conda#a8a0ebc8ec038c9edc3683533daacfec +https://conda.anaconda.org/conda-forge/noarch/prometheus_flask_exporter-0.23.1-pyhd8ed1ab_0.conda#dfd56de42e5f27683b7f769c6340cf00 +https://conda.anaconda.org/conda-forge/linux-64/mlflow-2.15.1-h38be061_0.conda#e8d92302246fa3d5729f5dd7b1b32a9e +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.3.0-pyhc1e730c_2.conda#7a94ac68b892daa9f17ae8a52b31ed81 +https://conda.anaconda.org/conda-forge/noarch/papermill-2.6.0-pyhd8ed1ab_0.conda#7e2150bca46f713bb6e290ac1b26ed1d +https://conda.anaconda.org/conda-forge/noarch/pox-0.3.4-pyhd8ed1ab_0.conda#d5502ff0ec33b87f7ab7bc373d0e42ff +https://conda.anaconda.org/conda-forge/noarch/ppft-1.7.6.8-pyhd8ed1ab_0.conda#a104e8b98901dc1bc0b916f7e18b5e39 +https://conda.anaconda.org/conda-forge/noarch/pathos-0.3.2-pyhd8ed1ab_1.conda#22ed208c1b54e7c2ec6616665fba6b0f +https://conda.anaconda.org/conda-forge/noarch/pure-sasl-0.6.2-pyhd8ed1ab_0.tar.bz2#ac695eecf21ab48093bc33fd60b4102d +https://conda.anaconda.org/conda-forge/noarch/py-xgboost-cpu-2.0.3-pyhb8f9a19_4.conda#8cba48de680855febcf3bbeeac318c56 +https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e +https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_0.conda#7e23a61a7fbaedfef6eb0e1ac775c8e5 +https://conda.anaconda.org/conda-forge/linux-64/thrift-0.20.0-py311hb755f60_0.conda#7fe1fb8c6d03772fe227e5c7fd74643c +https://conda.anaconda.org/conda-forge/noarch/thrift_sasl-0.4.3-pyhd8ed1ab_2.tar.bz2#0340a97c4990a5bb5ecf1a27fef9f9c3 +https://conda.anaconda.org/conda-forge/noarch/pyhive-0.7.0-pyhd8ed1ab_0.conda#a39884e69ebf0c6454a1f8bac6f8361b +https://conda.anaconda.org/conda-forge/linux-64/pykrb5-0.5.1-py311h0820609_1.conda#26ee2e5df547f4545c0e3a9ef98fdcb7 +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda#0062a5f3347733f67b0f33ca48cc21dd +https://conda.anaconda.org/conda-forge/noarch/pylint-3.2.6-pyhd8ed1ab_0.conda#3bd59de4ef6ca2d96cfd5b36b33f9de9 +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.11.1-py311h38be061_0.conda#907b17dbe4dd97a0029ba6a9b7cbab3e +https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.25-pyh59ac667_0.conda#dfc884dcd61ff6543fde37a41b7d7f31 +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py311h0820609_0.conda#84fe6d156520937fd9fc634a88e36a52 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-jsonrpc-1.1.2-pyhd8ed1ab_0.conda#ff30dbdb341a54947c4fa183900380b7 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-server-base-1.11.0-pyhd8ed1ab_0.conda#6ae8c26c3ebf7d148d7000f7fbad9512 +https://conda.anaconda.org/conda-forge/noarch/pytoolconfig-1.2.5-pyhd8ed1ab_0.conda#2d6bdf5a69cfcd1fcc7f2b900cb4082f +https://conda.anaconda.org/conda-forge/noarch/rope-1.13.0-pyhd8ed1ab_0.conda#dffa002fbd3d86924b7992c718efa7bc +https://conda.anaconda.org/conda-forge/noarch/whatthepatch-1.0.6-pyhd8ed1ab_0.conda#2b54ace307e5648efb07c3f220ae0dd6 +https://conda.anaconda.org/conda-forge/noarch/yapf-0.40.1-pyhd8ed1ab_0.conda#f269942e802d5e148632143d4c37acc9 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-server-1.11.0-pyhd8ed1ab_0.conda#c1db1a6057f7f2d7299ed2b59c51bd34 +https://conda.anaconda.org/conda-forge/noarch/requests-kerberos-0.14.0-pyh707e725_1.conda#411293bff0dc86f9f9bc0c0e1f227623 +https://conda.anaconda.org/conda-forge/linux-64/ripgrep-14.1.0-he8a937b_0.conda#5a476f7033a8a1b9175626b5ebf86d1d +https://conda.anaconda.org/conda-forge/linux-64/sagemaker-code-editor-1.3.1-h3e77e23_0.conda#7b1edaf15e41aa12fad645a55b4b3515 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.13-pyhd8ed1ab_0.conda#feaec93c21652caac71ed7ecf450cb17 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-emr-extension-0.3.2-pyhd8ed1ab_0.conda#3f3afe1b768a50217b065481450328b7 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-0.3.2-pyhd8ed1ab_0.conda#7ec225c27d235395af79135f32ce3cc1 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-kernel-wrapper-0.0.2-pyhd8ed1ab_0.conda#99480997ca2429b75169c896cc988cdb +https://conda.anaconda.org/conda-forge/noarch/sagemaker-mlflow-0.1.0-pyhd8ed1ab_0.conda#edcfd844c3fe864b800f60f05806fd26 +https://conda.anaconda.org/conda-forge/noarch/schema-0.7.7-pyhd8ed1ab_0.conda#1add6f6b99191efab14f16e6aa9b6461 +https://conda.anaconda.org/conda-forge/noarch/smdebug-rulesconfig-1.0.1-pyhd3deb0d_1.tar.bz2#be253a7939a3e7cf95a043a983cab563 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-python-sdk-2.227.0-pyhd8ed1ab_0.conda#27bef51bc57520fba66695491e931f30 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-studio-sparkmagic-lib-0.1.4-pyhd8ed1ab_0.conda#285ce30db20d88190f1f7fb654f259ec +https://conda.anaconda.org/conda-forge/noarch/sparkmagic-0.21.0-pyhd8ed1ab_0.conda#fe489239f573c2ea018925ddea6d3190 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-studio-analytics-extension-0.1.2-pyhd8ed1ab_0.conda#5537af52c8b524fc9cc1ea78eefd4d50 +https://conda.anaconda.org/conda-forge/linux-64/supervisor-4.2.5-py311h38be061_2.conda#f4efa0a0b2c7e268274e29543d31d524 +https://conda.anaconda.org/conda-forge/noarch/termcolor-2.4.0-pyhd8ed1ab_0.conda#a5033708ad9283907c3b1bc1f90d0d0d +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-base-2.17.0-cpu_py311h55a24dc_0.conda#486d9351b8b47e8c2e2550e4e15b8c39 +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.17.0-cpu_py311h95cdf8d_0.conda#abba83651fd445721bbb19187bf4d65b +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.17.0-cpu_py311h6ac8430_0.conda#060caa15e9fc2afec5f04be6a6002f48 +https://conda.anaconda.org/conda-forge/noarch/tf-keras-2.17.0-pyhd8ed1ab_0.conda#ff80d0ec3ee10c2ea405129c4e3f9ca0 +https://conda.anaconda.org/conda-forge/linux-64/uvicorn-0.30.6-py311h38be061_0.conda#12c28839ee30216dc237bd1e792c300b diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/code-editor/code_editor_machine_settings.json b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/code-editor/code_editor_machine_settings.json new file mode 100644 index 00000000..44fb8ef7 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/code-editor/code_editor_machine_settings.json @@ -0,0 +1,4 @@ +{ + "python.terminal.activateEnvironment": false, + "python.defaultInterpreterPath": "/opt/conda/bin/python" +} diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/code-editor/extensions.txt b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/code-editor/extensions.txt new file mode 100644 index 00000000..29d683eb --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/code-editor/extensions.txt @@ -0,0 +1,3 @@ +https://open-vsx.org/api/ms-toolsai/jupyter/2023.9.100/file/ms-toolsai.jupyter-2023.9.100.vsix +https://open-vsx.org/api/ms-python/python/2023.20.0/file/ms-python.python-2023.20.0.vsix +https://open-vsx.org/api/amazonwebservices/aws-toolkit-vscode/1.99.0/file/amazonwebservices.aws-toolkit-vscode-1.99.0.vsix diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/conda/.condarc b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/conda/.condarc new file mode 100644 index 00000000..c3616df5 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/conda/.condarc @@ -0,0 +1,6 @@ +envs_dirs: + - ~/.conda/envs + - /opt/conda/envs +pkgs_dirs: + - ~/.conda/pkgs + - /opt/conda/pkgs diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/jupyter/jupyter_server_config.py b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/jupyter/jupyter_server_config.py new file mode 100644 index 00000000..0182cc23 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/jupyter/jupyter_server_config.py @@ -0,0 +1,28 @@ +# Default Jupyter server config +# Note: those config can be overridden by user-level configs. + +c.ServerApp.terminado_settings = {"shell_command": ["/bin/bash"]} +c.ServerApp.tornado_settings = {"compress_response": True} + +# Do not delete files to trash. Instead, permanently delete files. +c.FileContentsManager.delete_to_trash = False + +# Allow deleting non-empty directory via file browser. Related documentation: +# https://github.com/jupyter-server/jupyter_server/blob/main/jupyter_server/services/contents/filemanager.py#L125-L129 +c.FileContentsManager.always_delete_dir = True + +# Enable `allow_hidden` by default, so hidden files are accessible via Jupyter server +# Related documentation: https://jupyterlab.readthedocs.io/en/stable/user/files.html#displaying-hidden-files +c.ContentsManager.allow_hidden = True + +# This will set the LanguageServerManager.extra_node_roots setting if amazon_sagemaker_sql_editor exists in the +# environment. Ignore otherwise, don't fail the JL server start +# Related documentation: https://jupyterlab-lsp.readthedocs.io/en/v3.4.0/Configuring.html +try: + import os + + module = __import__("amazon_sagemaker_sql_editor") + module_location = os.path.dirname(module.__file__) + c.LanguageServerManager.extra_node_roots = [f"{module_location}/sql-language-server"] +except: + pass diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf new file mode 100644 index 00000000..cac5669b --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf @@ -0,0 +1,11 @@ +[include] +files = supervisord-common.conf + +[program:codeeditorserver] +directory=%(ENV_HOME)s +command=start-code-editor +autostart=true +autorestart=true +stdout_logfile=/dev/fd/1 ; Redirect web server logs to stdout +stdout_logfile_maxbytes = 0 ; Fix: https://github.com/Supervisor/supervisor/issues/935 +stderr_logfile_maxbytes = 0 ; Fix: https://github.com/Supervisor/supervisor/issues/935 diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord-common.conf b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord-common.conf new file mode 100644 index 00000000..27820d4c --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord-common.conf @@ -0,0 +1,18 @@ +[supervisord] +nodaemon=true + +pidfile=/var/run/supervisord/supervisord.pid +logfile=%(ENV_STUDIO_LOGGING_DIR)s/%(ENV_SAGEMAKER_APP_TYPE_LOWERCASE)s/supervisord/supervisord.log +logfile_maxbytes=5MB +logfile_backups=10 +redirect_stderr=true + +[unix_http_server] +file=/var/run/supervisord/supervisor.sock +chmod=0700 + +[supervisorctl] +serverurl=unix:///var/run/supervisord/supervisor.sock + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf new file mode 100644 index 00000000..5694ac11 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf @@ -0,0 +1,11 @@ +[include] +files = supervisord-common.conf + +[program:jupyterlabserver] +directory=%(ENV_HOME)s +command=start-jupyter-server +stopasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord.conf b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord.conf new file mode 100644 index 00000000..686f4a5c --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/etc/supervisor/conf.d/supervisord.conf @@ -0,0 +1,27 @@ +[supervisord] +nodaemon=true + +pidfile=/var/run/supervisord/supervisord.pid +logfile=%(ENV_STUDIO_LOGGING_DIR)s/%(ENV_SAGEMAKER_APP_TYPE_LOWERCASE)s/supervisord/supervisord.log +logfile_maxbytes=5MB +logfile_backups=10 +redirect_stderr=true + +[unix_http_server] +file=/var/run/supervisord/supervisor.sock +chmod=0700 + +[supervisorctl] +serverurl=unix:///var/run/supervisord/supervisor.sock + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[program:jupyterlabserver] +directory=%(ENV_HOME)s +command=start-jupyter-server +stopasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/entrypoint-code-editor b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/entrypoint-code-editor new file mode 100755 index 00000000..bf55a371 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/entrypoint-code-editor @@ -0,0 +1,16 @@ +#!/bin/bash + +set -e + +# Generate and execute the shell code to modifies shell variables to include +# micromamba commands (e.g. using `micromamba activate` to activate environments) +eval "$(micromamba shell hook --shell=bash)" + +# Activate conda environment 'base', where supervisord is installed +micromamba activate base + +# Set up SAGEMAKER_APP_TYPE_LOWERCASE based on SAGEMAKER_APP_TYPE +export SAGEMAKER_APP_TYPE_LOWERCASE=$(echo $SAGEMAKER_APP_TYPE | tr '[:upper:]' '[:lower:]') + +mkdir -p $STUDIO_LOGGING_DIR/$SAGEMAKER_APP_TYPE_LOWERCASE/supervisord +exec supervisord -c /etc/supervisor/conf.d/supervisord-code-editor.conf -n diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/entrypoint-jupyter-server b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/entrypoint-jupyter-server new file mode 100755 index 00000000..ceda89d0 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/entrypoint-jupyter-server @@ -0,0 +1,19 @@ +#!/bin/bash + +set -e + +# Generate and execute the shell code to modifies shell variables to include +# micromamba commands (e.g. using `micromamba activate` to activate environments) +eval "$(micromamba shell hook --shell=bash)" + +# Activate conda environment 'base', where supervisord is installed +micromamba activate base + +# Set up SAGEMAKER_APP_TYPE_LOWERCASE based on SAGEMAKER_APP_TYPE +export SAGEMAKER_APP_TYPE_LOWERCASE=$(echo $SAGEMAKER_APP_TYPE | tr '[:upper:]' '[:lower:]') + +# Start supervisord with supervisord configuration +# Since program 'jupyterlabserver' autostarts by default, it will be started +# automatically along with supervisord +mkdir -p $STUDIO_LOGGING_DIR/$SAGEMAKER_APP_TYPE_LOWERCASE/supervisord +exec supervisord -c /etc/supervisor/conf.d/supervisord.conf -n diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/restart-jupyter-server b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/restart-jupyter-server new file mode 100755 index 00000000..6f2af98d --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/restart-jupyter-server @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Restarting the Jupyter server. This page should refresh in a few seconds. Note that any terminals will be closed." +echo "If this page doesn't refresh after a few seconds, try reloading your browser window." +echo "Restarting now..." +nohup supervisorctl -c /etc/supervisor/conf.d/supervisord.conf restart jupyterlabserver > /dev/null 2>&1 & diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/start-code-editor b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/start-code-editor new file mode 100755 index 00000000..bc97106c --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/start-code-editor @@ -0,0 +1,25 @@ +#!/bin/bash +set -e + +eval "$(micromamba shell hook --shell=bash)" + +# Activate conda environment 'base', which is the default environment for sagemaker-distribution +micromamba activate base + +# Start code-editor server +if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ]; then + # SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker + # app. Configure the base url to be `//default`. + sagemaker-code-editor --host 0.0.0.0 --port 8888 \ + --without-connection-token \ + --base-path "/$SAGEMAKER_APP_TYPE_LOWERCASE/default" \ + --server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data \ + --extensions-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions \ + --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data +else + sagemaker-code-editor --host 0.0.0.0 --port 8888 \ + --without-connection-token \ + --server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data \ + --extension-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions \ + --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data +fi diff --git a/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/start-jupyter-server b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/start-jupyter-server new file mode 100755 index 00000000..6ff4eac3 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/dirs/usr/local/bin/start-jupyter-server @@ -0,0 +1,36 @@ +#!/bin/bash +set -e + +eval "$(micromamba shell hook --shell=bash)" + +# Activate conda environment 'base', which is the default environment for Cosmos +micromamba activate base + +# Start Jupyter server in rtc mode for shared spaces +if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ] && [ "$SAGEMAKER_SPACE_TYPE_LOWERCASE" == "shared" ]; then + jupyter labextension enable @jupyter/collaboration-extension + # SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker + # app. Configure the base url to be `//default`. + # SAGEMAKER_SPACE_TYPE_LOWERCASE flag is used to determine if the server should start + # in real-time-collaboration mode for a given space. + jupyter lab --ip 0.0.0.0 --port 8888 \ + --ServerApp.base_url="/$SAGEMAKER_APP_TYPE_LOWERCASE/default" \ + --ServerApp.token='' \ + --ServerApp.allow_origin='*' \ + --collaborative \ + --ServerApp.identity_provider_class=sagemaker_jupyterlab_extension_common.identity.SagemakerIdentityProvider \ + --YDocExtension.ystore_class=sagemaker_jupyterlab_extension_common.ydoc_override.ydoc.MySQLiteYStore + +# Start Jupyter server +elif [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ]; then + # SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker + # app. Configure the base url to be `//default`. + jupyter lab --ip 0.0.0.0 --port 8888 \ + --ServerApp.base_url="/$SAGEMAKER_APP_TYPE_LOWERCASE/default" \ + --ServerApp.token='' \ + --ServerApp.allow_origin='*' +else + jupyter lab --ip 0.0.0.0 --port 8888 \ + --ServerApp.token='' \ + --ServerApp.allow_origin='*' +fi diff --git a/build_artifacts/v2/v2.0/v2.0.0/gpu.arg_based_env.in b/build_artifacts/v2/v2.0/v2.0.0/gpu.arg_based_env.in new file mode 100644 index 00000000..f4bd392f --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/gpu.arg_based_env.in @@ -0,0 +1,6 @@ +conda-forge::cuda-compiler=$CUDA_MAJOR_MINOR_VERSION +conda-forge::cuda-libraries=$CUDA_MAJOR_MINOR_VERSION +conda-forge::cuda-libraries-dev=$CUDA_MAJOR_MINOR_VERSION +conda-forge::cuda-nvml-dev=12.5.39 +conda-forge::cuda-command-line-tools=$CUDA_MAJOR_MINOR_VERSION +conda-forge::gds-tools=1.10.0.4 diff --git a/build_artifacts/v2/v2.0/v2.0.0/gpu.env.in b/build_artifacts/v2/v2.0/v2.0.0/gpu.env.in new file mode 100644 index 00000000..977daccc --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/gpu.env.in @@ -0,0 +1,55 @@ +# This file is auto-generated. +conda-forge::jupyter-activity-monitor-extension +conda-forge::mlflow +conda-forge::sagemaker-mlflow +conda-forge::langchain-aws[version='>=0.1.6'] +conda-forge::jupyter-collaboration[version='>=1.1.0'] +conda-forge::sagemaker-code-editor[version='>=1.1.0'] +conda-forge::amazon-sagemaker-jupyter-ai-q-developer[version='>=1.0.4'] +conda-forge::amazon-q-developer-jupyterlab-ext[version='>=3.1.0'] +conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.9'] +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.3'] +conda-forge::langchain[version='>=0.1.9'] +conda-forge::fastapi[version='>=0.110.3'] +conda-forge::uvicorn[version='>=0.30.1'] +conda-forge::pytorch[version='>=2.0.0'] +conda-forge::tensorflow[version='>=2.14.0'] +conda-forge::python[version='>=3.10.14'] +conda-forge::pip[version='>=23.3.2'] +conda-forge::torchvision[version='>=0.15.2'] +conda-forge::numpy[version='>=1.26.4'] +conda-forge::pandas[version='>=2.1.4'] +conda-forge::scikit-learn[version='>=1.4.2'] +conda-forge::jinja2[version='>=3.1.4'] +conda-forge::matplotlib-base[version='>=3.8.4'] +conda-forge::sagemaker-headless-execution-driver[version='>=0.0.12'] +conda-forge::ipython[version='>=8.25.0'] +conda-forge::scipy[version='>=1.11.4'] +conda-forge::keras[version='>=2.14.0'] +conda-forge::py-xgboost-gpu[version='>=1.7.6'] +conda-forge::jupyterlab[version='>=4.1.6'] +conda-forge::ipywidgets[version='>=8.1.3'] +conda-forge::conda[version='>=23.11.0'] +conda-forge::boto3[version='>=1.34.131'] +conda-forge::sagemaker-python-sdk[version='>=2.224.1'] +conda-forge::supervisor[version='>=4.2.5'] +conda-forge::autogluon[version='>=0.8.3'] +conda-forge::aws-glue-sessions[version='>=1.0.6'] +conda-forge::sagemaker-kernel-wrapper[version='>=0.0.2'] +conda-forge::jupyter-ai[version='>=2.18.1'] +conda-forge::jupyter-scheduler[version='>=2.7.1'] +conda-forge::jupyter-lsp[version='>=2.2.5'] +conda-forge::jupyterlab-lsp[version='>=5.0.3'] +conda-forge::python-lsp-server[version='>=1.11.0'] +conda-forge::notebook[version='>=7.1.3'] +conda-forge::altair[version='>=5.3.0'] +conda-forge::sagemaker-studio-analytics-extension[version='>=0.0.21'] +conda-forge::jupyter-dash[version='>=0.4.2'] +conda-forge::sagemaker-jupyterlab-extension[version='>=0.3.2'] +conda-forge::sagemaker-jupyterlab-emr-extension[version='>=0.1.9'] +conda-forge::amazon-sagemaker-jupyter-scheduler[version='>=3.1.0'] +conda-forge::jupyter-server-proxy[version='>=4.2.0'] +conda-forge::jupyterlab-git[version='>=0.50.0'] +conda-forge::pyhive[version='>=0.7.0'] +conda-forge::python-gssapi[version='>=1.8.3'] +conda-forge::tf-keras diff --git a/build_artifacts/v2/v2.0/v2.0.0/gpu.env.out b/build_artifacts/v2/v2.0/v2.0.0/gpu.env.out new file mode 100644 index 00000000..7da74a28 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/gpu.env.out @@ -0,0 +1,779 @@ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +@EXPLICIT +https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h77fa898_0.conda#ca0fad6a41ddaef54a153b78eccb5037 +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda#57d7dc60e9325e3de37ff8dffd18e814 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-hc0a3c3a_0.conda#1cb187a157136398ddbaae90713e2498 +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda#4d056880988120e29d75bfff282e0f45 +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-18.1.8-hf5423f3_1.conda#8782406a10201b67bd6476ca70cf92a8 +https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2#562b26ba2e19059551a811e72ab7f793 +https://conda.anaconda.org/conda-forge/linux-64/_py-xgboost-mutex-2.0-gpu_0.tar.bz2#7702188077361f43a4d61e64c694f850 +https://conda.anaconda.org/conda-forge/noarch/_sysroot_linux-64_curr_repodata_hack-3-h69a702a_16.conda#1c005af0c6ff22814b7c52ee448d4bea +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda#62ee74e96c5ebb0af99386de58cf9553 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda#b80f2f396ca2c28b8c14c437a4ed1e74 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda#e7ba12deb7020dd080c6c70e7b6f6a3d +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda#18aa975d2094c34aef978060ae7da7d8 +https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b +https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda#5aa797f8787fe7a17d1b0821485b5adc +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda#fcea371545eda051b6deafb24889fc69 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.7.4-hbcca054_0.conda#23ab7665c5f63cfb9f1f6195256daac6 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-h4bc722e_2.conda#e1b454497f9f7c1147fdde4b53f1b512 +https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda#d453b98d9c83e71da0741bb0ff4d76bc +https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda#161081fc7cec0bfda0d86d7cb595f8d8 +https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0 +https://conda.anaconda.org/conda-forge/linux-64/python-3.11.9-hb806964_0_cpython.conda#ac68acfa8b558ed406c75e98d3428d7b +https://conda.anaconda.org/conda-forge/noarch/absl-py-2.1.0-pyhd8ed1ab_0.conda#035d1d58677c13ec93122d9eb6b8803b +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_0.conda#6456c2620c990cd8dde2428a27ba0bc5 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_0.conda#f4ca84fbd6d06b0a052fb2d5b96dde41 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda#ae05ece66d3924ac3d48b4aa3fa96cec +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-23_linux64_openblas.conda#96c8450a40aa2b9733073a9460de972c +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-23_linux64_openblas.conda#eede29b40efa878cbe5bdcb767e97310 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-23_linux64_openblas.conda#2af0879961951987e464722fd00ec1e0 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-5_cp311.conda#139a8d40c8a2f430df31048949e450de +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda#a502d7aad449a1206efb366d6a12c52d +https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda#cbe1bb1f21567018ce595d9c2be0f0db +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py311h459d7ec_0.conda#9bc62d25dcf64eec484974a3123c9d57 +https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.5-hd4f0392_3.conda#6ae1a563a4aa61e55e8ae8260f0d021b +https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.5.82-h85509e4_0.conda#a3f000f20a89430de0cf3b9766ac9d09 +https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.5.82-he02047a_0.conda#18f0acc917af8611c714070a9a80465d +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.5.82-he02047a_0.conda#d16c4344c0e5c59db979c1a0558d425e +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvtx-12.5.82-he02047a_0.conda#530d17aecd81f28a9c3f074761fba450 +https://conda.anaconda.org/conda-forge/linux-64/libcublas-12.5.3.2-he02047a_0.conda#0a90d9671f8ca4cd6801130b35e1ecbd +https://conda.anaconda.org/conda-forge/linux-64/cudnn-8.9.7.29-h092f7fd_3.conda#2242eab289d88f2f819f8aee5aa49823 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.15.4-pyhd8ed1ab_0.conda#0e7e4388e9d5283e22b35a9443bdbcc9 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda#a322b4185121935c871d201ae00ac143 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda#7b86ecb7d3557821c649b3c31e3eb9f2 +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240116.2-cxx17_he02047a_1.conda#c48fc56ec03229f294176923c3265c05 +https://conda.anaconda.org/conda-forge/linux-64/libcufft-11.2.3.61-he02047a_0.conda#f24ecbfdac382e5f4117ad1182d55ae4 +https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.3.6.82-he02047a_0.conda#d1287d0b8348cbe15ed1cd0d53764781 +https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-12.5.82-he02047a_0.conda#e5e58d150028643731c5cbf83e5ba249 +https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.5.1.3-he02047a_0.conda#39501c7f687f65be6246d4fdefabfd27 +https://conda.anaconda.org/conda-forge/linux-64/libcusolver-11.6.3.83-he02047a_0.conda#d09f318068654b26f8fa4c716e32b797 +https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.7.2-h173bb3b_2.conda#c21393bb780150d5a269e7158802e5dc +https://conda.anaconda.org/conda-forge/linux-64/libmagma_sparse-2.7.2-h173bb3b_3.conda#59b4f8f84e04330824aff4a281777857 +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.25.3-h08a7969_0.conda#6945825cebd2aeb16af4c69d97c32c13 +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.48.0-hd590300_0.conda#7e8b914b1062dd4386e3de4d82a3ead6 +https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda#8b189310083baabfb622af68fd9d3ae3 +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda#d66573916ffcf376178462f1b61c941e +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.7-he7c6b58_4.conda#08a9265c637230c37cb1be4a6cad4536 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.1-default_hecaa2ac_1000.conda#f54aeebefb5c5ff84eca4fb05ca8aa3a +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.12.0-h434a139_3.conda#c667c11d1e488a38220ede8a34441bff +https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda#81d4a1a57d618adf0152db973d93b2ad +https://conda.anaconda.org/conda-forge/linux-64/nccl-2.22.3.1-hbc370b7_1.conda#94e562f042ae010fc77326d28079c48c +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.6.1-h3400bea_1.conda#ac00525f47c9fd0e0456a64caef525a6 +https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.3.1-cuda120_h2b0da52_300.conda#1ed803c2884f0fedd6691bffdf3ad2a2 +https://conda.anaconda.org/conda-forge/noarch/networkx-3.3-pyhd8ed1ab_1.conda#d335fd5704b46f4efb89a6774e81aef0 +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda#c94a5994ef49749880a8139cf9afcbe1 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h38ae2d0_2.conda#168e18a2bba4f8520e6c5e38982f5847 +https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-hfe3b2da_0.conda#289c71e83dc0daa7d4c81f04180778ca +https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.1.5-py311hc4f1f91_1.conda#30b83b4a5d116d790f8da79a4acac238 +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda#dbf6e2d89137da32fa6670f3bffc024e +https://conda.anaconda.org/conda-forge/noarch/sympy-1.13.2-pypyh2585a3b_103.conda#7327125b427c98b81564f164c4a75d4c +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda#ebe6952715e1d5eb567eeebf25250fa7 +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.3.1-cuda120_py311hf6aebf0_300.conda#443c2c72e0844105e2d65bb467ef5be8 +https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py311h61187de_0.conda#76439451605390254b85d8da6f8d962a +https://conda.anaconda.org/conda-forge/noarch/accelerate-0.21.0-pyhd8ed1ab_0.conda#172fa1bba08cd6b431a1739090ab0ffc +https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.1-py311h459d7ec_0.conda#b267e553a337e1878512621e374845c5 +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2#d1e1eb7e21a9e2c74279d87dafb68156 +https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda#5e4c0743c70186509d1412e03c2d8dfa +https://conda.anaconda.org/conda-forge/linux-64/multidict-6.0.5-py311h459d7ec_0.conda#4288ea5cbe686d1b18fc3efb36c009a5 +https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda#c0cc1420498b17414d8617d0b9f506ca +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py311h459d7ec_0.conda#fff0f2058e9d86c8bf5848ee93917a8d +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.5-py311h459d7ec_0.conda#0175d2636cc41dc019b51462c13ce225 +https://conda.anaconda.org/conda-forge/noarch/aioitertools-0.11.0-pyhd8ed1ab_0.tar.bz2#59c40397276a286241c65faec5e1be3c +https://conda.anaconda.org/conda-forge/noarch/jmespath-1.0.1-pyhd8ed1ab_0.tar.bz2#2cfa3e1cf3fb51bb9b17acc5b5e9ea11 +https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 +https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda#2cf4264fffb9e6eff6031c5b6884d61c +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda#cce9e7c3f1c307f2a5fb08a2922d6164 +https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025 +https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.19-pyhd8ed1ab_0.conda#6bb37c314b3cc1515dcf086ffe01c46e +https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.131-pyge310_1234567_0.conda#955a32ec433efee3e3ab19658ce1996d +https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py311h459d7ec_0.conda#6669b5529d206c1f880b642cdd17ae05 +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.13.2-pyhd8ed1ab_0.conda#c188c514ef97f345144d7840128c0a1d +https://conda.anaconda.org/conda-forge/noarch/aiohttp-cors-0.7.0-py_0.tar.bz2#276767d5ffa1515c293d25bd78f22a0b +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda#52d648bd608f5737b123f510bb5514b5 +https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8 +https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.0-pyhd8ed1ab_0.conda#05b6bcb391b5be17374f7ad0aeedc479 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.10.0-pyha770c72_0.conda#ae2ad334f34040e147cc5824b450463b +https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.3-pyhd8ed1ab_0.conda#82b36c572ecc0d42c612203769e19de5 +https://conda.anaconda.org/conda-forge/noarch/mako-1.3.5-pyhd8ed1ab_0.conda#29fddbfa0e2361636a98de4f46ead2ac +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.3-py311hb755f60_0.conda#6f4b03b4d1e0da0962ea02113382677c +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.32-py311h61187de_0.conda#2248e75f001930ba8389fe91c51be50b +https://conda.anaconda.org/conda-forge/noarch/alembic-1.13.2-pyhd8ed1ab_0.conda#0045ed5e28a7f2c252a30442408b36c4 +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py311hb3a8bbb_0.conda#db475e65fb621c2ec1dcdcc4e170b6f1 +https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda#0fc8b52192a8898627c3efae1003e9f6 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda#a0e4efb5f35786a05af4809a2fb1f855 +https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda#8a3a3d01629da20befa340919e3dd2c4 +https://conda.anaconda.org/conda-forge/noarch/narwhals-1.4.2-pyhd8ed1ab_0.conda#fc31373e7cd4393c47681113a9f1ffc6 +https://conda.anaconda.org/conda-forge/noarch/altair-5.4.0-pyhd8ed1ab_0.conda#724b2fcbf280b900289ad1c88f492dcd +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.2-pyhd8ed1ab_0.conda#80f00f9033aee2358171207746e09ea0 +https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.131-pyhd8ed1ab_0.conda#16cbd51eb7f0fc40a88c636006437c85 +https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda#3d081de3a6ea9f894bbb585e8e3a4dcb +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda#d02ae936e42063ca46af6cdad2dbd1e0 +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda#490730480d76cf9c8f8f2849719c6e2b +https://conda.anaconda.org/conda-forge/noarch/anyio-4.4.0-pyhd8ed1ab_0.conda#1fa97c6e8db1f82c64ff17a5efc4ae8e +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.7.4-pyhd8ed1ab_0.conda#24e7fd6ca65997938fff9e5ab6f653e4 +https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2#b21ed0883505ba1910994f1df031a428 +https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2#914d6646c4dbb1fd3ff539830a12fd71 +https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2#9f765cbfab6870c8435b9eefecd7a1f4 +https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2#b748fbf7060927a6e82df7cb5ee8f097 +https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda#a6b9a0158301e697e4d0a36a3d60e133 +https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.0-pyhd8ed1ab_0.conda#9f359af5a886fd6ca6b2b6ea02e58332 +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.10.0-hd8ed1ab_0.conda#c063ddbb9908499fd4f20b31dc67065a +https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda#3df84416a021220d8b5700c613af2dc5 +https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda#948d84721b578d426294e17a02e24cbb +https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.5-py311hf86e51f_0.conda#748a22f229ec0e62963b8045b8e6786c +https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364 +https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda#81534b420deb77da8833f2289b8d47ac +https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2 +https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda#779345c95648be40d22aaa89de7d4254 +https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263 +https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda#629f3203c99b32e0988910c93e77f3b6 +https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2#415f0ebb6198cc2801c73438a9fb5761 +https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda#68f0738df502a14213624b288c60c9ad +https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda#1247c861065d227781231950e14fe817 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda#b7f5c092b8f9800150d998a71b76d5a1 +https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda#5f25798dcefd8252ce5f9dc494d5f571 +https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda#e16be50e378d8a4533b989035b196ab8 +https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda#0f051f09d992e0d08941706ad519ee0e +https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af +https://conda.anaconda.org/conda-forge/noarch/ipython-8.26.0-pyh707e725_0.conda#f64d3520d5d00321c10f4dabb5b903f3 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py311h38be061_0.conda#f85e78497dfed6f6a4b865191f42de2e +https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d +https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2#30186d27e2c9fa62b45fb1476b7200e3 +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2#4d331e44109e3f0e19b4cb8f9b82f3e1 +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda#3f43953b7d3fb3aaa1d0d0723d91e368 +https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h75354e8_4.conda#03cc8d9838ad9dd0060ab532e81ccb21 +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.1.0-py311h759c1eb_0.conda#cb593185b7ad0343158081c2da456bfc +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py311h331c9d8_0.conda#e29e451c96bf8e81a5760b7565c6ed2c +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.2-pyhd8ed1ab_0.conda#3cdbb2fa84490e5fd44c9f9806c0d292 +https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda#6598c056f64dc8800d40add25e4e2c34 +https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda#b40131ab6a36ac2c09b7c57d4d3fbf99 +https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda#844d9eb3b43095b031874477f7d70088 +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.0-py311ha8e6434_0.conda#32259cd17741b52be10cd23a26cca23a +https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py311h459d7ec_4.conda#de5b16869a430949b02161b04b844a30 +https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda#3afef1f55a1366b4d3b6a0d92e2235e4 +https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2#576d629e47797577ab0f1b351297ef4a +https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2#9b347a7ec10940d3f7941ff6c460b551 +https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2#642d35437078749ef23a5dca2c9bb1f3 +https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20240316-pyhd8ed1ab_0.conda#7831efa91d57475373ee52fb92e8d137 +https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda#b77d8c2313158e6e461ca0efb1c2c508 +https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2#4cb68948e0b8429534380243d063a27a +https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py311h38be061_0.conda#01a505ab9b4e3af12baa98b82f5fcafa +https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2#fed45fc5ea0813240707998abe49f520 +https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2#912a71cc01012ee38e6b90ddd561e36f +https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda#0944dc65cb4a9b5b68522c3bb585d41c +https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda#eb48b812eb4fbb9ff238a6651fdbbcae +https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.21.1-pyhd8ed1ab_0.conda#26bce4b5405738c09304d4f4796b2c2a +https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda#a61bf9ec79426938ff785eb69dbb1960 +https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda#ed45423c41b3da15ea1df39b1f80c2ca +https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda#efba281bbdae5f6b0a1d53c6d4a97c93 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda#219b3833aa8ed91d47d1be6ca03f30be +https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561 +https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda#332493000404d8411859539a5a630865 +https://conda.anaconda.org/conda-forge/noarch/setuptools-72.1.0-pyhd8ed1ab_0.conda#e06d4c26df4f958a8d38696f2c344d15 +https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9 +https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e +https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2 +https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda#afcd1b53bcac8844540358e33f33d28f +https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda#5cbee699846772cc939bef23a0d524ed +https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda#b98d2018c01ce9980c03ee2850690fab +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda#0b57b5368ab7fc7cdc9e3511fa867214 +https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda#15b51397e0fe8ea7d7da60d83eb76ebc +https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9 +https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda#8662629d9a05f9cff364e31ca106c1ac +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda#e2d2abb421c13456a9a9f80272fdf543 +https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2#eb67e3cace64c66233e2d35949e20f92 +https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda#24fba5a9d161ad8103d4e84c0e1a3ed4 +https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda#9a19b94034dd3abb2b348c8b93388035 +https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda#778594b20097b5a948c59e50ae42482a +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda#f372c576b8774922da83cda2b12f9d29 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda#ca23c71f70a7c7935b3d03f0f1a5801d +https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda#885867f6adab3d7ecdf8ab6ca0785f51 +https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda#9669586875baeced8fc30c0826c3270e +https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda#5d8c241a9261e720a34a07a3e1ac4109 +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda#7f4a9e3fcff3f6356ae99244a014da6a +https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda#5ede4753180c7a550a443c430dc8ab52 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda#af8239bf1ba7e8c69b689f780f653488 +https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda#3d85618e2c97ab896b5b5e298d32b5b3 +https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.1.8-pyhd8ed1ab_0.conda#1116781efc9fd1654a9da329d5d3ba26 +https://conda.anaconda.org/conda-forge/noarch/amazon-q-developer-jupyterlab-ext-3.2.0-pyhd8ed1ab_0.conda#d7142222c9f8cdbfb475ac6f786a80fe +https://conda.anaconda.org/conda-forge/noarch/aws-embedded-metrics-3.2.0-pyhd8ed1ab_0.conda#e1c511655b6e9eb0265c9715c7fa410f +https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 +https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda#0badf9c54e24cecfb0ad2f99d680c163 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.8.0-pyhd8ed1ab_0.conda#bf68bf9ff9a18f1b17aa8c817225aee0 +https://conda.anaconda.org/conda-forge/noarch/deepmerge-1.1.1-pyhd8ed1ab_0.conda#d91c3d8ac3f2ab36ca4ea32ac42f731e +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py311h459d7ec_0.conda#13d385f635d7fbe9acc93600f67a6cb4 +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.8-py311h52f7536_0.conda#f33f59b8130753174992f409a41e112e +https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2#6d6552722448103793743dabfbda532d +https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda#f5580336fe091d46f9a2ea97da044550 +https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 +https://conda.anaconda.org/conda-forge/noarch/distributed-2024.8.0-pyhd8ed1ab_0.conda#f9a7fbaeb79d4b57d1ed742930b4eec4 +https://conda.anaconda.org/conda-forge/noarch/ply-3.11-pyhd8ed1ab_2.conda#18c6deb6f9602e32446398203c8f0e91 +https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 +https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda#3ce482ec3066e6d809dbbb1d1679f215 +https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.21.3-pyhd8ed1ab_0.conda#2c99be9dade8ab821e0fd279c9895120 +https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda#4eccaeba205f0aed9ac3a9ea58568ca3 +https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_0.conda#9e924b76b91908a17e28a19a0ab88687 +https://conda.anaconda.org/conda-forge/noarch/dataclasses-json-0.6.7-pyhd8ed1ab_0.conda#c4bbd4cb04570e17833a4280617d6cd8 +https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda#bfdb7c5c6ad1077c82a69a8642c87aff +https://conda.anaconda.org/conda-forge/linux-64/orjson-3.10.7-py311hb3a8bbb_0.conda#bf27a1b7c076f31de15d1937ef6c55e6 +https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.17-py311h61187de_0.conda#05a1c582a55f4b147e1533672245e98e +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.99-pyhd8ed1ab_0.conda#699830f9ff8285d83667244a02f99109 +https://conda.anaconda.org/conda-forge/noarch/tenacity-8.5.0-pyhd8ed1ab_0.conda#354cbc1244395cabbaec2617906d3a27 +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.2.33-pyhd8ed1ab_0.conda#953ab0389ec87ffa7f77b31678c843c0 +https://conda.anaconda.org/conda-forge/noarch/langchain-text-splitters-0.2.2-pyhd8ed1ab_0.conda#732d34d740166cb824724253fc814f6a +https://conda.anaconda.org/conda-forge/noarch/langchain-0.2.5-pyhd8ed1ab_0.conda#22ce86630c642b2d784796fc2913bc2e +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.2.12-pyhd8ed1ab_0.conda#531058cf6a591227798370c116a046c1 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.20.0-pyhd8ed1ab_0.conda#985361fcd075ec75bc5d96b2e3915cd1 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.20.0-pyhd8ed1ab_0.conda#4c5e858d76fe277627591f082f162860 +https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py311h46250e7_0.conda#1c3cc0b6fd796ba4ef2b562c23ee3e04 +https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.12.4-pyhd8ed1ab_0.conda#7f558701e9a089188cc81d620282ef28 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-common-0.1.21-pyhd8ed1ab_0.conda#b938dcd1d9d54a85bfd0c4411abe62d0 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-ai-q-developer-1.0.9-pyhd8ed1ab_0.conda#e473f66d59dc47dd2a686472a2a9a240 +https://conda.anaconda.org/conda-forge/noarch/croniter-1.4.1-pyhd8ed1ab_0.conda#7a4568626f8d6e7c63dcb25d5501a967 +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.3-ha770c72_0.conda#0a3af8b93ba501c6ba020deacc9df841 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.4-hd8ed1ab_1.conda#37cec2cf68f4c09563d8bc833791096b +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.4-hd8ed1ab_1.conda#ab83e3b9ca2b111d8f332e9dc8b2170f +https://conda.anaconda.org/conda-forge/noarch/jupyter_scheduler-2.7.1-pyha770c72_0.conda#141ab6dd2962acac184c84672adf2571 +https://conda.anaconda.org/conda-forge/noarch/jupyter-scheduler-2.7.1-hd8ed1ab_0.conda#f3fd741ca8607da2245aa4802e9a2a62 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-scheduler-3.1.3-pyhd8ed1ab_0.conda#a8a13e303f473e7f66c90ab06703728e +https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.0-py311hc6616f6_0.conda#f392b3f7a26db16f37cf82996dcfc84d +https://conda.anaconda.org/conda-forge/noarch/pyathena-3.9.0-pyhd8ed1ab_0.conda#e486c9f5bcaf4eea11d3c7ead950ef18 +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda#e71f31f8cfb0a91439f2086fc8aa0461 +https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.4-py311h9691dec_0.conda#bf616b82576b9a7c65ba3611cce36c23 +https://conda.anaconda.org/conda-forge/noarch/asn1crypto-1.5.1-pyhd8ed1ab_0.tar.bz2#f3f2ab3ce28979a24d1a988ba211eb9b +https://conda.anaconda.org/conda-forge/noarch/scramp-1.4.4-pyhd8ed1ab_0.tar.bz2#2fac165a69d120a1689e1955ba1a4bfd +https://conda.anaconda.org/conda-forge/noarch/redshift_connector-2.1.2-pyhd8ed1ab_0.conda#e6a525569f74610adc8dbc02377bd4ce +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-execution-0.1.3-pyhd8ed1ab_0.conda#4b2d24a39133e2dda52ece10bfe56810 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda#98206ea9954216ee7540f0c773f2104d +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.2-py311h14de704_1.conda#84e2dd379d4edec4dd6382861486104d +https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.5.1-pyhd8ed1ab_0.conda#e8af29e73e8b5906d8882c1f67222d34 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-magic-0.1.3-pyhd8ed1ab_0.conda#ff59aa43fe9d2a32db1d7cbbcb338467 +https://conda.anaconda.org/conda-forge/noarch/diskcache-5.6.3-pyhd8ed1ab_0.conda#4c33109f652b5d8c995ab243436c9370 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-lsp-5.0.3-pyhd8ed1ab_0.conda#63ec86c18fd4ab77ae3ada5d48bcf6fc +https://conda.anaconda.org/conda-forge/noarch/amazon_sagemaker_sql_editor-0.1.11-pyhd8ed1ab_0.conda#740d3ec2622063fce6c145374b644cd4 +https://conda.anaconda.org/conda-forge/noarch/aniso8601-9.0.1-pyhd8ed1ab_0.tar.bz2#36fba1a639f2d24723c5480345b78553 +https://conda.anaconda.org/conda-forge/linux-64/ansi2html-1.9.2-py311h38be061_1.conda#f1732173bdb38137d7919c7a00075780 +https://conda.anaconda.org/conda-forge/noarch/ansicolors-1.1.8-pyhd8ed1ab_0.tar.bz2#e4929dd673bcb012fab516878e72f6f6 +https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.9.3-pyhd8ed1ab_1.tar.bz2#c88eaec8de9ae1fa161205aa18e7a5b1 +https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda#346722a0be40f6edc53f12640d301338 +https://conda.anaconda.org/conda-forge/noarch/archspec-0.2.3-pyhd8ed1ab_0.conda#192278292e20704f663b9c766909d67b +https://conda.anaconda.org/conda-forge/linux-64/astroid-3.2.4-py311h38be061_0.conda#1648d955b9af260d06a791c195ad57a7 +https://conda.anaconda.org/conda-forge/noarch/astunparse-1.6.3-pyhd8ed1ab_0.tar.bz2#000b6f68a0bfaba800ced7500c11780f +https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda#df359c09c41cd186fffb93a2d87aa6f5 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda#b0143a3e98136a680b728fdf9b42a258 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda#f730d54ba9cd543666d7220c9f7ed563 +https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 +https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda#c6e94fc2b2ec71ea33fe7c7da259acb4 +https://conda.anaconda.org/conda-forge/noarch/autogluon.common-1.1.1-pyhd8ed1ab_0.conda#af83f5eb1d39122861f80229f26075aa +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda#650a7807e689642dddd3590eb817beed +https://conda.anaconda.org/conda-forge/noarch/py4j-0.10.9.7-pyhd8ed1ab_0.tar.bz2#0f01a52cf858aef86632a8ab08011c0c +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.12.0-py311h64a7726_2.conda#24ca5107ab75c5521067b8ba505dfae5 +https://conda.anaconda.org/conda-forge/noarch/hyperopt-0.2.7-pyhd8ed1ab_0.tar.bz2#260711cc18720efc12925bfc90418e93 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.1-py311h9547e67_0.conda#74ad0ae64f1ef565e27eda87fa749e84 +https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda#aec6c91c7371c26392a06708a73c70e5 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda#f07002e225d7a60a694d42a7bf5ff53f +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda#5fc11c6020d421960607d821310fcd4d +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda#39f910d205726805a958da408ca194ba +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.53.1-py311h61187de_0.conda#bcbe6c9db1c25900c3808b8974e1bb90 +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda#009981dd9cfcaa4dbfa25ffaed86bcae +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_1.conda#2c65bdf442b0d37aad080c8a4e0d452f +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76bbff344f0134279f225174e9064c8f +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.21-h4bc722e_0.conda#36ce76665bf67f5aac36be7a0d21b7f3 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda#b26e8aa824079e1be0294e7152ca4559 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h46a8edc_4.conda#a7e3a62981350e232e0e7345b5aea580 +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 +https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda#2c80dc38fface310c9bd81b17037fee5 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2#be93aabceefa2fac576e971aef407908 +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.16-hd590300_0.conda#151cba22b85a989c2d6ef9633ffee1e4 +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda#7f2e286780f072ed750df46dc2631138 +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.4.0-py311h82a398c_0.conda#b9e0ac1f5564b6572a6d702c04207be8 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f +https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda#353823361b1d27eb3960efb076dfcaf6 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py311h74b4f7c_0.conda#de8e36c9792f14eed7e11e672f03fbf0 +https://conda.anaconda.org/conda-forge/noarch/colorful-0.5.6-pyhd8ed1ab_0.conda#a75276da977eecc9224dea358576e2ec +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.33.0-ha66036c_0.conda#b6927f788e85267beef6cbb292aaebdd +https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2023.09.01-h5a48ba9_2.conda#41c69fba59d495e8cf5ffda48a607e35 +https://conda.anaconda.org/conda-forge/linux-64/re2-2023.09.01-h7f4b329_2.conda#8f70e36268dea8eb666ef14c29bd3cda +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.62.2-h15f2491_0.conda#8dabe607748cb3d7002ad73cd06f1325 +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.62.2-py311ha6695c7_0.conda#5256f630309144ad1a6e4ec1736f5d66 +https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-hd590300_1001.conda#ec7398d21e2651e0dcb0044d03b9a339 +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.4-hfca40fe_0.conda#32ddb97f897740641d8d46a829ce1704 +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda#172bf1cd1ff8629f2b1179945ed45055 +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda#700ac6ea6d53d5510591c4344d5c989a +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.9.1-hdb1bdb2_0.conda#7da1d242ca3591e174a3c7d82230d3c0 +https://conda.anaconda.org/conda-forge/linux-64/gettext-tools-0.22.5-he02047a_3.conda#fcd2016d1d299f654f81021e27496818 +https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.22.5-he8f35ee_3.conda#4fab9799da9571266d05ca5503330655 +https://conda.anaconda.org/conda-forge/linux-64/libasprintf-devel-0.22.5-he8f35ee_3.conda#1091193789bb830127ed067a9e01ac57 +https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-0.22.5-he02047a_3.conda#efab66b82ec976930b96d62a976de8e7 +https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-devel-0.22.5-he02047a_3.conda#9aba7960731e6b4547b3a52f812ed801 +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.22.5-he02047a_3.conda#c7f243bbaea97cd6ea1edd693270100e +https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2#7245a044b4a1980ed83196176b78b73a +https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.7-hd590300_0.conda#2b7b0d827c6447cc1d85dc06d5b5de46 +https://conda.anaconda.org/conda-forge/linux-64/libtasn1-4.19.0-h166bdaf_0.tar.bz2#93840744a8552e9ebf6bb1a5dffc125a +https://conda.anaconda.org/conda-forge/linux-64/nettle-3.9.1-h7ab15ed_0.conda#2bf1915cc107738811368afcb0993a59 +https://conda.anaconda.org/conda-forge/linux-64/p11-kit-0.24.1-hc5aa10d_0.tar.bz2#56ee94e34b71742bbdfa832c974e47a8 +https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.7-h32866dd_0.conda#b3217a6e20b24a6dafa0f0b3d13995c6 +https://conda.anaconda.org/conda-forge/linux-64/libmicrohttpd-1.0.1-hbc5bc17_1.conda#c384e4dcd3c345b54bfb79d9ff712349 +https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.191-h924a536_0.conda#73d050766060acd2b3a289f27d857090 +https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2#a730b2badd586580c5752cc73842e068 +https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda#776a8dd9e824f77abac30e6ef43a8f7a +https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda#93a8e71256479c62074356ef6ebf501b +https://conda.anaconda.org/conda-forge/noarch/rich-13.7.1-pyhd8ed1ab_0.conda#ba445bf767ae6f0d959ff2b40c20912b +https://conda.anaconda.org/conda-forge/noarch/textual-0.76.0-pyhd8ed1ab_0.conda#e547297f25a7d5c240fa51427a6f90ea +https://conda.anaconda.org/conda-forge/linux-64/memray-1.13.4-py311h683c4d6_0.conda#452f1f130f3f531b09c6bd3368a2aae7 +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-h4ab18f5_1.conda#9653f1bf3766164d0e65fa723cabbc54 +https://conda.anaconda.org/conda-forge/linux-64/nodejs-20.12.2-hc19f0b3_1.conda#0b86ff6ab7bdce5076269f2bbbf6857d +https://conda.anaconda.org/conda-forge/noarch/cachetools-5.5.0-pyhd8ed1ab_0.conda#5bad039db72bd8f134a5cff3ebaa190d +https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.6.0-pyhd8ed1ab_0.conda#d528d00a110a974e75aa6db6a4f04dc7 +https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.4.0-pyhd8ed1ab_0.conda#8e40d7b2b3bdf9f3cab88d93d7dfaf3b +https://conda.anaconda.org/conda-forge/noarch/pyopenssl-24.2.1-pyhd8ed1ab_2.conda#85fa2fdd26d5a38792eb57bc72463f07 +https://conda.anaconda.org/conda-forge/noarch/pyu2f-0.1.5-pyhd8ed1ab_0.tar.bz2#caabbeaa83928d0c3e3949261daa18eb +https://conda.anaconda.org/conda-forge/noarch/rsa-4.9-pyhd8ed1ab_0.tar.bz2#03bf410858b2cefc267316408a77c436 +https://conda.anaconda.org/conda-forge/noarch/google-auth-2.33.0-pyhff2d567_0.conda#5a750d3f2f4bfb378322dda0d8a02018 +https://conda.anaconda.org/conda-forge/linux-64/protobuf-4.25.3-py311h7b78aeb_0.conda#fe6c263e6bd0ec098995b7cd176b0f95 +https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.63.2-pyhd8ed1ab_0.conda#2932e8c15f7836f47006309a373ff179 +https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.23.0-pyhd8ed1ab_0.conda#26c043ffe1c027eaed894d70ea04a18d +https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.19.1-pyhd8ed1ab_0.conda#3a194e077990a1e3a70d83ef09d8bcf9 +https://conda.anaconda.org/conda-forge/linux-64/opencensus-context-0.1.3-py311h38be061_2.conda#d6e0de91d4f50d84534e3771dbb3fbc5 +https://conda.anaconda.org/conda-forge/noarch/opencensus-0.11.3-pyhd8ed1ab_0.conda#17ec70761b45b88869622e09442b19f6 +https://conda.anaconda.org/conda-forge/linux-64/py-spy-0.3.14-h87a5ac0_0.tar.bz2#280f7f1025ef7c729d4c81d70540c8ad +https://conda.anaconda.org/conda-forge/linux-64/setproctitle-1.3.3-py311h459d7ec_0.conda#82a78657a66e78c04e614ceb772ee8da +https://conda.anaconda.org/conda-forge/linux-64/ray-core-2.31.0-py311h0847d76_1.conda#7f09125fa898a328275a9a3ed796369f +https://conda.anaconda.org/conda-forge/noarch/smart_open-7.0.4-pyhd8ed1ab_0.conda#2804ae86934b30c2afbd713d1448afe5 +https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda#db16c66b759a64dc5183d69cc3745a52 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.21.0-pyhd8ed1ab_0.conda#cb9a711f7c9f3074fe522e5a34481e60 +https://conda.anaconda.org/conda-forge/linux-64/ray-default-2.31.0-py311h48098de_1.conda#614d268cebf67836273b6758e0000002 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.27-h4bc722e_0.conda#817119e8a21a45d325f65d0d54710052 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.7.3-h8dac057_2.conda#577509458a061ddc9b089602ac6e1e98 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.18-h038f3f9_10.conda#76b09778c1bd489de8691349fd4a73d0 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.0-h3400bea_0.conda#5f17883266c5312a1fc73583f28ebae5 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.14.18-h0040ed1_5.conda#2f6316f09b3152fecc2d34ab69508e6a +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.7-ha1f794c_4.conda#b506fe315f908ea9b94036a1e5de5e6e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.19-h038f3f9_2.conda#6861cab6cddb5d713cb3db95c838d30f +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.25-h15d0e8c_6.conda#e0d292ba383ac09598c664186c0144cd +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.18-h038f3f9_10.conda#4bf9c8fcf2bb6793c55e5c5758b9b011 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.2-h570d160_21.conda#f6f77c408f324ed20bba4b32cb04d875 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.4-hc14a930_17.conda#f0e3f95a9f545d5975e8573f80cdb5fa +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.6.4-h558cea2_8.conda#af03e7b03e929396fb80ffac1a676c89 +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.27.5-hd0b8a3b_7.conda#059dc1576393ab4b807e74f90e5db6d9 +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.379-h7dc8893_3.conda#c077ea74db96ebfd3366a2bae0701448 +https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-he1b5a44_1004.tar.bz2#cddaf2c63ea4a5901cf09524c490ecdc +https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda#ff862eebdfeb2fd048ae9dc92510baca +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.28.0-h26d7fe4_0.conda#2c51703b4d775f8943c08a361788131b +https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2#c965a5aa0d5c1c37ffc62dff36e28400 +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.28.0-ha262f82_0.conda#9e7960f0b9ab3895ef73d92477c47dae +https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2#ede4266dc02e875fe1ea77b25dd43747 +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-ha2e4443_0.conda#6b7dcc7349efd123d493d2dbe85a045f +https://conda.anaconda.org/conda-forge/linux-64/orc-2.0.2-h669347b_0.conda#1e6c10f7d749a490612404efeb179eb8 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-15.0.2-hf4c2b5f_24_cpu.conda#4dd80e8d236e1147ea3ff01fc411cb40 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-15.0.2-h44f6110_24_cpu.conda#e3405759eb8deda302f0a68914e977ca +https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda#a1cfcc585f0c42bf8d5546bb1dfb668d +https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.20.0-hb90f79a_0.conda#9ce07c1750e779c9d4cc968047f78b0d +https://conda.anaconda.org/conda-forge/linux-64/libparquet-15.0.2-h7ca84d5_24_cpu.conda#4b1f2e1024b512e159291afd96d898ce +https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-15.0.2-h44f6110_24_cpu.conda#0448704bd1fc3b16f6b5608d2c38d736 +https://conda.anaconda.org/conda-forge/linux-64/libnl-3.10.0-h4bc722e_0.conda#6221e705f55cf0533f0777ae54ad86c6 +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-53.0-he02047a_0.conda#d60e9a23682287a041a4428927ea7aa5 +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.16.0-h1e563ba_5.conda#579d8e1495f0f5122fe95f5dcadcf0e5 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-15.0.2-h55b8332_24_cpu.conda#c5445c6878608f0d515fe29bc1ef2334 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-15.0.2-h61825be_24_cpu.conda#23a80a834706f0c8bc55766152118284 +https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-hb3ce162_3.conda#a4d48c40dd5c60edbab7fd69c9a88967 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-15.0.2-hfcb4b9d_24_cpu.conda#c63a529a946c01affb17bed515040ab7 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-15.0.2-h61825be_24_cpu.conda#909169f6595ec743057d68de255a4a56 +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-15.0.2-py311hb545094_24_cpu.conda#a57b67589e797b6c79051c93a2aff511 +https://conda.anaconda.org/conda-forge/noarch/tensorboardx-2.6.2.2-pyhd8ed1ab_0.conda#eddae4814ac4040d88009779fc1e2d9e +https://conda.anaconda.org/conda-forge/linux-64/ray-tune-2.31.0-py311h38be061_1.conda#9244b753b2deab5cdd59c14498df9880 +https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_0.conda#25df261d4523d9f9783bcdb7208d872f +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.5.0-pyhc1e730c_0.conda#df68d78237980a159bd7149f33c0e8fd +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.2-py311he08f58d_1.conda#fd4a80e35c05513590b33c83fc81dcc7 +https://conda.anaconda.org/conda-forge/noarch/autogluon.core-1.1.1-pyha770c72_2.conda#b6b8bb53119aab2be0c9661b0e4f76da +https://conda.anaconda.org/conda-forge/noarch/autogluon.features-1.1.1-pyhd8ed1ab_0.conda#726c446f8c8e74f9a5c8098a7a43084b +https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py311h38be061_1.conda#b8cfb13de4dbe349a41800644391de6a +https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2#a556fa60840fcb9dd739d186bfd252f7 +https://conda.anaconda.org/conda-forge/noarch/text-unidecode-1.3-pyhd8ed1ab_1.conda#ba8aba332d8868897ce44ad74015a7fe +https://conda.anaconda.org/conda-forge/noarch/python-slugify-8.0.4-pyhd8ed1ab_0.conda#4b11845622b3c3178c0e989235b53975 +https://conda.anaconda.org/conda-forge/noarch/cookiecutter-2.6.0-pyhca7485f_0.conda#d6260b53b9db90017321af0b45cc00da +https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda#78745f157d56877a2c6e7b386f66f3e2 +https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.24.5-pyhd8ed1ab_0.conda#c7bf55cfeefe35d28a15685c466ff61e +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.16-py311h459d7ec_0.conda#b97ca422458b9a0300d73b372d2900d6 +https://conda.anaconda.org/conda-forge/noarch/pyarrow-hotfix-0.6-pyhd8ed1ab_0.conda#ccc06e6ef2064ae129fab3286299abda +https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda#f08fb5c89edfc4aadee1c81d4cfb1fa1 +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.5.0-py311h61187de_0.conda#44bac99d0125c748894b9ffb6ce97811 +https://conda.anaconda.org/conda-forge/noarch/datasets-2.21.0-pyhd8ed1ab_0.conda#1b2d7c700663bfec50f6c553e5449da2 +https://conda.anaconda.org/conda-forge/noarch/responses-0.18.0-pyhd8ed1ab_0.tar.bz2#a10d30e613a2a1a78a89ceadf3832e7c +https://conda.anaconda.org/conda-forge/noarch/evaluate-0.4.1-pyhd8ed1ab_0.conda#ea228540526db4dde8ad8f2309bc1d40 +https://conda.anaconda.org/conda-forge/noarch/lightning-utilities-0.11.6-pyhd8ed1ab_0.conda#d11cdcbb48ed0599bd514f4e559326f8 +https://conda.anaconda.org/conda-forge/noarch/torchmetrics-1.2.1-pyhd8ed1ab_0.conda#f6468e9ea893241ad7b8eae519f7e3a5 +https://conda.anaconda.org/conda-forge/noarch/pytorch-lightning-2.3.3-pyhd8ed1ab_0.conda#1b60f192549a329c5f89923c09eaffdc +https://conda.anaconda.org/conda-forge/noarch/lightning-2.3.3-pyhd8ed1ab_0.conda#0eb92bdf47cab1f99f7d51effde04591 +https://conda.anaconda.org/conda-forge/noarch/gdown-5.2.0-pyhd8ed1ab_0.conda#29903392720ea0d6162b772ff97235c3 +https://conda.anaconda.org/conda-forge/linux-64/libsentencepiece-0.2.0-he81a138_2.conda#5000f6c9352c853e4c742e2ec88f9a43 +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-python-0.2.0-py311h7fa642f_2.conda#60ded67bfefb7f358f01a52556c79dfe +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-spm-0.2.0-he81a138_2.conda#153728c1e224f44390004b2f9666f1a8 +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-0.2.0-h38be061_2.conda#3071ca26573aac7def93bb02934d077b +https://conda.anaconda.org/conda-forge/linux-64/regex-2024.7.24-py311h61187de_0.conda#090222c7863ad3fe208a35998b81e5df +https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.4.4-py311hb3a8bbb_0.conda#257bc9b805a85e07176081980500e43f +https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.15.2-py311h6640629_0.conda#abd9da024f245854132f5375a1abb157 +https://conda.anaconda.org/conda-forge/noarch/transformers-4.38.2-pyhd8ed1ab_0.conda#b4845a44a293d3dff16f7db2bc3551bc +https://conda.anaconda.org/conda-forge/noarch/nlpaug-1.1.11-pyhd8ed1ab_1.conda#4e231f0fa7db9388cf4c8539d623ac62 +https://conda.anaconda.org/conda-forge/noarch/nltk-3.9.1-pyhd8ed1ab_0.conda#7e580f0694e487c3890d3ce67d5df98c +https://conda.anaconda.org/conda-forge/noarch/typish-1.9.3-pyhd8ed1ab_0.tar.bz2#81b3f3101aa2af117924d908a1b33c67 +https://conda.anaconda.org/conda-forge/noarch/nptyping-2.4.1-pyhd8ed1ab_0.tar.bz2#7929b4ae7565a66f0fab4b70cfb90594 +https://conda.anaconda.org/conda-forge/noarch/omegaconf-2.3.0-pyhd8ed1ab_0.conda#23cc056834cab53849b91f78d6ee3ea0 +https://conda.anaconda.org/conda-forge/noarch/markdown-3.6-pyhd8ed1ab_0.conda#06e9bebf748a0dea03ecbe1f0e27e909 +https://conda.anaconda.org/conda-forge/noarch/ordered-set-4.1.0-pyhd8ed1ab_0.tar.bz2#9a8714decb3967b290263817e876d8a9 +https://conda.anaconda.org/conda-forge/noarch/model-index-0.1.11-pyhd8ed1ab_0.conda#6aecca21351e44095ffd2901ee46337a +https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda#d44e3b085abcaef02983c6305b84b584 +https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyhd8ed1ab_0.conda#6721aef6bfe5937abe70181545dd2c51 +https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2#4759805cce2d914c38472f70bf4d8bcb +https://conda.anaconda.org/conda-forge/noarch/openmim-0.3.7-pyhd8ed1ab_0.conda#e081b8fa91b884435725f0caa13866ff +https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.2-h59595ed_0.conda#53fb86322bdb89496d7579fe3f02fd61 +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d +https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb +https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_2.conda#cbbe59391138ea5ad3658c76912e147f +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2#fee5683a3f04bd15cbd8318b096a27ab +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda#71004cbf7924e19c02746ccde9fd7123 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda#b462a33c0be1421532f28bfe8f4a7514 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda#93ee23f12bc2e684548181256edd2cf6 +https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a +https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda#bce9f945da8ad2ae9b1d7165a64d0f87 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2#b4a4381d54784606820704f7b5f05a15 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.9-hb711507_1.conda#4a6d410296d7e39f00bacdee7df046e9 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec +https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2#06feff3d2634e3097ce2fe681474b534 +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda#ed67c36f215b310412b2af935bf3e530 +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hebfffa5_3.conda#fceaedf1cdbcb02df9699a0d9b005292 +https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda#da0ec11a6454ae19bff5b02ed881a2b1 +https://conda.anaconda.org/conda-forge/linux-64/nss-3.103-h593d115_0.conda#233bfe41968d6fb04eba9258bb5061ad +https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda#d8d7293c5b37f39b2ac32940621c6592 +https://conda.anaconda.org/conda-forge/linux-64/poppler-24.08.0-hb0d391f_0.conda#cbe41fbbe05b1f78182ced1f0defdf81 +https://conda.anaconda.org/conda-forge/noarch/pdf2image-1.17.0-pyhd8ed1ab_0.conda#7da27a820962d0b077fabdd764ab3f35 +https://conda.anaconda.org/conda-forge/noarch/pytesseract-0.3.10-pyhd8ed1ab_0.tar.bz2#04f4becceb0c032c5dbdae6ad18bd95e +https://conda.anaconda.org/conda-forge/noarch/pytorch-metric-learning-2.3.0-pyhd8ed1ab_0.conda#4cabfd1fea71818c6dfb74bc1cb75ec8 +https://conda.anaconda.org/conda-forge/noarch/imageio-2.35.1-pyh12aca89_0.conda#b03ff3631329c8ef17bae35d2bb216f7 +https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda#4809b9f4c6ce106d443c3f90b8e10db2 +https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda#ec6f70b8a5242936567d4f886726a372 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.7.0-py311h07ce7c0_0.conda#73a9996e4b765455696b53bf74865b09 +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-hef167b5_0.conda#54fe76ab3d0189acaef95156874db7f9 +https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2#c1ac6229d0bfd14f8354ff9ad2a26cad +https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.2.1-he02047a_0.conda#8fd1654184917db2cb74fc84cb4fff79 +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.15.1-hc57e6cf_0.conda#5f84961d86d0ef78851cb34f9d5e31fe +https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda#4336bd67920dd504cd8c6761d6a99645 +https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda#3bf7b9fd5a7136126e0234db4b87c8b6 +https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda#5aeabe88534ea4169d4c49998f293d6c +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda#5e97e271911b8b2001a8b71860c32faa +https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda#418c6ca5929a611cbd69204907a83995 +https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.6.6-he8a937b_2.conda#77d9955b4abddb811cb8ab1aa7d743e4 +https://conda.anaconda.org/conda-forge/linux-64/svt-av1-2.1.2-hac33072_0.conda#06c5dec4ebb47213b648a6c4dc8400d6 +https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.1.1-h9b56c87_0.conda#cb7355212240e92dcf9c73cb1f10e4a9 +https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.1.0-h00ab1b0_0.conda#88928158ccfe797eac29ef5e03f7d23d +https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.10.3-h66b40c8_0.conda#a394f85083195ab8aa33911f40d76870 +https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2#c66fe2d123249af7651ebde8984c51c2 +https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-hac33072_1.conda#df96b7266e49529d82de467b23977452 +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2024.6.1-py311h732c098_3.conda#34ee94453a09c0abc94b194207917b50 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.8.10-pyhd8ed1ab_0.conda#4299bb3917015d44536cd73001256b19 +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.20.0-py311h2872171_1.conda#24fca64735554fdf2794c69f5b3d9a06 +https://conda.anaconda.org/conda-forge/noarch/seqeval-1.2.2-pyhd3deb0d_0.tar.bz2#d4436c8a8b9fb6d60fe4e7b9f097f9bb +https://conda.anaconda.org/conda-forge/linux-64/tensorboard-data-server-0.7.0-py311h63ff55d_1.conda#6d6c84b8814b270aea7115c08d2343a0 +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.3-pyhd8ed1ab_0.conda#2e60f5f388845027ee87fca6bee4ac23 +https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.17.1-pyhd8ed1ab_0.conda#1a6c7a02498c952ba92e08b0abe0c48c +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.18.1-cuda120py311ha267787_1.conda#ba9402a5b9d6774c59179a2a446138bd +https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 +https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-1.1.1-pyha770c72_1.conda#7972e15c0f60fe5e85e29162503a7d35 +https://conda.anaconda.org/conda-forge/noarch/plotly-5.23.0-pyhd8ed1ab_0.conda#41e535b9e479c72a6bffc69a4c85837c +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.12-hb9ae30d_0.conda#201db6c2d9a3c5e46573ac4cb2e92f4f +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda#f87c7b7c2cb45f323ffbce941c78ab7c +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda#76b32dcf243444aea9c6b804bcfa40b8 +https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 +https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h4c5309f_1.conda#7df02e445367703cd87a574046e3a6f0 +https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h6470451_5.conda#1483ba046164be27df7f6eddbcec3a12 +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hd3e95f3_10.conda#30ee3a29c84cf7b842a8c5828c4b7c13 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.3-h9564881_0.conda#a7045ed6fb8b68ef7be002ce615e3bf6 +https://conda.anaconda.org/conda-forge/linux-64/graphviz-12.0.0-hba01fac_0.conda#953e31ea00d46beb7e64a79fc291ec44 +https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.3-pyh717bed2_0.conda#031c005eb6d4513013d99ed163dd5f59 +https://conda.anaconda.org/conda-forge/linux-64/catboost-1.2.5-py311h38be061_0.conda#ecf3df8651e7da0ecc4eac9ed053f869 +https://conda.anaconda.org/conda-forge/noarch/fastcore-1.5.55-pyhd8ed1ab_0.conda#fbe9848aaaa6c34d7dcf748b884b2597 +https://conda.anaconda.org/conda-forge/noarch/fastprogress-1.0.3-pyhd8ed1ab_0.tar.bz2#1690639d3647fde6edf4f00c8f87c263 +https://conda.anaconda.org/conda-forge/noarch/fastdownload-0.0.7-pyhd8ed1ab_0.conda#29c29999a420c2d28c3a46b3eadb9373 +https://conda.anaconda.org/conda-forge/linux-64/catalogue-2.0.10-py311h38be061_0.conda#c758c1494b5d8b72e0010a6fd4dcfc7d +https://conda.anaconda.org/conda-forge/linux-64/cymem-2.0.8-py311hb755f60_1.conda#11c2737f2daa69bd2bb736cf6746b88d +https://conda.anaconda.org/conda-forge/linux-64/marisa-trie-1.1.0-py311hb755f60_1.conda#ed6e68b598bf259438e971eaedf99cf3 +https://conda.anaconda.org/conda-forge/noarch/language-data-1.2.0-pyhd8ed1ab_0.conda#327e4493631a600458cddf405cf08e85 +https://conda.anaconda.org/conda-forge/noarch/langcodes-3.4.0-pyhd8ed1ab_0.conda#9e7ff0b98c28359ea1f3ae7cebda7e5f +https://conda.anaconda.org/conda-forge/linux-64/murmurhash-1.0.10-py311hb755f60_1.conda#dfd99e186a8743e33704ded8f20ece56 +https://conda.anaconda.org/conda-forge/linux-64/preshed-3.0.9-py311hb755f60_1.conda#247abb13d6323d78b0764025d350f7d7 +https://conda.anaconda.org/conda-forge/noarch/spacy-legacy-3.0.12-pyhd8ed1ab_0.conda#bbe68ced56ea855f0223c329f1fd2fc0 +https://conda.anaconda.org/conda-forge/noarch/spacy-loggers-1.0.5-pyhd8ed1ab_0.conda#017fa97ac8c29416983dc9e67b27f6c8 +https://conda.anaconda.org/conda-forge/linux-64/srsly-2.4.8-py311hb755f60_1.conda#02a6177d2f3aff10074a806c2588c032 +https://conda.anaconda.org/conda-forge/linux-64/confection-0.1.4-py311h781c19f_0.conda#604215291567b4159f9e41e4602b742f +https://conda.anaconda.org/conda-forge/linux-64/cython-blis-0.7.10-py311h1f0f07a_2.conda#d9d8266fe78cf281d90857871164b86e +https://conda.anaconda.org/conda-forge/linux-64/wasabi-1.1.2-py311h38be061_1.conda#eaf8917c44ec3f19f9a94d395fcbc520 +https://conda.anaconda.org/conda-forge/linux-64/thinc-8.2.5-py311hfa30c88_0.conda#9eb418727266be4bfad948fcce7f0125 +https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda#d08db09a552699ee9e7eec56b4eb3899 +https://conda.anaconda.org/conda-forge/noarch/typer-0.9.4-pyhd8ed1ab_0.conda#01a14596daee2aff9cdc1167786231ea +https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.18.1-pyhd8ed1ab_0.conda#d6b3ce6270608b5b4df8d4a8ebb0085a +https://conda.anaconda.org/conda-forge/noarch/smart-open-7.0.4-hd8ed1ab_0.conda#8a8d365f12f22e986fc87e3f884eb12b +https://conda.anaconda.org/conda-forge/noarch/weasel-0.4.1-pyhd8ed1ab_1.conda#0487b5ffdbbee3fbcf3c0df1eb684928 +https://conda.anaconda.org/conda-forge/linux-64/spacy-3.7.5-py311hfa30c88_1.conda#9377c31ea56d7ba522d114eec41c9c21 +https://conda.anaconda.org/conda-forge/noarch/fastai-2.7.16-pyhd8ed1ab_0.conda#3a9c98ccde324b9d72594583448f20f2 +https://conda.anaconda.org/conda-forge/linux-64/lightgbm-4.3.0-py311hb755f60_0.conda#c4662ca83fd4e3bfd675ac78f8e1a2eb +https://conda.anaconda.org/conda-forge/linux-64/libxgboost-2.0.3-cuda120_h9dfd3e9_4.conda#0beec815375f6072edf210cb8187cac4 +https://conda.anaconda.org/conda-forge/noarch/py-xgboost-2.0.3-cuda120_pyh3ef1b53_4.conda#101b6519015db5451632163bc6fed36a +https://conda.anaconda.org/conda-forge/noarch/xgboost-2.0.3-cuda120_pyh68bd8d9_4.conda#aaaadc3a408067943ebc10299393a7c3 +https://conda.anaconda.org/conda-forge/noarch/autogluon.tabular-1.1.1-pyha770c72_1.conda#331058b08a7fbf116c1fc31adce8eb5b +https://conda.anaconda.org/conda-forge/noarch/gluonts-0.14.3-pyhd8ed1ab_0.conda#d0e04431d67a813a0f0eb5c5f61bc3dc +https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda#73301c133ded2bf71906aa2104edae8b +https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.43.0-py311hbde99c3_0.conda#4c60dfcba06b363be954401addee8800 +https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py311h4bc866e_0.conda#e32a210e9caf97383c35685fd2343512 +https://conda.anaconda.org/conda-forge/noarch/utilsforecast-0.0.10-pyhd8ed1ab_0.conda#d76268ae8c692159c771e26e4f6ff9fd +https://conda.anaconda.org/conda-forge/noarch/window-ops-0.0.15-pyhd8ed1ab_0.conda#b5ffd7d8295d4eda512216e23cf75a0f +https://conda.anaconda.org/conda-forge/noarch/mlforecast-0.10.0-pyhd8ed1ab_0.conda#b711b148f3c7219719f29a14a5da6e32 +https://conda.anaconda.org/conda-forge/noarch/patsy-0.5.6-pyhd8ed1ab_0.conda#a5b55d1cb110cdcedc748b5c3e16e687 +https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.2-py311h18e1886_0.conda#82c29bf38b3fb66da09736106609b5fe +https://conda.anaconda.org/conda-forge/noarch/statsforecast-1.4.0-pyhd8ed1ab_0.conda#aa803f915587fe4306dfe0234215caa9 +https://conda.anaconda.org/conda-forge/linux-64/ujson-5.10.0-py311h4332511_0.conda#442a260df22ffad7f666c7e3f119b5ab +https://conda.anaconda.org/conda-forge/noarch/autogluon.timeseries-1.1.1-pyhd8ed1ab_3.conda#e1dc1f5078d28a112ade43cb87a03513 +https://conda.anaconda.org/conda-forge/noarch/autogluon-1.1.1-pyhd8ed1ab_0.conda#768c470fc6719f42c9aceadd82404eb1 +https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.11.1-pyhd8ed1ab_0.conda#29ff12b36df16bb66fdccd4206aaebfb +https://conda.anaconda.org/conda-forge/noarch/autopep8-2.0.4-pyhd8ed1ab_0.conda#1053857605b5139c8f9818a029a71913 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.11-pyhd8ed1ab_0.conda#fc0cb2abcfcec65ecbdcde4289b62fea +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.11-pyhd8ed1ab_0.conda#95ba42a349c9d8eac28e30d0b637401f +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.3-pyhd8ed1ab_0.conda#a1323654e9d87b16642ef02a03b98b32 +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.47-hd8ed1ab_0.conda#3e0c82ddcfe27eb4ae77f887cfd9f45b +https://conda.anaconda.org/conda-forge/noarch/jupyter_console-6.6.3-pyhd8ed1ab_0.conda#7cf6f52a66f8e3cd9d8b6c231262dcab +https://conda.anaconda.org/conda-forge/noarch/notebook-7.1.3-pyhd8ed1ab_0.conda#a4b1e12d54210fa80f3eb3fc270f2480 +https://conda.anaconda.org/conda-forge/noarch/qtpy-2.4.1-pyhd8ed1ab_0.conda#7f391bd70d2abfb70f304ba5aa4e1261 +https://conda.anaconda.org/conda-forge/noarch/qtconsole-base-5.5.2-pyha770c72_0.conda#0f63ec743defb9de6728a98150a80839 +https://conda.anaconda.org/conda-forge/noarch/jupyter-1.0.0-pyhd8ed1ab_10.conda#056b8cc3d9b03f54fc49e6d70d7dc359 +https://conda.anaconda.org/conda-forge/noarch/mock-5.1.0-pyhd8ed1ab_0.conda#926c67c0310094cf421ad13f7d3f38e5 +https://conda.anaconda.org/conda-forge/noarch/nose-1.3.7-py_1006.tar.bz2#382019d5f8e9362ef6f60a8d4e7bce8f +https://conda.anaconda.org/conda-forge/noarch/hdijupyterutils-0.21.0-pyh1a96a4e_0.conda#4db6232a9b934edc1c1e2f7b7d5a5d40 +https://conda.anaconda.org/conda-forge/noarch/autovizwidget-0.21.0-pyh1a96a4e_0.conda#7db56991c3c823ddb394ed85df9b54f5 +https://conda.anaconda.org/conda-forge/noarch/aws-glue-sessions-1.0.6-pyhd8ed1ab_0.conda#3bb5f802626c75b95a42d3a61258b87b +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.2.0-py311hb3a8bbb_0.conda#0b19fb4accdc6064185d9b96b456ac10 +https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-h4a8ded7_16.conda#ff7f38675b226cfb855aebfc32a13e31 +https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_16.conda#223fe8a3ff6d5e78484a9d58eb34d055 +https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.40-ha1999f0_7.conda#3f840c7ed70a96b5ebde8044b2f36f32 +https://conda.anaconda.org/conda-forge/linux-64/binutils-2.40-h4852527_7.conda#df53aa8418f8c289ae9b9665986034f8 +https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.40-hb3c18ed_0.conda#f152f00b4c709e88cd88af1fb50a70b4 +https://conda.anaconda.org/conda-forge/noarch/blinker-1.8.2-pyhd8ed1ab_0.conda#cf85c002319c15e9721934104aaa1137 +https://conda.anaconda.org/conda-forge/noarch/boltons-24.0.0-pyhd8ed1ab_0.conda#61de176bd62041f9cd5bd4fcd09eb0ff +https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-12.4.0-ha4f9413_100.conda#cc5767cb4e052330106536a9fb34f077 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_0.conda#ae061a5ed5f05818acdf9adab72c146d +https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-12.4.0-h46f95d5_0.conda#23f5c8ad2a46976a9eee4d21392fa421 +https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-12.4.0-hb2e57f8_0.conda#61f3e74c92b7c44191143a661f821bab +https://conda.anaconda.org/conda-forge/linux-64/gcc-12.4.0-h236703b_0.conda#9485dc28dccde81b12e17f9bdda18f14 +https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-12.4.0-h6b7512a_0.conda#fec7117a58f5becf76b43dec55064ff9 +https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.7.0-hd590300_1.conda#e9dffe1056994133616378309f932d77 +https://conda.anaconda.org/conda-forge/linux-64/cccl-2.4.0-h7ab4013_0.conda#d974280864e984929ea44bd982498da6 +https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda#35ef8bc24bd34074ebae3c943d551728 +https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.30-h3509ff9_0.conda#02539b77d25aa4f65b20246549e256c3 +https://conda.anaconda.org/conda-forge/linux-64/reproc-14.2.4.post0-hd590300_1.conda#82ca53502dfd5a64a80dee76dae14685 +https://conda.anaconda.org/conda-forge/linux-64/reproc-cpp-14.2.4.post0-h59595ed_1.conda#715e1d720ec1a03715bebd237972fca5 +https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h59595ed_0.conda#965eaacd7c18eb8361fd12bb9e7a57d7 +https://conda.anaconda.org/conda-forge/linux-64/libmamba-1.5.8-had39da4_0.conda#def669885dc103d8acb7ac2ac35e0b2f +https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-4-hd8ed1ab_3.tar.bz2#878f923dd6acc8aeb47a75da6c4098be +https://conda.anaconda.org/conda-forge/linux-64/libmambapy-1.5.8-py311hf2555c7_0.conda#6ee8eb6fcdebba74be7663c654c161ca +https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.7.0-pyhd8ed1ab_0.conda#857c9e25f0a77c0bd7eb622d46d9418f +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py311h5cd10c7_0.conda#8efe4fe2396281627b3450af8357b190 +https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.10.0-pyhd8ed1ab_0.conda#3480386e00995f7a1dfb3b9aa2fe70fd +https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.3.0-pyh7900ff3_0.conda#0a7dce281ae2be81acab0aa963e6bb99 +https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda#bbdb409974cd6cb30071b1d978302726 +https://conda.anaconda.org/conda-forge/linux-64/frozendict-2.4.4-py311h331c9d8_0.conda#2b9d917cb8b98e813459fffbb3844929 +https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.1.2-py311h38be061_0.conda#8056bb9339279f0eae65c44d58fd4f3c +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda#d3483c8fc2dc2cc3f5cf43e26d60cabf +https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py311h459d7ec_0.conda#9a5b1fabf02c6c91da7203d7d5d53ffd +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py311h459d7ec_0.conda#7865c897d89a39abc0056d89e37bd9e9 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py311h459d7ec_0.conda#4dccc0bc3bb4d6e5c30bccbd053c4f90 +https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda#08316d001eca8854392cf2837828ea11 +https://conda.anaconda.org/conda-forge/linux-64/conda-24.7.1-py311h38be061_0.conda#63a6341170bb4762fbf5557d8a6ba48f +https://conda.anaconda.org/conda-forge/noarch/contextlib2-21.6.0-pyhd8ed1ab_0.tar.bz2#5b26a831440be04c39531a8ce20f5d71 +https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.5.39-ha770c72_0.conda#1196ad96550a485d6c988d84839e93db +https://conda.anaconda.org/conda-forge/linux-64/cuda-cccl-12.5.39-ha770c72_0.conda#b3c9ebdf02fb0ce96437c9908672a656 +https://conda.anaconda.org/conda-forge/linux-64/cuda-cupti-12.5.82-he02047a_0.conda#c77c37a0a22ee393a60f109d2a75e5bf +https://conda.anaconda.org/conda-forge/linux-64/cuda-cupti-dev-12.5.82-he02047a_0.conda#d529517f5d77f71515f26687f6d6e448 +https://conda.anaconda.org/conda-forge/linux-64/cuda-gdb-12.5.82-hda18ab6_0.conda#4e0ce86268e831cab8034d138606c584 +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvdisasm-12.5.39-he02047a_0.conda#cfa3b86bfc6800c13d5cf5426f5b7297 +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvprof-12.5.82-he02047a_0.conda#ddd9148fed770d33963ba86d64e95a15 +https://conda.anaconda.org/conda-forge/linux-64/cuda-sanitizer-api-12.5.81-he02047a_1.conda#8c9945792db340dc4043b1a06085a863 +https://conda.anaconda.org/conda-forge/linux-64/cuda-command-line-tools-12.5.1-ha770c72_0.conda#b4c0e7fdbc344f402214849897bf7744 +https://conda.anaconda.org/conda-forge/linux-64/cuda-cuobjdump-12.5.39-he02047a_0.conda#a25550961e7449840c40800279cc6bc6 +https://conda.anaconda.org/conda-forge/linux-64/cuda-cuxxfilt-12.5.82-he02047a_0.conda#d07c6971ea832279b89ca54a74b6a2f4 +https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.5.82-h85509e4_0.conda#ac0f41064a0def0ffd55820f898b47ba +https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.5.82-h85509e4_0.conda#c91109ad0d545f112a053512cc26eb88 +https://conda.anaconda.org/conda-forge/noarch/cuda-driver-dev_linux-64-12.5.82-h85509e4_0.conda#36582ad02f86902a9cdf3a6db68f6fae +https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.5.82-ha770c72_0.conda#696ce9d8cc071c933095743d80ca19d0 +https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.5.82-ha770c72_0.conda#19f9b652207eb48e1f0abc7bb0cd9a3f +https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.5.82-ha770c72_0.conda#87e0a432ec74328c3e71b2561ea6aeea +https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-12.5.82-he02047a_0.conda#62b351f759bc75571b74abaf2f5bfb4f +https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-12.5.82-he02047a_0.conda#10cbdf53f95b861db161f0786eca65fb +https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-12.5.82-ha770c72_0.conda#d471285e091d73eb19834e45b55161b0 +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.5.82-h59595ed_0.conda#01426c9bd7fb7a33e0d62b85eb574a6c +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.5.82-hd3aeb46_0.conda#dc2f894a175a012c6475f18b86515cef +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.5.82-h59595ed_0.conda#0bb25267ccb64505ce5403ead452343b +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-12.5.82-hd3aeb46_0.conda#c1e300f3bd7a3f8176d5fd547bffa56d +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.5.82-h8a487aa_0.conda#549920791e3e43674977b3bf1d6e0f6d +https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-12.4.0-ha4f9413_100.conda#0351f91f429a046542bba7255438fa04 +https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-12.4.0-h613a52c_0.conda#0740149e4653caebd1d2f6bbf84a1720 +https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-12.4.0-h8489865_0.conda#5cf73d936678e6805da39b8ba6be263c +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-12.5.82-hcdd1206_0.conda#d16e5377b2ca47a3967350262a6fd395 +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvprune-12.5.82-he02047a_0.conda#833f3cce509236e57532bebc578dafc3 +https://conda.anaconda.org/conda-forge/linux-64/gxx-12.4.0-h236703b_0.conda#56cefffbce52071b597fd3eb9208adc9 +https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.7.0-h00ab1b0_1.conda#28de2e073db9ca9b72858bee9fb6f571 +https://conda.anaconda.org/conda-forge/noarch/cuda-compiler-12.5.1-hbad6d8a_0.conda#09ad31fa60cf2e07cfc5f81ad648ebdd +https://conda.anaconda.org/conda-forge/linux-64/cuda-driver-dev-12.5.82-he02047a_0.conda#a3444694b37fd3ef7c437a11cf70204e +https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.2-hd590300_1.conda#c66f837ac65e4d1cdeb80e2a1d5fcc3d +https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-12.5.39-he02047a_1.conda#9601ffc0dc5be480b0bf0db1c5c8f6d4 +https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.10.1.7-he02047a_0.conda#2e68ad67fce5223e17722149094dafcf +https://conda.anaconda.org/conda-forge/linux-64/libnpp-12.3.0.159-he02047a_0.conda#e41f67d7c89019904daed95aeed1311f +https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-12.5.82-he02047a_0.conda#2cf4281d62f02ee11c26029a6b68e300 +https://conda.anaconda.org/conda-forge/linux-64/libnvjpeg-12.3.2.81-he02047a_0.conda#91d1b39af9202b46cadf31c89d521bef +https://conda.anaconda.org/conda-forge/linux-64/cuda-libraries-12.5.1-ha770c72_0.conda#458d75a3e0e4d872897119dafae62777 +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-dev-12.5.82-he02047a_0.conda#d55021c320393d9686e521dd1de70a04 +https://conda.anaconda.org/conda-forge/linux-64/cuda-opencl-dev-12.5.39-he02047a_1.conda#dd60dc3a21a98fa62f98e324c4ae31bd +https://conda.anaconda.org/conda-forge/linux-64/cuda-profiler-api-12.5.39-ha770c72_0.conda#bd53edd147e9d663d189c10628ca2709 +https://conda.anaconda.org/conda-forge/linux-64/libcublas-dev-12.5.3.2-he02047a_0.conda#f59f34aa2068c1cf2307e0c8309a63e3 +https://conda.anaconda.org/conda-forge/linux-64/libcufft-dev-11.2.3.61-he02047a_0.conda#591254d342058b68078c104eee6a4e1e +https://conda.anaconda.org/conda-forge/linux-64/libcufile-dev-1.10.1.7-he02047a_0.conda#fe4cd204981cdc1b7c5467248e2afb5a +https://conda.anaconda.org/conda-forge/linux-64/libcurand-dev-10.3.6.82-he02047a_0.conda#cfc1bf658e7cd830a784cb0b798a4071 +https://conda.anaconda.org/conda-forge/linux-64/libcusolver-dev-11.6.3.83-he02047a_0.conda#5b57530c4b29443792f8288f8d68c39e +https://conda.anaconda.org/conda-forge/linux-64/libcusparse-dev-12.5.1.3-he02047a_0.conda#927c7ba9aeaf2ff46dac087c7e9a4b3a +https://conda.anaconda.org/conda-forge/linux-64/libnpp-dev-12.3.0.159-he02047a_0.conda#20b6a97acf3286fd6fb979e919938f2a +https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-dev-12.5.82-he02047a_0.conda#dbe4c03d6ce20280b0b266e5004efa47 +https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-dev-12.5.82-he02047a_0.conda#e14f1a78ecd13e2504b0a0e60fad072e +https://conda.anaconda.org/conda-forge/linux-64/libnvjpeg-dev-12.3.2.81-ha770c72_0.conda#8c19a53db5344e45aa4596099b3dbeeb +https://conda.anaconda.org/conda-forge/linux-64/cuda-libraries-dev-12.5.1-ha770c72_0.conda#e4841c44e88caff5a7f4c8f81f9bda4f +https://conda.anaconda.org/conda-forge/linux-64/cuda-nvml-dev-12.5.39-he02047a_0.conda#48c1d4d336135c67a0caad74f74ecb05 +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.2.0-pyhd8ed1ab_0.conda#ff7ca04134ee8dde1d7cf491a78ef7c7 +https://conda.anaconda.org/conda-forge/noarch/flask-3.0.3-pyhd8ed1ab_0.conda#dcdb937144fa20d7757bf512db1ea769 +https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-pyhd8ed1ab_3.conda#1f7482562f2082f1b2abf8a3e2a41b63 +https://conda.anaconda.org/conda-forge/noarch/dash-2.17.1-pyhd8ed1ab_0.conda#5c0e028a64a3d5c16e22baef58c89c0e +https://conda.anaconda.org/conda-forge/noarch/databricks-sdk-0.30.0-pyhd8ed1ab_0.conda#0448ac4975b4383a8463f3df35cad59a +https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.14-pyh1a96a4e_0.conda#4e4c4236e1ca9bcd8816b921a4805882 +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py311h459d7ec_3.conda#41431936fe7624294df31197ae699c44 +https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.1-pyhd8ed1ab_0.conda#08a8552f094f8b77536d3fa88422bba4 +https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2#2807a0becd1d986fe1ef9b7f8135f215 +https://conda.anaconda.org/conda-forge/noarch/docker-py-7.1.0-pyhd8ed1ab_0.conda#3e547e36de765ca8f28a7623fb3f255a +https://conda.anaconda.org/conda-forge/noarch/docstring-to-markdown-0.15-pyhd8ed1ab_0.conda#a3a1e6af2926a3affcd6f2072871f551 +https://conda.anaconda.org/conda-forge/noarch/starlette-0.37.2-pyhd8ed1ab_0.conda#7e5550dfa3ed2c2019988cbb9f8302ea +https://conda.anaconda.org/conda-forge/noarch/fastapi-0.110.3-pyhd8ed1ab_0.conda#cb96bd86d974f1603c42a3a5b87167bf +https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2#34fc335fc50eef0b5ea708f2b5f54e0c +https://conda.anaconda.org/conda-forge/noarch/pyflakes-3.2.0-pyhd8ed1ab_0.conda#0cf7fef6aa123df28adb21a590065e3d +https://conda.anaconda.org/conda-forge/noarch/flake8-7.0.0-pyhd8ed1ab_0.conda#15bc58c860fc0a9abc26ec902df35252 +https://conda.anaconda.org/conda-forge/linux-64/flatbuffers-24.3.25-h59595ed_0.conda#2941a8c4e4871cdfa738c8c1a7611533 +https://conda.anaconda.org/conda-forge/noarch/gast-0.5.5-pyhd8ed1ab_0.conda#ebc1dc871c48673a0a922023a2e1eee2 +https://conda.anaconda.org/conda-forge/linux-64/gds-tools-1.10.0.4-he02047a_0.conda#73126c1d80e5521f91d12ac1b960aa80 +https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2#62f26a3d1387acee31322208f0cfa3e0 +https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda#623b19f616f2ca0c261441067e18ae40 +https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.43-pyhd8ed1ab_0.conda#0b2154c1818111e17381b1df5b4b0176 +https://conda.anaconda.org/conda-forge/noarch/google-pasta-0.2.0-pyhd8ed1ab_1.conda#5257b8fdee0c88e6bd3a10d38bc3892a +https://conda.anaconda.org/conda-forge/noarch/graphql-core-3.2.3-pyhd8ed1ab_0.tar.bz2#87cafe8c7638a5ac6fd8ec8fb01f1508 +https://conda.anaconda.org/conda-forge/noarch/graphql-relay-3.2.0-pyhd8ed1ab_0.tar.bz2#1b2b83e3528f8fb83007161eff51073d +https://conda.anaconda.org/conda-forge/noarch/graphene-3.3-pyhd8ed1ab_0.conda#ed2ae94977dfd96566e6eaf373216728 +https://conda.anaconda.org/conda-forge/linux-64/gunicorn-22.0.0-py311h38be061_0.conda#25bf018a4d5974a5729a07c6132dcba5 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_hdf9ad27_105.conda#7e1729554e209627636a0f6fabcdd115 +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.11.0-nompi_py311h439e445_102.conda#854d8ab88db383ab8b5fb3e449980c53 +https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 +https://conda.anaconda.org/conda-forge/noarch/jupyter-activity-monitor-extension-0.3.1-pyhd8ed1ab_0.conda#f3548fc6b23bad6f0bc89b838095ff2d +https://conda.anaconda.org/conda-forge/noarch/jupyter_server_fileid-0.9.2-pyhd8ed1ab_0.conda#b3001efcd21df5156985c1f027d8d331 +https://conda.anaconda.org/conda-forge/linux-64/pycrdt-0.9.8-py311hb3a8bbb_0.conda#2af7ea6cbb47cb5edb4215693f3f0b2a +https://conda.anaconda.org/conda-forge/noarch/jupyter_ydoc-2.1.1-pyhd8ed1ab_0.conda#4bf3cc3f29ca3ad96897de4fb62407a4 +https://conda.anaconda.org/conda-forge/noarch/sqlite-anyio-0.2.3-pyhd8ed1ab_0.conda#7020770f72be0328354c85c24ae4338f +https://conda.anaconda.org/conda-forge/noarch/pycrdt-websocket-0.14.1-pyhd8ed1ab_0.conda#1a2d515dd5a059b95e67633209b068ec +https://conda.anaconda.org/conda-forge/noarch/jupyter-collaboration-2.1.2-pyhd8ed1ab_0.conda#519ec29761b89614fe917b79b268f4d1 +https://conda.anaconda.org/conda-forge/noarch/jupyter-dash-0.4.2-pyhd8ed1ab_1.tar.bz2#9c77330b235666f244a7b8dcc7c0955a +https://conda.anaconda.org/conda-forge/noarch/jupyter-server-mathjax-0.2.6-pyh5bfe37b_1.conda#11ca195fc8a16770661a387bcce27c36 +https://conda.anaconda.org/conda-forge/noarch/simpervisor-1.0.0-pyhd8ed1ab_0.conda#1f6df17b16d6295a484d59e844fef6ee +https://conda.anaconda.org/conda-forge/noarch/jupyter-server-proxy-4.3.0-pyhd8ed1ab_0.conda#0324b3f9baed1cdb946cd484420acc77 +https://conda.anaconda.org/conda-forge/noarch/nbdime-4.0.1-pyhd8ed1ab_0.conda#dd76d44a144499f8ff3254fd20cdb7a2 +https://conda.anaconda.org/conda-forge/noarch/jupyterlab-git-0.50.1-pyhd8ed1ab_1.conda#2b60b39e08ca93efbb55bcbdf4e6a950 +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.4.0-py311h14de704_1.conda#1d5a4ca6317f1a6c877286d96f5e874f +https://conda.anaconda.org/conda-forge/noarch/namex-0.0.8-pyhd8ed1ab_0.conda#b96883bd4ee5a6aef4636674783a6d57 +https://conda.anaconda.org/conda-forge/linux-64/optree-0.12.1-py311hcddfd71_0.conda#e78f1029c9236772560a05cc59802a9d +https://conda.anaconda.org/conda-forge/noarch/keras-3.5.0-pyhd8ed1ab_1.conda#4c27053152424889605cd97865959493 +https://conda.anaconda.org/conda-forge/noarch/langchain-aws-0.1.16-pyhd8ed1ab_0.conda#790ff274a96ffc959cd4a68b9e60a285 +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.50-h4f305b6_0.conda#0d7ff1a8e69565ca3add6925e18e708f +https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.11.0-h4ab18f5_1.conda#14858a47d4cc995892e79f2b340682d7 +https://conda.anaconda.org/conda-forge/linux-64/libsecret-0.18.8-h329b89f_2.tar.bz2#9d6698e3c9585a75156d86f7ef229093 +https://conda.anaconda.org/conda-forge/noarch/opentelemetry-api-1.26.0-pyhd8ed1ab_0.conda#5f6c7912206a0d7dbc63cdbaa51bdd06 +https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.47b0-pyhd8ed1ab_0.conda#77ee89a21afec45a213869b27ce5a37b +https://conda.anaconda.org/conda-forge/noarch/opentelemetry-sdk-1.26.0-pyhd8ed1ab_0.conda#5d9c1e27c7c2edb53225b2099f4dcf34 +https://conda.anaconda.org/conda-forge/linux-64/mlflow-skinny-2.15.1-py311h38be061_0.conda#605a1587f814255eb608006e97afa50f +https://conda.anaconda.org/conda-forge/noarch/querystring_parser-1.2.4-pyhd8ed1ab_1.conda#124ce2752ddf974efebd074b53675b83 +https://conda.anaconda.org/conda-forge/linux-64/mlflow-ui-2.15.1-py311h38be061_0.conda#a8a0ebc8ec038c9edc3683533daacfec +https://conda.anaconda.org/conda-forge/noarch/prometheus_flask_exporter-0.23.1-pyhd8ed1ab_0.conda#dfd56de42e5f27683b7f769c6340cf00 +https://conda.anaconda.org/conda-forge/linux-64/mlflow-2.15.1-h38be061_0.conda#e8d92302246fa3d5729f5dd7b1b32a9e +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.3.0-pyhc1e730c_2.conda#7a94ac68b892daa9f17ae8a52b31ed81 +https://conda.anaconda.org/conda-forge/noarch/papermill-2.6.0-pyhd8ed1ab_0.conda#7e2150bca46f713bb6e290ac1b26ed1d +https://conda.anaconda.org/conda-forge/noarch/pox-0.3.4-pyhd8ed1ab_0.conda#d5502ff0ec33b87f7ab7bc373d0e42ff +https://conda.anaconda.org/conda-forge/noarch/ppft-1.7.6.8-pyhd8ed1ab_0.conda#a104e8b98901dc1bc0b916f7e18b5e39 +https://conda.anaconda.org/conda-forge/noarch/pathos-0.3.2-pyhd8ed1ab_1.conda#22ed208c1b54e7c2ec6616665fba6b0f +https://conda.anaconda.org/conda-forge/noarch/pure-sasl-0.6.2-pyhd8ed1ab_0.tar.bz2#ac695eecf21ab48093bc33fd60b4102d +https://conda.anaconda.org/conda-forge/noarch/py-xgboost-gpu-2.0.3-pyh68bd8d9_4.conda#b418f28de5ae6d948449757f2cedd23b +https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e +https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_0.conda#7e23a61a7fbaedfef6eb0e1ac775c8e5 +https://conda.anaconda.org/conda-forge/linux-64/thrift-0.20.0-py311hb755f60_0.conda#7fe1fb8c6d03772fe227e5c7fd74643c +https://conda.anaconda.org/conda-forge/noarch/thrift_sasl-0.4.3-pyhd8ed1ab_2.tar.bz2#0340a97c4990a5bb5ecf1a27fef9f9c3 +https://conda.anaconda.org/conda-forge/noarch/pyhive-0.7.0-pyhd8ed1ab_0.conda#a39884e69ebf0c6454a1f8bac6f8361b +https://conda.anaconda.org/conda-forge/linux-64/pykrb5-0.5.1-py311h0820609_1.conda#26ee2e5df547f4545c0e3a9ef98fdcb7 +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda#0062a5f3347733f67b0f33ca48cc21dd +https://conda.anaconda.org/conda-forge/noarch/pylint-3.2.6-pyhd8ed1ab_0.conda#3bd59de4ef6ca2d96cfd5b36b33f9de9 +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.11.1-py311h38be061_0.conda#907b17dbe4dd97a0029ba6a9b7cbab3e +https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.25-pyh59ac667_0.conda#dfc884dcd61ff6543fde37a41b7d7f31 +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py311h0820609_0.conda#84fe6d156520937fd9fc634a88e36a52 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-jsonrpc-1.1.2-pyhd8ed1ab_0.conda#ff30dbdb341a54947c4fa183900380b7 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-server-base-1.11.0-pyhd8ed1ab_0.conda#6ae8c26c3ebf7d148d7000f7fbad9512 +https://conda.anaconda.org/conda-forge/noarch/pytoolconfig-1.2.5-pyhd8ed1ab_0.conda#2d6bdf5a69cfcd1fcc7f2b900cb4082f +https://conda.anaconda.org/conda-forge/noarch/rope-1.13.0-pyhd8ed1ab_0.conda#dffa002fbd3d86924b7992c718efa7bc +https://conda.anaconda.org/conda-forge/noarch/whatthepatch-1.0.6-pyhd8ed1ab_0.conda#2b54ace307e5648efb07c3f220ae0dd6 +https://conda.anaconda.org/conda-forge/noarch/yapf-0.40.1-pyhd8ed1ab_0.conda#f269942e802d5e148632143d4c37acc9 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-server-1.11.0-pyhd8ed1ab_0.conda#c1db1a6057f7f2d7299ed2b59c51bd34 +https://conda.anaconda.org/conda-forge/noarch/requests-kerberos-0.14.0-pyh707e725_1.conda#411293bff0dc86f9f9bc0c0e1f227623 +https://conda.anaconda.org/conda-forge/linux-64/ripgrep-14.1.0-he8a937b_0.conda#5a476f7033a8a1b9175626b5ebf86d1d +https://conda.anaconda.org/conda-forge/linux-64/sagemaker-code-editor-1.3.1-h3e77e23_0.conda#7b1edaf15e41aa12fad645a55b4b3515 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.13-pyhd8ed1ab_0.conda#feaec93c21652caac71ed7ecf450cb17 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-emr-extension-0.3.2-pyhd8ed1ab_0.conda#3f3afe1b768a50217b065481450328b7 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-0.3.2-pyhd8ed1ab_0.conda#7ec225c27d235395af79135f32ce3cc1 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-kernel-wrapper-0.0.2-pyhd8ed1ab_0.conda#99480997ca2429b75169c896cc988cdb +https://conda.anaconda.org/conda-forge/noarch/sagemaker-mlflow-0.1.0-pyhd8ed1ab_0.conda#edcfd844c3fe864b800f60f05806fd26 +https://conda.anaconda.org/conda-forge/noarch/schema-0.7.7-pyhd8ed1ab_0.conda#1add6f6b99191efab14f16e6aa9b6461 +https://conda.anaconda.org/conda-forge/noarch/smdebug-rulesconfig-1.0.1-pyhd3deb0d_1.tar.bz2#be253a7939a3e7cf95a043a983cab563 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-python-sdk-2.227.0-pyhd8ed1ab_0.conda#27bef51bc57520fba66695491e931f30 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-studio-sparkmagic-lib-0.1.4-pyhd8ed1ab_0.conda#285ce30db20d88190f1f7fb654f259ec +https://conda.anaconda.org/conda-forge/noarch/sparkmagic-0.21.0-pyhd8ed1ab_0.conda#fe489239f573c2ea018925ddea6d3190 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-studio-analytics-extension-0.1.2-pyhd8ed1ab_0.conda#5537af52c8b524fc9cc1ea78eefd4d50 +https://conda.anaconda.org/conda-forge/linux-64/supervisor-4.2.5-py311h38be061_2.conda#f4efa0a0b2c7e268274e29543d31d524 +https://conda.anaconda.org/conda-forge/noarch/termcolor-2.4.0-pyhd8ed1ab_0.conda#a5033708ad9283907c3b1bc1f90d0d0d +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-base-2.17.0-cuda120py311h013dac2_0.conda#c7a927edec39ece07ff8ac645836cb3b +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.17.0-cuda120py311h0c188d0_0.conda#2a15f809846607e767f1c8eaa41ab95a +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.17.0-cuda120py311h51447cc_0.conda#7e141a226c2ca81de804bdc5e65da871 +https://conda.anaconda.org/conda-forge/noarch/tf-keras-2.17.0-pyhd8ed1ab_0.conda#ff80d0ec3ee10c2ea405129c4e3f9ca0 +https://conda.anaconda.org/conda-forge/linux-64/uvicorn-0.30.6-py311h38be061_0.conda#12c28839ee30216dc237bd1e792c300b diff --git a/build_artifacts/v2/v2.0/v2.0.0/patch_glue_pyspark.json b/build_artifacts/v2/v2.0/v2.0.0/patch_glue_pyspark.json new file mode 100644 index 00000000..f92eee89 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/patch_glue_pyspark.json @@ -0,0 +1,15 @@ +{ + "argv": [ + "/opt/conda/bin/python", + "-m", + "sagemaker_kernel_wrapper.sm_gis_wrapper", + "-m", + "aws_glue_interactive_sessions_kernel.glue_pyspark.GlueKernel", + "-f", + "{connection_file}" + ], + "display_name": "Glue PySpark", + "env": {"request_origin": "SageMakerStudioPySparkNotebook", "glue_version": "3.0"}, + "language": "python" +} + diff --git a/build_artifacts/v2/v2.0/v2.0.0/patch_glue_spark.json b/build_artifacts/v2/v2.0/v2.0.0/patch_glue_spark.json new file mode 100644 index 00000000..1bd168e7 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/patch_glue_spark.json @@ -0,0 +1,15 @@ +{ + "argv": [ + "/opt/conda/bin/python", + "-m", + "sagemaker_kernel_wrapper.sm_gis_wrapper", + "-m", + "aws_glue_interactive_sessions_kernel.glue_spark.GlueKernel", + "-f", + "{connection_file}" + ], + "display_name": "Glue Spark", + "env": {"request_origin": "SageMakerStudioSparkNotebook", "glue_version": "3.0"}, + "language": "python" +} + diff --git a/build_artifacts/v2/v2.0/v2.0.0/source-version.txt b/build_artifacts/v2/v2.0/v2.0.0/source-version.txt new file mode 100644 index 00000000..abb16582 --- /dev/null +++ b/build_artifacts/v2/v2.0/v2.0.0/source-version.txt @@ -0,0 +1 @@ +1.9.0 \ No newline at end of file diff --git a/src/config.py b/src/config.py index 1b654e6d..e025b0b1 100644 --- a/src/config.py +++ b/src/config.py @@ -1,26 +1,80 @@ -_image_generator_configs = [ - { - "build_args": { - "TAG_FOR_BASE_MICROMAMBA_IMAGE": "jammy-cuda-11.8.0", - "CUDA_MAJOR_MINOR_VERSION": "11.8", # Should match the previous one. - "ENV_IN_FILENAME": "gpu.env.in", - "ARG_BASED_ENV_IN_FILENAME": "gpu.arg_based_env.in", +_image_generator_configs = { + 0: [ + { + "build_args": { + "TAG_FOR_BASE_MICROMAMBA_IMAGE": "jammy-cuda-11.8.0", + "CUDA_MAJOR_MINOR_VERSION": "11.8", # Should match the previous one. + "ENV_IN_FILENAME": "gpu.env.in", + "ARG_BASED_ENV_IN_FILENAME": "gpu.arg_based_env.in", + }, + "additional_packages_env_in_file": "gpu.additional_packages_env.in", + "image_tag_generator": "{image_version}-gpu", + "env_out_filename": "gpu.env.out", + "pytest_flags": ["--use-gpu"], + "image_type": "gpu", }, - "additional_packages_env_in_file": "gpu.additional_packages_env.in", - "image_tag_generator": "{image_version}-gpu", - "env_out_filename": "gpu.env.out", - "pytest_flags": ["--use-gpu"], - "image_type": "gpu", - }, - { - "build_args": { - "TAG_FOR_BASE_MICROMAMBA_IMAGE": "jammy", - "ENV_IN_FILENAME": "cpu.env.in", + { + "build_args": { + "TAG_FOR_BASE_MICROMAMBA_IMAGE": "jammy", + "ENV_IN_FILENAME": "cpu.env.in", + }, + "additional_packages_env_in_file": "cpu.additional_packages_env.in", + "image_tag_generator": "{image_version}-cpu", + "env_out_filename": "cpu.env.out", + "pytest_flags": [], + "image_type": "cpu", }, - "additional_packages_env_in_file": "cpu.additional_packages_env.in", - "image_tag_generator": "{image_version}-cpu", - "env_out_filename": "cpu.env.out", - "pytest_flags": [], - "image_type": "cpu", - }, -] + ], + 1: [ + { + "build_args": { + "TAG_FOR_BASE_MICROMAMBA_IMAGE": "jammy-cuda-11.8.0", + "CUDA_MAJOR_MINOR_VERSION": "11.8", # Should match the previous one. + "ENV_IN_FILENAME": "gpu.env.in", + "ARG_BASED_ENV_IN_FILENAME": "gpu.arg_based_env.in", + }, + "additional_packages_env_in_file": "gpu.additional_packages_env.in", + "image_tag_generator": "{image_version}-gpu", + "env_out_filename": "gpu.env.out", + "pytest_flags": ["--use-gpu"], + "image_type": "gpu", + }, + { + "build_args": { + "TAG_FOR_BASE_MICROMAMBA_IMAGE": "jammy", + "ENV_IN_FILENAME": "cpu.env.in", + }, + "additional_packages_env_in_file": "cpu.additional_packages_env.in", + "image_tag_generator": "{image_version}-cpu", + "env_out_filename": "cpu.env.out", + "pytest_flags": [], + "image_type": "cpu", + }, + ], + 2: [ + { + "build_args": { + "TAG_FOR_BASE_MICROMAMBA_IMAGE": "jammy-cuda-12.5.0", + "CUDA_MAJOR_MINOR_VERSION": "12.5", # Should match the previous one. + "ENV_IN_FILENAME": "gpu.env.in", + "ARG_BASED_ENV_IN_FILENAME": "gpu.arg_based_env.in", + }, + "additional_packages_env_in_file": "gpu.additional_packages_env.in", + "image_tag_generator": "{image_version}-gpu", + "env_out_filename": "gpu.env.out", + "pytest_flags": ["--use-gpu"], + "image_type": "gpu", + }, + { + "build_args": { + "TAG_FOR_BASE_MICROMAMBA_IMAGE": "jammy", + "ENV_IN_FILENAME": "cpu.env.in", + }, + "additional_packages_env_in_file": "cpu.additional_packages_env.in", + "image_tag_generator": "{image_version}-cpu", + "env_out_filename": "cpu.env.out", + "pytest_flags": [], + "image_type": "cpu", + }, + ], +} diff --git a/src/main.py b/src/main.py index f335a40f..263b24e8 100644 --- a/src/main.py +++ b/src/main.py @@ -45,15 +45,16 @@ def create_and_get_semver_dir(version: Version, exist_ok: bool = False): if not os.path.isdir(dir): raise Exception() # Delete all files except the additional_packages_env_in_file - _delete_all_files_except_additional_packages_input_files(dir) + _delete_all_files_except_additional_packages_input_files(dir, version) else: os.makedirs(dir) return dir -def _delete_all_files_except_additional_packages_input_files(base_version_dir): +def _delete_all_files_except_additional_packages_input_files(base_version_dir, version: Version): additional_package_env_in_files = [ - image_generator_config["additional_packages_env_in_file"] for image_generator_config in _image_generator_configs + image_generator_config["additional_packages_env_in_file"] + for image_generator_config in _image_generator_configs[version.major] ] for filename in os.listdir(base_version_dir): if filename not in additional_package_env_in_files: @@ -93,7 +94,7 @@ def _create_new_version_artifacts(args): base_version_dir = get_dir_for_version(base_patch_version) new_version_dir = create_and_get_semver_dir(next_version, args.force) - for image_generator_config in _image_generator_configs: + for image_generator_config in _image_generator_configs[next_version.major]: _create_new_version_conda_specs( base_version_dir, new_version_dir, runtime_version_upgrade_type, image_generator_config ) @@ -115,8 +116,10 @@ def _copy_static_files(base_version_dir, new_version_dir, new_version_major, run base_path = base_version_dir else: base_path = f"template/v{new_version_major}" + for f in glob.glob(os.path.relpath(f"{base_path}/Dockerfile")): shutil.copy2(f, new_version_dir) + if int(new_version_major) >= 1: # dirs directory doesn't exist for v0. It was introduced only for v1 dirs_relative_path = os.path.relpath(f"{base_path}/dirs") @@ -209,10 +212,11 @@ def _push_images_upstream(image_versions_to_push: list[dict[str, str]], region: def _test_local_images(image_ids_to_test: list[str], target_version: str): - assert len(image_ids_to_test) == len(_image_generator_configs) + major_version = get_semver(target_version).major + assert len(image_ids_to_test) == len(_image_generator_configs[major_version]) exit_codes = [] image_ids = [] - for image_id, config in zip(image_ids_to_test, _image_generator_configs): + for image_id, config in zip(image_ids_to_test, _image_generator_configs[major_version]): exit_code = pytest.main( ["-n", "2", "-m", config["image_type"], "--local-image-version", target_version, *config["pytest_flags"]] ) @@ -245,7 +249,7 @@ def _build_local_images( generated_image_ids = [] generated_image_versions = [] - for image_generator_config in _image_generator_configs: + for image_generator_config in _image_generator_configs[target_version.major]: config = _get_config_for_image(target_version_dir, image_generator_config, force) try: image, log_gen = _docker_client.images.build( diff --git a/src/package_report.py b/src/package_report.py index c1ec49ff..9cb79c7f 100644 --- a/src/package_report.py +++ b/src/package_report.py @@ -247,7 +247,7 @@ def _generate_python_package_dependency_report(image_config, base_version_dir, t def generate_package_staleness_report(args): target_version = get_semver(args.target_patch_version) target_version_dir = get_dir_for_version(target_version) - for image_config in _image_generator_configs: + for image_config in _image_generator_configs[target_version.major]: ( target_packages_match_spec_out, latest_package_versions_in_upstream, @@ -269,7 +269,7 @@ def generate_package_size_report(args): base_version = get_semver(source_patch_version) base_version_dir = get_dir_for_version(base_version) if base_version else None validate_results = [] - for image_config in _image_generator_configs: + for image_config in _image_generator_configs[target_version.major]: base_pkg_metadata = pull_conda_package_metadata(image_config, base_version_dir) if base_version else None target_pkg_metadata = pull_conda_package_metadata(image_config, target_version_dir) diff --git a/src/release_notes_generator.py b/src/release_notes_generator.py index 9993aa92..ccf43981 100644 --- a/src/release_notes_generator.py +++ b/src/release_notes_generator.py @@ -36,9 +36,9 @@ def _get_package_to_image_type_mapping(image_type_package_metadata): return package_to_image_type_mapping -def _get_image_type_package_metadata(target_version_dir): +def _get_image_type_package_metadata(target_version_dir, target_version: Version): image_type_package_metadata = {} - for image_generator_config in _image_generator_configs: + for image_generator_config in _image_generator_configs[target_version.major]: image_type_package_metadata[image_generator_config["image_type"]] = _get_installed_packages( target_version_dir, image_generator_config ) @@ -49,7 +49,7 @@ def generate_release_notes(target_version: Version): target_version_dir = get_dir_for_version(target_version) if not os.path.exists(target_version_dir): return - image_type_package_metadata = _get_image_type_package_metadata(target_version_dir) + image_type_package_metadata = _get_image_type_package_metadata(target_version_dir, target_version) package_to_image_type_mapping = _get_package_to_image_type_mapping(image_type_package_metadata) with open(f"{target_version_dir}/RELEASE.md", "w") as f: diff --git a/src/utils.py b/src/utils.py index 58ccc038..07b4605f 100644 --- a/src/utils.py +++ b/src/utils.py @@ -33,6 +33,8 @@ def get_semver(version_str) -> Version: # so we keep the first 3 entries as version string. if version_str.count(".") > 2: version_str = ".".join(version_str.split(".")[:3]) + elif version_str.count(".") == 1: + version_str = version_str + ".0" version = Version.parse(version_str) if version.build is not None: raise Exception() diff --git a/template/v2/Dockerfile b/template/v2/Dockerfile new file mode 100644 index 00000000..86d33a9e --- /dev/null +++ b/template/v2/Dockerfile @@ -0,0 +1,183 @@ +ARG TAG_FOR_BASE_MICROMAMBA_IMAGE +FROM mambaorg/micromamba:$TAG_FOR_BASE_MICROMAMBA_IMAGE + +ARG CUDA_MAJOR_MINOR_VERSION='' +ARG ENV_IN_FILENAME +ARG ARG_BASED_ENV_IN_FILENAME + +ARG AMZN_BASE="/opt/amazon/sagemaker" +ARG DB_ROOT_DIR="/opt/db" +ARG DIRECTORY_TREE_STAGE_DIR="${AMZN_BASE}/dir-staging" + +ARG NB_USER="sagemaker-user" +ARG NB_UID=1000 +ARG NB_GID=100 + +# https://www.openssl.org/source/ +ARG FIPS_VALIDATED_SSL=3.0.8 + +ENV SAGEMAKER_LOGGING_DIR="/var/log/sagemaker/" +ENV STUDIO_LOGGING_DIR="/var/log/studio/" +ENV EDITOR="nano" + +USER root +RUN usermod "--login=${NB_USER}" "--home=/home/${NB_USER}" --move-home "-u ${NB_UID}" "${MAMBA_USER}" && \ + groupmod "--new-name=${NB_USER}" --non-unique "-g ${NB_GID}" "${MAMBA_USER}" && \ + # Update the expected value of MAMBA_USER for the + # _entrypoint.sh consistency check. + echo "${NB_USER}" > "/etc/arg_mamba_user" && \ + : +ENV MAMBA_USER=$NB_USER +ENV USER=$NB_USER + +RUN apt-get update && apt-get upgrade -y && \ + apt-get install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client nano cron less mandoc && \ + # We just install tzdata below but leave default time zone as UTC. This helps packages like Pandas to function correctly. + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata krb5-user libkrb5-dev libsasl2-dev libsasl2-modules && \ + chmod g+w /etc/passwd && \ + echo "ALL ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ + touch /etc/krb5.conf.lock && chown ${NB_USER}:${MAMBA_USER} /etc/krb5.conf* && \ + # Note that we do NOT run `rm -rf /var/lib/apt/lists/*` here. If we did, anyone building on top of our images will + # not be able to run any `apt-get install` commands and that would hamper customizability of the images. + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + sudo ./aws/install && \ + rm -rf aws awscliv2.zip && \ + : && \ + echo "source /usr/local/bin/_activate_current_env.sh" | tee --append /etc/profile && \ +# CodeEditor - create server, user data dirs + mkdir -p /opt/amazon/sagemaker/sagemaker-code-editor-server-data /opt/amazon/sagemaker/sagemaker-code-editor-user-data \ + && chown $MAMBA_USER:$MAMBA_USER /opt/amazon/sagemaker/sagemaker-code-editor-server-data /opt/amazon/sagemaker/sagemaker-code-editor-user-data && \ +# create dir to store user data files + mkdir -p /opt/amazon/sagemaker/user-data \ + && chown $MAMBA_USER:$MAMBA_USER /opt/amazon/sagemaker/user-data && \ +# Merge in OS directory tree contents. + mkdir -p ${DIRECTORY_TREE_STAGE_DIR} +COPY dirs/ ${DIRECTORY_TREE_STAGE_DIR}/ +RUN rsync -a ${DIRECTORY_TREE_STAGE_DIR}/ / && \ + rm -rf ${DIRECTORY_TREE_STAGE_DIR} && \ +# CodeEditor - download the extensions + mkdir -p /etc/code-editor/extensions && \ + while IFS= read -r url || [ -n "$url" ]; do \ + echo "Downloading extension from ${url}..." && \ + wget --no-check-certificate -P /etc/code-editor/extensions "${url}"; \ + done < /etc/code-editor/extensions.txt + +USER $MAMBA_USER +COPY --chown=$MAMBA_USER:$MAMBA_USER $ENV_IN_FILENAME *.in /tmp/ +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +ARG CONDA_OVERRIDE_CUDA=$CUDA_MAJOR_MINOR_VERSION + +# Make sure that $ENV_IN_FILENAME has a newline at the end before the `tee` command runs. Otherwise, nasty things +# will happen. +RUN if [[ -z $ARG_BASED_ENV_IN_FILENAME ]] ; \ + then echo 'No ARG_BASED_ENV_IN_FILENAME passed' ; \ + else envsubst < /tmp/$ARG_BASED_ENV_IN_FILENAME | tee --append /tmp/$ENV_IN_FILENAME ; \ + fi && \ + # Enforce dependencies are all installed from conda-forge + micromamba install -y --name base --file /tmp/$ENV_IN_FILENAME && \ + micromamba clean --all --yes --force-pkgs-dirs && \ + rm -rf /tmp/*.in && \ + sudo ln -s $(which python3) /usr/bin/python && \ + # Update npm version + npm i -g npm && \ + # Enforce to use `conda-forge` as only channel, by removing `defaults` + conda config --remove channels defaults && \ + micromamba config append channels conda-forge --env && \ + # Configure CodeEditor - Install extensions and set preferences + extensionloc=/opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions && mkdir -p "${extensionloc}" \ + # Loop through all vsix files in /etc/code-editor/extensions and install them + && for ext in /etc/code-editor/extensions/*.vsix; do \ + echo "Installing extension ${ext}..."; \ + sagemaker-code-editor --install-extension "${ext}" --extensions-dir "${extensionloc}" --server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data; \ + done \ + # Copy the settings + && cp /etc/code-editor/code_editor_machine_settings.json /opt/amazon/sagemaker/sagemaker-code-editor-server-data/data/Machine/settings.json && \ + # Install glue kernels, and move to shared directory + # Also patching base kernel so Studio background code doesn't start session silently + install-glue-kernels && \ + SITE_PACKAGES=$(pip show aws-glue-sessions | grep Location | awk '{print $2}') && \ + jupyter-kernelspec install $SITE_PACKAGES/aws_glue_interactive_sessions_kernel/glue_pyspark --user && \ + jupyter-kernelspec install $SITE_PACKAGES/aws_glue_interactive_sessions_kernel/glue_spark --user && \ + mv /home/sagemaker-user/.local/share/jupyter/kernels/glue_pyspark /opt/conda/share/jupyter/kernels && \ + mv /home/sagemaker-user/.local/share/jupyter/kernels/glue_spark /opt/conda/share/jupyter/kernels && \ + sed -i '/if not store_history and (/i\ if "sm_analytics_runtime_check" in code:\n return await self._complete_cell()\n' \ + "$SITE_PACKAGES/aws_glue_interactive_sessions_kernel/glue_kernel_base/BaseKernel.py" && \ + # Install FIPS Provider for OpenSSL, on top of existing OpenSSL installation + # v3.0.8 is latest FIPS validated provider, so this is the one we install + # But we need to run tests against the installed version. + # see https://github.com/openssl/openssl/blob/master/README-FIPS.md https://www.openssl.org/source/ + INSTALLED_SSL=$(micromamba list | grep openssl | tr -s ' ' | cut -d ' ' -f 3 | head -n 1) && \ + # download source code for installed, and FIPS validated openssl versions + curl -L https://www.openssl.org/source/openssl-$FIPS_VALIDATED_SSL.tar.gz > openssl-$FIPS_VALIDATED_SSL.tar.gz && \ + curl -L https://www.openssl.org/source/openssl-$INSTALLED_SSL.tar.gz > openssl-$INSTALLED_SSL.tar.gz && \ + tar -xf openssl-$FIPS_VALIDATED_SSL.tar.gz && tar -xf openssl-$INSTALLED_SSL.tar.gz && cd openssl-$FIPS_VALIDATED_SSL && \ + # Configure both versions to enable FIPS and build + ./Configure enable-fips --prefix=/opt/conda --openssldir=/opt/conda/ssl && make && \ + cd ../openssl-$INSTALLED_SSL && \ + ./Configure enable-fips --prefix=/opt/conda --openssldir=/opt/conda/ssl && make && \ + # Copy validated provider to installed version for testing + cp ../openssl-$FIPS_VALIDATED_SSL/providers/fips.so providers/. && \ + cp ../openssl-$FIPS_VALIDATED_SSL/providers/fipsmodule.cnf providers/. && \ + make tests && cd ../openssl-$FIPS_VALIDATED_SSL && \ + # After tests pass, install FIPS provider and remove source code + make install_fips && cd .. && rm -rf ./openssl-* && \ +# Create new config file with fips-enabled. Then user can override OPENSSL_CONF to enable FIPS +# e.g. export OPENSSL_CONF=/opt/conda/ssl/openssl-fips.cnf + cp /opt/conda/ssl/openssl.cnf /opt/conda/ssl/openssl-fips.cnf && \ + sed -i "s:# .include fipsmodule.cnf:.include /opt/conda/ssl/fipsmodule.cnf:" /opt/conda/ssl/openssl-fips.cnf && \ + sed -i 's:# fips = fips_sect:fips = fips_sect:' /opt/conda/ssl/openssl-fips.cnf && \ +# Install Kerberos. +# Make sure no dependency is added/updated + pip install "krb5>=0.5.1,<0.6" && \ + pip show krb5 | grep Require | xargs -i sh -c '[ $(echo {} | cut -d: -f2 | wc -w) -eq 0 ] ' && \ +# https://stackoverflow.com/questions/122327 + SYSTEM_PYTHON_PATH=$(python3 -c "from __future__ import print_function;import sysconfig; print(sysconfig.get_paths().get('purelib'))") && \ + # Remove SparkRKernel as it's not supported \ + jupyter-kernelspec remove -f -y sparkrkernel && \ + # Patch Sparkmagic lib to support Custom Certificates \ + # https://github.com/jupyter-incubator/sparkmagic/pull/435/files \ + cp -a ${SYSTEM_PYTHON_PATH}/sagemaker_studio_analytics_extension/patches/configuration.py ${SYSTEM_PYTHON_PATH}/sparkmagic/utils/ && \ + cp -a ${SYSTEM_PYTHON_PATH}/sagemaker_studio_analytics_extension/patches/reliablehttpclient.py ${SYSTEM_PYTHON_PATH}/sparkmagic/livyclientlib/reliablehttpclient.py && \ + sed -i 's= "python"= "/opt/conda/bin/python"=g' /opt/conda/share/jupyter/kernels/pysparkkernel/kernel.json /opt/conda/share/jupyter/kernels/sparkkernel/kernel.json && \ + sed -i 's="Spark"="SparkMagic Spark"=g' /opt/conda/share/jupyter/kernels/sparkkernel/kernel.json && \ + sed -i 's="PySpark"="SparkMagic PySpark"=g' /opt/conda/share/jupyter/kernels/pysparkkernel/kernel.json && \ + # Configure RTC - disable jupyter_collaboration by default + jupyter labextension disable @jupyter/collaboration-extension + +# Patch glue kernels to use kernel wrapper +COPY patch_glue_pyspark.json /opt/conda/share/jupyter/kernels/glue_pyspark/kernel.json +COPY patch_glue_spark.json /opt/conda/share/jupyter/kernels/glue_spark/kernel.json + +USER root + +# Create logging directories for supervisor +RUN mkdir -p $SAGEMAKER_LOGGING_DIR && \ + chmod a+rw $SAGEMAKER_LOGGING_DIR && \ + mkdir -p ${STUDIO_LOGGING_DIR} && \ + chown ${NB_USER}:${MAMBA_USER} ${STUDIO_LOGGING_DIR} && \ + + # Clean up CodeEditor artifacts + rm -rf /etc/code-editor && \ + # Create supervisord runtime directory + mkdir -p /var/run/supervisord && \ + chmod a+rw /var/run/supervisord && \ + # Create root directory for DB + # Create logging directories for supervisor + mkdir -p $DB_ROOT_DIR && \ + chmod a+rw $DB_ROOT_DIR && \ + HOME_DIR="/home/${NB_USER}/licenses" \ + && mkdir -p ${HOME_DIR} \ + && curl -o ${HOME_DIR}/oss_compliance.zip https://aws-dlinfra-utilities.s3.amazonaws.com/oss_compliance.zip \ + && unzip ${HOME_DIR}/oss_compliance.zip -d ${HOME_DIR}/ \ + && cp ${HOME_DIR}/oss_compliance/test/testOSSCompliance /usr/local/bin/testOSSCompliance \ + && chmod +x /usr/local/bin/testOSSCompliance \ + && chmod +x ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh \ + && ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh ${HOME_DIR} python \ + && rm -rf ${HOME_DIR}/oss_compliance* + +ENV PATH="/opt/conda/bin:/opt/conda/condabin:$PATH" +WORKDIR "/home/${NB_USER}" +ENV SHELL=/bin/bash +ENV OPENSSL_MODULES=/opt/conda/lib64/ossl-modules/ +USER $MAMBA_USER diff --git a/template/v2/dirs/etc/code-editor/code_editor_machine_settings.json b/template/v2/dirs/etc/code-editor/code_editor_machine_settings.json new file mode 100644 index 00000000..44fb8ef7 --- /dev/null +++ b/template/v2/dirs/etc/code-editor/code_editor_machine_settings.json @@ -0,0 +1,4 @@ +{ + "python.terminal.activateEnvironment": false, + "python.defaultInterpreterPath": "/opt/conda/bin/python" +} diff --git a/template/v2/dirs/etc/code-editor/extensions.txt b/template/v2/dirs/etc/code-editor/extensions.txt new file mode 100644 index 00000000..29d683eb --- /dev/null +++ b/template/v2/dirs/etc/code-editor/extensions.txt @@ -0,0 +1,3 @@ +https://open-vsx.org/api/ms-toolsai/jupyter/2023.9.100/file/ms-toolsai.jupyter-2023.9.100.vsix +https://open-vsx.org/api/ms-python/python/2023.20.0/file/ms-python.python-2023.20.0.vsix +https://open-vsx.org/api/amazonwebservices/aws-toolkit-vscode/1.99.0/file/amazonwebservices.aws-toolkit-vscode-1.99.0.vsix diff --git a/template/v2/dirs/etc/conda/.condarc b/template/v2/dirs/etc/conda/.condarc new file mode 100644 index 00000000..c3616df5 --- /dev/null +++ b/template/v2/dirs/etc/conda/.condarc @@ -0,0 +1,6 @@ +envs_dirs: + - ~/.conda/envs + - /opt/conda/envs +pkgs_dirs: + - ~/.conda/pkgs + - /opt/conda/pkgs diff --git a/template/v2/dirs/etc/jupyter/jupyter_server_config.py b/template/v2/dirs/etc/jupyter/jupyter_server_config.py new file mode 100644 index 00000000..0182cc23 --- /dev/null +++ b/template/v2/dirs/etc/jupyter/jupyter_server_config.py @@ -0,0 +1,28 @@ +# Default Jupyter server config +# Note: those config can be overridden by user-level configs. + +c.ServerApp.terminado_settings = {"shell_command": ["/bin/bash"]} +c.ServerApp.tornado_settings = {"compress_response": True} + +# Do not delete files to trash. Instead, permanently delete files. +c.FileContentsManager.delete_to_trash = False + +# Allow deleting non-empty directory via file browser. Related documentation: +# https://github.com/jupyter-server/jupyter_server/blob/main/jupyter_server/services/contents/filemanager.py#L125-L129 +c.FileContentsManager.always_delete_dir = True + +# Enable `allow_hidden` by default, so hidden files are accessible via Jupyter server +# Related documentation: https://jupyterlab.readthedocs.io/en/stable/user/files.html#displaying-hidden-files +c.ContentsManager.allow_hidden = True + +# This will set the LanguageServerManager.extra_node_roots setting if amazon_sagemaker_sql_editor exists in the +# environment. Ignore otherwise, don't fail the JL server start +# Related documentation: https://jupyterlab-lsp.readthedocs.io/en/v3.4.0/Configuring.html +try: + import os + + module = __import__("amazon_sagemaker_sql_editor") + module_location = os.path.dirname(module.__file__) + c.LanguageServerManager.extra_node_roots = [f"{module_location}/sql-language-server"] +except: + pass diff --git a/template/v2/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf b/template/v2/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf new file mode 100644 index 00000000..cac5669b --- /dev/null +++ b/template/v2/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf @@ -0,0 +1,11 @@ +[include] +files = supervisord-common.conf + +[program:codeeditorserver] +directory=%(ENV_HOME)s +command=start-code-editor +autostart=true +autorestart=true +stdout_logfile=/dev/fd/1 ; Redirect web server logs to stdout +stdout_logfile_maxbytes = 0 ; Fix: https://github.com/Supervisor/supervisor/issues/935 +stderr_logfile_maxbytes = 0 ; Fix: https://github.com/Supervisor/supervisor/issues/935 diff --git a/template/v2/dirs/etc/supervisor/conf.d/supervisord-common.conf b/template/v2/dirs/etc/supervisor/conf.d/supervisord-common.conf new file mode 100644 index 00000000..27820d4c --- /dev/null +++ b/template/v2/dirs/etc/supervisor/conf.d/supervisord-common.conf @@ -0,0 +1,18 @@ +[supervisord] +nodaemon=true + +pidfile=/var/run/supervisord/supervisord.pid +logfile=%(ENV_STUDIO_LOGGING_DIR)s/%(ENV_SAGEMAKER_APP_TYPE_LOWERCASE)s/supervisord/supervisord.log +logfile_maxbytes=5MB +logfile_backups=10 +redirect_stderr=true + +[unix_http_server] +file=/var/run/supervisord/supervisor.sock +chmod=0700 + +[supervisorctl] +serverurl=unix:///var/run/supervisord/supervisor.sock + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface diff --git a/template/v2/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf b/template/v2/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf new file mode 100644 index 00000000..5694ac11 --- /dev/null +++ b/template/v2/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf @@ -0,0 +1,11 @@ +[include] +files = supervisord-common.conf + +[program:jupyterlabserver] +directory=%(ENV_HOME)s +command=start-jupyter-server +stopasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/template/v2/dirs/etc/supervisor/conf.d/supervisord.conf b/template/v2/dirs/etc/supervisor/conf.d/supervisord.conf new file mode 100644 index 00000000..686f4a5c --- /dev/null +++ b/template/v2/dirs/etc/supervisor/conf.d/supervisord.conf @@ -0,0 +1,27 @@ +[supervisord] +nodaemon=true + +pidfile=/var/run/supervisord/supervisord.pid +logfile=%(ENV_STUDIO_LOGGING_DIR)s/%(ENV_SAGEMAKER_APP_TYPE_LOWERCASE)s/supervisord/supervisord.log +logfile_maxbytes=5MB +logfile_backups=10 +redirect_stderr=true + +[unix_http_server] +file=/var/run/supervisord/supervisor.sock +chmod=0700 + +[supervisorctl] +serverurl=unix:///var/run/supervisord/supervisor.sock + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[program:jupyterlabserver] +directory=%(ENV_HOME)s +command=start-jupyter-server +stopasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/template/v2/dirs/usr/local/bin/entrypoint-code-editor b/template/v2/dirs/usr/local/bin/entrypoint-code-editor new file mode 100755 index 00000000..bf55a371 --- /dev/null +++ b/template/v2/dirs/usr/local/bin/entrypoint-code-editor @@ -0,0 +1,16 @@ +#!/bin/bash + +set -e + +# Generate and execute the shell code to modifies shell variables to include +# micromamba commands (e.g. using `micromamba activate` to activate environments) +eval "$(micromamba shell hook --shell=bash)" + +# Activate conda environment 'base', where supervisord is installed +micromamba activate base + +# Set up SAGEMAKER_APP_TYPE_LOWERCASE based on SAGEMAKER_APP_TYPE +export SAGEMAKER_APP_TYPE_LOWERCASE=$(echo $SAGEMAKER_APP_TYPE | tr '[:upper:]' '[:lower:]') + +mkdir -p $STUDIO_LOGGING_DIR/$SAGEMAKER_APP_TYPE_LOWERCASE/supervisord +exec supervisord -c /etc/supervisor/conf.d/supervisord-code-editor.conf -n diff --git a/template/v2/dirs/usr/local/bin/entrypoint-jupyter-server b/template/v2/dirs/usr/local/bin/entrypoint-jupyter-server new file mode 100755 index 00000000..ceda89d0 --- /dev/null +++ b/template/v2/dirs/usr/local/bin/entrypoint-jupyter-server @@ -0,0 +1,19 @@ +#!/bin/bash + +set -e + +# Generate and execute the shell code to modifies shell variables to include +# micromamba commands (e.g. using `micromamba activate` to activate environments) +eval "$(micromamba shell hook --shell=bash)" + +# Activate conda environment 'base', where supervisord is installed +micromamba activate base + +# Set up SAGEMAKER_APP_TYPE_LOWERCASE based on SAGEMAKER_APP_TYPE +export SAGEMAKER_APP_TYPE_LOWERCASE=$(echo $SAGEMAKER_APP_TYPE | tr '[:upper:]' '[:lower:]') + +# Start supervisord with supervisord configuration +# Since program 'jupyterlabserver' autostarts by default, it will be started +# automatically along with supervisord +mkdir -p $STUDIO_LOGGING_DIR/$SAGEMAKER_APP_TYPE_LOWERCASE/supervisord +exec supervisord -c /etc/supervisor/conf.d/supervisord.conf -n diff --git a/template/v2/dirs/usr/local/bin/restart-jupyter-server b/template/v2/dirs/usr/local/bin/restart-jupyter-server new file mode 100755 index 00000000..6f2af98d --- /dev/null +++ b/template/v2/dirs/usr/local/bin/restart-jupyter-server @@ -0,0 +1,6 @@ +#!/bin/bash +set -e +echo "Restarting the Jupyter server. This page should refresh in a few seconds. Note that any terminals will be closed." +echo "If this page doesn't refresh after a few seconds, try reloading your browser window." +echo "Restarting now..." +nohup supervisorctl -c /etc/supervisor/conf.d/supervisord.conf restart jupyterlabserver > /dev/null 2>&1 & diff --git a/template/v2/dirs/usr/local/bin/start-code-editor b/template/v2/dirs/usr/local/bin/start-code-editor new file mode 100755 index 00000000..bc97106c --- /dev/null +++ b/template/v2/dirs/usr/local/bin/start-code-editor @@ -0,0 +1,25 @@ +#!/bin/bash +set -e + +eval "$(micromamba shell hook --shell=bash)" + +# Activate conda environment 'base', which is the default environment for sagemaker-distribution +micromamba activate base + +# Start code-editor server +if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ]; then + # SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker + # app. Configure the base url to be `//default`. + sagemaker-code-editor --host 0.0.0.0 --port 8888 \ + --without-connection-token \ + --base-path "/$SAGEMAKER_APP_TYPE_LOWERCASE/default" \ + --server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data \ + --extensions-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions \ + --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data +else + sagemaker-code-editor --host 0.0.0.0 --port 8888 \ + --without-connection-token \ + --server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data \ + --extension-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions \ + --user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data +fi diff --git a/template/v2/dirs/usr/local/bin/start-jupyter-server b/template/v2/dirs/usr/local/bin/start-jupyter-server new file mode 100755 index 00000000..6ff4eac3 --- /dev/null +++ b/template/v2/dirs/usr/local/bin/start-jupyter-server @@ -0,0 +1,36 @@ +#!/bin/bash +set -e + +eval "$(micromamba shell hook --shell=bash)" + +# Activate conda environment 'base', which is the default environment for Cosmos +micromamba activate base + +# Start Jupyter server in rtc mode for shared spaces +if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ] && [ "$SAGEMAKER_SPACE_TYPE_LOWERCASE" == "shared" ]; then + jupyter labextension enable @jupyter/collaboration-extension + # SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker + # app. Configure the base url to be `//default`. + # SAGEMAKER_SPACE_TYPE_LOWERCASE flag is used to determine if the server should start + # in real-time-collaboration mode for a given space. + jupyter lab --ip 0.0.0.0 --port 8888 \ + --ServerApp.base_url="/$SAGEMAKER_APP_TYPE_LOWERCASE/default" \ + --ServerApp.token='' \ + --ServerApp.allow_origin='*' \ + --collaborative \ + --ServerApp.identity_provider_class=sagemaker_jupyterlab_extension_common.identity.SagemakerIdentityProvider \ + --YDocExtension.ystore_class=sagemaker_jupyterlab_extension_common.ydoc_override.ydoc.MySQLiteYStore + +# Start Jupyter server +elif [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ]; then + # SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker + # app. Configure the base url to be `//default`. + jupyter lab --ip 0.0.0.0 --port 8888 \ + --ServerApp.base_url="/$SAGEMAKER_APP_TYPE_LOWERCASE/default" \ + --ServerApp.token='' \ + --ServerApp.allow_origin='*' +else + jupyter lab --ip 0.0.0.0 --port 8888 \ + --ServerApp.token='' \ + --ServerApp.allow_origin='*' +fi diff --git a/test/test_artifacts/v1/jupyter-activity-monitor-extension.test.Dockerfile b/test/test_artifacts/v1/jupyter-activity-monitor-extension.test.Dockerfile new file mode 100644 index 00000000..fa108d52 --- /dev/null +++ b/test/test_artifacts/v1/jupyter-activity-monitor-extension.test.Dockerfile @@ -0,0 +1,8 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN micromamba install pytest --freeze-installed --yes --channel conda-forge --name base +RUN micromamba install pytest-jupyter --freeze-installed --yes --channel conda-forge --name base +RUN SITE_PACKAGES=$(pip show jupyter-activity-monitor-extension | grep Location | awk '{print $2}') && \ + cd "$SITE_PACKAGES/jupyter_activity_monitor_extension/tests/" && pytest -p pytest_jupyter.jupyter_server diff --git a/test/test_artifacts/v1/mlflow.test.Dockerfile b/test/test_artifacts/v1/mlflow.test.Dockerfile new file mode 100644 index 00000000..ddd48772 --- /dev/null +++ b/test/test_artifacts/v1/mlflow.test.Dockerfile @@ -0,0 +1,16 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +RUN python -c "import mlflow" + +RUN sudo apt-get update && sudo apt-get install -y git && \ + git clone --recursive https://github.com/mlflow/mlflow.git && \ + : + +WORKDIR "mlflow/" +COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/run_mlflow_tests.sh . +RUN chmod +x run_mlflow_tests.sh +# Run tests in run_matplotlib_tests.sh +CMD ["./run_mlflow_tests.sh"] diff --git a/test/test_artifacts/v1/sagemaker-mlflow.test.Dockerfile b/test/test_artifacts/v1/sagemaker-mlflow.test.Dockerfile new file mode 100644 index 00000000..c89064c7 --- /dev/null +++ b/test/test_artifacts/v1/sagemaker-mlflow.test.Dockerfile @@ -0,0 +1,19 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +RUN python -c "import sagemaker_mlflow" + +RUN sudo apt-get update && sudo apt-get install -y git && \ + git clone --recursive https://github.com/aws/sagemaker-mlflow.git && \ + : + +# For running sagemaker-mlflow tests, we need pytest +RUN micromamba install -y --freeze-installed -c conda-forge pytest + +WORKDIR "sagemaker-mlflow/" +COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/run_sagemaker_mlflow_tests.sh . +RUN chmod +x run_sagemaker_mlflow_tests.sh +# Run tests in run_matplotlib_tests.sh +CMD ["./run_sagemaker_mlflow_tests.sh"] diff --git a/test/test_artifacts/v2/altair.test.Dockerfile b/test/test_artifacts/v2/altair.test.Dockerfile new file mode 100644 index 00000000..3747904b --- /dev/null +++ b/test/test_artifacts/v2/altair.test.Dockerfile @@ -0,0 +1,20 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import altair"] + +RUN sudo apt-get update && \ + sudo apt-get install -y git && \ + git clone --recursive https://github.com/altair-viz/altair_notebooks.git && \ + : + +WORKDIR "altair_notebooks/notebooks" +COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/run_altair_example_notebooks.sh ./ +RUN chmod +x run_altair_example_notebooks.sh + +# Example notebooks' dependencies +RUN micromamba install -y --freeze-installed -c conda-forge papermill vega_datasets pandas matplotlib numpy + +CMD ["./run_altair_example_notebooks.sh"] diff --git a/test/test_artifacts/v2/amazon-codewhisperer-jupyterlab-ext.test.Dockerfile b/test/test_artifacts/v2/amazon-codewhisperer-jupyterlab-ext.test.Dockerfile new file mode 100644 index 00000000..1ef68a71 --- /dev/null +++ b/test/test_artifacts/v2/amazon-codewhisperer-jupyterlab-ext.test.Dockerfile @@ -0,0 +1,6 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import amazon_codewhisperer_jupyterlab_ext"] diff --git a/test/test_artifacts/v2/amazon-sagemaker-sql-magic.test.Dockerfile b/test/test_artifacts/v2/amazon-sagemaker-sql-magic.test.Dockerfile new file mode 100644 index 00000000..642c9e6a --- /dev/null +++ b/test/test_artifacts/v2/amazon-sagemaker-sql-magic.test.Dockerfile @@ -0,0 +1,6 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import amazon_sagemaker_sql_magic"] diff --git a/test/test_artifacts/v2/amazon_sagemaker_sql_editor.test.Dockerfile b/test/test_artifacts/v2/amazon_sagemaker_sql_editor.test.Dockerfile new file mode 100644 index 00000000..2182ba15 --- /dev/null +++ b/test/test_artifacts/v2/amazon_sagemaker_sql_editor.test.Dockerfile @@ -0,0 +1,6 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import amazon_sagemaker_sql_editor"] diff --git a/test/test_artifacts/v2/autogluon.test.Dockerfile b/test/test_artifacts/v2/autogluon.test.Dockerfile new file mode 100644 index 00000000..fb02d1ab --- /dev/null +++ b/test/test_artifacts/v2/autogluon.test.Dockerfile @@ -0,0 +1,13 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE as base + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +RUN micromamba install --freeze-installed -y -c conda-forge pytest + +RUN git clone --recursive https://github.com/autogluon/autogluon.git + +WORKDIR "autogluon" +COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/run_autogluon_tests.sh . +RUN chmod +x run_autogluon_tests.sh +CMD ["./run_autogluon_tests.sh"] diff --git a/test/test_artifacts/v2/aws-glue-sessions/glue_notebook.ipynb b/test/test_artifacts/v2/aws-glue-sessions/glue_notebook.ipynb new file mode 100644 index 00000000..b491f310 --- /dev/null +++ b/test/test_artifacts/v2/aws-glue-sessions/glue_notebook.ipynb @@ -0,0 +1,91 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "1a710e7c-7ebf-477a-88b5-3d85cb08cf19", + "metadata": {}, + "outputs": [], + "source": [ + "%status" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0ce599e8-6dcc-42c4-b10d-8e4e898eb436", + "metadata": {}, + "outputs": [], + "source": [ + "%stop_session" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "013565d2-26dc-4710-83ca-1d00711be6c9", + "metadata": {}, + "outputs": [], + "source": [ + "%glue_ray" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e81bb7c2-bec2-4c4b-8d4d-59bf5e6a9daf", + "metadata": {}, + "outputs": [], + "source": [ + "%etl" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7a0b5de5-bf14-40f9-a944-f98e5a96e0f4", + "metadata": {}, + "outputs": [], + "source": [ + "%streaming" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cf24f505-6f26-447e-acc3-4af4556bb386", + "metadata": {}, + "outputs": [], + "source": [ + "%help" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "33149d30-420e-4ebf-b32c-ca635db7cb10", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Glue PySpark and Ray", + "language": "python", + "name": "glue_pyspark" + }, + "language_info": { + "codemirror_mode": { + "name": "python", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "Python_Glue_Session", + "pygments_lexer": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/test/test_artifacts/v2/aws-glue-sessions/run_glue_sessions_notebook.sh b/test/test_artifacts/v2/aws-glue-sessions/run_glue_sessions_notebook.sh new file mode 100644 index 00000000..1aa73e37 --- /dev/null +++ b/test/test_artifacts/v2/aws-glue-sessions/run_glue_sessions_notebook.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Create an empty notebook file for papermill's output +touch nb_output.ipynb + +kernels=('glue_pyspark' 'glue_spark') +nb='script' +for kernel in ${kernels[@]}; do + papermill 'glue_notebook.ipynb' 'nb_output.ipynb' -k $kernel +done diff --git a/test/test_artifacts/v2/boto3.test.Dockerfile b/test/test_artifacts/v2/boto3.test.Dockerfile new file mode 100644 index 00000000..e195e39c --- /dev/null +++ b/test/test_artifacts/v2/boto3.test.Dockerfile @@ -0,0 +1,15 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN sudo apt-get update && sudo apt-get install -y git && \ + git clone --recursive https://github.com/boto/boto3.git && \ + : + +# For Running boto3 tests, we need pytest +RUN micromamba install -y --freeze-installed -c conda-forge pytest + +WORKDIR "boto3" +COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/run_boto3_tests.sh . +RUN chmod +x run_boto3_tests.sh +CMD ["./run_boto3_tests.sh"] diff --git a/test/test_artifacts/v2/glue-sessions.test.Dockerfile b/test/test_artifacts/v2/glue-sessions.test.Dockerfile new file mode 100644 index 00000000..b820533e --- /dev/null +++ b/test/test_artifacts/v2/glue-sessions.test.Dockerfile @@ -0,0 +1,13 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +COPY --chown=$MAMBA_USER:$MAMBA_USER aws-glue-sessions/run_glue_sessions_notebook.sh . +RUN chmod +x run_glue_sessions_notebook.sh +COPY --chown=$MAMBA_USER:$MAMBA_USER aws-glue-sessions/glue_notebook.ipynb . +RUN chmod +x glue_notebook.ipynb + +RUN micromamba install -y --freeze-installed -c conda-forge papermill + +CMD ["./run_glue_sessions_notebook.sh"] diff --git a/test/test_artifacts/v2/gpu-dependencies.test.Dockerfile b/test/test_artifacts/v2/gpu-dependencies.test.Dockerfile index 2e48e09d..40091702 100644 --- a/test/test_artifacts/v2/gpu-dependencies.test.Dockerfile +++ b/test/test_artifacts/v2/gpu-dependencies.test.Dockerfile @@ -8,4 +8,4 @@ ARG MAMBA_DOCKERFILE_ACTIVATE=1 # 2. Check if Pytorch is installed with CUDA support for GPU image COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/cuda_validation.py . RUN chmod +x cuda_validation.py -RUN python3 cuda_validation.py \ No newline at end of file +CMD python3 cuda_validation.py diff --git a/test/test_artifacts/v2/jupyter-ai.test.Dockerfile b/test/test_artifacts/v2/jupyter-ai.test.Dockerfile new file mode 100644 index 00000000..34ddaa3f --- /dev/null +++ b/test/test_artifacts/v2/jupyter-ai.test.Dockerfile @@ -0,0 +1,6 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import jupyter_ai"] diff --git a/test/test_artifacts/v2/jupyter-collaboration.test.Dockerfile b/test/test_artifacts/v2/jupyter-collaboration.test.Dockerfile new file mode 100644 index 00000000..0b005de1 --- /dev/null +++ b/test/test_artifacts/v2/jupyter-collaboration.test.Dockerfile @@ -0,0 +1,6 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import jupyter_collaboration; import jupyter_server_fileid; from jupyter_ydoc import YBlob; yblob = YBlob(); assert yblob.get() == b''; yblob.set(b'012'); assert yblob.get() == b'012'"] diff --git a/test/test_artifacts/v2/jupyter-dash.test.Dockerfile b/test/test_artifacts/v2/jupyter-dash.test.Dockerfile new file mode 100644 index 00000000..540527ad --- /dev/null +++ b/test/test_artifacts/v2/jupyter-dash.test.Dockerfile @@ -0,0 +1,6 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import plotly.express as px; import sys; fig = px.bar(x=['a', 'b', 'c'], y=[1, 3, 2]); fig.write_html('first_figure.html', auto_open=False)"] diff --git a/test/test_artifacts/v2/jupyterlab-git.test.Dockerfile b/test/test_artifacts/v2/jupyterlab-git.test.Dockerfile new file mode 100644 index 00000000..7d5cbd96 --- /dev/null +++ b/test/test_artifacts/v2/jupyterlab-git.test.Dockerfile @@ -0,0 +1,6 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import jupyterlab_git"] diff --git a/test/test_artifacts/v2/jupyterlab-lsp.test.Dockerfile b/test/test_artifacts/v2/jupyterlab-lsp.test.Dockerfile new file mode 100644 index 00000000..c13df62a --- /dev/null +++ b/test/test_artifacts/v2/jupyterlab-lsp.test.Dockerfile @@ -0,0 +1,7 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import jupyter_lsp"] +CMD ["python", "-c", "import jupyterlab_lsp"] diff --git a/test/test_artifacts/v2/keras.test.Dockerfile b/test/test_artifacts/v2/keras.test.Dockerfile new file mode 100644 index 00000000..39d211b0 --- /dev/null +++ b/test/test_artifacts/v2/keras.test.Dockerfile @@ -0,0 +1,19 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +RUN sudo apt-get update && sudo apt-get install -y git graphviz && \ + git clone --recursive https://github.com/keras-team/keras.git && \ + : + +# Some of the keras guides requires pydot and graphviz to be installed +RUN micromamba install -y --freeze-installed conda-forge::jax +ENV XLA_FLAGS=--xla_gpu_cuda_data_dir=/opt/conda + +WORKDIR "keras/guides" + +COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/run_keras_tests.sh . +RUN chmod +x run_keras_tests.sh +# Run tests in run_keras_tests.sh +CMD ["./run_keras_tests.sh"] diff --git a/test/test_artifacts/v2/langchain-aws.test.Dockerfile b/test/test_artifacts/v2/langchain-aws.test.Dockerfile new file mode 100644 index 00000000..73353bb0 --- /dev/null +++ b/test/test_artifacts/v2/langchain-aws.test.Dockerfile @@ -0,0 +1,13 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import langchain_aws"] +CMD ["python", "-c", "from langchain_aws import BedrockLLM"] +CMD ["python", "-c", "from langchain_aws import ChatBedrock"] +CMD ["python", "-c", "from langchain_aws import SagemakerEndpoint"] +CMD ["python", "-c", "from langchain_aws import AmazonKendraRetriever"] +CMD ["python", "-c", "from langchain_aws import AmazonKnowledgeBasesRetriever"] +CMD ["python", "-c", "from langchain_aws import NeptuneAnalyticsGraph"] +CMD ["python", "-c", "from langchain_aws import NeptuneGraph"] diff --git a/test/test_artifacts/v2/matplotlib.test.Dockerfile b/test/test_artifacts/v2/matplotlib.test.Dockerfile new file mode 100644 index 00000000..4d290016 --- /dev/null +++ b/test/test_artifacts/v2/matplotlib.test.Dockerfile @@ -0,0 +1,18 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +RUN sudo apt-get update && sudo apt-get install -y git && \ + git clone --recursive https://github.com/matplotlib/matplotlib.git && \ + : + +# TODO: Come up with a different way to test matplotlib installation. +# Currently we will be running all the python files in galleries/tutorials +# But this directory structure might change in the future. In the past, "galleries/tutorials" +# didn't exist. Previously the repository just had a "tutorials" folder. +WORKDIR "matplotlib/galleries/tutorials" +COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/run_matplotlib_tests.sh . +RUN chmod +x run_matplotlib_tests.sh +# Run tests in run_matplotlib_tests.sh +CMD ["./run_matplotlib_tests.sh"] diff --git a/test/test_artifacts/v2/mlflow.test.Dockerfile b/test/test_artifacts/v2/mlflow.test.Dockerfile index ddd48772..aca166c0 100644 --- a/test/test_artifacts/v2/mlflow.test.Dockerfile +++ b/test/test_artifacts/v2/mlflow.test.Dockerfile @@ -5,8 +5,7 @@ ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN python -c "import mlflow" -RUN sudo apt-get update && sudo apt-get install -y git && \ - git clone --recursive https://github.com/mlflow/mlflow.git && \ +RUN git clone --recursive https://github.com/mlflow/mlflow.git && \ : WORKDIR "mlflow/" diff --git a/test/test_artifacts/v2/notebook.test.Dockerfile b/test/test_artifacts/v2/notebook.test.Dockerfile new file mode 100644 index 00000000..9afb9e08 --- /dev/null +++ b/test/test_artifacts/v2/notebook.test.Dockerfile @@ -0,0 +1,6 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import notebook"] diff --git a/test/test_artifacts/v2/numpy.test.Dockerfile b/test/test_artifacts/v2/numpy.test.Dockerfile new file mode 100644 index 00000000..bab08af3 --- /dev/null +++ b/test/test_artifacts/v2/numpy.test.Dockerfile @@ -0,0 +1,13 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +# Inorder to test numpy, we need pytest and hypothesis to be installed. +RUN micromamba install -y --freeze-installed -c conda-forge pytest hypothesis meson +# Some unit tests in numpy requires gcc to be installed. +RUN sudo apt-get update && sudo apt-get install -y gcc +# Check https://numpy.org/doc/stable/reference/testing.html +# numpy.test() returns True if tests succeed else False. +# We need to flip the result so that we exit with status code as 0 if all the tests succeeded. +CMD ["python", "-c", "import numpy,sys; tests_succeeded = numpy.test(); sys.exit(not tests_succeeded)"] diff --git a/test/test_artifacts/v2/pandas.test.Dockerfile b/test/test_artifacts/v2/pandas.test.Dockerfile new file mode 100644 index 00000000..f3c2f73e --- /dev/null +++ b/test/test_artifacts/v2/pandas.test.Dockerfile @@ -0,0 +1,8 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN micromamba install -y --freeze-installed -c conda-forge pytest hypothesis pytest-asyncio lxml + +COPY --chown=$MAMBA_USER:$MAMBA_USER run_pandas_tests.py . +CMD ["python", "run_pandas_tests.py"] diff --git a/test/test_artifacts/v2/python-lsp-server.test.Dockerfile b/test/test_artifacts/v2/python-lsp-server.test.Dockerfile new file mode 100644 index 00000000..eb73f0e0 --- /dev/null +++ b/test/test_artifacts/v2/python-lsp-server.test.Dockerfile @@ -0,0 +1,7 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +# "Confirm that installation succeeded" by running this - https://github.com/python-lsp/python-lsp-server#installation +CMD ["pylsp", "--help"] diff --git a/test/test_artifacts/v2/pytorch.examples.Dockerfile b/test/test_artifacts/v2/pytorch.examples.Dockerfile new file mode 100644 index 00000000..ed8f4c5b --- /dev/null +++ b/test/test_artifacts/v2/pytorch.examples.Dockerfile @@ -0,0 +1,16 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN git clone --recursive https://github.com/pytorch/examples + +# During automation some tests fails with `libcuda.so: cannot open shared object file: No such file or directory` +# But libcuda.so.1 exists. Adding this resolves, but also adding `2>/dev/null` to ignore if not needed. +RUN sudo ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.1 /usr/lib/x86_64-linux-gnu/libcuda.so 2>/dev/null + +WORKDIR "examples" + +RUN ./run_python_examples.sh install_deps + +# We skip `imagenet` because it requires a lot of resources and so aren't a good fit for us. +CMD ["./run_python_examples.sh", "dcgan,fast_neural_style,distributed,mnist,mnist_forward_forward,mnist_hogwild,mnist_rnn,regression,reinforcement_learning,siamese_network,super_resolution,time_sequence_prediction,vae,word_language_model,fx"] diff --git a/test/test_artifacts/v2/run_pandas_tests.py b/test/test_artifacts/v2/run_pandas_tests.py new file mode 100644 index 00000000..2995581f --- /dev/null +++ b/test/test_artifacts/v2/run_pandas_tests.py @@ -0,0 +1,33 @@ +import os +import site +import sys + +import pandas + +# We change the working directory here because there is at least one test (`test_html_template_extends_options`) which +# expects the directory to be 'pandas'. Ideally, we would have changed directories through a `WORKDIR` in Dockerfile +# but unfortunately it doesn't accept dynamic arguments. +site_packages_dir = site.getsitepackages()[0] +os.chdir(site_packages_dir) + +# pandas.test() by default runs with `-m "not slow and not network and not db"`. However, we found a few tests in the +# test_network.py file that should have been marked as "network" but weren't, so we skip those here. We skip S3 specific +# tests for the same reason. +# We skip `test_plain_axes` too: the Pandas dev environment expects matplotlib to be ">=3.6.1, <3.7.0" but the runtime +# expectation is just ">=3.6.1". Our image contains v3.7.1, so it meets the latter requirement but not the former. This +# particular test, however, only works with the former requirement. (We verified that the test succeeds if we manually +# drop the version to v3.6.x) So, we skip it. +# Also skipping specific TestFrameFlexArithmetic test; failing due to known issue https://github.com/pandas-dev/pandas/issues/54546 +tests_succeeded = pandas.test( + [ + "-m", + "(not slow and not network and not db)", + "-k", + "(not test_network and not s3 and not test_plain_axes)", + "--no-strict-data-files", + "--ignore", + "pandas/tests/frame/test_arithmetic.py::TestFrameFlexArithmetic::test_floordiv_axis0_numexpr_path", + ] +) + +sys.exit(not tests_succeeded) diff --git a/test/test_artifacts/v2/sagemaker-code-editor.test.Dockerfile b/test/test_artifacts/v2/sagemaker-code-editor.test.Dockerfile new file mode 100644 index 00000000..aca7efdf --- /dev/null +++ b/test/test_artifacts/v2/sagemaker-code-editor.test.Dockerfile @@ -0,0 +1,9 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/run_sagemaker_code_editor_tests.sh ./ +RUN chmod +x run_sagemaker_code_editor_tests.sh + +CMD ["./run_sagemaker_code_editor_tests.sh"] diff --git a/test/test_artifacts/v2/sagemaker-headless-execution-driver.test.Dockerfile b/test/test_artifacts/v2/sagemaker-headless-execution-driver.test.Dockerfile new file mode 100644 index 00000000..5f57f316 --- /dev/null +++ b/test/test_artifacts/v2/sagemaker-headless-execution-driver.test.Dockerfile @@ -0,0 +1,7 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +# Execute the unit tests for sagemaker-headless-execution-driver +CMD ["python", "-c", "import sagemaker_headless_execution_driver.headless_execution as execution_driver"] diff --git a/test/test_artifacts/v2/sagemaker-studio-analytics-extension.test.Dockerfile b/test/test_artifacts/v2/sagemaker-studio-analytics-extension.test.Dockerfile new file mode 100644 index 00000000..0aba7650 --- /dev/null +++ b/test/test_artifacts/v2/sagemaker-studio-analytics-extension.test.Dockerfile @@ -0,0 +1,11 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +COPY --chown=$MAMBA_USER:$MAMBA_USER ./sagemaker-studio-analytics-extension . +RUN chmod +x ./sagemaker-studio-analytics-extension.sh + +RUN micromamba install -y --freeze-installed -c conda-forge papermill + +CMD ["./sagemaker-studio-analytics-extension.sh"] diff --git a/test/test_artifacts/v2/sagemaker-studio-analytics-extension/sagemaker-studio-analytics-extension.sh b/test/test_artifacts/v2/sagemaker-studio-analytics-extension/sagemaker-studio-analytics-extension.sh new file mode 100644 index 00000000..c864676b --- /dev/null +++ b/test/test_artifacts/v2/sagemaker-studio-analytics-extension/sagemaker-studio-analytics-extension.sh @@ -0,0 +1,2 @@ +#!/bin/bash +papermill 'sagemaker_studio_analytics_extension.ipynb' 'nb_output.ipynb' diff --git a/test/test_artifacts/v2/sagemaker-studio-analytics-extension/sagemaker_studio_analytics_extension.ipynb b/test/test_artifacts/v2/sagemaker-studio-analytics-extension/sagemaker_studio_analytics_extension.ipynb new file mode 100644 index 00000000..fb92e3a8 --- /dev/null +++ b/test/test_artifacts/v2/sagemaker-studio-analytics-extension/sagemaker_studio_analytics_extension.ipynb @@ -0,0 +1,53 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "3d5383b9-e06d-42de-b7b7-3ad9603c9585", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext sagemaker_studio_analytics_extension.magics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "feb385d0-c80e-4d65-afe7-8e6beb07e836", + "metadata": {}, + "outputs": [], + "source": [ + "%sm_analytics?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a3faecce-f008-4ac9-94e7-d6bfc6f88bb1", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/test/test_artifacts/v2/scipy.test.Dockerfile b/test/test_artifacts/v2/scipy.test.Dockerfile new file mode 100644 index 00000000..e117b158 --- /dev/null +++ b/test/test_artifacts/v2/scipy.test.Dockerfile @@ -0,0 +1,12 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +# Inorder to test scipy, we need pytest and hypothesis to be installed. +RUN micromamba install -y --freeze-installed -c conda-forge pytest hypothesis scipy-tests pooch +# Check https://github.com/numpy/numpy/blob/main/doc/TESTS.rst +# Note: Testing guidelines are same for numpy and scipy. +# scipy.test() returns True if tests succeed else False. +# We need to flip the result so that we exit with status code as 0 if all the tests succeeded. +CMD ["python", "-c", "import scipy,sys; tests_succeeded = scipy.test(); sys.exit(not tests_succeeded)"] diff --git a/test/test_artifacts/v2/scripts/run_altair_example_notebooks.sh b/test/test_artifacts/v2/scripts/run_altair_example_notebooks.sh new file mode 100644 index 00000000..1bb4f370 --- /dev/null +++ b/test/test_artifacts/v2/scripts/run_altair_example_notebooks.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Create an empty notebook file for papermill's output +touch nb_output.ipynb + +# List of example notebooks under the altair_notebooks' notebooks/ subdirectory, excluding examples +example_notebooks=('02-Tutorial.ipynb' + '03-ScatterCharts.ipynb' + '04-BarCharts.ipynb' + '05-LineCharts.ipynb' + '07-LayeredCharts.ipynb' + '08-CarsDataset.ipynb' +) + +for nb in ${example_notebooks[@]}; do + papermill $nb 'nb_output.ipynb' +done diff --git a/test/test_artifacts/v2/scripts/run_autogluon_tests.sh b/test/test_artifacts/v2/scripts/run_autogluon_tests.sh new file mode 100644 index 00000000..7a136c25 --- /dev/null +++ b/test/test_artifacts/v2/scripts/run_autogluon_tests.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +AUTOGLUON_VERSION=$(micromamba list | grep autogluon | tr -s ' ' | head -n 1 | cut -d ' ' -f 3) +git checkout tags/v$AUTOGLUON_VERSION + +# Run autogluon quick start as end-to-end check +jupyter nbconvert --execute --to python docs/tutorials/tabular/tabular-quick-start.ipynb +jupyter nbconvert --execute --to python docs/tutorials/timeseries/forecasting-quick-start.ipynb + +# Detect gpu and run multimodal quick start if presented +python -c "import torch; exit(0) if torch.cuda.is_available() else exit(1)" +ret=$? + +if [ $ret -eq 0 ] +then + jupyter nbconvert --execute --to python docs/tutorials/multimodal/multimodal_prediction/multimodal-quick-start.ipynb +fi diff --git a/test/test_artifacts/v2/scripts/run_boto3_tests.sh b/test/test_artifacts/v2/scripts/run_boto3_tests.sh new file mode 100644 index 00000000..ab0c7803 --- /dev/null +++ b/test/test_artifacts/v2/scripts/run_boto3_tests.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# We need to checkout the version of boto3 that is installed in the mamba environment. + +boto3_version=$(micromamba list | grep boto3 | tr -s ' ' | cut -d ' ' -f 3) +# Checkout the corresponding boto3 version +git checkout tags/$boto3_version + +# Run the unit and functional tests +pytest tests/unit tests/functional || exit $? diff --git a/test/test_artifacts/v2/scripts/run_keras_tests.sh b/test/test_artifacts/v2/scripts/run_keras_tests.sh new file mode 100644 index 00000000..e645ec9d --- /dev/null +++ b/test/test_artifacts/v2/scripts/run_keras_tests.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +keras_version=$(micromamba list | grep keras | tr -s ' ' | cut -d ' ' -f 3) + +git checkout tags/v$keras_version +# Ref: https://keras.io/guides/, https://github.com/keras-team/keras-io/tree/master +for file in *.py; do + if [ "$file" != "transfer_learning.py"] && ["$file" != "custom_train_step_in_torch.py"]; then + # skipping transfer_learning.py because it has 20 epochs and it takes a very long time to execute + # https://github.com/keras-team/keras-io/blob/master/guides/transfer_learning.py#L562 + # skipping custom_train_step_in_torch.py because there is a bug which causes error + python "$file" || exit $? + fi +done diff --git a/test/test_artifacts/v2/scripts/run_matplotlib_tests.sh b/test/test_artifacts/v2/scripts/run_matplotlib_tests.sh new file mode 100644 index 00000000..848e7421 --- /dev/null +++ b/test/test_artifacts/v2/scripts/run_matplotlib_tests.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# Run all the tutorials +for file in *.py; do + python "$file" || exit $? +done diff --git a/test/test_artifacts/v2/scripts/run_mlflow_tests.sh b/test/test_artifacts/v2/scripts/run_mlflow_tests.sh index 069e2199..0b0e616c 100644 --- a/test/test_artifacts/v2/scripts/run_mlflow_tests.sh +++ b/test/test_artifacts/v2/scripts/run_mlflow_tests.sh @@ -4,7 +4,7 @@ set -e # Run examples for keras, pytorch, sklearn, tensorflow cd examples - +export TF_USE_LEGACY_KERAS=1 # keras cd keras/ python train.py diff --git a/test/test_artifacts/v2/scripts/run_pysdk_tests.sh b/test/test_artifacts/v2/scripts/run_pysdk_tests.sh new file mode 100644 index 00000000..2f49f122 --- /dev/null +++ b/test/test_artifacts/v2/scripts/run_pysdk_tests.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# We need to checkout the version of sagemaker-python-sdk that is installed in the mamba environment. + +pysdk_version=$(micromamba list | grep sagemaker-python-sdk | tr -s ' ' | cut -d ' ' -f 3) +# Checkout the corresponding sagemaker-python-sdk version +git checkout tags/v$pysdk_version + +# Install test dependencies of sagemaker-python-sdk +# Using pip as some of the packages are not available on conda-forge +pip install -r requirements/extras/test_requirements.txt + +# Run the unit tests, ignoring tests which require AWS Configuration +# TODO: Re-evaluate the ignored tests since we are setting the AWS_DEFAULT_REGION as part of the Dockerfile. +pytest tests/unit --ignore=tests/unit/sagemaker/feature_store/ --ignore=tests/unit/sagemaker/jumpstart/ --ignore=tests/unit/sagemaker/workflow/ \ + --ignore=tests/unit/sagemaker/async_inference --ignore=tests/unit/test_model_card.py --ignore=tests/unit/test_model_card.py --ignore=tests/unit/test_processing.py \ + --ignore=tests/unit/test_tensorboard.py --ignore=tests/unit/sagemaker/async_inference --ignore=tests/unit/sagemaker/experiments --ignore tests/unit/sagemaker/local \ + --ignore tests/unit/sagemaker/monitor/test_data_capture_config.py --ignore tests/unit/sagemaker/experiments --ignore tests/unit/sagemaker/remote_function \ + --ignore tests/unit/sagemaker/model/test_deploy.py --deselect tests/unit/test_estimator.py::test_insert_invalid_source_code_args \ + --deselect tests/unit/sagemaker/tensorflow/test_estimator.py::test_insert_invalid_source_code_args || exit $? diff --git a/test/test_artifacts/v2/scripts/run_sagemaker_code_editor_tests.sh b/test/test_artifacts/v2/scripts/run_sagemaker_code_editor_tests.sh new file mode 100644 index 00000000..0b7dda58 --- /dev/null +++ b/test/test_artifacts/v2/scripts/run_sagemaker_code_editor_tests.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +# Exit immediately if a command exits with a non-zero status. +set -e + +sagemaker-code-editor --version +echo "Verified that sagemaker-code-editor is installed" + +# Verify that data dirs are created and have correct ownership +data_dirs=("/opt/amazon/sagemaker/sagemaker-code-editor-server-data" "/opt/amazon/sagemaker/sagemaker-code-editor-user-data") +data_dirs_owner="sagemaker-user" + +for dir in "${data_dirs[@]}"; do + if [[ -d "$dir" ]]; then + echo "$dir exists." + if [[ $(stat -c '%U' "$dir") == "$data_dirs_owner" ]]; then + echo "$dir is owned by $data_dirs_owner." + else + echo "Error: $dir is not owned by $data_dirs_owner." + exit 1 + fi + else + echo "Error: $dir does not exist." + exit 1 + fi +done + +# Check that extensions are installed correctly +extensions_base_dir="/opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions" +if [[ ! -d $extensions_base_dir ]]; then + echo "Extension base directory $extensions_base_dir does not exist." + exit 1 +fi + +installed_extensions=("ms-python.python" "ms-toolsai.jupyter" "amazonwebservices.aws-toolkit-vscode") +for extension in "${installed_extensions[@]}"; do + # In this pattern, we're looking for versioning to follow immediately after the extension name + # For ex - ms-toolsai.jupyter-2023.9.100 + pattern="${extension}-[0-9]*" + + # Use the find command to search for directories matching the current pattern + found_dirs=$(find "$extensions_base_dir" -maxdepth 1 -type d -name "$pattern") + + if [[ -z $found_dirs ]]; then + echo "Directory matching pattern '$pattern' does not exist in $extensions_base_dir." + exit 1 + else + echo "Directory exists for pattern '$pattern':" + echo "$found_dirs" + fi +done +echo "Verified that all extension folders are present in $extensions_base_dir." + +# Check that settings file is copied +MACHINE_SETTINGS_FILE_PATH="/opt/amazon/sagemaker/sagemaker-code-editor-server-data/data/Machine/settings.json" +if [ ! -f "$MACHINE_SETTINGS_FILE_PATH" ]; then + echo "Error: Settings file does not exist at $MACHINE_SETTINGS_FILE_PATH." + exit 1 +fi + +echo "Settings file exists at $FILE_PATH." + +# Check that code-editor artifacts folder is deleted +ARTIFACTS_DIR="/etc/code-editor" +if [ ! -d "$ARTIFACTS_DIR" ]; then + echo "Directory $ARTIFACTS_DIR has been successfully removed." +else + echo "Error: Directory $ARTIFACTS_DIR still exists." + exit 1 +fi diff --git a/test/test_artifacts/v2/serve.test.Dockerfile b/test/test_artifacts/v2/serve.test.Dockerfile new file mode 100644 index 00000000..19dd8d5d --- /dev/null +++ b/test/test_artifacts/v2/serve.test.Dockerfile @@ -0,0 +1,6 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import fastapi, uvicorn, langchain"] diff --git a/test/test_artifacts/v2/sm-python-sdk.test.Dockerfile b/test/test_artifacts/v2/sm-python-sdk.test.Dockerfile new file mode 100644 index 00000000..623efbf6 --- /dev/null +++ b/test/test_artifacts/v2/sm-python-sdk.test.Dockerfile @@ -0,0 +1,12 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN git clone --recursive https://github.com/aws/sagemaker-python-sdk.git + +# Sagemaker Python SDK's unit tests requires AWS_DEFAULT_REGION to be set. So, using an arbitrary value of us-east-1 +ENV AWS_DEFAULT_REGION=us-east-1 +WORKDIR "sagemaker-python-sdk" +COPY --chown=$MAMBA_USER:$MAMBA_USER scripts/run_pysdk_tests.sh . +RUN chmod +x run_pysdk_tests.sh +CMD ["./run_pysdk_tests.sh"] diff --git a/test/test_artifacts/v2/tensorflow.examples.Dockerfile b/test/test_artifacts/v2/tensorflow.examples.Dockerfile new file mode 100644 index 00000000..7d5d6e64 --- /dev/null +++ b/test/test_artifacts/v2/tensorflow.examples.Dockerfile @@ -0,0 +1,16 @@ +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN sudo apt-get update && \ + sudo apt-get install -y git && \ + git clone --recursive https://github.com/tensorflow/docs.git && \ + : + +WORKDIR "docs/site/en/guide" +COPY --chown=$MAMBA_USER:$MAMBA_USER tensorflow ./ +RUN chmod +x run_tensorflow_example_notebooks.sh + +RUN micromamba install -y --freeze-installed -c conda-forge papermill + +CMD ["./run_tensorflow_example_notebooks.sh"] diff --git a/test/test_artifacts/v2/tensorflow/run_tensorflow_example_notebooks.sh b/test/test_artifacts/v2/tensorflow/run_tensorflow_example_notebooks.sh new file mode 100644 index 00000000..22887459 --- /dev/null +++ b/test/test_artifacts/v2/tensorflow/run_tensorflow_example_notebooks.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Create an empty notebook file for papermill's output +touch nb_output.ipynb + +# List of all referenced notebook files in Basics, Core, and In Depth sections of Tensorflow docs, excluding experimentals. +# https://www.tensorflow.org/guide +example_notebooks=('basics.ipynb' + 'tensor.ipynb' + 'variable.ipynb' + 'autodiff.ipynb' + 'intro_to_graphs.ipynb' + 'intro_to_modules.ipynb' + 'basic_training_loops.ipynb' + 'core/quickstart_core.ipynb' + 'core/logistic_regression_core.ipynb' + 'core/mlp_core.ipynb' + 'core/matrix_core.ipynb' + 'core/optimizers_core.ipynb' + 'tensor_slicing.ipynb' + 'advanced_autodiff.ipynb' + 'ragged_tensor.ipynb' + 'sparse_tensor.ipynb' + 'random_numbers.ipynb' +) + +for nb in ${example_notebooks[@]}; do + papermill $nb 'nb_output.ipynb' +done diff --git a/test/test_dockerfile_based_harness.py b/test/test_dockerfile_based_harness.py index 4a10b6c7..4c605d58 100644 --- a/test/test_dockerfile_based_harness.py +++ b/test/test_dockerfile_based_harness.py @@ -20,6 +20,7 @@ ("keras.test.Dockerfile", ["keras"]), ("autogluon.test.Dockerfile", ["autogluon"]), ("matplotlib.test.Dockerfile", ["matplotlib"]), + ("matplotlib.test.Dockerfile", ["matplotlib-base"]), ("sagemaker-headless-execution-driver.test.Dockerfile", ["sagemaker-headless-execution-driver"]), ("scipy.test.Dockerfile", ["scipy"]), ("numpy.test.Dockerfile", ["numpy"]), @@ -32,7 +33,7 @@ ("jupyter-collaboration.test.Dockerfile", ["jupyter-collaboration"]), ("jupyter-dash.test.Dockerfile", ["jupyter-dash"]), ("jupyterlab-lsp.test.Dockerfile", ["jupyterlab-lsp"]), - ("jupyter-lsp-server.test.Dockerfile", ["jupyter-lsp-server"]), + ("python-lsp-server.test.Dockerfile", ["jupyter-lsp-server"]), ("sagemaker-code-editor.test.Dockerfile", ["sagemaker-code-editor"]), ("notebook.test.Dockerfile", ["notebook"]), ("glue-sessions.test.Dockerfile", ["aws-glue-sessions"]), @@ -42,7 +43,7 @@ ("jupyterlab-git.test.Dockerfile", ["jupyterlab-git"]), ("amazon-sagemaker-sql-magic.test.Dockerfile", ["amazon-sagemaker-sql-magic"]), ("amazon_sagemaker_sql_editor.test.Dockerfile", ["amazon_sagemaker_sql_editor"]), - ("serve.test.Dockerfile", ["serve-langchain"]), + ("serve.test.Dockerfile", ["langchain"]), ("langchain-aws.test.Dockerfile", ["langchain-aws"]), ("mlflow.test.Dockerfile", ["mlflow"]), ("jupyter-activity-monitor-extension.test.Dockerfile", ["jupyter-activity-monitor-extension"]), @@ -61,6 +62,7 @@ def test_dockerfiles_for_cpu( ("keras.test.Dockerfile", ["keras"]), ("autogluon.test.Dockerfile", ["autogluon"]), ("matplotlib.test.Dockerfile", ["matplotlib"]), + ("matplotlib.test.Dockerfile", ["matplotlib-base"]), ("sagemaker-headless-execution-driver.test.Dockerfile", ["sagemaker-headless-execution-driver"]), ("scipy.test.Dockerfile", ["scipy"]), ("numpy.test.Dockerfile", ["numpy"]), @@ -73,7 +75,7 @@ def test_dockerfiles_for_cpu( ("jupyter-ai.test.Dockerfile", ["jupyter-ai"]), ("jupyter-dash.test.Dockerfile", ["jupyter-dash"]), ("jupyterlab-lsp.test.Dockerfile", ["jupyterlab-lsp"]), - ("jupyter-lsp-server.test.Dockerfile", ["jupyter-lsp-server"]), + ("python-lsp-server.test.Dockerfile", ["jupyter-lsp-server"]), ("sagemaker-code-editor.test.Dockerfile", ["sagemaker-code-editor"]), ("notebook.test.Dockerfile", ["notebook"]), ("glue-sessions.test.Dockerfile", ["aws-glue-sessions"]), @@ -83,7 +85,7 @@ def test_dockerfiles_for_cpu( ("jupyterlab-git.test.Dockerfile", ["jupyterlab-git"]), ("amazon-sagemaker-sql-magic.test.Dockerfile", ["amazon-sagemaker-sql-magic"]), ("amazon_sagemaker_sql_editor.test.Dockerfile", ["amazon_sagemaker_sql_editor"]), - ("serve.test.Dockerfile", ["serve-langchain"]), + ("serve.test.Dockerfile", ["langchain"]), ("langchain-aws.test.Dockerfile", ["langchain-aws"]), ("mlflow.test.Dockerfile", ["mlflow"]), ("sagemaker-mlflow.test.Dockerfile", ["sagemaker-mlflow"]), @@ -120,7 +122,9 @@ def _check_required_package_constraints(target_version: Version, required_packag pytest.skip(f"Skipping test because {target_version_dir} does not exist.") # fetch the env.out file for this image_type env_out_file_name = next( - config["env_out_filename"] for config in _image_generator_configs if config["image_type"] == image_type + config["env_out_filename"] + for config in _image_generator_configs[target_version.major] + if config["image_type"] == image_type ) env_out_path = f"{target_version_dir}/{env_out_file_name}" if not os.path.exists(env_out_path): @@ -139,7 +143,9 @@ def _validate_docker_images( _check_docker_file_existence(dockerfile_path, test_artifacts_path) _check_required_package_constraints(target_version, required_packages, image_type) image_tag_generator_from_config = next( - config["image_tag_generator"] for config in _image_generator_configs if config["image_type"] == image_type + config["image_tag_generator"] + for config in _image_generator_configs[target_version.major] + if config["image_type"] == image_type ) docker_image_tag = image_tag_generator_from_config.format(image_version=local_image_version) docker_image_identifier = f"localhost/sagemaker-distribution:{docker_image_tag}" diff --git a/test/test_main.py b/test/test_main.py index 2892dd6a..65909883 100644 --- a/test/test_main.py +++ b/test/test_main.py @@ -110,6 +110,7 @@ def mock_get_dir_for_version(base_version): input_version = get_semver(version) # Create directory for base version input_version_dir = create_and_get_semver_dir(input_version) + print("input_version_dir", input_version_dir) # Create env.in and env.out for base version _create_docker_cpu_env_in_file(input_version_dir + "/cpu.env.in") _create_docker_gpu_env_in_file(input_version_dir + "/gpu.env.in") @@ -225,9 +226,14 @@ def _create_and_assert_patch_version_upgrade( new_version_dir = new_version_dir / ("v" + str(next_version) + "-" + pre_release_identifier) next_major_version_dir_name = "v" + str(next_version.major) if next_version.major == 0: - rel_path.side_effect = [str(base_version_dir / "Dockerfile")] + rel_path.side_effect = [ + str(base_version_dir / "Dockerfile"), + ] else: - rel_path.side_effect = [str(base_version_dir, "Dockerfile"), str(base_version_dir / "dirs")] + rel_path.side_effect = [ + str(base_version_dir / "Dockerfile"), + str(base_version_dir / "dirs"), + ] _create_new_version_artifacts_helper(mocker, tmp_path, input_version, str(next_version)) _create_additional_packages_env_in_file_helper( mocker, tmp_path, str(next_version), include_additional_package, use_existing_package_as_additional_package @@ -304,7 +310,9 @@ def _create_and_assert_minor_version_upgrade( new_version_dir = new_version_dir / ("v" + str(next_version) + "-" + pre_release_identifier) next_major_version_dir_name = "v" + str(next_version.major) if next_version.major == 0: - rel_path.side_effect = [str(tmp_path / "template" / next_major_version_dir_name / "Dockerfile")] + rel_path.side_effect = [ + str(tmp_path / "template" / next_major_version_dir_name / "Dockerfile"), + ] else: rel_path.side_effect = [ str(tmp_path / "template" / next_major_version_dir_name / "Dockerfile"), @@ -385,7 +393,9 @@ def _create_and_assert_major_version_upgrade( new_version_dir = new_version_dir / ("v" + str(next_version) + "-" + pre_release_identifier) next_major_version_dir_name = "v" + str(next_version.major) if next_version.major == 0: - rel_path.side_effect = [str(tmp_path / "template" / next_major_version_dir_name / "Dockerfile")] + rel_path.side_effect = [ + str(tmp_path / "template" / next_major_version_dir_name / "Dockerfile"), + ] else: rel_path.side_effect = [ str(tmp_path / "template" / next_major_version_dir_name / "Dockerfile"), @@ -592,7 +602,7 @@ def test_push_images_upstream_for_public_ecr_repository(mocker): @patch("os.path.exists") def test_get_build_config_for_image(mock_path_exists, tmp_path): input_version_dir = str(tmp_path) + "/v2.0.0" - image_generator_config = _image_generator_configs[0] + image_generator_config = _image_generator_configs[2][0] # Case 1: Mock os.path.exists to return False mock_path_exists.return_value = False assert image_generator_config == _get_config_for_image(input_version_dir, image_generator_config, False) @@ -629,7 +639,7 @@ def test_derive_changeset(tmp_path): expected_upgrades = {"ipykernel": ["6.21.3", "6.21.6"]} expected_new_packages = {"boto3": "1.2"} actual_upgrades, actual_new_packages = derive_changeset( - target_version_dir, source_version_dir, _image_generator_configs[1] + target_version_dir, source_version_dir, _image_generator_configs[1][1] ) assert expected_upgrades == actual_upgrades assert expected_new_packages == actual_new_packages @@ -637,6 +647,7 @@ def test_derive_changeset(tmp_path): def test_generate_release_notes(tmp_path): target_version_dir = str(tmp_path / "v1.0.6") + target_version = get_semver("1.0.6") os.makedirs(target_version_dir) # Create env.in of the target version, which has additional dependency on boto3 target_env_in_packages = "conda-forge::ipykernel\nconda-forge::boto3" @@ -651,7 +662,7 @@ def test_generate_release_notes(tmp_path): _create_docker_gpu_env_in_file(target_version_dir + "/gpu.env.in") _create_docker_gpu_env_out_file(target_version_dir + "/gpu.env.out") # Verify _get_image_type_package_metadata - image_type_package_metadata = _get_image_type_package_metadata(target_version_dir) + image_type_package_metadata = _get_image_type_package_metadata(target_version_dir, target_version) assert len(image_type_package_metadata) == 2 assert image_type_package_metadata["gpu"] == {"numpy": "1.24.2"} assert image_type_package_metadata["cpu"] == {"ipykernel": "6.21.6", "boto3": "1.23.4"} diff --git a/test/test_package_report.py b/test/test_package_report.py index 29155e7f..e7db9cff 100644 --- a/test/test_package_report.py +++ b/test/test_package_report.py @@ -97,9 +97,9 @@ def test_get_installed_package_versions_and_conda_versions(mock_run_command, tmp env_out_file_path = tmp_path / "cpu.env.out" _create_env_out_docker_file(env_out_file_path) # Validate results for patch version release - # _image_generator_configs[1] is for CPU + # _image_generator_configs[0][1] is for v0 CPU match_spec_out, latest_package_versions_in_conda_forge = _get_installed_package_versions_and_conda_versions( - _image_generator_configs[1], str(tmp_path), get_semver("0.4.2") + _image_generator_configs[0][1], str(tmp_path), get_semver("0.4.2") ) ipykernel_match_spec = match_spec_out["ipykernel"] assert str(ipykernel_match_spec.get("version")).removeprefix("==") == "6.21.3" @@ -109,7 +109,7 @@ def test_get_installed_package_versions_and_conda_versions(mock_run_command, tmp assert latest_package_versions_in_conda_forge["numpy"] == "1.24.3" # Validate results for minor version release match_spec_out, latest_package_versions_in_conda_forge = _get_installed_package_versions_and_conda_versions( - _image_generator_configs[1], str(tmp_path), get_semver("0.5.0") + _image_generator_configs[0][1], str(tmp_path), get_semver("0.5.0") ) ipykernel_match_spec = match_spec_out["ipykernel"] assert str(ipykernel_match_spec.get("version")).removeprefix("==") == "6.21.3" @@ -120,7 +120,7 @@ def test_get_installed_package_versions_and_conda_versions(mock_run_command, tmp assert latest_package_versions_in_conda_forge["numpy"] == "1.26.0" # Validate results for major version release match_spec_out, latest_package_versions_in_conda_forge = _get_installed_package_versions_and_conda_versions( - _image_generator_configs[1], str(tmp_path), get_semver("1.0.0") + _image_generator_configs[1][1], str(tmp_path), get_semver("1.0.0") ) ipykernel_match_spec = match_spec_out["ipykernel"] assert str(ipykernel_match_spec.get("version")).removeprefix("==") == "6.21.3" @@ -136,7 +136,7 @@ def test_generate_package_size_report(capsys): target_pkg_metadata = _create_target_image_package_metadata() _generate_python_package_size_report_per_image( - base_pkg_metadata, target_pkg_metadata, _image_generator_configs[1], "1.6.1", "1.6.2" + base_pkg_metadata, target_pkg_metadata, _image_generator_configs[1][1], "1.6.1", "1.6.2" ) captured = capsys.readouterr() @@ -166,7 +166,7 @@ def test_generate_package_size_report_when_base_version_is_not_present(capsys): target_pkg_metadata = _create_target_image_package_metadata() _generate_python_package_size_report_per_image( - None, target_pkg_metadata, _image_generator_configs[1], None, "1.6.2" + None, target_pkg_metadata, _image_generator_configs[1][1], None, "1.6.2" ) captured = capsys.readouterr()