diff --git a/nyc_buildings/anaconda-project-lock.yml b/nyc_buildings/anaconda-project-lock.yml index 2131aa42d..ba66d5e58 100644 --- a/nyc_buildings/anaconda-project-lock.yml +++ b/nyc_buildings/anaconda-project-lock.yml @@ -10,10 +10,14 @@ # 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: ea57b24e6e540078f77829aeba2cee07aa24d2b2 + env_spec_hash: aee207472207ebee61e730fe089ddba572981b7b platforms: - linux-64 - osx-64 @@ -21,743 +25,649 @@ env_specs: - win-64 packages: all: - - argon2-cffi=21.3.0=pyhd3eb1b0_0 - - asttokens=2.0.5=pyhd3eb1b0_0 - - backcall=0.2.0=pyhd3eb1b0_0 - - 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 - - heapdict=1.0.1=pyhd3eb1b0_0 - - ipython_genutils=0.2.0=pyhd3eb1b0_1 - - jupyterlab_pygments=0.1.2=py_0 - - munkres=1.1.4=py_0 - - pandocfilters=1.5.0=pyhd3eb1b0_0 - - parso=0.8.3=pyhd3eb1b0_0 - - 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 - - python-tzdata=2023.3=pyhd3eb1b0_0 - - retrying=1.3.3=pyhd3eb1b0_2 - - send2trash=1.8.0=pyhd3eb1b0_1 - - six=1.16.0=pyhd3eb1b0_1 - - sortedcontainers=2.4.0=pyhd3eb1b0_0 - - stack_data=0.2.0=pyhd3eb1b0_0 - - tblib=1.7.0=pyhd3eb1b0_0 - - tzdata=2023c=h04d1e81_0 - - wcwidth=0.2.5=pyhd3eb1b0_0 + - anyio=4.7.0=pyhd8ed1ab_0 + - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - arrow=1.3.0=pyhd8ed1ab_1 + - asttokens=3.0.0=pyhd8ed1ab_1 + - attrs=24.3.0=pyh71513ae_0 + - beautifulsoup4=4.12.3=pyha770c72_1 + - bleach=6.2.0=pyhd8ed1ab_1 + - bokeh=3.6.2=pyhd8ed1ab_1 + - cached-property=1.5.2=hd8ed1ab_1 + - cached_property=1.5.2=pyha770c72_1 + - certifi=2024.12.14=pyhd8ed1ab_0 + - charset-normalizer=3.4.0=pyhd8ed1ab_1 + - cloudpickle=3.1.0=pyhd8ed1ab_1 + - colorama=0.4.6=pyhd8ed1ab_1 + - colorcet=3.1.0=pyhd8ed1ab_1 + - comm=0.2.2=pyhd8ed1ab_1 + - cycler=0.12.1=pyhd8ed1ab_1 + - dask-core=2024.10.0=pyhd8ed1ab_0 + - dask-expr=1.1.16=pyhd8ed1ab_0 + - dask=2024.10.0=pyhd8ed1ab_0 + - datashader=0.16.3=pyhd8ed1ab_1 + - decorator=5.1.1=pyhd8ed1ab_1 + - defusedxml=0.7.1=pyhd8ed1ab_0 + - distributed=2024.10.0=pyhd8ed1ab_0 + - entrypoints=0.4=pyhd8ed1ab_1 + - exceptiongroup=1.2.2=pyhd8ed1ab_1 + - executing=2.1.0=pyhd8ed1ab_1 + - fqdn=1.5.1=pyhd8ed1ab_1 + - fsspec=2024.10.0=pyhd8ed1ab_1 + - h2=4.1.0=pyhd8ed1ab_1 + - holoviews=1.20.0=pyhd8ed1ab_1 + - hpack=4.0.0=pyhd8ed1ab_1 + - hvplot=0.11.2=pyhd8ed1ab_0 + - hyperframe=6.0.1=pyhd8ed1ab_1 + - idna=3.10=pyhd8ed1ab_1 + - importlib-metadata=8.5.0=pyha770c72_1 + - importlib_metadata=8.5.0=hd8ed1ab_1 + - importlib_resources=6.4.5=pyhd8ed1ab_1 + - ipython_genutils=0.2.0=pyhd8ed1ab_2 + - isoduration=20.11.0=pyhd8ed1ab_1 + - jedi=0.19.2=pyhd8ed1ab_1 + - jinja2=3.1.4=pyhd8ed1ab_1 + - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 + - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jsonschema=4.23.0=pyhd8ed1ab_1 + - jupyter_client=7.4.9=pyhd8ed1ab_0 + - jupyter_events=0.10.0=pyhd8ed1ab_1 + - jupyter_server=2.14.2=pyhd8ed1ab_1 + - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 + - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 + - linkify-it-py=2.0.3=pyhd8ed1ab_1 + - locket=1.0.0=pyhd8ed1ab_0 + - markdown-it-py=3.0.0=pyhd8ed1ab_1 + - markdown=3.6=pyhd8ed1ab_0 + - matplotlib-inline=0.1.7=pyhd8ed1ab_1 + - mdit-py-plugins=0.4.2=pyhd8ed1ab_1 + - mdurl=0.1.2=pyhd8ed1ab_1 + - mistune=3.0.2=pyhd8ed1ab_1 + - multipledispatch=0.6.0=pyhd8ed1ab_1 + - munkres=1.1.4=pyh9f0ad1d_0 + - nbclassic=1.1.0=pyhd8ed1ab_1 + - nbclient=0.10.1=pyhd8ed1ab_0 + - nbconvert-core=7.16.4=pyhff2d567_2 + - nbformat=5.10.4=pyhd8ed1ab_1 + - nest-asyncio=1.6.0=pyhd8ed1ab_1 + - notebook-shim=0.2.4=pyhd8ed1ab_1 + - notebook=6.5.7=pyha770c72_0 + - overrides=7.7.0=pyhd8ed1ab_0 + - packaging=24.2=pyhd8ed1ab_2 + - pandocfilters=1.5.0=pyhd8ed1ab_0 + - panel=1.5.4=pyhd8ed1ab_0 + - param=2.1.1=pyhd8ed1ab_1 + - parso=0.8.4=pyhd8ed1ab_1 + - partd=1.4.2=pyhd8ed1ab_0 + - pickleshare=0.7.5=pyhd8ed1ab_1004 + - pip=24.3.1=pyh145f28c_1 + - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 + - platformdirs=4.3.6=pyhd8ed1ab_1 + - prometheus_client=0.21.1=pyhd8ed1ab_0 + - prompt-toolkit=3.0.48=pyha770c72_1 + - pure_eval=0.2.3=pyhd8ed1ab_1 + - pycparser=2.22=pyh29332c3_1 + - pyct=0.5.0=pyhd8ed1ab_1 + - pygments=2.18.0=pyhd8ed1ab_1 + - pyparsing=3.2.0=pyhd8ed1ab_2 + - python-dateutil=2.9.0.post0=pyhff2d567_1 + - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 + - python-json-logger=2.0.7=pyhd8ed1ab_0 + - python-tzdata=2024.2=pyhd8ed1ab_1 + - python_abi=3.11=5_cp311 + - pytz=2024.1=pyhd8ed1ab_0 + - pyviz_comms=3.0.3=pyhd8ed1ab_0 + - referencing=0.35.1=pyhd8ed1ab_1 + - requests=2.32.3=pyhd8ed1ab_1 + - retrying=1.3.3=pyhd8ed1ab_3 + - rfc3339-validator=0.1.4=pyhd8ed1ab_1 + - rfc3986-validator=0.1.1=pyh9f0ad1d_0 + - setuptools=75.6.0=pyhff2d567_1 + - six=1.17.0=pyhd8ed1ab_0 + - sniffio=1.3.1=pyhd8ed1ab_1 + - sortedcontainers=2.4.0=pyhd8ed1ab_0 + - soupsieve=2.5=pyhd8ed1ab_1 + - spatialpandas=0.5.0a1=py_0 + - stack_data=0.6.3=pyhd8ed1ab_1 + - tblib=3.0.0=pyhd8ed1ab_1 + - tinycss2=1.4.0=pyhd8ed1ab_0 + - toolz=1.0.0=pyhd8ed1ab_1 + - tqdm=4.67.1=pyhd8ed1ab_0 + - traitlets=5.14.3=pyhd8ed1ab_1 + - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - typing-extensions=4.12.2=hd8ed1ab_1 + - typing_extensions=4.12.2=pyha770c72_1 + - typing_utils=0.1.0=pyhd8ed1ab_1 + - tzdata=2024b=hc8b5060_0 + - uc-micro-py=1.0.3=pyhd8ed1ab_1 + - uri-template=1.3.0=pyhd8ed1ab_1 + - urllib3=2.2.3=pyhd8ed1ab_1 + - wcwidth=0.2.13=pyhd8ed1ab_1 + - webcolors=24.11.1=pyhd8ed1ab_0 + - webencodings=0.5.1=pyhd8ed1ab_3 + - websocket-client=1.8.0=pyhd8ed1ab_1 + - xarray=2024.11.0=pyhd8ed1ab_0 + - xyzservices=2024.9.0=pyhd8ed1ab_1 + - zict=3.0.0=pyhd8ed1ab_1 + - zipp=3.21.0=pyhd8ed1ab_1 unix: - - pexpect=4.8.0=pyhd3eb1b0_3 - - ptyprocess=0.7.0=pyhd3eb1b0_2 + - click=8.1.7=unix_pyh707e725_1 + - ipython=8.30.0=pyh707e725_0 + - jupyter_core=5.7.2=pyh31011fe_1 + - pexpect=4.9.0=pyhd8ed1ab_1 + - ptyprocess=0.7.0=pyhd8ed1ab_1 + - pysocks=1.7.1=pyha55dd90_7 + osx: + - appnope=0.1.4=pyhd8ed1ab_1 + - ipykernel=6.29.5=pyh57ce528_0 + - send2trash=1.8.3=pyh31c8845_1 + - terminado=0.18.1=pyh31c8845_0 linux-64: - - _libgcc_mutex=0.1=main - - _openmp_mutex=5.1=1_gnu - - abseil-cpp=20211102.0=hd4dd3e8_0 - - anyio=3.5.0=py39h06a4308_0 - - argon2-cffi-bindings=21.2.0=py39h7f8727e_0 - - arrow-cpp=8.0.0=py39h60b952e_1 - - attrs=23.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 - - beautifulsoup4=4.12.2=py39h06a4308_0 - - blas=1.0=mkl - - bokeh=2.4.3=py39h06a4308_0 - - boost-cpp=1.82.0=hdb19cb5_2 - - bottleneck=1.3.5=py39h7deecbd_0 - - brotli-bin=1.0.9=h5eee18b_7 - - brotli-python=1.0.9=py39h6a678d5_7 - - brotli=1.0.9=h5eee18b_7 - - bzip2=1.0.8=h7b6447c_0 - - c-ares=1.19.1=h5eee18b_0 - - ca-certificates=2023.08.22=h06a4308_0 - - certifi=2023.7.22=py39h06a4308_0 - - cffi=1.15.1=py39h5eee18b_3 - - click=8.1.7=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.3=py39h130f0dd_0 - - cytoolz=0.12.0=py39h5eee18b_0 - - dask-core=2023.6.0=py39h06a4308_0 - - dask=2023.6.0=py39h06a4308_0 - - datashader=0.15.2=py39h06a4308_0 - - datashape=0.5.4=py39h06a4308_1 - - debugpy=1.6.7=py39h6a678d5_0 - - distributed=2023.6.0=py39h06a4308_0 - - entrypoints=0.4=py39h06a4308_0 - - exceptiongroup=1.0.4=py39h06a4308_0 - - freetype=2.12.1=h4a9f257_0 - - fsspec=2023.9.2=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.1=py39h06a4308_0 - - icu=73.1=h6a678d5_0 - - idna=3.4=py39h06a4308_0 - - importlib-metadata=6.0.0=py39h06a4308_0 - - importlib_resources=6.1.0=py39h06a4308_0 - - intel-openmp=2023.1.0=hdb19cb5_46305 - - ipykernel=6.25.0=py39h2f386ee_0 - - ipython=8.15.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=7.4.9=py39h06a4308_0 - - jupyter_core=5.3.0=py39h06a4308_0 - - jupyter_server=1.23.4=py39h06a4308_0 - - 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.82.0=h109eef0_2 - - libbrotlicommon=1.0.9=h5eee18b_7 - - libbrotlidec=1.0.9=h5eee18b_7 - - libbrotlienc=1.0.9=h5eee18b_7 - - libcurl=8.2.1=h91b91d3_0 - - libdeflate=1.17=h5eee18b_1 - - libedit=3.1.20221030=h5eee18b_0 - - libev=4.33=h7f8727e_1 - - libevent=2.1.12=h8f2d780_0 - - libffi=3.4.4=h6a678d5_0 - - libgcc-ng=11.2.0=h1234567_1 - - libgfortran-ng=11.2.0=h00389a5_1 - - libgfortran5=11.2.0=h1234567_1 - - libgomp=11.2.0=h1234567_1 - - libllvm14=14.0.6=hdb19cb5_3 - - 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=11.2.0=h1234567_1 - - libthrift=0.15.0=h0d84882_2 - - libtiff=4.5.1=h6a678d5_0 - - libwebp-base=1.3.2=h5eee18b_0 - - libwebp=1.3.2=h11a3e52_0 - - libxml2=2.10.4=hf1b16e4_1 - - libxslt=1.1.37=h5eee18b_1 - - llvmlite=0.41.0=py39he621ea3_0 - - locket=1.0.0=py39h06a4308_0 - - lxml=4.9.3=py39hdbbb534_0 - - lz4-c=1.9.4=h6a678d5_0 - - lz4=4.3.2=py39h5eee18b_0 - - markdown=3.4.1=py39h06a4308_0 - - markupsafe=2.1.1=py39h7f8727e_0 - - matplotlib-base=3.8.0=py39h1128e8f_0 - - matplotlib-inline=0.1.6=py39h06a4308_0 - - mistune=0.8.4=py39h27cfd23_1000 - - mkl-service=2.4.0=py39h5eee18b_1 - - mkl=2023.1.0=h213fc3f_46343 - - mkl_fft=1.3.8=py39h5eee18b_0 - - mkl_random=1.2.4=py39hdb19cb5_0 - - msgpack-python=1.0.3=py39hd09550d_0 - - multipledispatch=0.6.0=py39h06a4308_0 - - nbclassic=0.5.5=py39h06a4308_0 - - nbclient=0.5.13=py39h06a4308_0 - - nbconvert=6.5.4=py39h06a4308_0 - - nbformat=5.9.2=py39h06a4308_0 - - ncurses=6.4=h6a678d5_0 - - nest-asyncio=1.5.6=py39h06a4308_0 - - notebook-shim=0.2.2=py39h06a4308_0 - - notebook=6.5.4=py39h06a4308_1 - - numba=0.58.0=py39h1128e8f_0 - - numexpr=2.8.7=py39h85018f9_0 - - numpy-base=1.25.2=py39hb5e798b_0 - - numpy=1.25.2=py39h5f9d8c6_0 - - openjpeg=2.4.0=h3ad879b_0 - - openssl=1.1.1w=h7f8727e_0 - - orc=1.7.4=hb3bc3d3_1 - - packaging=23.1=py39h06a4308_0 - - pandas=2.1.1=py39h1128e8f_0 - - panel=0.14.3=py39h06a4308_0 - - param=1.13.0=py39h06a4308_0 - - partd=1.4.1=py39h06a4308_0 - - pillow=10.0.1=py39ha6cbd5a_0 - - pip=23.3=py39h06a4308_0 - - platformdirs=3.10.0=py39h06a4308_0 - - prometheus_client=0.14.1=py39h06a4308_0 - - prompt-toolkit=3.0.36=py39h06a4308_0 - - psutil=5.9.0=py39h5eee18b_0 - - pyarrow=8.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-lmdb=1.4.1=py39h6a678d5_0 - - python=3.9.18=h7a1cb2a_0 - - pytz=2023.3.post1=py39h06a4308_0 - - pyviz_comms=2.3.0=py39h06a4308_0 - - pyyaml=6.0.1=py39h5eee18b_0 - - pyzmq=23.2.0=py39h6a678d5_0 - - re2=2022.04.01=h295c915_0 - - readline=8.2=h5eee18b_0 - - requests=2.31.0=py39h06a4308_0 - - scipy=1.11.3=py39h5f9d8c6_0 - - setuptools=68.0.0=py39h06a4308_0 - - snappy=1.1.9=h295c915_0 - - sniffio=1.2.0=py39h06a4308_1 - - soupsieve=2.5=py39h06a4308_0 - - spatialpandas=0.4.9=py39h06a4308_0 - - sqlite=3.41.2=h5eee18b_0 - - tbb=2021.8.0=hdb19cb5_0 - - terminado=0.17.1=py39h06a4308_0 - - tinycss2=1.2.1=py39h06a4308_0 - - tk=8.6.12=h1ccaba5_0 - - toolz=0.12.0=py39h06a4308_0 - - tornado=6.3.3=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 - - urllib3=1.26.18=py39h06a4308_0 - - utf8proc=2.6.1=h27cfd23_0 - - webencodings=0.5.1=py39h06a4308_1 - - websocket-client=0.58.0=py39h06a4308_4 - - wheel=0.41.2=py39h06a4308_0 - - xarray=2023.6.0=py39h06a4308_0 - - xz=5.4.2=h5eee18b_0 - - yaml=0.2.5=h7b6447c_0 - - zeromq=4.3.4=h2531618_0 - - zict=3.0.0=py39h06a4308_0 - - zipp=3.11.0=py39h06a4308_0 - - zlib=1.2.13=h5eee18b_0 - - zstd=1.5.5=hc292b87_0 + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_gnu + - argon2-cffi-bindings=21.2.0=py311h9ecbd09_5 + - aws-c-auth=0.8.0=hb921021_15 + - aws-c-cal=0.8.1=h1a47875_3 + - aws-c-common=0.10.6=hb9d3cd8_0 + - aws-c-compression=0.3.0=h4e1184b_5 + - aws-c-event-stream=0.5.0=h7959bf6_11 + - aws-c-http=0.9.2=hefd7a92_4 + - aws-c-io=0.15.3=hbf5b6a4_4 + - aws-c-mqtt=0.11.0=h11f4f37_12 + - aws-c-s3=0.7.7=hf454442_0 + - aws-c-sdkutils=0.2.1=h4e1184b_4 + - aws-checksums=0.2.2=h4e1184b_4 + - aws-crt-cpp=0.29.7=hd92328a_7 + - aws-sdk-cpp=1.11.458=hc430e4a_4 + - azure-core-cpp=1.14.0=h5cfcd09_0 + - azure-identity-cpp=1.10.0=h113e628_0 + - azure-storage-blobs-cpp=12.13.0=h3cf044e_1 + - azure-storage-common-cpp=12.8.0=h736e048_1 + - azure-storage-files-datalake-cpp=12.12.0=ha633028_1 + - brotli-bin=1.1.0=hb9d3cd8_2 + - brotli-python=1.1.0=py311hfdbb021_2 + - brotli=1.1.0=hb9d3cd8_2 + - bzip2=1.0.8=h4bc722e_7 + - c-ares=1.34.4=hb9d3cd8_0 + - ca-certificates=2024.12.14=hbcca054_0 + - cffi=1.17.1=py311hf29c0ef_0 + - contourpy=1.3.1=py311hd18a35c_0 + - cytoolz=1.0.1=py311h9ecbd09_0 + - debugpy=1.8.11=py311hfdbb021_0 + - fonttools=4.55.3=py311h2dc5d0c_0 + - freetype=2.12.1=h267a509_2 + - gflags=2.2.2=h5888daf_1005 + - glog=0.7.1=hbabe93e_0 + - ipykernel=6.29.5=pyh3099207_0 + - jsonpointer=3.0.0=py311h38be061_1 + - keyutils=1.6.1=h166bdaf_0 + - kiwisolver=1.4.7=py311hd18a35c_0 + - krb5=1.21.3=h659f571_0 + - lcms2=2.16=hb7c19ff_0 + - ld_impl_linux-64=2.43=h712a8e2_2 + - lerc=4.0.0=h27087fc_0 + - libabseil=20240722.0=cxx17_h5888daf_1 + - libarrow-acero=18.1.0=hcb10f89_6_cpu + - libarrow-dataset=18.1.0=hcb10f89_6_cpu + - libarrow-substrait=18.1.0=h3ee7192_6_cpu + - libarrow=18.1.0=h44a453e_6_cpu + - libblas=3.9.0=26_linux64_openblas + - libbrotlicommon=1.1.0=hb9d3cd8_2 + - libbrotlidec=1.1.0=hb9d3cd8_2 + - libbrotlienc=1.1.0=hb9d3cd8_2 + - libcblas=3.9.0=26_linux64_openblas + - libcrc32c=1.1.2=h9c3ff4c_0 + - libcurl=8.11.1=h332b0f4_0 + - libdeflate=1.23=h4ddbbb0_0 + - libedit=3.1.20191231=he28a2e2_2 + - libev=4.33=hd590300_2 + - libevent=2.1.12=hf998b51_1 + - libexpat=2.6.4=h5888daf_0 + - libffi=3.4.2=h7f98852_5 + - libgcc-ng=14.2.0=h69a702a_1 + - libgcc=14.2.0=h77fa898_1 + - libgfortran5=14.2.0=hd5240d6_1 + - libgfortran=14.2.0=h69a702a_1 + - libgomp=14.2.0=h77fa898_1 + - libgoogle-cloud-storage=2.32.0=h0121fbd_0 + - libgoogle-cloud=2.32.0=h804f50b_0 + - libgrpc=1.67.1=hc2c308b_0 + - libiconv=1.17=hd590300_2 + - libjpeg-turbo=3.0.0=hd590300_1 + - liblapack=3.9.0=26_linux64_openblas + - libllvm14=14.0.6=hcd5def8_4 + - liblzma=5.6.3=hb9d3cd8_1 + - libnghttp2=1.64.0=h161d5f1_0 + - libnsl=2.0.1=hd590300_0 + - libopenblas=0.3.28=pthreads_h94d23a6_1 + - libparquet=18.1.0=h081d1f1_6_cpu + - libpng=1.6.44=hadc24fc_0 + - libprotobuf=5.28.2=h5b01275_0 + - libre2-11=2024.07.02=hbbce691_1 + - libsodium=1.0.20=h4ab18f5_0 + - libsqlite=3.47.2=hee588c1_0 + - libssh2=1.11.1=hf672d98_0 + - libstdcxx-ng=14.2.0=h4852527_1 + - libstdcxx=14.2.0=hc0a3c3a_1 + - libthrift=0.21.0=h0e7cc3e_0 + - libtiff=4.7.0=hd9ff511_3 + - libutf8proc=2.9.0=hb9d3cd8_1 + - libuuid=2.38.1=h0b41bf4_0 + - libwebp-base=1.4.0=hd590300_0 + - libxcb=1.17.0=h8a09558_0 + - libxcrypt=4.4.36=hd590300_1 + - libxml2=2.13.5=h0d44e9d_1 + - libzlib=1.3.1=hb9d3cd8_2 + - llvmlite=0.43.0=py311h9c9ff8c_1 + - lz4-c=1.10.0=h5888daf_1 + - lz4=4.3.3=py311h8c6ae76_2 + - markupsafe=3.0.2=py311h2dc5d0c_1 + - matplotlib-base=3.10.0=py311h2b939e6_0 + - msgpack-python=1.1.0=py311hd18a35c_0 + - ncurses=6.5=he02047a_1 + - numba=0.60.0=py311h4bc866e_0 + - numpy=2.0.2=py311h71ddf71_1 + - openjpeg=2.5.3=h5fbd93e_0 + - openssl=3.4.0=hb9d3cd8_0 + - orc=2.0.3=h97ab989_1 + - pandas=2.2.3=py311h7db5c69_1 + - pillow=11.0.0=py311h49e9ac3_0 + - psutil=6.1.0=py311h9ecbd09_0 + - pthread-stubs=0.4=hb9d3cd8_1002 + - pyarrow-core=18.1.0=py311h4854187_0_cpu + - pyarrow=18.1.0=py311h38be061_0 + - python=3.11.11=h9e4cc4f_1_cpython + - pyyaml=6.0.2=py311h9ecbd09_1 + - pyzmq=26.2.0=py311h7deb3e3_3 + - qhull=2020.2=h434a139_5 + - re2=2024.07.02=h77b4e00_1 + - readline=8.2=h8228510_1 + - rpds-py=0.22.3=py311h9e33e62_0 + - s2n=1.5.9=h0fd0ee4_0 + - scipy=1.14.1=py311he9a78e4_2 + - send2trash=1.8.3=pyh0d859eb_1 + - snappy=1.2.1=h8bd8927_1 + - terminado=0.18.1=pyh0d859eb_0 + - tk=8.6.13=noxft_h4845f30_101 + - tornado=6.4.2=py311h9ecbd09_0 + - unicodedata2=15.1.0=py311h9ecbd09_1 + - xorg-libxau=1.0.12=hb9d3cd8_0 + - xorg-libxdmcp=1.1.5=hb9d3cd8_0 + - yaml=0.2.5=h7f98852_2 + - zeromq=4.3.5=h3b0a872_7 + - zstandard=0.23.0=py311hbc35293_1 + - zstd=1.5.6=ha6fb4c9_0 osx-64: - - abseil-cpp=20211102.0=he9d5cce_0 - - anyio=3.5.0=py39hecd8cb5_0 - - appnope=0.1.2=py39hecd8cb5_1001 - - argon2-cffi-bindings=21.2.0=py39hca72f7f_0 - - arrow-cpp=8.0.0=py39hd183948_1 - - attrs=23.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 - - beautifulsoup4=4.12.2=py39hecd8cb5_0 - - blas=1.0=mkl - - bokeh=2.4.3=py39hecd8cb5_0 - - boost-cpp=1.82.0=ha357a0b_2 - - bottleneck=1.3.5=py39h67323c0_0 - - brotli-bin=1.0.9=hca72f7f_7 - - brotli-python=1.0.9=py39he9d5cce_7 - - brotli=1.0.9=hca72f7f_7 - - bzip2=1.0.8=h1de35cc_0 - - c-ares=1.19.1=h6c40b1e_0 - - ca-certificates=2023.08.22=hecd8cb5_0 - - certifi=2023.7.22=py39hecd8cb5_0 - - cffi=1.15.1=py39h6c40b1e_3 - - click=8.1.7=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.3=py39ha2381d6_0 - - cytoolz=0.12.0=py39hca72f7f_0 - - dask-core=2023.6.0=py39hecd8cb5_0 - - dask=2023.6.0=py39hecd8cb5_0 - - datashader=0.15.2=py39hecd8cb5_0 - - datashape=0.5.4=py39hecd8cb5_1 - - debugpy=1.6.7=py39hcec6c5f_0 - - distributed=2023.6.0=py39hecd8cb5_0 - - entrypoints=0.4=py39hecd8cb5_0 - - exceptiongroup=1.0.4=py39hecd8cb5_0 - - freetype=2.12.1=hd8bbffd_0 - - fsspec=2023.9.2=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.1=py39hecd8cb5_0 - - icu=73.1=hcec6c5f_0 - - idna=3.4=py39hecd8cb5_0 - - importlib-metadata=6.0.0=py39hecd8cb5_0 - - importlib_resources=6.1.0=py39hecd8cb5_0 - - intel-openmp=2023.1.0=ha357a0b_43547 - - ipykernel=6.25.0=py39h20db666_0 - - ipython=8.15.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=7.4.9=py39hecd8cb5_0 - - jupyter_core=5.3.0=py39hecd8cb5_0 - - jupyter_server=1.23.4=py39hecd8cb5_0 - - kiwisolver=1.4.4=py39hcec6c5f_0 - - krb5=1.20.1=hdba6334_1 - - lcms2=2.12=hf1fd2bf_0 - - lerc=3.0=he9d5cce_0 - - libboost=1.82.0=hf53b9f2_2 - - libbrotlicommon=1.0.9=hca72f7f_7 - - libbrotlidec=1.0.9=hca72f7f_7 - - libbrotlienc=1.0.9=hca72f7f_7 - - libcurl=8.2.1=ha585b31_0 - - libcxx=14.0.6=h9765a3e_0 - - libdeflate=1.17=hb664fd8_1 - - libedit=3.1.20221030=h6c40b1e_0 - - libev=4.33=h9ed2024_1 - - libevent=2.1.12=h0a4fc7d_0 - - libffi=3.4.4=hecd8cb5_0 - - libgfortran5=11.3.0=h9dfd629_28 - - libgfortran=5.0.0=11_3_0_hecd8cb5_28 - - libiconv=1.16=hca72f7f_2 - - libllvm14=14.0.6=h91fad77_3 - - 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.1=hcec6c5f_0 - - libwebp-base=1.3.2=h6c40b1e_0 - - libwebp=1.3.2=hf6ce154_0 - - libxml2=2.10.4=h1bd7e62_1 - - libxslt=1.1.37=h6c40b1e_1 - - llvm-openmp=14.0.6=h0dcd299_0 - - llvmlite=0.41.0=py39hfff2838_0 - - locket=1.0.0=py39hecd8cb5_0 - - lxml=4.9.3=py39h946e0e5_0 - - lz4-c=1.9.4=hcec6c5f_0 - - lz4=4.3.2=py39h6c40b1e_0 - - markdown=3.4.1=py39hecd8cb5_0 - - markupsafe=2.1.1=py39hca72f7f_0 - - matplotlib-base=3.8.0=py39hb47e01b_0 - - matplotlib-inline=0.1.6=py39hecd8cb5_0 - - mistune=0.8.4=py39h9ed2024_1000 - - mkl-service=2.4.0=py39h6c40b1e_1 - - mkl=2023.1.0=h8e150cf_43559 - - mkl_fft=1.3.8=py39h6c40b1e_0 - - mkl_random=1.2.4=py39ha357a0b_0 - - msgpack-python=1.0.3=py39haf03e11_0 - - multipledispatch=0.6.0=py39hecd8cb5_0 - - nbclassic=0.5.5=py39hecd8cb5_0 - - nbclient=0.5.13=py39hecd8cb5_0 - - nbconvert=6.5.4=py39hecd8cb5_0 - - nbformat=5.9.2=py39hecd8cb5_0 - - ncurses=6.4=hcec6c5f_0 - - nest-asyncio=1.5.6=py39hecd8cb5_0 - - notebook-shim=0.2.2=py39hecd8cb5_0 - - notebook=6.5.4=py39hecd8cb5_1 - - numba=0.58.0=py39h3ea8b11_0 - - numexpr=2.8.7=py39h827a554_0 - - numpy-base=1.25.2=py39ha186be2_0 - - numpy=1.25.2=py39h827a554_0 - - openjpeg=2.4.0=h66ea3da_0 - - openssl=1.1.1w=hca72f7f_0 - - orc=1.7.4=h995b336_1 - - packaging=23.1=py39hecd8cb5_0 - - pandas=2.1.1=py39h3ea8b11_0 - - panel=0.14.3=py39hecd8cb5_0 - - param=1.13.0=py39hecd8cb5_0 - - partd=1.4.1=py39hecd8cb5_0 - - pillow=10.0.1=py39h7d39338_0 - - pip=23.3=py39hecd8cb5_0 - - platformdirs=3.10.0=py39hecd8cb5_0 - - prometheus_client=0.14.1=py39hecd8cb5_0 - - prompt-toolkit=3.0.36=py39hecd8cb5_0 - - psutil=5.9.0=py39hca72f7f_0 - - pyarrow=8.0.0=py39h2202ef3_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-lmdb=1.4.1=py39hcec6c5f_0 - - python=3.9.18=h218abb5_0 - - pytz=2023.3.post1=py39hecd8cb5_0 - - pyviz_comms=2.3.0=py39hecd8cb5_0 - - pyyaml=6.0.1=py39h6c40b1e_0 - - pyzmq=23.2.0=py39he9d5cce_0 - - re2=2022.04.01=he9d5cce_0 - - readline=8.2=hca72f7f_0 - - requests=2.31.0=py39hecd8cb5_0 - - scipy=1.11.3=py39hdb2ea58_0 - - setuptools=68.0.0=py39hecd8cb5_0 - - snappy=1.1.9=he9d5cce_0 - - sniffio=1.2.0=py39hecd8cb5_1 - - soupsieve=2.5=py39hecd8cb5_0 - - spatialpandas=0.4.9=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 - - toolz=0.12.0=py39hecd8cb5_0 - - tornado=6.3.3=py39h6c40b1e_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 - - urllib3=1.26.18=py39hecd8cb5_0 - - utf8proc=2.6.1=h9ed2024_0 - - webencodings=0.5.1=py39hecd8cb5_1 - - websocket-client=0.58.0=py39hecd8cb5_4 - - wheel=0.41.2=py39hecd8cb5_0 - - xarray=2023.6.0=py39hecd8cb5_0 - - xz=5.4.2=h6c40b1e_0 - - yaml=0.2.5=haf1e3a3_0 - - zeromq=4.3.4=h23ab428_0 - - zict=3.0.0=py39hecd8cb5_0 - - zipp=3.11.0=py39hecd8cb5_0 - - zlib=1.2.13=h4dc903c_0 - - zstd=1.5.5=hc035e20_0 + - argon2-cffi-bindings=21.2.0=py311h3336109_5 + - aws-c-auth=0.8.0=h873230a_15 + - aws-c-cal=0.8.1=hc0df2db_3 + - aws-c-common=0.10.6=h6e16a3a_0 + - aws-c-compression=0.3.0=hc0df2db_5 + - aws-c-event-stream=0.5.0=h8236443_11 + - aws-c-http=0.9.2=h5492b4a_4 + - aws-c-io=0.15.3=h7bd4489_4 + - aws-c-mqtt=0.11.0=h3488609_12 + - aws-c-s3=0.7.7=ha6e97d4_0 + - aws-c-sdkutils=0.2.1=hc0df2db_4 + - aws-checksums=0.2.2=hc0df2db_4 + - aws-crt-cpp=0.29.7=hd560ef9_7 + - aws-sdk-cpp=1.11.458=ha9aef39_4 + - azure-core-cpp=1.14.0=h9a36307_0 + - azure-identity-cpp=1.10.0=ha4e2ba9_0 + - azure-storage-blobs-cpp=12.13.0=h3d2f5f1_1 + - azure-storage-common-cpp=12.8.0=h1ccc5ac_1 + - azure-storage-files-datalake-cpp=12.12.0=h86941f0_1 + - brotli-bin=1.1.0=h00291cd_2 + - brotli-python=1.1.0=py311hd89902b_2 + - brotli=1.1.0=h00291cd_2 + - bzip2=1.0.8=hfdf4475_7 + - c-ares=1.34.4=hf13058a_0 + - ca-certificates=2024.12.14=h8857fd0_0 + - cffi=1.17.1=py311h137bacd_0 + - contourpy=1.3.1=py311h4e34fa0_0 + - cytoolz=1.0.1=py311h4d7f069_0 + - debugpy=1.8.11=py311hc356e98_0 + - fonttools=4.55.3=py311ha3cf9ac_0 + - freetype=2.12.1=h60636b9_2 + - gflags=2.2.2=hac325c4_1005 + - glog=0.7.1=h2790a97_0 + - jsonpointer=3.0.0=py311h6eed73b_1 + - kiwisolver=1.4.7=py311hf2f7c97_0 + - krb5=1.21.3=h37d8d59_0 + - lcms2=2.16=ha2f27b4_0 + - lerc=4.0.0=hb486fe8_0 + - libabseil=20240722.0=cxx17_hac325c4_1 + - libarrow-acero=18.1.0=ha6338a2_6_cpu + - libarrow-dataset=18.1.0=ha6338a2_6_cpu + - libarrow-substrait=18.1.0=hfbc57f1_6_cpu + - libarrow=18.1.0=h2e73097_6_cpu + - libblas=3.9.0=26_osx64_openblas + - libbrotlicommon=1.1.0=h00291cd_2 + - libbrotlidec=1.1.0=h00291cd_2 + - libbrotlienc=1.1.0=h00291cd_2 + - libcblas=3.9.0=26_osx64_openblas + - libcrc32c=1.1.2=he49afe7_0 + - libcurl=8.11.1=h5dec5d8_0 + - libcxx=19.1.5=hf95d169_0 + - libdeflate=1.23=he65b83e_0 + - libedit=3.1.20191231=h0678c8f_2 + - libev=4.33=h10d778d_2 + - libevent=2.1.12=ha90c15b_1 + - libexpat=2.6.4=h240833e_0 + - libffi=3.4.2=h0d85af4_5 + - libgfortran5=13.2.0=h2873a65_3 + - libgfortran=5.0.0=13_2_0_h97931a8_3 + - libgoogle-cloud-storage=2.32.0=h3f2b517_0 + - libgoogle-cloud=2.32.0=hd00c612_0 + - libgrpc=1.67.1=he6e0b18_0 + - libiconv=1.17=hd75f5a5_2 + - libjpeg-turbo=3.0.0=h0dc2134_1 + - liblapack=3.9.0=26_osx64_openblas + - libllvm14=14.0.6=hc8e404f_4 + - liblzma=5.6.3=hd471939_1 + - libnghttp2=1.64.0=hc7306c3_0 + - libopenblas=0.3.28=openmp_hbf64a52_1 + - libparquet=18.1.0=h3e22b07_6_cpu + - libpng=1.6.44=h4b8f8c9_0 + - libprotobuf=5.28.2=h8b30cf6_0 + - libre2-11=2024.07.02=hd530cb8_1 + - libsodium=1.0.20=hfdf4475_0 + - libsqlite=3.47.2=hdb6dae5_0 + - libssh2=1.11.1=h3dc7d44_0 + - libthrift=0.21.0=h75589b3_0 + - libtiff=4.7.0=hb77a491_3 + - libutf8proc=2.9.0=h6e16a3a_1 + - libwebp-base=1.4.0=h10d778d_0 + - libxcb=1.17.0=hf1f96e2_0 + - libxml2=2.13.5=he8ee3e7_1 + - libzlib=1.3.1=hd23fc13_2 + - llvm-openmp=19.1.5=ha54dae1_0 + - llvmlite=0.43.0=py311h25b8078_1 + - lz4-c=1.10.0=h240833e_1 + - lz4=4.3.3=py311h687f303_2 + - markupsafe=3.0.2=py311ha3cf9ac_1 + - matplotlib-base=3.10.0=py311h19a4563_0 + - msgpack-python=1.1.0=py311hf2f7c97_0 + - ncurses=6.5=hf036a51_1 + - numba=0.60.0=py311h0e5bd6a_0 + - numpy=2.0.2=py311h14ed71f_1 + - openjpeg=2.5.3=h7fd6d84_0 + - openssl=3.4.0=hd471939_0 + - orc=2.0.3=h4f2608a_1 + - pandas=2.2.3=py311haeb46be_1 + - pillow=11.0.0=py311h1f68098_0 + - psutil=6.1.0=py311h1314207_0 + - pthread-stubs=0.4=h00291cd_1002 + - pyarrow-core=18.1.0=py311he02522f_0_cpu + - pyarrow=18.1.0=py311h6eed73b_0 + - pyobjc-core=10.3.2=py311hfbc4093_0 + - pyobjc-framework-cocoa=10.3.2=py311hfbc4093_0 + - python=3.11.11=h9ccd52b_1_cpython + - pyyaml=6.0.2=py311h3336109_1 + - pyzmq=26.2.0=py311h4d3da15_3 + - qhull=2020.2=h3c5361c_5 + - re2=2024.07.02=h2fb0a26_1 + - readline=8.2=h9e318b2_1 + - rpds-py=0.22.3=py311h3b9c2be_0 + - scipy=1.14.1=py311h86b91e6_2 + - snappy=1.2.1=haf3c120_1 + - tk=8.6.13=h1abcd95_1 + - tornado=6.4.2=py311h4d7f069_0 + - unicodedata2=15.1.0=py311h1314207_1 + - xorg-libxau=1.0.12=h6e16a3a_0 + - xorg-libxdmcp=1.1.5=h00291cd_0 + - yaml=0.2.5=h0d85af4_2 + - zeromq=4.3.5=h7130eaa_7 + - zstandard=0.23.0=py311hdf6fcd6_1 + - zstd=1.5.6=h915ae27_0 osx-arm64: - - abseil-cpp=20211102.0=hc377ac9_0 - - anyio=3.5.0=py39hca03da5_0 - - appnope=0.1.2=py39hca03da5_1001 - - argon2-cffi-bindings=21.2.0=py39h1a28f6b_0 - - arrow-cpp=8.0.0=py39h68e74d9_1 - - attrs=23.1.0=py39hca03da5_0 - - aws-c-common=0.6.8=h80987f9_1 - - aws-c-event-stream=0.1.6=h313beb8_6 - - aws-checksums=0.1.11=h80987f9_2 - - aws-sdk-cpp=1.8.185=h4a942e0_0 - - beautifulsoup4=4.12.2=py39hca03da5_0 - - blas=1.0=openblas - - bokeh=2.4.3=py39hca03da5_0 - - boost-cpp=1.82.0=h48ca7d4_2 - - bottleneck=1.3.5=py39heec5a64_0 - - brotli-bin=1.0.9=h1a28f6b_7 - - brotli-python=1.0.9=py39hc377ac9_7 - - brotli=1.0.9=h1a28f6b_7 - - bzip2=1.0.8=h620ffc9_4 - - c-ares=1.19.1=h80987f9_0 - - ca-certificates=2023.08.22=hca03da5_0 - - certifi=2023.7.22=py39hca03da5_0 - - cffi=1.15.1=py39h80987f9_3 - - click=8.1.7=py39hca03da5_0 - - cloudpickle=2.2.1=py39hca03da5_0 - - colorcet=3.0.1=py39hca03da5_0 - - comm=0.1.2=py39hca03da5_0 - - contourpy=1.0.5=py39h525c30c_0 - - cryptography=41.0.3=py39h3c57c4d_0 - - cytoolz=0.12.0=py39h1a28f6b_0 - - dask-core=2023.6.0=py39hca03da5_0 - - dask=2023.6.0=py39hca03da5_0 - - datashader=0.15.2=py39hca03da5_0 - - datashape=0.5.4=py39hca03da5_1 - - debugpy=1.6.7=py39h313beb8_0 - - distributed=2023.6.0=py39hca03da5_0 - - entrypoints=0.4=py39hca03da5_0 - - exceptiongroup=1.0.4=py39hca03da5_0 - - freetype=2.12.1=h1192e45_0 - - fsspec=2023.9.2=py39hca03da5_0 - - gflags=2.2.2=hc377ac9_0 - - giflib=5.2.1=h80987f9_3 - - glog=0.5.0=hc377ac9_0 - - grpc-cpp=1.46.1=h8e4afa7_1 - - holoviews=1.17.1=py39hca03da5_0 - - icu=73.1=h313beb8_0 - - idna=3.4=py39hca03da5_0 - - importlib-metadata=6.0.0=py39hca03da5_0 - - importlib_resources=6.1.0=py39hca03da5_0 - - ipykernel=6.25.0=py39h33ce5c2_0 - - ipython=8.15.0=py39hca03da5_0 - - jedi=0.18.1=py39hca03da5_1 - - jinja2=3.1.2=py39hca03da5_0 - - jpeg=9e=h80987f9_1 - - jsonschema=4.17.3=py39hca03da5_0 - - jupyter_client=7.4.9=py39hca03da5_0 - - jupyter_core=5.3.0=py39hca03da5_0 - - jupyter_server=1.23.4=py39hca03da5_0 - - kiwisolver=1.4.4=py39h313beb8_0 - - krb5=1.20.1=h8380606_1 - - lcms2=2.12=hba8e193_0 - - lerc=3.0=hc377ac9_0 - - libboost=1.82.0=h0bc93f9_2 - - libbrotlicommon=1.0.9=h1a28f6b_7 - - libbrotlidec=1.0.9=h1a28f6b_7 - - libbrotlienc=1.0.9=h1a28f6b_7 - - libcurl=8.2.1=h0f1d93c_0 - - libcxx=14.0.6=h848a8c0_0 - - libdeflate=1.17=h80987f9_1 - - libedit=3.1.20221030=h80987f9_0 - - libev=4.33=h1a28f6b_1 - - libevent=2.1.12=hf27765b_0 - - libffi=3.4.4=hca03da5_0 - - libgfortran5=11.3.0=h009349e_28 - - libgfortran=5.0.0=11_3_0_hca03da5_28 - - libiconv=1.16=h1a28f6b_2 - - libllvm14=14.0.6=h7ec7a93_3 - - libnghttp2=1.52.0=h10c0552_1 - - libopenblas=0.3.21=h269037a_0 - - libpng=1.6.39=h80987f9_0 - - libprotobuf=3.20.3=h514c7bf_0 - - libsodium=1.0.18=h1a28f6b_0 - - libssh2=1.10.0=h449679c_2 - - libthrift=0.13.0=hd358383_6 - - libtiff=4.5.1=h313beb8_0 - - libwebp-base=1.3.2=h80987f9_0 - - libwebp=1.3.2=ha3663a8_0 - - libxml2=2.10.4=h0dcf63f_1 - - libxslt=1.1.37=h80987f9_1 - - llvm-openmp=14.0.6=hc6e5704_0 - - llvmlite=0.41.0=py39h514c7bf_0 - - locket=1.0.0=py39hca03da5_0 - - lxml=4.9.3=py39h50ffb84_0 - - lz4-c=1.9.4=h313beb8_0 - - lz4=4.3.2=py39h80987f9_0 - - markdown=3.4.1=py39hca03da5_0 - - markupsafe=2.1.1=py39h1a28f6b_0 - - matplotlib-base=3.8.0=py39h46d7db6_0 - - matplotlib-inline=0.1.6=py39hca03da5_0 - - mistune=0.8.4=py39h1a28f6b_1000 - - msgpack-python=1.0.3=py39h525c30c_0 - - multipledispatch=0.6.0=py39hca03da5_0 - - nbclassic=0.5.5=py39hca03da5_0 - - nbclient=0.5.13=py39hca03da5_0 - - nbconvert=6.5.4=py39hca03da5_0 - - nbformat=5.9.2=py39hca03da5_0 - - ncurses=6.4=h313beb8_0 - - nest-asyncio=1.5.6=py39hca03da5_0 - - notebook-shim=0.2.2=py39hca03da5_0 - - notebook=6.5.4=py39hca03da5_1 - - numba=0.58.0=py39h46d7db6_0 - - numexpr=2.8.7=py39hecc3335_0 - - numpy-base=1.25.2=py39ha9811e2_0 - - numpy=1.25.2=py39h3b2db8e_0 - - openjpeg=2.3.0=h7a6adac_2 - - openssl=1.1.1w=h1a28f6b_0 - - orc=1.7.4=hdca1487_1 - - packaging=23.1=py39hca03da5_0 - - pandas=2.1.1=py39h46d7db6_0 - - panel=0.14.3=py39hca03da5_0 - - param=1.13.0=py39hca03da5_0 - - partd=1.4.1=py39hca03da5_0 - - pillow=10.0.1=py39h3b245a6_0 - - pip=23.3=py39hca03da5_0 - - platformdirs=3.10.0=py39hca03da5_0 - - prometheus_client=0.14.1=py39hca03da5_0 - - prompt-toolkit=3.0.36=py39hca03da5_0 - - psutil=5.9.0=py39h1a28f6b_0 - - pyarrow=8.0.0=py39hd776c02_0 - - pyct=0.5.0=py39hca03da5_0 - - pygments=2.15.1=py39hca03da5_1 - - pyopenssl=23.2.0=py39hca03da5_0 - - pyparsing=3.0.9=py39hca03da5_0 - - pyrsistent=0.18.0=py39h1a28f6b_0 - - pysocks=1.7.1=py39hca03da5_0 - - python-fastjsonschema=2.16.2=py39hca03da5_0 - - python-lmdb=1.4.1=py39h313beb8_0 - - python=3.9.18=hc0d8a6c_0 - - pytz=2023.3.post1=py39hca03da5_0 - - pyviz_comms=2.3.0=py39hca03da5_0 - - pyyaml=6.0.1=py39h80987f9_0 - - pyzmq=23.2.0=py39hc377ac9_0 - - re2=2022.04.01=hc377ac9_0 - - readline=8.2=h1a28f6b_0 - - requests=2.31.0=py39hca03da5_0 - - scipy=1.11.3=py39h20cbe94_0 - - setuptools=68.0.0=py39hca03da5_0 - - snappy=1.1.9=hc377ac9_0 - - sniffio=1.2.0=py39hca03da5_1 - - soupsieve=2.5=py39hca03da5_0 - - spatialpandas=0.4.9=py39hca03da5_0 - - sqlite=3.41.2=h80987f9_0 - - tbb=2021.8.0=h48ca7d4_0 - - terminado=0.17.1=py39hca03da5_0 - - tinycss2=1.2.1=py39hca03da5_0 - - tk=8.6.12=hb8d0fd4_0 - - toolz=0.12.0=py39hca03da5_0 - - tornado=6.3.3=py39h80987f9_0 - - tqdm=4.65.0=py39h86d0a89_0 - - traitlets=5.7.1=py39hca03da5_0 - - typing-extensions=4.7.1=py39hca03da5_0 - - typing_extensions=4.7.1=py39hca03da5_0 - - urllib3=1.26.18=py39hca03da5_0 - - utf8proc=2.6.1=h1a28f6b_0 - - webencodings=0.5.1=py39hca03da5_1 - - websocket-client=0.58.0=py39hca03da5_4 - - wheel=0.41.2=py39hca03da5_0 - - xarray=2023.6.0=py39hca03da5_0 - - xz=5.4.2=h80987f9_0 - - yaml=0.2.5=h1a28f6b_0 - - zeromq=4.3.4=hc377ac9_0 - - zict=3.0.0=py39hca03da5_0 - - zipp=3.11.0=py39hca03da5_0 - - zlib=1.2.13=h5a0b063_0 - - zstd=1.5.5=hd90d995_0 + - argon2-cffi-bindings=21.2.0=py311h460d6c5_5 + - aws-c-auth=0.8.0=h8bc59a9_15 + - aws-c-cal=0.8.1=hc8a0bd2_3 + - aws-c-common=0.10.6=h5505292_0 + - aws-c-compression=0.3.0=hc8a0bd2_5 + - aws-c-event-stream=0.5.0=h54f970a_11 + - aws-c-http=0.9.2=h96aa502_4 + - aws-c-io=0.15.3=haba67d1_4 + - aws-c-mqtt=0.11.0=h24f418c_12 + - aws-c-s3=0.7.7=h1be5864_0 + - aws-c-sdkutils=0.2.1=hc8a0bd2_4 + - aws-checksums=0.2.2=hc8a0bd2_4 + - aws-crt-cpp=0.29.7=h19a973c_7 + - aws-sdk-cpp=1.11.458=he0ff2e4_4 + - azure-core-cpp=1.14.0=hd50102c_0 + - azure-identity-cpp=1.10.0=hc602bab_0 + - azure-storage-blobs-cpp=12.13.0=h7585a09_1 + - azure-storage-common-cpp=12.8.0=h9ca1f76_1 + - azure-storage-files-datalake-cpp=12.12.0=hcdd55da_1 + - brotli-bin=1.1.0=hd74edd7_2 + - brotli-python=1.1.0=py311h3f08180_2 + - brotli=1.1.0=hd74edd7_2 + - bzip2=1.0.8=h99b78c6_7 + - c-ares=1.34.4=h5505292_0 + - ca-certificates=2024.12.14=hf0a4a13_0 + - cffi=1.17.1=py311h3a79f62_0 + - contourpy=1.3.1=py311h210dab8_0 + - cytoolz=1.0.1=py311h917b07b_0 + - debugpy=1.8.11=py311h155a34a_0 + - fonttools=4.55.3=py311h4921393_0 + - freetype=2.12.1=hadb7bae_2 + - gflags=2.2.2=hf9b8971_1005 + - glog=0.7.1=heb240a5_0 + - icu=75.1=hfee45f7_0 + - jsonpointer=3.0.0=py311h267d04e_1 + - kiwisolver=1.4.7=py311h2c37856_0 + - krb5=1.21.3=h237132a_0 + - lcms2=2.16=ha0e7c42_0 + - lerc=4.0.0=h9a09cb3_0 + - libabseil=20240722.0=cxx17_hf9b8971_1 + - libarrow-acero=18.1.0=hf07054f_6_cpu + - libarrow-dataset=18.1.0=hf07054f_6_cpu + - libarrow-substrait=18.1.0=h86344ea_6_cpu + - libarrow=18.1.0=h4a2f8bd_6_cpu + - libblas=3.9.0=26_osxarm64_openblas + - libbrotlicommon=1.1.0=hd74edd7_2 + - libbrotlidec=1.1.0=hd74edd7_2 + - libbrotlienc=1.1.0=hd74edd7_2 + - libcblas=3.9.0=26_osxarm64_openblas + - libcrc32c=1.1.2=hbdafb3b_0 + - libcurl=8.11.1=h73640d1_0 + - libcxx=19.1.5=ha82da77_0 + - libdeflate=1.23=hec38601_0 + - libedit=3.1.20191231=hc8eb9b7_2 + - libev=4.33=h93a5062_2 + - libevent=2.1.12=h2757513_1 + - libexpat=2.6.4=h286801f_0 + - libffi=3.4.2=h3422bc3_5 + - libgfortran5=13.2.0=hf226fd6_3 + - libgfortran=5.0.0=13_2_0_hd922786_3 + - libgoogle-cloud-storage=2.32.0=h7081f7f_0 + - libgoogle-cloud=2.32.0=h8d8be31_0 + - libgrpc=1.67.1=hc70892a_0 + - libiconv=1.17=h0d3ecfb_2 + - libjpeg-turbo=3.0.0=hb547adb_1 + - liblapack=3.9.0=26_osxarm64_openblas + - libllvm14=14.0.6=hd1a9a77_4 + - liblzma=5.6.3=h39f12f2_1 + - libnghttp2=1.64.0=h6d7220d_0 + - libopenblas=0.3.28=openmp_hf332438_1 + - libparquet=18.1.0=h636d7b7_6_cpu + - libpng=1.6.44=hc14010f_0 + - libprotobuf=5.28.2=h8f0b736_0 + - libre2-11=2024.07.02=h2348fd5_1 + - libsodium=1.0.20=h99b78c6_0 + - libsqlite=3.47.2=h3f77e49_0 + - libssh2=1.11.1=h9cc3647_0 + - libthrift=0.21.0=h64651cc_0 + - libtiff=4.7.0=h551f018_3 + - libutf8proc=2.9.0=h5505292_1 + - libwebp-base=1.4.0=h93a5062_0 + - libxcb=1.17.0=hdb1d25a_0 + - libxml2=2.13.5=h178c5d8_1 + - libzlib=1.3.1=h8359307_2 + - llvm-openmp=19.1.5=hdb05f8b_0 + - llvmlite=0.43.0=py311hc367efa_1 + - lz4-c=1.10.0=h286801f_1 + - lz4=4.3.3=py311h3a49619_2 + - markupsafe=3.0.2=py311h4921393_1 + - matplotlib-base=3.10.0=py311h031da69_0 + - msgpack-python=1.1.0=py311h2c37856_0 + - ncurses=6.5=h7bae524_1 + - numba=0.60.0=py311h9506ed5_0 + - numpy=2.0.2=py311h649a571_1 + - openjpeg=2.5.3=h8a3d83b_0 + - openssl=3.4.0=h39f12f2_0 + - orc=2.0.3=hbcee414_1 + - pandas=2.2.3=py311h9cb3ce9_1 + - pillow=11.0.0=py311h3894ae9_0 + - psutil=6.1.0=py311hae2e1ce_0 + - pthread-stubs=0.4=hd74edd7_1002 + - pyarrow-core=18.1.0=py311he04fa90_0_cpu + - pyarrow=18.1.0=py311ha1ab1f8_0 + - pyobjc-core=10.3.2=py311hab620ed_0 + - pyobjc-framework-cocoa=10.3.2=py311hab620ed_0 + - python=3.11.11=hc22306f_1_cpython + - pyyaml=6.0.2=py311h460d6c5_1 + - pyzmq=26.2.0=py311h730b646_3 + - qhull=2020.2=h420ef59_5 + - re2=2024.07.02=hcd0e937_1 + - readline=8.2=h92ec313_1 + - rpds-py=0.22.3=py311h3ff9189_0 + - scipy=1.14.1=py311hf056e50_2 + - snappy=1.2.1=h98b9ce2_1 + - tk=8.6.13=h5083fa2_1 + - tornado=6.4.2=py311h917b07b_0 + - unicodedata2=15.1.0=py311hae2e1ce_1 + - xorg-libxau=1.0.12=h5505292_0 + - xorg-libxdmcp=1.1.5=hd74edd7_0 + - yaml=0.2.5=h3422bc3_2 + - zeromq=4.3.5=hc1bb282_7 + - zstandard=0.23.0=py311ha60cc69_1 + - zstd=1.5.6=hb46c0d2_0 win-64: - - anyio=3.5.0=py39haa95532_0 - - argon2-cffi-bindings=21.2.0=py39h2bbff1b_0 - - arrow-cpp=8.0.0=py39hbd6f097_1 - - attrs=23.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 - - beautifulsoup4=4.12.2=py39haa95532_0 - - blas=1.0=mkl - - bokeh=2.4.3=py39haa95532_0 - - boost-cpp=1.82.0=h59b6b97_2 - - bottleneck=1.3.5=py39h080aedc_0 - - brotli-bin=1.0.9=h2bbff1b_7 - - brotli-python=1.0.9=py39hd77b12b_7 - - brotli=1.0.9=h2bbff1b_7 - - bzip2=1.0.8=he774522_0 - - c-ares=1.19.1=h2bbff1b_0 - - ca-certificates=2023.08.22=haa95532_0 - - certifi=2023.7.22=py39haa95532_0 - - cffi=1.15.1=py39h2bbff1b_3 - - click=8.1.7=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.3=py39h3438e0d_0 - - cytoolz=0.12.0=py39h2bbff1b_0 - - dask-core=2023.6.0=py39haa95532_0 - - dask=2023.6.0=py39haa95532_0 - - datashader=0.15.2=py39haa95532_0 - - datashape=0.5.4=py39haa95532_1 - - debugpy=1.6.7=py39hd77b12b_0 - - distributed=2023.6.0=py39haa95532_0 - - entrypoints=0.4=py39haa95532_0 - - exceptiongroup=1.0.4=py39haa95532_0 - - freetype=2.12.1=ha860e81_0 - - fsspec=2023.9.2=py39haa95532_0 - - gflags=2.2.2=ha925a31_0 - - giflib=5.2.1=h8cc25b3_3 - - glog=0.5.0=hd77b12b_0 - - holoviews=1.17.1=py39haa95532_0 - - icc_rt=2022.1.0=h6049295_2 - - idna=3.4=py39haa95532_0 - - importlib-metadata=6.0.0=py39haa95532_0 - - importlib_resources=6.1.0=py39haa95532_0 - - intel-openmp=2023.1.0=h59b6b97_46319 - - ipykernel=6.25.0=py39h9909e9c_0 - - ipython=8.15.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=7.4.9=py39haa95532_0 - - jupyter_core=5.3.0=py39haa95532_0 - - jupyter_server=1.23.4=py39haa95532_0 - - kiwisolver=1.4.4=py39hd77b12b_0 - - lerc=3.0=hd77b12b_0 - - libboost=1.82.0=h3399ecb_2 - - libbrotlicommon=1.0.9=h2bbff1b_7 - - libbrotlidec=1.0.9=h2bbff1b_7 - - libbrotlienc=1.0.9=h2bbff1b_7 - - libcurl=8.4.0=h86230a5_0 - - libdeflate=1.17=h2bbff1b_1 - - libevent=2.1.12=hcc03200_0 - - libiconv=1.16=h2bbff1b_2 - - 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.1=hd77b12b_0 - - libwebp-base=1.3.2=h2bbff1b_0 - - libwebp=1.3.2=hbc33d0d_0 - - libxml2=2.10.4=h0ad7f3c_1 - - libxslt=1.1.37=h2bbff1b_1 - - llvmlite=0.41.0=py39hf2fb9eb_0 - - locket=1.0.0=py39haa95532_0 - - lxml=4.9.3=py39h09808a7_0 - - lz4-c=1.9.4=h2bbff1b_0 - - lz4=4.3.2=py39h2bbff1b_0 - - markdown=3.4.1=py39haa95532_0 - - markupsafe=2.1.1=py39h2bbff1b_0 - - matplotlib-base=3.8.0=py39h4ed8f06_0 - - matplotlib-inline=0.1.6=py39haa95532_0 - - mistune=0.8.4=py39h2bbff1b_1000 - - mkl-service=2.4.0=py39h2bbff1b_1 - - mkl=2023.1.0=h6b88ed4_46357 - - mkl_fft=1.3.8=py39h2bbff1b_0 - - mkl_random=1.2.4=py39h59b6b97_0 - - msgpack-python=1.0.3=py39h59b6b97_0 - - multipledispatch=0.6.0=py39haa95532_0 - - nbclassic=0.5.5=py39haa95532_0 - - nbclient=0.5.13=py39haa95532_0 - - nbconvert=6.5.4=py39haa95532_0 - - nbformat=5.9.2=py39haa95532_0 - - nest-asyncio=1.5.6=py39haa95532_0 - - notebook-shim=0.2.2=py39haa95532_0 - - notebook=6.5.4=py39haa95532_1 - - numba=0.58.0=py39h4ed8f06_0 - - numexpr=2.8.7=py39h2cd9be0_0 - - numpy-base=1.25.2=py39h65a83cf_0 - - numpy=1.25.2=py39h055cbcc_0 - - openjpeg=2.4.0=h4fc8c34_0 - - openssl=1.1.1w=h2bbff1b_0 - - packaging=23.1=py39haa95532_0 - - pandas=2.1.1=py39h4ed8f06_0 - - panel=0.14.3=py39haa95532_0 - - param=1.13.0=py39haa95532_0 - - partd=1.4.1=py39haa95532_0 - - pillow=10.0.1=py39h045eedc_0 - - pip=23.3=py39haa95532_0 - - platformdirs=3.10.0=py39haa95532_0 - - prometheus_client=0.14.1=py39haa95532_0 - - prompt-toolkit=3.0.36=py39haa95532_0 - - psutil=5.9.0=py39h2bbff1b_0 - - pyarrow=8.0.0=py39h953b917_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-lmdb=1.4.1=py39hd77b12b_0 - - python=3.9.18=h6244533_0 - - pytz=2023.3.post1=py39haa95532_0 - - pyviz_comms=2.3.0=py39haa95532_0 - - pywin32=305=py39h2bbff1b_0 - - pywinpty=2.0.10=py39h5da7b33_0 - - pyyaml=6.0.1=py39h2bbff1b_0 - - pyzmq=23.2.0=py39hd77b12b_0 - - re2=2022.04.01=hd77b12b_0 - - requests=2.31.0=py39haa95532_0 - - scipy=1.11.3=py39h309d312_0 - - setuptools=68.0.0=py39haa95532_0 - - snappy=1.1.9=h6c2663c_0 - - sniffio=1.2.0=py39haa95532_1 - - soupsieve=2.5=py39haa95532_0 - - spatialpandas=0.4.9=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 - - toolz=0.12.0=py39haa95532_0 - - tornado=6.3.3=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 - - urllib3=1.26.18=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.41.2=py39haa95532_0 - - win_inet_pton=1.1.0=py39haa95532_0 + - _openmp_mutex=4.5=2_gnu + - argon2-cffi-bindings=21.2.0=py311he736701_5 + - aws-c-auth=0.8.0=h2219d47_15 + - aws-c-cal=0.8.1=h099ea23_3 + - aws-c-common=0.10.6=h2466b09_0 + - aws-c-compression=0.3.0=h099ea23_5 + - aws-c-event-stream=0.5.0=h85d8506_11 + - aws-c-http=0.9.2=h3888f84_4 + - aws-c-io=0.15.3=hc5a9e45_5 + - aws-c-mqtt=0.11.0=h2c94728_12 + - aws-c-s3=0.7.7=h6a38c86_0 + - aws-c-sdkutils=0.2.1=h099ea23_4 + - aws-checksums=0.2.2=h099ea23_4 + - aws-crt-cpp=0.29.7=h0642867_7 + - aws-sdk-cpp=1.11.458=h5f5f9c4_4 + - brotli-bin=1.1.0=h2466b09_2 + - brotli-python=1.1.0=py311hda3d55a_2 + - brotli=1.1.0=h2466b09_2 + - bzip2=1.0.8=h2466b09_7 + - c-ares=1.34.4=h2466b09_0 + - ca-certificates=2024.12.14=h56e8100_0 + - cffi=1.17.1=py311he736701_0 + - click=8.1.7=win_pyh7428d3b_1 + - contourpy=1.3.1=py311h3257749_0 + - cpython=3.11.11=py311hd8ed1ab_1 + - cytoolz=1.0.1=py311he736701_0 + - debugpy=1.8.11=py311hda3d55a_0 + - fonttools=4.55.3=py311h5082efb_0 + - freetype=2.12.1=hdaf720e_2 + - intel-openmp=2024.2.1=h57928b3_1083 + - ipykernel=6.29.5=pyh4bbf305_0 + - ipython=8.30.0=pyh7428d3b_0 + - jsonpointer=3.0.0=py311h1ea47a8_1 + - jupyter_core=5.7.2=pyh5737063_1 + - kiwisolver=1.4.7=py311h3257749_0 + - krb5=1.21.3=hdf4eb48_0 + - lcms2=2.16=h67d730c_0 + - lerc=4.0.0=h63175ca_0 + - libabseil=20240722.0=cxx17_he0c23c2_1 + - libarrow-acero=18.1.0=h7d8d6a5_6_cpu + - libarrow-dataset=18.1.0=h7d8d6a5_6_cpu + - libarrow-substrait=18.1.0=h7c2144a_6_cpu + - libarrow=18.1.0=h5d48cc5_6_cpu + - libblas=3.9.0=26_win64_mkl + - libbrotlicommon=1.1.0=h2466b09_2 + - libbrotlidec=1.1.0=h2466b09_2 + - libbrotlienc=1.1.0=h2466b09_2 + - libcblas=3.9.0=26_win64_mkl + - libcrc32c=1.1.2=h0e60522_0 + - libcurl=8.11.1=h88aaa65_0 + - libdeflate=1.23=h9062f6e_0 + - libevent=2.1.12=h3671451_1 + - libexpat=2.6.4=he0c23c2_0 + - libffi=3.4.2=h8ffe710_5 + - libgcc=14.2.0=h1383e82_1 + - libgomp=14.2.0=h1383e82_1 + - libgoogle-cloud-storage=2.32.0=he5eb982_0 + - libgoogle-cloud=2.32.0=h07d40e7_0 + - libgrpc=1.67.1=h7aa3b8a_0 + - libhwloc=2.11.2=default_ha69328c_1001 + - libiconv=1.17=hcfcfb64_2 + - libjpeg-turbo=3.0.0=hcfcfb64_1 + - liblapack=3.9.0=26_win64_mkl + - liblzma=5.6.3=h2466b09_1 + - libparquet=18.1.0=ha850022_6_cpu + - libpng=1.6.44=h3ca93ac_0 + - libprotobuf=5.28.2=hcaed137_0 + - libre2-11=2024.07.02=h4eb7d71_1 + - libsodium=1.0.20=hc70643c_0 + - libsqlite=3.47.2=h67fdade_0 + - libssh2=1.11.1=he619c9f_0 + - libthrift=0.21.0=hbe90ef8_0 + - libtiff=4.7.0=h797046b_3 + - libutf8proc=2.9.0=h2466b09_1 + - libwebp-base=1.4.0=hcfcfb64_0 + - libwinpthread=12.0.0.r4.gg4f2fc60ca=h57928b3_8 + - libxcb=1.17.0=h0e4246c_0 + - libxml2=2.13.5=he286e8c_1 + - libzlib=1.3.1=h2466b09_2 + - llvmlite=0.43.0=py311h7deaa30_1 + - lz4-c=1.10.0=h2466b09_1 + - lz4=4.3.3=py311h0476921_2 + - markupsafe=3.0.2=py311h5082efb_1 + - matplotlib-base=3.10.0=py311h8f1b1e4_0 + - mkl=2024.2.2=h66d3029_15 + - msgpack-python=1.1.0=py311h3257749_0 + - numba=0.60.0=py311h0673bce_0 + - numpy=2.0.2=py311h35ffc71_1 + - openjpeg=2.5.3=h4d64b90_0 + - openssl=3.4.0=h2466b09_0 + - orc=2.0.3=h303113e_1 + - pandas=2.2.3=py311hcf9f919_1 + - pillow=11.0.0=py311h4fbf6a9_0 + - psutil=6.1.0=py311he736701_0 + - pthread-stubs=0.4=h0e40799_1002 + - pyarrow-core=18.1.0=py311hdea38fa_0_cpu + - pyarrow=18.1.0=py311h1ea47a8_0 + - pysocks=1.7.1=pyh09c184e_7 + - python=3.11.11=h3f84c4b_1_cpython + - pywin32=307=py311hda3d55a_3 + - pywinpty=2.0.14=py311hda3d55a_0 + - pyyaml=6.0.2=py311he736701_1 + - pyzmq=26.2.0=py311h484c95c_3 + - qhull=2020.2=hc790b64_5 + - re2=2024.07.02=hd3b24a8_1 + - rpds-py=0.22.3=py311h533ab2d_0 + - scipy=1.14.1=py311hf16d85f_2 + - send2trash=1.8.3=pyh5737063_1 + - snappy=1.2.1=h500f7fa_1 + - tbb=2021.13.0=h62715c5_1 + - terminado=0.18.1=pyh5737063_0 + - tk=8.6.13=h5226925_1 + - tornado=6.4.2=py311he736701_0 + - ucrt=10.0.22621.0=h57928b3_1 + - unicodedata2=15.1.0=py311he736701_1 + - vc14_runtime=14.42.34433=he29a5d6_23 + - vc=14.3=ha32ba9b_23 + - vs2015_runtime=14.42.34433=hdffcdeb_23 + - win_inet_pton=1.1.0=pyh7428d3b_8 - winpty=0.4.3=4 - - xarray=2023.6.0=py39haa95532_0 - - xz=5.4.2=h8cc25b3_0 - - yaml=0.2.5=he774522_0 - - zeromq=4.3.4=hd77b12b_0 - - zict=3.0.0=py39haa95532_0 - - zipp=3.11.0=py39haa95532_0 - - zlib=1.2.13=h8cc25b3_0 - - zstd=1.5.5=hd43e919_0 + - xorg-libxau=1.0.12=h0e40799_0 + - xorg-libxdmcp=1.1.5=h0e40799_0 + - yaml=0.2.5=h8ffe710_2 + - zeromq=4.3.5=ha9f60a1_7 + - zstandard=0.23.0=py311h53056dc_1 + - zstd=1.5.6=h0ea2cb4_0 diff --git a/nyc_buildings/anaconda-project.yml b/nyc_buildings/anaconda-project.yml index e28f18262..93d9a6cb5 100644 --- a/nyc_buildings/anaconda-project.yml +++ b/nyc_buildings/anaconda-project.yml @@ -10,35 +10,44 @@ examples_config: - Geospatial labels: - datashader + - hvplot + - spatialpandas deployments: - command: notebook + - command: dashboard user_fields: [examples_config] channels: -- defaults +- conda-forge +- pyviz/label/dev +- nodefaults packages: &pkgs -- python =3.9 -- notebook >=6.5.2 -- colorcet >=3.0.1 -- dask >=2022.7.0 -- datashader >=0.14.3 -- holoviews >=1.15.3 -- bokeh >=2.4.3 -- spatialpandas >=0.4.6 -- pyarrow =8 -- pandas >=1.4.2 -- panel <1 -- bokeh <3 +- python=3.11 +- notebook<7 +- colorcet>=3.1.0 +- dask>=2024.5, <2024.11 # upper pin needed until spatialpandas supports dask-expr +- datashader>=0.16.3 +- hvplot>=0.11.2 +- holoviews>=1.20.0 +- pandas>=2.2.2 +- panel>=1.4.4 +- spatialpandas=0.5.0a1 dependencies: *pkgs commands: + dashboard: + unix: panel serve --rest-session-info --session-history -1 nyc_buildings.ipynb --show + supports_http_options: true notebook: notebook: nyc_buildings.ipynb -variables: {} +variables: + DASK_DATAFRAME__CONVERT_STRING : "False" + DASK_DATAFRAME__QUERY_PLANNING : "False" + downloads: DATA: url: http://s3.amazonaws.com/datashader-data/nyc_buildings.parq.zip diff --git a/nyc_buildings/assets/dashboard.png b/nyc_buildings/assets/dashboard.png new file mode 100644 index 000000000..a69155d2d Binary files /dev/null and b/nyc_buildings/assets/dashboard.png differ diff --git a/nyc_buildings/nyc_buildings.ipynb b/nyc_buildings/nyc_buildings.ipynb index 03b0fbb2a..454b34028 100644 --- a/nyc_buildings/nyc_buildings.ipynb +++ b/nyc_buildings/nyc_buildings.ipynb @@ -11,22 +11,64 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Many plotting libraries can handle collections of polygons, e.g. [Bokeh](https://docs.bokeh.org/en/latest/docs/gallery/texas.html) or [HoloViews+Bokeh](http://holoviews.org/gallery/demos/bokeh/choropleth_data_link.html). However, because browser-based libraries like Bokeh and Plotly send all the polygon data to the browser, they can struggle when either the collections or the polygons themselves get large. Even natively in Python, typical formats like Shapely for representing polygons scale poorly to large polygon collections, because each polygon is wrapped up as a separate Python object, leading to a lot of duplicated storage overhead when many polygons of the same type are defined.\n", + "\n", "\n", - "If you want to work with lots of polygons, here you can see how to use [SpatialPandas](https://github.com/holoviz/spatialpandas) and Dask to represent polygons efficiently in memory, fastparquet to represent them efficiently on disk, and [Datashader](https://datashader.org) to render them quickly in a web browser. This notebook also demonstrates how to support hovering for datashaded polygons, with Bokeh overlaying a single vector-based representation of a polygon where the mouse cursor is, while all the rest are sent to the browser only as rendered pixels. That way hover and other interactive features can be supported fully without ever needing to transfer large amounts of data or store them in the limited memory of the web browser tab. \n", + "Many plotting libraries can handle collections of polygons, including [Bokeh](https://docs.bokeh.org/en/latest/docs/examples/topics/geo/texas_hover_map.html) and [HoloViews](https://holoviews.org/gallery/demos/bokeh/choropleth_data_link.html). However, because browser-based libraries like Bokeh and Plotly send all the polygon data to Javascript running in the browser, they can struggle when either the collections or the individual polygons themselves get large. Even natively in Python, typical formats like Shapely for representing polygons scale poorly to large polygon collections, because each polygon is wrapped up as a full, separate Python object, leading to a lot of duplicated storage overhead when many polygons of the same type are defined.\n", "\n", - "This example plots the outlines of all the buildings in New York City. See\n", - "[nyc.gov](https://www1.nyc.gov/site/doitt/residents/gis-2d-data.page) for the original data and its description." + "If you want to work with lots of polygons, here you can see how to use [SpatialPandas](https://github.com/holoviz/spatialpandas) and Dask to represent polygons efficiently in memory, and [hvPlot](https://github.com/holoviz/hvplot) and [Datashader](https://datashader.org) to render them quickly in a web browser.\n", + "\n", + "This example plots the outlines of all one million+ buildings in New York City. See\n", + "[nyc.gov](https://nyc.maps.arcgis.com/home/item.html?id=870bf69e8a8044aea4488e564c0b4010#overview) for the original data and its description." ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "import hvplot.dask # noqa\n", + "import hvplot.pandas # noqa\n", + "import datashader as ds\n", + "import colorcet as cc\n", + "import spatialpandas as spd\n", + "import spatialpandas.io\n", + "\n", + "from holoviews import opts\n", + "from holoviews.streams import PlotSize\n", + "from dask.distributed import Client\n", + "from IPython.display import display\n", + "\n", + "client = Client()\n", + "client" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-cell" + ] + }, + "outputs": [], + "source": [ + "# Add more resolution to dynamic plots, particularly important for Retina displays when building the website.\n", + "# This cell is hidden on the website.\n", + "PlotSize.scale=2.0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, "outputs": [], "source": [ - "import warnings\n", - "warnings.simplefilter('ignore')" + "opts.defaults(opts.Polygons(height=500, xaxis=None, yaxis=None))" ] }, { @@ -35,18 +77,37 @@ "metadata": {}, "outputs": [], "source": [ - "import holoviews as hv\n", - "import colorcet as cc\n", - "import datashader as ds\n", - "import spatialpandas as spd\n", - "import spatialpandas.io\n", + "ddf = spd.io.read_parquet_dask('./data/nyc_buildings.parq').persist()\n", + "print(len(ddf))\n", + "ddf.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here you can see that we have 1.1 million \"MultiPolygons\", some of which have a `type` and `name` declared.\n", "\n", - "from dask.diagnostics import ProgressBar\n", - "from holoviews.operation.datashader import (\n", - " rasterize, datashade, inspect_polygons\n", - ")\n", + "To get a look at this data, let's plot all the polygons, overlaid on a tiled map of the region:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "display(ddf.hvplot.polygons(tiles='CartoLight', rasterize=True, aggregator='any'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At this scale, the plot looks like a bunch of dots or large colored areas, because each building is smaller than a pixel in the plot. But if you have a live Python server running, you can use the Bokeh tools to zoom in and have the plot dynamically redrawn, showing you the full outline of each polygon.\n", "\n", - "hv.extension('bokeh')" + "Alternatively, we can re-plot the data over a smaller selection of the location that can show us the indidvidual polygons using the `xlim` and `ylim` parameters:" ] }, { @@ -55,14 +116,16 @@ "metadata": {}, "outputs": [], "source": [ - "ddf = spd.io.read_parquet_dask('./data/nyc_buildings.parq').persist()" + "%%time\n", + "display(ddf.hvplot.polygons(tiles='CartoLight', rasterize=True, aggregator='any',\n", + " xlim=(-8231400, -8230900), ylim=(4971900, 4972600)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now we compute the top categories and drop everything else:" + "Now let's make use of the category information. To get a manageable number of types, we'll compute the top 10 most common categories and drop everything else:" ] }, { @@ -71,20 +134,18 @@ "metadata": {}, "outputs": [], "source": [ - "cats = list(ddf.type.value_counts().compute().iloc[:10].index.values) + ['unknown']\n", - "ddf['type'] = ddf.type.replace({None: 'unknown'})\n", - "ddf = ddf[ddf.type.isin(cats)]\n", - "ddf['type'] = ddf['type'].astype('category').cat.as_known()\n", + "cats = list(ddf['type'].value_counts().compute().iloc[:10].index.values) + ['unknown']\n", "\n", - "with ProgressBar():\n", - " ddf = ddf.build_sindex().persist()" + "ddf['type'] = ddf['type'].replace({None: 'unknown'})\n", + "ddf = ddf[ddf['type'].isin(cats)]\n", + "ddf['type'] = ddf['type'].astype('category').cat.as_known()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Next we build a legend for the categories and declare a tile source as backdrop:" + "SpatialPandas lets us build a spatial index for accessing spatially organized regions more quickly, so let's do that:" ] }, { @@ -93,21 +154,53 @@ "metadata": {}, "outputs": [], "source": [ - "colors = cc.glasbey_bw_minc_20_maxl_70\n", - "color_key = {cat: tuple(int(e*255.) for e in colors[i]) for i, cat in enumerate(cats)}\n", - "legend = hv.NdOverlay({k: hv.Points([0,0], label=str(k)).opts(\n", - " color=cc.rgb_to_hex(*v), size=0, apply_ranges=False)\n", - " for k, v in color_key.items()}, 'Type')\n", + "%%time\n", + "ddf = ddf.build_sindex().persist()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can view each category separately with a selector widget:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "%%time\n", + "display(ddf.hvplot.polygons(rasterize=True, tiles='CartoLight', groupby='type', aggregator='any'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you look at each one, you can see that unfortunately most of the categories are unknown, but there are interesting patterns (e.g. almost no garages in Manhattan, and apparently all the sheds are in New Jersey).\n", "\n", - "tiles = hv.element.tiles.CartoLight().opts(\n", - " min_height=500, responsive=True, xaxis=None, yaxis=None)" + "Since these buildings don't normally overlap, we can actually combine them all into a single plot using color to show all of the categories (though we have to construct a color key manually):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "colors = cc.glasbey_bw_minc_20_maxl_70\n", + "color_key = {cat: tuple(int(e*255.) for e in colors[i]) for i, cat in enumerate(cats)}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now we put it all together, declaring a `Polygons` element from our data, datashade them and use the `inspect_polygons` operation to allow us to hover on the data:" + "Now we put it all together, showing the color-coded plot:" ] }, { @@ -116,20 +209,21 @@ "metadata": {}, "outputs": [], "source": [ - "polys = hv.Polygons(ddf, vdims='type')\n", + "%%time\n", + "plot = ddf.hvplot.polygons(tiles='CartoLight', datashade=True,\n", + " aggregator=ds.by('type', ds.any()),\n", + " cmap=color_key, responsive=True, legend='bottom_right')\n", "\n", - "shaded = datashade(polys, color_key=color_key, aggregator=ds.by('type', ds.any()))\n", - "\n", - "hover = inspect_polygons(shaded).opts(fill_color='red', tools=['hover'])\n", - "\n", - "tiles * shaded * legend * hover" + "display(plot)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Finally we will plot each category of buildings separately:" + "If you zoom into an area of interest, you'll see an overlay of the building at that location, with the color of the polygon telling you the type of building it is.\n", + "\n", + "Finally, we'll make this notebook into a shareable app (run with `anaconda-project run dashboard`):" ] }, { @@ -138,9 +232,15 @@ "metadata": {}, "outputs": [], "source": [ - "hv.NdLayout({\n", - " cat: hv.element.tiles.CartoLight() * rasterize(polys.select(type=cat), aggregator='any') for cat in cats\n", - "}, 'Type').opts('Image', width=250, height=400, xaxis=None, yaxis=None).cols(4)" + "import panel as pn\n", + "pn.extension()\n", + "\n", + "text = \"\"\"\n", + "# [1 million buildings in NYC](https://examples.holoviz.org/nyc_buildings)\n", + "## Rendered using [Datashader](https://datashader.org) and [hvPlot](https://hvplot.holoviz.org).\n", + "\"\"\"\n", + "\n", + "pn.Column(text, pn.panel(plot, sizing_mode='stretch_both')).servable();" ] } ], @@ -160,7 +260,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.11.10" } }, "nbformat": 4,