diff --git a/.github/workflows/build_one.yml b/.github/workflows/build_one.yml index 0e0203905..2faa97aaf 100644 --- a/.github/workflows/build_one.yml +++ b/.github/workflows/build_one.yml @@ -120,7 +120,7 @@ jobs: git add ./doc/$DIR git commit -m "adding $DIR" git push --force "https://pyviz-developers:${{ secrets.GITHUB_TOKEN }}@github.com/holoviz-topics/examples.git" HEAD:$BRANCHNAME - git checkout - + git checkout @{-1} - name: clean up run: doit clean --clean-dep build:${{ inputs.project }} - name: git diff diff --git a/t_sne_roots/anaconda-project-lock.yml b/t_sne_roots/anaconda-project-lock.yml new file mode 100644 index 000000000..069746d8d --- /dev/null +++ b/t_sne_roots/anaconda-project-lock.yml @@ -0,0 +1,594 @@ +# This is an Anaconda project lock file. +# The lock file locks down exact versions of all your dependencies. +# +# In most cases, this file is automatically maintained by the `anaconda-project` command or GUI tools. +# It's best to keep this file in revision control (such as git or svn). +# The file is in YAML format, please see http://www.yaml.org/start.html for more. +# + +# +# Set to false to ignore locked versions. +# +locking_enabled: true + +# +# A key goes in here for each env spec. +# +env_specs: + default: + locked: true + env_spec_hash: cecf2b0c2e778d9c24fc68215d1978b37a7f8489 + platforms: + - linux-64 + - osx-64 + - win-64 + packages: + all: + - argon2-cffi=21.3.0=pyhd3eb1b0_0 + - asttokens=2.0.5=pyhd3eb1b0_0 + - async-lru=2.0.3=pyhd8ed1ab_0 + - backcall=0.2.0=pyhd3eb1b0_0 + - blas=1.0=mkl + - bleach=4.1.0=pyhd3eb1b0_0 + - charset-normalizer=2.0.4=pyhd3eb1b0_0 + - cycler=0.11.0=pyhd3eb1b0_0 + - decorator=5.1.1=pyhd3eb1b0_0 + - defusedxml=0.7.1=pyhd3eb1b0_0 + - executing=0.8.3=pyhd3eb1b0_0 + - fonttools=4.25.0=pyhd3eb1b0_0 + - importlib_metadata=6.0.0=hd3eb1b0_0 + - importlib_resources=5.2.0=pyhd3eb1b0_1 + - json5=0.9.6=pyhd3eb1b0_0 + - jupyter-lsp=2.2.0=pyhd8ed1ab_0 + - jupyterlab=4.0.3=pyhd8ed1ab_0 + - jupyterlab_pygments=0.1.2=py_0 + - jupyterlab_server=2.24.0=pyhd8ed1ab_0 + - munkres=1.1.4=py_0 + - notebook=7.0.0=pyhd8ed1ab_0 + - pandocfilters=1.5.0=pyhd3eb1b0_0 + - parso=0.8.3=pyhd3eb1b0_0 + - partd=1.2.0=pyhd3eb1b0_1 + - pickleshare=0.7.5=pyhd3eb1b0_1003 + - pure_eval=0.2.2=pyhd3eb1b0_0 + - pycparser=2.21=pyhd3eb1b0_0 + - python-dateutil=2.8.2=pyhd3eb1b0_0 + - send2trash=1.8.0=pyhd3eb1b0_1 + - six=1.16.0=pyhd3eb1b0_1 + - stack_data=0.2.0=pyhd3eb1b0_0 + - tzdata=2023c=h04d1e81_0 + - wcwidth=0.2.5=pyhd3eb1b0_0 + unix: + - pexpect=4.8.0=pyhd3eb1b0_3 + - ptyprocess=0.7.0=pyhd3eb1b0_2 + linux-64: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_gnu + - abseil-cpp=20211102.0=hd4dd3e8_0 + - anyio=3.5.0=py39h06a4308_0 + - argon2-cffi-bindings=21.2.0=py39h7f8727e_0 + - arrow-cpp=11.0.0=py39h613000e_0 + - attrs=22.1.0=py39h06a4308_0 + - aws-c-common=0.4.57=he6710b0_1 + - aws-c-event-stream=0.1.6=h2531618_5 + - aws-checksums=0.1.9=he6710b0_0 + - aws-sdk-cpp=1.8.185=hce553d0_0 + - babel=2.11.0=py39h06a4308_0 + - beautifulsoup4=4.12.2=py39h06a4308_0 + - bokeh=3.1.1=py39h2f386ee_0 + - boost-cpp=1.73.0=h7f8727e_12 + - bottleneck=1.3.5=py39h7deecbd_0 + - brotli-bin=1.0.9=h5eee18b_7 + - brotli=1.0.9=h5eee18b_7 + - brotlipy=0.7.0=py39h27cfd23_1003 + - bzip2=1.0.8=h7b6447c_0 + - c-ares=1.19.0=h5eee18b_0 + - ca-certificates=2023.05.30=h06a4308_0 + - certifi=2023.7.22=py39h06a4308_0 + - cffi=1.15.1=py39h74dc2b5_0 + - click=8.0.4=py39h06a4308_0 + - cloudpickle=2.2.1=py39h06a4308_0 + - colorcet=3.0.1=py39h06a4308_0 + - comm=0.1.2=py39h06a4308_0 + - contourpy=1.0.5=py39hdb19cb5_0 + - cryptography=41.0.2=py39h774aba0_0 + - dask-core=2023.6.0=py39h06a4308_0 + - datashader=0.15.1=py39h06a4308_0 + - datashape=0.5.4=py39h06a4308_1 + - debugpy=1.5.1=py39h295c915_0 + - entrypoints=0.4=py39h06a4308_0 + - freetype=2.12.1=h4a9f257_0 + - fsspec=2023.4.0=py39h06a4308_0 + - gflags=2.2.2=he6710b0_0 + - giflib=5.2.1=h5eee18b_3 + - glog=0.5.0=h2531618_0 + - grpc-cpp=1.46.1=h33aed49_1 + - holoviews=1.17.0=py39h06a4308_0 + - icu=58.2=he6710b0_3 + - idna=3.4=py39h06a4308_0 + - importlib-metadata=6.0.0=py39h06a4308_0 + - intel-openmp=2021.4.0=h06a4308_3561 + - ipykernel=6.19.2=py39hb070fc8_0 + - ipython=8.12.0=py39h06a4308_0 + - jedi=0.18.1=py39h06a4308_1 + - jinja2=3.1.2=py39h06a4308_0 + - jpeg=9e=h5eee18b_1 + - jsonschema=4.17.3=py39h06a4308_0 + - jupyter_client=8.1.0=py39h06a4308_0 + - jupyter_core=5.3.0=py39h06a4308_0 + - jupyter_events=0.6.3=py39h06a4308_0 + - jupyter_server=2.5.0=py39h06a4308_0 + - jupyter_server_terminals=0.4.4=py39h06a4308_1 + - kiwisolver=1.4.4=py39h6a678d5_0 + - krb5=1.20.1=h568e23c_1 + - lcms2=2.12=h3be6417_0 + - ld_impl_linux-64=2.38=h1181459_1 + - lerc=3.0=h295c915_0 + - libboost=1.73.0=h28710b8_12 + - libbrotlicommon=1.0.9=h5eee18b_7 + - libbrotlidec=1.0.9=h5eee18b_7 + - libbrotlienc=1.0.9=h5eee18b_7 + - libcurl=8.1.1=h91b91d3_1 + - libdeflate=1.17=h5eee18b_0 + - libedit=3.1.20221030=h5eee18b_0 + - libev=4.33=h7f8727e_1 + - libevent=2.1.12=h8f2d780_0 + - libffi=3.3=he6710b0_2 + - libgcc-ng=13.1.0=he5830b7_0 + - libgfortran-ng=7.3.0=hdf63c60_0 + - libgomp=13.1.0=he5830b7_0 + - libllvm14=14.0.6=hef93074_0 + - libnghttp2=1.52.0=ha637b67_1 + - libpng=1.6.39=h5eee18b_0 + - libprotobuf=3.20.3=he621ea3_0 + - libsodium=1.0.18=h7b6447c_0 + - libssh2=1.10.0=h37d81fd_2 + - libstdcxx-ng=13.1.0=hfd8a6a1_0 + - libthrift=0.15.0=h0d84882_2 + - libtiff=4.5.0=h6a678d5_2 + - libwebp-base=1.2.4=h5eee18b_1 + - libwebp=1.2.4=h11a3e52_1 + - libxml2=2.10.3=hcbfbd50_0 + - libxslt=1.1.37=h2085143_0 + - linkify-it-py=2.0.0=py39h06a4308_0 + - llvmlite=0.40.0=py39he621ea3_0 + - locket=1.0.0=py39h06a4308_0 + - lxml=4.9.2=py39h5eee18b_0 + - lz4-c=1.9.4=h6a678d5_0 + - markdown-it-py=2.2.0=py39h06a4308_1 + - markdown=3.4.1=py39h06a4308_0 + - markupsafe=2.1.1=py39h7f8727e_0 + - matplotlib-base=3.7.1=py39h417a72b_1 + - matplotlib-inline=0.1.6=py39h06a4308_0 + - mdit-py-plugins=0.3.0=py39h06a4308_0 + - mdurl=0.1.0=py39h06a4308_0 + - mistune=0.8.4=py39h27cfd23_1000 + - mkl-service=2.4.0=py39h7f8727e_0 + - mkl=2021.4.0=h06a4308_640 + - mkl_fft=1.3.1=py39hd3c417c_0 + - mkl_random=1.2.2=py39h51133e4_0 + - multipledispatch=0.6.0=py39h06a4308_0 + - nbclient=0.5.13=py39h06a4308_0 + - nbconvert=6.5.4=py39h06a4308_0 + - nbformat=5.7.0=py39h06a4308_0 + - ncurses=6.4=h6a678d5_0 + - nest-asyncio=1.5.6=py39h06a4308_0 + - notebook-shim=0.2.2=py39h06a4308_0 + - numba=0.57.1=py39hb75a051_0 + - numexpr=2.8.4=py39he184ba9_0 + - numpy-base=1.24.3=py39h31eccc5_0 + - numpy=1.24.3=py39h14f4228_0 + - openssl=1.1.1u=h7f8727e_0 + - orc=1.7.4=hb3bc3d3_1 + - packaging=23.0=py39h06a4308_0 + - pandas=1.4.4=py39h6a678d5_0 + - panel=1.1.1=py39h06a4308_0 + - param=1.13.0=py39h06a4308_0 + - pillow=9.4.0=py39h6a678d5_0 + - pip=23.2.1=py39h06a4308_0 + - platformdirs=2.5.2=py39h06a4308_0 + - prometheus_client=0.14.1=py39h06a4308_0 + - prompt-toolkit=3.0.36=py39h06a4308_0 + - psutil=5.9.0=py39h5eee18b_0 + - pyarrow=11.0.0=py39h992f0b0_0 + - pyct=0.5.0=py39h06a4308_0 + - pygments=2.15.1=py39h06a4308_1 + - pyopenssl=23.2.0=py39h06a4308_0 + - pyparsing=3.0.9=py39h06a4308_0 + - pyrsistent=0.18.0=py39heee7806_0 + - pysocks=1.7.1=py39h06a4308_0 + - python-fastjsonschema=2.16.2=py39h06a4308_0 + - python-json-logger=2.0.7=py39h06a4308_0 + - python=3.9.0=hdb3f193_2 + - python_abi=3.9=2_cp39 + - pytz=2022.7=py39h06a4308_0 + - pyviz_comms=2.3.0=py39h06a4308_0 + - pyyaml=6.0=py39h5eee18b_1 + - pyzmq=25.1.0=py39h6a678d5_0 + - re2=2022.04.01=h295c915_0 + - readline=8.2=h5eee18b_0 + - requests=2.31.0=py39h06a4308_0 + - rfc3339-validator=0.1.4=py39h06a4308_0 + - rfc3986-validator=0.1.1=py39h06a4308_0 + - scipy=1.6.2=py39had2a1c9_1 + - setuptools=68.0.0=py39h06a4308_0 + - snappy=1.1.9=h295c915_0 + - sniffio=1.2.0=py39h06a4308_1 + - soupsieve=2.4=py39h06a4308_0 + - sqlite=3.41.2=h5eee18b_0 + - terminado=0.17.1=py39h06a4308_0 + - tinycss2=1.2.1=py39h06a4308_0 + - tk=8.6.12=h1ccaba5_0 + - tomli=2.0.1=py39h06a4308_0 + - toolz=0.12.0=py39h06a4308_0 + - tornado=6.2=py39h5eee18b_0 + - tqdm=4.65.0=py39hb070fc8_0 + - traitlets=5.7.1=py39h06a4308_0 + - typing-extensions=4.7.1=py39h06a4308_0 + - typing_extensions=4.7.1=py39h06a4308_0 + - uc-micro-py=1.0.1=py39h06a4308_0 + - urllib3=1.26.16=py39h06a4308_0 + - utf8proc=2.6.1=h27cfd23_0 + - webencodings=0.5.1=py39h06a4308_1 + - websocket-client=0.58.0=py39h06a4308_4 + - wheel=0.38.4=py39h06a4308_0 + - xarray=2023.6.0=py39h06a4308_0 + - xyzservices=2022.9.0=py39h06a4308_1 + - xz=5.4.2=h5eee18b_0 + - yaml=0.2.5=h7b6447c_0 + - zeromq=4.3.4=h2531618_0 + - zipp=3.11.0=py39h06a4308_0 + - zlib=1.2.13=h5eee18b_0 + - zstd=1.5.5=hc292b87_0 + osx-64: + - abseil-cpp=20211102.0=he9d5cce_0 + - anyio=3.5.0=py39hecd8cb5_0 + - appdirs=1.4.4=pyhd3eb1b0_0 + - appnope=0.1.2=py39hecd8cb5_1001 + - argon2-cffi-bindings=21.2.0=py39hca72f7f_0 + - arrow-cpp=11.0.0=py39h7f74497_0 + - attrs=22.1.0=py39hecd8cb5_0 + - aws-c-common=0.4.57=hb1e8313_1 + - aws-c-event-stream=0.1.6=h23ab428_5 + - aws-checksums=0.1.9=hb1e8313_0 + - aws-sdk-cpp=1.8.185=he271ece_0 + - babel=2.11.0=py39hecd8cb5_0 + - beautifulsoup4=4.12.2=py39hecd8cb5_0 + - bokeh=3.1.1=py39h20db666_0 + - boost-cpp=1.73.0=hca72f7f_12 + - bottleneck=1.3.5=py39h67323c0_0 + - brotli-bin=1.0.9=hca72f7f_7 + - brotli=1.0.9=hca72f7f_7 + - brotlipy=0.7.0=py39h9ed2024_1003 + - bzip2=1.0.8=h1de35cc_0 + - c-ares=1.19.0=h6c40b1e_0 + - ca-certificates=2023.05.30=hecd8cb5_0 + - certifi=2023.7.22=py39hecd8cb5_0 + - cffi=1.15.1=py39hc55c11b_0 + - click=8.0.4=py39hecd8cb5_0 + - cloudpickle=2.2.1=py39hecd8cb5_0 + - colorcet=3.0.1=py39hecd8cb5_0 + - comm=0.1.2=py39hecd8cb5_0 + - contourpy=1.0.5=py39haf03e11_0 + - cryptography=41.0.2=py39h2093b18_0 + - dask-core=2023.6.0=py39hecd8cb5_0 + - datashader=0.15.1=py39hecd8cb5_0 + - datashape=0.5.4=py39hecd8cb5_1 + - debugpy=1.5.1=py39he9d5cce_0 + - entrypoints=0.4=py39hecd8cb5_0 + - freetype=2.12.1=hd8bbffd_0 + - fsspec=2023.4.0=py39hecd8cb5_0 + - gflags=2.2.2=h0a44026_0 + - giflib=5.2.1=h6c40b1e_3 + - glog=0.5.0=h23ab428_0 + - grpc-cpp=1.46.1=h64d96ca_1 + - holoviews=1.17.0=py39hecd8cb5_0 + - icu=58.2=h0a44026_3 + - idna=3.4=py39hecd8cb5_0 + - importlib-metadata=6.0.0=py39hecd8cb5_0 + - intel-openmp=2023.1.0=ha357a0b_43547 + - ipykernel=6.19.2=py39h01d92e1_0 + - ipython=8.12.0=py39hecd8cb5_0 + - jedi=0.18.1=py39hecd8cb5_1 + - jinja2=3.1.2=py39hecd8cb5_0 + - jpeg=9e=h6c40b1e_1 + - jsonschema=4.17.3=py39hecd8cb5_0 + - jupyter_client=8.1.0=py39hecd8cb5_0 + - jupyter_core=5.3.0=py39hecd8cb5_0 + - jupyter_events=0.6.3=py39hecd8cb5_0 + - jupyter_server=2.5.0=py39hecd8cb5_0 + - jupyter_server_terminals=0.4.4=py39hecd8cb5_1 + - kiwisolver=1.4.4=py39hcec6c5f_0 + - krb5=1.20.1=hdba6334_1 + - lcms2=2.12=hf1fd2bf_0 + - lerc=3.0=he9d5cce_0 + - libboost=1.73.0=h3fa6bed_12 + - libbrotlicommon=1.0.9=hca72f7f_7 + - libbrotlidec=1.0.9=hca72f7f_7 + - libbrotlienc=1.0.9=hca72f7f_7 + - libcurl=8.1.1=ha585b31_1 + - libcxx=14.0.6=h9765a3e_0 + - libdeflate=1.17=hb664fd8_0 + - libedit=3.1.20221030=h6c40b1e_0 + - libev=4.33=h9ed2024_1 + - libevent=2.1.12=h0a4fc7d_0 + - libffi=3.3=hb1e8313_2 + - libgfortran5=11.3.0=h9dfd629_28 + - libgfortran=5.0.0=11_3_0_hecd8cb5_28 + - libiconv=1.16=hca72f7f_2 + - libllvm14=14.0.6=he552d86_0 + - libnghttp2=1.52.0=h1c88b7d_1 + - libpng=1.6.39=h6c40b1e_0 + - libprotobuf=3.20.3=hfff2838_0 + - libsodium=1.0.18=h1de35cc_0 + - libssh2=1.10.0=hdb2fb19_2 + - libthrift=0.15.0=h48f73ad_2 + - libtiff=4.5.0=hcec6c5f_2 + - libwebp-base=1.2.4=h6c40b1e_1 + - libwebp=1.2.4=hf6ce154_1 + - libxml2=2.10.3=h930c0e2_0 + - libxslt=1.1.37=h6d1eb0e_0 + - linkify-it-py=2.0.0=py39hecd8cb5_0 + - llvm-openmp=14.0.6=h0dcd299_0 + - llvmlite=0.40.0=py39hfff2838_0 + - locket=1.0.0=py39hecd8cb5_0 + - lxml=4.9.2=py39h6c40b1e_0 + - lz4-c=1.9.4=hcec6c5f_0 + - markdown-it-py=2.2.0=py39hecd8cb5_1 + - markdown=3.4.1=py39hecd8cb5_0 + - markupsafe=2.1.1=py39hca72f7f_0 + - matplotlib-base=3.7.1=py39hda11e5a_1 + - matplotlib-inline=0.1.6=py39hecd8cb5_0 + - mdit-py-plugins=0.3.0=py39hecd8cb5_0 + - mdurl=0.1.0=py39hecd8cb5_0 + - mistune=0.8.4=py39h9ed2024_1000 + - mkl-service=2.4.0=py39h6c40b1e_1 + - mkl=2023.1.0=h59209a4_43558 + - mkl_fft=1.3.6=py39h07fba90_1 + - mkl_random=1.2.2=py39h07fba90_1 + - multipledispatch=0.6.0=py39hecd8cb5_0 + - nbclient=0.5.13=py39hecd8cb5_0 + - nbconvert=6.5.4=py39hecd8cb5_0 + - nbformat=5.7.0=py39hecd8cb5_0 + - ncurses=6.4=hcec6c5f_0 + - nest-asyncio=1.5.6=py39hecd8cb5_0 + - notebook-shim=0.2.2=py39hecd8cb5_0 + - numba=0.57.0=py39h3ea8b11_0 + - numexpr=2.8.4=py39h47b59a4_1 + - numpy-base=1.24.3=py39hcfaf2c3_1 + - numpy=1.24.3=py39h47b59a4_1 + - openssl=1.1.1u=hca72f7f_0 + - orc=1.7.4=h995b336_1 + - packaging=23.0=py39hecd8cb5_0 + - pandas=1.5.3=py39h07fba90_0 + - panel=1.1.1=py39hecd8cb5_0 + - param=1.13.0=py39hecd8cb5_0 + - pillow=9.4.0=py39hcec6c5f_0 + - pip=23.2.1=py39hecd8cb5_0 + - platformdirs=2.5.2=py39hecd8cb5_0 + - pooch=1.4.0=pyhd3eb1b0_0 + - prometheus_client=0.14.1=py39hecd8cb5_0 + - prompt-toolkit=3.0.36=py39hecd8cb5_0 + - psutil=5.9.0=py39hca72f7f_0 + - pyarrow=11.0.0=py39h7122ad0_0 + - pyct=0.5.0=py39hecd8cb5_0 + - pygments=2.15.1=py39hecd8cb5_1 + - pyopenssl=23.2.0=py39hecd8cb5_0 + - pyparsing=3.0.9=py39hecd8cb5_0 + - pyrsistent=0.18.0=py39hca72f7f_0 + - pysocks=1.7.1=py39hecd8cb5_0 + - python-fastjsonschema=2.16.2=py39hecd8cb5_0 + - python-json-logger=2.0.7=py39hecd8cb5_0 + - python=3.9.0=h88f2d9e_2 + - pytz=2022.7=py39hecd8cb5_0 + - pyviz_comms=2.3.0=py39hecd8cb5_0 + - pyyaml=6.0=py39h6c40b1e_1 + - pyzmq=25.1.0=py39hcec6c5f_0 + - re2=2022.04.01=he9d5cce_0 + - readline=8.2=hca72f7f_0 + - requests=2.31.0=py39hecd8cb5_0 + - rfc3339-validator=0.1.4=py39hecd8cb5_0 + - rfc3986-validator=0.1.1=py39hecd8cb5_0 + - scipy=1.10.1=py39hf241641_1 + - setuptools=68.0.0=py39hecd8cb5_0 + - snappy=1.1.9=he9d5cce_0 + - sniffio=1.2.0=py39hecd8cb5_1 + - soupsieve=2.4=py39hecd8cb5_0 + - sqlite=3.41.2=h6c40b1e_0 + - tbb=2021.8.0=ha357a0b_0 + - terminado=0.17.1=py39hecd8cb5_0 + - tinycss2=1.2.1=py39hecd8cb5_0 + - tk=8.6.12=h5d9f67b_0 + - tomli=2.0.1=py39hecd8cb5_0 + - toolz=0.12.0=py39hecd8cb5_0 + - tornado=6.2=py39hca72f7f_0 + - tqdm=4.65.0=py39h01d92e1_0 + - traitlets=5.7.1=py39hecd8cb5_0 + - typing-extensions=4.7.1=py39hecd8cb5_0 + - typing_extensions=4.7.1=py39hecd8cb5_0 + - uc-micro-py=1.0.1=py39hecd8cb5_0 + - urllib3=1.26.16=py39hecd8cb5_0 + - utf8proc=2.6.1=h9ed2024_0 + - webencodings=0.5.1=py39hecd8cb5_1 + - websocket-client=0.58.0=py39hecd8cb5_4 + - wheel=0.38.4=py39hecd8cb5_0 + - xarray=2023.6.0=py39hecd8cb5_0 + - xyzservices=2022.9.0=py39hecd8cb5_1 + - xz=5.4.2=h6c40b1e_0 + - yaml=0.2.5=haf1e3a3_0 + - zeromq=4.3.4=h23ab428_0 + - zipp=3.11.0=py39hecd8cb5_0 + - zlib=1.2.13=h4dc903c_0 + - zstd=1.5.5=hc035e20_0 + win-64: + - abseil-cpp=20211102.0=hd77b12b_0 + - anyio=3.5.0=py39haa95532_0 + - appdirs=1.4.4=pyhd3eb1b0_0 + - argon2-cffi-bindings=21.2.0=py39h2bbff1b_0 + - arrow-cpp=11.0.0=py39h3577439_0 + - attrs=22.1.0=py39haa95532_0 + - aws-c-common=0.4.57=ha925a31_1 + - aws-c-event-stream=0.1.6=hd77b12b_5 + - aws-checksums=0.1.9=ha925a31_0 + - aws-sdk-cpp=1.8.185=hd77b12b_0 + - babel=2.11.0=py39haa95532_0 + - beautifulsoup4=4.12.2=py39haa95532_0 + - bokeh=3.1.1=py39h9909e9c_0 + - boost-cpp=1.73.0=h2bbff1b_12 + - bottleneck=1.3.5=py39h080aedc_0 + - brotli-bin=1.0.9=h2bbff1b_7 + - brotli=1.0.9=h2bbff1b_7 + - brotlipy=0.7.0=py39h2bbff1b_1003 + - bzip2=1.0.8=he774522_0 + - c-ares=1.19.0=h2bbff1b_0 + - ca-certificates=2023.05.30=haa95532_0 + - certifi=2023.7.22=py39haa95532_0 + - cffi=1.15.1=py39h2bbff1b_3 + - click=8.0.4=py39haa95532_0 + - cloudpickle=2.2.1=py39haa95532_0 + - colorama=0.4.6=py39haa95532_0 + - colorcet=3.0.1=py39haa95532_0 + - comm=0.1.2=py39haa95532_0 + - contourpy=1.0.5=py39h59b6b97_0 + - cryptography=41.0.2=py39h31511bf_0 + - dask-core=2023.6.0=py39haa95532_0 + - datashader=0.15.1=py39haa95532_0 + - datashape=0.5.4=py39haa95532_1 + - debugpy=1.5.1=py39hd77b12b_0 + - entrypoints=0.4=py39haa95532_0 + - freetype=2.12.1=ha860e81_0 + - fsspec=2023.4.0=py39haa95532_0 + - gflags=2.2.2=ha925a31_0 + - giflib=5.2.1=h8cc25b3_3 + - glog=0.5.0=hd77b12b_0 + - holoviews=1.17.0=py39haa95532_0 + - icc_rt=2022.1.0=h6049295_2 + - idna=3.4=py39haa95532_0 + - importlib-metadata=6.0.0=py39haa95532_0 + - intel-openmp=2023.1.0=h59b6b97_46319 + - ipykernel=6.19.2=py39hd4e2768_0 + - ipython=8.12.0=py39haa95532_0 + - jedi=0.18.1=py39haa95532_1 + - jinja2=3.1.2=py39haa95532_0 + - jpeg=9e=h2bbff1b_1 + - jsonschema=4.17.3=py39haa95532_0 + - jupyter_client=8.1.0=py39haa95532_0 + - jupyter_core=5.3.0=py39haa95532_0 + - jupyter_events=0.6.3=py39haa95532_0 + - jupyter_server=2.5.0=py39haa95532_0 + - jupyter_server_terminals=0.4.4=py39haa95532_1 + - kiwisolver=1.4.4=py39hd77b12b_0 + - lerc=3.0=hd77b12b_0 + - libboost=1.73.0=h6c2663c_12 + - libbrotlicommon=1.0.9=h2bbff1b_7 + - libbrotlidec=1.0.9=h2bbff1b_7 + - libbrotlienc=1.0.9=h2bbff1b_7 + - libcurl=8.1.1=h86230a5_1 + - libdeflate=1.17=h2bbff1b_0 + - libevent=2.1.12=hcc03200_0 + - libiconv=1.16=h2bbff1b_2 + - libllvm14=14.0.6=h4157e71_3 + - libpng=1.6.39=h8cc25b3_0 + - libprotobuf=3.20.3=h23ce68f_0 + - libsodium=1.0.18=h62dcd97_0 + - libssh2=1.10.0=hcd4344a_2 + - libthrift=0.15.0=he49ee6e_2 + - libtiff=4.5.0=h6c2663c_2 + - libwebp-base=1.2.4=h2bbff1b_1 + - libwebp=1.2.4=hbc33d0d_1 + - libxml2=2.10.3=h0ad7f3c_0 + - libxslt=1.1.37=h2bbff1b_0 + - linkify-it-py=2.0.0=py39haa95532_0 + - llvmlite=0.40.0=py39hf2fb9eb_0 + - locket=1.0.0=py39haa95532_0 + - lxml=4.9.2=py39h2bbff1b_0 + - lz4-c=1.9.4=h2bbff1b_0 + - markdown-it-py=2.2.0=py39haa95532_1 + - markdown=3.4.1=py39haa95532_0 + - markupsafe=2.1.1=py39h2bbff1b_0 + - matplotlib-base=3.7.1=py39hf11a4ad_1 + - matplotlib-inline=0.1.6=py39haa95532_0 + - mdit-py-plugins=0.3.0=py39haa95532_0 + - mdurl=0.1.0=py39haa95532_0 + - mistune=0.8.4=py39h2bbff1b_1000 + - mkl-service=2.4.0=py39h2bbff1b_1 + - mkl=2023.1.0=h8bd8f75_46356 + - mkl_fft=1.3.6=py39hf11a4ad_1 + - mkl_random=1.2.2=py39hf11a4ad_1 + - multipledispatch=0.6.0=py39haa95532_0 + - nbclient=0.5.13=py39haa95532_0 + - nbconvert=6.5.4=py39haa95532_0 + - nbformat=5.7.0=py39haa95532_0 + - nest-asyncio=1.5.6=py39haa95532_0 + - notebook-shim=0.2.2=py39haa95532_0 + - numba=0.57.0=py39h4ed8f06_0 + - numexpr=2.8.4=py39h7b80656_1 + - numpy-base=1.24.3=py39h8a87ada_1 + - numpy=1.24.3=py39h79a8e48_1 + - openssl=1.1.1u=h2bbff1b_0 + - orc=1.7.4=h623e30f_1 + - packaging=23.0=py39haa95532_0 + - pandas=1.5.3=py39hf11a4ad_0 + - panel=1.1.1=py39haa95532_0 + - param=1.13.0=py39haa95532_0 + - pillow=9.4.0=py39hd77b12b_0 + - pip=23.2.1=py39haa95532_0 + - platformdirs=2.5.2=py39haa95532_0 + - pooch=1.4.0=pyhd3eb1b0_0 + - prometheus_client=0.14.1=py39haa95532_0 + - prompt-toolkit=3.0.36=py39haa95532_0 + - psutil=5.9.0=py39h2bbff1b_0 + - pyarrow=11.0.0=py39haa45b5f_0 + - pyct=0.5.0=py39haa95532_0 + - pygments=2.15.1=py39haa95532_1 + - pyopenssl=23.2.0=py39haa95532_0 + - pyparsing=3.0.9=py39haa95532_0 + - pyrsistent=0.18.0=py39h196d8e1_0 + - pysocks=1.7.1=py39haa95532_0 + - python-fastjsonschema=2.16.2=py39haa95532_0 + - python-json-logger=2.0.7=py39haa95532_0 + - python=3.9.0=h6244533_2 + - pytz=2022.7=py39haa95532_0 + - pyviz_comms=2.3.0=py39haa95532_0 + - pywin32=305=py39h2bbff1b_0 + - pywinpty=2.0.10=py39h5da7b33_0 + - pyyaml=6.0=py39h2bbff1b_1 + - pyzmq=25.1.0=py39hd77b12b_0 + - re2=2022.04.01=hd77b12b_0 + - requests=2.31.0=py39haa95532_0 + - rfc3339-validator=0.1.4=py39haa95532_0 + - rfc3986-validator=0.1.1=py39haa95532_0 + - scipy=1.10.1=py39hdcfc7df_1 + - setuptools=68.0.0=py39haa95532_0 + - snappy=1.1.9=h6c2663c_0 + - sniffio=1.2.0=py39haa95532_1 + - soupsieve=2.4=py39haa95532_0 + - sqlite=3.41.2=h2bbff1b_0 + - tbb=2021.8.0=h59b6b97_0 + - terminado=0.17.1=py39haa95532_0 + - tinycss2=1.2.1=py39haa95532_0 + - tk=8.6.12=h2bbff1b_0 + - tomli=2.0.1=py39haa95532_0 + - toolz=0.12.0=py39haa95532_0 + - tornado=6.2=py39h2bbff1b_0 + - tqdm=4.65.0=py39hd4e2768_0 + - traitlets=5.7.1=py39haa95532_0 + - typing-extensions=4.7.1=py39haa95532_0 + - typing_extensions=4.7.1=py39haa95532_0 + - uc-micro-py=1.0.1=py39haa95532_0 + - urllib3=1.26.16=py39haa95532_0 + - utf8proc=2.6.1=h2bbff1b_0 + - vc=14.2=h21ff451_1 + - vs2015_runtime=14.27.29016=h5e58377_2 + - webencodings=0.5.1=py39haa95532_1 + - websocket-client=0.58.0=py39haa95532_4 + - wheel=0.38.4=py39haa95532_0 + - win_inet_pton=1.1.0=py39haa95532_0 + - winpty=0.4.3=4 + - xarray=2023.6.0=py39haa95532_0 + - xyzservices=2022.9.0=py39haa95532_1 + - xz=5.4.2=h8cc25b3_0 + - yaml=0.2.5=he774522_0 + - zeromq=4.3.4=hd77b12b_0 + - zipp=3.11.0=py39haa95532_0 + - zlib=1.2.13=h8cc25b3_0 + - zstd=1.5.5=hd43e919_0 diff --git a/t_sne_roots/anaconda-project.yml b/t_sne_roots/anaconda-project.yml new file mode 100644 index 000000000..552dabc8e --- /dev/null +++ b/t_sne_roots/anaconda-project.yml @@ -0,0 +1,75 @@ +name: t_sne_roots +description: Dimensionality reduction of multi-lingual dataset with datashaded instant hover + +examples_config: + # Creation date following the YYYY-MM-DD format + created: 2023-07-28 + maintainers: + - "jlstevens" + labels: + - "datashader" + - "panel" + + ### OPTIONAL ### + + title: "t-SNE ROOTS" + # Listed deployments will by default automatically be started. + # Maximum number of deployments is 2. + # Each deployment must declare the command it deploys, options + # include "notebook" or "dashboard". + deployments: + # Will be deployed at {projname_with_hyphens}-notebook.pyviz.demo.anaconda.com + - command: dashboard + resource_profile: medium + auto_deploy: false + + # to build the website (e.g. too long or require too much data). + # This indicates the system not to run them. + skip_notebooks_evaluation: false + no_data_ingestion: false + gh_runner: "ubuntu-latest" + + +# required: (needed internally) +user_fields: [examples_config] + +# required: list of the channels needed to solve the environment +channels: +- defaults +- conda-forge + +packages: &pkgs +- notebook >=7 +# then list all your dependencies, including Python itself +- python ==3.9 +- holoviews >= 1.17.0 +- datashader >= 0.15.1 +- pyarrow +- numba >= 0.57 + + +dependencies: *pkgs + + +commands: + # if you intend to run notebooks, set the `notebook` command + dashboard: + # for a deployment, the `--rest-session-info --session-history -1` options are required + unix: panel serve --rest-session-info --session-history -1 t_sne_roots.ipynb + supports_http_options: true + + +# optional downloads +downloads: + DATA: + url: https://huggingface.co/datasets/cakiki/roots-tsne-data/resolve/main/data/train-00000-of-00001-9a434d9cf7fd233e.parquet # Keep our own copy? + description: | + Trained data using t-SNE on ROOTS by Christopher Akiki + # The output must be in the data/ subfolder + filename: data/train-00000-of-00001-9a434d9cf7fd233e.parquet + +# required: supported plaforms +platforms: +- linux-64 +- osx-64 +- win-64 diff --git a/t_sne_roots/t_sne_roots.ipynb b/t_sne_roots/t_sne_roots.ipynb new file mode 100644 index 000000000..e64143b09 --- /dev/null +++ b/t_sne_roots/t_sne_roots.ipynb @@ -0,0 +1,156 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "286d2e98-9f33-4e1e-bba4-f526360dfc59", + "metadata": {}, + "source": [ + "# Interactive t-SNE ROOTS dimensionality reduction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d774823", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import datashader as ds\n", + "import colorcet as cc\n", + "\n", + "import holoviews as hv\n", + "from holoviews.operation.datashader import datashade, rasterize, dynspread\n", + "import panel as pn\n", + "\n", + "pn.extension()\n", + "hv.extension('bokeh')" + ] + }, + { + "cell_type": "markdown", + "id": "9deb58ad-1c26-440c-a622-80a79159102c", + "metadata": {}, + "source": [ + "\n", + "*Visualization of t-Distributed Stochastic Neighbor Embedding of ROOTS language Corpus.*\n", + "\n", + "Trained data from Christopher Akiki (dataset `cakiki/roots-tsne-data` on Hugging Face " + ] + }, + { + "cell_type": "markdown", + "id": "c46d5abb-2a8c-4533-9e30-9970bf20e015", + "metadata": {}, + "source": [ + "## Load the data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6bf4b1c8", + "metadata": {}, + "outputs": [], + "source": [ + "tsne_embedding = pd.read_parquet('./data/train-00000-of-00001-9a434d9cf7fd233e.parquet')\n", + "df = pd.DataFrame(data=tsne_embedding, columns=['x','y','language'])\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "id": "d56df973-74b8-44af-a80b-cda8d304b4c6", + "metadata": {}, + "source": [ + "## Datashade and add hover layer\n", + "\n", + "Note that until client-side colormixing is supported, the `datashade` operation is used with an invisible hover layer overlaid on top." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3f9e6b7", + "metadata": {}, + "outputs": [], + "source": [ + "points = hv.Points(df, ['x','y'], ['language'])\n", + "op = datashade(points, color_key=cc.glasbey_light,\n", + " aggregator=ds.by('language', ds.count())).opts(show_legend=False, bgcolor='black', frame_width=600, aspect=1)\n", + "hover_layer = rasterize(points, selector=ds.first(\"x\"), x_sampling=2, y_sampling=2).opts(tools=[\"hover\"], alpha=0)" + ] + }, + { + "cell_type": "markdown", + "id": "5ac2a4f4-84fa-438c-b049-0a2f678c5270", + "metadata": {}, + "source": [ + "### Render" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b5f9f99b-afde-46d1-af64-b3a98a306bc5", + "metadata": {}, + "outputs": [], + "source": [ + "dynspread(op) * hover_layer" + ] + }, + { + "cell_type": "markdown", + "id": "1b2ab76e-b3f4-4c15-8295-2a1285d0ef62", + "metadata": {}, + "source": [ + "### Build a small dashboard with panel" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5bb031a1", + "metadata": {}, + "outputs": [], + "source": [ + "text = \"\"\"\n", + "### Visualization of t-Distributed Stochastic Neighbor Embedding of ROOTS language Corpus.
Trained data from Christopher Akiki (dataset `cakiki/roots-tsne-data` on Hugging Face\n", + "\"\"\"\n", + "\n", + "template = pn.template.FastListTemplate(\n", + " title=\"t-SNE clustering of ROOTS language corpus\"\n", + ")\n", + "\n", + "template.main.append(\n", + " pn.Column(\n", + " pn.pane.Markdown(text),\n", + " pn.Row(pn.HSpacer(), dynspread(op) * hover_layer, pn.HSpacer())\n", + " )\n", + ")\n", + "template.servable();" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/t_sne_roots/thumbnails/t_sne_roots.png b/t_sne_roots/thumbnails/t_sne_roots.png new file mode 100644 index 000000000..f341c5cda Binary files /dev/null and b/t_sne_roots/thumbnails/t_sne_roots.png differ diff --git a/test_data/t_sne_roots/train-00000-of-00001-9a434d9cf7fd233e.parquet b/test_data/t_sne_roots/train-00000-of-00001-9a434d9cf7fd233e.parquet new file mode 100644 index 000000000..c696af1dc Binary files /dev/null and b/test_data/t_sne_roots/train-00000-of-00001-9a434d9cf7fd233e.parquet differ