# NotImplementedError: Cannot create a view of an awkward array with \_\_array\_\_ parameter

**URL:** <https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305>\
**Category:** scirpy\
**Tags:** anndata\
**Created:** [October 18, 2024, 1:18am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305 "2024-10-18T01:18:00Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![yls2g13](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/yls2g13/32/1200_2.png) [@yls2g13](https://discourse.scverse.org/u/yls2g13)\
**Post date:** [October 18, 2024, 1:18am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/1 "2024-10-18T01:18:00Z")

</div>

Hi there,

Thanks for these wonderful packages and scverse ecosystem. This is part 1/2 of an error I’m facing. I’m a Python and scverse beginner so I’m struggling to understand the error messages generated in Python - thanks for your patience! 🙂

Expected output:  
A plot similar to the one in [here](https://www.sc-best-practices.org/air_repertoire/clonotype.html#gene-usage)

Code used:

```auto
ir.pl.vdj_usage(
    adata[
        adata.obs["cc_aa_identity"].isin(["25", "13", "1119"]), :
    ],
    max_ribbons=None,
    max_segments=100,
    fig_kws={"figsize": [4,4]},
)

```

Error:

```auto
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
Cell In[297], line 2
      1 # doesn't work
----> 2 ir.pl.vdj_usage(
      3 adata[
      4 adata.obs["cc_aa_identity"].isin(["25", "13", "1119"]), :
      5 ],
      6 max_ribbons=None,
      7 max_segments=100,
      8 fig_kws={"figsize": [4,4]},
      9 )
     11 # ir.pl.vdj_usage(
     12 # adata,
     13 # full_combination=False,
   (...)
     16 # fig_kws={"figsize": [4, 4]},
     17 # )

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/scirpy/pl/_vdj_usage.py:108, in vdj_usage(adata, vdj_cols, normalize_to, ax, max_segments, max_labelled_segments, max_ribbons, barwidth, draw_bars, full_combination, fig_kws, airr_mod, airr_key, chain_idx_key)
     95 chains, airr_variables = zip(
     96 *[
     97 (f"{arm}_{chain}", airr_variable)
   (...)
    100 strict=False,
    101 )
    103 tmp_obs = (
    104 params.get_obs([normalize_to]).reindex(params.adata.obs_names)
    105 if isinstance(normalize_to, str)
    106 else params.adata.obs
    107 )
--> 108 df = get_airr(params, airr_variables, chains).assign(
    109 # make sure this also works with mudata columns:
    110 cell_weights=_normalize_counts(tmp_obs, normalize_to) if isinstance(normalize_to, bool | str) else normalize_to
    111 )
    112 for col in df.columns:
    113 if col.startswith("VJ") or col.startswith("VDJ"):

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/scirpy/get/ __init__.py:60, in airr(adata, airr_variable, chain, airr_mod, airr_key, chain_idx_key)
     57 if not multiple_chains:
     58 chain = [chain] # type: ignore
     59 return pd.DataFrame(
---> 60 {
     61 f"{tmp_chain}_{tmp_var}": _airr_col(
     62 params.airr,
     63 params.chain_indices,
     64 tmp_var,
     65 cast(ChainType, tmp_chain),
     66 )
     67 for tmp_chain, tmp_var in itertools.product(chain, airr_variable)
     68 },
     69 index=params.adata.obs_names,
     70 )
     71 else:
     72 return pd.Series(
     73 _airr_col(params.airr, params.chain_indices, airr_variable, cast(ChainType, chain)),
     74 index=params.adata.obs_names,
     75 )

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/scirpy/get/ __init__.py:62, in <dictcomp>(.0)
     57 if not multiple_chains:
     58 chain = [chain] # type: ignore
     59 return pd.DataFrame(
     60 {
     61 f"{tmp_chain}_{tmp_var}": _airr_col(
---> 62 params.airr,
     63 params.chain_indices,
     64 tmp_var,
     65 cast(ChainType, tmp_chain),
     66 )
     67 for tmp_chain, tmp_var in itertools.product(chain, airr_variable)
     68 },
     69 index=params.adata.obs_names,
     70 )
     71 else:
     72 return pd.Series(
     73 _airr_col(params.airr, params.chain_indices, airr_variable, cast(ChainType, chain)),
     74 index=params.adata.obs_names,
     75 )

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/scirpy/util/ __init__.py:213, in DataHandler.airr(self)
    211 """Reference to the awkward array with AIRR information."""
    212 if self._airr_key is not None:
--> 213 return cast(ak.Array, self.adata.obsm[self._airr_key])
    214 else:
    215 raise AttributeError("DataHandler was initialized wihtout airr information")

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/aligned_mapping.py:149, in AlignedViewMixin. __getitem__ (self, key)
    148 def __getitem__ (self, key: str) -> V:
--> 149 return as_view(
    150 _subset(self.parent_mapping[key], self.subset_idx),
    151 ElementRef(self.parent, self.attrname, (key,)),
    152 )

File ~/miniconda3/envs/scirpy/lib/python3.11/functools.py:909, in singledispatch.<locals>.wrapper(*args, **kw)
    905 if not args:
    906 raise TypeError(f'{funcname} requires at least '
    907 '1 positional argument')
--> 909 return dispatch(args[0]. __class__ )(*args, **kw)

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/views.py:370, in as_view_awkarray(array, view_args)
    365 # TODO: See https://github.com/scverse/anndata/pull/647#discussion_r963494798_ for more details and
    366 # possible strategies to stack behaviors.
    367 # A better solution might be based on xarray-style "attrs", once this is implemented
    368 # https://github.com/scikit-hep/awkward/issues/1391#issuecomment-1412297114
    369 if type(array). __name__!= "Array":
--> 370 raise NotImplementedError(
    371 "Cannot create a view of an awkward array with __array__ parameter. "
    372 "Please open an issue in the AnnData repo and describe your use-case."
    373 )
    374 array = ak.with_parameter(array, _PARAM_NAME, (parent_key, attrname, keys))
    375 array = ak.with_parameter(array, " __list__", "AwkwardArrayView")

NotImplementedError: Cannot create a view of an awkward array with __array__ parameter. Please open an issue in the AnnData repo and describe your use-case.

```

adata

```auto
AnnData object with n_obs × n_vars = 3618 × 16185
    obs: 'orig.ident', 'nCount_RNA', 'nFeature_RNA', 'decontX_contamination', 'seqType', ... 'contigCellBarcode', 'barcode', 'CTgene', 'CTnt', 'CTaa', 'CTstrict', 'Frequency', 'cloneType', 'ident', 'receptor_type', 'receptor_subtype', 'chain_pairing', 'cc_aa_identity', 'cc_aa_identity_size', 'clone_id', 'clone_id_size', 'VJ_1_junction_aa', 'VDJ_1_junction_aa', 'VJ_2_junction_aa', 'VDJ_2_junction_aa', 'clonal_expansion', 'VJ_1_v_call', 'VDJ_1_v_call', 'VJ_2_v_call', 'VDJ_2_v_call', 'VJ_1_j_call', 'VDJ_1_j_call', 'VJ_2_j_call', 'VDJ_2_j_call'
    var: 'highly_variable', 'means', 'dispersions', 'dispersions_norm', 'highly_variable_nbatches', 'highly_variable_intersection'
    uns: 'X_name', 'chain_indices', 'hvg', 'log1p', 'chain_pairing_colors', 'ir_dist_aa_identity', 'ir_dist_nt_identity', 'cc_aa_identity', 'clonotype_network', 'PatientID_colors', 'clone_id', 'seuratClusters_colors', 'sampleSource_colors', 'repertoire_overlap'
    obsm: 'airr', 'chain_indices', 'X_clonotype_network'
    layers: 'logcounts'

```

session info:

```auto
Click to view session information
-----
anndata 0.10.8
awkward 2.6.9
matplotlib 3.9.2
natsort 8.4.0
numpy 2.0.2
pandas 2.2.3
scanpy 1.10.3
scipy 1.14.1
scirpy 0.18.1.dev8+g7817ce8
seaborn 0.13.2
session_info 1.0.0
tcrdist NA
-----
Click to view modules imported as dependencies
Levenshtein 0.26.0
PIL 11.0.0
adjustText 1.2.0
asttokens NA
awkward_cpp NA
charset_normalizer 3.4.0
comm 0.2.2
cycler 0.12.1
cython_runtime NA
dateutil 2.9.0.post0
debugpy 1.8.7
decorator 5.1.1
executing 2.1.0
feather 0.4.1
fishersapi 1.0
fsspec 2024.9.0
h5py 3.12.1
hierdiff NA
igraph 0.11.6
importlib_metadata NA
ipykernel 6.29.5
jedi 0.19.1
jinja2 3.1.4
joblib 1.4.2
kiwisolver 1.4.7
legacy_api_wrap NA
llvmlite 0.43.0
markupsafe 3.0.1
matplotlib_inline 0.1.7
mpl_toolkits NA
mudata 0.3.1
networkx 3.4.1
numba 0.60.0
olga NA
packaging 24.1
parasail 1.3.4
parmap NA
parso 0.8.4
patsy 0.5.6
pexpect 4.9.0
platformdirs 4.3.6
pooch v1.8.2
progress 1.6
prompt_toolkit 3.0.48
psutil 6.0.0
ptyprocess 0.7.0
pure_eval 0.2.3
pwseqdist NA
pyarrow 17.0.0
pydev_ipython NA
pydevconsole NA
pydevd 3.1.0
pydevd_file_utils NA
pydevd_plugins NA
pydevd_tracing NA
pygments 2.18.0
pyparsing 3.2.0
pytz 2024.2
rapidfuzz 3.10.0
six 1.16.0
sklearn 1.5.2
squarify NA
stack_data 0.6.3
statsmodels 0.14.4
tcrsampler NA
texttable 1.7.0
threadpoolctl 3.5.0
tornado 6.4.1
tqdm 4.66.5
tracerlib NA
traitlets 5.14.3
typing_extensions NA
wcwidth 0.2.13
yaml 6.0.2
zipdist NA
zipp NA
zmq 26.2.0
zoneinfo NA
-----
IPython 8.28.0
jupyter_client 8.6.3
jupyter_core 5.7.2
-----
Python 3.11.10 | packaged by conda-forge | (main, Oct 16 2024, 01:27:36) [GCC 13.3.0]
Linux-3.10.0-1160.118.1.el7.x86_64-x86_64-with-glibc2.17
-----
Session information updated at 2024-10-18 12:13

```

---

<div class="post-metadata">

**Author:** ![yls2g13](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/yls2g13/32/1200_2.png) [@yls2g13](https://discourse.scverse.org/u/yls2g13)\
**Post date:** [October 18, 2024, 1:23am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/2 "2024-10-18T01:23:09Z")

</div>

Part 2/2. Arguably more important to me right now. I’ve been trying to add a TCRdist metric to my data:

Expected output:  
To continue the tutorial with [TCRdist](https://www.sc-best-practices.org/air_repertoire/specificity.html#tcrdist):

Code used:

```auto
from scipy.sparse import csr_matrix

def add_dists(adata, df_dist_alpha, df_dist_beta, name, cutoff):

    adata.uns[f"ir_dist_aa_{name}"] = {
        "params": {"metric": f"{name}", "sequence": "aa", "cutoff": cutoff}
    }

    for chain, dists in [("VJ", df_dist_alpha), ("VDJ", df_dist_beta)]:
        if dists is None:
            continue
        dist_values = dists.values + 1
        dist_values[dist_values > (cutoff + 1)] = 0
        dist_values = csr_matrix(dist_values)
        adata.uns[f"ir_dist_aa_{name}"][chain] = {
            "seqs": dists.index.tolist(),
            "distances": dist_values,
        }

add_dists(adata_tcrdist, df_tcrdist_alpha, df_tcrdist_beta, "tcrdist", 60)

```

Error:

```auto
/tmp/ipykernel_2012933/207276980.py:10: ImplicitModificationWarning: Trying to modify attribute `._uns` of view, initializing view as actual.
  adata.uns[f"ir_dist_aa_{name}"] = {
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
Cell In[284], line 26
     19 dist_values = csr_matrix(dist_values)
     20 adata.uns[f"ir_dist_aa_{name}"][chain] = {
     21 "seqs": dists.index.tolist(),
     22 "distances": dist_values,
     23 }
---> 26 add_dists(adata_tcrdist, df_tcrdist_alpha, df_tcrdist_beta, "tcrdist", 60)

Cell In[284], line 10, in add_dists(adata, df_dist_alpha, df_dist_beta, name, cutoff)
      8 def add_dists(adata, df_dist_alpha, df_dist_beta, name, cutoff):
---> 10 adata.uns[f"ir_dist_aa_{name}"] = {
     11 "params": {"metric": f"{name}", "sequence": "aa", "cutoff": cutoff}
     12 }
     14 for chain, dists in [("VJ", df_dist_alpha), ("VDJ", df_dist_beta)]:
     15 if dists is None:

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/views.py:78, in _SetItemMixin. __setitem__ (self, idx, value)
     71 else:
     72 warnings.warn(
     73 f"Trying to modify attribute `.{self._view_args.attrname}` of view, "
     74 "initializing view as actual.",
     75 ImplicitModificationWarning,
     76 stacklevel=2,
     77 )
---> 78 with view_update(*self._view_args) as container:
     79 container[idx] = value

File ~/miniconda3/envs/scirpy/lib/python3.11/contextlib.py:137, in _GeneratorContextManager. __enter__ (self)
    135 del self.args, self.kwds, self.func
    136 try:
--> 137 return next(self.gen)
    138 except StopIteration:
    139 raise RuntimeError("generator didn't yield") from None

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/views.py:52, in view_update(adata_view, attr_name, keys)
     32 @contextmanager
     33 def view_update(adata_view: AnnData, attr_name: str, keys: tuple[str, ...]):
     34 """Context manager for updating a view of an AnnData object.
     35 
     36 Contains logic for "actualizing" a view. Yields the object to be modified in-place.
   (...)
     50 `adata.attr[key1][key2][keyn]...`
     51 """
---> 52 new = adata_view.copy()
     53 attr = getattr(new, attr_name)
     54 container = reduce(lambda d, k: d[k], keys, attr)

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/anndata.py:1503, in AnnData.copy(self, filename)
   1497 if not self.isbacked:
   1498 if self.is_view and self._has_X():
   1499 # TODO: How do I unambiguously check if this is a copy?
   1500 # Subsetting this way means we don’t have to have a view type
   1501 # defined for the matrix, which is needed for some of the
   1502 # current distributed backend. Specifically Dask.
-> 1503 return self._mutated_copy(
   1504 X=_subset(self._adata_ref.X, (self._oidx, self._vidx)).copy()
   1505 )
   1506 else:
   1507 return self._mutated_copy()

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/anndata.py:1435, in AnnData._mutated_copy(self, **kwargs)
   1433 new[key] = kwargs[key]
   1434 else:
-> 1435 new[key] = getattr(self, key).copy()
   1436 if "X" in kwargs:
   1437 new["X"] = kwargs["X"]

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/aligned_mapping.py:119, in AlignedMapping.copy(self)
    117 def copy(self):
    118 d = self._actual_class(self.parent, self._axis)
--> 119 for k, v in self.items():
    120 if isinstance(v, AwkArray):
    121 # Shallow copy since awkward array buffers are immutable
    122 d[k] = copy(v)

File ~/miniconda3/envs/scirpy/lib/python3.11/_collections_abc.py:861, in ItemsView. __iter__ (self)
    859 def __iter__ (self):
    860 for key in self._mapping:
--> 861 yield (key, self._mapping[key])

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/aligned_mapping.py:149, in AlignedViewMixin. __getitem__ (self, key)
    148 def __getitem__ (self, key: str) -> V:
--> 149 return as_view(
    150 _subset(self.parent_mapping[key], self.subset_idx),
    151 ElementRef(self.parent, self.attrname, (key,)),
    152 )

File ~/miniconda3/envs/scirpy/lib/python3.11/functools.py:909, in singledispatch.<locals>.wrapper(*args, **kw)
    905 if not args:
    906 raise TypeError(f'{funcname} requires at least '
    907 '1 positional argument')
--> 909 return dispatch(args[0]. __class__ )(*args, **kw)

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/views.py:370, in as_view_awkarray(array, view_args)
    365 # TODO: See https://github.com/scverse/anndata/pull/647#discussion_r963494798_ for more details and
    366 # possible strategies to stack behaviors.
    367 # A better solution might be based on xarray-style "attrs", once this is implemented
    368 # https://github.com/scikit-hep/awkward/issues/1391#issuecomment-1412297114
    369 if type(array). __name__!= "Array":
--> 370 raise NotImplementedError(
    371 "Cannot create a view of an awkward array with __array__ parameter. "
    372 "Please open an issue in the AnnData repo and describe your use-case."
    373 )
    374 array = ak.with_parameter(array, _PARAM_NAME, (parent_key, attrname, keys))
    375 array = ak.with_parameter(array, " __list__", "AwkwardArrayView")

NotImplementedError: Cannot create a view of an awkward array with __array__ parameter. Please open an issue in the AnnData repo and describe your use-case.

```

adata & session info same as above.

---

<div class="post-metadata">

**Author:** ![yls2g13](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/yls2g13/32/1200_2.png) [@yls2g13](https://discourse.scverse.org/u/yls2g13)\
**Post date:** [October 18, 2024, 3:49am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/3 "2024-10-18T03:49:05Z")

</div>

Sorry to add to this, but `adata_tcrdist = adata_tcrdist.copy()` also generates the same Part 2/2 error

Error message:

```auto
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
Cell In[387], line 1
----> 1 adata_tcrdist = adata_tcrdist.copy()

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/anndata.py:1503, in AnnData.copy(self, filename)
   1497 if not self.isbacked:
   1498 if self.is_view and self._has_X():
   1499 # TODO: How do I unambiguously check if this is a copy?
   1500 # Subsetting this way means we don’t have to have a view type
   1501 # defined for the matrix, which is needed for some of the
   1502 # current distributed backend. Specifically Dask.
-> 1503 return self._mutated_copy(
   1504 X=_subset(self._adata_ref.X, (self._oidx, self._vidx)).copy()
   1505 )
   1506 else:
   1507 return self._mutated_copy()

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/anndata.py:1435, in AnnData._mutated_copy(self, **kwargs)
   1433 new[key] = kwargs[key]
   1434 else:
-> 1435 new[key] = getattr(self, key).copy()
   1436 if "X" in kwargs:
   1437 new["X"] = kwargs["X"]

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/aligned_mapping.py:119, in AlignedMapping.copy(self)
    117 def copy(self):
    118 d = self._actual_class(self.parent, self._axis)
--> 119 for k, v in self.items():
    120 if isinstance(v, AwkArray):
    121 # Shallow copy since awkward array buffers are immutable
    122 d[k] = copy(v)

File ~/miniconda3/envs/scirpy/lib/python3.11/_collections_abc.py:861, in ItemsView. __iter__ (self)
    859 def __iter__ (self):
    860 for key in self._mapping:
--> 861 yield (key, self._mapping[key])

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/aligned_mapping.py:149, in AlignedViewMixin. __getitem__ (self, key)
    148 def __getitem__ (self, key: str) -> V:
--> 149 return as_view(
    150 _subset(self.parent_mapping[key], self.subset_idx),
    151 ElementRef(self.parent, self.attrname, (key,)),
    152 )

File ~/miniconda3/envs/scirpy/lib/python3.11/functools.py:909, in singledispatch.<locals>.wrapper(*args, **kw)
    905 if not args:
    906 raise TypeError(f'{funcname} requires at least '
    907 '1 positional argument')
--> 909 return dispatch(args[0]. __class__ )(*args, **kw)

File ~/miniconda3/envs/scirpy/lib/python3.11/site-packages/anndata/_core/views.py:370, in as_view_awkarray(array, view_args)
    365 # TODO: See https://github.com/scverse/anndata/pull/647#discussion_r963494798_ for more details and
    366 # possible strategies to stack behaviors.
    367 # A better solution might be based on xarray-style "attrs", once this is implemented
    368 # https://github.com/scikit-hep/awkward/issues/1391#issuecomment-1412297114
    369 if type(array). __name__!= "Array":
--> 370 raise NotImplementedError(
    371 "Cannot create a view of an awkward array with __array__ parameter. "
    372 "Please open an issue in the AnnData repo and describe your use-case."
    373 )
    374 array = ak.with_parameter(array, _PARAM_NAME, (parent_key, attrname, keys))
    375 array = ak.with_parameter(array, " __list__", "AwkwardArrayView")

NotImplementedError: Cannot create a view of an awkward array with __array__ parameter. Please open an issue in the AnnData repo and describe your use-case.

```

---

<div class="post-metadata">

**Author:** ![grst](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/grst/32/17_2.png) [@grst](https://discourse.scverse.org/u/grst)\
**Post date:** [October 18, 2024, 7:41am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/4 "2024-10-18T07:41:49Z")

</div>

Hi @yls2g13,

something weird is going on here (also given that I couldn’t reproduce your other error). I have two suspicions:

1. your conda env is corrupted and it partly contains code from older version of awkward or anndata. In that case re-creating the environment from scratch could help.

2. The anndata object was created a long time ago when AwkwardArray support in AnnData was not mature yet and you now reloaded it and it is somehow not compatible with the latest versions of AnnData and Awkward. In that case it could help to recreate the AnnData object from the raw data, or if that’s not available, export the AIRR data using `ir.io.write_airr` and re-importing it to a new object using `ir.io.read_airr`.

For further inspection, could you please also provide the output of `adata.obsm["airr"]`?

---

<div class="post-metadata">

**Author:** ![yls2g13](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/yls2g13/32/1200_2.png) [@yls2g13](https://discourse.scverse.org/u/yls2g13)\
**Post date:** [October 20, 2024, 7:47am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/5 "2024-10-20T07:47:30Z")

</div>

Thanks again for your prompt response! I’ll attempt these solutions later in the week, pending your thoughts on the below output. I do remember that these objects were created from older versions of anndata v0.10.3 and awkward v2.6.9.

`adata.obsm['airr']` output:

```auto
[[{c_call: 'TRAC', cdr1: 'ACCCGTGATACTACTTATTAC', cdr1_aa: ..., ...}, ...],
 [{c_call: 'TRAC', cdr1: 'ACATCTGGGTTTTATGGG', cdr1_aa: 'TSGFYG', ...}, ...],
 [{c_call: 'TRBC1', cdr1: 'ATGAACCATGAATAC', cdr1_aa: 'MNHEY', ...}, ...],
 [{c_call: 'TRAC', cdr1: 'AGCATATTTAACACC', cdr1_aa: 'SIFNT', ...}, {...}],
 [{c_call: 'TRAC', cdr1: 'GACCGAGGTTCCCAGTCC', cdr1_aa: 'DRGSQS', ...}, ...],
 [{c_call: 'TRBC1', cdr1: 'TCTAATCACTTATAC', cdr1_aa: 'SNHLY', ...}, ...],
 [{c_call: 'TRBC1', cdr1: 'ATGAACCATGAGTAT', cdr1_aa: 'MNHEY', ...}, ...],
 [{c_call: 'TRAC', cdr1: 'AACAGTGCTTCTCAGTCT', cdr1_aa: 'NSASQS', ...}, ...],
 [{c_call: 'TRBC2', cdr1: 'TCTGAACACAACCGC', cdr1_aa: 'SEHNR', ...}, ...],
 [{c_call: 'TRBC1', cdr1: 'AAGGGTCATGATAGA', cdr1_aa: 'KGHDR', ...}, ...],
 ...,
 [{c_call: 'TRAC', cdr1: 'ACTAGTATAAACAAT', cdr1_aa: 'TSINN', ...}, {...}],
 [{c_call: 'TRBC1', cdr1: 'TTGAACCACGATGCC', cdr1_aa: 'LNHDA', ...}, ...],
 [{c_call: 'TRBC2', cdr1: 'CCTAGACACGACACT', cdr1_aa: 'PRHDT', ...}, ...],
 [{c_call: 'TRBC2', cdr1: 'ATGAACCATGAATAC', cdr1_aa: 'MNHEY', ...}, ...],
 [{c_call: 'TRAC', cdr1: 'AACATTGCTACAAATGATTAT', cdr1_aa: ..., ...}, ...],
 [{c_call: 'TRBC1', cdr1: 'TCTGAACACAACCGC', cdr1_aa: 'SEHNR', ...}, ...],
 [{c_call: 'TRBC1', cdr1: 'TCAGGTCATACTGCC', cdr1_aa: 'SGHTA', ...}, ...],
 [{c_call: 'TRAC', cdr1: 'GACAGCTCCTCCACCTAC', cdr1_aa: 'DSSSTY', ...}, ...],
 [{c_call: 'TRBC1', cdr1: 'TCTGGGCACAAGAGT', cdr1_aa: 'SGHKS', ...}, ...]]
-----------------------------------------------------------------------------------------------------------
type: 3618 * option[var * {
    c_call: ?string,
    cdr1: string,
    cdr1_aa: string,
    cdr2: string,
    cdr2_aa: string,
    cdr3: ?string,
    cdr3_aa: ?string,
    consensus_count: int64,
    d_call: ?string,
    d_cigar: ?unknown,
    fwr1: string,
    fwr1_aa: string,
    fwr2: string,
    fwr2_aa: string,
    fwr3: string,
    fwr3_aa: string,
    fwr4: string,
    fwr4_aa: string,
    germline_alignment: ?unknown,
    high_confidence: bool,
    is_cell: bool,
    j_call: string,
    j_cigar: ?unknown,
    junction: string,
    junction_aa: string,
    locus: string,
    productive: bool,
    rev_comp: ?unknown,
    sequence: ?unknown,
    sequence_alignment: ?unknown,
    sequence_id: ?unknown,
    umi_count: int64,
    v_call: string,
    v_cigar: ?unknown
}, parameters={"_view_args": ["target-140131123775952", "obsm", ["airr"]], " __list__": "AwkwardArrayView"}]

```

---

<div class="post-metadata">

**Author:** ![grst](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/grst/32/17_2.png) [@grst](https://discourse.scverse.org/u/grst)\
**Post date:** [October 20, 2024, 11:54am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/6 "2024-10-20T11:54:37Z")

</div>

The problem is that you somehow end up with these awkward array attributes in `adata.obsm["airr"]` even when you AnnData is not a “View”.

> [@yls2g13](#):
>
> `parameters={"_view_args": ["target-140131123775952", "obsm", ["airr"]], " __list__": "AwkwardArrayView"}]`

These attributes are supposed to get added automatically when you create a “view” of an AnnData object (e.g. by subsetting: `adata[:200]`), but they shouldn’t be there otherwise. I don’t know how you ended up in that state, but you can manually remove them like that:

```python
import awkward as ak
adata.obsm["airr"] = ak.without_parameters(adata.obsm["airr"])

```

After that, you can re-run `pp.index_chains` and `tl.chain_qc` and I’d hope it works then.

---

<div class="post-metadata">

**Author:** ![grst](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/grst/32/17_2.png) [@grst](https://discourse.scverse.org/u/grst)\
**Post date:** [October 20, 2024, 12:04pm UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/7 "2024-10-20T12:04:47Z")

</div>

I think I got at the bottom of this: When saving a view of AnnData and reloading it, the view attribute of the awkward array does not get removed. I created this ticket in AnnData and see to that this will be fixed soon:

> <https://github.com/scverse/anndata/issues/1721>
>
> \### Please make sure these conditions are met
> 
> \- \[x\] I have checked that this is…sue has not already been reported.
> \- \[x\] I have confirmed this bug exists on the latest version of anndata.
> \- \[\] (optional) I have confirmed this bug exists on the master branch of anndata.
> 
> \### Report
> 
> Saving a view of anndata turns it into a copy. However, the "view" attributes of an awkward array do not get removed on save, which leads to some side effects described in these discourse posts: 
> https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305
> https://discourse.scverse.org/t/ir-tl-chain-qc-adata-error-message-with-scirpy-0-18-0/3304/4
> 
> Code:
> 
> \`\`\`python
> import scirpy as ir
> import anndata as ad
> adata = ir.datasets.wu2020\_3k()\["airr"\]
> v = adata\[:200\]
> v.obsm\["airr"\]
> \`\`\`
> This awkward array now has the "\_view\_args" added as intended: 
> \`\`\`
> \[...\]
> }, parameters={"\_view\_args": \["target-137048116381552", "obsm", \["airr"\]\], "\_\_list\_\_": "AwkwardArrayView"}\]
> \`\`\`
> 
> \`\`\`python
> v.write\_h5ad("/tmp/airr.h5ad")
> v2 = ad.read\_h5ad("/tmp/airr.h5ad')
> v2.obsm\["airr"\]
> \`\`\`
> 
> Now \`v2\` is not a view anymore, but the awkward array still has the same parameters (and \`target-137048116381552\` is a weakref to an object that does not exist anymore)
> \`\`\`
> \[...\]
> }, parameters={"\_view\_args": \["target-137048116381552", "obsm", \["airr"\]\], "\_\_list\_\_": "AwkwardArrayView"}\]
> \`\`\`
> 
> 
> \### Possible fix: 
> 
> On save, send the awkward array through \`ak.without\_parameters()\`. 
> 
> 
> \### Versions
> 
> \`\`\`
> anndata 0.10.8
> scirpy 0.18.1.dev7+g2157800c
> session\_info 1.0.0
> \-----
> Levenshtein 0.26.0
> PIL 11.0.0
> adjustText 1.2.0
> asciitree NA
> asttokens NA
> awkward 2.6.9
> awkward\_cpp NA
> cairo 1.27.0
> charset\_normalizer 3.4.0
> comm 0.2.2
> cycler 0.12.1
> cython\_runtime NA
> dateutil 2.9.0.post0
> debugpy 1.8.7
> decorator 5.1.1
> defusedxml 0.7.1
> distutils 3.12.7
> executing 2.1.0
> fsspec 2024.9.0
> h5py 3.12.1
> ...
> Python 3.12.7 | packaged by conda-forge | (main, Oct 4 2024, 16:05:46) \[GCC 13.3.0\]
> Linux-6.11.4-arch1-1-x86\_64-with-glibc2.40
> \-----
> Session information updated at 2024-10-20 14:01
> \`\`\`

---

<div class="post-metadata">

**Author:** ![yls2g13](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/yls2g13/32/1200_2.png) [@yls2g13](https://discourse.scverse.org/u/yls2g13)\
**Post date:** [October 22, 2024, 2:04am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/8 "2024-10-22T02:04:07Z")

</div>

Awesome - thanks for figuring this out and reporting it Gregor, I’ll keep an eye out for an update

---

<div class="post-metadata">

**Author:** ![grst](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/grst/32/17_2.png) [@grst](https://discourse.scverse.org/u/grst)\
**Post date:** [October 22, 2024, 7:18am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/9 "2024-10-22T07:18:46Z")

</div>

It will probably take weeks though until this is released in AnnData.  
In the meanwhile, this workaround should do the job:

> [@grst](#):
>
> ```auto
> import awkward as ak
> adata.obsm["airr"] = ak.without_parameters(adata.obsm["airr"])
> 
> ```

---

<div class="post-metadata">

**Author:** ![grst](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.scverse.org/grst/32/17_2.png) [@grst](https://discourse.scverse.org/u/grst)\
**Post date:** [November 6, 2024, 11:38am UTC](https://discourse.scverse.org/t/notimplementederror-cannot-create-a-view-of-an-awkward-array-with-array-parameter/3305/10 "2024-11-06T11:38:08Z")

</div>

The fix got merged in AnnData:

> <https://github.com/scverse/anndata/pull/1736>
>
> \<!-- Please:
> 1. Fill in the following check boxes
> 2. Make sure checks pass (Ig…nore “Triage” ones)
> \--\>
> 
> \- \[x\] Closes #1721
> \- \[x\] Tests added
> \- \[x\] Release note added (or unnecessary)

Note that this will only affect AnnDataViews that will be saved _in the future_, for existing h5ad files, you’ll still need to use the workaround described above.
