diff --git a/crates/brk_client/src/lib.rs b/crates/brk_client/src/lib.rs index c01123056..5535efe4e 100644 --- a/crates/brk_client/src/lib.rs +++ b/crates/brk_client/src/lib.rs @@ -3390,6 +3390,39 @@ impl PeriodAveragePricePattern { } } +/// Pattern struct for repeated tree structure. +pub struct ClassAveragePricePattern { + pub _2015: MetricPattern4, + pub _2016: MetricPattern4, + pub _2017: MetricPattern4, + pub _2018: MetricPattern4, + pub _2019: MetricPattern4, + pub _2020: MetricPattern4, + pub _2021: MetricPattern4, + pub _2022: MetricPattern4, + pub _2023: MetricPattern4, + pub _2024: MetricPattern4, + pub _2025: MetricPattern4, +} + +impl ClassAveragePricePattern { + pub fn new(client: Arc, base_path: String) -> Self { + Self { + _2015: MetricPattern4::new(client.clone(), format!("{base_path}_2015")), + _2016: MetricPattern4::new(client.clone(), format!("{base_path}_2016")), + _2017: MetricPattern4::new(client.clone(), format!("{base_path}_2017")), + _2018: MetricPattern4::new(client.clone(), format!("{base_path}_2018")), + _2019: MetricPattern4::new(client.clone(), format!("{base_path}_2019")), + _2020: MetricPattern4::new(client.clone(), format!("{base_path}_2020")), + _2021: MetricPattern4::new(client.clone(), format!("{base_path}_2021")), + _2022: MetricPattern4::new(client.clone(), format!("{base_path}_2022")), + _2023: MetricPattern4::new(client.clone(), format!("{base_path}_2023")), + _2024: MetricPattern4::new(client.clone(), format!("{base_path}_2024")), + _2025: MetricPattern4::new(client.clone(), format!("{base_path}_2025")), + } + } +} + /// Pattern struct for repeated tree structure. pub struct DollarsPattern { pub average: MetricPattern2, @@ -3424,39 +3457,6 @@ impl DollarsPattern { } } -/// Pattern struct for repeated tree structure. -pub struct ClassAveragePricePattern { - pub _2015: MetricPattern4, - pub _2016: MetricPattern4, - pub _2017: MetricPattern4, - pub _2018: MetricPattern4, - pub _2019: MetricPattern4, - pub _2020: MetricPattern4, - pub _2021: MetricPattern4, - pub _2022: MetricPattern4, - pub _2023: MetricPattern4, - pub _2024: MetricPattern4, - pub _2025: MetricPattern4, -} - -impl ClassAveragePricePattern { - pub fn new(client: Arc, base_path: String) -> Self { - Self { - _2015: MetricPattern4::new(client.clone(), format!("{base_path}_2015")), - _2016: MetricPattern4::new(client.clone(), format!("{base_path}_2016")), - _2017: MetricPattern4::new(client.clone(), format!("{base_path}_2017")), - _2018: MetricPattern4::new(client.clone(), format!("{base_path}_2018")), - _2019: MetricPattern4::new(client.clone(), format!("{base_path}_2019")), - _2020: MetricPattern4::new(client.clone(), format!("{base_path}_2020")), - _2021: MetricPattern4::new(client.clone(), format!("{base_path}_2021")), - _2022: MetricPattern4::new(client.clone(), format!("{base_path}_2022")), - _2023: MetricPattern4::new(client.clone(), format!("{base_path}_2023")), - _2024: MetricPattern4::new(client.clone(), format!("{base_path}_2024")), - _2025: MetricPattern4::new(client.clone(), format!("{base_path}_2025")), - } - } -} - /// Pattern struct for repeated tree structure. pub struct FullnessPattern { pub average: MetricPattern2, @@ -3731,6 +3731,84 @@ impl _0satsPattern { } } +/// Pattern struct for repeated tree structure. +pub struct _0satsPattern2 { + pub activity: ActivityPattern2, + pub cost_basis: CostBasisPattern, + pub outputs: OutputsPattern, + pub realized: RealizedPattern, + pub relative: RelativePattern4, + pub supply: SupplyPattern2, + pub unrealized: UnrealizedPattern, +} + +impl _0satsPattern2 { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + activity: ActivityPattern2::new(client.clone(), acc.clone()), + cost_basis: CostBasisPattern::new(client.clone(), acc.clone()), + outputs: OutputsPattern::new(client.clone(), acc.clone()), + realized: RealizedPattern::new(client.clone(), acc.clone()), + relative: RelativePattern4::new(client.clone(), _m(&acc, "supply_in")), + supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), + unrealized: UnrealizedPattern::new(client.clone(), acc.clone()), + } + } +} + +/// Pattern struct for repeated tree structure. +pub struct _100btcPattern { + pub activity: ActivityPattern2, + pub cost_basis: CostBasisPattern, + pub outputs: OutputsPattern, + pub realized: RealizedPattern, + pub relative: RelativePattern, + pub supply: SupplyPattern2, + pub unrealized: UnrealizedPattern, +} + +impl _100btcPattern { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + activity: ActivityPattern2::new(client.clone(), acc.clone()), + cost_basis: CostBasisPattern::new(client.clone(), acc.clone()), + outputs: OutputsPattern::new(client.clone(), acc.clone()), + realized: RealizedPattern::new(client.clone(), acc.clone()), + relative: RelativePattern::new(client.clone(), acc.clone()), + supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), + unrealized: UnrealizedPattern::new(client.clone(), acc.clone()), + } + } +} + +/// Pattern struct for repeated tree structure. +pub struct _10yPattern { + pub activity: ActivityPattern2, + pub cost_basis: CostBasisPattern, + pub outputs: OutputsPattern, + pub realized: RealizedPattern4, + pub relative: RelativePattern, + pub supply: SupplyPattern2, + pub unrealized: UnrealizedPattern, +} + +impl _10yPattern { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + activity: ActivityPattern2::new(client.clone(), acc.clone()), + cost_basis: CostBasisPattern::new(client.clone(), acc.clone()), + outputs: OutputsPattern::new(client.clone(), acc.clone()), + realized: RealizedPattern4::new(client.clone(), acc.clone()), + relative: RelativePattern::new(client.clone(), acc.clone()), + supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), + unrealized: UnrealizedPattern::new(client.clone(), acc.clone()), + } + } +} + /// Pattern struct for repeated tree structure. pub struct PeriodCagrPattern { pub _10y: MetricPattern4, @@ -3832,58 +3910,6 @@ impl _10yTo12yPattern { } } -/// Pattern struct for repeated tree structure. -pub struct _10yPattern { - pub activity: ActivityPattern2, - pub cost_basis: CostBasisPattern, - pub outputs: OutputsPattern, - pub realized: RealizedPattern4, - pub relative: RelativePattern, - pub supply: SupplyPattern2, - pub unrealized: UnrealizedPattern, -} - -impl _10yPattern { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - activity: ActivityPattern2::new(client.clone(), acc.clone()), - cost_basis: CostBasisPattern::new(client.clone(), acc.clone()), - outputs: OutputsPattern::new(client.clone(), acc.clone()), - realized: RealizedPattern4::new(client.clone(), acc.clone()), - relative: RelativePattern::new(client.clone(), acc.clone()), - supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), - unrealized: UnrealizedPattern::new(client.clone(), acc.clone()), - } - } -} - -/// Pattern struct for repeated tree structure. -pub struct _100btcPattern { - pub activity: ActivityPattern2, - pub cost_basis: CostBasisPattern, - pub outputs: OutputsPattern, - pub realized: RealizedPattern, - pub relative: RelativePattern, - pub supply: SupplyPattern2, - pub unrealized: UnrealizedPattern, -} - -impl _100btcPattern { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - activity: ActivityPattern2::new(client.clone(), acc.clone()), - cost_basis: CostBasisPattern::new(client.clone(), acc.clone()), - outputs: OutputsPattern::new(client.clone(), acc.clone()), - realized: RealizedPattern::new(client.clone(), acc.clone()), - relative: RelativePattern::new(client.clone(), acc.clone()), - supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), - unrealized: UnrealizedPattern::new(client.clone(), acc.clone()), - } - } -} - /// Pattern struct for repeated tree structure. pub struct UnrealizedPattern { pub neg_unrealized_loss: MetricPattern1, @@ -3919,32 +3945,6 @@ impl UnrealizedPattern { } } -/// Pattern struct for repeated tree structure. -pub struct _0satsPattern2 { - pub activity: ActivityPattern2, - pub cost_basis: CostBasisPattern, - pub outputs: OutputsPattern, - pub realized: RealizedPattern, - pub relative: RelativePattern4, - pub supply: SupplyPattern2, - pub unrealized: UnrealizedPattern, -} - -impl _0satsPattern2 { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - activity: ActivityPattern2::new(client.clone(), acc.clone()), - cost_basis: CostBasisPattern::new(client.clone(), acc.clone()), - outputs: OutputsPattern::new(client.clone(), acc.clone()), - realized: RealizedPattern::new(client.clone(), acc.clone()), - relative: RelativePattern4::new(client.clone(), _m(&acc, "supply_in")), - supply: SupplyPattern2::new(client.clone(), _m(&acc, "supply")), - unrealized: UnrealizedPattern::new(client.clone(), acc.clone()), - } - } -} - /// Pattern struct for repeated tree structure. pub struct ActivityPattern2 { pub coinblocks_destroyed: BlockCountPattern, @@ -3996,24 +3996,6 @@ impl SplitPattern2 { } } -/// Pattern struct for repeated tree structure. -pub struct CoinbasePattern { - pub bitcoin: FullnessPattern, - pub dollars: DollarsPattern, - pub sats: DollarsPattern, -} - -impl CoinbasePattern { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - bitcoin: FullnessPattern::new(client.clone(), _m(&acc, "btc")), - dollars: DollarsPattern::new(client.clone(), _m(&acc, "usd")), - sats: DollarsPattern::new(client.clone(), acc.clone()), - } - } -} - /// Pattern struct for repeated tree structure. pub struct CostBasisPattern2 { pub max: MetricPattern1, @@ -4034,24 +4016,6 @@ impl CostBasisPattern2 { } } -/// Pattern struct for repeated tree structure. -pub struct CoinbasePattern2 { - pub bitcoin: BlockCountPattern, - pub dollars: BlockCountPattern, - pub sats: BlockCountPattern, -} - -impl CoinbasePattern2 { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - bitcoin: BlockCountPattern::new(client.clone(), _m(&acc, "btc")), - dollars: BlockCountPattern::new(client.clone(), _m(&acc, "usd")), - sats: BlockCountPattern::new(client.clone(), acc.clone()), - } - } -} - /// Pattern struct for repeated tree structure. pub struct ActiveSupplyPattern { pub bitcoin: MetricPattern1, @@ -4089,23 +4053,41 @@ impl _2015Pattern { } /// Pattern struct for repeated tree structure. -pub struct UnclaimedRewardsPattern { - pub bitcoin: BitcoinPattern, +pub struct CoinbasePattern2 { + pub bitcoin: BlockCountPattern, pub dollars: BlockCountPattern, pub sats: BlockCountPattern, } -impl UnclaimedRewardsPattern { +impl CoinbasePattern2 { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - bitcoin: BitcoinPattern::new(client.clone(), _m(&acc, "btc")), + bitcoin: BlockCountPattern::new(client.clone(), _m(&acc, "btc")), dollars: BlockCountPattern::new(client.clone(), _m(&acc, "usd")), sats: BlockCountPattern::new(client.clone(), acc.clone()), } } } +/// Pattern struct for repeated tree structure. +pub struct CoinbasePattern { + pub bitcoin: FullnessPattern, + pub dollars: DollarsPattern, + pub sats: DollarsPattern, +} + +impl CoinbasePattern { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + bitcoin: FullnessPattern::new(client.clone(), _m(&acc, "btc")), + dollars: DollarsPattern::new(client.clone(), _m(&acc, "usd")), + sats: DollarsPattern::new(client.clone(), acc.clone()), + } + } +} + /// Pattern struct for repeated tree structure. pub struct SegwitAdoptionPattern { pub base: MetricPattern11, @@ -4125,17 +4107,19 @@ impl SegwitAdoptionPattern { } /// Pattern struct for repeated tree structure. -pub struct SupplyPattern2 { - pub halved: ActiveSupplyPattern, - pub total: ActiveSupplyPattern, +pub struct UnclaimedRewardsPattern { + pub bitcoin: BitcoinPattern, + pub dollars: BlockCountPattern, + pub sats: BlockCountPattern, } -impl SupplyPattern2 { +impl UnclaimedRewardsPattern { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - halved: ActiveSupplyPattern::new(client.clone(), _m(&acc, "half")), - total: ActiveSupplyPattern::new(client.clone(), acc.clone()), + bitcoin: BitcoinPattern::new(client.clone(), _m(&acc, "btc")), + dollars: BlockCountPattern::new(client.clone(), _m(&acc, "usd")), + sats: BlockCountPattern::new(client.clone(), acc.clone()), } } } @@ -4156,6 +4140,22 @@ impl CostBasisPattern { } } +/// Pattern struct for repeated tree structure. +pub struct _1dReturns1mSdPattern { + pub sd: MetricPattern4, + pub sma: MetricPattern4, +} + +impl _1dReturns1mSdPattern { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { + Self { + sd: MetricPattern4::new(client.clone(), _m(&acc, "sd")), + sma: MetricPattern4::new(client.clone(), _m(&acc, "sma")), + } + } +} + /// Pattern struct for repeated tree structure. pub struct RelativePattern4 { pub supply_in_loss_rel_to_own_supply: MetricPattern1, @@ -4179,17 +4179,32 @@ impl RelativePattern4 { } /// Pattern struct for repeated tree structure. -pub struct _1dReturns1mSdPattern { - pub sd: MetricPattern4, - pub sma: MetricPattern4, +pub struct SupplyPattern2 { + pub halved: ActiveSupplyPattern, + pub total: ActiveSupplyPattern, } -impl _1dReturns1mSdPattern { +impl SupplyPattern2 { /// Create a new pattern node with accumulated metric name. pub fn new(client: Arc, acc: String) -> Self { Self { - sd: MetricPattern4::new(client.clone(), _m(&acc, "sd")), - sma: MetricPattern4::new(client.clone(), _m(&acc, "sma")), + halved: ActiveSupplyPattern::new(client.clone(), _m(&acc, "half")), + total: ActiveSupplyPattern::new(client.clone(), acc.clone()), + } + } +} + +/// Pattern struct for repeated tree structure. +pub struct SatsPattern { + pub ohlc: MetricPattern1, + pub split: SplitPattern2, +} + +impl SatsPattern { + pub fn new(client: Arc, base_path: String) -> Self { + Self { + ohlc: MetricPattern1::new(client.clone(), format!("{base_path}_ohlc")), + split: SplitPattern2::new(client.clone(), format!("{base_path}_split")), } } } @@ -4227,16 +4242,15 @@ impl BlockCountPattern { } /// Pattern struct for repeated tree structure. -pub struct SatsPattern { - pub ohlc: MetricPattern1, - pub split: SplitPattern2, +pub struct RealizedPriceExtraPattern { + pub ratio: MetricPattern4, } -impl SatsPattern { - pub fn new(client: Arc, base_path: String) -> Self { +impl RealizedPriceExtraPattern { + /// Create a new pattern node with accumulated metric name. + pub fn new(client: Arc, acc: String) -> Self { Self { - ohlc: MetricPattern1::new(client.clone(), format!("{base_path}_ohlc")), - split: SplitPattern2::new(client.clone(), format!("{base_path}_split")), + ratio: MetricPattern4::new(client.clone(), _m(&acc, "ratio")), } } } @@ -4255,20 +4269,6 @@ impl OutputsPattern { } } -/// Pattern struct for repeated tree structure. -pub struct RealizedPriceExtraPattern { - pub ratio: MetricPattern4, -} - -impl RealizedPriceExtraPattern { - /// Create a new pattern node with accumulated metric name. - pub fn new(client: Arc, acc: String) -> Self { - Self { - ratio: MetricPattern4::new(client.clone(), _m(&acc, "ratio")), - } - } -} - // Metrics tree /// Metrics tree node. @@ -8297,7 +8297,7 @@ impl BrkClient { index: Index, start: Option, end: Option, - count: Option, + limit: Option<&str>, format: Option, ) -> Result> { let mut query = Vec::new(); @@ -8307,8 +8307,8 @@ impl BrkClient { if let Some(v) = end { query.push(format!("end={}", v)); } - if let Some(v) = count { - query.push(format!("count={}", v)); + if let Some(v) = limit { + query.push(format!("limit={}", v)); } if let Some(v) = format { query.push(format!("format={}", v)); @@ -8346,7 +8346,7 @@ impl BrkClient { index: Index, start: Option, end: Option, - count: Option, + limit: Option<&str>, format: Option, ) -> Result>> { let mut query = Vec::new(); @@ -8358,8 +8358,8 @@ impl BrkClient { if let Some(v) = end { query.push(format!("end={}", v)); } - if let Some(v) = count { - query.push(format!("count={}", v)); + if let Some(v) = limit { + query.push(format!("limit={}", v)); } if let Some(v) = format { query.push(format!("format={}", v)); diff --git a/crates/brk_types/src/datarange.rs b/crates/brk_types/src/datarange.rs index 69f2e35a4..97c675471 100644 --- a/crates/brk_types/src/datarange.rs +++ b/crates/brk_types/src/datarange.rs @@ -1,7 +1,7 @@ use schemars::JsonSchema; use serde::Deserialize; -use crate::{de_unquote_i64, de_unquote_usize}; +use crate::{de_unquote_i64, de_unquote_limit, Limit}; /// Range parameters for slicing data #[derive(Default, Debug, Deserialize, JsonSchema)] @@ -16,10 +16,9 @@ pub struct DataRange { #[schemars(example = 1000)] end: Option, - /// Number of values to return (ignored if `end` is set) - #[serde(default, alias = "c", deserialize_with = "de_unquote_usize")] - #[schemars(example = 1, example = 10, example = 100)] - count: Option, + /// Maximum number of values to return (ignored if `end` is set) + #[serde(default, alias = "l", alias = "count", alias = "c", deserialize_with = "de_unquote_limit")] + limit: Option, } impl DataRange { @@ -33,8 +32,8 @@ impl DataRange { self } - pub fn set_count(mut self, count: usize) -> Self { - self.count.replace(count); + pub fn set_limit(mut self, limit: Limit) -> Self { + self.limit.replace(limit); self } @@ -43,22 +42,22 @@ impl DataRange { self.start } - /// Get `end` value, computing it from `start + count` if `end` is unset but `count` is set. - /// Requires the vec length to resolve negative `start` indices before adding count. + /// Get `end` value, computing it from `start + limit` if `end` is unset but `limit` is set. + /// Requires the vec length to resolve negative `start` indices before adding limit. pub fn end_for_len(&self, len: usize) -> Option { if self.end.is_some() { return self.end; } - self.count.map(|count| { + self.limit.map(|limit| { let resolved_start = self.resolve_index(self.start, len, 0); - (resolved_start + count).min(len) as i64 + (resolved_start + *limit).min(len) as i64 }) } /// Returns a string for etag/cache key generation that captures all range parameters pub fn etag_suffix(&self) -> String { - format!("{:?}{:?}{:?}", self.start, self.end, self.count) + format!("{:?}{:?}{:?}", self.start, self.end, self.limit) } fn resolve_index(&self, idx: Option, len: usize, default: usize) -> usize { diff --git a/crates/brk_types/src/datarangeformat.rs b/crates/brk_types/src/datarangeformat.rs index 716938cae..403848f6c 100644 --- a/crates/brk_types/src/datarangeformat.rs +++ b/crates/brk_types/src/datarangeformat.rs @@ -2,7 +2,7 @@ use derive_more::Deref; use schemars::JsonSchema; use serde::Deserialize; -use crate::{DataRange, Format}; +use crate::{DataRange, Format, Limit}; /// Data range with output format for API query parameters #[derive(Default, Debug, Deref, Deserialize, JsonSchema)] @@ -31,8 +31,8 @@ impl DataRangeFormat { self } - pub fn set_count(mut self, count: usize) -> Self { - self.range = self.range.set_count(count); + pub fn set_limit(mut self, limit: Limit) -> Self { + self.range = self.range.set_limit(limit); self } } diff --git a/crates/brk_types/src/deser.rs b/crates/brk_types/src/deser.rs index dcea920d0..679c57952 100644 --- a/crates/brk_types/src/deser.rs +++ b/crates/brk_types/src/deser.rs @@ -1,6 +1,8 @@ use serde::{Deserialize, Deserializer}; use serde_json::Value; +use crate::Limit; + pub fn de_unquote_i64<'de, D>(deserializer: D) -> Result, D::Error> where D: Deserializer<'de>, @@ -56,3 +58,10 @@ where Err(serde::de::Error::custom("expected a string or number")) } } + +pub fn de_unquote_limit<'de, D>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + de_unquote_usize(deserializer).map(|opt| opt.map(Limit::from)) +} diff --git a/crates/brk_types/src/limit.rs b/crates/brk_types/src/limit.rs index c2c3e57d4..60b04f8f6 100644 --- a/crates/brk_types/src/limit.rs +++ b/crates/brk_types/src/limit.rs @@ -5,7 +5,7 @@ use schemars::JsonSchema; use serde::Deserialize; /// Maximum number of results to return. Defaults to 100 if not specified. -#[derive(Debug, Deref, Deserialize, JsonSchema)] +#[derive(Debug, Clone, Copy, Deref, Deserialize, JsonSchema)] #[serde(transparent)] #[allow(clippy::duplicated_attributes)] #[schemars(default, example = 1, example = 10, example = 100)] @@ -27,3 +27,9 @@ impl fmt::Display for Limit { write!(f, "{}", self.0) } } + +impl From for Limit { + fn from(value: usize) -> Self { + Self(value) + } +} diff --git a/modules/brk-client/index.js b/modules/brk-client/index.js index 85e4475b6..672681dd4 100644 --- a/modules/brk-client/index.js +++ b/modules/brk-client/index.js @@ -179,7 +179,7 @@ * @typedef {Object} DataRangeFormat * @property {?number=} start - Inclusive starting index, if negative counts from end * @property {?number=} end - Exclusive ending index, if negative counts from end - * @property {?number=} count - Number of values to return (ignored if `end` is set) + * @property {(Limit|null)=} limit - Maximum number of values to return (ignored if `end` is set) * @property {Format=} format - Format of the output */ /** @@ -385,7 +385,7 @@ * @property {Index} index - Index to query * @property {?number=} start - Inclusive starting index, if negative counts from end * @property {?number=} end - Exclusive ending index, if negative counts from end - * @property {?number=} count - Number of values to return (ignored if `end` is set) + * @property {(Limit|null)=} limit - Maximum number of values to return (ignored if `end` is set) * @property {Format=} format - Format of the output */ /** @@ -396,7 +396,7 @@ * @property {Metrics} ids * @property {?number=} start - Inclusive starting index, if negative counts from end * @property {?number=} end - Exclusive ending index, if negative counts from end - * @property {?number=} count - Number of values to return (ignored if `end` is set) + * @property {(Limit|null)=} limit - Maximum number of values to return (ignored if `end` is set) * @property {Format=} format - Format of the output */ /** @@ -2628,45 +2628,6 @@ function createPeriodAveragePricePattern(client, acc) { }; } -/** - * @template T - * @typedef {Object} DollarsPattern - * @property {MetricPattern2} average - * @property {MetricPattern11} base - * @property {MetricPattern1} cumulative - * @property {MetricPattern2} max - * @property {MetricPattern6} median - * @property {MetricPattern2} min - * @property {MetricPattern6} pct10 - * @property {MetricPattern6} pct25 - * @property {MetricPattern6} pct75 - * @property {MetricPattern6} pct90 - * @property {MetricPattern2} sum - */ - -/** - * Create a DollarsPattern pattern node - * @template T - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {DollarsPattern} - */ -function createDollarsPattern(client, acc) { - return { - average: createMetricPattern2(client, _m(acc, 'average')), - base: createMetricPattern11(client, acc), - cumulative: createMetricPattern1(client, _m(acc, 'cumulative')), - max: createMetricPattern2(client, _m(acc, 'max')), - median: createMetricPattern6(client, _m(acc, 'median')), - min: createMetricPattern2(client, _m(acc, 'min')), - pct10: createMetricPattern6(client, _m(acc, 'pct10')), - pct25: createMetricPattern6(client, _m(acc, 'pct25')), - pct75: createMetricPattern6(client, _m(acc, 'pct75')), - pct90: createMetricPattern6(client, _m(acc, 'pct90')), - sum: createMetricPattern2(client, _m(acc, 'sum')), - }; -} - /** * @template T * @typedef {Object} ClassAveragePricePattern @@ -2706,6 +2667,45 @@ function createClassAveragePricePattern(client, basePath) { }; } +/** + * @template T + * @typedef {Object} DollarsPattern + * @property {MetricPattern2} average + * @property {MetricPattern11} base + * @property {MetricPattern1} cumulative + * @property {MetricPattern2} max + * @property {MetricPattern6} median + * @property {MetricPattern2} min + * @property {MetricPattern6} pct10 + * @property {MetricPattern6} pct25 + * @property {MetricPattern6} pct75 + * @property {MetricPattern6} pct90 + * @property {MetricPattern2} sum + */ + +/** + * Create a DollarsPattern pattern node + * @template T + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {DollarsPattern} + */ +function createDollarsPattern(client, acc) { + return { + average: createMetricPattern2(client, _m(acc, 'average')), + base: createMetricPattern11(client, acc), + cumulative: createMetricPattern1(client, _m(acc, 'cumulative')), + max: createMetricPattern2(client, _m(acc, 'max')), + median: createMetricPattern6(client, _m(acc, 'median')), + min: createMetricPattern2(client, _m(acc, 'min')), + pct10: createMetricPattern6(client, _m(acc, 'pct10')), + pct25: createMetricPattern6(client, _m(acc, 'pct25')), + pct75: createMetricPattern6(client, _m(acc, 'pct75')), + pct90: createMetricPattern6(client, _m(acc, 'pct90')), + sum: createMetricPattern2(client, _m(acc, 'sum')), + }; +} + /** * @template T * @typedef {Object} FullnessPattern @@ -2951,6 +2951,93 @@ function create_0satsPattern(client, acc) { }; } +/** + * @typedef {Object} _0satsPattern2 + * @property {ActivityPattern2} activity + * @property {CostBasisPattern} costBasis + * @property {OutputsPattern} outputs + * @property {RealizedPattern} realized + * @property {RelativePattern4} relative + * @property {SupplyPattern2} supply + * @property {UnrealizedPattern} unrealized + */ + +/** + * Create a _0satsPattern2 pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {_0satsPattern2} + */ +function create_0satsPattern2(client, acc) { + return { + activity: createActivityPattern2(client, acc), + costBasis: createCostBasisPattern(client, acc), + outputs: createOutputsPattern(client, acc), + realized: createRealizedPattern(client, acc), + relative: createRelativePattern4(client, _m(acc, 'supply_in')), + supply: createSupplyPattern2(client, _m(acc, 'supply')), + unrealized: createUnrealizedPattern(client, acc), + }; +} + +/** + * @typedef {Object} _100btcPattern + * @property {ActivityPattern2} activity + * @property {CostBasisPattern} costBasis + * @property {OutputsPattern} outputs + * @property {RealizedPattern} realized + * @property {RelativePattern} relative + * @property {SupplyPattern2} supply + * @property {UnrealizedPattern} unrealized + */ + +/** + * Create a _100btcPattern pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {_100btcPattern} + */ +function create_100btcPattern(client, acc) { + return { + activity: createActivityPattern2(client, acc), + costBasis: createCostBasisPattern(client, acc), + outputs: createOutputsPattern(client, acc), + realized: createRealizedPattern(client, acc), + relative: createRelativePattern(client, acc), + supply: createSupplyPattern2(client, _m(acc, 'supply')), + unrealized: createUnrealizedPattern(client, acc), + }; +} + +/** + * @typedef {Object} _10yPattern + * @property {ActivityPattern2} activity + * @property {CostBasisPattern} costBasis + * @property {OutputsPattern} outputs + * @property {RealizedPattern4} realized + * @property {RelativePattern} relative + * @property {SupplyPattern2} supply + * @property {UnrealizedPattern} unrealized + */ + +/** + * Create a _10yPattern pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {_10yPattern} + */ +function create_10yPattern(client, acc) { + return { + activity: createActivityPattern2(client, acc), + costBasis: createCostBasisPattern(client, acc), + outputs: createOutputsPattern(client, acc), + realized: createRealizedPattern4(client, acc), + relative: createRelativePattern(client, acc), + supply: createSupplyPattern2(client, _m(acc, 'supply')), + unrealized: createUnrealizedPattern(client, acc), + }; +} + /** * @typedef {Object} PeriodCagrPattern * @property {MetricPattern4} _10y @@ -3009,64 +3096,6 @@ function create_10yTo12yPattern(client, acc) { }; } -/** - * @typedef {Object} _10yPattern - * @property {ActivityPattern2} activity - * @property {CostBasisPattern} costBasis - * @property {OutputsPattern} outputs - * @property {RealizedPattern4} realized - * @property {RelativePattern} relative - * @property {SupplyPattern2} supply - * @property {UnrealizedPattern} unrealized - */ - -/** - * Create a _10yPattern pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {_10yPattern} - */ -function create_10yPattern(client, acc) { - return { - activity: createActivityPattern2(client, acc), - costBasis: createCostBasisPattern(client, acc), - outputs: createOutputsPattern(client, acc), - realized: createRealizedPattern4(client, acc), - relative: createRelativePattern(client, acc), - supply: createSupplyPattern2(client, _m(acc, 'supply')), - unrealized: createUnrealizedPattern(client, acc), - }; -} - -/** - * @typedef {Object} _100btcPattern - * @property {ActivityPattern2} activity - * @property {CostBasisPattern} costBasis - * @property {OutputsPattern} outputs - * @property {RealizedPattern} realized - * @property {RelativePattern} relative - * @property {SupplyPattern2} supply - * @property {UnrealizedPattern} unrealized - */ - -/** - * Create a _100btcPattern pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {_100btcPattern} - */ -function create_100btcPattern(client, acc) { - return { - activity: createActivityPattern2(client, acc), - costBasis: createCostBasisPattern(client, acc), - outputs: createOutputsPattern(client, acc), - realized: createRealizedPattern(client, acc), - relative: createRelativePattern(client, acc), - supply: createSupplyPattern2(client, _m(acc, 'supply')), - unrealized: createUnrealizedPattern(client, acc), - }; -} - /** * @typedef {Object} UnrealizedPattern * @property {MetricPattern1} negUnrealizedLoss @@ -3096,35 +3125,6 @@ function createUnrealizedPattern(client, acc) { }; } -/** - * @typedef {Object} _0satsPattern2 - * @property {ActivityPattern2} activity - * @property {CostBasisPattern} costBasis - * @property {OutputsPattern} outputs - * @property {RealizedPattern} realized - * @property {RelativePattern4} relative - * @property {SupplyPattern2} supply - * @property {UnrealizedPattern} unrealized - */ - -/** - * Create a _0satsPattern2 pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {_0satsPattern2} - */ -function create_0satsPattern2(client, acc) { - return { - activity: createActivityPattern2(client, acc), - costBasis: createCostBasisPattern(client, acc), - outputs: createOutputsPattern(client, acc), - realized: createRealizedPattern(client, acc), - relative: createRelativePattern4(client, _m(acc, 'supply_in')), - supply: createSupplyPattern2(client, _m(acc, 'supply')), - unrealized: createUnrealizedPattern(client, acc), - }; -} - /** * @typedef {Object} ActivityPattern2 * @property {BlockCountPattern} coinblocksDestroyed @@ -3175,27 +3175,6 @@ function createSplitPattern2(client, acc) { }; } -/** - * @typedef {Object} CoinbasePattern - * @property {FullnessPattern} bitcoin - * @property {DollarsPattern} dollars - * @property {DollarsPattern} sats - */ - -/** - * Create a CoinbasePattern pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {CoinbasePattern} - */ -function createCoinbasePattern(client, acc) { - return { - bitcoin: createFullnessPattern(client, _m(acc, 'btc')), - dollars: createDollarsPattern(client, _m(acc, 'usd')), - sats: createDollarsPattern(client, acc), - }; -} - /** * @typedef {Object} CostBasisPattern2 * @property {MetricPattern1} max @@ -3217,27 +3196,6 @@ function createCostBasisPattern2(client, basePath) { }; } -/** - * @typedef {Object} CoinbasePattern2 - * @property {BlockCountPattern} bitcoin - * @property {BlockCountPattern} dollars - * @property {BlockCountPattern} sats - */ - -/** - * Create a CoinbasePattern2 pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {CoinbasePattern2} - */ -function createCoinbasePattern2(client, acc) { - return { - bitcoin: createBlockCountPattern(client, _m(acc, 'btc')), - dollars: createBlockCountPattern(client, _m(acc, 'usd')), - sats: createBlockCountPattern(client, acc), - }; -} - /** * @typedef {Object} ActiveSupplyPattern * @property {MetricPattern1} bitcoin @@ -3281,26 +3239,47 @@ function create_2015Pattern(client, acc) { } /** - * @typedef {Object} UnclaimedRewardsPattern - * @property {BitcoinPattern} bitcoin + * @typedef {Object} CoinbasePattern2 + * @property {BlockCountPattern} bitcoin * @property {BlockCountPattern} dollars * @property {BlockCountPattern} sats */ /** - * Create a UnclaimedRewardsPattern pattern node + * Create a CoinbasePattern2 pattern node * @param {BrkClientBase} client * @param {string} acc - Accumulated metric name - * @returns {UnclaimedRewardsPattern} + * @returns {CoinbasePattern2} */ -function createUnclaimedRewardsPattern(client, acc) { +function createCoinbasePattern2(client, acc) { return { - bitcoin: createBitcoinPattern(client, _m(acc, 'btc')), + bitcoin: createBlockCountPattern(client, _m(acc, 'btc')), dollars: createBlockCountPattern(client, _m(acc, 'usd')), sats: createBlockCountPattern(client, acc), }; } +/** + * @typedef {Object} CoinbasePattern + * @property {FullnessPattern} bitcoin + * @property {DollarsPattern} dollars + * @property {DollarsPattern} sats + */ + +/** + * Create a CoinbasePattern pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {CoinbasePattern} + */ +function createCoinbasePattern(client, acc) { + return { + bitcoin: createFullnessPattern(client, _m(acc, 'btc')), + dollars: createDollarsPattern(client, _m(acc, 'usd')), + sats: createDollarsPattern(client, acc), + }; +} + /** * @typedef {Object} SegwitAdoptionPattern * @property {MetricPattern11} base @@ -3323,21 +3302,23 @@ function createSegwitAdoptionPattern(client, acc) { } /** - * @typedef {Object} SupplyPattern2 - * @property {ActiveSupplyPattern} halved - * @property {ActiveSupplyPattern} total + * @typedef {Object} UnclaimedRewardsPattern + * @property {BitcoinPattern} bitcoin + * @property {BlockCountPattern} dollars + * @property {BlockCountPattern} sats */ /** - * Create a SupplyPattern2 pattern node + * Create a UnclaimedRewardsPattern pattern node * @param {BrkClientBase} client * @param {string} acc - Accumulated metric name - * @returns {SupplyPattern2} + * @returns {UnclaimedRewardsPattern} */ -function createSupplyPattern2(client, acc) { +function createUnclaimedRewardsPattern(client, acc) { return { - halved: createActiveSupplyPattern(client, _m(acc, 'half')), - total: createActiveSupplyPattern(client, acc), + bitcoin: createBitcoinPattern(client, _m(acc, 'btc')), + dollars: createBlockCountPattern(client, _m(acc, 'usd')), + sats: createBlockCountPattern(client, acc), }; } @@ -3360,6 +3341,25 @@ function createCostBasisPattern(client, acc) { }; } +/** + * @typedef {Object} _1dReturns1mSdPattern + * @property {MetricPattern4} sd + * @property {MetricPattern4} sma + */ + +/** + * Create a _1dReturns1mSdPattern pattern node + * @param {BrkClientBase} client + * @param {string} acc - Accumulated metric name + * @returns {_1dReturns1mSdPattern} + */ +function create_1dReturns1mSdPattern(client, acc) { + return { + sd: createMetricPattern4(client, _m(acc, 'sd')), + sma: createMetricPattern4(client, _m(acc, 'sma')), + }; +} + /** * @typedef {Object} RelativePattern4 * @property {MetricPattern1} supplyInLossRelToOwnSupply @@ -3380,21 +3380,42 @@ function createRelativePattern4(client, acc) { } /** - * @typedef {Object} _1dReturns1mSdPattern - * @property {MetricPattern4} sd - * @property {MetricPattern4} sma + * @typedef {Object} SupplyPattern2 + * @property {ActiveSupplyPattern} halved + * @property {ActiveSupplyPattern} total */ /** - * Create a _1dReturns1mSdPattern pattern node + * Create a SupplyPattern2 pattern node * @param {BrkClientBase} client * @param {string} acc - Accumulated metric name - * @returns {_1dReturns1mSdPattern} + * @returns {SupplyPattern2} */ -function create_1dReturns1mSdPattern(client, acc) { +function createSupplyPattern2(client, acc) { return { - sd: createMetricPattern4(client, _m(acc, 'sd')), - sma: createMetricPattern4(client, _m(acc, 'sma')), + halved: createActiveSupplyPattern(client, _m(acc, 'half')), + total: createActiveSupplyPattern(client, acc), + }; +} + +/** + * @template T + * @typedef {Object} SatsPattern + * @property {MetricPattern1} ohlc + * @property {SplitPattern2} split + */ + +/** + * Create a SatsPattern pattern node + * @template T + * @param {BrkClientBase} client + * @param {string} basePath + * @returns {SatsPattern} + */ +function createSatsPattern(client, basePath) { + return { + ohlc: createMetricPattern1(client, `${basePath}_ohlc`), + split: createSplitPattern2(client, `${basePath}_split`), }; } @@ -3441,23 +3462,19 @@ function createBlockCountPattern(client, acc) { } /** - * @template T - * @typedef {Object} SatsPattern - * @property {MetricPattern1} ohlc - * @property {SplitPattern2} split + * @typedef {Object} RealizedPriceExtraPattern + * @property {MetricPattern4} ratio */ /** - * Create a SatsPattern pattern node - * @template T + * Create a RealizedPriceExtraPattern pattern node * @param {BrkClientBase} client - * @param {string} basePath - * @returns {SatsPattern} + * @param {string} acc - Accumulated metric name + * @returns {RealizedPriceExtraPattern} */ -function createSatsPattern(client, basePath) { +function createRealizedPriceExtraPattern(client, acc) { return { - ohlc: createMetricPattern1(client, `${basePath}_ohlc`), - split: createSplitPattern2(client, `${basePath}_split`), + ratio: createMetricPattern4(client, _m(acc, 'ratio')), }; } @@ -3478,23 +3495,6 @@ function createOutputsPattern(client, acc) { }; } -/** - * @typedef {Object} RealizedPriceExtraPattern - * @property {MetricPattern4} ratio - */ - -/** - * Create a RealizedPriceExtraPattern pattern node - * @param {BrkClientBase} client - * @param {string} acc - Accumulated metric name - * @returns {RealizedPriceExtraPattern} - */ -function createRealizedPriceExtraPattern(client, acc) { - return { - ratio: createMetricPattern4(client, _m(acc, 'ratio')), - }; -} - // Catalog tree typedefs /** @@ -7112,15 +7112,15 @@ class BrkClient extends BrkClientBase { * @param {Index} index - Aggregation index * @param {number=} [start] - Inclusive starting index, if negative counts from end * @param {number=} [end] - Exclusive ending index, if negative counts from end - * @param {number=} [count] - Number of values to return (ignored if `end` is set) + * @param {string=} [limit] - Maximum number of values to return (ignored if `end` is set) * @param {Format=} [format] - Format of the output * @returns {Promise} */ - async getMetricByIndex(metric, index, start, end, count, format) { + async getMetricByIndex(metric, index, start, end, limit, format) { const params = new URLSearchParams(); if (start !== undefined) params.set('start', String(start)); if (end !== undefined) params.set('end', String(end)); - if (count !== undefined) params.set('count', String(count)); + if (limit !== undefined) params.set('limit', String(limit)); if (format !== undefined) params.set('format', String(format)); const query = params.toString(); const path = `/api/metric/${metric}/${index}${query ? '?' + query : ''}`; @@ -7149,17 +7149,17 @@ class BrkClient extends BrkClientBase { * @param {Index} [index] - Index to query * @param {number=} [start] - Inclusive starting index, if negative counts from end * @param {number=} [end] - Exclusive ending index, if negative counts from end - * @param {number=} [count] - Number of values to return (ignored if `end` is set) + * @param {string=} [limit] - Maximum number of values to return (ignored if `end` is set) * @param {Format=} [format] - Format of the output * @returns {Promise} */ - async getMetricsBulk(metrics, index, start, end, count, format) { + async getMetricsBulk(metrics, index, start, end, limit, format) { const params = new URLSearchParams(); params.set('metrics', String(metrics)); params.set('index', String(index)); if (start !== undefined) params.set('start', String(start)); if (end !== undefined) params.set('end', String(end)); - if (count !== undefined) params.set('count', String(count)); + if (limit !== undefined) params.set('limit', String(limit)); if (format !== undefined) params.set('format', String(format)); const query = params.toString(); const path = `/api/metrics/bulk${query ? '?' + query : ''}`; diff --git a/packages/brk_client/brk_client/__init__.py b/packages/brk_client/brk_client/__init__.py index 21735b987..58f42776d 100644 --- a/packages/brk_client/brk_client/__init__.py +++ b/packages/brk_client/brk_client/__init__.py @@ -1,12 +1,22 @@ # Auto-generated BRK Python client # Do not edit manually -from typing import TypeVar, Generic, Any, Optional, List, Literal, TypedDict, Union, Protocol -from http.client import HTTPSConnection, HTTPConnection -from urllib.parse import urlparse import json +from http.client import HTTPConnection, HTTPSConnection +from typing import ( + Any, + Generic, + List, + Literal, + Optional, + Protocol, + TypedDict, + TypeVar, + Union, +) +from urllib.parse import urlparse -T = TypeVar('T') +T = TypeVar("T") # Type definitions @@ -38,6 +48,8 @@ Cents = int Close = Cents # Output format for API responses Format = Literal["json", "csv"] +# Maximum number of results to return. Defaults to 100 if not specified. +Limit = int # Date in YYYYMMDD format stored as u32 Date = int DateIndex = int @@ -54,8 +66,6 @@ HalvingEpoch = int Hex = str # Highest price value for a time period High = Cents -# Maximum number of results to return. Defaults to 100 if not specified. -Limit = int LoadedAddressIndex = TypeIndex # Lowest price value for a time period Low = Cents @@ -71,7 +81,20 @@ Open = Cents OpReturnIndex = TypeIndex OutPoint = int # Type (P2PKH, P2WPKH, P2SH, P2TR, etc.) -OutputType = Literal["p2pk65", "p2pk33", "p2pkh", "p2ms", "p2sh", "opreturn", "p2wpkh", "p2wsh", "p2tr", "p2a", "empty", "unknown"] +OutputType = Literal[ + "p2pk65", + "p2pk33", + "p2pkh", + "p2ms", + "p2sh", + "opreturn", + "p2wpkh", + "p2wsh", + "p2tr", + "p2a", + "empty", + "unknown", +] P2AAddressIndex = TypeIndex U8x2 = List[int] P2ABytes = U8x2 @@ -94,7 +117,166 @@ P2WPKHAddressIndex = TypeIndex P2WPKHBytes = U8x20 P2WSHAddressIndex = TypeIndex P2WSHBytes = U8x32 -PoolSlug = Literal["unknown", "blockfills", "ultimuspool", "terrapool", "luxor", "onethash", "btccom", "bitfarms", "huobipool", "wayicn", "canoepool", "btctop", "bitcoincom", "pool175btc", "gbminers", "axbt", "asicminer", "bitminter", "bitcoinrussia", "btcserv", "simplecoinus", "btcguild", "eligius", "ozcoin", "eclipsemc", "maxbtc", "triplemining", "coinlab", "pool50btc", "ghashio", "stminingcorp", "bitparking", "mmpool", "polmine", "kncminer", "bitalo", "f2pool", "hhtt", "megabigpower", "mtred", "nmcbit", "yourbtcnet", "givemecoins", "braiinspool", "antpool", "multicoinco", "bcpoolio", "cointerra", "kanopool", "solock", "ckpool", "nicehash", "bitclub", "bitcoinaffiliatenetwork", "btcc", "bwpool", "exxbw", "bitsolo", "bitfury", "twentyoneinc", "digitalbtc", "eightbaochi", "mybtccoinpool", "tbdice", "hashpool", "nexious", "bravomining", "hotpool", "okexpool", "bcmonster", "onehash", "bixin", "tatmaspool", "viabtc", "connectbtc", "batpool", "waterhole", "dcexploration", "dcex", "btpool", "fiftyeightcoin", "bitcoinindia", "shawnp0wers", "phashio", "rigpool", "haozhuzhu", "sevenpool", "miningkings", "hashbx", "dpool", "rawpool", "haominer", "helix", "bitcoinukraine", "poolin", "secretsuperstar", "tigerpoolnet", "sigmapoolcom", "okpooltop", "hummerpool", "tangpool", "bytepool", "spiderpool", "novablock", "miningcity", "binancepool", "minerium", "lubiancom", "okkong", "aaopool", "emcdpool", "foundryusa", "sbicrypto", "arkpool", "purebtccom", "marapool", "kucoinpool", "entrustcharitypool", "okminer", "titan", "pegapool", "btcnuggets", "cloudhashing", "digitalxmintsy", "telco214", "btcpoolparty", "multipool", "transactioncoinmining", "btcdig", "trickysbtcpool", "btcmp", "eobot", "unomp", "patels", "gogreenlight", "ekanembtc", "canoe", "tiger", "onem1x", "zulupool", "secpool", "ocean", "whitepool", "wk057", "futurebitapollosolo", "carbonnegative", "portlandhodl", "phoenix", "neopool", "maxipool", "bitfufupool", "luckypool", "miningdutch", "publicpool", "miningsquared", "innopolistech", "btclab", "parasite"] +PoolSlug = Literal[ + "unknown", + "blockfills", + "ultimuspool", + "terrapool", + "luxor", + "onethash", + "btccom", + "bitfarms", + "huobipool", + "wayicn", + "canoepool", + "btctop", + "bitcoincom", + "pool175btc", + "gbminers", + "axbt", + "asicminer", + "bitminter", + "bitcoinrussia", + "btcserv", + "simplecoinus", + "btcguild", + "eligius", + "ozcoin", + "eclipsemc", + "maxbtc", + "triplemining", + "coinlab", + "pool50btc", + "ghashio", + "stminingcorp", + "bitparking", + "mmpool", + "polmine", + "kncminer", + "bitalo", + "f2pool", + "hhtt", + "megabigpower", + "mtred", + "nmcbit", + "yourbtcnet", + "givemecoins", + "braiinspool", + "antpool", + "multicoinco", + "bcpoolio", + "cointerra", + "kanopool", + "solock", + "ckpool", + "nicehash", + "bitclub", + "bitcoinaffiliatenetwork", + "btcc", + "bwpool", + "exxbw", + "bitsolo", + "bitfury", + "twentyoneinc", + "digitalbtc", + "eightbaochi", + "mybtccoinpool", + "tbdice", + "hashpool", + "nexious", + "bravomining", + "hotpool", + "okexpool", + "bcmonster", + "onehash", + "bixin", + "tatmaspool", + "viabtc", + "connectbtc", + "batpool", + "waterhole", + "dcexploration", + "dcex", + "btpool", + "fiftyeightcoin", + "bitcoinindia", + "shawnp0wers", + "phashio", + "rigpool", + "haozhuzhu", + "sevenpool", + "miningkings", + "hashbx", + "dpool", + "rawpool", + "haominer", + "helix", + "bitcoinukraine", + "poolin", + "secretsuperstar", + "tigerpoolnet", + "sigmapoolcom", + "okpooltop", + "hummerpool", + "tangpool", + "bytepool", + "spiderpool", + "novablock", + "miningcity", + "binancepool", + "minerium", + "lubiancom", + "okkong", + "aaopool", + "emcdpool", + "foundryusa", + "sbicrypto", + "arkpool", + "purebtccom", + "marapool", + "kucoinpool", + "entrustcharitypool", + "okminer", + "titan", + "pegapool", + "btcnuggets", + "cloudhashing", + "digitalxmintsy", + "telco214", + "btcpoolparty", + "multipool", + "transactioncoinmining", + "btcdig", + "trickysbtcpool", + "btcmp", + "eobot", + "unomp", + "patels", + "gogreenlight", + "ekanembtc", + "canoe", + "tiger", + "onem1x", + "zulupool", + "secpool", + "ocean", + "whitepool", + "wk057", + "futurebitapollosolo", + "carbonnegative", + "portlandhodl", + "phoenix", + "neopool", + "maxipool", + "bitfufupool", + "luckypool", + "miningdutch", + "publicpool", + "miningsquared", + "innopolistech", + "btclab", + "parasite", +] QuarterIndex = int # Transaction locktime RawLockTime = int @@ -112,7 +294,7 @@ StoredU32 = int # Fixed-size 64-bit unsigned integer optimized for on-disk storage StoredU64 = int # Time period for mining statistics. -# +# # Used to specify the lookback window for pool statistics, hashrate calculations, # and other time-based mining metrics. TimePeriod = Literal["24h", "3d", "1w", "1m", "3m", "6m", "1y", "2y", "3y"] @@ -129,13 +311,43 @@ WeekIndex = int YearIndex = int # Aggregation dimension for querying metrics. Includes time-based (date, week, month, year), # block-based (height, txindex), and address/output type indexes. -Index = Literal["dateindex", "decadeindex", "difficultyepoch", "emptyoutputindex", "halvingepoch", "height", "txinindex", "monthindex", "opreturnindex", "txoutindex", "p2aaddressindex", "p2msoutputindex", "p2pk33addressindex", "p2pk65addressindex", "p2pkhaddressindex", "p2shaddressindex", "p2traddressindex", "p2wpkhaddressindex", "p2wshaddressindex", "quarterindex", "semesterindex", "txindex", "unknownoutputindex", "weekindex", "yearindex", "loadedaddressindex", "emptyaddressindex"] +Index = Literal[ + "dateindex", + "decadeindex", + "difficultyepoch", + "emptyoutputindex", + "halvingepoch", + "height", + "txinindex", + "monthindex", + "opreturnindex", + "txoutindex", + "p2aaddressindex", + "p2msoutputindex", + "p2pk33addressindex", + "p2pk65addressindex", + "p2pkhaddressindex", + "p2shaddressindex", + "p2traddressindex", + "p2wpkhaddressindex", + "p2wshaddressindex", + "quarterindex", + "semesterindex", + "txindex", + "unknownoutputindex", + "weekindex", + "yearindex", + "loadedaddressindex", + "emptyaddressindex", +] # Hierarchical tree node for organizing metrics into categories TreeNode = Union[dict[str, "TreeNode"], "MetricLeafWithSchema"] + + class AddressChainStats(TypedDict): """ Address statistics on the blockchain (confirmed transactions only) - + Based on mempool.space's format with type_index extension. Attributes: @@ -146,6 +358,7 @@ class AddressChainStats(TypedDict): tx_count: Total number of confirmed transactions involving this address type_index: Index of this address within its type on the blockchain """ + funded_txo_count: int funded_txo_sum: Sats spent_txo_count: int @@ -153,10 +366,11 @@ class AddressChainStats(TypedDict): tx_count: int type_index: TypeIndex + class AddressMempoolStats(TypedDict): """ Address statistics in the mempool (unconfirmed transactions only) - + Based on mempool.space's format. Attributes: @@ -166,15 +380,18 @@ class AddressMempoolStats(TypedDict): spent_txo_sum: Total amount in satoshis being spent in unconfirmed transactions tx_count: Number of unconfirmed transactions involving this address """ + funded_txo_count: int funded_txo_sum: Sats spent_txo_count: int spent_txo_sum: Sats tx_count: int + class AddressParam(TypedDict): address: Address + class AddressStats(TypedDict): """ Address information compatible with mempool.space API format @@ -184,19 +401,23 @@ class AddressStats(TypedDict): chain_stats: Statistics for confirmed transactions on the blockchain mempool_stats: Statistics for unconfirmed transactions in the mempool """ + address: Address chain_stats: AddressChainStats mempool_stats: Union[AddressMempoolStats, None] + class AddressTxidsParam(TypedDict): """ Attributes: after_txid: Txid to paginate from (return transactions before this one) limit: Maximum number of results to return. Defaults to 25 if not specified. """ + after_txid: Union[Txid, None] limit: int + class AddressValidation(TypedDict): """ Address validation result @@ -210,6 +431,7 @@ class AddressValidation(TypedDict): witness_version: Witness version (0 for P2WPKH/P2WSH, 1 for P2TR) witness_program: Witness program in hex """ + isvalid: bool address: Optional[str] scriptPubKey: Optional[str] @@ -218,42 +440,52 @@ class AddressValidation(TypedDict): witness_version: Optional[int] witness_program: Optional[str] + class BlockCountParam(TypedDict): """ Attributes: block_count: Number of recent blocks to include """ + block_count: int + class BlockFeesEntry(TypedDict): """ A single block fees data point. """ + avgHeight: Height timestamp: Timestamp avgFees: Sats + class BlockHashParam(TypedDict): hash: BlockHash + class BlockHashStartIndex(TypedDict): """ Attributes: hash: Bitcoin block hash start_index: Starting transaction index within the block (0-based) """ + hash: BlockHash start_index: TxIndex + class BlockHashTxIndex(TypedDict): """ Attributes: hash: Bitcoin block hash index: Transaction index within the block (0-based) """ + hash: BlockHash index: TxIndex + class BlockInfo(TypedDict): """ Block information returned by the API @@ -267,6 +499,7 @@ class BlockInfo(TypedDict): timestamp: Block timestamp (Unix time) difficulty: Block difficulty as a floating point number """ + id: BlockHash height: Height tx_count: int @@ -275,37 +508,46 @@ class BlockInfo(TypedDict): timestamp: Timestamp difficulty: float + class BlockRewardsEntry(TypedDict): """ A single block rewards data point. """ + avgHeight: int timestamp: int avgRewards: int + class BlockSizeEntry(TypedDict): """ A single block size data point. """ + avgHeight: int timestamp: int avgSize: int + class BlockWeightEntry(TypedDict): """ A single block weight data point. """ + avgHeight: int timestamp: int avgWeight: int + class BlockSizesWeights(TypedDict): """ Combined block sizes and weights response. """ + sizes: List[BlockSizeEntry] weights: List[BlockWeightEntry] + class BlockStatus(TypedDict): """ Block status indicating whether block is in the best chain @@ -315,10 +557,12 @@ class BlockStatus(TypedDict): height: Block height (only if in best chain) next_best: Hash of the next block in the best chain (only if in best chain and not tip) """ + in_best_chain: bool height: Union[Height, None] next_best: Union[BlockHash, None] + class BlockTimestamp(TypedDict): """ Block information returned for timestamp queries @@ -328,10 +572,12 @@ class BlockTimestamp(TypedDict): hash: Block hash timestamp: Block timestamp in ISO 8601 format """ + height: Height hash: BlockHash timestamp: str + class DataRangeFormat(TypedDict): """ Data range with output format for API query parameters @@ -339,14 +585,16 @@ class DataRangeFormat(TypedDict): Attributes: start: Inclusive starting index, if negative counts from end end: Exclusive ending index, if negative counts from end - count: Number of values to return (ignored if `end` is set) + limit: Maximum number of values to return (ignored if `end` is set) format: Format of the output """ + start: Optional[int] end: Optional[int] - count: Optional[int] + limit: Union[Limit, None] format: Format + class DifficultyAdjustment(TypedDict): """ Difficulty adjustment information. @@ -363,6 +611,7 @@ class DifficultyAdjustment(TypedDict): adjustedTimeAvg: Time-adjusted average (accounting for timestamp manipulation) timeOffset: Time offset from expected schedule (seconds) """ + progressPercent: float difficultyChange: float estimatedRetargetDate: int @@ -374,16 +623,19 @@ class DifficultyAdjustment(TypedDict): adjustedTimeAvg: int timeOffset: int + class DifficultyAdjustmentEntry(TypedDict): """ A single difficulty adjustment entry. Serializes as array: [timestamp, height, difficulty, change_percent] """ + timestamp: Timestamp height: Height difficulty: float change_percent: float + class DifficultyEntry(TypedDict): """ A single difficulty data point. @@ -393,10 +645,12 @@ class DifficultyEntry(TypedDict): difficulty: Difficulty value. height: Block height of the adjustment. """ + timestamp: Timestamp difficulty: float height: Height + class EmptyAddressData(TypedDict): """ Data of an empty address @@ -406,10 +660,12 @@ class EmptyAddressData(TypedDict): funded_txo_count: Total funded/spent transaction output count (equal since address is empty) transfered: Total satoshis transferred """ + tx_count: int funded_txo_count: int transfered: Sats + class HashrateEntry(TypedDict): """ A single hashrate data point. @@ -418,9 +674,11 @@ class HashrateEntry(TypedDict): timestamp: Unix timestamp. avgHashrate: Average hashrate (H/s). """ + timestamp: Timestamp avgHashrate: int + class HashrateSummary(TypedDict): """ Summary of network hashrate and difficulty data. @@ -431,22 +689,27 @@ class HashrateSummary(TypedDict): currentHashrate: Current network hashrate (H/s). currentDifficulty: Current network difficulty. """ + hashrates: List[HashrateEntry] difficulty: List[DifficultyEntry] currentHashrate: int currentDifficulty: float + class Health(TypedDict): """ Server health status """ + status: str service: str timestamp: str + class HeightParam(TypedDict): height: Height + class IndexInfo(TypedDict): """ Information about an available index and its query aliases @@ -455,12 +718,15 @@ class IndexInfo(TypedDict): index: The canonical index name aliases: All Accepted query aliases """ + index: Index aliases: List[str] + class LimitParam(TypedDict): limit: Limit + class LoadedAddressData(TypedDict): """ Data for a loaded (non-empty) address with current balance @@ -473,6 +739,7 @@ class LoadedAddressData(TypedDict): sent: Satoshis sent by this address realized_cap: The realized capitalization of this address """ + tx_count: int funded_txo_count: int spent_txo_count: int @@ -480,6 +747,7 @@ class LoadedAddressData(TypedDict): sent: Sats realized_cap: Dollars + class MempoolBlock(TypedDict): """ Block info in a mempool.space like format for fee estimation. @@ -492,6 +760,7 @@ class MempoolBlock(TypedDict): medianFee: Median fee rate in sat/vB feeRange: Fee rate range: [min, 10%, 25%, 50%, 75%, 90%, max] """ + blockSize: int blockVSize: float nTx: int @@ -499,6 +768,7 @@ class MempoolBlock(TypedDict): medianFee: FeeRate feeRange: List[FeeRate] + class MempoolInfo(TypedDict): """ Mempool statistics @@ -508,10 +778,12 @@ class MempoolInfo(TypedDict): vsize: Total virtual size of all transactions in the mempool (vbytes) total_fee: Total fees of all transactions in the mempool (satoshis) """ + count: int vsize: VSize total_fee: Sats + class MetricCount(TypedDict): """ Metric count statistics - distinct metrics and total metric-index combinations @@ -522,14 +794,17 @@ class MetricCount(TypedDict): lazy_endpoints: Number of lazy (computed on-the-fly) metric-index combinations stored_endpoints: Number of eager (stored on disk) metric-index combinations """ + distinct_metrics: int total_endpoints: int lazy_endpoints: int stored_endpoints: int + class MetricParam(TypedDict): metric: Metric + class MetricSelection(TypedDict): """ Selection of metrics to query @@ -539,16 +814,18 @@ class MetricSelection(TypedDict): index: Index to query start: Inclusive starting index, if negative counts from end end: Exclusive ending index, if negative counts from end - count: Number of values to return (ignored if `end` is set) + limit: Maximum number of values to return (ignored if `end` is set) format: Format of the output """ + metrics: Metrics index: Index start: Optional[int] end: Optional[int] - count: Optional[int] + limit: Union[Limit, None] format: Format + class MetricSelectionLegacy(TypedDict): """ Legacy metric selection parameters (deprecated) @@ -556,52 +833,62 @@ class MetricSelectionLegacy(TypedDict): Attributes: start: Inclusive starting index, if negative counts from end end: Exclusive ending index, if negative counts from end - count: Number of values to return (ignored if `end` is set) + limit: Maximum number of values to return (ignored if `end` is set) format: Format of the output """ + index: Index ids: Metrics start: Optional[int] end: Optional[int] - count: Optional[int] + limit: Union[Limit, None] format: Format + class MetricWithIndex(TypedDict): """ Attributes: metric: Metric name index: Aggregation index """ + metric: Metric index: Index + class OHLCCents(TypedDict): """ OHLC (Open, High, Low, Close) data in cents """ + open: Open high: High low: Low close: Close + class OHLCDollars(TypedDict): """ OHLC (Open, High, Low, Close) data in dollars """ + open: Open high: High low: Low close: Close + class OHLCSats(TypedDict): """ OHLC (Open, High, Low, Close) data in satoshis """ + open: Open high: High low: Low close: Close + class PaginatedMetrics(TypedDict): """ A paginated list of available metric names (1000 per page) @@ -611,10 +898,12 @@ class PaginatedMetrics(TypedDict): max_page: Maximum valid page index (0-indexed) metrics: List of metric names (max 1000 per page) """ + current_page: int max_page: int metrics: List[str] + class Pagination(TypedDict): """ Pagination parameters for paginated API endpoints @@ -622,8 +911,10 @@ class Pagination(TypedDict): Attributes: page: Pagination index """ + page: Optional[int] + class PoolBlockCounts(TypedDict): """ Block counts for different time periods @@ -633,10 +924,12 @@ class PoolBlockCounts(TypedDict): _24h: Blocks mined in last 24 hours _1w: Blocks mined in last week """ + all: int _24h: int _1w: int + class PoolBlockShares(TypedDict): """ Pool's share of total blocks for different time periods @@ -646,10 +939,12 @@ class PoolBlockShares(TypedDict): _24h: Share of blocks in last 24 hours _1w: Share of blocks in last week """ + all: float _24h: float _1w: float + class PoolDetailInfo(TypedDict): """ Pool information for detail view @@ -662,6 +957,7 @@ class PoolDetailInfo(TypedDict): regexes: Coinbase tag patterns (regexes) slug: URL-friendly pool identifier """ + id: int name: str link: str @@ -669,6 +965,7 @@ class PoolDetailInfo(TypedDict): regexes: List[str] slug: PoolSlug + class PoolDetail(TypedDict): """ Detailed pool information with statistics across time periods @@ -680,12 +977,14 @@ class PoolDetail(TypedDict): estimatedHashrate: Estimated hashrate based on blocks mined reportedHashrate: Self-reported hashrate (if available) """ + pool: PoolDetailInfo blockCount: PoolBlockCounts blockShare: PoolBlockShares estimatedHashrate: int reportedHashrate: Optional[int] + class PoolInfo(TypedDict): """ Basic pool information for listing all pools @@ -695,13 +994,16 @@ class PoolInfo(TypedDict): slug: URL-friendly pool identifier unique_id: Unique numeric pool identifier """ + name: str slug: PoolSlug unique_id: int + class PoolSlugParam(TypedDict): slug: PoolSlug + class PoolStats(TypedDict): """ Mining pool with block statistics for a time period @@ -716,6 +1018,7 @@ class PoolStats(TypedDict): slug: URL-friendly pool identifier share: Pool's share of total blocks (0.0 - 1.0) """ + poolId: int name: str link: str @@ -725,6 +1028,7 @@ class PoolStats(TypedDict): slug: PoolSlug share: float + class PoolsSummary(TypedDict): """ Mining pools response for a time period @@ -734,10 +1038,12 @@ class PoolsSummary(TypedDict): blockCount: Total blocks in the time period lastEstimatedHashrate: Estimated network hashrate (hashes per second) """ + pools: List[PoolStats] blockCount: int lastEstimatedHashrate: int + class RecommendedFees(TypedDict): """ Recommended fee rates in sat/vB @@ -749,12 +1055,14 @@ class RecommendedFees(TypedDict): economyFee: Fee rate for economical confirmation minimumFee: Minimum relay fee rate """ + fastestFee: FeeRate halfHourFee: FeeRate hourFee: FeeRate economyFee: FeeRate minimumFee: FeeRate + class RewardStats(TypedDict): """ Block reward statistics over a range of blocks @@ -763,12 +1071,14 @@ class RewardStats(TypedDict): startBlock: First block in the range endBlock: Last block in the range """ + startBlock: Height endBlock: Height totalReward: Sats totalFee: Sats totalTx: int + class SupplyState(TypedDict): """ Current supply state tracking UTXO count and total value @@ -777,15 +1087,19 @@ class SupplyState(TypedDict): utxo_count: Number of unspent transaction outputs value: Total value in satoshis """ + utxo_count: int value: Sats + class TimePeriodParam(TypedDict): time_period: TimePeriod + class TimestampParam(TypedDict): timestamp: Timestamp + class TxOut(TypedDict): """ Transaction output @@ -794,9 +1108,11 @@ class TxOut(TypedDict): scriptpubkey: Script pubkey (locking script) value: Value of the output in satoshis """ + scriptpubkey: str value: Sats + class TxIn(TypedDict): """ Transaction input @@ -810,6 +1126,7 @@ class TxIn(TypedDict): sequence: Input sequence number inner_redeemscript_asm: Inner redeemscript in assembly format (for P2SH-wrapped SegWit) """ + txid: Txid vout: Vout prevout: Union[TxOut, None] @@ -819,6 +1136,7 @@ class TxIn(TypedDict): sequence: int inner_redeemscript_asm: Optional[str] + class TxStatus(TypedDict): """ Transaction confirmation status @@ -829,11 +1147,13 @@ class TxStatus(TypedDict): block_hash: Block hash (only present if confirmed) block_time: Block timestamp (only present if confirmed) """ + confirmed: bool block_height: Union[Height, None] block_hash: Union[BlockHash, None] block_time: Union[Timestamp, None] + class Transaction(TypedDict): """ Transaction information compatible with mempool.space API format @@ -846,6 +1166,7 @@ class Transaction(TypedDict): vin: Transaction inputs vout: Transaction outputs """ + index: Union[TxIndex, None] txid: Txid version: TxVersion @@ -858,6 +1179,7 @@ class Transaction(TypedDict): vout: List[TxOut] status: TxStatus + class TxOutspend(TypedDict): """ Status of an output indicating whether it has been spent @@ -868,14 +1190,17 @@ class TxOutspend(TypedDict): vin: Input index in the spending transaction (only present if spent) status: Status of the spending transaction (only present if spent) """ + spent: bool txid: Union[Txid, None] vin: Union[Vin, None] status: Union[TxStatus, None] + class TxidParam(TypedDict): txid: Txid + class TxidVout(TypedDict): """ Transaction output reference (txid + output index) @@ -884,25 +1209,31 @@ class TxidVout(TypedDict): txid: Transaction ID vout: Output index """ + txid: Txid vout: Vout + class Utxo(TypedDict): """ Unspent transaction output """ + txid: Txid vout: Vout status: TxStatus value: Sats + class ValidateAddressParam(TypedDict): """ Attributes: address: Bitcoin address to validate (can be any string) """ + address: str + class MetricLeafWithSchema(TypedDict): """ MetricLeaf with JSON Schema for client generation @@ -913,6 +1244,7 @@ class MetricLeafWithSchema(TypedDict): indexes: Available indexes for this metric type: JSON Schema type (e.g., "integer", "number", "string", "boolean", "array", "object") """ + name: str kind: str indexes: List[Index] @@ -933,7 +1265,7 @@ class BrkClientBase: def __init__(self, base_url: str, timeout: float = 30.0): parsed = urlparse(base_url) self._host = parsed.netloc - self._secure = parsed.scheme == 'https' + self._secure = parsed.scheme == "https" self._timeout = timeout self._conn: Optional[Union[HTTPSConnection, HTTPConnection]] = None @@ -988,6 +1320,7 @@ def _m(acc: str, s: str) -> str: class MetricData(TypedDict, Generic[T]): """Metric data with range information.""" + total: int start: int end: int @@ -1010,7 +1343,9 @@ class MetricEndpoint(Generic[T]): """Fetch all data points for this metric/index.""" return self._client.get_json(self.path()) - def range(self, start: Optional[int] = None, end: Optional[int] = None) -> MetricData[T]: + def range( + self, start: Optional[int] = None, end: Optional[int] = None + ) -> MetricData[T]: """Fetch data points within a range.""" params = [] if start is not None: @@ -1049,43 +1384,45 @@ class MetricPattern(Protocol[T]): # Index accessor classes + class _MetricPattern1By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def dateindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'dateindex') + return MetricEndpoint(self._client, self._name, "dateindex") def decadeindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'decadeindex') + return MetricEndpoint(self._client, self._name, "decadeindex") def difficultyepoch(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'difficultyepoch') + return MetricEndpoint(self._client, self._name, "difficultyepoch") def height(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'height') + return MetricEndpoint(self._client, self._name, "height") def monthindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'monthindex') + return MetricEndpoint(self._client, self._name, "monthindex") def quarterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'quarterindex') + return MetricEndpoint(self._client, self._name, "quarterindex") def semesterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'semesterindex') + return MetricEndpoint(self._client, self._name, "semesterindex") def weekindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'weekindex') + return MetricEndpoint(self._client, self._name, "weekindex") def yearindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'yearindex') + return MetricEndpoint(self._client, self._name, "yearindex") + class MetricPattern1(Generic[T]): """Index accessor for metrics with 9 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1098,55 +1435,76 @@ class MetricPattern1(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['dateindex', 'decadeindex', 'difficultyepoch', 'height', 'monthindex', 'quarterindex', 'semesterindex', 'weekindex', 'yearindex'] + return [ + "dateindex", + "decadeindex", + "difficultyepoch", + "height", + "monthindex", + "quarterindex", + "semesterindex", + "weekindex", + "yearindex", + ] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'dateindex': return self.by.dateindex() - elif index == 'decadeindex': return self.by.decadeindex() - elif index == 'difficultyepoch': return self.by.difficultyepoch() - elif index == 'height': return self.by.height() - elif index == 'monthindex': return self.by.monthindex() - elif index == 'quarterindex': return self.by.quarterindex() - elif index == 'semesterindex': return self.by.semesterindex() - elif index == 'weekindex': return self.by.weekindex() - elif index == 'yearindex': return self.by.yearindex() + if index == "dateindex": + return self.by.dateindex() + elif index == "decadeindex": + return self.by.decadeindex() + elif index == "difficultyepoch": + return self.by.difficultyepoch() + elif index == "height": + return self.by.height() + elif index == "monthindex": + return self.by.monthindex() + elif index == "quarterindex": + return self.by.quarterindex() + elif index == "semesterindex": + return self.by.semesterindex() + elif index == "weekindex": + return self.by.weekindex() + elif index == "yearindex": + return self.by.yearindex() return None + class _MetricPattern2By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def dateindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'dateindex') + return MetricEndpoint(self._client, self._name, "dateindex") def decadeindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'decadeindex') + return MetricEndpoint(self._client, self._name, "decadeindex") def difficultyepoch(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'difficultyepoch') + return MetricEndpoint(self._client, self._name, "difficultyepoch") def monthindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'monthindex') + return MetricEndpoint(self._client, self._name, "monthindex") def quarterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'quarterindex') + return MetricEndpoint(self._client, self._name, "quarterindex") def semesterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'semesterindex') + return MetricEndpoint(self._client, self._name, "semesterindex") def weekindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'weekindex') + return MetricEndpoint(self._client, self._name, "weekindex") def yearindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'yearindex') + return MetricEndpoint(self._client, self._name, "yearindex") + class MetricPattern2(Generic[T]): """Index accessor for metrics with 8 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1159,54 +1517,73 @@ class MetricPattern2(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['dateindex', 'decadeindex', 'difficultyepoch', 'monthindex', 'quarterindex', 'semesterindex', 'weekindex', 'yearindex'] + return [ + "dateindex", + "decadeindex", + "difficultyepoch", + "monthindex", + "quarterindex", + "semesterindex", + "weekindex", + "yearindex", + ] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'dateindex': return self.by.dateindex() - elif index == 'decadeindex': return self.by.decadeindex() - elif index == 'difficultyepoch': return self.by.difficultyepoch() - elif index == 'monthindex': return self.by.monthindex() - elif index == 'quarterindex': return self.by.quarterindex() - elif index == 'semesterindex': return self.by.semesterindex() - elif index == 'weekindex': return self.by.weekindex() - elif index == 'yearindex': return self.by.yearindex() + if index == "dateindex": + return self.by.dateindex() + elif index == "decadeindex": + return self.by.decadeindex() + elif index == "difficultyepoch": + return self.by.difficultyepoch() + elif index == "monthindex": + return self.by.monthindex() + elif index == "quarterindex": + return self.by.quarterindex() + elif index == "semesterindex": + return self.by.semesterindex() + elif index == "weekindex": + return self.by.weekindex() + elif index == "yearindex": + return self.by.yearindex() return None + class _MetricPattern3By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def dateindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'dateindex') + return MetricEndpoint(self._client, self._name, "dateindex") def decadeindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'decadeindex') + return MetricEndpoint(self._client, self._name, "decadeindex") def height(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'height') + return MetricEndpoint(self._client, self._name, "height") def monthindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'monthindex') + return MetricEndpoint(self._client, self._name, "monthindex") def quarterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'quarterindex') + return MetricEndpoint(self._client, self._name, "quarterindex") def semesterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'semesterindex') + return MetricEndpoint(self._client, self._name, "semesterindex") def weekindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'weekindex') + return MetricEndpoint(self._client, self._name, "weekindex") def yearindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'yearindex') + return MetricEndpoint(self._client, self._name, "yearindex") + class MetricPattern3(Generic[T]): """Index accessor for metrics with 8 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1219,51 +1596,70 @@ class MetricPattern3(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['dateindex', 'decadeindex', 'height', 'monthindex', 'quarterindex', 'semesterindex', 'weekindex', 'yearindex'] + return [ + "dateindex", + "decadeindex", + "height", + "monthindex", + "quarterindex", + "semesterindex", + "weekindex", + "yearindex", + ] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'dateindex': return self.by.dateindex() - elif index == 'decadeindex': return self.by.decadeindex() - elif index == 'height': return self.by.height() - elif index == 'monthindex': return self.by.monthindex() - elif index == 'quarterindex': return self.by.quarterindex() - elif index == 'semesterindex': return self.by.semesterindex() - elif index == 'weekindex': return self.by.weekindex() - elif index == 'yearindex': return self.by.yearindex() + if index == "dateindex": + return self.by.dateindex() + elif index == "decadeindex": + return self.by.decadeindex() + elif index == "height": + return self.by.height() + elif index == "monthindex": + return self.by.monthindex() + elif index == "quarterindex": + return self.by.quarterindex() + elif index == "semesterindex": + return self.by.semesterindex() + elif index == "weekindex": + return self.by.weekindex() + elif index == "yearindex": + return self.by.yearindex() return None + class _MetricPattern4By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def dateindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'dateindex') + return MetricEndpoint(self._client, self._name, "dateindex") def decadeindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'decadeindex') + return MetricEndpoint(self._client, self._name, "decadeindex") def monthindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'monthindex') + return MetricEndpoint(self._client, self._name, "monthindex") def quarterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'quarterindex') + return MetricEndpoint(self._client, self._name, "quarterindex") def semesterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'semesterindex') + return MetricEndpoint(self._client, self._name, "semesterindex") def weekindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'weekindex') + return MetricEndpoint(self._client, self._name, "weekindex") def yearindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'yearindex') + return MetricEndpoint(self._client, self._name, "yearindex") + class MetricPattern4(Generic[T]): """Index accessor for metrics with 7 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1276,35 +1672,52 @@ class MetricPattern4(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['dateindex', 'decadeindex', 'monthindex', 'quarterindex', 'semesterindex', 'weekindex', 'yearindex'] + return [ + "dateindex", + "decadeindex", + "monthindex", + "quarterindex", + "semesterindex", + "weekindex", + "yearindex", + ] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'dateindex': return self.by.dateindex() - elif index == 'decadeindex': return self.by.decadeindex() - elif index == 'monthindex': return self.by.monthindex() - elif index == 'quarterindex': return self.by.quarterindex() - elif index == 'semesterindex': return self.by.semesterindex() - elif index == 'weekindex': return self.by.weekindex() - elif index == 'yearindex': return self.by.yearindex() + if index == "dateindex": + return self.by.dateindex() + elif index == "decadeindex": + return self.by.decadeindex() + elif index == "monthindex": + return self.by.monthindex() + elif index == "quarterindex": + return self.by.quarterindex() + elif index == "semesterindex": + return self.by.semesterindex() + elif index == "weekindex": + return self.by.weekindex() + elif index == "yearindex": + return self.by.yearindex() return None + class _MetricPattern5By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def dateindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'dateindex') + return MetricEndpoint(self._client, self._name, "dateindex") def height(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'height') + return MetricEndpoint(self._client, self._name, "height") + class MetricPattern5(Generic[T]): """Index accessor for metrics with 2 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1317,27 +1730,31 @@ class MetricPattern5(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['dateindex', 'height'] + return ["dateindex", "height"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'dateindex': return self.by.dateindex() - elif index == 'height': return self.by.height() + if index == "dateindex": + return self.by.dateindex() + elif index == "height": + return self.by.height() return None + class _MetricPattern6By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def dateindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'dateindex') + return MetricEndpoint(self._client, self._name, "dateindex") + class MetricPattern6(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1350,26 +1767,29 @@ class MetricPattern6(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['dateindex'] + return ["dateindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'dateindex': return self.by.dateindex() + if index == "dateindex": + return self.by.dateindex() return None + class _MetricPattern7By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def decadeindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'decadeindex') + return MetricEndpoint(self._client, self._name, "decadeindex") + class MetricPattern7(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1382,26 +1802,29 @@ class MetricPattern7(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['decadeindex'] + return ["decadeindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'decadeindex': return self.by.decadeindex() + if index == "decadeindex": + return self.by.decadeindex() return None + class _MetricPattern8By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def difficultyepoch(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'difficultyepoch') + return MetricEndpoint(self._client, self._name, "difficultyepoch") + class MetricPattern8(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1414,26 +1837,29 @@ class MetricPattern8(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['difficultyepoch'] + return ["difficultyepoch"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'difficultyepoch': return self.by.difficultyepoch() + if index == "difficultyepoch": + return self.by.difficultyepoch() return None + class _MetricPattern9By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def emptyoutputindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'emptyoutputindex') + return MetricEndpoint(self._client, self._name, "emptyoutputindex") + class MetricPattern9(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1446,26 +1872,29 @@ class MetricPattern9(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['emptyoutputindex'] + return ["emptyoutputindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'emptyoutputindex': return self.by.emptyoutputindex() + if index == "emptyoutputindex": + return self.by.emptyoutputindex() return None + class _MetricPattern10By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def halvingepoch(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'halvingepoch') + return MetricEndpoint(self._client, self._name, "halvingepoch") + class MetricPattern10(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1478,26 +1907,29 @@ class MetricPattern10(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['halvingepoch'] + return ["halvingepoch"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'halvingepoch': return self.by.halvingepoch() + if index == "halvingepoch": + return self.by.halvingepoch() return None + class _MetricPattern11By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def height(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'height') + return MetricEndpoint(self._client, self._name, "height") + class MetricPattern11(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1510,26 +1942,29 @@ class MetricPattern11(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['height'] + return ["height"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'height': return self.by.height() + if index == "height": + return self.by.height() return None + class _MetricPattern12By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def txinindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'txinindex') + return MetricEndpoint(self._client, self._name, "txinindex") + class MetricPattern12(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1542,26 +1977,29 @@ class MetricPattern12(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['txinindex'] + return ["txinindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'txinindex': return self.by.txinindex() + if index == "txinindex": + return self.by.txinindex() return None + class _MetricPattern13By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def monthindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'monthindex') + return MetricEndpoint(self._client, self._name, "monthindex") + class MetricPattern13(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1574,26 +2012,29 @@ class MetricPattern13(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['monthindex'] + return ["monthindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'monthindex': return self.by.monthindex() + if index == "monthindex": + return self.by.monthindex() return None + class _MetricPattern14By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def opreturnindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'opreturnindex') + return MetricEndpoint(self._client, self._name, "opreturnindex") + class MetricPattern14(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1606,26 +2047,29 @@ class MetricPattern14(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['opreturnindex'] + return ["opreturnindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'opreturnindex': return self.by.opreturnindex() + if index == "opreturnindex": + return self.by.opreturnindex() return None + class _MetricPattern15By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def txoutindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'txoutindex') + return MetricEndpoint(self._client, self._name, "txoutindex") + class MetricPattern15(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1638,26 +2082,29 @@ class MetricPattern15(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['txoutindex'] + return ["txoutindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'txoutindex': return self.by.txoutindex() + if index == "txoutindex": + return self.by.txoutindex() return None + class _MetricPattern16By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def p2aaddressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'p2aaddressindex') + return MetricEndpoint(self._client, self._name, "p2aaddressindex") + class MetricPattern16(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1670,26 +2117,29 @@ class MetricPattern16(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['p2aaddressindex'] + return ["p2aaddressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'p2aaddressindex': return self.by.p2aaddressindex() + if index == "p2aaddressindex": + return self.by.p2aaddressindex() return None + class _MetricPattern17By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def p2msoutputindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'p2msoutputindex') + return MetricEndpoint(self._client, self._name, "p2msoutputindex") + class MetricPattern17(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1702,26 +2152,29 @@ class MetricPattern17(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['p2msoutputindex'] + return ["p2msoutputindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'p2msoutputindex': return self.by.p2msoutputindex() + if index == "p2msoutputindex": + return self.by.p2msoutputindex() return None + class _MetricPattern18By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def p2pk33addressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'p2pk33addressindex') + return MetricEndpoint(self._client, self._name, "p2pk33addressindex") + class MetricPattern18(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1734,26 +2187,29 @@ class MetricPattern18(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['p2pk33addressindex'] + return ["p2pk33addressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'p2pk33addressindex': return self.by.p2pk33addressindex() + if index == "p2pk33addressindex": + return self.by.p2pk33addressindex() return None + class _MetricPattern19By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def p2pk65addressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'p2pk65addressindex') + return MetricEndpoint(self._client, self._name, "p2pk65addressindex") + class MetricPattern19(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1766,26 +2222,29 @@ class MetricPattern19(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['p2pk65addressindex'] + return ["p2pk65addressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'p2pk65addressindex': return self.by.p2pk65addressindex() + if index == "p2pk65addressindex": + return self.by.p2pk65addressindex() return None + class _MetricPattern20By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def p2pkhaddressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'p2pkhaddressindex') + return MetricEndpoint(self._client, self._name, "p2pkhaddressindex") + class MetricPattern20(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1798,26 +2257,29 @@ class MetricPattern20(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['p2pkhaddressindex'] + return ["p2pkhaddressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'p2pkhaddressindex': return self.by.p2pkhaddressindex() + if index == "p2pkhaddressindex": + return self.by.p2pkhaddressindex() return None + class _MetricPattern21By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def p2shaddressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'p2shaddressindex') + return MetricEndpoint(self._client, self._name, "p2shaddressindex") + class MetricPattern21(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1830,26 +2292,29 @@ class MetricPattern21(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['p2shaddressindex'] + return ["p2shaddressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'p2shaddressindex': return self.by.p2shaddressindex() + if index == "p2shaddressindex": + return self.by.p2shaddressindex() return None + class _MetricPattern22By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def p2traddressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'p2traddressindex') + return MetricEndpoint(self._client, self._name, "p2traddressindex") + class MetricPattern22(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1862,26 +2327,29 @@ class MetricPattern22(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['p2traddressindex'] + return ["p2traddressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'p2traddressindex': return self.by.p2traddressindex() + if index == "p2traddressindex": + return self.by.p2traddressindex() return None + class _MetricPattern23By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def p2wpkhaddressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'p2wpkhaddressindex') + return MetricEndpoint(self._client, self._name, "p2wpkhaddressindex") + class MetricPattern23(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1894,26 +2362,29 @@ class MetricPattern23(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['p2wpkhaddressindex'] + return ["p2wpkhaddressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'p2wpkhaddressindex': return self.by.p2wpkhaddressindex() + if index == "p2wpkhaddressindex": + return self.by.p2wpkhaddressindex() return None + class _MetricPattern24By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def p2wshaddressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'p2wshaddressindex') + return MetricEndpoint(self._client, self._name, "p2wshaddressindex") + class MetricPattern24(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1926,26 +2397,29 @@ class MetricPattern24(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['p2wshaddressindex'] + return ["p2wshaddressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'p2wshaddressindex': return self.by.p2wshaddressindex() + if index == "p2wshaddressindex": + return self.by.p2wshaddressindex() return None + class _MetricPattern25By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def quarterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'quarterindex') + return MetricEndpoint(self._client, self._name, "quarterindex") + class MetricPattern25(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1958,26 +2432,29 @@ class MetricPattern25(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['quarterindex'] + return ["quarterindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'quarterindex': return self.by.quarterindex() + if index == "quarterindex": + return self.by.quarterindex() return None + class _MetricPattern26By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def semesterindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'semesterindex') + return MetricEndpoint(self._client, self._name, "semesterindex") + class MetricPattern26(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -1990,26 +2467,29 @@ class MetricPattern26(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['semesterindex'] + return ["semesterindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'semesterindex': return self.by.semesterindex() + if index == "semesterindex": + return self.by.semesterindex() return None + class _MetricPattern27By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def txindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'txindex') + return MetricEndpoint(self._client, self._name, "txindex") + class MetricPattern27(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -2022,26 +2502,29 @@ class MetricPattern27(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['txindex'] + return ["txindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'txindex': return self.by.txindex() + if index == "txindex": + return self.by.txindex() return None + class _MetricPattern28By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def unknownoutputindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'unknownoutputindex') + return MetricEndpoint(self._client, self._name, "unknownoutputindex") + class MetricPattern28(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -2054,26 +2537,29 @@ class MetricPattern28(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['unknownoutputindex'] + return ["unknownoutputindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'unknownoutputindex': return self.by.unknownoutputindex() + if index == "unknownoutputindex": + return self.by.unknownoutputindex() return None + class _MetricPattern29By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def weekindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'weekindex') + return MetricEndpoint(self._client, self._name, "weekindex") + class MetricPattern29(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -2086,26 +2572,29 @@ class MetricPattern29(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['weekindex'] + return ["weekindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'weekindex': return self.by.weekindex() + if index == "weekindex": + return self.by.weekindex() return None + class _MetricPattern30By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def yearindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'yearindex') + return MetricEndpoint(self._client, self._name, "yearindex") + class MetricPattern30(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -2118,26 +2607,29 @@ class MetricPattern30(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['yearindex'] + return ["yearindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'yearindex': return self.by.yearindex() + if index == "yearindex": + return self.by.yearindex() return None + class _MetricPattern31By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def loadedaddressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'loadedaddressindex') + return MetricEndpoint(self._client, self._name, "loadedaddressindex") + class MetricPattern31(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -2150,26 +2642,29 @@ class MetricPattern31(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['loadedaddressindex'] + return ["loadedaddressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'loadedaddressindex': return self.by.loadedaddressindex() + if index == "loadedaddressindex": + return self.by.loadedaddressindex() return None + class _MetricPattern32By(Generic[T]): """Index endpoint methods container.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name def emptyaddressindex(self) -> MetricEndpoint[T]: - return MetricEndpoint(self._client, self._name, 'emptyaddressindex') + return MetricEndpoint(self._client, self._name, "emptyaddressindex") + class MetricPattern32(Generic[T]): """Index accessor for metrics with 1 indexes.""" - + def __init__(self, client: BrkClientBase, name: str): self._client = client self._name = name @@ -2182,531 +2677,1090 @@ class MetricPattern32(Generic[T]): def indexes(self) -> List[str]: """Get the list of available indexes.""" - return ['emptyaddressindex'] + return ["emptyaddressindex"] def get(self, index: str) -> Optional[MetricEndpoint[T]]: """Get an endpoint for a specific index, if supported.""" - if index == 'emptyaddressindex': return self.by.emptyaddressindex() + if index == "emptyaddressindex": + return self.by.emptyaddressindex() return None + # Reusable structural pattern classes + class RealizedPattern3: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.adjusted_sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr')) - self.adjusted_sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr_30d_ema')) - self.adjusted_sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr_7d_ema')) - self.adjusted_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'adjusted_value_created')) - self.adjusted_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'adjusted_value_destroyed')) - self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'mvrv')) - self.neg_realized_loss: BitcoinPattern[Dollars] = BitcoinPattern(client, _m(acc, 'neg_realized_loss')) - self.net_realized_pnl: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'net_realized_pnl')) - self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta')) - self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_market_cap')) - self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap')) - self.net_realized_pnl_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'net_realized_pnl_rel_to_realized_cap')) - self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap')) - self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_cap_30d_delta')) - self.realized_cap_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'realized_cap_rel_to_own_market_cap')) - self.realized_loss: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'realized_loss')) - self.realized_loss_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'realized_loss_rel_to_realized_cap')) - self.realized_price: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_price')) - self.realized_price_extra: ActivePriceRatioPattern = ActivePriceRatioPattern(client, _m(acc, 'realized_price_ratio')) - self.realized_profit: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'realized_profit')) - self.realized_profit_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'realized_profit_rel_to_realized_cap')) - self.realized_profit_to_loss_ratio: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'realized_profit_to_loss_ratio')) - self.realized_value: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_value')) - self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio')) - self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_30d_ema')) - self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_7d_ema')) - self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr')) - self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_30d_ema')) - self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_7d_ema')) - self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_realized_pnl')) - self.value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_created')) - self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_destroyed')) + self.adjusted_sopr: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "adjusted_sopr") + ) + self.adjusted_sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "adjusted_sopr_30d_ema") + ) + self.adjusted_sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "adjusted_sopr_7d_ema") + ) + self.adjusted_value_created: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "adjusted_value_created") + ) + self.adjusted_value_destroyed: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "adjusted_value_destroyed") + ) + self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "mvrv")) + self.neg_realized_loss: BitcoinPattern[Dollars] = BitcoinPattern( + client, _m(acc, "neg_realized_loss") + ) + self.net_realized_pnl: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "net_realized_pnl") + ) + self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = ( + MetricPattern4(client, _m(acc, "net_realized_pnl_cumulative_30d_delta")) + ) + self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[ + StoredF32 + ] = MetricPattern4( + client, _m(acc, "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap") + ) + self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[ + StoredF32 + ] = MetricPattern4( + client, _m(acc, "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap") + ) + self.net_realized_pnl_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "net_realized_pnl_rel_to_realized_cap")) + ) + self.realized_cap: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_cap") + ) + self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "realized_cap_30d_delta") + ) + self.realized_cap_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "realized_cap_rel_to_own_market_cap")) + ) + self.realized_loss: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "realized_loss") + ) + self.realized_loss_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "realized_loss_rel_to_realized_cap")) + ) + self.realized_price: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_price") + ) + self.realized_price_extra: ActivePriceRatioPattern = ActivePriceRatioPattern( + client, _m(acc, "realized_price_ratio") + ) + self.realized_profit: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "realized_profit") + ) + self.realized_profit_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "realized_profit_rel_to_realized_cap")) + ) + self.realized_profit_to_loss_ratio: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "realized_profit_to_loss_ratio") + ) + self.realized_value: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_value") + ) + self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio") + ) + self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio_30d_ema") + ) + self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio_7d_ema") + ) + self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, "sopr")) + self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "sopr_30d_ema") + ) + self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "sopr_7d_ema") + ) + self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "total_realized_pnl") + ) + self.value_created: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "value_created") + ) + self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "value_destroyed") + ) + class RealizedPattern4: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.adjusted_sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr')) - self.adjusted_sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr_30d_ema')) - self.adjusted_sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'adjusted_sopr_7d_ema')) - self.adjusted_value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'adjusted_value_created')) - self.adjusted_value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'adjusted_value_destroyed')) - self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'mvrv')) - self.neg_realized_loss: BitcoinPattern[Dollars] = BitcoinPattern(client, _m(acc, 'neg_realized_loss')) - self.net_realized_pnl: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'net_realized_pnl')) - self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta')) - self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_market_cap')) - self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap')) - self.net_realized_pnl_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'net_realized_pnl_rel_to_realized_cap')) - self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap')) - self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_cap_30d_delta')) - self.realized_loss: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'realized_loss')) - self.realized_loss_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'realized_loss_rel_to_realized_cap')) - self.realized_price: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_price')) - self.realized_price_extra: RealizedPriceExtraPattern = RealizedPriceExtraPattern(client, _m(acc, 'realized_price')) - self.realized_profit: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'realized_profit')) - self.realized_profit_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'realized_profit_rel_to_realized_cap')) - self.realized_value: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_value')) - self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio')) - self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_30d_ema')) - self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_7d_ema')) - self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr')) - self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_30d_ema')) - self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_7d_ema')) - self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_realized_pnl')) - self.value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_created')) - self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_destroyed')) + self.adjusted_sopr: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "adjusted_sopr") + ) + self.adjusted_sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "adjusted_sopr_30d_ema") + ) + self.adjusted_sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "adjusted_sopr_7d_ema") + ) + self.adjusted_value_created: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "adjusted_value_created") + ) + self.adjusted_value_destroyed: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "adjusted_value_destroyed") + ) + self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "mvrv")) + self.neg_realized_loss: BitcoinPattern[Dollars] = BitcoinPattern( + client, _m(acc, "neg_realized_loss") + ) + self.net_realized_pnl: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "net_realized_pnl") + ) + self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = ( + MetricPattern4(client, _m(acc, "net_realized_pnl_cumulative_30d_delta")) + ) + self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[ + StoredF32 + ] = MetricPattern4( + client, _m(acc, "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap") + ) + self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[ + StoredF32 + ] = MetricPattern4( + client, _m(acc, "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap") + ) + self.net_realized_pnl_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "net_realized_pnl_rel_to_realized_cap")) + ) + self.realized_cap: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_cap") + ) + self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "realized_cap_30d_delta") + ) + self.realized_loss: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "realized_loss") + ) + self.realized_loss_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "realized_loss_rel_to_realized_cap")) + ) + self.realized_price: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_price") + ) + self.realized_price_extra: RealizedPriceExtraPattern = ( + RealizedPriceExtraPattern(client, _m(acc, "realized_price")) + ) + self.realized_profit: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "realized_profit") + ) + self.realized_profit_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "realized_profit_rel_to_realized_cap")) + ) + self.realized_value: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_value") + ) + self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio") + ) + self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio_30d_ema") + ) + self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio_7d_ema") + ) + self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, "sopr")) + self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "sopr_30d_ema") + ) + self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "sopr_7d_ema") + ) + self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "total_realized_pnl") + ) + self.value_created: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "value_created") + ) + self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "value_destroyed") + ) + class Ratio1ySdPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self._0sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, '0sd_usd')) - self.m0_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm0_5sd')) - self.m0_5sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'm0_5sd_usd')) - self.m1_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm1_5sd')) - self.m1_5sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'm1_5sd_usd')) - self.m1sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm1sd')) - self.m1sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'm1sd_usd')) - self.m2_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm2_5sd')) - self.m2_5sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'm2_5sd_usd')) - self.m2sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm2sd')) - self.m2sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'm2sd_usd')) - self.m3sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'm3sd')) - self.m3sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'm3sd_usd')) - self.p0_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p0_5sd')) - self.p0_5sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'p0_5sd_usd')) - self.p1_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p1_5sd')) - self.p1_5sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'p1_5sd_usd')) - self.p1sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p1sd')) - self.p1sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'p1sd_usd')) - self.p2_5sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p2_5sd')) - self.p2_5sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'p2_5sd_usd')) - self.p2sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p2sd')) - self.p2sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'p2sd_usd')) - self.p3sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'p3sd')) - self.p3sd_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'p3sd_usd')) - self.sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'sd')) - self.sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'sma')) - self.zscore: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'zscore')) + self._0sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "0sd_usd") + ) + self.m0_5sd: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "m0_5sd") + ) + self.m0_5sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "m0_5sd_usd") + ) + self.m1_5sd: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "m1_5sd") + ) + self.m1_5sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "m1_5sd_usd") + ) + self.m1sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "m1sd")) + self.m1sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "m1sd_usd") + ) + self.m2_5sd: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "m2_5sd") + ) + self.m2_5sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "m2_5sd_usd") + ) + self.m2sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "m2sd")) + self.m2sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "m2sd_usd") + ) + self.m3sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "m3sd")) + self.m3sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "m3sd_usd") + ) + self.p0_5sd: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "p0_5sd") + ) + self.p0_5sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "p0_5sd_usd") + ) + self.p1_5sd: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "p1_5sd") + ) + self.p1_5sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "p1_5sd_usd") + ) + self.p1sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "p1sd")) + self.p1sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "p1sd_usd") + ) + self.p2_5sd: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "p2_5sd") + ) + self.p2_5sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "p2_5sd_usd") + ) + self.p2sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "p2sd")) + self.p2sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "p2sd_usd") + ) + self.p3sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "p3sd")) + self.p3sd_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "p3sd_usd") + ) + self.sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "sd")) + self.sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "sma")) + self.zscore: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "zscore") + ) + class RealizedPattern2: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'mvrv')) - self.neg_realized_loss: BitcoinPattern[Dollars] = BitcoinPattern(client, _m(acc, 'neg_realized_loss')) - self.net_realized_pnl: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'net_realized_pnl')) - self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta')) - self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_market_cap')) - self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap')) - self.net_realized_pnl_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'net_realized_pnl_rel_to_realized_cap')) - self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap')) - self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_cap_30d_delta')) - self.realized_cap_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'realized_cap_rel_to_own_market_cap')) - self.realized_loss: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'realized_loss')) - self.realized_loss_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'realized_loss_rel_to_realized_cap')) - self.realized_price: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_price')) - self.realized_price_extra: ActivePriceRatioPattern = ActivePriceRatioPattern(client, _m(acc, 'realized_price_ratio')) - self.realized_profit: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'realized_profit')) - self.realized_profit_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'realized_profit_rel_to_realized_cap')) - self.realized_profit_to_loss_ratio: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'realized_profit_to_loss_ratio')) - self.realized_value: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_value')) - self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio')) - self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_30d_ema')) - self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_7d_ema')) - self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr')) - self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_30d_ema')) - self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_7d_ema')) - self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_realized_pnl')) - self.value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_created')) - self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_destroyed')) + self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "mvrv")) + self.neg_realized_loss: BitcoinPattern[Dollars] = BitcoinPattern( + client, _m(acc, "neg_realized_loss") + ) + self.net_realized_pnl: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "net_realized_pnl") + ) + self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = ( + MetricPattern4(client, _m(acc, "net_realized_pnl_cumulative_30d_delta")) + ) + self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[ + StoredF32 + ] = MetricPattern4( + client, _m(acc, "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap") + ) + self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[ + StoredF32 + ] = MetricPattern4( + client, _m(acc, "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap") + ) + self.net_realized_pnl_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "net_realized_pnl_rel_to_realized_cap")) + ) + self.realized_cap: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_cap") + ) + self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "realized_cap_30d_delta") + ) + self.realized_cap_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "realized_cap_rel_to_own_market_cap")) + ) + self.realized_loss: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "realized_loss") + ) + self.realized_loss_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "realized_loss_rel_to_realized_cap")) + ) + self.realized_price: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_price") + ) + self.realized_price_extra: ActivePriceRatioPattern = ActivePriceRatioPattern( + client, _m(acc, "realized_price_ratio") + ) + self.realized_profit: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "realized_profit") + ) + self.realized_profit_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "realized_profit_rel_to_realized_cap")) + ) + self.realized_profit_to_loss_ratio: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "realized_profit_to_loss_ratio") + ) + self.realized_value: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_value") + ) + self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio") + ) + self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio_30d_ema") + ) + self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio_7d_ema") + ) + self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, "sopr")) + self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "sopr_30d_ema") + ) + self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "sopr_7d_ema") + ) + self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "total_realized_pnl") + ) + self.value_created: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "value_created") + ) + self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "value_destroyed") + ) + class RealizedPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'mvrv')) - self.neg_realized_loss: BitcoinPattern[Dollars] = BitcoinPattern(client, _m(acc, 'neg_realized_loss')) - self.net_realized_pnl: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'net_realized_pnl')) - self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta')) - self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_market_cap')) - self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap')) - self.net_realized_pnl_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'net_realized_pnl_rel_to_realized_cap')) - self.realized_cap: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_cap')) - self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'realized_cap_30d_delta')) - self.realized_loss: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'realized_loss')) - self.realized_loss_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'realized_loss_rel_to_realized_cap')) - self.realized_price: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_price')) - self.realized_price_extra: RealizedPriceExtraPattern = RealizedPriceExtraPattern(client, _m(acc, 'realized_price')) - self.realized_profit: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'realized_profit')) - self.realized_profit_rel_to_realized_cap: BlockCountPattern[StoredF32] = BlockCountPattern(client, _m(acc, 'realized_profit_rel_to_realized_cap')) - self.realized_value: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'realized_value')) - self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio')) - self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_30d_ema')) - self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6(client, _m(acc, 'sell_side_risk_ratio_7d_ema')) - self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr')) - self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_30d_ema')) - self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, 'sopr_7d_ema')) - self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_realized_pnl')) - self.value_created: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_created')) - self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'value_destroyed')) + self.mvrv: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "mvrv")) + self.neg_realized_loss: BitcoinPattern[Dollars] = BitcoinPattern( + client, _m(acc, "neg_realized_loss") + ) + self.net_realized_pnl: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "net_realized_pnl") + ) + self.net_realized_pnl_cumulative_30d_delta: MetricPattern4[Dollars] = ( + MetricPattern4(client, _m(acc, "net_realized_pnl_cumulative_30d_delta")) + ) + self.net_realized_pnl_cumulative_30d_delta_rel_to_market_cap: MetricPattern4[ + StoredF32 + ] = MetricPattern4( + client, _m(acc, "net_realized_pnl_cumulative_30d_delta_rel_to_market_cap") + ) + self.net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap: MetricPattern4[ + StoredF32 + ] = MetricPattern4( + client, _m(acc, "net_realized_pnl_cumulative_30d_delta_rel_to_realized_cap") + ) + self.net_realized_pnl_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "net_realized_pnl_rel_to_realized_cap")) + ) + self.realized_cap: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_cap") + ) + self.realized_cap_30d_delta: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "realized_cap_30d_delta") + ) + self.realized_loss: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "realized_loss") + ) + self.realized_loss_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "realized_loss_rel_to_realized_cap")) + ) + self.realized_price: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_price") + ) + self.realized_price_extra: RealizedPriceExtraPattern = ( + RealizedPriceExtraPattern(client, _m(acc, "realized_price")) + ) + self.realized_profit: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "realized_profit") + ) + self.realized_profit_rel_to_realized_cap: BlockCountPattern[StoredF32] = ( + BlockCountPattern(client, _m(acc, "realized_profit_rel_to_realized_cap")) + ) + self.realized_value: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "realized_value") + ) + self.sell_side_risk_ratio: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio") + ) + self.sell_side_risk_ratio_30d_ema: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio_30d_ema") + ) + self.sell_side_risk_ratio_7d_ema: MetricPattern6[StoredF32] = MetricPattern6( + client, _m(acc, "sell_side_risk_ratio_7d_ema") + ) + self.sopr: MetricPattern6[StoredF64] = MetricPattern6(client, _m(acc, "sopr")) + self.sopr_30d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "sopr_30d_ema") + ) + self.sopr_7d_ema: MetricPattern6[StoredF64] = MetricPattern6( + client, _m(acc, "sopr_7d_ema") + ) + self.total_realized_pnl: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "total_realized_pnl") + ) + self.value_created: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "value_created") + ) + self.value_destroyed: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "value_destroyed") + ) + class Price111dSmaPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" self.price: MetricPattern4[Dollars] = MetricPattern4(client, acc) - self.ratio: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio')) - self.ratio_1m_sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_1m_sma')) - self.ratio_1w_sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_1w_sma')) - self.ratio_1y_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, 'ratio_1y')) - self.ratio_2y_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, 'ratio_2y')) - self.ratio_4y_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, 'ratio_4y')) - self.ratio_pct1: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct1')) - self.ratio_pct1_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'ratio_pct1_usd')) - self.ratio_pct2: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct2')) - self.ratio_pct2_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'ratio_pct2_usd')) - self.ratio_pct5: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct5')) - self.ratio_pct5_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'ratio_pct5_usd')) - self.ratio_pct95: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct95')) - self.ratio_pct95_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'ratio_pct95_usd')) - self.ratio_pct98: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct98')) - self.ratio_pct98_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'ratio_pct98_usd')) - self.ratio_pct99: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio_pct99')) - self.ratio_pct99_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'ratio_pct99_usd')) - self.ratio_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, 'ratio')) + self.ratio: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "ratio")) + self.ratio_1m_sma: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "ratio_1m_sma") + ) + self.ratio_1w_sma: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "ratio_1w_sma") + ) + self.ratio_1y_sd: Ratio1ySdPattern = Ratio1ySdPattern( + client, _m(acc, "ratio_1y") + ) + self.ratio_2y_sd: Ratio1ySdPattern = Ratio1ySdPattern( + client, _m(acc, "ratio_2y") + ) + self.ratio_4y_sd: Ratio1ySdPattern = Ratio1ySdPattern( + client, _m(acc, "ratio_4y") + ) + self.ratio_pct1: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "ratio_pct1") + ) + self.ratio_pct1_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "ratio_pct1_usd") + ) + self.ratio_pct2: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "ratio_pct2") + ) + self.ratio_pct2_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "ratio_pct2_usd") + ) + self.ratio_pct5: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "ratio_pct5") + ) + self.ratio_pct5_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "ratio_pct5_usd") + ) + self.ratio_pct95: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "ratio_pct95") + ) + self.ratio_pct95_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "ratio_pct95_usd") + ) + self.ratio_pct98: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "ratio_pct98") + ) + self.ratio_pct98_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "ratio_pct98_usd") + ) + self.ratio_pct99: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "ratio_pct99") + ) + self.ratio_pct99_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "ratio_pct99_usd") + ) + self.ratio_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, "ratio")) + class PercentilesPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.cost_basis_pct05: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct05')) - self.cost_basis_pct10: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct10')) - self.cost_basis_pct15: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct15')) - self.cost_basis_pct20: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct20')) - self.cost_basis_pct25: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct25')) - self.cost_basis_pct30: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct30')) - self.cost_basis_pct35: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct35')) - self.cost_basis_pct40: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct40')) - self.cost_basis_pct45: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct45')) - self.cost_basis_pct50: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct50')) - self.cost_basis_pct55: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct55')) - self.cost_basis_pct60: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct60')) - self.cost_basis_pct65: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct65')) - self.cost_basis_pct70: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct70')) - self.cost_basis_pct75: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct75')) - self.cost_basis_pct80: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct80')) - self.cost_basis_pct85: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct85')) - self.cost_basis_pct90: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct90')) - self.cost_basis_pct95: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct95')) + self.cost_basis_pct05: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct05") + ) + self.cost_basis_pct10: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct10") + ) + self.cost_basis_pct15: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct15") + ) + self.cost_basis_pct20: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct20") + ) + self.cost_basis_pct25: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct25") + ) + self.cost_basis_pct30: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct30") + ) + self.cost_basis_pct35: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct35") + ) + self.cost_basis_pct40: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct40") + ) + self.cost_basis_pct45: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct45") + ) + self.cost_basis_pct50: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct50") + ) + self.cost_basis_pct55: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct55") + ) + self.cost_basis_pct60: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct60") + ) + self.cost_basis_pct65: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct65") + ) + self.cost_basis_pct70: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct70") + ) + self.cost_basis_pct75: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct75") + ) + self.cost_basis_pct80: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct80") + ) + self.cost_basis_pct85: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct85") + ) + self.cost_basis_pct90: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct90") + ) + self.cost_basis_pct95: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct95") + ) + class ActivePriceRatioPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" self.ratio: MetricPattern4[StoredF32] = MetricPattern4(client, acc) - self.ratio_1m_sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, '1m_sma')) - self.ratio_1w_sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, '1w_sma')) - self.ratio_1y_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, '1y')) - self.ratio_2y_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, '2y')) - self.ratio_4y_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, '4y')) - self.ratio_pct1: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct1')) - self.ratio_pct1_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct1_usd')) - self.ratio_pct2: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct2')) - self.ratio_pct2_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct2_usd')) - self.ratio_pct5: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct5')) - self.ratio_pct5_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct5_usd')) - self.ratio_pct95: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct95')) - self.ratio_pct95_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct95_usd')) - self.ratio_pct98: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct98')) - self.ratio_pct98_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct98_usd')) - self.ratio_pct99: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'pct99')) - self.ratio_pct99_usd: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'pct99_usd')) + self.ratio_1m_sma: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "1m_sma") + ) + self.ratio_1w_sma: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "1w_sma") + ) + self.ratio_1y_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, "1y")) + self.ratio_2y_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, "2y")) + self.ratio_4y_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, _m(acc, "4y")) + self.ratio_pct1: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "pct1") + ) + self.ratio_pct1_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct1_usd") + ) + self.ratio_pct2: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "pct2") + ) + self.ratio_pct2_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct2_usd") + ) + self.ratio_pct5: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "pct5") + ) + self.ratio_pct5_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct5_usd") + ) + self.ratio_pct95: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "pct95") + ) + self.ratio_pct95_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct95_usd") + ) + self.ratio_pct98: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "pct98") + ) + self.ratio_pct98_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct98_usd") + ) + self.ratio_pct99: MetricPattern4[StoredF32] = MetricPattern4( + client, _m(acc, "pct99") + ) + self.ratio_pct99_usd: MetricPattern4[Dollars] = MetricPattern4( + client, _m(acc, "pct99_usd") + ) self.ratio_sd: Ratio1ySdPattern = Ratio1ySdPattern(client, acc) + class RelativePattern5: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.neg_unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_market_cap')) - self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap')) - self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl')) - self.net_unrealized_pnl_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap')) - self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap')) - self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl')) - self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'nupl')) - self.supply_in_loss_rel_to_circulating_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply')) - self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply')) - self.supply_in_profit_rel_to_circulating_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply')) - self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply')) - self.supply_rel_to_circulating_supply: MetricPattern4[StoredF64] = MetricPattern4(client, _m(acc, 'supply_rel_to_circulating_supply')) - self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_market_cap')) - self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap')) - self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl')) - self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_market_cap')) - self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap')) - self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl')) + self.neg_unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "neg_unrealized_loss_rel_to_market_cap")) + ) + self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "neg_unrealized_loss_rel_to_own_market_cap")) + ) + self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1( + client, _m(acc, "neg_unrealized_loss_rel_to_own_total_unrealized_pnl") + ) + self.net_unrealized_pnl_rel_to_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "net_unrealized_pnl_rel_to_market_cap")) + ) + self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "net_unrealized_pnl_rel_to_own_market_cap")) + ) + self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1( + client, _m(acc, "net_unrealized_pnl_rel_to_own_total_unrealized_pnl") + ) + self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, "nupl")) + self.supply_in_loss_rel_to_circulating_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "supply_in_loss_rel_to_circulating_supply")) + ) + self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "supply_in_loss_rel_to_own_supply")) + ) + self.supply_in_profit_rel_to_circulating_supply: MetricPattern1[StoredF64] = ( + MetricPattern1( + client, _m(acc, "supply_in_profit_rel_to_circulating_supply") + ) + ) + self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "supply_in_profit_rel_to_own_supply")) + ) + self.supply_rel_to_circulating_supply: MetricPattern4[StoredF64] = ( + MetricPattern4(client, _m(acc, "supply_rel_to_circulating_supply")) + ) + self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "unrealized_loss_rel_to_market_cap")) + ) + self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "unrealized_loss_rel_to_own_market_cap")) + ) + self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1( + client, _m(acc, "unrealized_loss_rel_to_own_total_unrealized_pnl") + ) + self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "unrealized_profit_rel_to_market_cap")) + ) + self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "unrealized_profit_rel_to_own_market_cap")) + ) + self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1( + client, _m(acc, "unrealized_profit_rel_to_own_total_unrealized_pnl") + ) + class AaopoolPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self._1m_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, '1m_blocks_mined')) - self._1m_dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, '1m_dominance')) - self._1w_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, '1w_blocks_mined')) - self._1w_dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, '1w_dominance')) - self._1y_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, '1y_blocks_mined')) - self._1y_dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, '1y_dominance')) - self._24h_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1(client, _m(acc, '24h_blocks_mined')) - self._24h_dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, '24h_dominance')) - self.blocks_mined: BlockCountPattern[StoredU32] = BlockCountPattern(client, _m(acc, 'blocks_mined')) - self.coinbase: CoinbasePattern2 = CoinbasePattern2(client, _m(acc, 'coinbase')) - self.days_since_block: MetricPattern4[StoredU16] = MetricPattern4(client, _m(acc, 'days_since_block')) - self.dominance: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'dominance')) - self.fee: UnclaimedRewardsPattern = UnclaimedRewardsPattern(client, _m(acc, 'fee')) - self.subsidy: UnclaimedRewardsPattern = UnclaimedRewardsPattern(client, _m(acc, 'subsidy')) + self._1m_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1( + client, _m(acc, "1m_blocks_mined") + ) + self._1m_dominance: MetricPattern1[StoredF32] = MetricPattern1( + client, _m(acc, "1m_dominance") + ) + self._1w_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1( + client, _m(acc, "1w_blocks_mined") + ) + self._1w_dominance: MetricPattern1[StoredF32] = MetricPattern1( + client, _m(acc, "1w_dominance") + ) + self._1y_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1( + client, _m(acc, "1y_blocks_mined") + ) + self._1y_dominance: MetricPattern1[StoredF32] = MetricPattern1( + client, _m(acc, "1y_dominance") + ) + self._24h_blocks_mined: MetricPattern1[StoredU32] = MetricPattern1( + client, _m(acc, "24h_blocks_mined") + ) + self._24h_dominance: MetricPattern1[StoredF32] = MetricPattern1( + client, _m(acc, "24h_dominance") + ) + self.blocks_mined: BlockCountPattern[StoredU32] = BlockCountPattern( + client, _m(acc, "blocks_mined") + ) + self.coinbase: CoinbasePattern2 = CoinbasePattern2(client, _m(acc, "coinbase")) + self.days_since_block: MetricPattern4[StoredU16] = MetricPattern4( + client, _m(acc, "days_since_block") + ) + self.dominance: MetricPattern1[StoredF32] = MetricPattern1( + client, _m(acc, "dominance") + ) + self.fee: UnclaimedRewardsPattern = UnclaimedRewardsPattern( + client, _m(acc, "fee") + ) + self.subsidy: UnclaimedRewardsPattern = UnclaimedRewardsPattern( + client, _m(acc, "subsidy") + ) + class PriceAgoPattern(Generic[T]): """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, base_path: str): - self._10y: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_10y') - self._1d: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_1d') - self._1m: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_1m') - self._1w: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_1w') - self._1y: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_1y') - self._2y: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2y') - self._3m: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_3m') - self._3y: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_3y') - self._4y: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_4y') - self._5y: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_5y') - self._6m: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_6m') - self._6y: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_6y') - self._8y: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_8y') + self._10y: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_10y") + self._1d: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_1d") + self._1m: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_1m") + self._1w: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_1w") + self._1y: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_1y") + self._2y: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2y") + self._3m: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_3m") + self._3y: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_3y") + self._4y: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_4y") + self._5y: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_5y") + self._6m: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_6m") + self._6y: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_6y") + self._8y: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_8y") + class PeriodLumpSumStackPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self._10y: _2015Pattern = _2015Pattern(client, (f'10y_{acc}' if acc else '10y')) - self._1m: _2015Pattern = _2015Pattern(client, (f'1m_{acc}' if acc else '1m')) - self._1w: _2015Pattern = _2015Pattern(client, (f'1w_{acc}' if acc else '1w')) - self._1y: _2015Pattern = _2015Pattern(client, (f'1y_{acc}' if acc else '1y')) - self._2y: _2015Pattern = _2015Pattern(client, (f'2y_{acc}' if acc else '2y')) - self._3m: _2015Pattern = _2015Pattern(client, (f'3m_{acc}' if acc else '3m')) - self._3y: _2015Pattern = _2015Pattern(client, (f'3y_{acc}' if acc else '3y')) - self._4y: _2015Pattern = _2015Pattern(client, (f'4y_{acc}' if acc else '4y')) - self._5y: _2015Pattern = _2015Pattern(client, (f'5y_{acc}' if acc else '5y')) - self._6m: _2015Pattern = _2015Pattern(client, (f'6m_{acc}' if acc else '6m')) - self._6y: _2015Pattern = _2015Pattern(client, (f'6y_{acc}' if acc else '6y')) - self._8y: _2015Pattern = _2015Pattern(client, (f'8y_{acc}' if acc else '8y')) + self._10y: _2015Pattern = _2015Pattern(client, (f"10y_{acc}" if acc else "10y")) + self._1m: _2015Pattern = _2015Pattern(client, (f"1m_{acc}" if acc else "1m")) + self._1w: _2015Pattern = _2015Pattern(client, (f"1w_{acc}" if acc else "1w")) + self._1y: _2015Pattern = _2015Pattern(client, (f"1y_{acc}" if acc else "1y")) + self._2y: _2015Pattern = _2015Pattern(client, (f"2y_{acc}" if acc else "2y")) + self._3m: _2015Pattern = _2015Pattern(client, (f"3m_{acc}" if acc else "3m")) + self._3y: _2015Pattern = _2015Pattern(client, (f"3y_{acc}" if acc else "3y")) + self._4y: _2015Pattern = _2015Pattern(client, (f"4y_{acc}" if acc else "4y")) + self._5y: _2015Pattern = _2015Pattern(client, (f"5y_{acc}" if acc else "5y")) + self._6m: _2015Pattern = _2015Pattern(client, (f"6m_{acc}" if acc else "6m")) + self._6y: _2015Pattern = _2015Pattern(client, (f"6y_{acc}" if acc else "6y")) + self._8y: _2015Pattern = _2015Pattern(client, (f"8y_{acc}" if acc else "8y")) + class PeriodAveragePricePattern(Generic[T]): """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self._10y: MetricPattern4[T] = MetricPattern4(client, (f'10y_{acc}' if acc else '10y')) - self._1m: MetricPattern4[T] = MetricPattern4(client, (f'1m_{acc}' if acc else '1m')) - self._1w: MetricPattern4[T] = MetricPattern4(client, (f'1w_{acc}' if acc else '1w')) - self._1y: MetricPattern4[T] = MetricPattern4(client, (f'1y_{acc}' if acc else '1y')) - self._2y: MetricPattern4[T] = MetricPattern4(client, (f'2y_{acc}' if acc else '2y')) - self._3m: MetricPattern4[T] = MetricPattern4(client, (f'3m_{acc}' if acc else '3m')) - self._3y: MetricPattern4[T] = MetricPattern4(client, (f'3y_{acc}' if acc else '3y')) - self._4y: MetricPattern4[T] = MetricPattern4(client, (f'4y_{acc}' if acc else '4y')) - self._5y: MetricPattern4[T] = MetricPattern4(client, (f'5y_{acc}' if acc else '5y')) - self._6m: MetricPattern4[T] = MetricPattern4(client, (f'6m_{acc}' if acc else '6m')) - self._6y: MetricPattern4[T] = MetricPattern4(client, (f'6y_{acc}' if acc else '6y')) - self._8y: MetricPattern4[T] = MetricPattern4(client, (f'8y_{acc}' if acc else '8y')) -class DollarsPattern(Generic[T]): - """Pattern struct for repeated tree structure.""" - def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.average: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'average')) - self.base: MetricPattern11[T] = MetricPattern11(client, acc) - self.cumulative: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'cumulative')) - self.max: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'max')) - self.median: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'median')) - self.min: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'min')) - self.pct10: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct10')) - self.pct25: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct25')) - self.pct75: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct75')) - self.pct90: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct90')) - self.sum: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'sum')) + self._10y: MetricPattern4[T] = MetricPattern4( + client, (f"10y_{acc}" if acc else "10y") + ) + self._1m: MetricPattern4[T] = MetricPattern4( + client, (f"1m_{acc}" if acc else "1m") + ) + self._1w: MetricPattern4[T] = MetricPattern4( + client, (f"1w_{acc}" if acc else "1w") + ) + self._1y: MetricPattern4[T] = MetricPattern4( + client, (f"1y_{acc}" if acc else "1y") + ) + self._2y: MetricPattern4[T] = MetricPattern4( + client, (f"2y_{acc}" if acc else "2y") + ) + self._3m: MetricPattern4[T] = MetricPattern4( + client, (f"3m_{acc}" if acc else "3m") + ) + self._3y: MetricPattern4[T] = MetricPattern4( + client, (f"3y_{acc}" if acc else "3y") + ) + self._4y: MetricPattern4[T] = MetricPattern4( + client, (f"4y_{acc}" if acc else "4y") + ) + self._5y: MetricPattern4[T] = MetricPattern4( + client, (f"5y_{acc}" if acc else "5y") + ) + self._6m: MetricPattern4[T] = MetricPattern4( + client, (f"6m_{acc}" if acc else "6m") + ) + self._6y: MetricPattern4[T] = MetricPattern4( + client, (f"6y_{acc}" if acc else "6y") + ) + self._8y: MetricPattern4[T] = MetricPattern4( + client, (f"8y_{acc}" if acc else "8y") + ) + class ClassAveragePricePattern(Generic[T]): """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, base_path: str): - self._2015: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2015') - self._2016: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2016') - self._2017: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2017') - self._2018: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2018') - self._2019: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2019') - self._2020: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2020') - self._2021: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2021') - self._2022: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2022') - self._2023: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2023') - self._2024: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2024') - self._2025: MetricPattern4[T] = MetricPattern4(client, f'{base_path}_2025') + self._2015: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2015") + self._2016: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2016") + self._2017: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2017") + self._2018: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2018") + self._2019: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2019") + self._2020: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2020") + self._2021: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2021") + self._2022: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2022") + self._2023: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2023") + self._2024: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2024") + self._2025: MetricPattern4[T] = MetricPattern4(client, f"{base_path}_2025") + + +class DollarsPattern(Generic[T]): + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.average: MetricPattern2[T] = MetricPattern2(client, _m(acc, "average")) + self.base: MetricPattern11[T] = MetricPattern11(client, acc) + self.cumulative: MetricPattern1[T] = MetricPattern1( + client, _m(acc, "cumulative") + ) + self.max: MetricPattern2[T] = MetricPattern2(client, _m(acc, "max")) + self.median: MetricPattern6[T] = MetricPattern6(client, _m(acc, "median")) + self.min: MetricPattern2[T] = MetricPattern2(client, _m(acc, "min")) + self.pct10: MetricPattern6[T] = MetricPattern6(client, _m(acc, "pct10")) + self.pct25: MetricPattern6[T] = MetricPattern6(client, _m(acc, "pct25")) + self.pct75: MetricPattern6[T] = MetricPattern6(client, _m(acc, "pct75")) + self.pct90: MetricPattern6[T] = MetricPattern6(client, _m(acc, "pct90")) + self.sum: MetricPattern2[T] = MetricPattern2(client, _m(acc, "sum")) + class FullnessPattern(Generic[T]): """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.average: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'average')) + self.average: MetricPattern2[T] = MetricPattern2(client, _m(acc, "average")) self.base: MetricPattern11[T] = MetricPattern11(client, acc) - self.cumulative: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'cumulative')) - self.max: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'max')) - self.median: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'median')) - self.min: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'min')) - self.pct10: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct10')) - self.pct25: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct25')) - self.pct75: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct75')) - self.pct90: MetricPattern6[T] = MetricPattern6(client, _m(acc, 'pct90')) - self.sum: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'sum')) + self.cumulative: MetricPattern2[T] = MetricPattern2( + client, _m(acc, "cumulative") + ) + self.max: MetricPattern2[T] = MetricPattern2(client, _m(acc, "max")) + self.median: MetricPattern6[T] = MetricPattern6(client, _m(acc, "median")) + self.min: MetricPattern2[T] = MetricPattern2(client, _m(acc, "min")) + self.pct10: MetricPattern6[T] = MetricPattern6(client, _m(acc, "pct10")) + self.pct25: MetricPattern6[T] = MetricPattern6(client, _m(acc, "pct25")) + self.pct75: MetricPattern6[T] = MetricPattern6(client, _m(acc, "pct75")) + self.pct90: MetricPattern6[T] = MetricPattern6(client, _m(acc, "pct90")) + self.sum: MetricPattern2[T] = MetricPattern2(client, _m(acc, "sum")) + class RelativePattern2: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_market_cap')) - self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl')) - self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_market_cap')) - self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl')) - self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply')) - self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply')) - self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_market_cap')) - self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_own_total_unrealized_pnl')) - self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_market_cap')) - self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_own_total_unrealized_pnl')) + self.neg_unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "neg_unrealized_loss_rel_to_own_market_cap")) + ) + self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1( + client, _m(acc, "neg_unrealized_loss_rel_to_own_total_unrealized_pnl") + ) + self.net_unrealized_pnl_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "net_unrealized_pnl_rel_to_own_market_cap")) + ) + self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1( + client, _m(acc, "net_unrealized_pnl_rel_to_own_total_unrealized_pnl") + ) + self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "supply_in_loss_rel_to_own_supply")) + ) + self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "supply_in_profit_rel_to_own_supply")) + ) + self.unrealized_loss_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "unrealized_loss_rel_to_own_market_cap")) + ) + self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1( + client, _m(acc, "unrealized_loss_rel_to_own_total_unrealized_pnl") + ) + self.unrealized_profit_rel_to_own_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "unrealized_profit_rel_to_own_market_cap")) + ) + self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1( + client, _m(acc, "unrealized_profit_rel_to_own_total_unrealized_pnl") + ) + class RelativePattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.neg_unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss_rel_to_market_cap')) - self.net_unrealized_pnl_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl_rel_to_market_cap')) - self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'nupl')) - self.supply_in_loss_rel_to_circulating_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_circulating_supply')) - self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_loss_rel_to_own_supply')) - self.supply_in_profit_rel_to_circulating_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_circulating_supply')) - self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'supply_in_profit_rel_to_own_supply')) - self.supply_rel_to_circulating_supply: MetricPattern4[StoredF64] = MetricPattern4(client, _m(acc, 'supply_rel_to_circulating_supply')) - self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_loss_rel_to_market_cap')) - self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, 'unrealized_profit_rel_to_market_cap')) + self.neg_unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "neg_unrealized_loss_rel_to_market_cap")) + ) + self.net_unrealized_pnl_rel_to_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "net_unrealized_pnl_rel_to_market_cap")) + ) + self.nupl: MetricPattern1[StoredF32] = MetricPattern1(client, _m(acc, "nupl")) + self.supply_in_loss_rel_to_circulating_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "supply_in_loss_rel_to_circulating_supply")) + ) + self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "supply_in_loss_rel_to_own_supply")) + ) + self.supply_in_profit_rel_to_circulating_supply: MetricPattern1[StoredF64] = ( + MetricPattern1( + client, _m(acc, "supply_in_profit_rel_to_circulating_supply") + ) + ) + self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "supply_in_profit_rel_to_own_supply")) + ) + self.supply_rel_to_circulating_supply: MetricPattern4[StoredF64] = ( + MetricPattern4(client, _m(acc, "supply_rel_to_circulating_supply")) + ) + self.unrealized_loss_rel_to_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "unrealized_loss_rel_to_market_cap")) + ) + self.unrealized_profit_rel_to_market_cap: MetricPattern1[StoredF32] = ( + MetricPattern1(client, _m(acc, "unrealized_profit_rel_to_market_cap")) + ) + class CountPattern2(Generic[T]): """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.average: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'average')) - self.cumulative: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'cumulative')) - self.max: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'max')) - self.median: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'median')) - self.min: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'min')) - self.pct10: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct10')) - self.pct25: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct25')) - self.pct75: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct75')) - self.pct90: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct90')) - self.sum: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'sum')) + self.average: MetricPattern1[T] = MetricPattern1(client, _m(acc, "average")) + self.cumulative: MetricPattern1[T] = MetricPattern1( + client, _m(acc, "cumulative") + ) + self.max: MetricPattern1[T] = MetricPattern1(client, _m(acc, "max")) + self.median: MetricPattern11[T] = MetricPattern11(client, _m(acc, "median")) + self.min: MetricPattern1[T] = MetricPattern1(client, _m(acc, "min")) + self.pct10: MetricPattern11[T] = MetricPattern11(client, _m(acc, "pct10")) + self.pct25: MetricPattern11[T] = MetricPattern11(client, _m(acc, "pct25")) + self.pct75: MetricPattern11[T] = MetricPattern11(client, _m(acc, "pct75")) + self.pct90: MetricPattern11[T] = MetricPattern11(client, _m(acc, "pct90")) + self.sum: MetricPattern1[T] = MetricPattern1(client, _m(acc, "sum")) + class AddrCountPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, base_path: str): - self.all: MetricPattern1[StoredU64] = MetricPattern1(client, f'{base_path}_all') - self.p2a: MetricPattern1[StoredU64] = MetricPattern1(client, f'{base_path}_p2a') - self.p2pk33: MetricPattern1[StoredU64] = MetricPattern1(client, f'{base_path}_p2pk33') - self.p2pk65: MetricPattern1[StoredU64] = MetricPattern1(client, f'{base_path}_p2pk65') - self.p2pkh: MetricPattern1[StoredU64] = MetricPattern1(client, f'{base_path}_p2pkh') - self.p2sh: MetricPattern1[StoredU64] = MetricPattern1(client, f'{base_path}_p2sh') - self.p2tr: MetricPattern1[StoredU64] = MetricPattern1(client, f'{base_path}_p2tr') - self.p2wpkh: MetricPattern1[StoredU64] = MetricPattern1(client, f'{base_path}_p2wpkh') - self.p2wsh: MetricPattern1[StoredU64] = MetricPattern1(client, f'{base_path}_p2wsh') + self.all: MetricPattern1[StoredU64] = MetricPattern1(client, f"{base_path}_all") + self.p2a: MetricPattern1[StoredU64] = MetricPattern1(client, f"{base_path}_p2a") + self.p2pk33: MetricPattern1[StoredU64] = MetricPattern1( + client, f"{base_path}_p2pk33" + ) + self.p2pk65: MetricPattern1[StoredU64] = MetricPattern1( + client, f"{base_path}_p2pk65" + ) + self.p2pkh: MetricPattern1[StoredU64] = MetricPattern1( + client, f"{base_path}_p2pkh" + ) + self.p2sh: MetricPattern1[StoredU64] = MetricPattern1( + client, f"{base_path}_p2sh" + ) + self.p2tr: MetricPattern1[StoredU64] = MetricPattern1( + client, f"{base_path}_p2tr" + ) + self.p2wpkh: MetricPattern1[StoredU64] = MetricPattern1( + client, f"{base_path}_p2wpkh" + ) + self.p2wsh: MetricPattern1[StoredU64] = MetricPattern1( + client, f"{base_path}_p2wsh" + ) + class FeeRatePattern(Generic[T]): """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.average: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'average')) - self.max: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'max')) - self.median: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'median')) - self.min: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'min')) - self.pct10: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct10')) - self.pct25: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct25')) - self.pct75: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct75')) - self.pct90: MetricPattern11[T] = MetricPattern11(client, _m(acc, 'pct90')) + self.average: MetricPattern1[T] = MetricPattern1(client, _m(acc, "average")) + self.max: MetricPattern1[T] = MetricPattern1(client, _m(acc, "max")) + self.median: MetricPattern11[T] = MetricPattern11(client, _m(acc, "median")) + self.min: MetricPattern1[T] = MetricPattern1(client, _m(acc, "min")) + self.pct10: MetricPattern11[T] = MetricPattern11(client, _m(acc, "pct10")) + self.pct25: MetricPattern11[T] = MetricPattern11(client, _m(acc, "pct25")) + self.pct75: MetricPattern11[T] = MetricPattern11(client, _m(acc, "pct75")) + self.pct90: MetricPattern11[T] = MetricPattern11(client, _m(acc, "pct90")) self.txindex: MetricPattern27[T] = MetricPattern27(client, acc) + class _0satsPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" self.activity: ActivityPattern2 = ActivityPattern2(client, acc) - self.addr_count: MetricPattern1[StoredU64] = MetricPattern1(client, _m(acc, 'addr_count')) + self.addr_count: MetricPattern1[StoredU64] = MetricPattern1( + client, _m(acc, "addr_count") + ) self.cost_basis: CostBasisPattern = CostBasisPattern(client, acc) self.outputs: OutputsPattern = OutputsPattern(client, acc) self.realized: RealizedPattern = RealizedPattern(client, acc) self.relative: RelativePattern = RelativePattern(client, acc) - self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) + self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, "supply")) self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) -class PeriodCagrPattern: - """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self._10y: MetricPattern4[StoredF32] = MetricPattern4(client, (f'10y_{acc}' if acc else '10y')) - self._2y: MetricPattern4[StoredF32] = MetricPattern4(client, (f'2y_{acc}' if acc else '2y')) - self._3y: MetricPattern4[StoredF32] = MetricPattern4(client, (f'3y_{acc}' if acc else '3y')) - self._4y: MetricPattern4[StoredF32] = MetricPattern4(client, (f'4y_{acc}' if acc else '4y')) - self._5y: MetricPattern4[StoredF32] = MetricPattern4(client, (f'5y_{acc}' if acc else '5y')) - self._6y: MetricPattern4[StoredF32] = MetricPattern4(client, (f'6y_{acc}' if acc else '6y')) - self._8y: MetricPattern4[StoredF32] = MetricPattern4(client, (f'8y_{acc}' if acc else '8y')) -class _10yTo12yPattern: +class _0satsPattern2: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" self.activity: ActivityPattern2 = ActivityPattern2(client, acc) - self.cost_basis: CostBasisPattern2 = CostBasisPattern2(client, acc) + self.cost_basis: CostBasisPattern = CostBasisPattern(client, acc) self.outputs: OutputsPattern = OutputsPattern(client, acc) - self.realized: RealizedPattern2 = RealizedPattern2(client, acc) - self.relative: RelativePattern2 = RelativePattern2(client, acc) - self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) + self.realized: RealizedPattern = RealizedPattern(client, acc) + self.relative: RelativePattern4 = RelativePattern4(client, _m(acc, "supply_in")) + self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, "supply")) self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) + +class _100btcPattern: + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.activity: ActivityPattern2 = ActivityPattern2(client, acc) + self.cost_basis: CostBasisPattern = CostBasisPattern(client, acc) + self.outputs: OutputsPattern = OutputsPattern(client, acc) + self.realized: RealizedPattern = RealizedPattern(client, acc) + self.relative: RelativePattern = RelativePattern(client, acc) + self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, "supply")) + self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) + + class _10yPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" self.activity: ActivityPattern2 = ActivityPattern2(client, acc) @@ -2714,1714 +3768,2854 @@ class _10yPattern: self.outputs: OutputsPattern = OutputsPattern(client, acc) self.realized: RealizedPattern4 = RealizedPattern4(client, acc) self.relative: RelativePattern = RelativePattern(client, acc) - self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) + self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, "supply")) self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) -class _100btcPattern: + +class PeriodCagrPattern: """Pattern struct for repeated tree structure.""" - + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self._10y: MetricPattern4[StoredF32] = MetricPattern4( + client, (f"10y_{acc}" if acc else "10y") + ) + self._2y: MetricPattern4[StoredF32] = MetricPattern4( + client, (f"2y_{acc}" if acc else "2y") + ) + self._3y: MetricPattern4[StoredF32] = MetricPattern4( + client, (f"3y_{acc}" if acc else "3y") + ) + self._4y: MetricPattern4[StoredF32] = MetricPattern4( + client, (f"4y_{acc}" if acc else "4y") + ) + self._5y: MetricPattern4[StoredF32] = MetricPattern4( + client, (f"5y_{acc}" if acc else "5y") + ) + self._6y: MetricPattern4[StoredF32] = MetricPattern4( + client, (f"6y_{acc}" if acc else "6y") + ) + self._8y: MetricPattern4[StoredF32] = MetricPattern4( + client, (f"8y_{acc}" if acc else "8y") + ) + + +class _10yTo12yPattern: + """Pattern struct for repeated tree structure.""" + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" self.activity: ActivityPattern2 = ActivityPattern2(client, acc) - self.cost_basis: CostBasisPattern = CostBasisPattern(client, acc) + self.cost_basis: CostBasisPattern2 = CostBasisPattern2(client, acc) self.outputs: OutputsPattern = OutputsPattern(client, acc) - self.realized: RealizedPattern = RealizedPattern(client, acc) - self.relative: RelativePattern = RelativePattern(client, acc) - self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) + self.realized: RealizedPattern2 = RealizedPattern2(client, acc) + self.relative: RelativePattern2 = RelativePattern2(client, acc) + self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, "supply")) self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) + class UnrealizedPattern: """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'neg_unrealized_loss')) - self.net_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'net_unrealized_pnl')) - self.supply_in_loss: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_loss')) - self.supply_in_profit: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'supply_in_profit')) - self.total_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'total_unrealized_pnl')) - self.unrealized_loss: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_loss')) - self.unrealized_profit: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'unrealized_profit')) -class _0satsPattern2: - """Pattern struct for repeated tree structure.""" - def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.activity: ActivityPattern2 = ActivityPattern2(client, acc) - self.cost_basis: CostBasisPattern = CostBasisPattern(client, acc) - self.outputs: OutputsPattern = OutputsPattern(client, acc) - self.realized: RealizedPattern = RealizedPattern(client, acc) - self.relative: RelativePattern4 = RelativePattern4(client, _m(acc, 'supply_in')) - self.supply: SupplyPattern2 = SupplyPattern2(client, _m(acc, 'supply')) - self.unrealized: UnrealizedPattern = UnrealizedPattern(client, acc) + self.neg_unrealized_loss: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "neg_unrealized_loss") + ) + self.net_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "net_unrealized_pnl") + ) + self.supply_in_loss: ActiveSupplyPattern = ActiveSupplyPattern( + client, _m(acc, "supply_in_loss") + ) + self.supply_in_profit: ActiveSupplyPattern = ActiveSupplyPattern( + client, _m(acc, "supply_in_profit") + ) + self.total_unrealized_pnl: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "total_unrealized_pnl") + ) + self.unrealized_loss: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "unrealized_loss") + ) + self.unrealized_profit: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "unrealized_profit") + ) + class ActivityPattern2: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.coinblocks_destroyed: BlockCountPattern[StoredF64] = BlockCountPattern(client, _m(acc, 'coinblocks_destroyed')) - self.coindays_destroyed: BlockCountPattern[StoredF64] = BlockCountPattern(client, _m(acc, 'coindays_destroyed')) - self.satblocks_destroyed: MetricPattern11[Sats] = MetricPattern11(client, _m(acc, 'satblocks_destroyed')) - self.satdays_destroyed: MetricPattern11[Sats] = MetricPattern11(client, _m(acc, 'satdays_destroyed')) - self.sent: UnclaimedRewardsPattern = UnclaimedRewardsPattern(client, _m(acc, 'sent')) + self.coinblocks_destroyed: BlockCountPattern[StoredF64] = BlockCountPattern( + client, _m(acc, "coinblocks_destroyed") + ) + self.coindays_destroyed: BlockCountPattern[StoredF64] = BlockCountPattern( + client, _m(acc, "coindays_destroyed") + ) + self.satblocks_destroyed: MetricPattern11[Sats] = MetricPattern11( + client, _m(acc, "satblocks_destroyed") + ) + self.satdays_destroyed: MetricPattern11[Sats] = MetricPattern11( + client, _m(acc, "satdays_destroyed") + ) + self.sent: UnclaimedRewardsPattern = UnclaimedRewardsPattern( + client, _m(acc, "sent") + ) + class SplitPattern2(Generic[T]): """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.close: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'close')) - self.high: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'high')) - self.low: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'low')) - self.open: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'open')) -class CoinbasePattern: - """Pattern struct for repeated tree structure.""" - def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.bitcoin: FullnessPattern[Bitcoin] = FullnessPattern(client, _m(acc, 'btc')) - self.dollars: DollarsPattern[Dollars] = DollarsPattern(client, _m(acc, 'usd')) - self.sats: DollarsPattern[Sats] = DollarsPattern(client, acc) + self.close: MetricPattern1[T] = MetricPattern1(client, _m(acc, "close")) + self.high: MetricPattern1[T] = MetricPattern1(client, _m(acc, "high")) + self.low: MetricPattern1[T] = MetricPattern1(client, _m(acc, "low")) + self.open: MetricPattern1[T] = MetricPattern1(client, _m(acc, "open")) + class CostBasisPattern2: """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, base_path: str): - self.max: MetricPattern1[Dollars] = MetricPattern1(client, f'{base_path}_max') - self.min: MetricPattern1[Dollars] = MetricPattern1(client, f'{base_path}_min') - self.percentiles: PercentilesPattern = PercentilesPattern(client, f'{base_path}_percentiles') -class CoinbasePattern2: - """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.bitcoin: BlockCountPattern[Bitcoin] = BlockCountPattern(client, _m(acc, 'btc')) - self.dollars: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'usd')) - self.sats: BlockCountPattern[Sats] = BlockCountPattern(client, acc) + def __init__(self, client: BrkClientBase, base_path: str): + self.max: MetricPattern1[Dollars] = MetricPattern1(client, f"{base_path}_max") + self.min: MetricPattern1[Dollars] = MetricPattern1(client, f"{base_path}_min") + self.percentiles: PercentilesPattern = PercentilesPattern( + client, f"{base_path}_percentiles" + ) + class ActiveSupplyPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.bitcoin: MetricPattern1[Bitcoin] = MetricPattern1(client, _m(acc, 'btc')) - self.dollars: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'usd')) + self.bitcoin: MetricPattern1[Bitcoin] = MetricPattern1(client, _m(acc, "btc")) + self.dollars: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, "usd")) self.sats: MetricPattern1[Sats] = MetricPattern1(client, acc) + class _2015Pattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.bitcoin: MetricPattern4[Bitcoin] = MetricPattern4(client, _m(acc, 'btc')) - self.dollars: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, 'usd')) + self.bitcoin: MetricPattern4[Bitcoin] = MetricPattern4(client, _m(acc, "btc")) + self.dollars: MetricPattern4[Dollars] = MetricPattern4(client, _m(acc, "usd")) self.sats: MetricPattern4[Sats] = MetricPattern4(client, acc) -class UnclaimedRewardsPattern: + +class CoinbasePattern2: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.bitcoin: BitcoinPattern[Bitcoin] = BitcoinPattern(client, _m(acc, 'btc')) - self.dollars: BlockCountPattern[Dollars] = BlockCountPattern(client, _m(acc, 'usd')) + self.bitcoin: BlockCountPattern[Bitcoin] = BlockCountPattern( + client, _m(acc, "btc") + ) + self.dollars: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "usd") + ) self.sats: BlockCountPattern[Sats] = BlockCountPattern(client, acc) + +class CoinbasePattern: + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.bitcoin: FullnessPattern[Bitcoin] = FullnessPattern(client, _m(acc, "btc")) + self.dollars: DollarsPattern[Dollars] = DollarsPattern(client, _m(acc, "usd")) + self.sats: DollarsPattern[Sats] = DollarsPattern(client, acc) + + class SegwitAdoptionPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" self.base: MetricPattern11[StoredF32] = MetricPattern11(client, acc) - self.cumulative: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'cumulative')) - self.sum: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, 'sum')) + self.cumulative: MetricPattern2[StoredF32] = MetricPattern2( + client, _m(acc, "cumulative") + ) + self.sum: MetricPattern2[StoredF32] = MetricPattern2(client, _m(acc, "sum")) -class SupplyPattern2: + +class UnclaimedRewardsPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.halved: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, 'half')) - self.total: ActiveSupplyPattern = ActiveSupplyPattern(client, acc) + self.bitcoin: BitcoinPattern[Bitcoin] = BitcoinPattern(client, _m(acc, "btc")) + self.dollars: BlockCountPattern[Dollars] = BlockCountPattern( + client, _m(acc, "usd") + ) + self.sats: BlockCountPattern[Sats] = BlockCountPattern(client, acc) + class CostBasisPattern: """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.max: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'max_cost_basis')) - self.min: MetricPattern1[Dollars] = MetricPattern1(client, _m(acc, 'min_cost_basis')) -class RelativePattern4: - """Pattern struct for repeated tree structure.""" - def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'loss_rel_to_own_supply')) - self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, _m(acc, 'profit_rel_to_own_supply')) + self.max: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "max_cost_basis") + ) + self.min: MetricPattern1[Dollars] = MetricPattern1( + client, _m(acc, "min_cost_basis") + ) + class _1dReturns1mSdPattern: """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, acc: str): - """Create pattern node with accumulated metric name.""" - self.sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'sd')) - self.sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'sma')) -class BitcoinPattern(Generic[T]): - """Pattern struct for repeated tree structure.""" - def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.cumulative: MetricPattern2[T] = MetricPattern2(client, _m(acc, 'cumulative')) - self.sum: MetricPattern1[T] = MetricPattern1(client, acc) + self.sd: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "sd")) + self.sma: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "sma")) -class BlockCountPattern(Generic[T]): + +class RelativePattern4: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.cumulative: MetricPattern1[T] = MetricPattern1(client, _m(acc, 'cumulative')) - self.sum: MetricPattern1[T] = MetricPattern1(client, acc) + self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "loss_rel_to_own_supply")) + ) + self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, _m(acc, "profit_rel_to_own_supply")) + ) + + +class SupplyPattern2: + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.halved: ActiveSupplyPattern = ActiveSupplyPattern(client, _m(acc, "half")) + self.total: ActiveSupplyPattern = ActiveSupplyPattern(client, acc) + class SatsPattern(Generic[T]): """Pattern struct for repeated tree structure.""" - - def __init__(self, client: BrkClientBase, base_path: str): - self.ohlc: MetricPattern1[T] = MetricPattern1(client, f'{base_path}_ohlc') - self.split: SplitPattern2[Any] = SplitPattern2(client, f'{base_path}_split') -class OutputsPattern: + def __init__(self, client: BrkClientBase, base_path: str): + self.ohlc: MetricPattern1[T] = MetricPattern1(client, f"{base_path}_ohlc") + self.split: SplitPattern2[Any] = SplitPattern2(client, f"{base_path}_split") + + +class BitcoinPattern(Generic[T]): """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.utxo_count: MetricPattern1[StoredU64] = MetricPattern1(client, _m(acc, 'utxo_count')) + self.cumulative: MetricPattern2[T] = MetricPattern2( + client, _m(acc, "cumulative") + ) + self.sum: MetricPattern1[T] = MetricPattern1(client, acc) + + +class BlockCountPattern(Generic[T]): + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.cumulative: MetricPattern1[T] = MetricPattern1( + client, _m(acc, "cumulative") + ) + self.sum: MetricPattern1[T] = MetricPattern1(client, acc) + class RealizedPriceExtraPattern: """Pattern struct for repeated tree structure.""" - + def __init__(self, client: BrkClientBase, acc: str): """Create pattern node with accumulated metric name.""" - self.ratio: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, 'ratio')) + self.ratio: MetricPattern4[StoredF32] = MetricPattern4(client, _m(acc, "ratio")) + + +class OutputsPattern: + """Pattern struct for repeated tree structure.""" + + def __init__(self, client: BrkClientBase, acc: str): + """Create pattern node with accumulated metric name.""" + self.utxo_count: MetricPattern1[StoredU64] = MetricPattern1( + client, _m(acc, "utxo_count") + ) + # Metrics tree classes + class MetricsTree_Addresses: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.first_p2aaddressindex: MetricPattern11[P2AAddressIndex] = MetricPattern11(client, 'first_p2aaddressindex') - self.first_p2pk33addressindex: MetricPattern11[P2PK33AddressIndex] = MetricPattern11(client, 'first_p2pk33addressindex') - self.first_p2pk65addressindex: MetricPattern11[P2PK65AddressIndex] = MetricPattern11(client, 'first_p2pk65addressindex') - self.first_p2pkhaddressindex: MetricPattern11[P2PKHAddressIndex] = MetricPattern11(client, 'first_p2pkhaddressindex') - self.first_p2shaddressindex: MetricPattern11[P2SHAddressIndex] = MetricPattern11(client, 'first_p2shaddressindex') - self.first_p2traddressindex: MetricPattern11[P2TRAddressIndex] = MetricPattern11(client, 'first_p2traddressindex') - self.first_p2wpkhaddressindex: MetricPattern11[P2WPKHAddressIndex] = MetricPattern11(client, 'first_p2wpkhaddressindex') - self.first_p2wshaddressindex: MetricPattern11[P2WSHAddressIndex] = MetricPattern11(client, 'first_p2wshaddressindex') - self.p2abytes: MetricPattern16[P2ABytes] = MetricPattern16(client, 'p2abytes') - self.p2pk33bytes: MetricPattern18[P2PK33Bytes] = MetricPattern18(client, 'p2pk33bytes') - self.p2pk65bytes: MetricPattern19[P2PK65Bytes] = MetricPattern19(client, 'p2pk65bytes') - self.p2pkhbytes: MetricPattern20[P2PKHBytes] = MetricPattern20(client, 'p2pkhbytes') - self.p2shbytes: MetricPattern21[P2SHBytes] = MetricPattern21(client, 'p2shbytes') - self.p2trbytes: MetricPattern22[P2TRBytes] = MetricPattern22(client, 'p2trbytes') - self.p2wpkhbytes: MetricPattern23[P2WPKHBytes] = MetricPattern23(client, 'p2wpkhbytes') - self.p2wshbytes: MetricPattern24[P2WSHBytes] = MetricPattern24(client, 'p2wshbytes') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.first_p2aaddressindex: MetricPattern11[P2AAddressIndex] = MetricPattern11( + client, "first_p2aaddressindex" + ) + self.first_p2pk33addressindex: MetricPattern11[P2PK33AddressIndex] = ( + MetricPattern11(client, "first_p2pk33addressindex") + ) + self.first_p2pk65addressindex: MetricPattern11[P2PK65AddressIndex] = ( + MetricPattern11(client, "first_p2pk65addressindex") + ) + self.first_p2pkhaddressindex: MetricPattern11[P2PKHAddressIndex] = ( + MetricPattern11(client, "first_p2pkhaddressindex") + ) + self.first_p2shaddressindex: MetricPattern11[P2SHAddressIndex] = ( + MetricPattern11(client, "first_p2shaddressindex") + ) + self.first_p2traddressindex: MetricPattern11[P2TRAddressIndex] = ( + MetricPattern11(client, "first_p2traddressindex") + ) + self.first_p2wpkhaddressindex: MetricPattern11[P2WPKHAddressIndex] = ( + MetricPattern11(client, "first_p2wpkhaddressindex") + ) + self.first_p2wshaddressindex: MetricPattern11[P2WSHAddressIndex] = ( + MetricPattern11(client, "first_p2wshaddressindex") + ) + self.p2abytes: MetricPattern16[P2ABytes] = MetricPattern16(client, "p2abytes") + self.p2pk33bytes: MetricPattern18[P2PK33Bytes] = MetricPattern18( + client, "p2pk33bytes" + ) + self.p2pk65bytes: MetricPattern19[P2PK65Bytes] = MetricPattern19( + client, "p2pk65bytes" + ) + self.p2pkhbytes: MetricPattern20[P2PKHBytes] = MetricPattern20( + client, "p2pkhbytes" + ) + self.p2shbytes: MetricPattern21[P2SHBytes] = MetricPattern21( + client, "p2shbytes" + ) + self.p2trbytes: MetricPattern22[P2TRBytes] = MetricPattern22( + client, "p2trbytes" + ) + self.p2wpkhbytes: MetricPattern23[P2WPKHBytes] = MetricPattern23( + client, "p2wpkhbytes" + ) + self.p2wshbytes: MetricPattern24[P2WSHBytes] = MetricPattern24( + client, "p2wshbytes" + ) + class MetricsTree_Blocks_Count: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._1m_block_count: MetricPattern1[StoredU32] = MetricPattern1(client, '1m_block_count') - self._1m_start: MetricPattern11[Height] = MetricPattern11(client, '1m_start') - self._1w_block_count: MetricPattern1[StoredU32] = MetricPattern1(client, '1w_block_count') - self._1w_start: MetricPattern11[Height] = MetricPattern11(client, '1w_start') - self._1y_block_count: MetricPattern1[StoredU32] = MetricPattern1(client, '1y_block_count') - self._1y_start: MetricPattern11[Height] = MetricPattern11(client, '1y_start') - self._24h_block_count: MetricPattern1[StoredU32] = MetricPattern1(client, '24h_block_count') - self._24h_start: MetricPattern11[Height] = MetricPattern11(client, '24h_start') - self.block_count: BlockCountPattern[StoredU32] = BlockCountPattern(client, 'block_count') - self.block_count_target: MetricPattern4[StoredU64] = MetricPattern4(client, 'block_count_target') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._1m_block_count: MetricPattern1[StoredU32] = MetricPattern1( + client, "1m_block_count" + ) + self._1m_start: MetricPattern11[Height] = MetricPattern11(client, "1m_start") + self._1w_block_count: MetricPattern1[StoredU32] = MetricPattern1( + client, "1w_block_count" + ) + self._1w_start: MetricPattern11[Height] = MetricPattern11(client, "1w_start") + self._1y_block_count: MetricPattern1[StoredU32] = MetricPattern1( + client, "1y_block_count" + ) + self._1y_start: MetricPattern11[Height] = MetricPattern11(client, "1y_start") + self._24h_block_count: MetricPattern1[StoredU32] = MetricPattern1( + client, "24h_block_count" + ) + self._24h_start: MetricPattern11[Height] = MetricPattern11(client, "24h_start") + self.block_count: BlockCountPattern[StoredU32] = BlockCountPattern( + client, "block_count" + ) + self.block_count_target: MetricPattern4[StoredU64] = MetricPattern4( + client, "block_count_target" + ) + class MetricsTree_Blocks_Difficulty: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.adjustment: MetricPattern1[StoredF32] = MetricPattern1(client, 'difficulty_adjustment') - self.as_hash: MetricPattern1[StoredF32] = MetricPattern1(client, 'difficulty_as_hash') - self.blocks_before_next_adjustment: MetricPattern1[StoredU32] = MetricPattern1(client, 'blocks_before_next_difficulty_adjustment') - self.days_before_next_adjustment: MetricPattern1[StoredF32] = MetricPattern1(client, 'days_before_next_difficulty_adjustment') - self.epoch: MetricPattern4[DifficultyEpoch] = MetricPattern4(client, 'difficultyepoch') - self.raw: MetricPattern1[StoredF64] = MetricPattern1(client, 'difficulty') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.adjustment: MetricPattern1[StoredF32] = MetricPattern1( + client, "difficulty_adjustment" + ) + self.as_hash: MetricPattern1[StoredF32] = MetricPattern1( + client, "difficulty_as_hash" + ) + self.blocks_before_next_adjustment: MetricPattern1[StoredU32] = MetricPattern1( + client, "blocks_before_next_difficulty_adjustment" + ) + self.days_before_next_adjustment: MetricPattern1[StoredF32] = MetricPattern1( + client, "days_before_next_difficulty_adjustment" + ) + self.epoch: MetricPattern4[DifficultyEpoch] = MetricPattern4( + client, "difficultyepoch" + ) + self.raw: MetricPattern1[StoredF64] = MetricPattern1(client, "difficulty") + class MetricsTree_Blocks_Halving: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.blocks_before_next_halving: MetricPattern1[StoredU32] = MetricPattern1(client, 'blocks_before_next_halving') - self.days_before_next_halving: MetricPattern1[StoredF32] = MetricPattern1(client, 'days_before_next_halving') - self.epoch: MetricPattern4[HalvingEpoch] = MetricPattern4(client, 'halvingepoch') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.blocks_before_next_halving: MetricPattern1[StoredU32] = MetricPattern1( + client, "blocks_before_next_halving" + ) + self.days_before_next_halving: MetricPattern1[StoredF32] = MetricPattern1( + client, "days_before_next_halving" + ) + self.epoch: MetricPattern4[HalvingEpoch] = MetricPattern4( + client, "halvingepoch" + ) + class MetricsTree_Blocks_Interval: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.average: MetricPattern2[Timestamp] = MetricPattern2(client, 'block_interval_average') - self.base: MetricPattern11[Timestamp] = MetricPattern11(client, 'block_interval') - self.max: MetricPattern2[Timestamp] = MetricPattern2(client, 'block_interval_max') - self.median: MetricPattern6[Timestamp] = MetricPattern6(client, 'block_interval_median') - self.min: MetricPattern2[Timestamp] = MetricPattern2(client, 'block_interval_min') - self.pct10: MetricPattern6[Timestamp] = MetricPattern6(client, 'block_interval_pct10') - self.pct25: MetricPattern6[Timestamp] = MetricPattern6(client, 'block_interval_pct25') - self.pct75: MetricPattern6[Timestamp] = MetricPattern6(client, 'block_interval_pct75') - self.pct90: MetricPattern6[Timestamp] = MetricPattern6(client, 'block_interval_pct90') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.average: MetricPattern2[Timestamp] = MetricPattern2( + client, "block_interval_average" + ) + self.base: MetricPattern11[Timestamp] = MetricPattern11( + client, "block_interval" + ) + self.max: MetricPattern2[Timestamp] = MetricPattern2( + client, "block_interval_max" + ) + self.median: MetricPattern6[Timestamp] = MetricPattern6( + client, "block_interval_median" + ) + self.min: MetricPattern2[Timestamp] = MetricPattern2( + client, "block_interval_min" + ) + self.pct10: MetricPattern6[Timestamp] = MetricPattern6( + client, "block_interval_pct10" + ) + self.pct25: MetricPattern6[Timestamp] = MetricPattern6( + client, "block_interval_pct25" + ) + self.pct75: MetricPattern6[Timestamp] = MetricPattern6( + client, "block_interval_pct75" + ) + self.pct90: MetricPattern6[Timestamp] = MetricPattern6( + client, "block_interval_pct90" + ) + class MetricsTree_Blocks_Mining: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.hash_price_phs: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_phs') - self.hash_price_phs_min: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_phs_min') - self.hash_price_rebound: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_rebound') - self.hash_price_ths: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_ths') - self.hash_price_ths_min: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_price_ths_min') - self.hash_rate: MetricPattern1[StoredF64] = MetricPattern1(client, 'hash_rate') - self.hash_rate_1m_sma: MetricPattern4[StoredF32] = MetricPattern4(client, 'hash_rate_1m_sma') - self.hash_rate_1w_sma: MetricPattern4[StoredF64] = MetricPattern4(client, 'hash_rate_1w_sma') - self.hash_rate_1y_sma: MetricPattern4[StoredF32] = MetricPattern4(client, 'hash_rate_1y_sma') - self.hash_rate_2m_sma: MetricPattern4[StoredF32] = MetricPattern4(client, 'hash_rate_2m_sma') - self.hash_value_phs: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_phs') - self.hash_value_phs_min: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_phs_min') - self.hash_value_rebound: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_rebound') - self.hash_value_ths: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_ths') - self.hash_value_ths_min: MetricPattern1[StoredF32] = MetricPattern1(client, 'hash_value_ths_min') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.hash_price_phs: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_price_phs" + ) + self.hash_price_phs_min: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_price_phs_min" + ) + self.hash_price_rebound: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_price_rebound" + ) + self.hash_price_ths: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_price_ths" + ) + self.hash_price_ths_min: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_price_ths_min" + ) + self.hash_rate: MetricPattern1[StoredF64] = MetricPattern1(client, "hash_rate") + self.hash_rate_1m_sma: MetricPattern4[StoredF32] = MetricPattern4( + client, "hash_rate_1m_sma" + ) + self.hash_rate_1w_sma: MetricPattern4[StoredF64] = MetricPattern4( + client, "hash_rate_1w_sma" + ) + self.hash_rate_1y_sma: MetricPattern4[StoredF32] = MetricPattern4( + client, "hash_rate_1y_sma" + ) + self.hash_rate_2m_sma: MetricPattern4[StoredF32] = MetricPattern4( + client, "hash_rate_2m_sma" + ) + self.hash_value_phs: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_value_phs" + ) + self.hash_value_phs_min: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_value_phs_min" + ) + self.hash_value_rebound: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_value_rebound" + ) + self.hash_value_ths: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_value_ths" + ) + self.hash_value_ths_min: MetricPattern1[StoredF32] = MetricPattern1( + client, "hash_value_ths_min" + ) + class MetricsTree_Blocks_Rewards_24hCoinbaseSum: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.bitcoin: MetricPattern11[Bitcoin] = MetricPattern11(client, '24h_coinbase_sum_btc') - self.dollars: MetricPattern11[Dollars] = MetricPattern11(client, '24h_coinbase_sum_usd') - self.sats: MetricPattern11[Sats] = MetricPattern11(client, '24h_coinbase_sum') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.bitcoin: MetricPattern11[Bitcoin] = MetricPattern11( + client, "24h_coinbase_sum_btc" + ) + self.dollars: MetricPattern11[Dollars] = MetricPattern11( + client, "24h_coinbase_sum_usd" + ) + self.sats: MetricPattern11[Sats] = MetricPattern11(client, "24h_coinbase_sum") + class MetricsTree_Blocks_Rewards: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._24h_coinbase_sum: MetricsTree_Blocks_Rewards_24hCoinbaseSum = MetricsTree_Blocks_Rewards_24hCoinbaseSum(client) - self.coinbase: CoinbasePattern = CoinbasePattern(client, 'coinbase') - self.fee_dominance: MetricPattern6[StoredF32] = MetricPattern6(client, 'fee_dominance') - self.subsidy: CoinbasePattern = CoinbasePattern(client, 'subsidy') - self.subsidy_dominance: MetricPattern6[StoredF32] = MetricPattern6(client, 'subsidy_dominance') - self.subsidy_usd_1y_sma: MetricPattern4[Dollars] = MetricPattern4(client, 'subsidy_usd_1y_sma') - self.unclaimed_rewards: UnclaimedRewardsPattern = UnclaimedRewardsPattern(client, 'unclaimed_rewards') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._24h_coinbase_sum: MetricsTree_Blocks_Rewards_24hCoinbaseSum = ( + MetricsTree_Blocks_Rewards_24hCoinbaseSum(client) + ) + self.coinbase: CoinbasePattern = CoinbasePattern(client, "coinbase") + self.fee_dominance: MetricPattern6[StoredF32] = MetricPattern6( + client, "fee_dominance" + ) + self.subsidy: CoinbasePattern = CoinbasePattern(client, "subsidy") + self.subsidy_dominance: MetricPattern6[StoredF32] = MetricPattern6( + client, "subsidy_dominance" + ) + self.subsidy_usd_1y_sma: MetricPattern4[Dollars] = MetricPattern4( + client, "subsidy_usd_1y_sma" + ) + self.unclaimed_rewards: UnclaimedRewardsPattern = UnclaimedRewardsPattern( + client, "unclaimed_rewards" + ) + class MetricsTree_Blocks_Size: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.average: MetricPattern2[StoredU64] = MetricPattern2(client, 'block_size_average') - self.cumulative: MetricPattern1[StoredU64] = MetricPattern1(client, 'block_size_cumulative') - self.max: MetricPattern2[StoredU64] = MetricPattern2(client, 'block_size_max') - self.median: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_median') - self.min: MetricPattern2[StoredU64] = MetricPattern2(client, 'block_size_min') - self.pct10: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_pct10') - self.pct25: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_pct25') - self.pct75: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_pct75') - self.pct90: MetricPattern6[StoredU64] = MetricPattern6(client, 'block_size_pct90') - self.sum: MetricPattern2[StoredU64] = MetricPattern2(client, 'block_size_sum') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.average: MetricPattern2[StoredU64] = MetricPattern2( + client, "block_size_average" + ) + self.cumulative: MetricPattern1[StoredU64] = MetricPattern1( + client, "block_size_cumulative" + ) + self.max: MetricPattern2[StoredU64] = MetricPattern2(client, "block_size_max") + self.median: MetricPattern6[StoredU64] = MetricPattern6( + client, "block_size_median" + ) + self.min: MetricPattern2[StoredU64] = MetricPattern2(client, "block_size_min") + self.pct10: MetricPattern6[StoredU64] = MetricPattern6( + client, "block_size_pct10" + ) + self.pct25: MetricPattern6[StoredU64] = MetricPattern6( + client, "block_size_pct25" + ) + self.pct75: MetricPattern6[StoredU64] = MetricPattern6( + client, "block_size_pct75" + ) + self.pct90: MetricPattern6[StoredU64] = MetricPattern6( + client, "block_size_pct90" + ) + self.sum: MetricPattern2[StoredU64] = MetricPattern2(client, "block_size_sum") + class MetricsTree_Blocks_Time: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.date: MetricPattern11[Date] = MetricPattern11(client, 'date') - self.date_fixed: MetricPattern11[Date] = MetricPattern11(client, 'date_fixed') - self.timestamp: MetricPattern1[Timestamp] = MetricPattern1(client, 'timestamp') - self.timestamp_fixed: MetricPattern11[Timestamp] = MetricPattern11(client, 'timestamp_fixed') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.date: MetricPattern11[Date] = MetricPattern11(client, "date") + self.date_fixed: MetricPattern11[Date] = MetricPattern11(client, "date_fixed") + self.timestamp: MetricPattern1[Timestamp] = MetricPattern1(client, "timestamp") + self.timestamp_fixed: MetricPattern11[Timestamp] = MetricPattern11( + client, "timestamp_fixed" + ) + class MetricsTree_Blocks: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.blockhash: MetricPattern11[BlockHash] = MetricPattern11(client, 'blockhash') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.blockhash: MetricPattern11[BlockHash] = MetricPattern11( + client, "blockhash" + ) self.count: MetricsTree_Blocks_Count = MetricsTree_Blocks_Count(client) - self.difficulty: MetricsTree_Blocks_Difficulty = MetricsTree_Blocks_Difficulty(client) - self.fullness: FullnessPattern[StoredF32] = FullnessPattern(client, 'block_fullness') + self.difficulty: MetricsTree_Blocks_Difficulty = MetricsTree_Blocks_Difficulty( + client + ) + self.fullness: FullnessPattern[StoredF32] = FullnessPattern( + client, "block_fullness" + ) self.halving: MetricsTree_Blocks_Halving = MetricsTree_Blocks_Halving(client) self.interval: MetricsTree_Blocks_Interval = MetricsTree_Blocks_Interval(client) self.mining: MetricsTree_Blocks_Mining = MetricsTree_Blocks_Mining(client) self.rewards: MetricsTree_Blocks_Rewards = MetricsTree_Blocks_Rewards(client) self.size: MetricsTree_Blocks_Size = MetricsTree_Blocks_Size(client) self.time: MetricsTree_Blocks_Time = MetricsTree_Blocks_Time(client) - self.total_size: MetricPattern11[StoredU64] = MetricPattern11(client, 'total_size') - self.vbytes: DollarsPattern[StoredU64] = DollarsPattern(client, 'block_vbytes') - self.weight: DollarsPattern[Weight] = DollarsPattern(client, 'block_weight_average') + self.total_size: MetricPattern11[StoredU64] = MetricPattern11( + client, "total_size" + ) + self.vbytes: DollarsPattern[StoredU64] = DollarsPattern(client, "block_vbytes") + self.weight: DollarsPattern[Weight] = DollarsPattern( + client, "block_weight_average" + ) + class MetricsTree_Cointime_Activity: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.activity_to_vaultedness_ratio: MetricPattern1[StoredF64] = MetricPattern1(client, 'activity_to_vaultedness_ratio') - self.coinblocks_created: BlockCountPattern[StoredF64] = BlockCountPattern(client, 'coinblocks_created') - self.coinblocks_stored: BlockCountPattern[StoredF64] = BlockCountPattern(client, 'coinblocks_stored') - self.liveliness: MetricPattern1[StoredF64] = MetricPattern1(client, 'liveliness') - self.vaultedness: MetricPattern1[StoredF64] = MetricPattern1(client, 'vaultedness') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.activity_to_vaultedness_ratio: MetricPattern1[StoredF64] = MetricPattern1( + client, "activity_to_vaultedness_ratio" + ) + self.coinblocks_created: BlockCountPattern[StoredF64] = BlockCountPattern( + client, "coinblocks_created" + ) + self.coinblocks_stored: BlockCountPattern[StoredF64] = BlockCountPattern( + client, "coinblocks_stored" + ) + self.liveliness: MetricPattern1[StoredF64] = MetricPattern1( + client, "liveliness" + ) + self.vaultedness: MetricPattern1[StoredF64] = MetricPattern1( + client, "vaultedness" + ) + class MetricsTree_Cointime_Adjusted: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.cointime_adj_inflation_rate: MetricPattern4[StoredF32] = MetricPattern4(client, 'cointime_adj_inflation_rate') - self.cointime_adj_tx_btc_velocity: MetricPattern4[StoredF64] = MetricPattern4(client, 'cointime_adj_tx_btc_velocity') - self.cointime_adj_tx_usd_velocity: MetricPattern4[StoredF64] = MetricPattern4(client, 'cointime_adj_tx_usd_velocity') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.cointime_adj_inflation_rate: MetricPattern4[StoredF32] = MetricPattern4( + client, "cointime_adj_inflation_rate" + ) + self.cointime_adj_tx_btc_velocity: MetricPattern4[StoredF64] = MetricPattern4( + client, "cointime_adj_tx_btc_velocity" + ) + self.cointime_adj_tx_usd_velocity: MetricPattern4[StoredF64] = MetricPattern4( + client, "cointime_adj_tx_usd_velocity" + ) + class MetricsTree_Cointime_Cap: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.active_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'active_cap') - self.cointime_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'cointime_cap') - self.investor_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'investor_cap') - self.thermo_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'thermo_cap') - self.vaulted_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'vaulted_cap') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.active_cap: MetricPattern1[Dollars] = MetricPattern1(client, "active_cap") + self.cointime_cap: MetricPattern1[Dollars] = MetricPattern1( + client, "cointime_cap" + ) + self.investor_cap: MetricPattern1[Dollars] = MetricPattern1( + client, "investor_cap" + ) + self.thermo_cap: MetricPattern1[Dollars] = MetricPattern1(client, "thermo_cap") + self.vaulted_cap: MetricPattern1[Dollars] = MetricPattern1( + client, "vaulted_cap" + ) + class MetricsTree_Cointime_Pricing: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.active_price: MetricPattern1[Dollars] = MetricPattern1(client, 'active_price') - self.active_price_ratio: ActivePriceRatioPattern = ActivePriceRatioPattern(client, 'active_price_ratio') - self.cointime_price: MetricPattern1[Dollars] = MetricPattern1(client, 'cointime_price') - self.cointime_price_ratio: ActivePriceRatioPattern = ActivePriceRatioPattern(client, 'cointime_price_ratio') - self.true_market_mean: MetricPattern1[Dollars] = MetricPattern1(client, 'true_market_mean') - self.true_market_mean_ratio: ActivePriceRatioPattern = ActivePriceRatioPattern(client, 'true_market_mean_ratio') - self.vaulted_price: MetricPattern1[Dollars] = MetricPattern1(client, 'vaulted_price') - self.vaulted_price_ratio: ActivePriceRatioPattern = ActivePriceRatioPattern(client, 'vaulted_price_ratio') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.active_price: MetricPattern1[Dollars] = MetricPattern1( + client, "active_price" + ) + self.active_price_ratio: ActivePriceRatioPattern = ActivePriceRatioPattern( + client, "active_price_ratio" + ) + self.cointime_price: MetricPattern1[Dollars] = MetricPattern1( + client, "cointime_price" + ) + self.cointime_price_ratio: ActivePriceRatioPattern = ActivePriceRatioPattern( + client, "cointime_price_ratio" + ) + self.true_market_mean: MetricPattern1[Dollars] = MetricPattern1( + client, "true_market_mean" + ) + self.true_market_mean_ratio: ActivePriceRatioPattern = ActivePriceRatioPattern( + client, "true_market_mean_ratio" + ) + self.vaulted_price: MetricPattern1[Dollars] = MetricPattern1( + client, "vaulted_price" + ) + self.vaulted_price_ratio: ActivePriceRatioPattern = ActivePriceRatioPattern( + client, "vaulted_price_ratio" + ) + class MetricsTree_Cointime_Supply: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.active_supply: ActiveSupplyPattern = ActiveSupplyPattern(client, 'active_supply') - self.vaulted_supply: ActiveSupplyPattern = ActiveSupplyPattern(client, 'vaulted_supply') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.active_supply: ActiveSupplyPattern = ActiveSupplyPattern( + client, "active_supply" + ) + self.vaulted_supply: ActiveSupplyPattern = ActiveSupplyPattern( + client, "vaulted_supply" + ) + class MetricsTree_Cointime_Value: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.cointime_value_created: BlockCountPattern[StoredF64] = BlockCountPattern(client, 'cointime_value_created') - self.cointime_value_destroyed: BlockCountPattern[StoredF64] = BlockCountPattern(client, 'cointime_value_destroyed') - self.cointime_value_stored: BlockCountPattern[StoredF64] = BlockCountPattern(client, 'cointime_value_stored') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.cointime_value_created: BlockCountPattern[StoredF64] = BlockCountPattern( + client, "cointime_value_created" + ) + self.cointime_value_destroyed: BlockCountPattern[StoredF64] = BlockCountPattern( + client, "cointime_value_destroyed" + ) + self.cointime_value_stored: BlockCountPattern[StoredF64] = BlockCountPattern( + client, "cointime_value_stored" + ) + class MetricsTree_Cointime: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.activity: MetricsTree_Cointime_Activity = MetricsTree_Cointime_Activity(client) - self.adjusted: MetricsTree_Cointime_Adjusted = MetricsTree_Cointime_Adjusted(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.activity: MetricsTree_Cointime_Activity = MetricsTree_Cointime_Activity( + client + ) + self.adjusted: MetricsTree_Cointime_Adjusted = MetricsTree_Cointime_Adjusted( + client + ) self.cap: MetricsTree_Cointime_Cap = MetricsTree_Cointime_Cap(client) - self.pricing: MetricsTree_Cointime_Pricing = MetricsTree_Cointime_Pricing(client) + self.pricing: MetricsTree_Cointime_Pricing = MetricsTree_Cointime_Pricing( + client + ) self.supply: MetricsTree_Cointime_Supply = MetricsTree_Cointime_Supply(client) self.value: MetricsTree_Cointime_Value = MetricsTree_Cointime_Value(client) + class MetricsTree_Constants: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.constant_0: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_0') - self.constant_1: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_1') - self.constant_100: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_100') - self.constant_2: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_2') - self.constant_20: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_20') - self.constant_3: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_3') - self.constant_30: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_30') - self.constant_38_2: MetricPattern1[StoredF32] = MetricPattern1(client, 'constant_38_2') - self.constant_4: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_4') - self.constant_50: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_50') - self.constant_600: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_600') - self.constant_61_8: MetricPattern1[StoredF32] = MetricPattern1(client, 'constant_61_8') - self.constant_70: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_70') - self.constant_80: MetricPattern1[StoredU16] = MetricPattern1(client, 'constant_80') - self.constant_minus_1: MetricPattern1[StoredI16] = MetricPattern1(client, 'constant_minus_1') - self.constant_minus_2: MetricPattern1[StoredI16] = MetricPattern1(client, 'constant_minus_2') - self.constant_minus_3: MetricPattern1[StoredI16] = MetricPattern1(client, 'constant_minus_3') - self.constant_minus_4: MetricPattern1[StoredI16] = MetricPattern1(client, 'constant_minus_4') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.constant_0: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_0" + ) + self.constant_1: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_1" + ) + self.constant_100: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_100" + ) + self.constant_2: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_2" + ) + self.constant_20: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_20" + ) + self.constant_3: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_3" + ) + self.constant_30: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_30" + ) + self.constant_38_2: MetricPattern1[StoredF32] = MetricPattern1( + client, "constant_38_2" + ) + self.constant_4: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_4" + ) + self.constant_50: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_50" + ) + self.constant_600: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_600" + ) + self.constant_61_8: MetricPattern1[StoredF32] = MetricPattern1( + client, "constant_61_8" + ) + self.constant_70: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_70" + ) + self.constant_80: MetricPattern1[StoredU16] = MetricPattern1( + client, "constant_80" + ) + self.constant_minus_1: MetricPattern1[StoredI16] = MetricPattern1( + client, "constant_minus_1" + ) + self.constant_minus_2: MetricPattern1[StoredI16] = MetricPattern1( + client, "constant_minus_2" + ) + self.constant_minus_3: MetricPattern1[StoredI16] = MetricPattern1( + client, "constant_minus_3" + ) + self.constant_minus_4: MetricPattern1[StoredI16] = MetricPattern1( + client, "constant_minus_4" + ) + class MetricsTree_Distribution_AddrCount: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.all: MetricPattern1[StoredU64] = MetricPattern1(client, 'addr_count') - self.p2a: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2a_addr_count') - self.p2pk33: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2pk33_addr_count') - self.p2pk65: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2pk65_addr_count') - self.p2pkh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2pkh_addr_count') - self.p2sh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2sh_addr_count') - self.p2tr: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2tr_addr_count') - self.p2wpkh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2wpkh_addr_count') - self.p2wsh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2wsh_addr_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.all: MetricPattern1[StoredU64] = MetricPattern1(client, "addr_count") + self.p2a: MetricPattern1[StoredU64] = MetricPattern1(client, "p2a_addr_count") + self.p2pk33: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2pk33_addr_count" + ) + self.p2pk65: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2pk65_addr_count" + ) + self.p2pkh: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2pkh_addr_count" + ) + self.p2sh: MetricPattern1[StoredU64] = MetricPattern1(client, "p2sh_addr_count") + self.p2tr: MetricPattern1[StoredU64] = MetricPattern1(client, "p2tr_addr_count") + self.p2wpkh: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2wpkh_addr_count" + ) + self.p2wsh: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2wsh_addr_count" + ) + class MetricsTree_Distribution_AddressCohorts_AmountRange: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._0sats: _0satsPattern = _0satsPattern(client, 'addrs_with_0sats') - self._100btc_to_1k_btc: _0satsPattern = _0satsPattern(client, 'addrs_above_100btc_under_1k_btc') - self._100k_btc_or_more: _0satsPattern = _0satsPattern(client, 'addrs_above_100k_btc') - self._100k_sats_to_1m_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_100k_sats_under_1m_sats') - self._100sats_to_1k_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_100sats_under_1k_sats') - self._10btc_to_100btc: _0satsPattern = _0satsPattern(client, 'addrs_above_10btc_under_100btc') - self._10k_btc_to_100k_btc: _0satsPattern = _0satsPattern(client, 'addrs_above_10k_btc_under_100k_btc') - self._10k_sats_to_100k_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_10k_sats_under_100k_sats') - self._10m_sats_to_1btc: _0satsPattern = _0satsPattern(client, 'addrs_above_10m_sats_under_1btc') - self._10sats_to_100sats: _0satsPattern = _0satsPattern(client, 'addrs_above_10sats_under_100sats') - self._1btc_to_10btc: _0satsPattern = _0satsPattern(client, 'addrs_above_1btc_under_10btc') - self._1k_btc_to_10k_btc: _0satsPattern = _0satsPattern(client, 'addrs_above_1k_btc_under_10k_btc') - self._1k_sats_to_10k_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_1k_sats_under_10k_sats') - self._1m_sats_to_10m_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_1m_sats_under_10m_sats') - self._1sat_to_10sats: _0satsPattern = _0satsPattern(client, 'addrs_above_1sat_under_10sats') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._0sats: _0satsPattern = _0satsPattern(client, "addrs_with_0sats") + self._100btc_to_1k_btc: _0satsPattern = _0satsPattern( + client, "addrs_above_100btc_under_1k_btc" + ) + self._100k_btc_or_more: _0satsPattern = _0satsPattern( + client, "addrs_above_100k_btc" + ) + self._100k_sats_to_1m_sats: _0satsPattern = _0satsPattern( + client, "addrs_above_100k_sats_under_1m_sats" + ) + self._100sats_to_1k_sats: _0satsPattern = _0satsPattern( + client, "addrs_above_100sats_under_1k_sats" + ) + self._10btc_to_100btc: _0satsPattern = _0satsPattern( + client, "addrs_above_10btc_under_100btc" + ) + self._10k_btc_to_100k_btc: _0satsPattern = _0satsPattern( + client, "addrs_above_10k_btc_under_100k_btc" + ) + self._10k_sats_to_100k_sats: _0satsPattern = _0satsPattern( + client, "addrs_above_10k_sats_under_100k_sats" + ) + self._10m_sats_to_1btc: _0satsPattern = _0satsPattern( + client, "addrs_above_10m_sats_under_1btc" + ) + self._10sats_to_100sats: _0satsPattern = _0satsPattern( + client, "addrs_above_10sats_under_100sats" + ) + self._1btc_to_10btc: _0satsPattern = _0satsPattern( + client, "addrs_above_1btc_under_10btc" + ) + self._1k_btc_to_10k_btc: _0satsPattern = _0satsPattern( + client, "addrs_above_1k_btc_under_10k_btc" + ) + self._1k_sats_to_10k_sats: _0satsPattern = _0satsPattern( + client, "addrs_above_1k_sats_under_10k_sats" + ) + self._1m_sats_to_10m_sats: _0satsPattern = _0satsPattern( + client, "addrs_above_1m_sats_under_10m_sats" + ) + self._1sat_to_10sats: _0satsPattern = _0satsPattern( + client, "addrs_above_1sat_under_10sats" + ) + class MetricsTree_Distribution_AddressCohorts_GeAmount: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._100btc: _0satsPattern = _0satsPattern(client, 'addrs_above_100btc') - self._100k_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_100k_sats') - self._100sats: _0satsPattern = _0satsPattern(client, 'addrs_above_100sats') - self._10btc: _0satsPattern = _0satsPattern(client, 'addrs_above_10btc') - self._10k_btc: _0satsPattern = _0satsPattern(client, 'addrs_above_10k_btc') - self._10k_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_10k_sats') - self._10m_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_10m_sats') - self._10sats: _0satsPattern = _0satsPattern(client, 'addrs_above_10sats') - self._1btc: _0satsPattern = _0satsPattern(client, 'addrs_above_1btc') - self._1k_btc: _0satsPattern = _0satsPattern(client, 'addrs_above_1k_btc') - self._1k_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_1k_sats') - self._1m_sats: _0satsPattern = _0satsPattern(client, 'addrs_above_1m_sats') - self._1sat: _0satsPattern = _0satsPattern(client, 'addrs_above_1sat') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._100btc: _0satsPattern = _0satsPattern(client, "addrs_above_100btc") + self._100k_sats: _0satsPattern = _0satsPattern(client, "addrs_above_100k_sats") + self._100sats: _0satsPattern = _0satsPattern(client, "addrs_above_100sats") + self._10btc: _0satsPattern = _0satsPattern(client, "addrs_above_10btc") + self._10k_btc: _0satsPattern = _0satsPattern(client, "addrs_above_10k_btc") + self._10k_sats: _0satsPattern = _0satsPattern(client, "addrs_above_10k_sats") + self._10m_sats: _0satsPattern = _0satsPattern(client, "addrs_above_10m_sats") + self._10sats: _0satsPattern = _0satsPattern(client, "addrs_above_10sats") + self._1btc: _0satsPattern = _0satsPattern(client, "addrs_above_1btc") + self._1k_btc: _0satsPattern = _0satsPattern(client, "addrs_above_1k_btc") + self._1k_sats: _0satsPattern = _0satsPattern(client, "addrs_above_1k_sats") + self._1m_sats: _0satsPattern = _0satsPattern(client, "addrs_above_1m_sats") + self._1sat: _0satsPattern = _0satsPattern(client, "addrs_above_1sat") + class MetricsTree_Distribution_AddressCohorts_LtAmount: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._100btc: _0satsPattern = _0satsPattern(client, 'addrs_under_100btc') - self._100k_btc: _0satsPattern = _0satsPattern(client, 'addrs_under_100k_btc') - self._100k_sats: _0satsPattern = _0satsPattern(client, 'addrs_under_100k_sats') - self._100sats: _0satsPattern = _0satsPattern(client, 'addrs_under_100sats') - self._10btc: _0satsPattern = _0satsPattern(client, 'addrs_under_10btc') - self._10k_btc: _0satsPattern = _0satsPattern(client, 'addrs_under_10k_btc') - self._10k_sats: _0satsPattern = _0satsPattern(client, 'addrs_under_10k_sats') - self._10m_sats: _0satsPattern = _0satsPattern(client, 'addrs_under_10m_sats') - self._10sats: _0satsPattern = _0satsPattern(client, 'addrs_under_10sats') - self._1btc: _0satsPattern = _0satsPattern(client, 'addrs_under_1btc') - self._1k_btc: _0satsPattern = _0satsPattern(client, 'addrs_under_1k_btc') - self._1k_sats: _0satsPattern = _0satsPattern(client, 'addrs_under_1k_sats') - self._1m_sats: _0satsPattern = _0satsPattern(client, 'addrs_under_1m_sats') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._100btc: _0satsPattern = _0satsPattern(client, "addrs_under_100btc") + self._100k_btc: _0satsPattern = _0satsPattern(client, "addrs_under_100k_btc") + self._100k_sats: _0satsPattern = _0satsPattern(client, "addrs_under_100k_sats") + self._100sats: _0satsPattern = _0satsPattern(client, "addrs_under_100sats") + self._10btc: _0satsPattern = _0satsPattern(client, "addrs_under_10btc") + self._10k_btc: _0satsPattern = _0satsPattern(client, "addrs_under_10k_btc") + self._10k_sats: _0satsPattern = _0satsPattern(client, "addrs_under_10k_sats") + self._10m_sats: _0satsPattern = _0satsPattern(client, "addrs_under_10m_sats") + self._10sats: _0satsPattern = _0satsPattern(client, "addrs_under_10sats") + self._1btc: _0satsPattern = _0satsPattern(client, "addrs_under_1btc") + self._1k_btc: _0satsPattern = _0satsPattern(client, "addrs_under_1k_btc") + self._1k_sats: _0satsPattern = _0satsPattern(client, "addrs_under_1k_sats") + self._1m_sats: _0satsPattern = _0satsPattern(client, "addrs_under_1m_sats") + class MetricsTree_Distribution_AddressCohorts: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.amount_range: MetricsTree_Distribution_AddressCohorts_AmountRange = MetricsTree_Distribution_AddressCohorts_AmountRange(client) - self.ge_amount: MetricsTree_Distribution_AddressCohorts_GeAmount = MetricsTree_Distribution_AddressCohorts_GeAmount(client) - self.lt_amount: MetricsTree_Distribution_AddressCohorts_LtAmount = MetricsTree_Distribution_AddressCohorts_LtAmount(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.amount_range: MetricsTree_Distribution_AddressCohorts_AmountRange = ( + MetricsTree_Distribution_AddressCohorts_AmountRange(client) + ) + self.ge_amount: MetricsTree_Distribution_AddressCohorts_GeAmount = ( + MetricsTree_Distribution_AddressCohorts_GeAmount(client) + ) + self.lt_amount: MetricsTree_Distribution_AddressCohorts_LtAmount = ( + MetricsTree_Distribution_AddressCohorts_LtAmount(client) + ) + class MetricsTree_Distribution_AddressesData: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.empty: MetricPattern32[EmptyAddressData] = MetricPattern32(client, 'emptyaddressdata') - self.loaded: MetricPattern31[LoadedAddressData] = MetricPattern31(client, 'loadedaddressdata') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.empty: MetricPattern32[EmptyAddressData] = MetricPattern32( + client, "emptyaddressdata" + ) + self.loaded: MetricPattern31[LoadedAddressData] = MetricPattern31( + client, "loadedaddressdata" + ) + class MetricsTree_Distribution_AnyAddressIndexes: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.p2a: MetricPattern16[AnyAddressIndex] = MetricPattern16(client, 'anyaddressindex') - self.p2pk33: MetricPattern18[AnyAddressIndex] = MetricPattern18(client, 'anyaddressindex') - self.p2pk65: MetricPattern19[AnyAddressIndex] = MetricPattern19(client, 'anyaddressindex') - self.p2pkh: MetricPattern20[AnyAddressIndex] = MetricPattern20(client, 'anyaddressindex') - self.p2sh: MetricPattern21[AnyAddressIndex] = MetricPattern21(client, 'anyaddressindex') - self.p2tr: MetricPattern22[AnyAddressIndex] = MetricPattern22(client, 'anyaddressindex') - self.p2wpkh: MetricPattern23[AnyAddressIndex] = MetricPattern23(client, 'anyaddressindex') - self.p2wsh: MetricPattern24[AnyAddressIndex] = MetricPattern24(client, 'anyaddressindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.p2a: MetricPattern16[AnyAddressIndex] = MetricPattern16( + client, "anyaddressindex" + ) + self.p2pk33: MetricPattern18[AnyAddressIndex] = MetricPattern18( + client, "anyaddressindex" + ) + self.p2pk65: MetricPattern19[AnyAddressIndex] = MetricPattern19( + client, "anyaddressindex" + ) + self.p2pkh: MetricPattern20[AnyAddressIndex] = MetricPattern20( + client, "anyaddressindex" + ) + self.p2sh: MetricPattern21[AnyAddressIndex] = MetricPattern21( + client, "anyaddressindex" + ) + self.p2tr: MetricPattern22[AnyAddressIndex] = MetricPattern22( + client, "anyaddressindex" + ) + self.p2wpkh: MetricPattern23[AnyAddressIndex] = MetricPattern23( + client, "anyaddressindex" + ) + self.p2wsh: MetricPattern24[AnyAddressIndex] = MetricPattern24( + client, "anyaddressindex" + ) + class MetricsTree_Distribution_EmptyAddrCount: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.all: MetricPattern1[StoredU64] = MetricPattern1(client, 'empty_addr_count') - self.p2a: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2a_empty_addr_count') - self.p2pk33: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2pk33_empty_addr_count') - self.p2pk65: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2pk65_empty_addr_count') - self.p2pkh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2pkh_empty_addr_count') - self.p2sh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2sh_empty_addr_count') - self.p2tr: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2tr_empty_addr_count') - self.p2wpkh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2wpkh_empty_addr_count') - self.p2wsh: MetricPattern1[StoredU64] = MetricPattern1(client, 'p2wsh_empty_addr_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.all: MetricPattern1[StoredU64] = MetricPattern1(client, "empty_addr_count") + self.p2a: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2a_empty_addr_count" + ) + self.p2pk33: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2pk33_empty_addr_count" + ) + self.p2pk65: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2pk65_empty_addr_count" + ) + self.p2pkh: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2pkh_empty_addr_count" + ) + self.p2sh: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2sh_empty_addr_count" + ) + self.p2tr: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2tr_empty_addr_count" + ) + self.p2wpkh: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2wpkh_empty_addr_count" + ) + self.p2wsh: MetricPattern1[StoredU64] = MetricPattern1( + client, "p2wsh_empty_addr_count" + ) + class MetricsTree_Distribution_UtxoCohorts_AgeRange: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._10y_to_12y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_10y_up_to_12y_old') - self._12y_to_15y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_12y_up_to_15y_old') - self._1d_to_1w: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_1d_up_to_1w_old') - self._1h_to_1d: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_1h_up_to_1d_old') - self._1m_to_2m: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_1m_up_to_2m_old') - self._1w_to_1m: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_1w_up_to_1m_old') - self._1y_to_2y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_1y_up_to_2y_old') - self._2m_to_3m: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_2m_up_to_3m_old') - self._2y_to_3y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_2y_up_to_3y_old') - self._3m_to_4m: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_3m_up_to_4m_old') - self._3y_to_4y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_3y_up_to_4y_old') - self._4m_to_5m: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_4m_up_to_5m_old') - self._4y_to_5y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_4y_up_to_5y_old') - self._5m_to_6m: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_5m_up_to_6m_old') - self._5y_to_6y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_5y_up_to_6y_old') - self._6m_to_1y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_6m_up_to_1y_old') - self._6y_to_7y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_6y_up_to_7y_old') - self._7y_to_8y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_7y_up_to_8y_old') - self._8y_to_10y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_8y_up_to_10y_old') - self.from_15y: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_at_least_15y_old') - self.up_to_1h: _10yTo12yPattern = _10yTo12yPattern(client, 'utxos_up_to_1h_old') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._10y_to_12y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_10y_up_to_12y_old" + ) + self._12y_to_15y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_12y_up_to_15y_old" + ) + self._1d_to_1w: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_1d_up_to_1w_old" + ) + self._1h_to_1d: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_1h_up_to_1d_old" + ) + self._1m_to_2m: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_1m_up_to_2m_old" + ) + self._1w_to_1m: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_1w_up_to_1m_old" + ) + self._1y_to_2y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_1y_up_to_2y_old" + ) + self._2m_to_3m: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_2m_up_to_3m_old" + ) + self._2y_to_3y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_2y_up_to_3y_old" + ) + self._3m_to_4m: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_3m_up_to_4m_old" + ) + self._3y_to_4y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_3y_up_to_4y_old" + ) + self._4m_to_5m: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_4m_up_to_5m_old" + ) + self._4y_to_5y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_4y_up_to_5y_old" + ) + self._5m_to_6m: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_5m_up_to_6m_old" + ) + self._5y_to_6y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_5y_up_to_6y_old" + ) + self._6m_to_1y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_6m_up_to_1y_old" + ) + self._6y_to_7y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_6y_up_to_7y_old" + ) + self._7y_to_8y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_7y_up_to_8y_old" + ) + self._8y_to_10y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_8y_up_to_10y_old" + ) + self.from_15y: _10yTo12yPattern = _10yTo12yPattern( + client, "utxos_at_least_15y_old" + ) + self.up_to_1h: _10yTo12yPattern = _10yTo12yPattern(client, "utxos_up_to_1h_old") + class MetricsTree_Distribution_UtxoCohorts_All_CostBasis: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.max: MetricPattern1[Dollars] = MetricPattern1(client, 'max_cost_basis') - self.min: MetricPattern1[Dollars] = MetricPattern1(client, 'min_cost_basis') - self.percentiles: PercentilesPattern = PercentilesPattern(client, 'cost_basis') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.max: MetricPattern1[Dollars] = MetricPattern1(client, "max_cost_basis") + self.min: MetricPattern1[Dollars] = MetricPattern1(client, "min_cost_basis") + self.percentiles: PercentilesPattern = PercentilesPattern(client, "cost_basis") + class MetricsTree_Distribution_UtxoCohorts_All_Relative: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, 'neg_unrealized_loss_rel_to_own_total_unrealized_pnl') - self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, 'net_unrealized_pnl_rel_to_own_total_unrealized_pnl') - self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, 'supply_in_loss_rel_to_own_supply') - self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = MetricPattern1(client, 'supply_in_profit_rel_to_own_supply') - self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, 'unrealized_loss_rel_to_own_total_unrealized_pnl') - self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[StoredF32] = MetricPattern1(client, 'unrealized_profit_rel_to_own_total_unrealized_pnl') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.neg_unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1( + client, "neg_unrealized_loss_rel_to_own_total_unrealized_pnl" + ) + self.net_unrealized_pnl_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1(client, "net_unrealized_pnl_rel_to_own_total_unrealized_pnl") + self.supply_in_loss_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, "supply_in_loss_rel_to_own_supply") + ) + self.supply_in_profit_rel_to_own_supply: MetricPattern1[StoredF64] = ( + MetricPattern1(client, "supply_in_profit_rel_to_own_supply") + ) + self.unrealized_loss_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1(client, "unrealized_loss_rel_to_own_total_unrealized_pnl") + self.unrealized_profit_rel_to_own_total_unrealized_pnl: MetricPattern1[ + StoredF32 + ] = MetricPattern1(client, "unrealized_profit_rel_to_own_total_unrealized_pnl") + class MetricsTree_Distribution_UtxoCohorts_All: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.activity: ActivityPattern2 = ActivityPattern2(client, 'coinblocks_destroyed') - self.cost_basis: MetricsTree_Distribution_UtxoCohorts_All_CostBasis = MetricsTree_Distribution_UtxoCohorts_All_CostBasis(client) - self.outputs: OutputsPattern = OutputsPattern(client, 'utxo_count') - self.realized: RealizedPattern3 = RealizedPattern3(client, 'adjusted_sopr') - self.relative: MetricsTree_Distribution_UtxoCohorts_All_Relative = MetricsTree_Distribution_UtxoCohorts_All_Relative(client) - self.supply: SupplyPattern2 = SupplyPattern2(client, 'supply') - self.unrealized: UnrealizedPattern = UnrealizedPattern(client, 'neg_unrealized_loss') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.activity: ActivityPattern2 = ActivityPattern2( + client, "coinblocks_destroyed" + ) + self.cost_basis: MetricsTree_Distribution_UtxoCohorts_All_CostBasis = ( + MetricsTree_Distribution_UtxoCohorts_All_CostBasis(client) + ) + self.outputs: OutputsPattern = OutputsPattern(client, "utxo_count") + self.realized: RealizedPattern3 = RealizedPattern3(client, "adjusted_sopr") + self.relative: MetricsTree_Distribution_UtxoCohorts_All_Relative = ( + MetricsTree_Distribution_UtxoCohorts_All_Relative(client) + ) + self.supply: SupplyPattern2 = SupplyPattern2(client, "supply") + self.unrealized: UnrealizedPattern = UnrealizedPattern( + client, "neg_unrealized_loss" + ) + class MetricsTree_Distribution_UtxoCohorts_AmountRange: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._0sats: _0satsPattern2 = _0satsPattern2(client, 'utxos_with_0sats') - self._100btc_to_1k_btc: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_100btc_under_1k_btc') - self._100k_btc_or_more: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_100k_btc') - self._100k_sats_to_1m_sats: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_100k_sats_under_1m_sats') - self._100sats_to_1k_sats: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_100sats_under_1k_sats') - self._10btc_to_100btc: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_10btc_under_100btc') - self._10k_btc_to_100k_btc: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_10k_btc_under_100k_btc') - self._10k_sats_to_100k_sats: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_10k_sats_under_100k_sats') - self._10m_sats_to_1btc: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_10m_sats_under_1btc') - self._10sats_to_100sats: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_10sats_under_100sats') - self._1btc_to_10btc: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_1btc_under_10btc') - self._1k_btc_to_10k_btc: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_1k_btc_under_10k_btc') - self._1k_sats_to_10k_sats: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_1k_sats_under_10k_sats') - self._1m_sats_to_10m_sats: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_1m_sats_under_10m_sats') - self._1sat_to_10sats: _0satsPattern2 = _0satsPattern2(client, 'utxos_above_1sat_under_10sats') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._0sats: _0satsPattern2 = _0satsPattern2(client, "utxos_with_0sats") + self._100btc_to_1k_btc: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_100btc_under_1k_btc" + ) + self._100k_btc_or_more: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_100k_btc" + ) + self._100k_sats_to_1m_sats: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_100k_sats_under_1m_sats" + ) + self._100sats_to_1k_sats: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_100sats_under_1k_sats" + ) + self._10btc_to_100btc: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_10btc_under_100btc" + ) + self._10k_btc_to_100k_btc: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_10k_btc_under_100k_btc" + ) + self._10k_sats_to_100k_sats: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_10k_sats_under_100k_sats" + ) + self._10m_sats_to_1btc: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_10m_sats_under_1btc" + ) + self._10sats_to_100sats: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_10sats_under_100sats" + ) + self._1btc_to_10btc: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_1btc_under_10btc" + ) + self._1k_btc_to_10k_btc: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_1k_btc_under_10k_btc" + ) + self._1k_sats_to_10k_sats: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_1k_sats_under_10k_sats" + ) + self._1m_sats_to_10m_sats: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_1m_sats_under_10m_sats" + ) + self._1sat_to_10sats: _0satsPattern2 = _0satsPattern2( + client, "utxos_above_1sat_under_10sats" + ) + class MetricsTree_Distribution_UtxoCohorts_Epoch: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._0: _0satsPattern2 = _0satsPattern2(client, 'epoch_0') - self._1: _0satsPattern2 = _0satsPattern2(client, 'epoch_1') - self._2: _0satsPattern2 = _0satsPattern2(client, 'epoch_2') - self._3: _0satsPattern2 = _0satsPattern2(client, 'epoch_3') - self._4: _0satsPattern2 = _0satsPattern2(client, 'epoch_4') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._0: _0satsPattern2 = _0satsPattern2(client, "epoch_0") + self._1: _0satsPattern2 = _0satsPattern2(client, "epoch_1") + self._2: _0satsPattern2 = _0satsPattern2(client, "epoch_2") + self._3: _0satsPattern2 = _0satsPattern2(client, "epoch_3") + self._4: _0satsPattern2 = _0satsPattern2(client, "epoch_4") + class MetricsTree_Distribution_UtxoCohorts_GeAmount: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._100btc: _100btcPattern = _100btcPattern(client, 'utxos_above_100btc') - self._100k_sats: _100btcPattern = _100btcPattern(client, 'utxos_above_100k_sats') - self._100sats: _100btcPattern = _100btcPattern(client, 'utxos_above_100sats') - self._10btc: _100btcPattern = _100btcPattern(client, 'utxos_above_10btc') - self._10k_btc: _100btcPattern = _100btcPattern(client, 'utxos_above_10k_btc') - self._10k_sats: _100btcPattern = _100btcPattern(client, 'utxos_above_10k_sats') - self._10m_sats: _100btcPattern = _100btcPattern(client, 'utxos_above_10m_sats') - self._10sats: _100btcPattern = _100btcPattern(client, 'utxos_above_10sats') - self._1btc: _100btcPattern = _100btcPattern(client, 'utxos_above_1btc') - self._1k_btc: _100btcPattern = _100btcPattern(client, 'utxos_above_1k_btc') - self._1k_sats: _100btcPattern = _100btcPattern(client, 'utxos_above_1k_sats') - self._1m_sats: _100btcPattern = _100btcPattern(client, 'utxos_above_1m_sats') - self._1sat: _100btcPattern = _100btcPattern(client, 'utxos_above_1sat') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._100btc: _100btcPattern = _100btcPattern(client, "utxos_above_100btc") + self._100k_sats: _100btcPattern = _100btcPattern( + client, "utxos_above_100k_sats" + ) + self._100sats: _100btcPattern = _100btcPattern(client, "utxos_above_100sats") + self._10btc: _100btcPattern = _100btcPattern(client, "utxos_above_10btc") + self._10k_btc: _100btcPattern = _100btcPattern(client, "utxos_above_10k_btc") + self._10k_sats: _100btcPattern = _100btcPattern(client, "utxos_above_10k_sats") + self._10m_sats: _100btcPattern = _100btcPattern(client, "utxos_above_10m_sats") + self._10sats: _100btcPattern = _100btcPattern(client, "utxos_above_10sats") + self._1btc: _100btcPattern = _100btcPattern(client, "utxos_above_1btc") + self._1k_btc: _100btcPattern = _100btcPattern(client, "utxos_above_1k_btc") + self._1k_sats: _100btcPattern = _100btcPattern(client, "utxos_above_1k_sats") + self._1m_sats: _100btcPattern = _100btcPattern(client, "utxos_above_1m_sats") + self._1sat: _100btcPattern = _100btcPattern(client, "utxos_above_1sat") + class MetricsTree_Distribution_UtxoCohorts_LtAmount: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._100btc: _100btcPattern = _100btcPattern(client, 'utxos_under_100btc') - self._100k_btc: _100btcPattern = _100btcPattern(client, 'utxos_under_100k_btc') - self._100k_sats: _100btcPattern = _100btcPattern(client, 'utxos_under_100k_sats') - self._100sats: _100btcPattern = _100btcPattern(client, 'utxos_under_100sats') - self._10btc: _100btcPattern = _100btcPattern(client, 'utxos_under_10btc') - self._10k_btc: _100btcPattern = _100btcPattern(client, 'utxos_under_10k_btc') - self._10k_sats: _100btcPattern = _100btcPattern(client, 'utxos_under_10k_sats') - self._10m_sats: _100btcPattern = _100btcPattern(client, 'utxos_under_10m_sats') - self._10sats: _100btcPattern = _100btcPattern(client, 'utxos_under_10sats') - self._1btc: _100btcPattern = _100btcPattern(client, 'utxos_under_1btc') - self._1k_btc: _100btcPattern = _100btcPattern(client, 'utxos_under_1k_btc') - self._1k_sats: _100btcPattern = _100btcPattern(client, 'utxos_under_1k_sats') - self._1m_sats: _100btcPattern = _100btcPattern(client, 'utxos_under_1m_sats') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._100btc: _100btcPattern = _100btcPattern(client, "utxos_under_100btc") + self._100k_btc: _100btcPattern = _100btcPattern(client, "utxos_under_100k_btc") + self._100k_sats: _100btcPattern = _100btcPattern( + client, "utxos_under_100k_sats" + ) + self._100sats: _100btcPattern = _100btcPattern(client, "utxos_under_100sats") + self._10btc: _100btcPattern = _100btcPattern(client, "utxos_under_10btc") + self._10k_btc: _100btcPattern = _100btcPattern(client, "utxos_under_10k_btc") + self._10k_sats: _100btcPattern = _100btcPattern(client, "utxos_under_10k_sats") + self._10m_sats: _100btcPattern = _100btcPattern(client, "utxos_under_10m_sats") + self._10sats: _100btcPattern = _100btcPattern(client, "utxos_under_10sats") + self._1btc: _100btcPattern = _100btcPattern(client, "utxos_under_1btc") + self._1k_btc: _100btcPattern = _100btcPattern(client, "utxos_under_1k_btc") + self._1k_sats: _100btcPattern = _100btcPattern(client, "utxos_under_1k_sats") + self._1m_sats: _100btcPattern = _100btcPattern(client, "utxos_under_1m_sats") + class MetricsTree_Distribution_UtxoCohorts_MaxAge: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._10y: _10yPattern = _10yPattern(client, 'utxos_up_to_10y_old') - self._12y: _10yPattern = _10yPattern(client, 'utxos_up_to_12y_old') - self._15y: _10yPattern = _10yPattern(client, 'utxos_up_to_15y_old') - self._1m: _10yPattern = _10yPattern(client, 'utxos_up_to_1m_old') - self._1w: _10yPattern = _10yPattern(client, 'utxos_up_to_1w_old') - self._1y: _10yPattern = _10yPattern(client, 'utxos_up_to_1y_old') - self._2m: _10yPattern = _10yPattern(client, 'utxos_up_to_2m_old') - self._2y: _10yPattern = _10yPattern(client, 'utxos_up_to_2y_old') - self._3m: _10yPattern = _10yPattern(client, 'utxos_up_to_3m_old') - self._3y: _10yPattern = _10yPattern(client, 'utxos_up_to_3y_old') - self._4m: _10yPattern = _10yPattern(client, 'utxos_up_to_4m_old') - self._4y: _10yPattern = _10yPattern(client, 'utxos_up_to_4y_old') - self._5m: _10yPattern = _10yPattern(client, 'utxos_up_to_5m_old') - self._5y: _10yPattern = _10yPattern(client, 'utxos_up_to_5y_old') - self._6m: _10yPattern = _10yPattern(client, 'utxos_up_to_6m_old') - self._6y: _10yPattern = _10yPattern(client, 'utxos_up_to_6y_old') - self._7y: _10yPattern = _10yPattern(client, 'utxos_up_to_7y_old') - self._8y: _10yPattern = _10yPattern(client, 'utxos_up_to_8y_old') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._10y: _10yPattern = _10yPattern(client, "utxos_up_to_10y_old") + self._12y: _10yPattern = _10yPattern(client, "utxos_up_to_12y_old") + self._15y: _10yPattern = _10yPattern(client, "utxos_up_to_15y_old") + self._1m: _10yPattern = _10yPattern(client, "utxos_up_to_1m_old") + self._1w: _10yPattern = _10yPattern(client, "utxos_up_to_1w_old") + self._1y: _10yPattern = _10yPattern(client, "utxos_up_to_1y_old") + self._2m: _10yPattern = _10yPattern(client, "utxos_up_to_2m_old") + self._2y: _10yPattern = _10yPattern(client, "utxos_up_to_2y_old") + self._3m: _10yPattern = _10yPattern(client, "utxos_up_to_3m_old") + self._3y: _10yPattern = _10yPattern(client, "utxos_up_to_3y_old") + self._4m: _10yPattern = _10yPattern(client, "utxos_up_to_4m_old") + self._4y: _10yPattern = _10yPattern(client, "utxos_up_to_4y_old") + self._5m: _10yPattern = _10yPattern(client, "utxos_up_to_5m_old") + self._5y: _10yPattern = _10yPattern(client, "utxos_up_to_5y_old") + self._6m: _10yPattern = _10yPattern(client, "utxos_up_to_6m_old") + self._6y: _10yPattern = _10yPattern(client, "utxos_up_to_6y_old") + self._7y: _10yPattern = _10yPattern(client, "utxos_up_to_7y_old") + self._8y: _10yPattern = _10yPattern(client, "utxos_up_to_8y_old") + class MetricsTree_Distribution_UtxoCohorts_MinAge: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._10y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_10y_old') - self._12y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_12y_old') - self._1d: _100btcPattern = _100btcPattern(client, 'utxos_at_least_1d_old') - self._1m: _100btcPattern = _100btcPattern(client, 'utxos_at_least_1m_old') - self._1w: _100btcPattern = _100btcPattern(client, 'utxos_at_least_1w_old') - self._1y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_1y_old') - self._2m: _100btcPattern = _100btcPattern(client, 'utxos_at_least_2m_old') - self._2y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_2y_old') - self._3m: _100btcPattern = _100btcPattern(client, 'utxos_at_least_3m_old') - self._3y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_3y_old') - self._4m: _100btcPattern = _100btcPattern(client, 'utxos_at_least_4m_old') - self._4y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_4y_old') - self._5m: _100btcPattern = _100btcPattern(client, 'utxos_at_least_5m_old') - self._5y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_5y_old') - self._6m: _100btcPattern = _100btcPattern(client, 'utxos_at_least_6m_old') - self._6y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_6y_old') - self._7y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_7y_old') - self._8y: _100btcPattern = _100btcPattern(client, 'utxos_at_least_8y_old') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._10y: _100btcPattern = _100btcPattern(client, "utxos_at_least_10y_old") + self._12y: _100btcPattern = _100btcPattern(client, "utxos_at_least_12y_old") + self._1d: _100btcPattern = _100btcPattern(client, "utxos_at_least_1d_old") + self._1m: _100btcPattern = _100btcPattern(client, "utxos_at_least_1m_old") + self._1w: _100btcPattern = _100btcPattern(client, "utxos_at_least_1w_old") + self._1y: _100btcPattern = _100btcPattern(client, "utxos_at_least_1y_old") + self._2m: _100btcPattern = _100btcPattern(client, "utxos_at_least_2m_old") + self._2y: _100btcPattern = _100btcPattern(client, "utxos_at_least_2y_old") + self._3m: _100btcPattern = _100btcPattern(client, "utxos_at_least_3m_old") + self._3y: _100btcPattern = _100btcPattern(client, "utxos_at_least_3y_old") + self._4m: _100btcPattern = _100btcPattern(client, "utxos_at_least_4m_old") + self._4y: _100btcPattern = _100btcPattern(client, "utxos_at_least_4y_old") + self._5m: _100btcPattern = _100btcPattern(client, "utxos_at_least_5m_old") + self._5y: _100btcPattern = _100btcPattern(client, "utxos_at_least_5y_old") + self._6m: _100btcPattern = _100btcPattern(client, "utxos_at_least_6m_old") + self._6y: _100btcPattern = _100btcPattern(client, "utxos_at_least_6y_old") + self._7y: _100btcPattern = _100btcPattern(client, "utxos_at_least_7y_old") + self._8y: _100btcPattern = _100btcPattern(client, "utxos_at_least_8y_old") + class MetricsTree_Distribution_UtxoCohorts_Term_Long_CostBasis: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.max: MetricPattern1[Dollars] = MetricPattern1(client, 'lth_max_cost_basis') - self.min: MetricPattern1[Dollars] = MetricPattern1(client, 'lth_min_cost_basis') - self.percentiles: PercentilesPattern = PercentilesPattern(client, 'lth_cost_basis') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.max: MetricPattern1[Dollars] = MetricPattern1(client, "lth_max_cost_basis") + self.min: MetricPattern1[Dollars] = MetricPattern1(client, "lth_min_cost_basis") + self.percentiles: PercentilesPattern = PercentilesPattern( + client, "lth_cost_basis" + ) + class MetricsTree_Distribution_UtxoCohorts_Term_Long: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.activity: ActivityPattern2 = ActivityPattern2(client, 'lth') - self.cost_basis: MetricsTree_Distribution_UtxoCohorts_Term_Long_CostBasis = MetricsTree_Distribution_UtxoCohorts_Term_Long_CostBasis(client) - self.outputs: OutputsPattern = OutputsPattern(client, 'lth') - self.realized: RealizedPattern2 = RealizedPattern2(client, 'lth') - self.relative: RelativePattern5 = RelativePattern5(client, 'lth') - self.supply: SupplyPattern2 = SupplyPattern2(client, 'lth_supply') - self.unrealized: UnrealizedPattern = UnrealizedPattern(client, 'lth') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.activity: ActivityPattern2 = ActivityPattern2(client, "lth") + self.cost_basis: MetricsTree_Distribution_UtxoCohorts_Term_Long_CostBasis = ( + MetricsTree_Distribution_UtxoCohorts_Term_Long_CostBasis(client) + ) + self.outputs: OutputsPattern = OutputsPattern(client, "lth") + self.realized: RealizedPattern2 = RealizedPattern2(client, "lth") + self.relative: RelativePattern5 = RelativePattern5(client, "lth") + self.supply: SupplyPattern2 = SupplyPattern2(client, "lth_supply") + self.unrealized: UnrealizedPattern = UnrealizedPattern(client, "lth") + class MetricsTree_Distribution_UtxoCohorts_Term_Short_CostBasis: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.max: MetricPattern1[Dollars] = MetricPattern1(client, 'sth_max_cost_basis') - self.min: MetricPattern1[Dollars] = MetricPattern1(client, 'sth_min_cost_basis') - self.percentiles: PercentilesPattern = PercentilesPattern(client, 'sth_cost_basis') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.max: MetricPattern1[Dollars] = MetricPattern1(client, "sth_max_cost_basis") + self.min: MetricPattern1[Dollars] = MetricPattern1(client, "sth_min_cost_basis") + self.percentiles: PercentilesPattern = PercentilesPattern( + client, "sth_cost_basis" + ) + class MetricsTree_Distribution_UtxoCohorts_Term_Short: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.activity: ActivityPattern2 = ActivityPattern2(client, 'sth') - self.cost_basis: MetricsTree_Distribution_UtxoCohorts_Term_Short_CostBasis = MetricsTree_Distribution_UtxoCohorts_Term_Short_CostBasis(client) - self.outputs: OutputsPattern = OutputsPattern(client, 'sth') - self.realized: RealizedPattern3 = RealizedPattern3(client, 'sth') - self.relative: RelativePattern5 = RelativePattern5(client, 'sth') - self.supply: SupplyPattern2 = SupplyPattern2(client, 'sth_supply') - self.unrealized: UnrealizedPattern = UnrealizedPattern(client, 'sth') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.activity: ActivityPattern2 = ActivityPattern2(client, "sth") + self.cost_basis: MetricsTree_Distribution_UtxoCohorts_Term_Short_CostBasis = ( + MetricsTree_Distribution_UtxoCohorts_Term_Short_CostBasis(client) + ) + self.outputs: OutputsPattern = OutputsPattern(client, "sth") + self.realized: RealizedPattern3 = RealizedPattern3(client, "sth") + self.relative: RelativePattern5 = RelativePattern5(client, "sth") + self.supply: SupplyPattern2 = SupplyPattern2(client, "sth_supply") + self.unrealized: UnrealizedPattern = UnrealizedPattern(client, "sth") + class MetricsTree_Distribution_UtxoCohorts_Term: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.long: MetricsTree_Distribution_UtxoCohorts_Term_Long = MetricsTree_Distribution_UtxoCohorts_Term_Long(client) - self.short: MetricsTree_Distribution_UtxoCohorts_Term_Short = MetricsTree_Distribution_UtxoCohorts_Term_Short(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.long: MetricsTree_Distribution_UtxoCohorts_Term_Long = ( + MetricsTree_Distribution_UtxoCohorts_Term_Long(client) + ) + self.short: MetricsTree_Distribution_UtxoCohorts_Term_Short = ( + MetricsTree_Distribution_UtxoCohorts_Term_Short(client) + ) + class MetricsTree_Distribution_UtxoCohorts_Type: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.empty: _0satsPattern2 = _0satsPattern2(client, 'empty_outputs') - self.p2a: _0satsPattern2 = _0satsPattern2(client, 'p2a') - self.p2ms: _0satsPattern2 = _0satsPattern2(client, 'p2ms') - self.p2pk33: _0satsPattern2 = _0satsPattern2(client, 'p2pk33') - self.p2pk65: _0satsPattern2 = _0satsPattern2(client, 'p2pk65') - self.p2pkh: _0satsPattern2 = _0satsPattern2(client, 'p2pkh') - self.p2sh: _0satsPattern2 = _0satsPattern2(client, 'p2sh') - self.p2tr: _0satsPattern2 = _0satsPattern2(client, 'p2tr') - self.p2wpkh: _0satsPattern2 = _0satsPattern2(client, 'p2wpkh') - self.p2wsh: _0satsPattern2 = _0satsPattern2(client, 'p2wsh') - self.unknown: _0satsPattern2 = _0satsPattern2(client, 'unknown_outputs') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.empty: _0satsPattern2 = _0satsPattern2(client, "empty_outputs") + self.p2a: _0satsPattern2 = _0satsPattern2(client, "p2a") + self.p2ms: _0satsPattern2 = _0satsPattern2(client, "p2ms") + self.p2pk33: _0satsPattern2 = _0satsPattern2(client, "p2pk33") + self.p2pk65: _0satsPattern2 = _0satsPattern2(client, "p2pk65") + self.p2pkh: _0satsPattern2 = _0satsPattern2(client, "p2pkh") + self.p2sh: _0satsPattern2 = _0satsPattern2(client, "p2sh") + self.p2tr: _0satsPattern2 = _0satsPattern2(client, "p2tr") + self.p2wpkh: _0satsPattern2 = _0satsPattern2(client, "p2wpkh") + self.p2wsh: _0satsPattern2 = _0satsPattern2(client, "p2wsh") + self.unknown: _0satsPattern2 = _0satsPattern2(client, "unknown_outputs") + class MetricsTree_Distribution_UtxoCohorts_Year: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._2009: _0satsPattern2 = _0satsPattern2(client, 'year_2009') - self._2010: _0satsPattern2 = _0satsPattern2(client, 'year_2010') - self._2011: _0satsPattern2 = _0satsPattern2(client, 'year_2011') - self._2012: _0satsPattern2 = _0satsPattern2(client, 'year_2012') - self._2013: _0satsPattern2 = _0satsPattern2(client, 'year_2013') - self._2014: _0satsPattern2 = _0satsPattern2(client, 'year_2014') - self._2015: _0satsPattern2 = _0satsPattern2(client, 'year_2015') - self._2016: _0satsPattern2 = _0satsPattern2(client, 'year_2016') - self._2017: _0satsPattern2 = _0satsPattern2(client, 'year_2017') - self._2018: _0satsPattern2 = _0satsPattern2(client, 'year_2018') - self._2019: _0satsPattern2 = _0satsPattern2(client, 'year_2019') - self._2020: _0satsPattern2 = _0satsPattern2(client, 'year_2020') - self._2021: _0satsPattern2 = _0satsPattern2(client, 'year_2021') - self._2022: _0satsPattern2 = _0satsPattern2(client, 'year_2022') - self._2023: _0satsPattern2 = _0satsPattern2(client, 'year_2023') - self._2024: _0satsPattern2 = _0satsPattern2(client, 'year_2024') - self._2025: _0satsPattern2 = _0satsPattern2(client, 'year_2025') - self._2026: _0satsPattern2 = _0satsPattern2(client, 'year_2026') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._2009: _0satsPattern2 = _0satsPattern2(client, "year_2009") + self._2010: _0satsPattern2 = _0satsPattern2(client, "year_2010") + self._2011: _0satsPattern2 = _0satsPattern2(client, "year_2011") + self._2012: _0satsPattern2 = _0satsPattern2(client, "year_2012") + self._2013: _0satsPattern2 = _0satsPattern2(client, "year_2013") + self._2014: _0satsPattern2 = _0satsPattern2(client, "year_2014") + self._2015: _0satsPattern2 = _0satsPattern2(client, "year_2015") + self._2016: _0satsPattern2 = _0satsPattern2(client, "year_2016") + self._2017: _0satsPattern2 = _0satsPattern2(client, "year_2017") + self._2018: _0satsPattern2 = _0satsPattern2(client, "year_2018") + self._2019: _0satsPattern2 = _0satsPattern2(client, "year_2019") + self._2020: _0satsPattern2 = _0satsPattern2(client, "year_2020") + self._2021: _0satsPattern2 = _0satsPattern2(client, "year_2021") + self._2022: _0satsPattern2 = _0satsPattern2(client, "year_2022") + self._2023: _0satsPattern2 = _0satsPattern2(client, "year_2023") + self._2024: _0satsPattern2 = _0satsPattern2(client, "year_2024") + self._2025: _0satsPattern2 = _0satsPattern2(client, "year_2025") + self._2026: _0satsPattern2 = _0satsPattern2(client, "year_2026") + class MetricsTree_Distribution_UtxoCohorts: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.age_range: MetricsTree_Distribution_UtxoCohorts_AgeRange = MetricsTree_Distribution_UtxoCohorts_AgeRange(client) - self.all: MetricsTree_Distribution_UtxoCohorts_All = MetricsTree_Distribution_UtxoCohorts_All(client) - self.amount_range: MetricsTree_Distribution_UtxoCohorts_AmountRange = MetricsTree_Distribution_UtxoCohorts_AmountRange(client) - self.epoch: MetricsTree_Distribution_UtxoCohorts_Epoch = MetricsTree_Distribution_UtxoCohorts_Epoch(client) - self.ge_amount: MetricsTree_Distribution_UtxoCohorts_GeAmount = MetricsTree_Distribution_UtxoCohorts_GeAmount(client) - self.lt_amount: MetricsTree_Distribution_UtxoCohorts_LtAmount = MetricsTree_Distribution_UtxoCohorts_LtAmount(client) - self.max_age: MetricsTree_Distribution_UtxoCohorts_MaxAge = MetricsTree_Distribution_UtxoCohorts_MaxAge(client) - self.min_age: MetricsTree_Distribution_UtxoCohorts_MinAge = MetricsTree_Distribution_UtxoCohorts_MinAge(client) - self.term: MetricsTree_Distribution_UtxoCohorts_Term = MetricsTree_Distribution_UtxoCohorts_Term(client) - self.type_: MetricsTree_Distribution_UtxoCohorts_Type = MetricsTree_Distribution_UtxoCohorts_Type(client) - self.year: MetricsTree_Distribution_UtxoCohorts_Year = MetricsTree_Distribution_UtxoCohorts_Year(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.age_range: MetricsTree_Distribution_UtxoCohorts_AgeRange = ( + MetricsTree_Distribution_UtxoCohorts_AgeRange(client) + ) + self.all: MetricsTree_Distribution_UtxoCohorts_All = ( + MetricsTree_Distribution_UtxoCohorts_All(client) + ) + self.amount_range: MetricsTree_Distribution_UtxoCohorts_AmountRange = ( + MetricsTree_Distribution_UtxoCohorts_AmountRange(client) + ) + self.epoch: MetricsTree_Distribution_UtxoCohorts_Epoch = ( + MetricsTree_Distribution_UtxoCohorts_Epoch(client) + ) + self.ge_amount: MetricsTree_Distribution_UtxoCohorts_GeAmount = ( + MetricsTree_Distribution_UtxoCohorts_GeAmount(client) + ) + self.lt_amount: MetricsTree_Distribution_UtxoCohorts_LtAmount = ( + MetricsTree_Distribution_UtxoCohorts_LtAmount(client) + ) + self.max_age: MetricsTree_Distribution_UtxoCohorts_MaxAge = ( + MetricsTree_Distribution_UtxoCohorts_MaxAge(client) + ) + self.min_age: MetricsTree_Distribution_UtxoCohorts_MinAge = ( + MetricsTree_Distribution_UtxoCohorts_MinAge(client) + ) + self.term: MetricsTree_Distribution_UtxoCohorts_Term = ( + MetricsTree_Distribution_UtxoCohorts_Term(client) + ) + self.type_: MetricsTree_Distribution_UtxoCohorts_Type = ( + MetricsTree_Distribution_UtxoCohorts_Type(client) + ) + self.year: MetricsTree_Distribution_UtxoCohorts_Year = ( + MetricsTree_Distribution_UtxoCohorts_Year(client) + ) + class MetricsTree_Distribution: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.addr_count: MetricsTree_Distribution_AddrCount = MetricsTree_Distribution_AddrCount(client) - self.address_cohorts: MetricsTree_Distribution_AddressCohorts = MetricsTree_Distribution_AddressCohorts(client) - self.addresses_data: MetricsTree_Distribution_AddressesData = MetricsTree_Distribution_AddressesData(client) - self.any_address_indexes: MetricsTree_Distribution_AnyAddressIndexes = MetricsTree_Distribution_AnyAddressIndexes(client) - self.chain_state: MetricPattern11[SupplyState] = MetricPattern11(client, 'chain') - self.empty_addr_count: MetricsTree_Distribution_EmptyAddrCount = MetricsTree_Distribution_EmptyAddrCount(client) - self.emptyaddressindex: MetricPattern32[EmptyAddressIndex] = MetricPattern32(client, 'emptyaddressindex') - self.loadedaddressindex: MetricPattern31[LoadedAddressIndex] = MetricPattern31(client, 'loadedaddressindex') - self.utxo_cohorts: MetricsTree_Distribution_UtxoCohorts = MetricsTree_Distribution_UtxoCohorts(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.addr_count: MetricsTree_Distribution_AddrCount = ( + MetricsTree_Distribution_AddrCount(client) + ) + self.address_cohorts: MetricsTree_Distribution_AddressCohorts = ( + MetricsTree_Distribution_AddressCohorts(client) + ) + self.addresses_data: MetricsTree_Distribution_AddressesData = ( + MetricsTree_Distribution_AddressesData(client) + ) + self.any_address_indexes: MetricsTree_Distribution_AnyAddressIndexes = ( + MetricsTree_Distribution_AnyAddressIndexes(client) + ) + self.chain_state: MetricPattern11[SupplyState] = MetricPattern11( + client, "chain" + ) + self.empty_addr_count: MetricsTree_Distribution_EmptyAddrCount = ( + MetricsTree_Distribution_EmptyAddrCount(client) + ) + self.emptyaddressindex: MetricPattern32[EmptyAddressIndex] = MetricPattern32( + client, "emptyaddressindex" + ) + self.loadedaddressindex: MetricPattern31[LoadedAddressIndex] = MetricPattern31( + client, "loadedaddressindex" + ) + self.utxo_cohorts: MetricsTree_Distribution_UtxoCohorts = ( + MetricsTree_Distribution_UtxoCohorts(client) + ) + class MetricsTree_Indexes_Address_Empty: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern9[EmptyOutputIndex] = MetricPattern9(client, 'emptyoutputindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern9[EmptyOutputIndex] = MetricPattern9( + client, "emptyoutputindex" + ) + class MetricsTree_Indexes_Address_Opreturn: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern14[OpReturnIndex] = MetricPattern14(client, 'opreturnindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern14[OpReturnIndex] = MetricPattern14( + client, "opreturnindex" + ) + class MetricsTree_Indexes_Address_P2a: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern16[P2AAddressIndex] = MetricPattern16(client, 'p2aaddressindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern16[P2AAddressIndex] = MetricPattern16( + client, "p2aaddressindex" + ) + class MetricsTree_Indexes_Address_P2ms: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern17[P2MSOutputIndex] = MetricPattern17(client, 'p2msoutputindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern17[P2MSOutputIndex] = MetricPattern17( + client, "p2msoutputindex" + ) + class MetricsTree_Indexes_Address_P2pk33: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern18[P2PK33AddressIndex] = MetricPattern18(client, 'p2pk33addressindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern18[P2PK33AddressIndex] = MetricPattern18( + client, "p2pk33addressindex" + ) + class MetricsTree_Indexes_Address_P2pk65: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern19[P2PK65AddressIndex] = MetricPattern19(client, 'p2pk65addressindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern19[P2PK65AddressIndex] = MetricPattern19( + client, "p2pk65addressindex" + ) + class MetricsTree_Indexes_Address_P2pkh: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern20[P2PKHAddressIndex] = MetricPattern20(client, 'p2pkhaddressindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern20[P2PKHAddressIndex] = MetricPattern20( + client, "p2pkhaddressindex" + ) + class MetricsTree_Indexes_Address_P2sh: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern21[P2SHAddressIndex] = MetricPattern21(client, 'p2shaddressindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern21[P2SHAddressIndex] = MetricPattern21( + client, "p2shaddressindex" + ) + class MetricsTree_Indexes_Address_P2tr: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern22[P2TRAddressIndex] = MetricPattern22(client, 'p2traddressindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern22[P2TRAddressIndex] = MetricPattern22( + client, "p2traddressindex" + ) + class MetricsTree_Indexes_Address_P2wpkh: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern23[P2WPKHAddressIndex] = MetricPattern23(client, 'p2wpkhaddressindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern23[P2WPKHAddressIndex] = MetricPattern23( + client, "p2wpkhaddressindex" + ) + class MetricsTree_Indexes_Address_P2wsh: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern24[P2WSHAddressIndex] = MetricPattern24(client, 'p2wshaddressindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern24[P2WSHAddressIndex] = MetricPattern24( + client, "p2wshaddressindex" + ) + class MetricsTree_Indexes_Address_Unknown: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern28[UnknownOutputIndex] = MetricPattern28(client, 'unknownoutputindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern28[UnknownOutputIndex] = MetricPattern28( + client, "unknownoutputindex" + ) + class MetricsTree_Indexes_Address: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.empty: MetricsTree_Indexes_Address_Empty = MetricsTree_Indexes_Address_Empty(client) - self.opreturn: MetricsTree_Indexes_Address_Opreturn = MetricsTree_Indexes_Address_Opreturn(client) - self.p2a: MetricsTree_Indexes_Address_P2a = MetricsTree_Indexes_Address_P2a(client) - self.p2ms: MetricsTree_Indexes_Address_P2ms = MetricsTree_Indexes_Address_P2ms(client) - self.p2pk33: MetricsTree_Indexes_Address_P2pk33 = MetricsTree_Indexes_Address_P2pk33(client) - self.p2pk65: MetricsTree_Indexes_Address_P2pk65 = MetricsTree_Indexes_Address_P2pk65(client) - self.p2pkh: MetricsTree_Indexes_Address_P2pkh = MetricsTree_Indexes_Address_P2pkh(client) - self.p2sh: MetricsTree_Indexes_Address_P2sh = MetricsTree_Indexes_Address_P2sh(client) - self.p2tr: MetricsTree_Indexes_Address_P2tr = MetricsTree_Indexes_Address_P2tr(client) - self.p2wpkh: MetricsTree_Indexes_Address_P2wpkh = MetricsTree_Indexes_Address_P2wpkh(client) - self.p2wsh: MetricsTree_Indexes_Address_P2wsh = MetricsTree_Indexes_Address_P2wsh(client) - self.unknown: MetricsTree_Indexes_Address_Unknown = MetricsTree_Indexes_Address_Unknown(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.empty: MetricsTree_Indexes_Address_Empty = ( + MetricsTree_Indexes_Address_Empty(client) + ) + self.opreturn: MetricsTree_Indexes_Address_Opreturn = ( + MetricsTree_Indexes_Address_Opreturn(client) + ) + self.p2a: MetricsTree_Indexes_Address_P2a = MetricsTree_Indexes_Address_P2a( + client + ) + self.p2ms: MetricsTree_Indexes_Address_P2ms = MetricsTree_Indexes_Address_P2ms( + client + ) + self.p2pk33: MetricsTree_Indexes_Address_P2pk33 = ( + MetricsTree_Indexes_Address_P2pk33(client) + ) + self.p2pk65: MetricsTree_Indexes_Address_P2pk65 = ( + MetricsTree_Indexes_Address_P2pk65(client) + ) + self.p2pkh: MetricsTree_Indexes_Address_P2pkh = ( + MetricsTree_Indexes_Address_P2pkh(client) + ) + self.p2sh: MetricsTree_Indexes_Address_P2sh = MetricsTree_Indexes_Address_P2sh( + client + ) + self.p2tr: MetricsTree_Indexes_Address_P2tr = MetricsTree_Indexes_Address_P2tr( + client + ) + self.p2wpkh: MetricsTree_Indexes_Address_P2wpkh = ( + MetricsTree_Indexes_Address_P2wpkh(client) + ) + self.p2wsh: MetricsTree_Indexes_Address_P2wsh = ( + MetricsTree_Indexes_Address_P2wsh(client) + ) + self.unknown: MetricsTree_Indexes_Address_Unknown = ( + MetricsTree_Indexes_Address_Unknown(client) + ) + class MetricsTree_Indexes_Dateindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.date: MetricPattern6[Date] = MetricPattern6(client, 'dateindex_date') - self.first_height: MetricPattern6[Height] = MetricPattern6(client, 'dateindex_first_height') - self.height_count: MetricPattern6[StoredU64] = MetricPattern6(client, 'dateindex_height_count') - self.identity: MetricPattern6[DateIndex] = MetricPattern6(client, 'dateindex') - self.monthindex: MetricPattern6[MonthIndex] = MetricPattern6(client, 'dateindex_monthindex') - self.weekindex: MetricPattern6[WeekIndex] = MetricPattern6(client, 'dateindex_weekindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.date: MetricPattern6[Date] = MetricPattern6(client, "dateindex_date") + self.first_height: MetricPattern6[Height] = MetricPattern6( + client, "dateindex_first_height" + ) + self.height_count: MetricPattern6[StoredU64] = MetricPattern6( + client, "dateindex_height_count" + ) + self.identity: MetricPattern6[DateIndex] = MetricPattern6(client, "dateindex") + self.monthindex: MetricPattern6[MonthIndex] = MetricPattern6( + client, "dateindex_monthindex" + ) + self.weekindex: MetricPattern6[WeekIndex] = MetricPattern6( + client, "dateindex_weekindex" + ) + class MetricsTree_Indexes_Decadeindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.first_yearindex: MetricPattern7[YearIndex] = MetricPattern7(client, 'decadeindex_first_yearindex') - self.identity: MetricPattern7[DecadeIndex] = MetricPattern7(client, 'decadeindex') - self.yearindex_count: MetricPattern7[StoredU64] = MetricPattern7(client, 'decadeindex_yearindex_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.first_yearindex: MetricPattern7[YearIndex] = MetricPattern7( + client, "decadeindex_first_yearindex" + ) + self.identity: MetricPattern7[DecadeIndex] = MetricPattern7( + client, "decadeindex" + ) + self.yearindex_count: MetricPattern7[StoredU64] = MetricPattern7( + client, "decadeindex_yearindex_count" + ) + class MetricsTree_Indexes_Difficultyepoch: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.first_height: MetricPattern8[Height] = MetricPattern8(client, 'difficultyepoch_first_height') - self.height_count: MetricPattern8[StoredU64] = MetricPattern8(client, 'difficultyepoch_height_count') - self.identity: MetricPattern8[DifficultyEpoch] = MetricPattern8(client, 'difficultyepoch') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.first_height: MetricPattern8[Height] = MetricPattern8( + client, "difficultyepoch_first_height" + ) + self.height_count: MetricPattern8[StoredU64] = MetricPattern8( + client, "difficultyepoch_height_count" + ) + self.identity: MetricPattern8[DifficultyEpoch] = MetricPattern8( + client, "difficultyepoch" + ) + class MetricsTree_Indexes_Halvingepoch: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.first_height: MetricPattern10[Height] = MetricPattern10(client, 'halvingepoch_first_height') - self.identity: MetricPattern10[HalvingEpoch] = MetricPattern10(client, 'halvingepoch') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.first_height: MetricPattern10[Height] = MetricPattern10( + client, "halvingepoch_first_height" + ) + self.identity: MetricPattern10[HalvingEpoch] = MetricPattern10( + client, "halvingepoch" + ) + class MetricsTree_Indexes_Height: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.dateindex: MetricPattern11[DateIndex] = MetricPattern11(client, 'height_dateindex') - self.difficultyepoch: MetricPattern11[DifficultyEpoch] = MetricPattern11(client, 'height_difficultyepoch') - self.halvingepoch: MetricPattern11[HalvingEpoch] = MetricPattern11(client, 'height_halvingepoch') - self.identity: MetricPattern11[Height] = MetricPattern11(client, 'height') - self.txindex_count: MetricPattern11[StoredU64] = MetricPattern11(client, 'height_txindex_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.dateindex: MetricPattern11[DateIndex] = MetricPattern11( + client, "height_dateindex" + ) + self.difficultyepoch: MetricPattern11[DifficultyEpoch] = MetricPattern11( + client, "height_difficultyepoch" + ) + self.halvingepoch: MetricPattern11[HalvingEpoch] = MetricPattern11( + client, "height_halvingepoch" + ) + self.identity: MetricPattern11[Height] = MetricPattern11(client, "height") + self.txindex_count: MetricPattern11[StoredU64] = MetricPattern11( + client, "height_txindex_count" + ) + class MetricsTree_Indexes_Monthindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.dateindex_count: MetricPattern13[StoredU64] = MetricPattern13(client, 'monthindex_dateindex_count') - self.first_dateindex: MetricPattern13[DateIndex] = MetricPattern13(client, 'monthindex_first_dateindex') - self.identity: MetricPattern13[MonthIndex] = MetricPattern13(client, 'monthindex') - self.quarterindex: MetricPattern13[QuarterIndex] = MetricPattern13(client, 'monthindex_quarterindex') - self.semesterindex: MetricPattern13[SemesterIndex] = MetricPattern13(client, 'monthindex_semesterindex') - self.yearindex: MetricPattern13[YearIndex] = MetricPattern13(client, 'monthindex_yearindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.dateindex_count: MetricPattern13[StoredU64] = MetricPattern13( + client, "monthindex_dateindex_count" + ) + self.first_dateindex: MetricPattern13[DateIndex] = MetricPattern13( + client, "monthindex_first_dateindex" + ) + self.identity: MetricPattern13[MonthIndex] = MetricPattern13( + client, "monthindex" + ) + self.quarterindex: MetricPattern13[QuarterIndex] = MetricPattern13( + client, "monthindex_quarterindex" + ) + self.semesterindex: MetricPattern13[SemesterIndex] = MetricPattern13( + client, "monthindex_semesterindex" + ) + self.yearindex: MetricPattern13[YearIndex] = MetricPattern13( + client, "monthindex_yearindex" + ) + class MetricsTree_Indexes_Quarterindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.first_monthindex: MetricPattern25[MonthIndex] = MetricPattern25(client, 'quarterindex_first_monthindex') - self.identity: MetricPattern25[QuarterIndex] = MetricPattern25(client, 'quarterindex') - self.monthindex_count: MetricPattern25[StoredU64] = MetricPattern25(client, 'quarterindex_monthindex_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.first_monthindex: MetricPattern25[MonthIndex] = MetricPattern25( + client, "quarterindex_first_monthindex" + ) + self.identity: MetricPattern25[QuarterIndex] = MetricPattern25( + client, "quarterindex" + ) + self.monthindex_count: MetricPattern25[StoredU64] = MetricPattern25( + client, "quarterindex_monthindex_count" + ) + class MetricsTree_Indexes_Semesterindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.first_monthindex: MetricPattern26[MonthIndex] = MetricPattern26(client, 'semesterindex_first_monthindex') - self.identity: MetricPattern26[SemesterIndex] = MetricPattern26(client, 'semesterindex') - self.monthindex_count: MetricPattern26[StoredU64] = MetricPattern26(client, 'semesterindex_monthindex_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.first_monthindex: MetricPattern26[MonthIndex] = MetricPattern26( + client, "semesterindex_first_monthindex" + ) + self.identity: MetricPattern26[SemesterIndex] = MetricPattern26( + client, "semesterindex" + ) + self.monthindex_count: MetricPattern26[StoredU64] = MetricPattern26( + client, "semesterindex_monthindex_count" + ) + class MetricsTree_Indexes_Txindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern27[TxIndex] = MetricPattern27(client, 'txindex') - self.input_count: MetricPattern27[StoredU64] = MetricPattern27(client, 'txindex_input_count') - self.output_count: MetricPattern27[StoredU64] = MetricPattern27(client, 'txindex_output_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern27[TxIndex] = MetricPattern27(client, "txindex") + self.input_count: MetricPattern27[StoredU64] = MetricPattern27( + client, "txindex_input_count" + ) + self.output_count: MetricPattern27[StoredU64] = MetricPattern27( + client, "txindex_output_count" + ) + class MetricsTree_Indexes_Txinindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern12[TxInIndex] = MetricPattern12(client, 'txinindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern12[TxInIndex] = MetricPattern12(client, "txinindex") + class MetricsTree_Indexes_Txoutindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.identity: MetricPattern15[TxOutIndex] = MetricPattern15(client, 'txoutindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.identity: MetricPattern15[TxOutIndex] = MetricPattern15( + client, "txoutindex" + ) + class MetricsTree_Indexes_Weekindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.dateindex_count: MetricPattern29[StoredU64] = MetricPattern29(client, 'weekindex_dateindex_count') - self.first_dateindex: MetricPattern29[DateIndex] = MetricPattern29(client, 'weekindex_first_dateindex') - self.identity: MetricPattern29[WeekIndex] = MetricPattern29(client, 'weekindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.dateindex_count: MetricPattern29[StoredU64] = MetricPattern29( + client, "weekindex_dateindex_count" + ) + self.first_dateindex: MetricPattern29[DateIndex] = MetricPattern29( + client, "weekindex_first_dateindex" + ) + self.identity: MetricPattern29[WeekIndex] = MetricPattern29(client, "weekindex") + class MetricsTree_Indexes_Yearindex: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.decadeindex: MetricPattern30[DecadeIndex] = MetricPattern30(client, 'yearindex_decadeindex') - self.first_monthindex: MetricPattern30[MonthIndex] = MetricPattern30(client, 'yearindex_first_monthindex') - self.identity: MetricPattern30[YearIndex] = MetricPattern30(client, 'yearindex') - self.monthindex_count: MetricPattern30[StoredU64] = MetricPattern30(client, 'yearindex_monthindex_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.decadeindex: MetricPattern30[DecadeIndex] = MetricPattern30( + client, "yearindex_decadeindex" + ) + self.first_monthindex: MetricPattern30[MonthIndex] = MetricPattern30( + client, "yearindex_first_monthindex" + ) + self.identity: MetricPattern30[YearIndex] = MetricPattern30(client, "yearindex") + self.monthindex_count: MetricPattern30[StoredU64] = MetricPattern30( + client, "yearindex_monthindex_count" + ) + class MetricsTree_Indexes: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): + + def __init__(self, client: BrkClientBase, base_path: str = ""): self.address: MetricsTree_Indexes_Address = MetricsTree_Indexes_Address(client) - self.dateindex: MetricsTree_Indexes_Dateindex = MetricsTree_Indexes_Dateindex(client) - self.decadeindex: MetricsTree_Indexes_Decadeindex = MetricsTree_Indexes_Decadeindex(client) - self.difficultyepoch: MetricsTree_Indexes_Difficultyepoch = MetricsTree_Indexes_Difficultyepoch(client) - self.halvingepoch: MetricsTree_Indexes_Halvingepoch = MetricsTree_Indexes_Halvingepoch(client) + self.dateindex: MetricsTree_Indexes_Dateindex = MetricsTree_Indexes_Dateindex( + client + ) + self.decadeindex: MetricsTree_Indexes_Decadeindex = ( + MetricsTree_Indexes_Decadeindex(client) + ) + self.difficultyepoch: MetricsTree_Indexes_Difficultyepoch = ( + MetricsTree_Indexes_Difficultyepoch(client) + ) + self.halvingepoch: MetricsTree_Indexes_Halvingepoch = ( + MetricsTree_Indexes_Halvingepoch(client) + ) self.height: MetricsTree_Indexes_Height = MetricsTree_Indexes_Height(client) - self.monthindex: MetricsTree_Indexes_Monthindex = MetricsTree_Indexes_Monthindex(client) - self.quarterindex: MetricsTree_Indexes_Quarterindex = MetricsTree_Indexes_Quarterindex(client) - self.semesterindex: MetricsTree_Indexes_Semesterindex = MetricsTree_Indexes_Semesterindex(client) + self.monthindex: MetricsTree_Indexes_Monthindex = ( + MetricsTree_Indexes_Monthindex(client) + ) + self.quarterindex: MetricsTree_Indexes_Quarterindex = ( + MetricsTree_Indexes_Quarterindex(client) + ) + self.semesterindex: MetricsTree_Indexes_Semesterindex = ( + MetricsTree_Indexes_Semesterindex(client) + ) self.txindex: MetricsTree_Indexes_Txindex = MetricsTree_Indexes_Txindex(client) - self.txinindex: MetricsTree_Indexes_Txinindex = MetricsTree_Indexes_Txinindex(client) - self.txoutindex: MetricsTree_Indexes_Txoutindex = MetricsTree_Indexes_Txoutindex(client) - self.weekindex: MetricsTree_Indexes_Weekindex = MetricsTree_Indexes_Weekindex(client) - self.yearindex: MetricsTree_Indexes_Yearindex = MetricsTree_Indexes_Yearindex(client) + self.txinindex: MetricsTree_Indexes_Txinindex = MetricsTree_Indexes_Txinindex( + client + ) + self.txoutindex: MetricsTree_Indexes_Txoutindex = ( + MetricsTree_Indexes_Txoutindex(client) + ) + self.weekindex: MetricsTree_Indexes_Weekindex = MetricsTree_Indexes_Weekindex( + client + ) + self.yearindex: MetricsTree_Indexes_Yearindex = MetricsTree_Indexes_Yearindex( + client + ) + class MetricsTree_Inputs_Spent: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.txoutindex: MetricPattern12[TxOutIndex] = MetricPattern12(client, 'txoutindex') - self.value: MetricPattern12[Sats] = MetricPattern12(client, 'value') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.txoutindex: MetricPattern12[TxOutIndex] = MetricPattern12( + client, "txoutindex" + ) + self.value: MetricPattern12[Sats] = MetricPattern12(client, "value") + class MetricsTree_Inputs: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.count: CountPattern2[StoredU64] = CountPattern2(client, 'input_count') - self.first_txinindex: MetricPattern11[TxInIndex] = MetricPattern11(client, 'first_txinindex') - self.outpoint: MetricPattern12[OutPoint] = MetricPattern12(client, 'outpoint') - self.outputtype: MetricPattern12[OutputType] = MetricPattern12(client, 'outputtype') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.count: CountPattern2[StoredU64] = CountPattern2(client, "input_count") + self.first_txinindex: MetricPattern11[TxInIndex] = MetricPattern11( + client, "first_txinindex" + ) + self.outpoint: MetricPattern12[OutPoint] = MetricPattern12(client, "outpoint") + self.outputtype: MetricPattern12[OutputType] = MetricPattern12( + client, "outputtype" + ) self.spent: MetricsTree_Inputs_Spent = MetricsTree_Inputs_Spent(client) - self.txindex: MetricPattern12[TxIndex] = MetricPattern12(client, 'txindex') - self.typeindex: MetricPattern12[TypeIndex] = MetricPattern12(client, 'typeindex') - self.witness_size: MetricPattern12[StoredU32] = MetricPattern12(client, 'witness_size') + self.txindex: MetricPattern12[TxIndex] = MetricPattern12(client, "txindex") + self.typeindex: MetricPattern12[TypeIndex] = MetricPattern12( + client, "typeindex" + ) + self.witness_size: MetricPattern12[StoredU32] = MetricPattern12( + client, "witness_size" + ) + class MetricsTree_Market_Ath: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.days_since_price_ath: MetricPattern4[StoredU16] = MetricPattern4(client, 'days_since_price_ath') - self.max_days_between_price_aths: MetricPattern4[StoredU16] = MetricPattern4(client, 'max_days_between_price_aths') - self.max_years_between_price_aths: MetricPattern4[StoredF32] = MetricPattern4(client, 'max_years_between_price_aths') - self.price_ath: MetricPattern1[Dollars] = MetricPattern1(client, 'price_ath') - self.price_drawdown: MetricPattern3[StoredF32] = MetricPattern3(client, 'price_drawdown') - self.years_since_price_ath: MetricPattern4[StoredF32] = MetricPattern4(client, 'years_since_price_ath') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.days_since_price_ath: MetricPattern4[StoredU16] = MetricPattern4( + client, "days_since_price_ath" + ) + self.max_days_between_price_aths: MetricPattern4[StoredU16] = MetricPattern4( + client, "max_days_between_price_aths" + ) + self.max_years_between_price_aths: MetricPattern4[StoredF32] = MetricPattern4( + client, "max_years_between_price_aths" + ) + self.price_ath: MetricPattern1[Dollars] = MetricPattern1(client, "price_ath") + self.price_drawdown: MetricPattern3[StoredF32] = MetricPattern3( + client, "price_drawdown" + ) + self.years_since_price_ath: MetricPattern4[StoredF32] = MetricPattern4( + client, "years_since_price_ath" + ) + class MetricsTree_Market_Dca_ClassAveragePrice: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._2015: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2015_average_price') - self._2016: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2016_average_price') - self._2017: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2017_average_price') - self._2018: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2018_average_price') - self._2019: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2019_average_price') - self._2020: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2020_average_price') - self._2021: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2021_average_price') - self._2022: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2022_average_price') - self._2023: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2023_average_price') - self._2024: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2024_average_price') - self._2025: MetricPattern4[Dollars] = MetricPattern4(client, 'dca_class_2025_average_price') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._2015: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2015_average_price" + ) + self._2016: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2016_average_price" + ) + self._2017: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2017_average_price" + ) + self._2018: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2018_average_price" + ) + self._2019: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2019_average_price" + ) + self._2020: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2020_average_price" + ) + self._2021: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2021_average_price" + ) + self._2022: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2022_average_price" + ) + self._2023: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2023_average_price" + ) + self._2024: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2024_average_price" + ) + self._2025: MetricPattern4[Dollars] = MetricPattern4( + client, "dca_class_2025_average_price" + ) + class MetricsTree_Market_Dca_ClassReturns: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._2015: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2015_returns') - self._2016: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2016_returns') - self._2017: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2017_returns') - self._2018: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2018_returns') - self._2019: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2019_returns') - self._2020: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2020_returns') - self._2021: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2021_returns') - self._2022: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2022_returns') - self._2023: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2023_returns') - self._2024: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2024_returns') - self._2025: MetricPattern4[StoredF32] = MetricPattern4(client, 'dca_class_2025_returns') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._2015: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2015_returns" + ) + self._2016: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2016_returns" + ) + self._2017: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2017_returns" + ) + self._2018: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2018_returns" + ) + self._2019: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2019_returns" + ) + self._2020: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2020_returns" + ) + self._2021: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2021_returns" + ) + self._2022: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2022_returns" + ) + self._2023: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2023_returns" + ) + self._2024: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2024_returns" + ) + self._2025: MetricPattern4[StoredF32] = MetricPattern4( + client, "dca_class_2025_returns" + ) + class MetricsTree_Market_Dca_ClassStack: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._2015: _2015Pattern = _2015Pattern(client, 'dca_class_2015_stack') - self._2016: _2015Pattern = _2015Pattern(client, 'dca_class_2016_stack') - self._2017: _2015Pattern = _2015Pattern(client, 'dca_class_2017_stack') - self._2018: _2015Pattern = _2015Pattern(client, 'dca_class_2018_stack') - self._2019: _2015Pattern = _2015Pattern(client, 'dca_class_2019_stack') - self._2020: _2015Pattern = _2015Pattern(client, 'dca_class_2020_stack') - self._2021: _2015Pattern = _2015Pattern(client, 'dca_class_2021_stack') - self._2022: _2015Pattern = _2015Pattern(client, 'dca_class_2022_stack') - self._2023: _2015Pattern = _2015Pattern(client, 'dca_class_2023_stack') - self._2024: _2015Pattern = _2015Pattern(client, 'dca_class_2024_stack') - self._2025: _2015Pattern = _2015Pattern(client, 'dca_class_2025_stack') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._2015: _2015Pattern = _2015Pattern(client, "dca_class_2015_stack") + self._2016: _2015Pattern = _2015Pattern(client, "dca_class_2016_stack") + self._2017: _2015Pattern = _2015Pattern(client, "dca_class_2017_stack") + self._2018: _2015Pattern = _2015Pattern(client, "dca_class_2018_stack") + self._2019: _2015Pattern = _2015Pattern(client, "dca_class_2019_stack") + self._2020: _2015Pattern = _2015Pattern(client, "dca_class_2020_stack") + self._2021: _2015Pattern = _2015Pattern(client, "dca_class_2021_stack") + self._2022: _2015Pattern = _2015Pattern(client, "dca_class_2022_stack") + self._2023: _2015Pattern = _2015Pattern(client, "dca_class_2023_stack") + self._2024: _2015Pattern = _2015Pattern(client, "dca_class_2024_stack") + self._2025: _2015Pattern = _2015Pattern(client, "dca_class_2025_stack") + class MetricsTree_Market_Dca: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.class_average_price: MetricsTree_Market_Dca_ClassAveragePrice = MetricsTree_Market_Dca_ClassAveragePrice(client) - self.class_returns: MetricsTree_Market_Dca_ClassReturns = MetricsTree_Market_Dca_ClassReturns(client) - self.class_stack: MetricsTree_Market_Dca_ClassStack = MetricsTree_Market_Dca_ClassStack(client) - self.period_average_price: PeriodAveragePricePattern[Dollars] = PeriodAveragePricePattern(client, 'dca_average_price') - self.period_cagr: PeriodCagrPattern = PeriodCagrPattern(client, 'dca_cagr') - self.period_lump_sum_stack: PeriodLumpSumStackPattern = PeriodLumpSumStackPattern(client, 'lump_sum_stack') - self.period_returns: PeriodAveragePricePattern[StoredF32] = PeriodAveragePricePattern(client, 'dca_returns') - self.period_stack: PeriodLumpSumStackPattern = PeriodLumpSumStackPattern(client, 'dca_stack') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.class_average_price: MetricsTree_Market_Dca_ClassAveragePrice = ( + MetricsTree_Market_Dca_ClassAveragePrice(client) + ) + self.class_returns: MetricsTree_Market_Dca_ClassReturns = ( + MetricsTree_Market_Dca_ClassReturns(client) + ) + self.class_stack: MetricsTree_Market_Dca_ClassStack = ( + MetricsTree_Market_Dca_ClassStack(client) + ) + self.period_average_price: PeriodAveragePricePattern[Dollars] = ( + PeriodAveragePricePattern(client, "dca_average_price") + ) + self.period_cagr: PeriodCagrPattern = PeriodCagrPattern(client, "dca_cagr") + self.period_lump_sum_stack: PeriodLumpSumStackPattern = ( + PeriodLumpSumStackPattern(client, "lump_sum_stack") + ) + self.period_returns: PeriodAveragePricePattern[StoredF32] = ( + PeriodAveragePricePattern(client, "dca_returns") + ) + self.period_stack: PeriodLumpSumStackPattern = PeriodLumpSumStackPattern( + client, "dca_stack" + ) + class MetricsTree_Market_Indicators: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.gini: MetricPattern6[StoredF32] = MetricPattern6(client, 'gini') - self.macd_histogram: MetricPattern6[StoredF32] = MetricPattern6(client, 'macd_histogram') - self.macd_line: MetricPattern6[StoredF32] = MetricPattern6(client, 'macd_line') - self.macd_signal: MetricPattern6[StoredF32] = MetricPattern6(client, 'macd_signal') - self.nvt: MetricPattern4[StoredF32] = MetricPattern4(client, 'nvt') - self.pi_cycle: MetricPattern6[StoredF32] = MetricPattern6(client, 'pi_cycle') - self.puell_multiple: MetricPattern4[StoredF32] = MetricPattern4(client, 'puell_multiple') - self.rsi_14d: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_14d') - self.rsi_14d_max: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_14d_max') - self.rsi_14d_min: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_14d_min') - self.rsi_average_gain_14d: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_average_gain_14d') - self.rsi_average_loss_14d: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_average_loss_14d') - self.rsi_gains: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_gains') - self.rsi_losses: MetricPattern6[StoredF32] = MetricPattern6(client, 'rsi_losses') - self.stoch_d: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_d') - self.stoch_k: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_k') - self.stoch_rsi: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_rsi') - self.stoch_rsi_d: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_rsi_d') - self.stoch_rsi_k: MetricPattern6[StoredF32] = MetricPattern6(client, 'stoch_rsi_k') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.gini: MetricPattern6[StoredF32] = MetricPattern6(client, "gini") + self.macd_histogram: MetricPattern6[StoredF32] = MetricPattern6( + client, "macd_histogram" + ) + self.macd_line: MetricPattern6[StoredF32] = MetricPattern6(client, "macd_line") + self.macd_signal: MetricPattern6[StoredF32] = MetricPattern6( + client, "macd_signal" + ) + self.nvt: MetricPattern4[StoredF32] = MetricPattern4(client, "nvt") + self.pi_cycle: MetricPattern6[StoredF32] = MetricPattern6(client, "pi_cycle") + self.puell_multiple: MetricPattern4[StoredF32] = MetricPattern4( + client, "puell_multiple" + ) + self.rsi_14d: MetricPattern6[StoredF32] = MetricPattern6(client, "rsi_14d") + self.rsi_14d_max: MetricPattern6[StoredF32] = MetricPattern6( + client, "rsi_14d_max" + ) + self.rsi_14d_min: MetricPattern6[StoredF32] = MetricPattern6( + client, "rsi_14d_min" + ) + self.rsi_average_gain_14d: MetricPattern6[StoredF32] = MetricPattern6( + client, "rsi_average_gain_14d" + ) + self.rsi_average_loss_14d: MetricPattern6[StoredF32] = MetricPattern6( + client, "rsi_average_loss_14d" + ) + self.rsi_gains: MetricPattern6[StoredF32] = MetricPattern6(client, "rsi_gains") + self.rsi_losses: MetricPattern6[StoredF32] = MetricPattern6( + client, "rsi_losses" + ) + self.stoch_d: MetricPattern6[StoredF32] = MetricPattern6(client, "stoch_d") + self.stoch_k: MetricPattern6[StoredF32] = MetricPattern6(client, "stoch_k") + self.stoch_rsi: MetricPattern6[StoredF32] = MetricPattern6(client, "stoch_rsi") + self.stoch_rsi_d: MetricPattern6[StoredF32] = MetricPattern6( + client, "stoch_rsi_d" + ) + self.stoch_rsi_k: MetricPattern6[StoredF32] = MetricPattern6( + client, "stoch_rsi_k" + ) + class MetricsTree_Market_Lookback_PriceAgo: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._10y: MetricPattern4[Dollars] = MetricPattern4(client, 'price_10y_ago') - self._1d: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1d_ago') - self._1m: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1m_ago') - self._1w: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1w_ago') - self._1y: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1y_ago') - self._2y: MetricPattern4[Dollars] = MetricPattern4(client, 'price_2y_ago') - self._3m: MetricPattern4[Dollars] = MetricPattern4(client, 'price_3m_ago') - self._3y: MetricPattern4[Dollars] = MetricPattern4(client, 'price_3y_ago') - self._4y: MetricPattern4[Dollars] = MetricPattern4(client, 'price_4y_ago') - self._5y: MetricPattern4[Dollars] = MetricPattern4(client, 'price_5y_ago') - self._6m: MetricPattern4[Dollars] = MetricPattern4(client, 'price_6m_ago') - self._6y: MetricPattern4[Dollars] = MetricPattern4(client, 'price_6y_ago') - self._8y: MetricPattern4[Dollars] = MetricPattern4(client, 'price_8y_ago') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._10y: MetricPattern4[Dollars] = MetricPattern4(client, "price_10y_ago") + self._1d: MetricPattern4[Dollars] = MetricPattern4(client, "price_1d_ago") + self._1m: MetricPattern4[Dollars] = MetricPattern4(client, "price_1m_ago") + self._1w: MetricPattern4[Dollars] = MetricPattern4(client, "price_1w_ago") + self._1y: MetricPattern4[Dollars] = MetricPattern4(client, "price_1y_ago") + self._2y: MetricPattern4[Dollars] = MetricPattern4(client, "price_2y_ago") + self._3m: MetricPattern4[Dollars] = MetricPattern4(client, "price_3m_ago") + self._3y: MetricPattern4[Dollars] = MetricPattern4(client, "price_3y_ago") + self._4y: MetricPattern4[Dollars] = MetricPattern4(client, "price_4y_ago") + self._5y: MetricPattern4[Dollars] = MetricPattern4(client, "price_5y_ago") + self._6m: MetricPattern4[Dollars] = MetricPattern4(client, "price_6m_ago") + self._6y: MetricPattern4[Dollars] = MetricPattern4(client, "price_6y_ago") + self._8y: MetricPattern4[Dollars] = MetricPattern4(client, "price_8y_ago") + class MetricsTree_Market_Lookback: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.price_ago: MetricsTree_Market_Lookback_PriceAgo = MetricsTree_Market_Lookback_PriceAgo(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.price_ago: MetricsTree_Market_Lookback_PriceAgo = ( + MetricsTree_Market_Lookback_PriceAgo(client) + ) + class MetricsTree_Market_MovingAverage: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.price_111d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_111d_sma') - self.price_12d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_12d_ema') - self.price_13d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_13d_ema') - self.price_13d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_13d_sma') - self.price_144d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_144d_ema') - self.price_144d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_144d_sma') - self.price_1m_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_1m_ema') - self.price_1m_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_1m_sma') - self.price_1w_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_1w_ema') - self.price_1w_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_1w_sma') - self.price_1y_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_1y_ema') - self.price_1y_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_1y_sma') - self.price_200d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_200d_ema') - self.price_200d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_200d_sma') - self.price_200d_sma_x0_8: MetricPattern4[Dollars] = MetricPattern4(client, 'price_200d_sma_x0_8') - self.price_200d_sma_x2_4: MetricPattern4[Dollars] = MetricPattern4(client, 'price_200d_sma_x2_4') - self.price_200w_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_200w_ema') - self.price_200w_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_200w_sma') - self.price_21d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_21d_ema') - self.price_21d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_21d_sma') - self.price_26d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_26d_ema') - self.price_2y_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_2y_ema') - self.price_2y_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_2y_sma') - self.price_34d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_34d_ema') - self.price_34d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_34d_sma') - self.price_350d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_350d_sma') - self.price_350d_sma_x2: MetricPattern4[Dollars] = MetricPattern4(client, 'price_350d_sma_x2') - self.price_4y_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_4y_ema') - self.price_4y_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_4y_sma') - self.price_55d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_55d_ema') - self.price_55d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_55d_sma') - self.price_89d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_89d_ema') - self.price_89d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_89d_sma') - self.price_8d_ema: Price111dSmaPattern = Price111dSmaPattern(client, 'price_8d_ema') - self.price_8d_sma: Price111dSmaPattern = Price111dSmaPattern(client, 'price_8d_sma') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.price_111d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_111d_sma" + ) + self.price_12d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_12d_ema" + ) + self.price_13d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_13d_ema" + ) + self.price_13d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_13d_sma" + ) + self.price_144d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_144d_ema" + ) + self.price_144d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_144d_sma" + ) + self.price_1m_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_1m_ema" + ) + self.price_1m_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_1m_sma" + ) + self.price_1w_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_1w_ema" + ) + self.price_1w_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_1w_sma" + ) + self.price_1y_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_1y_ema" + ) + self.price_1y_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_1y_sma" + ) + self.price_200d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_200d_ema" + ) + self.price_200d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_200d_sma" + ) + self.price_200d_sma_x0_8: MetricPattern4[Dollars] = MetricPattern4( + client, "price_200d_sma_x0_8" + ) + self.price_200d_sma_x2_4: MetricPattern4[Dollars] = MetricPattern4( + client, "price_200d_sma_x2_4" + ) + self.price_200w_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_200w_ema" + ) + self.price_200w_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_200w_sma" + ) + self.price_21d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_21d_ema" + ) + self.price_21d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_21d_sma" + ) + self.price_26d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_26d_ema" + ) + self.price_2y_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_2y_ema" + ) + self.price_2y_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_2y_sma" + ) + self.price_34d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_34d_ema" + ) + self.price_34d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_34d_sma" + ) + self.price_350d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_350d_sma" + ) + self.price_350d_sma_x2: MetricPattern4[Dollars] = MetricPattern4( + client, "price_350d_sma_x2" + ) + self.price_4y_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_4y_ema" + ) + self.price_4y_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_4y_sma" + ) + self.price_55d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_55d_ema" + ) + self.price_55d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_55d_sma" + ) + self.price_89d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_89d_ema" + ) + self.price_89d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_89d_sma" + ) + self.price_8d_ema: Price111dSmaPattern = Price111dSmaPattern( + client, "price_8d_ema" + ) + self.price_8d_sma: Price111dSmaPattern = Price111dSmaPattern( + client, "price_8d_sma" + ) + class MetricsTree_Market_Range: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.price_1m_max: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1m_max') - self.price_1m_min: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1m_min') - self.price_1w_max: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1w_max') - self.price_1w_min: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1w_min') - self.price_1y_max: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1y_max') - self.price_1y_min: MetricPattern4[Dollars] = MetricPattern4(client, 'price_1y_min') - self.price_2w_choppiness_index: MetricPattern4[StoredF32] = MetricPattern4(client, 'price_2w_choppiness_index') - self.price_2w_max: MetricPattern4[Dollars] = MetricPattern4(client, 'price_2w_max') - self.price_2w_min: MetricPattern4[Dollars] = MetricPattern4(client, 'price_2w_min') - self.price_true_range: MetricPattern6[StoredF32] = MetricPattern6(client, 'price_true_range') - self.price_true_range_2w_sum: MetricPattern6[StoredF32] = MetricPattern6(client, 'price_true_range_2w_sum') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.price_1m_max: MetricPattern4[Dollars] = MetricPattern4( + client, "price_1m_max" + ) + self.price_1m_min: MetricPattern4[Dollars] = MetricPattern4( + client, "price_1m_min" + ) + self.price_1w_max: MetricPattern4[Dollars] = MetricPattern4( + client, "price_1w_max" + ) + self.price_1w_min: MetricPattern4[Dollars] = MetricPattern4( + client, "price_1w_min" + ) + self.price_1y_max: MetricPattern4[Dollars] = MetricPattern4( + client, "price_1y_max" + ) + self.price_1y_min: MetricPattern4[Dollars] = MetricPattern4( + client, "price_1y_min" + ) + self.price_2w_choppiness_index: MetricPattern4[StoredF32] = MetricPattern4( + client, "price_2w_choppiness_index" + ) + self.price_2w_max: MetricPattern4[Dollars] = MetricPattern4( + client, "price_2w_max" + ) + self.price_2w_min: MetricPattern4[Dollars] = MetricPattern4( + client, "price_2w_min" + ) + self.price_true_range: MetricPattern6[StoredF32] = MetricPattern6( + client, "price_true_range" + ) + self.price_true_range_2w_sum: MetricPattern6[StoredF32] = MetricPattern6( + client, "price_true_range_2w_sum" + ) + class MetricsTree_Market_Returns_PriceReturns: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._10y: MetricPattern4[StoredF32] = MetricPattern4(client, '10y_price_returns') - self._1d: MetricPattern4[StoredF32] = MetricPattern4(client, '1d_price_returns') - self._1m: MetricPattern4[StoredF32] = MetricPattern4(client, '1m_price_returns') - self._1w: MetricPattern4[StoredF32] = MetricPattern4(client, '1w_price_returns') - self._1y: MetricPattern4[StoredF32] = MetricPattern4(client, '1y_price_returns') - self._2y: MetricPattern4[StoredF32] = MetricPattern4(client, '2y_price_returns') - self._3m: MetricPattern4[StoredF32] = MetricPattern4(client, '3m_price_returns') - self._3y: MetricPattern4[StoredF32] = MetricPattern4(client, '3y_price_returns') - self._4y: MetricPattern4[StoredF32] = MetricPattern4(client, '4y_price_returns') - self._5y: MetricPattern4[StoredF32] = MetricPattern4(client, '5y_price_returns') - self._6m: MetricPattern4[StoredF32] = MetricPattern4(client, '6m_price_returns') - self._6y: MetricPattern4[StoredF32] = MetricPattern4(client, '6y_price_returns') - self._8y: MetricPattern4[StoredF32] = MetricPattern4(client, '8y_price_returns') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._10y: MetricPattern4[StoredF32] = MetricPattern4( + client, "10y_price_returns" + ) + self._1d: MetricPattern4[StoredF32] = MetricPattern4(client, "1d_price_returns") + self._1m: MetricPattern4[StoredF32] = MetricPattern4(client, "1m_price_returns") + self._1w: MetricPattern4[StoredF32] = MetricPattern4(client, "1w_price_returns") + self._1y: MetricPattern4[StoredF32] = MetricPattern4(client, "1y_price_returns") + self._2y: MetricPattern4[StoredF32] = MetricPattern4(client, "2y_price_returns") + self._3m: MetricPattern4[StoredF32] = MetricPattern4(client, "3m_price_returns") + self._3y: MetricPattern4[StoredF32] = MetricPattern4(client, "3y_price_returns") + self._4y: MetricPattern4[StoredF32] = MetricPattern4(client, "4y_price_returns") + self._5y: MetricPattern4[StoredF32] = MetricPattern4(client, "5y_price_returns") + self._6m: MetricPattern4[StoredF32] = MetricPattern4(client, "6m_price_returns") + self._6y: MetricPattern4[StoredF32] = MetricPattern4(client, "6y_price_returns") + self._8y: MetricPattern4[StoredF32] = MetricPattern4(client, "8y_price_returns") + class MetricsTree_Market_Returns: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self._1d_returns_1m_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern(client, '1d_returns_1m_sd') - self._1d_returns_1w_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern(client, '1d_returns_1w_sd') - self._1d_returns_1y_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern(client, '1d_returns_1y_sd') - self.cagr: PeriodCagrPattern = PeriodCagrPattern(client, 'cagr') - self.downside_1m_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern(client, 'downside_1m_sd') - self.downside_1w_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern(client, 'downside_1w_sd') - self.downside_1y_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern(client, 'downside_1y_sd') - self.downside_returns: MetricPattern6[StoredF32] = MetricPattern6(client, 'downside_returns') - self.price_returns: MetricsTree_Market_Returns_PriceReturns = MetricsTree_Market_Returns_PriceReturns(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self._1d_returns_1m_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern( + client, "1d_returns_1m_sd" + ) + self._1d_returns_1w_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern( + client, "1d_returns_1w_sd" + ) + self._1d_returns_1y_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern( + client, "1d_returns_1y_sd" + ) + self.cagr: PeriodCagrPattern = PeriodCagrPattern(client, "cagr") + self.downside_1m_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern( + client, "downside_1m_sd" + ) + self.downside_1w_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern( + client, "downside_1w_sd" + ) + self.downside_1y_sd: _1dReturns1mSdPattern = _1dReturns1mSdPattern( + client, "downside_1y_sd" + ) + self.downside_returns: MetricPattern6[StoredF32] = MetricPattern6( + client, "downside_returns" + ) + self.price_returns: MetricsTree_Market_Returns_PriceReturns = ( + MetricsTree_Market_Returns_PriceReturns(client) + ) + class MetricsTree_Market_Volatility: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.price_1m_volatility: MetricPattern4[StoredF32] = MetricPattern4(client, 'price_1m_volatility') - self.price_1w_volatility: MetricPattern4[StoredF32] = MetricPattern4(client, 'price_1w_volatility') - self.price_1y_volatility: MetricPattern4[StoredF32] = MetricPattern4(client, 'price_1y_volatility') - self.sharpe_1m: MetricPattern6[StoredF32] = MetricPattern6(client, 'sharpe_1m') - self.sharpe_1w: MetricPattern6[StoredF32] = MetricPattern6(client, 'sharpe_1w') - self.sharpe_1y: MetricPattern6[StoredF32] = MetricPattern6(client, 'sharpe_1y') - self.sortino_1m: MetricPattern6[StoredF32] = MetricPattern6(client, 'sortino_1m') - self.sortino_1w: MetricPattern6[StoredF32] = MetricPattern6(client, 'sortino_1w') - self.sortino_1y: MetricPattern6[StoredF32] = MetricPattern6(client, 'sortino_1y') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.price_1m_volatility: MetricPattern4[StoredF32] = MetricPattern4( + client, "price_1m_volatility" + ) + self.price_1w_volatility: MetricPattern4[StoredF32] = MetricPattern4( + client, "price_1w_volatility" + ) + self.price_1y_volatility: MetricPattern4[StoredF32] = MetricPattern4( + client, "price_1y_volatility" + ) + self.sharpe_1m: MetricPattern6[StoredF32] = MetricPattern6(client, "sharpe_1m") + self.sharpe_1w: MetricPattern6[StoredF32] = MetricPattern6(client, "sharpe_1w") + self.sharpe_1y: MetricPattern6[StoredF32] = MetricPattern6(client, "sharpe_1y") + self.sortino_1m: MetricPattern6[StoredF32] = MetricPattern6( + client, "sortino_1m" + ) + self.sortino_1w: MetricPattern6[StoredF32] = MetricPattern6( + client, "sortino_1w" + ) + self.sortino_1y: MetricPattern6[StoredF32] = MetricPattern6( + client, "sortino_1y" + ) + class MetricsTree_Market: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): + + def __init__(self, client: BrkClientBase, base_path: str = ""): self.ath: MetricsTree_Market_Ath = MetricsTree_Market_Ath(client) self.dca: MetricsTree_Market_Dca = MetricsTree_Market_Dca(client) - self.indicators: MetricsTree_Market_Indicators = MetricsTree_Market_Indicators(client) + self.indicators: MetricsTree_Market_Indicators = MetricsTree_Market_Indicators( + client + ) self.lookback: MetricsTree_Market_Lookback = MetricsTree_Market_Lookback(client) - self.moving_average: MetricsTree_Market_MovingAverage = MetricsTree_Market_MovingAverage(client) + self.moving_average: MetricsTree_Market_MovingAverage = ( + MetricsTree_Market_MovingAverage(client) + ) self.range: MetricsTree_Market_Range = MetricsTree_Market_Range(client) self.returns: MetricsTree_Market_Returns = MetricsTree_Market_Returns(client) - self.volatility: MetricsTree_Market_Volatility = MetricsTree_Market_Volatility(client) + self.volatility: MetricsTree_Market_Volatility = MetricsTree_Market_Volatility( + client + ) + class MetricsTree_Outputs_Count: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.total_count: CountPattern2[StoredU64] = CountPattern2(client, 'output_count') - self.utxo_count: MetricPattern1[StoredU64] = MetricPattern1(client, 'exact_utxo_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.total_count: CountPattern2[StoredU64] = CountPattern2( + client, "output_count" + ) + self.utxo_count: MetricPattern1[StoredU64] = MetricPattern1( + client, "exact_utxo_count" + ) + class MetricsTree_Outputs_Spent: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.txinindex: MetricPattern15[TxInIndex] = MetricPattern15(client, 'txinindex') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.txinindex: MetricPattern15[TxInIndex] = MetricPattern15( + client, "txinindex" + ) + class MetricsTree_Outputs: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): + + def __init__(self, client: BrkClientBase, base_path: str = ""): self.count: MetricsTree_Outputs_Count = MetricsTree_Outputs_Count(client) - self.first_txoutindex: MetricPattern11[TxOutIndex] = MetricPattern11(client, 'first_txoutindex') - self.outputtype: MetricPattern15[OutputType] = MetricPattern15(client, 'outputtype') + self.first_txoutindex: MetricPattern11[TxOutIndex] = MetricPattern11( + client, "first_txoutindex" + ) + self.outputtype: MetricPattern15[OutputType] = MetricPattern15( + client, "outputtype" + ) self.spent: MetricsTree_Outputs_Spent = MetricsTree_Outputs_Spent(client) - self.txindex: MetricPattern15[TxIndex] = MetricPattern15(client, 'txindex') - self.typeindex: MetricPattern15[TypeIndex] = MetricPattern15(client, 'typeindex') - self.value: MetricPattern15[Sats] = MetricPattern15(client, 'value') + self.txindex: MetricPattern15[TxIndex] = MetricPattern15(client, "txindex") + self.typeindex: MetricPattern15[TypeIndex] = MetricPattern15( + client, "typeindex" + ) + self.value: MetricPattern15[Sats] = MetricPattern15(client, "value") + class MetricsTree_Pools_Vecs: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.aaopool: AaopoolPattern = AaopoolPattern(client, 'aaopool') - self.antpool: AaopoolPattern = AaopoolPattern(client, 'antpool') - self.arkpool: AaopoolPattern = AaopoolPattern(client, 'arkpool') - self.asicminer: AaopoolPattern = AaopoolPattern(client, 'asicminer') - self.axbt: AaopoolPattern = AaopoolPattern(client, 'axbt') - self.batpool: AaopoolPattern = AaopoolPattern(client, 'batpool') - self.bcmonster: AaopoolPattern = AaopoolPattern(client, 'bcmonster') - self.bcpoolio: AaopoolPattern = AaopoolPattern(client, 'bcpoolio') - self.binancepool: AaopoolPattern = AaopoolPattern(client, 'binancepool') - self.bitalo: AaopoolPattern = AaopoolPattern(client, 'bitalo') - self.bitclub: AaopoolPattern = AaopoolPattern(client, 'bitclub') - self.bitcoinaffiliatenetwork: AaopoolPattern = AaopoolPattern(client, 'bitcoinaffiliatenetwork') - self.bitcoincom: AaopoolPattern = AaopoolPattern(client, 'bitcoincom') - self.bitcoinindia: AaopoolPattern = AaopoolPattern(client, 'bitcoinindia') - self.bitcoinrussia: AaopoolPattern = AaopoolPattern(client, 'bitcoinrussia') - self.bitcoinukraine: AaopoolPattern = AaopoolPattern(client, 'bitcoinukraine') - self.bitfarms: AaopoolPattern = AaopoolPattern(client, 'bitfarms') - self.bitfufupool: AaopoolPattern = AaopoolPattern(client, 'bitfufupool') - self.bitfury: AaopoolPattern = AaopoolPattern(client, 'bitfury') - self.bitminter: AaopoolPattern = AaopoolPattern(client, 'bitminter') - self.bitparking: AaopoolPattern = AaopoolPattern(client, 'bitparking') - self.bitsolo: AaopoolPattern = AaopoolPattern(client, 'bitsolo') - self.bixin: AaopoolPattern = AaopoolPattern(client, 'bixin') - self.blockfills: AaopoolPattern = AaopoolPattern(client, 'blockfills') - self.braiinspool: AaopoolPattern = AaopoolPattern(client, 'braiinspool') - self.bravomining: AaopoolPattern = AaopoolPattern(client, 'bravomining') - self.btcc: AaopoolPattern = AaopoolPattern(client, 'btcc') - self.btccom: AaopoolPattern = AaopoolPattern(client, 'btccom') - self.btcdig: AaopoolPattern = AaopoolPattern(client, 'btcdig') - self.btcguild: AaopoolPattern = AaopoolPattern(client, 'btcguild') - self.btclab: AaopoolPattern = AaopoolPattern(client, 'btclab') - self.btcmp: AaopoolPattern = AaopoolPattern(client, 'btcmp') - self.btcnuggets: AaopoolPattern = AaopoolPattern(client, 'btcnuggets') - self.btcpoolparty: AaopoolPattern = AaopoolPattern(client, 'btcpoolparty') - self.btcserv: AaopoolPattern = AaopoolPattern(client, 'btcserv') - self.btctop: AaopoolPattern = AaopoolPattern(client, 'btctop') - self.btpool: AaopoolPattern = AaopoolPattern(client, 'btpool') - self.bwpool: AaopoolPattern = AaopoolPattern(client, 'bwpool') - self.bytepool: AaopoolPattern = AaopoolPattern(client, 'bytepool') - self.canoe: AaopoolPattern = AaopoolPattern(client, 'canoe') - self.canoepool: AaopoolPattern = AaopoolPattern(client, 'canoepool') - self.carbonnegative: AaopoolPattern = AaopoolPattern(client, 'carbonnegative') - self.ckpool: AaopoolPattern = AaopoolPattern(client, 'ckpool') - self.cloudhashing: AaopoolPattern = AaopoolPattern(client, 'cloudhashing') - self.coinlab: AaopoolPattern = AaopoolPattern(client, 'coinlab') - self.cointerra: AaopoolPattern = AaopoolPattern(client, 'cointerra') - self.connectbtc: AaopoolPattern = AaopoolPattern(client, 'connectbtc') - self.dcex: AaopoolPattern = AaopoolPattern(client, 'dcex') - self.dcexploration: AaopoolPattern = AaopoolPattern(client, 'dcexploration') - self.digitalbtc: AaopoolPattern = AaopoolPattern(client, 'digitalbtc') - self.digitalxmintsy: AaopoolPattern = AaopoolPattern(client, 'digitalxmintsy') - self.dpool: AaopoolPattern = AaopoolPattern(client, 'dpool') - self.eclipsemc: AaopoolPattern = AaopoolPattern(client, 'eclipsemc') - self.eightbaochi: AaopoolPattern = AaopoolPattern(client, 'eightbaochi') - self.ekanembtc: AaopoolPattern = AaopoolPattern(client, 'ekanembtc') - self.eligius: AaopoolPattern = AaopoolPattern(client, 'eligius') - self.emcdpool: AaopoolPattern = AaopoolPattern(client, 'emcdpool') - self.entrustcharitypool: AaopoolPattern = AaopoolPattern(client, 'entrustcharitypool') - self.eobot: AaopoolPattern = AaopoolPattern(client, 'eobot') - self.exxbw: AaopoolPattern = AaopoolPattern(client, 'exxbw') - self.f2pool: AaopoolPattern = AaopoolPattern(client, 'f2pool') - self.fiftyeightcoin: AaopoolPattern = AaopoolPattern(client, 'fiftyeightcoin') - self.foundryusa: AaopoolPattern = AaopoolPattern(client, 'foundryusa') - self.futurebitapollosolo: AaopoolPattern = AaopoolPattern(client, 'futurebitapollosolo') - self.gbminers: AaopoolPattern = AaopoolPattern(client, 'gbminers') - self.ghashio: AaopoolPattern = AaopoolPattern(client, 'ghashio') - self.givemecoins: AaopoolPattern = AaopoolPattern(client, 'givemecoins') - self.gogreenlight: AaopoolPattern = AaopoolPattern(client, 'gogreenlight') - self.haominer: AaopoolPattern = AaopoolPattern(client, 'haominer') - self.haozhuzhu: AaopoolPattern = AaopoolPattern(client, 'haozhuzhu') - self.hashbx: AaopoolPattern = AaopoolPattern(client, 'hashbx') - self.hashpool: AaopoolPattern = AaopoolPattern(client, 'hashpool') - self.helix: AaopoolPattern = AaopoolPattern(client, 'helix') - self.hhtt: AaopoolPattern = AaopoolPattern(client, 'hhtt') - self.hotpool: AaopoolPattern = AaopoolPattern(client, 'hotpool') - self.hummerpool: AaopoolPattern = AaopoolPattern(client, 'hummerpool') - self.huobipool: AaopoolPattern = AaopoolPattern(client, 'huobipool') - self.innopolistech: AaopoolPattern = AaopoolPattern(client, 'innopolistech') - self.kanopool: AaopoolPattern = AaopoolPattern(client, 'kanopool') - self.kncminer: AaopoolPattern = AaopoolPattern(client, 'kncminer') - self.kucoinpool: AaopoolPattern = AaopoolPattern(client, 'kucoinpool') - self.lubiancom: AaopoolPattern = AaopoolPattern(client, 'lubiancom') - self.luckypool: AaopoolPattern = AaopoolPattern(client, 'luckypool') - self.luxor: AaopoolPattern = AaopoolPattern(client, 'luxor') - self.marapool: AaopoolPattern = AaopoolPattern(client, 'marapool') - self.maxbtc: AaopoolPattern = AaopoolPattern(client, 'maxbtc') - self.maxipool: AaopoolPattern = AaopoolPattern(client, 'maxipool') - self.megabigpower: AaopoolPattern = AaopoolPattern(client, 'megabigpower') - self.minerium: AaopoolPattern = AaopoolPattern(client, 'minerium') - self.miningcity: AaopoolPattern = AaopoolPattern(client, 'miningcity') - self.miningdutch: AaopoolPattern = AaopoolPattern(client, 'miningdutch') - self.miningkings: AaopoolPattern = AaopoolPattern(client, 'miningkings') - self.miningsquared: AaopoolPattern = AaopoolPattern(client, 'miningsquared') - self.mmpool: AaopoolPattern = AaopoolPattern(client, 'mmpool') - self.mtred: AaopoolPattern = AaopoolPattern(client, 'mtred') - self.multicoinco: AaopoolPattern = AaopoolPattern(client, 'multicoinco') - self.multipool: AaopoolPattern = AaopoolPattern(client, 'multipool') - self.mybtccoinpool: AaopoolPattern = AaopoolPattern(client, 'mybtccoinpool') - self.neopool: AaopoolPattern = AaopoolPattern(client, 'neopool') - self.nexious: AaopoolPattern = AaopoolPattern(client, 'nexious') - self.nicehash: AaopoolPattern = AaopoolPattern(client, 'nicehash') - self.nmcbit: AaopoolPattern = AaopoolPattern(client, 'nmcbit') - self.novablock: AaopoolPattern = AaopoolPattern(client, 'novablock') - self.ocean: AaopoolPattern = AaopoolPattern(client, 'ocean') - self.okexpool: AaopoolPattern = AaopoolPattern(client, 'okexpool') - self.okkong: AaopoolPattern = AaopoolPattern(client, 'okkong') - self.okminer: AaopoolPattern = AaopoolPattern(client, 'okminer') - self.okpooltop: AaopoolPattern = AaopoolPattern(client, 'okpooltop') - self.onehash: AaopoolPattern = AaopoolPattern(client, 'onehash') - self.onem1x: AaopoolPattern = AaopoolPattern(client, 'onem1x') - self.onethash: AaopoolPattern = AaopoolPattern(client, 'onethash') - self.ozcoin: AaopoolPattern = AaopoolPattern(client, 'ozcoin') - self.parasite: AaopoolPattern = AaopoolPattern(client, 'parasite') - self.patels: AaopoolPattern = AaopoolPattern(client, 'patels') - self.pegapool: AaopoolPattern = AaopoolPattern(client, 'pegapool') - self.phashio: AaopoolPattern = AaopoolPattern(client, 'phashio') - self.phoenix: AaopoolPattern = AaopoolPattern(client, 'phoenix') - self.polmine: AaopoolPattern = AaopoolPattern(client, 'polmine') - self.pool175btc: AaopoolPattern = AaopoolPattern(client, 'pool175btc') - self.pool50btc: AaopoolPattern = AaopoolPattern(client, 'pool50btc') - self.poolin: AaopoolPattern = AaopoolPattern(client, 'poolin') - self.portlandhodl: AaopoolPattern = AaopoolPattern(client, 'portlandhodl') - self.publicpool: AaopoolPattern = AaopoolPattern(client, 'publicpool') - self.purebtccom: AaopoolPattern = AaopoolPattern(client, 'purebtccom') - self.rawpool: AaopoolPattern = AaopoolPattern(client, 'rawpool') - self.rigpool: AaopoolPattern = AaopoolPattern(client, 'rigpool') - self.sbicrypto: AaopoolPattern = AaopoolPattern(client, 'sbicrypto') - self.secpool: AaopoolPattern = AaopoolPattern(client, 'secpool') - self.secretsuperstar: AaopoolPattern = AaopoolPattern(client, 'secretsuperstar') - self.sevenpool: AaopoolPattern = AaopoolPattern(client, 'sevenpool') - self.shawnp0wers: AaopoolPattern = AaopoolPattern(client, 'shawnp0wers') - self.sigmapoolcom: AaopoolPattern = AaopoolPattern(client, 'sigmapoolcom') - self.simplecoinus: AaopoolPattern = AaopoolPattern(client, 'simplecoinus') - self.solock: AaopoolPattern = AaopoolPattern(client, 'solock') - self.spiderpool: AaopoolPattern = AaopoolPattern(client, 'spiderpool') - self.stminingcorp: AaopoolPattern = AaopoolPattern(client, 'stminingcorp') - self.tangpool: AaopoolPattern = AaopoolPattern(client, 'tangpool') - self.tatmaspool: AaopoolPattern = AaopoolPattern(client, 'tatmaspool') - self.tbdice: AaopoolPattern = AaopoolPattern(client, 'tbdice') - self.telco214: AaopoolPattern = AaopoolPattern(client, 'telco214') - self.terrapool: AaopoolPattern = AaopoolPattern(client, 'terrapool') - self.tiger: AaopoolPattern = AaopoolPattern(client, 'tiger') - self.tigerpoolnet: AaopoolPattern = AaopoolPattern(client, 'tigerpoolnet') - self.titan: AaopoolPattern = AaopoolPattern(client, 'titan') - self.transactioncoinmining: AaopoolPattern = AaopoolPattern(client, 'transactioncoinmining') - self.trickysbtcpool: AaopoolPattern = AaopoolPattern(client, 'trickysbtcpool') - self.triplemining: AaopoolPattern = AaopoolPattern(client, 'triplemining') - self.twentyoneinc: AaopoolPattern = AaopoolPattern(client, 'twentyoneinc') - self.ultimuspool: AaopoolPattern = AaopoolPattern(client, 'ultimuspool') - self.unknown: AaopoolPattern = AaopoolPattern(client, 'unknown') - self.unomp: AaopoolPattern = AaopoolPattern(client, 'unomp') - self.viabtc: AaopoolPattern = AaopoolPattern(client, 'viabtc') - self.waterhole: AaopoolPattern = AaopoolPattern(client, 'waterhole') - self.wayicn: AaopoolPattern = AaopoolPattern(client, 'wayicn') - self.whitepool: AaopoolPattern = AaopoolPattern(client, 'whitepool') - self.wk057: AaopoolPattern = AaopoolPattern(client, 'wk057') - self.yourbtcnet: AaopoolPattern = AaopoolPattern(client, 'yourbtcnet') - self.zulupool: AaopoolPattern = AaopoolPattern(client, 'zulupool') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.aaopool: AaopoolPattern = AaopoolPattern(client, "aaopool") + self.antpool: AaopoolPattern = AaopoolPattern(client, "antpool") + self.arkpool: AaopoolPattern = AaopoolPattern(client, "arkpool") + self.asicminer: AaopoolPattern = AaopoolPattern(client, "asicminer") + self.axbt: AaopoolPattern = AaopoolPattern(client, "axbt") + self.batpool: AaopoolPattern = AaopoolPattern(client, "batpool") + self.bcmonster: AaopoolPattern = AaopoolPattern(client, "bcmonster") + self.bcpoolio: AaopoolPattern = AaopoolPattern(client, "bcpoolio") + self.binancepool: AaopoolPattern = AaopoolPattern(client, "binancepool") + self.bitalo: AaopoolPattern = AaopoolPattern(client, "bitalo") + self.bitclub: AaopoolPattern = AaopoolPattern(client, "bitclub") + self.bitcoinaffiliatenetwork: AaopoolPattern = AaopoolPattern( + client, "bitcoinaffiliatenetwork" + ) + self.bitcoincom: AaopoolPattern = AaopoolPattern(client, "bitcoincom") + self.bitcoinindia: AaopoolPattern = AaopoolPattern(client, "bitcoinindia") + self.bitcoinrussia: AaopoolPattern = AaopoolPattern(client, "bitcoinrussia") + self.bitcoinukraine: AaopoolPattern = AaopoolPattern(client, "bitcoinukraine") + self.bitfarms: AaopoolPattern = AaopoolPattern(client, "bitfarms") + self.bitfufupool: AaopoolPattern = AaopoolPattern(client, "bitfufupool") + self.bitfury: AaopoolPattern = AaopoolPattern(client, "bitfury") + self.bitminter: AaopoolPattern = AaopoolPattern(client, "bitminter") + self.bitparking: AaopoolPattern = AaopoolPattern(client, "bitparking") + self.bitsolo: AaopoolPattern = AaopoolPattern(client, "bitsolo") + self.bixin: AaopoolPattern = AaopoolPattern(client, "bixin") + self.blockfills: AaopoolPattern = AaopoolPattern(client, "blockfills") + self.braiinspool: AaopoolPattern = AaopoolPattern(client, "braiinspool") + self.bravomining: AaopoolPattern = AaopoolPattern(client, "bravomining") + self.btcc: AaopoolPattern = AaopoolPattern(client, "btcc") + self.btccom: AaopoolPattern = AaopoolPattern(client, "btccom") + self.btcdig: AaopoolPattern = AaopoolPattern(client, "btcdig") + self.btcguild: AaopoolPattern = AaopoolPattern(client, "btcguild") + self.btclab: AaopoolPattern = AaopoolPattern(client, "btclab") + self.btcmp: AaopoolPattern = AaopoolPattern(client, "btcmp") + self.btcnuggets: AaopoolPattern = AaopoolPattern(client, "btcnuggets") + self.btcpoolparty: AaopoolPattern = AaopoolPattern(client, "btcpoolparty") + self.btcserv: AaopoolPattern = AaopoolPattern(client, "btcserv") + self.btctop: AaopoolPattern = AaopoolPattern(client, "btctop") + self.btpool: AaopoolPattern = AaopoolPattern(client, "btpool") + self.bwpool: AaopoolPattern = AaopoolPattern(client, "bwpool") + self.bytepool: AaopoolPattern = AaopoolPattern(client, "bytepool") + self.canoe: AaopoolPattern = AaopoolPattern(client, "canoe") + self.canoepool: AaopoolPattern = AaopoolPattern(client, "canoepool") + self.carbonnegative: AaopoolPattern = AaopoolPattern(client, "carbonnegative") + self.ckpool: AaopoolPattern = AaopoolPattern(client, "ckpool") + self.cloudhashing: AaopoolPattern = AaopoolPattern(client, "cloudhashing") + self.coinlab: AaopoolPattern = AaopoolPattern(client, "coinlab") + self.cointerra: AaopoolPattern = AaopoolPattern(client, "cointerra") + self.connectbtc: AaopoolPattern = AaopoolPattern(client, "connectbtc") + self.dcex: AaopoolPattern = AaopoolPattern(client, "dcex") + self.dcexploration: AaopoolPattern = AaopoolPattern(client, "dcexploration") + self.digitalbtc: AaopoolPattern = AaopoolPattern(client, "digitalbtc") + self.digitalxmintsy: AaopoolPattern = AaopoolPattern(client, "digitalxmintsy") + self.dpool: AaopoolPattern = AaopoolPattern(client, "dpool") + self.eclipsemc: AaopoolPattern = AaopoolPattern(client, "eclipsemc") + self.eightbaochi: AaopoolPattern = AaopoolPattern(client, "eightbaochi") + self.ekanembtc: AaopoolPattern = AaopoolPattern(client, "ekanembtc") + self.eligius: AaopoolPattern = AaopoolPattern(client, "eligius") + self.emcdpool: AaopoolPattern = AaopoolPattern(client, "emcdpool") + self.entrustcharitypool: AaopoolPattern = AaopoolPattern( + client, "entrustcharitypool" + ) + self.eobot: AaopoolPattern = AaopoolPattern(client, "eobot") + self.exxbw: AaopoolPattern = AaopoolPattern(client, "exxbw") + self.f2pool: AaopoolPattern = AaopoolPattern(client, "f2pool") + self.fiftyeightcoin: AaopoolPattern = AaopoolPattern(client, "fiftyeightcoin") + self.foundryusa: AaopoolPattern = AaopoolPattern(client, "foundryusa") + self.futurebitapollosolo: AaopoolPattern = AaopoolPattern( + client, "futurebitapollosolo" + ) + self.gbminers: AaopoolPattern = AaopoolPattern(client, "gbminers") + self.ghashio: AaopoolPattern = AaopoolPattern(client, "ghashio") + self.givemecoins: AaopoolPattern = AaopoolPattern(client, "givemecoins") + self.gogreenlight: AaopoolPattern = AaopoolPattern(client, "gogreenlight") + self.haominer: AaopoolPattern = AaopoolPattern(client, "haominer") + self.haozhuzhu: AaopoolPattern = AaopoolPattern(client, "haozhuzhu") + self.hashbx: AaopoolPattern = AaopoolPattern(client, "hashbx") + self.hashpool: AaopoolPattern = AaopoolPattern(client, "hashpool") + self.helix: AaopoolPattern = AaopoolPattern(client, "helix") + self.hhtt: AaopoolPattern = AaopoolPattern(client, "hhtt") + self.hotpool: AaopoolPattern = AaopoolPattern(client, "hotpool") + self.hummerpool: AaopoolPattern = AaopoolPattern(client, "hummerpool") + self.huobipool: AaopoolPattern = AaopoolPattern(client, "huobipool") + self.innopolistech: AaopoolPattern = AaopoolPattern(client, "innopolistech") + self.kanopool: AaopoolPattern = AaopoolPattern(client, "kanopool") + self.kncminer: AaopoolPattern = AaopoolPattern(client, "kncminer") + self.kucoinpool: AaopoolPattern = AaopoolPattern(client, "kucoinpool") + self.lubiancom: AaopoolPattern = AaopoolPattern(client, "lubiancom") + self.luckypool: AaopoolPattern = AaopoolPattern(client, "luckypool") + self.luxor: AaopoolPattern = AaopoolPattern(client, "luxor") + self.marapool: AaopoolPattern = AaopoolPattern(client, "marapool") + self.maxbtc: AaopoolPattern = AaopoolPattern(client, "maxbtc") + self.maxipool: AaopoolPattern = AaopoolPattern(client, "maxipool") + self.megabigpower: AaopoolPattern = AaopoolPattern(client, "megabigpower") + self.minerium: AaopoolPattern = AaopoolPattern(client, "minerium") + self.miningcity: AaopoolPattern = AaopoolPattern(client, "miningcity") + self.miningdutch: AaopoolPattern = AaopoolPattern(client, "miningdutch") + self.miningkings: AaopoolPattern = AaopoolPattern(client, "miningkings") + self.miningsquared: AaopoolPattern = AaopoolPattern(client, "miningsquared") + self.mmpool: AaopoolPattern = AaopoolPattern(client, "mmpool") + self.mtred: AaopoolPattern = AaopoolPattern(client, "mtred") + self.multicoinco: AaopoolPattern = AaopoolPattern(client, "multicoinco") + self.multipool: AaopoolPattern = AaopoolPattern(client, "multipool") + self.mybtccoinpool: AaopoolPattern = AaopoolPattern(client, "mybtccoinpool") + self.neopool: AaopoolPattern = AaopoolPattern(client, "neopool") + self.nexious: AaopoolPattern = AaopoolPattern(client, "nexious") + self.nicehash: AaopoolPattern = AaopoolPattern(client, "nicehash") + self.nmcbit: AaopoolPattern = AaopoolPattern(client, "nmcbit") + self.novablock: AaopoolPattern = AaopoolPattern(client, "novablock") + self.ocean: AaopoolPattern = AaopoolPattern(client, "ocean") + self.okexpool: AaopoolPattern = AaopoolPattern(client, "okexpool") + self.okkong: AaopoolPattern = AaopoolPattern(client, "okkong") + self.okminer: AaopoolPattern = AaopoolPattern(client, "okminer") + self.okpooltop: AaopoolPattern = AaopoolPattern(client, "okpooltop") + self.onehash: AaopoolPattern = AaopoolPattern(client, "onehash") + self.onem1x: AaopoolPattern = AaopoolPattern(client, "onem1x") + self.onethash: AaopoolPattern = AaopoolPattern(client, "onethash") + self.ozcoin: AaopoolPattern = AaopoolPattern(client, "ozcoin") + self.parasite: AaopoolPattern = AaopoolPattern(client, "parasite") + self.patels: AaopoolPattern = AaopoolPattern(client, "patels") + self.pegapool: AaopoolPattern = AaopoolPattern(client, "pegapool") + self.phashio: AaopoolPattern = AaopoolPattern(client, "phashio") + self.phoenix: AaopoolPattern = AaopoolPattern(client, "phoenix") + self.polmine: AaopoolPattern = AaopoolPattern(client, "polmine") + self.pool175btc: AaopoolPattern = AaopoolPattern(client, "pool175btc") + self.pool50btc: AaopoolPattern = AaopoolPattern(client, "pool50btc") + self.poolin: AaopoolPattern = AaopoolPattern(client, "poolin") + self.portlandhodl: AaopoolPattern = AaopoolPattern(client, "portlandhodl") + self.publicpool: AaopoolPattern = AaopoolPattern(client, "publicpool") + self.purebtccom: AaopoolPattern = AaopoolPattern(client, "purebtccom") + self.rawpool: AaopoolPattern = AaopoolPattern(client, "rawpool") + self.rigpool: AaopoolPattern = AaopoolPattern(client, "rigpool") + self.sbicrypto: AaopoolPattern = AaopoolPattern(client, "sbicrypto") + self.secpool: AaopoolPattern = AaopoolPattern(client, "secpool") + self.secretsuperstar: AaopoolPattern = AaopoolPattern(client, "secretsuperstar") + self.sevenpool: AaopoolPattern = AaopoolPattern(client, "sevenpool") + self.shawnp0wers: AaopoolPattern = AaopoolPattern(client, "shawnp0wers") + self.sigmapoolcom: AaopoolPattern = AaopoolPattern(client, "sigmapoolcom") + self.simplecoinus: AaopoolPattern = AaopoolPattern(client, "simplecoinus") + self.solock: AaopoolPattern = AaopoolPattern(client, "solock") + self.spiderpool: AaopoolPattern = AaopoolPattern(client, "spiderpool") + self.stminingcorp: AaopoolPattern = AaopoolPattern(client, "stminingcorp") + self.tangpool: AaopoolPattern = AaopoolPattern(client, "tangpool") + self.tatmaspool: AaopoolPattern = AaopoolPattern(client, "tatmaspool") + self.tbdice: AaopoolPattern = AaopoolPattern(client, "tbdice") + self.telco214: AaopoolPattern = AaopoolPattern(client, "telco214") + self.terrapool: AaopoolPattern = AaopoolPattern(client, "terrapool") + self.tiger: AaopoolPattern = AaopoolPattern(client, "tiger") + self.tigerpoolnet: AaopoolPattern = AaopoolPattern(client, "tigerpoolnet") + self.titan: AaopoolPattern = AaopoolPattern(client, "titan") + self.transactioncoinmining: AaopoolPattern = AaopoolPattern( + client, "transactioncoinmining" + ) + self.trickysbtcpool: AaopoolPattern = AaopoolPattern(client, "trickysbtcpool") + self.triplemining: AaopoolPattern = AaopoolPattern(client, "triplemining") + self.twentyoneinc: AaopoolPattern = AaopoolPattern(client, "twentyoneinc") + self.ultimuspool: AaopoolPattern = AaopoolPattern(client, "ultimuspool") + self.unknown: AaopoolPattern = AaopoolPattern(client, "unknown") + self.unomp: AaopoolPattern = AaopoolPattern(client, "unomp") + self.viabtc: AaopoolPattern = AaopoolPattern(client, "viabtc") + self.waterhole: AaopoolPattern = AaopoolPattern(client, "waterhole") + self.wayicn: AaopoolPattern = AaopoolPattern(client, "wayicn") + self.whitepool: AaopoolPattern = AaopoolPattern(client, "whitepool") + self.wk057: AaopoolPattern = AaopoolPattern(client, "wk057") + self.yourbtcnet: AaopoolPattern = AaopoolPattern(client, "yourbtcnet") + self.zulupool: AaopoolPattern = AaopoolPattern(client, "zulupool") + class MetricsTree_Pools: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.height_to_pool: MetricPattern11[PoolSlug] = MetricPattern11(client, 'pool') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.height_to_pool: MetricPattern11[PoolSlug] = MetricPattern11(client, "pool") self.vecs: MetricsTree_Pools_Vecs = MetricsTree_Pools_Vecs(client) + class MetricsTree_Positions: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.block_position: MetricPattern11[BlkPosition] = MetricPattern11(client, 'position') - self.tx_position: MetricPattern27[BlkPosition] = MetricPattern27(client, 'position') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.block_position: MetricPattern11[BlkPosition] = MetricPattern11( + client, "position" + ) + self.tx_position: MetricPattern27[BlkPosition] = MetricPattern27( + client, "position" + ) + class MetricsTree_Price_Cents_Split: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.close: MetricPattern5[Cents] = MetricPattern5(client, 'price_close_cents') - self.high: MetricPattern5[Cents] = MetricPattern5(client, 'price_high_cents') - self.low: MetricPattern5[Cents] = MetricPattern5(client, 'price_low_cents') - self.open: MetricPattern5[Cents] = MetricPattern5(client, 'price_open_cents') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.close: MetricPattern5[Cents] = MetricPattern5(client, "price_close_cents") + self.high: MetricPattern5[Cents] = MetricPattern5(client, "price_high_cents") + self.low: MetricPattern5[Cents] = MetricPattern5(client, "price_low_cents") + self.open: MetricPattern5[Cents] = MetricPattern5(client, "price_open_cents") + class MetricsTree_Price_Cents: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.ohlc: MetricPattern5[OHLCCents] = MetricPattern5(client, 'ohlc_cents') - self.split: MetricsTree_Price_Cents_Split = MetricsTree_Price_Cents_Split(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.ohlc: MetricPattern5[OHLCCents] = MetricPattern5(client, "ohlc_cents") + self.split: MetricsTree_Price_Cents_Split = MetricsTree_Price_Cents_Split( + client + ) + class MetricsTree_Price_Sats: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.ohlc: MetricPattern1[OHLCSats] = MetricPattern1(client, 'price_ohlc_sats') - self.split: SplitPattern2[Sats] = SplitPattern2(client, 'price_sats') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.ohlc: MetricPattern1[OHLCSats] = MetricPattern1(client, "price_ohlc_sats") + self.split: SplitPattern2[Sats] = SplitPattern2(client, "price_sats") + class MetricsTree_Price_Usd: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.ohlc: MetricPattern1[OHLCDollars] = MetricPattern1(client, 'price_ohlc') - self.split: SplitPattern2[Dollars] = SplitPattern2(client, 'price') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.ohlc: MetricPattern1[OHLCDollars] = MetricPattern1(client, "price_ohlc") + self.split: SplitPattern2[Dollars] = SplitPattern2(client, "price") + class MetricsTree_Price: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): + + def __init__(self, client: BrkClientBase, base_path: str = ""): self.cents: MetricsTree_Price_Cents = MetricsTree_Price_Cents(client) self.sats: MetricsTree_Price_Sats = MetricsTree_Price_Sats(client) self.usd: MetricsTree_Price_Usd = MetricsTree_Price_Usd(client) + class MetricsTree_Scripts_Count: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.emptyoutput: DollarsPattern[StoredU64] = DollarsPattern(client, 'emptyoutput_count') - self.opreturn: DollarsPattern[StoredU64] = DollarsPattern(client, 'opreturn_count') - self.p2a: DollarsPattern[StoredU64] = DollarsPattern(client, 'p2a_count') - self.p2ms: DollarsPattern[StoredU64] = DollarsPattern(client, 'p2ms_count') - self.p2pk33: DollarsPattern[StoredU64] = DollarsPattern(client, 'p2pk33_count') - self.p2pk65: DollarsPattern[StoredU64] = DollarsPattern(client, 'p2pk65_count') - self.p2pkh: DollarsPattern[StoredU64] = DollarsPattern(client, 'p2pkh_count') - self.p2sh: DollarsPattern[StoredU64] = DollarsPattern(client, 'p2sh_count') - self.p2tr: DollarsPattern[StoredU64] = DollarsPattern(client, 'p2tr_count') - self.p2wpkh: DollarsPattern[StoredU64] = DollarsPattern(client, 'p2wpkh_count') - self.p2wsh: DollarsPattern[StoredU64] = DollarsPattern(client, 'p2wsh_count') - self.segwit: DollarsPattern[StoredU64] = DollarsPattern(client, 'segwit_count') - self.segwit_adoption: SegwitAdoptionPattern = SegwitAdoptionPattern(client, 'segwit_adoption') - self.taproot_adoption: SegwitAdoptionPattern = SegwitAdoptionPattern(client, 'taproot_adoption') - self.unknownoutput: DollarsPattern[StoredU64] = DollarsPattern(client, 'unknownoutput_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.emptyoutput: DollarsPattern[StoredU64] = DollarsPattern( + client, "emptyoutput_count" + ) + self.opreturn: DollarsPattern[StoredU64] = DollarsPattern( + client, "opreturn_count" + ) + self.p2a: DollarsPattern[StoredU64] = DollarsPattern(client, "p2a_count") + self.p2ms: DollarsPattern[StoredU64] = DollarsPattern(client, "p2ms_count") + self.p2pk33: DollarsPattern[StoredU64] = DollarsPattern(client, "p2pk33_count") + self.p2pk65: DollarsPattern[StoredU64] = DollarsPattern(client, "p2pk65_count") + self.p2pkh: DollarsPattern[StoredU64] = DollarsPattern(client, "p2pkh_count") + self.p2sh: DollarsPattern[StoredU64] = DollarsPattern(client, "p2sh_count") + self.p2tr: DollarsPattern[StoredU64] = DollarsPattern(client, "p2tr_count") + self.p2wpkh: DollarsPattern[StoredU64] = DollarsPattern(client, "p2wpkh_count") + self.p2wsh: DollarsPattern[StoredU64] = DollarsPattern(client, "p2wsh_count") + self.segwit: DollarsPattern[StoredU64] = DollarsPattern(client, "segwit_count") + self.segwit_adoption: SegwitAdoptionPattern = SegwitAdoptionPattern( + client, "segwit_adoption" + ) + self.taproot_adoption: SegwitAdoptionPattern = SegwitAdoptionPattern( + client, "taproot_adoption" + ) + self.unknownoutput: DollarsPattern[StoredU64] = DollarsPattern( + client, "unknownoutput_count" + ) + class MetricsTree_Scripts_Value: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.opreturn: CoinbasePattern = CoinbasePattern(client, 'opreturn_value') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.opreturn: CoinbasePattern = CoinbasePattern(client, "opreturn_value") + class MetricsTree_Scripts: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): + + def __init__(self, client: BrkClientBase, base_path: str = ""): self.count: MetricsTree_Scripts_Count = MetricsTree_Scripts_Count(client) - self.empty_to_txindex: MetricPattern9[TxIndex] = MetricPattern9(client, 'txindex') - self.first_emptyoutputindex: MetricPattern11[EmptyOutputIndex] = MetricPattern11(client, 'first_emptyoutputindex') - self.first_opreturnindex: MetricPattern11[OpReturnIndex] = MetricPattern11(client, 'first_opreturnindex') - self.first_p2msoutputindex: MetricPattern11[P2MSOutputIndex] = MetricPattern11(client, 'first_p2msoutputindex') - self.first_unknownoutputindex: MetricPattern11[UnknownOutputIndex] = MetricPattern11(client, 'first_unknownoutputindex') - self.opreturn_to_txindex: MetricPattern14[TxIndex] = MetricPattern14(client, 'txindex') - self.p2ms_to_txindex: MetricPattern17[TxIndex] = MetricPattern17(client, 'txindex') - self.unknown_to_txindex: MetricPattern28[TxIndex] = MetricPattern28(client, 'txindex') + self.empty_to_txindex: MetricPattern9[TxIndex] = MetricPattern9( + client, "txindex" + ) + self.first_emptyoutputindex: MetricPattern11[EmptyOutputIndex] = ( + MetricPattern11(client, "first_emptyoutputindex") + ) + self.first_opreturnindex: MetricPattern11[OpReturnIndex] = MetricPattern11( + client, "first_opreturnindex" + ) + self.first_p2msoutputindex: MetricPattern11[P2MSOutputIndex] = MetricPattern11( + client, "first_p2msoutputindex" + ) + self.first_unknownoutputindex: MetricPattern11[UnknownOutputIndex] = ( + MetricPattern11(client, "first_unknownoutputindex") + ) + self.opreturn_to_txindex: MetricPattern14[TxIndex] = MetricPattern14( + client, "txindex" + ) + self.p2ms_to_txindex: MetricPattern17[TxIndex] = MetricPattern17( + client, "txindex" + ) + self.unknown_to_txindex: MetricPattern28[TxIndex] = MetricPattern28( + client, "txindex" + ) self.value: MetricsTree_Scripts_Value = MetricsTree_Scripts_Value(client) + class MetricsTree_Supply_Burned: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.opreturn: UnclaimedRewardsPattern = UnclaimedRewardsPattern(client, 'opreturn_supply') - self.unspendable: UnclaimedRewardsPattern = UnclaimedRewardsPattern(client, 'unspendable_supply') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.opreturn: UnclaimedRewardsPattern = UnclaimedRewardsPattern( + client, "opreturn_supply" + ) + self.unspendable: UnclaimedRewardsPattern = UnclaimedRewardsPattern( + client, "unspendable_supply" + ) + class MetricsTree_Supply_Circulating: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.bitcoin: MetricPattern3[Bitcoin] = MetricPattern3(client, 'circulating_supply_btc') - self.dollars: MetricPattern3[Dollars] = MetricPattern3(client, 'circulating_supply_usd') - self.sats: MetricPattern3[Sats] = MetricPattern3(client, 'circulating_supply') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.bitcoin: MetricPattern3[Bitcoin] = MetricPattern3( + client, "circulating_supply_btc" + ) + self.dollars: MetricPattern3[Dollars] = MetricPattern3( + client, "circulating_supply_usd" + ) + self.sats: MetricPattern3[Sats] = MetricPattern3(client, "circulating_supply") + class MetricsTree_Supply_Velocity: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.btc: MetricPattern4[StoredF64] = MetricPattern4(client, 'btc_velocity') - self.usd: MetricPattern4[StoredF64] = MetricPattern4(client, 'usd_velocity') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.btc: MetricPattern4[StoredF64] = MetricPattern4(client, "btc_velocity") + self.usd: MetricPattern4[StoredF64] = MetricPattern4(client, "usd_velocity") + class MetricsTree_Supply: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): + + def __init__(self, client: BrkClientBase, base_path: str = ""): self.burned: MetricsTree_Supply_Burned = MetricsTree_Supply_Burned(client) - self.circulating: MetricsTree_Supply_Circulating = MetricsTree_Supply_Circulating(client) - self.inflation: MetricPattern4[StoredF32] = MetricPattern4(client, 'inflation_rate') - self.market_cap: MetricPattern1[Dollars] = MetricPattern1(client, 'market_cap') + self.circulating: MetricsTree_Supply_Circulating = ( + MetricsTree_Supply_Circulating(client) + ) + self.inflation: MetricPattern4[StoredF32] = MetricPattern4( + client, "inflation_rate" + ) + self.market_cap: MetricPattern1[Dollars] = MetricPattern1(client, "market_cap") self.velocity: MetricsTree_Supply_Velocity = MetricsTree_Supply_Velocity(client) + class MetricsTree_Transactions_Count: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.is_coinbase: MetricPattern27[StoredBool] = MetricPattern27(client, 'is_coinbase') - self.tx_count: DollarsPattern[StoredU64] = DollarsPattern(client, 'tx_count') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.is_coinbase: MetricPattern27[StoredBool] = MetricPattern27( + client, "is_coinbase" + ) + self.tx_count: DollarsPattern[StoredU64] = DollarsPattern(client, "tx_count") + class MetricsTree_Transactions_Fees_Fee_Dollars: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.average: MetricPattern1[Dollars] = MetricPattern1(client, 'fee_usd_average') - self.cumulative: MetricPattern2[Dollars] = MetricPattern2(client, 'fee_usd_cumulative') - self.height_cumulative: MetricPattern11[Dollars] = MetricPattern11(client, 'fee_usd_cumulative') - self.max: MetricPattern1[Dollars] = MetricPattern1(client, 'fee_usd_max') - self.median: MetricPattern11[Dollars] = MetricPattern11(client, 'fee_usd_median') - self.min: MetricPattern1[Dollars] = MetricPattern1(client, 'fee_usd_min') - self.pct10: MetricPattern11[Dollars] = MetricPattern11(client, 'fee_usd_pct10') - self.pct25: MetricPattern11[Dollars] = MetricPattern11(client, 'fee_usd_pct25') - self.pct75: MetricPattern11[Dollars] = MetricPattern11(client, 'fee_usd_pct75') - self.pct90: MetricPattern11[Dollars] = MetricPattern11(client, 'fee_usd_pct90') - self.sum: MetricPattern1[Dollars] = MetricPattern1(client, 'fee_usd_sum') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.average: MetricPattern1[Dollars] = MetricPattern1( + client, "fee_usd_average" + ) + self.cumulative: MetricPattern2[Dollars] = MetricPattern2( + client, "fee_usd_cumulative" + ) + self.height_cumulative: MetricPattern11[Dollars] = MetricPattern11( + client, "fee_usd_cumulative" + ) + self.max: MetricPattern1[Dollars] = MetricPattern1(client, "fee_usd_max") + self.median: MetricPattern11[Dollars] = MetricPattern11( + client, "fee_usd_median" + ) + self.min: MetricPattern1[Dollars] = MetricPattern1(client, "fee_usd_min") + self.pct10: MetricPattern11[Dollars] = MetricPattern11(client, "fee_usd_pct10") + self.pct25: MetricPattern11[Dollars] = MetricPattern11(client, "fee_usd_pct25") + self.pct75: MetricPattern11[Dollars] = MetricPattern11(client, "fee_usd_pct75") + self.pct90: MetricPattern11[Dollars] = MetricPattern11(client, "fee_usd_pct90") + self.sum: MetricPattern1[Dollars] = MetricPattern1(client, "fee_usd_sum") + class MetricsTree_Transactions_Fees_Fee: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.bitcoin: CountPattern2[Bitcoin] = CountPattern2(client, 'fee_btc') - self.dollars: MetricsTree_Transactions_Fees_Fee_Dollars = MetricsTree_Transactions_Fees_Fee_Dollars(client) - self.sats: CountPattern2[Sats] = CountPattern2(client, 'fee') - self.txindex: MetricPattern27[Sats] = MetricPattern27(client, 'fee') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.bitcoin: CountPattern2[Bitcoin] = CountPattern2(client, "fee_btc") + self.dollars: MetricsTree_Transactions_Fees_Fee_Dollars = ( + MetricsTree_Transactions_Fees_Fee_Dollars(client) + ) + self.sats: CountPattern2[Sats] = CountPattern2(client, "fee") + self.txindex: MetricPattern27[Sats] = MetricPattern27(client, "fee") + class MetricsTree_Transactions_Fees: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.fee: MetricsTree_Transactions_Fees_Fee = MetricsTree_Transactions_Fees_Fee(client) - self.fee_rate: FeeRatePattern[FeeRate] = FeeRatePattern(client, 'fee_rate') - self.input_value: MetricPattern27[Sats] = MetricPattern27(client, 'input_value') - self.output_value: MetricPattern27[Sats] = MetricPattern27(client, 'output_value') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.fee: MetricsTree_Transactions_Fees_Fee = MetricsTree_Transactions_Fees_Fee( + client + ) + self.fee_rate: FeeRatePattern[FeeRate] = FeeRatePattern(client, "fee_rate") + self.input_value: MetricPattern27[Sats] = MetricPattern27(client, "input_value") + self.output_value: MetricPattern27[Sats] = MetricPattern27( + client, "output_value" + ) + class MetricsTree_Transactions_Size: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.vsize: FeeRatePattern[VSize] = FeeRatePattern(client, 'tx_vsize_average') - self.weight: FeeRatePattern[Weight] = FeeRatePattern(client, 'tx_weight_average') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.vsize: FeeRatePattern[VSize] = FeeRatePattern(client, "tx_vsize_average") + self.weight: FeeRatePattern[Weight] = FeeRatePattern( + client, "tx_weight_average" + ) + class MetricsTree_Transactions_Versions: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.v1: BlockCountPattern[StoredU64] = BlockCountPattern(client, 'tx_v1') - self.v2: BlockCountPattern[StoredU64] = BlockCountPattern(client, 'tx_v2') - self.v3: BlockCountPattern[StoredU64] = BlockCountPattern(client, 'tx_v3') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.v1: BlockCountPattern[StoredU64] = BlockCountPattern(client, "tx_v1") + self.v2: BlockCountPattern[StoredU64] = BlockCountPattern(client, "tx_v2") + self.v3: BlockCountPattern[StoredU64] = BlockCountPattern(client, "tx_v3") + class MetricsTree_Transactions_Volume: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.annualized_volume: _2015Pattern = _2015Pattern(client, 'annualized_volume') - self.inputs_per_sec: MetricPattern4[StoredF32] = MetricPattern4(client, 'inputs_per_sec') - self.outputs_per_sec: MetricPattern4[StoredF32] = MetricPattern4(client, 'outputs_per_sec') - self.sent_sum: ActiveSupplyPattern = ActiveSupplyPattern(client, 'sent_sum') - self.tx_per_sec: MetricPattern4[StoredF32] = MetricPattern4(client, 'tx_per_sec') + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.annualized_volume: _2015Pattern = _2015Pattern(client, "annualized_volume") + self.inputs_per_sec: MetricPattern4[StoredF32] = MetricPattern4( + client, "inputs_per_sec" + ) + self.outputs_per_sec: MetricPattern4[StoredF32] = MetricPattern4( + client, "outputs_per_sec" + ) + self.sent_sum: ActiveSupplyPattern = ActiveSupplyPattern(client, "sent_sum") + self.tx_per_sec: MetricPattern4[StoredF32] = MetricPattern4( + client, "tx_per_sec" + ) + class MetricsTree_Transactions: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): - self.base_size: MetricPattern27[StoredU32] = MetricPattern27(client, 'base_size') - self.count: MetricsTree_Transactions_Count = MetricsTree_Transactions_Count(client) + + def __init__(self, client: BrkClientBase, base_path: str = ""): + self.base_size: MetricPattern27[StoredU32] = MetricPattern27( + client, "base_size" + ) + self.count: MetricsTree_Transactions_Count = MetricsTree_Transactions_Count( + client + ) self.fees: MetricsTree_Transactions_Fees = MetricsTree_Transactions_Fees(client) - self.first_txindex: MetricPattern11[TxIndex] = MetricPattern11(client, 'first_txindex') - self.first_txinindex: MetricPattern27[TxInIndex] = MetricPattern27(client, 'first_txinindex') - self.first_txoutindex: MetricPattern27[TxOutIndex] = MetricPattern27(client, 'first_txoutindex') - self.height: MetricPattern27[Height] = MetricPattern27(client, 'height') - self.is_explicitly_rbf: MetricPattern27[StoredBool] = MetricPattern27(client, 'is_explicitly_rbf') - self.rawlocktime: MetricPattern27[RawLockTime] = MetricPattern27(client, 'rawlocktime') + self.first_txindex: MetricPattern11[TxIndex] = MetricPattern11( + client, "first_txindex" + ) + self.first_txinindex: MetricPattern27[TxInIndex] = MetricPattern27( + client, "first_txinindex" + ) + self.first_txoutindex: MetricPattern27[TxOutIndex] = MetricPattern27( + client, "first_txoutindex" + ) + self.height: MetricPattern27[Height] = MetricPattern27(client, "height") + self.is_explicitly_rbf: MetricPattern27[StoredBool] = MetricPattern27( + client, "is_explicitly_rbf" + ) + self.rawlocktime: MetricPattern27[RawLockTime] = MetricPattern27( + client, "rawlocktime" + ) self.size: MetricsTree_Transactions_Size = MetricsTree_Transactions_Size(client) - self.total_size: MetricPattern27[StoredU32] = MetricPattern27(client, 'total_size') - self.txid: MetricPattern27[Txid] = MetricPattern27(client, 'txid') - self.txversion: MetricPattern27[TxVersion] = MetricPattern27(client, 'txversion') - self.versions: MetricsTree_Transactions_Versions = MetricsTree_Transactions_Versions(client) - self.volume: MetricsTree_Transactions_Volume = MetricsTree_Transactions_Volume(client) + self.total_size: MetricPattern27[StoredU32] = MetricPattern27( + client, "total_size" + ) + self.txid: MetricPattern27[Txid] = MetricPattern27(client, "txid") + self.txversion: MetricPattern27[TxVersion] = MetricPattern27( + client, "txversion" + ) + self.versions: MetricsTree_Transactions_Versions = ( + MetricsTree_Transactions_Versions(client) + ) + self.volume: MetricsTree_Transactions_Volume = MetricsTree_Transactions_Volume( + client + ) + class MetricsTree: """Metrics tree node.""" - - def __init__(self, client: BrkClientBase, base_path: str = ''): + + def __init__(self, client: BrkClientBase, base_path: str = ""): self.addresses: MetricsTree_Addresses = MetricsTree_Addresses(client) self.blocks: MetricsTree_Blocks = MetricsTree_Blocks(client) self.cointime: MetricsTree_Cointime = MetricsTree_Cointime(client) @@ -4438,903 +6632,644 @@ class MetricsTree: self.supply: MetricsTree_Supply = MetricsTree_Supply(client) self.transactions: MetricsTree_Transactions = MetricsTree_Transactions(client) + class BrkClient(BrkClientBase): """Main BRK client with metrics tree and API methods.""" VERSION = "v0.1.0-alpha.2" INDEXES = [ - "dateindex", - "decadeindex", - "difficultyepoch", - "emptyoutputindex", - "halvingepoch", - "height", - "txinindex", - "monthindex", - "opreturnindex", - "txoutindex", - "p2aaddressindex", - "p2msoutputindex", - "p2pk33addressindex", - "p2pk65addressindex", - "p2pkhaddressindex", - "p2shaddressindex", - "p2traddressindex", - "p2wpkhaddressindex", - "p2wshaddressindex", - "quarterindex", - "semesterindex", - "txindex", - "unknownoutputindex", - "weekindex", - "yearindex", - "loadedaddressindex", - "emptyaddressindex" + "dateindex", + "decadeindex", + "difficultyepoch", + "emptyoutputindex", + "halvingepoch", + "height", + "txinindex", + "monthindex", + "opreturnindex", + "txoutindex", + "p2aaddressindex", + "p2msoutputindex", + "p2pk33addressindex", + "p2pk65addressindex", + "p2pkhaddressindex", + "p2shaddressindex", + "p2traddressindex", + "p2wpkhaddressindex", + "p2wshaddressindex", + "quarterindex", + "semesterindex", + "txindex", + "unknownoutputindex", + "weekindex", + "yearindex", + "loadedaddressindex", + "emptyaddressindex", ] POOL_ID_TO_POOL_NAME = { - "aaopool": "AAO Pool", - "antpool": "AntPool", - "arkpool": "ArkPool", - "asicminer": "ASICMiner", - "axbt": "A-XBT", - "batpool": "BATPOOL", - "bcmonster": "BCMonster", - "bcpoolio": "bcpool.io", - "binancepool": "Binance Pool", - "bitalo": "Bitalo", - "bitclub": "BitClub", - "bitcoinaffiliatenetwork": "Bitcoin Affiliate Network", - "bitcoincom": "Bitcoin.com", - "bitcoinindia": "Bitcoin India", - "bitcoinrussia": "BitcoinRussia", - "bitcoinukraine": "Bitcoin-Ukraine", - "bitfarms": "Bitfarms", - "bitfufupool": "BitFuFuPool", - "bitfury": "BitFury", - "bitminter": "BitMinter", - "bitparking": "Bitparking", - "bitsolo": "Bitsolo", - "bixin": "Bixin", - "blockfills": "BlockFills", - "braiinspool": "Braiins Pool", - "bravomining": "Bravo Mining", - "btcc": "BTCC", - "btccom": "BTC.com", - "btcdig": "BTCDig", - "btcguild": "BTC Guild", - "btclab": "BTCLab", - "btcmp": "BTCMP", - "btcnuggets": "BTC Nuggets", - "btcpoolparty": "BTC Pool Party", - "btcserv": "BTCServ", - "btctop": "BTC.TOP", - "btpool": "BTPOOL", - "bwpool": "BWPool", - "bytepool": "BytePool", - "canoe": "CANOE", - "canoepool": "CanoePool", - "carbonnegative": "Carbon Negative", - "ckpool": "CKPool", - "cloudhashing": "CloudHashing", - "coinlab": "CoinLab", - "cointerra": "Cointerra", - "connectbtc": "ConnectBTC", - "dcex": "DCEX", - "dcexploration": "DCExploration", - "digitalbtc": "digitalBTC", - "digitalxmintsy": "digitalX Mintsy", - "dpool": "DPOOL", - "eclipsemc": "EclipseMC", - "eightbaochi": "8baochi", - "ekanembtc": "EkanemBTC", - "eligius": "Eligius", - "emcdpool": "EMCDPool", - "entrustcharitypool": "Entrust Charity Pool", - "eobot": "Eobot", - "exxbw": "EXX&BW", - "f2pool": "F2Pool", - "fiftyeightcoin": "58COIN", - "foundryusa": "Foundry USA", - "futurebitapollosolo": "FutureBit Apollo Solo", - "gbminers": "GBMiners", - "ghashio": "GHash.IO", - "givemecoins": "Give Me Coins", - "gogreenlight": "GoGreenLight", - "haominer": "haominer", - "haozhuzhu": "HAOZHUZHU", - "hashbx": "HashBX", - "hashpool": "HASHPOOL", - "helix": "Helix", - "hhtt": "HHTT", - "hotpool": "HotPool", - "hummerpool": "Hummerpool", - "huobipool": "Huobi.pool", - "innopolistech": "Innopolis Tech", - "kanopool": "KanoPool", - "kncminer": "KnCMiner", - "kucoinpool": "KuCoinPool", - "lubiancom": "Lubian.com", - "luckypool": "luckyPool", - "luxor": "Luxor", - "marapool": "MARA Pool", - "maxbtc": "MaxBTC", - "maxipool": "MaxiPool", - "megabigpower": "MegaBigPower", - "minerium": "Minerium", - "miningcity": "MiningCity", - "miningdutch": "Mining-Dutch", - "miningkings": "MiningKings", - "miningsquared": "Mining Squared", - "mmpool": "mmpool", - "mtred": "Mt Red", - "multicoinco": "MultiCoin.co", - "multipool": "Multipool", - "mybtccoinpool": "myBTCcoin Pool", - "neopool": "Neopool", - "nexious": "Nexious", - "nicehash": "NiceHash", - "nmcbit": "NMCbit", - "novablock": "NovaBlock", - "ocean": "OCEAN", - "okexpool": "OKExPool", - "okkong": "OKKONG", - "okminer": "OKMINER", - "okpooltop": "okpool.top", - "onehash": "1Hash", - "onem1x": "1M1X", - "onethash": "1THash", - "ozcoin": "OzCoin", - "parasite": "Parasite", - "patels": "Patels", - "pegapool": "PEGA Pool", - "phashio": "PHash.IO", - "phoenix": "Phoenix", - "polmine": "Polmine", - "pool175btc": "175btc", - "pool50btc": "50BTC", - "poolin": "Poolin", - "portlandhodl": "Portland.HODL", - "publicpool": "Public Pool", - "purebtccom": "PureBTC.COM", - "rawpool": "Rawpool", - "rigpool": "RigPool", - "sbicrypto": "SBI Crypto", - "secpool": "SECPOOL", - "secretsuperstar": "SecretSuperstar", - "sevenpool": "7pool", - "shawnp0wers": "shawnp0wers", - "sigmapoolcom": "Sigmapool.com", - "simplecoinus": "simplecoin.us", - "solock": "Solo CK", - "spiderpool": "SpiderPool", - "stminingcorp": "ST Mining Corp", - "tangpool": "Tangpool", - "tatmaspool": "TATMAS Pool", - "tbdice": "TBDice", - "telco214": "Telco 214", - "terrapool": "Terra Pool", - "tiger": "tiger", - "tigerpoolnet": "tigerpool.net", - "titan": "Titan", - "transactioncoinmining": "transactioncoinmining", - "trickysbtcpool": "Tricky's BTC Pool", - "triplemining": "TripleMining", - "twentyoneinc": "21 Inc.", - "ultimuspool": "ULTIMUSPOOL", - "unknown": "Unknown", - "unomp": "UNOMP", - "viabtc": "ViaBTC", - "waterhole": "Waterhole", - "wayicn": "WAYI.CN", - "whitepool": "WhitePool", - "wk057": "wk057", - "yourbtcnet": "Yourbtc.net", - "zulupool": "Zulupool" + "aaopool": "AAO Pool", + "antpool": "AntPool", + "arkpool": "ArkPool", + "asicminer": "ASICMiner", + "axbt": "A-XBT", + "batpool": "BATPOOL", + "bcmonster": "BCMonster", + "bcpoolio": "bcpool.io", + "binancepool": "Binance Pool", + "bitalo": "Bitalo", + "bitclub": "BitClub", + "bitcoinaffiliatenetwork": "Bitcoin Affiliate Network", + "bitcoincom": "Bitcoin.com", + "bitcoinindia": "Bitcoin India", + "bitcoinrussia": "BitcoinRussia", + "bitcoinukraine": "Bitcoin-Ukraine", + "bitfarms": "Bitfarms", + "bitfufupool": "BitFuFuPool", + "bitfury": "BitFury", + "bitminter": "BitMinter", + "bitparking": "Bitparking", + "bitsolo": "Bitsolo", + "bixin": "Bixin", + "blockfills": "BlockFills", + "braiinspool": "Braiins Pool", + "bravomining": "Bravo Mining", + "btcc": "BTCC", + "btccom": "BTC.com", + "btcdig": "BTCDig", + "btcguild": "BTC Guild", + "btclab": "BTCLab", + "btcmp": "BTCMP", + "btcnuggets": "BTC Nuggets", + "btcpoolparty": "BTC Pool Party", + "btcserv": "BTCServ", + "btctop": "BTC.TOP", + "btpool": "BTPOOL", + "bwpool": "BWPool", + "bytepool": "BytePool", + "canoe": "CANOE", + "canoepool": "CanoePool", + "carbonnegative": "Carbon Negative", + "ckpool": "CKPool", + "cloudhashing": "CloudHashing", + "coinlab": "CoinLab", + "cointerra": "Cointerra", + "connectbtc": "ConnectBTC", + "dcex": "DCEX", + "dcexploration": "DCExploration", + "digitalbtc": "digitalBTC", + "digitalxmintsy": "digitalX Mintsy", + "dpool": "DPOOL", + "eclipsemc": "EclipseMC", + "eightbaochi": "8baochi", + "ekanembtc": "EkanemBTC", + "eligius": "Eligius", + "emcdpool": "EMCDPool", + "entrustcharitypool": "Entrust Charity Pool", + "eobot": "Eobot", + "exxbw": "EXX&BW", + "f2pool": "F2Pool", + "fiftyeightcoin": "58COIN", + "foundryusa": "Foundry USA", + "futurebitapollosolo": "FutureBit Apollo Solo", + "gbminers": "GBMiners", + "ghashio": "GHash.IO", + "givemecoins": "Give Me Coins", + "gogreenlight": "GoGreenLight", + "haominer": "haominer", + "haozhuzhu": "HAOZHUZHU", + "hashbx": "HashBX", + "hashpool": "HASHPOOL", + "helix": "Helix", + "hhtt": "HHTT", + "hotpool": "HotPool", + "hummerpool": "Hummerpool", + "huobipool": "Huobi.pool", + "innopolistech": "Innopolis Tech", + "kanopool": "KanoPool", + "kncminer": "KnCMiner", + "kucoinpool": "KuCoinPool", + "lubiancom": "Lubian.com", + "luckypool": "luckyPool", + "luxor": "Luxor", + "marapool": "MARA Pool", + "maxbtc": "MaxBTC", + "maxipool": "MaxiPool", + "megabigpower": "MegaBigPower", + "minerium": "Minerium", + "miningcity": "MiningCity", + "miningdutch": "Mining-Dutch", + "miningkings": "MiningKings", + "miningsquared": "Mining Squared", + "mmpool": "mmpool", + "mtred": "Mt Red", + "multicoinco": "MultiCoin.co", + "multipool": "Multipool", + "mybtccoinpool": "myBTCcoin Pool", + "neopool": "Neopool", + "nexious": "Nexious", + "nicehash": "NiceHash", + "nmcbit": "NMCbit", + "novablock": "NovaBlock", + "ocean": "OCEAN", + "okexpool": "OKExPool", + "okkong": "OKKONG", + "okminer": "OKMINER", + "okpooltop": "okpool.top", + "onehash": "1Hash", + "onem1x": "1M1X", + "onethash": "1THash", + "ozcoin": "OzCoin", + "parasite": "Parasite", + "patels": "Patels", + "pegapool": "PEGA Pool", + "phashio": "PHash.IO", + "phoenix": "Phoenix", + "polmine": "Polmine", + "pool175btc": "175btc", + "pool50btc": "50BTC", + "poolin": "Poolin", + "portlandhodl": "Portland.HODL", + "publicpool": "Public Pool", + "purebtccom": "PureBTC.COM", + "rawpool": "Rawpool", + "rigpool": "RigPool", + "sbicrypto": "SBI Crypto", + "secpool": "SECPOOL", + "secretsuperstar": "SecretSuperstar", + "sevenpool": "7pool", + "shawnp0wers": "shawnp0wers", + "sigmapoolcom": "Sigmapool.com", + "simplecoinus": "simplecoin.us", + "solock": "Solo CK", + "spiderpool": "SpiderPool", + "stminingcorp": "ST Mining Corp", + "tangpool": "Tangpool", + "tatmaspool": "TATMAS Pool", + "tbdice": "TBDice", + "telco214": "Telco 214", + "terrapool": "Terra Pool", + "tiger": "tiger", + "tigerpoolnet": "tigerpool.net", + "titan": "Titan", + "transactioncoinmining": "transactioncoinmining", + "trickysbtcpool": "Tricky's BTC Pool", + "triplemining": "TripleMining", + "twentyoneinc": "21 Inc.", + "ultimuspool": "ULTIMUSPOOL", + "unknown": "Unknown", + "unomp": "UNOMP", + "viabtc": "ViaBTC", + "waterhole": "Waterhole", + "wayicn": "WAYI.CN", + "whitepool": "WhitePool", + "wk057": "wk057", + "yourbtcnet": "Yourbtc.net", + "zulupool": "Zulupool", } TERM_NAMES = { - "short": { - "id": "sth", - "short": "STH", - "long": "Short Term Holders" - }, - "long": { - "id": "lth", - "short": "LTH", - "long": "Long Term Holders" - } + "short": {"id": "sth", "short": "STH", "long": "Short Term Holders"}, + "long": {"id": "lth", "short": "LTH", "long": "Long Term Holders"}, } EPOCH_NAMES = { - "_0": { - "id": "epoch_0", - "short": "Epoch 0", - "long": "Epoch 0" - }, - "_1": { - "id": "epoch_1", - "short": "Epoch 1", - "long": "Epoch 1" - }, - "_2": { - "id": "epoch_2", - "short": "Epoch 2", - "long": "Epoch 2" - }, - "_3": { - "id": "epoch_3", - "short": "Epoch 3", - "long": "Epoch 3" - }, - "_4": { - "id": "epoch_4", - "short": "Epoch 4", - "long": "Epoch 4" - } + "_0": {"id": "epoch_0", "short": "Epoch 0", "long": "Epoch 0"}, + "_1": {"id": "epoch_1", "short": "Epoch 1", "long": "Epoch 1"}, + "_2": {"id": "epoch_2", "short": "Epoch 2", "long": "Epoch 2"}, + "_3": {"id": "epoch_3", "short": "Epoch 3", "long": "Epoch 3"}, + "_4": {"id": "epoch_4", "short": "Epoch 4", "long": "Epoch 4"}, } YEAR_NAMES = { - "_2009": { - "id": "year_2009", - "short": "2009", - "long": "Year 2009" - }, - "_2010": { - "id": "year_2010", - "short": "2010", - "long": "Year 2010" - }, - "_2011": { - "id": "year_2011", - "short": "2011", - "long": "Year 2011" - }, - "_2012": { - "id": "year_2012", - "short": "2012", - "long": "Year 2012" - }, - "_2013": { - "id": "year_2013", - "short": "2013", - "long": "Year 2013" - }, - "_2014": { - "id": "year_2014", - "short": "2014", - "long": "Year 2014" - }, - "_2015": { - "id": "year_2015", - "short": "2015", - "long": "Year 2015" - }, - "_2016": { - "id": "year_2016", - "short": "2016", - "long": "Year 2016" - }, - "_2017": { - "id": "year_2017", - "short": "2017", - "long": "Year 2017" - }, - "_2018": { - "id": "year_2018", - "short": "2018", - "long": "Year 2018" - }, - "_2019": { - "id": "year_2019", - "short": "2019", - "long": "Year 2019" - }, - "_2020": { - "id": "year_2020", - "short": "2020", - "long": "Year 2020" - }, - "_2021": { - "id": "year_2021", - "short": "2021", - "long": "Year 2021" - }, - "_2022": { - "id": "year_2022", - "short": "2022", - "long": "Year 2022" - }, - "_2023": { - "id": "year_2023", - "short": "2023", - "long": "Year 2023" - }, - "_2024": { - "id": "year_2024", - "short": "2024", - "long": "Year 2024" - }, - "_2025": { - "id": "year_2025", - "short": "2025", - "long": "Year 2025" - }, - "_2026": { - "id": "year_2026", - "short": "2026", - "long": "Year 2026" - } + "_2009": {"id": "year_2009", "short": "2009", "long": "Year 2009"}, + "_2010": {"id": "year_2010", "short": "2010", "long": "Year 2010"}, + "_2011": {"id": "year_2011", "short": "2011", "long": "Year 2011"}, + "_2012": {"id": "year_2012", "short": "2012", "long": "Year 2012"}, + "_2013": {"id": "year_2013", "short": "2013", "long": "Year 2013"}, + "_2014": {"id": "year_2014", "short": "2014", "long": "Year 2014"}, + "_2015": {"id": "year_2015", "short": "2015", "long": "Year 2015"}, + "_2016": {"id": "year_2016", "short": "2016", "long": "Year 2016"}, + "_2017": {"id": "year_2017", "short": "2017", "long": "Year 2017"}, + "_2018": {"id": "year_2018", "short": "2018", "long": "Year 2018"}, + "_2019": {"id": "year_2019", "short": "2019", "long": "Year 2019"}, + "_2020": {"id": "year_2020", "short": "2020", "long": "Year 2020"}, + "_2021": {"id": "year_2021", "short": "2021", "long": "Year 2021"}, + "_2022": {"id": "year_2022", "short": "2022", "long": "Year 2022"}, + "_2023": {"id": "year_2023", "short": "2023", "long": "Year 2023"}, + "_2024": {"id": "year_2024", "short": "2024", "long": "Year 2024"}, + "_2025": {"id": "year_2025", "short": "2025", "long": "Year 2025"}, + "_2026": {"id": "year_2026", "short": "2026", "long": "Year 2026"}, } SPENDABLE_TYPE_NAMES = { - "p2pk65": { - "id": "p2pk65", - "short": "P2PK65", - "long": "Pay to Public Key (65 bytes)" - }, - "p2pk33": { - "id": "p2pk33", - "short": "P2PK33", - "long": "Pay to Public Key (33 bytes)" - }, - "p2pkh": { - "id": "p2pkh", - "short": "P2PKH", - "long": "Pay to Public Key Hash" - }, - "p2ms": { - "id": "p2ms", - "short": "P2MS", - "long": "Pay to Multisig" - }, - "p2sh": { - "id": "p2sh", - "short": "P2SH", - "long": "Pay to Script Hash" - }, - "p2wpkh": { - "id": "p2wpkh", - "short": "P2WPKH", - "long": "Pay to Witness Public Key Hash" - }, - "p2wsh": { - "id": "p2wsh", - "short": "P2WSH", - "long": "Pay to Witness Script Hash" - }, - "p2tr": { - "id": "p2tr", - "short": "P2TR", - "long": "Pay to Taproot" - }, - "p2a": { - "id": "p2a", - "short": "P2A", - "long": "Pay to Anchor" - }, - "unknown": { - "id": "unknown_outputs", - "short": "Unknown", - "long": "Unknown Output Type" - }, - "empty": { - "id": "empty_outputs", - "short": "Empty", - "long": "Empty Output" - } + "p2pk65": { + "id": "p2pk65", + "short": "P2PK65", + "long": "Pay to Public Key (65 bytes)", + }, + "p2pk33": { + "id": "p2pk33", + "short": "P2PK33", + "long": "Pay to Public Key (33 bytes)", + }, + "p2pkh": {"id": "p2pkh", "short": "P2PKH", "long": "Pay to Public Key Hash"}, + "p2ms": {"id": "p2ms", "short": "P2MS", "long": "Pay to Multisig"}, + "p2sh": {"id": "p2sh", "short": "P2SH", "long": "Pay to Script Hash"}, + "p2wpkh": { + "id": "p2wpkh", + "short": "P2WPKH", + "long": "Pay to Witness Public Key Hash", + }, + "p2wsh": { + "id": "p2wsh", + "short": "P2WSH", + "long": "Pay to Witness Script Hash", + }, + "p2tr": {"id": "p2tr", "short": "P2TR", "long": "Pay to Taproot"}, + "p2a": {"id": "p2a", "short": "P2A", "long": "Pay to Anchor"}, + "unknown": { + "id": "unknown_outputs", + "short": "Unknown", + "long": "Unknown Output Type", + }, + "empty": {"id": "empty_outputs", "short": "Empty", "long": "Empty Output"}, } AGE_RANGE_NAMES = { - "up_to_1h": { - "id": "up_to_1h_old", - "short": "<1h", - "long": "Up to 1 Hour Old" - }, - "_1h_to_1d": { - "id": "at_least_1h_up_to_1d_old", - "short": "1h-1d", - "long": "1 Hour to 1 Day Old" - }, - "_1d_to_1w": { - "id": "at_least_1d_up_to_1w_old", - "short": "1d-1w", - "long": "1 Day to 1 Week Old" - }, - "_1w_to_1m": { - "id": "at_least_1w_up_to_1m_old", - "short": "1w-1m", - "long": "1 Week to 1 Month Old" - }, - "_1m_to_2m": { - "id": "at_least_1m_up_to_2m_old", - "short": "1m-2m", - "long": "1 to 2 Months Old" - }, - "_2m_to_3m": { - "id": "at_least_2m_up_to_3m_old", - "short": "2m-3m", - "long": "2 to 3 Months Old" - }, - "_3m_to_4m": { - "id": "at_least_3m_up_to_4m_old", - "short": "3m-4m", - "long": "3 to 4 Months Old" - }, - "_4m_to_5m": { - "id": "at_least_4m_up_to_5m_old", - "short": "4m-5m", - "long": "4 to 5 Months Old" - }, - "_5m_to_6m": { - "id": "at_least_5m_up_to_6m_old", - "short": "5m-6m", - "long": "5 to 6 Months Old" - }, - "_6m_to_1y": { - "id": "at_least_6m_up_to_1y_old", - "short": "6m-1y", - "long": "6 Months to 1 Year Old" - }, - "_1y_to_2y": { - "id": "at_least_1y_up_to_2y_old", - "short": "1y-2y", - "long": "1 to 2 Years Old" - }, - "_2y_to_3y": { - "id": "at_least_2y_up_to_3y_old", - "short": "2y-3y", - "long": "2 to 3 Years Old" - }, - "_3y_to_4y": { - "id": "at_least_3y_up_to_4y_old", - "short": "3y-4y", - "long": "3 to 4 Years Old" - }, - "_4y_to_5y": { - "id": "at_least_4y_up_to_5y_old", - "short": "4y-5y", - "long": "4 to 5 Years Old" - }, - "_5y_to_6y": { - "id": "at_least_5y_up_to_6y_old", - "short": "5y-6y", - "long": "5 to 6 Years Old" - }, - "_6y_to_7y": { - "id": "at_least_6y_up_to_7y_old", - "short": "6y-7y", - "long": "6 to 7 Years Old" - }, - "_7y_to_8y": { - "id": "at_least_7y_up_to_8y_old", - "short": "7y-8y", - "long": "7 to 8 Years Old" - }, - "_8y_to_10y": { - "id": "at_least_8y_up_to_10y_old", - "short": "8y-10y", - "long": "8 to 10 Years Old" - }, - "_10y_to_12y": { - "id": "at_least_10y_up_to_12y_old", - "short": "10y-12y", - "long": "10 to 12 Years Old" - }, - "_12y_to_15y": { - "id": "at_least_12y_up_to_15y_old", - "short": "12y-15y", - "long": "12 to 15 Years Old" - }, - "from_15y": { - "id": "at_least_15y_old", - "short": "15y+", - "long": "15+ Years Old" - } + "up_to_1h": {"id": "up_to_1h_old", "short": "<1h", "long": "Up to 1 Hour Old"}, + "_1h_to_1d": { + "id": "at_least_1h_up_to_1d_old", + "short": "1h-1d", + "long": "1 Hour to 1 Day Old", + }, + "_1d_to_1w": { + "id": "at_least_1d_up_to_1w_old", + "short": "1d-1w", + "long": "1 Day to 1 Week Old", + }, + "_1w_to_1m": { + "id": "at_least_1w_up_to_1m_old", + "short": "1w-1m", + "long": "1 Week to 1 Month Old", + }, + "_1m_to_2m": { + "id": "at_least_1m_up_to_2m_old", + "short": "1m-2m", + "long": "1 to 2 Months Old", + }, + "_2m_to_3m": { + "id": "at_least_2m_up_to_3m_old", + "short": "2m-3m", + "long": "2 to 3 Months Old", + }, + "_3m_to_4m": { + "id": "at_least_3m_up_to_4m_old", + "short": "3m-4m", + "long": "3 to 4 Months Old", + }, + "_4m_to_5m": { + "id": "at_least_4m_up_to_5m_old", + "short": "4m-5m", + "long": "4 to 5 Months Old", + }, + "_5m_to_6m": { + "id": "at_least_5m_up_to_6m_old", + "short": "5m-6m", + "long": "5 to 6 Months Old", + }, + "_6m_to_1y": { + "id": "at_least_6m_up_to_1y_old", + "short": "6m-1y", + "long": "6 Months to 1 Year Old", + }, + "_1y_to_2y": { + "id": "at_least_1y_up_to_2y_old", + "short": "1y-2y", + "long": "1 to 2 Years Old", + }, + "_2y_to_3y": { + "id": "at_least_2y_up_to_3y_old", + "short": "2y-3y", + "long": "2 to 3 Years Old", + }, + "_3y_to_4y": { + "id": "at_least_3y_up_to_4y_old", + "short": "3y-4y", + "long": "3 to 4 Years Old", + }, + "_4y_to_5y": { + "id": "at_least_4y_up_to_5y_old", + "short": "4y-5y", + "long": "4 to 5 Years Old", + }, + "_5y_to_6y": { + "id": "at_least_5y_up_to_6y_old", + "short": "5y-6y", + "long": "5 to 6 Years Old", + }, + "_6y_to_7y": { + "id": "at_least_6y_up_to_7y_old", + "short": "6y-7y", + "long": "6 to 7 Years Old", + }, + "_7y_to_8y": { + "id": "at_least_7y_up_to_8y_old", + "short": "7y-8y", + "long": "7 to 8 Years Old", + }, + "_8y_to_10y": { + "id": "at_least_8y_up_to_10y_old", + "short": "8y-10y", + "long": "8 to 10 Years Old", + }, + "_10y_to_12y": { + "id": "at_least_10y_up_to_12y_old", + "short": "10y-12y", + "long": "10 to 12 Years Old", + }, + "_12y_to_15y": { + "id": "at_least_12y_up_to_15y_old", + "short": "12y-15y", + "long": "12 to 15 Years Old", + }, + "from_15y": { + "id": "at_least_15y_old", + "short": "15y+", + "long": "15+ Years Old", + }, } MAX_AGE_NAMES = { - "_1w": { - "id": "up_to_1w_old", - "short": "<1w", - "long": "Up to 1 Week Old" - }, - "_1m": { - "id": "up_to_1m_old", - "short": "<1m", - "long": "Up to 1 Month Old" - }, - "_2m": { - "id": "up_to_2m_old", - "short": "<2m", - "long": "Up to 2 Months Old" - }, - "_3m": { - "id": "up_to_3m_old", - "short": "<3m", - "long": "Up to 3 Months Old" - }, - "_4m": { - "id": "up_to_4m_old", - "short": "<4m", - "long": "Up to 4 Months Old" - }, - "_5m": { - "id": "up_to_5m_old", - "short": "<5m", - "long": "Up to 5 Months Old" - }, - "_6m": { - "id": "up_to_6m_old", - "short": "<6m", - "long": "Up to 6 Months Old" - }, - "_1y": { - "id": "up_to_1y_old", - "short": "<1y", - "long": "Up to 1 Year Old" - }, - "_2y": { - "id": "up_to_2y_old", - "short": "<2y", - "long": "Up to 2 Years Old" - }, - "_3y": { - "id": "up_to_3y_old", - "short": "<3y", - "long": "Up to 3 Years Old" - }, - "_4y": { - "id": "up_to_4y_old", - "short": "<4y", - "long": "Up to 4 Years Old" - }, - "_5y": { - "id": "up_to_5y_old", - "short": "<5y", - "long": "Up to 5 Years Old" - }, - "_6y": { - "id": "up_to_6y_old", - "short": "<6y", - "long": "Up to 6 Years Old" - }, - "_7y": { - "id": "up_to_7y_old", - "short": "<7y", - "long": "Up to 7 Years Old" - }, - "_8y": { - "id": "up_to_8y_old", - "short": "<8y", - "long": "Up to 8 Years Old" - }, - "_10y": { - "id": "up_to_10y_old", - "short": "<10y", - "long": "Up to 10 Years Old" - }, - "_12y": { - "id": "up_to_12y_old", - "short": "<12y", - "long": "Up to 12 Years Old" - }, - "_15y": { - "id": "up_to_15y_old", - "short": "<15y", - "long": "Up to 15 Years Old" - } + "_1w": {"id": "up_to_1w_old", "short": "<1w", "long": "Up to 1 Week Old"}, + "_1m": {"id": "up_to_1m_old", "short": "<1m", "long": "Up to 1 Month Old"}, + "_2m": {"id": "up_to_2m_old", "short": "<2m", "long": "Up to 2 Months Old"}, + "_3m": {"id": "up_to_3m_old", "short": "<3m", "long": "Up to 3 Months Old"}, + "_4m": {"id": "up_to_4m_old", "short": "<4m", "long": "Up to 4 Months Old"}, + "_5m": {"id": "up_to_5m_old", "short": "<5m", "long": "Up to 5 Months Old"}, + "_6m": {"id": "up_to_6m_old", "short": "<6m", "long": "Up to 6 Months Old"}, + "_1y": {"id": "up_to_1y_old", "short": "<1y", "long": "Up to 1 Year Old"}, + "_2y": {"id": "up_to_2y_old", "short": "<2y", "long": "Up to 2 Years Old"}, + "_3y": {"id": "up_to_3y_old", "short": "<3y", "long": "Up to 3 Years Old"}, + "_4y": {"id": "up_to_4y_old", "short": "<4y", "long": "Up to 4 Years Old"}, + "_5y": {"id": "up_to_5y_old", "short": "<5y", "long": "Up to 5 Years Old"}, + "_6y": {"id": "up_to_6y_old", "short": "<6y", "long": "Up to 6 Years Old"}, + "_7y": {"id": "up_to_7y_old", "short": "<7y", "long": "Up to 7 Years Old"}, + "_8y": {"id": "up_to_8y_old", "short": "<8y", "long": "Up to 8 Years Old"}, + "_10y": {"id": "up_to_10y_old", "short": "<10y", "long": "Up to 10 Years Old"}, + "_12y": {"id": "up_to_12y_old", "short": "<12y", "long": "Up to 12 Years Old"}, + "_15y": {"id": "up_to_15y_old", "short": "<15y", "long": "Up to 15 Years Old"}, } MIN_AGE_NAMES = { - "_1d": { - "id": "at_least_1d_old", - "short": "1d+", - "long": "At Least 1 Day Old" - }, - "_1w": { - "id": "at_least_1w_old", - "short": "1w+", - "long": "At Least 1 Week Old" - }, - "_1m": { - "id": "at_least_1m_old", - "short": "1m+", - "long": "At Least 1 Month Old" - }, - "_2m": { - "id": "at_least_2m_old", - "short": "2m+", - "long": "At Least 2 Months Old" - }, - "_3m": { - "id": "at_least_3m_old", - "short": "3m+", - "long": "At Least 3 Months Old" - }, - "_4m": { - "id": "at_least_4m_old", - "short": "4m+", - "long": "At Least 4 Months Old" - }, - "_5m": { - "id": "at_least_5m_old", - "short": "5m+", - "long": "At Least 5 Months Old" - }, - "_6m": { - "id": "at_least_6m_old", - "short": "6m+", - "long": "At Least 6 Months Old" - }, - "_1y": { - "id": "at_least_1y_old", - "short": "1y+", - "long": "At Least 1 Year Old" - }, - "_2y": { - "id": "at_least_2y_old", - "short": "2y+", - "long": "At Least 2 Years Old" - }, - "_3y": { - "id": "at_least_3y_old", - "short": "3y+", - "long": "At Least 3 Years Old" - }, - "_4y": { - "id": "at_least_4y_old", - "short": "4y+", - "long": "At Least 4 Years Old" - }, - "_5y": { - "id": "at_least_5y_old", - "short": "5y+", - "long": "At Least 5 Years Old" - }, - "_6y": { - "id": "at_least_6y_old", - "short": "6y+", - "long": "At Least 6 Years Old" - }, - "_7y": { - "id": "at_least_7y_old", - "short": "7y+", - "long": "At Least 7 Years Old" - }, - "_8y": { - "id": "at_least_8y_old", - "short": "8y+", - "long": "At Least 8 Years Old" - }, - "_10y": { - "id": "at_least_10y_old", - "short": "10y+", - "long": "At Least 10 Years Old" - }, - "_12y": { - "id": "at_least_12y_old", - "short": "12y+", - "long": "At Least 12 Years Old" - } + "_1d": {"id": "at_least_1d_old", "short": "1d+", "long": "At Least 1 Day Old"}, + "_1w": {"id": "at_least_1w_old", "short": "1w+", "long": "At Least 1 Week Old"}, + "_1m": { + "id": "at_least_1m_old", + "short": "1m+", + "long": "At Least 1 Month Old", + }, + "_2m": { + "id": "at_least_2m_old", + "short": "2m+", + "long": "At Least 2 Months Old", + }, + "_3m": { + "id": "at_least_3m_old", + "short": "3m+", + "long": "At Least 3 Months Old", + }, + "_4m": { + "id": "at_least_4m_old", + "short": "4m+", + "long": "At Least 4 Months Old", + }, + "_5m": { + "id": "at_least_5m_old", + "short": "5m+", + "long": "At Least 5 Months Old", + }, + "_6m": { + "id": "at_least_6m_old", + "short": "6m+", + "long": "At Least 6 Months Old", + }, + "_1y": {"id": "at_least_1y_old", "short": "1y+", "long": "At Least 1 Year Old"}, + "_2y": { + "id": "at_least_2y_old", + "short": "2y+", + "long": "At Least 2 Years Old", + }, + "_3y": { + "id": "at_least_3y_old", + "short": "3y+", + "long": "At Least 3 Years Old", + }, + "_4y": { + "id": "at_least_4y_old", + "short": "4y+", + "long": "At Least 4 Years Old", + }, + "_5y": { + "id": "at_least_5y_old", + "short": "5y+", + "long": "At Least 5 Years Old", + }, + "_6y": { + "id": "at_least_6y_old", + "short": "6y+", + "long": "At Least 6 Years Old", + }, + "_7y": { + "id": "at_least_7y_old", + "short": "7y+", + "long": "At Least 7 Years Old", + }, + "_8y": { + "id": "at_least_8y_old", + "short": "8y+", + "long": "At Least 8 Years Old", + }, + "_10y": { + "id": "at_least_10y_old", + "short": "10y+", + "long": "At Least 10 Years Old", + }, + "_12y": { + "id": "at_least_12y_old", + "short": "12y+", + "long": "At Least 12 Years Old", + }, } AMOUNT_RANGE_NAMES = { - "_0sats": { - "id": "with_0sats", - "short": "0 sats", - "long": "0 Sats" - }, - "_1sat_to_10sats": { - "id": "above_1sat_under_10sats", - "short": "1-10 sats", - "long": "1 to 10 Sats" - }, - "_10sats_to_100sats": { - "id": "above_10sats_under_100sats", - "short": "10-100 sats", - "long": "10 to 100 Sats" - }, - "_100sats_to_1k_sats": { - "id": "above_100sats_under_1k_sats", - "short": "100-1k sats", - "long": "100 to 1K Sats" - }, - "_1k_sats_to_10k_sats": { - "id": "above_1k_sats_under_10k_sats", - "short": "1k-10k sats", - "long": "1K to 10K Sats" - }, - "_10k_sats_to_100k_sats": { - "id": "above_10k_sats_under_100k_sats", - "short": "10k-100k sats", - "long": "10K to 100K Sats" - }, - "_100k_sats_to_1m_sats": { - "id": "above_100k_sats_under_1m_sats", - "short": "100k-1M sats", - "long": "100K to 1M Sats" - }, - "_1m_sats_to_10m_sats": { - "id": "above_1m_sats_under_10m_sats", - "short": "1M-10M sats", - "long": "1M to 10M Sats" - }, - "_10m_sats_to_1btc": { - "id": "above_10m_sats_under_1btc", - "short": "0.1-1 BTC", - "long": "0.1 to 1 BTC" - }, - "_1btc_to_10btc": { - "id": "above_1btc_under_10btc", - "short": "1-10 BTC", - "long": "1 to 10 BTC" - }, - "_10btc_to_100btc": { - "id": "above_10btc_under_100btc", - "short": "10-100 BTC", - "long": "10 to 100 BTC" - }, - "_100btc_to_1k_btc": { - "id": "above_100btc_under_1k_btc", - "short": "100-1k BTC", - "long": "100 to 1K BTC" - }, - "_1k_btc_to_10k_btc": { - "id": "above_1k_btc_under_10k_btc", - "short": "1k-10k BTC", - "long": "1K to 10K BTC" - }, - "_10k_btc_to_100k_btc": { - "id": "above_10k_btc_under_100k_btc", - "short": "10k-100k BTC", - "long": "10K to 100K BTC" - }, - "_100k_btc_or_more": { - "id": "above_100k_btc", - "short": "100k+ BTC", - "long": "100K+ BTC" - } + "_0sats": {"id": "with_0sats", "short": "0 sats", "long": "0 Sats"}, + "_1sat_to_10sats": { + "id": "above_1sat_under_10sats", + "short": "1-10 sats", + "long": "1 to 10 Sats", + }, + "_10sats_to_100sats": { + "id": "above_10sats_under_100sats", + "short": "10-100 sats", + "long": "10 to 100 Sats", + }, + "_100sats_to_1k_sats": { + "id": "above_100sats_under_1k_sats", + "short": "100-1k sats", + "long": "100 to 1K Sats", + }, + "_1k_sats_to_10k_sats": { + "id": "above_1k_sats_under_10k_sats", + "short": "1k-10k sats", + "long": "1K to 10K Sats", + }, + "_10k_sats_to_100k_sats": { + "id": "above_10k_sats_under_100k_sats", + "short": "10k-100k sats", + "long": "10K to 100K Sats", + }, + "_100k_sats_to_1m_sats": { + "id": "above_100k_sats_under_1m_sats", + "short": "100k-1M sats", + "long": "100K to 1M Sats", + }, + "_1m_sats_to_10m_sats": { + "id": "above_1m_sats_under_10m_sats", + "short": "1M-10M sats", + "long": "1M to 10M Sats", + }, + "_10m_sats_to_1btc": { + "id": "above_10m_sats_under_1btc", + "short": "0.1-1 BTC", + "long": "0.1 to 1 BTC", + }, + "_1btc_to_10btc": { + "id": "above_1btc_under_10btc", + "short": "1-10 BTC", + "long": "1 to 10 BTC", + }, + "_10btc_to_100btc": { + "id": "above_10btc_under_100btc", + "short": "10-100 BTC", + "long": "10 to 100 BTC", + }, + "_100btc_to_1k_btc": { + "id": "above_100btc_under_1k_btc", + "short": "100-1k BTC", + "long": "100 to 1K BTC", + }, + "_1k_btc_to_10k_btc": { + "id": "above_1k_btc_under_10k_btc", + "short": "1k-10k BTC", + "long": "1K to 10K BTC", + }, + "_10k_btc_to_100k_btc": { + "id": "above_10k_btc_under_100k_btc", + "short": "10k-100k BTC", + "long": "10K to 100K BTC", + }, + "_100k_btc_or_more": { + "id": "above_100k_btc", + "short": "100k+ BTC", + "long": "100K+ BTC", + }, } GE_AMOUNT_NAMES = { - "_1sat": { - "id": "above_1sat", - "short": "1+ sats", - "long": "Above 1 Sat" - }, - "_10sats": { - "id": "above_10sats", - "short": "10+ sats", - "long": "Above 10 Sats" - }, - "_100sats": { - "id": "above_100sats", - "short": "100+ sats", - "long": "Above 100 Sats" - }, - "_1k_sats": { - "id": "above_1k_sats", - "short": "1k+ sats", - "long": "Above 1K Sats" - }, - "_10k_sats": { - "id": "above_10k_sats", - "short": "10k+ sats", - "long": "Above 10K Sats" - }, - "_100k_sats": { - "id": "above_100k_sats", - "short": "100k+ sats", - "long": "Above 100K Sats" - }, - "_1m_sats": { - "id": "above_1m_sats", - "short": "1M+ sats", - "long": "Above 1M Sats" - }, - "_10m_sats": { - "id": "above_10m_sats", - "short": "0.1+ BTC", - "long": "Above 0.1 BTC" - }, - "_1btc": { - "id": "above_1btc", - "short": "1+ BTC", - "long": "Above 1 BTC" - }, - "_10btc": { - "id": "above_10btc", - "short": "10+ BTC", - "long": "Above 10 BTC" - }, - "_100btc": { - "id": "above_100btc", - "short": "100+ BTC", - "long": "Above 100 BTC" - }, - "_1k_btc": { - "id": "above_1k_btc", - "short": "1k+ BTC", - "long": "Above 1K BTC" - }, - "_10k_btc": { - "id": "above_10k_btc", - "short": "10k+ BTC", - "long": "Above 10K BTC" - } + "_1sat": {"id": "above_1sat", "short": "1+ sats", "long": "Above 1 Sat"}, + "_10sats": {"id": "above_10sats", "short": "10+ sats", "long": "Above 10 Sats"}, + "_100sats": { + "id": "above_100sats", + "short": "100+ sats", + "long": "Above 100 Sats", + }, + "_1k_sats": { + "id": "above_1k_sats", + "short": "1k+ sats", + "long": "Above 1K Sats", + }, + "_10k_sats": { + "id": "above_10k_sats", + "short": "10k+ sats", + "long": "Above 10K Sats", + }, + "_100k_sats": { + "id": "above_100k_sats", + "short": "100k+ sats", + "long": "Above 100K Sats", + }, + "_1m_sats": { + "id": "above_1m_sats", + "short": "1M+ sats", + "long": "Above 1M Sats", + }, + "_10m_sats": { + "id": "above_10m_sats", + "short": "0.1+ BTC", + "long": "Above 0.1 BTC", + }, + "_1btc": {"id": "above_1btc", "short": "1+ BTC", "long": "Above 1 BTC"}, + "_10btc": {"id": "above_10btc", "short": "10+ BTC", "long": "Above 10 BTC"}, + "_100btc": {"id": "above_100btc", "short": "100+ BTC", "long": "Above 100 BTC"}, + "_1k_btc": {"id": "above_1k_btc", "short": "1k+ BTC", "long": "Above 1K BTC"}, + "_10k_btc": { + "id": "above_10k_btc", + "short": "10k+ BTC", + "long": "Above 10K BTC", + }, } LT_AMOUNT_NAMES = { - "_10sats": { - "id": "under_10sats", - "short": "<10 sats", - "long": "Under 10 Sats" - }, - "_100sats": { - "id": "under_100sats", - "short": "<100 sats", - "long": "Under 100 Sats" - }, - "_1k_sats": { - "id": "under_1k_sats", - "short": "<1k sats", - "long": "Under 1K Sats" - }, - "_10k_sats": { - "id": "under_10k_sats", - "short": "<10k sats", - "long": "Under 10K Sats" - }, - "_100k_sats": { - "id": "under_100k_sats", - "short": "<100k sats", - "long": "Under 100K Sats" - }, - "_1m_sats": { - "id": "under_1m_sats", - "short": "<1M sats", - "long": "Under 1M Sats" - }, - "_10m_sats": { - "id": "under_10m_sats", - "short": "<0.1 BTC", - "long": "Under 0.1 BTC" - }, - "_1btc": { - "id": "under_1btc", - "short": "<1 BTC", - "long": "Under 1 BTC" - }, - "_10btc": { - "id": "under_10btc", - "short": "<10 BTC", - "long": "Under 10 BTC" - }, - "_100btc": { - "id": "under_100btc", - "short": "<100 BTC", - "long": "Under 100 BTC" - }, - "_1k_btc": { - "id": "under_1k_btc", - "short": "<1k BTC", - "long": "Under 1K BTC" - }, - "_10k_btc": { - "id": "under_10k_btc", - "short": "<10k BTC", - "long": "Under 10K BTC" - }, - "_100k_btc": { - "id": "under_100k_btc", - "short": "<100k BTC", - "long": "Under 100K BTC" - } + "_10sats": {"id": "under_10sats", "short": "<10 sats", "long": "Under 10 Sats"}, + "_100sats": { + "id": "under_100sats", + "short": "<100 sats", + "long": "Under 100 Sats", + }, + "_1k_sats": { + "id": "under_1k_sats", + "short": "<1k sats", + "long": "Under 1K Sats", + }, + "_10k_sats": { + "id": "under_10k_sats", + "short": "<10k sats", + "long": "Under 10K Sats", + }, + "_100k_sats": { + "id": "under_100k_sats", + "short": "<100k sats", + "long": "Under 100K Sats", + }, + "_1m_sats": { + "id": "under_1m_sats", + "short": "<1M sats", + "long": "Under 1M Sats", + }, + "_10m_sats": { + "id": "under_10m_sats", + "short": "<0.1 BTC", + "long": "Under 0.1 BTC", + }, + "_1btc": {"id": "under_1btc", "short": "<1 BTC", "long": "Under 1 BTC"}, + "_10btc": {"id": "under_10btc", "short": "<10 BTC", "long": "Under 10 BTC"}, + "_100btc": {"id": "under_100btc", "short": "<100 BTC", "long": "Under 100 BTC"}, + "_1k_btc": {"id": "under_1k_btc", "short": "<1k BTC", "long": "Under 1K BTC"}, + "_10k_btc": { + "id": "under_10k_btc", + "short": "<10k BTC", + "long": "Under 10K BTC", + }, + "_100k_btc": { + "id": "under_100k_btc", + "short": "<100k BTC", + "long": "Under 100K BTC", + }, } - def __init__(self, base_url: str = 'http://localhost:3000', timeout: float = 30.0): + def __init__(self, base_url: str = "http://localhost:3000", timeout: float = 30.0): super().__init__(base_url, timeout) self.metrics = MetricsTree(self) @@ -5342,126 +7277,154 @@ class BrkClient(BrkClientBase): """Address information. Retrieve comprehensive information about a Bitcoin address including balance, transaction history, UTXOs, and estimated investment metrics. Supports all standard Bitcoin address types (P2PKH, P2SH, P2WPKH, P2WSH, P2TR, etc.).""" - return self.get_json(f'/api/address/{address}') + return self.get_json(f"/api/address/{address}") - def get_address_txs(self, address: Address, after_txid: Optional[str] = None, limit: Optional[float] = None) -> List[Txid]: + def get_address_txs( + self, + address: Address, + after_txid: Optional[str] = None, + limit: Optional[float] = None, + ) -> List[Txid]: """Address transaction IDs. Get transaction IDs for an address, newest first. Use after_txid for pagination.""" params = [] - if after_txid is not None: params.append(f'after_txid={after_txid}') - if limit is not None: params.append(f'limit={limit}') - query = '&'.join(params) - path = f'/api/address/{address}/txs{"?" + query if query else ""}' + if after_txid is not None: + params.append(f"after_txid={after_txid}") + if limit is not None: + params.append(f"limit={limit}") + query = "&".join(params) + path = f"/api/address/{address}/txs{'?' + query if query else ''}" return self.get_json(path) - def get_address_txs_chain(self, address: Address, after_txid: Optional[str] = None, limit: Optional[float] = None) -> List[Txid]: + def get_address_txs_chain( + self, + address: Address, + after_txid: Optional[str] = None, + limit: Optional[float] = None, + ) -> List[Txid]: """Address confirmed transactions. Get confirmed transaction IDs for an address, 25 per page. Use ?after_txid= for pagination.""" params = [] - if after_txid is not None: params.append(f'after_txid={after_txid}') - if limit is not None: params.append(f'limit={limit}') - query = '&'.join(params) - path = f'/api/address/{address}/txs/chain{"?" + query if query else ""}' + if after_txid is not None: + params.append(f"after_txid={after_txid}") + if limit is not None: + params.append(f"limit={limit}") + query = "&".join(params) + path = f"/api/address/{address}/txs/chain{'?' + query if query else ''}" return self.get_json(path) def get_address_txs_mempool(self, address: Address) -> List[Txid]: """Address mempool transactions. Get unconfirmed transaction IDs for an address from the mempool (up to 50).""" - return self.get_json(f'/api/address/{address}/txs/mempool') + return self.get_json(f"/api/address/{address}/txs/mempool") def get_address_utxo(self, address: Address) -> List[Utxo]: """Address UTXOs. Get unspent transaction outputs for an address.""" - return self.get_json(f'/api/address/{address}/utxo') + return self.get_json(f"/api/address/{address}/utxo") def get_block_height(self, height: Height) -> BlockInfo: """Block by height. Retrieve block information by block height. Returns block metadata including hash, timestamp, difficulty, size, weight, and transaction count.""" - return self.get_json(f'/api/block-height/{height}') + return self.get_json(f"/api/block-height/{height}") def get_block_by_hash(self, hash: BlockHash) -> BlockInfo: """Block information. Retrieve block information by block hash. Returns block metadata including height, timestamp, difficulty, size, weight, and transaction count.""" - return self.get_json(f'/api/block/{hash}') + return self.get_json(f"/api/block/{hash}") def get_block_by_hash_raw(self, hash: BlockHash) -> List[float]: """Raw block. Returns the raw block data in binary format.""" - return self.get_json(f'/api/block/{hash}/raw') + return self.get_json(f"/api/block/{hash}/raw") def get_block_by_hash_status(self, hash: BlockHash) -> BlockStatus: """Block status. Retrieve the status of a block. Returns whether the block is in the best chain and, if so, its height and the hash of the next block.""" - return self.get_json(f'/api/block/{hash}/status') + return self.get_json(f"/api/block/{hash}/status") def get_block_by_hash_txid_by_index(self, hash: BlockHash, index: TxIndex) -> Txid: """Transaction ID at index. Retrieve a single transaction ID at a specific index within a block. Returns plain text txid.""" - return self.get_json(f'/api/block/{hash}/txid/{index}') + return self.get_json(f"/api/block/{hash}/txid/{index}") def get_block_by_hash_txids(self, hash: BlockHash) -> List[Txid]: """Block transaction IDs. Retrieve all transaction IDs in a block by block hash.""" - return self.get_json(f'/api/block/{hash}/txids') + return self.get_json(f"/api/block/{hash}/txids") - def get_block_by_hash_txs_by_start_index(self, hash: BlockHash, start_index: TxIndex) -> List[Transaction]: + def get_block_by_hash_txs_by_start_index( + self, hash: BlockHash, start_index: TxIndex + ) -> List[Transaction]: """Block transactions (paginated). Retrieve transactions in a block by block hash, starting from the specified index. Returns up to 25 transactions at a time.""" - return self.get_json(f'/api/block/{hash}/txs/{start_index}') + return self.get_json(f"/api/block/{hash}/txs/{start_index}") def get_blocks(self) -> List[BlockInfo]: """Recent blocks. Retrieve the last 10 blocks. Returns block metadata for each block.""" - return self.get_json('/api/blocks') + return self.get_json("/api/blocks") def get_blocks_by_height(self, height: Height) -> List[BlockInfo]: """Blocks from height. Retrieve up to 10 blocks going backwards from the given height. For example, height=100 returns blocks 100, 99, 98, ..., 91. Height=0 returns only block 0.""" - return self.get_json(f'/api/blocks/{height}') + return self.get_json(f"/api/blocks/{height}") def get_mempool_info(self) -> MempoolInfo: """Mempool statistics. Get current mempool statistics including transaction count, total vsize, and total fees.""" - return self.get_json('/api/mempool/info') + return self.get_json("/api/mempool/info") def get_mempool_txids(self) -> List[Txid]: """Mempool transaction IDs. Get all transaction IDs currently in the mempool.""" - return self.get_json('/api/mempool/txids') + return self.get_json("/api/mempool/txids") def get_metric(self, metric: Metric) -> List[Index]: """Get supported indexes for a metric. Returns the list of indexes are supported by the specified metric. For example, `realized_price` might be available on dateindex, weekindex, and monthindex.""" - return self.get_json(f'/api/metric/{metric}') + return self.get_json(f"/api/metric/{metric}") - def get_metric_by_index(self, metric: Metric, index: Index, start: Optional[float] = None, end: Optional[float] = None, count: Optional[float] = None, format: Optional[Format] = None) -> Union[AnyMetricData, str]: + def get_metric_by_index( + self, + metric: Metric, + index: Index, + start: Optional[float] = None, + end: Optional[float] = None, + limit: Optional[str] = None, + format: Optional[Format] = None, + ) -> Union[AnyMetricData, str]: """Get metric data. Fetch data for a specific metric at the given index. Use query parameters to filter by date range and format (json/csv).""" params = [] - if start is not None: params.append(f'start={start}') - if end is not None: params.append(f'end={end}') - if count is not None: params.append(f'count={count}') - if format is not None: params.append(f'format={format}') - query = '&'.join(params) - path = f'/api/metric/{metric}/{index}{"?" + query if query else ""}' - if format == 'csv': + if start is not None: + params.append(f"start={start}") + if end is not None: + params.append(f"end={end}") + if limit is not None: + params.append(f"limit={limit}") + if format is not None: + params.append(f"format={format}") + query = "&".join(params) + path = f"/api/metric/{metric}/{index}{'?' + query if query else ''}" + if format == "csv": return self.get_text(path) return self.get_json(path) @@ -5469,22 +7432,34 @@ class BrkClient(BrkClientBase): """Metrics catalog. Returns the complete hierarchical catalog of available metrics organized as a tree structure. Metrics are grouped by categories and subcategories. Best viewed in an interactive JSON viewer (e.g., Firefox's built-in JSON viewer) for easy navigation of the nested structure.""" - return self.get_json('/api/metrics') + return self.get_json("/api/metrics") - def get_metrics_bulk(self, metrics: Metrics, index: Index, start: Optional[float] = None, end: Optional[float] = None, count: Optional[float] = None, format: Optional[Format] = None) -> Union[List[AnyMetricData], str]: + def get_metrics_bulk( + self, + metrics: Metrics, + index: Index, + start: Optional[float] = None, + end: Optional[float] = None, + limit: Optional[str] = None, + format: Optional[Format] = None, + ) -> Union[List[AnyMetricData], str]: """Bulk metric data. Fetch multiple metrics in a single request. Supports filtering by index and date range. Returns an array of MetricData objects.""" params = [] - params.append(f'metrics={metrics}') - params.append(f'index={index}') - if start is not None: params.append(f'start={start}') - if end is not None: params.append(f'end={end}') - if count is not None: params.append(f'count={count}') - if format is not None: params.append(f'format={format}') - query = '&'.join(params) - path = f'/api/metrics/bulk{"?" + query if query else ""}' - if format == 'csv': + params.append(f"metrics={metrics}") + params.append(f"index={index}") + if start is not None: + params.append(f"start={start}") + if end is not None: + params.append(f"end={end}") + if limit is not None: + params.append(f"limit={limit}") + if format is not None: + params.append(f"format={format}") + query = "&".join(params) + path = f"/api/metrics/bulk{'?' + query if query else ''}" + if format == "csv": return self.get_text(path) return self.get_json(path) @@ -5492,169 +7467,186 @@ class BrkClient(BrkClientBase): """Metric count. Current metric count""" - return self.get_json('/api/metrics/count') + return self.get_json("/api/metrics/count") def get_metrics_indexes(self) -> List[IndexInfo]: """List available indexes. Returns all available indexes with their accepted query aliases. Use any alias when querying metrics.""" - return self.get_json('/api/metrics/indexes') + return self.get_json("/api/metrics/indexes") def get_metrics_list(self, page: Optional[float] = None) -> PaginatedMetrics: """Metrics list. Paginated list of available metrics""" params = [] - if page is not None: params.append(f'page={page}') - query = '&'.join(params) - path = f'/api/metrics/list{"?" + query if query else ""}' + if page is not None: + params.append(f"page={page}") + query = "&".join(params) + path = f"/api/metrics/list{'?' + query if query else ''}" return self.get_json(path) - def get_metrics_search_by_metric(self, metric: Metric, limit: Optional[Limit] = None) -> List[Metric]: + def get_metrics_search_by_metric( + self, metric: Metric, limit: Optional[Limit] = None + ) -> List[Metric]: """Search metrics. Fuzzy search for metrics by name. Supports partial matches and typos.""" params = [] - if limit is not None: params.append(f'limit={limit}') - query = '&'.join(params) - path = f'/api/metrics/search/{metric}{"?" + query if query else ""}' + if limit is not None: + params.append(f"limit={limit}") + query = "&".join(params) + path = f"/api/metrics/search/{metric}{'?' + query if query else ''}" return self.get_json(path) def get_tx_by_txid(self, txid: Txid) -> Transaction: """Transaction information. Retrieve complete transaction data by transaction ID (txid). Returns the full transaction details including inputs, outputs, and metadata. The transaction data is read directly from the blockchain data files.""" - return self.get_json(f'/api/tx/{txid}') + return self.get_json(f"/api/tx/{txid}") def get_tx_by_txid_hex(self, txid: Txid) -> Hex: """Transaction hex. Retrieve the raw transaction as a hex-encoded string. Returns the serialized transaction in hexadecimal format.""" - return self.get_json(f'/api/tx/{txid}/hex') + return self.get_json(f"/api/tx/{txid}/hex") def get_tx_by_txid_outspend_by_vout(self, txid: Txid, vout: Vout) -> TxOutspend: """Output spend status. Get the spending status of a transaction output. Returns whether the output has been spent and, if so, the spending transaction details.""" - return self.get_json(f'/api/tx/{txid}/outspend/{vout}') + return self.get_json(f"/api/tx/{txid}/outspend/{vout}") def get_tx_by_txid_outspends(self, txid: Txid) -> List[TxOutspend]: """All output spend statuses. Get the spending status of all outputs in a transaction. Returns an array with the spend status for each output.""" - return self.get_json(f'/api/tx/{txid}/outspends') + return self.get_json(f"/api/tx/{txid}/outspends") def get_tx_by_txid_status(self, txid: Txid) -> TxStatus: """Transaction status. Retrieve the confirmation status of a transaction. Returns whether the transaction is confirmed and, if so, the block height, hash, and timestamp.""" - return self.get_json(f'/api/tx/{txid}/status') + return self.get_json(f"/api/tx/{txid}/status") def get_v1_difficulty_adjustment(self) -> DifficultyAdjustment: """Difficulty adjustment. Get current difficulty adjustment information including progress through the current epoch, estimated retarget date, and difficulty change prediction.""" - return self.get_json('/api/v1/difficulty-adjustment') + return self.get_json("/api/v1/difficulty-adjustment") def get_v1_fees_mempool_blocks(self) -> List[MempoolBlock]: """Projected mempool blocks. Get projected blocks from the mempool for fee estimation. Each block contains statistics about transactions that would be included if a block were mined now.""" - return self.get_json('/api/v1/fees/mempool-blocks') + return self.get_json("/api/v1/fees/mempool-blocks") def get_v1_fees_recommended(self) -> RecommendedFees: """Recommended fees. Get recommended fee rates for different confirmation targets based on current mempool state.""" - return self.get_json('/api/v1/fees/recommended') + return self.get_json("/api/v1/fees/recommended") - def get_v1_mining_blocks_fees_by_time_period(self, time_period: TimePeriod) -> List[BlockFeesEntry]: + def get_v1_mining_blocks_fees_by_time_period( + self, time_period: TimePeriod + ) -> List[BlockFeesEntry]: """Block fees. Get average block fees for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y""" - return self.get_json(f'/api/v1/mining/blocks/fees/{time_period}') + return self.get_json(f"/api/v1/mining/blocks/fees/{time_period}") - def get_v1_mining_blocks_rewards_by_time_period(self, time_period: TimePeriod) -> List[BlockRewardsEntry]: + def get_v1_mining_blocks_rewards_by_time_period( + self, time_period: TimePeriod + ) -> List[BlockRewardsEntry]: """Block rewards. Get average block rewards (coinbase = subsidy + fees) for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y""" - return self.get_json(f'/api/v1/mining/blocks/rewards/{time_period}') + return self.get_json(f"/api/v1/mining/blocks/rewards/{time_period}") - def get_v1_mining_blocks_sizes_weights_by_time_period(self, time_period: TimePeriod) -> BlockSizesWeights: + def get_v1_mining_blocks_sizes_weights_by_time_period( + self, time_period: TimePeriod + ) -> BlockSizesWeights: """Block sizes and weights. Get average block sizes and weights for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y""" - return self.get_json(f'/api/v1/mining/blocks/sizes-weights/{time_period}') + return self.get_json(f"/api/v1/mining/blocks/sizes-weights/{time_period}") def get_v1_mining_blocks_timestamp(self, timestamp: Timestamp) -> BlockTimestamp: """Block by timestamp. Find the block closest to a given UNIX timestamp.""" - return self.get_json(f'/api/v1/mining/blocks/timestamp/{timestamp}') + return self.get_json(f"/api/v1/mining/blocks/timestamp/{timestamp}") def get_v1_mining_difficulty_adjustments(self) -> List[DifficultyAdjustmentEntry]: """Difficulty adjustments (all time). Get historical difficulty adjustments. Returns array of [timestamp, height, difficulty, change_percent].""" - return self.get_json('/api/v1/mining/difficulty-adjustments') + return self.get_json("/api/v1/mining/difficulty-adjustments") - def get_v1_mining_difficulty_adjustments_by_time_period(self, time_period: TimePeriod) -> List[DifficultyAdjustmentEntry]: + def get_v1_mining_difficulty_adjustments_by_time_period( + self, time_period: TimePeriod + ) -> List[DifficultyAdjustmentEntry]: """Difficulty adjustments. Get historical difficulty adjustments for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y. Returns array of [timestamp, height, difficulty, change_percent].""" - return self.get_json(f'/api/v1/mining/difficulty-adjustments/{time_period}') + return self.get_json(f"/api/v1/mining/difficulty-adjustments/{time_period}") def get_v1_mining_hashrate(self) -> HashrateSummary: """Network hashrate (all time). Get network hashrate and difficulty data for all time.""" - return self.get_json('/api/v1/mining/hashrate') + return self.get_json("/api/v1/mining/hashrate") - def get_v1_mining_hashrate_by_time_period(self, time_period: TimePeriod) -> HashrateSummary: + def get_v1_mining_hashrate_by_time_period( + self, time_period: TimePeriod + ) -> HashrateSummary: """Network hashrate. Get network hashrate and difficulty data for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y""" - return self.get_json(f'/api/v1/mining/hashrate/{time_period}') + return self.get_json(f"/api/v1/mining/hashrate/{time_period}") def get_v1_mining_pool_by_slug(self, slug: PoolSlug) -> PoolDetail: """Mining pool details. Get detailed information about a specific mining pool including block counts and shares for different time periods.""" - return self.get_json(f'/api/v1/mining/pool/{slug}') + return self.get_json(f"/api/v1/mining/pool/{slug}") def get_v1_mining_pools(self) -> List[PoolInfo]: """List all mining pools. Get list of all known mining pools with their identifiers.""" - return self.get_json('/api/v1/mining/pools') + return self.get_json("/api/v1/mining/pools") - def get_v1_mining_pools_by_time_period(self, time_period: TimePeriod) -> PoolsSummary: + def get_v1_mining_pools_by_time_period( + self, time_period: TimePeriod + ) -> PoolsSummary: """Mining pool statistics. Get mining pool statistics for a time period. Valid periods: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y""" - return self.get_json(f'/api/v1/mining/pools/{time_period}') + return self.get_json(f"/api/v1/mining/pools/{time_period}") - def get_v1_mining_reward_stats_by_block_count(self, block_count: float) -> RewardStats: + def get_v1_mining_reward_stats_by_block_count( + self, block_count: float + ) -> RewardStats: """Mining reward statistics. Get mining reward statistics for the last N blocks including total rewards, fees, and transaction count.""" - return self.get_json(f'/api/v1/mining/reward-stats/{block_count}') + return self.get_json(f"/api/v1/mining/reward-stats/{block_count}") def get_v1_validate_address(self, address: str) -> AddressValidation: """Validate address. Validate a Bitcoin address and get information about its type and scriptPubKey.""" - return self.get_json(f'/api/v1/validate-address/{address}') + return self.get_json(f"/api/v1/validate-address/{address}") def get_health(self) -> Health: """Health check. Returns the health status of the API server""" - return self.get_json('/health') + return self.get_json("/health") def get_version(self) -> str: """API version. Returns the current version of the API server""" - return self.get_json('/version') - + return self.get_json("/version") diff --git a/websites/bitview/index.html b/websites/bitview/index.html index 6f7af19d0..e3b9ea5d5 100644 --- a/websites/bitview/index.html +++ b/websites/bitview/index.html @@ -1563,7 +1563,7 @@ - + @@ -1634,7 +1634,7 @@ "/scripts/entry.js": "/scripts/entry.fe229b42.js", "/scripts/lazy.js": "/scripts/lazy.1ae52534.js", "/scripts/main.js": "/scripts/main.22a5bd79.js", - "/scripts/modules/brk-client/index.js": "/scripts/modules/brk-client/index.22379f83.js", + "/scripts/modules/brk-client/index.js": "/scripts/modules/brk-client/index.f69b33ed.js", "/scripts/modules/brk-client/tests/basic.js": "/scripts/modules/brk-client/tests/basic.b92ff866.js", "/scripts/modules/brk-client/tests/tree.js": "/scripts/modules/brk-client/tests/tree.ba9474f7.js", "/scripts/modules/lean-qr/2.6.1/index.mjs": "/scripts/modules/lean-qr/2.6.1/index.09195c13.mjs", diff --git a/websites/bitview/scripts/chart/index.js b/websites/bitview/scripts/chart/index.js index 25553c09f..a224fa588 100644 --- a/websites/bitview/scripts/chart/index.js +++ b/websites/bitview/scripts/chart/index.js @@ -384,8 +384,8 @@ function createChartElement({ /** @type {AnyMetricPattern} */ const timeMetric = index === "height" - ? brk.tree.blocks.time.timestampFixed - : brk.tree.blocks.time.timestamp; + ? brk.metrics.blocks.time.timestampFixed + : brk.metrics.blocks.time.timestamp; /** @type {AnyMetricPattern} */ const valuesMetric = metric; const timeNode = timeMetric.by[index]; diff --git a/websites/bitview/scripts/entry.js b/websites/bitview/scripts/entry.js index 0931e5e1d..3c0d5eea7 100644 --- a/websites/bitview/scripts/entry.js +++ b/websites/bitview/scripts/entry.js @@ -5,7 +5,7 @@ * * @import { Signal, Signals, Accessor } from "./signals.js"; * - * @import { BrkClient, CatalogTree_Distribution_UtxoCohorts as UtxoCohortTree, CatalogTree_Distribution_AddressCohorts as AddressCohortTree, CatalogTree_Distribution_UtxoCohorts_All as AllUtxoPattern, CatalogTree_Distribution_UtxoCohorts_Term_Short as ShortTermPattern, CatalogTree_Distribution_UtxoCohorts_Term_Long as LongTermPattern, _10yPattern as MaxAgePattern, _10yTo12yPattern as AgeRangePattern, _0satsPattern2 as UtxoAmountPattern, _0satsPattern as AddressAmountPattern, _100btcPattern as BasicUtxoPattern, _0satsPattern2 as EpochPattern, Ratio1ySdPattern, Dollars, Price111dSmaPattern as EmaRatioPattern, Index, BlockCountPattern, SizePattern, FullnessPattern, FeeRatePattern, CoinbasePattern, ActivePriceRatioPattern, _0satsPattern, UnclaimedRewardsPattern as ValuePattern, Metric, MetricPattern, AnyMetricPattern, MetricEndpoint, MetricData, AnyMetricEndpoint, AnyMetricData, AddrCountPattern, CatalogTree_Blocks_Interval as IntervalPattern, _24hCoinbaseSumPattern as SupplyPattern, RelativePattern, RelativePattern2, RelativePattern5, CatalogTree_Distribution_UtxoCohorts_All_Relative as AllRelativePattern } from "./modules/brk-client/index.js" + * @import { BrkClient, MetricsTree_Distribution_UtxoCohorts as UtxoCohortTree, MetricsTree_Distribution_AddressCohorts as AddressCohortTree, MetricsTree_Distribution_UtxoCohorts_All as AllUtxoPattern, MetricsTree_Distribution_UtxoCohorts_Term_Short as ShortTermPattern, MetricsTree_Distribution_UtxoCohorts_Term_Long as LongTermPattern, _10yPattern as MaxAgePattern, _10yTo12yPattern as AgeRangePattern, _0satsPattern2 as UtxoAmountPattern, _0satsPattern as AddressAmountPattern, _100btcPattern as BasicUtxoPattern, _0satsPattern2 as EpochPattern, Ratio1ySdPattern, Dollars, Price111dSmaPattern as EmaRatioPattern, Index, BlockCountPattern, SizePattern, FullnessPattern, FeeRatePattern, CoinbasePattern, ActivePriceRatioPattern, _0satsPattern, UnclaimedRewardsPattern as ValuePattern, Metric, MetricPattern, AnyMetricPattern, MetricEndpoint, MetricData, AnyMetricEndpoint, AnyMetricData, AddrCountPattern, MetricsTree_Blocks_Interval as IntervalPattern, _24hCoinbaseSumPattern as SupplyPattern, RelativePattern, RelativePattern2, RelativePattern5, MetricsTree_Distribution_UtxoCohorts_All_Relative as AllRelativePattern } from "./modules/brk-client/index.js" * * @import { Resources, MetricResource } from './resources.js' * diff --git a/websites/bitview/scripts/options/chain.js b/websites/bitview/scripts/options/chain.js index a1b92f4a8..d03645737 100644 --- a/websites/bitview/scripts/options/chain.js +++ b/websites/bitview/scripts/options/chain.js @@ -31,7 +31,7 @@ export function createChainSection(ctx) { market, scripts, supply, - } = brk.tree; + } = brk.metrics; // Build pools tree dynamically const poolEntries = Object.entries(pools.vecs); diff --git a/websites/bitview/scripts/options/cohorts/data.js b/websites/bitview/scripts/options/cohorts/data.js index d64617fc6..34901188e 100644 --- a/websites/bitview/scripts/options/cohorts/data.js +++ b/websites/bitview/scripts/options/cohorts/data.js @@ -1,4 +1,4 @@ -/** Build cohort data arrays from brk.tree */ +/** Build cohort data arrays from brk.metrics */ import { termColors, @@ -28,8 +28,8 @@ const entries = (obj) => * @param {BrkClient} brk */ export function buildCohortData(colors, brk) { - const utxoCohorts = brk.tree.distribution.utxoCohorts; - const addressCohorts = brk.tree.distribution.addressCohorts; + const utxoCohorts = brk.metrics.distribution.utxoCohorts; + const addressCohorts = brk.metrics.distribution.addressCohorts; const { TERM_NAMES, EPOCH_NAMES, diff --git a/websites/bitview/scripts/options/cohorts/shared.js b/websites/bitview/scripts/options/cohorts/shared.js index beffd4417..608bdfc2a 100644 --- a/websites/bitview/scripts/options/cohorts/shared.js +++ b/websites/bitview/scripts/options/cohorts/shared.js @@ -144,7 +144,7 @@ export function createSingleSupplySeries(ctx, cohort) { */ export function createGroupedSupplyTotalSeries(ctx, list) { const { line, brk } = ctx; - const constant100 = brk.tree.constants.constant100; + const constant100 = brk.metrics.constants.constant100; return list.flatMap(({ color, name, tree }) => [ line({ metric: tree.supply.total.sats, name, color, unit: Unit.sats }), diff --git a/websites/bitview/scripts/options/cointime.js b/websites/bitview/scripts/options/cointime.js index 4703b53cf..654e2400a 100644 --- a/websites/bitview/scripts/options/cointime.js +++ b/websites/bitview/scripts/options/cointime.js @@ -172,7 +172,7 @@ function createCointimePriceWithRatioOptions( */ export function createCointimeSection(ctx) { const { colors, brk, line } = ctx; - const { cointime, distribution, supply } = brk.tree; + const { cointime, distribution, supply } = brk.metrics; const { pricing, cap, activity, supply: cointimeSupply, adjusted } = cointime; const { all } = distribution.utxoCohorts; diff --git a/websites/bitview/scripts/options/constants.js b/websites/bitview/scripts/options/constants.js index c242c92c9..abfcf1e7f 100644 --- a/websites/bitview/scripts/options/constants.js +++ b/websites/bitview/scripts/options/constants.js @@ -5,7 +5,7 @@ import { line } from "./series.js"; /** * Get constant pattern by number dynamically from tree * Examples: 0 → constant0, 38.2 → constant382, -1 → constantMinus1 - * @param {BrkClient["tree"]["constants"]} constants + * @param {BrkClient["metrics"]["constants"]} constants * @param {number} num * @returns {AnyMetricPattern} */ @@ -24,7 +24,7 @@ export function getConstant(constants, num) { /** * Create a price line series (horizontal reference line) * @param {Object} args - * @param {BrkClient["tree"]["constants"]} args.constants + * @param {BrkClient["metrics"]["constants"]} args.constants * @param {Colors} args.colors * @param {number} [args.number] * @param {string} [args.name] @@ -61,7 +61,7 @@ export function createPriceLine({ /** * Create multiple price lines from an array of numbers * @param {Object} args - * @param {BrkClient["tree"]["constants"]} args.constants + * @param {BrkClient["metrics"]["constants"]} args.constants * @param {Colors} args.colors * @param {number[]} args.numbers * @param {Unit} args.unit diff --git a/websites/bitview/scripts/options/context.js b/websites/bitview/scripts/options/context.js index 24dee5e24..4882c5a22 100644 --- a/websites/bitview/scripts/options/context.js +++ b/websites/bitview/scripts/options/context.js @@ -15,7 +15,11 @@ import { fromIntervalPattern, fromSupplyPattern, } from "./series.js"; -import { createPriceLine, createPriceLines, constantLine } from "./constants.js"; +import { + createPriceLine, + createPriceLines, + constantLine, +} from "./constants.js"; /** * Create a context object with all dependencies for building partial options @@ -25,7 +29,7 @@ import { createPriceLine, createPriceLines, constantLine } from "./constants.js" * @returns {PartialContext} */ export function createContext({ colors, brk }) { - const constants = brk.tree.constants; + const constants = brk.metrics.constants; return { colors, diff --git a/websites/bitview/scripts/options/full.js b/websites/bitview/scripts/options/full.js index 54d99b1f1..bb50c8a21 100644 --- a/websites/bitview/scripts/options/full.js +++ b/websites/bitview/scripts/options/full.js @@ -17,7 +17,7 @@ import { collect, markUsed, logUnused } from "./unused.js"; * @param {Signal} args.qrcode */ export function initOptions({ colors, signals, brk, qrcode }) { - collect(brk.tree); + collect(brk.metrics); const LS_SELECTED_KEY = `selected_path`; @@ -56,9 +56,7 @@ export function initOptions({ colors, signals, brk, qrcode }) { ); } if (!blueprint.unit) { - throw new Error( - `Blueprint missing unit: ${blueprint.title}`, - ); + throw new Error(`Blueprint missing unit: ${blueprint.title}`); } markUsed(blueprint.metric); const unit = blueprint.unit; diff --git a/websites/bitview/scripts/options/market/index.js b/websites/bitview/scripts/options/market/index.js index 02036ca91..90456420f 100644 --- a/websites/bitview/scripts/options/market/index.js +++ b/websites/bitview/scripts/options/market/index.js @@ -13,7 +13,7 @@ import { createInvestingSection } from "./investing.js"; */ export function createMarketSection(ctx) { const { colors, brk, line } = ctx; - const { market, supply } = brk.tree; + const { market, supply } = brk.metrics; const { movingAverage, ath, diff --git a/websites/bitview/scripts/panes/chart/index.js b/websites/bitview/scripts/panes/chart/index.js index 747ffaad8..315838fca 100644 --- a/websites/bitview/scripts/panes/chart/index.js +++ b/websites/bitview/scripts/panes/chart/index.js @@ -331,7 +331,7 @@ export function init({ case null: case CANDLE: { series = chart.addCandlestickSeries({ - metric: brk.tree.price.usd.ohlc, + metric: brk.metrics.price.usd.ohlc, name: "Price", unit: topUnit, setDataCallback: printLatest, @@ -341,7 +341,7 @@ export function init({ } case LINE: { series = chart.addLineSeries({ - metric: brk.tree.price.usd.split.close, + metric: brk.metrics.price.usd.split.close, name: "Price", unit: topUnit, color: colors.default, @@ -361,7 +361,7 @@ export function init({ case null: case CANDLE: { series = chart.addCandlestickSeries({ - metric: brk.tree.price.sats.ohlc, + metric: brk.metrics.price.sats.ohlc, name: "Price", unit: topUnit, inverse: true, @@ -372,7 +372,7 @@ export function init({ } case LINE: { series = chart.addLineSeries({ - metric: brk.tree.price.sats.split.close, + metric: brk.metrics.price.sats.split.close, name: "Price", unit: topUnit, color: colors.default,