Push zunrplorkwkt #70
Generated
+4
-4
@@ -1600,7 +1600,7 @@ dependencies = [
|
|||||||
"indicatif",
|
"indicatif",
|
||||||
"ndarray",
|
"ndarray",
|
||||||
"obicompactvec",
|
"obicompactvec",
|
||||||
"obikpartition",
|
"obikpartitionner",
|
||||||
"obikseq",
|
"obikseq",
|
||||||
"obilayeredmap",
|
"obilayeredmap",
|
||||||
"obiread",
|
"obiread",
|
||||||
@@ -1626,7 +1626,7 @@ dependencies = [
|
|||||||
"obidebruinj",
|
"obidebruinj",
|
||||||
"obifastwrite",
|
"obifastwrite",
|
||||||
"obikindex",
|
"obikindex",
|
||||||
"obikpartition",
|
"obikpartitionner",
|
||||||
"obikphylo",
|
"obikphylo",
|
||||||
"obikrope",
|
"obikrope",
|
||||||
"obikseq",
|
"obikseq",
|
||||||
@@ -1648,7 +1648,7 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "obikpartition"
|
name = "obikpartitionner"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cacheline-ef",
|
"cacheline-ef",
|
||||||
@@ -1685,7 +1685,7 @@ dependencies = [
|
|||||||
"ndarray",
|
"ndarray",
|
||||||
"obicompactvec",
|
"obicompactvec",
|
||||||
"obikindex",
|
"obikindex",
|
||||||
"obikpartition",
|
"obikpartitionner",
|
||||||
"obikseq",
|
"obikseq",
|
||||||
"obilayeredmap",
|
"obilayeredmap",
|
||||||
"obipipeline",
|
"obipipeline",
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
members = ["obikseq", "obiread", "obiskbuilder", "obifastwrite", "obikmer","obikrope","obipipeline", "obikpartition","obiskio","obidebruinj","obilayeredmap", "obicompactvec", "obisys", "obikindex", "obitaxonomy", "obikentropy", "obikphylo"]
|
members = ["obikseq", "obiread", "obiskbuilder", "obifastwrite", "obikmer","obikrope","obipipeline", "obikpartitionner","obiskio","obidebruinj","obilayeredmap", "obicompactvec", "obisys", "obikindex", "obitaxonomy", "obikentropy", "obikphylo"]
|
||||||
[profile.release]
|
[profile.release]
|
||||||
debug = 1
|
debug = 1
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ pub fn pack_bit_matrix(dir: &Path) -> io::Result<()> {
|
|||||||
// A `matrix.pbmx` can already exist here even though columnar data is
|
// A `matrix.pbmx` can already exist here even though columnar data is
|
||||||
// still pending — e.g. copied verbatim from a merge's base source
|
// still pending — e.g. copied verbatim from a merge's base source
|
||||||
// before this layer was widened with more genome columns (see
|
// before this layer was widened with more genome columns (see
|
||||||
// `obikpartition::merge_partition`). Only skip (re-)packing if the
|
// `obikpartitionner::merge_partition`). Only skip (re-)packing if the
|
||||||
// existing file already reflects the current column count; otherwise
|
// existing file already reflects the current column count; otherwise
|
||||||
// the columnar files are newer and must be (re-)packed, overwriting the
|
// the columnar files are newer and must be (re-)packed, overwriting the
|
||||||
// stale one — never silently discarded as "leftover cleanup".
|
// stale one — never silently discarded as "leftover cleanup".
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ pub fn pack_compact_int_matrix(dir: &Path) -> io::Result<()> {
|
|||||||
// A `matrix.pcmx` can already exist here even though columnar data is
|
// A `matrix.pcmx` can already exist here even though columnar data is
|
||||||
// still pending — e.g. copied verbatim from a merge's base source
|
// still pending — e.g. copied verbatim from a merge's base source
|
||||||
// before this layer was widened with more genome columns (see
|
// before this layer was widened with more genome columns (see
|
||||||
// `obikpartition::merge_partition`). Only skip (re-)packing if the
|
// `obikpartitionner::merge_partition`). Only skip (re-)packing if the
|
||||||
// existing file already reflects the current column count; otherwise
|
// existing file already reflects the current column count; otherwise
|
||||||
// the columnar files are newer and must be (re-)packed, overwriting the
|
// the columnar files are newer and must be (re-)packed, overwriting the
|
||||||
// stale one — never silently discarded as "leftover cleanup".
|
// stale one — never silently discarded as "leftover cleanup".
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ edition = "2024"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
obikseq = { path = "../obikseq" }
|
obikseq = { path = "../obikseq" }
|
||||||
obikpartition = { path = "../obikpartition" }
|
obikpartitionner = { path = "../obikpartitionner" }
|
||||||
obitaxonomy = { path = "../obitaxonomy" }
|
obitaxonomy = { path = "../obitaxonomy" }
|
||||||
obiskio = { path = "../obiskio" }
|
obiskio = { path = "../obiskio" }
|
||||||
obisys = { path = "../obisys" }
|
obisys = { path = "../obisys" }
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ use rayon::prelude::*;
|
|||||||
|
|
||||||
use crate::error::{OKIError, OKIResult};
|
use crate::error::{OKIError, OKIResult};
|
||||||
use crate::index::KmerIndex;
|
use crate::index::KmerIndex;
|
||||||
use obikpartition::KmerFilter;
|
use obikpartitionner::KmerFilter;
|
||||||
|
|
||||||
impl KmerIndex {
|
impl KmerIndex {
|
||||||
/// Write a CSV table of all indexed kmers to `out`.
|
/// Write a CSV table of all indexed kmers to `out`.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use std::collections::BTreeMap;
|
|||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use obikpartition::{KmerPartitions, KmerSpectrum, PARTITIONS_SUBDIR};
|
use obikpartitionner::{KmerPartitions, KmerSpectrum, PARTITIONS_SUBDIR};
|
||||||
use obisys::{Reporter, Stage, progress_bar};
|
use obisys::{Reporter, Stage, progress_bar};
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
@@ -157,6 +157,33 @@ impl KmerIndex {
|
|||||||
pub fn minimizer_size(&self) -> usize {
|
pub fn minimizer_size(&self) -> usize {
|
||||||
self.meta.config.minimizer_size
|
self.meta.config.minimizer_size
|
||||||
}
|
}
|
||||||
|
pub fn n_bits(&self) -> usize {
|
||||||
|
self.meta.config.n_bits
|
||||||
|
}
|
||||||
|
pub fn with_counts(&self) -> bool {
|
||||||
|
self.meta.config.with_counts
|
||||||
|
}
|
||||||
|
pub fn evidence_mode(&self) -> &obilayeredmap::IndexMode {
|
||||||
|
&self.meta.config.evidence
|
||||||
|
}
|
||||||
|
/// Coarse evidence mode (`Exact`/`Approx`/`Hybrid`, no `b`/`z`
|
||||||
|
/// parameters) — see [`evidence_mode`](Self::evidence_mode) for the
|
||||||
|
/// full `IndexMode`. Same discriminant as `Layer::evidence_kind`, so a
|
||||||
|
/// layer's own evidence kind can be compared directly against the
|
||||||
|
/// index's.
|
||||||
|
pub fn evidence_kind(&self) -> obilayeredmap::EvidenceKind {
|
||||||
|
match self.meta.config.evidence {
|
||||||
|
obilayeredmap::IndexMode::Exact => obilayeredmap::EvidenceKind::Exact,
|
||||||
|
obilayeredmap::IndexMode::Approx { .. } => obilayeredmap::EvidenceKind::Approx,
|
||||||
|
obilayeredmap::IndexMode::Hybrid { .. } => obilayeredmap::EvidenceKind::Hybrid,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn block_bits(&self) -> u8 {
|
||||||
|
self.meta.config.block_bits
|
||||||
|
}
|
||||||
|
pub fn genomes(&self) -> &[GenomeInfo] {
|
||||||
|
&self.meta.genomes
|
||||||
|
}
|
||||||
pub fn n_partitions(&self) -> usize {
|
pub fn n_partitions(&self) -> usize {
|
||||||
self.partition.n_partitions()
|
self.partition.n_partitions()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ use crate::index::KmerIndex;
|
|||||||
use crate::meta::{GenomeInfo, IndexMeta};
|
use crate::meta::{GenomeInfo, IndexMeta};
|
||||||
use crate::state::{IndexState, SENTINEL_INDEXED};
|
use crate::state::{IndexState, SENTINEL_INDEXED};
|
||||||
|
|
||||||
pub use obikpartition::MergeMode;
|
pub use obikpartitionner::MergeMode;
|
||||||
|
|
||||||
// ── per-partition diagnostic record ──────────────────────────────────────────
|
// ── per-partition diagnostic record ──────────────────────────────────────────
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ impl KmerIndex {
|
|||||||
let block_bits = dst.meta.config.block_bits;
|
let block_bits = dst.meta.config.block_bits;
|
||||||
|
|
||||||
// Pre-build source list once (avoid rebuilding per partition)
|
// Pre-build source list once (avoid rebuilding per partition)
|
||||||
let srcs: Vec<(&obikpartition::KmerPartitions, usize)> = remaining_sources
|
let srcs: Vec<(&obikpartitionner::KmerPartitions, usize)> = remaining_sources
|
||||||
.iter()
|
.iter()
|
||||||
.map(|s| (&s.partition, s.meta.genomes.len()))
|
.map(|s| (&s.partition, s.meta.genomes.len()))
|
||||||
.collect();
|
.collect();
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use obikpartition::GroupQuorumFilter;
|
use obikpartitionner::GroupQuorumFilter;
|
||||||
use obitaxonomy::{TaxPath, TaxPattern};
|
use obitaxonomy::{TaxPath, TaxPattern};
|
||||||
|
|
||||||
use crate::meta::{GenomeInfo, IndexMeta};
|
use crate::meta::{GenomeInfo, IndexMeta};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use obikpartition::{KmerFilter, MergeMode};
|
use obikpartitionner::{KmerFilter, MergeMode};
|
||||||
use obisys::{Reporter, Stage, progress_bar};
|
use obisys::{Reporter, Stage, progress_bar};
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obilayeredmap::{IndexMode, layer::Layer};
|
use obilayeredmap::{IndexMode, layer::Layer};
|
||||||
use obisys::{Reporter, Stage, progress_bar};
|
use obisys::{Reporter, Stage, progress_bar};
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use obikpartition::{KmerPartitions, OutputCol};
|
use obikpartitionner::{KmerPartitions, OutputCol};
|
||||||
use obisys::{Reporter, Stage, progress_bar};
|
use obisys::{Reporter, Stage, progress_bar};
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ obifastwrite = { path = "../obifastwrite" }
|
|||||||
obidebruinj = { path = "../obidebruinj" }
|
obidebruinj = { path = "../obidebruinj" }
|
||||||
obipipeline = { path = "../obipipeline" }
|
obipipeline = { path = "../obipipeline" }
|
||||||
obikrope = { path = "../obikrope" }
|
obikrope = { path = "../obikrope" }
|
||||||
obikpartition = { path = "../obikpartition" }
|
obikpartitionner = { path = "../obikpartitionner" }
|
||||||
obisys = { path = "../obisys" }
|
obisys = { path = "../obisys" }
|
||||||
obiskio = { path = "../obiskio" }
|
obiskio = { path = "../obiskio" }
|
||||||
obikindex = { path = "../obikindex", default-features = false }
|
obikindex = { path = "../obikindex", default-features = false }
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use std::path::PathBuf;
|
|||||||
|
|
||||||
use clap::Args;
|
use clap::Args;
|
||||||
use obikindex::{KmerIndex, MergeMode};
|
use obikindex::{KmerIndex, MergeMode};
|
||||||
use obikpartition::filter::{MaxTotalCount, MinComplexity, MinTotalCount};
|
use obikpartitionner::filter::{MaxTotalCount, MinComplexity, MinTotalCount};
|
||||||
use obisys::Reporter;
|
use obisys::Reporter;
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use clap::Args;
|
use clap::Args;
|
||||||
use obikindex::{GroupFilterParams, IndexMeta, MetaPred};
|
use obikindex::{GroupFilterParams, IndexMeta, MetaPred};
|
||||||
use obikpartition::KmerFilter;
|
use obikpartitionner::KmerFilter;
|
||||||
|
|
||||||
/// CLI args for ingroup/outgroup filtering — embeddable in any command via `#[command(flatten)]`.
|
/// CLI args for ingroup/outgroup filtering — embeddable in any command via `#[command(flatten)]`.
|
||||||
#[derive(Args)]
|
#[derive(Args)]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use obikpartition::KmerDesc;
|
use obikpartitionner::KmerDesc;
|
||||||
use obikseq::CanonicalKmer;
|
use obikseq::CanonicalKmer;
|
||||||
use obiread::record::SeqRecord;
|
use obiread::record::SeqRecord;
|
||||||
use obiskbuilder::SuperKmerIter;
|
use obiskbuilder::SuperKmerIter;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
use obikindex::KmerIndex;
|
use obikindex::KmerIndex;
|
||||||
use obikpartition::{KmerDesc, QueryHit, QueryStats};
|
use obikpartitionner::{KmerDesc, QueryHit, QueryStats};
|
||||||
use obikrope::Rope;
|
use obikrope::Rope;
|
||||||
use obikseq::CanonicalKmer;
|
use obikseq::CanonicalKmer;
|
||||||
use obiread::record::parse_chunk;
|
use obiread::record::parse_chunk;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use std::path::PathBuf;
|
|||||||
|
|
||||||
use clap::{Args, ValueEnum};
|
use clap::{Args, ValueEnum};
|
||||||
use obikindex::{IndexMeta, KmerIndex};
|
use obikindex::{IndexMeta, KmerIndex};
|
||||||
use obikpartition::{AggOp, OutputCol};
|
use obikpartitionner::{AggOp, OutputCol};
|
||||||
use obisys::Reporter;
|
use obisys::Reporter;
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use std::sync::Arc;
|
|||||||
use std::sync::atomic::{AtomicU32, AtomicU64, Ordering};
|
use std::sync::atomic::{AtomicU32, AtomicU64, Ordering};
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obipipeline::{ThrottleGuard, Throttled, throttle};
|
use obipipeline::{ThrottleGuard, Throttled, throttle};
|
||||||
use obiread::NucPage;
|
use obiread::NucPage;
|
||||||
use obisys::spinner;
|
use obisys::spinner;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "obikpartition"
|
name = "obikpartitionner"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
+1
-1
@@ -197,7 +197,7 @@ impl KmerPartitions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Partition `i`'s metadata (layer count, evidence mode) — the single
|
/// Partition `i`'s metadata (layer count, evidence mode) — the single
|
||||||
/// entry point for this, so that callers outside `obikpartition`
|
/// entry point for this, so that callers outside `obikpartitionner`
|
||||||
/// never need to know it's a `meta.json` loaded via
|
/// never need to know it's a `meta.json` loaded via
|
||||||
/// `obilayeredmap::meta::PartitionMeta`, nor handle its own recovery
|
/// `obilayeredmap::meta::PartitionMeta`, nor handle its own recovery
|
||||||
/// path for indexes built before that file existed (see
|
/// path for indexes built before that file existed (see
|
||||||
@@ -6,7 +6,7 @@ edition = "2024"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
obikindex = { path = "../obikindex", default-features = false }
|
obikindex = { path = "../obikindex", default-features = false }
|
||||||
obikseq = { path = "../obikseq" }
|
obikseq = { path = "../obikseq" }
|
||||||
obikpartition = { path = "../obikpartition" }
|
obikpartitionner = { path = "../obikpartitionner" }
|
||||||
obiskio = { path = "../obiskio" }
|
obiskio = { path = "../obiskio" }
|
||||||
obisys = { path = "../obisys" }
|
obisys = { path = "../obisys" }
|
||||||
obicompactvec = { path = "../obicompactvec" }
|
obicompactvec = { path = "../obicompactvec" }
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obisys::progress_bar;
|
use obisys::progress_bar;
|
||||||
|
|
||||||
use obikindex::KmerIndex;
|
use obikindex::KmerIndex;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use std::sync::atomic::Ordering;
|
|||||||
|
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
|
|
||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obikseq::CanonicalKmer;
|
use obikseq::CanonicalKmer;
|
||||||
use obilayeredmap::MphfLayer;
|
use obilayeredmap::MphfLayer;
|
||||||
use obilayeredmap::meta::IndexMode;
|
use obilayeredmap::meta::IndexMode;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use rayon::prelude::*;
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use obicompactvec::{PersistentBitMatrix, PersistentCompactIntMatrix};
|
use obicompactvec::{PersistentBitMatrix, PersistentCompactIntMatrix};
|
||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obikseq::CanonicalKmer;
|
use obikseq::CanonicalKmer;
|
||||||
use obilayeredmap::meta::IndexMode;
|
use obilayeredmap::meta::IndexMode;
|
||||||
use obilayeredmap::{Layer, OLMResult};
|
use obilayeredmap::{Layer, OLMResult};
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use ndarray::Array2;
|
use ndarray::Array2;
|
||||||
|
|
||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obisys::progress_bar;
|
use obisys::progress_bar;
|
||||||
|
|
||||||
use obikindex::KmerIndex;
|
use obikindex::KmerIndex;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use ndarray::Array2;
|
use ndarray::Array2;
|
||||||
|
|
||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obisys::progress_bar;
|
use obisys::progress_bar;
|
||||||
|
|
||||||
use obikindex::KmerIndex;
|
use obikindex::KmerIndex;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ use std::io::{BufWriter, Write};
|
|||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obisys::progress_bar;
|
use obisys::progress_bar;
|
||||||
|
|
||||||
use obikindex::KmerIndex;
|
use obikindex::KmerIndex;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use ndarray::Array2;
|
use ndarray::Array2;
|
||||||
|
|
||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obisys::progress_bar;
|
use obisys::progress_bar;
|
||||||
|
|
||||||
use obikindex::KmerIndex;
|
use obikindex::KmerIndex;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
|
|
||||||
use obikpartition::KmerPartitions;
|
use obikpartitionner::KmerPartitions;
|
||||||
use obisys::progress_bar;
|
use obisys::progress_bar;
|
||||||
|
|
||||||
use obikindex::KmerIndex;
|
use obikindex::KmerIndex;
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ pub trait LayerData: Sized {
|
|||||||
///
|
///
|
||||||
/// `obilayeredmap` operates within a single partition's index root; it has
|
/// `obilayeredmap` operates within a single partition's index root; it has
|
||||||
/// no notion of "partition" at all. Turning a partition number into that
|
/// no notion of "partition" at all. Turning a partition number into that
|
||||||
/// root is `obikpartition::KmerPartition::part_dir`'s job, one layer up
|
/// root is `obikpartitionner::KmerPartition::part_dir`'s job, one layer up
|
||||||
/// — callers here only ever name a layer *number*, never build the path
|
/// — callers here only ever name a layer *number*, never build the path
|
||||||
/// themselves.
|
/// themselves.
|
||||||
pub fn layer_dir(root: &Path, i: usize) -> PathBuf {
|
pub fn layer_dir(root: &Path, i: usize) -> PathBuf {
|
||||||
|
|||||||
Reference in New Issue
Block a user