From f475aa8b64d16dad542de510466a3f1ab14e5ef3 Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Mon, 4 Mar 2024 11:59:53 -0500 Subject: [PATCH 01/32] fix: Use correct codebuild role (#192) --- .github/workflows/build-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index b83981d6..54494308 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -88,7 +88,7 @@ jobs: - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v4 with: - role-to-assume: arn:aws:iam::700843992353:role/codebuild-start-build-role + role-to-assume: ${{ secrets.START_CODEBUILD_ROLE }} aws-region: us-west-2 # CodeBuild timeout of 8 hours role-duration-seconds: 3840 From 166d95bb76e6d8cf555d5245b292dffc55d87b4d Mon Sep 17 00:00:00 2001 From: xuanliy <86687057+EvelynYan21@users.noreply.github.com> Date: Mon, 4 Mar 2024 11:13:46 -0800 Subject: [PATCH 02/32] feature: Add jupyter_ydoc and jupyter_server_fileid (#198) --- .../v1/v1.6/v1.6.0/cpu.additional_packages_env.in | 2 ++ .../v1/v1.6/v1.6.0/gpu.additional_packages_env.in | 2 ++ .../v1/jupyter-server-fileid.test.Dockerfile | 6 ++++++ test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile | 6 ++++++ test/test_dockerfile_based_harness.py | 8 ++++++-- 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in create mode 100644 test/test_artifacts/v1/jupyter-server-fileid.test.Dockerfile create mode 100644 test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile diff --git a/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in b/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in new file mode 100644 index 00000000..93f4c0cc --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in @@ -0,0 +1,2 @@ +conda-forge::jupyter_server_fileid +conda-forge::jupyter_ydoc \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in b/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in new file mode 100644 index 00000000..93f4c0cc --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in @@ -0,0 +1,2 @@ +conda-forge::jupyter_server_fileid +conda-forge::jupyter_ydoc \ No newline at end of file diff --git a/test/test_artifacts/v1/jupyter-server-fileid.test.Dockerfile b/test/test_artifacts/v1/jupyter-server-fileid.test.Dockerfile new file mode 100644 index 00000000..902279d5 --- /dev/null +++ b/test/test_artifacts/v1/jupyter-server-fileid.test.Dockerfile @@ -0,0 +1,6 @@ +ARG COSMOS_IMAGE +FROM $COSMOS_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import jupyter_server_fileid"] \ No newline at end of file diff --git a/test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile b/test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile new file mode 100644 index 00000000..27d5cec6 --- /dev/null +++ b/test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile @@ -0,0 +1,6 @@ +ARG COSMOS_IMAGE +FROM $COSMOS_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "from jupyter_ydoc import YBlob; yblob = YBlob(); assert yblob.get() == b''; yblob.set(b'012'); assert yblob.get() == b'012'"] \ No newline at end of file diff --git a/test/test_dockerfile_based_harness.py b/test/test_dockerfile_based_harness.py index bbaa4575..0f47d04b 100644 --- a/test/test_dockerfile_based_harness.py +++ b/test/test_dockerfile_based_harness.py @@ -38,7 +38,9 @@ ("sagemaker-studio-analytics-extension.test.Dockerfile", ['sagemaker-studio-analytics-extension']), ("amazon-codewhisperer-jupyterlab-ext.test.Dockerfile", ['amazon-codewhisperer-jupyterlab-ext']), ("jupyterlab-git.test.Dockerfile", ['jupyterlab-git']), - ("serve.test.Dockerfile", ['serve-langchain'])]) + ("serve.test.Dockerfile", ['serve-langchain']), + ("jupyter-server-fileid.test.Dockerfile", ['jupyter_server_fileid']), + ("jupyter-ydoc.test.Dockerfile", ['jupyter_ydoc'])]) def test_dockerfiles_for_cpu(dockerfile_path: str, required_packages: List[str], local_image_version: str, use_gpu: bool): _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, 'cpu') @@ -68,7 +70,9 @@ def test_dockerfiles_for_cpu(dockerfile_path: str, required_packages: List[str], ("sagemaker-studio-analytics-extension.test.Dockerfile", ['sagemaker-studio-analytics-extension']), ("amazon-codewhisperer-jupyterlab-ext.test.Dockerfile", ['amazon-codewhisperer-jupyterlab-ext']), ("jupyterlab-git.test.Dockerfile", ['jupyterlab-git']), - ("serve.test.Dockerfile", ['serve-langchain'])]) + ("serve.test.Dockerfile", ['serve-langchain']), + ("jupyter-server-fileid.test.Dockerfile", ['jupyter_server_fileid']), + ("jupyter-ydoc.test.Dockerfile", ['jupyter_ydoc'])]) def test_dockerfiles_for_gpu(dockerfile_path: str, required_packages: List[str], local_image_version: str, use_gpu: bool): _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, 'gpu') From 75def7c2cdd9dbf1fbcd3f77e103081984bc3208 Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Mon, 4 Mar 2024 16:40:58 -0500 Subject: [PATCH 03/32] feature: Add OpenSSL FIPS provider (#186) --- README.md | 9 +++++++++ template/v0/Dockerfile | 29 +++++++++++++++++++++++++++++ template/v1/Dockerfile | 29 +++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/README.md b/README.md index 67e99493..a590ab2a 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,15 @@ USER $MAMBA_USER RUN micromamba install sagemaker-inference --freeze-installed --yes --channel conda-forge --name base ``` +## FIPS + +As of sagemaker-distribution: v0.12+, v1.6+, and v2+, the images come with FIPS 140-2 validated openssl provider +available for use. You can enable the FIPS provider by running: + +`export OPENSSL_CONF=/opt/conda/ssl/openssl-fips.cnf` + +For more info on the FIPS provider see: https://github.com/openssl/openssl/blob/master/README-FIPS.md + ## Security See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information. diff --git a/template/v0/Dockerfile b/template/v0/Dockerfile index 8746f7a3..4af0dc89 100644 --- a/template/v0/Dockerfile +++ b/template/v0/Dockerfile @@ -10,6 +10,9 @@ 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/" @@ -97,6 +100,32 @@ USER $MAMBA_USER ENV PATH="/opt/conda/bin:/opt/conda/condabin:$PATH" WORKDIR "/home/${NB_USER}" +# 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/ +RUN 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 +RUN 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 +ENV OPENSSL_MODULES=/opt/conda/lib64/ossl-modules/ + # Install Kerberos. # Make sure no dependency is added/updated RUN pip install "krb5>=0.5.1,<0.6" && \ diff --git a/template/v1/Dockerfile b/template/v1/Dockerfile index 40a79752..e892d470 100644 --- a/template/v1/Dockerfile +++ b/template/v1/Dockerfile @@ -12,6 +12,9 @@ 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/" @@ -107,6 +110,32 @@ USER $MAMBA_USER ENV PATH="/opt/conda/bin:/opt/conda/condabin:$PATH" WORKDIR "/home/${NB_USER}" +# 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/ +RUN 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 +RUN 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 +ENV OPENSSL_MODULES=/opt/conda/lib64/ossl-modules/ + # Install Kerberos. # Make sure no dependency is added/updated RUN pip install "krb5>=0.5.1,<0.6" && \ From 4fd13e2a43f4e1e38a9ff0fe341e948ad3945c1a Mon Sep 17 00:00:00 2001 From: Justin Brown Date: Thu, 29 Feb 2024 20:00:05 +0000 Subject: [PATCH 04/32] Add installations for cron and less utilities --- template/v0/Dockerfile | 3 ++- template/v1/Dockerfile | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/template/v0/Dockerfile b/template/v0/Dockerfile index 4af0dc89..3b5c3c55 100644 --- a/template/v0/Dockerfile +++ b/template/v0/Dockerfile @@ -15,6 +15,7 @@ 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}" && \ @@ -27,7 +28,7 @@ ENV MAMBA_USER=$NB_USER ENV USER=$NB_USER RUN apt-get update && \ - apt-get install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client && \ + apt-get install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client nano cron less && \ # 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 && \ diff --git a/template/v1/Dockerfile b/template/v1/Dockerfile index e892d470..06001a53 100644 --- a/template/v1/Dockerfile +++ b/template/v1/Dockerfile @@ -17,6 +17,7 @@ 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}" && \ @@ -29,7 +30,7 @@ ENV MAMBA_USER=$NB_USER ENV USER=$NB_USER RUN apt-get update && \ - apt-get install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client nano && \ + apt-get install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client nano cron less && \ # 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 && \ From b61097192de2dfa2468974694d05ccaf62d870a5 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Wed, 6 Mar 2024 01:30:18 -0800 Subject: [PATCH 05/32] feature: Add dependencies for amazon-sagemaker-sql extension --- .../v1/v1.6/v1.6.0/cpu.additional_packages_env.in | 4 +++- .../v1/v1.6/v1.6.0/gpu.additional_packages_env.in | 4 +++- .../v1/amazon-sagemaker-sql-magic.test.Dockerfile | 6 ++++++ .../v1/amazon_sagemaker_sql_editor.test.Dockerfile | 6 ++++++ test/test_dockerfile_based_harness.py | 8 ++++++-- 5 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 test/test_artifacts/v1/amazon-sagemaker-sql-magic.test.Dockerfile create mode 100644 test/test_artifacts/v1/amazon_sagemaker_sql_editor.test.Dockerfile diff --git a/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in b/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in index 93f4c0cc..924f89a8 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in +++ b/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in @@ -1,2 +1,4 @@ conda-forge::jupyter_server_fileid -conda-forge::jupyter_ydoc \ No newline at end of file +conda-forge::jupyter_ydoc +conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.0,<2'] +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<2'] \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in b/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in index 93f4c0cc..924f89a8 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in +++ b/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in @@ -1,2 +1,4 @@ conda-forge::jupyter_server_fileid -conda-forge::jupyter_ydoc \ No newline at end of file +conda-forge::jupyter_ydoc +conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.0,<2'] +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<2'] \ No newline at end of file diff --git a/test/test_artifacts/v1/amazon-sagemaker-sql-magic.test.Dockerfile b/test/test_artifacts/v1/amazon-sagemaker-sql-magic.test.Dockerfile new file mode 100644 index 00000000..44679eb8 --- /dev/null +++ b/test/test_artifacts/v1/amazon-sagemaker-sql-magic.test.Dockerfile @@ -0,0 +1,6 @@ +ARG COSMOS_IMAGE +FROM $COSMOS_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import amazon_sagemaker_sql_magic"] diff --git a/test/test_artifacts/v1/amazon_sagemaker_sql_editor.test.Dockerfile b/test/test_artifacts/v1/amazon_sagemaker_sql_editor.test.Dockerfile new file mode 100644 index 00000000..635358bf --- /dev/null +++ b/test/test_artifacts/v1/amazon_sagemaker_sql_editor.test.Dockerfile @@ -0,0 +1,6 @@ +ARG COSMOS_IMAGE +FROM $COSMOS_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["python", "-c", "import amazon_sagemaker_sql_editor"] diff --git a/test/test_dockerfile_based_harness.py b/test/test_dockerfile_based_harness.py index 0f47d04b..9f881393 100644 --- a/test/test_dockerfile_based_harness.py +++ b/test/test_dockerfile_based_harness.py @@ -40,7 +40,9 @@ ("jupyterlab-git.test.Dockerfile", ['jupyterlab-git']), ("serve.test.Dockerfile", ['serve-langchain']), ("jupyter-server-fileid.test.Dockerfile", ['jupyter_server_fileid']), - ("jupyter-ydoc.test.Dockerfile", ['jupyter_ydoc'])]) + ("jupyter-ydoc.test.Dockerfile", ['jupyter_ydoc'])], + ("amazon-sagemaker-sql-magic.test.Dockerfile", ['amazon-sagemaker-sql-magic']), + ("amazon_sagemaker_sql_editor.test.Dockerfile", ['amazon_sagemaker_sql_editor'])) def test_dockerfiles_for_cpu(dockerfile_path: str, required_packages: List[str], local_image_version: str, use_gpu: bool): _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, 'cpu') @@ -72,7 +74,9 @@ def test_dockerfiles_for_cpu(dockerfile_path: str, required_packages: List[str], ("jupyterlab-git.test.Dockerfile", ['jupyterlab-git']), ("serve.test.Dockerfile", ['serve-langchain']), ("jupyter-server-fileid.test.Dockerfile", ['jupyter_server_fileid']), - ("jupyter-ydoc.test.Dockerfile", ['jupyter_ydoc'])]) + ("jupyter-ydoc.test.Dockerfile", ['jupyter_ydoc'])], + ("amazon-sagemaker-sql-magic.test.Dockerfile", ['amazon-sagemaker-sql-magic']), + ("amazon_sagemaker_sql_editor.test.Dockerfile", ['amazon_sagemaker_sql_editor'])) def test_dockerfiles_for_gpu(dockerfile_path: str, required_packages: List[str], local_image_version: str, use_gpu: bool): _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, 'gpu') From d0b3ec7f261121da035c1e13d8bbb306fa695c28 Mon Sep 17 00:00:00 2001 From: Bhupendra Singh Date: Mon, 11 Mar 2024 14:36:38 -0700 Subject: [PATCH 06/32] Added condition to run jupyterlab in RTC mode (#194) --- .../v1/dirs/usr/local/bin/start-jupyter-server | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/template/v1/dirs/usr/local/bin/start-jupyter-server b/template/v1/dirs/usr/local/bin/start-jupyter-server index 3b04daf1..d322481b 100755 --- a/template/v1/dirs/usr/local/bin/start-jupyter-server +++ b/template/v1/dirs/usr/local/bin/start-jupyter-server @@ -6,8 +6,22 @@ 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" ] && [ -n "$SAGEMAKER_SPACE_TYPE_LOWERCASE" == "shared" ]; then + # 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 -if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ]; then +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 \ From b086e9dc81a88bb3641e678cb4563983fe5919f2 Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:37:55 -0400 Subject: [PATCH 07/32] Revert "feature: Add jupyter_ydoc and jupyter_server_fileid (#198)" (#246) --- .../v1/v1.6/v1.6.0/cpu.additional_packages_env.in | 4 +--- .../v1/v1.6/v1.6.0/gpu.additional_packages_env.in | 4 +--- .../v1/jupyter-server-fileid.test.Dockerfile | 6 ------ test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile | 6 ------ test/test_dockerfile_based_harness.py | 12 ++++-------- 5 files changed, 6 insertions(+), 26 deletions(-) delete mode 100644 test/test_artifacts/v1/jupyter-server-fileid.test.Dockerfile delete mode 100644 test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile diff --git a/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in b/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in index 924f89a8..da501cc0 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in +++ b/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in @@ -1,4 +1,2 @@ -conda-forge::jupyter_server_fileid -conda-forge::jupyter_ydoc conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.0,<2'] -conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<2'] \ No newline at end of file +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<2'] diff --git a/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in b/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in index 924f89a8..da501cc0 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in +++ b/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in @@ -1,4 +1,2 @@ -conda-forge::jupyter_server_fileid -conda-forge::jupyter_ydoc conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.0,<2'] -conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<2'] \ No newline at end of file +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<2'] diff --git a/test/test_artifacts/v1/jupyter-server-fileid.test.Dockerfile b/test/test_artifacts/v1/jupyter-server-fileid.test.Dockerfile deleted file mode 100644 index 902279d5..00000000 --- a/test/test_artifacts/v1/jupyter-server-fileid.test.Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE - -ARG MAMBA_DOCKERFILE_ACTIVATE=1 - -CMD ["python", "-c", "import jupyter_server_fileid"] \ No newline at end of file diff --git a/test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile b/test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile deleted file mode 100644 index 27d5cec6..00000000 --- a/test/test_artifacts/v1/jupyter-ydoc.test.Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE - -ARG MAMBA_DOCKERFILE_ACTIVATE=1 - -CMD ["python", "-c", "from jupyter_ydoc import YBlob; yblob = YBlob(); assert yblob.get() == b''; yblob.set(b'012'); assert yblob.get() == b'012'"] \ No newline at end of file diff --git a/test/test_dockerfile_based_harness.py b/test/test_dockerfile_based_harness.py index 9f881393..5b30df29 100644 --- a/test/test_dockerfile_based_harness.py +++ b/test/test_dockerfile_based_harness.py @@ -38,11 +38,9 @@ ("sagemaker-studio-analytics-extension.test.Dockerfile", ['sagemaker-studio-analytics-extension']), ("amazon-codewhisperer-jupyterlab-ext.test.Dockerfile", ['amazon-codewhisperer-jupyterlab-ext']), ("jupyterlab-git.test.Dockerfile", ['jupyterlab-git']), - ("serve.test.Dockerfile", ['serve-langchain']), - ("jupyter-server-fileid.test.Dockerfile", ['jupyter_server_fileid']), - ("jupyter-ydoc.test.Dockerfile", ['jupyter_ydoc'])], ("amazon-sagemaker-sql-magic.test.Dockerfile", ['amazon-sagemaker-sql-magic']), - ("amazon_sagemaker_sql_editor.test.Dockerfile", ['amazon_sagemaker_sql_editor'])) + ("amazon_sagemaker_sql_editor.test.Dockerfile", ['amazon_sagemaker_sql_editor']), + ("serve.test.Dockerfile", ['serve-langchain'])]) def test_dockerfiles_for_cpu(dockerfile_path: str, required_packages: List[str], local_image_version: str, use_gpu: bool): _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, 'cpu') @@ -72,11 +70,9 @@ def test_dockerfiles_for_cpu(dockerfile_path: str, required_packages: List[str], ("sagemaker-studio-analytics-extension.test.Dockerfile", ['sagemaker-studio-analytics-extension']), ("amazon-codewhisperer-jupyterlab-ext.test.Dockerfile", ['amazon-codewhisperer-jupyterlab-ext']), ("jupyterlab-git.test.Dockerfile", ['jupyterlab-git']), - ("serve.test.Dockerfile", ['serve-langchain']), - ("jupyter-server-fileid.test.Dockerfile", ['jupyter_server_fileid']), - ("jupyter-ydoc.test.Dockerfile", ['jupyter_ydoc'])], ("amazon-sagemaker-sql-magic.test.Dockerfile", ['amazon-sagemaker-sql-magic']), - ("amazon_sagemaker_sql_editor.test.Dockerfile", ['amazon_sagemaker_sql_editor'])) + ("amazon_sagemaker_sql_editor.test.Dockerfile", ['amazon_sagemaker_sql_editor']), + ("serve.test.Dockerfile", ['serve-langchain'])]) def test_dockerfiles_for_gpu(dockerfile_path: str, required_packages: List[str], local_image_version: str, use_gpu: bool): _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, 'gpu') From 3ae1d7ecdb38443ab83527bdf2b7a1df155acded Mon Sep 17 00:00:00 2001 From: Bhupendra Singh Date: Tue, 12 Mar 2024 15:47:52 -0700 Subject: [PATCH 08/32] fix: Fix jupyter-server start script (#245) --- template/v1/dirs/usr/local/bin/start-jupyter-server | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/v1/dirs/usr/local/bin/start-jupyter-server b/template/v1/dirs/usr/local/bin/start-jupyter-server index d322481b..377a86d4 100755 --- a/template/v1/dirs/usr/local/bin/start-jupyter-server +++ b/template/v1/dirs/usr/local/bin/start-jupyter-server @@ -7,7 +7,7 @@ eval "$(micromamba shell hook --shell=bash)" micromamba activate base # Start Jupyter server in rtc mode for shared spaces -if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ] && [ -n "$SAGEMAKER_SPACE_TYPE_LOWERCASE" == "shared" ]; then +if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ] && [ "$SAGEMAKER_SPACE_TYPE_LOWERCASE" == "shared" ]; then # 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 From 34adce22c27bb9debe6797a063e8fd6c11d28910 Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Wed, 13 Mar 2024 18:47:02 -0400 Subject: [PATCH 09/32] release: v1.6.0 (#247) --- .../v1/v1.6/v1.6.0/CHANGELOG-cpu.md | 21 + .../v1/v1.6/v1.6.0/CHANGELOG-gpu.md | 21 + build_artifacts/v1/v1.6/v1.6.0/Dockerfile | 157 ++++ build_artifacts/v1/v1.6/v1.6.0/RELEASE.md | 55 ++ build_artifacts/v1/v1.6/v1.6.0/cpu.env.in | 50 ++ build_artifacts/v1/v1.6/v1.6.0/cpu.env.out | 660 +++++++++++++++++ .../v1/v1.6/v1.6.0/dirs/etc/conda/.condarc | 6 + .../dirs/etc/jupyter/jupyter_server_config.py | 16 + .../etc/supervisor/conf.d/supervisord.conf | 27 + .../usr/local/bin/entrypoint-jupyter-server | 19 + .../dirs/usr/local/bin/restart-jupyter-server | 6 + .../dirs/usr/local/bin/start-jupyter-server | 35 + .../v1/v1.6/v1.6.0/gpu.arg_based_env.in | 1 + build_artifacts/v1/v1.6/v1.6.0/gpu.env.in | 50 ++ build_artifacts/v1/v1.6/v1.6.0/gpu.env.out | 668 ++++++++++++++++++ .../v1/v1.6/v1.6.0/patch_glue_pyspark.json | 15 + .../v1/v1.6/v1.6.0/patch_glue_spark.json | 15 + .../v1/v1.6/v1.6.0/source-version.txt | 1 + 18 files changed, 1823 insertions(+) create mode 100644 build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-cpu.md create mode 100644 build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-gpu.md create mode 100644 build_artifacts/v1/v1.6/v1.6.0/Dockerfile create mode 100644 build_artifacts/v1/v1.6/v1.6.0/RELEASE.md create mode 100644 build_artifacts/v1/v1.6/v1.6.0/cpu.env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.0/cpu.env.out create mode 100644 build_artifacts/v1/v1.6/v1.6.0/dirs/etc/conda/.condarc create mode 100644 build_artifacts/v1/v1.6/v1.6.0/dirs/etc/jupyter/jupyter_server_config.py create mode 100644 build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord.conf create mode 100755 build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/entrypoint-jupyter-server create mode 100755 build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/restart-jupyter-server create mode 100755 build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/start-jupyter-server create mode 100644 build_artifacts/v1/v1.6/v1.6.0/gpu.arg_based_env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.0/gpu.env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.0/gpu.env.out create mode 100644 build_artifacts/v1/v1.6/v1.6.0/patch_glue_pyspark.json create mode 100644 build_artifacts/v1/v1.6/v1.6.0/patch_glue_spark.json create mode 100644 build_artifacts/v1/v1.6/v1.6.0/source-version.txt diff --git a/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-cpu.md b/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-cpu.md new file mode 100644 index 00000000..9b40da67 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-cpu.md @@ -0,0 +1,21 @@ +# Change log: 1.6.0(cpu) + +## Upgrades: + +Package | Previous Version | Current Version +---|---|--- +boto3|1.28.64|1.34.51 +ipython|8.21.0|8.22.2 +jupyter-lsp|2.2.3|2.2.4 +jupyterlab|4.1.2|4.1.4 +jupyter-ai|2.9.1|2.11.0 +nodejs|18.18.2|18.19.0 +sagemaker-python-sdk|2.198.1|2.212.0 +uvicorn|0.27.1|0.28.0 + +## What's new: + +Package | Version +---|--- +amazon-sagemaker-sql-magic|0.1.0 +amazon_sagemaker_sql_editor|0.1.3 diff --git a/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-gpu.md b/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-gpu.md new file mode 100644 index 00000000..11c91d04 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-gpu.md @@ -0,0 +1,21 @@ +# Change log: 1.6.0(gpu) + +## Upgrades: + +Package | Previous Version | Current Version +---|---|--- +boto3|1.28.64|1.34.51 +ipython|8.21.0|8.22.2 +jupyter-lsp|2.2.3|2.2.4 +jupyterlab|4.1.2|4.1.4 +jupyter-ai|2.9.1|2.11.0 +nodejs|18.18.2|18.19.0 +sagemaker-python-sdk|2.198.1|2.212.0 +uvicorn|0.27.1|0.28.0 + +## What's new: + +Package | Version +---|--- +amazon-sagemaker-sql-magic|0.1.0 +amazon_sagemaker_sql_editor|0.1.3 diff --git a/build_artifacts/v1/v1.6/v1.6.0/Dockerfile b/build_artifacts/v1/v1.6/v1.6.0/Dockerfile new file mode 100644 index 00000000..06001a53 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/Dockerfile @@ -0,0 +1,157 @@ +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 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 install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client nano cron less && \ + # 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 && \ + : +RUN echo "source /usr/local/bin/_activate_current_env.sh" | tee --append /etc/profile + +USER $MAMBA_USER +COPY --chown=$MAMBA_USER:$MAMBA_USER $ENV_IN_FILENAME *.in /tmp/ + +# 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 + +ARG CONDA_OVERRIDE_CUDA=$CUDA_MAJOR_MINOR_VERSION +RUN micromamba install -y --name base --file /tmp/$ENV_IN_FILENAME && \ + micromamba clean --all --yes --force-pkgs-dirs && \ + rm -rf /tmp/*.in + + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN sudo ln -s $(which python3) /usr/bin/python + +# Install glue kernels, and move to shared directory +# Also patching base kernel so Studio background code doesn't start session silently +RUN 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" + + +# 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 +RUN 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* + +# Merge in OS directory tree contents. +RUN 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} + +# 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} + +# Create supervisord runtime directory +RUN mkdir -p /var/run/supervisord && \ + chmod a+rw /var/run/supervisord + +USER $MAMBA_USER +ENV PATH="/opt/conda/bin:/opt/conda/condabin:$PATH" +WORKDIR "/home/${NB_USER}" + +# 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/ +RUN 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 +RUN 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 +ENV OPENSSL_MODULES=/opt/conda/lib64/ossl-modules/ + +# Install Kerberos. +# Make sure no dependency is added/updated +RUN 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 +RUN 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 + +ENV SHELL=/bin/bash diff --git a/build_artifacts/v1/v1.6/v1.6.0/RELEASE.md b/build_artifacts/v1/v1.6/v1.6.0/RELEASE.md new file mode 100644 index 00000000..7edf5c96 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/RELEASE.md @@ -0,0 +1,55 @@ +# Release notes: 1.6.0 + +Package | gpu| cpu +---|---|--- +python|3.10.13|3.10.13 +numpy|1.26.4|1.26.4 +jinja2|3.1.3|3.1.3 +pandas|2.1.4|2.1.4 +altair|5.2.0|5.2.0 +boto3|1.34.51|1.34.51 +ipython|8.22.2|8.22.2 +jupyter-lsp|2.2.4|2.2.4 +jupyterlab|4.1.4|4.1.4 +amazon-codewhisperer-jupyterlab-ext|2.0.1|2.0.1 +jupyter-scheduler|2.5.1|2.5.1 +amazon-sagemaker-jupyter-scheduler|3.0.7|3.0.7 +amazon-sagemaker-sql-magic|0.1.0|0.1.0 +jupyterlab-lsp|5.0.3|5.0.3 +amazon_sagemaker_sql_editor|0.1.3|0.1.3 +scipy|1.11.4|1.11.4 +scikit-learn|1.4.1.post1|1.4.1.post1 +pip|23.3.2|23.3.2 +torchvision|0.15.2|0.15.2 +autogluon|0.8.2|0.8.2 +ipywidgets|8.1.2|8.1.2 +notebook|7.1.1|7.1.1 +aws-glue-sessions|1.0.4|1.0.4 +conda|23.11.0|23.11.0 +fastapi|0.103.2|0.103.2 +langchain|0.1.9|0.1.9 +jupyter-ai|2.11.0|2.11.0 +jupyter-dash|0.4.2|0.4.2 +jupyter-server-proxy|4.1.0|4.1.0 +jupyterlab-git|0.50.0|0.50.0 +keras|2.12.0|2.12.0 +matplotlib|3.8.3|3.8.3 +nodejs|18.19.0|18.19.0 +py-xgboost-gpu|1.7.6| +thrift_sasl|0.4.3|0.4.3 +pyhive|0.7.0|0.7.0 +python-gssapi|1.8.3|1.8.3 +python-lsp-server|1.10.0|1.10.0 +pytorch-gpu|2.0.0| +sagemaker-headless-execution-driver|0.0.12|0.0.12 +sagemaker-jupyterlab-emr-extension|0.1.9|0.1.9 +sagemaker-jupyterlab-extension|0.2.0|0.2.0 +sagemaker-kernel-wrapper|0.0.2|0.0.2 +sagemaker-python-sdk|2.212.0|2.212.0 +sagemaker-studio-analytics-extension|0.0.21|0.0.21 +sasl|0.3.1|0.3.1 +supervisor|4.2.5|4.2.5 +tensorflow|2.12.1|2.12.1 +uvicorn|0.28.0|0.28.0 +pytorch| |2.0.0 +py-xgboost-cpu| |1.7.6 diff --git a/build_artifacts/v1/v1.6/v1.6.0/cpu.env.in b/build_artifacts/v1/v1.6/v1.6.0/cpu.env.in new file mode 100644 index 00000000..bcf75dc3 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/cpu.env.in @@ -0,0 +1,50 @@ +# This file is auto-generated. +conda-forge::amazon_sagemaker_sql_editor +conda-forge::amazon-sagemaker-sql-magic +conda-forge::langchain[version='>=0.1.9,<1.0.0'] +conda-forge::fastapi[version='>=0.103.2,<1.0.0'] +conda-forge::uvicorn[version='>=0.27.1,<1.0.0'] +conda-forge::pytorch[version='>=2.0.0,<3.0.0'] +conda-forge::tensorflow[version='>=2.12.1,<3.0.0'] +conda-forge::python[version='>=3.10.13,<3.11.0'] +conda-forge::pip[version='>=23.3.2,<24.0.0'] +conda-forge::torchvision[version='>=0.15.2,<1.0.0'] +conda-forge::numpy[version='>=1.26.4,<2.0.0'] +conda-forge::pandas[version='>=2.1.4,<3.0.0'] +conda-forge::scikit-learn[version='>=1.4.1.post1,<2.0.0'] +conda-forge::jinja2[version='>=3.1.3,<4.0.0'] +conda-forge::matplotlib[version='>=3.8.3,<4.0.0'] +conda-forge::sagemaker-headless-execution-driver[version='>=0.0.12,<1.0.0'] +conda-forge::ipython[version='>=8.21.0,<9.0.0'] +conda-forge::scipy[version='>=1.11.4,<2.0.0'] +conda-forge::keras[version='>=2.12.0,<3.0.0'] +conda-forge::py-xgboost-cpu[version='>=1.7.6,<2.0.0'] +conda-forge::jupyterlab[version='>=4.1.2,<5.0.0'] +conda-forge::ipywidgets[version='>=8.1.2,<9.0.0'] +conda-forge::conda[version='>=23.11.0,<24.0.0'] +conda-forge::boto3[version='>=1.28.64,<2.0.0'] +conda-forge::sagemaker-python-sdk[version='>=2.198.1,<3.0.0'] +conda-forge::supervisor[version='>=4.2.5,<5.0.0'] +conda-forge::autogluon[version='>=0.8.2,<1.0.0'] +conda-forge::aws-glue-sessions[version='>=1.0.4,<2.0.0'] +conda-forge::sagemaker-kernel-wrapper[version='>=0.0.2,<1.0.0'] +conda-forge::jupyter-ai[version='>=2.9.1,<3.0.0'] +conda-forge::jupyter-scheduler[version='>=2.5.1,<3.0.0'] +conda-forge::nodejs[version='>=18.18.2,<19.0.0'] +conda-forge::jupyter-lsp[version='>=2.2.3,<3.0.0'] +conda-forge::jupyterlab-lsp[version='>=5.0.3,<6.0.0'] +conda-forge::python-lsp-server[version='>=1.10.0,<2.0.0'] +conda-forge::notebook[version='>=7.1.1,<8.0.0'] +conda-forge::altair[version='>=5.2.0,<6.0.0'] +conda-forge::sagemaker-studio-analytics-extension[version='>=0.0.21,<1.0.0'] +conda-forge::jupyter-dash[version='>=0.4.2,<1.0.0'] +conda-forge::sagemaker-jupyterlab-extension[version='>=0.2.0,<1.0.0'] +conda-forge::sagemaker-jupyterlab-emr-extension[version='>=0.1.9,<1.0.0'] +conda-forge::amazon-sagemaker-jupyter-scheduler[version='>=3.0.7,<4.0.0'] +conda-forge::jupyter-server-proxy[version='>=4.1.0,<5.0.0'] +conda-forge::amazon-codewhisperer-jupyterlab-ext[version='>=2.0.1,<3.0.0'] +conda-forge::jupyterlab-git[version='>=0.50.0,<1.0.0'] +conda-forge::sasl[version='>=0.3.1,<1.0.0'] +conda-forge::thrift_sasl[version='>=0.4.3,<1.0.0'] +conda-forge::pyhive[version='>=0.7.0,<1.0.0'] +conda-forge::python-gssapi[version='>=1.8.3,<2.0.0'] diff --git a/build_artifacts/v1/v1.6/v1.6.0/cpu.env.out b/build_artifacts/v1/v1.6/v1.6.0/cpu.env.out new file mode 100644 index 00000000..8ab4700b --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/cpu.env.out @@ -0,0 +1,660 @@ +# 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-13.2.0-h807b86a_5.conda#d4ff227c46917d3b4565302a2bbb276b +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda#f6f6600d18a4047b54f803cf708b868a +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-17.0.6-h4dfa4b3_0.conda#c1665f9c1c9f6c93d8b4e492a6a39056 +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-hd590300_5.conda#69b8b6202a07720f448be700e300ccf4 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 +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.45.2-h2797004_0.conda#866983a220e27a80cb75e85cb30466a1 +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.4-h59595ed_2.conda#7dbaa197d7ba6032caf7ae7f32c1efa0 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_0.conda#51a753e64a3027bd7e23a189b1f6e91e +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.10.13-hd12c33a_1_cpython.conda#ed38140af93f81319ebc472fbcf16cca +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-13.2.0-ha4646dd_5.conda#7a6bd7a12a4bd359e2afe6c0fa1acace +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda#e73e9cfd1191783392131e6238bdb3e9 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda#26322ec5d7712c3ded99dd656142b8ce +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda#6593de64c935768b6bad3e19b3e978be +https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py310h2372a71_0.conda#bd19b3096442ea342c4a5208379660b1 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda#0c1729b74a8152fde6a38ba0a2ab9f45 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py310h2372a71_0.conda#f6703fa0214a00bf49d1bef6dc7672d0 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda#e7d8df6509ba635247ff9aea31134262 +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-3.21.12-hfc55251_2.conda#e3a7d4ba09b8dc939b98fef55f539220 +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2 +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff +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.5-h232c23b_0.conda#c442ebfda7a475f5e78f1c8e45f1e919 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda#f36ddc11ca46958197a45effdd286e45 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_1.conda#4531d2927578e7e254ff3bcf6457518c +https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda#a7ce56d5757f5b57e7daabe703ade5bb +https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda#425fce3b531bed6ec3c74fab3e5f0a1c +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.5.1-h9b69904_2.tar.bz2#6e016cf4c525d04a7bd038cee53ad3fd +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_1.conda#e358c7c5f6824c272b5034b3816438a7 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda#4c28f3210b30250037a4a627eeee9e0f +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.2-py310h3ec546c_1.tar.bz2#73f6fa50c32ddd985cf5fba7b890a75c +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda#dbf6e2d89137da32fa6670f3bffc024e +https://conda.anaconda.org/conda-forge/noarch/sympy-1.12-pypyh9d50eac_103.conda#2f7d6347d7acf6edf1ac7f2189f44c8f +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.5.0-pyha770c72_0.conda#43e7d9e50261fb11deb76e17d8431aac +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.0.0-cpu_mkl_py310h402c8e3_101.conda#b351ffe4cd1b8337abfa88833cf60f25 +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.1-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7 +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-py310h2372a71_0.conda#f20cd4d9c1f4a8377d0818c819918bbb +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2#d1e1eb7e21a9e2c74279d87dafb68156 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.5.0-hd8ed1ab_0.conda#b3c594fde1a80a1fc3eb9cc4a5dfe392 +https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda#3ce482ec3066e6d809dbbb1d1679f215 +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-py310h2372a71_0.conda#d4c91d19e4f2f18b64753ac660edad79 +https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py310h2372a71_0.conda#4ad35c8f6a64a6ab708780dad603aef4 +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.3-py310h2372a71_0.conda#7125fe11f08cdc41de9734dfb2ffd35b +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.0.9-py310hd8f1fbe_9.conda#e2047ad2af52c01845f58b580c6cbd5c +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.18-pyhd8ed1ab_0.conda#bf61cfd2a7f212efba378167a07d4a6a +https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.51-pyge310_1234567_0.conda#f8980578a765dd28417953dddfefe5bc +https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py310h2372a71_0.conda#d9dc9c45bdc2b38403e6b388581e92f0 +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.12.1-pyhd8ed1ab_0.conda#045560daef58c75a759c2638fbdb5c6a +https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd +https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda#0bb492cca54017ea314b809b1ee3a176 +https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a +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.1.3-pyhd8ed1ab_0.conda#b865eadcceebf641fa833ee086756e8b +https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 +https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.20.0-py310h2372a71_0.conda#e7f8dc8c62e136573c84116a5e743aed +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda#98206ea9954216ee7540f0c773f2104d +https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py310hcc13569_0.conda#410f7e83992a591e492c25049a859254 +https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 +https://conda.anaconda.org/conda-forge/noarch/altair-5.2.0-pyhd8ed1ab_0.conda#2521e261fff0b285be099322cf557a7c +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.0-pyhd8ed1ab_0.conda#2d52125a7fe49248ce5e883fed6c935a +https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.51-pyhd8ed1ab_0.conda#bd19311f73611626b31afc608af438cd +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.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda#490730480d76cf9c8f8f2849719c6e2b +https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49 +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda#0876280e409658fc6f9e75d035960333 +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.4-pyhd8ed1ab_0.conda#20f047662cf4fa8b97836111df87dbb4 +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.2-pyhd8ed1ab_0.conda#af5fa2d2186003472e766a23c46cae04 +https://conda.anaconda.org/conda-forge/noarch/comm-0.2.1-pyhd8ed1ab_0.conda#f4385072f4909bc974f6675a36e76796 +https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.1-py310hc6cd4ac_0.conda#1ea80564b80390fa25da16e4211eb801 +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.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094 +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.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de +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.42-pyha770c72_0.conda#0bf64bf10eee21f46ac83c161917fa86 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda#140a7f159396547e9799aa98f9f0742e +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.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883 +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.22.2-pyh707e725_0.conda#f0abe827c8a7c6d91bccdf90cb1fbee3 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda#a0bc3eec34b0fab84be6b2da94e98e20 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py310hff52083_0.conda#cb92c27600d5716fd526a206aa43342c +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/zeromq-4.3.5-h59595ed_1.conda#7fc9d3288d2420bb3637647621018000 +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py310h795f18f_0.conda#fa09f98f3acfd3f5de30bd2d27d5cb7f +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4-py310h2372a71_0.conda#48f39c24349d9ae5c8e8873c42fb6170 +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.1-pyhd8ed1ab_0.conda#c03972cfce69ad913d520c652e5ed908 +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.3-pyhd33586a_0.conda#e0deff12c601ce5cb7476f93718f3168 +https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda#45846a970e71ac98fd327da5d40a0a2c +https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310h2372a71_4.conda#68ee85860502d53c8cbfa0e4cef0f6cb +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.8.19.20240311-pyhd8ed1ab_0.conda#bd1f4958ce0d78874e98f6b28e3da15e +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-2.4-py310hff52083_3.conda#08ec1463dbc5c806a32fc431874032ca +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-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.17.3-pyhd8ed1ab_0.conda#7a709748e93f0b2c33d6b5b676b6d9d0 +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.6.3-pyhd8ed1ab_1.conda#2ac0d00a0fb3f1a4c81c460ba56bb23b +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-69.1.1-pyhd8ed1ab_0.conda#576de899521b7d43674ba3ef6eae9142 +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.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.2-pyhd8ed1ab_0.conda#b019696a453a799ba5301a6fdbb23589 +https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b +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.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.2-pyhd8ed1ab_0.conda#5ab3248dd05c543dc631276455ef6a54 +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.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2 +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda#50ad31e07d706aae88b14a4ac9c73f23 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.10.0-pyhd8ed1ab_0.conda#016d56f5d81b9364d1da5f4895a2a9f8 +https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.4-pyhd8ed1ab_0.conda#91f93e1ebf6535be518715432d89fd92 +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.22-pyhd8ed1ab_0.conda#2fa51897d3aee2fe1636b98d9a6236dc +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.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda#327bfe1c99154f02259d29810bd70afc +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.4-pyhd8ed1ab_0.conda#5af1ffec7c245d1ab2bf0cec0148a4c3 +https://conda.anaconda.org/conda-forge/noarch/amazon-codewhisperer-jupyterlab-ext-2.0.1-pyhd8ed1ab_0.conda#ab9bb3e630d872e9d38c8c18a0cba7b4 +https://conda.anaconda.org/conda-forge/noarch/aws-embedded-metrics-3.2.0-pyhd8ed1ab_0.conda#e1c511655b6e9eb0265c9715c7fa410f +https://conda.anaconda.org/conda-forge/noarch/croniter-1.4.1-pyhd8ed1ab_0.conda#7a4568626f8d6e7c63dcb25d5501a967 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.12.2-ha770c72_0.conda#4f04ceee8d953367da7de726af233303 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.2-pyhd8ed1ab_0.conda#7a0bfebd69213722427cb61b077b4187 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.2-pyhd8ed1ab_0.conda#e14e35cc4a5c90694bb41c5317b576a8 +https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.13-py310h2372a71_1.conda#cc014fc24717772959bf4fb4c7e66057 +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.3-py310hc6cd4ac_0.conda#fb478fd83c001cbf8ab01c29b857262e +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.49-py310h2372a71_1.conda#cdeaf46006791202a7597bf2a0e6ad9e +https://conda.anaconda.org/conda-forge/noarch/jupyter_scheduler-2.5.1-pyha770c72_0.conda#3d250834fde789b6cb96dc11a43d1df2 +https://conda.anaconda.org/conda-forge/noarch/jupyter-scheduler-2.5.1-hd8ed1ab_0.conda#bb6463ad5d244321f64a231ba9b6cf2a +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-scheduler-3.0.7-pyhd8ed1ab_1.conda#ee635c11a576839138a93fc46e0f389b +https://conda.anaconda.org/conda-forge/linux-64/cryptography-42.0.5-py310h75e40e8_0.conda#47e6ea7109182e9e48f8c5839f1bded7 +https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda#1482e77f87c6a702a7e05ef22c9b197b +https://conda.anaconda.org/conda-forge/noarch/pyathena-3.3.0-pyhd8ed1ab_0.conda#b96ed30b70ce32b4b88cf63cc8bc9e86 +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-py310hcfd0673_0.conda#d6df7beac08573177dd9a6a560d1d180 +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.0-pyhd8ed1ab_0.conda#4501c96a5e9f18239ae6e5944604d493 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-execution-0.1.2-pyhd8ed1ab_0.conda#a16fa2f5c791f94b459acd5c34ab8670 +https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.4.4-pyhd8ed1ab_0.conda#2e2f31b3b1c866c29636377e14f8c4c6 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-magic-0.1.0-pyhd8ed1ab_0.conda#4fd1875033a6ca132d227f3587415fd5 +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.3-pyhd8ed1ab_0.conda#6618ce22c81277d6ebaa45364c9d6b76 +https://conda.anaconda.org/conda-forge/linux-64/ansi2html-1.9.1-py310hff52083_0.conda#2213ea76fd340e7c848c1be0cbdfc579 +https://conda.anaconda.org/conda-forge/noarch/textwrap3-0.9.2-py_0.tar.bz2#1f84e74e9dbe2e5ae38c58496bffaca8 +https://conda.anaconda.org/conda-forge/noarch/ansiwrap-0.8.4-py_0.tar.bz2#f09557e2a7cbd2470a2ab6353000cebd +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.5.0-h27087fc_0.tar.bz2#a08150fd2298460cd1fcccf626305642 +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.0.3-py310hff52083_0.conda#7d18b84331cda8271c9ed67d1ca05d47 +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.43-hcad00b1_0.conda#8292dea9e022d9610a11fce5e0896ed8 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.0-hf2295e7_0.conda#6c0d5a4f5292e54bf9b8dc14ee7df448 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b +https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 +https://conda.anaconda.org/conda-forge/noarch/autogluon.common-0.8.2-pyhd8ed1ab_4.conda#e24166dee3b1430877a324715caf8f5d +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py310hd41b1e2_0.conda#85d2aaa7af046528d339da1e813c3a9f +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.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.conda#d47dee1856d9cb955b8076eeff304a5b +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda#72637c58d36d9475fda24700c9796f19 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.49.0-py310h2372a71_0.conda#e61ae80fde506b70a88e5e06376d2068 +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-py310hd41b1e2_1.conda#b8d67603d43b23ce7e988a5d81a7ab79 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda#323e90742f0f48fc22bea908735f55e6 +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.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda#82bf6f63eb15ef719b556b63feec3a77 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 +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.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea +https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py310h582fbeb_1.conda#cf62f6cff3536eafaaa0c740b0bf7465 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.3-py310h62c0568_0.conda#4a7296c0273eb01dfbed728dd6a6725a +https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py310hb13e2d6_0.conda#f0063b2885bfae11324a00a693f88781 +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.3.0-pyhc1e730c_0.conda#698d2d2b621640bddb9191f132967c9f +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.1.post1-py310h1fdf081_0.conda#2706ad1a5f6cbad8b57d4094889d1e33 +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.2-pyhd8ed1ab_0.conda#2b8dfb969f984497f3f98409a9545776 +https://conda.anaconda.org/conda-forge/linux-64/autogluon.core-0.8.2-light_py310h2d11d36_6.conda#9de8e45568202a91466af4d849c7e919 +https://conda.anaconda.org/conda-forge/noarch/autogluon.features-0.8.2-pyhd8ed1ab_3.conda#c827eccfb0ddb1484d0e00f45242b8f8 +https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py310hff52083_1.conda#a677136a83b823803d2f92045f885be2 +https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2#a556fa60840fcb9dd739d186bfd252f7 +https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca +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/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/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.21.4-pyhd8ed1ab_0.conda#d47cf217a7bcc3a03dd1c6169c3f0f98 +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.16-py310h2372a71_0.conda#efdca5c3783dae00552f389bd7b56c3d +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.0-hd590300_0.conda#71b89db63b5b504e7afc8ad901172e1e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.1-hc309b26_1.conda#cc09293a2c2b7fd77aff284f370c12c0 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h4d4d85c_2.conda#9ca99452635fe03eb5fa937f5ae604b0 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.49-h06160fa_0.conda#1d78349eb26366ecc034a4afe70a8534 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-he9a53bd_1.conda#8a24e5820f4a0ffd2ed9c4722cd5d7ca +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.11-h00aa349_4.conda#cb932dff7328ff620ce8059c9968b095 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h4d4d85c_1.conda#eba092fc6de212a01de0065f38fe8bbb +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.3-h28f7589_1.conda#97503d3e565004697f1651753aa95b9e +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h4d4d85c_1.conda#30f9df85ce23cd14faa9a4dfa50cca2b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.1-h2e3709c_4.conda#2cf21b1cbc1c096a28ffa2892257a2c1 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.3-hb447be9_1.conda#c520669eb0be9269a5f0d8ef62531882 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.14-hf3aad02_1.conda#a968ffa7e9fe0c257628033d393e512f +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.21.0-hb942446_5.conda#07d92ed5403ad7b5c66ffd7d5b8f7e57 +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.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.27.0-hd590300_0.conda#f6afff0e9ee08d2f1b897881a4f38cdb +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.5.0-hca28451_0.conda#7144d5a828e2cae218e0e3c98d8a0aeb +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-h85b1a90_19.conda#0605d3d60857fc07bd6a11e878fe0f08 +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.6.0-h6f12383_0.tar.bz2#b31f3565cb84435407594e548a2fb7b2 +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda#d1db1b8be7c3a8983dcbbbfe4f0765de +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/re2-2023.03.02-h8c504da_0.conda#206f8fa808748f6e90599c3368a1114e +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.54.3-hb20ce57_0.conda#7af7c59ab24db007dfd82e0a3a343f66 +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hac9eb74_1.conda#0dee716254497604762957076ac76540 +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.18.1-h8fd135c_2.conda#bbf65f7688512872f063810623b755dc +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/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 +https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h2f23424_1.conda#9571eb3eb0f7fe8b59956a7786babbcd +https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.16-h0b41bf4_1.conda#28bfe2cb11357ccc5be21101a6b7ce86 +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda#aeffb7c06b5f65e55e6c637408dc4100 +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda#39aa3b356d10d7e5add0c540945a0944 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-12.0.1-hb87d912_8_cpu.conda#3f3b11398fe79b578e3c44dd00a44e4a +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-12.0.1-py310h0576679_8_cpu.conda#27f55ccfd038d6665facb04a0aa572c5 +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.4.1-py310h2372a71_0.conda#b631b889b0b4bc2fca7b8b977ca484b2 +https://conda.anaconda.org/conda-forge/noarch/datasets-2.18.0-pyhd8ed1ab_0.conda#3482c9b417757df305ff4e3a7e4b7c10 +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/gdown-5.1.0-pyhd8ed1ab_0.conda#6f880647c0270648f710f334c60bc76c +https://conda.anaconda.org/conda-forge/linux-64/libsentencepiece-0.1.99-h180e1df_0.conda#056064bd3ef47439e3e78fac28449fbf +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-python-0.1.99-py310hebdb9f0_0.conda#b3a5908ac3912b26d6a8b77faebe6eca +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-spm-0.1.99-h180e1df_0.conda#c67cc412366709c1c3225f19f8aed63b +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-0.1.99-hff52083_0.conda#578969452de13e4ad69edf18ee2b3d5a +https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyhc8e2a94_3.tar.bz2#a362b2124b06aad102e2ee4581acee7d +https://conda.anaconda.org/conda-forge/linux-64/regex-2023.12.25-py310h2372a71_0.conda#4a9ba4e7af60356e63b38a6d419acad6 +https://conda.anaconda.org/conda-forge/noarch/sacremoses-0.0.53-pyhd8ed1ab_0.tar.bz2#76c3c384fe0941f1b08193736e8e277a +https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.4.2-py310hcb5633a_0.conda#a1e978544ef765ef9ac2f2320e43bacd +https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.13.3-py310he1f1126_0.conda#ea2281fe0bf70c1c83393565342a8a8c +https://conda.anaconda.org/conda-forge/noarch/transformers-4.31.0-pyhd8ed1ab_0.conda#8cccf394a00fbfef2f3d6028422ae5cc +https://conda.anaconda.org/conda-forge/noarch/nlpaug-1.1.11-pyhd8ed1ab_1.conda#4e231f0fa7db9388cf4c8539d623ac62 +https://conda.anaconda.org/conda-forge/noarch/nltk-3.8.1-pyhd8ed1ab_0.conda#518c769ca4273480a99be6e559a26192 +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.2.3-pyhd8ed1ab_0.conda#cebc9f0fc6eebdcc368bb30ba30f2fd5 +https://conda.anaconda.org/conda-forge/noarch/markdown-3.5.2-pyhd8ed1ab_0.conda#db7b48fa4eeb0c21b2f3f5b1f7d9ebcf +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.42.0-pyhd8ed1ab_0.conda#1cdea58981c5cbc17b51973bcaddcea7 +https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda#8591c748f98dcc02253003533bc2e4b1 +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/protobuf-4.21.12-py310heca2aa9_0.conda#90bb7e1b729c4b50272cf78be97ab912 +https://conda.anaconda.org/conda-forge/noarch/pytesseract-0.3.10-pyhd8ed1ab_0.tar.bz2#04f4becceb0c032c5dbdae6ad18bd95e +https://conda.anaconda.org/conda-forge/noarch/lightning-utilities-0.10.1-pyhd8ed1ab_0.conda#4132ed16f8074bc111d477c52508fda4 +https://conda.anaconda.org/conda-forge/noarch/torchmetrics-1.0.3-pyhd8ed1ab_0.conda#4e8849ba2fa06393b7ab5a50c6a4256c +https://conda.anaconda.org/conda-forge/noarch/pytorch-lightning-2.0.9-pyhd8ed1ab_0.conda#3e96ed529412338e38af9004e22267de +https://conda.anaconda.org/conda-forge/noarch/pytorch-metric-learning-1.7.3-pyhd8ed1ab_0.conda#139aa590e345e10f4572812a329806f4 +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py310h2372a71_0.conda#21362970a6fea90ca507c253c20465f2 +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.3.0-pyhd8ed1ab_0.conda#b6c573c271bf4c062873d7f3df97c3ba +https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda#b8853659d596f967c661f544dd89ede7 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h1f7b6fc_1.conda#be6f0382440ccbf9fb01bb19ab1f1fc0 +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 +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.0.7-h0b41bf4_0.conda#49e8329110001f04923fe7e864990b0c +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.13.2-hb4ffafa_0.conda#976aaf1afd331ed7346d649da5c5c1ee +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.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f +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.2-h59595ed_1.conda#127b0be54c1c90760d7fe02ea7a56426 +https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda#418c6ca5929a611cbd69204907a83995 +https://conda.anaconda.org/conda-forge/linux-64/libavif-0.11.1-h8182462_2.conda#41c399ed4c439e37b844c24ab5621b5a +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-h59595ed_0.conda#fd486bffbf0d6841cf1456a8f2e3a995 +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.8.12-py310hc929067_0.conda#61caf809753610c4c87d583765b1d478 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.2.12-pyhd8ed1ab_0.conda#d5c8bef52be4e70c48b1400eec3eecc8 +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.19.3-py310h769672d_2.tar.bz2#c0391107b0cd0010708d6969ed759e8b +https://conda.anaconda.org/conda-forge/noarch/seqeval-1.2.2-pyhd3deb0d_0.tar.bz2#d4436c8a8b9fb6d60fe4e7b9f097f9bb +https://conda.anaconda.org/conda-forge/noarch/cachetools-5.3.3-pyhd8ed1ab_0.conda#cd4c26c702a9bcdc70ff05b609ddacbe +https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.5.1-pyhd8ed1ab_0.conda#fb1a800972b072aa4d16450983c81418 +https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.3.0-pyhd8ed1ab_0.conda#26db749166cdca55e5ef1ffdc7767d0e +https://conda.anaconda.org/conda-forge/noarch/pyopenssl-24.0.0-pyhd8ed1ab_0.conda#b50aec2c744a5c493c09cce9e2e7533e +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.28.2-pyhca7485f_0.conda#f8879cf0e5b8f7761d01bce40ce7c089 +https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda#550da20b2c2e38be9cc44bb819fda5d5 +https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_1.conda#74f76d4868dbba5870f2cf1d9b12d8f3 +https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868 +https://conda.anaconda.org/conda-forge/noarch/requests-oauthlib-1.4.0-pyhd8ed1ab_0.conda#a55b220de8970208f583e38639cfbecc +https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.0.0-pyhd8ed1ab_1.conda#569e62e95b01b53e4ec7d9abe83b7385 +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.54.3-py310heca2aa9_0.conda#7c82ea96968976ee2eb66a52f2decd8e +https://conda.anaconda.org/conda-forge/linux-64/tensorboard-data-server-0.7.0-py310h75e40e8_1.conda#e562478facfa960813945204273ecac5 +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.1-pyhd8ed1ab_0.conda#af8d825d93dbe6331ee6d61c69869ca0 +https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.12.3-pyhd8ed1ab_0.conda#429d39f86cef8d0859d639804ae67aaf +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.15.2-cpu_py310hb9e6163_1.conda#952305ae6b751a80284e8d4c9115ed4b +https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 +https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-0.8.2-pyha770c72_5.conda#a8ca42e2b4ee0fd6dce729bc226dd0cc +https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda#669cd7065794633b9e64e6a9612ec700 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.1-h59595ed_0.conda#476fb82aba5358a08d52ec44e286ce33 +https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.1-h59595ed_0.conda#ee90e7ac57321f8782f8438bf647b75b +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_1.conda#6185f640c43843e5ad6fd1c5372c3f80 +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.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b +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-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 +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.52.1-ha41ecd1_0.conda#5c0cc002bf4eaa56448b0729efd6e96c +https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h280cfa0_4.conda#410f86e58e880dcc7b0e910a8e89c05c +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-he3f83f7_1.conda#03bd1ddcc942867a19528877143b9852 +https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 +https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb +https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.1-pyh22cad53_0.tar.bz2#196447bc6fd769c3eb2d51de1aa866a5 +https://conda.anaconda.org/conda-forge/linux-64/catboost-1.2.3-py310hff52083_2.conda#e063c808181593406d4d3d321ee7ffff +https://conda.anaconda.org/conda-forge/noarch/fastcore-1.5.29-pyhd8ed1ab_0.conda#155c898255baddd6b2cb95894791eeca +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-py310hff52083_0.conda#a20390cd5f5fe4d8c5f6f2e7fa6c54cf +https://conda.anaconda.org/conda-forge/linux-64/cymem-2.0.8-py310hc6cd4ac_1.conda#8e4dada89998e0cb4f97b835dff6dc7e +https://conda.anaconda.org/conda-forge/noarch/langcodes-3.3.0-pyhd8ed1ab_0.tar.bz2#aacac9c3804912c38087d1c295708493 +https://conda.anaconda.org/conda-forge/linux-64/murmurhash-1.0.10-py310hc6cd4ac_1.conda#2b0c4b4532c601ece4537cc7f3558464 +https://conda.anaconda.org/conda-forge/noarch/smart_open-5.2.1-pyhd8ed1ab_0.tar.bz2#c7a838c38e38c82edde371a9054e6c92 +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.0-pyhd8ed1ab_0.conda#5030a13b2fe5e143d5956d4943d3018f +https://conda.anaconda.org/conda-forge/noarch/pathy-0.10.2-pyhd8ed1ab_0.conda#69d84b5c17aea4d7350f3536bcde7296 +https://conda.anaconda.org/conda-forge/linux-64/preshed-3.0.9-py310hc6cd4ac_1.conda#a2a27c2eafd1e280555ae954df088fc3 +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-py310hc6cd4ac_1.conda#7cd9d4be6f55ccb53cbd7125f2e6a0fb +https://conda.anaconda.org/conda-forge/linux-64/confection-0.1.4-py310h17c5347_0.conda#72b63825959fc040cab8ed0f12f2040e +https://conda.anaconda.org/conda-forge/linux-64/cython-blis-0.7.10-py310h1f7b6fc_2.conda#6a0165d9e76c443ed66d2e8b733aa133 +https://conda.anaconda.org/conda-forge/linux-64/wasabi-1.1.2-py310hff52083_0.conda#8ed9f04ed8e1373063cd03b9d5c86ce3 +https://conda.anaconda.org/conda-forge/linux-64/thinc-8.2.2-py310hcb52e73_0.conda#550b37537f05740f1c9a38d63d843b3c +https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.16.0-pyhd8ed1ab_0.conda#8d75941f621306e58b7642394a8bad87 +https://conda.anaconda.org/conda-forge/noarch/weasel-0.3.4-pyhd8ed1ab_0.conda#a53c82e61a1173c887e84fc50842eec4 +https://conda.anaconda.org/conda-forge/linux-64/spacy-3.7.2-py310hcb52e73_0.conda#c966d5a09c130d0bcfce4126643ddc74 +https://conda.anaconda.org/conda-forge/noarch/fastai-2.7.14-pyhd8ed1ab_0.conda#9854ef355cc4bd1e2aac40998f721fed +https://conda.anaconda.org/conda-forge/linux-64/lightgbm-3.3.5-py310heca2aa9_0.conda#d2595ddab22cbca7409b28e3105afd0a +https://conda.anaconda.org/conda-forge/linux-64/libxgboost-1.7.6-cpu_h6728c87_6.conda#9183d0551aa5e5be36c670e701b287a3 +https://conda.anaconda.org/conda-forge/linux-64/py-xgboost-1.7.6-cpu_py310h78d450f_6.conda#dcc61476de611ac5673698495b607109 +https://conda.anaconda.org/conda-forge/linux-64/xgboost-1.7.6-cpu_py310h78d450f_6.conda#061a099093fd2a97ae506f65dc87baf2 +https://conda.anaconda.org/conda-forge/noarch/autogluon.tabular-0.8.2-pyha770c72_4.conda#17fad1cdb563ddad16ab0ba4c085bcb3 +https://conda.anaconda.org/conda-forge/noarch/gluonts-0.13.7-pyhd8ed1ab_0.conda#1684b578508d9918b2dcadd4c365c61a +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.42.0-py310h1b8f574_1.conda#e2a5e9f92629c8e4c8611883a35745b4 +https://conda.anaconda.org/conda-forge/linux-64/numba-0.59.0-py310h7dc5dd1_1.conda#966bc2bc095723310d746106e7c91791 +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.7.3-pyhd8ed1ab_0.conda#7a2b34b4c9bff2545200b3746da70f11 +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.1-py310h1f7b6fc_0.conda#d98c3749dd466513dd921f5818f4b001 +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.9.0-py310hc6cd4ac_0.conda#cab4b543b897dcf548edb3018fe45f9e +https://conda.anaconda.org/conda-forge/noarch/autogluon.timeseries-0.8.2-pyhd8ed1ab_4.conda#a64157275daf72a557fe4a9d843a9e1d +https://conda.anaconda.org/conda-forge/noarch/autogluon-0.8.2-pyhd8ed1ab_4.conda#7ff9ac51e09bd5991970a7df53b4bee6 +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.10-pyhd8ed1ab_0.conda#16b73b2c4ff7dda8bbecf88aadfe2027 +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.10-pyhd8ed1ab_0.conda#521f489e3babeddeec638c2add7e9e64 +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.2-pyhd8ed1ab_0.conda#67f86478c78637f68c1f3858973021f2 +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda#85a2189ecd2fcdd86e92b2d4ea8fe461 +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.1-pyhd8ed1ab_0.conda#f1a93f00b030dbede427001862c2854b +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.1-pyha770c72_0.conda#5528a3eda283b421055c89bface19a1c +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.4-pyhd8ed1ab_0.conda#169c4c0a396d83164215f54024031ec8 +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.1.2-py310hcb5633a_0.conda#6dd3d49f65ceb05dbd527a5b6301611b +https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda#4eccaeba205f0aed9ac3a9ea58568ca3 +https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda#17064acba08d3686f1135b5ec1b32b12 +https://conda.anaconda.org/conda-forge/linux-64/black-24.2.0-py310hff52083_0.conda#92bb721ab7aca4e9ac80d07ca0f3fe5c +https://conda.anaconda.org/conda-forge/noarch/boltons-23.1.1-pyhd8ed1ab_0.conda#56febe65315cc388a5d20adf2b39a74d +https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda#35ef8bc24bd34074ebae3c943d551728 +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h2aa1ff5_1.conda#3bf887827d1968275978361a6e405e4f +https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.28-hfc55251_0.conda#66d4f5d8256542d9ebfa341d690c5e03 +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.7-had39da4_0.conda#9fff450354fbcd1510ef178730732241 +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.7-py310h39ff949_0.conda#58d84efb37d517c64f4e48f75fd6180d +https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.1.0-pyhd8ed1ab_0.conda#304dc78ad6e52e0fd663df1d484c1531 +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py310h1275a96_0.conda#54698ba13cd3494547b289cd86a2176a +https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda#38253361efb303deead3eab39ae9269b +https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda#8a3ae7f6318376aa08ea753367bb7dd6 +https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda#bbdb409974cd6cb30071b1d978302726 +https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda#bfdb7c5c6ad1077c82a69a8642c87aff +https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.0.2-py310hff52083_0.conda#4837faab0d3e665df57fef662148c6a3 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 +https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py310h2372a71_0.conda#0adaac9a86d59adae2bc86b3cdef2df1 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py310h2372a71_0.conda#dcf6d2535586c77b31425ed835610c54 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py310h2372a71_0.conda#50b7d9b39099cdbabf65bf27df73a793 +https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda#08316d001eca8854392cf2837828ea11 +https://conda.anaconda.org/conda-forge/linux-64/conda-23.11.0-py310hff52083_1.conda#d5278ac990c67d5ed51584998aa16c5a +https://conda.anaconda.org/conda-forge/noarch/contextlib2-21.6.0-pyhd8ed1ab_0.tar.bz2#5b26a831440be04c39531a8ce20f5d71 +https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.4-h7f98852_1002.tar.bz2#e728e874159b042d92b90238a3cb0dc2 +https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.27-h54b06d7_7.conda#dce22f70b4e5a407ce88f2be046f4ceb +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.1.2-pyhd8ed1ab_0.tar.bz2#3c3de74912f11d2b590184f03c7cd09b +https://conda.anaconda.org/conda-forge/noarch/flask-3.0.2-pyhd8ed1ab_0.conda#7f88df670921cc31c309719e30c22021 +https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2#a11f356d6f93b74b4a84e9501afd48b4 +https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda#016bd4f61878a57f19c8cd744708a1f1 +https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.21.1-pyhd8ed1ab_0.conda#ae303aa7dc100bc3bc01b5a3b7ca3567 +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.4-pyhd8ed1ab_0.conda#1190a6456351690603b2d64d1cbf5b4a +https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d +https://conda.anaconda.org/conda-forge/noarch/deepmerge-1.1.1-pyhd8ed1ab_0.conda#d91c3d8ac3f2ab36ca4ea32ac42f731e +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py310hd41b1e2_0.conda#dc5263dcaa1347e5a456ead3537be27d +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.3.0-pyhd8ed1ab_0.conda#e4736ce580a5b289f7412f14ae8df42a +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py310h2372a71_3.conda#a29a0825809cd3a780097472be176618 +https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda#a5e792523b028b06d7ce6e65a6cd4a33 +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.0.0-pyhd8ed1ab_0.conda#aec5f308cb9055e83c59afecd5fcb58a +https://conda.anaconda.org/conda-forge/noarch/docstring-to-markdown-0.15-pyhd8ed1ab_0.conda#a3a1e6af2926a3affcd6f2072871f551 +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-1.7.4-hf47d654_0_cpu.conda#8fd132db65c8d51caea2ae7cde4b450c +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-avx2-1.7.4-h1234567_0_cpu.conda#7eb943c067a63c4d8af526c2df9f2c1b +https://conda.anaconda.org/conda-forge/linux-64/faiss-1.7.4-py310h9ed8947_0_cpu.conda#99665c710087f7a964915b5ea0097465 +https://conda.anaconda.org/conda-forge/linux-64/faiss-cpu-1.7.4-h718b53a_0.conda#7a9e6f72c36ff5a5eeb61660fd6fdf8d +https://conda.anaconda.org/conda-forge/noarch/starlette-0.27.0-pyhd8ed1ab_0.conda#6facb6fc201d334257db8004439705d3 +https://conda.anaconda.org/conda-forge/noarch/fastapi-0.103.2-pyhd8ed1ab_0.conda#fb243b6796ab7d64b14e00c279620c04 +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-23.5.26-h59595ed_1.conda#913a1c6fd00b66f33392a129e835ceca +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda#650a7807e689642dddd3590eb817beed +https://conda.anaconda.org/conda-forge/noarch/gast-0.4.0-pyh9f0ad1d_0.tar.bz2#42323c77b73462199fca93bc8ac9279d +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.42-pyhd8ed1ab_0.conda#6bc8e496351bafd761c0922c3ebd989a +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.0-hde27a5a_0.conda#072608f7b71755993a294c3cdf909fa6 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.0-hf2295e7_0.conda#56a4c2ed7723cf0847752f74dba1929f +https://conda.anaconda.org/conda-forge/noarch/google-pasta-0.2.0-pyh8c360ce_0.tar.bz2#26e27d7d3d7fe2336b543dd8e0f12cbf +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.9-h98fc4e7_0.conda#bcc7157b06fce7f5e055402a8135dfd8 +https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 +https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f +https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.9-h8e1006c_0.conda#614b81f8ed66c56b640faee7076ad14a +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda#d471a5c3abc984b662d9bae3bb7fd8a5 +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.10.0-nompi_py310h65828d5_101.conda#44c185c5b133ad6d1d449839407aa863 +https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.3.2-py310hcc13569_0.conda#1ad84020b1ab816d7ab3f3d0859faf40 +https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.14-cpu_py310h67d73b5_1.conda#392c325994aa96727edd0069a0620e31 +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.3.0-pyhc1e730c_2.conda#7a94ac68b892daa9f17ae8a52b31ed81 +https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.3.0-hd8ed1ab_2.conda#ab262acd95cb73f3ed9426cc4204ac3a +https://conda.anaconda.org/conda-forge/noarch/jax-0.4.20-pyhd8ed1ab_0.conda#5abbd950bd427bc9d929e35ecbf814d1 +https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 +https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 +https://conda.anaconda.org/conda-forge/linux-64/orjson-3.9.15-py310hcb5633a_0.conda#da1b180ccf1dce5d87d145ad2fc14e5a +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.23-pyhd8ed1ab_0.conda#47f6000bc923694707d26830ffce16c5 +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.30-pyhd8ed1ab_0.conda#0b8700c1a97ac5eb1fb7041673693ba1 +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.27-pyhd8ed1ab_0.conda#ea8d0112e538642eecfaa938d1b5628d +https://conda.anaconda.org/conda-forge/noarch/langchain-0.1.9-pyhd8ed1ab_0.conda#2ad37682610ac2643b46e4cc0215f410 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.11.0-pyhd8ed1ab_0.conda#aee09f3966655f81d05fcfb5bae3612d +https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.5.2-py310h47bb294_0.conda#a83ae186d0a4b78c98b32781d7c15d48 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.11.0-pyhd8ed1ab_0.conda#e8ab7975630aff4624d3ed1fa32ac552 +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.1.0-pyhd8ed1ab_0.conda#b404b1dc6ca2bbb66663507150cb6927 +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.0-pyhd8ed1ab_1.conda#5020cacc18e3d5f62a81513f26ac2cac +https://conda.anaconda.org/conda-forge/noarch/keras-2.12.0-pyhd8ed1ab_0.conda#e6e18b33e8d62200099f2eed98a263b6 +https://conda.anaconda.org/conda-forge/noarch/keras-preprocessing-1.1.2-pyhd8ed1ab_0.tar.bz2#a79b00989a0d89791021902f37fe2f9e +https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef +https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_ha2b6cf4_4.conda#898e0dd993afbed0d871b60c2eb33b83 +https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_hb11cfb5_4.conda#c90f4cbb57839c98fef8f830e4b9972f +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda#4d18d86916705d352d5f4adfb7f0edd3 +https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.6-h088ca5b_0.conda#99dca02fb74a8dfa3653c6673674f90c +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.4-h59595ed_0.conda#3f1017b4141e943d9bc8739237f749e8 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda#3366af27f0b593544a6cd453c7932ac5 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.41-hd590300_0.conda#81f740407b45e3f9047b3174fa94eb9e +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-hd429924_1.conda#1dbcc04604fdf1e526e6d1b0b6938396 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py310hc6cd4ac_0.conda#68d5bfccaba2d89a7812098dd3966d9b +https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda#ef5333594a958b25912002886b82b253 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda#e87530d1b12dd7f4e0f856dc07358d60 +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.98-h1d7d5a4_0.conda#54b56c2fdf973656b748e0378900ec13 +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda#f4fe7a6e3d7c78c9de048ea9dda21690 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.3-py310hff52083_0.conda#e91d183a307d7bd667003291f690cbb0 +https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.19.0-hb753e55_0.conda#0b4a67051e3b3812818ccf2f4ee2fd4e +https://conda.anaconda.org/conda-forge/noarch/papermill-2.5.0-pyhd8ed1ab_0.conda#e6e69b90afd3d0597da8f1f74cc4bd58 +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/linux-64/py-xgboost-cpu-1.7.6-py310h78d450f_6.conda#6c53cd648ba083e1bc7ea5dac8ec1e2c +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.19.0-py310hc6cd4ac_1.conda#2e0bde59a8aa215c7402c181c20c9605 +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-py310h98feede_1.conda#0329fda0ebbccee7b3e9dbf4a377d0ce +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda#37c47ea93ef00dd80d880fc4ba21256a +https://conda.anaconda.org/conda-forge/noarch/pylint-3.0.4-pyhd8ed1ab_0.conda#d536ee47166d8984c6acd8114ac26cf1 +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.9.1-py310h2372a71_2.conda#0a99339b277686c7d824abf9de396901 +https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.7-pyh59ac667_0.conda#24c1a37849fcd4c74923a38b029b208f +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py310h98feede_0.conda#a5ea028f63386c53a2b8ff4d09065259 +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.10.0-pyhd8ed1ab_0.conda#5db77c6a130648e78913e3a2c39895a0 +https://conda.anaconda.org/conda-forge/noarch/pytoolconfig-1.2.5-pyhd8ed1ab_0.conda#2d6bdf5a69cfcd1fcc7f2b900cb4082f +https://conda.anaconda.org/conda-forge/noarch/rope-1.12.0-pyhd8ed1ab_0.conda#5b17bee6351fbe4ae28da178866b2c73 +https://conda.anaconda.org/conda-forge/noarch/whatthepatch-1.0.5-pyhd8ed1ab_0.conda#e62ea65e1979c18c4c9034567e7105c5 +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.10.0-pyhd8ed1ab_0.conda#51da987dc568ec0484bc22e1e2025830 +https://conda.anaconda.org/conda-forge/noarch/requests-kerberos-0.14.0-pyh707e725_1.conda#411293bff0dc86f9f9bc0c0e1f227623 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.12-pyhd8ed1ab_0.conda#fe8919032eb413e76a7802f013a536ee +https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py310hcb5633a_0.conda#892e912e08ba834aa77ff25f983a4e9e +https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.4-pyhd8ed1ab_0.conda#464806d1a3b2c6a88102844c12934038 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-common-0.1.12-pyhd8ed1ab_0.conda#5e9db875cf08e9773aba4176e5c0edbb +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-emr-extension-0.1.9-pyhd8ed1ab_0.conda#589f97989a6db8b2f21a53881fdd1d97 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-0.2.0-pyhd8ed1ab_0.conda#9331340b5a844f5ac2c74eda353aa23e +https://conda.anaconda.org/conda-forge/noarch/sagemaker-kernel-wrapper-0.0.2-pyhd8ed1ab_0.conda#99480997ca2429b75169c896cc988cdb +https://conda.anaconda.org/conda-forge/noarch/schema-0.7.5-pyhd8ed1ab_1.conda#750d2ce4311d1502b51ad814407f043d +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.212.0-pyhd8ed1ab_0.conda#eb07d50e30f7b423929f9081118d3979 +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.0.21-pyhd8ed1ab_0.conda#fa0e9b0ca6c3e96d350711b6dbddaeb6 +https://conda.anaconda.org/conda-forge/linux-64/sasl-0.3.1-py310hd8f1fbe_2.tar.bz2#9b15d1759c99ad57ae43080cfca56d73 +https://conda.anaconda.org/conda-forge/linux-64/supervisor-4.2.5-py310hff52083_2.conda#7fe7fa4d80a99dc44ba15ef3e82707af +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.12.1-cpu_py310h91b7bb3_1.conda#3133c1f0d7fba203c6af92843b7a6b8a +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.12.1-cpu_py310haacee6a_1.conda#23ed9579748a885ae9e52ae809ccae6a +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.12.1-cpu_py310hd1aba9c_1.conda#79f37d0e1a7badce42c40f869ac4ce3a +https://conda.anaconda.org/conda-forge/linux-64/uvicorn-0.28.0-py310hff52083_0.conda#b9bc890a3389cf5b42a0a5428719cdd0 diff --git a/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/conda/.condarc b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/conda/.condarc new file mode 100644 index 00000000..c3616df5 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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/v1/v1.6/v1.6.0/dirs/etc/jupyter/jupyter_server_config.py b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/jupyter/jupyter_server_config.py new file mode 100644 index 00000000..e05997f2 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/jupyter/jupyter_server_config.py @@ -0,0 +1,16 @@ +# 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 diff --git a/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord.conf b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord.conf new file mode 100644 index 00000000..686f4a5c --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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/v1/v1.6/v1.6.0/dirs/usr/local/bin/entrypoint-jupyter-server b/build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/entrypoint-jupyter-server new file mode 100755 index 00000000..ceda89d0 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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/v1/v1.6/v1.6.0/dirs/usr/local/bin/restart-jupyter-server b/build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/restart-jupyter-server new file mode 100755 index 00000000..6f2af98d --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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/v1/v1.6/v1.6.0/dirs/usr/local/bin/start-jupyter-server b/build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/start-jupyter-server new file mode 100755 index 00000000..377a86d4 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/start-jupyter-server @@ -0,0 +1,35 @@ +#!/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 + # 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/v1/v1.6/v1.6.0/gpu.arg_based_env.in b/build_artifacts/v1/v1.6/v1.6.0/gpu.arg_based_env.in new file mode 100644 index 00000000..51cba0a9 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/gpu.arg_based_env.in @@ -0,0 +1 @@ +conda-forge::cudatoolkit=$CUDA_MAJOR_MINOR_VERSION diff --git a/build_artifacts/v1/v1.6/v1.6.0/gpu.env.in b/build_artifacts/v1/v1.6/v1.6.0/gpu.env.in new file mode 100644 index 00000000..bd6c64a4 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/gpu.env.in @@ -0,0 +1,50 @@ +# This file is auto-generated. +conda-forge::amazon_sagemaker_sql_editor +conda-forge::amazon-sagemaker-sql-magic +conda-forge::langchain[version='>=0.1.9,<1.0.0'] +conda-forge::fastapi[version='>=0.103.2,<1.0.0'] +conda-forge::uvicorn[version='>=0.27.1,<1.0.0'] +conda-forge::pytorch-gpu[version='>=2.0.0,<3.0.0'] +conda-forge::tensorflow[version='>=2.12.1,<3.0.0'] +conda-forge::python[version='>=3.10.13,<3.11.0'] +conda-forge::pip[version='>=23.3.2,<24.0.0'] +conda-forge::torchvision[version='>=0.15.2,<1.0.0'] +conda-forge::numpy[version='>=1.26.4,<2.0.0'] +conda-forge::pandas[version='>=2.1.4,<3.0.0'] +conda-forge::scikit-learn[version='>=1.4.1.post1,<2.0.0'] +conda-forge::jinja2[version='>=3.1.3,<4.0.0'] +conda-forge::matplotlib[version='>=3.8.3,<4.0.0'] +conda-forge::sagemaker-headless-execution-driver[version='>=0.0.12,<1.0.0'] +conda-forge::ipython[version='>=8.21.0,<9.0.0'] +conda-forge::scipy[version='>=1.11.4,<2.0.0'] +conda-forge::keras[version='>=2.12.0,<3.0.0'] +conda-forge::py-xgboost-gpu[version='>=1.7.6,<2.0.0'] +conda-forge::jupyterlab[version='>=4.1.2,<5.0.0'] +conda-forge::ipywidgets[version='>=8.1.2,<9.0.0'] +conda-forge::conda[version='>=23.11.0,<24.0.0'] +conda-forge::boto3[version='>=1.28.64,<2.0.0'] +conda-forge::sagemaker-python-sdk[version='>=2.198.1,<3.0.0'] +conda-forge::supervisor[version='>=4.2.5,<5.0.0'] +conda-forge::autogluon[version='>=0.8.2,<1.0.0'] +conda-forge::aws-glue-sessions[version='>=1.0.4,<2.0.0'] +conda-forge::sagemaker-kernel-wrapper[version='>=0.0.2,<1.0.0'] +conda-forge::jupyter-ai[version='>=2.9.1,<3.0.0'] +conda-forge::jupyter-scheduler[version='>=2.5.1,<3.0.0'] +conda-forge::nodejs[version='>=18.18.2,<19.0.0'] +conda-forge::jupyter-lsp[version='>=2.2.3,<3.0.0'] +conda-forge::jupyterlab-lsp[version='>=5.0.3,<6.0.0'] +conda-forge::python-lsp-server[version='>=1.10.0,<2.0.0'] +conda-forge::notebook[version='>=7.1.1,<8.0.0'] +conda-forge::altair[version='>=5.2.0,<6.0.0'] +conda-forge::sagemaker-studio-analytics-extension[version='>=0.0.21,<1.0.0'] +conda-forge::jupyter-dash[version='>=0.4.2,<1.0.0'] +conda-forge::sagemaker-jupyterlab-extension[version='>=0.2.0,<1.0.0'] +conda-forge::sagemaker-jupyterlab-emr-extension[version='>=0.1.9,<1.0.0'] +conda-forge::amazon-sagemaker-jupyter-scheduler[version='>=3.0.7,<4.0.0'] +conda-forge::jupyter-server-proxy[version='>=4.1.0,<5.0.0'] +conda-forge::amazon-codewhisperer-jupyterlab-ext[version='>=2.0.1,<3.0.0'] +conda-forge::jupyterlab-git[version='>=0.50.0,<1.0.0'] +conda-forge::sasl[version='>=0.3.1,<1.0.0'] +conda-forge::thrift_sasl[version='>=0.4.3,<1.0.0'] +conda-forge::pyhive[version='>=0.7.0,<1.0.0'] +conda-forge::python-gssapi[version='>=1.8.3,<2.0.0'] diff --git a/build_artifacts/v1/v1.6/v1.6.0/gpu.env.out b/build_artifacts/v1/v1.6/v1.6.0/gpu.env.out new file mode 100644 index 00000000..481fb3de --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/gpu.env.out @@ -0,0 +1,668 @@ +# 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-13.2.0-h807b86a_5.conda#d4ff227c46917d3b4565302a2bbb276b +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda#f6f6600d18a4047b54f803cf708b868a +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-17.0.6-h4dfa4b3_0.conda#c1665f9c1c9f6c93d8b4e492a6a39056 +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/linux-64/bzip2-1.0.8-hd590300_5.conda#69b8b6202a07720f448be700e300ccf4 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 +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.45.2-h2797004_0.conda#866983a220e27a80cb75e85cb30466a1 +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.4-h59595ed_2.conda#7dbaa197d7ba6032caf7ae7f32c1efa0 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_0.conda#51a753e64a3027bd7e23a189b1f6e91e +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.10.13-hd12c33a_1_cpython.conda#ed38140af93f81319ebc472fbcf16cca +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-13.2.0-ha4646dd_5.conda#7a6bd7a12a4bd359e2afe6c0fa1acace +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda#e73e9cfd1191783392131e6238bdb3e9 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda#26322ec5d7712c3ded99dd656142b8ce +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda#6593de64c935768b6bad3e19b3e978be +https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py310h2372a71_0.conda#bd19b3096442ea342c4a5208379660b1 +https://conda.anaconda.org/conda-forge/linux-64/cudatoolkit-11.8.0-h4ba93d1_13.conda#eb43f5f1f16e2fad2eba22219c3e499b +https://conda.anaconda.org/conda-forge/noarch/cuda-version-11.8-h70ddcb2_3.conda#670f0e1593b8c1d84f57ad5fe5256799 +https://conda.anaconda.org/conda-forge/linux-64/cudnn-8.8.0.121-hcdd5f01_4.conda#d51a9b97e9ad89deae47bec4293ad0b6 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda#0c1729b74a8152fde6a38ba0a2ab9f45 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py310h2372a71_0.conda#f6703fa0214a00bf49d1bef6dc7672d0 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda#e7d8df6509ba635247ff9aea31134262 +https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.7.1-hc72dce7_6.conda#afd44491bd564d8dd6cda5d9aecaa452 +https://conda.anaconda.org/conda-forge/linux-64/libmagma_sparse-2.7.1-h8354cda_6.conda#5e835e8d48283880ea6ef11920c7fb14 +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-3.21.12-hfc55251_2.conda#e3a7d4ba09b8dc939b98fef55f539220 +https://conda.anaconda.org/conda-forge/linux-64/magma-2.7.1-ha770c72_6.conda#f8ffd335f311e9749428727752e815bb +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff +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.5-h232c23b_0.conda#c442ebfda7a475f5e78f1c8e45f1e919 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda#f36ddc11ca46958197a45effdd286e45 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_1.conda#4531d2927578e7e254ff3bcf6457518c +https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda#a7ce56d5757f5b57e7daabe703ade5bb +https://conda.anaconda.org/conda-forge/linux-64/nccl-2.20.5.1-h6103f9b_0.conda#bedb0b33c5e3e6fbd4dce4f6f07fea72 +https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda#425fce3b531bed6ec3c74fab3e5f0a1c +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.5.1-h9b69904_2.tar.bz2#6e016cf4c525d04a7bd038cee53ad3fd +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_1.conda#e358c7c5f6824c272b5034b3816438a7 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda#4c28f3210b30250037a4a627eeee9e0f +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.2-py310h3ec546c_1.tar.bz2#73f6fa50c32ddd985cf5fba7b890a75c +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda#dbf6e2d89137da32fa6670f3bffc024e +https://conda.anaconda.org/conda-forge/noarch/sympy-1.12-pypyh9d50eac_103.conda#2f7d6347d7acf6edf1ac7f2189f44c8f +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.5.0-pyha770c72_0.conda#43e7d9e50261fb11deb76e17d8431aac +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.0.0-cuda112py310he33e0d6_200.conda#87729716665c9fa180d7e42fde5c53ab +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.1-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7 +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-py310h2372a71_0.conda#f20cd4d9c1f4a8377d0818c819918bbb +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2#d1e1eb7e21a9e2c74279d87dafb68156 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.5.0-hd8ed1ab_0.conda#b3c594fde1a80a1fc3eb9cc4a5dfe392 +https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda#3ce482ec3066e6d809dbbb1d1679f215 +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-py310h2372a71_0.conda#d4c91d19e4f2f18b64753ac660edad79 +https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py310h2372a71_0.conda#4ad35c8f6a64a6ab708780dad603aef4 +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.3-py310h2372a71_0.conda#7125fe11f08cdc41de9734dfb2ffd35b +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.0.9-py310hd8f1fbe_9.conda#e2047ad2af52c01845f58b580c6cbd5c +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.18-pyhd8ed1ab_0.conda#bf61cfd2a7f212efba378167a07d4a6a +https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.51-pyge310_1234567_0.conda#f8980578a765dd28417953dddfefe5bc +https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py310h2372a71_0.conda#d9dc9c45bdc2b38403e6b388581e92f0 +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.12.1-pyhd8ed1ab_0.conda#045560daef58c75a759c2638fbdb5c6a +https://conda.anaconda.org/conda-forge/noarch/aiofiles-22.1.0-pyhd8ed1ab_0.tar.bz2#a88c206fdb78e34adb1c4081f5f838dd +https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda#0bb492cca54017ea314b809b1ee3a176 +https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a +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.1.3-pyhd8ed1ab_0.conda#b865eadcceebf641fa833ee086756e8b +https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 +https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.20.0-py310h2372a71_0.conda#e7f8dc8c62e136573c84116a5e743aed +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda#98206ea9954216ee7540f0c773f2104d +https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py310hcc13569_0.conda#410f7e83992a591e492c25049a859254 +https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 +https://conda.anaconda.org/conda-forge/noarch/altair-5.2.0-pyhd8ed1ab_0.conda#2521e261fff0b285be099322cf557a7c +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.0-pyhd8ed1ab_0.conda#2d52125a7fe49248ce5e883fed6c935a +https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.51-pyhd8ed1ab_0.conda#bd19311f73611626b31afc608af438cd +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.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda#490730480d76cf9c8f8f2849719c6e2b +https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49 +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda#0876280e409658fc6f9e75d035960333 +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.4-pyhd8ed1ab_0.conda#20f047662cf4fa8b97836111df87dbb4 +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.2-pyhd8ed1ab_0.conda#af5fa2d2186003472e766a23c46cae04 +https://conda.anaconda.org/conda-forge/noarch/comm-0.2.1-pyhd8ed1ab_0.conda#f4385072f4909bc974f6675a36e76796 +https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.1-py310hc6cd4ac_0.conda#1ea80564b80390fa25da16e4211eb801 +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.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094 +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.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de +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.42-pyha770c72_0.conda#0bf64bf10eee21f46ac83c161917fa86 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda#140a7f159396547e9799aa98f9f0742e +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.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883 +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.22.2-pyh707e725_0.conda#f0abe827c8a7c6d91bccdf90cb1fbee3 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda#a0bc3eec34b0fab84be6b2da94e98e20 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py310hff52083_0.conda#cb92c27600d5716fd526a206aa43342c +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/zeromq-4.3.5-h59595ed_1.conda#7fc9d3288d2420bb3637647621018000 +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py310h795f18f_0.conda#fa09f98f3acfd3f5de30bd2d27d5cb7f +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4-py310h2372a71_0.conda#48f39c24349d9ae5c8e8873c42fb6170 +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.1-pyhd8ed1ab_0.conda#c03972cfce69ad913d520c652e5ed908 +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.3-pyhd33586a_0.conda#e0deff12c601ce5cb7476f93718f3168 +https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda#45846a970e71ac98fd327da5d40a0a2c +https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310h2372a71_4.conda#68ee85860502d53c8cbfa0e4cef0f6cb +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.8.19.20240311-pyhd8ed1ab_0.conda#bd1f4958ce0d78874e98f6b28e3da15e +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-2.4-py310hff52083_3.conda#08ec1463dbc5c806a32fc431874032ca +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-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.17.3-pyhd8ed1ab_0.conda#7a709748e93f0b2c33d6b5b676b6d9d0 +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.6.3-pyhd8ed1ab_1.conda#2ac0d00a0fb3f1a4c81c460ba56bb23b +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-69.1.1-pyhd8ed1ab_0.conda#576de899521b7d43674ba3ef6eae9142 +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.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.2-pyhd8ed1ab_0.conda#b019696a453a799ba5301a6fdbb23589 +https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b +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.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.2-pyhd8ed1ab_0.conda#5ab3248dd05c543dc631276455ef6a54 +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.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2 +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda#50ad31e07d706aae88b14a4ac9c73f23 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.10.0-pyhd8ed1ab_0.conda#016d56f5d81b9364d1da5f4895a2a9f8 +https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.4-pyhd8ed1ab_0.conda#91f93e1ebf6535be518715432d89fd92 +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.22-pyhd8ed1ab_0.conda#2fa51897d3aee2fe1636b98d9a6236dc +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.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda#327bfe1c99154f02259d29810bd70afc +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.4-pyhd8ed1ab_0.conda#5af1ffec7c245d1ab2bf0cec0148a4c3 +https://conda.anaconda.org/conda-forge/noarch/amazon-codewhisperer-jupyterlab-ext-2.0.1-pyhd8ed1ab_0.conda#ab9bb3e630d872e9d38c8c18a0cba7b4 +https://conda.anaconda.org/conda-forge/noarch/aws-embedded-metrics-3.2.0-pyhd8ed1ab_0.conda#e1c511655b6e9eb0265c9715c7fa410f +https://conda.anaconda.org/conda-forge/noarch/croniter-1.4.1-pyhd8ed1ab_0.conda#7a4568626f8d6e7c63dcb25d5501a967 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.12.2-ha770c72_0.conda#4f04ceee8d953367da7de726af233303 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.2-pyhd8ed1ab_0.conda#7a0bfebd69213722427cb61b077b4187 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.2-pyhd8ed1ab_0.conda#e14e35cc4a5c90694bb41c5317b576a8 +https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.13-py310h2372a71_1.conda#cc014fc24717772959bf4fb4c7e66057 +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.3-py310hc6cd4ac_0.conda#fb478fd83c001cbf8ab01c29b857262e +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.49-py310h2372a71_1.conda#cdeaf46006791202a7597bf2a0e6ad9e +https://conda.anaconda.org/conda-forge/noarch/jupyter_scheduler-2.5.1-pyha770c72_0.conda#3d250834fde789b6cb96dc11a43d1df2 +https://conda.anaconda.org/conda-forge/noarch/jupyter-scheduler-2.5.1-hd8ed1ab_0.conda#bb6463ad5d244321f64a231ba9b6cf2a +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-scheduler-3.0.7-pyhd8ed1ab_1.conda#ee635c11a576839138a93fc46e0f389b +https://conda.anaconda.org/conda-forge/linux-64/cryptography-42.0.5-py310h75e40e8_0.conda#47e6ea7109182e9e48f8c5839f1bded7 +https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda#1482e77f87c6a702a7e05ef22c9b197b +https://conda.anaconda.org/conda-forge/noarch/pyathena-3.3.0-pyhd8ed1ab_0.conda#b96ed30b70ce32b4b88cf63cc8bc9e86 +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-py310hcfd0673_0.conda#d6df7beac08573177dd9a6a560d1d180 +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.0-pyhd8ed1ab_0.conda#4501c96a5e9f18239ae6e5944604d493 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-execution-0.1.2-pyhd8ed1ab_0.conda#a16fa2f5c791f94b459acd5c34ab8670 +https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.4.4-pyhd8ed1ab_0.conda#2e2f31b3b1c866c29636377e14f8c4c6 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-magic-0.1.0-pyhd8ed1ab_0.conda#4fd1875033a6ca132d227f3587415fd5 +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.3-pyhd8ed1ab_0.conda#6618ce22c81277d6ebaa45364c9d6b76 +https://conda.anaconda.org/conda-forge/linux-64/ansi2html-1.9.1-py310hff52083_0.conda#2213ea76fd340e7c848c1be0cbdfc579 +https://conda.anaconda.org/conda-forge/noarch/textwrap3-0.9.2-py_0.tar.bz2#1f84e74e9dbe2e5ae38c58496bffaca8 +https://conda.anaconda.org/conda-forge/noarch/ansiwrap-0.8.4-py_0.tar.bz2#f09557e2a7cbd2470a2ab6353000cebd +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.5.0-h27087fc_0.tar.bz2#a08150fd2298460cd1fcccf626305642 +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.0.3-py310hff52083_0.conda#7d18b84331cda8271c9ed67d1ca05d47 +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.43-hcad00b1_0.conda#8292dea9e022d9610a11fce5e0896ed8 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.0-hf2295e7_0.conda#6c0d5a4f5292e54bf9b8dc14ee7df448 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b +https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 +https://conda.anaconda.org/conda-forge/noarch/autogluon.common-0.8.2-pyhd8ed1ab_4.conda#e24166dee3b1430877a324715caf8f5d +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py310hd41b1e2_0.conda#85d2aaa7af046528d339da1e813c3a9f +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.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.conda#d47dee1856d9cb955b8076eeff304a5b +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda#72637c58d36d9475fda24700c9796f19 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.49.0-py310h2372a71_0.conda#e61ae80fde506b70a88e5e06376d2068 +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-py310hd41b1e2_1.conda#b8d67603d43b23ce7e988a5d81a7ab79 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda#323e90742f0f48fc22bea908735f55e6 +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.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda#82bf6f63eb15ef719b556b63feec3a77 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 +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.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea +https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py310h582fbeb_1.conda#cf62f6cff3536eafaaa0c740b0bf7465 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.3-py310h62c0568_0.conda#4a7296c0273eb01dfbed728dd6a6725a +https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py310hb13e2d6_0.conda#f0063b2885bfae11324a00a693f88781 +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.3.0-pyhc1e730c_0.conda#698d2d2b621640bddb9191f132967c9f +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.1.post1-py310h1fdf081_0.conda#2706ad1a5f6cbad8b57d4094889d1e33 +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.2-pyhd8ed1ab_0.conda#2b8dfb969f984497f3f98409a9545776 +https://conda.anaconda.org/conda-forge/linux-64/autogluon.core-0.8.2-light_py310h2d11d36_6.conda#9de8e45568202a91466af4d849c7e919 +https://conda.anaconda.org/conda-forge/noarch/autogluon.features-0.8.2-pyhd8ed1ab_3.conda#c827eccfb0ddb1484d0e00f45242b8f8 +https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py310hff52083_1.conda#a677136a83b823803d2f92045f885be2 +https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2#a556fa60840fcb9dd739d186bfd252f7 +https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca +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/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/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.21.4-pyhd8ed1ab_0.conda#d47cf217a7bcc3a03dd1c6169c3f0f98 +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.16-py310h2372a71_0.conda#efdca5c3783dae00552f389bd7b56c3d +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.0-hd590300_0.conda#71b89db63b5b504e7afc8ad901172e1e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.1-hc309b26_1.conda#cc09293a2c2b7fd77aff284f370c12c0 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h4d4d85c_2.conda#9ca99452635fe03eb5fa937f5ae604b0 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.49-h06160fa_0.conda#1d78349eb26366ecc034a4afe70a8534 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-he9a53bd_1.conda#8a24e5820f4a0ffd2ed9c4722cd5d7ca +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.11-h00aa349_4.conda#cb932dff7328ff620ce8059c9968b095 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h4d4d85c_1.conda#eba092fc6de212a01de0065f38fe8bbb +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.3-h28f7589_1.conda#97503d3e565004697f1651753aa95b9e +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h4d4d85c_1.conda#30f9df85ce23cd14faa9a4dfa50cca2b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.1-h2e3709c_4.conda#2cf21b1cbc1c096a28ffa2892257a2c1 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.3-hb447be9_1.conda#c520669eb0be9269a5f0d8ef62531882 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.14-hf3aad02_1.conda#a968ffa7e9fe0c257628033d393e512f +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.21.0-hb942446_5.conda#07d92ed5403ad7b5c66ffd7d5b8f7e57 +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.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.27.0-hd590300_0.conda#f6afff0e9ee08d2f1b897881a4f38cdb +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.5.0-hca28451_0.conda#7144d5a828e2cae218e0e3c98d8a0aeb +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-h85b1a90_19.conda#0605d3d60857fc07bd6a11e878fe0f08 +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.6.0-h6f12383_0.tar.bz2#b31f3565cb84435407594e548a2fb7b2 +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda#d1db1b8be7c3a8983dcbbbfe4f0765de +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/re2-2023.03.02-h8c504da_0.conda#206f8fa808748f6e90599c3368a1114e +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.54.3-hb20ce57_0.conda#7af7c59ab24db007dfd82e0a3a343f66 +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hac9eb74_1.conda#0dee716254497604762957076ac76540 +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.18.1-h8fd135c_2.conda#bbf65f7688512872f063810623b755dc +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/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 +https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h2f23424_1.conda#9571eb3eb0f7fe8b59956a7786babbcd +https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.16-h0b41bf4_1.conda#28bfe2cb11357ccc5be21101a6b7ce86 +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda#aeffb7c06b5f65e55e6c637408dc4100 +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda#39aa3b356d10d7e5add0c540945a0944 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-12.0.1-hb87d912_8_cpu.conda#3f3b11398fe79b578e3c44dd00a44e4a +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-12.0.1-py310h0576679_8_cpu.conda#27f55ccfd038d6665facb04a0aa572c5 +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.4.1-py310h2372a71_0.conda#b631b889b0b4bc2fca7b8b977ca484b2 +https://conda.anaconda.org/conda-forge/noarch/datasets-2.18.0-pyhd8ed1ab_0.conda#3482c9b417757df305ff4e3a7e4b7c10 +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/gdown-5.1.0-pyhd8ed1ab_0.conda#6f880647c0270648f710f334c60bc76c +https://conda.anaconda.org/conda-forge/linux-64/libsentencepiece-0.1.99-h180e1df_0.conda#056064bd3ef47439e3e78fac28449fbf +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-python-0.1.99-py310hebdb9f0_0.conda#b3a5908ac3912b26d6a8b77faebe6eca +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-spm-0.1.99-h180e1df_0.conda#c67cc412366709c1c3225f19f8aed63b +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-0.1.99-hff52083_0.conda#578969452de13e4ad69edf18ee2b3d5a +https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyhc8e2a94_3.tar.bz2#a362b2124b06aad102e2ee4581acee7d +https://conda.anaconda.org/conda-forge/linux-64/regex-2023.12.25-py310h2372a71_0.conda#4a9ba4e7af60356e63b38a6d419acad6 +https://conda.anaconda.org/conda-forge/noarch/sacremoses-0.0.53-pyhd8ed1ab_0.tar.bz2#76c3c384fe0941f1b08193736e8e277a +https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.4.2-py310hcb5633a_0.conda#a1e978544ef765ef9ac2f2320e43bacd +https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.13.3-py310he1f1126_0.conda#ea2281fe0bf70c1c83393565342a8a8c +https://conda.anaconda.org/conda-forge/noarch/transformers-4.31.0-pyhd8ed1ab_0.conda#8cccf394a00fbfef2f3d6028422ae5cc +https://conda.anaconda.org/conda-forge/noarch/nlpaug-1.1.11-pyhd8ed1ab_1.conda#4e231f0fa7db9388cf4c8539d623ac62 +https://conda.anaconda.org/conda-forge/noarch/nltk-3.8.1-pyhd8ed1ab_0.conda#518c769ca4273480a99be6e559a26192 +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.2.3-pyhd8ed1ab_0.conda#cebc9f0fc6eebdcc368bb30ba30f2fd5 +https://conda.anaconda.org/conda-forge/noarch/markdown-3.5.2-pyhd8ed1ab_0.conda#db7b48fa4eeb0c21b2f3f5b1f7d9ebcf +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.42.0-pyhd8ed1ab_0.conda#1cdea58981c5cbc17b51973bcaddcea7 +https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda#8591c748f98dcc02253003533bc2e4b1 +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/protobuf-4.21.12-py310heca2aa9_0.conda#90bb7e1b729c4b50272cf78be97ab912 +https://conda.anaconda.org/conda-forge/noarch/pytesseract-0.3.10-pyhd8ed1ab_0.tar.bz2#04f4becceb0c032c5dbdae6ad18bd95e +https://conda.anaconda.org/conda-forge/noarch/lightning-utilities-0.10.1-pyhd8ed1ab_0.conda#4132ed16f8074bc111d477c52508fda4 +https://conda.anaconda.org/conda-forge/noarch/torchmetrics-1.0.3-pyhd8ed1ab_0.conda#4e8849ba2fa06393b7ab5a50c6a4256c +https://conda.anaconda.org/conda-forge/noarch/pytorch-lightning-2.0.9-pyhd8ed1ab_0.conda#3e96ed529412338e38af9004e22267de +https://conda.anaconda.org/conda-forge/noarch/pytorch-metric-learning-1.7.3-pyhd8ed1ab_0.conda#139aa590e345e10f4572812a329806f4 +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py310h2372a71_0.conda#21362970a6fea90ca507c253c20465f2 +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.3.0-pyhd8ed1ab_0.conda#b6c573c271bf4c062873d7f3df97c3ba +https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda#b8853659d596f967c661f544dd89ede7 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h1f7b6fc_1.conda#be6f0382440ccbf9fb01bb19ab1f1fc0 +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 +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.0.7-h0b41bf4_0.conda#49e8329110001f04923fe7e864990b0c +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.13.2-hb4ffafa_0.conda#976aaf1afd331ed7346d649da5c5c1ee +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.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f +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.2-h59595ed_1.conda#127b0be54c1c90760d7fe02ea7a56426 +https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda#418c6ca5929a611cbd69204907a83995 +https://conda.anaconda.org/conda-forge/linux-64/libavif-0.11.1-h8182462_2.conda#41c399ed4c439e37b844c24ab5621b5a +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-h59595ed_0.conda#fd486bffbf0d6841cf1456a8f2e3a995 +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.8.12-py310hc929067_0.conda#61caf809753610c4c87d583765b1d478 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.2.12-pyhd8ed1ab_0.conda#d5c8bef52be4e70c48b1400eec3eecc8 +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.19.3-py310h769672d_2.tar.bz2#c0391107b0cd0010708d6969ed759e8b +https://conda.anaconda.org/conda-forge/noarch/seqeval-1.2.2-pyhd3deb0d_0.tar.bz2#d4436c8a8b9fb6d60fe4e7b9f097f9bb +https://conda.anaconda.org/conda-forge/noarch/cachetools-5.3.3-pyhd8ed1ab_0.conda#cd4c26c702a9bcdc70ff05b609ddacbe +https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.5.1-pyhd8ed1ab_0.conda#fb1a800972b072aa4d16450983c81418 +https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.3.0-pyhd8ed1ab_0.conda#26db749166cdca55e5ef1ffdc7767d0e +https://conda.anaconda.org/conda-forge/noarch/pyopenssl-24.0.0-pyhd8ed1ab_0.conda#b50aec2c744a5c493c09cce9e2e7533e +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.28.2-pyhca7485f_0.conda#f8879cf0e5b8f7761d01bce40ce7c089 +https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda#550da20b2c2e38be9cc44bb819fda5d5 +https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_1.conda#74f76d4868dbba5870f2cf1d9b12d8f3 +https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868 +https://conda.anaconda.org/conda-forge/noarch/requests-oauthlib-1.4.0-pyhd8ed1ab_0.conda#a55b220de8970208f583e38639cfbecc +https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.0.0-pyhd8ed1ab_1.conda#569e62e95b01b53e4ec7d9abe83b7385 +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.54.3-py310heca2aa9_0.conda#7c82ea96968976ee2eb66a52f2decd8e +https://conda.anaconda.org/conda-forge/linux-64/tensorboard-data-server-0.7.0-py310h75e40e8_1.conda#e562478facfa960813945204273ecac5 +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.1-pyhd8ed1ab_0.conda#af8d825d93dbe6331ee6d61c69869ca0 +https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.12.3-pyhd8ed1ab_0.conda#429d39f86cef8d0859d639804ae67aaf +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.15.2-cuda112py310h0801bf5_1.conda#f5680c812c287a92c4390dc245df2e5d +https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 +https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-0.8.2-pyha770c72_5.conda#a8ca42e2b4ee0fd6dce729bc226dd0cc +https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda#669cd7065794633b9e64e6a9612ec700 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.1-h59595ed_0.conda#476fb82aba5358a08d52ec44e286ce33 +https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.1-h59595ed_0.conda#ee90e7ac57321f8782f8438bf647b75b +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_1.conda#6185f640c43843e5ad6fd1c5372c3f80 +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.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b +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-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 +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.52.1-ha41ecd1_0.conda#5c0cc002bf4eaa56448b0729efd6e96c +https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h280cfa0_4.conda#410f86e58e880dcc7b0e910a8e89c05c +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-he3f83f7_1.conda#03bd1ddcc942867a19528877143b9852 +https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 +https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb +https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.1-pyh22cad53_0.tar.bz2#196447bc6fd769c3eb2d51de1aa866a5 +https://conda.anaconda.org/conda-forge/linux-64/catboost-1.2.3-py310hff52083_2.conda#e063c808181593406d4d3d321ee7ffff +https://conda.anaconda.org/conda-forge/noarch/fastcore-1.5.29-pyhd8ed1ab_0.conda#155c898255baddd6b2cb95894791eeca +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-py310hff52083_0.conda#a20390cd5f5fe4d8c5f6f2e7fa6c54cf +https://conda.anaconda.org/conda-forge/linux-64/cymem-2.0.8-py310hc6cd4ac_1.conda#8e4dada89998e0cb4f97b835dff6dc7e +https://conda.anaconda.org/conda-forge/noarch/langcodes-3.3.0-pyhd8ed1ab_0.tar.bz2#aacac9c3804912c38087d1c295708493 +https://conda.anaconda.org/conda-forge/linux-64/murmurhash-1.0.10-py310hc6cd4ac_1.conda#2b0c4b4532c601ece4537cc7f3558464 +https://conda.anaconda.org/conda-forge/noarch/smart_open-5.2.1-pyhd8ed1ab_0.tar.bz2#c7a838c38e38c82edde371a9054e6c92 +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.0-pyhd8ed1ab_0.conda#5030a13b2fe5e143d5956d4943d3018f +https://conda.anaconda.org/conda-forge/noarch/pathy-0.10.2-pyhd8ed1ab_0.conda#69d84b5c17aea4d7350f3536bcde7296 +https://conda.anaconda.org/conda-forge/linux-64/preshed-3.0.9-py310hc6cd4ac_1.conda#a2a27c2eafd1e280555ae954df088fc3 +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-py310hc6cd4ac_1.conda#7cd9d4be6f55ccb53cbd7125f2e6a0fb +https://conda.anaconda.org/conda-forge/linux-64/confection-0.1.4-py310h17c5347_0.conda#72b63825959fc040cab8ed0f12f2040e +https://conda.anaconda.org/conda-forge/linux-64/cython-blis-0.7.10-py310h1f7b6fc_2.conda#6a0165d9e76c443ed66d2e8b733aa133 +https://conda.anaconda.org/conda-forge/linux-64/wasabi-1.1.2-py310hff52083_0.conda#8ed9f04ed8e1373063cd03b9d5c86ce3 +https://conda.anaconda.org/conda-forge/linux-64/thinc-8.2.2-py310hcb52e73_0.conda#550b37537f05740f1c9a38d63d843b3c +https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.16.0-pyhd8ed1ab_0.conda#8d75941f621306e58b7642394a8bad87 +https://conda.anaconda.org/conda-forge/noarch/weasel-0.3.4-pyhd8ed1ab_0.conda#a53c82e61a1173c887e84fc50842eec4 +https://conda.anaconda.org/conda-forge/linux-64/spacy-3.7.2-py310hcb52e73_0.conda#c966d5a09c130d0bcfce4126643ddc74 +https://conda.anaconda.org/conda-forge/noarch/fastai-2.7.14-pyhd8ed1ab_0.conda#9854ef355cc4bd1e2aac40998f721fed +https://conda.anaconda.org/conda-forge/linux-64/lightgbm-3.3.5-py310heca2aa9_0.conda#d2595ddab22cbca7409b28e3105afd0a +https://conda.anaconda.org/conda-forge/linux-64/libxgboost-1.7.6-cuda118_hd3b444d_6.conda#78509401d0879ef5aac72b8d1e104493 +https://conda.anaconda.org/conda-forge/linux-64/py-xgboost-1.7.6-cuda118_py310h9840055_6.conda#1d3da6268c67fe8b84c32cd0dc174bb4 +https://conda.anaconda.org/conda-forge/linux-64/xgboost-1.7.6-cuda118_py310h9840055_6.conda#f6a6f34c91b92f72dfdb47d3c7efcbbe +https://conda.anaconda.org/conda-forge/noarch/autogluon.tabular-0.8.2-pyha770c72_4.conda#17fad1cdb563ddad16ab0ba4c085bcb3 +https://conda.anaconda.org/conda-forge/noarch/gluonts-0.13.7-pyhd8ed1ab_0.conda#1684b578508d9918b2dcadd4c365c61a +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.42.0-py310h1b8f574_1.conda#e2a5e9f92629c8e4c8611883a35745b4 +https://conda.anaconda.org/conda-forge/linux-64/numba-0.59.0-py310h7dc5dd1_1.conda#966bc2bc095723310d746106e7c91791 +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.7.3-pyhd8ed1ab_0.conda#7a2b34b4c9bff2545200b3746da70f11 +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.1-py310h1f7b6fc_0.conda#d98c3749dd466513dd921f5818f4b001 +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.9.0-py310hc6cd4ac_0.conda#cab4b543b897dcf548edb3018fe45f9e +https://conda.anaconda.org/conda-forge/noarch/autogluon.timeseries-0.8.2-pyhd8ed1ab_4.conda#a64157275daf72a557fe4a9d843a9e1d +https://conda.anaconda.org/conda-forge/noarch/autogluon-0.8.2-pyhd8ed1ab_4.conda#7ff9ac51e09bd5991970a7df53b4bee6 +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.10-pyhd8ed1ab_0.conda#16b73b2c4ff7dda8bbecf88aadfe2027 +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.10-pyhd8ed1ab_0.conda#521f489e3babeddeec638c2add7e9e64 +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.2-pyhd8ed1ab_0.conda#67f86478c78637f68c1f3858973021f2 +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda#85a2189ecd2fcdd86e92b2d4ea8fe461 +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.1-pyhd8ed1ab_0.conda#f1a93f00b030dbede427001862c2854b +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.1-pyha770c72_0.conda#5528a3eda283b421055c89bface19a1c +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.4-pyhd8ed1ab_0.conda#169c4c0a396d83164215f54024031ec8 +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.1.2-py310hcb5633a_0.conda#6dd3d49f65ceb05dbd527a5b6301611b +https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda#4eccaeba205f0aed9ac3a9ea58568ca3 +https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda#17064acba08d3686f1135b5ec1b32b12 +https://conda.anaconda.org/conda-forge/linux-64/black-24.2.0-py310hff52083_0.conda#92bb721ab7aca4e9ac80d07ca0f3fe5c +https://conda.anaconda.org/conda-forge/noarch/boltons-23.1.1-pyhd8ed1ab_0.conda#56febe65315cc388a5d20adf2b39a74d +https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda#35ef8bc24bd34074ebae3c943d551728 +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h2aa1ff5_1.conda#3bf887827d1968275978361a6e405e4f +https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.28-hfc55251_0.conda#66d4f5d8256542d9ebfa341d690c5e03 +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.7-had39da4_0.conda#9fff450354fbcd1510ef178730732241 +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.7-py310h39ff949_0.conda#58d84efb37d517c64f4e48f75fd6180d +https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.1.0-pyhd8ed1ab_0.conda#304dc78ad6e52e0fd663df1d484c1531 +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py310h1275a96_0.conda#54698ba13cd3494547b289cd86a2176a +https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda#38253361efb303deead3eab39ae9269b +https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda#8a3ae7f6318376aa08ea753367bb7dd6 +https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda#bbdb409974cd6cb30071b1d978302726 +https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda#bfdb7c5c6ad1077c82a69a8642c87aff +https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.0.2-py310hff52083_0.conda#4837faab0d3e665df57fef662148c6a3 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 +https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py310h2372a71_0.conda#0adaac9a86d59adae2bc86b3cdef2df1 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py310h2372a71_0.conda#dcf6d2535586c77b31425ed835610c54 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py310h2372a71_0.conda#50b7d9b39099cdbabf65bf27df73a793 +https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda#08316d001eca8854392cf2837828ea11 +https://conda.anaconda.org/conda-forge/linux-64/conda-23.11.0-py310hff52083_1.conda#d5278ac990c67d5ed51584998aa16c5a +https://conda.anaconda.org/conda-forge/noarch/contextlib2-21.6.0-pyhd8ed1ab_0.tar.bz2#5b26a831440be04c39531a8ce20f5d71 +https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.4-h7f98852_1002.tar.bz2#e728e874159b042d92b90238a3cb0dc2 +https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.27-h54b06d7_7.conda#dce22f70b4e5a407ce88f2be046f4ceb +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.1.2-pyhd8ed1ab_0.tar.bz2#3c3de74912f11d2b590184f03c7cd09b +https://conda.anaconda.org/conda-forge/noarch/flask-3.0.2-pyhd8ed1ab_0.conda#7f88df670921cc31c309719e30c22021 +https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2#a11f356d6f93b74b4a84e9501afd48b4 +https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda#016bd4f61878a57f19c8cd744708a1f1 +https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.21.1-pyhd8ed1ab_0.conda#ae303aa7dc100bc3bc01b5a3b7ca3567 +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.4-pyhd8ed1ab_0.conda#1190a6456351690603b2d64d1cbf5b4a +https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d +https://conda.anaconda.org/conda-forge/noarch/deepmerge-1.1.1-pyhd8ed1ab_0.conda#d91c3d8ac3f2ab36ca4ea32ac42f731e +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py310hd41b1e2_0.conda#dc5263dcaa1347e5a456ead3537be27d +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.3.0-pyhd8ed1ab_0.conda#e4736ce580a5b289f7412f14ae8df42a +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py310h2372a71_3.conda#a29a0825809cd3a780097472be176618 +https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda#a5e792523b028b06d7ce6e65a6cd4a33 +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.0.0-pyhd8ed1ab_0.conda#aec5f308cb9055e83c59afecd5fcb58a +https://conda.anaconda.org/conda-forge/noarch/docstring-to-markdown-0.15-pyhd8ed1ab_0.conda#a3a1e6af2926a3affcd6f2072871f551 +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-1.7.4-hf47d654_0_cpu.conda#8fd132db65c8d51caea2ae7cde4b450c +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-avx2-1.7.4-h1234567_0_cpu.conda#7eb943c067a63c4d8af526c2df9f2c1b +https://conda.anaconda.org/conda-forge/linux-64/faiss-1.7.4-py310h9ed8947_0_cpu.conda#99665c710087f7a964915b5ea0097465 +https://conda.anaconda.org/conda-forge/linux-64/faiss-cpu-1.7.4-h718b53a_0.conda#7a9e6f72c36ff5a5eeb61660fd6fdf8d +https://conda.anaconda.org/conda-forge/noarch/starlette-0.27.0-pyhd8ed1ab_0.conda#6facb6fc201d334257db8004439705d3 +https://conda.anaconda.org/conda-forge/noarch/fastapi-0.103.2-pyhd8ed1ab_0.conda#fb243b6796ab7d64b14e00c279620c04 +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-23.5.26-h59595ed_1.conda#913a1c6fd00b66f33392a129e835ceca +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda#650a7807e689642dddd3590eb817beed +https://conda.anaconda.org/conda-forge/noarch/gast-0.4.0-pyh9f0ad1d_0.tar.bz2#42323c77b73462199fca93bc8ac9279d +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.42-pyhd8ed1ab_0.conda#6bc8e496351bafd761c0922c3ebd989a +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.0-hde27a5a_0.conda#072608f7b71755993a294c3cdf909fa6 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.0-hf2295e7_0.conda#56a4c2ed7723cf0847752f74dba1929f +https://conda.anaconda.org/conda-forge/noarch/google-pasta-0.2.0-pyh8c360ce_0.tar.bz2#26e27d7d3d7fe2336b543dd8e0f12cbf +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.9-h98fc4e7_0.conda#bcc7157b06fce7f5e055402a8135dfd8 +https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 +https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f +https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.9-h8e1006c_0.conda#614b81f8ed66c56b640faee7076ad14a +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda#d471a5c3abc984b662d9bae3bb7fd8a5 +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.10.0-nompi_py310h65828d5_101.conda#44c185c5b133ad6d1d449839407aa863 +https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.3.2-py310hcc13569_0.conda#1ad84020b1ab816d7ab3f3d0859faf40 +https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.14-cpu_py310h67d73b5_1.conda#392c325994aa96727edd0069a0620e31 +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.3.0-pyhc1e730c_2.conda#7a94ac68b892daa9f17ae8a52b31ed81 +https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.3.0-hd8ed1ab_2.conda#ab262acd95cb73f3ed9426cc4204ac3a +https://conda.anaconda.org/conda-forge/noarch/jax-0.4.20-pyhd8ed1ab_0.conda#5abbd950bd427bc9d929e35ecbf814d1 +https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 +https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 +https://conda.anaconda.org/conda-forge/linux-64/orjson-3.9.15-py310hcb5633a_0.conda#da1b180ccf1dce5d87d145ad2fc14e5a +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.23-pyhd8ed1ab_0.conda#47f6000bc923694707d26830ffce16c5 +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.30-pyhd8ed1ab_0.conda#0b8700c1a97ac5eb1fb7041673693ba1 +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.27-pyhd8ed1ab_0.conda#ea8d0112e538642eecfaa938d1b5628d +https://conda.anaconda.org/conda-forge/noarch/langchain-0.1.9-pyhd8ed1ab_0.conda#2ad37682610ac2643b46e4cc0215f410 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.11.0-pyhd8ed1ab_0.conda#aee09f3966655f81d05fcfb5bae3612d +https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.5.2-py310h47bb294_0.conda#a83ae186d0a4b78c98b32781d7c15d48 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.11.0-pyhd8ed1ab_0.conda#e8ab7975630aff4624d3ed1fa32ac552 +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.1.0-pyhd8ed1ab_0.conda#b404b1dc6ca2bbb66663507150cb6927 +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.0-pyhd8ed1ab_1.conda#5020cacc18e3d5f62a81513f26ac2cac +https://conda.anaconda.org/conda-forge/noarch/keras-2.12.0-pyhd8ed1ab_0.conda#e6e18b33e8d62200099f2eed98a263b6 +https://conda.anaconda.org/conda-forge/noarch/keras-preprocessing-1.1.2-pyhd8ed1ab_0.tar.bz2#a79b00989a0d89791021902f37fe2f9e +https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef +https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_ha2b6cf4_4.conda#898e0dd993afbed0d871b60c2eb33b83 +https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_hb11cfb5_4.conda#c90f4cbb57839c98fef8f830e4b9972f +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda#4d18d86916705d352d5f4adfb7f0edd3 +https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.6-h088ca5b_0.conda#99dca02fb74a8dfa3653c6673674f90c +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.4-h59595ed_0.conda#3f1017b4141e943d9bc8739237f749e8 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda#3366af27f0b593544a6cd453c7932ac5 +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.41-hd590300_0.conda#81f740407b45e3f9047b3174fa94eb9e +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-hd429924_1.conda#1dbcc04604fdf1e526e6d1b0b6938396 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py310hc6cd4ac_0.conda#68d5bfccaba2d89a7812098dd3966d9b +https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda#ef5333594a958b25912002886b82b253 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda#e87530d1b12dd7f4e0f856dc07358d60 +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.98-h1d7d5a4_0.conda#54b56c2fdf973656b748e0378900ec13 +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda#f4fe7a6e3d7c78c9de048ea9dda21690 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.3-py310hff52083_0.conda#e91d183a307d7bd667003291f690cbb0 +https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.19.0-hb753e55_0.conda#0b4a67051e3b3812818ccf2f4ee2fd4e +https://conda.anaconda.org/conda-forge/noarch/papermill-2.5.0-pyhd8ed1ab_0.conda#e6e69b90afd3d0597da8f1f74cc4bd58 +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/linux-64/py-xgboost-gpu-1.7.6-py310h9840055_6.conda#f148fc36e36779537fd0845178f8a619 +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.19.0-py310hc6cd4ac_1.conda#2e0bde59a8aa215c7402c181c20c9605 +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-py310h98feede_1.conda#0329fda0ebbccee7b3e9dbf4a377d0ce +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda#37c47ea93ef00dd80d880fc4ba21256a +https://conda.anaconda.org/conda-forge/noarch/pylint-3.0.4-pyhd8ed1ab_0.conda#d536ee47166d8984c6acd8114ac26cf1 +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.9.1-py310h2372a71_2.conda#0a99339b277686c7d824abf9de396901 +https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.7-pyh59ac667_0.conda#24c1a37849fcd4c74923a38b029b208f +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py310h98feede_0.conda#a5ea028f63386c53a2b8ff4d09065259 +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.10.0-pyhd8ed1ab_0.conda#5db77c6a130648e78913e3a2c39895a0 +https://conda.anaconda.org/conda-forge/noarch/pytoolconfig-1.2.5-pyhd8ed1ab_0.conda#2d6bdf5a69cfcd1fcc7f2b900cb4082f +https://conda.anaconda.org/conda-forge/noarch/rope-1.12.0-pyhd8ed1ab_0.conda#5b17bee6351fbe4ae28da178866b2c73 +https://conda.anaconda.org/conda-forge/noarch/whatthepatch-1.0.5-pyhd8ed1ab_0.conda#e62ea65e1979c18c4c9034567e7105c5 +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.10.0-pyhd8ed1ab_0.conda#51da987dc568ec0484bc22e1e2025830 +https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.0.0-cuda112py310h9871d0b_200.conda#7d0ebb619bd0c1a451d167886d2cc904 +https://conda.anaconda.org/conda-forge/noarch/requests-kerberos-0.14.0-pyh707e725_1.conda#411293bff0dc86f9f9bc0c0e1f227623 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.12-pyhd8ed1ab_0.conda#fe8919032eb413e76a7802f013a536ee +https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py310hcb5633a_0.conda#892e912e08ba834aa77ff25f983a4e9e +https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.4-pyhd8ed1ab_0.conda#464806d1a3b2c6a88102844c12934038 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-common-0.1.12-pyhd8ed1ab_0.conda#5e9db875cf08e9773aba4176e5c0edbb +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-emr-extension-0.1.9-pyhd8ed1ab_0.conda#589f97989a6db8b2f21a53881fdd1d97 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-0.2.0-pyhd8ed1ab_0.conda#9331340b5a844f5ac2c74eda353aa23e +https://conda.anaconda.org/conda-forge/noarch/sagemaker-kernel-wrapper-0.0.2-pyhd8ed1ab_0.conda#99480997ca2429b75169c896cc988cdb +https://conda.anaconda.org/conda-forge/noarch/schema-0.7.5-pyhd8ed1ab_1.conda#750d2ce4311d1502b51ad814407f043d +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.212.0-pyhd8ed1ab_0.conda#eb07d50e30f7b423929f9081118d3979 +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.0.21-pyhd8ed1ab_0.conda#fa0e9b0ca6c3e96d350711b6dbddaeb6 +https://conda.anaconda.org/conda-forge/linux-64/sasl-0.3.1-py310hd8f1fbe_2.tar.bz2#9b15d1759c99ad57ae43080cfca56d73 +https://conda.anaconda.org/conda-forge/linux-64/supervisor-4.2.5-py310hff52083_2.conda#7fe7fa4d80a99dc44ba15ef3e82707af +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.12.1-cuda112py310h1d65785_1.conda#4aa4b1fa72143cf84ff5776275f8b40d +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.12.1-cuda112py310ha5e6de5_1.conda#bb21f985bf64adc3751a3a1578a0a69e +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.12.1-cuda112py310h457873b_1.conda#eee4abf81acd7c5205f476838713cfba +https://conda.anaconda.org/conda-forge/linux-64/uvicorn-0.28.0-py310hff52083_0.conda#b9bc890a3389cf5b42a0a5428719cdd0 diff --git a/build_artifacts/v1/v1.6/v1.6.0/patch_glue_pyspark.json b/build_artifacts/v1/v1.6/v1.6.0/patch_glue_pyspark.json new file mode 100644 index 00000000..ab70fd8d --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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 and Ray", + "env": {"request_origin": "SageMakerStudioPySparkNotebook", "glue_version": "3.0"}, + "language": "python" +} + diff --git a/build_artifacts/v1/v1.6/v1.6.0/patch_glue_spark.json b/build_artifacts/v1/v1.6/v1.6.0/patch_glue_spark.json new file mode 100644 index 00000000..1bd168e7 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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/v1/v1.6/v1.6.0/source-version.txt b/build_artifacts/v1/v1.6/v1.6.0/source-version.txt new file mode 100644 index 00000000..a73b4325 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/source-version.txt @@ -0,0 +1 @@ +1.5.2 \ No newline at end of file From 529a18325e1f3afffef2d61451d8fc72efd7818f Mon Sep 17 00:00:00 2001 From: Prayag Singh <146795897+aws-prayags@users.noreply.github.com> Date: Wed, 13 Mar 2024 16:34:57 -0700 Subject: [PATCH 10/32] feature: Add sagemaker-code-editor package (#185) Co-authored-by: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> --- .gitignore | 1 + .../v1.6.0/cpu.additional_packages_env.in | 1 + .../v1.6.0/gpu.additional_packages_env.in | 1 + template/v1/Dockerfile | 37 ++++++++++++++++--- .../code_editor_machine_settings.json | 4 ++ .../v1/dirs/etc/code-editor/extensions.txt | 3 ++ .../conf.d/supervisord-code-editor.conf | 11 ++++++ .../supervisor/conf.d/supervisord-common.conf | 18 +++++++++ .../conf.d/supervisord-jupyter-lab.conf | 11 ++++++ .../dirs/usr/local/bin/entrypoint-code-editor | 16 ++++++++ .../v1/dirs/usr/local/bin/start-code-editor | 25 +++++++++++++ .../v1/sagemaker-code-editor.test.Dockerfile | 6 +++ test/test_dockerfile_based_harness.py | 2 + 13 files changed, 130 insertions(+), 6 deletions(-) create mode 100644 template/v1/dirs/etc/code-editor/code_editor_machine_settings.json create mode 100644 template/v1/dirs/etc/code-editor/extensions.txt create mode 100644 template/v1/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf create mode 100644 template/v1/dirs/etc/supervisor/conf.d/supervisord-common.conf create mode 100644 template/v1/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf create mode 100755 template/v1/dirs/usr/local/bin/entrypoint-code-editor create mode 100755 template/v1/dirs/usr/local/bin/start-code-editor create mode 100644 test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile diff --git a/.gitignore b/.gitignore index 083d7323..16058d2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ __pycache__ .idea +.DS_Store \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in b/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in index da501cc0..d84fe408 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in +++ b/build_artifacts/v1/v1.6/v1.6.0/cpu.additional_packages_env.in @@ -1,2 +1,3 @@ +conda-forge::sagemaker-code-editor[version='>=1.0.0'] conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.0,<2'] conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<2'] diff --git a/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in b/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in index da501cc0..d84fe408 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in +++ b/build_artifacts/v1/v1.6/v1.6.0/gpu.additional_packages_env.in @@ -1,2 +1,3 @@ +conda-forge::sagemaker-code-editor[version='>=1.0.0'] conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.0,<2'] conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<2'] diff --git a/template/v1/Dockerfile b/template/v1/Dockerfile index 06001a53..de5b910c 100644 --- a/template/v1/Dockerfile +++ b/template/v1/Dockerfile @@ -45,6 +45,23 @@ RUN apt-get update && \ : RUN echo "source /usr/local/bin/_activate_current_env.sh" | tee --append /etc/profile +# CodeEditor - create server, user data dirs +RUN 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 + +# Merge in OS directory tree contents. +RUN 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 +RUN mkdir -p /etc/code-editor/extensions && \ + while IFS= read -r 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/ @@ -64,6 +81,17 @@ RUN micromamba install -y --name base --file /tmp/$ENV_IN_FILENAME && \ ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo ln -s $(which python3) /usr/bin/python +# Configure CodeEditor - Install extensions and set preferences +RUN \ + 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 RUN install-glue-kernels && \ @@ -91,18 +119,15 @@ RUN HOME_DIR="/home/${NB_USER}/licenses" \ && ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh ${HOME_DIR} python \ && rm -rf ${HOME_DIR}/oss_compliance* -# Merge in OS directory tree contents. -RUN 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} - # 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 +RUN rm -rf /etc/code-editor + # Create supervisord runtime directory RUN mkdir -p /var/run/supervisord && \ chmod a+rw /var/run/supervisord diff --git a/template/v1/dirs/etc/code-editor/code_editor_machine_settings.json b/template/v1/dirs/etc/code-editor/code_editor_machine_settings.json new file mode 100644 index 00000000..a391da92 --- /dev/null +++ b/template/v1/dirs/etc/code-editor/code_editor_machine_settings.json @@ -0,0 +1,4 @@ +{ + "python.terminal.activateEnvironment": false, + "python.defaultInterpreterPath": "/opt/conda/bin/python" +} \ No newline at end of file diff --git a/template/v1/dirs/etc/code-editor/extensions.txt b/template/v1/dirs/etc/code-editor/extensions.txt new file mode 100644 index 00000000..ee18444b --- /dev/null +++ b/template/v1/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 \ No newline at end of file diff --git a/template/v1/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf b/template/v1/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf new file mode 100644 index 00000000..cac5669b --- /dev/null +++ b/template/v1/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/v1/dirs/etc/supervisor/conf.d/supervisord-common.conf b/template/v1/dirs/etc/supervisor/conf.d/supervisord-common.conf new file mode 100644 index 00000000..27820d4c --- /dev/null +++ b/template/v1/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/v1/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf b/template/v1/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf new file mode 100644 index 00000000..5694ac11 --- /dev/null +++ b/template/v1/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/v1/dirs/usr/local/bin/entrypoint-code-editor b/template/v1/dirs/usr/local/bin/entrypoint-code-editor new file mode 100755 index 00000000..677c9803 --- /dev/null +++ b/template/v1/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 \ No newline at end of file diff --git a/template/v1/dirs/usr/local/bin/start-code-editor b/template/v1/dirs/usr/local/bin/start-code-editor new file mode 100755 index 00000000..bc97106c --- /dev/null +++ b/template/v1/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/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile b/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile new file mode 100644 index 00000000..77046cb5 --- /dev/null +++ b/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile @@ -0,0 +1,6 @@ +ARG COSMOS_IMAGE +FROM $COSMOS_IMAGE + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 + +CMD ["sagemaker-code-editor", "--version"] \ No newline at end of file diff --git a/test/test_dockerfile_based_harness.py b/test/test_dockerfile_based_harness.py index 5b30df29..2f1775bb 100644 --- a/test/test_dockerfile_based_harness.py +++ b/test/test_dockerfile_based_harness.py @@ -32,6 +32,7 @@ ("jupyter-dash.test.Dockerfile", ['jupyter-dash']), ("jupyterlab-lsp.test.Dockerfile", ['jupyterlab-lsp']), ("jupyter-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']), ("altair.test.Dockerfile", ['altair']), @@ -64,6 +65,7 @@ def test_dockerfiles_for_cpu(dockerfile_path: str, required_packages: List[str], ("jupyter-dash.test.Dockerfile", ['jupyter-dash']), ("jupyterlab-lsp.test.Dockerfile", ['jupyterlab-lsp']), ("jupyter-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']), ("altair.test.Dockerfile", ['altair']), From 32ffb6eb07d386ab6fa408b4129b47a7a07b4c13 Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Wed, 13 Mar 2024 21:49:01 -0400 Subject: [PATCH 11/32] fix: Fix 1.6.0 release artifacts (#250) --- .../v1/v1.6/v1.6.0/CHANGELOG-cpu.md | 3 ++ .../v1/v1.6/v1.6.0/CHANGELOG-gpu.md | 3 ++ build_artifacts/v1/v1.6/v1.6.0/Dockerfile | 37 ++++++++++++++++--- build_artifacts/v1/v1.6/v1.6.0/RELEASE.md | 5 ++- build_artifacts/v1/v1.6/v1.6.0/cpu.env.in | 1 + build_artifacts/v1/v1.6/v1.6.0/cpu.env.out | 27 ++++++++------ .../code_editor_machine_settings.json | 4 ++ .../dirs/etc/code-editor/extensions.txt | 3 ++ .../conf.d/supervisord-code-editor.conf | 11 ++++++ .../supervisor/conf.d/supervisord-common.conf | 18 +++++++++ .../conf.d/supervisord-jupyter-lab.conf | 11 ++++++ .../dirs/usr/local/bin/entrypoint-code-editor | 16 ++++++++ .../dirs/usr/local/bin/start-code-editor | 25 +++++++++++++ build_artifacts/v1/v1.6/v1.6.0/gpu.env.in | 1 + build_artifacts/v1/v1.6/v1.6.0/gpu.env.out | 29 ++++++++------- 15 files changed, 161 insertions(+), 33 deletions(-) create mode 100644 build_artifacts/v1/v1.6/v1.6.0/dirs/etc/code-editor/code_editor_machine_settings.json create mode 100644 build_artifacts/v1/v1.6/v1.6.0/dirs/etc/code-editor/extensions.txt create mode 100644 build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf create mode 100644 build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord-common.conf create mode 100644 build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf create mode 100755 build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/entrypoint-code-editor create mode 100755 build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/start-code-editor diff --git a/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-cpu.md b/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-cpu.md index 9b40da67..d8c52b71 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-cpu.md +++ b/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-cpu.md @@ -9,7 +9,9 @@ ipython|8.21.0|8.22.2 jupyter-lsp|2.2.3|2.2.4 jupyterlab|4.1.2|4.1.4 jupyter-ai|2.9.1|2.11.0 +jupyter-server-proxy|4.1.0|4.1.2 nodejs|18.18.2|18.19.0 +python-lsp-server|1.10.0|1.10.1 sagemaker-python-sdk|2.198.1|2.212.0 uvicorn|0.27.1|0.28.0 @@ -19,3 +21,4 @@ Package | Version ---|--- amazon-sagemaker-sql-magic|0.1.0 amazon_sagemaker_sql_editor|0.1.3 +sagemaker-code-editor|1.0.0 diff --git a/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-gpu.md b/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-gpu.md index 11c91d04..503cb51d 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-gpu.md +++ b/build_artifacts/v1/v1.6/v1.6.0/CHANGELOG-gpu.md @@ -9,7 +9,9 @@ ipython|8.21.0|8.22.2 jupyter-lsp|2.2.3|2.2.4 jupyterlab|4.1.2|4.1.4 jupyter-ai|2.9.1|2.11.0 +jupyter-server-proxy|4.1.0|4.1.2 nodejs|18.18.2|18.19.0 +python-lsp-server|1.10.0|1.10.1 sagemaker-python-sdk|2.198.1|2.212.0 uvicorn|0.27.1|0.28.0 @@ -19,3 +21,4 @@ Package | Version ---|--- amazon-sagemaker-sql-magic|0.1.0 amazon_sagemaker_sql_editor|0.1.3 +sagemaker-code-editor|1.0.0 diff --git a/build_artifacts/v1/v1.6/v1.6.0/Dockerfile b/build_artifacts/v1/v1.6/v1.6.0/Dockerfile index 06001a53..de5b910c 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/Dockerfile +++ b/build_artifacts/v1/v1.6/v1.6.0/Dockerfile @@ -45,6 +45,23 @@ RUN apt-get update && \ : RUN echo "source /usr/local/bin/_activate_current_env.sh" | tee --append /etc/profile +# CodeEditor - create server, user data dirs +RUN 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 + +# Merge in OS directory tree contents. +RUN 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 +RUN mkdir -p /etc/code-editor/extensions && \ + while IFS= read -r 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/ @@ -64,6 +81,17 @@ RUN micromamba install -y --name base --file /tmp/$ENV_IN_FILENAME && \ ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo ln -s $(which python3) /usr/bin/python +# Configure CodeEditor - Install extensions and set preferences +RUN \ + 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 RUN install-glue-kernels && \ @@ -91,18 +119,15 @@ RUN HOME_DIR="/home/${NB_USER}/licenses" \ && ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh ${HOME_DIR} python \ && rm -rf ${HOME_DIR}/oss_compliance* -# Merge in OS directory tree contents. -RUN 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} - # 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 +RUN rm -rf /etc/code-editor + # Create supervisord runtime directory RUN mkdir -p /var/run/supervisord && \ chmod a+rw /var/run/supervisord diff --git a/build_artifacts/v1/v1.6/v1.6.0/RELEASE.md b/build_artifacts/v1/v1.6/v1.6.0/RELEASE.md index 7edf5c96..94f6e2c2 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/RELEASE.md +++ b/build_artifacts/v1/v1.6/v1.6.0/RELEASE.md @@ -30,7 +30,7 @@ fastapi|0.103.2|0.103.2 langchain|0.1.9|0.1.9 jupyter-ai|2.11.0|2.11.0 jupyter-dash|0.4.2|0.4.2 -jupyter-server-proxy|4.1.0|4.1.0 +jupyter-server-proxy|4.1.2|4.1.2 jupyterlab-git|0.50.0|0.50.0 keras|2.12.0|2.12.0 matplotlib|3.8.3|3.8.3 @@ -39,8 +39,9 @@ py-xgboost-gpu|1.7.6| thrift_sasl|0.4.3|0.4.3 pyhive|0.7.0|0.7.0 python-gssapi|1.8.3|1.8.3 -python-lsp-server|1.10.0|1.10.0 +python-lsp-server|1.10.1|1.10.1 pytorch-gpu|2.0.0| +sagemaker-code-editor|1.0.0|1.0.0 sagemaker-headless-execution-driver|0.0.12|0.0.12 sagemaker-jupyterlab-emr-extension|0.1.9|0.1.9 sagemaker-jupyterlab-extension|0.2.0|0.2.0 diff --git a/build_artifacts/v1/v1.6/v1.6.0/cpu.env.in b/build_artifacts/v1/v1.6/v1.6.0/cpu.env.in index bcf75dc3..f5a92f1d 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/cpu.env.in +++ b/build_artifacts/v1/v1.6/v1.6.0/cpu.env.in @@ -1,4 +1,5 @@ # This file is auto-generated. +conda-forge::sagemaker-code-editor conda-forge::amazon_sagemaker_sql_editor conda-forge::amazon-sagemaker-sql-magic conda-forge::langchain[version='>=0.1.9,<1.0.0'] diff --git a/build_artifacts/v1/v1.6/v1.6.0/cpu.env.out b/build_artifacts/v1/v1.6/v1.6.0/cpu.env.out index 8ab4700b..962573f2 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/cpu.env.out +++ b/build_artifacts/v1/v1.6/v1.6.0/cpu.env.out @@ -84,7 +84,7 @@ https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.cond https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda#0bb492cca54017ea314b809b1ee3a176 https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a 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.1.3-pyhd8ed1ab_0.conda#b865eadcceebf641fa833ee086756e8b +https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.3.0-pyhd8ed1ab_0.conda#18850e65ca439066484607b26ed09ecd https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.20.0-py310h2372a71_0.conda#e7f8dc8c62e136573c84116a5e743aed https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80 @@ -108,7 +108,7 @@ https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.4-pyhd8ed1ab_0.conda# 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.2-pyhd8ed1ab_0.conda#af5fa2d2186003472e766a23c46cae04 -https://conda.anaconda.org/conda-forge/noarch/comm-0.2.1-pyhd8ed1ab_0.conda#f4385072f4909bc974f6675a36e76796 +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.1-py310hc6cd4ac_0.conda#1ea80564b80390fa25da16e4211eb801 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.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094 @@ -156,7 +156,7 @@ https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.cond 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-69.1.1-pyhd8ed1ab_0.conda#576de899521b7d43674ba3ef6eae9142 +https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda#da214ecd521a720a9d521c68047682dc 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 @@ -165,7 +165,7 @@ https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1 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.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.2-pyhd8ed1ab_0.conda#b019696a453a799ba5301a6fdbb23589 -https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b +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.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.2-pyhd8ed1ab_0.conda#5ab3248dd05c543dc631276455ef6a54 @@ -390,8 +390,8 @@ https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.15.2-cpu_py310hb9e https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-0.8.2-pyha770c72_5.conda#a8ca42e2b4ee0fd6dce729bc226dd0cc https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda#669cd7065794633b9e64e6a9612ec700 -https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.1-h59595ed_0.conda#476fb82aba5358a08d52ec44e286ce33 -https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.1-h59595ed_0.conda#ee90e7ac57321f8782f8438bf647b75b +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda#e7ba12deb7020dd080c6c70e7b6f6a3d +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 @@ -565,9 +565,9 @@ https://conda.anaconda.org/conda-forge/noarch/jax-0.4.20-pyhd8ed1ab_0.conda#5abb https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 https://conda.anaconda.org/conda-forge/linux-64/orjson-3.9.15-py310hcb5633a_0.conda#da1b180ccf1dce5d87d145ad2fc14e5a -https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.23-pyhd8ed1ab_0.conda#47f6000bc923694707d26830ffce16c5 -https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.30-pyhd8ed1ab_0.conda#0b8700c1a97ac5eb1fb7041673693ba1 -https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.27-pyhd8ed1ab_0.conda#ea8d0112e538642eecfaa938d1b5628d +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.24-pyhd8ed1ab_0.conda#f3926a68f089b1a38c1f540944f9ee0a +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.31-pyhd8ed1ab_0.conda#3bfc5b4af9975e867d8e272fe5836d2f +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.28-pyhd8ed1ab_0.conda#d7e8f72c5e422b78b3d5f7a7aecbfae9 https://conda.anaconda.org/conda-forge/noarch/langchain-0.1.9-pyhd8ed1ab_0.conda#2ad37682610ac2643b46e4cc0215f410 https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.11.0-pyhd8ed1ab_0.conda#aee09f3966655f81d05fcfb5bae3612d https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.5.2-py310h47bb294_0.conda#a83ae186d0a4b78c98b32781d7c15d48 @@ -575,7 +575,7 @@ https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.11.0-pyhd8ed1ab_0.con 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.1.0-pyhd8ed1ab_0.conda#b404b1dc6ca2bbb66663507150cb6927 +https://conda.anaconda.org/conda-forge/noarch/jupyter-server-proxy-4.1.2-pyhd8ed1ab_0.conda#3671520b52215a5a084de08003e6d8cd 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.0-pyhd8ed1ab_1.conda#5020cacc18e3d5f62a81513f26ac2cac https://conda.anaconda.org/conda-forge/noarch/keras-2.12.0-pyhd8ed1ab_0.conda#e6e18b33e8d62200099f2eed98a263b6 @@ -590,6 +590,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#e https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda#4d18d86916705d352d5f4adfb7f0edd3 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.6-h088ca5b_0.conda#99dca02fb74a8dfa3653c6673674f90c +https://conda.anaconda.org/conda-forge/linux-64/libsecret-0.18.8-h329b89f_2.tar.bz2#9d6698e3c9585a75156d86f7ef229093 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.4-h59595ed_0.conda#3f1017b4141e943d9bc8739237f749e8 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda#3366af27f0b593544a6cd453c7932ac5 @@ -631,13 +632,15 @@ https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.9.1-py310h2372a71_2.c https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.7-pyh59ac667_0.conda#24c1a37849fcd4c74923a38b029b208f https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py310h98feede_0.conda#a5ea028f63386c53a2b8ff4d09065259 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.10.0-pyhd8ed1ab_0.conda#5db77c6a130648e78913e3a2c39895a0 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-server-base-1.10.1-pyhd8ed1ab_0.conda#1371f9394b20fd1fe7419a2aa9b38888 https://conda.anaconda.org/conda-forge/noarch/pytoolconfig-1.2.5-pyhd8ed1ab_0.conda#2d6bdf5a69cfcd1fcc7f2b900cb4082f https://conda.anaconda.org/conda-forge/noarch/rope-1.12.0-pyhd8ed1ab_0.conda#5b17bee6351fbe4ae28da178866b2c73 https://conda.anaconda.org/conda-forge/noarch/whatthepatch-1.0.5-pyhd8ed1ab_0.conda#e62ea65e1979c18c4c9034567e7105c5 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.10.0-pyhd8ed1ab_0.conda#51da987dc568ec0484bc22e1e2025830 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-server-1.10.1-pyhd8ed1ab_0.conda#15b849d7f03b7580a88a3f887db5ad40 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.0.0-hcb28a07_0.conda#f53005657267d6b1233c2852fcb84707 https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.12-pyhd8ed1ab_0.conda#fe8919032eb413e76a7802f013a536ee https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py310hcb5633a_0.conda#892e912e08ba834aa77ff25f983a4e9e https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.4-pyhd8ed1ab_0.conda#464806d1a3b2c6a88102844c12934038 diff --git a/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/code-editor/code_editor_machine_settings.json b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/code-editor/code_editor_machine_settings.json new file mode 100644 index 00000000..a391da92 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/code-editor/code_editor_machine_settings.json @@ -0,0 +1,4 @@ +{ + "python.terminal.activateEnvironment": false, + "python.defaultInterpreterPath": "/opt/conda/bin/python" +} \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/code-editor/extensions.txt b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/code-editor/extensions.txt new file mode 100644 index 00000000..ee18444b --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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 \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf new file mode 100644 index 00000000..cac5669b --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord-common.conf b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord-common.conf new file mode 100644 index 00000000..27820d4c --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf b/build_artifacts/v1/v1.6/v1.6.0/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf new file mode 100644 index 00000000..5694ac11 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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/v1/v1.6/v1.6.0/dirs/usr/local/bin/entrypoint-code-editor b/build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/entrypoint-code-editor new file mode 100755 index 00000000..677c9803 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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 \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/start-code-editor b/build_artifacts/v1/v1.6/v1.6.0/dirs/usr/local/bin/start-code-editor new file mode 100755 index 00000000..bc97106c --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.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/v1/v1.6/v1.6.0/gpu.env.in b/build_artifacts/v1/v1.6/v1.6.0/gpu.env.in index bd6c64a4..ed7b3746 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/gpu.env.in +++ b/build_artifacts/v1/v1.6/v1.6.0/gpu.env.in @@ -1,4 +1,5 @@ # This file is auto-generated. +conda-forge::sagemaker-code-editor conda-forge::amazon_sagemaker_sql_editor conda-forge::amazon-sagemaker-sql-magic conda-forge::langchain[version='>=0.1.9,<1.0.0'] diff --git a/build_artifacts/v1/v1.6/v1.6.0/gpu.env.out b/build_artifacts/v1/v1.6/v1.6.0/gpu.env.out index 481fb3de..b9aba45c 100644 --- a/build_artifacts/v1/v1.6/v1.6.0/gpu.env.out +++ b/build_artifacts/v1/v1.6/v1.6.0/gpu.env.out @@ -38,7 +38,7 @@ https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda# https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py310h2372a71_0.conda#bd19b3096442ea342c4a5208379660b1 https://conda.anaconda.org/conda-forge/linux-64/cudatoolkit-11.8.0-h4ba93d1_13.conda#eb43f5f1f16e2fad2eba22219c3e499b https://conda.anaconda.org/conda-forge/noarch/cuda-version-11.8-h70ddcb2_3.conda#670f0e1593b8c1d84f57ad5fe5256799 -https://conda.anaconda.org/conda-forge/linux-64/cudnn-8.8.0.121-hcdd5f01_4.conda#d51a9b97e9ad89deae47bec4293ad0b6 +https://conda.anaconda.org/conda-forge/linux-64/cudnn-8.9.7.29-hbc23b4c_3.conda#4a2d5fab2871d95544de4e1752948d0f https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda#0c1729b74a8152fde6a38ba0a2ab9f45 https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py310h2372a71_0.conda#f6703fa0214a00bf49d1bef6dc7672d0 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda#e7d8df6509ba635247ff9aea31134262 @@ -90,7 +90,7 @@ https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.cond https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda#0bb492cca54017ea314b809b1ee3a176 https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a 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.1.3-pyhd8ed1ab_0.conda#b865eadcceebf641fa833ee086756e8b +https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.3.0-pyhd8ed1ab_0.conda#18850e65ca439066484607b26ed09ecd https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.20.0-py310h2372a71_0.conda#e7f8dc8c62e136573c84116a5e743aed https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80 @@ -114,7 +114,7 @@ https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.4-pyhd8ed1ab_0.conda# 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.2-pyhd8ed1ab_0.conda#af5fa2d2186003472e766a23c46cae04 -https://conda.anaconda.org/conda-forge/noarch/comm-0.2.1-pyhd8ed1ab_0.conda#f4385072f4909bc974f6675a36e76796 +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.1-py310hc6cd4ac_0.conda#1ea80564b80390fa25da16e4211eb801 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.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094 @@ -162,7 +162,7 @@ https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.cond 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-69.1.1-pyhd8ed1ab_0.conda#576de899521b7d43674ba3ef6eae9142 +https://conda.anaconda.org/conda-forge/noarch/setuptools-69.2.0-pyhd8ed1ab_0.conda#da214ecd521a720a9d521c68047682dc 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 @@ -171,7 +171,7 @@ https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1 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.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.2-pyhd8ed1ab_0.conda#b019696a453a799ba5301a6fdbb23589 -https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b +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.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.2-pyhd8ed1ab_0.conda#5ab3248dd05c543dc631276455ef6a54 @@ -396,8 +396,8 @@ https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.15.2-cuda112py310h https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-0.8.2-pyha770c72_5.conda#a8ca42e2b4ee0fd6dce729bc226dd0cc https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda#669cd7065794633b9e64e6a9612ec700 -https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.1-h59595ed_0.conda#476fb82aba5358a08d52ec44e286ce33 -https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.1-h59595ed_0.conda#ee90e7ac57321f8782f8438bf647b75b +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda#e7ba12deb7020dd080c6c70e7b6f6a3d +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 @@ -571,9 +571,9 @@ https://conda.anaconda.org/conda-forge/noarch/jax-0.4.20-pyhd8ed1ab_0.conda#5abb https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 https://conda.anaconda.org/conda-forge/linux-64/orjson-3.9.15-py310hcb5633a_0.conda#da1b180ccf1dce5d87d145ad2fc14e5a -https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.23-pyhd8ed1ab_0.conda#47f6000bc923694707d26830ffce16c5 -https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.30-pyhd8ed1ab_0.conda#0b8700c1a97ac5eb1fb7041673693ba1 -https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.27-pyhd8ed1ab_0.conda#ea8d0112e538642eecfaa938d1b5628d +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.24-pyhd8ed1ab_0.conda#f3926a68f089b1a38c1f540944f9ee0a +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.31-pyhd8ed1ab_0.conda#3bfc5b4af9975e867d8e272fe5836d2f +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.28-pyhd8ed1ab_0.conda#d7e8f72c5e422b78b3d5f7a7aecbfae9 https://conda.anaconda.org/conda-forge/noarch/langchain-0.1.9-pyhd8ed1ab_0.conda#2ad37682610ac2643b46e4cc0215f410 https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.11.0-pyhd8ed1ab_0.conda#aee09f3966655f81d05fcfb5bae3612d https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.5.2-py310h47bb294_0.conda#a83ae186d0a4b78c98b32781d7c15d48 @@ -581,7 +581,7 @@ https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.11.0-pyhd8ed1ab_0.con 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.1.0-pyhd8ed1ab_0.conda#b404b1dc6ca2bbb66663507150cb6927 +https://conda.anaconda.org/conda-forge/noarch/jupyter-server-proxy-4.1.2-pyhd8ed1ab_0.conda#3671520b52215a5a084de08003e6d8cd 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.0-pyhd8ed1ab_1.conda#5020cacc18e3d5f62a81513f26ac2cac https://conda.anaconda.org/conda-forge/noarch/keras-2.12.0-pyhd8ed1ab_0.conda#e6e18b33e8d62200099f2eed98a263b6 @@ -596,6 +596,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#e https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda#4d18d86916705d352d5f4adfb7f0edd3 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.6-h088ca5b_0.conda#99dca02fb74a8dfa3653c6673674f90c +https://conda.anaconda.org/conda-forge/linux-64/libsecret-0.18.8-h329b89f_2.tar.bz2#9d6698e3c9585a75156d86f7ef229093 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.4-h59595ed_0.conda#3f1017b4141e943d9bc8739237f749e8 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda#3366af27f0b593544a6cd453c7932ac5 @@ -638,14 +639,16 @@ https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.9.1-py310h2372a71_2.c https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.7-pyh59ac667_0.conda#24c1a37849fcd4c74923a38b029b208f https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py310h98feede_0.conda#a5ea028f63386c53a2b8ff4d09065259 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.10.0-pyhd8ed1ab_0.conda#5db77c6a130648e78913e3a2c39895a0 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-server-base-1.10.1-pyhd8ed1ab_0.conda#1371f9394b20fd1fe7419a2aa9b38888 https://conda.anaconda.org/conda-forge/noarch/pytoolconfig-1.2.5-pyhd8ed1ab_0.conda#2d6bdf5a69cfcd1fcc7f2b900cb4082f https://conda.anaconda.org/conda-forge/noarch/rope-1.12.0-pyhd8ed1ab_0.conda#5b17bee6351fbe4ae28da178866b2c73 https://conda.anaconda.org/conda-forge/noarch/whatthepatch-1.0.5-pyhd8ed1ab_0.conda#e62ea65e1979c18c4c9034567e7105c5 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.10.0-pyhd8ed1ab_0.conda#51da987dc568ec0484bc22e1e2025830 +https://conda.anaconda.org/conda-forge/noarch/python-lsp-server-1.10.1-pyhd8ed1ab_0.conda#15b849d7f03b7580a88a3f887db5ad40 https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.0.0-cuda112py310h9871d0b_200.conda#7d0ebb619bd0c1a451d167886d2cc904 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.0.0-hcb28a07_0.conda#f53005657267d6b1233c2852fcb84707 https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.12-pyhd8ed1ab_0.conda#fe8919032eb413e76a7802f013a536ee https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py310hcb5633a_0.conda#892e912e08ba834aa77ff25f983a4e9e https://conda.anaconda.org/conda-forge/noarch/ypy-websocket-0.8.4-pyhd8ed1ab_0.conda#464806d1a3b2c6a88102844c12934038 From 71f79ec88323d14a4005e6ca17b36e05db9e7c54 Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Thu, 14 Mar 2024 14:15:03 -0400 Subject: [PATCH 12/32] fix: Fix codebuild authentication (#244) --- .github/workflows/build-image.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 54494308..2805338a 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -57,7 +57,7 @@ jobs: # Note - CodeBuild depends on this branch name. Don't change without corresponding backend change. run: git checkout -b release-${{ steps.calc_target.outputs.target_version }} - name: Generate artifacts - run: python ./src/main.py create-${{ inputs.release-type }}-version-artifacts --base-patch-version ${{ inputs.base-version }} + run: python ./src/main.py create-${{ inputs.release-type }}-version-artifacts --base-patch-version ${{ inputs.base-version }} --force - name: Commit .in artifacts to branch env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -89,13 +89,14 @@ jobs: uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.START_CODEBUILD_ROLE }} - aws-region: us-west-2 + aws-region: us-east-1 # CodeBuild timeout of 8 hours role-duration-seconds: 3840 + audience: https://sts.us-east-1.amazonaws.com - name: Run CodeBuild uses: dark-mechanicum/aws-codebuild@v1 env: CODEBUILD__sourceVersion: 'pr/${{ needs.open-pr.outputs.pr_id }}' with: - projectName: 'buildtestpublicimage1C7307A-9AzES2hf19lW' - buildspec: '{"imageOverride": "aws/codebuild/standard:7.0"}' + projectName: ${{ secrets.CODEBUILD_JOB_NAME }} + buildspec: '{"imageOverride": "aws/codebuild/standard:7.0", "imagePullCredentialsTypeOverride": "CODEBUILD"}' From 17300e1d4df453f34c795205568a746bc890be1f Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Sat, 16 Mar 2024 13:45:03 -0400 Subject: [PATCH 13/32] change: Push to ECR before running tests (#251) --- src/main.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main.py b/src/main.py index c1448f1b..c614f90f 100644 --- a/src/main.py +++ b/src/main.py @@ -174,16 +174,17 @@ def build_images(args): args.force, args.skip_tests) generate_release_notes(target_version) + # Upload to ECR before running tests so that only the exact image which we tested goes to public + # TODO: Move after tests are stabilized + if args.target_ecr_repo is not None: + _push_images_upstream(image_versions, args.region) + if not args.skip_tests: print(f'Will now run tests against: {image_ids}') _test_local_images(image_ids, args.target_patch_version) else: print('Will skip tests.') - # We only upload to ECR once all images are successfully built locally. - if args.target_ecr_repo is not None: - _push_images_upstream(image_versions, args.region) - def _push_images_upstream(image_versions_to_push: list[dict[str, str]], region: str): print(f'Will now push the images to ECR: {image_versions_to_push}') From ecddf40634ea6620dfd09b4fcec129be09116eb7 Mon Sep 17 00:00:00 2001 From: Prayag Singh <146795897+aws-prayags@users.noreply.github.com> Date: Tue, 19 Mar 2024 13:37:06 -0700 Subject: [PATCH 14/32] fix: Updated tests for sagemaker-code-editor (#275) --- CONTRIBUTING.md | 17 ++++- template/v1/Dockerfile | 2 +- .../v1/sagemaker-code-editor.test.Dockerfile | 5 +- .../run_sagemaker_code_editor_tests.sh | 70 +++++++++++++++++++ 4 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 test/test_artifacts/v1/scripts/run_sagemaker_code_editor_tests.sh diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 74e827f5..3a028449 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,14 +40,14 @@ GitHub provides additional document on [forking a repository](https://help.githu [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). -## For adding new Python packages to SageMaker Distribution -SageMaker Distribution will add new Python packages only during a minor/major version release. +## For adding new Conda packages to SageMaker Distribution +SageMaker Distribution will add new Conda packages only during a minor/major version release. New packages will not be added during a patch version release. Follow these steps for sending out a pull request for adding new packages: 1. Identify the latest version of SageMaker Distribution. 2. Create the next minor/major version's build artifacts folder here: https://github.com/aws/sagemaker-distribution/tree/main/build_artifacts -3. Currently, SageMaker Distribution is using Conda forge channel as our source (for Python +3. Currently, SageMaker Distribution is using Conda forge channel as our source (for Conda packages). Ensure that the new package which you are trying to add is present in Conda forge channel. https://conda-forge.org/feedstock-outputs/ 4. Create {cpu/gpu}.additional_packages_env.in file in that folder containing the new packages. @@ -90,6 +90,17 @@ Follow these steps for sending out a pull request for adding new packages: that we can look more into it. 7. Add the relevant tests in https://github.com/aws/sagemaker-distribution/blob/main/test/test_dockerfile_based_harness.py and run the build command once again without `--skip-tests` flag. + ``` + # When writing or debugging tests, you can use standard pytest commands and arguments (https://docs.pytest.org/en/8.0.x/how-to/usage.html) to run specific tests and change test execution behavior. Some useful commands: + + # The sagemaker-distribution conda env set up earlier should be activated before running below commands + + # Runs only tests for cpu image, verbose, shows reason for skipped tests + python -m pytest -n auto -m cpu -vv -rs --local-image-version $VERSION + + # In addition to above, running only tests matching a name pattern + python -m pytest -n auto -m cpu -vv -rs -k "" --local-image-version $VERSION + ``` 8. Submit the PR containing the following files. * {cpu/gpu}.additional_packages_env.in files * All the test files and test_dockerfile_based_harness.py changes diff --git a/template/v1/Dockerfile b/template/v1/Dockerfile index de5b910c..592f2d08 100644 --- a/template/v1/Dockerfile +++ b/template/v1/Dockerfile @@ -57,7 +57,7 @@ RUN rsync -a ${DIRECTORY_TREE_STAGE_DIR}/ / && \ # CodeEditor - download the extensions RUN mkdir -p /etc/code-editor/extensions && \ - while IFS= read -r url; do \ + 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 diff --git a/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile b/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile index 77046cb5..aba8d967 100644 --- a/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile +++ b/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile @@ -3,4 +3,7 @@ FROM $COSMOS_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 -CMD ["sagemaker-code-editor", "--version"] \ No newline at end of file +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/v1/scripts/run_sagemaker_code_editor_tests.sh b/test/test_artifacts/v1/scripts/run_sagemaker_code_editor_tests.sh new file mode 100644 index 00000000..b6db3bd6 --- /dev/null +++ b/test/test_artifacts/v1/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 \ No newline at end of file From 68d52e9fa4d3f19c43ecd1109500d4603a98228e Mon Sep 17 00:00:00 2001 From: Prayag Singh <146795897+aws-prayags@users.noreply.github.com> Date: Tue, 19 Mar 2024 13:37:24 -0700 Subject: [PATCH 15/32] change: Updated argument name for sagemaker-distribution image in tests (#274) --- test/test_artifacts/v0/autogluon.test.Dockerfile | 4 ++-- test/test_artifacts/v0/boto3.test.Dockerfile | 4 ++-- test/test_artifacts/v0/glue-sessions.test.Dockerfile | 4 ++-- test/test_artifacts/v0/keras.test.Dockerfile | 4 ++-- test/test_artifacts/v0/matplotlib.test.Dockerfile | 4 ++-- test/test_artifacts/v0/numpy.test.Dockerfile | 4 ++-- test/test_artifacts/v0/pandas.test.Dockerfile | 4 ++-- test/test_artifacts/v0/pytorch.examples.Dockerfile | 4 ++-- .../v0/sagemaker-headless-execution-driver.test.Dockerfile | 4 ++-- .../v0/sagemaker-studio-analytics-extension.test.Dockerfile | 4 ++-- test/test_artifacts/v0/scipy.test.Dockerfile | 4 ++-- test/test_artifacts/v0/sm-python-sdk.test.Dockerfile | 4 ++-- test/test_artifacts/v0/tensorflow.examples.Dockerfile | 4 ++-- test/test_artifacts/v1/altair.test.Dockerfile | 4 ++-- .../v1/amazon-codewhisperer-jupyterlab-ext.test.Dockerfile | 4 ++-- .../v1/amazon-sagemaker-sql-magic.test.Dockerfile | 4 ++-- .../v1/amazon_sagemaker_sql_editor.test.Dockerfile | 4 ++-- test/test_artifacts/v1/autogluon.test.Dockerfile | 4 ++-- test/test_artifacts/v1/boto3.test.Dockerfile | 4 ++-- test/test_artifacts/v1/glue-sessions.test.Dockerfile | 4 ++-- test/test_artifacts/v1/jupyter-ai.test.Dockerfile | 4 ++-- test/test_artifacts/v1/jupyter-dash.test.Dockerfile | 4 ++-- test/test_artifacts/v1/jupyterlab-git.test.Dockerfile | 4 ++-- test/test_artifacts/v1/jupyterlab-lsp.test.Dockerfile | 4 ++-- test/test_artifacts/v1/keras.test.Dockerfile | 4 ++-- test/test_artifacts/v1/matplotlib.test.Dockerfile | 4 ++-- test/test_artifacts/v1/notebook.test.Dockerfile | 4 ++-- test/test_artifacts/v1/numpy.test.Dockerfile | 4 ++-- test/test_artifacts/v1/pandas.test.Dockerfile | 4 ++-- test/test_artifacts/v1/python-lsp-server.test.Dockerfile | 4 ++-- test/test_artifacts/v1/pytorch.examples.Dockerfile | 4 ++-- test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile | 4 ++-- .../v1/sagemaker-headless-execution-driver.test.Dockerfile | 4 ++-- .../v1/sagemaker-studio-analytics-extension.test.Dockerfile | 4 ++-- test/test_artifacts/v1/scipy.test.Dockerfile | 4 ++-- test/test_artifacts/v1/serve.test.Dockerfile | 4 ++-- test/test_artifacts/v1/sm-python-sdk.test.Dockerfile | 4 ++-- test/test_artifacts/v1/tensorflow.examples.Dockerfile | 4 ++-- test/test_dockerfile_based_harness.py | 2 +- 39 files changed, 77 insertions(+), 77 deletions(-) diff --git a/test/test_artifacts/v0/autogluon.test.Dockerfile b/test/test_artifacts/v0/autogluon.test.Dockerfile index 34867534..238e6553 100644 --- a/test/test_artifacts/v0/autogluon.test.Dockerfile +++ b/test/test_artifacts/v0/autogluon.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE as base +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE as base ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v0/boto3.test.Dockerfile b/test/test_artifacts/v0/boto3.test.Dockerfile index c0c88104..dc88bb39 100644 --- a/test/test_artifacts/v0/boto3.test.Dockerfile +++ b/test/test_artifacts/v0/boto3.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo apt-get update && sudo apt-get install -y git && \ diff --git a/test/test_artifacts/v0/glue-sessions.test.Dockerfile b/test/test_artifacts/v0/glue-sessions.test.Dockerfile index 46606021..221f82b9 100644 --- a/test/test_artifacts/v0/glue-sessions.test.Dockerfile +++ b/test/test_artifacts/v0/glue-sessions.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v0/keras.test.Dockerfile b/test/test_artifacts/v0/keras.test.Dockerfile index a022f0a4..1bf1713b 100644 --- a/test/test_artifacts/v0/keras.test.Dockerfile +++ b/test/test_artifacts/v0/keras.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v0/matplotlib.test.Dockerfile b/test/test_artifacts/v0/matplotlib.test.Dockerfile index 95b63731..7c987704 100644 --- a/test/test_artifacts/v0/matplotlib.test.Dockerfile +++ b/test/test_artifacts/v0/matplotlib.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v0/numpy.test.Dockerfile b/test/test_artifacts/v0/numpy.test.Dockerfile index e0cb73dc..91035599 100644 --- a/test/test_artifacts/v0/numpy.test.Dockerfile +++ b/test/test_artifacts/v0/numpy.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v0/pandas.test.Dockerfile b/test/test_artifacts/v0/pandas.test.Dockerfile index 59df0d7d..a893b549 100644 --- a/test/test_artifacts/v0/pandas.test.Dockerfile +++ b/test/test_artifacts/v0/pandas.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN pip install pandas[test] diff --git a/test/test_artifacts/v0/pytorch.examples.Dockerfile b/test/test_artifacts/v0/pytorch.examples.Dockerfile index ca4e6615..d9a42c7a 100644 --- a/test/test_artifacts/v0/pytorch.examples.Dockerfile +++ b/test/test_artifacts/v0/pytorch.examples.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo apt-get update && \ diff --git a/test/test_artifacts/v0/sagemaker-headless-execution-driver.test.Dockerfile b/test/test_artifacts/v0/sagemaker-headless-execution-driver.test.Dockerfile index f4a579aa..e91d8914 100644 --- a/test/test_artifacts/v0/sagemaker-headless-execution-driver.test.Dockerfile +++ b/test/test_artifacts/v0/sagemaker-headless-execution-driver.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v0/sagemaker-studio-analytics-extension.test.Dockerfile b/test/test_artifacts/v0/sagemaker-studio-analytics-extension.test.Dockerfile index ba835032..0aba7650 100644 --- a/test/test_artifacts/v0/sagemaker-studio-analytics-extension.test.Dockerfile +++ b/test/test_artifacts/v0/sagemaker-studio-analytics-extension.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v0/scipy.test.Dockerfile b/test/test_artifacts/v0/scipy.test.Dockerfile index 106a0384..b93ad8bf 100644 --- a/test/test_artifacts/v0/scipy.test.Dockerfile +++ b/test/test_artifacts/v0/scipy.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v0/sm-python-sdk.test.Dockerfile b/test/test_artifacts/v0/sm-python-sdk.test.Dockerfile index 4a9c8d7d..1e9426d1 100644 --- a/test/test_artifacts/v0/sm-python-sdk.test.Dockerfile +++ b/test/test_artifacts/v0/sm-python-sdk.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo apt-get update && sudo apt-get install -y git && \ diff --git a/test/test_artifacts/v0/tensorflow.examples.Dockerfile b/test/test_artifacts/v0/tensorflow.examples.Dockerfile index f88bc9f2..7d5d6e64 100644 --- a/test/test_artifacts/v0/tensorflow.examples.Dockerfile +++ b/test/test_artifacts/v0/tensorflow.examples.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo apt-get update && \ diff --git a/test/test_artifacts/v1/altair.test.Dockerfile b/test/test_artifacts/v1/altair.test.Dockerfile index ae25a698..3747904b 100644 --- a/test/test_artifacts/v1/altair.test.Dockerfile +++ b/test/test_artifacts/v1/altair.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/amazon-codewhisperer-jupyterlab-ext.test.Dockerfile b/test/test_artifacts/v1/amazon-codewhisperer-jupyterlab-ext.test.Dockerfile index f05fd674..1ef68a71 100644 --- a/test/test_artifacts/v1/amazon-codewhisperer-jupyterlab-ext.test.Dockerfile +++ b/test/test_artifacts/v1/amazon-codewhisperer-jupyterlab-ext.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/amazon-sagemaker-sql-magic.test.Dockerfile b/test/test_artifacts/v1/amazon-sagemaker-sql-magic.test.Dockerfile index 44679eb8..642c9e6a 100644 --- a/test/test_artifacts/v1/amazon-sagemaker-sql-magic.test.Dockerfile +++ b/test/test_artifacts/v1/amazon-sagemaker-sql-magic.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/amazon_sagemaker_sql_editor.test.Dockerfile b/test/test_artifacts/v1/amazon_sagemaker_sql_editor.test.Dockerfile index 635358bf..2182ba15 100644 --- a/test/test_artifacts/v1/amazon_sagemaker_sql_editor.test.Dockerfile +++ b/test/test_artifacts/v1/amazon_sagemaker_sql_editor.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/autogluon.test.Dockerfile b/test/test_artifacts/v1/autogluon.test.Dockerfile index 6b448697..fb02d1ab 100644 --- a/test/test_artifacts/v1/autogluon.test.Dockerfile +++ b/test/test_artifacts/v1/autogluon.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE as base +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE as base ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/boto3.test.Dockerfile b/test/test_artifacts/v1/boto3.test.Dockerfile index 5223f561..e195e39c 100644 --- a/test/test_artifacts/v1/boto3.test.Dockerfile +++ b/test/test_artifacts/v1/boto3.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo apt-get update && sudo apt-get install -y git && \ diff --git a/test/test_artifacts/v1/glue-sessions.test.Dockerfile b/test/test_artifacts/v1/glue-sessions.test.Dockerfile index 9f87a400..b820533e 100644 --- a/test/test_artifacts/v1/glue-sessions.test.Dockerfile +++ b/test/test_artifacts/v1/glue-sessions.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/jupyter-ai.test.Dockerfile b/test/test_artifacts/v1/jupyter-ai.test.Dockerfile index e231adf7..34ddaa3f 100644 --- a/test/test_artifacts/v1/jupyter-ai.test.Dockerfile +++ b/test/test_artifacts/v1/jupyter-ai.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/jupyter-dash.test.Dockerfile b/test/test_artifacts/v1/jupyter-dash.test.Dockerfile index b4b92126..540527ad 100644 --- a/test/test_artifacts/v1/jupyter-dash.test.Dockerfile +++ b/test/test_artifacts/v1/jupyter-dash.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/jupyterlab-git.test.Dockerfile b/test/test_artifacts/v1/jupyterlab-git.test.Dockerfile index 11732655..cb04575f 100644 --- a/test/test_artifacts/v1/jupyterlab-git.test.Dockerfile +++ b/test/test_artifacts/v1/jupyterlab-git.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/jupyterlab-lsp.test.Dockerfile b/test/test_artifacts/v1/jupyterlab-lsp.test.Dockerfile index 0aed1baf..c13df62a 100644 --- a/test/test_artifacts/v1/jupyterlab-lsp.test.Dockerfile +++ b/test/test_artifacts/v1/jupyterlab-lsp.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/keras.test.Dockerfile b/test/test_artifacts/v1/keras.test.Dockerfile index 0d03504f..b7bc892b 100644 --- a/test/test_artifacts/v1/keras.test.Dockerfile +++ b/test/test_artifacts/v1/keras.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/matplotlib.test.Dockerfile b/test/test_artifacts/v1/matplotlib.test.Dockerfile index 95b63731..7c987704 100644 --- a/test/test_artifacts/v1/matplotlib.test.Dockerfile +++ b/test/test_artifacts/v1/matplotlib.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/notebook.test.Dockerfile b/test/test_artifacts/v1/notebook.test.Dockerfile index 16ca7e39..9afb9e08 100644 --- a/test/test_artifacts/v1/notebook.test.Dockerfile +++ b/test/test_artifacts/v1/notebook.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/numpy.test.Dockerfile b/test/test_artifacts/v1/numpy.test.Dockerfile index 6e622f40..bab08af3 100644 --- a/test/test_artifacts/v1/numpy.test.Dockerfile +++ b/test/test_artifacts/v1/numpy.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/pandas.test.Dockerfile b/test/test_artifacts/v1/pandas.test.Dockerfile index 68b0bfa0..f3c2f73e 100644 --- a/test/test_artifacts/v1/pandas.test.Dockerfile +++ b/test/test_artifacts/v1/pandas.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +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 diff --git a/test/test_artifacts/v1/python-lsp-server.test.Dockerfile b/test/test_artifacts/v1/python-lsp-server.test.Dockerfile index 24b38e7f..eb73f0e0 100644 --- a/test/test_artifacts/v1/python-lsp-server.test.Dockerfile +++ b/test/test_artifacts/v1/python-lsp-server.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/pytorch.examples.Dockerfile b/test/test_artifacts/v1/pytorch.examples.Dockerfile index ca4e6615..d9a42c7a 100644 --- a/test/test_artifacts/v1/pytorch.examples.Dockerfile +++ b/test/test_artifacts/v1/pytorch.examples.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo apt-get update && \ diff --git a/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile b/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile index aba8d967..aca7efdf 100644 --- a/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile +++ b/test/test_artifacts/v1/sagemaker-code-editor.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/sagemaker-headless-execution-driver.test.Dockerfile b/test/test_artifacts/v1/sagemaker-headless-execution-driver.test.Dockerfile index 675960df..5f57f316 100644 --- a/test/test_artifacts/v1/sagemaker-headless-execution-driver.test.Dockerfile +++ b/test/test_artifacts/v1/sagemaker-headless-execution-driver.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/sagemaker-studio-analytics-extension.test.Dockerfile b/test/test_artifacts/v1/sagemaker-studio-analytics-extension.test.Dockerfile index ba835032..0aba7650 100644 --- a/test/test_artifacts/v1/sagemaker-studio-analytics-extension.test.Dockerfile +++ b/test/test_artifacts/v1/sagemaker-studio-analytics-extension.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/scipy.test.Dockerfile b/test/test_artifacts/v1/scipy.test.Dockerfile index cf88992a..e117b158 100644 --- a/test/test_artifacts/v1/scipy.test.Dockerfile +++ b/test/test_artifacts/v1/scipy.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/serve.test.Dockerfile b/test/test_artifacts/v1/serve.test.Dockerfile index 671fd73a..cab72baf 100644 --- a/test/test_artifacts/v1/serve.test.Dockerfile +++ b/test/test_artifacts/v1/serve.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 diff --git a/test/test_artifacts/v1/sm-python-sdk.test.Dockerfile b/test/test_artifacts/v1/sm-python-sdk.test.Dockerfile index 4a9c8d7d..1e9426d1 100644 --- a/test/test_artifacts/v1/sm-python-sdk.test.Dockerfile +++ b/test/test_artifacts/v1/sm-python-sdk.test.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo apt-get update && sudo apt-get install -y git && \ diff --git a/test/test_artifacts/v1/tensorflow.examples.Dockerfile b/test/test_artifacts/v1/tensorflow.examples.Dockerfile index f88bc9f2..7d5d6e64 100644 --- a/test/test_artifacts/v1/tensorflow.examples.Dockerfile +++ b/test/test_artifacts/v1/tensorflow.examples.Dockerfile @@ -1,5 +1,5 @@ -ARG COSMOS_IMAGE -FROM $COSMOS_IMAGE +ARG SAGEMAKER_DISTRIBUTION_IMAGE +FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 RUN sudo apt-get update && \ diff --git a/test/test_dockerfile_based_harness.py b/test/test_dockerfile_based_harness.py index 2f1775bb..b3dca6d1 100644 --- a/test/test_dockerfile_based_harness.py +++ b/test/test_dockerfile_based_harness.py @@ -132,7 +132,7 @@ def _validate_docker_images(dockerfile_path: str, required_packages: List[str], image, _ = _docker_client.images.build(path=test_artifacts_path, dockerfile=dockerfile_path, tag=dockerfile_path.lower().replace('.', '-'), - rm=True, buildargs={'COSMOS_IMAGE': docker_image_identifier}) + rm=True, buildargs={'SAGEMAKER_DISTRIBUTION_IMAGE': docker_image_identifier}) except BuildError as e: for line in e.build_log: if 'stream' in line: From 41790a1d2138bffa300d541ea8a9969b03e65368 Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Tue, 19 Mar 2024 17:50:48 -0400 Subject: [PATCH 16/32] fix: Fixes for automated testing (#276) --- test/test_artifacts/v1/keras.test.Dockerfile | 3 +-- test/test_artifacts/v1/pytorch.examples.Dockerfile | 9 +++++---- test/test_artifacts/v1/scripts/run_autogluon_tests.sh | 2 +- test/test_artifacts/v1/sm-python-sdk.test.Dockerfile | 5 ++--- test/test_dockerfile_based_harness.py | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/test/test_artifacts/v1/keras.test.Dockerfile b/test/test_artifacts/v1/keras.test.Dockerfile index b7bc892b..f5cb224f 100644 --- a/test/test_artifacts/v1/keras.test.Dockerfile +++ b/test/test_artifacts/v1/keras.test.Dockerfile @@ -8,7 +8,7 @@ RUN sudo apt-get update && sudo apt-get install -y git graphviz && \ : # Some of the keras guides requires pydot and graphviz to be installed -RUN micromamba install -y --freeze-installed conda-forge::pydot nvidia::cuda-nvcc +RUN micromamba install -y --freeze-installed conda-forge::pydot "nvidia::cuda-nvcc>=11.8,<11.9" ENV XLA_FLAGS=--xla_gpu_cuda_data_dir=/opt/conda WORKDIR "keras-io/guides" @@ -22,4 +22,3 @@ 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/v1/pytorch.examples.Dockerfile b/test/test_artifacts/v1/pytorch.examples.Dockerfile index d9a42c7a..f2c3231a 100644 --- a/test/test_artifacts/v1/pytorch.examples.Dockerfile +++ b/test/test_artifacts/v1/pytorch.examples.Dockerfile @@ -2,10 +2,11 @@ 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/pytorch/examples && \ - : +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" diff --git a/test/test_artifacts/v1/scripts/run_autogluon_tests.sh b/test/test_artifacts/v1/scripts/run_autogluon_tests.sh index 036d1432..ea68f6a4 100644 --- a/test/test_artifacts/v1/scripts/run_autogluon_tests.sh +++ b/test/test_artifacts/v1/scripts/run_autogluon_tests.sh @@ -1,6 +1,6 @@ #!/bin/bash -AUTOGLUON_VERSION=$(micromamba list | grep autogluon | tr -s ' ' | cut -d ' ' -f 3) +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 diff --git a/test/test_artifacts/v1/sm-python-sdk.test.Dockerfile b/test/test_artifacts/v1/sm-python-sdk.test.Dockerfile index 1e9426d1..623efbf6 100644 --- a/test/test_artifacts/v1/sm-python-sdk.test.Dockerfile +++ b/test/test_artifacts/v1/sm-python-sdk.test.Dockerfile @@ -2,9 +2,8 @@ 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/aws/sagemaker-python-sdk.git && \ - : +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" diff --git a/test/test_dockerfile_based_harness.py b/test/test_dockerfile_based_harness.py index b3dca6d1..69f81a6b 100644 --- a/test/test_dockerfile_based_harness.py +++ b/test/test_dockerfile_based_harness.py @@ -130,7 +130,7 @@ def _validate_docker_images(dockerfile_path: str, required_packages: List[str], try: image, _ = _docker_client.images.build(path=test_artifacts_path, - dockerfile=dockerfile_path, + dockerfile=dockerfile_path, shmsize='256000000', tag=dockerfile_path.lower().replace('.', '-'), rm=True, buildargs={'SAGEMAKER_DISTRIBUTION_IMAGE': docker_image_identifier}) except BuildError as e: From 4f1565895288da6f485bffb0fd375ee982eef8cd Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Tue, 19 Mar 2024 19:03:50 -0400 Subject: [PATCH 17/32] fix: Improvements for testing (#280) --- .github/workflows/build-image.yml | 2 +- src/main.py | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 2805338a..9da68321 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -91,7 +91,7 @@ jobs: role-to-assume: ${{ secrets.START_CODEBUILD_ROLE }} aws-region: us-east-1 # CodeBuild timeout of 8 hours - role-duration-seconds: 3840 + role-duration-seconds: 28800 audience: https://sts.us-east-1.amazonaws.com - name: Run CodeBuild uses: dark-mechanicum/aws-codebuild@v1 diff --git a/src/main.py b/src/main.py index c614f90f..31d3a98f 100644 --- a/src/main.py +++ b/src/main.py @@ -199,11 +199,16 @@ 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) + exit_codes = [] + image_ids = [] for (image_id, config) in zip(image_ids_to_test, _image_generator_configs): - exit_code = pytest.main(['-n', 'auto', '-m', config['image_type'], '--local-image-version', + exit_code = pytest.main(['-n', '2', '-m', config['image_type'], '--local-image-version', target_version, *config['pytest_flags']]) + if exit_code != 0: + exit_codes.append(exit_code) + image_ids.append(image_id) - assert exit_code == 0, f'Tests failed with exit code: {exit_code} against: {image_id}' + assert len(exit_codes) == 0, f'Tests failed with exit codes: {exit_codes} against: {image_ids}' print(f'Tests ran successfully against: {image_ids_to_test}') From f18bd0557e48d99706cd1c26ac4be0557a861c59 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 20 Mar 2024 17:38:02 -0400 Subject: [PATCH 18/32] release: v1.6.1 Co-authored-by: github-actions[bot] Co-authored-by: Clayton Parnell Co-authored-by: SageMaker Distribution Bot Co-authored-by: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> --- .../v1/v1.6/v1.6.1/CHANGELOG-cpu.md | 10 + .../v1/v1.6/v1.6.1/CHANGELOG-gpu.md | 9 + build_artifacts/v1/v1.6/v1.6.1/Dockerfile | 182 +++++ build_artifacts/v1/v1.6/v1.6.1/RELEASE.md | 56 ++ build_artifacts/v1/v1.6/v1.6.1/cpu.env.in | 51 ++ build_artifacts/v1/v1.6/v1.6.1/cpu.env.out | 662 +++++++++++++++++ .../code_editor_machine_settings.json | 4 + .../dirs/etc/code-editor/extensions.txt | 3 + .../v1/v1.6/v1.6.1/dirs/etc/conda/.condarc | 6 + .../dirs/etc/jupyter/jupyter_server_config.py | 16 + .../conf.d/supervisord-code-editor.conf | 11 + .../supervisor/conf.d/supervisord-common.conf | 18 + .../conf.d/supervisord-jupyter-lab.conf | 11 + .../etc/supervisor/conf.d/supervisord.conf | 27 + .../dirs/usr/local/bin/entrypoint-code-editor | 16 + .../usr/local/bin/entrypoint-jupyter-server | 19 + .../dirs/usr/local/bin/restart-jupyter-server | 6 + .../dirs/usr/local/bin/start-code-editor | 25 + .../dirs/usr/local/bin/start-jupyter-server | 35 + .../v1/v1.6/v1.6.1/gpu.arg_based_env.in | 1 + build_artifacts/v1/v1.6/v1.6.1/gpu.env.in | 51 ++ build_artifacts/v1/v1.6/v1.6.1/gpu.env.out | 670 ++++++++++++++++++ .../v1/v1.6/v1.6.1/patch_glue_pyspark.json | 15 + .../v1/v1.6/v1.6.1/patch_glue_spark.json | 15 + .../v1/v1.6/v1.6.1/source-version.txt | 1 + src/main.py | 5 +- 26 files changed, 1921 insertions(+), 4 deletions(-) create mode 100644 build_artifacts/v1/v1.6/v1.6.1/CHANGELOG-cpu.md create mode 100644 build_artifacts/v1/v1.6/v1.6.1/CHANGELOG-gpu.md create mode 100644 build_artifacts/v1/v1.6/v1.6.1/Dockerfile create mode 100644 build_artifacts/v1/v1.6/v1.6.1/RELEASE.md create mode 100644 build_artifacts/v1/v1.6/v1.6.1/cpu.env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.1/cpu.env.out create mode 100644 build_artifacts/v1/v1.6/v1.6.1/dirs/etc/code-editor/code_editor_machine_settings.json create mode 100644 build_artifacts/v1/v1.6/v1.6.1/dirs/etc/code-editor/extensions.txt create mode 100644 build_artifacts/v1/v1.6/v1.6.1/dirs/etc/conda/.condarc create mode 100644 build_artifacts/v1/v1.6/v1.6.1/dirs/etc/jupyter/jupyter_server_config.py create mode 100644 build_artifacts/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf create mode 100644 build_artifacts/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord-common.conf create mode 100644 build_artifacts/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf create mode 100644 build_artifacts/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord.conf create mode 100755 build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/entrypoint-code-editor create mode 100755 build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/entrypoint-jupyter-server create mode 100755 build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/restart-jupyter-server create mode 100755 build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/start-code-editor create mode 100755 build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/start-jupyter-server create mode 100644 build_artifacts/v1/v1.6/v1.6.1/gpu.arg_based_env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.1/gpu.env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.1/gpu.env.out create mode 100644 build_artifacts/v1/v1.6/v1.6.1/patch_glue_pyspark.json create mode 100644 build_artifacts/v1/v1.6/v1.6.1/patch_glue_spark.json create mode 100644 build_artifacts/v1/v1.6/v1.6.1/source-version.txt diff --git a/build_artifacts/v1/v1.6/v1.6.1/CHANGELOG-cpu.md b/build_artifacts/v1/v1.6/v1.6.1/CHANGELOG-cpu.md new file mode 100644 index 00000000..6cecf401 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/CHANGELOG-cpu.md @@ -0,0 +1,10 @@ +# Change log: 1.6.1(cpu) + +## Upgrades: + +Package | Previous Version | Current Version +---|---|--- +python|3.10.13|3.10.14 +jupyterlab|4.1.4|4.1.5 +notebook|7.1.1|7.1.2 +uvicorn|0.28.0|0.28.1 diff --git a/build_artifacts/v1/v1.6/v1.6.1/CHANGELOG-gpu.md b/build_artifacts/v1/v1.6/v1.6.1/CHANGELOG-gpu.md new file mode 100644 index 00000000..ef64193b --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/CHANGELOG-gpu.md @@ -0,0 +1,9 @@ +# Change log: 1.6.1(gpu) + +## Upgrades: + +Package | Previous Version | Current Version +---|---|--- +jupyterlab|4.1.4|4.1.5 +notebook|7.1.1|7.1.2 +uvicorn|0.28.0|0.28.1 diff --git a/build_artifacts/v1/v1.6/v1.6.1/Dockerfile b/build_artifacts/v1/v1.6/v1.6.1/Dockerfile new file mode 100644 index 00000000..592f2d08 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/Dockerfile @@ -0,0 +1,182 @@ +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 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 install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client nano cron less && \ + # 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 && \ + : +RUN echo "source /usr/local/bin/_activate_current_env.sh" | tee --append /etc/profile + +# CodeEditor - create server, user data dirs +RUN 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 + +# Merge in OS directory tree contents. +RUN 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 +RUN 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/ + +# 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 + +ARG CONDA_OVERRIDE_CUDA=$CUDA_MAJOR_MINOR_VERSION +RUN micromamba install -y --name base --file /tmp/$ENV_IN_FILENAME && \ + micromamba clean --all --yes --force-pkgs-dirs && \ + rm -rf /tmp/*.in + + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN sudo ln -s $(which python3) /usr/bin/python + +# Configure CodeEditor - Install extensions and set preferences +RUN \ + 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 +RUN 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" + + +# 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 +RUN 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* + +# 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 +RUN rm -rf /etc/code-editor + +# Create supervisord runtime directory +RUN mkdir -p /var/run/supervisord && \ + chmod a+rw /var/run/supervisord + +USER $MAMBA_USER +ENV PATH="/opt/conda/bin:/opt/conda/condabin:$PATH" +WORKDIR "/home/${NB_USER}" + +# 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/ +RUN 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 +RUN 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 +ENV OPENSSL_MODULES=/opt/conda/lib64/ossl-modules/ + +# Install Kerberos. +# Make sure no dependency is added/updated +RUN 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 +RUN 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 + +ENV SHELL=/bin/bash diff --git a/build_artifacts/v1/v1.6/v1.6.1/RELEASE.md b/build_artifacts/v1/v1.6/v1.6.1/RELEASE.md new file mode 100644 index 00000000..41bc60ba --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/RELEASE.md @@ -0,0 +1,56 @@ +# Release notes: 1.6.1 + +Package | gpu| cpu +---|---|--- +python|3.10.13|3.10.14 +numpy|1.26.4|1.26.4 +jinja2|3.1.3|3.1.3 +pandas|2.1.4|2.1.4 +altair|5.2.0|5.2.0 +boto3|1.34.51|1.34.51 +ipython|8.22.2|8.22.2 +jupyter-lsp|2.2.4|2.2.4 +jupyterlab|4.1.5|4.1.5 +amazon-codewhisperer-jupyterlab-ext|2.0.1|2.0.1 +jupyter-scheduler|2.5.1|2.5.1 +amazon-sagemaker-jupyter-scheduler|3.0.7|3.0.7 +amazon-sagemaker-sql-magic|0.1.0|0.1.0 +jupyterlab-lsp|5.0.3|5.0.3 +amazon_sagemaker_sql_editor|0.1.3|0.1.3 +scipy|1.11.4|1.11.4 +scikit-learn|1.4.1.post1|1.4.1.post1 +pip|23.3.2|23.3.2 +torchvision|0.15.2|0.15.2 +autogluon|0.8.2|0.8.2 +ipywidgets|8.1.2|8.1.2 +notebook|7.1.2|7.1.2 +aws-glue-sessions|1.0.4|1.0.4 +conda|23.11.0|23.11.0 +fastapi|0.103.2|0.103.2 +langchain|0.1.9|0.1.9 +jupyter-ai|2.11.0|2.11.0 +jupyter-dash|0.4.2|0.4.2 +jupyter-server-proxy|4.1.2|4.1.2 +jupyterlab-git|0.50.0|0.50.0 +keras|2.12.0|2.12.0 +matplotlib|3.8.3|3.8.3 +nodejs|18.19.0|18.19.0 +py-xgboost-gpu|1.7.6| +thrift_sasl|0.4.3|0.4.3 +pyhive|0.7.0|0.7.0 +python-gssapi|1.8.3|1.8.3 +python-lsp-server|1.10.1|1.10.1 +pytorch-gpu|2.0.0| +sagemaker-code-editor|1.0.0|1.0.0 +sagemaker-headless-execution-driver|0.0.12|0.0.12 +sagemaker-jupyterlab-emr-extension|0.1.9|0.1.9 +sagemaker-jupyterlab-extension|0.2.0|0.2.0 +sagemaker-kernel-wrapper|0.0.2|0.0.2 +sagemaker-python-sdk|2.212.0|2.212.0 +sagemaker-studio-analytics-extension|0.0.21|0.0.21 +sasl|0.3.1|0.3.1 +supervisor|4.2.5|4.2.5 +tensorflow|2.12.1|2.12.1 +uvicorn|0.28.1|0.28.1 +pytorch| |2.0.0 +py-xgboost-cpu| |1.7.6 diff --git a/build_artifacts/v1/v1.6/v1.6.1/cpu.env.in b/build_artifacts/v1/v1.6/v1.6.1/cpu.env.in new file mode 100644 index 00000000..40283676 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/cpu.env.in @@ -0,0 +1,51 @@ +# This file is auto-generated. +conda-forge::sagemaker-code-editor[version='>=1.0.0,<1.1.0'] +conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.3,<0.2.0'] +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<0.2.0'] +conda-forge::langchain[version='>=0.1.9,<0.2.0'] +conda-forge::fastapi[version='>=0.103.2,<0.104.0'] +conda-forge::uvicorn[version='>=0.28.0,<0.29.0'] +conda-forge::pytorch[version='>=2.0.0,<2.1.0'] +conda-forge::tensorflow[version='>=2.12.1,<2.13.0'] +conda-forge::python[version='>=3.10.13,<3.11.0'] +conda-forge::pip[version='>=23.3.2,<23.4.0'] +conda-forge::torchvision[version='>=0.15.2,<0.16.0'] +conda-forge::numpy[version='>=1.26.4,<1.27.0'] +conda-forge::pandas[version='>=2.1.4,<2.2.0'] +conda-forge::scikit-learn[version='>=1.4.1.post1,<1.5.0'] +conda-forge::jinja2[version='>=3.1.3,<3.2.0'] +conda-forge::matplotlib[version='>=3.8.3,<3.9.0'] +conda-forge::sagemaker-headless-execution-driver[version='>=0.0.12,<0.1.0'] +conda-forge::ipython[version='>=8.22.2,<8.23.0'] +conda-forge::scipy[version='>=1.11.4,<1.12.0'] +conda-forge::keras[version='>=2.12.0,<2.13.0'] +conda-forge::py-xgboost-cpu[version='>=1.7.6,<1.8.0'] +conda-forge::jupyterlab[version='>=4.1.4,<4.2.0'] +conda-forge::ipywidgets[version='>=8.1.2,<8.2.0'] +conda-forge::conda[version='>=23.11.0,<23.12.0'] +conda-forge::boto3[version='>=1.34.51,<1.35.0'] +conda-forge::sagemaker-python-sdk[version='>=2.212.0,<2.213.0'] +conda-forge::supervisor[version='>=4.2.5,<4.3.0'] +conda-forge::autogluon[version='>=0.8.2,<0.9.0'] +conda-forge::aws-glue-sessions[version='>=1.0.4,<1.1.0'] +conda-forge::sagemaker-kernel-wrapper[version='>=0.0.2,<0.1.0'] +conda-forge::jupyter-ai[version='>=2.11.0,<2.12.0'] +conda-forge::jupyter-scheduler[version='>=2.5.1,<2.6.0'] +conda-forge::nodejs[version='>=18.19.0,<18.20.0'] +conda-forge::jupyter-lsp[version='>=2.2.4,<2.3.0'] +conda-forge::jupyterlab-lsp[version='>=5.0.3,<5.1.0'] +conda-forge::python-lsp-server[version='>=1.10.1,<1.11.0'] +conda-forge::notebook[version='>=7.1.1,<7.2.0'] +conda-forge::altair[version='>=5.2.0,<5.3.0'] +conda-forge::sagemaker-studio-analytics-extension[version='>=0.0.21,<0.1.0'] +conda-forge::jupyter-dash[version='>=0.4.2,<0.5.0'] +conda-forge::sagemaker-jupyterlab-extension[version='>=0.2.0,<0.3.0'] +conda-forge::sagemaker-jupyterlab-emr-extension[version='>=0.1.9,<0.2.0'] +conda-forge::amazon-sagemaker-jupyter-scheduler[version='>=3.0.7,<3.1.0'] +conda-forge::jupyter-server-proxy[version='>=4.1.2,<4.2.0'] +conda-forge::amazon-codewhisperer-jupyterlab-ext[version='>=2.0.1,<2.1.0'] +conda-forge::jupyterlab-git[version='>=0.50.0,<0.51.0'] +conda-forge::sasl[version='>=0.3.1,<0.4.0'] +conda-forge::thrift_sasl[version='>=0.4.3,<0.5.0'] +conda-forge::pyhive[version='>=0.7.0,<0.8.0'] +conda-forge::python-gssapi[version='>=1.8.3,<1.9.0'] diff --git a/build_artifacts/v1/v1.6/v1.6.1/cpu.env.out b/build_artifacts/v1/v1.6/v1.6.1/cpu.env.out new file mode 100644 index 00000000..fbb0f6d0 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/cpu.env.out @@ -0,0 +1,662 @@ +# 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-13.2.0-h807b86a_5.conda#d4ff227c46917d3b4565302a2bbb276b +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda#f6f6600d18a4047b54f803cf708b868a +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-18.1.1-h4dfa4b3_0.conda#89023cfc92c7e9dd2e822ebdb4f753b0 +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-hd590300_5.conda#69b8b6202a07720f448be700e300ccf4 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 +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.45.2-h2797004_0.conda#866983a220e27a80cb75e85cb30466a1 +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.4.20240210-h59595ed_0.conda#97da8860a0da5413c7c98a3b3838a645 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_1.conda#9d731343cff6ee2e5a25c4a091bf8e2a +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.10.14-hd12c33a_0_cpython.conda#2b4ba962994e8bd4be9ff5b64b75aff2 +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-13.2.0-ha4646dd_5.conda#7a6bd7a12a4bd359e2afe6c0fa1acace +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda#e73e9cfd1191783392131e6238bdb3e9 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda#26322ec5d7712c3ded99dd656142b8ce +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda#6593de64c935768b6bad3e19b3e978be +https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py310h2372a71_0.conda#bd19b3096442ea342c4a5208379660b1 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda#0c1729b74a8152fde6a38ba0a2ab9f45 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py310h2372a71_0.conda#f6703fa0214a00bf49d1bef6dc7672d0 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda#e7d8df6509ba635247ff9aea31134262 +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-3.21.12-hfc55251_2.conda#e3a7d4ba09b8dc939b98fef55f539220 +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2 +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff +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.6-h232c23b_0.conda#d86653ff5ccb88bf7f13833fdd8789e0 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda#f36ddc11ca46958197a45effdd286e45 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_1.conda#4531d2927578e7e254ff3bcf6457518c +https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda#a7ce56d5757f5b57e7daabe703ade5bb +https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda#425fce3b531bed6ec3c74fab3e5f0a1c +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.5.1-h9b69904_2.tar.bz2#6e016cf4c525d04a7bd038cee53ad3fd +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_1.conda#e358c7c5f6824c272b5034b3816438a7 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda#4c28f3210b30250037a4a627eeee9e0f +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.2-py310h3ec546c_1.tar.bz2#73f6fa50c32ddd985cf5fba7b890a75c +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda#dbf6e2d89137da32fa6670f3bffc024e +https://conda.anaconda.org/conda-forge/noarch/sympy-1.12-pypyh9d50eac_103.conda#2f7d6347d7acf6edf1ac7f2189f44c8f +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.5.0-pyha770c72_0.conda#43e7d9e50261fb11deb76e17d8431aac +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.0.0-cpu_mkl_py310h402c8e3_101.conda#b351ffe4cd1b8337abfa88833cf60f25 +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.1-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7 +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-py310h2372a71_0.conda#f20cd4d9c1f4a8377d0818c819918bbb +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2#d1e1eb7e21a9e2c74279d87dafb68156 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.5.0-hd8ed1ab_0.conda#b3c594fde1a80a1fc3eb9cc4a5dfe392 +https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda#3ce482ec3066e6d809dbbb1d1679f215 +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-py310h2372a71_0.conda#d4c91d19e4f2f18b64753ac660edad79 +https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py310h2372a71_0.conda#4ad35c8f6a64a6ab708780dad603aef4 +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.3-py310h2372a71_1.conda#dd21c88dfec3253cb9888c0e93fa5cd1 +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.0.9-py310hd8f1fbe_9.conda#e2047ad2af52c01845f58b580c6cbd5c +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.18-pyhd8ed1ab_0.conda#bf61cfd2a7f212efba378167a07d4a6a +https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.51-pyge310_1234567_0.conda#f8980578a765dd28417953dddfefe5bc +https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py310h2372a71_0.conda#d9dc9c45bdc2b38403e6b388581e92f0 +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.12.1-pyhd8ed1ab_0.conda#045560daef58c75a759c2638fbdb5c6a +https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda#0bb492cca54017ea314b809b1ee3a176 +https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a +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.3.2-pyhd8ed1ab_0.conda#bb8086d3dd1b2cfeebd15f9a7e56f7bd +https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 +https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.20.0-py310h2372a71_0.conda#e7f8dc8c62e136573c84116a5e743aed +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda#98206ea9954216ee7540f0c773f2104d +https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py310hcc13569_0.conda#410f7e83992a591e492c25049a859254 +https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 +https://conda.anaconda.org/conda-forge/noarch/altair-5.2.0-pyhd8ed1ab_1.conda#1aebb1cef46d9cb76e0d38eed822348a +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.1-pyhd8ed1ab_0.conda#a41cafc1fb653ce0e48b9310226e90fd +https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.51-pyhd8ed1ab_0.conda#bd19311f73611626b31afc608af438cd +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.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda#490730480d76cf9c8f8f2849719c6e2b +https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49 +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda#0876280e409658fc6f9e75d035960333 +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.4-pyhd8ed1ab_0.conda#20f047662cf4fa8b97836111df87dbb4 +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.2-pyhd8ed1ab_0.conda#af5fa2d2186003472e766a23c46cae04 +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.1-py310hc6cd4ac_0.conda#1ea80564b80390fa25da16e4211eb801 +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.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094 +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.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de +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.42-pyha770c72_0.conda#0bf64bf10eee21f46ac83c161917fa86 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda#140a7f159396547e9799aa98f9f0742e +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.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883 +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.22.2-pyh707e725_0.conda#f0abe827c8a7c6d91bccdf90cb1fbee3 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda#a0bc3eec34b0fab84be6b2da94e98e20 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py310hff52083_0.conda#cb92c27600d5716fd526a206aa43342c +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/zeromq-4.3.5-h59595ed_1.conda#7fc9d3288d2420bb3637647621018000 +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py310h795f18f_0.conda#fa09f98f3acfd3f5de30bd2d27d5cb7f +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4-py310h2372a71_0.conda#48f39c24349d9ae5c8e8873c42fb6170 +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.1-pyhd8ed1ab_0.conda#c03972cfce69ad913d520c652e5ed908 +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.3-pyhd33586a_0.conda#e0deff12c601ce5cb7476f93718f3168 +https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda#45846a970e71ac98fd327da5d40a0a2c +https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310h2372a71_4.conda#68ee85860502d53c8cbfa0e4cef0f6cb +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-2.4-py310hff52083_3.conda#08ec1463dbc5c806a32fc431874032ca +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-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.17.3-pyhd8ed1ab_0.conda#7a709748e93f0b2c33d6b5b676b6d9d0 +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.6.3-pyhd8ed1ab_1.conda#2ac0d00a0fb3f1a4c81c460ba56bb23b +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-69.2.0-pyhd8ed1ab_0.conda#da214ecd521a720a9d521c68047682dc +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.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.3-pyhd8ed1ab_0.conda#ca3d437c0ef2e87f63d085822c74c49a +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.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.2-pyhd8ed1ab_0.conda#5ab3248dd05c543dc631276455ef6a54 +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.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2 +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda#50ad31e07d706aae88b14a4ac9c73f23 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.10.0-pyhd8ed1ab_0.conda#016d56f5d81b9364d1da5f4895a2a9f8 +https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.4-pyhd8ed1ab_0.conda#91f93e1ebf6535be518715432d89fd92 +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.24-pyhd8ed1ab_0.conda#fc9780a517b51ea3798fc011c17ffd51 +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.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda#327bfe1c99154f02259d29810bd70afc +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.5-pyhd8ed1ab_0.conda#04b1ca9d7ac414b3f5c3fb16066c6861 +https://conda.anaconda.org/conda-forge/noarch/amazon-codewhisperer-jupyterlab-ext-2.0.1-pyhd8ed1ab_0.conda#ab9bb3e630d872e9d38c8c18a0cba7b4 +https://conda.anaconda.org/conda-forge/noarch/aws-embedded-metrics-3.2.0-pyhd8ed1ab_0.conda#e1c511655b6e9eb0265c9715c7fa410f +https://conda.anaconda.org/conda-forge/noarch/croniter-1.4.1-pyhd8ed1ab_0.conda#7a4568626f8d6e7c63dcb25d5501a967 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.12.3-ha770c72_0.conda#cdea66892b19a454f939487318b6c517 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.2-pyhd8ed1ab_0.conda#7a0bfebd69213722427cb61b077b4187 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.2-pyhd8ed1ab_0.conda#e14e35cc4a5c90694bb41c5317b576a8 +https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.14-py310h2372a71_0.conda#6aca52bad315e6b841a32d6b3b0cdb82 +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.3-py310hc6cd4ac_0.conda#fb478fd83c001cbf8ab01c29b857262e +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.49-py310h2372a71_1.conda#cdeaf46006791202a7597bf2a0e6ad9e +https://conda.anaconda.org/conda-forge/noarch/jupyter_scheduler-2.5.1-pyha770c72_0.conda#3d250834fde789b6cb96dc11a43d1df2 +https://conda.anaconda.org/conda-forge/noarch/jupyter-scheduler-2.5.1-hd8ed1ab_0.conda#bb6463ad5d244321f64a231ba9b6cf2a +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-scheduler-3.0.7-pyhd8ed1ab_1.conda#ee635c11a576839138a93fc46e0f389b +https://conda.anaconda.org/conda-forge/linux-64/cryptography-42.0.5-py310h75e40e8_0.conda#47e6ea7109182e9e48f8c5839f1bded7 +https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda#1482e77f87c6a702a7e05ef22c9b197b +https://conda.anaconda.org/conda-forge/noarch/pyathena-3.5.1-pyhd8ed1ab_0.conda#1c302abfabf4d08375990de11ff98242 +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-py310hcfd0673_0.conda#d6df7beac08573177dd9a6a560d1d180 +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.0-pyhd8ed1ab_0.conda#4501c96a5e9f18239ae6e5944604d493 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-execution-0.1.2-pyhd8ed1ab_0.conda#a16fa2f5c791f94b459acd5c34ab8670 +https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.4.4-pyhd8ed1ab_0.conda#2e2f31b3b1c866c29636377e14f8c4c6 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-magic-0.1.0-pyhd8ed1ab_0.conda#4fd1875033a6ca132d227f3587415fd5 +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.3-pyhd8ed1ab_0.conda#6618ce22c81277d6ebaa45364c9d6b76 +https://conda.anaconda.org/conda-forge/linux-64/ansi2html-1.9.1-py310hff52083_0.conda#2213ea76fd340e7c848c1be0cbdfc579 +https://conda.anaconda.org/conda-forge/noarch/textwrap3-0.9.2-py_0.tar.bz2#1f84e74e9dbe2e5ae38c58496bffaca8 +https://conda.anaconda.org/conda-forge/noarch/ansiwrap-0.8.4-py_0.tar.bz2#f09557e2a7cbd2470a2ab6353000cebd +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.5.0-h27087fc_0.tar.bz2#a08150fd2298460cd1fcccf626305642 +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.0.3-py310hff52083_0.conda#7d18b84331cda8271c9ed67d1ca05d47 +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.43-hcad00b1_0.conda#8292dea9e022d9610a11fce5e0896ed8 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.0-hf2295e7_1.conda#0725f6081030c29b109088639824ff90 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b +https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 +https://conda.anaconda.org/conda-forge/noarch/autogluon.common-0.8.2-pyhd8ed1ab_4.conda#e24166dee3b1430877a324715caf8f5d +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py310hd41b1e2_0.conda#85d2aaa7af046528d339da1e813c3a9f +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.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.conda#d47dee1856d9cb955b8076eeff304a5b +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda#72637c58d36d9475fda24700c9796f19 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.50.0-py310h2372a71_0.conda#85c48c98c9f2b72b384fb11c9004920b +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-py310hd41b1e2_1.conda#b8d67603d43b23ce7e988a5d81a7ab79 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda#323e90742f0f48fc22bea908735f55e6 +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.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda#82bf6f63eb15ef719b556b63feec3a77 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 +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.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea +https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py310h582fbeb_1.conda#cf62f6cff3536eafaaa0c740b0bf7465 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.3-py310h62c0568_0.conda#4a7296c0273eb01dfbed728dd6a6725a +https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py310hb13e2d6_0.conda#f0063b2885bfae11324a00a693f88781 +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.3.0-pyhc1e730c_0.conda#698d2d2b621640bddb9191f132967c9f +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.1.post1-py310h1fdf081_0.conda#2706ad1a5f6cbad8b57d4094889d1e33 +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.2-pyhd8ed1ab_0.conda#2b8dfb969f984497f3f98409a9545776 +https://conda.anaconda.org/conda-forge/linux-64/autogluon.core-0.8.2-light_py310h2d11d36_6.conda#9de8e45568202a91466af4d849c7e919 +https://conda.anaconda.org/conda-forge/noarch/autogluon.features-0.8.2-pyhd8ed1ab_3.conda#c827eccfb0ddb1484d0e00f45242b8f8 +https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py310hff52083_1.conda#a677136a83b823803d2f92045f885be2 +https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2#a556fa60840fcb9dd739d186bfd252f7 +https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca +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/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/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.21.4-pyhd8ed1ab_0.conda#d47cf217a7bcc3a03dd1c6169c3f0f98 +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.16-py310h2372a71_0.conda#efdca5c3783dae00552f389bd7b56c3d +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.0-hd590300_0.conda#71b89db63b5b504e7afc8ad901172e1e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.1-hc309b26_1.conda#cc09293a2c2b7fd77aff284f370c12c0 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h4d4d85c_2.conda#9ca99452635fe03eb5fa937f5ae604b0 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.49-h06160fa_0.conda#1d78349eb26366ecc034a4afe70a8534 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-he9a53bd_1.conda#8a24e5820f4a0ffd2ed9c4722cd5d7ca +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.11-h00aa349_4.conda#cb932dff7328ff620ce8059c9968b095 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h4d4d85c_1.conda#eba092fc6de212a01de0065f38fe8bbb +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.3-h28f7589_1.conda#97503d3e565004697f1651753aa95b9e +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h4d4d85c_1.conda#30f9df85ce23cd14faa9a4dfa50cca2b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.1-h2e3709c_4.conda#2cf21b1cbc1c096a28ffa2892257a2c1 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.3-hb447be9_1.conda#c520669eb0be9269a5f0d8ef62531882 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.14-hf3aad02_1.conda#a968ffa7e9fe0c257628033d393e512f +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.21.0-hb942446_5.conda#07d92ed5403ad7b5c66ffd7d5b8f7e57 +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.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.27.0-hd590300_0.conda#f6afff0e9ee08d2f1b897881a4f38cdb +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.6.0-hca28451_0.conda#704739398d858872cb91610f49f0ef29 +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-h85b1a90_19.conda#0605d3d60857fc07bd6a11e878fe0f08 +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.6.0-h6f12383_0.tar.bz2#b31f3565cb84435407594e548a2fb7b2 +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda#d1db1b8be7c3a8983dcbbbfe4f0765de +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/re2-2023.03.02-h8c504da_0.conda#206f8fa808748f6e90599c3368a1114e +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.54.3-hb20ce57_0.conda#7af7c59ab24db007dfd82e0a3a343f66 +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hac9eb74_1.conda#0dee716254497604762957076ac76540 +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.18.1-h8fd135c_2.conda#bbf65f7688512872f063810623b755dc +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/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 +https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h2f23424_1.conda#9571eb3eb0f7fe8b59956a7786babbcd +https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hd590300_0.conda#8feeecae73aeef0a2985af46b5a2c1df +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda#aeffb7c06b5f65e55e6c637408dc4100 +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda#39aa3b356d10d7e5add0c540945a0944 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-12.0.1-hb87d912_8_cpu.conda#3f3b11398fe79b578e3c44dd00a44e4a +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-12.0.1-py310h0576679_8_cpu.conda#27f55ccfd038d6665facb04a0aa572c5 +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.4.1-py310h2372a71_0.conda#b631b889b0b4bc2fca7b8b977ca484b2 +https://conda.anaconda.org/conda-forge/noarch/datasets-2.18.0-pyhd8ed1ab_0.conda#3482c9b417757df305ff4e3a7e4b7c10 +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/gdown-5.1.0-pyhd8ed1ab_0.conda#6f880647c0270648f710f334c60bc76c +https://conda.anaconda.org/conda-forge/linux-64/libsentencepiece-0.1.99-h180e1df_0.conda#056064bd3ef47439e3e78fac28449fbf +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-python-0.1.99-py310hebdb9f0_0.conda#b3a5908ac3912b26d6a8b77faebe6eca +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-spm-0.1.99-h180e1df_0.conda#c67cc412366709c1c3225f19f8aed63b +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-0.1.99-hff52083_0.conda#578969452de13e4ad69edf18ee2b3d5a +https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyhc8e2a94_3.tar.bz2#a362b2124b06aad102e2ee4581acee7d +https://conda.anaconda.org/conda-forge/linux-64/regex-2023.12.25-py310h2372a71_0.conda#4a9ba4e7af60356e63b38a6d419acad6 +https://conda.anaconda.org/conda-forge/noarch/sacremoses-0.0.53-pyhd8ed1ab_0.tar.bz2#76c3c384fe0941f1b08193736e8e277a +https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.4.2-py310hcb5633a_0.conda#a1e978544ef765ef9ac2f2320e43bacd +https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.13.3-py310he1f1126_0.conda#ea2281fe0bf70c1c83393565342a8a8c +https://conda.anaconda.org/conda-forge/noarch/transformers-4.31.0-pyhd8ed1ab_0.conda#8cccf394a00fbfef2f3d6028422ae5cc +https://conda.anaconda.org/conda-forge/noarch/nlpaug-1.1.11-pyhd8ed1ab_1.conda#4e231f0fa7db9388cf4c8539d623ac62 +https://conda.anaconda.org/conda-forge/noarch/nltk-3.8.1-pyhd8ed1ab_0.conda#518c769ca4273480a99be6e559a26192 +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.2.3-pyhd8ed1ab_0.conda#cebc9f0fc6eebdcc368bb30ba30f2fd5 +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.42.0-pyhd8ed1ab_0.conda#1cdea58981c5cbc17b51973bcaddcea7 +https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda#8591c748f98dcc02253003533bc2e4b1 +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/protobuf-4.21.12-py310heca2aa9_0.conda#90bb7e1b729c4b50272cf78be97ab912 +https://conda.anaconda.org/conda-forge/noarch/pytesseract-0.3.10-pyhd8ed1ab_0.tar.bz2#04f4becceb0c032c5dbdae6ad18bd95e +https://conda.anaconda.org/conda-forge/noarch/lightning-utilities-0.11.0-pyhd8ed1ab_0.conda#45f86a84ae04e7be9fa602707a17af5c +https://conda.anaconda.org/conda-forge/noarch/torchmetrics-1.0.3-pyhd8ed1ab_0.conda#4e8849ba2fa06393b7ab5a50c6a4256c +https://conda.anaconda.org/conda-forge/noarch/pytorch-lightning-2.0.9-pyhd8ed1ab_0.conda#3e96ed529412338e38af9004e22267de +https://conda.anaconda.org/conda-forge/noarch/pytorch-metric-learning-1.7.3-pyhd8ed1ab_0.conda#139aa590e345e10f4572812a329806f4 +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py310h2372a71_0.conda#21362970a6fea90ca507c253c20465f2 +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.3.1-pyhd8ed1ab_0.conda#52dd56ce3afa6a52c2f3d3116875ff32 +https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda#b8853659d596f967c661f544dd89ede7 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h1f7b6fc_1.conda#be6f0382440ccbf9fb01bb19ab1f1fc0 +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 +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.0.7-h0b41bf4_0.conda#49e8329110001f04923fe7e864990b0c +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.13.2-hb4ffafa_0.conda#976aaf1afd331ed7346d649da5c5c1ee +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.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f +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.2-h59595ed_1.conda#127b0be54c1c90760d7fe02ea7a56426 +https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda#418c6ca5929a611cbd69204907a83995 +https://conda.anaconda.org/conda-forge/linux-64/libavif-0.11.1-h8182462_2.conda#41c399ed4c439e37b844c24ab5621b5a +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-h59595ed_0.conda#fd486bffbf0d6841cf1456a8f2e3a995 +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.8.12-py310hc929067_0.conda#61caf809753610c4c87d583765b1d478 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.2.12-pyhd8ed1ab_0.conda#d5c8bef52be4e70c48b1400eec3eecc8 +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.19.3-py310h769672d_2.tar.bz2#c0391107b0cd0010708d6969ed759e8b +https://conda.anaconda.org/conda-forge/noarch/seqeval-1.2.2-pyhd3deb0d_0.tar.bz2#d4436c8a8b9fb6d60fe4e7b9f097f9bb +https://conda.anaconda.org/conda-forge/noarch/cachetools-5.3.3-pyhd8ed1ab_0.conda#cd4c26c702a9bcdc70ff05b609ddacbe +https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.5.1-pyhd8ed1ab_0.conda#fb1a800972b072aa4d16450983c81418 +https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.3.0-pyhd8ed1ab_0.conda#26db749166cdca55e5ef1ffdc7767d0e +https://conda.anaconda.org/conda-forge/noarch/pyopenssl-24.0.0-pyhd8ed1ab_0.conda#b50aec2c744a5c493c09cce9e2e7533e +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.28.2-pyhca7485f_0.conda#f8879cf0e5b8f7761d01bce40ce7c089 +https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda#550da20b2c2e38be9cc44bb819fda5d5 +https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_1.conda#74f76d4868dbba5870f2cf1d9b12d8f3 +https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868 +https://conda.anaconda.org/conda-forge/noarch/requests-oauthlib-1.4.0-pyhd8ed1ab_0.conda#a55b220de8970208f583e38639cfbecc +https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.0.0-pyhd8ed1ab_1.conda#569e62e95b01b53e4ec7d9abe83b7385 +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.54.3-py310heca2aa9_0.conda#7c82ea96968976ee2eb66a52f2decd8e +https://conda.anaconda.org/conda-forge/linux-64/tensorboard-data-server-0.7.0-py310h75e40e8_1.conda#e562478facfa960813945204273ecac5 +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.1-pyhd8ed1ab_0.conda#af8d825d93dbe6331ee6d61c69869ca0 +https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.12.3-pyhd8ed1ab_0.conda#429d39f86cef8d0859d639804ae67aaf +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.15.2-cpu_py310hb9e6163_1.conda#952305ae6b751a80284e8d4c9115ed4b +https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 +https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-0.8.2-pyha770c72_5.conda#a8ca42e2b4ee0fd6dce729bc226dd0cc +https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda#669cd7065794633b9e64e6a9612ec700 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda#e7ba12deb7020dd080c6c70e7b6f6a3d +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_1.conda#6185f640c43843e5ad6fd1c5372c3f80 +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.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b +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-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 +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.52.1-ha41ecd1_0.conda#5c0cc002bf4eaa56448b0729efd6e96c +https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h280cfa0_4.conda#410f86e58e880dcc7b0e910a8e89c05c +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-he3f83f7_1.conda#03bd1ddcc942867a19528877143b9852 +https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 +https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb +https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.2-pyh717bed2_0.conda#6df60158d7fcdb1de8728bf5affa5c18 +https://conda.anaconda.org/conda-forge/linux-64/catboost-1.2.3-py310hff52083_2.conda#e063c808181593406d4d3d321ee7ffff +https://conda.anaconda.org/conda-forge/noarch/fastcore-1.5.29-pyhd8ed1ab_0.conda#155c898255baddd6b2cb95894791eeca +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-py310hff52083_0.conda#a20390cd5f5fe4d8c5f6f2e7fa6c54cf +https://conda.anaconda.org/conda-forge/linux-64/cymem-2.0.8-py310hc6cd4ac_1.conda#8e4dada89998e0cb4f97b835dff6dc7e +https://conda.anaconda.org/conda-forge/noarch/langcodes-3.3.0-pyhd8ed1ab_0.tar.bz2#aacac9c3804912c38087d1c295708493 +https://conda.anaconda.org/conda-forge/linux-64/murmurhash-1.0.10-py310hc6cd4ac_1.conda#2b0c4b4532c601ece4537cc7f3558464 +https://conda.anaconda.org/conda-forge/noarch/smart_open-5.2.1-pyhd8ed1ab_0.tar.bz2#c7a838c38e38c82edde371a9054e6c92 +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.0-pyhd8ed1ab_0.conda#5030a13b2fe5e143d5956d4943d3018f +https://conda.anaconda.org/conda-forge/noarch/pathy-0.10.2-pyhd8ed1ab_0.conda#69d84b5c17aea4d7350f3536bcde7296 +https://conda.anaconda.org/conda-forge/linux-64/preshed-3.0.9-py310hc6cd4ac_1.conda#a2a27c2eafd1e280555ae954df088fc3 +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-py310hc6cd4ac_1.conda#7cd9d4be6f55ccb53cbd7125f2e6a0fb +https://conda.anaconda.org/conda-forge/linux-64/confection-0.1.4-py310h17c5347_0.conda#72b63825959fc040cab8ed0f12f2040e +https://conda.anaconda.org/conda-forge/linux-64/cython-blis-0.7.10-py310h1f7b6fc_2.conda#6a0165d9e76c443ed66d2e8b733aa133 +https://conda.anaconda.org/conda-forge/linux-64/wasabi-1.1.2-py310hff52083_0.conda#8ed9f04ed8e1373063cd03b9d5c86ce3 +https://conda.anaconda.org/conda-forge/linux-64/thinc-8.2.2-py310hcb52e73_0.conda#550b37537f05740f1c9a38d63d843b3c +https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.16.0-pyhd8ed1ab_0.conda#8d75941f621306e58b7642394a8bad87 +https://conda.anaconda.org/conda-forge/noarch/weasel-0.3.4-pyhd8ed1ab_0.conda#a53c82e61a1173c887e84fc50842eec4 +https://conda.anaconda.org/conda-forge/linux-64/spacy-3.7.2-py310hcb52e73_0.conda#c966d5a09c130d0bcfce4126643ddc74 +https://conda.anaconda.org/conda-forge/noarch/fastai-2.7.14-pyhd8ed1ab_0.conda#9854ef355cc4bd1e2aac40998f721fed +https://conda.anaconda.org/conda-forge/linux-64/lightgbm-3.3.5-py310heca2aa9_0.conda#d2595ddab22cbca7409b28e3105afd0a +https://conda.anaconda.org/conda-forge/linux-64/libxgboost-1.7.6-cpu_h6728c87_6.conda#9183d0551aa5e5be36c670e701b287a3 +https://conda.anaconda.org/conda-forge/linux-64/py-xgboost-1.7.6-cpu_py310h78d450f_6.conda#dcc61476de611ac5673698495b607109 +https://conda.anaconda.org/conda-forge/linux-64/xgboost-1.7.6-cpu_py310h78d450f_6.conda#061a099093fd2a97ae506f65dc87baf2 +https://conda.anaconda.org/conda-forge/noarch/autogluon.tabular-0.8.2-pyha770c72_4.conda#17fad1cdb563ddad16ab0ba4c085bcb3 +https://conda.anaconda.org/conda-forge/noarch/gluonts-0.13.7-pyhd8ed1ab_0.conda#1684b578508d9918b2dcadd4c365c61a +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.42.0-py310h1b8f574_1.conda#e2a5e9f92629c8e4c8611883a35745b4 +https://conda.anaconda.org/conda-forge/linux-64/numba-0.59.0-py310h7dc5dd1_1.conda#966bc2bc095723310d746106e7c91791 +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.7.3-pyhd8ed1ab_0.conda#7a2b34b4c9bff2545200b3746da70f11 +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.1-py310h1f7b6fc_0.conda#d98c3749dd466513dd921f5818f4b001 +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.9.0-py310hc6cd4ac_0.conda#cab4b543b897dcf548edb3018fe45f9e +https://conda.anaconda.org/conda-forge/noarch/autogluon.timeseries-0.8.2-pyhd8ed1ab_4.conda#a64157275daf72a557fe4a9d843a9e1d +https://conda.anaconda.org/conda-forge/noarch/autogluon-0.8.2-pyhd8ed1ab_4.conda#7ff9ac51e09bd5991970a7df53b4bee6 +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.10-pyhd8ed1ab_0.conda#16b73b2c4ff7dda8bbecf88aadfe2027 +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.10-pyhd8ed1ab_0.conda#521f489e3babeddeec638c2add7e9e64 +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.2-pyhd8ed1ab_0.conda#67f86478c78637f68c1f3858973021f2 +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda#85a2189ecd2fcdd86e92b2d4ea8fe461 +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.2-pyhd8ed1ab_0.conda#fa781da51f05c9211b75b5e7bcff8136 +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.1-pyha770c72_0.conda#5528a3eda283b421055c89bface19a1c +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.4-pyhd8ed1ab_0.conda#169c4c0a396d83164215f54024031ec8 +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.1.2-py310hcb5633a_0.conda#6dd3d49f65ceb05dbd527a5b6301611b +https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda#4eccaeba205f0aed9ac3a9ea58568ca3 +https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda#17064acba08d3686f1135b5ec1b32b12 +https://conda.anaconda.org/conda-forge/linux-64/black-24.3.0-py310hff52083_0.conda#12960fe9118cbb71fb802a52870f7874 +https://conda.anaconda.org/conda-forge/noarch/boltons-23.1.1-pyhd8ed1ab_0.conda#56febe65315cc388a5d20adf2b39a74d +https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda#35ef8bc24bd34074ebae3c943d551728 +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h2aa1ff5_1.conda#3bf887827d1968275978361a6e405e4f +https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.28-hfc55251_0.conda#66d4f5d8256542d9ebfa341d690c5e03 +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.7-had39da4_0.conda#9fff450354fbcd1510ef178730732241 +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.7-py310h39ff949_0.conda#58d84efb37d517c64f4e48f75fd6180d +https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.1.0-pyhd8ed1ab_0.conda#304dc78ad6e52e0fd663df1d484c1531 +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py310h1275a96_0.conda#54698ba13cd3494547b289cd86a2176a +https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda#38253361efb303deead3eab39ae9269b +https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda#8a3ae7f6318376aa08ea753367bb7dd6 +https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda#bbdb409974cd6cb30071b1d978302726 +https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda#bfdb7c5c6ad1077c82a69a8642c87aff +https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.0.2-py310hff52083_0.conda#4837faab0d3e665df57fef662148c6a3 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 +https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py310h2372a71_0.conda#0adaac9a86d59adae2bc86b3cdef2df1 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py310h2372a71_0.conda#dcf6d2535586c77b31425ed835610c54 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py310h2372a71_0.conda#50b7d9b39099cdbabf65bf27df73a793 +https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda#08316d001eca8854392cf2837828ea11 +https://conda.anaconda.org/conda-forge/linux-64/conda-23.11.0-py310hff52083_1.conda#d5278ac990c67d5ed51584998aa16c5a +https://conda.anaconda.org/conda-forge/noarch/contextlib2-21.6.0-pyhd8ed1ab_0.tar.bz2#5b26a831440be04c39531a8ce20f5d71 +https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.4-h7f98852_1002.tar.bz2#e728e874159b042d92b90238a3cb0dc2 +https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.27-h54b06d7_7.conda#dce22f70b4e5a407ce88f2be046f4ceb +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.1.2-pyhd8ed1ab_0.tar.bz2#3c3de74912f11d2b590184f03c7cd09b +https://conda.anaconda.org/conda-forge/noarch/flask-3.0.2-pyhd8ed1ab_0.conda#7f88df670921cc31c309719e30c22021 +https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2#a11f356d6f93b74b4a84e9501afd48b4 +https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda#016bd4f61878a57f19c8cd744708a1f1 +https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.21.1-pyhd8ed1ab_0.conda#ae303aa7dc100bc3bc01b5a3b7ca3567 +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.4-pyhd8ed1ab_0.conda#1190a6456351690603b2d64d1cbf5b4a +https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d +https://conda.anaconda.org/conda-forge/noarch/deepmerge-1.1.1-pyhd8ed1ab_0.conda#d91c3d8ac3f2ab36ca4ea32ac42f731e +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py310hd41b1e2_0.conda#dc5263dcaa1347e5a456ead3537be27d +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.3.1-pyhd8ed1ab_0.conda#b0ad5ef44595ef37c3008fc04ecd2abf +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py310h2372a71_3.conda#a29a0825809cd3a780097472be176618 +https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda#a5e792523b028b06d7ce6e65a6cd4a33 +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.0.0-pyhd8ed1ab_0.conda#aec5f308cb9055e83c59afecd5fcb58a +https://conda.anaconda.org/conda-forge/noarch/docstring-to-markdown-0.15-pyhd8ed1ab_0.conda#a3a1e6af2926a3affcd6f2072871f551 +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-1.7.4-hf47d654_0_cpu.conda#8fd132db65c8d51caea2ae7cde4b450c +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-avx2-1.7.4-h1234567_0_cpu.conda#7eb943c067a63c4d8af526c2df9f2c1b +https://conda.anaconda.org/conda-forge/linux-64/faiss-1.7.4-py310h9ed8947_0_cpu.conda#99665c710087f7a964915b5ea0097465 +https://conda.anaconda.org/conda-forge/linux-64/faiss-cpu-1.7.4-h718b53a_0.conda#7a9e6f72c36ff5a5eeb61660fd6fdf8d +https://conda.anaconda.org/conda-forge/noarch/starlette-0.27.0-pyhd8ed1ab_0.conda#6facb6fc201d334257db8004439705d3 +https://conda.anaconda.org/conda-forge/noarch/fastapi-0.103.2-pyhd8ed1ab_0.conda#fb243b6796ab7d64b14e00c279620c04 +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-23.5.26-h59595ed_1.conda#913a1c6fd00b66f33392a129e835ceca +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda#650a7807e689642dddd3590eb817beed +https://conda.anaconda.org/conda-forge/noarch/gast-0.4.0-pyh9f0ad1d_0.tar.bz2#42323c77b73462199fca93bc8ac9279d +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.42-pyhd8ed1ab_0.conda#6bc8e496351bafd761c0922c3ebd989a +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.0-hde27a5a_1.conda#939ddd853b1d98bf6fd22cc0adeda317 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.0-hf2295e7_1.conda#d3bcc5c186f78feba6f39ea047c35950 +https://conda.anaconda.org/conda-forge/noarch/google-pasta-0.2.0-pyh8c360ce_0.tar.bz2#26e27d7d3d7fe2336b543dd8e0f12cbf +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.9-h98fc4e7_0.conda#bcc7157b06fce7f5e055402a8135dfd8 +https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 +https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f +https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.9-h8e1006c_0.conda#614b81f8ed66c56b640faee7076ad14a +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda#d471a5c3abc984b662d9bae3bb7fd8a5 +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.10.0-nompi_py310h65828d5_101.conda#44c185c5b133ad6d1d449839407aa863 +https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.3.2-py310hcc13569_0.conda#1ad84020b1ab816d7ab3f3d0859faf40 +https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.14-cpu_py310h67d73b5_1.conda#392c325994aa96727edd0069a0620e31 +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.3.0-pyhc1e730c_2.conda#7a94ac68b892daa9f17ae8a52b31ed81 +https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.3.0-hd8ed1ab_2.conda#ab262acd95cb73f3ed9426cc4204ac3a +https://conda.anaconda.org/conda-forge/noarch/jax-0.4.20-pyhd8ed1ab_0.conda#5abbd950bd427bc9d929e35ecbf814d1 +https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 +https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 +https://conda.anaconda.org/conda-forge/linux-64/orjson-3.9.15-py310hcb5633a_0.conda#da1b180ccf1dce5d87d145ad2fc14e5a +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.31-pyhd8ed1ab_0.conda#031cb2cb0387f028379c1a58217fe929 +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.32-pyhd8ed1ab_0.conda#b085528ffeef5167dd8f6e358e4170e2 +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.28-pyhd8ed1ab_0.conda#d7e8f72c5e422b78b3d5f7a7aecbfae9 +https://conda.anaconda.org/conda-forge/noarch/langchain-0.1.9-pyhd8ed1ab_0.conda#2ad37682610ac2643b46e4cc0215f410 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.11.0-pyhd8ed1ab_0.conda#aee09f3966655f81d05fcfb5bae3612d +https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.5.2-py310h47bb294_0.conda#a83ae186d0a4b78c98b32781d7c15d48 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.11.0-pyhd8ed1ab_0.conda#e8ab7975630aff4624d3ed1fa32ac552 +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.1.2-pyhd8ed1ab_0.conda#3671520b52215a5a084de08003e6d8cd +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.0-pyhd8ed1ab_1.conda#5020cacc18e3d5f62a81513f26ac2cac +https://conda.anaconda.org/conda-forge/noarch/keras-2.12.0-pyhd8ed1ab_0.conda#e6e18b33e8d62200099f2eed98a263b6 +https://conda.anaconda.org/conda-forge/noarch/keras-preprocessing-1.1.2-pyhd8ed1ab_0.tar.bz2#a79b00989a0d89791021902f37fe2f9e +https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef +https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_ha2b6cf4_4.conda#898e0dd993afbed0d871b60c2eb33b83 +https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_hb11cfb5_4.conda#c90f4cbb57839c98fef8f830e4b9972f +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda#4d18d86916705d352d5f4adfb7f0edd3 +https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.6-h088ca5b_0.conda#99dca02fb74a8dfa3653c6673674f90c +https://conda.anaconda.org/conda-forge/linux-64/libsecret-0.18.8-h329b89f_2.tar.bz2#9d6698e3c9585a75156d86f7ef229093 +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.4-h59595ed_0.conda#3f1017b4141e943d9bc8739237f749e8 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda#3366af27f0b593544a6cd453c7932ac5 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.41-hd590300_0.conda#81f740407b45e3f9047b3174fa94eb9e +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-hd429924_1.conda#1dbcc04604fdf1e526e6d1b0b6938396 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py310hc6cd4ac_0.conda#68d5bfccaba2d89a7812098dd3966d9b +https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda#ef5333594a958b25912002886b82b253 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda#e87530d1b12dd7f4e0f856dc07358d60 +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.98-h1d7d5a4_0.conda#54b56c2fdf973656b748e0378900ec13 +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda#f4fe7a6e3d7c78c9de048ea9dda21690 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.3-py310hff52083_0.conda#e91d183a307d7bd667003291f690cbb0 +https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.19.0-hb753e55_0.conda#0b4a67051e3b3812818ccf2f4ee2fd4e +https://conda.anaconda.org/conda-forge/noarch/papermill-2.5.0-pyhd8ed1ab_0.conda#e6e69b90afd3d0597da8f1f74cc4bd58 +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/linux-64/py-xgboost-cpu-1.7.6-py310h78d450f_6.conda#6c53cd648ba083e1bc7ea5dac8ec1e2c +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.19.0-py310hc6cd4ac_1.conda#2e0bde59a8aa215c7402c181c20c9605 +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-py310h98feede_1.conda#0329fda0ebbccee7b3e9dbf4a377d0ce +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda#37c47ea93ef00dd80d880fc4ba21256a +https://conda.anaconda.org/conda-forge/noarch/pylint-3.0.4-pyhd8ed1ab_0.conda#d536ee47166d8984c6acd8114ac26cf1 +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.9.1-py310h2372a71_2.conda#0a99339b277686c7d824abf9de396901 +https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.7-pyh59ac667_0.conda#24c1a37849fcd4c74923a38b029b208f +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py310h98feede_0.conda#a5ea028f63386c53a2b8ff4d09065259 +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.10.1-pyhd8ed1ab_0.conda#1371f9394b20fd1fe7419a2aa9b38888 +https://conda.anaconda.org/conda-forge/noarch/pytoolconfig-1.2.5-pyhd8ed1ab_0.conda#2d6bdf5a69cfcd1fcc7f2b900cb4082f +https://conda.anaconda.org/conda-forge/noarch/rope-1.12.0-pyhd8ed1ab_0.conda#5b17bee6351fbe4ae28da178866b2c73 +https://conda.anaconda.org/conda-forge/noarch/whatthepatch-1.0.5-pyhd8ed1ab_0.conda#e62ea65e1979c18c4c9034567e7105c5 +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.10.1-pyhd8ed1ab_0.conda#15b849d7f03b7580a88a3f887db5ad40 +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.0.0-hcb28a07_0.conda#f53005657267d6b1233c2852fcb84707 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.12-pyhd8ed1ab_0.conda#fe8919032eb413e76a7802f013a536ee +https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py310hcb5633a_0.conda#892e912e08ba834aa77ff25f983a4e9e +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.14-pyhd8ed1ab_0.conda#27319d665d06aa5c25b6a07d04a4256f +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-emr-extension-0.1.9-pyhd8ed1ab_0.conda#589f97989a6db8b2f21a53881fdd1d97 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-0.2.0-pyhd8ed1ab_0.conda#9331340b5a844f5ac2c74eda353aa23e +https://conda.anaconda.org/conda-forge/noarch/sagemaker-kernel-wrapper-0.0.2-pyhd8ed1ab_0.conda#99480997ca2429b75169c896cc988cdb +https://conda.anaconda.org/conda-forge/noarch/schema-0.7.5-pyhd8ed1ab_1.conda#750d2ce4311d1502b51ad814407f043d +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.212.0-pyhd8ed1ab_0.conda#eb07d50e30f7b423929f9081118d3979 +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.0.21-pyhd8ed1ab_0.conda#fa0e9b0ca6c3e96d350711b6dbddaeb6 +https://conda.anaconda.org/conda-forge/linux-64/sasl-0.3.1-py310hd8f1fbe_2.tar.bz2#9b15d1759c99ad57ae43080cfca56d73 +https://conda.anaconda.org/conda-forge/linux-64/supervisor-4.2.5-py310hff52083_2.conda#7fe7fa4d80a99dc44ba15ef3e82707af +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.12.1-cpu_py310h91b7bb3_1.conda#3133c1f0d7fba203c6af92843b7a6b8a +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.12.1-cpu_py310haacee6a_1.conda#23ed9579748a885ae9e52ae809ccae6a +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.12.1-cpu_py310hd1aba9c_1.conda#79f37d0e1a7badce42c40f869ac4ce3a +https://conda.anaconda.org/conda-forge/linux-64/uvicorn-0.28.1-py310hff52083_0.conda#2708791931977a77fa35bc601a571375 diff --git a/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/code-editor/code_editor_machine_settings.json b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/code-editor/code_editor_machine_settings.json new file mode 100644 index 00000000..a391da92 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/code-editor/code_editor_machine_settings.json @@ -0,0 +1,4 @@ +{ + "python.terminal.activateEnvironment": false, + "python.defaultInterpreterPath": "/opt/conda/bin/python" +} \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/code-editor/extensions.txt b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/code-editor/extensions.txt new file mode 100644 index 00000000..ee18444b --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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 \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/conda/.condarc b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/conda/.condarc new file mode 100644 index 00000000..c3616df5 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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/v1/v1.6/v1.6.1/dirs/etc/jupyter/jupyter_server_config.py b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/jupyter/jupyter_server_config.py new file mode 100644 index 00000000..e05997f2 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/jupyter/jupyter_server_config.py @@ -0,0 +1,16 @@ +# 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 diff --git a/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf new file mode 100644 index 00000000..cac5669b --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord-common.conf b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord-common.conf new file mode 100644 index 00000000..27820d4c --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf new file mode 100644 index 00000000..5694ac11 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord.conf b/build_artifacts/v1/v1.6/v1.6.1/dirs/etc/supervisor/conf.d/supervisord.conf new file mode 100644 index 00000000..686f4a5c --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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/v1/v1.6/v1.6.1/dirs/usr/local/bin/entrypoint-code-editor b/build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/entrypoint-code-editor new file mode 100755 index 00000000..677c9803 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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 \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/entrypoint-jupyter-server b/build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/entrypoint-jupyter-server new file mode 100755 index 00000000..ceda89d0 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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/v1/v1.6/v1.6.1/dirs/usr/local/bin/restart-jupyter-server b/build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/restart-jupyter-server new file mode 100755 index 00000000..6f2af98d --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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/v1/v1.6/v1.6.1/dirs/usr/local/bin/start-code-editor b/build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/start-code-editor new file mode 100755 index 00000000..bc97106c --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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/v1/v1.6/v1.6.1/dirs/usr/local/bin/start-jupyter-server b/build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/start-jupyter-server new file mode 100755 index 00000000..377a86d4 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/dirs/usr/local/bin/start-jupyter-server @@ -0,0 +1,35 @@ +#!/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 + # 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/v1/v1.6/v1.6.1/gpu.arg_based_env.in b/build_artifacts/v1/v1.6/v1.6.1/gpu.arg_based_env.in new file mode 100644 index 00000000..51cba0a9 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/gpu.arg_based_env.in @@ -0,0 +1 @@ +conda-forge::cudatoolkit=$CUDA_MAJOR_MINOR_VERSION diff --git a/build_artifacts/v1/v1.6/v1.6.1/gpu.env.in b/build_artifacts/v1/v1.6/v1.6.1/gpu.env.in new file mode 100644 index 00000000..b3c917b1 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/gpu.env.in @@ -0,0 +1,51 @@ +# This file is auto-generated. +conda-forge::sagemaker-code-editor[version='>=1.0.0,<1.1.0'] +conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.3,<0.2.0'] +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<0.2.0'] +conda-forge::langchain[version='>=0.1.9,<0.2.0'] +conda-forge::fastapi[version='>=0.103.2,<0.104.0'] +conda-forge::uvicorn[version='>=0.28.0,<0.29.0'] +conda-forge::pytorch-gpu[version='>=2.0.0,<2.1.0'] +conda-forge::tensorflow[version='>=2.12.1,<2.13.0'] +conda-forge::python[version='>=3.10.13,<3.11.0'] +conda-forge::pip[version='>=23.3.2,<23.4.0'] +conda-forge::torchvision[version='>=0.15.2,<0.16.0'] +conda-forge::numpy[version='>=1.26.4,<1.27.0'] +conda-forge::pandas[version='>=2.1.4,<2.2.0'] +conda-forge::scikit-learn[version='>=1.4.1.post1,<1.5.0'] +conda-forge::jinja2[version='>=3.1.3,<3.2.0'] +conda-forge::matplotlib[version='>=3.8.3,<3.9.0'] +conda-forge::sagemaker-headless-execution-driver[version='>=0.0.12,<0.1.0'] +conda-forge::ipython[version='>=8.22.2,<8.23.0'] +conda-forge::scipy[version='>=1.11.4,<1.12.0'] +conda-forge::keras[version='>=2.12.0,<2.13.0'] +conda-forge::py-xgboost-gpu[version='>=1.7.6,<1.8.0'] +conda-forge::jupyterlab[version='>=4.1.4,<4.2.0'] +conda-forge::ipywidgets[version='>=8.1.2,<8.2.0'] +conda-forge::conda[version='>=23.11.0,<23.12.0'] +conda-forge::boto3[version='>=1.34.51,<1.35.0'] +conda-forge::sagemaker-python-sdk[version='>=2.212.0,<2.213.0'] +conda-forge::supervisor[version='>=4.2.5,<4.3.0'] +conda-forge::autogluon[version='>=0.8.2,<0.9.0'] +conda-forge::aws-glue-sessions[version='>=1.0.4,<1.1.0'] +conda-forge::sagemaker-kernel-wrapper[version='>=0.0.2,<0.1.0'] +conda-forge::jupyter-ai[version='>=2.11.0,<2.12.0'] +conda-forge::jupyter-scheduler[version='>=2.5.1,<2.6.0'] +conda-forge::nodejs[version='>=18.19.0,<18.20.0'] +conda-forge::jupyter-lsp[version='>=2.2.4,<2.3.0'] +conda-forge::jupyterlab-lsp[version='>=5.0.3,<5.1.0'] +conda-forge::python-lsp-server[version='>=1.10.1,<1.11.0'] +conda-forge::notebook[version='>=7.1.1,<7.2.0'] +conda-forge::altair[version='>=5.2.0,<5.3.0'] +conda-forge::sagemaker-studio-analytics-extension[version='>=0.0.21,<0.1.0'] +conda-forge::jupyter-dash[version='>=0.4.2,<0.5.0'] +conda-forge::sagemaker-jupyterlab-extension[version='>=0.2.0,<0.3.0'] +conda-forge::sagemaker-jupyterlab-emr-extension[version='>=0.1.9,<0.2.0'] +conda-forge::amazon-sagemaker-jupyter-scheduler[version='>=3.0.7,<3.1.0'] +conda-forge::jupyter-server-proxy[version='>=4.1.2,<4.2.0'] +conda-forge::amazon-codewhisperer-jupyterlab-ext[version='>=2.0.1,<2.1.0'] +conda-forge::jupyterlab-git[version='>=0.50.0,<0.51.0'] +conda-forge::sasl[version='>=0.3.1,<0.4.0'] +conda-forge::thrift_sasl[version='>=0.4.3,<0.5.0'] +conda-forge::pyhive[version='>=0.7.0,<0.8.0'] +conda-forge::python-gssapi[version='>=1.8.3,<1.9.0'] diff --git a/build_artifacts/v1/v1.6/v1.6.1/gpu.env.out b/build_artifacts/v1/v1.6/v1.6.1/gpu.env.out new file mode 100644 index 00000000..8469595f --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/gpu.env.out @@ -0,0 +1,670 @@ +# 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-13.2.0-h807b86a_5.conda#d4ff227c46917d3b4565302a2bbb276b +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda#f6f6600d18a4047b54f803cf708b868a +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-18.1.1-h4dfa4b3_0.conda#89023cfc92c7e9dd2e822ebdb4f753b0 +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/linux-64/bzip2-1.0.8-hd590300_5.conda#69b8b6202a07720f448be700e300ccf4 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 +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.45.2-h2797004_0.conda#866983a220e27a80cb75e85cb30466a1 +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.4.20240210-h59595ed_0.conda#97da8860a0da5413c7c98a3b3838a645 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_1.conda#9d731343cff6ee2e5a25c4a091bf8e2a +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.10.13-hd12c33a_1_cpython.conda#ed38140af93f81319ebc472fbcf16cca +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-13.2.0-ha4646dd_5.conda#7a6bd7a12a4bd359e2afe6c0fa1acace +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda#e73e9cfd1191783392131e6238bdb3e9 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda#26322ec5d7712c3ded99dd656142b8ce +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda#6593de64c935768b6bad3e19b3e978be +https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py310h2372a71_0.conda#bd19b3096442ea342c4a5208379660b1 +https://conda.anaconda.org/conda-forge/linux-64/cudatoolkit-11.8.0-h4ba93d1_13.conda#eb43f5f1f16e2fad2eba22219c3e499b +https://conda.anaconda.org/conda-forge/noarch/cuda-version-11.8-h70ddcb2_3.conda#670f0e1593b8c1d84f57ad5fe5256799 +https://conda.anaconda.org/conda-forge/linux-64/cudnn-8.9.7.29-hbc23b4c_3.conda#4a2d5fab2871d95544de4e1752948d0f +https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda#0c1729b74a8152fde6a38ba0a2ab9f45 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py310h2372a71_0.conda#f6703fa0214a00bf49d1bef6dc7672d0 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda#e7d8df6509ba635247ff9aea31134262 +https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.7.1-hc72dce7_6.conda#afd44491bd564d8dd6cda5d9aecaa452 +https://conda.anaconda.org/conda-forge/linux-64/libmagma_sparse-2.7.1-h8354cda_6.conda#5e835e8d48283880ea6ef11920c7fb14 +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-3.21.12-hfc55251_2.conda#e3a7d4ba09b8dc939b98fef55f539220 +https://conda.anaconda.org/conda-forge/linux-64/magma-2.7.1-ha770c72_6.conda#f8ffd335f311e9749428727752e815bb +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff +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.6-h232c23b_0.conda#d86653ff5ccb88bf7f13833fdd8789e0 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda#f36ddc11ca46958197a45effdd286e45 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_1.conda#4531d2927578e7e254ff3bcf6457518c +https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda#a7ce56d5757f5b57e7daabe703ade5bb +https://conda.anaconda.org/conda-forge/linux-64/nccl-2.20.5.1-h6103f9b_0.conda#bedb0b33c5e3e6fbd4dce4f6f07fea72 +https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda#425fce3b531bed6ec3c74fab3e5f0a1c +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.5.1-h9b69904_2.tar.bz2#6e016cf4c525d04a7bd038cee53ad3fd +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_1.conda#e358c7c5f6824c272b5034b3816438a7 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda#4c28f3210b30250037a4a627eeee9e0f +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.2-py310h3ec546c_1.tar.bz2#73f6fa50c32ddd985cf5fba7b890a75c +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda#dbf6e2d89137da32fa6670f3bffc024e +https://conda.anaconda.org/conda-forge/noarch/sympy-1.12-pypyh9d50eac_103.conda#2f7d6347d7acf6edf1ac7f2189f44c8f +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.5.0-pyha770c72_0.conda#43e7d9e50261fb11deb76e17d8431aac +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.0.0-cuda112py310he33e0d6_200.conda#87729716665c9fa180d7e42fde5c53ab +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.1-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7 +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-py310h2372a71_0.conda#f20cd4d9c1f4a8377d0818c819918bbb +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2#d1e1eb7e21a9e2c74279d87dafb68156 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.5.0-hd8ed1ab_0.conda#b3c594fde1a80a1fc3eb9cc4a5dfe392 +https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda#3ce482ec3066e6d809dbbb1d1679f215 +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-py310h2372a71_0.conda#d4c91d19e4f2f18b64753ac660edad79 +https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py310h2372a71_0.conda#4ad35c8f6a64a6ab708780dad603aef4 +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.3-py310h2372a71_1.conda#dd21c88dfec3253cb9888c0e93fa5cd1 +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.0.9-py310hd8f1fbe_9.conda#e2047ad2af52c01845f58b580c6cbd5c +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.18-pyhd8ed1ab_0.conda#bf61cfd2a7f212efba378167a07d4a6a +https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.51-pyge310_1234567_0.conda#f8980578a765dd28417953dddfefe5bc +https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py310h2372a71_0.conda#d9dc9c45bdc2b38403e6b388581e92f0 +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.12.1-pyhd8ed1ab_0.conda#045560daef58c75a759c2638fbdb5c6a +https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda#0bb492cca54017ea314b809b1ee3a176 +https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a +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.3.2-pyhd8ed1ab_0.conda#bb8086d3dd1b2cfeebd15f9a7e56f7bd +https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 +https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.20.0-py310h2372a71_0.conda#e7f8dc8c62e136573c84116a5e743aed +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda#98206ea9954216ee7540f0c773f2104d +https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py310hcc13569_0.conda#410f7e83992a591e492c25049a859254 +https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 +https://conda.anaconda.org/conda-forge/noarch/altair-5.2.0-pyhd8ed1ab_1.conda#1aebb1cef46d9cb76e0d38eed822348a +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.1-pyhd8ed1ab_0.conda#a41cafc1fb653ce0e48b9310226e90fd +https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.51-pyhd8ed1ab_0.conda#bd19311f73611626b31afc608af438cd +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.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda#490730480d76cf9c8f8f2849719c6e2b +https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49 +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda#0876280e409658fc6f9e75d035960333 +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.4-pyhd8ed1ab_0.conda#20f047662cf4fa8b97836111df87dbb4 +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.2-pyhd8ed1ab_0.conda#af5fa2d2186003472e766a23c46cae04 +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.1-py310hc6cd4ac_0.conda#1ea80564b80390fa25da16e4211eb801 +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.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094 +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.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de +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.42-pyha770c72_0.conda#0bf64bf10eee21f46ac83c161917fa86 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda#140a7f159396547e9799aa98f9f0742e +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.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883 +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.22.2-pyh707e725_0.conda#f0abe827c8a7c6d91bccdf90cb1fbee3 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda#a0bc3eec34b0fab84be6b2da94e98e20 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py310hff52083_0.conda#cb92c27600d5716fd526a206aa43342c +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/zeromq-4.3.5-h59595ed_1.conda#7fc9d3288d2420bb3637647621018000 +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py310h795f18f_0.conda#fa09f98f3acfd3f5de30bd2d27d5cb7f +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4-py310h2372a71_0.conda#48f39c24349d9ae5c8e8873c42fb6170 +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.1-pyhd8ed1ab_0.conda#c03972cfce69ad913d520c652e5ed908 +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.3-pyhd33586a_0.conda#e0deff12c601ce5cb7476f93718f3168 +https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda#45846a970e71ac98fd327da5d40a0a2c +https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310h2372a71_4.conda#68ee85860502d53c8cbfa0e4cef0f6cb +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-2.4-py310hff52083_3.conda#08ec1463dbc5c806a32fc431874032ca +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-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.17.3-pyhd8ed1ab_0.conda#7a709748e93f0b2c33d6b5b676b6d9d0 +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.6.3-pyhd8ed1ab_1.conda#2ac0d00a0fb3f1a4c81c460ba56bb23b +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-69.2.0-pyhd8ed1ab_0.conda#da214ecd521a720a9d521c68047682dc +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.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.3-pyhd8ed1ab_0.conda#ca3d437c0ef2e87f63d085822c74c49a +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.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.2-pyhd8ed1ab_0.conda#5ab3248dd05c543dc631276455ef6a54 +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.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2 +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda#50ad31e07d706aae88b14a4ac9c73f23 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.10.0-pyhd8ed1ab_0.conda#016d56f5d81b9364d1da5f4895a2a9f8 +https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.4-pyhd8ed1ab_0.conda#91f93e1ebf6535be518715432d89fd92 +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.24-pyhd8ed1ab_0.conda#fc9780a517b51ea3798fc011c17ffd51 +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.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda#327bfe1c99154f02259d29810bd70afc +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.5-pyhd8ed1ab_0.conda#04b1ca9d7ac414b3f5c3fb16066c6861 +https://conda.anaconda.org/conda-forge/noarch/amazon-codewhisperer-jupyterlab-ext-2.0.1-pyhd8ed1ab_0.conda#ab9bb3e630d872e9d38c8c18a0cba7b4 +https://conda.anaconda.org/conda-forge/noarch/aws-embedded-metrics-3.2.0-pyhd8ed1ab_0.conda#e1c511655b6e9eb0265c9715c7fa410f +https://conda.anaconda.org/conda-forge/noarch/croniter-1.4.1-pyhd8ed1ab_0.conda#7a4568626f8d6e7c63dcb25d5501a967 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.12.3-ha770c72_0.conda#cdea66892b19a454f939487318b6c517 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.2-pyhd8ed1ab_0.conda#7a0bfebd69213722427cb61b077b4187 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.2-pyhd8ed1ab_0.conda#e14e35cc4a5c90694bb41c5317b576a8 +https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.14-py310h2372a71_0.conda#6aca52bad315e6b841a32d6b3b0cdb82 +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.3-py310hc6cd4ac_0.conda#fb478fd83c001cbf8ab01c29b857262e +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.49-py310h2372a71_1.conda#cdeaf46006791202a7597bf2a0e6ad9e +https://conda.anaconda.org/conda-forge/noarch/jupyter_scheduler-2.5.1-pyha770c72_0.conda#3d250834fde789b6cb96dc11a43d1df2 +https://conda.anaconda.org/conda-forge/noarch/jupyter-scheduler-2.5.1-hd8ed1ab_0.conda#bb6463ad5d244321f64a231ba9b6cf2a +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-scheduler-3.0.7-pyhd8ed1ab_1.conda#ee635c11a576839138a93fc46e0f389b +https://conda.anaconda.org/conda-forge/linux-64/cryptography-42.0.5-py310h75e40e8_0.conda#47e6ea7109182e9e48f8c5839f1bded7 +https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda#1482e77f87c6a702a7e05ef22c9b197b +https://conda.anaconda.org/conda-forge/noarch/pyathena-3.5.1-pyhd8ed1ab_0.conda#1c302abfabf4d08375990de11ff98242 +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-py310hcfd0673_0.conda#d6df7beac08573177dd9a6a560d1d180 +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.0-pyhd8ed1ab_0.conda#4501c96a5e9f18239ae6e5944604d493 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-execution-0.1.2-pyhd8ed1ab_0.conda#a16fa2f5c791f94b459acd5c34ab8670 +https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.4.4-pyhd8ed1ab_0.conda#2e2f31b3b1c866c29636377e14f8c4c6 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-magic-0.1.0-pyhd8ed1ab_0.conda#4fd1875033a6ca132d227f3587415fd5 +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.3-pyhd8ed1ab_0.conda#6618ce22c81277d6ebaa45364c9d6b76 +https://conda.anaconda.org/conda-forge/linux-64/ansi2html-1.9.1-py310hff52083_0.conda#2213ea76fd340e7c848c1be0cbdfc579 +https://conda.anaconda.org/conda-forge/noarch/textwrap3-0.9.2-py_0.tar.bz2#1f84e74e9dbe2e5ae38c58496bffaca8 +https://conda.anaconda.org/conda-forge/noarch/ansiwrap-0.8.4-py_0.tar.bz2#f09557e2a7cbd2470a2ab6353000cebd +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.5.0-h27087fc_0.tar.bz2#a08150fd2298460cd1fcccf626305642 +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.0.3-py310hff52083_0.conda#7d18b84331cda8271c9ed67d1ca05d47 +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.43-hcad00b1_0.conda#8292dea9e022d9610a11fce5e0896ed8 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.0-hf2295e7_1.conda#0725f6081030c29b109088639824ff90 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b +https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 +https://conda.anaconda.org/conda-forge/noarch/autogluon.common-0.8.2-pyhd8ed1ab_4.conda#e24166dee3b1430877a324715caf8f5d +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py310hd41b1e2_0.conda#85d2aaa7af046528d339da1e813c3a9f +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.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.conda#d47dee1856d9cb955b8076eeff304a5b +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda#72637c58d36d9475fda24700c9796f19 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.50.0-py310h2372a71_0.conda#85c48c98c9f2b72b384fb11c9004920b +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-py310hd41b1e2_1.conda#b8d67603d43b23ce7e988a5d81a7ab79 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda#323e90742f0f48fc22bea908735f55e6 +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.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda#82bf6f63eb15ef719b556b63feec3a77 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 +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.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea +https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py310h582fbeb_1.conda#cf62f6cff3536eafaaa0c740b0bf7465 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.3-py310h62c0568_0.conda#4a7296c0273eb01dfbed728dd6a6725a +https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py310hb13e2d6_0.conda#f0063b2885bfae11324a00a693f88781 +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.3.0-pyhc1e730c_0.conda#698d2d2b621640bddb9191f132967c9f +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.1.post1-py310h1fdf081_0.conda#2706ad1a5f6cbad8b57d4094889d1e33 +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.2-pyhd8ed1ab_0.conda#2b8dfb969f984497f3f98409a9545776 +https://conda.anaconda.org/conda-forge/linux-64/autogluon.core-0.8.2-light_py310h2d11d36_6.conda#9de8e45568202a91466af4d849c7e919 +https://conda.anaconda.org/conda-forge/noarch/autogluon.features-0.8.2-pyhd8ed1ab_3.conda#c827eccfb0ddb1484d0e00f45242b8f8 +https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py310hff52083_1.conda#a677136a83b823803d2f92045f885be2 +https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2#a556fa60840fcb9dd739d186bfd252f7 +https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca +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/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/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.21.4-pyhd8ed1ab_0.conda#d47cf217a7bcc3a03dd1c6169c3f0f98 +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.16-py310h2372a71_0.conda#efdca5c3783dae00552f389bd7b56c3d +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.0-hd590300_0.conda#71b89db63b5b504e7afc8ad901172e1e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.1-hc309b26_1.conda#cc09293a2c2b7fd77aff284f370c12c0 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h4d4d85c_2.conda#9ca99452635fe03eb5fa937f5ae604b0 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.49-h06160fa_0.conda#1d78349eb26366ecc034a4afe70a8534 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-he9a53bd_1.conda#8a24e5820f4a0ffd2ed9c4722cd5d7ca +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.11-h00aa349_4.conda#cb932dff7328ff620ce8059c9968b095 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h4d4d85c_1.conda#eba092fc6de212a01de0065f38fe8bbb +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.3-h28f7589_1.conda#97503d3e565004697f1651753aa95b9e +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h4d4d85c_1.conda#30f9df85ce23cd14faa9a4dfa50cca2b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.1-h2e3709c_4.conda#2cf21b1cbc1c096a28ffa2892257a2c1 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.3-hb447be9_1.conda#c520669eb0be9269a5f0d8ef62531882 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.14-hf3aad02_1.conda#a968ffa7e9fe0c257628033d393e512f +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.21.0-hb942446_5.conda#07d92ed5403ad7b5c66ffd7d5b8f7e57 +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.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.27.0-hd590300_0.conda#f6afff0e9ee08d2f1b897881a4f38cdb +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.6.0-hca28451_0.conda#704739398d858872cb91610f49f0ef29 +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-h85b1a90_19.conda#0605d3d60857fc07bd6a11e878fe0f08 +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.6.0-h6f12383_0.tar.bz2#b31f3565cb84435407594e548a2fb7b2 +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda#d1db1b8be7c3a8983dcbbbfe4f0765de +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/re2-2023.03.02-h8c504da_0.conda#206f8fa808748f6e90599c3368a1114e +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.54.3-hb20ce57_0.conda#7af7c59ab24db007dfd82e0a3a343f66 +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hac9eb74_1.conda#0dee716254497604762957076ac76540 +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.18.1-h8fd135c_2.conda#bbf65f7688512872f063810623b755dc +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/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 +https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h2f23424_1.conda#9571eb3eb0f7fe8b59956a7786babbcd +https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hd590300_0.conda#8feeecae73aeef0a2985af46b5a2c1df +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda#aeffb7c06b5f65e55e6c637408dc4100 +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda#39aa3b356d10d7e5add0c540945a0944 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-12.0.1-hb87d912_8_cpu.conda#3f3b11398fe79b578e3c44dd00a44e4a +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-12.0.1-py310h0576679_8_cpu.conda#27f55ccfd038d6665facb04a0aa572c5 +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.4.1-py310h2372a71_0.conda#b631b889b0b4bc2fca7b8b977ca484b2 +https://conda.anaconda.org/conda-forge/noarch/datasets-2.18.0-pyhd8ed1ab_0.conda#3482c9b417757df305ff4e3a7e4b7c10 +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/gdown-5.1.0-pyhd8ed1ab_0.conda#6f880647c0270648f710f334c60bc76c +https://conda.anaconda.org/conda-forge/linux-64/libsentencepiece-0.1.99-h180e1df_0.conda#056064bd3ef47439e3e78fac28449fbf +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-python-0.1.99-py310hebdb9f0_0.conda#b3a5908ac3912b26d6a8b77faebe6eca +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-spm-0.1.99-h180e1df_0.conda#c67cc412366709c1c3225f19f8aed63b +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-0.1.99-hff52083_0.conda#578969452de13e4ad69edf18ee2b3d5a +https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyhc8e2a94_3.tar.bz2#a362b2124b06aad102e2ee4581acee7d +https://conda.anaconda.org/conda-forge/linux-64/regex-2023.12.25-py310h2372a71_0.conda#4a9ba4e7af60356e63b38a6d419acad6 +https://conda.anaconda.org/conda-forge/noarch/sacremoses-0.0.53-pyhd8ed1ab_0.tar.bz2#76c3c384fe0941f1b08193736e8e277a +https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.4.2-py310hcb5633a_0.conda#a1e978544ef765ef9ac2f2320e43bacd +https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.13.3-py310he1f1126_0.conda#ea2281fe0bf70c1c83393565342a8a8c +https://conda.anaconda.org/conda-forge/noarch/transformers-4.31.0-pyhd8ed1ab_0.conda#8cccf394a00fbfef2f3d6028422ae5cc +https://conda.anaconda.org/conda-forge/noarch/nlpaug-1.1.11-pyhd8ed1ab_1.conda#4e231f0fa7db9388cf4c8539d623ac62 +https://conda.anaconda.org/conda-forge/noarch/nltk-3.8.1-pyhd8ed1ab_0.conda#518c769ca4273480a99be6e559a26192 +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.2.3-pyhd8ed1ab_0.conda#cebc9f0fc6eebdcc368bb30ba30f2fd5 +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.42.0-pyhd8ed1ab_0.conda#1cdea58981c5cbc17b51973bcaddcea7 +https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda#8591c748f98dcc02253003533bc2e4b1 +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/protobuf-4.21.12-py310heca2aa9_0.conda#90bb7e1b729c4b50272cf78be97ab912 +https://conda.anaconda.org/conda-forge/noarch/pytesseract-0.3.10-pyhd8ed1ab_0.tar.bz2#04f4becceb0c032c5dbdae6ad18bd95e +https://conda.anaconda.org/conda-forge/noarch/lightning-utilities-0.11.0-pyhd8ed1ab_0.conda#45f86a84ae04e7be9fa602707a17af5c +https://conda.anaconda.org/conda-forge/noarch/torchmetrics-1.0.3-pyhd8ed1ab_0.conda#4e8849ba2fa06393b7ab5a50c6a4256c +https://conda.anaconda.org/conda-forge/noarch/pytorch-lightning-2.0.9-pyhd8ed1ab_0.conda#3e96ed529412338e38af9004e22267de +https://conda.anaconda.org/conda-forge/noarch/pytorch-metric-learning-1.7.3-pyhd8ed1ab_0.conda#139aa590e345e10f4572812a329806f4 +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py310h2372a71_0.conda#21362970a6fea90ca507c253c20465f2 +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.3.1-pyhd8ed1ab_0.conda#52dd56ce3afa6a52c2f3d3116875ff32 +https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda#b8853659d596f967c661f544dd89ede7 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h1f7b6fc_1.conda#be6f0382440ccbf9fb01bb19ab1f1fc0 +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 +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.0.7-h0b41bf4_0.conda#49e8329110001f04923fe7e864990b0c +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.13.2-hb4ffafa_0.conda#976aaf1afd331ed7346d649da5c5c1ee +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.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f +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.2-h59595ed_1.conda#127b0be54c1c90760d7fe02ea7a56426 +https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda#418c6ca5929a611cbd69204907a83995 +https://conda.anaconda.org/conda-forge/linux-64/libavif-0.11.1-h8182462_2.conda#41c399ed4c439e37b844c24ab5621b5a +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-h59595ed_0.conda#fd486bffbf0d6841cf1456a8f2e3a995 +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.8.12-py310hc929067_0.conda#61caf809753610c4c87d583765b1d478 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.2.12-pyhd8ed1ab_0.conda#d5c8bef52be4e70c48b1400eec3eecc8 +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.19.3-py310h769672d_2.tar.bz2#c0391107b0cd0010708d6969ed759e8b +https://conda.anaconda.org/conda-forge/noarch/seqeval-1.2.2-pyhd3deb0d_0.tar.bz2#d4436c8a8b9fb6d60fe4e7b9f097f9bb +https://conda.anaconda.org/conda-forge/noarch/cachetools-5.3.3-pyhd8ed1ab_0.conda#cd4c26c702a9bcdc70ff05b609ddacbe +https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.5.1-pyhd8ed1ab_0.conda#fb1a800972b072aa4d16450983c81418 +https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.3.0-pyhd8ed1ab_0.conda#26db749166cdca55e5ef1ffdc7767d0e +https://conda.anaconda.org/conda-forge/noarch/pyopenssl-24.0.0-pyhd8ed1ab_0.conda#b50aec2c744a5c493c09cce9e2e7533e +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.28.2-pyhca7485f_0.conda#f8879cf0e5b8f7761d01bce40ce7c089 +https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda#550da20b2c2e38be9cc44bb819fda5d5 +https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_1.conda#74f76d4868dbba5870f2cf1d9b12d8f3 +https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868 +https://conda.anaconda.org/conda-forge/noarch/requests-oauthlib-1.4.0-pyhd8ed1ab_0.conda#a55b220de8970208f583e38639cfbecc +https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.0.0-pyhd8ed1ab_1.conda#569e62e95b01b53e4ec7d9abe83b7385 +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.54.3-py310heca2aa9_0.conda#7c82ea96968976ee2eb66a52f2decd8e +https://conda.anaconda.org/conda-forge/linux-64/tensorboard-data-server-0.7.0-py310h75e40e8_1.conda#e562478facfa960813945204273ecac5 +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.1-pyhd8ed1ab_0.conda#af8d825d93dbe6331ee6d61c69869ca0 +https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.12.3-pyhd8ed1ab_0.conda#429d39f86cef8d0859d639804ae67aaf +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.15.2-cuda112py310h0801bf5_1.conda#f5680c812c287a92c4390dc245df2e5d +https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 +https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-0.8.2-pyha770c72_5.conda#a8ca42e2b4ee0fd6dce729bc226dd0cc +https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda#669cd7065794633b9e64e6a9612ec700 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda#e7ba12deb7020dd080c6c70e7b6f6a3d +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_1.conda#6185f640c43843e5ad6fd1c5372c3f80 +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.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b +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-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 +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.52.1-ha41ecd1_0.conda#5c0cc002bf4eaa56448b0729efd6e96c +https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h280cfa0_4.conda#410f86e58e880dcc7b0e910a8e89c05c +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-he3f83f7_1.conda#03bd1ddcc942867a19528877143b9852 +https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 +https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb +https://conda.anaconda.org/conda-forge/noarch/python-graphviz-0.20.2-pyh717bed2_0.conda#6df60158d7fcdb1de8728bf5affa5c18 +https://conda.anaconda.org/conda-forge/linux-64/catboost-1.2.3-py310hff52083_2.conda#e063c808181593406d4d3d321ee7ffff +https://conda.anaconda.org/conda-forge/noarch/fastcore-1.5.29-pyhd8ed1ab_0.conda#155c898255baddd6b2cb95894791eeca +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-py310hff52083_0.conda#a20390cd5f5fe4d8c5f6f2e7fa6c54cf +https://conda.anaconda.org/conda-forge/linux-64/cymem-2.0.8-py310hc6cd4ac_1.conda#8e4dada89998e0cb4f97b835dff6dc7e +https://conda.anaconda.org/conda-forge/noarch/langcodes-3.3.0-pyhd8ed1ab_0.tar.bz2#aacac9c3804912c38087d1c295708493 +https://conda.anaconda.org/conda-forge/linux-64/murmurhash-1.0.10-py310hc6cd4ac_1.conda#2b0c4b4532c601ece4537cc7f3558464 +https://conda.anaconda.org/conda-forge/noarch/smart_open-5.2.1-pyhd8ed1ab_0.tar.bz2#c7a838c38e38c82edde371a9054e6c92 +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.0-pyhd8ed1ab_0.conda#5030a13b2fe5e143d5956d4943d3018f +https://conda.anaconda.org/conda-forge/noarch/pathy-0.10.2-pyhd8ed1ab_0.conda#69d84b5c17aea4d7350f3536bcde7296 +https://conda.anaconda.org/conda-forge/linux-64/preshed-3.0.9-py310hc6cd4ac_1.conda#a2a27c2eafd1e280555ae954df088fc3 +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-py310hc6cd4ac_1.conda#7cd9d4be6f55ccb53cbd7125f2e6a0fb +https://conda.anaconda.org/conda-forge/linux-64/confection-0.1.4-py310h17c5347_0.conda#72b63825959fc040cab8ed0f12f2040e +https://conda.anaconda.org/conda-forge/linux-64/cython-blis-0.7.10-py310h1f7b6fc_2.conda#6a0165d9e76c443ed66d2e8b733aa133 +https://conda.anaconda.org/conda-forge/linux-64/wasabi-1.1.2-py310hff52083_0.conda#8ed9f04ed8e1373063cd03b9d5c86ce3 +https://conda.anaconda.org/conda-forge/linux-64/thinc-8.2.2-py310hcb52e73_0.conda#550b37537f05740f1c9a38d63d843b3c +https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.16.0-pyhd8ed1ab_0.conda#8d75941f621306e58b7642394a8bad87 +https://conda.anaconda.org/conda-forge/noarch/weasel-0.3.4-pyhd8ed1ab_0.conda#a53c82e61a1173c887e84fc50842eec4 +https://conda.anaconda.org/conda-forge/linux-64/spacy-3.7.2-py310hcb52e73_0.conda#c966d5a09c130d0bcfce4126643ddc74 +https://conda.anaconda.org/conda-forge/noarch/fastai-2.7.14-pyhd8ed1ab_0.conda#9854ef355cc4bd1e2aac40998f721fed +https://conda.anaconda.org/conda-forge/linux-64/lightgbm-3.3.5-py310heca2aa9_0.conda#d2595ddab22cbca7409b28e3105afd0a +https://conda.anaconda.org/conda-forge/linux-64/libxgboost-1.7.6-cuda118_hd3b444d_6.conda#78509401d0879ef5aac72b8d1e104493 +https://conda.anaconda.org/conda-forge/linux-64/py-xgboost-1.7.6-cuda118_py310h9840055_6.conda#1d3da6268c67fe8b84c32cd0dc174bb4 +https://conda.anaconda.org/conda-forge/linux-64/xgboost-1.7.6-cuda118_py310h9840055_6.conda#f6a6f34c91b92f72dfdb47d3c7efcbbe +https://conda.anaconda.org/conda-forge/noarch/autogluon.tabular-0.8.2-pyha770c72_4.conda#17fad1cdb563ddad16ab0ba4c085bcb3 +https://conda.anaconda.org/conda-forge/noarch/gluonts-0.13.7-pyhd8ed1ab_0.conda#1684b578508d9918b2dcadd4c365c61a +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.42.0-py310h1b8f574_1.conda#e2a5e9f92629c8e4c8611883a35745b4 +https://conda.anaconda.org/conda-forge/linux-64/numba-0.59.0-py310h7dc5dd1_1.conda#966bc2bc095723310d746106e7c91791 +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.7.3-pyhd8ed1ab_0.conda#7a2b34b4c9bff2545200b3746da70f11 +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.1-py310h1f7b6fc_0.conda#d98c3749dd466513dd921f5818f4b001 +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.9.0-py310hc6cd4ac_0.conda#cab4b543b897dcf548edb3018fe45f9e +https://conda.anaconda.org/conda-forge/noarch/autogluon.timeseries-0.8.2-pyhd8ed1ab_4.conda#a64157275daf72a557fe4a9d843a9e1d +https://conda.anaconda.org/conda-forge/noarch/autogluon-0.8.2-pyhd8ed1ab_4.conda#7ff9ac51e09bd5991970a7df53b4bee6 +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.10-pyhd8ed1ab_0.conda#16b73b2c4ff7dda8bbecf88aadfe2027 +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.10-pyhd8ed1ab_0.conda#521f489e3babeddeec638c2add7e9e64 +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.2-pyhd8ed1ab_0.conda#67f86478c78637f68c1f3858973021f2 +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda#85a2189ecd2fcdd86e92b2d4ea8fe461 +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.2-pyhd8ed1ab_0.conda#fa781da51f05c9211b75b5e7bcff8136 +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.1-pyha770c72_0.conda#5528a3eda283b421055c89bface19a1c +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.4-pyhd8ed1ab_0.conda#169c4c0a396d83164215f54024031ec8 +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.1.2-py310hcb5633a_0.conda#6dd3d49f65ceb05dbd527a5b6301611b +https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda#4eccaeba205f0aed9ac3a9ea58568ca3 +https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda#17064acba08d3686f1135b5ec1b32b12 +https://conda.anaconda.org/conda-forge/linux-64/black-24.3.0-py310hff52083_0.conda#12960fe9118cbb71fb802a52870f7874 +https://conda.anaconda.org/conda-forge/noarch/boltons-23.1.1-pyhd8ed1ab_0.conda#56febe65315cc388a5d20adf2b39a74d +https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda#35ef8bc24bd34074ebae3c943d551728 +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h2aa1ff5_1.conda#3bf887827d1968275978361a6e405e4f +https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.28-hfc55251_0.conda#66d4f5d8256542d9ebfa341d690c5e03 +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.7-had39da4_0.conda#9fff450354fbcd1510ef178730732241 +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.7-py310h39ff949_0.conda#58d84efb37d517c64f4e48f75fd6180d +https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.1.0-pyhd8ed1ab_0.conda#304dc78ad6e52e0fd663df1d484c1531 +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py310h1275a96_0.conda#54698ba13cd3494547b289cd86a2176a +https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda#38253361efb303deead3eab39ae9269b +https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda#8a3ae7f6318376aa08ea753367bb7dd6 +https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda#bbdb409974cd6cb30071b1d978302726 +https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda#bfdb7c5c6ad1077c82a69a8642c87aff +https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.0.2-py310hff52083_0.conda#4837faab0d3e665df57fef662148c6a3 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 +https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py310h2372a71_0.conda#0adaac9a86d59adae2bc86b3cdef2df1 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py310h2372a71_0.conda#dcf6d2535586c77b31425ed835610c54 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py310h2372a71_0.conda#50b7d9b39099cdbabf65bf27df73a793 +https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda#08316d001eca8854392cf2837828ea11 +https://conda.anaconda.org/conda-forge/linux-64/conda-23.11.0-py310hff52083_1.conda#d5278ac990c67d5ed51584998aa16c5a +https://conda.anaconda.org/conda-forge/noarch/contextlib2-21.6.0-pyhd8ed1ab_0.tar.bz2#5b26a831440be04c39531a8ce20f5d71 +https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.4-h7f98852_1002.tar.bz2#e728e874159b042d92b90238a3cb0dc2 +https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.27-h54b06d7_7.conda#dce22f70b4e5a407ce88f2be046f4ceb +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.1.2-pyhd8ed1ab_0.tar.bz2#3c3de74912f11d2b590184f03c7cd09b +https://conda.anaconda.org/conda-forge/noarch/flask-3.0.2-pyhd8ed1ab_0.conda#7f88df670921cc31c309719e30c22021 +https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2#a11f356d6f93b74b4a84e9501afd48b4 +https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda#016bd4f61878a57f19c8cd744708a1f1 +https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.21.1-pyhd8ed1ab_0.conda#ae303aa7dc100bc3bc01b5a3b7ca3567 +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.4-pyhd8ed1ab_0.conda#1190a6456351690603b2d64d1cbf5b4a +https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d +https://conda.anaconda.org/conda-forge/noarch/deepmerge-1.1.1-pyhd8ed1ab_0.conda#d91c3d8ac3f2ab36ca4ea32ac42f731e +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py310hd41b1e2_0.conda#dc5263dcaa1347e5a456ead3537be27d +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.3.1-pyhd8ed1ab_0.conda#b0ad5ef44595ef37c3008fc04ecd2abf +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py310h2372a71_3.conda#a29a0825809cd3a780097472be176618 +https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda#a5e792523b028b06d7ce6e65a6cd4a33 +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.0.0-pyhd8ed1ab_0.conda#aec5f308cb9055e83c59afecd5fcb58a +https://conda.anaconda.org/conda-forge/noarch/docstring-to-markdown-0.15-pyhd8ed1ab_0.conda#a3a1e6af2926a3affcd6f2072871f551 +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-1.7.4-hf47d654_0_cpu.conda#8fd132db65c8d51caea2ae7cde4b450c +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-avx2-1.7.4-h1234567_0_cpu.conda#7eb943c067a63c4d8af526c2df9f2c1b +https://conda.anaconda.org/conda-forge/linux-64/faiss-1.7.4-py310h9ed8947_0_cpu.conda#99665c710087f7a964915b5ea0097465 +https://conda.anaconda.org/conda-forge/linux-64/faiss-cpu-1.7.4-h718b53a_0.conda#7a9e6f72c36ff5a5eeb61660fd6fdf8d +https://conda.anaconda.org/conda-forge/noarch/starlette-0.27.0-pyhd8ed1ab_0.conda#6facb6fc201d334257db8004439705d3 +https://conda.anaconda.org/conda-forge/noarch/fastapi-0.103.2-pyhd8ed1ab_0.conda#fb243b6796ab7d64b14e00c279620c04 +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-23.5.26-h59595ed_1.conda#913a1c6fd00b66f33392a129e835ceca +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda#650a7807e689642dddd3590eb817beed +https://conda.anaconda.org/conda-forge/noarch/gast-0.4.0-pyh9f0ad1d_0.tar.bz2#42323c77b73462199fca93bc8ac9279d +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.42-pyhd8ed1ab_0.conda#6bc8e496351bafd761c0922c3ebd989a +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.0-hde27a5a_1.conda#939ddd853b1d98bf6fd22cc0adeda317 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.0-hf2295e7_1.conda#d3bcc5c186f78feba6f39ea047c35950 +https://conda.anaconda.org/conda-forge/noarch/google-pasta-0.2.0-pyh8c360ce_0.tar.bz2#26e27d7d3d7fe2336b543dd8e0f12cbf +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.9-h98fc4e7_0.conda#bcc7157b06fce7f5e055402a8135dfd8 +https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 +https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f +https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.9-h8e1006c_0.conda#614b81f8ed66c56b640faee7076ad14a +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda#d471a5c3abc984b662d9bae3bb7fd8a5 +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.10.0-nompi_py310h65828d5_101.conda#44c185c5b133ad6d1d449839407aa863 +https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.3.2-py310hcc13569_0.conda#1ad84020b1ab816d7ab3f3d0859faf40 +https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.14-cpu_py310h67d73b5_1.conda#392c325994aa96727edd0069a0620e31 +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.3.0-pyhc1e730c_2.conda#7a94ac68b892daa9f17ae8a52b31ed81 +https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.3.0-hd8ed1ab_2.conda#ab262acd95cb73f3ed9426cc4204ac3a +https://conda.anaconda.org/conda-forge/noarch/jax-0.4.20-pyhd8ed1ab_0.conda#5abbd950bd427bc9d929e35ecbf814d1 +https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 +https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 +https://conda.anaconda.org/conda-forge/linux-64/orjson-3.9.15-py310hcb5633a_0.conda#da1b180ccf1dce5d87d145ad2fc14e5a +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.31-pyhd8ed1ab_0.conda#031cb2cb0387f028379c1a58217fe929 +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.32-pyhd8ed1ab_0.conda#b085528ffeef5167dd8f6e358e4170e2 +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.28-pyhd8ed1ab_0.conda#d7e8f72c5e422b78b3d5f7a7aecbfae9 +https://conda.anaconda.org/conda-forge/noarch/langchain-0.1.9-pyhd8ed1ab_0.conda#2ad37682610ac2643b46e4cc0215f410 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.11.0-pyhd8ed1ab_0.conda#aee09f3966655f81d05fcfb5bae3612d +https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.5.2-py310h47bb294_0.conda#a83ae186d0a4b78c98b32781d7c15d48 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.11.0-pyhd8ed1ab_0.conda#e8ab7975630aff4624d3ed1fa32ac552 +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.1.2-pyhd8ed1ab_0.conda#3671520b52215a5a084de08003e6d8cd +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.0-pyhd8ed1ab_1.conda#5020cacc18e3d5f62a81513f26ac2cac +https://conda.anaconda.org/conda-forge/noarch/keras-2.12.0-pyhd8ed1ab_0.conda#e6e18b33e8d62200099f2eed98a263b6 +https://conda.anaconda.org/conda-forge/noarch/keras-preprocessing-1.1.2-pyhd8ed1ab_0.tar.bz2#a79b00989a0d89791021902f37fe2f9e +https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef +https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_ha2b6cf4_4.conda#898e0dd993afbed0d871b60c2eb33b83 +https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_hb11cfb5_4.conda#c90f4cbb57839c98fef8f830e4b9972f +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda#4d18d86916705d352d5f4adfb7f0edd3 +https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.6-h088ca5b_0.conda#99dca02fb74a8dfa3653c6673674f90c +https://conda.anaconda.org/conda-forge/linux-64/libsecret-0.18.8-h329b89f_2.tar.bz2#9d6698e3c9585a75156d86f7ef229093 +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.4-h59595ed_0.conda#3f1017b4141e943d9bc8739237f749e8 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda#3366af27f0b593544a6cd453c7932ac5 +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.41-hd590300_0.conda#81f740407b45e3f9047b3174fa94eb9e +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-hd429924_1.conda#1dbcc04604fdf1e526e6d1b0b6938396 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py310hc6cd4ac_0.conda#68d5bfccaba2d89a7812098dd3966d9b +https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda#ef5333594a958b25912002886b82b253 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda#e87530d1b12dd7f4e0f856dc07358d60 +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.98-h1d7d5a4_0.conda#54b56c2fdf973656b748e0378900ec13 +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda#f4fe7a6e3d7c78c9de048ea9dda21690 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.3-py310hff52083_0.conda#e91d183a307d7bd667003291f690cbb0 +https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.19.0-hb753e55_0.conda#0b4a67051e3b3812818ccf2f4ee2fd4e +https://conda.anaconda.org/conda-forge/noarch/papermill-2.5.0-pyhd8ed1ab_0.conda#e6e69b90afd3d0597da8f1f74cc4bd58 +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/linux-64/py-xgboost-gpu-1.7.6-py310h9840055_6.conda#f148fc36e36779537fd0845178f8a619 +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.19.0-py310hc6cd4ac_1.conda#2e0bde59a8aa215c7402c181c20c9605 +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-py310h98feede_1.conda#0329fda0ebbccee7b3e9dbf4a377d0ce +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda#37c47ea93ef00dd80d880fc4ba21256a +https://conda.anaconda.org/conda-forge/noarch/pylint-3.0.4-pyhd8ed1ab_0.conda#d536ee47166d8984c6acd8114ac26cf1 +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.9.1-py310h2372a71_2.conda#0a99339b277686c7d824abf9de396901 +https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.7-pyh59ac667_0.conda#24c1a37849fcd4c74923a38b029b208f +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py310h98feede_0.conda#a5ea028f63386c53a2b8ff4d09065259 +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.10.1-pyhd8ed1ab_0.conda#1371f9394b20fd1fe7419a2aa9b38888 +https://conda.anaconda.org/conda-forge/noarch/pytoolconfig-1.2.5-pyhd8ed1ab_0.conda#2d6bdf5a69cfcd1fcc7f2b900cb4082f +https://conda.anaconda.org/conda-forge/noarch/rope-1.12.0-pyhd8ed1ab_0.conda#5b17bee6351fbe4ae28da178866b2c73 +https://conda.anaconda.org/conda-forge/noarch/whatthepatch-1.0.5-pyhd8ed1ab_0.conda#e62ea65e1979c18c4c9034567e7105c5 +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.10.1-pyhd8ed1ab_0.conda#15b849d7f03b7580a88a3f887db5ad40 +https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.0.0-cuda112py310h9871d0b_200.conda#7d0ebb619bd0c1a451d167886d2cc904 +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.0.0-hcb28a07_0.conda#f53005657267d6b1233c2852fcb84707 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.12-pyhd8ed1ab_0.conda#fe8919032eb413e76a7802f013a536ee +https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py310hcb5633a_0.conda#892e912e08ba834aa77ff25f983a4e9e +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.14-pyhd8ed1ab_0.conda#27319d665d06aa5c25b6a07d04a4256f +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-emr-extension-0.1.9-pyhd8ed1ab_0.conda#589f97989a6db8b2f21a53881fdd1d97 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-0.2.0-pyhd8ed1ab_0.conda#9331340b5a844f5ac2c74eda353aa23e +https://conda.anaconda.org/conda-forge/noarch/sagemaker-kernel-wrapper-0.0.2-pyhd8ed1ab_0.conda#99480997ca2429b75169c896cc988cdb +https://conda.anaconda.org/conda-forge/noarch/schema-0.7.5-pyhd8ed1ab_1.conda#750d2ce4311d1502b51ad814407f043d +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.212.0-pyhd8ed1ab_0.conda#eb07d50e30f7b423929f9081118d3979 +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.0.21-pyhd8ed1ab_0.conda#fa0e9b0ca6c3e96d350711b6dbddaeb6 +https://conda.anaconda.org/conda-forge/linux-64/sasl-0.3.1-py310hd8f1fbe_2.tar.bz2#9b15d1759c99ad57ae43080cfca56d73 +https://conda.anaconda.org/conda-forge/linux-64/supervisor-4.2.5-py310hff52083_2.conda#7fe7fa4d80a99dc44ba15ef3e82707af +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.12.1-cuda112py310h1d65785_1.conda#4aa4b1fa72143cf84ff5776275f8b40d +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.12.1-cuda112py310ha5e6de5_1.conda#bb21f985bf64adc3751a3a1578a0a69e +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.12.1-cuda112py310h457873b_1.conda#eee4abf81acd7c5205f476838713cfba +https://conda.anaconda.org/conda-forge/linux-64/uvicorn-0.28.1-py310hff52083_0.conda#2708791931977a77fa35bc601a571375 diff --git a/build_artifacts/v1/v1.6/v1.6.1/patch_glue_pyspark.json b/build_artifacts/v1/v1.6/v1.6.1/patch_glue_pyspark.json new file mode 100644 index 00000000..ab70fd8d --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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 and Ray", + "env": {"request_origin": "SageMakerStudioPySparkNotebook", "glue_version": "3.0"}, + "language": "python" +} + diff --git a/build_artifacts/v1/v1.6/v1.6.1/patch_glue_spark.json b/build_artifacts/v1/v1.6/v1.6.1/patch_glue_spark.json new file mode 100644 index 00000000..1bd168e7 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/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/v1/v1.6/v1.6.1/source-version.txt b/build_artifacts/v1/v1.6/v1.6.1/source-version.txt new file mode 100644 index 00000000..ce6a70b9 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.1/source-version.txt @@ -0,0 +1 @@ +1.6.0 \ No newline at end of file diff --git a/src/main.py b/src/main.py index 31d3a98f..05ea1e58 100644 --- a/src/main.py +++ b/src/main.py @@ -204,11 +204,8 @@ def _test_local_images(image_ids_to_test: list[str], target_version: str): for (image_id, config) in zip(image_ids_to_test, _image_generator_configs): exit_code = pytest.main(['-n', '2', '-m', config['image_type'], '--local-image-version', target_version, *config['pytest_flags']]) - if exit_code != 0: - exit_codes.append(exit_code) - image_ids.append(image_id) - assert len(exit_codes) == 0, f'Tests failed with exit codes: {exit_codes} against: {image_ids}' + assert exit_code == 0, f'Tests failed with exit codes: {exit_codes} against: {image_ids}' print(f'Tests ran successfully against: {image_ids_to_test}') From 6850b937106f2fe1c3fecb8e3a7d4cc517b59ce2 Mon Sep 17 00:00:00 2001 From: Nikhil Umesh Sargur Date: Fri, 22 Mar 2024 18:55:23 +0000 Subject: [PATCH 19/32] Adding nightly-build-image.yml to mainline --- .github/workflows/nightly-build-image.yml | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/nightly-build-image.yml diff --git a/.github/workflows/nightly-build-image.yml b/.github/workflows/nightly-build-image.yml new file mode 100644 index 00000000..fa7c08b5 --- /dev/null +++ b/.github/workflows/nightly-build-image.yml @@ -0,0 +1,27 @@ +name: Build New Image Version +on: workflow_dispatch +#on: +# # Run every night at 5:15PM PST +# # Run before monthly, so we don't immediately patch a new minor version +# schedule: +# - cron: '0 15 17 ? * *' +defaults: + run: + shell: bash -l {0} +jobs: + call-codebuild-project: + runs-on: ubuntu-latest + steps: + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.START_CODEBUILD_ROLE }} + aws-region: us-east-1 + # CodeBuild timeout of 8 hours + role-duration-seconds: 28800 + audience: https://sts.us-east-1.amazonaws.com + - name: Run CodeBuild + uses: dark-mechanicum/aws-codebuild@v1 + with: + projectName: 'betaimagerelease92AD4800-5O3Rv5xogtpw' + buildspec: '{"imageOverride": "aws/codebuild/standard:7.0", "imagePullCredentialsTypeOverride": "CODEBUILD"}' From fab0a0ab2bcf717dec717e5dee2a109c289288e9 Mon Sep 17 00:00:00 2001 From: Nikhil Umesh Sargur Date: Fri, 22 Mar 2024 21:19:28 +0000 Subject: [PATCH 20/32] Adding id-token write permissions --- .github/workflows/nightly-build-image.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/nightly-build-image.yml b/.github/workflows/nightly-build-image.yml index fa7c08b5..42ae43a5 100644 --- a/.github/workflows/nightly-build-image.yml +++ b/.github/workflows/nightly-build-image.yml @@ -11,6 +11,8 @@ defaults: jobs: call-codebuild-project: runs-on: ubuntu-latest + permissions: + id-token: write steps: - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v4 From c19187d63894bbfb926c6a31ec1133448712c369 Mon Sep 17 00:00:00 2001 From: Nikhil Umesh Sargur <160935684+nikhilumeshsargur@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:03:58 -0700 Subject: [PATCH 21/32] Adding id-token write permissions (#288) --- .github/workflows/nightly-build-image.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/nightly-build-image.yml b/.github/workflows/nightly-build-image.yml index fa7c08b5..42ae43a5 100644 --- a/.github/workflows/nightly-build-image.yml +++ b/.github/workflows/nightly-build-image.yml @@ -11,6 +11,8 @@ defaults: jobs: call-codebuild-project: runs-on: ubuntu-latest + permissions: + id-token: write steps: - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v4 From fea408186a5b1bd842fe2398deee485871f07ff9 Mon Sep 17 00:00:00 2001 From: Clayton Parnell <42805768+claytonparnell@users.noreply.github.com> Date: Mon, 25 Mar 2024 15:10:54 -0400 Subject: [PATCH 22/32] fix: Increase shm_size for tests (#309) --- test/test_dockerfile_based_harness.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_dockerfile_based_harness.py b/test/test_dockerfile_based_harness.py index 69f81a6b..8026ff2b 100644 --- a/test/test_dockerfile_based_harness.py +++ b/test/test_dockerfile_based_harness.py @@ -130,7 +130,7 @@ def _validate_docker_images(dockerfile_path: str, required_packages: List[str], try: image, _ = _docker_client.images.build(path=test_artifacts_path, - dockerfile=dockerfile_path, shmsize='256000000', + dockerfile=dockerfile_path, shmsize='512000000', tag=dockerfile_path.lower().replace('.', '-'), rm=True, buildargs={'SAGEMAKER_DISTRIBUTION_IMAGE': docker_image_identifier}) except BuildError as e: From b2890e15a4797c80402d459731c0e203ae0a203d Mon Sep 17 00:00:00 2001 From: Tian Wang Date: Mon, 25 Mar 2024 22:01:59 +0000 Subject: [PATCH 23/32] Set up pre-commit hooks for checking code styles --- .github/workflows/check_code_quality.yml | 46 ++++++++++++++++++++++++ .pre-commit-config.yaml | 26 ++++++++++++++ DEVELOPMENT.md | 17 +++++++++ environment.yml | 4 +++ 4 files changed, 93 insertions(+) create mode 100644 .github/workflows/check_code_quality.yml create mode 100644 .pre-commit-config.yaml diff --git a/.github/workflows/check_code_quality.yml b/.github/workflows/check_code_quality.yml new file mode 100644 index 00000000..17a2bda1 --- /dev/null +++ b/.github/workflows/check_code_quality.yml @@ -0,0 +1,46 @@ +name: check_code_quality + +on: + push: + branches: [ main ] + paths: + - "src/**.py" + - "test/**.py" + - "template/**.py" + + pull_request: + branches: [ main ] + paths: + - "src/**.py" + - "test/**.py" + - "template/**.py" + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + build: + name: Check Code Quality + runs-on: ubuntu-latest + if: github.repository == 'aws/sagemaker-distribution' + permissions: + pull-requests: write + contents: write + steps: + - uses: actions/checkout@v4 + - uses: mamba-org/setup-micromamba@v1 + with: + environment-file: ./environment.yml + environment-name: sagemaker-distribution + init-shell: bash + - name: Free up disk space + run: rm -rf /opt/hostedtoolcache + - name: Activate sagemaker-distribution + run: micromamba activate sagemaker-distribution + - name: Check style with black + run: black --line-length=120 --check src test template + - name: Check style with autoflake + run: autoflake --in-place --expand-star-imports --ignore-init-module-imports --remove-all-unused-imports -rc src test template + - name: Check style with isort + run: isort --profile black -c src test template diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..4c3a2233 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,26 @@ +default_language_version: + # force all unspecified python hooks to run python3 + python: python3 +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.3.0 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace + - id: detect-aws-credentials +- repo: https://github.com/humitos/mirrors-autoflake.git + rev: v1.3 + hooks: + - id: autoflake + args: ['--in-place', '--expand-star-imports', '--ignore-init-module-imports', '--remove-all-unused-imports'] +- repo: https://github.com/psf/black + rev: 23.3.0 + hooks: + - id: black + args: [--line-length=120] +- repo: https://github.com/pycqa/isort + rev: 5.12.0 + hooks: # imports sorting + - id: isort + name: isort (python) + args: ["--profile", "black"] diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 4bf4796b..835edb67 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -24,6 +24,23 @@ Run the following to invoke those tests: pytest --local-image-id REPLACE_ME_WITH_IMAGE_ID ``` +## Code Style + +Install pre-commit to run code style checks before each commit: + +```shell +pip install pre-commit +pre-commit install +``` + +To run formatters for all existing files, use: + +```shell +pre-commit run --all-files +``` + +pre-commit checks can be disabled for a particular commit with git commit -n. + You can also pass a `--use-gpu` flag if the test machine has Nvidia GPU(s) and necessary Nvidia drivers. ### Unit tests for the project's source code diff --git a/environment.yml b/environment.yml index fbe6253f..78a32952 100644 --- a/environment.yml +++ b/environment.yml @@ -10,3 +10,7 @@ dependencies: - pytest-mock - pytest-xdist - semver + - autoflake + - black + - isort + - pre-commit From a74466c154d01201388f5232b167538275aa74c4 Mon Sep 17 00:00:00 2001 From: Tian Wang Date: Mon, 25 Mar 2024 22:02:54 +0000 Subject: [PATCH 24/32] Run code style formetters on all existing files --- .github/workflows/PR_TEMPLATE.md | 2 +- .github/workflows/monthly-minor-release.yml | 2 +- .gitignore | 2 +- CONTRIBUTING.md | 46 +- README.md | 10 +- RELEASE.md | 2 +- src/changelog_generator.py | 78 ++- src/config.py | 38 +- src/dependency_upgrader.py | 40 +- src/main.py | 222 ++++--- src/package_staleness.py | 109 ++-- src/release_notes_generator.py | 58 +- src/utils.py | 32 +- .../code_editor_machine_settings.json | 2 +- .../v1/dirs/etc/code-editor/extensions.txt | 2 +- .../dirs/etc/jupyter/jupyter_server_config.py | 8 +- .../dirs/usr/local/bin/entrypoint-code-editor | 2 +- .../dirs/usr/local/bin/start-jupyter-server | 4 +- test/conftest.py | 15 +- .../run_glue_sessions_notebook.sh | 1 - test/test_artifacts/v0/keras.test.Dockerfile | 1 - .../v0/matplotlib.test.Dockerfile | 1 - test/test_artifacts/v0/run_pandas_tests.py | 12 +- ...-headless-execution-driver.test.Dockerfile | 2 +- .../v0/scripts/run_autogluon_tests.sh | 2 +- .../v0/scripts/run_matplotlib_tests.sh | 2 - .../run_glue_sessions_notebook.sh | 1 - .../v1/jupyterlab-git.test.Dockerfile | 1 - .../v1/matplotlib.test.Dockerfile | 1 - test/test_artifacts/v1/run_pandas_tests.py | 22 +- .../scripts/run_altair_example_notebooks.sh | 1 - .../v1/scripts/run_autogluon_tests.sh | 2 +- .../v1/scripts/run_matplotlib_tests.sh | 2 - .../run_sagemaker_code_editor_tests.sh | 2 +- test/test_artifacts/v1/serve.test.Dockerfile | 2 +- test/test_dependency_upgrader.py | 40 +- test/test_dockerfile_based_harness.py | 209 +++--- test/test_main.py | 606 +++++++++--------- test/test_package_staleness.py | 106 +-- 39 files changed, 850 insertions(+), 840 deletions(-) diff --git a/.github/workflows/PR_TEMPLATE.md b/.github/workflows/PR_TEMPLATE.md index f6bcb2e4..767b3ba5 100644 --- a/.github/workflows/PR_TEMPLATE.md +++ b/.github/workflows/PR_TEMPLATE.md @@ -1,4 +1,4 @@ This pull request was created by GitHub Actions/AWS CodeBuild! Before merging, please do the following: - [ ] Review changelog/staleness report. - [ ] Review build/test results by clicking *Build Logs* in CI Report (be patient, tests take ~4hr). -- [ ] Review ECR Scan results. \ No newline at end of file +- [ ] Review ECR Scan results. diff --git a/.github/workflows/monthly-minor-release.yml b/.github/workflows/monthly-minor-release.yml index 7b91b75c..fc443d26 100644 --- a/.github/workflows/monthly-minor-release.yml +++ b/.github/workflows/monthly-minor-release.yml @@ -41,4 +41,4 @@ jobs: uses: aws/sagemaker-distribution/.github/workflows/build-image.yml@main with: release-type: "minor" - base-version: ${{ matrix.version }} \ No newline at end of file + base-version: ${{ matrix.version }} diff --git a/.gitignore b/.gitignore index 16058d2e..120ee635 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ __pycache__ .idea -.DS_Store \ No newline at end of file +.DS_Store diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3a028449..324d899c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,60 +41,60 @@ GitHub provides additional document on [forking a repository](https://help.githu ## For adding new Conda packages to SageMaker Distribution -SageMaker Distribution will add new Conda packages only during a minor/major version release. +SageMaker Distribution will add new Conda packages only during a minor/major version release. New packages will not be added during a patch version release. Follow these steps for sending out a pull request for adding new packages: 1. Identify the latest version of SageMaker Distribution. 2. Create the next minor/major version's build artifacts folder here: https://github.com/aws/sagemaker-distribution/tree/main/build_artifacts -3. Currently, SageMaker Distribution is using Conda forge channel as our source (for Conda - packages). +3. Currently, SageMaker Distribution is using Conda forge channel as our source (for Conda + packages). Ensure that the new package which you are trying to add is present in Conda forge channel. https://conda-forge.org/feedstock-outputs/ -4. Create {cpu/gpu}.additional_packages_env.in file in that folder containing the new packages. +4. Create {cpu/gpu}.additional_packages_env.in file in that folder containing the new packages. Specify the new package based on the following examples: i. conda-forge::new-package - + ii. conda-forge::new-package[version='>=some-version-number, [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) is a web-based, integrated +> [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) is a web-based, integrated > development environment (IDE) for machine learning that lets you build, train, debug, deploy, and monitor your > machine learning models. @@ -125,8 +125,8 @@ RUN micromamba install sagemaker-inference --freeze-installed --yes --channel co ## FIPS -As of sagemaker-distribution: v0.12+, v1.6+, and v2+, the images come with FIPS 140-2 validated openssl provider -available for use. You can enable the FIPS provider by running: +As of sagemaker-distribution: v0.12+, v1.6+, and v2+, the images come with FIPS 140-2 validated openssl provider +available for use. You can enable the FIPS provider by running: `export OPENSSL_CONF=/opt/conda/ssl/openssl-fips.cnf` diff --git a/RELEASE.md b/RELEASE.md index 03286729..d6f16c01 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -51,7 +51,7 @@ python src/main.py build \ Note: -- As you can see above, the `--target-ecr-repo` parameter can be supplied zero or multiple times. If not supplied, the +- As you can see above, the `--target-ecr-repo` parameter can be supplied zero or multiple times. If not supplied, the tool will just build a local image. If supplied multiple times, it'll upload the images to all those ECR repositories. - There is also a `--skip-tests` flag which, by default, is `false`. You can supply it if you'd like to skip tests locally. However, we'll make sure the tests succeed before any image is release publicly. diff --git a/src/changelog_generator.py b/src/changelog_generator.py index e6a343b2..f4ab3bb8 100644 --- a/src/changelog_generator.py +++ b/src/changelog_generator.py @@ -1,67 +1,65 @@ import os -from utils import ( - get_dir_for_version, - get_semver, - get_match_specs, -) + from semver import Version +from utils import get_dir_for_version, get_match_specs, get_semver + -def _derive_changeset(target_version_dir, source_version_dir, image_config) -> (dict[str, - list[str]], dict[str, str]): - env_in_file_name = image_config['build_args']['ENV_IN_FILENAME'] - env_out_file_name = image_config['env_out_filename'] - required_packages_from_target = get_match_specs( - target_version_dir + "/" + env_in_file_name - ).keys() +def _derive_changeset(target_version_dir, source_version_dir, image_config) -> (dict[str, list[str]], dict[str, str]): + env_in_file_name = image_config["build_args"]["ENV_IN_FILENAME"] + env_out_file_name = image_config["env_out_filename"] + required_packages_from_target = get_match_specs(target_version_dir + "/" + env_in_file_name).keys() target_match_spec_out = get_match_specs(target_version_dir + "/" + env_out_file_name) source_match_spec_out = get_match_specs(source_version_dir + "/" + env_out_file_name) # Note: required_packages_from_source is not currently used. # In the future, If we remove any packages from env.in, at that time required_packages_from_source will be needed. # We only care about the packages which are present in the target version env.in file - installed_packages_from_target = {k: str(v.get('version')).removeprefix('==') - for k, v in target_match_spec_out.items() - if k in required_packages_from_target} + installed_packages_from_target = { + k: str(v.get("version")).removeprefix("==") + for k, v in target_match_spec_out.items() + if k in required_packages_from_target + } # Note: A required package in the target version might not be a required package in the source version # But source version could still have this package pulled as a dependency of a dependency. - installed_packages_from_source = {k: str(v.get('version')).removeprefix('==') for - k, v in source_match_spec_out.items() - if k in required_packages_from_target} - upgrades = {k: [installed_packages_from_source[k], v] for k, v in installed_packages_from_target.items() - if k in installed_packages_from_source and installed_packages_from_source[k] != v} - new_packages = {k: v for k, v in installed_packages_from_target.items() - if k not in installed_packages_from_source} + installed_packages_from_source = { + k: str(v.get("version")).removeprefix("==") + for k, v in source_match_spec_out.items() + if k in required_packages_from_target + } + upgrades = { + k: [installed_packages_from_source[k], v] + for k, v in installed_packages_from_target.items() + if k in installed_packages_from_source and installed_packages_from_source[k] != v + } + new_packages = {k: v for k, v in installed_packages_from_target.items() if k not in installed_packages_from_source} # TODO: Add support for removed packages. return upgrades, new_packages def generate_change_log(target_version: Version, image_config): target_version_dir = get_dir_for_version(target_version) - source_version_txt_file_path = f'{target_version_dir}/source-version.txt' + source_version_txt_file_path = f"{target_version_dir}/source-version.txt" if not os.path.exists(source_version_txt_file_path): - print('[WARN]: Generating CHANGELOG is skipped because \'source-version.txt\' isn\'t ' - 'found.') + print("[WARN]: Generating CHANGELOG is skipped because 'source-version.txt' isn't " "found.") return - with open(source_version_txt_file_path, 'r') as f: + with open(source_version_txt_file_path, "r") as f: source_patch_version = f.readline() source_version = get_semver(source_patch_version) source_version_dir = get_dir_for_version(source_version) - image_type = image_config['image_type'] - upgrades, new_packages = _derive_changeset(target_version_dir, source_version_dir, - image_config) - with open(f'{target_version_dir}/CHANGELOG-{image_type}.md', 'w') as f: - f.write('# Change log: ' + str(target_version) + '(' + image_type + ')\n\n') + image_type = image_config["image_type"] + upgrades, new_packages = _derive_changeset(target_version_dir, source_version_dir, image_config) + with open(f"{target_version_dir}/CHANGELOG-{image_type}.md", "w") as f: + f.write("# Change log: " + str(target_version) + "(" + image_type + ")\n\n") if len(upgrades) != 0: - f.write('## Upgrades: \n\n') - f.write('Package | Previous Version | Current Version\n') - f.write('---|---|---\n') + f.write("## Upgrades: \n\n") + f.write("Package | Previous Version | Current Version\n") + f.write("---|---|---\n") for package in upgrades: - f.write(package + '|' + upgrades[package][0] + '|' - + upgrades[package][1] + '\n') + f.write(package + "|" + upgrades[package][0] + "|" + upgrades[package][1] + "\n") if len(new_packages) != 0: - f.write('\n## What\'s new: \n\n') - f.write('Package | Version \n') - f.write('---|---\n') + f.write("\n## What's new: \n\n") + f.write("Package | Version \n") + f.write("---|---\n") for package in new_packages: - f.write(package + '|' + new_packages[package] + '\n') + f.write(package + "|" + new_packages[package] + "\n") diff --git a/src/config.py b/src/config.py index 9afb899e..1b654e6d 100644 --- a/src/config.py +++ b/src/config.py @@ -1,26 +1,26 @@ _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', + "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", + }, ] diff --git a/src/dependency_upgrader.py b/src/dependency_upgrader.py index 6d7703e1..e8b0c9da 100644 --- a/src/dependency_upgrader.py +++ b/src/dependency_upgrader.py @@ -1,31 +1,31 @@ from semver import Version -_MAJOR = 'major' -_MINOR = 'minor' -_PATCH = 'patch' +_MAJOR = "major" +_MINOR = "minor" +_PATCH = "patch" def _get_dependency_upper_bound_for_runtime_upgrade(dependency_name: str, lower_bound: str, runtime_upgrade_type): metadata = _dependency_metadata.get(dependency_name, None) - version_upgrade_strategy = 'semver' if metadata is None else metadata['version_upgrade_strategy'] + version_upgrade_strategy = "semver" if metadata is None else metadata["version_upgrade_strategy"] - func = _version_upgrade_metadata[version_upgrade_strategy]['func'] + func = _version_upgrade_metadata[version_upgrade_strategy]["func"] # Version strings on conda-forge follow PEP standards rather than SemVer, which support # version strings such as X.Y.Z.postN, X.Y.Z.preN. These cause errors in semver.Version.parse # so we keep the first 3 entries as version string. - if lower_bound.count('.') > 2: - lower_bound = '.'.join(lower_bound.split('.')[:3]) + if lower_bound.count(".") > 2: + lower_bound = ".".join(lower_bound.split(".")[:3]) return func(lower_bound, runtime_upgrade_type) def _get_dependency_upper_bound_for_semver(lower_bound: str, runtime_upgrade_type): lower_semver = Version.parse(lower_bound, optional_minor_and_patch=True) if runtime_upgrade_type == _MAJOR: - return '' # No upper bound. + return "" # No upper bound. elif runtime_upgrade_type == _MINOR: - return f',<{lower_semver.bump_major()}' + return f",<{lower_semver.bump_major()}" elif runtime_upgrade_type == _PATCH: - return f',<{lower_semver.bump_minor()}' + return f",<{lower_semver.bump_minor()}" else: raise Exception() @@ -33,11 +33,11 @@ def _get_dependency_upper_bound_for_semver(lower_bound: str, runtime_upgrade_typ def _get_dependency_upper_bound_for_pythonesque(lower_bound: str, runtime_upgrade_type): lower_semver = Version.parse(lower_bound, optional_minor_and_patch=True) if runtime_upgrade_type == _MAJOR: - return '' # No upper bound. + return "" # No upper bound. elif runtime_upgrade_type == _MINOR: - return f',<{lower_semver.bump_minor()}' + return f",<{lower_semver.bump_minor()}" elif runtime_upgrade_type == _PATCH: - return f',<{lower_semver.bump_minor()}' + return f",<{lower_semver.bump_minor()}" else: raise Exception() @@ -50,21 +50,13 @@ def _get_dependency_upper_bound_for_pythonesque(lower_bound: str, runtime_upgrad # happens in the given month). So, 2nd release in December 2022 was versioned as '2022.12.1'. # In Amazon SageMaker Distribution, we want to move to a new month only during a minor version upgrade and new year # during a major version upgrade. - 'semver': { - 'func': _get_dependency_upper_bound_for_semver - }, + "semver": {"func": _get_dependency_upper_bound_for_semver}, # Some dependencies follow, for lack of a better word, "python style" release cycles. For e.g., even if Python does # a minor version upgrade from 3.9 to 3.10, we will only introduce 3.10 in Amazon SageMaker Distribution as part of # a major version upgrade. In other words, for dependencies below, minor version upgrades are treated as major # version upgrades in Amazon SageMaker Distribution. - 'pythonesque': { - 'func': _get_dependency_upper_bound_for_pythonesque - } + "pythonesque": {"func": _get_dependency_upper_bound_for_pythonesque}, } -_dependency_metadata = { - 'python': { - 'version_upgrade_strategy': 'pythonesque' - } -} +_dependency_metadata = {"python": {"version_upgrade_strategy": "pythonesque"}} diff --git a/src/main.py b/src/main.py index 05ea1e58..464053af 100644 --- a/src/main.py +++ b/src/main.py @@ -4,7 +4,6 @@ import glob import os import shutil -from typing import List import boto3 import docker @@ -13,16 +12,21 @@ from docker.errors import BuildError, ContainerError from semver import Version -from dependency_upgrader import _get_dependency_upper_bound_for_runtime_upgrade, _MAJOR, _MINOR, _PATCH from changelog_generator import generate_change_log -from release_notes_generator import generate_release_notes from config import _image_generator_configs +from dependency_upgrader import ( + _MAJOR, + _MINOR, + _PATCH, + _get_dependency_upper_bound_for_runtime_upgrade, +) from package_staleness import generate_package_staleness_report +from release_notes_generator import generate_release_notes from utils import ( get_dir_for_version, - is_exists_dir_for_version, + get_match_specs, get_semver, - get_match_specs + is_exists_dir_for_version, ) _docker_client = docker.from_env() @@ -44,8 +48,9 @@ def create_and_get_semver_dir(version: Version, exist_ok: bool = False): def _delete_all_files_except_additional_packages_input_files(base_version_dir): - additional_package_env_in_files = [image_generator_config['additional_packages_env_in_file'] - for image_generator_config in _image_generator_configs] + additional_package_env_in_files = [ + image_generator_config["additional_packages_env_in_file"] for image_generator_config in _image_generator_configs + ] for filename in os.listdir(base_version_dir): if filename not in additional_package_env_in_files: file_path = os.path.join(base_version_dir, filename) @@ -55,18 +60,18 @@ def _delete_all_files_except_additional_packages_input_files(base_version_dir): elif os.path.isdir(file_path): shutil.rmtree(file_path) except Exception as e: - print('Failed to delete %s. Reason: %s' % (file_path, e)) + print("Failed to delete %s. Reason: %s" % (file_path, e)) def _create_new_version_artifacts(args): runtime_version_upgrade_type = args.runtime_version_upgrade_type if runtime_version_upgrade_type == _PATCH: - runtime_version_upgrade_func = 'bump_patch' + runtime_version_upgrade_func = "bump_patch" elif runtime_version_upgrade_type == _MINOR: - runtime_version_upgrade_func = 'bump_minor' + runtime_version_upgrade_func = "bump_minor" elif runtime_version_upgrade_type == _MAJOR: - runtime_version_upgrade_func = 'bump_major' + runtime_version_upgrade_func = "bump_major" else: raise Exception() @@ -85,18 +90,19 @@ def _create_new_version_artifacts(args): new_version_dir = create_and_get_semver_dir(next_version, args.force) for image_generator_config in _image_generator_configs: - _create_new_version_conda_specs(base_version_dir, new_version_dir, runtime_version_upgrade_type, - image_generator_config) + _create_new_version_conda_specs( + base_version_dir, new_version_dir, runtime_version_upgrade_type, image_generator_config + ) _copy_static_files(base_version_dir, new_version_dir, str(next_version.major), runtime_version_upgrade_type) - with open(f'{new_version_dir}/source-version.txt', 'w') as f: + with open(f"{new_version_dir}/source-version.txt", "w") as f: f.write(args.base_patch_version) def _copy_static_files(base_version_dir, new_version_dir, new_version_major, runtime_version_upgrade_type): - for f in glob.glob(f'{base_version_dir}/gpu.arg_based_env.in'): + for f in glob.glob(f"{base_version_dir}/gpu.arg_based_env.in"): shutil.copy2(f, new_version_dir) - for f in glob.glob(f'{base_version_dir}/patch_*'): + for f in glob.glob(f"{base_version_dir}/patch_*"): shutil.copy2(f, new_version_dir) # For patches, get Dockerfile+dirs from base patch @@ -104,26 +110,27 @@ def _copy_static_files(base_version_dir, new_version_dir, new_version_major, run if runtime_version_upgrade_type == _PATCH: 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')): + 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') + dirs_relative_path = os.path.relpath(f"{base_path}/dirs") for f in glob.glob(dirs_relative_path): - shutil.copytree(f, os.path.join(new_version_dir, 'dirs')) + shutil.copytree(f, os.path.join(new_version_dir, "dirs")) + -def _create_new_version_conda_specs(base_version_dir, new_version_dir, runtime_version_upgrade_type, - image_generator_config): - env_in_filename = image_generator_config['build_args']['ENV_IN_FILENAME'] - additional_packages_env_in_filename = image_generator_config['additional_packages_env_in_file'] - env_out_filename = image_generator_config['env_out_filename'] +def _create_new_version_conda_specs( + base_version_dir, new_version_dir, runtime_version_upgrade_type, image_generator_config +): + env_in_filename = image_generator_config["build_args"]["ENV_IN_FILENAME"] + additional_packages_env_in_filename = image_generator_config["additional_packages_env_in_file"] + env_out_filename = image_generator_config["env_out_filename"] - base_match_specs_in = get_match_specs(f'{base_version_dir}/{env_in_filename}') + base_match_specs_in = get_match_specs(f"{base_version_dir}/{env_in_filename}") - base_match_specs_out = get_match_specs(f'{base_version_dir}/{env_out_filename}') - additional_packages_match_specs_in = \ - get_match_specs(f'{new_version_dir}/{additional_packages_env_in_filename}') + base_match_specs_out = get_match_specs(f"{base_version_dir}/{env_out_filename}") + additional_packages_match_specs_in = get_match_specs(f"{new_version_dir}/{additional_packages_env_in_filename}") # Add all the match specs from the previous version. # If a package is present in both additional packages as well as the previous version, then @@ -140,17 +147,17 @@ def _create_new_version_conda_specs(base_version_dir, new_version_dir, runtime_v else: channel = match_out.get("channel").channel_name - min_version_inclusive = match_out.get('version') - assert str(min_version_inclusive).startswith('==') - min_version_inclusive = str(min_version_inclusive).removeprefix('==') + min_version_inclusive = match_out.get("version") + assert str(min_version_inclusive).startswith("==") + min_version_inclusive = str(min_version_inclusive).removeprefix("==") - max_version_str = _get_dependency_upper_bound_for_runtime_upgrade(package_name, - min_version_inclusive, - runtime_version_upgrade_type) + max_version_str = _get_dependency_upper_bound_for_runtime_upgrade( + package_name, min_version_inclusive, runtime_version_upgrade_type + ) out.append(f"{channel}::{package_name}[version='>={min_version_inclusive}{max_version_str}']") - with open(f'{new_version_dir}/{env_in_filename}', 'w') as f: + with open(f"{new_version_dir}/{env_in_filename}", "w") as f: f.write("# This file is auto-generated.\n") f.write("\n".join(out)) f.write("\n") # This new line is pretty important. See code documentation in Dockerfile for the reasoning. @@ -170,8 +177,7 @@ def create_patch_version_artifacts(args): def build_images(args): target_version = get_semver(args.target_patch_version) - image_ids, image_versions = _build_local_images(target_version, args.target_ecr_repo, - args.force, args.skip_tests) + image_ids, image_versions = _build_local_images(target_version, args.target_ecr_repo, args.force, args.skip_tests) generate_release_notes(target_version) # Upload to ECR before running tests so that only the exact image which we tested goes to public @@ -180,55 +186,56 @@ def build_images(args): _push_images_upstream(image_versions, args.region) if not args.skip_tests: - print(f'Will now run tests against: {image_ids}') + print(f"Will now run tests against: {image_ids}") _test_local_images(image_ids, args.target_patch_version) else: - print('Will skip tests.') + print("Will skip tests.") def _push_images_upstream(image_versions_to_push: list[dict[str, str]], region: str): - print(f'Will now push the images to ECR: {image_versions_to_push}') + print(f"Will now push the images to ECR: {image_versions_to_push}") for i in image_versions_to_push: - username, password = _get_ecr_credentials(region, i['repository']) - _docker_client.images.push(repository=i['repository'], tag=i['tag'], - auth_config={'username': username, 'password': password}) + username, password = _get_ecr_credentials(region, i["repository"]) + _docker_client.images.push( + repository=i["repository"], tag=i["tag"], auth_config={"username": username, "password": password} + ) - print(f'Successfully pushed these images to ECR: {image_versions_to_push}') + print(f"Successfully pushed these images to ECR: {image_versions_to_push}") def _test_local_images(image_ids_to_test: list[str], target_version: str): assert len(image_ids_to_test) == len(_image_generator_configs) exit_codes = [] image_ids = [] - for (image_id, config) in zip(image_ids_to_test, _image_generator_configs): - exit_code = pytest.main(['-n', '2', '-m', config['image_type'], '--local-image-version', - target_version, *config['pytest_flags']]) + for image_id, config in zip(image_ids_to_test, _image_generator_configs): + exit_code = pytest.main( + ["-n", "2", "-m", config["image_type"], "--local-image-version", target_version, *config["pytest_flags"]] + ) - assert exit_code == 0, f'Tests failed with exit codes: {exit_codes} against: {image_ids}' + assert exit_code == 0, f"Tests failed with exit codes: {exit_codes} against: {image_ids}" - print(f'Tests ran successfully against: {image_ids_to_test}') + print(f"Tests ran successfully against: {image_ids_to_test}") def _get_config_for_image(target_version_dir: str, image_generator_config, force_rebuild) -> dict: - if not os.path.exists(target_version_dir + "/" + image_generator_config["env_out_filename"]) \ - or force_rebuild: + if not os.path.exists(target_version_dir + "/" + image_generator_config["env_out_filename"]) or force_rebuild: return image_generator_config config_for_image = copy.deepcopy(image_generator_config) # Use the existing env.out to create the conda environment. Pass that as env.in - config_for_image['build_args']['ENV_IN_FILENAME'] = \ - image_generator_config["env_out_filename"] + config_for_image["build_args"]["ENV_IN_FILENAME"] = image_generator_config["env_out_filename"] # Remove ARG_BASED_ENV_IN_FILENAME if it exists - config_for_image['build_args'].pop('ARG_BASED_ENV_IN_FILENAME', None) + config_for_image["build_args"].pop("ARG_BASED_ENV_IN_FILENAME", None) return config_for_image # Returns a tuple of: 1/ list of actual images generated; 2/ list of tagged images. A given image can be tagged by # multiple different strings - for e.g., a CPU image can be tagged as '1.3.2-cpu', '1.3-cpu', '1-cpu' and/or # 'latest-cpu'. Therefore, (1) is strictly a subset of (2). -def _build_local_images(target_version: Version, target_ecr_repo_list: list[str], force: bool, - skip_tests=False) -> (list[str], list[dict[str, str]]): +def _build_local_images( + target_version: Version, target_ecr_repo_list: list[str], force: bool, skip_tests=False +) -> (list[str], list[dict[str, str]]): target_version_dir = get_dir_for_version(target_version) generated_image_ids = [] @@ -237,26 +244,27 @@ def _build_local_images(target_version: Version, target_ecr_repo_list: list[str] for image_generator_config in _image_generator_configs: config = _get_config_for_image(target_version_dir, image_generator_config, force) try: - image, log_gen = _docker_client.images.build(path=target_version_dir, rm=True, - pull=True, buildargs=config['build_args']) + image, log_gen = _docker_client.images.build( + path=target_version_dir, rm=True, pull=True, buildargs=config["build_args"] + ) except BuildError as e: for line in e.build_log: - if 'stream' in line: - print(line['stream'].strip()) + if "stream" in line: + print(line["stream"].strip()) # After printing the logs, raise the exception (which is the old behavior) raise - print(f'Successfully built an image with id: {image.id}') + print(f"Successfully built an image with id: {image.id}") generated_image_ids.append(image.id) try: - container_logs = _docker_client.containers.run(image=image.id, detach=False, - auto_remove=True, - command='micromamba env export --explicit') + container_logs = _docker_client.containers.run( + image=image.id, detach=False, auto_remove=True, command="micromamba env export --explicit" + ) except ContainerError as e: - print(e.container.logs().decode('utf-8')) + print(e.container.logs().decode("utf-8")) # After printing the logs, raise the exception (which is the old behavior) raise - with open(f'{target_version_dir}/{config["env_out_filename"]}', 'wb') as f: + with open(f'{target_version_dir}/{config["env_out_filename"]}', "wb") as f: f.write(container_logs) # Generate change logs. Use the original image generator config which contains the name @@ -264,17 +272,18 @@ def _build_local_images(target_version: Version, target_ecr_repo_list: list[str] generate_change_log(target_version, image_generator_config) version_tags_to_apply = _get_version_tags(target_version, config["env_out_filename"]) - image_tags_to_apply = [config['image_tag_generator'].format(image_version=i) for i in version_tags_to_apply] + image_tags_to_apply = [config["image_tag_generator"].format(image_version=i) for i in version_tags_to_apply] if target_ecr_repo_list is not None: for target_ecr_repo in target_ecr_repo_list: for t in image_tags_to_apply: image.tag(target_ecr_repo, tag=t) - generated_image_versions.append({'repository': target_ecr_repo, 'tag': t}) + generated_image_versions.append({"repository": target_ecr_repo, "tag": t}) # Tag the image for testing - image.tag('localhost/sagemaker-distribution', - config['image_tag_generator'].format(image_version=str(target_version))) + image.tag( + "localhost/sagemaker-distribution", config["image_tag_generator"].format(image_version=str(target_version)) + ) return generated_image_ids, generated_image_versions @@ -292,7 +301,7 @@ def _get_version_tags(target_version: Version, env_out_file_name: str) -> list[s # If we were to add '2.6', check if '2.6.(x+1)' is present. if not is_exists_dir_for_version(target_version.bump_patch(), env_out_file_name): - res.append(f'{target_version.major}.{target_version.minor}') + res.append(f"{target_version.major}.{target_version.minor}") else: return res @@ -304,19 +313,19 @@ def _get_version_tags(target_version: Version, env_out_file_name: str) -> list[s # If we were to add 'latest', check if '3.0.0' is present. if not is_exists_dir_for_version(target_version.bump_major(), env_out_file_name): - res.append('latest') + res.append("latest") return res def _get_ecr_credentials(region, repository: str) -> (str, str): - _ecr_client_config_name = 'ecr-public' if repository.startswith('public.ecr.aws') else 'ecr' + _ecr_client_config_name = "ecr-public" if repository.startswith("public.ecr.aws") else "ecr" _ecr_client = boto3.client(_ecr_client_config_name, region_name=region) - _authorization_data = _ecr_client.get_authorization_token()['authorizationData'] - if _ecr_client_config_name == 'ecr': + _authorization_data = _ecr_client.get_authorization_token()["authorizationData"] + if _ecr_client_config_name == "ecr": # If we are using the ecr private client, then fetch the first index from authorizationData _authorization_data = _authorization_data[0] - return base64.b64decode(_authorization_data['authorizationToken']).decode().split(':') + return base64.b64decode(_authorization_data["authorizationToken"]).decode().split(":") def get_arg_parser(): @@ -327,85 +336,68 @@ def get_arg_parser(): subparsers = parser.add_subparsers(dest="subcommand") create_major_version_parser = subparsers.add_parser( - "create-major-version-artifacts", - help="Creates a new major version of Amazon SageMaker Distribution." + "create-major-version-artifacts", help="Creates a new major version of Amazon SageMaker Distribution." ) - create_major_version_parser.set_defaults(func=create_major_version_artifacts, - runtime_version_upgrade_type=_MAJOR) + create_major_version_parser.set_defaults(func=create_major_version_artifacts, runtime_version_upgrade_type=_MAJOR) create_minor_version_parser = subparsers.add_parser( - "create-minor-version-artifacts", - help="Creates a new minor version of Amazon SageMaker Distribution." + "create-minor-version-artifacts", help="Creates a new minor version of Amazon SageMaker Distribution." ) - create_minor_version_parser.set_defaults(func=create_minor_version_artifacts, - runtime_version_upgrade_type=_MINOR) + create_minor_version_parser.set_defaults(func=create_minor_version_artifacts, runtime_version_upgrade_type=_MINOR) create_patch_version_parser = subparsers.add_parser( - "create-patch-version-artifacts", - help="Creates a new patch version of Amazon SageMaker Distribution." + "create-patch-version-artifacts", help="Creates a new patch version of Amazon SageMaker Distribution." ) - create_patch_version_parser.set_defaults(func=create_patch_version_artifacts, - runtime_version_upgrade_type=_PATCH) + create_patch_version_parser.set_defaults(func=create_patch_version_artifacts, runtime_version_upgrade_type=_PATCH) # Common arguments for p in [create_major_version_parser, create_minor_version_parser, create_patch_version_parser]: p.add_argument( "--base-patch-version", required=True, - help="Specify the base patch version from which a new version should be created." + help="Specify the base patch version from which a new version should be created.", ) p.add_argument( "--pre-release-identifier", - help="Optionally specify the pre-release identifier for this new version that should " - "be created." + help="Optionally specify the pre-release identifier for this new version that should " "be created.", ) p.add_argument( "--force", - action='store_true', - help="Overwrites any existing directory corresponding to the new version that will be generated." + action="store_true", + help="Overwrites any existing directory corresponding to the new version that will be generated.", ) - build_image_parser = subparsers.add_parser( - "build", - help="Builds a new image from the Dockerfile." - ) + build_image_parser = subparsers.add_parser("build", help="Builds a new image from the Dockerfile.") build_image_parser.add_argument( "--target-patch-version", required=True, - help="Specify the target version of Amazon SageMaker Distribution for which an image needs to be built." + help="Specify the target version of Amazon SageMaker Distribution for which an image needs to be built.", ) build_image_parser.add_argument( - "--skip-tests", - action='store_true', - help="Disable running tests against the newly generated Docker image." + "--skip-tests", action="store_true", help="Disable running tests against the newly generated Docker image." ) build_image_parser.add_argument( "--force", - action='store_true', + action="store_true", help="Builds a new docker image which will fetch the latest versions of each package in " - "the conda environment. Any existing env.out file will be overwritten." + "the conda environment. Any existing env.out file will be overwritten.", ) build_image_parser.add_argument( "--target-ecr-repo", - action='append', - help="Specify the AWS ECR repository in which this image needs to be uploaded." - ) - build_image_parser.add_argument( - "--region", - help="Specify the region of the ECR repository." + action="append", + help="Specify the AWS ECR repository in which this image needs to be uploaded.", ) + build_image_parser.add_argument("--region", help="Specify the region of the ECR repository.") build_image_parser.set_defaults(func=build_images) package_staleness_parser = subparsers.add_parser( "generate-staleness-report", - help="Generates package staleness report for each of the marquee packages in the given " - "image version." + help="Generates package staleness report for each of the marquee packages in the given " "image version.", ) package_staleness_parser.set_defaults(func=generate_package_staleness_report) package_staleness_parser.add_argument( "--target-patch-version", required=True, - help="Specify the base patch version for which the package staleness report needs to be " - "generated." + help="Specify the base patch version for which the package staleness report needs to be " "generated.", ) return parser @@ -418,5 +410,5 @@ def parse_args(parser): args.func(args) -if __name__ == '__main__': +if __name__ == "__main__": parse_args(get_arg_parser()) diff --git a/src/package_staleness.py b/src/package_staleness.py index 21d4482a..6a113860 100644 --- a/src/package_staleness.py +++ b/src/package_staleness.py @@ -1,17 +1,14 @@ -import conda.cli.python_api import json -from utils import ( - get_dir_for_version, - get_semver, - get_match_specs, -) + +import conda.cli.python_api +from conda.models.match_spec import MatchSpec + from config import _image_generator_configs from dependency_upgrader import _dependency_metadata -from conda.models.match_spec import MatchSpec +from utils import get_dir_for_version, get_match_specs, get_semver -def _get_package_versions_in_upstream(target_packages_match_spec_out, target_version) \ - -> dict[str, str]: +def _get_package_versions_in_upstream(target_packages_match_spec_out, target_version) -> dict[str, str]: package_to_version_mapping = {} is_major_version_release = target_version.minor == 0 and target_version.patch == 0 is_minor_version_release = target_version.patch == 0 and not is_major_version_release @@ -19,13 +16,13 @@ def _get_package_versions_in_upstream(target_packages_match_spec_out, target_ver # Execute a conda search api call in the linux-64 subdirectory # packages such as pytorch-gpu are present only in linux-64 sub directory match_spec_out = target_packages_match_spec_out[package] - package_version = str(match_spec_out.get("version")).removeprefix('==') + package_version = str(match_spec_out.get("version")).removeprefix("==") package_version = get_semver(package_version) channel = match_spec_out.get("channel").channel_name - subdir_filter = '[subdir=' + match_spec_out.get('subdir') + ']' - search_result = conda.cli.python_api.run_command('search', channel + '::' + package + - '>=' + str(package_version) + - subdir_filter, '--json') + subdir_filter = "[subdir=" + match_spec_out.get("subdir") + "]" + search_result = conda.cli.python_api.run_command( + "search", channel + "::" + package + ">=" + str(package_version) + subdir_filter, "--json" + ) # Load the first result as json. The API sends a json string inside an array package_metadata = json.loads(search_result[0])[package] # Response is of the structure @@ -33,58 +30,62 @@ def _get_package_versions_in_upstream(target_packages_match_spec_out, target_ver # }, ..., {'url':, 'dependencies': , 'version': # }] # We only care about the version number in the last index - package_version_in_conda = '' + package_version_in_conda = "" if is_major_version_release: - latest_package_version_in_conda = package_metadata[-1]['version'] + latest_package_version_in_conda = package_metadata[-1]["version"] elif is_minor_version_release: package_major_version_prefix = str(package_version.major) + "." - latest_package_version_in_conda = [x['version'] for x in package_metadata if - x['version'].startswith(package_major_version_prefix)][-1] + latest_package_version_in_conda = [ + x["version"] for x in package_metadata if x["version"].startswith(package_major_version_prefix) + ][-1] else: - package_minor_version_prefix = \ - ".".join([str(package_version.major), str(package_version.minor)]) + "." - latest_package_version_in_conda = [x['version'] for x in package_metadata if - x['version'].startswith(package_minor_version_prefix)][-1] + package_minor_version_prefix = ".".join([str(package_version.major), str(package_version.minor)]) + "." + latest_package_version_in_conda = [ + x["version"] for x in package_metadata if x["version"].startswith(package_minor_version_prefix) + ][-1] package_to_version_mapping[package] = latest_package_version_in_conda return package_to_version_mapping -def _generate_report(package_versions_in_upstream, target_packages_match_spec_out, image_config, - version): - print('\n# Staleness Report: ' + str(version) + '(' + image_config['image_type'] + ')\n') - print('Package | Current Version in the Distribution image | Latest Relevant Version in ' - 'Upstream') - print('---|---|---') +def _generate_report(package_versions_in_upstream, target_packages_match_spec_out, image_config, version): + print("\n# Staleness Report: " + str(version) + "(" + image_config["image_type"] + ")\n") + print("Package | Current Version in the Distribution image | Latest Relevant Version in " "Upstream") + print("---|---|---") for package in package_versions_in_upstream: - version_in_sagemaker_distribution = \ - str(target_packages_match_spec_out[package].get('version')).removeprefix('==') + version_in_sagemaker_distribution = str(target_packages_match_spec_out[package].get("version")).removeprefix( + "==" + ) if version_in_sagemaker_distribution == package_versions_in_upstream[package]: - print(package + '|' + version_in_sagemaker_distribution + '|' + - package_versions_in_upstream[package]) + print(package + "|" + version_in_sagemaker_distribution + "|" + package_versions_in_upstream[package]) else: - print('${\color{red}' + package + '}$' + '|' + version_in_sagemaker_distribution + - '|' + package_versions_in_upstream[package]) + print( + "${\color{red}" + + package + + "}$" + + "|" + + version_in_sagemaker_distribution + + "|" + + package_versions_in_upstream[package] + ) -def _get_installed_package_versions_and_conda_versions(image_config, target_version_dir, - target_version) \ - -> (dict[str, MatchSpec], dict[str, str]): - env_in_file_name = image_config['build_args']['ENV_IN_FILENAME'] - env_out_file_name = image_config['env_out_filename'] - required_packages_from_target = get_match_specs( - target_version_dir + "/" + env_in_file_name - ).keys() +def _get_installed_package_versions_and_conda_versions( + image_config, target_version_dir, target_version +) -> (dict[str, MatchSpec], dict[str, str]): + env_in_file_name = image_config["build_args"]["ENV_IN_FILENAME"] + env_out_file_name = image_config["env_out_filename"] + required_packages_from_target = get_match_specs(target_version_dir + "/" + env_in_file_name).keys() match_spec_out = get_match_specs(target_version_dir + "/" + env_out_file_name) # We only care about packages which are present in env.in # Remove Python from the dictionary, we don't want to track python version as part of our # staleness report. - target_packages_match_spec_out = {k: v for k, v in match_spec_out.items() - if k in required_packages_from_target and k - not in _dependency_metadata} - latest_package_versions_in_upstream = \ - _get_package_versions_in_upstream(target_packages_match_spec_out, - target_version) + target_packages_match_spec_out = { + k: v for k, v in match_spec_out.items() if k in required_packages_from_target and k not in _dependency_metadata + } + latest_package_versions_in_upstream = _get_package_versions_in_upstream( + target_packages_match_spec_out, target_version + ) return target_packages_match_spec_out, latest_package_versions_in_upstream @@ -92,8 +93,10 @@ 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: - target_packages_match_spec_out, latest_package_versions_in_upstream = \ - _get_installed_package_versions_and_conda_versions(image_config, target_version_dir, - target_version) - _generate_report(latest_package_versions_in_upstream, target_packages_match_spec_out, - image_config, target_version) + ( + target_packages_match_spec_out, + latest_package_versions_in_upstream, + ) = _get_installed_package_versions_and_conda_versions(image_config, target_version_dir, target_version) + _generate_report( + latest_package_versions_in_upstream, target_packages_match_spec_out, image_config, target_version + ) diff --git a/src/release_notes_generator.py b/src/release_notes_generator.py index 83c45c3c..9993aa92 100644 --- a/src/release_notes_generator.py +++ b/src/release_notes_generator.py @@ -1,25 +1,25 @@ import os -from config import _image_generator_configs -from utils import ( - get_dir_for_version, - get_match_specs, -) + from semver import Version +from config import _image_generator_configs +from utils import get_dir_for_version, get_match_specs + -def _get_installed_packages(target_version_dir, image_config) -> (dict[str, str]): - env_in_file_name = image_config['build_args']['ENV_IN_FILENAME'] - env_out_file_name = image_config['env_out_filename'] +def _get_installed_packages(target_version_dir, image_config) -> dict[str, str]: + env_in_file_name = image_config["build_args"]["ENV_IN_FILENAME"] + env_out_file_name = image_config["env_out_filename"] env_in_file_path = target_version_dir + "/" + env_in_file_name if not os.path.exists(env_in_file_path): return {} - required_packages_from_target = get_match_specs( - target_version_dir + "/" + env_in_file_name - ).keys() + required_packages_from_target = get_match_specs(target_version_dir + "/" + env_in_file_name).keys() target_match_spec_out = get_match_specs(target_version_dir + "/" + env_out_file_name) # We only care about the packages which are present in the target version env.in file - return {k: str(v.get('version')).removeprefix('==') - for k, v in target_match_spec_out.items() if k in required_packages_from_target} + return { + k: str(v.get("version")).removeprefix("==") + for k, v in target_match_spec_out.items() + if k in required_packages_from_target + } def _get_package_to_image_type_mapping(image_type_package_metadata): @@ -39,8 +39,9 @@ def _get_package_to_image_type_mapping(image_type_package_metadata): def _get_image_type_package_metadata(target_version_dir): image_type_package_metadata = {} for image_generator_config in _image_generator_configs: - image_type_package_metadata[image_generator_config['image_type']] = _get_installed_packages( - target_version_dir, image_generator_config) + image_type_package_metadata[image_generator_config["image_type"]] = _get_installed_packages( + target_version_dir, image_generator_config + ) return image_type_package_metadata @@ -51,19 +52,22 @@ def generate_release_notes(target_version: Version): image_type_package_metadata = _get_image_type_package_metadata(target_version_dir) 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: - f.write('# Release notes: ' + str(target_version) + '\n\n') - f.write('Package ') - table_separator = '---' + with open(f"{target_version_dir}/RELEASE.md", "w") as f: + f.write("# Release notes: " + str(target_version) + "\n\n") + f.write("Package ") + table_separator = "---" for image_type in image_type_package_metadata.keys(): - f.write('| ' + image_type) - table_separator += '|---' - f.write('\n') - f.write(table_separator + '\n') + f.write("| " + image_type) + table_separator += "|---" + f.write("\n") + f.write(table_separator + "\n") for package in package_to_image_type_mapping.keys(): f.write(package) for image_type in image_type_package_metadata.keys(): - version = package_to_image_type_mapping[package][image_type] if image_type in \ - package_to_image_type_mapping[package] else ' ' - f.write('|' + version) - f.write('\n') + version = ( + package_to_image_type_mapping[package][image_type] + if image_type in package_to_image_type_mapping[package] + else " " + ) + f.write("|" + version) + f.write("\n") diff --git a/src/utils.py b/src/utils.py index eec0776d..daf1e17e 100644 --- a/src/utils.py +++ b/src/utils.py @@ -1,33 +1,36 @@ import os -from semver import Version -from conda.models.match_spec import MatchSpec + from conda.env.specs import RequirementsSpec +from conda.models.match_spec import MatchSpec +from semver import Version def get_dir_for_version(version: Version) -> str: - version_prerelease_suffix = f'/v{version.major}.{version.minor}.{version.patch}-' \ - f'{version.prerelease}' if version.prerelease else '' - return os.path.relpath(f'build_artifacts/v{version.major}/v{version.major}.{version.minor}/' - f'v{version.major}.{version.minor}.{version.patch}' - f'{version_prerelease_suffix}') + version_prerelease_suffix = ( + f"/v{version.major}.{version.minor}.{version.patch}-" f"{version.prerelease}" if version.prerelease else "" + ) + return os.path.relpath( + f"build_artifacts/v{version.major}/v{version.major}.{version.minor}/" + f"v{version.major}.{version.minor}.{version.patch}" + f"{version_prerelease_suffix}" + ) -def is_exists_dir_for_version(version: Version, file_name_to_verify_existence='Dockerfile') -> bool: +def is_exists_dir_for_version(version: Version, file_name_to_verify_existence="Dockerfile") -> bool: dir_path = get_dir_for_version(version) # Also validate whether this directory is not generated due to any pre-release builds/ # additional packages. # This can be validated by checking whether {cpu/gpu}.env.{in/out}/Dockerfile exists in the # directory. - return os.path.exists(dir_path) and os.path.exists(dir_path + "/" + - file_name_to_verify_existence) + return os.path.exists(dir_path) and os.path.exists(dir_path + "/" + file_name_to_verify_existence) def get_semver(version_str) -> Version: # Version strings on conda-forge follow PEP standards rather than SemVer, which support # version strings such as X.Y.Z.postN, X.Y.Z.preN. These cause errors in semver.Version.parse # so we keep the first 3 entries as version string. - if version_str.count('.') > 2: - version_str = '.'.join(version_str.split('.')[:3]) + if version_str.count(".") > 2: + version_str = ".".join(version_str.split(".")[:3]) version = Version.parse(version_str) if version.build is not None: raise Exception() @@ -44,7 +47,6 @@ def get_match_specs(file_path) -> dict[str, MatchSpec]: requirement_spec = read_env_file(file_path) assert len(requirement_spec.environment.dependencies) == 1 - assert 'conda' in requirement_spec.environment.dependencies + assert "conda" in requirement_spec.environment.dependencies - return {MatchSpec(i).get('name'): MatchSpec(i) for i in - requirement_spec.environment.dependencies['conda']} + return {MatchSpec(i).get("name"): MatchSpec(i) for i in requirement_spec.environment.dependencies["conda"]} diff --git a/template/v1/dirs/etc/code-editor/code_editor_machine_settings.json b/template/v1/dirs/etc/code-editor/code_editor_machine_settings.json index a391da92..44fb8ef7 100644 --- a/template/v1/dirs/etc/code-editor/code_editor_machine_settings.json +++ b/template/v1/dirs/etc/code-editor/code_editor_machine_settings.json @@ -1,4 +1,4 @@ { "python.terminal.activateEnvironment": false, "python.defaultInterpreterPath": "/opt/conda/bin/python" -} \ No newline at end of file +} diff --git a/template/v1/dirs/etc/code-editor/extensions.txt b/template/v1/dirs/etc/code-editor/extensions.txt index ee18444b..29d683eb 100644 --- a/template/v1/dirs/etc/code-editor/extensions.txt +++ b/template/v1/dirs/etc/code-editor/extensions.txt @@ -1,3 +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 \ No newline at end of file +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/v1/dirs/etc/jupyter/jupyter_server_config.py b/template/v1/dirs/etc/jupyter/jupyter_server_config.py index e05997f2..8e45762f 100644 --- a/template/v1/dirs/etc/jupyter/jupyter_server_config.py +++ b/template/v1/dirs/etc/jupyter/jupyter_server_config.py @@ -1,10 +1,10 @@ # Default Jupyter server config -# Note: those config can be overridden by user-level configs. +# 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 } +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. +# Do not delete files to trash. Instead, permanently delete files. c.FileContentsManager.delete_to_trash = False # Allow deleting non-empty directory via file browser diff --git a/template/v1/dirs/usr/local/bin/entrypoint-code-editor b/template/v1/dirs/usr/local/bin/entrypoint-code-editor index 677c9803..bf55a371 100755 --- a/template/v1/dirs/usr/local/bin/entrypoint-code-editor +++ b/template/v1/dirs/usr/local/bin/entrypoint-code-editor @@ -13,4 +13,4 @@ micromamba activate base 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 \ No newline at end of file +exec supervisord -c /etc/supervisor/conf.d/supervisord-code-editor.conf -n diff --git a/template/v1/dirs/usr/local/bin/start-jupyter-server b/template/v1/dirs/usr/local/bin/start-jupyter-server index 377a86d4..626c3f8e 100755 --- a/template/v1/dirs/usr/local/bin/start-jupyter-server +++ b/template/v1/dirs/usr/local/bin/start-jupyter-server @@ -9,8 +9,8 @@ micromamba activate base # Start Jupyter server in rtc mode for shared spaces if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ] && [ "$SAGEMAKER_SPACE_TYPE_LOWERCASE" == "shared" ]; then # 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 + # 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" \ diff --git a/test/conftest.py b/test/conftest.py index 36c3fa75..df98aa2f 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -3,15 +3,14 @@ def pytest_addoption(parser): parser.addoption( - "--local-image-version", help="Version of a locally available SageMaker Distribution " - "Docker image against which the tests should run. Note: " - "We expect the local docker image to have " - "'localhost/sagemaker-distribution' as the repository and " - "'-{cpu/gpu}' as the tag" - ) - parser.addoption( - "--use-gpu", action='store_true', help="Boolean on whether to use GPUs or not" + "--local-image-version", + help="Version of a locally available SageMaker Distribution " + "Docker image against which the tests should run. Note: " + "We expect the local docker image to have " + "'localhost/sagemaker-distribution' as the repository and " + "'-{cpu/gpu}' as the tag", ) + parser.addoption("--use-gpu", action="store_true", help="Boolean on whether to use GPUs or not") @pytest.fixture diff --git a/test/test_artifacts/v0/aws-glue-sessions/run_glue_sessions_notebook.sh b/test/test_artifacts/v0/aws-glue-sessions/run_glue_sessions_notebook.sh index fbf5faf2..1aa73e37 100644 --- a/test/test_artifacts/v0/aws-glue-sessions/run_glue_sessions_notebook.sh +++ b/test/test_artifacts/v0/aws-glue-sessions/run_glue_sessions_notebook.sh @@ -8,4 +8,3 @@ nb='script' for kernel in ${kernels[@]}; do papermill 'glue_notebook.ipynb' 'nb_output.ipynb' -k $kernel done - diff --git a/test/test_artifacts/v0/keras.test.Dockerfile b/test/test_artifacts/v0/keras.test.Dockerfile index 1bf1713b..74690920 100644 --- a/test/test_artifacts/v0/keras.test.Dockerfile +++ b/test/test_artifacts/v0/keras.test.Dockerfile @@ -17,4 +17,3 @@ 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/v0/matplotlib.test.Dockerfile b/test/test_artifacts/v0/matplotlib.test.Dockerfile index 7c987704..4d290016 100644 --- a/test/test_artifacts/v0/matplotlib.test.Dockerfile +++ b/test/test_artifacts/v0/matplotlib.test.Dockerfile @@ -16,4 +16,3 @@ 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/v0/run_pandas_tests.py b/test/test_artifacts/v0/run_pandas_tests.py index 4cc8086c..08953750 100644 --- a/test/test_artifacts/v0/run_pandas_tests.py +++ b/test/test_artifacts/v0/run_pandas_tests.py @@ -1,4 +1,8 @@ -import pandas, sys, os, site +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 @@ -13,8 +17,8 @@ # 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. -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)']) +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)"] +) sys.exit(not tests_succeeded) diff --git a/test/test_artifacts/v0/sagemaker-headless-execution-driver.test.Dockerfile b/test/test_artifacts/v0/sagemaker-headless-execution-driver.test.Dockerfile index e91d8914..094b1066 100644 --- a/test/test_artifacts/v0/sagemaker-headless-execution-driver.test.Dockerfile +++ b/test/test_artifacts/v0/sagemaker-headless-execution-driver.test.Dockerfile @@ -5,4 +5,4 @@ ARG MAMBA_DOCKERFILE_ACTIVATE=1 # Execute execution_driver module to for sagemaker-headless-execution-driver installation -CMD ["python", "-c", "import sagemaker_headless_execution_driver.headless_execution as execution_driver"] \ No newline at end of file +CMD ["python", "-c", "import sagemaker_headless_execution_driver.headless_execution as execution_driver"] diff --git a/test/test_artifacts/v0/scripts/run_autogluon_tests.sh b/test/test_artifacts/v0/scripts/run_autogluon_tests.sh index 036d1432..09d70554 100644 --- a/test/test_artifacts/v0/scripts/run_autogluon_tests.sh +++ b/test/test_artifacts/v0/scripts/run_autogluon_tests.sh @@ -12,6 +12,6 @@ python -c "import torch; exit(0) if torch.cuda.is_available() else exit(1)" ret=$? if [ $ret -eq 0 ] -then +then jupyter nbconvert --execute --to python docs/tutorials/multimodal/multimodal_prediction/multimodal-quick-start.ipynb fi diff --git a/test/test_artifacts/v0/scripts/run_matplotlib_tests.sh b/test/test_artifacts/v0/scripts/run_matplotlib_tests.sh index 13aa3fb3..848e7421 100644 --- a/test/test_artifacts/v0/scripts/run_matplotlib_tests.sh +++ b/test/test_artifacts/v0/scripts/run_matplotlib_tests.sh @@ -3,5 +3,3 @@ for file in *.py; do python "$file" || exit $? done - - diff --git a/test/test_artifacts/v1/aws-glue-sessions/run_glue_sessions_notebook.sh b/test/test_artifacts/v1/aws-glue-sessions/run_glue_sessions_notebook.sh index fbf5faf2..1aa73e37 100644 --- a/test/test_artifacts/v1/aws-glue-sessions/run_glue_sessions_notebook.sh +++ b/test/test_artifacts/v1/aws-glue-sessions/run_glue_sessions_notebook.sh @@ -8,4 +8,3 @@ nb='script' for kernel in ${kernels[@]}; do papermill 'glue_notebook.ipynb' 'nb_output.ipynb' -k $kernel done - diff --git a/test/test_artifacts/v1/jupyterlab-git.test.Dockerfile b/test/test_artifacts/v1/jupyterlab-git.test.Dockerfile index cb04575f..7d5cbd96 100644 --- a/test/test_artifacts/v1/jupyterlab-git.test.Dockerfile +++ b/test/test_artifacts/v1/jupyterlab-git.test.Dockerfile @@ -4,4 +4,3 @@ FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 CMD ["python", "-c", "import jupyterlab_git"] - diff --git a/test/test_artifacts/v1/matplotlib.test.Dockerfile b/test/test_artifacts/v1/matplotlib.test.Dockerfile index 7c987704..4d290016 100644 --- a/test/test_artifacts/v1/matplotlib.test.Dockerfile +++ b/test/test_artifacts/v1/matplotlib.test.Dockerfile @@ -16,4 +16,3 @@ 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/v1/run_pandas_tests.py b/test/test_artifacts/v1/run_pandas_tests.py index 00127f2d..2995581f 100644 --- a/test/test_artifacts/v1/run_pandas_tests.py +++ b/test/test_artifacts/v1/run_pandas_tests.py @@ -1,4 +1,8 @@ -import pandas, sys, os, site +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 @@ -14,10 +18,16 @@ # 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']) +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/v1/scripts/run_altair_example_notebooks.sh b/test/test_artifacts/v1/scripts/run_altair_example_notebooks.sh index 47762d0f..1bb4f370 100644 --- a/test/test_artifacts/v1/scripts/run_altair_example_notebooks.sh +++ b/test/test_artifacts/v1/scripts/run_altair_example_notebooks.sh @@ -15,4 +15,3 @@ example_notebooks=('02-Tutorial.ipynb' for nb in ${example_notebooks[@]}; do papermill $nb 'nb_output.ipynb' done - diff --git a/test/test_artifacts/v1/scripts/run_autogluon_tests.sh b/test/test_artifacts/v1/scripts/run_autogluon_tests.sh index ea68f6a4..7a136c25 100644 --- a/test/test_artifacts/v1/scripts/run_autogluon_tests.sh +++ b/test/test_artifacts/v1/scripts/run_autogluon_tests.sh @@ -12,6 +12,6 @@ python -c "import torch; exit(0) if torch.cuda.is_available() else exit(1)" ret=$? if [ $ret -eq 0 ] -then +then jupyter nbconvert --execute --to python docs/tutorials/multimodal/multimodal_prediction/multimodal-quick-start.ipynb fi diff --git a/test/test_artifacts/v1/scripts/run_matplotlib_tests.sh b/test/test_artifacts/v1/scripts/run_matplotlib_tests.sh index 13aa3fb3..848e7421 100644 --- a/test/test_artifacts/v1/scripts/run_matplotlib_tests.sh +++ b/test/test_artifacts/v1/scripts/run_matplotlib_tests.sh @@ -3,5 +3,3 @@ for file in *.py; do python "$file" || exit $? done - - diff --git a/test/test_artifacts/v1/scripts/run_sagemaker_code_editor_tests.sh b/test/test_artifacts/v1/scripts/run_sagemaker_code_editor_tests.sh index b6db3bd6..0b7dda58 100644 --- a/test/test_artifacts/v1/scripts/run_sagemaker_code_editor_tests.sh +++ b/test/test_artifacts/v1/scripts/run_sagemaker_code_editor_tests.sh @@ -67,4 +67,4 @@ if [ ! -d "$ARTIFACTS_DIR" ]; then else echo "Error: Directory $ARTIFACTS_DIR still exists." exit 1 -fi \ No newline at end of file +fi diff --git a/test/test_artifacts/v1/serve.test.Dockerfile b/test/test_artifacts/v1/serve.test.Dockerfile index cab72baf..19dd8d5d 100644 --- a/test/test_artifacts/v1/serve.test.Dockerfile +++ b/test/test_artifacts/v1/serve.test.Dockerfile @@ -3,4 +3,4 @@ FROM $SAGEMAKER_DISTRIBUTION_IMAGE ARG MAMBA_DOCKERFILE_ACTIVATE=1 -CMD ["python", "-c", "import fastapi, uvicorn, langchain"] \ No newline at end of file +CMD ["python", "-c", "import fastapi, uvicorn, langchain"] diff --git a/test/test_dependency_upgrader.py b/test/test_dependency_upgrader.py index b3e2a62b..caebf730 100644 --- a/test/test_dependency_upgrader.py +++ b/test/test_dependency_upgrader.py @@ -4,50 +4,50 @@ pytestmark = pytest.mark.unit from dependency_upgrader import ( - _get_dependency_upper_bound_for_runtime_upgrade, - _get_dependency_upper_bound_for_semver, - _get_dependency_upper_bound_for_pythonesque, _MAJOR, _MINOR, - _PATCH + _PATCH, + _get_dependency_upper_bound_for_pythonesque, + _get_dependency_upper_bound_for_runtime_upgrade, + _get_dependency_upper_bound_for_semver, ) def test_get_dependency_upper_bound_for_runtime_upgrade(): # case 1: Runtime upgrade type is MINOR, dependency name is python => use pythonesque - assert _get_dependency_upper_bound_for_runtime_upgrade('python', '1.2.5', _MINOR) == ',<1.3.0' + assert _get_dependency_upper_bound_for_runtime_upgrade("python", "1.2.5", _MINOR) == ",<1.3.0" # case 1: Runtime upgrade type is MINOR, dependency name is node => use semver - assert _get_dependency_upper_bound_for_runtime_upgrade('node', '1.2.5', _MINOR) == ',<2.0.0' + assert _get_dependency_upper_bound_for_runtime_upgrade("node", "1.2.5", _MINOR) == ",<2.0.0" def test_get_dependency_upper_bound_for_semver(): # case 1: Runtime upgrade type is MAJOR. - assert _get_dependency_upper_bound_for_semver('1.2.5', _MAJOR) == '' + assert _get_dependency_upper_bound_for_semver("1.2.5", _MAJOR) == "" # case 2: Runtime upgrade type is MINOR. - assert _get_dependency_upper_bound_for_semver('1.2.5', _MINOR) == ',<2.0.0' + assert _get_dependency_upper_bound_for_semver("1.2.5", _MINOR) == ",<2.0.0" # case 3: Runtime upgrade type is PATCH. - assert _get_dependency_upper_bound_for_semver('1.2.5', _PATCH) == ',<1.3.0' + assert _get_dependency_upper_bound_for_semver("1.2.5", _PATCH) == ",<1.3.0" # case 4: Throw exception for any other runtime_upgrade_type with pytest.raises(Exception): - _get_dependency_upper_bound_for_semver('1.2.5', 'prerelease') + _get_dependency_upper_bound_for_semver("1.2.5", "prerelease") def test_get_dependency_upper_bound_for_pythonesque(): # case 1: Runtime upgrade type is MAJOR. - assert _get_dependency_upper_bound_for_pythonesque('1.2.5', _MAJOR) == '' + assert _get_dependency_upper_bound_for_pythonesque("1.2.5", _MAJOR) == "" # case 2: Runtime upgrade type is MINOR. - assert _get_dependency_upper_bound_for_pythonesque('1.2.5', _MINOR) == ',<1.3.0' + assert _get_dependency_upper_bound_for_pythonesque("1.2.5", _MINOR) == ",<1.3.0" # case 3: Runtime upgrade type is PATCH. For pythonesque, we will bump minor version. - assert _get_dependency_upper_bound_for_pythonesque('1.2.5', _PATCH) == ',<1.3.0' + assert _get_dependency_upper_bound_for_pythonesque("1.2.5", _PATCH) == ",<1.3.0" # case 4: Throw exception for any other runtime_upgrade_type with pytest.raises(Exception): - _get_dependency_upper_bound_for_pythonesque('1.2.5', 'prerelease') + _get_dependency_upper_bound_for_pythonesque("1.2.5", "prerelease") def test_get_dependency_upper_bound_for_post_pre_release(): - assert _get_dependency_upper_bound_for_runtime_upgrade('python', '1.2.5.post1', _PATCH) == ',<1.3.0' - assert _get_dependency_upper_bound_for_runtime_upgrade('node', '1.2.5.post1', _PATCH) == ',<1.3.0' - assert _get_dependency_upper_bound_for_runtime_upgrade('python', '1.2.5.post1', _MINOR) == ',<1.3.0' - assert _get_dependency_upper_bound_for_runtime_upgrade('node', '1.2.5.post1', _MINOR) == ',<2.0.0' - assert _get_dependency_upper_bound_for_runtime_upgrade('python', '1.2.5.post1', _MAJOR) == '' - assert _get_dependency_upper_bound_for_runtime_upgrade('node', '1.2.5.post1', _MAJOR) == '' + assert _get_dependency_upper_bound_for_runtime_upgrade("python", "1.2.5.post1", _PATCH) == ",<1.3.0" + assert _get_dependency_upper_bound_for_runtime_upgrade("node", "1.2.5.post1", _PATCH) == ",<1.3.0" + assert _get_dependency_upper_bound_for_runtime_upgrade("python", "1.2.5.post1", _MINOR) == ",<1.3.0" + assert _get_dependency_upper_bound_for_runtime_upgrade("node", "1.2.5.post1", _MINOR) == ",<2.0.0" + assert _get_dependency_upper_bound_for_runtime_upgrade("python", "1.2.5.post1", _MAJOR) == "" + assert _get_dependency_upper_bound_for_runtime_upgrade("node", "1.2.5.post1", _MAJOR) == "" diff --git a/test/test_dockerfile_based_harness.py b/test/test_dockerfile_based_harness.py index 8026ff2b..5e1c4b88 100644 --- a/test/test_dockerfile_based_harness.py +++ b/test/test_dockerfile_based_harness.py @@ -1,84 +1,91 @@ -import subprocess import os +import subprocess +from typing import List + import docker import pytest -from config import _image_generator_configs from docker.errors import BuildError from semver import Version -from typing import List -from utils import ( - get_dir_for_version, - get_semver, - get_match_specs, -) + +from config import _image_generator_configs +from utils import get_dir_for_version, get_match_specs, get_semver _docker_client = docker.from_env() @pytest.mark.cpu -@pytest.mark.parametrize("dockerfile_path, required_packages", [ - ("keras.test.Dockerfile", ['keras']), - ("autogluon.test.Dockerfile", ['autogluon']), - ("matplotlib.test.Dockerfile", ['matplotlib']), - ("sagemaker-headless-execution-driver.test.Dockerfile", ['sagemaker-headless-execution-driver']), - ("scipy.test.Dockerfile", ['scipy']), - ("numpy.test.Dockerfile", ['numpy']), - ("boto3.test.Dockerfile", ['boto3']), - ("pandas.test.Dockerfile", ['pandas']), - ("sm-python-sdk.test.Dockerfile", ['sagemaker-python-sdk']), - ("pytorch.examples.Dockerfile", ['pytorch']), - ("tensorflow.examples.Dockerfile", ['tensorflow']), - ("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']), - ("sagemaker-code-editor.test.Dockerfile", ['sagemaker-code-editor']), - ("notebook.test.Dockerfile", ['notebook']), - ("glue-sessions.test.Dockerfile", ['aws-glue-sessions']), - ("altair.test.Dockerfile", ['altair']), - ("sagemaker-studio-analytics-extension.test.Dockerfile", ['sagemaker-studio-analytics-extension']), - ("amazon-codewhisperer-jupyterlab-ext.test.Dockerfile", ['amazon-codewhisperer-jupyterlab-ext']), - ("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'])]) -def test_dockerfiles_for_cpu(dockerfile_path: str, required_packages: List[str], - local_image_version: str, use_gpu: bool): - _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, 'cpu') +@pytest.mark.parametrize( + "dockerfile_path, required_packages", + [ + ("keras.test.Dockerfile", ["keras"]), + ("autogluon.test.Dockerfile", ["autogluon"]), + ("matplotlib.test.Dockerfile", ["matplotlib"]), + ("sagemaker-headless-execution-driver.test.Dockerfile", ["sagemaker-headless-execution-driver"]), + ("scipy.test.Dockerfile", ["scipy"]), + ("numpy.test.Dockerfile", ["numpy"]), + ("boto3.test.Dockerfile", ["boto3"]), + ("pandas.test.Dockerfile", ["pandas"]), + ("sm-python-sdk.test.Dockerfile", ["sagemaker-python-sdk"]), + ("pytorch.examples.Dockerfile", ["pytorch"]), + ("tensorflow.examples.Dockerfile", ["tensorflow"]), + ("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"]), + ("sagemaker-code-editor.test.Dockerfile", ["sagemaker-code-editor"]), + ("notebook.test.Dockerfile", ["notebook"]), + ("glue-sessions.test.Dockerfile", ["aws-glue-sessions"]), + ("altair.test.Dockerfile", ["altair"]), + ("sagemaker-studio-analytics-extension.test.Dockerfile", ["sagemaker-studio-analytics-extension"]), + ("amazon-codewhisperer-jupyterlab-ext.test.Dockerfile", ["amazon-codewhisperer-jupyterlab-ext"]), + ("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"]), + ], +) +def test_dockerfiles_for_cpu( + dockerfile_path: str, required_packages: List[str], local_image_version: str, use_gpu: bool +): + _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, "cpu") @pytest.mark.gpu -@pytest.mark.parametrize("dockerfile_path, required_packages", [ - ("keras.test.Dockerfile", ['keras']), - ("autogluon.test.Dockerfile", ['autogluon']), - ("matplotlib.test.Dockerfile", ['matplotlib']), - ("sagemaker-headless-execution-driver.test.Dockerfile", ['sagemaker-headless-execution-driver']), - ("scipy.test.Dockerfile", ['scipy']), - ("numpy.test.Dockerfile", ['numpy']), - ("boto3.test.Dockerfile", ['boto3']), - ("pandas.test.Dockerfile", ['pandas']), - ("sm-python-sdk.test.Dockerfile", ['sagemaker-python-sdk']), - ("pytorch.examples.Dockerfile", ['pytorch']), - ("tensorflow.examples.Dockerfile", ['tensorflow']), - ("glue-sessions.test.Dockerfile", ['aws-glue-sessions']), - ("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']), - ("sagemaker-code-editor.test.Dockerfile", ['sagemaker-code-editor']), - ("notebook.test.Dockerfile", ['notebook']), - ("glue-sessions.test.Dockerfile", ['aws-glue-sessions']), - ("altair.test.Dockerfile", ['altair']), - ("sagemaker-studio-analytics-extension.test.Dockerfile", ['sagemaker-studio-analytics-extension']), - ("amazon-codewhisperer-jupyterlab-ext.test.Dockerfile", ['amazon-codewhisperer-jupyterlab-ext']), - ("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'])]) -def test_dockerfiles_for_gpu(dockerfile_path: str, required_packages: List[str], - local_image_version: str, use_gpu: bool): - _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, 'gpu') - +@pytest.mark.parametrize( + "dockerfile_path, required_packages", + [ + ("keras.test.Dockerfile", ["keras"]), + ("autogluon.test.Dockerfile", ["autogluon"]), + ("matplotlib.test.Dockerfile", ["matplotlib"]), + ("sagemaker-headless-execution-driver.test.Dockerfile", ["sagemaker-headless-execution-driver"]), + ("scipy.test.Dockerfile", ["scipy"]), + ("numpy.test.Dockerfile", ["numpy"]), + ("boto3.test.Dockerfile", ["boto3"]), + ("pandas.test.Dockerfile", ["pandas"]), + ("sm-python-sdk.test.Dockerfile", ["sagemaker-python-sdk"]), + ("pytorch.examples.Dockerfile", ["pytorch"]), + ("tensorflow.examples.Dockerfile", ["tensorflow"]), + ("glue-sessions.test.Dockerfile", ["aws-glue-sessions"]), + ("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"]), + ("sagemaker-code-editor.test.Dockerfile", ["sagemaker-code-editor"]), + ("notebook.test.Dockerfile", ["notebook"]), + ("glue-sessions.test.Dockerfile", ["aws-glue-sessions"]), + ("altair.test.Dockerfile", ["altair"]), + ("sagemaker-studio-analytics-extension.test.Dockerfile", ["sagemaker-studio-analytics-extension"]), + ("amazon-codewhisperer-jupyterlab-ext.test.Dockerfile", ["amazon-codewhisperer-jupyterlab-ext"]), + ("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"]), + ], +) +def test_dockerfiles_for_gpu( + dockerfile_path: str, required_packages: List[str], local_image_version: str, use_gpu: bool +): + _validate_docker_images(dockerfile_path, required_packages, local_image_version, use_gpu, "gpu") # The following is a simple function to check whether the local machine has at least 1 GPU and some Nvidia driver @@ -86,80 +93,84 @@ def test_dockerfiles_for_gpu(dockerfile_path: str, required_packages: List[str], def _is_nvidia_drivers_available() -> bool: exitcode, output = subprocess.getstatusoutput("nvidia-smi --query-gpu=driver_version --format=csv,noheader --id=0") if exitcode == 0: - print(f'Found Nvidia driver version: {output}') + print(f"Found Nvidia driver version: {output}") else: - print(f'No Nvidia drivers found on the machine. Error output: {output}') + print(f"No Nvidia drivers found on the machine. Error output: {output}") return exitcode == 0 def _check_docker_file_existence(dockerfile_name: str, test_artifacts_path: str): - if not os.path.exists(f'{test_artifacts_path}/{dockerfile_name}'): - pytest.skip(f'Skipping test because {dockerfile_name} does not exist.') + if not os.path.exists(f"{test_artifacts_path}/{dockerfile_name}"): + pytest.skip(f"Skipping test because {dockerfile_name} does not exist.") -def _check_required_package_constraints(target_version: Version, required_packages: List[str], - image_type: str): +def _check_required_package_constraints(target_version: Version, required_packages: List[str], image_type: str): target_version_dir = get_dir_for_version(target_version) if not os.path.exists(target_version_dir): - pytest.skip(f'Skipping test because {target_version_dir} does not exist.') + 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) - env_out_path = f'{target_version_dir}/{env_out_file_name}' + env_out_file_name = next( + config["env_out_filename"] for config in _image_generator_configs 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): - pytest.skip(f'Skipping test because {env_out_path} does not exist.') + pytest.skip(f"Skipping test because {env_out_path} does not exist.") target_match_spec_out = get_match_specs(env_out_path) for required_package in required_packages: if required_package not in target_match_spec_out: - pytest.skip(f'Skipping test because {required_package} is not present in {env_out_file_name}') + pytest.skip(f"Skipping test because {required_package} is not present in {env_out_file_name}") -def _validate_docker_images(dockerfile_path: str, required_packages: List[str], - local_image_version: str, use_gpu: bool, image_type: str): +def _validate_docker_images( + dockerfile_path: str, required_packages: List[str], local_image_version: str, use_gpu: bool, image_type: str +): target_version = get_semver(local_image_version) - test_artifacts_path = f'test/test_artifacts/v{str(target_version.major)}' + test_artifacts_path = f"test/test_artifacts/v{str(target_version.major)}" _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) + image_tag_generator_from_config = next( + config["image_tag_generator"] for config in _image_generator_configs 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}' - print(f'Will start running test for: {dockerfile_path} against: {docker_image_identifier}') + docker_image_identifier = f"localhost/sagemaker-distribution:{docker_image_tag}" + print(f"Will start running test for: {dockerfile_path} against: {docker_image_identifier}") try: - image, _ = _docker_client.images.build(path=test_artifacts_path, - dockerfile=dockerfile_path, shmsize='512000000', - tag=dockerfile_path.lower().replace('.', '-'), - rm=True, buildargs={'SAGEMAKER_DISTRIBUTION_IMAGE': docker_image_identifier}) + image, _ = _docker_client.images.build( + path=test_artifacts_path, + dockerfile=dockerfile_path, + shmsize="512000000", + tag=dockerfile_path.lower().replace(".", "-"), + rm=True, + buildargs={"SAGEMAKER_DISTRIBUTION_IMAGE": docker_image_identifier}, + ) except BuildError as e: for line in e.build_log: - if 'stream' in line: - print(line['stream'].strip()) + if "stream" in line: + print(line["stream"].strip()) # After printing the logs raise the exception (which is the old behavior) raise - print(f'Built a test image: {image.id}, will now execute its default CMD.') + print(f"Built a test image: {image.id}, will now execute its default CMD.") # Execute the new image once. Mark the current test successful/failed based on container's exit code. (We assume # that the image would have supplied the right entrypoint. device_requests = [] if use_gpu and _is_nvidia_drivers_available(): # Pass all available GPUs, if available. - device_requests.append(docker.types.DeviceRequest(count=-1, capabilities=[['gpu']])) + device_requests.append(docker.types.DeviceRequest(count=-1, capabilities=[["gpu"]])) # We assume that the image above would have supplied the right entrypoint, so we just run it as is. If the container # didn't execute successfully, the Docker client below will throw an error and fail the test. # A consequence of this design decision is that any test assertions should go inside the container's entry-point. - container = _docker_client.containers.run(image=image.id, detach=True, stderr=True, - device_requests=device_requests) + container = _docker_client.containers.run(image=image.id, detach=True, stderr=True, device_requests=device_requests) # Wait till container completes execution result = container.wait() exit_code = result["StatusCode"] if exit_code != 0: # Print STD out only during test failure - print(container.logs().decode('utf-8')) + print(container.logs().decode("utf-8")) # Remove the container. container.remove(force=True) _docker_client.images.remove(image=image.id, force=True) diff --git a/test/test_main.py b/test/test_main.py index 23451010..e1ed2752 100644 --- a/test/test_main.py +++ b/test/test_main.py @@ -1,33 +1,35 @@ from __future__ import absolute_import import base64 -import boto3 + import pytest pytestmark = pytest.mark.unit +import os +from unittest.mock import MagicMock, Mock, patch + +from changelog_generator import _derive_changeset +from config import _image_generator_configs from main import ( - create_and_get_semver_dir, + _get_config_for_image, _get_version_tags, + _push_images_upstream, + build_images, + create_and_get_semver_dir, create_major_version_artifacts, create_minor_version_artifacts, create_patch_version_artifacts, - build_images, - _push_images_upstream, - _get_config_for_image ) -from config import _image_generator_configs -from changelog_generator import _derive_changeset -from release_notes_generator import _get_image_type_package_metadata, \ - _get_package_to_image_type_mapping +from release_notes_generator import ( + _get_image_type_package_metadata, + _get_package_to_image_type_mapping, +) from utils import get_semver -import os -from unittest.mock import patch, Mock, MagicMock class CreateVersionArgs: - def __init__(self, runtime_version_upgrade_type, base_patch_version, - pre_release_identifier=None, force=False): + def __init__(self, runtime_version_upgrade_type, base_patch_version, pre_release_identifier=None, force=False): self.base_patch_version = base_patch_version self.runtime_version_upgrade_type = runtime_version_upgrade_type self.pre_release_identifier = pre_release_identifier @@ -42,101 +44,110 @@ def __init__(self, target_patch_version, target_ecr_repo=None, force=False): self.force = force -def _create_docker_cpu_env_in_file(file_path, required_package='conda-forge::ipykernel'): - with open(file_path, 'w') as env_in_file: - env_in_file.write(f'{required_package}\n') +def _create_docker_cpu_env_in_file(file_path, required_package="conda-forge::ipykernel"): + with open(file_path, "w") as env_in_file: + env_in_file.write(f"{required_package}\n") -def _create_docker_cpu_env_out_file(file_path, - package_metadata='https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.21.3-pyh210e3f2_0.conda#8c1f6bf32a6ca81232c4853d4165ca67'): - with open(file_path, 'w') as env_out_file: - env_out_file.write(f'''# This file may be used to create an environment using: +def _create_docker_cpu_env_out_file( + file_path, + package_metadata="https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.21.3-pyh210e3f2_0.conda#8c1f6bf32a6ca81232c4853d4165ca67", +): + with open(file_path, "w") as env_out_file: + env_out_file.write( + f"""# This file may be used to create an environment using: # $ conda create --name --file # platform: linux-64 @EXPLICIT -{package_metadata}\n''') +{package_metadata}\n""" + ) def _create_docker_gpu_env_in_file(file_path): - with open(file_path, 'w') as env_in_file: - env_in_file.write('conda-forge::numpy\n') + with open(file_path, "w") as env_in_file: + env_in_file.write("conda-forge::numpy\n") -def _create_additional_packages_gpu_env_in_file(file_path, package_metadata='conda-forge::sagemaker-python-sdk'): - with open(file_path, 'w') as env_in_file: - env_in_file.write(package_metadata + '\n') +def _create_additional_packages_gpu_env_in_file(file_path, package_metadata="conda-forge::sagemaker-python-sdk"): + with open(file_path, "w") as env_in_file: + env_in_file.write(package_metadata + "\n") def _create_docker_gpu_env_out_file(file_path): - with open(file_path, 'w') as env_out_file: - env_out_file.write('''# This file may be used to create an environment using: + with open(file_path, "w") as env_out_file: + env_out_file.write( + """# 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/numpy-1.24.2-py38h10c12cc_0.conda#05592c85b9f6931dc2df1e80c0d56294\n''') +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.2-py38h10c12cc_0.conda#05592c85b9f6931dc2df1e80c0d56294\n""" + ) def _create_template_docker_file(file_path): - with open(file_path, 'w') as docker_file: - docker_file.write('''ARG TAG_FOR_BASE_MICROMAMBA_IMAGE - FROM mambaorg / micromamba:$TAG_FOR_BASE_MICROMAMBA_IMAGE\ntemplate_dockerfile\n''') + with open(file_path, "w") as docker_file: + docker_file.write( + """ARG TAG_FOR_BASE_MICROMAMBA_IMAGE + FROM mambaorg / micromamba:$TAG_FOR_BASE_MICROMAMBA_IMAGE\ntemplate_dockerfile\n""" + ) def _create_prev_docker_file(file_path): - with open(file_path, 'w') as docker_file: - docker_file.write('''ARG TAG_FOR_BASE_MICROMAMBA_IMAGE - FROM mambaorg / micromamba:$TAG_FOR_BASE_MICROMAMBA_IMAGE\nprevious_dockerfile\n''') + with open(file_path, "w") as docker_file: + docker_file.write( + """ARG TAG_FOR_BASE_MICROMAMBA_IMAGE + FROM mambaorg / micromamba:$TAG_FOR_BASE_MICROMAMBA_IMAGE\nprevious_dockerfile\n""" + ) -def _create_new_version_artifacts_helper(mocker, tmp_path, version, target_version): +def _create_new_version_artifacts_helper(mocker, tmp_path, version, target_version): def mock_get_dir_for_version(base_version): - pre_release_suffix = '/v' + str(base_version) if base_version.prerelease else '' - version_string = f'v{base_version.major}.{base_version.minor}.{base_version.patch}' + \ - pre_release_suffix + pre_release_suffix = "/v" + str(base_version) if base_version.prerelease else "" + version_string = f"v{base_version.major}.{base_version.minor}.{base_version.patch}" + pre_release_suffix # get_dir_for_version returns a str and not PosixPath return str(tmp_path) + "/" + version_string - mocker.patch('main.get_dir_for_version', side_effect=mock_get_dir_for_version) + mocker.patch("main.get_dir_for_version", side_effect=mock_get_dir_for_version) input_version = get_semver(version) # Create directory for base version input_version_dir = create_and_get_semver_dir(input_version) # 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') - _create_docker_cpu_env_out_file(input_version_dir + '/cpu.env.out') - _create_docker_gpu_env_out_file(input_version_dir + '/gpu.env.out') - _create_prev_docker_file(input_version_dir + '/Dockerfile') - os.makedirs(tmp_path / 'template') + _create_docker_cpu_env_in_file(input_version_dir + "/cpu.env.in") + _create_docker_gpu_env_in_file(input_version_dir + "/gpu.env.in") + _create_docker_cpu_env_out_file(input_version_dir + "/cpu.env.out") + _create_docker_gpu_env_out_file(input_version_dir + "/gpu.env.out") + _create_prev_docker_file(input_version_dir + "/Dockerfile") + os.makedirs(tmp_path / "template") next_version = get_semver(target_version) - next_major_version = 'v' + str(next_version.major) - os.makedirs(tmp_path / 'template' / next_major_version) + next_major_version = "v" + str(next_version.major) + os.makedirs(tmp_path / "template" / next_major_version) if next_version.major == 1: # Create dirs directory under template - os.makedirs(tmp_path / 'template' / next_major_version / 'dirs') - _create_template_docker_file(tmp_path / 'template' / next_major_version / 'Dockerfile') + os.makedirs(tmp_path / "template" / next_major_version / "dirs") + _create_template_docker_file(tmp_path / "template" / next_major_version / "Dockerfile") -def _create_additional_packages_env_in_file_helper(mocker, tmp_path, version, - include_additional_package=False, - use_existing_package_as_additional_package=False): +def _create_additional_packages_env_in_file_helper( + mocker, tmp_path, version, include_additional_package=False, use_existing_package_as_additional_package=False +): if include_additional_package: + def mock_get_dir_for_version(base_version): - pre_release_suffix = '/v' + str(base_version) if base_version.prerelease else '' - version_string = f'v{base_version.major}.{base_version.minor}.{base_version.patch}' + \ - pre_release_suffix + pre_release_suffix = "/v" + str(base_version) if base_version.prerelease else "" + version_string = f"v{base_version.major}.{base_version.minor}.{base_version.patch}" + pre_release_suffix # get_dir_for_version returns a str and not PosixPath return str(tmp_path) + "/" + version_string - mocker.patch('main.get_dir_for_version', side_effect=mock_get_dir_for_version) + mocker.patch("main.get_dir_for_version", side_effect=mock_get_dir_for_version) input_version = get_semver(version) # Create directory for new version input_version_dir = create_and_get_semver_dir(input_version) - additional_env_in_file_path = input_version_dir + '/gpu.additional_packages_env.in' + additional_env_in_file_path = input_version_dir + "/gpu.additional_packages_env.in" if use_existing_package_as_additional_package: # Using an older version of numpy. - _create_additional_packages_gpu_env_in_file(additional_env_in_file_path, - 'conda-forge::numpy[version=\'>=1.0.4,' - '<1.1.0\']') + _create_additional_packages_gpu_env_in_file( + additional_env_in_file_path, "conda-forge::numpy[version='>=1.0.4," "<1.1.0']" + ) else: _create_additional_packages_gpu_env_in_file(additional_env_in_file_path) @@ -144,54 +155,53 @@ def mock_get_dir_for_version(base_version): def test_get_semver_version(): # Test invalid version string. with pytest.raises(Exception): - get_semver('1.124.5d') + get_semver("1.124.5d") # Test version string with build with pytest.raises(Exception): - get_semver('1.124.5+25') + get_semver("1.124.5+25") # Test version string with build and prerelease with pytest.raises(Exception): - get_semver('1.124.5-prerelease+25') + get_semver("1.124.5-prerelease+25") # Test valid version string. - assert get_semver('1.124.5') is not None - assert get_semver('1.124.5-beta') is not None + assert get_semver("1.124.5") is not None + assert get_semver("1.124.5-beta") is not None def test_new_version_artifacts_for_an_input_prerelease_version(): - input_version = '1.23.0-beta' - args = CreateVersionArgs('patch', input_version) + input_version = "1.23.0-beta" + args = CreateVersionArgs("patch", input_version) with pytest.raises(Exception): create_patch_version_artifacts(args) - args = CreateVersionArgs('minor', input_version) + args = CreateVersionArgs("minor", input_version) with pytest.raises(Exception): create_minor_version_artifacts(args) - args = CreateVersionArgs('major', input_version) + args = CreateVersionArgs("major", input_version) with pytest.raises(Exception): create_major_version_artifacts(args) -@patch('os.path.exists') -@patch('os.path.isdir') -@patch('shutil.rmtree') -@patch('os.makedirs') -@patch('os.listdir') -def test_create_and_get_semver_dir(mock_list_dir, mock_make_dirs, mock_rmtree, - mock_path_is_dir, mock_path_exists): +@patch("os.path.exists") +@patch("os.path.isdir") +@patch("shutil.rmtree") +@patch("os.makedirs") +@patch("os.listdir") +def test_create_and_get_semver_dir(mock_list_dir, mock_make_dirs, mock_rmtree, mock_path_is_dir, mock_path_exists): # case 1: Directory exists and exist_ok is False => Throws Exception mock_path_exists.return_value = True with pytest.raises(Exception): - create_and_get_semver_dir(get_semver('1.124.5')) + create_and_get_semver_dir(get_semver("1.124.5")) # Case 2: Instead of a directory in the path, a file exists. mock_path_is_dir.return_value = False with pytest.raises(Exception): - create_and_get_semver_dir(get_semver('1.124.5'), True) + create_and_get_semver_dir(get_semver("1.124.5"), True) # Happy case mock_path_is_dir.return_value = True mock_list_dir.return_value = [] - assert create_and_get_semver_dir(get_semver('1.124.5'), True) is not None + assert create_and_get_semver_dir(get_semver("1.124.5"), True) is not None def test_create_new_version_artifacts_for_invalid_upgrade_type(): - input = CreateVersionArgs('test_upgrade', '1.2.3') + input = CreateVersionArgs("test_upgrade", "1.2.3") with pytest.raises(Exception): create_major_version_artifacts(input) with pytest.raises(Exception): @@ -200,60 +210,62 @@ def test_create_new_version_artifacts_for_invalid_upgrade_type(): create_patch_version_artifacts(input) -def _create_and_assert_patch_version_upgrade(rel_path, mocker, tmp_path, - pre_release_identifier=None, - include_additional_package=False, - use_existing_package_as_additional_package=False): - input_version = '0.2.5' - next_version = get_semver('0.2.6') - new_version_dir = tmp_path / ('v' + str(next_version)) - base_version_dir = tmp_path / ('v' + input_version) +def _create_and_assert_patch_version_upgrade( + rel_path, + mocker, + tmp_path, + pre_release_identifier=None, + include_additional_package=False, + use_existing_package_as_additional_package=False, +): + input_version = "0.2.5" + next_version = get_semver("0.2.6") + new_version_dir = tmp_path / ("v" + str(next_version)) + base_version_dir = tmp_path / ("v" + input_version) if pre_release_identifier: - new_version_dir = new_version_dir / ('v' + str(next_version) + '-' + pre_release_identifier) - next_major_version_dir_name = 'v' + str(next_version.major) + 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) + _create_additional_packages_env_in_file_helper( + mocker, tmp_path, str(next_version), include_additional_package, use_existing_package_as_additional_package + ) if include_additional_package: - args = CreateVersionArgs('patch', input_version, - pre_release_identifier=pre_release_identifier, force=True) + args = CreateVersionArgs("patch", input_version, pre_release_identifier=pre_release_identifier, force=True) else: - args = CreateVersionArgs('patch', input_version, - pre_release_identifier=pre_release_identifier) + args = CreateVersionArgs("patch", input_version, pre_release_identifier=pre_release_identifier) create_patch_version_artifacts(args) # Assert new version directory is created assert os.path.exists(new_version_dir) # Check cpu.env.in and gpu.env.in exists in the new directory new_version_dir_files = os.listdir(new_version_dir) - assert 'cpu.env.in' in new_version_dir_files - assert 'gpu.env.in' in new_version_dir_files - assert 'Dockerfile' in new_version_dir_files - with open(new_version_dir / 'Dockerfile', 'r') as f: - assert 'previous_dockerfile' in f.read() + assert "cpu.env.in" in new_version_dir_files + assert "gpu.env.in" in new_version_dir_files + assert "Dockerfile" in new_version_dir_files + with open(new_version_dir / "Dockerfile", "r") as f: + assert "previous_dockerfile" in f.read() if next_version.major >= 1: - assert 'dirs' in new_version_dir_files + assert "dirs" in new_version_dir_files if include_additional_package: - assert 'gpu.additional_packages_env.in' in new_version_dir_files - with open(new_version_dir / 'cpu.env.in', 'r') as f: + assert "gpu.additional_packages_env.in" in new_version_dir_files + with open(new_version_dir / "cpu.env.in", "r") as f: contents = f.read() # version of ipykernel in cpu.env.out is 6.21.3 # so we expect the version string to be >=6.21.3,<6.22.0 - expected_version_string = '>=6.21.3,<6.22.0' + expected_version_string = ">=6.21.3,<6.22.0" assert contents.find(expected_version_string) != -1 - with open(new_version_dir / 'gpu.env.in', 'r') as f: + with open(new_version_dir / "gpu.env.in", "r") as f: contents = f.read() # version of numpy in gpu.env.out is 1.24.2 # so we expect the version string to be >=1.24.2,<1.25.0 - expected_version_string = '>=1.24.2,<1.25.0' + expected_version_string = ">=1.24.2,<1.25.0" assert contents.find(expected_version_string) != -1 if include_additional_package and not use_existing_package_as_additional_package: - assert contents.find('sagemaker-python-sdk') != -1 + assert contents.find("sagemaker-python-sdk") != -1 @patch("os.path.relpath") @@ -262,83 +274,79 @@ def test_create_new_version_artifacts_for_patch_version_upgrade(rel_path, mocker @patch("os.path.relpath") -def test_create_new_patch_version_upgrade_with_existing_package_as_additional_packages(rel_path, - mocker, - tmp_path): - _create_and_assert_patch_version_upgrade(rel_path, mocker, tmp_path, - include_additional_package=True, - use_existing_package_as_additional_package=True) +def test_create_new_patch_version_upgrade_with_existing_package_as_additional_packages(rel_path, mocker, tmp_path): + _create_and_assert_patch_version_upgrade( + rel_path, mocker, tmp_path, include_additional_package=True, use_existing_package_as_additional_package=True + ) @patch("os.path.relpath") -def test_create_new_version_artifacts_for_patch_version_upgrade_with_additional_packages( - rel_path, mocker, tmp_path): - _create_and_assert_patch_version_upgrade(rel_path, mocker, tmp_path, - include_additional_package=True) +def test_create_new_version_artifacts_for_patch_version_upgrade_with_additional_packages(rel_path, mocker, tmp_path): + _create_and_assert_patch_version_upgrade(rel_path, mocker, tmp_path, include_additional_package=True) @patch("os.path.relpath") -def test_create_new_version_artifacts_for_patch_version_upgrade_with_prerelease(rel_path, mocker, - tmp_path): - _create_and_assert_patch_version_upgrade(rel_path, mocker, tmp_path, 'beta') - - -def _create_and_assert_minor_version_upgrade(rel_path, mocker, tmp_path, - pre_release_identifier=None, - include_additional_package=False, - use_existing_package_as_additional_package=False - ): - input_version = '1.2.5' - next_version = get_semver('1.3.0') - new_version_dir = tmp_path / ('v' + str(next_version)) +def test_create_new_version_artifacts_for_patch_version_upgrade_with_prerelease(rel_path, mocker, tmp_path): + _create_and_assert_patch_version_upgrade(rel_path, mocker, tmp_path, "beta") + + +def _create_and_assert_minor_version_upgrade( + rel_path, + mocker, + tmp_path, + pre_release_identifier=None, + include_additional_package=False, + use_existing_package_as_additional_package=False, +): + input_version = "1.2.5" + next_version = get_semver("1.3.0") + new_version_dir = tmp_path / ("v" + str(next_version)) if pre_release_identifier: - new_version_dir = new_version_dir / ('v' + str(next_version) + '-' + pre_release_identifier) - next_major_version_dir_name = 'v' + str(next_version.major) + 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'), str(tmp_path / 'template' / - next_major_version_dir_name / 'dirs')] - _create_new_version_artifacts_helper(mocker, tmp_path, input_version, '1.3.0') - _create_additional_packages_env_in_file_helper(mocker, tmp_path, '1.3.0', - include_additional_package, - use_existing_package_as_additional_package) + rel_path.side_effect = [ + str(tmp_path / "template" / next_major_version_dir_name / "Dockerfile"), + str(tmp_path / "template" / next_major_version_dir_name / "dirs"), + ] + _create_new_version_artifacts_helper(mocker, tmp_path, input_version, "1.3.0") + _create_additional_packages_env_in_file_helper( + mocker, tmp_path, "1.3.0", include_additional_package, use_existing_package_as_additional_package + ) if include_additional_package: - args = CreateVersionArgs('minor', input_version, - pre_release_identifier=pre_release_identifier, force=True) + args = CreateVersionArgs("minor", input_version, pre_release_identifier=pre_release_identifier, force=True) else: - args = CreateVersionArgs('minor', input_version, - pre_release_identifier=pre_release_identifier) + args = CreateVersionArgs("minor", input_version, pre_release_identifier=pre_release_identifier) create_minor_version_artifacts(args) # Assert new version directory is created assert os.path.exists(new_version_dir) # Check cpu.env.in and gpu.env.in exists in the new directory new_version_dir_files = os.listdir(new_version_dir) - assert 'cpu.env.in' in new_version_dir_files - assert 'gpu.env.in' in new_version_dir_files - assert 'Dockerfile' in new_version_dir_files - with open(new_version_dir / 'Dockerfile', 'r') as f: - assert 'template_dockerfile' in f.read() + assert "cpu.env.in" in new_version_dir_files + assert "gpu.env.in" in new_version_dir_files + assert "Dockerfile" in new_version_dir_files + with open(new_version_dir / "Dockerfile", "r") as f: + assert "template_dockerfile" in f.read() if next_version.major >= 1: - assert 'dirs' in new_version_dir_files + assert "dirs" in new_version_dir_files if include_additional_package: - assert 'gpu.additional_packages_env.in' in new_version_dir_files - with open(new_version_dir / 'cpu.env.in', 'r') as f: + assert "gpu.additional_packages_env.in" in new_version_dir_files + with open(new_version_dir / "cpu.env.in", "r") as f: contents = f.read() # version of ipykernel in cpu.env.out is 6.21.3 # so we expect the version string to be >=6.21.3,<7.0.0 - expected_version_string = '>=6.21.3,<7.0.0' + expected_version_string = ">=6.21.3,<7.0.0" assert contents.find(expected_version_string) != -1 - with open(new_version_dir / 'gpu.env.in', 'r') as f: + with open(new_version_dir / "gpu.env.in", "r") as f: contents = f.read() # version of numpy in gpu.env.out is 1.24.2 # so we expect the version string to be >=1.24.2,<2.0.0 - expected_version_string = '>=1.24.2,<2.0.0' + expected_version_string = ">=1.24.2,<2.0.0" assert contents.find(expected_version_string) != -1 if include_additional_package and not use_existing_package_as_additional_package: - assert contents.find('sagemaker-python-sdk') != -1 + assert contents.find("sagemaker-python-sdk") != -1 @patch("os.path.relpath") @@ -347,84 +355,79 @@ def test_create_new_version_artifacts_for_minor_version_upgrade(rel_path, mocker @patch("os.path.relpath") -def test_create_new_minor_version_upgrade_with_existing_package_as_additional_packages(rel_path, - mocker, - tmp_path): - _create_and_assert_minor_version_upgrade(rel_path, mocker, tmp_path, - include_additional_package=True, - use_existing_package_as_additional_package=True) +def test_create_new_minor_version_upgrade_with_existing_package_as_additional_packages(rel_path, mocker, tmp_path): + _create_and_assert_minor_version_upgrade( + rel_path, mocker, tmp_path, include_additional_package=True, use_existing_package_as_additional_package=True + ) @patch("os.path.relpath") -def test_create_new_version_artifacts_for_minor_version_upgrade_with_additional_packages( - rel_path, mocker, tmp_path): - _create_and_assert_minor_version_upgrade(rel_path, mocker, tmp_path, - include_additional_package=True) - - +def test_create_new_version_artifacts_for_minor_version_upgrade_with_additional_packages(rel_path, mocker, tmp_path): + _create_and_assert_minor_version_upgrade(rel_path, mocker, tmp_path, include_additional_package=True) @patch("os.path.relpath") -def test_create_new_version_artifacts_for_minor_version_upgrade_with_prerelease(rel_path, mocker, - tmp_path): - _create_and_assert_minor_version_upgrade(rel_path, mocker, tmp_path, 'beta') - - -def _create_and_assert_major_version_upgrade(rel_path, mocker, tmp_path, - pre_release_identifier=None, - include_additional_package=False, - use_existing_package_as_additional_package=False): - input_version = '0.2.5' - next_version = get_semver('1.0.0') - new_version_dir = tmp_path / ('v' + str(next_version)) +def test_create_new_version_artifacts_for_minor_version_upgrade_with_prerelease(rel_path, mocker, tmp_path): + _create_and_assert_minor_version_upgrade(rel_path, mocker, tmp_path, "beta") + + +def _create_and_assert_major_version_upgrade( + rel_path, + mocker, + tmp_path, + pre_release_identifier=None, + include_additional_package=False, + use_existing_package_as_additional_package=False, +): + input_version = "0.2.5" + next_version = get_semver("1.0.0") + new_version_dir = tmp_path / ("v" + str(next_version)) if pre_release_identifier: - new_version_dir = new_version_dir / ('v' + str(next_version) + '-' + pre_release_identifier) - next_major_version_dir_name = 'v' + str(next_version.major) + 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'), str(tmp_path / 'template' / - next_major_version_dir_name / 'dirs')] + rel_path.side_effect = [ + str(tmp_path / "template" / next_major_version_dir_name / "Dockerfile"), + str(tmp_path / "template" / next_major_version_dir_name / "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) + _create_additional_packages_env_in_file_helper( + mocker, tmp_path, str(next_version), include_additional_package, use_existing_package_as_additional_package + ) if include_additional_package: - args = CreateVersionArgs('major', input_version, - pre_release_identifier=pre_release_identifier, force=True) + args = CreateVersionArgs("major", input_version, pre_release_identifier=pre_release_identifier, force=True) else: - args = CreateVersionArgs('major', input_version, - pre_release_identifier=pre_release_identifier) + args = CreateVersionArgs("major", input_version, pre_release_identifier=pre_release_identifier) create_major_version_artifacts(args) # Assert new version directory is created assert os.path.exists(new_version_dir) # Check cpu.env.in and gpu.env.in exists in the new directory new_version_dir_files = os.listdir(new_version_dir) - assert 'cpu.env.in' in new_version_dir_files - assert 'gpu.env.in' in new_version_dir_files - assert 'Dockerfile' in new_version_dir_files - with open(new_version_dir / 'Dockerfile', 'r') as f: - assert 'template_dockerfile' in f.read() + assert "cpu.env.in" in new_version_dir_files + assert "gpu.env.in" in new_version_dir_files + assert "Dockerfile" in new_version_dir_files + with open(new_version_dir / "Dockerfile", "r") as f: + assert "template_dockerfile" in f.read() if next_version.major >= 1: - assert 'dirs' in new_version_dir_files + assert "dirs" in new_version_dir_files if include_additional_package: - assert 'gpu.additional_packages_env.in' in new_version_dir_files - with open(new_version_dir / 'cpu.env.in', 'r') as f: + assert "gpu.additional_packages_env.in" in new_version_dir_files + with open(new_version_dir / "cpu.env.in", "r") as f: contents = f.read() # version of ipykernel in cpu.env.out is 6.21.3 # so we expect the version string to be >=6.21.3, - expected_version_string = '>=6.21.3\'' + expected_version_string = ">=6.21.3'" assert contents.find(expected_version_string) != -1 - with open(new_version_dir / 'gpu.env.in', 'r') as f: + with open(new_version_dir / "gpu.env.in", "r") as f: contents = f.read() # version of numpy in gpu.env.out is 1.24.2 # so we expect the version string to be >=1.24.2, - expected_version_string = '>=1.24.2\'' + expected_version_string = ">=1.24.2'" assert contents.find(expected_version_string) != -1 if include_additional_package and not use_existing_package_as_additional_package: - assert contents.find('sagemaker-python-sdk') != -1 + assert contents.find("sagemaker-python-sdk") != -1 @patch("os.path.relpath") @@ -433,192 +436,187 @@ def test_create_new_version_artifacts_for_major_version_upgrade(rel_path, mocker @patch("os.path.relpath") -def test_create_new_major_version_upgrade_with_existing_package_as_additional_packages(rel_path, - mocker, - tmp_path): - _create_and_assert_major_version_upgrade(rel_path, mocker, tmp_path, - include_additional_package=True, - use_existing_package_as_additional_package=True) +def test_create_new_major_version_upgrade_with_existing_package_as_additional_packages(rel_path, mocker, tmp_path): + _create_and_assert_major_version_upgrade( + rel_path, mocker, tmp_path, include_additional_package=True, use_existing_package_as_additional_package=True + ) @patch("os.path.relpath") -def test_create_new_version_artifacts_for_major_version_upgrade_with_additional_packages( - rel_path, mocker, tmp_path): - _create_and_assert_major_version_upgrade(rel_path, mocker, tmp_path, - include_additional_package=True) - +def test_create_new_version_artifacts_for_major_version_upgrade_with_additional_packages(rel_path, mocker, tmp_path): + _create_and_assert_major_version_upgrade(rel_path, mocker, tmp_path, include_additional_package=True) @patch("os.path.relpath") -def test_create_new_version_artifacts_for_major_version_upgrade_with_prerelease(rel_path, mocker, - tmp_path): - _create_and_assert_major_version_upgrade(rel_path, mocker, tmp_path, 'beta') +def test_create_new_version_artifacts_for_major_version_upgrade_with_prerelease(rel_path, mocker, tmp_path): + _create_and_assert_major_version_upgrade(rel_path, mocker, tmp_path, "beta") def test_build_images(mocker, tmp_path): - mock_docker_from_env = MagicMock(name='_docker_client') - mocker.patch('main._docker_client', new=mock_docker_from_env) - version = '1.124.5' + mock_docker_from_env = MagicMock(name="_docker_client") + mocker.patch("main._docker_client", new=mock_docker_from_env) + version = "1.124.5" args = BuildImageArgs(version) def mock_get_dir_for_version(base_version): - version_string = f'v{base_version.major}.{base_version.minor}.{base_version.patch}' + version_string = f"v{base_version.major}.{base_version.minor}.{base_version.patch}" # get_dir_for_version returns a str and not a PosixPath return str(tmp_path) + "/" + version_string - mocker.patch('main.get_dir_for_version', side_effect=mock_get_dir_for_version) + mocker.patch("main.get_dir_for_version", side_effect=mock_get_dir_for_version) input_version = get_semver(version) # Create directory for base version input_version_dir = create_and_get_semver_dir(input_version) # Create env.in for base version - _create_docker_cpu_env_in_file(input_version_dir + '/cpu.env.in') - _create_docker_cpu_env_in_file(input_version_dir + '/gpu.env.in') - _create_prev_docker_file(input_version_dir + '/Dockerfile') + _create_docker_cpu_env_in_file(input_version_dir + "/cpu.env.in") + _create_docker_cpu_env_in_file(input_version_dir + "/gpu.env.in") + _create_prev_docker_file(input_version_dir + "/Dockerfile") # Assert env.out doesn't exist - assert os.path.exists(input_version_dir + '/cpu.env.out') is False - assert os.path.exists(input_version_dir + '/gpu.env.out') is False + assert os.path.exists(input_version_dir + "/cpu.env.out") is False + assert os.path.exists(input_version_dir + "/gpu.env.out") is False mock_image_1 = Mock() - mock_image_1.id.return_value = 'img1' + mock_image_1.id.return_value = "img1" mock_image_2 = Mock() - mock_image_2.id.return_value = 'img2' - mock_docker_from_env.images.build.side_effect = [(mock_image_1, 'logs1'), (mock_image_2, 'logs2')] - mock_docker_from_env.containers.run.side_effect = ['container_logs1'.encode('utf-8'), - 'container_logs2'.encode('utf-8')] + mock_image_2.id.return_value = "img2" + mock_docker_from_env.images.build.side_effect = [(mock_image_1, "logs1"), (mock_image_2, "logs2")] + mock_docker_from_env.containers.run.side_effect = [ + "container_logs1".encode("utf-8"), + "container_logs2".encode("utf-8"), + ] # Invoke build images build_images(args) # Assert env.out exists - assert os.path.exists(input_version_dir + '/cpu.env.out') - assert os.path.exists(input_version_dir + '/gpu.env.out') + assert os.path.exists(input_version_dir + "/cpu.env.out") + assert os.path.exists(input_version_dir + "/gpu.env.out") # Validate the contents of env.out actual_output = set() - with open(input_version_dir + '/cpu.env.out', 'r') as f: + with open(input_version_dir + "/cpu.env.out", "r") as f: actual_output.add(f.read()) - with open(input_version_dir + '/gpu.env.out', 'r') as f: + with open(input_version_dir + "/gpu.env.out", "r") as f: actual_output.add(f.read()) - expected_output = {'container_logs1', 'container_logs2'} + expected_output = {"container_logs1", "container_logs2"} assert actual_output == expected_output -@patch('os.path.exists') +@patch("os.path.exists") def test_get_version_tags(mock_path_exists): - version = get_semver('1.124.5') - file_name = 'cpu.env.out' + version = get_semver("1.124.5") + file_name = "cpu.env.out" # case 1: The given version is the latest for patch, minor and major mock_path_exists.side_effect = [False, False, False] - assert _get_version_tags(version, file_name) == ['1.124.5', '1.124', '1', 'latest'] + assert _get_version_tags(version, file_name) == ["1.124.5", "1.124", "1", "latest"] # case 2: The given version is the latest for patch, minor but not major # case 2.1 The major version is a prerelease version mock_path_exists.side_effect = [False, False, True, False] - assert _get_version_tags(version, file_name) == ['1.124.5', '1.124', '1', 'latest'] + assert _get_version_tags(version, file_name) == ["1.124.5", "1.124", "1", "latest"] # case 2.2 The major version is not a prerelease version mock_path_exists.side_effect = [False, False, True, True] - assert _get_version_tags(version, file_name) == ['1.124.5', '1.124', '1'] + assert _get_version_tags(version, file_name) == ["1.124.5", "1.124", "1"] # case 3: The given version is the latest for patch and major but not for minor # case 3.1 The minor version is a prerelease version (we need to mock path.exists for major # version twice - one for the actual directory, one for the docker file) mock_path_exists.side_effect = [False, True, False, True, True] - assert _get_version_tags(version, file_name) == ['1.124.5', '1.124', '1'] + assert _get_version_tags(version, file_name) == ["1.124.5", "1.124", "1"] # case 3.2 The minor version is not a prerelease version mock_path_exists.side_effect = [False, True, True] - assert _get_version_tags(version, file_name) == ['1.124.5', '1.124'] + assert _get_version_tags(version, file_name) == ["1.124.5", "1.124"] # case 4: The given version is not the latest for patch, minor, major # case 4.1 The patch version is a prerelease version (we need to mock path.exists for minor # and major twice - one for the actual directory, one for the docker file) mock_path_exists.side_effect = [True, False, True, True, True, True] - assert _get_version_tags(version, file_name) == ['1.124.5', '1.124'] + assert _get_version_tags(version, file_name) == ["1.124.5", "1.124"] # case 4.2 The patch version is not a prerelease version mock_path_exists.side_effect = [True, True] - assert _get_version_tags(version, file_name) == ['1.124.5'] + assert _get_version_tags(version, file_name) == ["1.124.5"] # case 5: The given version includes a prerelease identifier - assert _get_version_tags(get_semver('1.124.5-beta'), file_name) == ['1.124.5-beta'] + assert _get_version_tags(get_semver("1.124.5-beta"), file_name) == ["1.124.5-beta"] def _test_push_images_upstream(mocker, repository): boto3_client = MagicMock() - expected_client_name = 'ecr-public' if repository.startswith('public.ecr.aws') else 'ecr' - boto3_mocker = mocker.patch('boto3.client', return_value=boto3_client) - mock_docker_from_env = MagicMock(name='_docker_client') - mocker.patch('main._docker_client', new=mock_docker_from_env) - authorization_token_string = 'username:password' - encoded_authorization_token = base64.b64encode(authorization_token_string.encode('ascii')) - authorization_data = { - 'authorizationToken': encoded_authorization_token - } - if expected_client_name == 'ecr': + expected_client_name = "ecr-public" if repository.startswith("public.ecr.aws") else "ecr" + boto3_mocker = mocker.patch("boto3.client", return_value=boto3_client) + mock_docker_from_env = MagicMock(name="_docker_client") + mocker.patch("main._docker_client", new=mock_docker_from_env) + authorization_token_string = "username:password" + encoded_authorization_token = base64.b64encode(authorization_token_string.encode("ascii")) + authorization_data = {"authorizationToken": encoded_authorization_token} + if expected_client_name == "ecr": # Private ECR client returns a list of authorizationData. authorization_data = [authorization_data] - boto3_client.get_authorization_token.return_value = { - 'authorizationData': authorization_data - } + boto3_client.get_authorization_token.return_value = {"authorizationData": authorization_data} mock_docker_from_env.images.push.side_effect = None - _push_images_upstream([{'repository': repository, 'tag': '0.1'}], 'us-west-2') + _push_images_upstream([{"repository": repository, "tag": "0.1"}], "us-west-2") assert boto3_mocker.call_args[0][0] == expected_client_name def test_push_images_upstream_for_private_ecr_repository(mocker): - repository = 'aws_account_id.dkr.ecr.us-west-2.amazonaws.com/my-repository' + repository = "aws_account_id.dkr.ecr.us-west-2.amazonaws.com/my-repository" _test_push_images_upstream(mocker, repository) def test_push_images_upstream_for_public_ecr_repository(mocker): - repository = 'public.ecr.aws/registry_alias/my-repository' + repository = "public.ecr.aws/registry_alias/my-repository" _test_push_images_upstream(mocker, repository) -@patch('os.path.exists') +@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' + input_version_dir = str(tmp_path) + "/v2.0.0" image_generator_config = _image_generator_configs[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) + assert image_generator_config == _get_config_for_image(input_version_dir, image_generator_config, False) # Case 2: Mock os.path.exists to return True but force is True mock_path_exists.return_value = True - assert image_generator_config == _get_config_for_image(input_version_dir, - image_generator_config, True) + assert image_generator_config == _get_config_for_image(input_version_dir, image_generator_config, True) # Case 3: Mock os.path.exists to return True and force is False mock_path_exists.return_value = True response = _get_config_for_image(input_version_dir, image_generator_config, False) - assert response['build_args']['ENV_IN_FILENAME'] == image_generator_config["env_out_filename"] - assert 'ARG_BASED_ENV_IN_FILENAME' not in response['build_args'] + assert response["build_args"]["ENV_IN_FILENAME"] == image_generator_config["env_out_filename"] + assert "ARG_BASED_ENV_IN_FILENAME" not in response["build_args"] def test_derive_changeset(tmp_path): - target_version_dir = str(tmp_path / 'v1.0.6') - source_version_dir = str(tmp_path / 'v1.0.5') + target_version_dir = str(tmp_path / "v1.0.6") + source_version_dir = str(tmp_path / "v1.0.5") os.makedirs(target_version_dir) os.makedirs(source_version_dir) # Create env.in of the source version _create_docker_cpu_env_in_file(source_version_dir + "/cpu.env.in") # Create env.out of the source version - _create_docker_cpu_env_out_file(source_version_dir + "/cpu.env.out", - package_metadata='https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.21.3-pyh210e3f_0.conda#8c1f6bf32a6ca81232c4853d4165ca67') + _create_docker_cpu_env_out_file( + source_version_dir + "/cpu.env.out", + package_metadata="https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.21.3-pyh210e3f_0.conda#8c1f6bf32a6ca81232c4853d4165ca67", + ) # Create env.in of the target version, which has additional dependency on boto3 - target_env_in_packages = 'conda-forge::ipykernel\nconda-forge::boto3' + target_env_in_packages = "conda-forge::ipykernel\nconda-forge::boto3" _create_docker_cpu_env_in_file(target_version_dir + "/cpu.env.in", required_package=target_env_in_packages) - target_env_out_packages = 'https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.21.6-pyh210e3f2_0.conda#8c1f6bf32a6ca81232c4853d4165ca67\n' \ - 'https://conda.anaconda.org/conda-forge/linux-64/boto3-1.2-cuda112py38hd_0.conda#8c1f6bf32a6ca81232c4853d4165ca67' + target_env_out_packages = ( + "https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.21.6-pyh210e3f2_0.conda#8c1f6bf32a6ca81232c4853d4165ca67\n" + "https://conda.anaconda.org/conda-forge/linux-64/boto3-1.2-cuda112py38hd_0.conda#8c1f6bf32a6ca81232c4853d4165ca67" + ) _create_docker_cpu_env_out_file(target_version_dir + "/cpu.env.out", package_metadata=target_env_out_packages) - 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]) + 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] + ) assert expected_upgrades == actual_upgrades assert expected_new_packages == actual_new_packages def test_generate_release_notes(tmp_path): - target_version_dir = str(tmp_path / 'v1.0.6') + target_version_dir = str(tmp_path / "v1.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' + target_env_in_packages = "conda-forge::ipykernel\nconda-forge::boto3" _create_docker_cpu_env_in_file(target_version_dir + "/cpu.env.in", required_package=target_env_in_packages) - target_env_out_packages = 'https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.21.6-pyh210e3f2_0.conda#8c1f6bf32a6ca81232c4853d4165ca67\n' \ - 'https://conda.anaconda.org/conda-forge/linux-64/boto3-1.23.4' \ - '-cuda112py38hd_0.conda#8c1f6bf32a6ca81232c4853d4165ca67' + target_env_out_packages = ( + "https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.21.6-pyh210e3f2_0.conda#8c1f6bf32a6ca81232c4853d4165ca67\n" + "https://conda.anaconda.org/conda-forge/linux-64/boto3-1.23.4" + "-cuda112py38hd_0.conda#8c1f6bf32a6ca81232c4853d4165ca67" + ) _create_docker_cpu_env_out_file(target_version_dir + "/cpu.env.out", package_metadata=target_env_out_packages) # GPU contains only numpy _create_docker_gpu_env_in_file(target_version_dir + "/gpu.env.in") @@ -626,11 +624,11 @@ def test_generate_release_notes(tmp_path): # Verify _get_image_type_package_metadata image_type_package_metadata = _get_image_type_package_metadata(target_version_dir) 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'} + assert image_type_package_metadata["gpu"] == {"numpy": "1.24.2"} + assert image_type_package_metadata["cpu"] == {"ipykernel": "6.21.6", "boto3": "1.23.4"} # Verify _get_package_to_image_type_mapping package_to_image_type_mapping = _get_package_to_image_type_mapping(image_type_package_metadata) assert len(package_to_image_type_mapping) == 3 - assert package_to_image_type_mapping['numpy'] == {'gpu': '1.24.2'} - assert package_to_image_type_mapping['ipykernel'] == {'cpu': '6.21.6'} - assert package_to_image_type_mapping['boto3'] == {'cpu': '1.23.4'} + assert package_to_image_type_mapping["numpy"] == {"gpu": "1.24.2"} + assert package_to_image_type_mapping["ipykernel"] == {"cpu": "6.21.6"} + assert package_to_image_type_mapping["boto3"] == {"cpu": "1.23.4"} diff --git a/test/test_package_staleness.py b/test/test_package_staleness.py index a1a07b19..b26283a5 100644 --- a/test/test_package_staleness.py +++ b/test/test_package_staleness.py @@ -1,87 +1,95 @@ from __future__ import absolute_import -from conda.cli.python_api import run_command import pytest pytestmark = pytest.mark.unit -from utils import get_semver, get_match_specs -from package_staleness import _get_installed_package_versions_and_conda_versions +from unittest.mock import patch + from config import _image_generator_configs -from unittest.mock import patch, Mock, MagicMock +from package_staleness import _get_installed_package_versions_and_conda_versions +from utils import get_match_specs, get_semver def _create_env_in_docker_file(file_path): - with open(file_path, 'w') as env_in_file: - env_in_file.write(f'''# This file is auto-generated. + with open(file_path, "w") as env_in_file: + env_in_file.write( + f"""# This file is auto-generated. conda-forge::ipykernel -conda-forge::numpy[version=\'>=1.0.17,<2.0.0\']''') +conda-forge::numpy[version=\'>=1.0.17,<2.0.0\']""" + ) def _create_env_out_docker_file(file_path): - with open(file_path, 'w') as env_out_file: - env_out_file.write(f'''# This file may be used to create an environment using: + with open(file_path, "w") as env_out_file: + env_out_file.write( + f"""# This file may be used to create an environment using: # $ conda create --name --file # platform: linux-64 https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.21.3-pyh210e3f2_0.conda#8c1f6bf32a6ca81232c4853d4165ca67 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.2-py38h10c12cc_0.conda#05592c85b9f6931dc2df1e80c0d56294\n''') +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.2-py38h10c12cc_0.conda#05592c85b9f6931dc2df1e80c0d56294\n""" + ) def test_get_match_specs(tmp_path): - env_out_file_path = tmp_path / 'env.out' + env_out_file_path = tmp_path / "env.out" _create_env_out_docker_file(env_out_file_path) match_spec_out = get_match_specs(env_out_file_path) - ipykernel_match_spec = match_spec_out['ipykernel'] - assert str(ipykernel_match_spec.get('version')).removeprefix('==') == '6.21.3' - numpy_match_spec = match_spec_out['numpy'] - assert str(numpy_match_spec.get('version')).removeprefix('==') == '1.24.2' - assert ipykernel_match_spec.get('subdir') == 'noarch' - assert numpy_match_spec.get('subdir') == 'linux-64' + ipykernel_match_spec = match_spec_out["ipykernel"] + assert str(ipykernel_match_spec.get("version")).removeprefix("==") == "6.21.3" + numpy_match_spec = match_spec_out["numpy"] + assert str(numpy_match_spec.get("version")).removeprefix("==") == "1.24.2" + assert ipykernel_match_spec.get("subdir") == "noarch" + assert numpy_match_spec.get("subdir") == "linux-64" assert len(match_spec_out) == 2 # Test bad file path - env_out_file_path = tmp_path / 'bad.env.out' + env_out_file_path = tmp_path / "bad.env.out" match_spec_out = get_match_specs(env_out_file_path) assert len(match_spec_out) == 0 @patch("conda.cli.python_api.run_command") def test_get_installed_package_versions_and_conda_versions(mock_run_command, tmp_path): - mock_run_command.return_value = ('{"ipykernel":[{"version": "6.21.3"}], "numpy":[{"version": ' - '"1.24.3"},{"version":"1.26.0"},{"version":"2.1.0"}]}', '', 0) - env_in_file_path = tmp_path / 'cpu.env.in' + mock_run_command.return_value = ( + '{"ipykernel":[{"version": "6.21.3"}], "numpy":[{"version": ' + '"1.24.3"},{"version":"1.26.0"},{"version":"2.1.0"}]}', + "", + 0, + ) + env_in_file_path = tmp_path / "cpu.env.in" _create_env_in_docker_file(env_in_file_path) - env_out_file_path = tmp_path / 'cpu.env.out' + 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 - 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')) - ipykernel_match_spec = match_spec_out['ipykernel'] - assert str(ipykernel_match_spec.get('version')).removeprefix('==') == '6.21.3' - numpy_match_spec = match_spec_out['numpy'] - assert str(numpy_match_spec.get('version')).removeprefix('==') == '1.24.2' - assert latest_package_versions_in_conda_forge['ipykernel'] == '6.21.3' - assert latest_package_versions_in_conda_forge['numpy'] == '1.24.3' + 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") + ) + ipykernel_match_spec = match_spec_out["ipykernel"] + assert str(ipykernel_match_spec.get("version")).removeprefix("==") == "6.21.3" + numpy_match_spec = match_spec_out["numpy"] + assert str(numpy_match_spec.get("version")).removeprefix("==") == "1.24.2" + assert latest_package_versions_in_conda_forge["ipykernel"] == "6.21.3" + 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')) - ipykernel_match_spec = match_spec_out['ipykernel'] - assert str(ipykernel_match_spec.get('version')).removeprefix('==') == '6.21.3' - numpy_match_spec = match_spec_out['numpy'] - assert str(numpy_match_spec.get('version')).removeprefix('==') == '1.24.2' - assert latest_package_versions_in_conda_forge['ipykernel'] == '6.21.3' + 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") + ) + ipykernel_match_spec = match_spec_out["ipykernel"] + assert str(ipykernel_match_spec.get("version")).removeprefix("==") == "6.21.3" + numpy_match_spec = match_spec_out["numpy"] + assert str(numpy_match_spec.get("version")).removeprefix("==") == "1.24.2" + assert latest_package_versions_in_conda_forge["ipykernel"] == "6.21.3" # Only for numpy there is a new minor version available. - assert latest_package_versions_in_conda_forge['numpy'] == '1.26.0' + 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')) - ipykernel_match_spec = match_spec_out['ipykernel'] - assert str(ipykernel_match_spec.get('version')).removeprefix('==') == '6.21.3' - numpy_match_spec = match_spec_out['numpy'] - assert str(numpy_match_spec.get('version')).removeprefix('==') == '1.24.2' - assert latest_package_versions_in_conda_forge['ipykernel'] == '6.21.3' + 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") + ) + ipykernel_match_spec = match_spec_out["ipykernel"] + assert str(ipykernel_match_spec.get("version")).removeprefix("==") == "6.21.3" + numpy_match_spec = match_spec_out["numpy"] + assert str(numpy_match_spec.get("version")).removeprefix("==") == "1.24.2" + assert latest_package_versions_in_conda_forge["ipykernel"] == "6.21.3" # Only for numpy there is a new major version available. - assert latest_package_versions_in_conda_forge['numpy'] == '2.1.0' + assert latest_package_versions_in_conda_forge["numpy"] == "2.1.0" From 05d06c738917eb506ca3da16df2d4df6f1643f8b Mon Sep 17 00:00:00 2001 From: Tian Wang Date: Mon, 25 Mar 2024 22:04:43 +0000 Subject: [PATCH 25/32] Add .git-blame-ignore-revs to preserve git blame information --- .git-blame-ignore-revs | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000..c519eda5 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# Migrate code style to Black +a74466c154d01201388f5232b167538275aa74c4 From 0690182a696df97cf38c173441768a178fd5f20f Mon Sep 17 00:00:00 2001 From: Tian Wang Date: Mon, 25 Mar 2024 22:21:41 +0000 Subject: [PATCH 26/32] Fix check code quality workflow --- .github/workflows/check_code_quality.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/check_code_quality.yml b/.github/workflows/check_code_quality.yml index 17a2bda1..6239f821 100644 --- a/.github/workflows/check_code_quality.yml +++ b/.github/workflows/check_code_quality.yml @@ -19,6 +19,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true +defaults: + run: + shell: bash -l {0} + jobs: build: name: Check Code Quality From aeddc4713cd47f5a052562dec3435d7f6c133d9c Mon Sep 17 00:00:00 2001 From: Nikhil Umesh Sargur Date: Tue, 26 Mar 2024 00:05:32 +0000 Subject: [PATCH 27/32] Enabling cron expression for nightly builds --- .github/workflows/nightly-build-image.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/nightly-build-image.yml b/.github/workflows/nightly-build-image.yml index 42ae43a5..285af603 100644 --- a/.github/workflows/nightly-build-image.yml +++ b/.github/workflows/nightly-build-image.yml @@ -1,10 +1,9 @@ name: Build New Image Version -on: workflow_dispatch -#on: -# # Run every night at 5:15PM PST -# # Run before monthly, so we don't immediately patch a new minor version -# schedule: -# - cron: '0 15 17 ? * *' +on: + workflow_dispatch: + # Run every night at 4:00PM PDT + schedule: + - cron: '0 23 * * *' defaults: run: shell: bash -l {0} From 0ca170c6832d8ba8be7f1654e812d684f4cabd24 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 14:06:18 -0400 Subject: [PATCH 28/32] release: v1.6.2 (#312) Co-authored-by: github-actions[bot] Co-authored-by: SageMaker Distribution Bot --- .../v1/v1.6/v1.6.2/CHANGELOG-cpu.md | 8 + .../v1/v1.6/v1.6.2/CHANGELOG-gpu.md | 9 + build_artifacts/v1/v1.6/v1.6.2/Dockerfile | 182 +++++ build_artifacts/v1/v1.6/v1.6.2/RELEASE.md | 56 ++ build_artifacts/v1/v1.6/v1.6.2/cpu.env.in | 51 ++ build_artifacts/v1/v1.6/v1.6.2/cpu.env.out | 662 +++++++++++++++++ .../code_editor_machine_settings.json | 4 + .../dirs/etc/code-editor/extensions.txt | 3 + .../v1/v1.6/v1.6.2/dirs/etc/conda/.condarc | 6 + .../dirs/etc/jupyter/jupyter_server_config.py | 16 + .../conf.d/supervisord-code-editor.conf | 11 + .../supervisor/conf.d/supervisord-common.conf | 18 + .../conf.d/supervisord-jupyter-lab.conf | 11 + .../etc/supervisor/conf.d/supervisord.conf | 27 + .../dirs/usr/local/bin/entrypoint-code-editor | 16 + .../usr/local/bin/entrypoint-jupyter-server | 19 + .../dirs/usr/local/bin/restart-jupyter-server | 6 + .../dirs/usr/local/bin/start-code-editor | 25 + .../dirs/usr/local/bin/start-jupyter-server | 35 + .../v1/v1.6/v1.6.2/gpu.arg_based_env.in | 1 + build_artifacts/v1/v1.6/v1.6.2/gpu.env.in | 51 ++ build_artifacts/v1/v1.6/v1.6.2/gpu.env.out | 670 ++++++++++++++++++ .../v1/v1.6/v1.6.2/patch_glue_pyspark.json | 15 + .../v1/v1.6/v1.6.2/patch_glue_spark.json | 15 + .../v1/v1.6/v1.6.2/source-version.txt | 1 + 25 files changed, 1918 insertions(+) create mode 100644 build_artifacts/v1/v1.6/v1.6.2/CHANGELOG-cpu.md create mode 100644 build_artifacts/v1/v1.6/v1.6.2/CHANGELOG-gpu.md create mode 100644 build_artifacts/v1/v1.6/v1.6.2/Dockerfile create mode 100644 build_artifacts/v1/v1.6/v1.6.2/RELEASE.md create mode 100644 build_artifacts/v1/v1.6/v1.6.2/cpu.env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.2/cpu.env.out create mode 100644 build_artifacts/v1/v1.6/v1.6.2/dirs/etc/code-editor/code_editor_machine_settings.json create mode 100644 build_artifacts/v1/v1.6/v1.6.2/dirs/etc/code-editor/extensions.txt create mode 100644 build_artifacts/v1/v1.6/v1.6.2/dirs/etc/conda/.condarc create mode 100644 build_artifacts/v1/v1.6/v1.6.2/dirs/etc/jupyter/jupyter_server_config.py create mode 100644 build_artifacts/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf create mode 100644 build_artifacts/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord-common.conf create mode 100644 build_artifacts/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf create mode 100644 build_artifacts/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord.conf create mode 100755 build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/entrypoint-code-editor create mode 100755 build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/entrypoint-jupyter-server create mode 100755 build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/restart-jupyter-server create mode 100755 build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/start-code-editor create mode 100755 build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/start-jupyter-server create mode 100644 build_artifacts/v1/v1.6/v1.6.2/gpu.arg_based_env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.2/gpu.env.in create mode 100644 build_artifacts/v1/v1.6/v1.6.2/gpu.env.out create mode 100644 build_artifacts/v1/v1.6/v1.6.2/patch_glue_pyspark.json create mode 100644 build_artifacts/v1/v1.6/v1.6.2/patch_glue_spark.json create mode 100644 build_artifacts/v1/v1.6/v1.6.2/source-version.txt diff --git a/build_artifacts/v1/v1.6/v1.6.2/CHANGELOG-cpu.md b/build_artifacts/v1/v1.6/v1.6.2/CHANGELOG-cpu.md new file mode 100644 index 00000000..190ec6b4 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/CHANGELOG-cpu.md @@ -0,0 +1,8 @@ +# Change log: 1.6.2(cpu) + +## Upgrades: + +Package | Previous Version | Current Version +---|---|--- +amazon-sagemaker-sql-magic|0.1.0|0.1.1 +amazon_sagemaker_sql_editor|0.1.3|0.1.4 diff --git a/build_artifacts/v1/v1.6/v1.6.2/CHANGELOG-gpu.md b/build_artifacts/v1/v1.6/v1.6.2/CHANGELOG-gpu.md new file mode 100644 index 00000000..05397ccd --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/CHANGELOG-gpu.md @@ -0,0 +1,9 @@ +# Change log: 1.6.2(gpu) + +## Upgrades: + +Package | Previous Version | Current Version +---|---|--- +python|3.10.13|3.10.14 +amazon-sagemaker-sql-magic|0.1.0|0.1.1 +amazon_sagemaker_sql_editor|0.1.3|0.1.4 diff --git a/build_artifacts/v1/v1.6/v1.6.2/Dockerfile b/build_artifacts/v1/v1.6/v1.6.2/Dockerfile new file mode 100644 index 00000000..592f2d08 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/Dockerfile @@ -0,0 +1,182 @@ +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 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 install -y --no-install-recommends sudo gettext-base wget curl unzip git rsync build-essential openssh-client nano cron less && \ + # 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 && \ + : +RUN echo "source /usr/local/bin/_activate_current_env.sh" | tee --append /etc/profile + +# CodeEditor - create server, user data dirs +RUN 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 + +# Merge in OS directory tree contents. +RUN 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 +RUN 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/ + +# 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 + +ARG CONDA_OVERRIDE_CUDA=$CUDA_MAJOR_MINOR_VERSION +RUN micromamba install -y --name base --file /tmp/$ENV_IN_FILENAME && \ + micromamba clean --all --yes --force-pkgs-dirs && \ + rm -rf /tmp/*.in + + +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN sudo ln -s $(which python3) /usr/bin/python + +# Configure CodeEditor - Install extensions and set preferences +RUN \ + 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 +RUN 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" + + +# 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 +RUN 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* + +# 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 +RUN rm -rf /etc/code-editor + +# Create supervisord runtime directory +RUN mkdir -p /var/run/supervisord && \ + chmod a+rw /var/run/supervisord + +USER $MAMBA_USER +ENV PATH="/opt/conda/bin:/opt/conda/condabin:$PATH" +WORKDIR "/home/${NB_USER}" + +# 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/ +RUN 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 +RUN 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 +ENV OPENSSL_MODULES=/opt/conda/lib64/ossl-modules/ + +# Install Kerberos. +# Make sure no dependency is added/updated +RUN 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 +RUN 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 + +ENV SHELL=/bin/bash diff --git a/build_artifacts/v1/v1.6/v1.6.2/RELEASE.md b/build_artifacts/v1/v1.6/v1.6.2/RELEASE.md new file mode 100644 index 00000000..3a0d08f6 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/RELEASE.md @@ -0,0 +1,56 @@ +# Release notes: 1.6.2 + +Package | gpu| cpu +---|---|--- +python|3.10.14|3.10.14 +numpy|1.26.4|1.26.4 +jinja2|3.1.3|3.1.3 +pandas|2.1.4|2.1.4 +altair|5.2.0|5.2.0 +boto3|1.34.51|1.34.51 +ipython|8.22.2|8.22.2 +jupyter-lsp|2.2.4|2.2.4 +jupyterlab|4.1.5|4.1.5 +amazon-codewhisperer-jupyterlab-ext|2.0.1|2.0.1 +jupyter-scheduler|2.5.1|2.5.1 +amazon-sagemaker-jupyter-scheduler|3.0.7|3.0.7 +amazon-sagemaker-sql-magic|0.1.1|0.1.1 +jupyterlab-lsp|5.0.3|5.0.3 +amazon_sagemaker_sql_editor|0.1.4|0.1.4 +scipy|1.11.4|1.11.4 +scikit-learn|1.4.1.post1|1.4.1.post1 +pip|23.3.2|23.3.2 +torchvision|0.15.2|0.15.2 +autogluon|0.8.2|0.8.2 +ipywidgets|8.1.2|8.1.2 +notebook|7.1.2|7.1.2 +aws-glue-sessions|1.0.4|1.0.4 +conda|23.11.0|23.11.0 +fastapi|0.103.2|0.103.2 +langchain|0.1.9|0.1.9 +jupyter-ai|2.11.0|2.11.0 +jupyter-dash|0.4.2|0.4.2 +jupyter-server-proxy|4.1.2|4.1.2 +jupyterlab-git|0.50.0|0.50.0 +keras|2.12.0|2.12.0 +matplotlib|3.8.3|3.8.3 +nodejs|18.19.0|18.19.0 +py-xgboost-gpu|1.7.6| +thrift_sasl|0.4.3|0.4.3 +pyhive|0.7.0|0.7.0 +python-gssapi|1.8.3|1.8.3 +python-lsp-server|1.10.1|1.10.1 +pytorch-gpu|2.0.0| +sagemaker-code-editor|1.0.0|1.0.0 +sagemaker-headless-execution-driver|0.0.12|0.0.12 +sagemaker-jupyterlab-emr-extension|0.1.9|0.1.9 +sagemaker-jupyterlab-extension|0.2.0|0.2.0 +sagemaker-kernel-wrapper|0.0.2|0.0.2 +sagemaker-python-sdk|2.212.0|2.212.0 +sagemaker-studio-analytics-extension|0.0.21|0.0.21 +sasl|0.3.1|0.3.1 +supervisor|4.2.5|4.2.5 +tensorflow|2.12.1|2.12.1 +uvicorn|0.28.1|0.28.1 +pytorch| |2.0.0 +py-xgboost-cpu| |1.7.6 diff --git a/build_artifacts/v1/v1.6/v1.6.2/cpu.env.in b/build_artifacts/v1/v1.6/v1.6.2/cpu.env.in new file mode 100644 index 00000000..b6ea200a --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/cpu.env.in @@ -0,0 +1,51 @@ +# This file is auto-generated. +conda-forge::sagemaker-code-editor[version='>=1.0.0,<1.1.0'] +conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.3,<0.2.0'] +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<0.2.0'] +conda-forge::langchain[version='>=0.1.9,<0.2.0'] +conda-forge::fastapi[version='>=0.103.2,<0.104.0'] +conda-forge::uvicorn[version='>=0.28.1,<0.29.0'] +conda-forge::pytorch[version='>=2.0.0,<2.1.0'] +conda-forge::tensorflow[version='>=2.12.1,<2.13.0'] +conda-forge::python[version='>=3.10.14,<3.11.0'] +conda-forge::pip[version='>=23.3.2,<23.4.0'] +conda-forge::torchvision[version='>=0.15.2,<0.16.0'] +conda-forge::numpy[version='>=1.26.4,<1.27.0'] +conda-forge::pandas[version='>=2.1.4,<2.2.0'] +conda-forge::scikit-learn[version='>=1.4.1.post1,<1.5.0'] +conda-forge::jinja2[version='>=3.1.3,<3.2.0'] +conda-forge::matplotlib[version='>=3.8.3,<3.9.0'] +conda-forge::sagemaker-headless-execution-driver[version='>=0.0.12,<0.1.0'] +conda-forge::ipython[version='>=8.22.2,<8.23.0'] +conda-forge::scipy[version='>=1.11.4,<1.12.0'] +conda-forge::keras[version='>=2.12.0,<2.13.0'] +conda-forge::py-xgboost-cpu[version='>=1.7.6,<1.8.0'] +conda-forge::jupyterlab[version='>=4.1.5,<4.2.0'] +conda-forge::ipywidgets[version='>=8.1.2,<8.2.0'] +conda-forge::conda[version='>=23.11.0,<23.12.0'] +conda-forge::boto3[version='>=1.34.51,<1.35.0'] +conda-forge::sagemaker-python-sdk[version='>=2.212.0,<2.213.0'] +conda-forge::supervisor[version='>=4.2.5,<4.3.0'] +conda-forge::autogluon[version='>=0.8.2,<0.9.0'] +conda-forge::aws-glue-sessions[version='>=1.0.4,<1.1.0'] +conda-forge::sagemaker-kernel-wrapper[version='>=0.0.2,<0.1.0'] +conda-forge::jupyter-ai[version='>=2.11.0,<2.12.0'] +conda-forge::jupyter-scheduler[version='>=2.5.1,<2.6.0'] +conda-forge::nodejs[version='>=18.19.0,<18.20.0'] +conda-forge::jupyter-lsp[version='>=2.2.4,<2.3.0'] +conda-forge::jupyterlab-lsp[version='>=5.0.3,<5.1.0'] +conda-forge::python-lsp-server[version='>=1.10.1,<1.11.0'] +conda-forge::notebook[version='>=7.1.2,<7.2.0'] +conda-forge::altair[version='>=5.2.0,<5.3.0'] +conda-forge::sagemaker-studio-analytics-extension[version='>=0.0.21,<0.1.0'] +conda-forge::jupyter-dash[version='>=0.4.2,<0.5.0'] +conda-forge::sagemaker-jupyterlab-extension[version='>=0.2.0,<0.3.0'] +conda-forge::sagemaker-jupyterlab-emr-extension[version='>=0.1.9,<0.2.0'] +conda-forge::amazon-sagemaker-jupyter-scheduler[version='>=3.0.7,<3.1.0'] +conda-forge::jupyter-server-proxy[version='>=4.1.2,<4.2.0'] +conda-forge::amazon-codewhisperer-jupyterlab-ext[version='>=2.0.1,<2.1.0'] +conda-forge::jupyterlab-git[version='>=0.50.0,<0.51.0'] +conda-forge::sasl[version='>=0.3.1,<0.4.0'] +conda-forge::thrift_sasl[version='>=0.4.3,<0.5.0'] +conda-forge::pyhive[version='>=0.7.0,<0.8.0'] +conda-forge::python-gssapi[version='>=1.8.3,<1.9.0'] diff --git a/build_artifacts/v1/v1.6/v1.6.2/cpu.env.out b/build_artifacts/v1/v1.6/v1.6.2/cpu.env.out new file mode 100644 index 00000000..04ae3aaf --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/cpu.env.out @@ -0,0 +1,662 @@ +# 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-13.2.0-h807b86a_5.conda#d4ff227c46917d3b4565302a2bbb276b +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda#f6f6600d18a4047b54f803cf708b868a +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-18.1.2-h4dfa4b3_0.conda#0118c8a03e3dbbb6b348ef71e94ac7af +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-hd590300_5.conda#69b8b6202a07720f448be700e300ccf4 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 +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.45.2-h2797004_0.conda#866983a220e27a80cb75e85cb30466a1 +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.4.20240210-h59595ed_0.conda#97da8860a0da5413c7c98a3b3838a645 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_1.conda#9d731343cff6ee2e5a25c4a091bf8e2a +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.10.14-hd12c33a_0_cpython.conda#2b4ba962994e8bd4be9ff5b64b75aff2 +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-13.2.0-ha4646dd_5.conda#7a6bd7a12a4bd359e2afe6c0fa1acace +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda#e73e9cfd1191783392131e6238bdb3e9 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda#26322ec5d7712c3ded99dd656142b8ce +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda#6593de64c935768b6bad3e19b3e978be +https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py310h2372a71_0.conda#bd19b3096442ea342c4a5208379660b1 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.3-pyhd8ed1ab_0.conda#ff15f46b0d34308f4d40c1c51df07592 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py310h2372a71_0.conda#f6703fa0214a00bf49d1bef6dc7672d0 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda#e7d8df6509ba635247ff9aea31134262 +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-3.21.12-hfc55251_2.conda#e3a7d4ba09b8dc939b98fef55f539220 +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2 +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff +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.6-h232c23b_1.conda#6853448e9ca1cfd5f15382afd2a6d123 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda#f36ddc11ca46958197a45effdd286e45 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_1.conda#4531d2927578e7e254ff3bcf6457518c +https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda#a7ce56d5757f5b57e7daabe703ade5bb +https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda#425fce3b531bed6ec3c74fab3e5f0a1c +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.5.1-h9b69904_2.tar.bz2#6e016cf4c525d04a7bd038cee53ad3fd +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_1.conda#e358c7c5f6824c272b5034b3816438a7 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda#4c28f3210b30250037a4a627eeee9e0f +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.2-py310h3ec546c_1.tar.bz2#73f6fa50c32ddd985cf5fba7b890a75c +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda#dbf6e2d89137da32fa6670f3bffc024e +https://conda.anaconda.org/conda-forge/noarch/sympy-1.12-pypyh9d50eac_103.conda#2f7d6347d7acf6edf1ac7f2189f44c8f +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.5.0-pyha770c72_0.conda#43e7d9e50261fb11deb76e17d8431aac +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.0.0-cpu_mkl_py310h402c8e3_101.conda#b351ffe4cd1b8337abfa88833cf60f25 +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.1-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7 +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-py310h2372a71_0.conda#f20cd4d9c1f4a8377d0818c819918bbb +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2#d1e1eb7e21a9e2c74279d87dafb68156 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.5.0-hd8ed1ab_0.conda#b3c594fde1a80a1fc3eb9cc4a5dfe392 +https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda#3ce482ec3066e6d809dbbb1d1679f215 +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-py310h2372a71_0.conda#d4c91d19e4f2f18b64753ac660edad79 +https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py310h2372a71_0.conda#4ad35c8f6a64a6ab708780dad603aef4 +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.3-py310h2372a71_1.conda#dd21c88dfec3253cb9888c0e93fa5cd1 +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.0.9-py310hd8f1fbe_9.conda#e2047ad2af52c01845f58b580c6cbd5c +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.18-pyhd8ed1ab_0.conda#bf61cfd2a7f212efba378167a07d4a6a +https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.51-pyge310_1234567_0.conda#f8980578a765dd28417953dddfefe5bc +https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py310h2372a71_0.conda#d9dc9c45bdc2b38403e6b388581e92f0 +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.12.1-pyhd8ed1ab_0.conda#045560daef58c75a759c2638fbdb5c6a +https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda#0bb492cca54017ea314b809b1ee3a176 +https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a +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.0-pyhd8ed1ab_0.conda#c5d3907ad8bd7bf557521a1833cf7e6d +https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 +https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.20.0-py310h2372a71_0.conda#e7f8dc8c62e136573c84116a5e743aed +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda#98206ea9954216ee7540f0c773f2104d +https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py310hcc13569_0.conda#410f7e83992a591e492c25049a859254 +https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 +https://conda.anaconda.org/conda-forge/noarch/altair-5.2.0-pyhd8ed1ab_1.conda#1aebb1cef46d9cb76e0d38eed822348a +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.1-pyhd8ed1ab_0.conda#a41cafc1fb653ce0e48b9310226e90fd +https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.51-pyhd8ed1ab_0.conda#bd19311f73611626b31afc608af438cd +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.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda#490730480d76cf9c8f8f2849719c6e2b +https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49 +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda#0876280e409658fc6f9e75d035960333 +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.4-pyhd8ed1ab_0.conda#20f047662cf4fa8b97836111df87dbb4 +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.2-pyhd8ed1ab_0.conda#af5fa2d2186003472e766a23c46cae04 +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.1-py310hc6cd4ac_0.conda#1ea80564b80390fa25da16e4211eb801 +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.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094 +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.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de +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.42-pyha770c72_0.conda#0bf64bf10eee21f46ac83c161917fa86 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda#140a7f159396547e9799aa98f9f0742e +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.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883 +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.22.2-pyh707e725_0.conda#f0abe827c8a7c6d91bccdf90cb1fbee3 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda#a0bc3eec34b0fab84be6b2da94e98e20 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py310hff52083_0.conda#cb92c27600d5716fd526a206aa43342c +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/zeromq-4.3.5-h59595ed_1.conda#7fc9d3288d2420bb3637647621018000 +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py310h795f18f_0.conda#fa09f98f3acfd3f5de30bd2d27d5cb7f +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4-py310h2372a71_0.conda#48f39c24349d9ae5c8e8873c42fb6170 +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.1-pyhd8ed1ab_0.conda#c03972cfce69ad913d520c652e5ed908 +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.3-pyhd33586a_0.conda#e0deff12c601ce5cb7476f93718f3168 +https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda#45846a970e71ac98fd327da5d40a0a2c +https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310h2372a71_4.conda#68ee85860502d53c8cbfa0e4cef0f6cb +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-2.4-py310hff52083_3.conda#08ec1463dbc5c806a32fc431874032ca +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-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.17.3-pyhd8ed1ab_0.conda#7a709748e93f0b2c33d6b5b676b6d9d0 +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.6.3-pyhd8ed1ab_1.conda#2ac0d00a0fb3f1a4c81c460ba56bb23b +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-69.2.0-pyhd8ed1ab_0.conda#da214ecd521a720a9d521c68047682dc +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.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.3-pyhd8ed1ab_0.conda#ca3d437c0ef2e87f63d085822c74c49a +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.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.3-pyhd8ed1ab_0.conda#0cab42b4917e71df9dc2224b9940ef19 +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.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2 +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda#50ad31e07d706aae88b14a4ac9c73f23 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.10.0-pyhd8ed1ab_0.conda#016d56f5d81b9364d1da5f4895a2a9f8 +https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.4-pyhd8ed1ab_0.conda#91f93e1ebf6535be518715432d89fd92 +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.24-pyhd8ed1ab_0.conda#fc9780a517b51ea3798fc011c17ffd51 +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.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda#327bfe1c99154f02259d29810bd70afc +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.5-pyhd8ed1ab_0.conda#04b1ca9d7ac414b3f5c3fb16066c6861 +https://conda.anaconda.org/conda-forge/noarch/amazon-codewhisperer-jupyterlab-ext-2.0.1-pyhd8ed1ab_0.conda#ab9bb3e630d872e9d38c8c18a0cba7b4 +https://conda.anaconda.org/conda-forge/noarch/aws-embedded-metrics-3.2.0-pyhd8ed1ab_0.conda#e1c511655b6e9eb0265c9715c7fa410f +https://conda.anaconda.org/conda-forge/noarch/croniter-1.4.1-pyhd8ed1ab_0.conda#7a4568626f8d6e7c63dcb25d5501a967 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.12.3-ha770c72_0.conda#cdea66892b19a454f939487318b6c517 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.3-hd8ed1ab_0.conda#1344bbd74e8bcd1acdd8ec0824e9840c +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.3-hd8ed1ab_0.conda#b0c9bbbe54a11a6db3bec51eb0ef0281 +https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.14-py310h2372a71_0.conda#6aca52bad315e6b841a32d6b3b0cdb82 +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.3-py310hc6cd4ac_0.conda#fb478fd83c001cbf8ab01c29b857262e +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.49-py310h2372a71_1.conda#cdeaf46006791202a7597bf2a0e6ad9e +https://conda.anaconda.org/conda-forge/noarch/jupyter_scheduler-2.5.1-pyha770c72_0.conda#3d250834fde789b6cb96dc11a43d1df2 +https://conda.anaconda.org/conda-forge/noarch/jupyter-scheduler-2.5.1-hd8ed1ab_0.conda#bb6463ad5d244321f64a231ba9b6cf2a +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-scheduler-3.0.7-pyhd8ed1ab_1.conda#ee635c11a576839138a93fc46e0f389b +https://conda.anaconda.org/conda-forge/linux-64/cryptography-42.0.5-py310h75e40e8_0.conda#47e6ea7109182e9e48f8c5839f1bded7 +https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda#1482e77f87c6a702a7e05ef22c9b197b +https://conda.anaconda.org/conda-forge/noarch/pyathena-3.5.1-pyhd8ed1ab_0.conda#1c302abfabf4d08375990de11ff98242 +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-py310hcfd0673_0.conda#d6df7beac08573177dd9a6a560d1d180 +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.0-pyhd8ed1ab_0.conda#4501c96a5e9f18239ae6e5944604d493 +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/sqlparse-0.4.4-pyhd8ed1ab_0.conda#2e2f31b3b1c866c29636377e14f8c4c6 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-magic-0.1.1-pyhd8ed1ab_0.conda#2cbf8f2847bc726efb567b62e6913410 +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.4-pyhd8ed1ab_0.conda#d9aa21e693982b6ca0341a9bf41db4a8 +https://conda.anaconda.org/conda-forge/linux-64/ansi2html-1.9.1-py310hff52083_0.conda#2213ea76fd340e7c848c1be0cbdfc579 +https://conda.anaconda.org/conda-forge/noarch/textwrap3-0.9.2-py_0.tar.bz2#1f84e74e9dbe2e5ae38c58496bffaca8 +https://conda.anaconda.org/conda-forge/noarch/ansiwrap-0.8.4-py_0.tar.bz2#f09557e2a7cbd2470a2ab6353000cebd +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.5.0-h27087fc_0.tar.bz2#a08150fd2298460cd1fcccf626305642 +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.0.3-py310hff52083_0.conda#7d18b84331cda8271c9ed67d1ca05d47 +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.43-hcad00b1_0.conda#8292dea9e022d9610a11fce5e0896ed8 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.0-hf2295e7_1.conda#0725f6081030c29b109088639824ff90 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b +https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 +https://conda.anaconda.org/conda-forge/noarch/autogluon.common-0.8.2-pyhd8ed1ab_4.conda#e24166dee3b1430877a324715caf8f5d +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py310hd41b1e2_0.conda#85d2aaa7af046528d339da1e813c3a9f +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.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.conda#d47dee1856d9cb955b8076eeff304a5b +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda#72637c58d36d9475fda24700c9796f19 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.50.0-py310h2372a71_0.conda#85c48c98c9f2b72b384fb11c9004920b +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-py310hd41b1e2_1.conda#b8d67603d43b23ce7e988a5d81a7ab79 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda#323e90742f0f48fc22bea908735f55e6 +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.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda#82bf6f63eb15ef719b556b63feec3a77 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 +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.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea +https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py310h582fbeb_1.conda#cf62f6cff3536eafaaa0c740b0bf7465 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.3-py310h62c0568_0.conda#4a7296c0273eb01dfbed728dd6a6725a +https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py310hb13e2d6_0.conda#f0063b2885bfae11324a00a693f88781 +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.4.0-pyhc1e730c_0.conda#b296278eef667c673bf51de6535bad88 +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.1.post1-py310h1fdf081_0.conda#2706ad1a5f6cbad8b57d4094889d1e33 +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.2-pyhd8ed1ab_0.conda#2b8dfb969f984497f3f98409a9545776 +https://conda.anaconda.org/conda-forge/linux-64/autogluon.core-0.8.2-light_py310h2d11d36_6.conda#9de8e45568202a91466af4d849c7e919 +https://conda.anaconda.org/conda-forge/noarch/autogluon.features-0.8.2-pyhd8ed1ab_3.conda#c827eccfb0ddb1484d0e00f45242b8f8 +https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py310hff52083_1.conda#a677136a83b823803d2f92045f885be2 +https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2#a556fa60840fcb9dd739d186bfd252f7 +https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca +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/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/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.22.0-pyhd8ed1ab_0.conda#c4dbdc593adfa072d40df9b1dd128444 +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.16-py310h2372a71_0.conda#efdca5c3783dae00552f389bd7b56c3d +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.0-hd590300_0.conda#71b89db63b5b504e7afc8ad901172e1e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.1-hc309b26_1.conda#cc09293a2c2b7fd77aff284f370c12c0 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h4d4d85c_2.conda#9ca99452635fe03eb5fa937f5ae604b0 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.49-h06160fa_0.conda#1d78349eb26366ecc034a4afe70a8534 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-he9a53bd_1.conda#8a24e5820f4a0ffd2ed9c4722cd5d7ca +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.11-h00aa349_4.conda#cb932dff7328ff620ce8059c9968b095 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h4d4d85c_1.conda#eba092fc6de212a01de0065f38fe8bbb +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.3-h28f7589_1.conda#97503d3e565004697f1651753aa95b9e +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h4d4d85c_1.conda#30f9df85ce23cd14faa9a4dfa50cca2b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.1-h2e3709c_4.conda#2cf21b1cbc1c096a28ffa2892257a2c1 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.3-hb447be9_1.conda#c520669eb0be9269a5f0d8ef62531882 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.14-hf3aad02_1.conda#a968ffa7e9fe0c257628033d393e512f +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.21.0-hb942446_5.conda#07d92ed5403ad7b5c66ffd7d5b8f7e57 +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.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.27.0-hd590300_0.conda#f6afff0e9ee08d2f1b897881a4f38cdb +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.6.0-hca28451_0.conda#704739398d858872cb91610f49f0ef29 +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-h85b1a90_19.conda#0605d3d60857fc07bd6a11e878fe0f08 +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.6.0-h6f12383_0.tar.bz2#b31f3565cb84435407594e548a2fb7b2 +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda#d1db1b8be7c3a8983dcbbbfe4f0765de +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/re2-2023.03.02-h8c504da_0.conda#206f8fa808748f6e90599c3368a1114e +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.54.3-hb20ce57_0.conda#7af7c59ab24db007dfd82e0a3a343f66 +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hac9eb74_1.conda#0dee716254497604762957076ac76540 +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.18.1-h8fd135c_2.conda#bbf65f7688512872f063810623b755dc +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/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 +https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h2f23424_1.conda#9571eb3eb0f7fe8b59956a7786babbcd +https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hd590300_0.conda#8feeecae73aeef0a2985af46b5a2c1df +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda#aeffb7c06b5f65e55e6c637408dc4100 +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda#39aa3b356d10d7e5add0c540945a0944 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-12.0.1-hb87d912_8_cpu.conda#3f3b11398fe79b578e3c44dd00a44e4a +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-12.0.1-py310h0576679_8_cpu.conda#27f55ccfd038d6665facb04a0aa572c5 +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.4.1-py310h2372a71_0.conda#b631b889b0b4bc2fca7b8b977ca484b2 +https://conda.anaconda.org/conda-forge/noarch/datasets-2.18.0-pyhd8ed1ab_0.conda#3482c9b417757df305ff4e3a7e4b7c10 +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/gdown-5.1.0-pyhd8ed1ab_0.conda#6f880647c0270648f710f334c60bc76c +https://conda.anaconda.org/conda-forge/linux-64/libsentencepiece-0.1.99-h180e1df_0.conda#056064bd3ef47439e3e78fac28449fbf +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-python-0.1.99-py310hebdb9f0_0.conda#b3a5908ac3912b26d6a8b77faebe6eca +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-spm-0.1.99-h180e1df_0.conda#c67cc412366709c1c3225f19f8aed63b +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-0.1.99-hff52083_0.conda#578969452de13e4ad69edf18ee2b3d5a +https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyhc8e2a94_3.tar.bz2#a362b2124b06aad102e2ee4581acee7d +https://conda.anaconda.org/conda-forge/linux-64/regex-2023.12.25-py310h2372a71_0.conda#4a9ba4e7af60356e63b38a6d419acad6 +https://conda.anaconda.org/conda-forge/noarch/sacremoses-0.0.53-pyhd8ed1ab_0.tar.bz2#76c3c384fe0941f1b08193736e8e277a +https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.4.2-py310hcb5633a_0.conda#a1e978544ef765ef9ac2f2320e43bacd +https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.13.3-py310he1f1126_0.conda#ea2281fe0bf70c1c83393565342a8a8c +https://conda.anaconda.org/conda-forge/noarch/transformers-4.31.0-pyhd8ed1ab_0.conda#8cccf394a00fbfef2f3d6028422ae5cc +https://conda.anaconda.org/conda-forge/noarch/nlpaug-1.1.11-pyhd8ed1ab_1.conda#4e231f0fa7db9388cf4c8539d623ac62 +https://conda.anaconda.org/conda-forge/noarch/nltk-3.8.1-pyhd8ed1ab_0.conda#518c769ca4273480a99be6e559a26192 +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.2.3-pyhd8ed1ab_0.conda#cebc9f0fc6eebdcc368bb30ba30f2fd5 +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.43.0-pyhd8ed1ab_0.conda#6e43a94e0ee67523b5e781f0faba5c45 +https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda#8591c748f98dcc02253003533bc2e4b1 +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/protobuf-4.21.12-py310heca2aa9_0.conda#90bb7e1b729c4b50272cf78be97ab912 +https://conda.anaconda.org/conda-forge/noarch/pytesseract-0.3.10-pyhd8ed1ab_0.tar.bz2#04f4becceb0c032c5dbdae6ad18bd95e +https://conda.anaconda.org/conda-forge/noarch/lightning-utilities-0.11.1-pyhd8ed1ab_0.conda#b3e6a8dac4cdfd01c23211c7fb50bfee +https://conda.anaconda.org/conda-forge/noarch/torchmetrics-1.0.3-pyhd8ed1ab_0.conda#4e8849ba2fa06393b7ab5a50c6a4256c +https://conda.anaconda.org/conda-forge/noarch/pytorch-lightning-2.0.9-pyhd8ed1ab_0.conda#3e96ed529412338e38af9004e22267de +https://conda.anaconda.org/conda-forge/noarch/pytorch-metric-learning-1.7.3-pyhd8ed1ab_0.conda#139aa590e345e10f4572812a329806f4 +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py310h2372a71_0.conda#21362970a6fea90ca507c253c20465f2 +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.3.1-pyhd8ed1ab_0.conda#52dd56ce3afa6a52c2f3d3116875ff32 +https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda#b8853659d596f967c661f544dd89ede7 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h1f7b6fc_1.conda#be6f0382440ccbf9fb01bb19ab1f1fc0 +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 +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.0.7-h0b41bf4_0.conda#49e8329110001f04923fe7e864990b0c +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.13.2-hb4ffafa_0.conda#976aaf1afd331ed7346d649da5c5c1ee +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.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f +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/libavif-0.11.1-h8182462_2.conda#41c399ed4c439e37b844c24ab5621b5a +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-h59595ed_0.conda#fd486bffbf0d6841cf1456a8f2e3a995 +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.8.12-py310hc929067_0.conda#61caf809753610c4c87d583765b1d478 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.2.12-pyhd8ed1ab_0.conda#d5c8bef52be4e70c48b1400eec3eecc8 +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.19.3-py310h769672d_2.tar.bz2#c0391107b0cd0010708d6969ed759e8b +https://conda.anaconda.org/conda-forge/noarch/seqeval-1.2.2-pyhd3deb0d_0.tar.bz2#d4436c8a8b9fb6d60fe4e7b9f097f9bb +https://conda.anaconda.org/conda-forge/noarch/cachetools-5.3.3-pyhd8ed1ab_0.conda#cd4c26c702a9bcdc70ff05b609ddacbe +https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.5.1-pyhd8ed1ab_0.conda#fb1a800972b072aa4d16450983c81418 +https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.3.0-pyhd8ed1ab_0.conda#26db749166cdca55e5ef1ffdc7767d0e +https://conda.anaconda.org/conda-forge/noarch/pyopenssl-24.0.0-pyhd8ed1ab_0.conda#b50aec2c744a5c493c09cce9e2e7533e +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.29.0-pyhca7485f_0.conda#a12a2abc807053bc378b218a2a525c7d +https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda#550da20b2c2e38be9cc44bb819fda5d5 +https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_1.conda#74f76d4868dbba5870f2cf1d9b12d8f3 +https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868 +https://conda.anaconda.org/conda-forge/noarch/requests-oauthlib-2.0.0-pyhd8ed1ab_0.conda#87ce3f09ae7e1d3d0f748a1a634ea3b7 +https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.0.0-pyhd8ed1ab_1.conda#569e62e95b01b53e4ec7d9abe83b7385 +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.54.3-py310heca2aa9_0.conda#7c82ea96968976ee2eb66a52f2decd8e +https://conda.anaconda.org/conda-forge/linux-64/tensorboard-data-server-0.7.0-py310h75e40e8_1.conda#e562478facfa960813945204273ecac5 +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.1-pyhd8ed1ab_0.conda#af8d825d93dbe6331ee6d61c69869ca0 +https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.12.3-pyhd8ed1ab_0.conda#429d39f86cef8d0859d639804ae67aaf +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.15.2-cpu_py310hb9e6163_1.conda#952305ae6b751a80284e8d4c9115ed4b +https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 +https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-0.8.2-pyha770c72_5.conda#a8ca42e2b4ee0fd6dce729bc226dd0cc +https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda#669cd7065794633b9e64e6a9612ec700 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda#e7ba12deb7020dd080c6c70e7b6f6a3d +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_1.conda#6185f640c43843e5ad6fd1c5372c3f80 +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.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b +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-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 +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.52.1-ha41ecd1_0.conda#5c0cc002bf4eaa56448b0729efd6e96c +https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h280cfa0_4.conda#410f86e58e880dcc7b0e910a8e89c05c +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-he3f83f7_1.conda#03bd1ddcc942867a19528877143b9852 +https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 +https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb +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.3-py310hff52083_2.conda#e063c808181593406d4d3d321ee7ffff +https://conda.anaconda.org/conda-forge/noarch/fastcore-1.5.29-pyhd8ed1ab_0.conda#155c898255baddd6b2cb95894791eeca +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-py310hff52083_0.conda#a20390cd5f5fe4d8c5f6f2e7fa6c54cf +https://conda.anaconda.org/conda-forge/linux-64/cymem-2.0.8-py310hc6cd4ac_1.conda#8e4dada89998e0cb4f97b835dff6dc7e +https://conda.anaconda.org/conda-forge/noarch/langcodes-3.3.0-pyhd8ed1ab_0.tar.bz2#aacac9c3804912c38087d1c295708493 +https://conda.anaconda.org/conda-forge/linux-64/murmurhash-1.0.10-py310hc6cd4ac_1.conda#2b0c4b4532c601ece4537cc7f3558464 +https://conda.anaconda.org/conda-forge/noarch/smart_open-5.2.1-pyhd8ed1ab_0.tar.bz2#c7a838c38e38c82edde371a9054e6c92 +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/pathy-0.10.2-pyhd8ed1ab_0.conda#69d84b5c17aea4d7350f3536bcde7296 +https://conda.anaconda.org/conda-forge/linux-64/preshed-3.0.9-py310hc6cd4ac_1.conda#a2a27c2eafd1e280555ae954df088fc3 +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-py310hc6cd4ac_1.conda#7cd9d4be6f55ccb53cbd7125f2e6a0fb +https://conda.anaconda.org/conda-forge/linux-64/confection-0.1.4-py310h17c5347_0.conda#72b63825959fc040cab8ed0f12f2040e +https://conda.anaconda.org/conda-forge/linux-64/cython-blis-0.7.10-py310h1f7b6fc_2.conda#6a0165d9e76c443ed66d2e8b733aa133 +https://conda.anaconda.org/conda-forge/linux-64/wasabi-1.1.2-py310hff52083_0.conda#8ed9f04ed8e1373063cd03b9d5c86ce3 +https://conda.anaconda.org/conda-forge/linux-64/thinc-8.2.2-py310hcb52e73_0.conda#550b37537f05740f1c9a38d63d843b3c +https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.16.0-pyhd8ed1ab_0.conda#8d75941f621306e58b7642394a8bad87 +https://conda.anaconda.org/conda-forge/noarch/weasel-0.3.4-pyhd8ed1ab_0.conda#a53c82e61a1173c887e84fc50842eec4 +https://conda.anaconda.org/conda-forge/linux-64/spacy-3.7.2-py310hcb52e73_0.conda#c966d5a09c130d0bcfce4126643ddc74 +https://conda.anaconda.org/conda-forge/noarch/fastai-2.7.14-pyhd8ed1ab_0.conda#9854ef355cc4bd1e2aac40998f721fed +https://conda.anaconda.org/conda-forge/linux-64/lightgbm-3.3.5-py310heca2aa9_0.conda#d2595ddab22cbca7409b28e3105afd0a +https://conda.anaconda.org/conda-forge/linux-64/libxgboost-1.7.6-cpu_h6728c87_6.conda#9183d0551aa5e5be36c670e701b287a3 +https://conda.anaconda.org/conda-forge/linux-64/py-xgboost-1.7.6-cpu_py310h78d450f_6.conda#dcc61476de611ac5673698495b607109 +https://conda.anaconda.org/conda-forge/linux-64/xgboost-1.7.6-cpu_py310h78d450f_6.conda#061a099093fd2a97ae506f65dc87baf2 +https://conda.anaconda.org/conda-forge/noarch/autogluon.tabular-0.8.2-pyha770c72_4.conda#17fad1cdb563ddad16ab0ba4c085bcb3 +https://conda.anaconda.org/conda-forge/noarch/gluonts-0.13.7-pyhd8ed1ab_0.conda#1684b578508d9918b2dcadd4c365c61a +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.42.0-py310h1b8f574_1.conda#e2a5e9f92629c8e4c8611883a35745b4 +https://conda.anaconda.org/conda-forge/linux-64/numba-0.59.0-py310h7dc5dd1_1.conda#966bc2bc095723310d746106e7c91791 +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.7.3-pyhd8ed1ab_0.conda#7a2b34b4c9bff2545200b3746da70f11 +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.1-py310h1f7b6fc_0.conda#d98c3749dd466513dd921f5818f4b001 +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.9.0-py310hc6cd4ac_0.conda#cab4b543b897dcf548edb3018fe45f9e +https://conda.anaconda.org/conda-forge/noarch/autogluon.timeseries-0.8.2-pyhd8ed1ab_4.conda#a64157275daf72a557fe4a9d843a9e1d +https://conda.anaconda.org/conda-forge/noarch/autogluon-0.8.2-pyhd8ed1ab_4.conda#7ff9ac51e09bd5991970a7df53b4bee6 +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.10-pyhd8ed1ab_0.conda#16b73b2c4ff7dda8bbecf88aadfe2027 +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.10-pyhd8ed1ab_0.conda#521f489e3babeddeec638c2add7e9e64 +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.2-pyhd8ed1ab_0.conda#67f86478c78637f68c1f3858973021f2 +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda#85a2189ecd2fcdd86e92b2d4ea8fe461 +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.2-pyhd8ed1ab_0.conda#fa781da51f05c9211b75b5e7bcff8136 +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.1-pyha770c72_0.conda#5528a3eda283b421055c89bface19a1c +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.4-pyhd8ed1ab_0.conda#169c4c0a396d83164215f54024031ec8 +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.1.2-py310hcb5633a_0.conda#6dd3d49f65ceb05dbd527a5b6301611b +https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda#4eccaeba205f0aed9ac3a9ea58568ca3 +https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda#17064acba08d3686f1135b5ec1b32b12 +https://conda.anaconda.org/conda-forge/linux-64/black-24.3.0-py310hff52083_0.conda#12960fe9118cbb71fb802a52870f7874 +https://conda.anaconda.org/conda-forge/noarch/boltons-23.1.1-pyhd8ed1ab_0.conda#56febe65315cc388a5d20adf2b39a74d +https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda#35ef8bc24bd34074ebae3c943d551728 +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h2aa1ff5_1.conda#3bf887827d1968275978361a6e405e4f +https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.28-hfc55251_1.conda#84271c00f5804bbc1ef7c525d1e4f405 +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-py310h39ff949_0.conda#37f8aa15b73c4691eeec15caf45aab25 +https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.1.0-pyhd8ed1ab_0.conda#304dc78ad6e52e0fd663df1d484c1531 +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py310h1275a96_0.conda#54698ba13cd3494547b289cd86a2176a +https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda#38253361efb303deead3eab39ae9269b +https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda#8a3ae7f6318376aa08ea753367bb7dd6 +https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda#bbdb409974cd6cb30071b1d978302726 +https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda#bfdb7c5c6ad1077c82a69a8642c87aff +https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.0.2-py310hff52083_0.conda#4837faab0d3e665df57fef662148c6a3 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 +https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py310h2372a71_0.conda#0adaac9a86d59adae2bc86b3cdef2df1 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py310h2372a71_0.conda#dcf6d2535586c77b31425ed835610c54 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py310h2372a71_0.conda#50b7d9b39099cdbabf65bf27df73a793 +https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda#08316d001eca8854392cf2837828ea11 +https://conda.anaconda.org/conda-forge/linux-64/conda-23.11.0-py310hff52083_1.conda#d5278ac990c67d5ed51584998aa16c5a +https://conda.anaconda.org/conda-forge/noarch/contextlib2-21.6.0-pyhd8ed1ab_0.tar.bz2#5b26a831440be04c39531a8ce20f5d71 +https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.4-h7f98852_1002.tar.bz2#e728e874159b042d92b90238a3cb0dc2 +https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.27-h54b06d7_7.conda#dce22f70b4e5a407ce88f2be046f4ceb +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.1.2-pyhd8ed1ab_0.tar.bz2#3c3de74912f11d2b590184f03c7cd09b +https://conda.anaconda.org/conda-forge/noarch/flask-3.0.2-pyhd8ed1ab_0.conda#7f88df670921cc31c309719e30c22021 +https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2#a11f356d6f93b74b4a84e9501afd48b4 +https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda#016bd4f61878a57f19c8cd744708a1f1 +https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.21.1-pyhd8ed1ab_0.conda#ae303aa7dc100bc3bc01b5a3b7ca3567 +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.4-pyhd8ed1ab_0.conda#1190a6456351690603b2d64d1cbf5b4a +https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d +https://conda.anaconda.org/conda-forge/noarch/deepmerge-1.1.1-pyhd8ed1ab_0.conda#d91c3d8ac3f2ab36ca4ea32ac42f731e +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py310hd41b1e2_0.conda#dc5263dcaa1347e5a456ead3537be27d +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.3.1-pyhd8ed1ab_0.conda#b0ad5ef44595ef37c3008fc04ecd2abf +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py310h2372a71_3.conda#a29a0825809cd3a780097472be176618 +https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda#a5e792523b028b06d7ce6e65a6cd4a33 +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.0.0-pyhd8ed1ab_0.conda#aec5f308cb9055e83c59afecd5fcb58a +https://conda.anaconda.org/conda-forge/noarch/docstring-to-markdown-0.15-pyhd8ed1ab_0.conda#a3a1e6af2926a3affcd6f2072871f551 +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-1.7.4-hf47d654_0_cpu.conda#8fd132db65c8d51caea2ae7cde4b450c +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-avx2-1.7.4-h1234567_0_cpu.conda#7eb943c067a63c4d8af526c2df9f2c1b +https://conda.anaconda.org/conda-forge/linux-64/faiss-1.7.4-py310h9ed8947_0_cpu.conda#99665c710087f7a964915b5ea0097465 +https://conda.anaconda.org/conda-forge/linux-64/faiss-cpu-1.7.4-h718b53a_0.conda#7a9e6f72c36ff5a5eeb61660fd6fdf8d +https://conda.anaconda.org/conda-forge/noarch/starlette-0.27.0-pyhd8ed1ab_0.conda#6facb6fc201d334257db8004439705d3 +https://conda.anaconda.org/conda-forge/noarch/fastapi-0.103.2-pyhd8ed1ab_0.conda#fb243b6796ab7d64b14e00c279620c04 +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-23.5.26-h59595ed_1.conda#913a1c6fd00b66f33392a129e835ceca +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda#650a7807e689642dddd3590eb817beed +https://conda.anaconda.org/conda-forge/noarch/gast-0.4.0-pyh9f0ad1d_0.tar.bz2#42323c77b73462199fca93bc8ac9279d +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.42-pyhd8ed1ab_0.conda#6bc8e496351bafd761c0922c3ebd989a +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.0-hde27a5a_1.conda#939ddd853b1d98bf6fd22cc0adeda317 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.0-hf2295e7_1.conda#d3bcc5c186f78feba6f39ea047c35950 +https://conda.anaconda.org/conda-forge/noarch/google-pasta-0.2.0-pyh8c360ce_0.tar.bz2#26e27d7d3d7fe2336b543dd8e0f12cbf +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.9-h98fc4e7_1.conda#f502076ed4db50d9ee5c907036a5a172 +https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 +https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f +https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.9-hfa15dee_1.conda#b66ddd883308a836ed86c247231aab82 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda#d471a5c3abc984b662d9bae3bb7fd8a5 +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.10.0-nompi_py310h65828d5_101.conda#44c185c5b133ad6d1d449839407aa863 +https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.3.2-py310hcc13569_0.conda#1ad84020b1ab816d7ab3f3d0859faf40 +https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.14-cpu_py310h67d73b5_1.conda#392c325994aa96727edd0069a0620e31 +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.3.0-pyhc1e730c_2.conda#7a94ac68b892daa9f17ae8a52b31ed81 +https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.3.0-hd8ed1ab_2.conda#ab262acd95cb73f3ed9426cc4204ac3a +https://conda.anaconda.org/conda-forge/noarch/jax-0.4.20-pyhd8ed1ab_0.conda#5abbd950bd427bc9d929e35ecbf814d1 +https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 +https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 +https://conda.anaconda.org/conda-forge/linux-64/orjson-3.9.15-py310hcb5633a_0.conda#da1b180ccf1dce5d87d145ad2fc14e5a +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.31-pyhd8ed1ab_0.conda#031cb2cb0387f028379c1a58217fe929 +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.33-pyhd8ed1ab_0.conda#a0454a06df0bf2de641c21ac1e455530 +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.29-pyhd8ed1ab_0.conda#7dfaffe1c95ee7718624be16cb57dfbd +https://conda.anaconda.org/conda-forge/noarch/langchain-0.1.9-pyhd8ed1ab_0.conda#2ad37682610ac2643b46e4cc0215f410 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.11.0-pyhd8ed1ab_0.conda#aee09f3966655f81d05fcfb5bae3612d +https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.5.2-py310h47bb294_0.conda#a83ae186d0a4b78c98b32781d7c15d48 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.11.0-pyhd8ed1ab_0.conda#e8ab7975630aff4624d3ed1fa32ac552 +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.1.2-pyhd8ed1ab_0.conda#3671520b52215a5a084de08003e6d8cd +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.0-pyhd8ed1ab_1.conda#5020cacc18e3d5f62a81513f26ac2cac +https://conda.anaconda.org/conda-forge/noarch/keras-2.12.0-pyhd8ed1ab_0.conda#e6e18b33e8d62200099f2eed98a263b6 +https://conda.anaconda.org/conda-forge/noarch/keras-preprocessing-1.1.2-pyhd8ed1ab_0.tar.bz2#a79b00989a0d89791021902f37fe2f9e +https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef +https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h5d6823c_5.conda#2d694a9ffdcc30e89dea34a8dcdab6ae +https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_h127d8a8_5.conda#09b94dd3a7e304df5b83176239347920 +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda#4d18d86916705d352d5f4adfb7f0edd3 +https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.6-h088ca5b_0.conda#99dca02fb74a8dfa3653c6673674f90c +https://conda.anaconda.org/conda-forge/linux-64/libsecret-0.18.8-h329b89f_2.tar.bz2#9d6698e3c9585a75156d86f7ef229093 +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.4-h59595ed_0.conda#3f1017b4141e943d9bc8739237f749e8 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda#3366af27f0b593544a6cd453c7932ac5 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.41-hd590300_0.conda#81f740407b45e3f9047b3174fa94eb9e +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.7.0-h662e7e4_0.conda#b32c0da42b1f24a98577bb3d7fc0b995 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py310hc6cd4ac_0.conda#68d5bfccaba2d89a7812098dd3966d9b +https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda#ef5333594a958b25912002886b82b253 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda#e87530d1b12dd7f4e0f856dc07358d60 +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.98-h1d7d5a4_0.conda#54b56c2fdf973656b748e0378900ec13 +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda#f4fe7a6e3d7c78c9de048ea9dda21690 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.3-py310hff52083_0.conda#e91d183a307d7bd667003291f690cbb0 +https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.19.0-hb753e55_0.conda#0b4a67051e3b3812818ccf2f4ee2fd4e +https://conda.anaconda.org/conda-forge/noarch/papermill-2.5.0-pyhd8ed1ab_0.conda#e6e69b90afd3d0597da8f1f74cc4bd58 +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/linux-64/py-xgboost-cpu-1.7.6-py310h78d450f_6.conda#6c53cd648ba083e1bc7ea5dac8ec1e2c +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-py310hc6cd4ac_0.conda#8c6970b9c27073d82bcf757ac644e6cd +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-py310h98feede_1.conda#0329fda0ebbccee7b3e9dbf4a377d0ce +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda#37c47ea93ef00dd80d880fc4ba21256a +https://conda.anaconda.org/conda-forge/noarch/pylint-3.0.4-pyhd8ed1ab_0.conda#d536ee47166d8984c6acd8114ac26cf1 +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.9.1-py310h2372a71_2.conda#0a99339b277686c7d824abf9de396901 +https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.7-pyh59ac667_0.conda#24c1a37849fcd4c74923a38b029b208f +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py310h98feede_0.conda#a5ea028f63386c53a2b8ff4d09065259 +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.10.1-pyhd8ed1ab_0.conda#1371f9394b20fd1fe7419a2aa9b38888 +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.5-pyhd8ed1ab_0.conda#e62ea65e1979c18c4c9034567e7105c5 +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.10.1-pyhd8ed1ab_0.conda#15b849d7f03b7580a88a3f887db5ad40 +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.0.0-hcb28a07_0.conda#f53005657267d6b1233c2852fcb84707 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.12-pyhd8ed1ab_0.conda#fe8919032eb413e76a7802f013a536ee +https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py310hcb5633a_0.conda#892e912e08ba834aa77ff25f983a4e9e +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.14-pyhd8ed1ab_0.conda#27319d665d06aa5c25b6a07d04a4256f +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-emr-extension-0.1.9-pyhd8ed1ab_0.conda#589f97989a6db8b2f21a53881fdd1d97 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-0.2.0-pyhd8ed1ab_0.conda#9331340b5a844f5ac2c74eda353aa23e +https://conda.anaconda.org/conda-forge/noarch/sagemaker-kernel-wrapper-0.0.2-pyhd8ed1ab_0.conda#99480997ca2429b75169c896cc988cdb +https://conda.anaconda.org/conda-forge/noarch/schema-0.7.5-pyhd8ed1ab_1.conda#750d2ce4311d1502b51ad814407f043d +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.212.0-pyhd8ed1ab_0.conda#eb07d50e30f7b423929f9081118d3979 +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.0.21-pyhd8ed1ab_0.conda#fa0e9b0ca6c3e96d350711b6dbddaeb6 +https://conda.anaconda.org/conda-forge/linux-64/sasl-0.3.1-py310hd8f1fbe_2.tar.bz2#9b15d1759c99ad57ae43080cfca56d73 +https://conda.anaconda.org/conda-forge/linux-64/supervisor-4.2.5-py310hff52083_2.conda#7fe7fa4d80a99dc44ba15ef3e82707af +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.12.1-cpu_py310h91b7bb3_1.conda#3133c1f0d7fba203c6af92843b7a6b8a +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.12.1-cpu_py310haacee6a_1.conda#23ed9579748a885ae9e52ae809ccae6a +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.12.1-cpu_py310hd1aba9c_1.conda#79f37d0e1a7badce42c40f869ac4ce3a +https://conda.anaconda.org/conda-forge/linux-64/uvicorn-0.28.1-py310hff52083_0.conda#2708791931977a77fa35bc601a571375 diff --git a/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/code-editor/code_editor_machine_settings.json b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/code-editor/code_editor_machine_settings.json new file mode 100644 index 00000000..a391da92 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/code-editor/code_editor_machine_settings.json @@ -0,0 +1,4 @@ +{ + "python.terminal.activateEnvironment": false, + "python.defaultInterpreterPath": "/opt/conda/bin/python" +} \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/code-editor/extensions.txt b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/code-editor/extensions.txt new file mode 100644 index 00000000..ee18444b --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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 \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/conda/.condarc b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/conda/.condarc new file mode 100644 index 00000000..c3616df5 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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/v1/v1.6/v1.6.2/dirs/etc/jupyter/jupyter_server_config.py b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/jupyter/jupyter_server_config.py new file mode 100644 index 00000000..e05997f2 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/jupyter/jupyter_server_config.py @@ -0,0 +1,16 @@ +# 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 diff --git a/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf new file mode 100644 index 00000000..cac5669b --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord-common.conf b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord-common.conf new file mode 100644 index 00000000..27820d4c --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord-jupyter-lab.conf new file mode 100644 index 00000000..5694ac11 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord.conf b/build_artifacts/v1/v1.6/v1.6.2/dirs/etc/supervisor/conf.d/supervisord.conf new file mode 100644 index 00000000..686f4a5c --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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/v1/v1.6/v1.6.2/dirs/usr/local/bin/entrypoint-code-editor b/build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/entrypoint-code-editor new file mode 100755 index 00000000..677c9803 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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 \ No newline at end of file diff --git a/build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/entrypoint-jupyter-server b/build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/entrypoint-jupyter-server new file mode 100755 index 00000000..ceda89d0 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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/v1/v1.6/v1.6.2/dirs/usr/local/bin/restart-jupyter-server b/build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/restart-jupyter-server new file mode 100755 index 00000000..6f2af98d --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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/v1/v1.6/v1.6.2/dirs/usr/local/bin/start-code-editor b/build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/start-code-editor new file mode 100755 index 00000000..bc97106c --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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/v1/v1.6/v1.6.2/dirs/usr/local/bin/start-jupyter-server b/build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/start-jupyter-server new file mode 100755 index 00000000..377a86d4 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/dirs/usr/local/bin/start-jupyter-server @@ -0,0 +1,35 @@ +#!/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 + # 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/v1/v1.6/v1.6.2/gpu.arg_based_env.in b/build_artifacts/v1/v1.6/v1.6.2/gpu.arg_based_env.in new file mode 100644 index 00000000..51cba0a9 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/gpu.arg_based_env.in @@ -0,0 +1 @@ +conda-forge::cudatoolkit=$CUDA_MAJOR_MINOR_VERSION diff --git a/build_artifacts/v1/v1.6/v1.6.2/gpu.env.in b/build_artifacts/v1/v1.6/v1.6.2/gpu.env.in new file mode 100644 index 00000000..892cea33 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/gpu.env.in @@ -0,0 +1,51 @@ +# This file is auto-generated. +conda-forge::sagemaker-code-editor[version='>=1.0.0,<1.1.0'] +conda-forge::amazon_sagemaker_sql_editor[version='>=0.1.3,<0.2.0'] +conda-forge::amazon-sagemaker-sql-magic[version='>=0.1.0,<0.2.0'] +conda-forge::langchain[version='>=0.1.9,<0.2.0'] +conda-forge::fastapi[version='>=0.103.2,<0.104.0'] +conda-forge::uvicorn[version='>=0.28.1,<0.29.0'] +conda-forge::pytorch-gpu[version='>=2.0.0,<2.1.0'] +conda-forge::tensorflow[version='>=2.12.1,<2.13.0'] +conda-forge::python[version='>=3.10.13,<3.11.0'] +conda-forge::pip[version='>=23.3.2,<23.4.0'] +conda-forge::torchvision[version='>=0.15.2,<0.16.0'] +conda-forge::numpy[version='>=1.26.4,<1.27.0'] +conda-forge::pandas[version='>=2.1.4,<2.2.0'] +conda-forge::scikit-learn[version='>=1.4.1.post1,<1.5.0'] +conda-forge::jinja2[version='>=3.1.3,<3.2.0'] +conda-forge::matplotlib[version='>=3.8.3,<3.9.0'] +conda-forge::sagemaker-headless-execution-driver[version='>=0.0.12,<0.1.0'] +conda-forge::ipython[version='>=8.22.2,<8.23.0'] +conda-forge::scipy[version='>=1.11.4,<1.12.0'] +conda-forge::keras[version='>=2.12.0,<2.13.0'] +conda-forge::py-xgboost-gpu[version='>=1.7.6,<1.8.0'] +conda-forge::jupyterlab[version='>=4.1.5,<4.2.0'] +conda-forge::ipywidgets[version='>=8.1.2,<8.2.0'] +conda-forge::conda[version='>=23.11.0,<23.12.0'] +conda-forge::boto3[version='>=1.34.51,<1.35.0'] +conda-forge::sagemaker-python-sdk[version='>=2.212.0,<2.213.0'] +conda-forge::supervisor[version='>=4.2.5,<4.3.0'] +conda-forge::autogluon[version='>=0.8.2,<0.9.0'] +conda-forge::aws-glue-sessions[version='>=1.0.4,<1.1.0'] +conda-forge::sagemaker-kernel-wrapper[version='>=0.0.2,<0.1.0'] +conda-forge::jupyter-ai[version='>=2.11.0,<2.12.0'] +conda-forge::jupyter-scheduler[version='>=2.5.1,<2.6.0'] +conda-forge::nodejs[version='>=18.19.0,<18.20.0'] +conda-forge::jupyter-lsp[version='>=2.2.4,<2.3.0'] +conda-forge::jupyterlab-lsp[version='>=5.0.3,<5.1.0'] +conda-forge::python-lsp-server[version='>=1.10.1,<1.11.0'] +conda-forge::notebook[version='>=7.1.2,<7.2.0'] +conda-forge::altair[version='>=5.2.0,<5.3.0'] +conda-forge::sagemaker-studio-analytics-extension[version='>=0.0.21,<0.1.0'] +conda-forge::jupyter-dash[version='>=0.4.2,<0.5.0'] +conda-forge::sagemaker-jupyterlab-extension[version='>=0.2.0,<0.3.0'] +conda-forge::sagemaker-jupyterlab-emr-extension[version='>=0.1.9,<0.2.0'] +conda-forge::amazon-sagemaker-jupyter-scheduler[version='>=3.0.7,<3.1.0'] +conda-forge::jupyter-server-proxy[version='>=4.1.2,<4.2.0'] +conda-forge::amazon-codewhisperer-jupyterlab-ext[version='>=2.0.1,<2.1.0'] +conda-forge::jupyterlab-git[version='>=0.50.0,<0.51.0'] +conda-forge::sasl[version='>=0.3.1,<0.4.0'] +conda-forge::thrift_sasl[version='>=0.4.3,<0.5.0'] +conda-forge::pyhive[version='>=0.7.0,<0.8.0'] +conda-forge::python-gssapi[version='>=1.8.3,<1.9.0'] diff --git a/build_artifacts/v1/v1.6/v1.6.2/gpu.env.out b/build_artifacts/v1/v1.6/v1.6.2/gpu.env.out new file mode 100644 index 00000000..da8aa1fe --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/gpu.env.out @@ -0,0 +1,670 @@ +# 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-13.2.0-h807b86a_5.conda#d4ff227c46917d3b4565302a2bbb276b +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda#f6f6600d18a4047b54f803cf708b868a +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 +https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-18.1.2-h4dfa4b3_0.conda#0118c8a03e3dbbb6b348ef71e94ac7af +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/linux-64/bzip2-1.0.8-hd590300_5.conda#69b8b6202a07720f448be700e300ccf4 +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 +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.45.2-h2797004_0.conda#866983a220e27a80cb75e85cb30466a1 +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.4.20240210-h59595ed_0.conda#97da8860a0da5413c7c98a3b3838a645 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.1-hd590300_1.conda#9d731343cff6ee2e5a25c4a091bf8e2a +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.10.14-hd12c33a_0_cpython.conda#2b4ba962994e8bd4be9ff5b64b75aff2 +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-13.2.0-ha4646dd_5.conda#7a6bd7a12a4bd359e2afe6c0fa1acace +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda#e73e9cfd1191783392131e6238bdb3e9 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda#26322ec5d7712c3ded99dd656142b8ce +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda#6593de64c935768b6bad3e19b3e978be +https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py310h2372a71_0.conda#bd19b3096442ea342c4a5208379660b1 +https://conda.anaconda.org/conda-forge/linux-64/cudatoolkit-11.8.0-h4ba93d1_13.conda#eb43f5f1f16e2fad2eba22219c3e499b +https://conda.anaconda.org/conda-forge/noarch/cuda-version-11.8-h70ddcb2_3.conda#670f0e1593b8c1d84f57ad5fe5256799 +https://conda.anaconda.org/conda-forge/linux-64/cudnn-8.9.7.29-hbc23b4c_3.conda#4a2d5fab2871d95544de4e1752948d0f +https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.3-pyhd8ed1ab_0.conda#ff15f46b0d34308f4d40c1c51df07592 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py310h2372a71_0.conda#f6703fa0214a00bf49d1bef6dc7672d0 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda#e7d8df6509ba635247ff9aea31134262 +https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.7.1-hc72dce7_6.conda#afd44491bd564d8dd6cda5d9aecaa452 +https://conda.anaconda.org/conda-forge/linux-64/libmagma_sparse-2.7.1-h8354cda_6.conda#5e835e8d48283880ea6ef11920c7fb14 +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-3.21.12-hfc55251_2.conda#e3a7d4ba09b8dc939b98fef55f539220 +https://conda.anaconda.org/conda-forge/linux-64/magma-2.7.1-ha770c72_6.conda#f8ffd335f311e9749428727752e815bb +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff +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.6-h232c23b_1.conda#6853448e9ca1cfd5f15382afd2a6d123 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda#f36ddc11ca46958197a45effdd286e45 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_1.conda#4531d2927578e7e254ff3bcf6457518c +https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda#a7ce56d5757f5b57e7daabe703ade5bb +https://conda.anaconda.org/conda-forge/linux-64/nccl-2.20.5.1-h6103f9b_0.conda#bedb0b33c5e3e6fbd4dce4f6f07fea72 +https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda#425fce3b531bed6ec3c74fab3e5f0a1c +https://conda.anaconda.org/conda-forge/linux-64/sleef-3.5.1-h9b69904_2.tar.bz2#6e016cf4c525d04a7bd038cee53ad3fd +https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-h59595ed_1.conda#e358c7c5f6824c272b5034b3816438a7 +https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda#4c28f3210b30250037a4a627eeee9e0f +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.2-py310h3ec546c_1.tar.bz2#73f6fa50c32ddd985cf5fba7b890a75c +https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_0.conda#dbf6e2d89137da32fa6670f3bffc024e +https://conda.anaconda.org/conda-forge/noarch/sympy-1.12-pypyh9d50eac_103.conda#2f7d6347d7acf6edf1ac7f2189f44c8f +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.5.0-pyha770c72_0.conda#43e7d9e50261fb11deb76e17d8431aac +https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.0.0-cuda112py310he33e0d6_200.conda#87729716665c9fa180d7e42fde5c53ab +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.1-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7 +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-py310h2372a71_0.conda#f20cd4d9c1f4a8377d0818c819918bbb +https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2#d1e1eb7e21a9e2c74279d87dafb68156 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.5.0-hd8ed1ab_0.conda#b3c594fde1a80a1fc3eb9cc4a5dfe392 +https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda#3ce482ec3066e6d809dbbb1d1679f215 +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-py310h2372a71_0.conda#d4c91d19e4f2f18b64753ac660edad79 +https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py310h2372a71_0.conda#4ad35c8f6a64a6ab708780dad603aef4 +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.3-py310h2372a71_1.conda#dd21c88dfec3253cb9888c0e93fa5cd1 +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.0.9-py310hd8f1fbe_9.conda#e2047ad2af52c01845f58b580c6cbd5c +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.18-pyhd8ed1ab_0.conda#bf61cfd2a7f212efba378167a07d4a6a +https://conda.anaconda.org/conda-forge/noarch/botocore-1.34.51-pyge310_1234567_0.conda#f8980578a765dd28417953dddfefe5bc +https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py310h2372a71_0.conda#d9dc9c45bdc2b38403e6b388581e92f0 +https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.12.1-pyhd8ed1ab_0.conda#045560daef58c75a759c2638fbdb5c6a +https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.19.0-pyhd8ed1ab_0.conda#c60a47f9f29057417165a8af579396a8 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.11-hd590300_1.conda#0bb492cca54017ea314b809b1ee3a176 +https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a +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.0-pyhd8ed1ab_0.conda#c5d3907ad8bd7bf557521a1833cf7e6d +https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 +https://conda.anaconda.org/conda-forge/linux-64/pyrsistent-0.20.0-py310h2372a71_0.conda#e7f8dc8c62e136573c84116a5e743aed +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda#723268a468177cd44568eb8f794e0d80 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.1-pyhd8ed1ab_0.conda#98206ea9954216ee7540f0c773f2104d +https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py310hcc13569_0.conda#410f7e83992a591e492c25049a859254 +https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 +https://conda.anaconda.org/conda-forge/noarch/altair-5.2.0-pyhd8ed1ab_1.conda#1aebb1cef46d9cb76e0d38eed822348a +https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.10.1-pyhd8ed1ab_0.conda#a41cafc1fb653ce0e48b9310226e90fd +https://conda.anaconda.org/conda-forge/noarch/boto3-1.34.51-pyhd8ed1ab_0.conda#bd19311f73611626b31afc608af438cd +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.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa +https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda#490730480d76cf9c8f8f2849719c6e2b +https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda#7b517e7a6f0790337906c055aa97ca49 +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda#0876280e409658fc6f9e75d035960333 +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.4-pyhd8ed1ab_0.conda#20f047662cf4fa8b97836111df87dbb4 +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.2-pyhd8ed1ab_0.conda#af5fa2d2186003472e766a23c46cae04 +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.1-py310hc6cd4ac_0.conda#1ea80564b80390fa25da16e4211eb801 +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.3-pyhd8ed1ab_0.tar.bz2#17a565a0c3899244e938cdf417e7b094 +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.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de +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.42-pyha770c72_0.conda#0bf64bf10eee21f46ac83c161917fa86 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda#140a7f159396547e9799aa98f9f0742e +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.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883 +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.22.2-pyh707e725_0.conda#f0abe827c8a7c6d91bccdf90cb1fbee3 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.0-pyhd8ed1ab_0.conda#a0bc3eec34b0fab84be6b2da94e98e20 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py310hff52083_0.conda#cb92c27600d5716fd526a206aa43342c +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/zeromq-4.3.5-h59595ed_1.conda#7fc9d3288d2420bb3637647621018000 +https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py310h795f18f_0.conda#fa09f98f3acfd3f5de30bd2d27d5cb7f +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4-py310h2372a71_0.conda#48f39c24349d9ae5c8e8873c42fb6170 +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.1-pyhd8ed1ab_0.conda#c03972cfce69ad913d520c652e5ed908 +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.3-pyhd33586a_0.conda#e0deff12c601ce5cb7476f93718f3168 +https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda#45846a970e71ac98fd327da5d40a0a2c +https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310h2372a71_4.conda#68ee85860502d53c8cbfa0e4cef0f6cb +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-2.4-py310hff52083_3.conda#08ec1463dbc5c806a32fc431874032ca +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-1.13-pyhd8ed1ab_0.conda#166212fe82dad8735550030488a01d03 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.17.3-pyhd8ed1ab_0.conda#7a709748e93f0b2c33d6b5b676b6d9d0 +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.6.3-pyhd8ed1ab_1.conda#2ac0d00a0fb3f1a4c81c460ba56bb23b +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-69.2.0-pyhd8ed1ab_0.conda#da214ecd521a720a9d521c68047682dc +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.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 +https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.3-pyhd8ed1ab_0.conda#ca3d437c0ef2e87f63d085822c74c49a +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.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.3-pyhd8ed1ab_0.conda#0cab42b4917e71df9dc2224b9940ef19 +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.2-pyh41d4057_0.conda#ada5a17adcd10be4fc7e37e4166ba0e2 +https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.7.0-pyhd8ed1ab_0.conda#50ad31e07d706aae88b14a4ac9c73f23 +https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.10.0-pyhd8ed1ab_0.conda#016d56f5d81b9364d1da5f4895a2a9f8 +https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.4-pyhd8ed1ab_0.conda#91f93e1ebf6535be518715432d89fd92 +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.24-pyhd8ed1ab_0.conda#fc9780a517b51ea3798fc011c17ffd51 +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.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda#327bfe1c99154f02259d29810bd70afc +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.5-pyhd8ed1ab_0.conda#04b1ca9d7ac414b3f5c3fb16066c6861 +https://conda.anaconda.org/conda-forge/noarch/amazon-codewhisperer-jupyterlab-ext-2.0.1-pyhd8ed1ab_0.conda#ab9bb3e630d872e9d38c8c18a0cba7b4 +https://conda.anaconda.org/conda-forge/noarch/aws-embedded-metrics-3.2.0-pyhd8ed1ab_0.conda#e1c511655b6e9eb0265c9715c7fa410f +https://conda.anaconda.org/conda-forge/noarch/croniter-1.4.1-pyhd8ed1ab_0.conda#7a4568626f8d6e7c63dcb25d5501a967 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.12.3-ha770c72_0.conda#cdea66892b19a454f939487318b6c517 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.3-hd8ed1ab_0.conda#1344bbd74e8bcd1acdd8ec0824e9840c +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.3-hd8ed1ab_0.conda#b0c9bbbe54a11a6db3bec51eb0ef0281 +https://conda.anaconda.org/conda-forge/linux-64/pydantic-1.10.14-py310h2372a71_0.conda#6aca52bad315e6b841a32d6b3b0cdb82 +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.3-py310hc6cd4ac_0.conda#fb478fd83c001cbf8ab01c29b857262e +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.49-py310h2372a71_1.conda#cdeaf46006791202a7597bf2a0e6ad9e +https://conda.anaconda.org/conda-forge/noarch/jupyter_scheduler-2.5.1-pyha770c72_0.conda#3d250834fde789b6cb96dc11a43d1df2 +https://conda.anaconda.org/conda-forge/noarch/jupyter-scheduler-2.5.1-hd8ed1ab_0.conda#bb6463ad5d244321f64a231ba9b6cf2a +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-jupyter-scheduler-3.0.7-pyhd8ed1ab_1.conda#ee635c11a576839138a93fc46e0f389b +https://conda.anaconda.org/conda-forge/linux-64/cryptography-42.0.5-py310h75e40e8_0.conda#47e6ea7109182e9e48f8c5839f1bded7 +https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda#1482e77f87c6a702a7e05ef22c9b197b +https://conda.anaconda.org/conda-forge/noarch/pyathena-3.5.1-pyhd8ed1ab_0.conda#1c302abfabf4d08375990de11ff98242 +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-py310hcfd0673_0.conda#d6df7beac08573177dd9a6a560d1d180 +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.0-pyhd8ed1ab_0.conda#4501c96a5e9f18239ae6e5944604d493 +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/sqlparse-0.4.4-pyhd8ed1ab_0.conda#2e2f31b3b1c866c29636377e14f8c4c6 +https://conda.anaconda.org/conda-forge/noarch/amazon-sagemaker-sql-magic-0.1.1-pyhd8ed1ab_0.conda#2cbf8f2847bc726efb567b62e6913410 +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.4-pyhd8ed1ab_0.conda#d9aa21e693982b6ca0341a9bf41db4a8 +https://conda.anaconda.org/conda-forge/linux-64/ansi2html-1.9.1-py310hff52083_0.conda#2213ea76fd340e7c848c1be0cbdfc579 +https://conda.anaconda.org/conda-forge/noarch/textwrap3-0.9.2-py_0.tar.bz2#1f84e74e9dbe2e5ae38c58496bffaca8 +https://conda.anaconda.org/conda-forge/noarch/ansiwrap-0.8.4-py_0.tar.bz2#f09557e2a7cbd2470a2ab6353000cebd +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.5.0-h27087fc_0.tar.bz2#a08150fd2298460cd1fcccf626305642 +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.0.3-py310hff52083_0.conda#7d18b84331cda8271c9ed67d1ca05d47 +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.43-hcad00b1_0.conda#8292dea9e022d9610a11fce5e0896ed8 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.0-hf2295e7_1.conda#0725f6081030c29b109088639824ff90 +https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b +https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 +https://conda.anaconda.org/conda-forge/noarch/autogluon.common-0.8.2-pyhd8ed1ab_4.conda#e24166dee3b1430877a324715caf8f5d +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py310hd41b1e2_0.conda#85d2aaa7af046528d339da1e813c3a9f +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.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.conda#d47dee1856d9cb955b8076eeff304a5b +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda#72637c58d36d9475fda24700c9796f19 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.50.0-py310h2372a71_0.conda#85c48c98c9f2b72b384fb11c9004920b +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-py310hd41b1e2_1.conda#b8d67603d43b23ce7e988a5d81a7ab79 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda#323e90742f0f48fc22bea908735f55e6 +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.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda#82bf6f63eb15ef719b556b63feec3a77 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 +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.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea +https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py310h582fbeb_1.conda#cf62f6cff3536eafaaa0c740b0bf7465 +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.3-py310h62c0568_0.conda#4a7296c0273eb01dfbed728dd6a6725a +https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py310hb13e2d6_0.conda#f0063b2885bfae11324a00a693f88781 +https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.4.0-pyhc1e730c_0.conda#b296278eef667c673bf51de6535bad88 +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.1.post1-py310h1fdf081_0.conda#2706ad1a5f6cbad8b57d4094889d1e33 +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.2-pyhd8ed1ab_0.conda#2b8dfb969f984497f3f98409a9545776 +https://conda.anaconda.org/conda-forge/linux-64/autogluon.core-0.8.2-light_py310h2d11d36_6.conda#9de8e45568202a91466af4d849c7e919 +https://conda.anaconda.org/conda-forge/noarch/autogluon.features-0.8.2-pyhd8ed1ab_3.conda#c827eccfb0ddb1484d0e00f45242b8f8 +https://conda.anaconda.org/conda-forge/linux-64/chardet-5.2.0-py310hff52083_1.conda#a677136a83b823803d2f92045f885be2 +https://conda.anaconda.org/conda-forge/noarch/binaryornot-0.4.4-py_1.tar.bz2#a556fa60840fcb9dd739d186bfd252f7 +https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca +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/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/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.22.0-pyhd8ed1ab_0.conda#c4dbdc593adfa072d40df9b1dd128444 +https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.16-py310h2372a71_0.conda#efdca5c3783dae00552f389bd7b56c3d +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.0-hd590300_0.conda#71b89db63b5b504e7afc8ad901172e1e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.1-hc309b26_1.conda#cc09293a2c2b7fd77aff284f370c12c0 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h4d4d85c_2.conda#9ca99452635fe03eb5fa937f5ae604b0 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.49-h06160fa_0.conda#1d78349eb26366ecc034a4afe70a8534 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-he9a53bd_1.conda#8a24e5820f4a0ffd2ed9c4722cd5d7ca +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.11-h00aa349_4.conda#cb932dff7328ff620ce8059c9968b095 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h4d4d85c_1.conda#eba092fc6de212a01de0065f38fe8bbb +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.3-h28f7589_1.conda#97503d3e565004697f1651753aa95b9e +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h4d4d85c_1.conda#30f9df85ce23cd14faa9a4dfa50cca2b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.1-h2e3709c_4.conda#2cf21b1cbc1c096a28ffa2892257a2c1 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.3-hb447be9_1.conda#c520669eb0be9269a5f0d8ef62531882 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.14-hf3aad02_1.conda#a968ffa7e9fe0c257628033d393e512f +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.21.0-hb942446_5.conda#07d92ed5403ad7b5c66ffd7d5b8f7e57 +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.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.27.0-hd590300_0.conda#f6afff0e9ee08d2f1b897881a4f38cdb +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.6.0-hca28451_0.conda#704739398d858872cb91610f49f0ef29 +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-h85b1a90_19.conda#0605d3d60857fc07bd6a11e878fe0f08 +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.6.0-h6f12383_0.tar.bz2#b31f3565cb84435407594e548a2fb7b2 +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda#d1db1b8be7c3a8983dcbbbfe4f0765de +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/re2-2023.03.02-h8c504da_0.conda#206f8fa808748f6e90599c3368a1114e +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.54.3-hb20ce57_0.conda#7af7c59ab24db007dfd82e0a3a343f66 +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hac9eb74_1.conda#0dee716254497604762957076ac76540 +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.18.1-h8fd135c_2.conda#bbf65f7688512872f063810623b755dc +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/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 +https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h2f23424_1.conda#9571eb3eb0f7fe8b59956a7786babbcd +https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-hd590300_0.conda#8feeecae73aeef0a2985af46b5a2c1df +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda#aeffb7c06b5f65e55e6c637408dc4100 +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda#39aa3b356d10d7e5add0c540945a0944 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-12.0.1-hb87d912_8_cpu.conda#3f3b11398fe79b578e3c44dd00a44e4a +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-12.0.1-py310h0576679_8_cpu.conda#27f55ccfd038d6665facb04a0aa572c5 +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.4.1-py310h2372a71_0.conda#b631b889b0b4bc2fca7b8b977ca484b2 +https://conda.anaconda.org/conda-forge/noarch/datasets-2.18.0-pyhd8ed1ab_0.conda#3482c9b417757df305ff4e3a7e4b7c10 +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/gdown-5.1.0-pyhd8ed1ab_0.conda#6f880647c0270648f710f334c60bc76c +https://conda.anaconda.org/conda-forge/linux-64/libsentencepiece-0.1.99-h180e1df_0.conda#056064bd3ef47439e3e78fac28449fbf +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-python-0.1.99-py310hebdb9f0_0.conda#b3a5908ac3912b26d6a8b77faebe6eca +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-spm-0.1.99-h180e1df_0.conda#c67cc412366709c1c3225f19f8aed63b +https://conda.anaconda.org/conda-forge/linux-64/sentencepiece-0.1.99-hff52083_0.conda#578969452de13e4ad69edf18ee2b3d5a +https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyhc8e2a94_3.tar.bz2#a362b2124b06aad102e2ee4581acee7d +https://conda.anaconda.org/conda-forge/linux-64/regex-2023.12.25-py310h2372a71_0.conda#4a9ba4e7af60356e63b38a6d419acad6 +https://conda.anaconda.org/conda-forge/noarch/sacremoses-0.0.53-pyhd8ed1ab_0.tar.bz2#76c3c384fe0941f1b08193736e8e277a +https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.4.2-py310hcb5633a_0.conda#a1e978544ef765ef9ac2f2320e43bacd +https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.13.3-py310he1f1126_0.conda#ea2281fe0bf70c1c83393565342a8a8c +https://conda.anaconda.org/conda-forge/noarch/transformers-4.31.0-pyhd8ed1ab_0.conda#8cccf394a00fbfef2f3d6028422ae5cc +https://conda.anaconda.org/conda-forge/noarch/nlpaug-1.1.11-pyhd8ed1ab_1.conda#4e231f0fa7db9388cf4c8539d623ac62 +https://conda.anaconda.org/conda-forge/noarch/nltk-3.8.1-pyhd8ed1ab_0.conda#518c769ca4273480a99be6e559a26192 +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.2.3-pyhd8ed1ab_0.conda#cebc9f0fc6eebdcc368bb30ba30f2fd5 +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.43.0-pyhd8ed1ab_0.conda#6e43a94e0ee67523b5e781f0faba5c45 +https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda#8591c748f98dcc02253003533bc2e4b1 +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/protobuf-4.21.12-py310heca2aa9_0.conda#90bb7e1b729c4b50272cf78be97ab912 +https://conda.anaconda.org/conda-forge/noarch/pytesseract-0.3.10-pyhd8ed1ab_0.tar.bz2#04f4becceb0c032c5dbdae6ad18bd95e +https://conda.anaconda.org/conda-forge/noarch/lightning-utilities-0.11.1-pyhd8ed1ab_0.conda#b3e6a8dac4cdfd01c23211c7fb50bfee +https://conda.anaconda.org/conda-forge/noarch/torchmetrics-1.0.3-pyhd8ed1ab_0.conda#4e8849ba2fa06393b7ab5a50c6a4256c +https://conda.anaconda.org/conda-forge/noarch/pytorch-lightning-2.0.9-pyhd8ed1ab_0.conda#3e96ed529412338e38af9004e22267de +https://conda.anaconda.org/conda-forge/noarch/pytorch-metric-learning-1.7.3-pyhd8ed1ab_0.conda#139aa590e345e10f4572812a329806f4 +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py310h2372a71_0.conda#21362970a6fea90ca507c253c20465f2 +https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.3.1-pyhd8ed1ab_0.conda#52dd56ce3afa6a52c2f3d3116875ff32 +https://conda.anaconda.org/conda-forge/noarch/imageio-2.34.0-pyh4b66e23_0.conda#b8853659d596f967c661f544dd89ede7 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h1f7b6fc_1.conda#be6f0382440ccbf9fb01bb19ab1f1fc0 +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 +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.0.7-h0b41bf4_0.conda#49e8329110001f04923fe7e864990b0c +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.13.2-hb4ffafa_0.conda#976aaf1afd331ed7346d649da5c5c1ee +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.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f +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/libavif-0.11.1-h8182462_2.conda#41c399ed4c439e37b844c24ab5621b5a +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-h59595ed_0.conda#fd486bffbf0d6841cf1456a8f2e3a995 +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.8.12-py310hc929067_0.conda#61caf809753610c4c87d583765b1d478 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.2.12-pyhd8ed1ab_0.conda#d5c8bef52be4e70c48b1400eec3eecc8 +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.19.3-py310h769672d_2.tar.bz2#c0391107b0cd0010708d6969ed759e8b +https://conda.anaconda.org/conda-forge/noarch/seqeval-1.2.2-pyhd3deb0d_0.tar.bz2#d4436c8a8b9fb6d60fe4e7b9f097f9bb +https://conda.anaconda.org/conda-forge/noarch/cachetools-5.3.3-pyhd8ed1ab_0.conda#cd4c26c702a9bcdc70ff05b609ddacbe +https://conda.anaconda.org/conda-forge/noarch/pyasn1-0.5.1-pyhd8ed1ab_0.conda#fb1a800972b072aa4d16450983c81418 +https://conda.anaconda.org/conda-forge/noarch/pyasn1-modules-0.3.0-pyhd8ed1ab_0.conda#26db749166cdca55e5ef1ffdc7767d0e +https://conda.anaconda.org/conda-forge/noarch/pyopenssl-24.0.0-pyhd8ed1ab_0.conda#b50aec2c744a5c493c09cce9e2e7533e +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.29.0-pyhca7485f_0.conda#a12a2abc807053bc378b218a2a525c7d +https://conda.anaconda.org/conda-forge/noarch/blinker-1.7.0-pyhd8ed1ab_0.conda#550da20b2c2e38be9cc44bb819fda5d5 +https://conda.anaconda.org/conda-forge/noarch/pyjwt-2.8.0-pyhd8ed1ab_1.conda#74f76d4868dbba5870f2cf1d9b12d8f3 +https://conda.anaconda.org/conda-forge/noarch/oauthlib-3.2.2-pyhd8ed1ab_0.tar.bz2#8f882b197fd9c4941a787926baea4868 +https://conda.anaconda.org/conda-forge/noarch/requests-oauthlib-2.0.0-pyhd8ed1ab_0.conda#87ce3f09ae7e1d3d0f748a1a634ea3b7 +https://conda.anaconda.org/conda-forge/noarch/google-auth-oauthlib-1.0.0-pyhd8ed1ab_1.conda#569e62e95b01b53e4ec7d9abe83b7385 +https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.54.3-py310heca2aa9_0.conda#7c82ea96968976ee2eb66a52f2decd8e +https://conda.anaconda.org/conda-forge/linux-64/tensorboard-data-server-0.7.0-py310h75e40e8_1.conda#e562478facfa960813945204273ecac5 +https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.1-pyhd8ed1ab_0.conda#af8d825d93dbe6331ee6d61c69869ca0 +https://conda.anaconda.org/conda-forge/noarch/tensorboard-2.12.3-pyhd8ed1ab_0.conda#429d39f86cef8d0859d639804ae67aaf +https://conda.anaconda.org/conda-forge/linux-64/torchvision-0.15.2-cuda112py310h0801bf5_1.conda#f5680c812c287a92c4390dc245df2e5d +https://conda.anaconda.org/conda-forge/noarch/timm-0.9.16-pyhd8ed1ab_0.conda#bc15401d946adb3fbce34c4ba351dd20 +https://conda.anaconda.org/conda-forge/noarch/autogluon.multimodal-0.8.2-pyha770c72_5.conda#a8ca42e2b4ee0fd6dce729bc226dd0cc +https://conda.anaconda.org/conda-forge/noarch/plotly-5.19.0-pyhd8ed1ab_0.conda#669cd7065794633b9e64e6a9612ec700 +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda#e7ba12deb7020dd080c6c70e7b6f6a3d +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_1.conda#6185f640c43843e5ad6fd1c5372c3f80 +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.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b +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-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 +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.52.1-ha41ecd1_0.conda#5c0cc002bf4eaa56448b0729efd6e96c +https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h280cfa0_4.conda#410f86e58e880dcc7b0e910a8e89c05c +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-he3f83f7_1.conda#03bd1ddcc942867a19528877143b9852 +https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 +https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb +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.3-py310hff52083_2.conda#e063c808181593406d4d3d321ee7ffff +https://conda.anaconda.org/conda-forge/noarch/fastcore-1.5.29-pyhd8ed1ab_0.conda#155c898255baddd6b2cb95894791eeca +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-py310hff52083_0.conda#a20390cd5f5fe4d8c5f6f2e7fa6c54cf +https://conda.anaconda.org/conda-forge/linux-64/cymem-2.0.8-py310hc6cd4ac_1.conda#8e4dada89998e0cb4f97b835dff6dc7e +https://conda.anaconda.org/conda-forge/noarch/langcodes-3.3.0-pyhd8ed1ab_0.tar.bz2#aacac9c3804912c38087d1c295708493 +https://conda.anaconda.org/conda-forge/linux-64/murmurhash-1.0.10-py310hc6cd4ac_1.conda#2b0c4b4532c601ece4537cc7f3558464 +https://conda.anaconda.org/conda-forge/noarch/smart_open-5.2.1-pyhd8ed1ab_0.tar.bz2#c7a838c38e38c82edde371a9054e6c92 +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/pathy-0.10.2-pyhd8ed1ab_0.conda#69d84b5c17aea4d7350f3536bcde7296 +https://conda.anaconda.org/conda-forge/linux-64/preshed-3.0.9-py310hc6cd4ac_1.conda#a2a27c2eafd1e280555ae954df088fc3 +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-py310hc6cd4ac_1.conda#7cd9d4be6f55ccb53cbd7125f2e6a0fb +https://conda.anaconda.org/conda-forge/linux-64/confection-0.1.4-py310h17c5347_0.conda#72b63825959fc040cab8ed0f12f2040e +https://conda.anaconda.org/conda-forge/linux-64/cython-blis-0.7.10-py310h1f7b6fc_2.conda#6a0165d9e76c443ed66d2e8b733aa133 +https://conda.anaconda.org/conda-forge/linux-64/wasabi-1.1.2-py310hff52083_0.conda#8ed9f04ed8e1373063cd03b9d5c86ce3 +https://conda.anaconda.org/conda-forge/linux-64/thinc-8.2.2-py310hcb52e73_0.conda#550b37537f05740f1c9a38d63d843b3c +https://conda.anaconda.org/conda-forge/noarch/cloudpathlib-0.16.0-pyhd8ed1ab_0.conda#8d75941f621306e58b7642394a8bad87 +https://conda.anaconda.org/conda-forge/noarch/weasel-0.3.4-pyhd8ed1ab_0.conda#a53c82e61a1173c887e84fc50842eec4 +https://conda.anaconda.org/conda-forge/linux-64/spacy-3.7.2-py310hcb52e73_0.conda#c966d5a09c130d0bcfce4126643ddc74 +https://conda.anaconda.org/conda-forge/noarch/fastai-2.7.14-pyhd8ed1ab_0.conda#9854ef355cc4bd1e2aac40998f721fed +https://conda.anaconda.org/conda-forge/linux-64/lightgbm-3.3.5-py310heca2aa9_0.conda#d2595ddab22cbca7409b28e3105afd0a +https://conda.anaconda.org/conda-forge/linux-64/libxgboost-1.7.6-cuda118_hd3b444d_6.conda#78509401d0879ef5aac72b8d1e104493 +https://conda.anaconda.org/conda-forge/linux-64/py-xgboost-1.7.6-cuda118_py310h9840055_6.conda#1d3da6268c67fe8b84c32cd0dc174bb4 +https://conda.anaconda.org/conda-forge/linux-64/xgboost-1.7.6-cuda118_py310h9840055_6.conda#f6a6f34c91b92f72dfdb47d3c7efcbbe +https://conda.anaconda.org/conda-forge/noarch/autogluon.tabular-0.8.2-pyha770c72_4.conda#17fad1cdb563ddad16ab0ba4c085bcb3 +https://conda.anaconda.org/conda-forge/noarch/gluonts-0.13.7-pyhd8ed1ab_0.conda#1684b578508d9918b2dcadd4c365c61a +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.42.0-py310h1b8f574_1.conda#e2a5e9f92629c8e4c8611883a35745b4 +https://conda.anaconda.org/conda-forge/linux-64/numba-0.59.0-py310h7dc5dd1_1.conda#966bc2bc095723310d746106e7c91791 +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.7.3-pyhd8ed1ab_0.conda#7a2b34b4c9bff2545200b3746da70f11 +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.1-py310h1f7b6fc_0.conda#d98c3749dd466513dd921f5818f4b001 +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.9.0-py310hc6cd4ac_0.conda#cab4b543b897dcf548edb3018fe45f9e +https://conda.anaconda.org/conda-forge/noarch/autogluon.timeseries-0.8.2-pyhd8ed1ab_4.conda#a64157275daf72a557fe4a9d843a9e1d +https://conda.anaconda.org/conda-forge/noarch/autogluon-0.8.2-pyhd8ed1ab_4.conda#7ff9ac51e09bd5991970a7df53b4bee6 +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.10-pyhd8ed1ab_0.conda#16b73b2c4ff7dda8bbecf88aadfe2027 +https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.10-pyhd8ed1ab_0.conda#521f489e3babeddeec638c2add7e9e64 +https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.2-pyhd8ed1ab_0.conda#67f86478c78637f68c1f3858973021f2 +https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.42-hd8ed1ab_0.conda#85a2189ecd2fcdd86e92b2d4ea8fe461 +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.2-pyhd8ed1ab_0.conda#fa781da51f05c9211b75b5e7bcff8136 +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.1-pyha770c72_0.conda#5528a3eda283b421055c89bface19a1c +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.4-pyhd8ed1ab_0.conda#169c4c0a396d83164215f54024031ec8 +https://conda.anaconda.org/conda-forge/linux-64/bcrypt-4.1.2-py310hcb5633a_0.conda#6dd3d49f65ceb05dbd527a5b6301611b +https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda#4eccaeba205f0aed9ac3a9ea58568ca3 +https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda#17064acba08d3686f1135b5ec1b32b12 +https://conda.anaconda.org/conda-forge/linux-64/black-24.3.0-py310hff52083_0.conda#12960fe9118cbb71fb802a52870f7874 +https://conda.anaconda.org/conda-forge/noarch/boltons-23.1.1-pyhd8ed1ab_0.conda#56febe65315cc388a5d20adf2b39a74d +https://conda.anaconda.org/conda-forge/linux-64/fmt-10.2.1-h00ab1b0_0.conda#35ef8bc24bd34074ebae3c943d551728 +https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h2aa1ff5_1.conda#3bf887827d1968275978361a6e405e4f +https://conda.anaconda.org/conda-forge/linux-64/libsolv-0.7.28-hfc55251_1.conda#84271c00f5804bbc1ef7c525d1e4f405 +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-py310h39ff949_0.conda#37f8aa15b73c4691eeec15caf45aab25 +https://conda.anaconda.org/conda-forge/noarch/conda-libmamba-solver-24.1.0-pyhd8ed1ab_0.conda#304dc78ad6e52e0fd663df1d484c1531 +https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.22.0-py310h1275a96_0.conda#54698ba13cd3494547b289cd86a2176a +https://conda.anaconda.org/conda-forge/noarch/conda-package-streaming-0.9.0-pyhd8ed1ab_0.conda#38253361efb303deead3eab39ae9269b +https://conda.anaconda.org/conda-forge/noarch/conda-package-handling-2.2.0-pyh38be061_0.conda#8a3ae7f6318376aa08ea753367bb7dd6 +https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_0.conda#bbdb409974cd6cb30071b1d978302726 +https://conda.anaconda.org/conda-forge/noarch/jsonpatch-1.33-pyhd8ed1ab_0.conda#bfdb7c5c6ad1077c82a69a8642c87aff +https://conda.anaconda.org/conda-forge/linux-64/menuinst-2.0.2-py310hff52083_0.conda#4837faab0d3e665df57fef662148c6a3 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 +https://conda.anaconda.org/conda-forge/linux-64/pycosat-0.6.6-py310h2372a71_0.conda#0adaac9a86d59adae2bc86b3cdef2df1 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py310h2372a71_0.conda#dcf6d2535586c77b31425ed835610c54 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.6-py310h2372a71_0.conda#50b7d9b39099cdbabf65bf27df73a793 +https://conda.anaconda.org/conda-forge/noarch/truststore-0.8.0-pyhd8ed1ab_0.conda#08316d001eca8854392cf2837828ea11 +https://conda.anaconda.org/conda-forge/linux-64/conda-23.11.0-py310hff52083_1.conda#d5278ac990c67d5ed51584998aa16c5a +https://conda.anaconda.org/conda-forge/noarch/contextlib2-21.6.0-pyhd8ed1ab_0.tar.bz2#5b26a831440be04c39531a8ce20f5d71 +https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.4-h7f98852_1002.tar.bz2#e728e874159b042d92b90238a3cb0dc2 +https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.27-h54b06d7_7.conda#dce22f70b4e5a407ce88f2be046f4ceb +https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.1.2-pyhd8ed1ab_0.tar.bz2#3c3de74912f11d2b590184f03c7cd09b +https://conda.anaconda.org/conda-forge/noarch/flask-3.0.2-pyhd8ed1ab_0.conda#7f88df670921cc31c309719e30c22021 +https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2#a11f356d6f93b74b4a84e9501afd48b4 +https://conda.anaconda.org/conda-forge/noarch/dash-2.16.1-pyhd8ed1ab_0.conda#016bd4f61878a57f19c8cd744708a1f1 +https://conda.anaconda.org/conda-forge/noarch/marshmallow-3.21.1-pyhd8ed1ab_0.conda#ae303aa7dc100bc3bc01b5a3b7ca3567 +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.4-pyhd8ed1ab_0.conda#1190a6456351690603b2d64d1cbf5b4a +https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d +https://conda.anaconda.org/conda-forge/noarch/deepmerge-1.1.1-pyhd8ed1ab_0.conda#d91c3d8ac3f2ab36ca4ea32ac42f731e +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py310hd41b1e2_0.conda#dc5263dcaa1347e5a456ead3537be27d +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.3.1-pyhd8ed1ab_0.conda#b0ad5ef44595ef37c3008fc04ecd2abf +https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.5.0-py310h2372a71_3.conda#a29a0825809cd3a780097472be176618 +https://conda.anaconda.org/conda-forge/noarch/paramiko-3.4.0-pyhd8ed1ab_0.conda#a5e792523b028b06d7ce6e65a6cd4a33 +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.0.0-pyhd8ed1ab_0.conda#aec5f308cb9055e83c59afecd5fcb58a +https://conda.anaconda.org/conda-forge/noarch/docstring-to-markdown-0.15-pyhd8ed1ab_0.conda#a3a1e6af2926a3affcd6f2072871f551 +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-1.7.4-hf47d654_0_cpu.conda#8fd132db65c8d51caea2ae7cde4b450c +https://conda.anaconda.org/conda-forge/linux-64/libfaiss-avx2-1.7.4-h1234567_0_cpu.conda#7eb943c067a63c4d8af526c2df9f2c1b +https://conda.anaconda.org/conda-forge/linux-64/faiss-1.7.4-py310h9ed8947_0_cpu.conda#99665c710087f7a964915b5ea0097465 +https://conda.anaconda.org/conda-forge/linux-64/faiss-cpu-1.7.4-h718b53a_0.conda#7a9e6f72c36ff5a5eeb61660fd6fdf8d +https://conda.anaconda.org/conda-forge/noarch/starlette-0.27.0-pyhd8ed1ab_0.conda#6facb6fc201d334257db8004439705d3 +https://conda.anaconda.org/conda-forge/noarch/fastapi-0.103.2-pyhd8ed1ab_0.conda#fb243b6796ab7d64b14e00c279620c04 +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-23.5.26-h59595ed_1.conda#913a1c6fd00b66f33392a129e835ceca +https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda#650a7807e689642dddd3590eb817beed +https://conda.anaconda.org/conda-forge/noarch/gast-0.4.0-pyh9f0ad1d_0.tar.bz2#42323c77b73462199fca93bc8ac9279d +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.42-pyhd8ed1ab_0.conda#6bc8e496351bafd761c0922c3ebd989a +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.0-hde27a5a_1.conda#939ddd853b1d98bf6fd22cc0adeda317 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.0-hf2295e7_1.conda#d3bcc5c186f78feba6f39ea047c35950 +https://conda.anaconda.org/conda-forge/noarch/google-pasta-0.2.0-pyh8c360ce_0.tar.bz2#26e27d7d3d7fe2336b543dd8e0f12cbf +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.9-h98fc4e7_1.conda#f502076ed4db50d9ee5c907036a5a172 +https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 +https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f +https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.9-hfa15dee_1.conda#b66ddd883308a836ed86c247231aab82 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda#d471a5c3abc984b662d9bae3bb7fd8a5 +https://conda.anaconda.org/conda-forge/linux-64/h5py-3.10.0-nompi_py310h65828d5_101.conda#44c185c5b133ad6d1d449839407aa863 +https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 +https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.3.2-py310hcc13569_0.conda#1ad84020b1ab816d7ab3f3d0859faf40 +https://conda.anaconda.org/conda-forge/linux-64/jaxlib-0.4.14-cpu_py310h67d73b5_1.conda#392c325994aa96727edd0069a0620e31 +https://conda.anaconda.org/conda-forge/noarch/opt_einsum-3.3.0-pyhc1e730c_2.conda#7a94ac68b892daa9f17ae8a52b31ed81 +https://conda.anaconda.org/conda-forge/noarch/opt-einsum-3.3.0-hd8ed1ab_2.conda#ab262acd95cb73f3ed9426cc4204ac3a +https://conda.anaconda.org/conda-forge/noarch/jax-0.4.20-pyhd8ed1ab_0.conda#5abbd950bd427bc9d929e35ecbf814d1 +https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 +https://conda.anaconda.org/conda-forge/noarch/jsonpath-ng-1.6.1-pyhd8ed1ab_0.conda#a698a41f5b52fe96049fd8c926ac3086 +https://conda.anaconda.org/conda-forge/linux-64/orjson-3.9.15-py310hcb5633a_0.conda#da1b180ccf1dce5d87d145ad2fc14e5a +https://conda.anaconda.org/conda-forge/noarch/langsmith-0.1.31-pyhd8ed1ab_0.conda#031cb2cb0387f028379c1a58217fe929 +https://conda.anaconda.org/conda-forge/noarch/langchain-core-0.1.33-pyhd8ed1ab_0.conda#a0454a06df0bf2de641c21ac1e455530 +https://conda.anaconda.org/conda-forge/noarch/langchain-community-0.0.29-pyhd8ed1ab_0.conda#7dfaffe1c95ee7718624be16cb57dfbd +https://conda.anaconda.org/conda-forge/noarch/langchain-0.1.9-pyhd8ed1ab_0.conda#2ad37682610ac2643b46e4cc0215f410 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-magics-2.11.0-pyhd8ed1ab_0.conda#aee09f3966655f81d05fcfb5bae3612d +https://conda.anaconda.org/conda-forge/linux-64/tiktoken-0.5.2-py310h47bb294_0.conda#a83ae186d0a4b78c98b32781d7c15d48 +https://conda.anaconda.org/conda-forge/noarch/jupyter-ai-2.11.0-pyhd8ed1ab_0.conda#e8ab7975630aff4624d3ed1fa32ac552 +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.1.2-pyhd8ed1ab_0.conda#3671520b52215a5a084de08003e6d8cd +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.0-pyhd8ed1ab_1.conda#5020cacc18e3d5f62a81513f26ac2cac +https://conda.anaconda.org/conda-forge/noarch/keras-2.12.0-pyhd8ed1ab_0.conda#e6e18b33e8d62200099f2eed98a263b6 +https://conda.anaconda.org/conda-forge/noarch/keras-preprocessing-1.1.2-pyhd8ed1ab_0.tar.bz2#a79b00989a0d89791021902f37fe2f9e +https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef +https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h5d6823c_5.conda#2d694a9ffdcc30e89dea34a8dcdab6ae +https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_h127d8a8_5.conda#09b94dd3a7e304df5b83176239347920 +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.48-h71f35ed_0.conda#4d18d86916705d352d5f4adfb7f0edd3 +https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.6-h088ca5b_0.conda#99dca02fb74a8dfa3653c6673674f90c +https://conda.anaconda.org/conda-forge/linux-64/libsecret-0.18.8-h329b89f_2.tar.bz2#9d6698e3c9585a75156d86f7ef229093 +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.4-h59595ed_0.conda#3f1017b4141e943d9bc8739237f749e8 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_1.conda#3366af27f0b593544a6cd453c7932ac5 +https://conda.anaconda.org/conda-forge/linux-64/libuv-1.46.0-hd590300_0.conda#d23c76f7e6dcd6243d1b6ef5e62d17d2 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.41-hd590300_0.conda#81f740407b45e3f9047b3174fa94eb9e +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.7.0-h662e7e4_0.conda#b32c0da42b1f24a98577bb3d7fc0b995 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py310hc6cd4ac_0.conda#68d5bfccaba2d89a7812098dd3966d9b +https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda#ef5333594a958b25912002886b82b253 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda#e87530d1b12dd7f4e0f856dc07358d60 +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.98-h1d7d5a4_0.conda#54b56c2fdf973656b748e0378900ec13 +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 +https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda#f4fe7a6e3d7c78c9de048ea9dda21690 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.3-py310hff52083_0.conda#e91d183a307d7bd667003291f690cbb0 +https://conda.anaconda.org/conda-forge/linux-64/nodejs-18.19.0-hb753e55_0.conda#0b4a67051e3b3812818ccf2f4ee2fd4e +https://conda.anaconda.org/conda-forge/noarch/papermill-2.5.0-pyhd8ed1ab_0.conda#e6e69b90afd3d0597da8f1f74cc4bd58 +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/linux-64/py-xgboost-gpu-1.7.6-py310h9840055_6.conda#f148fc36e36779537fd0845178f8a619 +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-py310hc6cd4ac_0.conda#8c6970b9c27073d82bcf757ac644e6cd +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-py310h98feede_1.conda#0329fda0ebbccee7b3e9dbf4a377d0ce +https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.4-pyha770c72_0.conda#37c47ea93ef00dd80d880fc4ba21256a +https://conda.anaconda.org/conda-forge/noarch/pylint-3.0.4-pyhd8ed1ab_0.conda#d536ee47166d8984c6acd8114ac26cf1 +https://conda.anaconda.org/conda-forge/linux-64/pyspnego-0.9.1-py310h2372a71_2.conda#0a99339b277686c7d824abf9de396901 +https://conda.anaconda.org/conda-forge/noarch/python-flatbuffers-24.3.7-pyh59ac667_0.conda#24c1a37849fcd4c74923a38b029b208f +https://conda.anaconda.org/conda-forge/linux-64/python-gssapi-1.8.3-py310h98feede_0.conda#a5ea028f63386c53a2b8ff4d09065259 +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.10.1-pyhd8ed1ab_0.conda#1371f9394b20fd1fe7419a2aa9b38888 +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.5-pyhd8ed1ab_0.conda#e62ea65e1979c18c4c9034567e7105c5 +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.10.1-pyhd8ed1ab_0.conda#15b849d7f03b7580a88a3f887db5ad40 +https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.0.0-cuda112py310h9871d0b_200.conda#7d0ebb619bd0c1a451d167886d2cc904 +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.0.0-hcb28a07_0.conda#f53005657267d6b1233c2852fcb84707 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-headless-execution-driver-0.0.12-pyhd8ed1ab_0.conda#fe8919032eb413e76a7802f013a536ee +https://conda.anaconda.org/conda-forge/linux-64/y-py-0.6.2-py310hcb5633a_0.conda#892e912e08ba834aa77ff25f983a4e9e +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.14-pyhd8ed1ab_0.conda#27319d665d06aa5c25b6a07d04a4256f +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-emr-extension-0.1.9-pyhd8ed1ab_0.conda#589f97989a6db8b2f21a53881fdd1d97 +https://conda.anaconda.org/conda-forge/noarch/sagemaker-jupyterlab-extension-0.2.0-pyhd8ed1ab_0.conda#9331340b5a844f5ac2c74eda353aa23e +https://conda.anaconda.org/conda-forge/noarch/sagemaker-kernel-wrapper-0.0.2-pyhd8ed1ab_0.conda#99480997ca2429b75169c896cc988cdb +https://conda.anaconda.org/conda-forge/noarch/schema-0.7.5-pyhd8ed1ab_1.conda#750d2ce4311d1502b51ad814407f043d +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.212.0-pyhd8ed1ab_0.conda#eb07d50e30f7b423929f9081118d3979 +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.0.21-pyhd8ed1ab_0.conda#fa0e9b0ca6c3e96d350711b6dbddaeb6 +https://conda.anaconda.org/conda-forge/linux-64/sasl-0.3.1-py310hd8f1fbe_2.tar.bz2#9b15d1759c99ad57ae43080cfca56d73 +https://conda.anaconda.org/conda-forge/linux-64/supervisor-4.2.5-py310hff52083_2.conda#7fe7fa4d80a99dc44ba15ef3e82707af +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.12.1-cuda112py310h1d65785_1.conda#4aa4b1fa72143cf84ff5776275f8b40d +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-estimator-2.12.1-cuda112py310ha5e6de5_1.conda#bb21f985bf64adc3751a3a1578a0a69e +https://conda.anaconda.org/conda-forge/linux-64/tensorflow-2.12.1-cuda112py310h457873b_1.conda#eee4abf81acd7c5205f476838713cfba +https://conda.anaconda.org/conda-forge/linux-64/uvicorn-0.28.1-py310hff52083_0.conda#2708791931977a77fa35bc601a571375 diff --git a/build_artifacts/v1/v1.6/v1.6.2/patch_glue_pyspark.json b/build_artifacts/v1/v1.6/v1.6.2/patch_glue_pyspark.json new file mode 100644 index 00000000..ab70fd8d --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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 and Ray", + "env": {"request_origin": "SageMakerStudioPySparkNotebook", "glue_version": "3.0"}, + "language": "python" +} + diff --git a/build_artifacts/v1/v1.6/v1.6.2/patch_glue_spark.json b/build_artifacts/v1/v1.6/v1.6.2/patch_glue_spark.json new file mode 100644 index 00000000..1bd168e7 --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/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/v1/v1.6/v1.6.2/source-version.txt b/build_artifacts/v1/v1.6/v1.6.2/source-version.txt new file mode 100644 index 00000000..2eda823f --- /dev/null +++ b/build_artifacts/v1/v1.6/v1.6.2/source-version.txt @@ -0,0 +1 @@ +1.6.1 \ No newline at end of file From e575ba50a9ed53a822ad34ed0ec1df70436fd259 Mon Sep 17 00:00:00 2001 From: Tian Wang <133085652+aws-tianquaw@users.noreply.github.com> Date: Tue, 26 Mar 2024 14:42:02 -0700 Subject: [PATCH 29/32] Remove unnecessary pip install in DEVELOPMENT.md --- DEVELOPMENT.md | 1 - 1 file changed, 1 deletion(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 835edb67..2b9d61df 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -29,7 +29,6 @@ pytest --local-image-id REPLACE_ME_WITH_IMAGE_ID Install pre-commit to run code style checks before each commit: ```shell -pip install pre-commit pre-commit install ``` From e5b0c9389bf03961ce1550433ee748e01ac2019b Mon Sep 17 00:00:00 2001 From: Ankit Kumar <148398256+kumarnzt@users.noreply.github.com> Date: Mon, 1 Apr 2024 09:49:59 -0700 Subject: [PATCH 30/32] Add sql-language-server config for LanguageServerManager (#311) --- .../v1/dirs/etc/jupyter/jupyter_server_config.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/template/v1/dirs/etc/jupyter/jupyter_server_config.py b/template/v1/dirs/etc/jupyter/jupyter_server_config.py index 8e45762f..b6332c11 100644 --- a/template/v1/dirs/etc/jupyter/jupyter_server_config.py +++ b/template/v1/dirs/etc/jupyter/jupyter_server_config.py @@ -14,3 +14,16 @@ # 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 From 657efb5c142b973004ab668bf3d8d88e4031c7c3 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Mon, 1 Apr 2024 12:33:38 -0700 Subject: [PATCH 31/32] Fixes for checkstyle --- .../dirs/etc/jupyter/jupyter_server_config.py | 9 ++++--- .../dirs/etc/jupyter/jupyter_server_config.py | 24 ++++++++++++++----- test/test_artifacts/v2/run_pandas_tests.py | 16 +++++++++---- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/template/v1/dirs/etc/jupyter/jupyter_server_config.py b/template/v1/dirs/etc/jupyter/jupyter_server_config.py index b6332c11..0182cc23 100644 --- a/template/v1/dirs/etc/jupyter/jupyter_server_config.py +++ b/template/v1/dirs/etc/jupyter/jupyter_server_config.py @@ -7,8 +7,8 @@ # 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 +# 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 @@ -20,10 +20,9 @@ # 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' - ] + c.LanguageServerManager.extra_node_roots = [f"{module_location}/sql-language-server"] except: pass diff --git a/template/v2/dirs/etc/jupyter/jupyter_server_config.py b/template/v2/dirs/etc/jupyter/jupyter_server_config.py index e05997f2..0182cc23 100644 --- a/template/v2/dirs/etc/jupyter/jupyter_server_config.py +++ b/template/v2/dirs/etc/jupyter/jupyter_server_config.py @@ -1,16 +1,28 @@ # Default Jupyter server config -# Note: those config can be overridden by user-level configs. +# 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 } +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. +# 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 +# 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/test/test_artifacts/v2/run_pandas_tests.py b/test/test_artifacts/v2/run_pandas_tests.py index 00127f2d..088e6620 100644 --- a/test/test_artifacts/v2/run_pandas_tests.py +++ b/test/test_artifacts/v2/run_pandas_tests.py @@ -14,10 +14,16 @@ # 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']) +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) From 39a9e42e335f583b834edd3eb8578f3dede4a9c0 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Tue, 2 Apr 2024 13:02:24 -0700 Subject: [PATCH 32/32] Fix for isort import checker --- test/test_artifacts/v2/run_pandas_tests.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/test_artifacts/v2/run_pandas_tests.py b/test/test_artifacts/v2/run_pandas_tests.py index 088e6620..2995581f 100644 --- a/test/test_artifacts/v2/run_pandas_tests.py +++ b/test/test_artifacts/v2/run_pandas_tests.py @@ -1,4 +1,8 @@ -import pandas, sys, os, site +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