exprmat 0.1.37__tar.gz → 0.1.38__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.37 → exprmat-0.1.38}/PKG-INFO +1 -2
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/__init__.py +20 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/data/presets.py +36 -1
- exprmat-0.1.38/exprmat/peaks/linkage.py +19 -0
- exprmat-0.1.38/exprmat/peaks/motif.py +54 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reader/static.py +0 -4
- {exprmat-0.1.37 → exprmat-0.1.38}/pyproject.toml +1 -2
- exprmat-0.1.37/exprmat/data/delim.py +0 -89
- exprmat-0.1.37/exprmat/data/gff.py +0 -162
- exprmat-0.1.37/exprmat/data/private.py +0 -70
- exprmat-0.1.37/exprmat/data/ranges.py +0 -164
- {exprmat-0.1.37 → exprmat-0.1.38}/Cargo.lock +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/Cargo.toml +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/ansi.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/cnmf.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/dbscan.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/kmeans.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/leiden.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/nmf.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/rogue.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/seriation.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/spectral.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/clustering/utils.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/cnv/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/cnv/cnvscore.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/cnv/infercnv.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/configuration.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/data/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/data/cistarget.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/data/finders.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/data/geneset.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/data/io.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/data/lr.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/data/signature.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/data/tf.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/aggregate.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/atac.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/aucell.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/de.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/gse.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/kde.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/recovery.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/summary.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/descriptive/tcr.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/deseq/dataset.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/deseq/gridsearch.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/deseq/inference.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/deseq/preprocessing.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/deseq/stats.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/deseq/utils.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/generank.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/linreg.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/moments.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/optimization.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/parallel.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/preprocess.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/pseudotime.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/transition.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/utils.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/dynamics/velocity.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/grn/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/grn/infergrn.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/grn/modules.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/grn/prune.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/grn/regressors.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/grn/utils.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/image/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/image/align.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/aggregate.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/method.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/cellchat.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/cellphonedb.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/connectome.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/geomean.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/logfc.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/natmi.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/rank_aggregate.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/scseqcomm.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/methods/singlecellsignalr.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/pipeline.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/preprocess.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/resources.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/lr/utils.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/peaks/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/peaks/callpeak.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/peaks/idr/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/peaks/idr/constants.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/peaks/idr/idr.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/peaks/idr/invcdf.pyx +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/peaks/idr/optimization.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/peaks/idr/utils.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/peaks/sequence.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/atac.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/cnmf.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/cnv.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/A.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/B.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/C.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/D.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/E.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/F.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/G.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/H.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/I.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/J.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/K.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/L.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/M.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/N.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/O.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/P.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/Q.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/R.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/S.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/T.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/U.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/V.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/W.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/X.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/Y.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/data/Z.pk +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/de.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/expression.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/gse.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/lr.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/palettes.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/sankey.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/sequence.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/summary.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/track.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/utils.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/plotting/velocity.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/doublets/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/doublets/composite.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/doublets/scrublet.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/emptydrops.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/filter.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/impute/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/impute/magic.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/integrate.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/linear.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/normal.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/plot.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/qc.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/sctransform/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/sctransform/estimate.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/sctransform/ksmooth.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/sctransform/residual.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/sctransform/transform.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/sparse.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/preprocessing/uniform.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reader/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reader/experiment.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reader/matcher.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reader/metadata.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reader/peaks.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reader/spatial.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/forceatlas.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/mde.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/nn.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/outliers.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/pca.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/plot.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/spectral.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/tsne.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/reduction/umap.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/trajectory/pcurve.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/transfer/__init__.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/transfer/atlas.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/exprmat/utils.py +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/license +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/readme.md +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/Cargo.toml +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/license +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/readme +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/call_peaks.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/embedding.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/export.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/knn.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/lib.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/motif.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/network.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/preprocessing.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/utils/anndata.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2/src/utils.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/Cargo.toml +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/embedding.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/export.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/feature_count/counter.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/feature_count/data_iter.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/feature_count/matrix.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/feature_count/mod.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/genome.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/lib.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/motif.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/network.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/preprocessing/bam/flagstat.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/preprocessing/bam/header.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/preprocessing/bam/mark_duplicates.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/preprocessing/bam.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/preprocessing/import.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/preprocessing/mod.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/preprocessing/qc.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/utils/knn.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/snapatac2-core/src/utils/mod.rs +0 -0
- {exprmat-0.1.37 → exprmat-0.1.38}/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.1.
|
|
3
|
+
Version: 0.1.38
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -55,7 +55,6 @@ Requires-Dist: hdbscan
|
|
|
55
55
|
Requires-Dist: graphtools
|
|
56
56
|
Requires-Dist: bincsync>=0.3.0
|
|
57
57
|
Requires-Dist: pybigwig
|
|
58
|
-
Requires-Dist: pybedgraph
|
|
59
58
|
Requires-Dist: loompy
|
|
60
59
|
Requires-Dist: squidpy
|
|
61
60
|
Requires-Dist: zarr
|
|
@@ -128,6 +128,26 @@ if PERFORM_DATABASE_CHECK:
|
|
|
128
128
|
warning(f'db version: {db_ver} package version: {importlib.metadata.version("exprmat")}')
|
|
129
129
|
|
|
130
130
|
|
|
131
|
+
def cuda():
|
|
132
|
+
|
|
133
|
+
import torch
|
|
134
|
+
info(f'PyTorch version: {torch.__version__}')
|
|
135
|
+
info(f'GPU acceleration availability: {"YES" if torch.cuda.is_available() else "NO"}')
|
|
136
|
+
if torch.cuda.is_available():
|
|
137
|
+
info(f'CUDA version: {torch.version.cuda}')
|
|
138
|
+
info(f'Number of installed GPUs: {torch.cuda.device_count()}')
|
|
139
|
+
info(f'Supporting BF16 format: {"YES" if torch.cuda.is_bf16_supported() else "NO"}')
|
|
140
|
+
info(f'Devices:')
|
|
141
|
+
for i in range(torch.cuda.device_count()):
|
|
142
|
+
total_mem = torch.cuda.get_device_properties(i).total_memory / 1024 / 1024 / 1024
|
|
143
|
+
dedicated_mem = torch.cuda.memory_allocated(i) / 1024 / 1024 / 1024
|
|
144
|
+
info(f'[{i}] {torch.cuda.get_device_name(i)} {"*" if torch.cuda.current_device() == i else ""}')
|
|
145
|
+
info(f' CUDA capability: {torch.cuda.get_device_capability(i)}')
|
|
146
|
+
info(f' Installed VRAM (GiB): {total_mem:.2f} GiB')
|
|
147
|
+
info(f' Supporting TensorCore: {"YES" if torch.cuda.get_device_properties(0).major >= 7 else "NO"}')
|
|
148
|
+
info(f' Current dedicated memory: {dedicated_mem:.2f} / {total_mem:.2f} GiB ({100 * dedicated_mem / total_mem:.1f}%)')
|
|
149
|
+
|
|
150
|
+
|
|
131
151
|
def version():
|
|
132
152
|
import os
|
|
133
153
|
import sys
|
|
@@ -40,5 +40,40 @@ g2m_genesets = {
|
|
|
40
40
|
|
|
41
41
|
preset_genesets = {
|
|
42
42
|
's': s_gene_sets,
|
|
43
|
-
'g2m': g2m_genesets
|
|
43
|
+
'g2m': g2m_genesets,
|
|
44
|
+
'custom': {
|
|
45
|
+
'mmu': {
|
|
46
|
+
't': [
|
|
47
|
+
'Cd3d', 'Cd8a', 'Cd4', 'Sell',
|
|
48
|
+
'Il7r', 'Tcf7', 'Ifng', 'Gzmb',
|
|
49
|
+
'Tox', 'Pdcd1', 'Havcr2', 'Lag3',
|
|
50
|
+
'Mki67', 'Icos', 'Foxp3', 'Id2',
|
|
51
|
+
'Id3', 'Gata3', 'Tbx21', 'Cd69',
|
|
52
|
+
'Cxcr5', 'Bach1', 'Cxcr5', 'Xcl1',
|
|
53
|
+
'Etv6', 'Ikzf3', 'Zbed2', 'Batf',
|
|
54
|
+
'Klrb1c', 'Klrg1', 'Prf1'
|
|
55
|
+
],
|
|
56
|
+
'chemokines': {
|
|
57
|
+
"CCL": [
|
|
58
|
+
"Ccl1", "Ccr1l1", "Ccl2", "Ccl3", "Ccl4", "Ccl5", "Ccl6",
|
|
59
|
+
"Ccl7", "Ccl17", "Ccl8", "Ccl9", "Ccl11", "Ccl12", "Ccl19",
|
|
60
|
+
"Ccl19-ps2", "Ccl20", "Ccl22", "Ccl24", "Ccl25", "Ccl26",
|
|
61
|
+
"Ccl27a", "Ccl28",
|
|
62
|
+
],
|
|
63
|
+
"CCR": [
|
|
64
|
+
"Ccr1", "Ccr2", "Ccr3", "Ccr4", "Ccr5", "Ccr6",
|
|
65
|
+
"Ccr7", "Ccr8", "Ccr9", "Ccr10",
|
|
66
|
+
],
|
|
67
|
+
"CXCL": [
|
|
68
|
+
"Cxcl1", "Cxcl2", "Cxcl3", "Cxcl5", "Cxcl9", "Cxcl10", "Cxcl11",
|
|
69
|
+
"Cxcl12", "Cxcl13", "Cxcl14", "Cxcl15", "Cxcl16", "Cxcl17",
|
|
70
|
+
],
|
|
71
|
+
"CXCR": ["Cxcr1", "Cxcr2", "Cxcr3", "Cxcr4", "Cxcr5", "Cxcr6"],
|
|
72
|
+
"XCL": ["Xcl1"],
|
|
73
|
+
"XCR": ["Xcr1"],
|
|
74
|
+
"CX3CL": ["Cx3cl1"],
|
|
75
|
+
"CX3CR": ["Cx3cr1"],
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
44
79
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
# Peak-to-gene linkage
|
|
3
|
+
# --------------------
|
|
4
|
+
#
|
|
5
|
+
# We estimated a linkage score for each peak-gene pair using linear regression models,
|
|
6
|
+
# based on recent work described in the SHARE-seq method [Ma et al., 2020]. For
|
|
7
|
+
# each gene, we computed the Pearson correlation coefficient r between the gene
|
|
8
|
+
# expression and the accessibility of each peak within 500 kb of the gene TSS.
|
|
9
|
+
# For each peak, we then computed a background set of expected correlation coefficients
|
|
10
|
+
# given properties of the peak by randomly sampling 200 peaks located on a different
|
|
11
|
+
# chromosome to the gene, matched for GC content, accessibility, and sequence length
|
|
12
|
+
# (MatchRegionStats function in Signac). We then computed the Pearson correlation
|
|
13
|
+
# between the expression of the gene and the set of background peaks. A z-score
|
|
14
|
+
# was computed for each peak as z = (r − µ)/σ, where µ was the background mean
|
|
15
|
+
# correlation coefficient and σ was the standard deviation of the background
|
|
16
|
+
# correlation coefficients for the peak. We computed a p-value for each peak using
|
|
17
|
+
# a one-sided z-test, and retained peak-gene links with a p-value < 0.05 and a
|
|
18
|
+
# Pearson correlation coefficient > 0.05 or < -0.05. This was performed using the
|
|
19
|
+
# LinkPeaks function in Signac.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
# Motif enrichment
|
|
3
|
+
# ----------------
|
|
4
|
+
#
|
|
5
|
+
# A hypergeometric test was used to test for overrepresentation of each DNA
|
|
6
|
+
# motif in the set of differentially accessible peaks compared to a background
|
|
7
|
+
# set of peaks. We tested motifs present in the JASPAR database [Fornes et al., 2020]
|
|
8
|
+
# for human (species code 9606) by first identifying which peaks contained each
|
|
9
|
+
# motif using the motifmatchr R package [Schep, 2020]. We computed the GC
|
|
10
|
+
# content (percentage of G and C nucleotides) for each differentially accessible
|
|
11
|
+
# peak and sampled a background set of 40,000 peaks such that the background set
|
|
12
|
+
# was matched for overall GC content, accessibility, and peak width. This was
|
|
13
|
+
# performed using the FindMotifs function in Signac.
|
|
14
|
+
#
|
|
15
|
+
# Motif footprinting
|
|
16
|
+
# ------------------
|
|
17
|
+
#
|
|
18
|
+
# We performed transcription factor motif footprinting following previously
|
|
19
|
+
# described methods [Corces et al., 2018]. To account for Tn5 sequence insertion
|
|
20
|
+
# bias, we first computed the observed Tn5 insertion frequency at each DNA
|
|
21
|
+
# hexamer using all Tn5 insertions on chromosome 1. This was done by extracting
|
|
22
|
+
# the base-resolution Tn5 insertion positions for each fragment mapped to
|
|
23
|
+
# chromosome 1, and extending the insertion coordinate 3 bp upstream and 2 bp
|
|
24
|
+
# downstream. We then extracted the DNA sequence corresponding to these
|
|
25
|
+
# coordinates using the getSeq function from the Biostrings R package
|
|
26
|
+
# [Pagès et al., 2020] and counted the frequency of each hexamer using the table
|
|
27
|
+
# function in R. We next computed the expected Tn5 hexamer insertion frequencies
|
|
28
|
+
# based on the frequency of each hexamer on chromosome 1. We counted the
|
|
29
|
+
# frequency of each hexamer using the oligonucleotideFrequency function in the
|
|
30
|
+
# Biostrings package with width=6 and names=“chr1”, using the hg38 genome via
|
|
31
|
+
# the BSgenome R package [Pagès, 2020]. Finally, we computed the Tn5 insertion
|
|
32
|
+
# bias as the observed Tn5 insertions divided by the expected insertions at each
|
|
33
|
+
# hexamer. This was performed using the InsertionBias function in Signac.
|
|
34
|
+
#
|
|
35
|
+
# To perform motif footprinting, we first identified the coordinates of each
|
|
36
|
+
# instance of the motif to be footprinted using the matchMotifs function from
|
|
37
|
+
# the motifmatchr package with out=“positions” to return the genomic coordinates
|
|
38
|
+
# of each motif instance [Schep, 2020]. Motif coordinates were then resized to
|
|
39
|
+
# include the +/-250 bp sequence. The Tn5 insertion frequency was counted at each
|
|
40
|
+
# position in the region for each motif instance to produce a matrix containing
|
|
41
|
+
# the total observed Tn5 insertion events at each position relative to the motif
|
|
42
|
+
# center for each cell. We then found the expected Tn5 insertion frequency matrix
|
|
43
|
+
# by computing the hexamer frequency matrix, M. The hexamer frequency matrix M
|
|
44
|
+
# was defined as a matrix with i rows corresponding to i different DNA hexamers
|
|
45
|
+
# and j columns corresponding to j positions centered on the motif, and each
|
|
46
|
+
# entry Mi j corresponded to the hexamer count for hexamer i at position j. To
|
|
47
|
+
# find the expected Tn5 insertion frequency at each position relative to the motif
|
|
48
|
+
# given the Tn5 insertion bias (see above), we computed the matrix cross product
|
|
49
|
+
# between the hexamer frequency matrix M and the Tn5 insertion bias vector.
|
|
50
|
+
# Finally, the expected Tn5 insertion frequencies were normalized by dividing by
|
|
51
|
+
# the mean expected frequency in the 50 bp flanking regions (the regions 200 to
|
|
52
|
+
# 250 bp from the motif). To correct for Tn5 insertion bias we subtracted the
|
|
53
|
+
# expected Tn5 insertion frequencies from the observed Tn5 insertion frequencies
|
|
54
|
+
# at each position. This was performed using the Footprint function in Signac.
|
|
@@ -805,7 +805,6 @@ def atac_infer_gene_activity(adata, sample_name, make_gene_args = {}, exact = Tr
|
|
|
805
805
|
gmodel = gmodel.loc[gmodel['type'] == 'gene', :].copy()
|
|
806
806
|
bedgraphs = adata.obs['bedgraph'].tolist()
|
|
807
807
|
import pyBigWig as pybw
|
|
808
|
-
import pyBedGraph as pybdg
|
|
809
808
|
from rich.progress import track
|
|
810
809
|
|
|
811
810
|
# generate a matrix with n_peaks * n_samples
|
|
@@ -819,7 +818,6 @@ def atac_infer_gene_activity(adata, sample_name, make_gene_args = {}, exact = Tr
|
|
|
819
818
|
if os.path.isfile(fp.replace('.bdg', '.bigwig')):
|
|
820
819
|
fhandle = pybw.open(fp.replace('.bdg', '.bigwig'))
|
|
821
820
|
ftype = 'bigwig'
|
|
822
|
-
else: fhandle = pybdg.BedGraph('', fp)
|
|
823
821
|
|
|
824
822
|
for i_region in track(range(len(gmodel)), description = f'querying genes for {fp}'):
|
|
825
823
|
|
|
@@ -976,7 +974,6 @@ def atac_make_peak_matrix(adata, sample_name, key_peaks = 'peaks.merged', exact
|
|
|
976
974
|
bedgraphs = adata.obs['bedgraph'].tolist()
|
|
977
975
|
|
|
978
976
|
import pyBigWig as pybw
|
|
979
|
-
import pyBedGraph as pybdg
|
|
980
977
|
from rich.progress import track
|
|
981
978
|
|
|
982
979
|
# generate a matrix with n_peaks * n_samples
|
|
@@ -990,7 +987,6 @@ def atac_make_peak_matrix(adata, sample_name, key_peaks = 'peaks.merged', exact
|
|
|
990
987
|
if os.path.isfile(fp.replace('.bdg', '.bigwig')):
|
|
991
988
|
fhandle = pybw.open(fp.replace('.bdg', '.bigwig'))
|
|
992
989
|
ftype = 'bigwig'
|
|
993
|
-
else: fhandle = pybdg.BedGraph('', fp)
|
|
994
990
|
|
|
995
991
|
for i_region in track(range(len(peak_table)), description = f'querying peaks for {fp}'):
|
|
996
992
|
|
|
@@ -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.38"
|
|
24
24
|
authors = [
|
|
25
25
|
{name = "Zheng Yang", email = "xornent@outlook.com"}
|
|
26
26
|
]
|
|
@@ -83,7 +83,6 @@ dependencies = [
|
|
|
83
83
|
'graphtools',
|
|
84
84
|
'bincsync >= 0.3.0',
|
|
85
85
|
'pyBigWig',
|
|
86
|
-
'pyBedGraph',
|
|
87
86
|
'loompy',
|
|
88
87
|
'squidpy',
|
|
89
88
|
'zarr',
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# utilities of reading delimited files from raw or gzipped archives.
|
|
3
|
-
|
|
4
|
-
from exprmat.ansi import error
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def readdelim(fname, encoding = 'utf-8',
|
|
8
|
-
delim = '\t', ignore_first_column = True):
|
|
9
|
-
|
|
10
|
-
with open(fname, 'r', encoding = encoding) as f:
|
|
11
|
-
return readdelim_fp(f, delim, ignore_first_column)
|
|
12
|
-
|
|
13
|
-
pass
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def readdelim_gzipped(fname, encoding = 'utf-8',
|
|
17
|
-
delim = '\t', ignore_first_column = True):
|
|
18
|
-
|
|
19
|
-
import gzip
|
|
20
|
-
import io
|
|
21
|
-
|
|
22
|
-
with gzip.open(fname, 'rb') as f:
|
|
23
|
-
with io.TextIOWrapper(f, encoding = encoding) as enc:
|
|
24
|
-
return readdelim_fp(enc, delim, ignore_first_column)
|
|
25
|
-
|
|
26
|
-
pass
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def readdelim_fp(fp, delim = '\t', ignore_first_column = True):
|
|
30
|
-
|
|
31
|
-
line = fp.readline().replace('\n', '')
|
|
32
|
-
print('', end = '')
|
|
33
|
-
|
|
34
|
-
header = False
|
|
35
|
-
header_cols = []
|
|
36
|
-
|
|
37
|
-
lines = { }
|
|
38
|
-
lineno = 0
|
|
39
|
-
rowno = 0
|
|
40
|
-
|
|
41
|
-
while line:
|
|
42
|
-
|
|
43
|
-
# the file has been scanned by scangff. so there is no format problems.
|
|
44
|
-
# we do not perform any checks.
|
|
45
|
-
|
|
46
|
-
if len(line) == 0:
|
|
47
|
-
line = fp.readline().replace('\n', '')
|
|
48
|
-
lineno += 1; continue
|
|
49
|
-
|
|
50
|
-
elif line[0] == '#':
|
|
51
|
-
line = fp.readline().replace('\n', '')
|
|
52
|
-
lineno += 1; continue
|
|
53
|
-
|
|
54
|
-
else: rowno += 1
|
|
55
|
-
|
|
56
|
-
if not header:
|
|
57
|
-
|
|
58
|
-
cols = line.split(delim)
|
|
59
|
-
if len(cols) > 1:
|
|
60
|
-
if ignore_first_column:
|
|
61
|
-
for x in cols[1:]: lines[x] = []
|
|
62
|
-
header_cols = cols[1:]
|
|
63
|
-
else:
|
|
64
|
-
for x in cols: lines[x] = []
|
|
65
|
-
header_cols = cols
|
|
66
|
-
else:
|
|
67
|
-
if ignore_first_column: return {}
|
|
68
|
-
else: lines[cols[0]] = []; header_cols = cols
|
|
69
|
-
|
|
70
|
-
header = True
|
|
71
|
-
line = fp.readline().replace('\n', '')
|
|
72
|
-
lineno += 1; continue
|
|
73
|
-
|
|
74
|
-
cols = line.split(delim)
|
|
75
|
-
if ignore_first_column: cols = cols[1:]
|
|
76
|
-
|
|
77
|
-
i = 0
|
|
78
|
-
for c in header_cols:
|
|
79
|
-
lines[c] += [cols[i]]
|
|
80
|
-
i += 1
|
|
81
|
-
|
|
82
|
-
line = fp.readline().replace('\n', '')
|
|
83
|
-
lineno += 1
|
|
84
|
-
|
|
85
|
-
if rowno % 1000 == 0:
|
|
86
|
-
print('\rreaddelim_fp(fp) progress:', rowno, end = '')
|
|
87
|
-
|
|
88
|
-
print('')
|
|
89
|
-
return lines
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# utilities of reading gff files from raw or gzipped archives.
|
|
3
|
-
|
|
4
|
-
from exprmat.ansi import error
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def readgff(fname, encoding = 'utf-8'):
|
|
8
|
-
|
|
9
|
-
with open(fname, 'r', encoding = encoding) as f:
|
|
10
|
-
col, _, _ = scangff(f)
|
|
11
|
-
return readgff_fp(f, col)
|
|
12
|
-
|
|
13
|
-
pass
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def readgff_gzipped(fname, encoding = 'utf-8'):
|
|
17
|
-
|
|
18
|
-
import gzip
|
|
19
|
-
import io
|
|
20
|
-
|
|
21
|
-
with gzip.open(fname, 'rb') as f:
|
|
22
|
-
with io.TextIOWrapper(f, encoding = encoding) as enc:
|
|
23
|
-
col, _, _ = scangff(enc)
|
|
24
|
-
return readgff_fp(enc, col)
|
|
25
|
-
|
|
26
|
-
pass
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def gffcols(fname, encoding = 'utf-8'):
|
|
30
|
-
|
|
31
|
-
with open(fname, 'r', encoding = encoding) as f:
|
|
32
|
-
col, _, type = scangff(f)
|
|
33
|
-
|
|
34
|
-
return col, type
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def gffcols_gzipped(fname, encoding = 'utf-8'):
|
|
38
|
-
|
|
39
|
-
import gzip
|
|
40
|
-
import io
|
|
41
|
-
|
|
42
|
-
with gzip.open(fname, 'rb') as f:
|
|
43
|
-
with io.TextIOWrapper(f, encoding = encoding) as enc:
|
|
44
|
-
col, _, type = scangff(enc)
|
|
45
|
-
|
|
46
|
-
return col, type
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
# scan the gff table, and get the full union of available columns (though some
|
|
50
|
-
# may not present in certain kind of rows.) this help later specify the classes
|
|
51
|
-
# and columns of a full union table, which contains all of the gff metadata
|
|
52
|
-
# column information. also returns the available data row numbers.
|
|
53
|
-
|
|
54
|
-
def scangff(fp):
|
|
55
|
-
|
|
56
|
-
line = fp.readline().replace('\n', '')
|
|
57
|
-
lineno = 0
|
|
58
|
-
rowno = 0
|
|
59
|
-
cols = ['.seqid', '.source', '.type', '.start', '.end', '.score', '.strand', '.phase']
|
|
60
|
-
attrcols = []
|
|
61
|
-
typecols = {}
|
|
62
|
-
print('', end = '')
|
|
63
|
-
|
|
64
|
-
while line:
|
|
65
|
-
|
|
66
|
-
if len(line) == 0:
|
|
67
|
-
line = fp.readline().replace('\n', '')
|
|
68
|
-
lineno += 1; continue
|
|
69
|
-
|
|
70
|
-
elif line[0] == '#':
|
|
71
|
-
line = fp.readline().replace('\n', '')
|
|
72
|
-
lineno += 1; continue
|
|
73
|
-
|
|
74
|
-
else: rowno += 1
|
|
75
|
-
|
|
76
|
-
tabdelim = line.split('\t')
|
|
77
|
-
if len(tabdelim) != 9:
|
|
78
|
-
print('')
|
|
79
|
-
error('line {0} does not have exactly 9 columns!'.format(lineno))
|
|
80
|
-
|
|
81
|
-
if len(tabdelim[8]) > 0:
|
|
82
|
-
attribs = tabdelim[8].split(';')
|
|
83
|
-
rnames = [x.split('=')[0] for x in attribs]
|
|
84
|
-
|
|
85
|
-
typename = tabdelim[2]
|
|
86
|
-
if not typename in typecols.keys(): typecols[typename] = { '.': 1 }
|
|
87
|
-
else: typecols[typename]['.'] += 1
|
|
88
|
-
|
|
89
|
-
for rname in rnames:
|
|
90
|
-
if not rname in attrcols: attrcols += [rname]
|
|
91
|
-
|
|
92
|
-
if not rname in typecols[typename].keys(): typecols[typename][rname] = 1
|
|
93
|
-
else: typecols[typename][rname] += 1
|
|
94
|
-
|
|
95
|
-
line = fp.readline().replace('\n', '')
|
|
96
|
-
lineno += 1
|
|
97
|
-
|
|
98
|
-
if rowno % 1000 == 0:
|
|
99
|
-
print('\rscangff(fp) progress:', rowno, end = '')
|
|
100
|
-
|
|
101
|
-
fp.seek(0) # seek back to the origin.
|
|
102
|
-
print('')
|
|
103
|
-
|
|
104
|
-
return cols + attrcols, rowno, typecols
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
def readgff_fp(fp, columns):
|
|
108
|
-
|
|
109
|
-
line = fp.readline().replace('\n', '')
|
|
110
|
-
print('', end = '')
|
|
111
|
-
|
|
112
|
-
lines = { }
|
|
113
|
-
for i in columns: lines[i] = []
|
|
114
|
-
lineno = 0
|
|
115
|
-
rowno = 0
|
|
116
|
-
|
|
117
|
-
while line:
|
|
118
|
-
|
|
119
|
-
# the file has been scanned by scangff. so there is no format problems.
|
|
120
|
-
# we do not perform any checks.
|
|
121
|
-
|
|
122
|
-
if len(line) == 0:
|
|
123
|
-
line = fp.readline().replace('\n', '')
|
|
124
|
-
lineno += 1; continue
|
|
125
|
-
|
|
126
|
-
elif line[0] == '#':
|
|
127
|
-
line = fp.readline().replace('\n', '')
|
|
128
|
-
lineno += 1; continue
|
|
129
|
-
|
|
130
|
-
else: rowno += 1
|
|
131
|
-
|
|
132
|
-
# ['.seqid', '.source', '.type', '.start', '.end', '.score', '.strand', '.phase']
|
|
133
|
-
|
|
134
|
-
tabdelim = line.split('\t')
|
|
135
|
-
lines['.seqid'] += [tabdelim[0]]
|
|
136
|
-
lines['.source'] += [tabdelim[1]]
|
|
137
|
-
lines['.type'] += [tabdelim[2]]
|
|
138
|
-
lines['.start'] += [tabdelim[3]]
|
|
139
|
-
lines['.end'] += [tabdelim[4]]
|
|
140
|
-
lines['.score'] += [tabdelim[5]]
|
|
141
|
-
lines['.strand'] += [tabdelim[6]]
|
|
142
|
-
lines['.phase'] += [tabdelim[7]]
|
|
143
|
-
|
|
144
|
-
attl = columns[8:]
|
|
145
|
-
if len(tabdelim[8]) > 0:
|
|
146
|
-
attribs = tabdelim[8].split(';')
|
|
147
|
-
for attrib in attribs:
|
|
148
|
-
namevalue = attrib.split('=')
|
|
149
|
-
lines[namevalue[0]] += [namevalue[1]]
|
|
150
|
-
attl.remove(namevalue[0])
|
|
151
|
-
|
|
152
|
-
for a in attl:
|
|
153
|
-
lines[a] += [None]
|
|
154
|
-
|
|
155
|
-
line = fp.readline().replace('\n', '')
|
|
156
|
-
lineno += 1
|
|
157
|
-
|
|
158
|
-
if rowno % 1000 == 0:
|
|
159
|
-
print('\rreadgff_fp(fp, columns) progress:', rowno, end = '')
|
|
160
|
-
|
|
161
|
-
print('')
|
|
162
|
-
return lines
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
mmu_chemokines = {
|
|
3
|
-
"CCL": [
|
|
4
|
-
"Ccl1",
|
|
5
|
-
"Ccr1l1",
|
|
6
|
-
"Ccl2",
|
|
7
|
-
"Ccl3",
|
|
8
|
-
"Ccl4",
|
|
9
|
-
"Ccl5",
|
|
10
|
-
"Ccl6",
|
|
11
|
-
"Ccl7",
|
|
12
|
-
"Ccl17",
|
|
13
|
-
"Ccl8",
|
|
14
|
-
"Ccl9",
|
|
15
|
-
"Ccl11",
|
|
16
|
-
"Ccl12",
|
|
17
|
-
"Ccl19",
|
|
18
|
-
"Ccl19-ps2",
|
|
19
|
-
"Ccl20",
|
|
20
|
-
"Ccl22",
|
|
21
|
-
"Ccl24",
|
|
22
|
-
"Ccl25",
|
|
23
|
-
"Ccl26",
|
|
24
|
-
"Ccl27a",
|
|
25
|
-
"Ccl28",
|
|
26
|
-
],
|
|
27
|
-
"CCR": [
|
|
28
|
-
"Ccr1",
|
|
29
|
-
"Ccr2",
|
|
30
|
-
"Ccr3",
|
|
31
|
-
"Ccr4",
|
|
32
|
-
"Ccr5",
|
|
33
|
-
"Ccr6",
|
|
34
|
-
"Ccr7",
|
|
35
|
-
"Ccr8",
|
|
36
|
-
"Ccr9",
|
|
37
|
-
"Ccr10",
|
|
38
|
-
],
|
|
39
|
-
"CXCL": [
|
|
40
|
-
"Cxcl1",
|
|
41
|
-
"Cxcl2",
|
|
42
|
-
"Cxcl3",
|
|
43
|
-
"Cxcl5",
|
|
44
|
-
"Cxcl9",
|
|
45
|
-
"Cxcl10",
|
|
46
|
-
"Cxcl11",
|
|
47
|
-
"Cxcl12",
|
|
48
|
-
"Cxcl13",
|
|
49
|
-
"Cxcl14",
|
|
50
|
-
"Cxcl15",
|
|
51
|
-
"Cxcl16",
|
|
52
|
-
"Cxcl17",
|
|
53
|
-
],
|
|
54
|
-
"CXCR": ["Cxcr1", "Cxcr2", "Cxcr3", "Cxcr4", "Cxcr5", "Cxcr6"],
|
|
55
|
-
"XCL": ["Xcl1"],
|
|
56
|
-
"XCR": ["Xcr1"],
|
|
57
|
-
"CX3CL": ["Cx3cl1"],
|
|
58
|
-
"CX3CR": ["Cx3cr1"],
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
mmu_t_signatures = {
|
|
62
|
-
'Cd3d', 'Cd8a', 'Cd4', 'Sell',
|
|
63
|
-
'Il7r', 'Tcf7', 'Ifng', 'Gzmb',
|
|
64
|
-
'Tox', 'Pdcd1', 'Havcr2', 'Lag3',
|
|
65
|
-
'Mki67', 'Icos', 'Foxp3', 'Id2',
|
|
66
|
-
'Id3', 'Gata3', 'Tbx21', 'Cd69',
|
|
67
|
-
'Cxcr5', 'Bach1', 'Cxcr5', 'Xcl1',
|
|
68
|
-
'Etv6', 'Ikzf3', 'Zbed2', 'Batf',
|
|
69
|
-
'Klrb1c', 'Klrg1', 'Prf1'
|
|
70
|
-
}
|