def test_deepcopy_subset(adata, spmat: type):
    adata.obsp["arr"] = np.zeros((adata.n_obs, adata.n_obs))
    adata.obsp["spmat"] = spmat((adata.n_obs, adata.n_obs))

    adata = deepcopy(adata[:10].copy())

    assert isinstance(adata.obsp["arr"], np.ndarray)
    assert not isinstance(adata.obsp["arr"], ArrayView)
    np.testing.assert_array_equal(adata.obsp["arr"].shape, (10, 10))

    assert isinstance(adata.obsp["spmat"], spmat)
    assert not isinstance(
        adata.obsp["spmat"],
        SparseCSRView if spmat is sparse.csr_matrix else SparseCSCView,
    )
    np.testing.assert_array_equal(adata.obsp["spmat"].shape, (10, 10))
def test_parse_sections():
    simple_mariofile_sections = dict(mariofile.parse_sections(SIMPLE_MARIOFILE.splitlines(True)))
    assert len(simple_mariofile_sections) == 3
    complex_mariofile_sections = dict(mariofile.parse_sections(COMPLEX_MARIOFILE.splitlines(True)))
    assert len(complex_mariofile_sections) == 2
    assert sorted(complex_mariofile_sections.keys()) == ['DEFAULT', 'section']
    assert complex_mariofile_sections['DEFAULT'] == ['default text\n', '\n']
    with pytest.raises(mariofile.ConfigurationFileError):
        dict(mariofile.parse_sections(GARBAGE_MARIOFILE.splitlines(True)))
    with pytest.raises(mariofile.ConfigurationFileError):
        dict(mariofile.parse_sections(INVALID_SECTION_MARIOFILE.splitlines(True)))
    more_complex_mariofile_sections = dict(
            mariofile.parse_sections(MORE_COMPLEX_MARIOFILE.splitlines(True))
    )
    more_complex_mariofile_sections_keys = ['DEFAULT', 'section_one', 'section_two', 'three']
    assert sorted(more_complex_mariofile_sections.keys()) == more_complex_mariofile_sections_keys
    assert more_complex_mariofile_sections['three'] == []