SingleCellExperiment 0.6.0__tar.gz → 0.6.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/CHANGELOG.md +3 -1
  2. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/PKG-INFO +1 -1
  3. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/changelog.md +3 -1
  4. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/SingleCellExperiment.egg-info/PKG-INFO +1 -1
  5. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/singlecellexperiment/SingleCellExperiment.py +101 -16
  6. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/test_sce_methods.py +43 -1
  7. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/.coveragerc +0 -0
  8. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/.github/workflows/publish-pypi.yml +0 -0
  9. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/.github/workflows/run-tests.yml +0 -0
  10. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/.gitignore +0 -0
  11. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/.pre-commit-config.yaml +0 -0
  12. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/.readthedocs.yml +0 -0
  13. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/AUTHORS.md +0 -0
  14. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/CONTRIBUTING.md +0 -0
  15. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/LICENSE.txt +0 -0
  16. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/README.md +0 -0
  17. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/Makefile +0 -0
  18. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/_static/.gitignore +0 -0
  19. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/authors.md +0 -0
  20. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/conf.py +0 -0
  21. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/contributing.md +0 -0
  22. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/index.md +0 -0
  23. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/license.md +0 -0
  24. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/readme.md +0 -0
  25. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/requirements.txt +0 -0
  26. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/docs/tutorial.md +0 -0
  27. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/pyproject.toml +0 -0
  28. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/setup.cfg +0 -0
  29. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/setup.py +0 -0
  30. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/SingleCellExperiment.egg-info/SOURCES.txt +0 -0
  31. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/SingleCellExperiment.egg-info/dependency_links.txt +0 -0
  32. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/SingleCellExperiment.egg-info/not-zip-safe +0 -0
  33. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/SingleCellExperiment.egg-info/requires.txt +0 -0
  34. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/SingleCellExperiment.egg-info/top_level.txt +0 -0
  35. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/singlecellexperiment/__init__.py +0 -0
  36. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/singlecellexperiment/_combineutils.py +0 -0
  37. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/singlecellexperiment/_ioutils.py +0 -0
  38. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/singlecellexperiment/io/__init__.py +0 -0
  39. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/singlecellexperiment/io/h5ad.py +0 -0
  40. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/src/singlecellexperiment/io/tenx.py +0 -0
  41. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/conftest.py +0 -0
  42. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/data/adata.h5ad +0 -0
  43. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/data/mocks.py +0 -0
  44. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/data/raw_feature_bc_matrix/barcodes.tsv +0 -0
  45. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/data/raw_feature_bc_matrix/features.tsv +0 -0
  46. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/data/raw_feature_bc_matrix/matrix.mtx +0 -0
  47. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/data/tenx.sub.h5 +0 -0
  48. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/test_sce.py +0 -0
  49. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/test_sce_combine_cols.py +0 -0
  50. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/test_sce_combine_rows.py +0 -0
  51. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/test_sce_io.py +0 -0
  52. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tests/test_sce_slice.py +0 -0
  53. {singlecellexperiment-0.6.0 → singlecellexperiment-0.6.2}/tox.ini +0 -0
@@ -1,9 +1,11 @@
1
1
  # Changelog
2
2
 
3
- ## Version 0.6.0
3
+ ## Version 0.6.0 - 0.6.2
4
4
 
5
5
  - Changed related to SummarizedExperiment and implementation of `CompressedGenomicRangesList` in the genomic ranges package.
6
6
  - Update versions of relevant dependency packages.
7
+ - Rename `reduced_dims` to `reduced_dimensions`.
8
+ - Implement coercions to/from RSE/SE.
7
9
 
8
10
  ## Version 0.5.8 - 0.5.9
9
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SingleCellExperiment
3
- Version: 0.6.0
3
+ Version: 0.6.2
4
4
  Summary: Container class for single-cell experiments
5
5
  Home-page: https://github.com/BiocPy/SingleCellExperiment
6
6
  Author: jkanche
@@ -1,9 +1,11 @@
1
1
  # Changelog
2
2
 
3
- ## Version 0.6.0
3
+ ## Version 0.6.0 - 0.6.2
4
4
 
5
5
  - Changed related to SummarizedExperiment and implementation of `CompressedGenomicRangesList` in the genomic ranges package.
6
6
  - Update versions of relevant dependency packages.
7
+ - Rename `reduced_dims` to `reduced_dimensions`.
8
+ - Implement coercions to/from RSE/SE.
7
9
 
8
10
  ## Version 0.5.8 - 0.5.9
9
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SingleCellExperiment
3
- Version: 0.6.0
3
+ Version: 0.6.2
4
4
  Summary: Container class for single-cell experiments
5
5
  Home-page: https://github.com/BiocPy/SingleCellExperiment
6
6
  Author: jkanche
@@ -6,6 +6,7 @@ from warnings import warn
6
6
 
7
7
  import biocframe
8
8
  import biocutils as ut
9
+ from summarizedexperiment import SummarizedExperiment
9
10
  from summarizedexperiment._combineutils import (
10
11
  check_assays_are_equal,
11
12
  merge_assays,
@@ -280,7 +281,7 @@ class SingleCellExperiment(RangedSummarizedExperiment):
280
281
  row_names=_row_names_copy,
281
282
  column_names=_col_names_copy,
282
283
  metadata=_metadata_copy,
283
- reduced_dims=_red_dim_copy,
284
+ reduced_dimensions=_red_dim_copy,
284
285
  main_experiment_name=_main_expt_name_copy,
285
286
  alternative_experiments=_alt_expt_copy,
286
287
  row_pairs=_row_pair_copy,
@@ -302,7 +303,7 @@ class SingleCellExperiment(RangedSummarizedExperiment):
302
303
  row_names=self._row_names,
303
304
  column_names=self._column_names,
304
305
  metadata=self._metadata,
305
- reduced_dims=self._reduced_dims,
306
+ reduced_dimensions=self._reduced_dims,
306
307
  main_experiment_name=self._main_experiment_name,
307
308
  alternative_experiments=self._alternative_experiments,
308
309
  row_pairs=self._row_pairs,
@@ -342,7 +343,7 @@ class SingleCellExperiment(RangedSummarizedExperiment):
342
343
  output += ", alternative_experiments=" + ut.print_truncated_list(self.alternative_experiment_names)
343
344
 
344
345
  if self._reduced_dims is not None:
345
- output += ", reduced_dims=" + ut.print_truncated_list(self.reduced_dim_names)
346
+ output += ", reduced_dimensions=" + ut.print_truncated_list(self.reduced_dim_names)
346
347
 
347
348
  if self._main_experiment_name is not None:
348
349
  output += ", main_experiment_name=" + self._main_experiment_name
@@ -381,7 +382,9 @@ class SingleCellExperiment(RangedSummarizedExperiment):
381
382
  output += f"column_names({0 if self._column_names is None else len(self._column_names)}): {' ' if self._column_names is None else ut.print_truncated_list(self._column_names)}\n"
382
383
 
383
384
  output += f"main_experiment_name: {' ' if self._main_experiment_name is None else self._main_experiment_name}\n"
384
- output += f"reduced_dims({len(self.reduced_dim_names)}): {ut.print_truncated_list(self.reduced_dim_names)}\n"
385
+ output += (
386
+ f"reduced_dimensions({len(self.reduced_dim_names)}): {ut.print_truncated_list(self.reduced_dim_names)}\n"
387
+ )
385
388
  output += f"alternative_experiments({len(self.alternative_experiment_names)}): {ut.print_truncated_list(self.alternative_experiment_names)}\n"
386
389
  output += f"row_pairs({len(self.row_pair_names)}): {ut.print_truncated_list(self.row_pair_names)}\n"
387
390
  output += f"column_pairs({len(self.column_pair_names)}): {ut.print_truncated_list(self.column_pair_names)}\n"
@@ -407,11 +410,13 @@ class SingleCellExperiment(RangedSummarizedExperiment):
407
410
  """Alias for :py:meth:`~get_reduced_dimensions`, for back-compatibility."""
408
411
  return self.get_reduced_dimensions()
409
412
 
410
- def set_reduced_dimensions(self, reduced_dims: Dict[str, Any], in_place: bool = False) -> SingleCellExperiment:
413
+ def set_reduced_dimensions(
414
+ self, reduced_dimensions: Dict[str, Any], in_place: bool = False
415
+ ) -> SingleCellExperiment:
411
416
  """Set new reduced dimensions.
412
417
 
413
418
  Args:
414
- reduced_dims:
419
+ reduced_dimensions:
415
420
  New embeddings.
416
421
 
417
422
  in_place:
@@ -421,15 +426,15 @@ class SingleCellExperiment(RangedSummarizedExperiment):
421
426
  A modified ``SingleCellExperiment`` object, either as a copy of the original
422
427
  or as a reference to the (in-place-modified) original.
423
428
  """
424
- _validate_reduced_dims(reduced_dims, self.shape)
429
+ _validate_reduced_dims(reduced_dimensions, self.shape)
425
430
 
426
431
  output = self._define_output(in_place)
427
- output._reduced_dims = reduced_dims
432
+ output._reduced_dims = reduced_dimensions
428
433
  return output
429
434
 
430
- def set_reduced_dims(self, reduced_dims: Dict[str, Any], in_place: bool = False) -> SingleCellExperiment:
435
+ def set_reduced_dims(self, reduced_dimensions: Dict[str, Any], in_place: bool = False) -> SingleCellExperiment:
431
436
  """Alias for :py:meth:`~set_reduced_dimensions`, for back-compatibility."""
432
- return self.set_reduced_dimensions(reduced_dims=reduced_dims, in_place=in_place)
437
+ return self.set_reduced_dimensions(reduced_dimensions=reduced_dimensions, in_place=in_place)
433
438
 
434
439
  @property
435
440
  def reduced_dims(self) -> Dict[str, Any]:
@@ -437,13 +442,13 @@ class SingleCellExperiment(RangedSummarizedExperiment):
437
442
  return self.get_reduced_dimensions()
438
443
 
439
444
  @reduced_dims.setter
440
- def reduced_dims(self, reduced_dims: Dict[str, Any]):
445
+ def reduced_dims(self, reduced_dimensions: Dict[str, Any]):
441
446
  """Alias for :py:meth:`~set_reduced_dimensions`."""
442
447
  warn(
443
448
  "Setting property 'reduced_dims' is an in-place operation, use 'set_reduced_dimensions' instead",
444
449
  UserWarning,
445
450
  )
446
- self.set_reduced_dimensions(reduced_dims, in_place=True)
451
+ self.set_reduced_dimensions(reduced_dimensions, in_place=True)
447
452
 
448
453
  @property
449
454
  def reduced_dimensions(self) -> Dict[str, Any]:
@@ -451,13 +456,13 @@ class SingleCellExperiment(RangedSummarizedExperiment):
451
456
  return self.get_reduced_dimensions()
452
457
 
453
458
  @reduced_dimensions.setter
454
- def reduced_dimensions(self, reduced_dims: Dict[str, Any]):
459
+ def reduced_dimensions(self, reduced_dimensions: Dict[str, Any]):
455
460
  """Alias for :py:meth:`~set_reduced_dimensions`."""
456
461
  warn(
457
462
  "Setting property 'reduced_dimensions' is an in-place operation, use 'set_reduced_dimensions' instead",
458
463
  UserWarning,
459
464
  )
460
- self.set_reduced_dimensions(reduced_dims, in_place=True)
465
+ self.set_reduced_dimensions(reduced_dimensions, in_place=True)
461
466
 
462
467
  ####################################
463
468
  ######>> reduced_dims_names <<######
@@ -1119,7 +1124,7 @@ class SingleCellExperiment(RangedSummarizedExperiment):
1119
1124
  column_names=slicer.column_names,
1120
1125
  metadata=self._metadata,
1121
1126
  main_experiment_name=self._main_experiment_name,
1122
- reduced_dims=new_reduced_dims,
1127
+ reduced_dimensions=new_reduced_dims,
1123
1128
  alternative_experiments=new_alt_expts,
1124
1129
  row_pairs=new_row_pairs,
1125
1130
  column_pairs=new_col_pairs,
@@ -1217,7 +1222,7 @@ class SingleCellExperiment(RangedSummarizedExperiment):
1217
1222
  row_data=biocframe.BiocFrame.from_pandas(input.var),
1218
1223
  column_data=biocframe.BiocFrame.from_pandas(input.obs),
1219
1224
  metadata=_metadata,
1220
- reduced_dims=obsm,
1225
+ reduced_dimensions=obsm,
1221
1226
  row_pairs=varp,
1222
1227
  column_pairs=obsp,
1223
1228
  )
@@ -1273,6 +1278,86 @@ class SingleCellExperiment(RangedSummarizedExperiment):
1273
1278
  """Wrapper around :py:func:`~combine_columns`."""
1274
1279
  return combine_columns(self, *other)
1275
1280
 
1281
+ #######################
1282
+ ######>> to rse <<#####
1283
+ #######################
1284
+
1285
+ def to_rangedsummarizedexperiment(self) -> RangedSummarizedExperiment:
1286
+ """Coerce to :py:class:`~summarizedexperiment.RangedSummarizedExperiment.RangedSummarizedExperiment`.
1287
+
1288
+ Returns:
1289
+ A ``RangedSummarizedExperiment`` object.
1290
+ """
1291
+ return RangedSummarizedExperiment(
1292
+ assays=self._assays,
1293
+ row_ranges=self._row_ranges,
1294
+ row_data=self._rows,
1295
+ column_data=self._cols,
1296
+ row_names=self._row_names,
1297
+ column_names=self._column_names,
1298
+ metadata=self._metadata,
1299
+ _validate=False,
1300
+ )
1301
+
1302
+ def to_rse(self) -> RangedSummarizedExperiment:
1303
+ """Alias for :py:meth:`~to_rangedsummarizedexperiment`."""
1304
+ return self.to_rangedsummarizedexperiment()
1305
+
1306
+ @classmethod
1307
+ def from_rangedsummarizedexperiment(cls, rse: RangedSummarizedExperiment) -> SingleCellExperiment:
1308
+ """Coerce from :py:class:`~summarizedexperiment.RangedSummarizedExperiment.RangedSummarizedExperiment`.
1309
+
1310
+ Args:
1311
+ rse:
1312
+ A ``RangedSummarizedExperiment`` object.
1313
+
1314
+ Returns:
1315
+ A ``SingleCellExperiment`` object.
1316
+ """
1317
+ return cls(
1318
+ assays=rse.assays,
1319
+ row_ranges=rse.row_ranges,
1320
+ row_data=rse.row_data,
1321
+ column_data=rse.col_data,
1322
+ row_names=rse.row_names,
1323
+ column_names=rse.column_names,
1324
+ metadata=rse.metadata,
1325
+ )
1326
+
1327
+ @classmethod
1328
+ def from_rse(cls, rse: RangedSummarizedExperiment) -> SingleCellExperiment:
1329
+ """Alias for :py:meth:`~from_rangedsummarizedexperiment`."""
1330
+ return cls.from_rangedsummarizedexperiment(rse)
1331
+
1332
+ ########################
1333
+ ######>> from se <<#####
1334
+ ########################
1335
+
1336
+ @classmethod
1337
+ def from_summarizedexperiment(cls, se: SummarizedExperiment) -> SingleCellExperiment:
1338
+ """Coerce from :py:class:`~summarizedexperiment.SummarizedExperiment.SummarizedExperiment`.
1339
+
1340
+ Args:
1341
+ se:
1342
+ A ``SummarizedExperiment`` object.
1343
+
1344
+ Returns:
1345
+ A ``SingleCellExperiment`` object.
1346
+ """
1347
+ return cls(
1348
+ assays=se.assays,
1349
+ row_data=se.row_data,
1350
+ column_data=se.col_data,
1351
+ row_names=se.row_names,
1352
+ column_names=se.column_names,
1353
+ metadata=se.metadata,
1354
+ )
1355
+
1356
+ @classmethod
1357
+ def from_se(cls, se: SummarizedExperiment) -> SingleCellExperiment:
1358
+ """Alias for :py:meth:`~from_summarizedexperiment`."""
1359
+ return cls.from_summarizedexperiment(se)
1360
+
1276
1361
 
1277
1362
  ############################
1278
1363
  ######>> combine ops <<#####
@@ -5,7 +5,7 @@ from biocframe import BiocFrame
5
5
  import numpy as np
6
6
  import pandas as pd
7
7
  import pytest
8
- from summarizedexperiment import SummarizedExperiment
8
+ from summarizedexperiment import SummarizedExperiment, RangedSummarizedExperiment
9
9
 
10
10
  from singlecellexperiment import SingleCellExperiment
11
11
  from singlecellexperiment.SingleCellExperiment import SingleCellExperiment as sce
@@ -90,3 +90,45 @@ def test_SCE_props():
90
90
 
91
91
  assert tse.reduced_dim_names is not None
92
92
  assert len(tse.reduced_dim_names) == 1
93
+
94
+ def test_SCE_to_RSE():
95
+ tse = SingleCellExperiment(
96
+ assays={"counts": counts}, row_data=row_data, column_data=col_data, row_ranges=gr
97
+ )
98
+
99
+ rse = tse.to_rangedsummarizedexperiment()
100
+ assert isinstance(rse, RangedSummarizedExperiment)
101
+ assert not isinstance(rse, SingleCellExperiment)
102
+ assert rse.shape == tse.shape
103
+ assert rse.row_ranges is not None
104
+
105
+ def test_RSE_to_SCE():
106
+ rse = RangedSummarizedExperiment(
107
+ assays={"counts": counts}, row_data=row_data, column_data=col_data, row_ranges=gr
108
+ )
109
+
110
+ tse = SingleCellExperiment.from_rangedsummarizedexperiment(rse)
111
+ assert isinstance(tse, SingleCellExperiment)
112
+ assert tse.shape == rse.shape
113
+ assert tse.row_ranges is not None
114
+
115
+ def test_SCE_to_SE():
116
+ tse = SingleCellExperiment(
117
+ assays={"counts": counts}, row_data=row_data, column_data=col_data, row_ranges=gr
118
+ )
119
+
120
+ se = tse.to_summarizedexperiment()
121
+ assert isinstance(se, SummarizedExperiment)
122
+ assert not isinstance(se, SingleCellExperiment)
123
+ assert se.shape == tse.shape
124
+ assert se.row_data is not None
125
+ assert "seqnames" in se.row_data.column_names
126
+
127
+ def test_SE_to_SCE():
128
+ se = SummarizedExperiment(
129
+ assays={"counts": counts}, row_data=row_data, column_data=col_data
130
+ )
131
+
132
+ tse = SingleCellExperiment.from_summarizedexperiment(se)
133
+ assert isinstance(tse, SingleCellExperiment)
134
+ assert tse.shape == se.shape