exprmat 0.2.73__tar.gz → 0.2.77__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.2.73 → exprmat-0.2.77}/PKG-INFO +9 -1
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/__init__.py +2 -1
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/ansi.py +1 -3
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/tcr.py +6 -3
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/expression.py +7 -7
- exprmat-0.2.77/exprmat/plotting/matrix.py +276 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/order.py +1 -1
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/track.py +25 -11
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/__init__.py +1 -1
- exprmat-0.2.77/exprmat/preprocessing/doublets/ddetect.py +359 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/filter.py +1 -1
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/qc.py +12 -0
- exprmat-0.2.77/exprmat/reader/cite/__init__.py +93 -0
- exprmat-0.2.77/exprmat/reader/cite/preprocessing.py +62 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/experiment.py +64 -32
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/matcher.py +330 -328
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/__init__.py +22 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/impute.py +1 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/proportion.py +194 -11
- exprmat-0.2.77/exprmat/reader/rna/repertoire.py +792 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/plot.py +135 -16
- exprmat-0.2.77/exprmat/repertoire/__init__.py +23 -0
- exprmat-0.2.77/exprmat/repertoire/analysis.py +213 -0
- exprmat-0.2.77/exprmat/repertoire/convergence.py +602 -0
- exprmat-0.2.77/exprmat/repertoire/distance.py +185 -0
- exprmat-0.2.77/exprmat/repertoire/plotting.py +640 -0
- exprmat-0.2.77/exprmat/repertoire/reference.py +206 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/pyproject.toml +12 -4
- exprmat-0.2.73/exprmat/plotting/matrix.py +0 -91
- exprmat-0.2.73/exprmat/reader/cite/__init__.py +0 -13
- exprmat-0.2.73/exprmat/reader/cite/preprocessing.py +0 -31
- exprmat-0.2.73/exprmat/reader/rna/repertoire.py +0 -510
- {exprmat-0.2.73 → exprmat-0.2.77}/Cargo.lock +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/Cargo.toml +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/cnmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/dbscan.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/gating.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/kmeans.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/leiden.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/nmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/rogue.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/sc3.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/seriation.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/spectral.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/clustering/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/cnv/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/cnv/cnvscore.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/cnv/infercnv.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/configuration.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/deconv.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/simulation.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/mapping.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/optimizer.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/spatial.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deconv/tangram/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/aggregate.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/atac.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/aucell.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/composition.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/covar.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/de.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/geneset.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/gse.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/kde.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/recovery.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/sccoda.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/descriptive/summary.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/dataset.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/gridsearch.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/inference.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/preprocessing.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/stats.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/deseq/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/adjacency.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/api.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/augment.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/image_features.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/model.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/runner.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/deepst/trainer.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/adjacency.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/api.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/layers.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/models.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/morans.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/spagcn.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spagcn/svg.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spatialde/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spatialde/api.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spatialde/kernels.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/domain/spatialde/score_test.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/generank.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/linreg.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/moments.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/optimization.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/parallel.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/preprocess.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/pseudotime.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/transition.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/dynamics/velocity.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/infergrn.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/modules.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/prune.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/regressors.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/grn/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/help.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/augment.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/axis.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/channel.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/compensation.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/density.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/segmentation.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/tissue.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/image/transform.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/aggregate.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/api.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/gat.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/intra.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/model.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/plotting.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/postprocess.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/preprocess.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/relay.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/stats.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/train.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/cellnest/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/construction.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/importance.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/ligand.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/metrics.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/icnet/pagerank.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/method.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/cellchat.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/cellphonedb.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/connectome.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/geomean.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/logfc.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/natmi.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/rank_aggregate.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/scseqcomm.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/methods/singlecellsignalr.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/pipeline.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/preprocess.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/resources.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/lr/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/metacell/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/metacell/engine.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/metacell/model.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/metacell/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/bd.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/bmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/icm.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/lfnmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/lsnmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/nmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/nsnmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/pmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/pmfcc.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/psmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/sepnmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/snmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/factorization/snmnmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/fixed.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/nndsvd.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/random.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/random_c.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/methods/seeding/random_vcol.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/mf_fit.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/mf_track.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/nmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/nmf_mm.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/nmf_ns.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/nmf_std.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/models/smf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/utils/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/utils/linalg.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/nmf/utils/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/parser/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/parser/converter.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/parser/rds.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/parser/seurat.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/callpeak.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/common.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/coverage.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/footprint.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/constants.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/idr.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/invcdf.pyx +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/optimization.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/idr/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/linkage.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/motif.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/peaks/sequence.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/atac.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/cnmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/cnv.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/de.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/gse.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/icnet.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/knee.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/lr.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/milestone.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/network.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/palettes.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/proximity.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/sankey.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/sequence.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/summary.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/trajectory.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/velocity.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/plotting/wgcna.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/correction.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/dirichlet_multinomial.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/emptydrops.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/estimation.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/multinomial.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/sgt.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/background/soupx.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/doublets/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/doublets/composite.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/doublets/scrublet.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/emptydrops.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/impute/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/impute/magic.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/integrate.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/linear.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/normal.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/plot.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/estimate.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/ksmooth.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/residual.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sctransform/transform.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/sparse.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/preprocessing/uniform.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/accessor.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/atac/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/atac/derive.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/atac/peaks.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/atac/preprocessing.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/conversions.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/data-structure.txt +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/general/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/history.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/introspect.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/introspective.txt +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/metadata.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/atlas.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/bulk.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/cnv.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/geneset.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/getter.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/interaction.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/markers.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/nmf.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/qc.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/reduction.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/summarize.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/rna/trajectory.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/schema.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/classifier.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/coordinates.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/deconv.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/density.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/domains.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/getter.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/graph.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/image.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/lr.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/proximity.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/qc.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/segmentation.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/snn.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/tmap.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/spatial/transform.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/static.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reader/updater.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/diffmap.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/forceatlas.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/mde.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/nn.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/outliers.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/pca.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/scvi.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/spectral.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/tsne.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/umap.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/landmarks.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/plan.md +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/projection.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/refinement.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/sampling.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/reduction/wnn/umap_landmarks.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/datatype.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/download.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/log.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/method.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/aucell.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/consensus.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/decouple.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/gsea.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/gsva.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/mdt.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/mlm.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/ora.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/pv.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/query_set.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/registry.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/run.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/udt.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/ulm.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/viper.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/waggr.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/methods/zscore.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/odeps.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotter.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/barplot.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/dotplot.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/filter_by_expr.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/filter_by_prop.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/filter_samples.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/leading_edge.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/network.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/obsbar.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/obsm.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/order.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/order_targets.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/source_targets.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/plotting/volcano.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/anndata.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/data.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/net.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/rankby_group.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/rankby_obsm.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/signature/utils/rankby_order.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/classifier.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/hd.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/interac.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/ligrec.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/mif.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/nhood.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/niche.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/ometiff.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/pattern.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/ripley.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/snn.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/tmap.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/visium.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/spatial/xenium.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/cytotrace.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/elpi.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/pcurve.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/pseudotime.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/root.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/trajectory/trace.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/transfer/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/transfer/atlas.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/utils.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/wgcna/__init__.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/exprmat/wgcna/core.py +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/license +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/readme.md +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/Cargo.toml +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/license +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/readme +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/call_peaks.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/embedding.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/export.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/knn.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/lib.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/motif.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/network.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/preprocessing.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/utils/anndata.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2/src/utils.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/Cargo.toml +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/embedding.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/export.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/feature_count/counter.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/feature_count/data_iter.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/feature_count/matrix.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/feature_count/mod.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/genome.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/lib.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/motif.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/network.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/bam/flagstat.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/bam/header.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/bam/mark_duplicates.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/bam.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/import.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/mod.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/preprocessing/qc.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/utils/knn.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/utils/mod.rs +0 -0
- {exprmat-0.2.73 → exprmat-0.2.77}/snapatac2-core/src/utils/similarity.rs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: exprmat
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.77
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -102,11 +102,19 @@ Requires-Dist: cuvs-cu12==25.8.* ; extra == 'cuda12'
|
|
|
102
102
|
Requires-Dist: nx-cugraph-cu12==25.8.* ; extra == 'cuda12'
|
|
103
103
|
Requires-Dist: cupy-cuda12x ; extra == 'cuda12'
|
|
104
104
|
Requires-Dist: rapids-singlecell ; extra == 'cuda12'
|
|
105
|
+
Requires-Dist: cudf-cu13==25.10.* ; extra == 'cuda13'
|
|
106
|
+
Requires-Dist: cuml-cu13==25.10.* ; extra == 'cuda13'
|
|
107
|
+
Requires-Dist: cugraph-cu13==25.10.* ; extra == 'cuda13'
|
|
108
|
+
Requires-Dist: cuvs-cu13==25.10.* ; extra == 'cuda13'
|
|
109
|
+
Requires-Dist: cupy-cuda13x ; extra == 'cuda13'
|
|
110
|
+
Requires-Dist: rapids-singlecell ; extra == 'cuda13'
|
|
105
111
|
Requires-Dist: sphinx ; extra == 'dev'
|
|
106
112
|
Requires-Dist: twine ; extra == 'dev'
|
|
107
113
|
Requires-Dist: ipykernel ; extra == 'dev'
|
|
108
114
|
Requires-Dist: ipytree ; extra == 'dev'
|
|
115
|
+
Requires-Dist: uv ; extra == 'dev'
|
|
109
116
|
Provides-Extra: cuda12
|
|
117
|
+
Provides-Extra: cuda13
|
|
110
118
|
Provides-Extra: dev
|
|
111
119
|
License-File: license
|
|
112
120
|
Summary: exprmat: Routines for expression matrices
|
|
@@ -130,6 +130,7 @@ from exprmat.utils import setup_styles as _setup_styles
|
|
|
130
130
|
from exprmat.ansi import pprog, pproga, info, error, warning, default_logger, logger
|
|
131
131
|
from exprmat.reader.experiment import experiment, load_experiment
|
|
132
132
|
from exprmat.reader.metadata import metadata, load_metadata
|
|
133
|
+
from . import repertoire
|
|
133
134
|
|
|
134
135
|
|
|
135
136
|
_setup_styles()
|
|
@@ -263,4 +264,4 @@ __all__ = [
|
|
|
263
264
|
# constants
|
|
264
265
|
'SPECIFICATION',
|
|
265
266
|
'ENABLE_AGENT_PROMPT'
|
|
266
|
-
]
|
|
267
|
+
]
|
|
@@ -68,7 +68,7 @@ def pairwise_transition(
|
|
|
68
68
|
):
|
|
69
69
|
|
|
70
70
|
mat, clono_ids, clust_ids = clone_cluster_matrix(adata, clonotype = clonotype, cluster = cluster)
|
|
71
|
-
adata.obs[key] = 0
|
|
71
|
+
adata.obs[key] = 0.0
|
|
72
72
|
baseid = clust_ids.index(base)
|
|
73
73
|
|
|
74
74
|
for j, cs in enumerate(clust_ids):
|
|
@@ -82,7 +82,10 @@ def pairwise_transition(
|
|
|
82
82
|
weights = weights / weights.sum()
|
|
83
83
|
submat = (submat.T / submat.sum(axis = 1)).T # row normalize
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
logarithms = np.zeros_like(submat)
|
|
86
|
+
positive = submat > 0
|
|
87
|
+
logarithms[positive] = np.log2(submat[positive])
|
|
88
|
+
shannon_e = -(submat * logarithms).sum(axis = 1)
|
|
86
89
|
shannon_e[either_zero] = 0
|
|
87
90
|
adata.obs.loc[adata.obs[cluster] == cs, key] = np.sum(shannon_e * weights)
|
|
88
91
|
|
|
@@ -103,4 +106,4 @@ def transition(adata, clonotype = 'clone.id', cluster = 'leiden', key = 'clone.t
|
|
|
103
106
|
|
|
104
107
|
def migration(adata, clonotype = 'clone.id', cluster = 'tissue', key = 'clone.migr'):
|
|
105
108
|
# completely the same.
|
|
106
|
-
transition(adata, clonotype = clonotype, cluster = cluster, key = key)
|
|
109
|
+
transition(adata, clonotype = clonotype, cluster = cluster, key = key)
|
|
@@ -61,9 +61,9 @@ def barplot(
|
|
|
61
61
|
data = dropzeros.loc[dropzeros['name'] == gene,:],
|
|
62
62
|
x = "row", y = "logc", hue = 'split', ax = axes, fill = True,
|
|
63
63
|
palette = palette, saturation = 0.8, log_scale = False,
|
|
64
|
-
color = '.8', linecolor = '0', order = selected_groups, gap = 0.3,
|
|
64
|
+
color = '.8', linecolor = '0', order = selected_groups, hue_order = selected_splits, gap = 0.3,
|
|
65
65
|
flierprops = flierprops if flierprops else dict(markerfacecolor = '0.1', markersize = 1, linestyle = 'none'),
|
|
66
|
-
showfliers = True, width = 0.
|
|
66
|
+
showfliers = True, width = 0.8
|
|
67
67
|
)
|
|
68
68
|
|
|
69
69
|
elif style == 'violin':
|
|
@@ -72,7 +72,7 @@ def barplot(
|
|
|
72
72
|
data = dropzeros.loc[dropzeros['name'] == gene,:],
|
|
73
73
|
x = "row", y = "logc", hue = 'split', ax = axes, fill = True,
|
|
74
74
|
palette = palette, saturation = 0.8, log_scale = False,
|
|
75
|
-
color = '.8', linecolor = '0', order = selected_groups, gap = 0,
|
|
75
|
+
color = '.8', linecolor = '0', order = selected_groups, hue_order = selected_splits, gap = 0,
|
|
76
76
|
width = 0.8, **violin_kwargs
|
|
77
77
|
)
|
|
78
78
|
|
|
@@ -275,7 +275,7 @@ def volcano(
|
|
|
275
275
|
names = plots['gene'].tolist()
|
|
276
276
|
|
|
277
277
|
fig, axes = plt.subplots(1, 1, figsize = figsize, dpi = dpi)
|
|
278
|
-
axes.scatter(fc, pvals, c = color_null, s = 4)
|
|
278
|
+
axes.scatter(fc, pvals, c = color_null, s = 4, rasterized = True)
|
|
279
279
|
|
|
280
280
|
sig_pvals = []
|
|
281
281
|
sig_fc = []
|
|
@@ -283,12 +283,12 @@ def volcano(
|
|
|
283
283
|
|
|
284
284
|
for p, f, nm in zip(pvals, fc, names):
|
|
285
285
|
if nm in label:
|
|
286
|
-
sig_pvals += [p]
|
|
286
|
+
sig_pvals += [min(p, ylim)]
|
|
287
287
|
sig_fc += [f]
|
|
288
288
|
sig_names += [nm]
|
|
289
289
|
|
|
290
290
|
if (p > highlight_min_logp and abs(f) >= highlight_min_lfc) and show_all:
|
|
291
|
-
sig_pvals += [p]
|
|
291
|
+
sig_pvals += [min(p, ylim)]
|
|
292
292
|
sig_fc += [f]
|
|
293
293
|
sig_names += [nm]
|
|
294
294
|
|
|
@@ -310,7 +310,7 @@ def volcano(
|
|
|
310
310
|
axes.grid(False)
|
|
311
311
|
|
|
312
312
|
xlim = min(np.abs(np.array(fc)).max(), xlim)
|
|
313
|
-
ylim = min(ylim, np.max(np.array(pvals)))
|
|
313
|
+
# ylim = min(ylim, np.max(np.array(pvals)))
|
|
314
314
|
axes.set_xlim([-xlim, xlim])
|
|
315
315
|
axes.set_ylim([-ylim / 20, ylim])
|
|
316
316
|
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
|
|
2
|
+
import numpy as np
|
|
3
|
+
import pandas as pd
|
|
4
|
+
import matplotlib.pyplot as plt
|
|
5
|
+
from scipy.cluster.hierarchy import dendrogram, linkage, leaves_list
|
|
6
|
+
from scipy.spatial.distance import pdist
|
|
7
|
+
from typing import Optional, Tuple
|
|
8
|
+
from exprmat import error
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def plot_matrix(
|
|
12
|
+
mat: pd.DataFrame,
|
|
13
|
+
dend_x: bool = True,
|
|
14
|
+
dend_y: bool = True,
|
|
15
|
+
show_dend_x: bool = True,
|
|
16
|
+
show_dend_y: bool = True,
|
|
17
|
+
width_dend_x = 1,
|
|
18
|
+
height_dend_y = 1,
|
|
19
|
+
dpi: int = 100,
|
|
20
|
+
figsize: Tuple[int, int] = (5, 4),
|
|
21
|
+
cmap: str = 'viridis',
|
|
22
|
+
meta_x: Optional[pd.DataFrame] = None,
|
|
23
|
+
meta_x_cmap: str | dict = 'reds/r',
|
|
24
|
+
meta_x_height_per_row: float = 0.15,
|
|
25
|
+
meta_x_pad: float = 0.5,
|
|
26
|
+
meta_x_show_legend: bool = True,
|
|
27
|
+
) -> None:
|
|
28
|
+
|
|
29
|
+
from exprmat.plotting.palettes import mpl
|
|
30
|
+
|
|
31
|
+
if not isinstance(mat, pd.DataFrame):
|
|
32
|
+
error('mat should be a pandas dataframe')
|
|
33
|
+
|
|
34
|
+
if not np.issubdtype(mat.values.dtype, np.number):
|
|
35
|
+
error('mat should contain numerical values')
|
|
36
|
+
|
|
37
|
+
if mat.isnull().any().any():
|
|
38
|
+
error('mat contains non-numeric values (e.g. nan, inf)')
|
|
39
|
+
|
|
40
|
+
if meta_x is not None and not isinstance(meta_x, pd.DataFrame):
|
|
41
|
+
error('meta_x should be a pandas dataframe')
|
|
42
|
+
|
|
43
|
+
mat_copy = mat.copy()
|
|
44
|
+
|
|
45
|
+
# column dendrogram
|
|
46
|
+
col_order = np.arange(mat_copy.shape[1])
|
|
47
|
+
col_linkage = None
|
|
48
|
+
if dend_x:
|
|
49
|
+
col_linkage = linkage(pdist(mat_copy.T, metric = 'euclidean'), method = 'ward')
|
|
50
|
+
col_order = leaves_list(col_linkage)
|
|
51
|
+
mat_copy = mat_copy.iloc[:, col_order]
|
|
52
|
+
|
|
53
|
+
# row dendrogram
|
|
54
|
+
row_order = np.arange(mat_copy.shape[0])
|
|
55
|
+
row_linkage = None
|
|
56
|
+
if dend_y:
|
|
57
|
+
row_linkage = linkage(pdist(mat_copy, metric = 'euclidean'), method = 'ward')
|
|
58
|
+
row_order = leaves_list(row_linkage)
|
|
59
|
+
mat_copy = mat_copy.iloc[row_order, :]
|
|
60
|
+
|
|
61
|
+
# metadata table — compute height before layout
|
|
62
|
+
meta_height = 0
|
|
63
|
+
meta_pad = 0
|
|
64
|
+
meta_bottom = 0.05
|
|
65
|
+
legend_height = 0
|
|
66
|
+
legend_entries = []
|
|
67
|
+
if meta_x is not None:
|
|
68
|
+
meta_x = meta_x.reindex(columns = mat_copy.columns)
|
|
69
|
+
meta_height = meta_x.shape[0] * meta_x_height_per_row / figsize[1]
|
|
70
|
+
meta_pad = meta_x_pad / figsize[1]
|
|
71
|
+
|
|
72
|
+
# legend for metadata
|
|
73
|
+
if meta_x_show_legend:
|
|
74
|
+
legend_height_per_row = 0.08
|
|
75
|
+
for label, row_data in meta_x.iterrows():
|
|
76
|
+
is_numeric = False
|
|
77
|
+
try:
|
|
78
|
+
row_data.astype(float)
|
|
79
|
+
is_numeric = True
|
|
80
|
+
except: is_numeric = False
|
|
81
|
+
|
|
82
|
+
if is_numeric:
|
|
83
|
+
legend_entries.append(('numeric', label, None, None,
|
|
84
|
+
row_data.min(), row_data.max()))
|
|
85
|
+
else:
|
|
86
|
+
cats = pd.Categorical(row_data.dropna())
|
|
87
|
+
n_cats = len(cats.categories)
|
|
88
|
+
if isinstance(meta_x_cmap, dict) and label in meta_x_cmap and isinstance(meta_x_cmap[label], list):
|
|
89
|
+
colors = list(meta_x_cmap[label])
|
|
90
|
+
else:
|
|
91
|
+
cat_cmap = plt.cm.tab10 if n_cats <= 10 else plt.cm.tab20
|
|
92
|
+
colors = [cat_cmap((c + 0.5) / n_cats) for c in range(n_cats)]
|
|
93
|
+
legend_entries.append(('categorical', label, cats.categories,
|
|
94
|
+
colors, None, None))
|
|
95
|
+
legend_height = len(legend_entries) * legend_height_per_row
|
|
96
|
+
meta_bottom = 0.15 + legend_height
|
|
97
|
+
|
|
98
|
+
fig = plt.figure(figsize = figsize, dpi = dpi)
|
|
99
|
+
|
|
100
|
+
heatmap_left = (0.05 + width_dend_x / figsize[0]) if show_dend_y else 0.1
|
|
101
|
+
heatmap_width = (figsize[0] * 0.9 - width_dend_x) / figsize[0] if show_dend_x else 0.8
|
|
102
|
+
|
|
103
|
+
# heatmap keeps its original size; when meta is present, everything above
|
|
104
|
+
# shifts up so that metadata sits at the very bottom with a gap (meta_pad)
|
|
105
|
+
# between the metadata top and heatmap_bottom, giving room for x-axis labels
|
|
106
|
+
if show_dend_y:
|
|
107
|
+
heatmap_height = ((figsize[1] * 0.9 - height_dend_y) / figsize[1])
|
|
108
|
+
else:
|
|
109
|
+
heatmap_height = 0.9
|
|
110
|
+
|
|
111
|
+
heatmap_bottom = meta_bottom + meta_height + meta_pad
|
|
112
|
+
|
|
113
|
+
ax_row_dend = None
|
|
114
|
+
if show_dend_y and dend_y:
|
|
115
|
+
ax_row_dend = fig.add_axes([0.05, heatmap_bottom, width_dend_x / figsize[0], heatmap_height])
|
|
116
|
+
|
|
117
|
+
dendrogram(row_linkage, orientation='left', ax=ax_row_dend, no_labels=True)
|
|
118
|
+
ax_row_dend.set_xticks([])
|
|
119
|
+
ax_row_dend.set_yticks([])
|
|
120
|
+
ax_row_dend.spines['top'].set_visible(False)
|
|
121
|
+
ax_row_dend.spines['bottom'].set_visible(False)
|
|
122
|
+
ax_row_dend.spines['left'].set_visible(False)
|
|
123
|
+
|
|
124
|
+
ax_col_dend = None
|
|
125
|
+
if show_dend_x and dend_x:
|
|
126
|
+
col_dend_bottom = heatmap_bottom + heatmap_height
|
|
127
|
+
ax_col_dend = fig.add_axes([heatmap_left, col_dend_bottom, heatmap_width, height_dend_y / figsize[1]])
|
|
128
|
+
|
|
129
|
+
dendrogram(col_linkage, orientation='top', ax=ax_col_dend, no_labels=True)
|
|
130
|
+
ax_col_dend.set_xticks([])
|
|
131
|
+
ax_col_dend.set_yticks([])
|
|
132
|
+
ax_col_dend.spines['top'].set_visible(False)
|
|
133
|
+
ax_col_dend.spines['left'].set_visible(False)
|
|
134
|
+
ax_col_dend.spines['right'].set_visible(False)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
ax_heatmap = fig.add_axes([heatmap_left, heatmap_bottom, heatmap_width, heatmap_height])
|
|
138
|
+
im = ax_heatmap.imshow(mat_copy.values, cmap = mpl(cmap), aspect = 'auto', interpolation = 'nearest')
|
|
139
|
+
# print(mat_copy.index.tolist())
|
|
140
|
+
# print(mat_copy.columns.tolist())
|
|
141
|
+
|
|
142
|
+
ax_heatmap.set_xticks(range(len(mat_copy.columns)))
|
|
143
|
+
ax_heatmap.set_xticklabels(mat_copy.columns, rotation = 90, ha='center', fontsize=9)
|
|
144
|
+
ax_heatmap.set_yticks(range(len(mat_copy.index)))
|
|
145
|
+
ax_heatmap.yaxis.tick_right()
|
|
146
|
+
ax_heatmap.set_yticklabels(mat_copy.index, fontsize = 9, ha = 'left')
|
|
147
|
+
|
|
148
|
+
# metadata table — placed at the very bottom, below the heatmap x-axis labels
|
|
149
|
+
if meta_x is not None:
|
|
150
|
+
for i, (label, row_data) in enumerate(meta_x.iterrows()):
|
|
151
|
+
row_bottom = meta_bottom + (meta_x.shape[0] - i - 1) * meta_x_height_per_row / figsize[1]
|
|
152
|
+
ax_meta = fig.add_axes([
|
|
153
|
+
heatmap_left,
|
|
154
|
+
row_bottom,
|
|
155
|
+
heatmap_width,
|
|
156
|
+
meta_x_height_per_row / figsize[1]
|
|
157
|
+
])
|
|
158
|
+
|
|
159
|
+
n_cols = len(row_data)
|
|
160
|
+
values = row_data.values.reshape(1, -1)
|
|
161
|
+
|
|
162
|
+
is_numeric = False
|
|
163
|
+
try:
|
|
164
|
+
row_data.astype(float)
|
|
165
|
+
is_numeric = True
|
|
166
|
+
except: is_numeric = False
|
|
167
|
+
|
|
168
|
+
if is_numeric:
|
|
169
|
+
vmin, vmax = row_data.min(), row_data.max()
|
|
170
|
+
if vmax == vmin: normed = np.zeros_like(values, dtype = float)
|
|
171
|
+
else: normed = (values.astype(float) - vmin) / (vmax - vmin)
|
|
172
|
+
if isinstance(meta_x_cmap, dict) and label in meta_x_cmap:
|
|
173
|
+
val = meta_x_cmap[label]
|
|
174
|
+
if isinstance(val, str):
|
|
175
|
+
_cmap = mpl(val)
|
|
176
|
+
else:
|
|
177
|
+
from matplotlib.colors import ListedColormap
|
|
178
|
+
_cmap = ListedColormap(val)
|
|
179
|
+
else:
|
|
180
|
+
_cmap = mpl(meta_x_cmap)
|
|
181
|
+
ax_meta.imshow(normed, cmap = _cmap, aspect = 'auto', vmin = 0, vmax = 1)
|
|
182
|
+
else:
|
|
183
|
+
cats = pd.Categorical(row_data)
|
|
184
|
+
codes = cats.codes.reshape(1, -1)
|
|
185
|
+
n_cats = len(cats.categories)
|
|
186
|
+
if isinstance(meta_x_cmap, dict) and label in meta_x_cmap and isinstance(meta_x_cmap[label], list):
|
|
187
|
+
from matplotlib.colors import ListedColormap
|
|
188
|
+
cat_cmap = ListedColormap(meta_x_cmap[label])
|
|
189
|
+
else:
|
|
190
|
+
cat_cmap = plt.cm.tab10 if n_cats <= 10 else plt.cm.tab20
|
|
191
|
+
ax_meta.imshow(codes, cmap = cat_cmap, aspect = 'auto',
|
|
192
|
+
vmin = -0.5, vmax = n_cats - 0.5)
|
|
193
|
+
|
|
194
|
+
# borders
|
|
195
|
+
ax_meta.set_xticks(np.arange(-0.5, n_cols, 1), minor = True)
|
|
196
|
+
ax_meta.set_yticks(np.arange(-0.5, 1, 1), minor = True)
|
|
197
|
+
ax_meta.grid(which = 'minor', color = 'white', linewidth = 2)
|
|
198
|
+
ax_meta.tick_params(which = 'minor', length = 0)
|
|
199
|
+
ax_meta.set_xticks([])
|
|
200
|
+
ax_meta.set_yticks([])
|
|
201
|
+
ax_meta.spines['top'].set_visible(False)
|
|
202
|
+
ax_meta.spines['bottom'].set_visible(False)
|
|
203
|
+
ax_meta.spines['left'].set_visible(False)
|
|
204
|
+
ax_meta.spines['right'].set_visible(False)
|
|
205
|
+
|
|
206
|
+
# label on the right
|
|
207
|
+
ax_meta.text(1.01, 0.5, str(label), transform = ax_meta.transAxes,
|
|
208
|
+
fontsize = 9, va = 'center', ha = 'left')
|
|
209
|
+
|
|
210
|
+
# legend for metadata — below the metadata table
|
|
211
|
+
if legend_entries:
|
|
212
|
+
from matplotlib.patches import Rectangle
|
|
213
|
+
|
|
214
|
+
ax_legend = fig.add_axes([heatmap_left, 0.01, heatmap_width, legend_height])
|
|
215
|
+
ax_legend.set_xlim(0, 1)
|
|
216
|
+
ax_legend.set_ylim(0, 1)
|
|
217
|
+
ax_legend.axis('off')
|
|
218
|
+
|
|
219
|
+
n_rows = len(legend_entries)
|
|
220
|
+
row_h = 1.0 / n_rows
|
|
221
|
+
|
|
222
|
+
for i, entry in enumerate(legend_entries):
|
|
223
|
+
ltype, name, cats, colors, mn, mx = entry
|
|
224
|
+
y_c = (i + 0.5) * row_h
|
|
225
|
+
|
|
226
|
+
# metadata name
|
|
227
|
+
ax_legend.text(-0.02, y_c, str(name), fontsize = 9, va = 'center',
|
|
228
|
+
ha = 'right', transform = ax_legend.transAxes)
|
|
229
|
+
|
|
230
|
+
if ltype == 'categorical':
|
|
231
|
+
x = 0.0
|
|
232
|
+
base_y = y_c
|
|
233
|
+
sub = 0
|
|
234
|
+
for cat, color in zip(cats, colors):
|
|
235
|
+
if x > 0.85:
|
|
236
|
+
sub += 1
|
|
237
|
+
x = 0.0
|
|
238
|
+
y_disp = base_y - sub * row_h * 0.55
|
|
239
|
+
|
|
240
|
+
rect = Rectangle((x, y_disp - row_h * 0.3), 0.02, row_h * 0.6,
|
|
241
|
+
facecolor = color, edgecolor = 'gray',
|
|
242
|
+
linewidth = 0.3, transform = ax_legend.transAxes)
|
|
243
|
+
ax_legend.add_patch(rect)
|
|
244
|
+
ax_legend.text(x + 0.025, y_disp, str(cat), fontsize = 9,
|
|
245
|
+
va = 'center', ha = 'left',
|
|
246
|
+
transform = ax_legend.transAxes)
|
|
247
|
+
x += 0.03 + max(0.05, len(str(cat)) * 0.012)
|
|
248
|
+
|
|
249
|
+
elif ltype == 'numeric':
|
|
250
|
+
gradient = np.linspace(0, 1, 256).reshape(1, -1)
|
|
251
|
+
cb_left = 0.0
|
|
252
|
+
cb_width = 0.35
|
|
253
|
+
cb_height = row_h * 0.4
|
|
254
|
+
cb_bottom = y_c - cb_height / 2
|
|
255
|
+
|
|
256
|
+
if isinstance(meta_x_cmap, dict) and name in meta_x_cmap:
|
|
257
|
+
val = meta_x_cmap[name]
|
|
258
|
+
if isinstance(val, str):
|
|
259
|
+
_lgnd_cmap = mpl(val)
|
|
260
|
+
else:
|
|
261
|
+
from matplotlib.colors import ListedColormap
|
|
262
|
+
_lgnd_cmap = ListedColormap(val)
|
|
263
|
+
else:
|
|
264
|
+
_lgnd_cmap = mpl(meta_x_cmap)
|
|
265
|
+
ax_legend.imshow(gradient, cmap = _lgnd_cmap, aspect = 'auto',
|
|
266
|
+
extent = [cb_left + 0.05, cb_left + cb_width - 0.1,
|
|
267
|
+
cb_bottom, cb_bottom + cb_height])
|
|
268
|
+
|
|
269
|
+
ax_legend.text(cb_left, cb_bottom + cb_height + 0.01, f'{mn:.2g}', fontsize = 9,
|
|
270
|
+
va = 'top', ha = 'left',
|
|
271
|
+
transform = ax_legend.transAxes)
|
|
272
|
+
ax_legend.text(cb_left + cb_width - 0.05, cb_bottom + cb_height + 0.01, f'{mx:.2g}', fontsize = 9,
|
|
273
|
+
va = 'top', ha = 'right',
|
|
274
|
+
transform = ax_legend.transAxes)
|
|
275
|
+
|
|
276
|
+
return fig
|
|
@@ -227,7 +227,9 @@ def gene_track(
|
|
|
227
227
|
xfrom, xto,
|
|
228
228
|
chr = '1',
|
|
229
229
|
assembly = 'grcm39',
|
|
230
|
-
show_gene_name = True
|
|
230
|
+
show_gene_name = True,
|
|
231
|
+
hide_unnamed = False,
|
|
232
|
+
show_only = None
|
|
231
233
|
):
|
|
232
234
|
from exprmat.data.finders import get_genome, get_genome_model
|
|
233
235
|
from exprmat import config as cfg
|
|
@@ -246,16 +248,6 @@ def gene_track(
|
|
|
246
248
|
for name in gnames:
|
|
247
249
|
|
|
248
250
|
gene = model[model['gid'] == name].copy()
|
|
249
|
-
requested_x = gene['start'].min()
|
|
250
|
-
requested_y = -1
|
|
251
|
-
for i, z in enumerate(waterflow):
|
|
252
|
-
if z < requested_x:
|
|
253
|
-
requested_y = i
|
|
254
|
-
break
|
|
255
|
-
|
|
256
|
-
if requested_y == -1:
|
|
257
|
-
waterflow += [requested_x]
|
|
258
|
-
requested_y = len(waterflow) - 1
|
|
259
251
|
|
|
260
252
|
displayname = str(name)
|
|
261
253
|
if show_gene_name:
|
|
@@ -266,6 +258,28 @@ def gene_track(
|
|
|
266
258
|
|
|
267
259
|
if str(displayname) == 'nan':
|
|
268
260
|
displayname = ''
|
|
261
|
+
|
|
262
|
+
if (
|
|
263
|
+
displayname == '' or
|
|
264
|
+
displayname.startswith('ENS') or
|
|
265
|
+
displayname.startswith('Gm') or
|
|
266
|
+
displayname.endswith('Rik')
|
|
267
|
+
):
|
|
268
|
+
if hide_unnamed: continue
|
|
269
|
+
|
|
270
|
+
if show_only is not None:
|
|
271
|
+
if not displayname in show_only: continue
|
|
272
|
+
|
|
273
|
+
requested_x = gene['start'].min()
|
|
274
|
+
requested_y = -1
|
|
275
|
+
for i, z in enumerate(waterflow):
|
|
276
|
+
if z < requested_x:
|
|
277
|
+
requested_y = i
|
|
278
|
+
break
|
|
279
|
+
|
|
280
|
+
if requested_y == -1:
|
|
281
|
+
waterflow += [requested_x]
|
|
282
|
+
requested_y = len(waterflow) - 1
|
|
269
283
|
|
|
270
284
|
ntranscript = len(gene[gene['type'] == 'transcript'])
|
|
271
285
|
if ntranscript > 1: displayname += f' ({ntranscript})'
|
|
@@ -103,7 +103,7 @@ def highly_variable(
|
|
|
103
103
|
|
|
104
104
|
# method implemented in cellranger's selection of hvg.
|
|
105
105
|
elif method == 'cellranger':
|
|
106
|
-
m_lognorm = choose_layer(adata, lognorm)
|
|
106
|
+
m_lognorm = choose_layer(adata, layer = lognorm)
|
|
107
107
|
df = highly_variable_nb_log(m_lognorm, adata.var, **kwargs)
|
|
108
108
|
|
|
109
109
|
# here, we get the full ranked list for all genes in the dataset.
|