Skip to content

Commit

Permalink
update anndata_rs
Browse files Browse the repository at this point in the history
  • Loading branch information
kaizhang committed May 27, 2024
1 parent 3cbfb1a commit fc4b912
Show file tree
Hide file tree
Showing 5 changed files with 158 additions and 140 deletions.
8 changes: 4 additions & 4 deletions snapatac2-core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "snapatac2-core"
version = "2.0.0"
version = "2.0.1"
edition = "2021"
authors = ["Kai Zhang <[email protected]>"]
description = "Rust APIs"
Expand All @@ -10,7 +10,7 @@ homepage = "https://github.com/"
keywords = ["single-cell", "biology"]

[dependencies]
anndata = "0.3.3"
anndata = "0.4.1"
anyhow = "1.0"
bigtools = { version = "0.4", features = ["read", "write"] }
bed-utils = "0.4.1"
Expand All @@ -25,9 +25,9 @@ lexical = "6.1"
log = "0.4"
ndarray = { version = "0.15", features = ["rayon"] }
num = "0.4"
noodles = { version = "0.70", features = ["core", "bam", "sam", "gff", "gtf"] }
noodles = { version = "0.74", features = ["core", "bam", "sam", "gff", "gtf"] }
nalgebra-sparse = "0.9"
polars = { version = "0.39", features = ["ndarray", "dtype-categorical"] }
polars = { version = "0.40", features = ["ndarray", "dtype-categorical"] }
rayon = "1.10"
regex = "1.6"
serde = "1.0"
Expand Down
69 changes: 30 additions & 39 deletions snapatac2-core/src/preprocessing/count_data/matrix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::preprocessing::count_data::{
};
use super::coverage::CountingStrategy;

use anndata::{AnnDataOp, AxisArraysOp};
use anndata::{data::DataFrameIndex, AnnDataOp};
use indicatif::{ProgressIterator, ProgressStyle};
use polars::prelude::{NamedFrom, DataFrame, Series};
use anyhow::Result;
Expand Down Expand Up @@ -41,45 +41,33 @@ where
"[{elapsed}] {bar:40.cyan/blue} {pos:>7}/{len:7} (eta: {eta})"
).unwrap();

if adata.obsm().keys().contains(&"contact".into()) {
let data_iter = adata
.contact_count_iter(chunk_size)?
.with_resolution(bin_size)
.into_values::<u32>().map(|x| x.0).progress_with_style(style);
if let Some(adata_out) = out {
adata_out.set_x_from_iter(data_iter)?;
adata_out.set_obs_names(adata.obs_names())?;
adata_out.set_var_names(adata_out.n_vars().into())?;
} else {
adata.set_x_from_iter(data_iter)?;
adata.set_var_names(adata.n_vars().into())?;
}
} else {
let mut counts = adata
.get_count_iter(chunk_size)?
.with_resolution(bin_size)
.set_counting_strategy(counting_strategy);
let mut counts = adata
.get_count_iter(chunk_size)?
.with_resolution(bin_size)
.set_counting_strategy(counting_strategy);

if let Some(exclude_chroms) = exclude_chroms {
counts = counts.exclude(exclude_chroms);
}
if let Some(min_fragment_size) = min_fragment_size {
counts = counts.min_fragment_size(min_fragment_size);
}
if let Some(max_fragment_size) = max_fragment_size {
counts = counts.max_fragment_size(max_fragment_size);
}
if let Some(exclude_chroms) = exclude_chroms {
counts = counts.exclude(exclude_chroms);
}
if let Some(min_fragment_size) = min_fragment_size {
counts = counts.min_fragment_size(min_fragment_size);
}
if let Some(max_fragment_size) = max_fragment_size {
counts = counts.max_fragment_size(max_fragment_size);
}

let feature_names = counts.get_gindex().to_index().into();
let data_iter = counts.into_counts::<u32>().map(|x| x.0).progress_with_style(style);
if let Some(adata_out) = out {
adata_out.set_x_from_iter(data_iter)?;
adata_out.set_obs_names(adata.obs_names())?;
adata_out.set_var_names(feature_names)?;
} else {
adata.set_x_from_iter(data_iter)?;
adata.set_var_names(feature_names)?;
}
let feature_names: DataFrameIndex = counts.get_gindex().to_index().into();
let n_feat = feature_names.len();
let data_iter = counts.into_counts::<u32>().map(|x| x.0).progress_with_style(style);
if let Some(adata_out) = out {
adata_out.set_n_vars(n_feat)?;
adata_out.set_x_from_iter(data_iter)?;
adata_out.set_obs_names(adata.obs_names())?;
adata_out.set_var_names(feature_names)?;
} else {
adata.set_n_vars(n_feat)?;
adata.set_x_from_iter(data_iter)?;
adata.set_var_names(feature_names)?;
}
Ok(())
}
Expand Down Expand Up @@ -119,11 +107,14 @@ where
}
Box::new(counts.aggregate_counts_by(counter).map(|x| x.0))
};
let n_feat = feature_names.len();
if let Some(adata_out) = out {
adata_out.set_n_vars(n_feat)?;
adata_out.set_x_from_iter(data.progress_with_style(style))?;
adata_out.set_obs_names(adata.obs_names())?;
adata_out.set_var_names(feature_names.into())?;
} else {
adata.set_n_vars(n_feat)?;
adata.set_x_from_iter(data.progress_with_style(style))?;
adata.set_var_names(feature_names.into())?;
}
Expand Down Expand Up @@ -206,4 +197,4 @@ where
_ => panic!("id_type must be 'transcript' or 'gene'"),
}
Ok(())
}
}
Loading

0 comments on commit fc4b912

Please sign in to comment.