sampledisco 0.4.1__tar.gz → 0.4.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.
- {sampledisco-0.4.1/src/sampledisco.egg-info → sampledisco-0.4.2}/PKG-INFO +1 -1
- {sampledisco-0.4.1 → sampledisco-0.4.2}/pyproject.toml +1 -1
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/parameter_selection/autotune.py +16 -9
- {sampledisco-0.4.1 → sampledisco-0.4.2/src/sampledisco.egg-info}/PKG-INFO +1 -1
- {sampledisco-0.4.1 → sampledisco-0.4.2}/LICENSE +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/README.md +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/requirements.txt +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/setup.cfg +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/cli.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/config/config_demo.yaml +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/ATAC_ArchR.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/ATAC_RNA_harmony.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/ATAC_gene_activity.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/ATAC_peak_annotation.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/RNA_name_convertor.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/pseudo_correlation.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/test_pseudo_correlation.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/validation.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/parameter_selection/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/ATAC_cell_type.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/ATAC_cell_type_gpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/atac_preprocess_cpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/atac_preprocess_gpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/cell_type_cpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/cell_type_gpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/multi_omics_batch_correction.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/multi_omics_cell_type_cpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/multi_omics_cell_type_gpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/multi_omics_glue.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/multi_omics_merge.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/rna_preprocess_cpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/rna_preprocess_gpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_association/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_association/association.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_clustering/RAISIN.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_clustering/RAISIN_TEST.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_clustering/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_clustering/cluster.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_clustering/cluster_severity_reconcile.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_clustering/proportion_test.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_distance/ChiSquare.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_distance/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_distance/distance_test.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_distance/jensenshannon.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_distance/sample_distance.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_embedding/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_embedding/blocks.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_embedding/sample_embedding.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_embedding/sample_embedding_gpu.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_trajectory/CCA.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_trajectory/CCA_test.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_trajectory/TSCAN.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_trajectory/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_trajectory/trajectory_DGE_visualization.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_trajectory/trajectory_diff_gene.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/Grouping.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/batch_regress.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/embedding_keys.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/harmony_compat.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/imbalance_cell_type_handler.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/inspector.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/limma.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/merge_sample_meta.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/random_seed.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/safe_save.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/slim_adata.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/subsample.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/subsample_generator.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/tf_idf.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/unify_optimal.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/ATAC_visualization.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/DEG_visualization.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/multi_omics_visualization.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/visualization_embedding.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/visualization_helper.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/visualization_other.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/wrapper/__init__.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/wrapper/atac_wrapper.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/wrapper/multiomics_wrapper.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/wrapper/rna_wrapper.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/wrapper/wrapper.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco.egg-info/SOURCES.txt +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco.egg-info/dependency_links.txt +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco.egg-info/entry_points.txt +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco.egg-info/requires.txt +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco.egg-info/top_level.txt +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/tests/test_config_validation.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/tests/test_inplace_uns_and_equal_weight.py +0 -0
- {sampledisco-0.4.1 → sampledisco-0.4.2}/tests/test_sample_embedding_equivalence.py +0 -0
|
@@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta"
|
|
|
9
9
|
|
|
10
10
|
[project]
|
|
11
11
|
name = "sampledisco"
|
|
12
|
-
version = "0.4.
|
|
12
|
+
version = "0.4.2"
|
|
13
13
|
description = "Cross-omics, cross-condition sample embedding for single-cell data (RNA + ATAC)"
|
|
14
14
|
readme = "README.md"
|
|
15
15
|
requires-python = ">=3.10"
|
|
@@ -10,6 +10,9 @@ the data can't support:
|
|
|
10
10
|
(CCA, SPS, CV-kNN, pseudotime-Spearman).
|
|
11
11
|
- If neither → emit a warning and short-circuit with fixed defaults.
|
|
12
12
|
|
|
13
|
+
``scoring="ilisi_label"`` is the two-term variant: one biology term (grouping
|
|
14
|
+
tracking: CCA or categorical PC-R²) and one batch term (iLISI), equally weighted.
|
|
15
|
+
|
|
13
16
|
Generalized version of `wire_autotune_dualembed_v2.py`. No dataset-specific
|
|
14
17
|
paths; all data flows through the same `compute_sample_embedding` primitives
|
|
15
18
|
in `sample_embedding/blocks.py`.
|
|
@@ -427,17 +430,20 @@ def make_scorer(name: str, meta: Dict, lam: float = 0.5) -> Callable[[np.ndarray
|
|
|
427
430
|
- lam * (_asw_safe(emb, batch) if has_batch else 0.0)
|
|
428
431
|
)
|
|
429
432
|
|
|
430
|
-
if name in ("multi_metric_proxy", "auto"):
|
|
433
|
+
if name in ("multi_metric_proxy", "auto", "ilisi_label"):
|
|
434
|
+
two_term = name == "ilisi_label"
|
|
431
435
|
components: List[Callable[[np.ndarray], float]] = []
|
|
432
436
|
if has_grouping:
|
|
433
437
|
tracking_key = "pc_r2_categorical" if grouping_is_categorical else "cca"
|
|
434
438
|
components.append(
|
|
435
439
|
lambda emb: _minmax(_grouping_tracking_score(emb),
|
|
436
440
|
*SCORING_BOUNDS[tracking_key]))
|
|
437
|
-
|
|
441
|
+
if not two_term:
|
|
442
|
+
components.append(lambda emb: _minmax(_sps_continuous(emb, grouping), *SCORING_BOUNDS["sps"]))
|
|
438
443
|
if has_batch:
|
|
439
444
|
components.append(lambda emb: _minmax(_ilisi_norm(emb, batch), *SCORING_BOUNDS["ilisi_norm"]))
|
|
440
|
-
|
|
445
|
+
if not two_term:
|
|
446
|
+
components.append(lambda emb: _minmax(-_asw_safe(emb, batch), *SCORING_BOUNDS["neg_asw_batch"]))
|
|
441
447
|
if not components:
|
|
442
448
|
return lambda emb: 0.0
|
|
443
449
|
|
|
@@ -760,12 +766,13 @@ _PROXY_DESCRIPTIONS = {
|
|
|
760
766
|
|
|
761
767
|
def _active_proxies(scoring: str, has_batch: bool, has_grouping: bool):
|
|
762
768
|
"""Return the list of proxy names the scorer actually evaluates."""
|
|
763
|
-
if scoring in ("auto", "multi_metric_proxy"):
|
|
769
|
+
if scoring in ("auto", "multi_metric_proxy", "ilisi_label"):
|
|
770
|
+
two_term = scoring == "ilisi_label"
|
|
764
771
|
names = []
|
|
765
772
|
if has_grouping:
|
|
766
|
-
names += ["cca", "sps"]
|
|
773
|
+
names += ["cca"] if two_term else ["cca", "sps"]
|
|
767
774
|
if has_batch:
|
|
768
|
-
names += ["ilisi_batch", "neg_asw_batch"]
|
|
775
|
+
names += ["ilisi_batch"] if two_term else ["ilisi_batch", "neg_asw_batch"]
|
|
769
776
|
return names
|
|
770
777
|
return [scoring] if scoring in _PROXY_DESCRIPTIONS else [scoring]
|
|
771
778
|
|
|
@@ -818,8 +825,8 @@ def _format_autotune_report(*, best_params, best_score, trace, weights,
|
|
|
818
825
|
for name in proxies:
|
|
819
826
|
kind, desc = _PROXY_DESCRIPTIONS.get(name, ("?", name))
|
|
820
827
|
lines.append(f" - [{kind:<12s}] {name:<20s} {desc}")
|
|
821
|
-
if scoring in ("auto", "multi_metric_proxy"):
|
|
822
|
-
lines.append(" ensemble:
|
|
828
|
+
if scoring in ("auto", "multi_metric_proxy", "ilisi_label"):
|
|
829
|
+
lines.append(f" ensemble: {scoring} = mean of the proxies above (each min-max scaled).")
|
|
823
830
|
lines.append("")
|
|
824
831
|
lines.append("Result")
|
|
825
832
|
lines.append("-" * 68)
|
|
@@ -928,7 +935,7 @@ def _finalize(adata, blocks, final_emb, weights, *,
|
|
|
928
935
|
tune_on_modality=tune_on_modality, score_n_units=score_n_units,
|
|
929
936
|
)
|
|
930
937
|
report_path = os.path.join(out_dir, "autotune_record.txt")
|
|
931
|
-
with open(report_path, "w") as f:
|
|
938
|
+
with open(report_path, "w", encoding="utf-8") as f:
|
|
932
939
|
f.write(report)
|
|
933
940
|
if verbose:
|
|
934
941
|
print(f"[autotune] wrote {emb_csv}")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/ATAC_peak_annotation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/gene_activity/test_pseudo_correlation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/multi_omics_batch_correction.py
RENAMED
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/multi_omics_cell_type_cpu.py
RENAMED
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/preparation/multi_omics_cell_type_gpu.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_clustering/proportion_test.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_embedding/sample_embedding.py
RENAMED
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_embedding/sample_embedding_gpu.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/sample_trajectory/trajectory_diff_gene.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/utils/imbalance_cell_type_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/multi_omics_visualization.py
RENAMED
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/visualization_embedding.py
RENAMED
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/visualization_helper.py
RENAMED
|
File without changes
|
{sampledisco-0.4.1 → sampledisco-0.4.2}/src/sampledisco/visualization/visualization_other.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|