Skip to content

Commit 1f1b097

Browse files
committed
Expand func names for readability
1 parent 9535e6f commit 1f1b097

File tree

2 files changed

+147
-26
lines changed

2 files changed

+147
-26
lines changed

src/singlecellexperiment/SingleCellExperiment.py

Lines changed: 126 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ def __str__(self) -> str:
350350
######>> reduced_dims <<######
351351
##############################
352352

353-
def get_reduced_dims(self) -> Dict[str, Any]:
353+
def get_reduced_dimensions(self) -> Dict[str, Any]:
354354
"""Access dimensionality embeddings.
355355
356356
Returns:
@@ -359,7 +359,11 @@ def get_reduced_dims(self) -> Dict[str, Any]:
359359
"""
360360
return self._reduced_dims
361361

362-
def set_reduced_dims(self, reduced_dims: Dict[str, Any], in_place: bool = False) -> "SingleCellExperiment":
362+
def get_reduced_dims(self) -> Dict[str, Any]:
363+
"""Alias for :py:meth:`~get_reduced_dimensions`, for back-compatibility."""
364+
return self.get_reduced_dimensions()
365+
366+
def set_reduced_dimensions(self, reduced_dims: Dict[str, Any], in_place: bool = False) -> "SingleCellExperiment":
363367
"""Set new reduced dimensions.
364368
365369
Args:
@@ -379,33 +383,55 @@ def set_reduced_dims(self, reduced_dims: Dict[str, Any], in_place: bool = False)
379383
output._reduced_dims = reduced_dims
380384
return output
381385

386+
def set_reduced_dims(self, reduced_dims: Dict[str, Any], in_place: bool = False) -> "SingleCellExperiment":
387+
"""Alias for :py:meth:`~set_reduced_dimensions`, for back-compatibility."""
388+
return self.set_reduced_dimensions(reduced_dims=reduced_dims, in_place=in_place)
389+
382390
@property
383391
def reduced_dims(self) -> Dict[str, Any]:
384-
"""Alias for :py:meth:`~get_reduced_dims`."""
385-
return self.get_reduced_dims()
392+
"""Alias for :py:meth:`~get_reduced_dimensions`."""
393+
return self.get_reduced_dimensions()
386394

387395
@reduced_dims.setter
388396
def reduced_dims(self, reduced_dims: Dict[str, Any]):
389-
"""Alias for :py:meth:`~set_reduced_dims`."""
397+
"""Alias for :py:meth:`~set_reduced_dimensions`."""
390398
warn(
391-
"Setting property 'reduced_dims' is an in-place operation, use 'set_reduced_dims' instead",
399+
"Setting property 'reduced_dims' is an in-place operation, use 'set_reduced_dimensions' instead",
392400
UserWarning,
393401
)
394-
self.set_reduced_dims(reduced_dims, in_place=True)
402+
self.set_reduced_dimensions(reduced_dims, in_place=True)
403+
404+
@property
405+
def reduced_dimensionss(self) -> Dict[str, Any]:
406+
"""Alias for :py:meth:`~get_reduced_dimensions`."""
407+
return self.get_reduced_dimensions()
408+
409+
@reduced_dimensionss.setter
410+
def reduced_dimensions(self, reduced_dims: Dict[str, Any]):
411+
"""Alias for :py:meth:`~set_reduced_dimensions`."""
412+
warn(
413+
"Setting property 'reduced_dimensions' is an in-place operation, use 'set_reduced_dimensions' instead",
414+
UserWarning,
415+
)
416+
self.set_reduced_dimensions(reduced_dims, in_place=True)
395417

396418
####################################
397419
######>> reduced_dims_names <<######
398420
####################################
399421

400-
def get_reduced_dim_names(self) -> List[str]:
422+
def get_reduced_dimension_names(self) -> List[str]:
401423
"""Access reduced dimension names.
402424
403425
Returns:
404426
List of reduced dimensionality names.
405427
"""
406428
return list(self._reduced_dims.keys())
407429

408-
def set_reduced_dim_names(self, names: List[str], in_place: bool = False) -> "SingleCellExperiment":
430+
def get_reduced_dim_names(self) -> Dict[str, Any]:
431+
"""Alias for :py:meth:`~get_reduced_dimension_names`, for back-compatibility."""
432+
return self.get_reduced_dimension_names()
433+
434+
def set_reduced_dimension_names(self, names: List[str], in_place: bool = False) -> "SingleCellExperiment":
409435
"""Replace :py:attr:`~.reduced_dims`'s names.
410436
411437
Args:
@@ -431,29 +457,47 @@ def set_reduced_dim_names(self, names: List[str], in_place: bool = False) -> "Si
431457
output._reduced_dims = new_reduced_dims
432458
return output
433459

460+
def set_reduced_dim_names(self, names: List[str], in_place: bool = False) -> "SingleCellExperiment":
461+
"""Alias for :py:meth:`~set_reduced_dimension_names`, for back-compatibility."""
462+
return self.set_reduced_dimension_names(names=names, in_place=in_place)
463+
434464
@property
435465
def reduced_dim_names(self) -> List[str]:
436-
"""Alias for :py:meth:`~get_reduced_dim_names`."""
437-
return self.get_reduced_dim_names()
466+
"""Alias for :py:meth:`~get_reduced_dimension_names`."""
467+
return self.get_reduced_dimension_names()
438468

439469
@reduced_dim_names.setter
440470
def reduced_dim_names(self, names: List[str]):
441-
"""Alias for :py:meth:`~set_reduced_dim_names`."""
471+
"""Alias for :py:meth:`~set_reduced_dimension_names`."""
472+
warn(
473+
"Renaming names of property 'reduced_dims' is an in-place operation, use 'set_reduced_dimension_names' instead",
474+
UserWarning,
475+
)
476+
self.set_reduced_dimension_names(names, in_place=True)
477+
478+
@property
479+
def reduced_dimension_names(self) -> List[str]:
480+
"""Alias for :py:meth:`~get_reduced_dimension_names`."""
481+
return self.get_reduced_dimension_names()
482+
483+
@reduced_dimension_names.setter
484+
def reduced_dimension_names(self, names: List[str]):
485+
"""Alias for :py:meth:`~set_reduced_dimension_names`."""
442486
warn(
443-
"Renaming names of property 'reduced_dims' is an in-place operation, use 'set_reduced_dim_names' instead",
487+
"Renaming names of property 'reduced_dims' is an in-place operation, use 'set_reduced_dimension_names' instead",
444488
UserWarning,
445489
)
446-
self.set_reduced_dim_names(names, in_place=True)
490+
self.set_reduced_dimension_names(names, in_place=True)
447491

448492
####################################
449493
######>> reduced_dim getter <<######
450494
####################################
451495

452-
def reduced_dim(self, dimension: Union[str, int]) -> Any:
496+
def get_reduced_dimension(self, name: Union[str, int]) -> Any:
453497
"""Access an embedding by name.
454498
455499
Args:
456-
dimension:
500+
name:
457501
Name or index position of the reduced dimension.
458502
459503
Raises:
@@ -465,21 +509,48 @@ def reduced_dim(self, dimension: Union[str, int]) -> Any:
465509
Returns:
466510
The embedding.
467511
"""
468-
if isinstance(dimension, int):
469-
if dimension < 0:
512+
if isinstance(name, int):
513+
if name < 0:
470514
raise IndexError("Index cannot be negative.")
471515

472-
if dimension > len(self.reduced_dim_names):
516+
if name > len(self.reduced_dim_names):
473517
raise IndexError("Index greater than the number of reduced dimensions.")
474518

475-
return self._reduced_dims[self.reduced_dim_names[dimension]]
476-
elif isinstance(dimension, str):
477-
if dimension not in self._reduced_dims:
478-
raise AttributeError(f"Reduced dimension: {dimension} does not exist.")
519+
return self._reduced_dims[self.reduced_dim_names[name]]
520+
elif isinstance(name, str):
521+
if name not in self._reduced_dims:
522+
raise AttributeError(f"Reduced dimension: {name} does not exist.")
523+
524+
return self._reduced_dims[name]
525+
526+
raise TypeError(f"'dimension' must be a string or integer, provided '{type(name)}'.")
527+
528+
def reduced_dim(self, name: Union[str, int]) -> Any:
529+
"""Alias for :py:meth:`~get_reduced_dimension`, for back-compatibility."""
530+
return self.get_reduced_dimension(name=name)
531+
532+
def set_reduced_dimension(self, name: str, embedding: Any, in_place: bool = False) -> "SingleCellExperiment":
533+
"""Add or replace :py:attr:`~singlecellexperiment.SingleCellExperiment.reduced_dimension`'s.
534+
535+
Args:
536+
name:
537+
New or existing embedding or dimension name.
479538
480-
return self._reduced_dims[dimension]
539+
embedding:
540+
Embeddings may be represented as a matrix or a data frame, must contain a shape.
481541
482-
raise TypeError(f"'dimension' must be a string or integer, provided '{type(dimension)}'.")
542+
in_place:
543+
Whether to modify the ``SingleCellExperiment`` in place.
544+
545+
Returns:
546+
A modified ``BasSingleCellExperimenteSE`` object, either as a copy of the original
547+
or as a reference to the (in-place-modified) original.
548+
"""
549+
output = self._define_output(in_place)
550+
if in_place is False:
551+
output._reduced_dims = output._reduced_dims.copy()
552+
output._reduced_dims[name] = embedding
553+
return output
483554

484555
################################
485556
######>> main_expt_name <<######
@@ -629,7 +700,7 @@ def alternative_experiment_names(self, names: List[str]):
629700
######>> alternative_experiment getter <<######
630701
###############################################
631702

632-
def alternative_experiment(self, name: Union[str, int]) -> Any:
703+
def get_alternative_experiment(self, name: Union[str, int]) -> Any:
633704
"""Access alternative experiment by name.
634705
635706
Args:
@@ -661,6 +732,35 @@ def alternative_experiment(self, name: Union[str, int]) -> Any:
661732

662733
raise TypeError(f"'name' must be a string or integer, provided '{type(name)}'.")
663734

735+
def alternative_experiment(self, name: Union[str, int]) -> Any:
736+
"""Alias for :py:meth:`~get_alternative_experiment`, for back-compatibility."""
737+
return self.get_alternative_experiment(name=name)
738+
739+
def set_alternative_experiment(self, name: str, alternative_experiment: Any, in_place: bool = False) -> "SingleCellExperiment":
740+
"""Add or replace :py:attr:`~singlecellexperiment.SingleCellExperiment.alternative_experiment`'s.
741+
742+
Args:
743+
name:
744+
New or existing alternative experiment name.
745+
746+
alternative_experiment:
747+
Alternative experiments must contain the same cells (rows) as the primary experiment.
748+
Is a subclasses of
749+
:py:class:`~summarizedexperiment.SummarizedExperiment.SummarizedExperiment`.
750+
751+
in_place:
752+
Whether to modify the ``SingleCellExperiment`` in place.
753+
754+
Returns:
755+
A modified ``BasSingleCellExperimenteSE`` object, either as a copy of the original
756+
or as a reference to the (in-place-modified) original.
757+
"""
758+
output = self._define_output(in_place)
759+
if in_place is False:
760+
output._alternative_experiments = output._alternative_experiments.copy()
761+
output._alternative_experiments[name] = alternative_experiment
762+
return output
763+
664764
###########################
665765
######>> row_pairs <<######
666766
###########################

tests/test_sce.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,24 @@ def test_SCE_creation_with_alts_should_fail():
118118
column_data=col_data,
119119
alternative_experiments={"alt": tse},
120120
)
121+
122+
def test_SCE_creation_modifications():
123+
rse = SummarizedExperiment(
124+
assays={"counts": counts}, row_data=row_data, column_data=col_data
125+
)
126+
127+
tse = SingleCellExperiment(
128+
assays={"counts": counts},
129+
row_data=row_data,
130+
column_data=col_data,
131+
alternative_experiments={"alt": rse},
132+
)
133+
134+
assert tse is not None
135+
assert isinstance(tse, sce)
136+
137+
nassay_tse = tse.set_reduced_dimension("something", np.random.rand(ncols - 1, 4), in_place=False)
138+
assert nassay_tse.get_reduced_dimension_names() != tse.get_reduced_dimension_names()
139+
140+
tse.set_reduced_dimension("something", np.random.rand(ncols - 1, 4), in_place=True)
141+
assert nassay_tse.get_reduced_dimension_names() == tse.get_reduced_dimension_names()

0 commit comments

Comments
 (0)