MultiVI error on only paired data

Hello,

I was following the MultiVI tutorial using the same 10x Multiome dataset in the tutorial. I removed the part where the data is split into paired data, gene expression only data, and peak only data. i.e. there’s only paired data, adata_mvi = scvi.data.organize_multiome_anndatas(adata). Otherwise, the rest of the tutorial code is unchanged.

When I start training the model, I receive the following error before the first training epoch:

# First few stack traces omitted

File ~/notebooks/../../scvi-tools/scvi/train/_trainingplans.py:574, in AdversarialTrainingPlan.training_step(self, batch, batch_idx)
    571 else:
    572     opt1, opt2 = opts
--> 574 inference_outputs, _, scvi_loss = self.forward(
    575     batch, loss_kwargs=self.loss_kwargs
    576 )
    577 z = inference_outputs["z"]
    578 loss = scvi_loss.loss

File ~/notebooks/../../scvi-tools/scvi/train/_trainingplans.py:283, in TrainingPlan.forward(self, *args, **kwargs)
    281 def forward(self, *args, **kwargs):
    282     """Passthrough to the module's forward method."""
--> 283     return self.module(*args, **kwargs)

File /arc/project/st-jiaruid-1/yinian/pytorch2/lib/python3.11/site-packages/torch/nn/modules/module.py:1501, in Module._call_impl(self, *args, **kwargs)
   1496 # If we don't have any hooks, we want to skip the rest of the logic in
   1497 # this function, and just call forward.
   1498 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
   1499         or _global_backward_pre_hooks or _global_backward_hooks
   1500         or _global_forward_hooks or _global_forward_pre_hooks):
-> 1501     return forward_call(*args, **kwargs)
   1502 # Do not call functions when jit is used
   1503 full_backward_hooks, non_full_backward_hooks = [], []

File ~/notebooks/../../scvi-tools/scvi/module/base/_decorators.py:32, in auto_move_data.<locals>.auto_transfer_args(self, *args, **kwargs)
     30 # decorator only necessary after training
     31 if self.training:
---> 32     return fn(self, *args, **kwargs)
     34 device = list({p.device for p in self.parameters()})
     35 if len(device) > 1:

File ~/notebooks/../../scvi-tools/scvi/module/base/_base_module.py:198, in BaseModuleClass.forward(self, tensors, get_inference_input_kwargs, get_generative_input_kwargs, inference_kwargs, generative_kwargs, loss_kwargs, compute_loss)
    164 @auto_move_data
    165 def forward(
    166     self,
   (...)
    176     | tuple[torch.Tensor, torch.Tensor, LossOutput]
    177 ):
    178     """Forward pass through the network.
    179 
    180     Parameters
   (...)
    196         another return value.
    197     """
--> 198     return _generic_forward(
    199         self,
    200         tensors,
    201         inference_kwargs,
    202         generative_kwargs,
    203         loss_kwargs,
    204         get_inference_input_kwargs,
    205         get_generative_input_kwargs,
    206         compute_loss,
    207     )

File ~/notebooks/../../scvi-tools/scvi/module/base/_base_module.py:742, in _generic_forward(module, tensors, inference_kwargs, generative_kwargs, loss_kwargs, get_inference_input_kwargs, get_generative_input_kwargs, compute_loss)
    737 get_generative_input_kwargs = _get_dict_if_none(get_generative_input_kwargs)
    739 inference_inputs = module._get_inference_input(
    740     tensors, **get_inference_input_kwargs
    741 )
--> 742 inference_outputs = module.inference(**inference_inputs, **inference_kwargs)
    743 generative_inputs = module._get_generative_input(
    744     tensors, inference_outputs, **get_generative_input_kwargs
    745 )
    746 generative_outputs = module.generative(**generative_inputs, **generative_kwargs)

File ~/notebooks/../../scvi-tools/scvi/module/base/_decorators.py:32, in auto_move_data.<locals>.auto_transfer_args(self, *args, **kwargs)
     30 # decorator only necessary after training
     31 if self.training:
---> 32     return fn(self, *args, **kwargs)
     34 device = list({p.device for p in self.parameters()})
     35 if len(device) > 1:

File ~/notebooks/../../scvi-tools/scvi/module/_multivae.py:615, in MULTIVAE.inference(self, x, y, batch_index, cont_covs, cat_covs, label, cell_idx, n_samples)
    612     categorical_input = ()
    614 # Z Encoders
--> 615 qzm_acc, qzv_acc, z_acc = self.z_encoder_accessibility(
    616     encoder_input_accessibility, batch_index, *categorical_input
    617 )
    618 qzm_expr, qzv_expr, z_expr = self.z_encoder_expression(
    619     encoder_input_expression, batch_index, *categorical_input
    620 )
    621 qzm_pro, qzv_pro, z_pro = self.z_encoder_protein(
    622     encoder_input_protein, batch_index, *categorical_input
    623 )

File /arc/project/st-jiaruid-1/yinian/pytorch2/lib/python3.11/site-packages/torch/nn/modules/module.py:1501, in Module._call_impl(self, *args, **kwargs)
   1496 # If we don't have any hooks, we want to skip the rest of the logic in
   1497 # this function, and just call forward.
   1498 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
   1499         or _global_backward_pre_hooks or _global_backward_hooks
   1500         or _global_forward_hooks or _global_forward_pre_hooks):
-> 1501     return forward_call(*args, **kwargs)
   1502 # Do not call functions when jit is used
   1503 full_backward_hooks, non_full_backward_hooks = [], []

File ~/notebooks/../../scvi-tools/scvi/nn/_base_components.py:289, in Encoder.forward(self, x, *cat_list)
    287 q_m = self.mean_encoder(q)
    288 q_v = self.var_activation(self.var_encoder(q)) + self.var_eps
--> 289 dist = Normal(q_m, q_v.sqrt())
    290 latent = self.z_transformation(dist.rsample())
    291 if self.return_dist:

File /arc/project/st-jiaruid-1/yinian/pytorch2/lib/python3.11/site-packages/torch/distributions/normal.py:56, in Normal.__init__(self, loc, scale, validate_args)
     54 else:
     55     batch_shape = self.loc.size()
---> 56 super().__init__(batch_shape, validate_args=validate_args)

File /arc/project/st-jiaruid-1/yinian/pytorch2/lib/python3.11/site-packages/torch/distributions/distribution.py:62, in Distribution.__init__(self, batch_shape, event_shape, validate_args)
     60         valid = constraint.check(value)
     61         if not valid.all():
---> 62             raise ValueError(
     63                 f"Expected parameter {param} "
     64                 f"({type(value).__name__} of shape {tuple(value.shape)}) "
     65                 f"of distribution {repr(self)} "
     66                 f"to satisfy the constraint {repr(constraint)}, "
     67                 f"but found invalid values:\n{value}"
     68             )
     69 super().__init__()

ValueError: Expected parameter loc (Tensor of shape (128, 17)) of distribution Normal(loc: torch.Size([128, 17]), scale: torch.Size([128, 17])) to satisfy the constraint Real(), but found invalid values:
tensor([[nan, nan, nan,  ..., nan, nan, nan],
        [nan, nan, nan,  ..., nan, nan, nan],
        [nan, nan, nan,  ..., nan, nan, nan],
        ...,
        [nan, nan, nan,  ..., nan, nan, nan],
        [nan, nan, nan,  ..., nan, nan, nan],
        [nan, nan, nan,  ..., nan, nan, nan]], grad_fn=<AddmmBackward0>)

When I run the tutorial as-is (with single-modality observations), this error does not occur. I have also tried this with other joint RNA+ATAC datasets and this occurred as well.

I do not know if this is a factor, but I am using Pytorch 2.0.1.

Thank you for any insight.

1 Like

I also face this problems. I don’t know whether it’s because there are some much Nan values in the single cell data

What I found is that so long as there is at least one cell with only RNA information and only one cell with ATAC information, it runs. So the workaround I applied was to copy one cell and unpair the modalities and feed them as single modality cells.

I’m facing the same issue and the workaround suggested by @niujeffrey works.

Below is my environment:

channels:
  - conda-forge
  - bioconda
  - defaults
dependencies:
  - absl-py=2.0.0=pyhd8ed1ab_0
  - anndata=0.10.2=pyhd8ed1ab_0
  - annotated-types=0.6.0=pyhd8ed1ab_0
  - anyio=3.7.1=pyhd8ed1ab_0
  - aom=3.6.1=hb765f3a_0
  - appnope=0.1.3=pyhd8ed1ab_0
  - arpack=3.8.0=nompi_ha3438d0_101
  - array-api-compat=1.4=pyhd8ed1ab_0
  - arrow=1.3.0=pyhd8ed1ab_0
  - asttokens=2.4.0=pyhd8ed1ab_0
  - attrs=23.1.0=pyh71513ae_1
  - backcall=0.2.0=pyh9f0ad1d_0
  - backoff=2.2.1=pyhd8ed1ab_0
  - backports=1.0=pyhd8ed1ab_3
  - backports.functools_lru_cache=1.6.5=pyhd8ed1ab_0
  - beautifulsoup4=4.12.2=pyha770c72_0
  - blessed=1.19.1=pyhe4f9e05_2
  - blosc=1.21.5=hc338f07_0
  - brotli=1.1.0=hb547adb_1
  - brotli-bin=1.1.0=hb547adb_1
  - brotli-python=1.1.0=py311ha891d26_1
  - brunsli=0.1=h9f76cd9_0
  - bzip2=1.0.8=h3422bc3_4
  - c-ares=1.20.1=h93a5062_0
  - c-blosc2=2.10.5=h8eb3132_0
  - ca-certificates=2023.7.22=hf0a4a13_0
  - cachecontrol=0.13.1=pyhd8ed1ab_0
  - cachecontrol-with-filecache=0.13.1=pyhd8ed1ab_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - certifi=2023.7.22=pyhd8ed1ab_0
  - cffi=1.16.0=py311h4a08483_0
  - charls=2.4.2=h13dd4ca_0
  - charset-normalizer=3.3.0=pyhd8ed1ab_0
  - chex=0.1.83=pyhd8ed1ab_0
  - cleo=2.0.1=pyhd8ed1ab_0
  - click=8.1.7=unix_pyh707e725_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - comm=0.1.4=pyhd8ed1ab_0
  - contextlib2=21.6.0=pyhd8ed1ab_0
  - contourpy=1.1.1=py311he4fd1f5_1
  - crashtest=0.4.1=pyhd8ed1ab_0
  - croniter=1.4.1=pyhd8ed1ab_0
  - cycler=0.12.1=pyhd8ed1ab_0
  - dateutils=0.6.12=py_0
  - dav1d=1.2.1=hb547adb_0
  - debugpy=1.8.0=py311ha891d26_1
  - decorator=5.1.1=pyhd8ed1ab_0
  - deepdiff=6.6.0=pyhd8ed1ab_0
  - distlib=0.3.7=pyhd8ed1ab_0
  - dm-tree=0.1.8=py311h4acf6a1_0
  - docrep=0.3.2=pyh44b312d_0
  - dulwich=0.21.6=py311h05b510d_2
  - et_xmlfile=1.1.0=pyhd8ed1ab_0
  - exceptiongroup=1.1.3=pyhd8ed1ab_0
  - executing=1.2.0=pyhd8ed1ab_0
  - fastapi=0.103.2=pyhd8ed1ab_0
  - filelock=3.12.4=pyhd8ed1ab_0
  - flax=0.6.1=pyhd8ed1ab_1
  - fonttools=4.43.1=py311h05b510d_0
  - freetype=2.12.1=hadb7bae_2
  - fsspec=2023.9.2=pyh1a96a4e_0
  - giflib=5.2.1=h1a8c8d9_3
  - glpk=5.0=h6d7a090_0
  - gmp=6.2.1=h9f76cd9_0
  - gmpy2=2.1.2=py311h2ba9262_1
  - h11=0.14.0=pyhd8ed1ab_0
  - h5py=3.10.0=nompi_py311h393cb7e_100
  - hdf5=1.14.2=nompi_h3aba7b3_100
  - icu=73.2=hc8870d7_0
  - idna=3.4=pyhd8ed1ab_0
  - igraph=0.10.7=he56d5cf_1
  - imagecodecs=2023.9.18=py311h0b517cc_2
  - imageio=2.31.5=pyh8c1a49c_0
  - importlib-metadata=6.8.0=pyha770c72_0
  - importlib_metadata=6.8.0=hd8ed1ab_0
  - importlib_resources=6.1.0=pyhd8ed1ab_0
  - inquirer=3.1.3=pyhd8ed1ab_0
  - ipykernel=6.25.2=pyh1050b4e_0
  - ipython=8.16.1=pyh31c8845_0
  - ipywidgets=8.1.1=pyhd8ed1ab_0
  - itsdangerous=2.1.2=pyhd8ed1ab_0
  - jaraco.classes=3.3.0=pyhd8ed1ab_0
  - jax=0.4.13=pyhd8ed1ab_0
  - jaxlib=0.4.12=cpu_py311h2dd720e_1
  - jedi=0.19.1=pyhd8ed1ab_0
  - jinja2=3.1.2=pyhd8ed1ab_1
  - joblib=1.3.2=pyhd8ed1ab_0
  - jsonschema=4.17.3=pyhd8ed1ab_0
  - jupyter_client=8.4.0=pyhd8ed1ab_0
  - jupyter_core=5.4.0=py311h267d04e_0
  - jupyterlab_widgets=3.0.9=pyhd8ed1ab_0
  - jxrlib=1.1=h27ca646_2
  - keyring=24.2.0=py311h267d04e_1
  - kiwisolver=1.4.5=py311he4fd1f5_1
  - krb5=1.21.2=h92f50d5_0
  - lazy_loader=0.3=pyhd8ed1ab_0
  - lcms2=2.15=hf2736f0_3
  - leidenalg=0.10.1=py311ha891d26_0
  - lerc=4.0.0=h9a09cb3_0
  - libabseil=20230125.3=cxx17_h13dd4ca_0
  - libaec=1.1.2=h13dd4ca_1
  - libavif16=1.0.1=h18c541d_2
  - libblas=3.9.0=18_osxarm64_openblas
  - libbrotlicommon=1.1.0=hb547adb_1
  - libbrotlidec=1.1.0=hb547adb_1
  - libbrotlienc=1.1.0=hb547adb_1
  - libcblas=3.9.0=18_osxarm64_openblas
  - libcurl=8.4.0=h2d989ff_0
  - libcxx=16.0.6=h4653b0c_0
  - libdeflate=1.19=hb547adb_0
  - libedit=3.1.20191231=hc8eb9b7_2
  - libev=4.33=h642e427_1
  - libexpat=2.5.0=hb7217d7_1
  - libffi=3.4.2=h3422bc3_5
  - libgfortran=5.0.0=13_2_0_hd922786_1
  - libgfortran5=13.2.0=hf226fd6_1
  - libgrpc=1.56.2=h9075ed4_1
  - libiconv=1.17=he4db4b2_0
  - libjpeg-turbo=3.0.0=hb547adb_1
  - liblapack=3.9.0=18_osxarm64_openblas
  - libleidenalg=0.11.1=h1995070_0
  - libllvm14=14.0.6=hd1a9a77_4
  - libnghttp2=1.52.0=hae82a92_0
  - libopenblas=0.3.24=openmp_hd76b1f2_0
  - libpng=1.6.39=h76d750c_0
  - libprotobuf=4.23.3=hf32f9b9_1
  - libsodium=1.0.18=h27ca646_1
  - libsqlite=3.43.2=h091b4b1_0
  - libssh2=1.11.0=h7a5bd25_0
  - libtiff=4.6.0=ha8a6c65_2
  - libuv=1.46.0=hb547adb_0
  - libwebp-base=1.3.2=hb547adb_0
  - libxcb=1.15=hf346824_0
  - libxml2=2.11.5=h25269f3_1
  - libzlib=1.2.13=h53f4e23_5
  - libzopfli=1.0.3=h9f76cd9_0
  - lightning=2.0.9.post0=pyhd8ed1ab_0
  - lightning-cloud=0.5.39=pyhd8ed1ab_0
  - lightning-utilities=0.9.0=pyhd8ed1ab_0
  - llvm-openmp=17.0.2=h1c12783_0
  - llvmlite=0.40.1=py311hea943cd_0
  - lz4-c=1.9.4=hb7217d7_0
  - markdown-it-py=3.0.0=pyhd8ed1ab_0
  - markupsafe=2.1.3=py311heffc1b2_1
  - matplotlib-base=3.8.0=py311hfdba5f6_2
  - matplotlib-inline=0.1.6=pyhd8ed1ab_0
  - mdurl=0.1.0=pyhd8ed1ab_0
  - ml-collections=0.1.1=pyhd8ed1ab_0
  - ml_dtypes=0.3.1=py311h6e08293_1
  - more-itertools=10.1.0=pyhd8ed1ab_0
  - mpc=1.3.1=h91ba8db_0
  - mpfr=4.2.0=he09a6ba_0
  - mpmath=1.3.0=pyhd8ed1ab_0
  - msgpack-python=1.0.6=py311he4fd1f5_0
  - mudata=0.2.3=pyhd8ed1ab_0
  - multipledispatch=0.6.0=py_0
  - munkres=1.1.4=pyh9f0ad1d_0
  - natsort=8.4.0=pyhd8ed1ab_0
  - ncurses=6.4=h7ea286d_0
  - nest-asyncio=1.5.8=pyhd8ed1ab_0
  - networkx=3.1=pyhd8ed1ab_0
  - nomkl=1.0=h5ca1d4c_0
  - numba=0.57.1=py311hbf3c4e2_0
  - numpy=1.24.4=py311hb8f3215_0
  - numpyro=0.13.2=pyhd8ed1ab_0
  - openjpeg=2.5.0=h4c1507b_3
  - openpyxl=3.1.2=py311heffc1b2_0
  - openssl=3.1.3=h53f4e23_0
  - opt_einsum=3.3.0=pyhc1e730c_2
  - optax=0.1.7=pyhd8ed1ab_0
  - ordered-set=4.1.0=pyhd8ed1ab_0
  - orjson=3.9.8=py311h69e6b7b_0
  - packaging=23.2=pyhd8ed1ab_0
  - pandas=2.1.1=py311h9e438b8_1
  - parso=0.8.3=pyhd8ed1ab_0
  - patsy=0.5.3=pyhd8ed1ab_0
  - pexpect=4.8.0=pyh1a96a4e_2
  - pickleshare=0.7.5=py_1003
  - pillow=10.0.1=py311h8dc27b9_2
  - pip=23.2.1=pyhd8ed1ab_0
  - pkginfo=1.9.6=pyhd8ed1ab_0
  - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
  - platformdirs=3.11.0=pyhd8ed1ab_0
  - poetry=1.6.1=osx_pyh534df25_0
  - poetry-core=1.7.0=pyhd8ed1ab_0
  - poetry-plugin-export=1.5.0=pyhd8ed1ab_0
  - prompt-toolkit=3.0.39=pyha770c72_0
  - prompt_toolkit=3.0.39=hd8ed1ab_0
  - psutil=5.9.5=py311heffc1b2_1
  - pthread-stubs=0.4=h27ca646_1001
  - ptyprocess=0.7.0=pyhd3deb0d_0
  - pure_eval=0.2.2=pyhd8ed1ab_0
  - pycparser=2.21=pyhd8ed1ab_0
  - pydantic=2.1.1=pyhd8ed1ab_0
  - pydantic-core=2.4.0=py311h0563b04_0
  - pygments=2.16.1=pyhd8ed1ab_0
  - pyjwt=2.8.0=pyhd8ed1ab_0
  - pynndescent=0.5.10=pyh1a96a4e_0
  - pyparsing=3.1.1=pyhd8ed1ab_0
  - pyproject_hooks=1.0.0=pyhd8ed1ab_0
  - pyro-api=0.1.2=pyhd8ed1ab_0
  - pyro-ppl=1.8.6=pyhd8ed1ab_0
  - pyrsistent=0.19.3=py311heffc1b2_1
  - pysocks=1.7.1=pyha2e5f31_6
  - python=3.11.6=h47c9636_0_cpython
  - python-annoy=1.17.2=py311ha891d26_1
  - python-build=0.10.0=pyhd8ed1ab_1
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-editor=1.0.4=py_0
  - python-igraph=0.11.2=py311h72fc80f_0
  - python-installer=0.7.0=pyhd8ed1ab_0
  - python-multipart=0.0.6=pyhd8ed1ab_0
  - python-tzdata=2023.3=pyhd8ed1ab_0
  - python_abi=3.11=4_cp311
  - pytorch=2.0.0=cpu_generic_py311h35eba3d_1
  - pytorch-lightning=2.1.0=pyhd8ed1ab_0
  - pytz=2023.3.post1=pyhd8ed1ab_0
  - pywavelets=1.4.1=py311hb49d859_1
  - pyyaml=6.0.1=py311heffc1b2_1
  - pyzmq=25.1.1=py311hb1af645_1
  - rapidfuzz=2.15.2=py311hbaf5611_0
  - rav1e=0.6.6=h69fbcac_2
  - re2=2023.03.02=hc5e2d97_0
  - readchar=4.0.5=pyhd8ed1ab_0
  - readline=8.2=h92ec313_1
  - requests=2.31.0=pyhd8ed1ab_0
  - requests-toolbelt=1.0.0=pyhd8ed1ab_0
  - rich=13.6.0=pyhd8ed1ab_0
  - scanpy=1.9.5=pyhd8ed1ab_0
  - scikit-image=0.22.0=py311h6e08293_2
  - scikit-learn=1.3.1=py311ha25ca4d_1
  - scipy=1.11.3=py311h93d07a4_1
  - scrublet=0.2.3=pyh5e36f6f_1
  - scvi-tools=1.0.2=pyhd8ed1ab_0
  - seaborn=0.13.0=hd8ed1ab_0
  - seaborn-base=0.13.0=pyhd8ed1ab_0
  - session-info=1.0.0=pyhd8ed1ab_0
  - setuptools=68.2.2=pyhd8ed1ab_0
  - shellingham=1.5.3=pyhd8ed1ab_0
  - six=1.16.0=pyh6c4a22f_0
  - sleef=3.5.1=h156473d_2
  - snappy=1.1.10=h17c5cce_0
  - sniffio=1.3.0=pyhd8ed1ab_0
  - soupsieve=2.5=pyhd8ed1ab_1
  - sparse=0.14.0=pyhd8ed1ab_0
  - stack_data=0.6.2=pyhd8ed1ab_0
  - starlette=0.27.0=pyhd8ed1ab_0
  - starsessions=1.3.0=pyhd8ed1ab_0
  - statsmodels=0.14.0=py311h9ea6feb_2
  - stdlib-list=0.8.0=pyhd8ed1ab_0
  - svt-av1=1.7.0=hb765f3a_0
  - sympy=1.12=pypyh9d50eac_103
  - tbb=2021.10.0=h1995070_1
  - texttable=1.7.0=pyhd8ed1ab_0
  - threadpoolctl=3.2.0=pyha21a80b_0
  - tifffile=2023.9.26=pyhd8ed1ab_0
  - tk=8.6.13=hb31c410_0
  - tomli=2.0.1=pyhd8ed1ab_0
  - tomlkit=0.12.1=pyha770c72_0
  - toolz=0.12.0=pyhd8ed1ab_0
  - torchmetrics=1.2.0=pyhd8ed1ab_0
  - tornado=6.3.3=py311heffc1b2_1
  - tqdm=4.66.1=pyhd8ed1ab_0
  - traitlets=5.11.2=pyhd8ed1ab_0
  - trove-classifiers=2023.9.19=pyhd8ed1ab_0
  - types-python-dateutil=2.8.19.14=pyhd8ed1ab_0
  - typing-extensions=4.8.0=hd8ed1ab_0
  - typing_extensions=4.8.0=pyha770c72_0
  - tzdata=2023c=h71feb2d_0
  - umap-learn=0.5.4=py311h267d04e_0
  - urllib3=2.0.6=pyhd8ed1ab_0
  - uvicorn=0.23.2=py311h267d04e_1
  - virtualenv=20.24.4=pyhd8ed1ab_0
  - wcwidth=0.2.8=pyhd8ed1ab_0
  - websocket-client=1.6.4=pyhd8ed1ab_0
  - websockets=11.0.3=py311heffc1b2_1
  - wheel=0.41.2=pyhd8ed1ab_0
  - widgetsnbextension=4.0.9=pyhd8ed1ab_0
  - xarray=2023.9.0=pyhd8ed1ab_0
  - xattr=0.10.1=py311heffc1b2_1
  - xlrd=1.2.0=pyh9f0ad1d_1
  - xorg-libxau=1.0.11=hb547adb_0
  - xorg-libxdmcp=1.1.3=h27ca646_0
  - xz=5.2.6=h57fd34a_0
  - yaml=0.2.5=h3422bc3_2
  - zeromq=4.3.5=h965bd2d_0
  - zfp=1.0.0=h82938aa_4
  - zipp=3.17.0=pyhd8ed1ab_0
  - zlib-ng=2.0.7=h1a8c8d9_0
  - zstd=1.5.5=h4f39d0f_0
  - pip:
      - colorutils==0.3.0
      - pyqt5==5.15.10
      - pyqt5-qt5==5.15.11
      - pyqt5-sip==12.13.0