exprmat 0.1.40__tar.gz → 0.1.41__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.
- {exprmat-0.1.40 → exprmat-0.1.41}/PKG-INFO +1 -1
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reader/experiment.py +22 -7
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reader/static.py +4 -3
- exprmat-0.1.41/exprmat/reader/updater.py +111 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/scvi.py +19 -21
- {exprmat-0.1.40 → exprmat-0.1.41}/pyproject.toml +1 -1
- exprmat-0.1.40/exprmat/reader/updater.py +0 -83
- {exprmat-0.1.40 → exprmat-0.1.41}/Cargo.lock +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/Cargo.toml +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/ansi.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/cnmf.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/dbscan.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/kmeans.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/leiden.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/nmf.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/rogue.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/seriation.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/spectral.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/clustering/utils.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/cnv/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/cnv/cnvscore.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/cnv/infercnv.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/configuration.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/cistarget.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/cre.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/finders.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/geneset.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/io.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/lr.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/presets.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/signature.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/data/tf.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/aggregate.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/atac.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/aucell.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/de.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/gse.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/kde.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/recovery.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/summary.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/descriptive/tcr.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/deseq/dataset.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/deseq/gridsearch.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/deseq/inference.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/deseq/preprocessing.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/deseq/stats.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/deseq/utils.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/generank.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/linreg.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/moments.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/optimization.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/parallel.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/preprocess.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/pseudotime.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/transition.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/utils.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/dynamics/velocity.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/grn/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/grn/infergrn.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/grn/modules.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/grn/prune.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/grn/regressors.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/grn/utils.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/image/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/image/align.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/aggregate.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/method.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/cellchat.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/cellphonedb.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/connectome.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/geomean.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/logfc.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/natmi.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/rank_aggregate.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/scseqcomm.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/methods/singlecellsignalr.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/pipeline.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/preprocess.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/resources.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/lr/utils.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/callpeak.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/common.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/coverage.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/footprint.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/idr/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/idr/constants.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/idr/idr.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/idr/invcdf.pyx +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/idr/optimization.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/idr/utils.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/linkage.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/motif.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/peaks/sequence.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/atac.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/cnmf.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/cnv.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/A.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/B.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/C.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/D.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/E.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/F.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/G.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/H.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/I.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/J.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/K.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/L.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/M.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/N.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/O.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/P.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/Q.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/R.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/S.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/T.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/U.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/V.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/W.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/X.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/Y.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/data/Z.pk +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/de.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/expression.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/gse.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/lr.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/palettes.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/sankey.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/sequence.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/summary.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/track.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/utils.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/plotting/velocity.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/doublets/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/doublets/composite.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/doublets/scrublet.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/emptydrops.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/filter.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/impute/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/impute/magic.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/integrate.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/linear.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/normal.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/plot.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/qc.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/sctransform/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/sctransform/estimate.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/sctransform/ksmooth.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/sctransform/residual.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/sctransform/transform.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/sparse.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/preprocessing/uniform.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reader/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reader/conversions.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reader/matcher.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reader/metadata.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reader/spatial.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/forceatlas.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/mde.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/nn.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/outliers.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/pca.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/plot.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/spectral.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/tsne.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/reduction/umap.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/trajectory/pcurve.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/transfer/__init__.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/transfer/atlas.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/exprmat/utils.py +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/license +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/readme.md +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/Cargo.toml +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/license +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/readme +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/call_peaks.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/embedding.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/export.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/knn.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/lib.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/motif.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/network.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/preprocessing.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/utils/anndata.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2/src/utils.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/Cargo.toml +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/embedding.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/export.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/feature_count/counter.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/feature_count/data_iter.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/feature_count/matrix.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/feature_count/mod.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/genome.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/lib.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/motif.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/network.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/preprocessing/bam/flagstat.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/preprocessing/bam/header.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/preprocessing/bam/mark_duplicates.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/preprocessing/bam.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/preprocessing/import.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/preprocessing/mod.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/preprocessing/qc.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/utils/knn.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/utils/mod.rs +0 -0
- {exprmat-0.1.40 → exprmat-0.1.41}/snapatac2-core/src/utils/similarity.rs +0 -0
|
@@ -44,10 +44,6 @@ class experiment:
|
|
|
44
44
|
dump = '.', subset = None,
|
|
45
45
|
version = em.SPECIFICATION
|
|
46
46
|
):
|
|
47
|
-
|
|
48
|
-
from exprmat.reader.updater import update
|
|
49
|
-
version = update(meta, modalities, mudata, version)
|
|
50
|
-
|
|
51
47
|
# TODO: we support rna only at present.
|
|
52
48
|
table = meta.dataframe.to_dict(orient = 'list')
|
|
53
49
|
self.mudata = mudata
|
|
@@ -265,6 +261,15 @@ class experiment:
|
|
|
265
261
|
else: warning(f'sample {i_sample} have no supported modalities')
|
|
266
262
|
|
|
267
263
|
|
|
264
|
+
self.metadata.dataframe = self.metadata.dataframe.loc[
|
|
265
|
+
self.metadata.dataframe['modality'] != 'rna.splicing', :
|
|
266
|
+
].copy()
|
|
267
|
+
|
|
268
|
+
self.metadata.dataframe = self.metadata.dataframe.loc[
|
|
269
|
+
self.metadata.dataframe['modality'] != 'rna.tcr', :
|
|
270
|
+
].copy()
|
|
271
|
+
|
|
272
|
+
|
|
268
273
|
# attaching bulk datasets.
|
|
269
274
|
|
|
270
275
|
for i_mod in ['rna-bulk', 'atac-bulk']:
|
|
@@ -894,6 +899,8 @@ class experiment:
|
|
|
894
899
|
p.imap_unordered(partial_task, args),
|
|
895
900
|
total = len(args), desc = 'processing anndata'
|
|
896
901
|
))
|
|
902
|
+
|
|
903
|
+
p.close()
|
|
897
904
|
|
|
898
905
|
results = {}
|
|
899
906
|
for data, key, out in output:
|
|
@@ -2439,6 +2446,17 @@ def load_experiment(direc, load_samples = True, load_subset = None):
|
|
|
2439
2446
|
# read individual modality and sample
|
|
2440
2447
|
meta = load_metadata(os.path.join(direc, 'metadata.tsv'))
|
|
2441
2448
|
|
|
2449
|
+
# load specification
|
|
2450
|
+
version = load_experiment_specification(direc)
|
|
2451
|
+
|
|
2452
|
+
# update the object to the newest version
|
|
2453
|
+
from exprmat.reader.updater import update
|
|
2454
|
+
version = update(meta, direc, version)
|
|
2455
|
+
|
|
2456
|
+
meta.dataframe = meta.dataframe.loc[
|
|
2457
|
+
['.' in x for x in meta.dataframe['modality']], :
|
|
2458
|
+
].copy()
|
|
2459
|
+
|
|
2442
2460
|
modalities = {}
|
|
2443
2461
|
if load_samples:
|
|
2444
2462
|
for modal, samp in zip(meta.dataframe['modality'], meta.dataframe['sample']):
|
|
@@ -2459,9 +2477,6 @@ def load_experiment(direc, load_samples = True, load_subset = None):
|
|
|
2459
2477
|
if os.path.exists(os.path.join(direc, 'subsets', load_subset + '.h5mu')):
|
|
2460
2478
|
mdata = mu.read_h5mu(os.path.join(direc, 'subsets', load_subset + '.h5mu'))
|
|
2461
2479
|
|
|
2462
|
-
# load specification
|
|
2463
|
-
version = load_experiment_specification(direc)
|
|
2464
|
-
|
|
2465
2480
|
expr = experiment(
|
|
2466
2481
|
meta = meta,
|
|
2467
2482
|
mudata = mdata,
|
|
@@ -182,16 +182,17 @@ def rna_scvi(
|
|
|
182
182
|
# save the model
|
|
183
183
|
import os
|
|
184
184
|
if sample_name == 'integrated':
|
|
185
|
-
attempt = os.path.join(savepath, 'scvi')
|
|
186
|
-
else: attempt = os.path.join(savepath, 'rna', 'scvi', sample_name)
|
|
185
|
+
attempt = os.path.join(savepath, 'scvi', key_added)
|
|
186
|
+
else: attempt = os.path.join(savepath, 'rna', 'scvi', sample_name, key_added)
|
|
187
187
|
|
|
188
188
|
os.makedirs(attempt, exist_ok = True)
|
|
189
189
|
model.save(attempt, overwrite = True)
|
|
190
190
|
adata.obsm[key_added] = latent
|
|
191
191
|
|
|
192
192
|
adata.uns[key_added] = {
|
|
193
|
-
'model':
|
|
193
|
+
'model': attempt,
|
|
194
194
|
'n_latent': n_comps,
|
|
195
|
+
'batch_key': batch,
|
|
195
196
|
'type': 'scvi'
|
|
196
197
|
}
|
|
197
198
|
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
|
|
2
|
+
import os
|
|
3
|
+
import h5py
|
|
4
|
+
from anndata.io import read_elem, write_elem
|
|
5
|
+
|
|
6
|
+
import exprmat as em
|
|
7
|
+
from exprmat.ansi import error, warning, info
|
|
8
|
+
|
|
9
|
+
VERSION_CHECKPOINT = [1, em.SPECIFICATION]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def update(meta, dump, version):
|
|
13
|
+
|
|
14
|
+
# current version
|
|
15
|
+
if version == em.SPECIFICATION: return version
|
|
16
|
+
|
|
17
|
+
# valid version
|
|
18
|
+
elif version in VERSION_CHECKPOINT:
|
|
19
|
+
ckpt = VERSION_CHECKPOINT.index(version)
|
|
20
|
+
for taskid in range(ckpt, len(VERSION_CHECKPOINT) - 1):
|
|
21
|
+
task = UPDATE_TASK[taskid]
|
|
22
|
+
info(f'updating experiment dump from {version} to {VERSION_CHECKPOINT[taskid + 1]} ...')
|
|
23
|
+
|
|
24
|
+
# update samples
|
|
25
|
+
for irow in range(len(meta.dataframe)):
|
|
26
|
+
metadata = meta.dataframe.iloc[irow, :].copy()
|
|
27
|
+
if '.' in metadata['modality']: continue
|
|
28
|
+
info(f'updating sample ./{metadata["modality"]}/{metadata["sample"]} ...')
|
|
29
|
+
task(metadata['modality'], os.path.join(dump, metadata["modality"], metadata["sample"] + '.h5ad'))
|
|
30
|
+
|
|
31
|
+
# update subsets
|
|
32
|
+
if os.path.exists(os.path.join(dump, 'subsets')):
|
|
33
|
+
for subset in os.listdir(os.path.join(dump, 'subsets')):
|
|
34
|
+
if not subset.endswith('.h5mu'): continue
|
|
35
|
+
if subset.startswith('.'): continue
|
|
36
|
+
info(f'updating subset {subset.replace(".h5mu", "")} ...')
|
|
37
|
+
task('subset', os.path.join(dump, 'subsets', subset))
|
|
38
|
+
|
|
39
|
+
if os.path.exists(os.path.join(dump, 'integrated.h5mu')):
|
|
40
|
+
info(f'updating integrated dataset ...')
|
|
41
|
+
task('integrated', os.path.join(dump, 'integrated.h5mu'))
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
return VERSION_CHECKPOINT[taskid + 1]
|
|
45
|
+
|
|
46
|
+
# invalid version
|
|
47
|
+
else: error(f'illegal version specification of experiment dump: [{version}]')
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def update_39(mod, fpath):
|
|
51
|
+
|
|
52
|
+
def update_rna_var(table):
|
|
53
|
+
if 'ensembl' in table.columns:
|
|
54
|
+
import pandas as pd
|
|
55
|
+
obsn = table[['ensembl']].copy()
|
|
56
|
+
taxa = obsn.index.tolist()[0].split(':')[1]
|
|
57
|
+
from exprmat.data.finders import get_genome
|
|
58
|
+
gtable = get_genome(taxa)
|
|
59
|
+
gtable.index = gtable['id'].tolist()
|
|
60
|
+
obsn = obsn.join(gtable, on = 'ensembl', how = 'left')
|
|
61
|
+
assert len(obsn) == len(table)
|
|
62
|
+
del obsn['ensembl']
|
|
63
|
+
|
|
64
|
+
old_columns = [
|
|
65
|
+
'.seqid', '.source', '.type', '.start', '.end', '.score', '.strand', '.phase',
|
|
66
|
+
'biotype', 'source', 'gene', 'description', 'ensembl', 'uid', 'version', 'len.mean',
|
|
67
|
+
'len.median', 'len.cds', '.ucsc'
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
for o in old_columns:
|
|
71
|
+
if o in table.columns: del table[o]
|
|
72
|
+
return pd.concat([obsn, table], axis = 1)
|
|
73
|
+
|
|
74
|
+
def update_atac_var(table):
|
|
75
|
+
return table.rename(columns = {
|
|
76
|
+
'.seqid': 'chr',
|
|
77
|
+
'.start': 'start',
|
|
78
|
+
'.end': 'end',
|
|
79
|
+
}, inplace = False)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
file = h5py.File(fpath, 'r+')
|
|
83
|
+
|
|
84
|
+
if mod in ['subset', 'integrated']:
|
|
85
|
+
for m in list(file['mod'].keys()):
|
|
86
|
+
if m in ['rna', 'rnasp-b', 'rnasp-c', 'rnasp-s', 'atac-g']:
|
|
87
|
+
table = read_elem(file['mod'][m]['var'])
|
|
88
|
+
table = update_rna_var(table)
|
|
89
|
+
write_elem(file['mod'][m], 'var', table)
|
|
90
|
+
|
|
91
|
+
elif m in ['atac', 'atac-p']:
|
|
92
|
+
table = read_elem(file['mod'][m]['var'])
|
|
93
|
+
table = update_atac_var(table)
|
|
94
|
+
write_elem(file['mod'][m], 'var', table)
|
|
95
|
+
|
|
96
|
+
if mod in ['rna', 'rnasp-b', 'rnasp-c', 'rnasp-s', 'atac-g']:
|
|
97
|
+
table = read_elem(file['var'])
|
|
98
|
+
table = update_rna_var(table)
|
|
99
|
+
write_elem(file, 'var', table)
|
|
100
|
+
|
|
101
|
+
elif mod in ['atac', 'atac-p']:
|
|
102
|
+
table = read_elem(file['var'])
|
|
103
|
+
table = update_atac_var(table)
|
|
104
|
+
write_elem(file, 'var', table)
|
|
105
|
+
|
|
106
|
+
file.close()
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
UPDATE_TASK = [
|
|
110
|
+
update_39
|
|
111
|
+
]
|
|
@@ -57,29 +57,27 @@ def scvi(
|
|
|
57
57
|
)
|
|
58
58
|
|
|
59
59
|
import warnings
|
|
60
|
-
import contextlib
|
|
61
60
|
with warnings.catch_warnings():
|
|
62
61
|
warnings.simplefilter('ignore')
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
)
|
|
62
|
+
model.train(
|
|
63
|
+
max_epochs = max_epochs,
|
|
64
|
+
accelerator = accelerator,
|
|
65
|
+
devices = devices,
|
|
66
|
+
train_size = train_size,
|
|
67
|
+
validation_size = validation_size,
|
|
68
|
+
shuffle_set_split = shuffle_set_split,
|
|
69
|
+
load_sparse_tensor = load_sparse_tensor,
|
|
70
|
+
batch_size = batch_size,
|
|
71
|
+
early_stopping = early_stopping,
|
|
72
|
+
datasplitter_kwargs = datasplitter_kwargs,
|
|
73
|
+
plan_kwargs = plan_kwargs,
|
|
74
|
+
datamodule = datamodule,
|
|
75
|
+
enable_progress_bar = enable_progress_bar,
|
|
76
|
+
progress_bar_refresh_rate = progress_bar_refresh_rate,
|
|
77
|
+
simple_progress_bar = simple_progress_bar,
|
|
78
|
+
logger = logger,
|
|
79
|
+
log_every_n_steps = log_every_n_steps,
|
|
80
|
+
)
|
|
83
81
|
|
|
84
82
|
latent = model.get_latent_representation()
|
|
85
83
|
return model, latent
|
|
@@ -20,7 +20,7 @@ description = "exprmat: Routines for expression matrices"
|
|
|
20
20
|
readme = "readme.md"
|
|
21
21
|
license = {file = "license"}
|
|
22
22
|
requires-python = ">=3.9, <3.13"
|
|
23
|
-
version = "0.1.
|
|
23
|
+
version = "0.1.41"
|
|
24
24
|
authors = [
|
|
25
25
|
{name = "Zheng Yang", email = "xornent@outlook.com"}
|
|
26
26
|
]
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import exprmat as em
|
|
3
|
-
from exprmat.ansi import error, warning, info
|
|
4
|
-
|
|
5
|
-
VERSION_CHECKPOINT = [1, em.SPECIFICATION]
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def update(meta, modalities, mudata, version):
|
|
9
|
-
|
|
10
|
-
# current version
|
|
11
|
-
if version == em.SPECIFICATION: return version
|
|
12
|
-
|
|
13
|
-
# valid version
|
|
14
|
-
elif version in VERSION_CHECKPOINT:
|
|
15
|
-
ckpt = VERSION_CHECKPOINT.index(version)
|
|
16
|
-
for taskid in range(ckpt, len(VERSION_CHECKPOINT) - 1):
|
|
17
|
-
task = UPDATE_TASK[taskid]
|
|
18
|
-
info(f'updating experiment dump from {version} to {VERSION_CHECKPOINT[taskid + 1]} ...')
|
|
19
|
-
task(meta, modalities, mudata)
|
|
20
|
-
|
|
21
|
-
return VERSION_CHECKPOINT[taskid + 1]
|
|
22
|
-
|
|
23
|
-
# invalid version
|
|
24
|
-
else: error(f'illegal version specification of experiment dump: [{version}]')
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def do_for(modalities, mudata, modality, func, **params):
|
|
28
|
-
|
|
29
|
-
if modalities:
|
|
30
|
-
if modality in modalities.keys():
|
|
31
|
-
for k in modalities[modality].keys():
|
|
32
|
-
func(modalities[modality][k], **params)
|
|
33
|
-
if mudata:
|
|
34
|
-
if modality in mudata.mod.keys():
|
|
35
|
-
func(mudata.mod[modality], **params)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def update_1_39(meta, modalities, mudata):
|
|
39
|
-
|
|
40
|
-
def update_rna(data):
|
|
41
|
-
|
|
42
|
-
if 'ensembl' in data.var.columns:
|
|
43
|
-
import pandas as pd
|
|
44
|
-
obsn = data.var[['ensembl']].copy()
|
|
45
|
-
taxa = obsn.index.tolist()[0].split(':')[1]
|
|
46
|
-
from exprmat.data.finders import get_genome
|
|
47
|
-
gtable = get_genome(taxa)
|
|
48
|
-
gtable.index = gtable['id'].tolist()
|
|
49
|
-
obsn = obsn.join(gtable, on = 'ensembl', how = 'left')
|
|
50
|
-
assert len(obsn) == data.n_vars
|
|
51
|
-
del obsn['ensembl']
|
|
52
|
-
|
|
53
|
-
old_columns = [
|
|
54
|
-
'.seqid', '.source', '.type', '.start', '.end', '.score', '.strand', '.phase',
|
|
55
|
-
'biotype', 'source', 'gene', 'description', 'ensembl', 'uid', 'version', 'len.mean',
|
|
56
|
-
'len.median', 'len.cds', '.ucsc'
|
|
57
|
-
]
|
|
58
|
-
|
|
59
|
-
for o in old_columns:
|
|
60
|
-
if o in data.var.columns: del data.var[o]
|
|
61
|
-
data.var = pd.concat([obsn, data.var], axis = 1)
|
|
62
|
-
|
|
63
|
-
def update_atac(data):
|
|
64
|
-
data.var.rename(columns = {
|
|
65
|
-
'.seqid': 'chr',
|
|
66
|
-
'.start': 'start',
|
|
67
|
-
'.end': 'end',
|
|
68
|
-
}, inplace = True)
|
|
69
|
-
|
|
70
|
-
do_for(modalities, mudata, 'rna', update_rna)
|
|
71
|
-
do_for(modalities, mudata, 'rnasp-c', update_rna)
|
|
72
|
-
do_for(modalities, mudata, 'rnasp-b', update_rna)
|
|
73
|
-
do_for(modalities, mudata, 'rnasp-s', update_rna)
|
|
74
|
-
do_for(modalities, mudata, 'atac-g', update_rna)
|
|
75
|
-
|
|
76
|
-
do_for(modalities, mudata, 'atac', update_atac)
|
|
77
|
-
do_for(modalities, mudata, 'atac-p', update_atac)
|
|
78
|
-
pass
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
UPDATE_TASK = [
|
|
82
|
-
update_1_39
|
|
83
|
-
]
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|