mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-24 06:39:58 -07:00
global: snapshot
This commit is contained in:
@@ -5,8 +5,8 @@ use serde::Serialize;
|
||||
|
||||
use super::{CohortName, Filter};
|
||||
|
||||
/// Year values
|
||||
pub const YEAR_VALUES: ByYear<Year> = ByYear {
|
||||
/// Class values
|
||||
pub const CLASS_VALUES: ByClass<Year> = ByClass {
|
||||
_2009: Year::new(2009),
|
||||
_2010: Year::new(2010),
|
||||
_2011: Year::new(2011),
|
||||
@@ -27,52 +27,52 @@ pub const YEAR_VALUES: ByYear<Year> = ByYear {
|
||||
_2026: Year::new(2026),
|
||||
};
|
||||
|
||||
/// Year filters
|
||||
pub const YEAR_FILTERS: ByYear<Filter> = ByYear {
|
||||
_2009: Filter::Year(YEAR_VALUES._2009),
|
||||
_2010: Filter::Year(YEAR_VALUES._2010),
|
||||
_2011: Filter::Year(YEAR_VALUES._2011),
|
||||
_2012: Filter::Year(YEAR_VALUES._2012),
|
||||
_2013: Filter::Year(YEAR_VALUES._2013),
|
||||
_2014: Filter::Year(YEAR_VALUES._2014),
|
||||
_2015: Filter::Year(YEAR_VALUES._2015),
|
||||
_2016: Filter::Year(YEAR_VALUES._2016),
|
||||
_2017: Filter::Year(YEAR_VALUES._2017),
|
||||
_2018: Filter::Year(YEAR_VALUES._2018),
|
||||
_2019: Filter::Year(YEAR_VALUES._2019),
|
||||
_2020: Filter::Year(YEAR_VALUES._2020),
|
||||
_2021: Filter::Year(YEAR_VALUES._2021),
|
||||
_2022: Filter::Year(YEAR_VALUES._2022),
|
||||
_2023: Filter::Year(YEAR_VALUES._2023),
|
||||
_2024: Filter::Year(YEAR_VALUES._2024),
|
||||
_2025: Filter::Year(YEAR_VALUES._2025),
|
||||
_2026: Filter::Year(YEAR_VALUES._2026),
|
||||
/// Class filters
|
||||
pub const CLASS_FILTERS: ByClass<Filter> = ByClass {
|
||||
_2009: Filter::Class(CLASS_VALUES._2009),
|
||||
_2010: Filter::Class(CLASS_VALUES._2010),
|
||||
_2011: Filter::Class(CLASS_VALUES._2011),
|
||||
_2012: Filter::Class(CLASS_VALUES._2012),
|
||||
_2013: Filter::Class(CLASS_VALUES._2013),
|
||||
_2014: Filter::Class(CLASS_VALUES._2014),
|
||||
_2015: Filter::Class(CLASS_VALUES._2015),
|
||||
_2016: Filter::Class(CLASS_VALUES._2016),
|
||||
_2017: Filter::Class(CLASS_VALUES._2017),
|
||||
_2018: Filter::Class(CLASS_VALUES._2018),
|
||||
_2019: Filter::Class(CLASS_VALUES._2019),
|
||||
_2020: Filter::Class(CLASS_VALUES._2020),
|
||||
_2021: Filter::Class(CLASS_VALUES._2021),
|
||||
_2022: Filter::Class(CLASS_VALUES._2022),
|
||||
_2023: Filter::Class(CLASS_VALUES._2023),
|
||||
_2024: Filter::Class(CLASS_VALUES._2024),
|
||||
_2025: Filter::Class(CLASS_VALUES._2025),
|
||||
_2026: Filter::Class(CLASS_VALUES._2026),
|
||||
};
|
||||
|
||||
/// Year names
|
||||
pub const YEAR_NAMES: ByYear<CohortName> = ByYear {
|
||||
_2009: CohortName::new("year_2009", "2009", "Year 2009"),
|
||||
_2010: CohortName::new("year_2010", "2010", "Year 2010"),
|
||||
_2011: CohortName::new("year_2011", "2011", "Year 2011"),
|
||||
_2012: CohortName::new("year_2012", "2012", "Year 2012"),
|
||||
_2013: CohortName::new("year_2013", "2013", "Year 2013"),
|
||||
_2014: CohortName::new("year_2014", "2014", "Year 2014"),
|
||||
_2015: CohortName::new("year_2015", "2015", "Year 2015"),
|
||||
_2016: CohortName::new("year_2016", "2016", "Year 2016"),
|
||||
_2017: CohortName::new("year_2017", "2017", "Year 2017"),
|
||||
_2018: CohortName::new("year_2018", "2018", "Year 2018"),
|
||||
_2019: CohortName::new("year_2019", "2019", "Year 2019"),
|
||||
_2020: CohortName::new("year_2020", "2020", "Year 2020"),
|
||||
_2021: CohortName::new("year_2021", "2021", "Year 2021"),
|
||||
_2022: CohortName::new("year_2022", "2022", "Year 2022"),
|
||||
_2023: CohortName::new("year_2023", "2023", "Year 2023"),
|
||||
_2024: CohortName::new("year_2024", "2024", "Year 2024"),
|
||||
_2025: CohortName::new("year_2025", "2025", "Year 2025"),
|
||||
_2026: CohortName::new("year_2026", "2026", "Year 2026"),
|
||||
/// Class names
|
||||
pub const CLASS_NAMES: ByClass<CohortName> = ByClass {
|
||||
_2009: CohortName::new("class_2009", "2009", "Class 2009"),
|
||||
_2010: CohortName::new("class_2010", "2010", "Class 2010"),
|
||||
_2011: CohortName::new("class_2011", "2011", "Class 2011"),
|
||||
_2012: CohortName::new("class_2012", "2012", "Class 2012"),
|
||||
_2013: CohortName::new("class_2013", "2013", "Class 2013"),
|
||||
_2014: CohortName::new("class_2014", "2014", "Class 2014"),
|
||||
_2015: CohortName::new("class_2015", "2015", "Class 2015"),
|
||||
_2016: CohortName::new("class_2016", "2016", "Class 2016"),
|
||||
_2017: CohortName::new("class_2017", "2017", "Class 2017"),
|
||||
_2018: CohortName::new("class_2018", "2018", "Class 2018"),
|
||||
_2019: CohortName::new("class_2019", "2019", "Class 2019"),
|
||||
_2020: CohortName::new("class_2020", "2020", "Class 2020"),
|
||||
_2021: CohortName::new("class_2021", "2021", "Class 2021"),
|
||||
_2022: CohortName::new("class_2022", "2022", "Class 2022"),
|
||||
_2023: CohortName::new("class_2023", "2023", "Class 2023"),
|
||||
_2024: CohortName::new("class_2024", "2024", "Class 2024"),
|
||||
_2025: CohortName::new("class_2025", "2025", "Class 2025"),
|
||||
_2026: CohortName::new("class_2026", "2026", "Class 2026"),
|
||||
};
|
||||
|
||||
#[derive(Default, Clone, Traversable, Serialize)]
|
||||
pub struct ByYear<T> {
|
||||
pub struct ByClass<T> {
|
||||
pub _2009: T,
|
||||
pub _2010: T,
|
||||
pub _2011: T,
|
||||
@@ -93,19 +93,19 @@ pub struct ByYear<T> {
|
||||
pub _2026: T,
|
||||
}
|
||||
|
||||
impl ByYear<CohortName> {
|
||||
impl ByClass<CohortName> {
|
||||
pub const fn names() -> &'static Self {
|
||||
&YEAR_NAMES
|
||||
&CLASS_NAMES
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> ByYear<T> {
|
||||
impl<T> ByClass<T> {
|
||||
pub fn new<F>(mut create: F) -> Self
|
||||
where
|
||||
F: FnMut(Filter, &'static str) -> T,
|
||||
{
|
||||
let f = YEAR_FILTERS;
|
||||
let n = YEAR_NAMES;
|
||||
let f = CLASS_FILTERS;
|
||||
let n = CLASS_NAMES;
|
||||
Self {
|
||||
_2009: create(f._2009, n._2009.id),
|
||||
_2010: create(f._2010, n._2010.id),
|
||||
@@ -132,8 +132,8 @@ impl<T> ByYear<T> {
|
||||
where
|
||||
F: FnMut(Filter, &'static str) -> Result<T, E>,
|
||||
{
|
||||
let f = YEAR_FILTERS;
|
||||
let n = YEAR_NAMES;
|
||||
let f = CLASS_FILTERS;
|
||||
let n = CLASS_NAMES;
|
||||
Ok(Self {
|
||||
_2009: create(f._2009, n._2009.id)?,
|
||||
_2010: create(f._2010, n._2010.id)?,
|
||||
@@ -24,14 +24,14 @@ impl CohortContext {
|
||||
/// Build full name for a filter, adding prefix only for Time/Amount filters.
|
||||
///
|
||||
/// Prefix rules:
|
||||
/// - No prefix: `All`, `Term`, `Epoch`, `Year`, `Type`
|
||||
/// - No prefix: `All`, `Term`, `Epoch`, `Class`, `Type`
|
||||
/// - Context prefix: `Time`, `Amount`
|
||||
pub fn full_name(&self, filter: &Filter, name: &str) -> String {
|
||||
match filter {
|
||||
Filter::All
|
||||
| Filter::Term(_)
|
||||
| Filter::Epoch(_)
|
||||
| Filter::Year(_)
|
||||
| Filter::Class(_)
|
||||
| Filter::Type(_) => name.to_string(),
|
||||
Filter::Time(_) | Filter::Amount(_) => self.prefixed(name),
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ pub enum Filter {
|
||||
Time(TimeFilter),
|
||||
Amount(AmountFilter),
|
||||
Epoch(HalvingEpoch),
|
||||
Year(Year),
|
||||
Class(Year),
|
||||
Type(OutputType),
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ mod by_spendable_type;
|
||||
mod by_term;
|
||||
mod by_type;
|
||||
mod by_unspendable_type;
|
||||
mod by_year;
|
||||
mod by_class;
|
||||
mod cohort_context;
|
||||
mod cohort_name;
|
||||
mod filter;
|
||||
@@ -41,7 +41,7 @@ pub use by_spendable_type::*;
|
||||
pub use by_term::*;
|
||||
pub use by_type::*;
|
||||
pub use by_unspendable_type::*;
|
||||
pub use by_year::*;
|
||||
pub use by_class::*;
|
||||
pub use cohort_context::*;
|
||||
pub use cohort_name::*;
|
||||
pub use filter::*;
|
||||
|
||||
@@ -3,7 +3,7 @@ use rayon::prelude::*;
|
||||
|
||||
use crate::{
|
||||
ByAgeRange, ByAmountRange, ByEpoch, ByGreatEqualAmount, ByLowerThanAmount, ByMaxAge, ByMinAge,
|
||||
BySpendableType, ByTerm, ByYear, Filter,
|
||||
ByClass, BySpendableType, ByTerm, Filter,
|
||||
};
|
||||
|
||||
#[derive(Default, Clone, Traversable)]
|
||||
@@ -11,7 +11,7 @@ pub struct UTXOGroups<T> {
|
||||
pub all: T,
|
||||
pub age_range: ByAgeRange<T>,
|
||||
pub epoch: ByEpoch<T>,
|
||||
pub year: ByYear<T>,
|
||||
pub class: ByClass<T>,
|
||||
pub min_age: ByMinAge<T>,
|
||||
pub ge_amount: ByGreatEqualAmount<T>,
|
||||
pub amount_range: ByAmountRange<T>,
|
||||
@@ -30,7 +30,7 @@ impl<T> UTXOGroups<T> {
|
||||
all: create(Filter::All, ""),
|
||||
age_range: ByAgeRange::new(&mut create),
|
||||
epoch: ByEpoch::new(&mut create),
|
||||
year: ByYear::new(&mut create),
|
||||
class: ByClass::new(&mut create),
|
||||
min_age: ByMinAge::new(&mut create),
|
||||
ge_amount: ByGreatEqualAmount::new(&mut create),
|
||||
amount_range: ByAmountRange::new(&mut create),
|
||||
@@ -50,7 +50,7 @@ impl<T> UTXOGroups<T> {
|
||||
.chain(self.ge_amount.iter())
|
||||
.chain(self.age_range.iter())
|
||||
.chain(self.epoch.iter())
|
||||
.chain(self.year.iter())
|
||||
.chain(self.class.iter())
|
||||
.chain(self.amount_range.iter())
|
||||
.chain(self.lt_amount.iter())
|
||||
.chain(self.type_.iter())
|
||||
@@ -65,7 +65,7 @@ impl<T> UTXOGroups<T> {
|
||||
.chain(self.ge_amount.iter_mut())
|
||||
.chain(self.age_range.iter_mut())
|
||||
.chain(self.epoch.iter_mut())
|
||||
.chain(self.year.iter_mut())
|
||||
.chain(self.class.iter_mut())
|
||||
.chain(self.amount_range.iter_mut())
|
||||
.chain(self.lt_amount.iter_mut())
|
||||
.chain(self.type_.iter_mut())
|
||||
@@ -83,7 +83,7 @@ impl<T> UTXOGroups<T> {
|
||||
.chain(self.ge_amount.par_iter_mut())
|
||||
.chain(self.age_range.par_iter_mut())
|
||||
.chain(self.epoch.par_iter_mut())
|
||||
.chain(self.year.par_iter_mut())
|
||||
.chain(self.class.par_iter_mut())
|
||||
.chain(self.amount_range.par_iter_mut())
|
||||
.chain(self.lt_amount.par_iter_mut())
|
||||
.chain(self.type_.par_iter_mut())
|
||||
@@ -93,7 +93,7 @@ impl<T> UTXOGroups<T> {
|
||||
self.age_range
|
||||
.iter()
|
||||
.chain(self.epoch.iter())
|
||||
.chain(self.year.iter())
|
||||
.chain(self.class.iter())
|
||||
.chain(self.amount_range.iter())
|
||||
.chain(self.type_.iter())
|
||||
}
|
||||
@@ -102,7 +102,7 @@ impl<T> UTXOGroups<T> {
|
||||
self.age_range
|
||||
.iter_mut()
|
||||
.chain(self.epoch.iter_mut())
|
||||
.chain(self.year.iter_mut())
|
||||
.chain(self.class.iter_mut())
|
||||
.chain(self.amount_range.iter_mut())
|
||||
.chain(self.type_.iter_mut())
|
||||
}
|
||||
@@ -114,7 +114,7 @@ impl<T> UTXOGroups<T> {
|
||||
self.age_range
|
||||
.par_iter_mut()
|
||||
.chain(self.epoch.par_iter_mut())
|
||||
.chain(self.year.par_iter_mut())
|
||||
.chain(self.class.par_iter_mut())
|
||||
.chain(self.amount_range.par_iter_mut())
|
||||
.chain(self.type_.par_iter_mut())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user