global: snapshot

This commit is contained in:
nym21
2025-05-28 15:42:55 +02:00
parent 93e01902e3
commit 9bbf3a027f
17 changed files with 1201 additions and 624 deletions
Generated
+47 -47
View File
@@ -749,18 +749,18 @@ dependencies = [
[[package]]
name = "clap"
version = "4.5.38"
version = "4.5.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000"
checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f"
dependencies = [
"clap_builder",
]
[[package]]
name = "clap_builder"
version = "4.5.38"
version = "4.5.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120"
checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51"
dependencies = [
"anstream",
"anstyle",
@@ -1405,12 +1405,12 @@ dependencies = [
[[package]]
name = "hyper-util"
version = "0.1.12"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf9f1e950e0d9d1d3c47184416723cf29c0d1f93bd8cccf37e4beb6b44f31710"
checksum = "b1c293b6b3d21eca78250dc7dbebd6b9210ec5530e038cbfe0661b5c47ab06e8"
dependencies = [
"bytes",
"futures-util",
"futures-core",
"http",
"http-body",
"hyper",
@@ -1830,9 +1830,9 @@ checksum = "26995317201fa17f3656c36716aed4a7c81743a9634ac4c99c0eeda495db0cec"
[[package]]
name = "oxc"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86a761cfb7ce8c7d07e0bb5a43d8676ae69de62b2d19a542c131784049ad22cb"
checksum = "61a4d9521b1c1c9750bef7fd133b542d48b0073097da97b0e0bbb89b6b59bc6c"
dependencies = [
"oxc_allocator",
"oxc_ast",
@@ -1873,9 +1873,9 @@ dependencies = [
[[package]]
name = "oxc_allocator"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0769ed37977fc61b76ee89fe955b184db62b07e62609388ad6e6a1eb046837e3"
checksum = "e63bc2ee951d0991953c95412e8907457fc38c8d9366a65cfc31a0490cd6a5a2"
dependencies = [
"allocator-api2",
"bumpalo",
@@ -1886,9 +1886,9 @@ dependencies = [
[[package]]
name = "oxc_ast"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17c6c770d1e86a9c4710d9c7974bf79e573b48efa3a764698477c11035c65738"
checksum = "7def3a0a7776127c60afa410a6a4a03b27dec7c65d350478b234a7127ca53bf2"
dependencies = [
"bitflags",
"cow-utils",
@@ -1903,9 +1903,9 @@ dependencies = [
[[package]]
name = "oxc_ast_macros"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c08ec3f117c0370106cf39b274090ae7f0b2be48b6bcae794bdc92fd1d34f22"
checksum = "c7d2acd02146b9f5d69b4035a49f0ed91139b9168ff1559234481df9a4195630"
dependencies = [
"phf",
"proc-macro2",
@@ -1915,9 +1915,9 @@ dependencies = [
[[package]]
name = "oxc_ast_visit"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b6fc584d5c7e5bd8394208a01d2d33025afcc8abceaed85455d642ee11db998"
checksum = "c9152368ec7ab6785568e3b53908a9c505402ee49e51cc77ebf717f7bfe60454"
dependencies = [
"oxc_allocator",
"oxc_ast",
@@ -1927,9 +1927,9 @@ dependencies = [
[[package]]
name = "oxc_cfg"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35a48bb41100a00b9a647c9aacd7fe6412d03a1c623a8285a9e514c2fa49e447"
checksum = "4bf5714ec4d469be32521c3c282df4d5a45abfa2bafc926b364b9869651661dd"
dependencies = [
"bitflags",
"itertools",
@@ -1942,9 +1942,9 @@ dependencies = [
[[package]]
name = "oxc_codegen"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf726a55fd107703b21b728c044a2e64c71242d35514c4e7e1c4c7dffca98220"
checksum = "0e2cfa58ff8217601c4b4b525caef5a3c004bb017d3050fd73252fc91868c627"
dependencies = [
"bitflags",
"cow-utils",
@@ -1963,18 +1963,18 @@ dependencies = [
[[package]]
name = "oxc_data_structures"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "374638f55291a87994e37c715c9a312be3e29dfac5dd5a655847a3d4f98d2b63"
checksum = "e3a91991eb494f1c3619feb27af1298bd05b0caac6198cdee528a61b7709ae9f"
dependencies = [
"rustversion",
]
[[package]]
name = "oxc_diagnostics"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4f29efa3f609ea53f193b1ffc19f548a6ac5464f27ad20a27982d623fc5784a"
checksum = "580a11ff9d17d5b5ca93e9fd9a3d0404f010e71b5a6ee743b4e9f4641d786ab1"
dependencies = [
"cow-utils",
"oxc-miette",
@@ -1982,9 +1982,9 @@ dependencies = [
[[package]]
name = "oxc_ecmascript"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0f469ed7c14f5a2d75f39af03517d3d0da071ae2c33c91cd75f547f434b978d"
checksum = "5613f7445cef6a08b9543dda6cb1962e5829c5ff5bae036d2bd41b740602e3eb"
dependencies = [
"cow-utils",
"num-bigint",
@@ -1996,9 +1996,9 @@ dependencies = [
[[package]]
name = "oxc_estree"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bf9a77d3465740411872becbf9fc43d0462ba3adb6f2609334c1b75365dfde3"
checksum = "1fb3d8b5e6674a51a9d5a8e1f051eba423c2b78381ecd0b7847517967193cbb8"
[[package]]
name = "oxc_index"
@@ -2008,9 +2008,9 @@ checksum = "2fa07b0cfa997730afed43705766ef27792873fdf5215b1391949fec678d2392"
[[package]]
name = "oxc_mangler"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68675862106f3ad0177dce45db81d27f406d0f27ac27541b55a60953ed5358e8"
checksum = "aaf4117f87d1d6e3adff0fd3f077cdf321a0e6292042bc1ba1b8df8be010e78b"
dependencies = [
"fixedbitset",
"itertools",
@@ -2025,9 +2025,9 @@ dependencies = [
[[package]]
name = "oxc_minifier"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa89cd8c32768a12f50d949d2ad602262f3104ceca5504947850ee6c39aeaadc"
checksum = "d019e9ff013696e27d6a22548fcb43c5000a8d2c8c97a9bba635c1f8aafd0402"
dependencies = [
"cow-utils",
"oxc_allocator",
@@ -2047,9 +2047,9 @@ dependencies = [
[[package]]
name = "oxc_parser"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "848bc15e9fd22229224593e1468ae4d2cf8d396157b5ba9938daecbbac9a1409"
checksum = "42bcc81f20b04c4d186ccf576487b93b6b437bda8626349b6ef770795e65781f"
dependencies = [
"bitflags",
"cow-utils",
@@ -2070,9 +2070,9 @@ dependencies = [
[[package]]
name = "oxc_regular_expression"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ef0bc791b7a19124561c8c285cbb0f25e7cd5e4201b9bfd770b96b5f3bcdf79"
checksum = "0863519e3231996e3a6c2a86f068712dfed956d44228aa744593dde2ffbe169c"
dependencies = [
"bitflags",
"oxc_allocator",
@@ -2086,9 +2086,9 @@ dependencies = [
[[package]]
name = "oxc_semantic"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e796ba52fa9b3c8dbc8fd3e57f5085f80dde092244098049dfa5732180304ed6"
checksum = "09a645cc47ed8dd6ace276d829cbe5cbf6a7fcb909093f533f5d29fa35545bdb"
dependencies = [
"itertools",
"oxc_allocator",
@@ -2122,9 +2122,9 @@ dependencies = [
[[package]]
name = "oxc_span"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2c1bcdd7b1695ac01ddcde35bc7b69b72150857d14e696f82f8a38927e7ceb3"
checksum = "8580e4eedc08a6168a4a530fb407a17f70d270e8f2b2f6653914422b03f10321"
dependencies = [
"compact_str",
"oxc-miette",
@@ -2135,9 +2135,9 @@ dependencies = [
[[package]]
name = "oxc_syntax"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "934fcc154f95afb172f84d250fe42833745eb06e83ced8a4e5d6669b9348528f"
checksum = "0d29704018fbd8b45711284729c5cde09c29391f254d7bca7e9c6899c0c44816"
dependencies = [
"bitflags",
"cow-utils",
@@ -2156,9 +2156,9 @@ dependencies = [
[[package]]
name = "oxc_traverse"
version = "0.72.0"
version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e394bf07dc65a0f15eee42a5410a6e975def23c498cc7ecd38e19c286866aea"
checksum = "1c00ac4c7344ccd560bb8a2f89b2ca8b32e2efa8bdfdb305ef26be1f1fac5733"
dependencies = [
"itoa",
"oxc_allocator",
@@ -2773,9 +2773,9 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
[[package]]
name = "socket2"
version = "0.5.9"
version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678"
dependencies = [
"libc",
"windows-sys 0.52.0",
+1 -1
View File
@@ -32,7 +32,7 @@ brk_server = { version = "0", path = "crates/brk_server" }
brk_store = { version = "0", path = "crates/brk_store" }
brk_vec = { version = "0", path = "crates/brk_vec" }
byteview = "0.7.0"
clap = { version = "4.5.38", features = ["string"] }
clap = { version = "4.5.39", features = ["string"] }
clap_derive = "4.5.32"
color-eyre = "0.6.4"
derive_deref = "1.1.1"
@@ -62,7 +62,7 @@ impl<T> Outputs<T> {
}
}
impl Outputs<(OutputFilter, vecs::utxos::cohort::Vecs)> {
impl Outputs<(OutputFilter, vecs::statefull::cohort::Vecs)> {
pub fn tick_tock_next_block(&mut self, chain_state: &[BlockState], timestamp: Timestamp) {
if chain_state.is_empty() {
return;
+6 -6
View File
@@ -13,12 +13,12 @@ pub mod grouped;
pub mod indexes;
pub mod market;
pub mod mining;
pub mod statefull;
pub mod transactions;
pub mod utxos;
pub use indexes::Indexes;
const VERSION: Version = Version::ZERO;
const VERSION: Version = Version::ONE;
#[derive(Clone)]
pub struct Vecs {
@@ -28,7 +28,7 @@ pub struct Vecs {
pub mining: mining::Vecs,
pub market: market::Vecs,
pub transactions: transactions::Vecs,
pub utxos: utxos::Vecs,
pub statefull: statefull::Vecs,
pub fetched: Option<fetched::Vecs>,
}
@@ -86,7 +86,7 @@ impl Vecs {
computation,
compressed,
)?,
utxos: utxos::Vecs::forced_import(
statefull: statefull::Vecs::forced_import(
path,
version + VERSION + Version::ZERO,
computation,
@@ -154,7 +154,7 @@ impl Vecs {
)?;
}
self.utxos.compute(
self.statefull.compute(
indexer,
&self.indexes,
&self.transactions,
@@ -174,7 +174,7 @@ impl Vecs {
self.mining.vecs(),
self.market.vecs(),
self.transactions.vecs(),
self.utxos.vecs(),
self.statefull.vecs(),
self.fetched.as_ref().map_or(vec![], |v| v.vecs()),
]
.into_iter()
@@ -1,6 +1,8 @@
use std::{fs, path::Path};
use brk_core::{CheckedSub, Dollars, Height, Result, Sats, StoredUsize, Version};
use brk_core::{
CheckedSub, DateIndex, Dollars, Height, Result, Sats, StoredF32, StoredUsize, Version,
};
use brk_exit::Exit;
use brk_indexer::Indexer;
use brk_vec::{AnyCollectableVec, AnyVec, Compressed, Computation, EagerVec, VecIterator};
@@ -24,27 +26,34 @@ pub struct Vecs {
pub state: CohortState,
pub height_to_realized_cap: Option<EagerVec<Height, Dollars>>,
pub indexes_to_realized_cap: Option<ComputedVecsFromHeight<Dollars>>,
pub height_to_supply: EagerVec<Height, Sats>,
pub indexes_to_supply: ComputedValueVecsFromHeight,
pub height_to_utxo_count: EagerVec<Height, StoredUsize>,
pub indexes_to_utxo_count: ComputedVecsFromHeight<StoredUsize>,
pub height_to_realized_profit: Option<EagerVec<Height, Dollars>>,
pub indexes_to_realized_profit: Option<ComputedVecsFromHeight<Dollars>>,
pub height_to_realized_loss: Option<EagerVec<Height, Dollars>>,
pub indexes_to_realized_loss: Option<ComputedVecsFromHeight<Dollars>>,
pub height_to_value_created: Option<EagerVec<Height, Dollars>>,
pub indexes_to_value_created: Option<ComputedVecsFromHeight<Dollars>>,
pub height_to_adjusted_value_created: Option<EagerVec<Height, Dollars>>,
pub indexes_to_adjusted_value_created: Option<ComputedVecsFromHeight<Dollars>>,
pub height_to_value_destroyed: Option<EagerVec<Height, Dollars>>,
pub indexes_to_value_destroyed: Option<ComputedVecsFromHeight<Dollars>>,
pub height_to_adjusted_value_destroyed: Option<EagerVec<Height, Dollars>>,
pub indexes_to_adjusted_value_destroyed: Option<ComputedVecsFromHeight<Dollars>>,
pub dateindex_to_adjusted_spent_output_profit_ratio: Option<EagerVec<DateIndex, StoredF32>>,
pub dateindex_to_realized_cap_30d_change: Option<EagerVec<DateIndex, Dollars>>,
pub dateindex_to_sell_side_risk_ratio: Option<EagerVec<DateIndex, StoredF32>>,
pub dateindex_to_spent_output_profit_ratio: Option<EagerVec<DateIndex, StoredF32>>,
pub indexes_to_adjusted_value_created: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_adjusted_value_destroyed: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_negative_realized_loss: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_net_realized_profit_and_loss: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_realized_cap: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_realized_loss: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_realized_price: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_realized_price_extra: Option<ComputedRatioVecsFromDateIndex>,
pub indexes_to_realized_profit: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_realized_value: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_supply: ComputedValueVecsFromHeight,
pub indexes_to_utxo_count: ComputedVecsFromHeight<StoredUsize>,
pub indexes_to_value_created: Option<ComputedVecsFromHeight<Dollars>>,
pub indexes_to_value_destroyed: Option<ComputedVecsFromHeight<Dollars>>,
}
impl Vecs {
@@ -161,9 +170,7 @@ impl Vecs {
false,
version + VERSION + Version::ZERO,
compressed,
StorableVecGeneatorOptions::default()
.add_sum()
.add_cumulative(),
StorableVecGeneatorOptions::default().add_sum(),
)
.unwrap()
}),
@@ -183,9 +190,18 @@ impl Vecs {
false,
version + VERSION + Version::ZERO,
compressed,
StorableVecGeneatorOptions::default()
.add_sum()
.add_cumulative(),
StorableVecGeneatorOptions::default().add_sum(),
)
.unwrap()
}),
indexes_to_negative_realized_loss: compute_dollars.then(|| {
ComputedVecsFromHeight::forced_import(
path,
&suffix("negative_realized_loss"),
true,
version + VERSION + Version::ZERO,
compressed,
StorableVecGeneatorOptions::default().add_sum(),
)
.unwrap()
}),
@@ -209,6 +225,17 @@ impl Vecs {
)
.unwrap()
}),
indexes_to_realized_value: compute_dollars.then(|| {
ComputedVecsFromHeight::forced_import(
path,
&suffix("realized_value"),
false,
version + VERSION + Version::ZERO,
compressed,
StorableVecGeneatorOptions::default().add_sum(),
)
.unwrap()
}),
height_to_adjusted_value_created: compute_dollars.then(|| {
EagerVec::forced_import(
path,
@@ -269,6 +296,53 @@ impl Vecs {
)
.unwrap()
}),
dateindex_to_realized_cap_30d_change: compute_dollars.then(|| {
EagerVec::forced_import(
path,
&suffix("realized_cap_30d_change"),
version + VERSION + Version::ZERO,
compressed,
)
.unwrap()
}),
indexes_to_net_realized_profit_and_loss: compute_dollars.then(|| {
ComputedVecsFromHeight::forced_import(
path,
&suffix("net_realized_profit_and_loss"),
true,
version + VERSION + Version::ZERO,
compressed,
StorableVecGeneatorOptions::default().add_sum(),
)
.unwrap()
}),
dateindex_to_sell_side_risk_ratio: compute_dollars.then(|| {
EagerVec::forced_import(
path,
&suffix("sell_side_risk_ratio"),
version + VERSION + Version::ZERO,
compressed,
)
.unwrap()
}),
dateindex_to_spent_output_profit_ratio: compute_dollars.then(|| {
EagerVec::forced_import(
path,
&suffix("spent_output_profit_ratio"),
version + VERSION + Version::ZERO,
compressed,
)
.unwrap()
}),
dateindex_to_adjusted_spent_output_profit_ratio: compute_dollars.then(|| {
EagerVec::forced_import(
path,
&suffix("adjusted_spent_output_profit_ratio"),
version + VERSION + Version::ZERO,
compressed,
)
.unwrap()
}),
})
}
@@ -590,6 +664,24 @@ impl Vecs {
Some(self.height_to_realized_loss.as_ref().unwrap()),
)?;
self.indexes_to_negative_realized_loss
.as_mut()
.unwrap()
.compute_all(
indexer,
indexes,
starting_indexes,
exit,
|vec, _, _, starting_indexes, exit| {
vec.compute_transform(
starting_indexes.height,
self.height_to_realized_loss.as_ref().unwrap(),
|(i, v, ..)| (i, v * -1.0),
exit,
)
},
)?;
self.indexes_to_value_created
.as_mut()
.unwrap()
@@ -629,6 +721,110 @@ impl Vecs {
exit,
Some(self.height_to_adjusted_value_destroyed.as_ref().unwrap()),
)?;
self.dateindex_to_realized_cap_30d_change
.as_mut()
.unwrap()
.compute_change(
starting_indexes.dateindex,
self.indexes_to_realized_cap
.as_ref()
.unwrap()
.dateindex
.unwrap_last(),
30,
exit,
)?;
self.indexes_to_net_realized_profit_and_loss
.as_mut()
.unwrap()
.compute_all(
indexer,
indexes,
starting_indexes,
exit,
|vec, _, _, starting_indexes, exit| {
vec.compute_subtract(
starting_indexes.height,
self.height_to_realized_profit.as_ref().unwrap(),
self.height_to_realized_loss.as_ref().unwrap(),
exit,
)
},
)?;
self.indexes_to_realized_value
.as_mut()
.unwrap()
.compute_all(
indexer,
indexes,
starting_indexes,
exit,
|vec, _, _, starting_indexes, exit| {
vec.compute_add(
starting_indexes.height,
self.height_to_realized_profit.as_ref().unwrap(),
self.height_to_realized_loss.as_ref().unwrap(),
exit,
)
},
)?;
self.dateindex_to_spent_output_profit_ratio
.as_mut()
.unwrap()
.compute_divide(
starting_indexes.dateindex,
self.indexes_to_value_created
.as_ref()
.unwrap()
.dateindex
.unwrap_sum(),
self.indexes_to_value_destroyed
.as_ref()
.unwrap()
.dateindex
.unwrap_sum(),
exit,
)?;
self.dateindex_to_adjusted_spent_output_profit_ratio
.as_mut()
.unwrap()
.compute_divide(
starting_indexes.dateindex,
self.indexes_to_adjusted_value_created
.as_ref()
.unwrap()
.dateindex
.unwrap_sum(),
self.indexes_to_adjusted_value_destroyed
.as_ref()
.unwrap()
.dateindex
.unwrap_sum(),
exit,
)?;
self.dateindex_to_sell_side_risk_ratio
.as_mut()
.unwrap()
.compute_divide(
starting_indexes.dateindex,
self.indexes_to_realized_value
.as_ref()
.unwrap()
.dateindex
.unwrap_sum(),
self.indexes_to_realized_cap
.as_ref()
.unwrap()
.dateindex
.unwrap_last(),
exit,
)?;
}
Ok(())
@@ -651,6 +847,9 @@ impl Vecs {
self.indexes_to_realized_price
.as_ref()
.map_or(vec![], |v| v.vecs()),
self.indexes_to_realized_value
.as_ref()
.map_or(vec![], |v| v.vecs()),
self.indexes_to_realized_price_extra
.as_ref()
.map_or(vec![], |v| v.vecs()),
@@ -666,6 +865,9 @@ impl Vecs {
self.indexes_to_realized_loss
.as_ref()
.map_or(vec![], |v| v.vecs()),
self.indexes_to_negative_realized_loss
.as_ref()
.map_or(vec![], |v| v.vecs()),
self.height_to_value_created
.as_ref()
.map_or(vec![], |v| vec![v as &dyn AnyCollectableVec]),
@@ -681,6 +883,12 @@ impl Vecs {
self.height_to_value_destroyed
.as_ref()
.map_or(vec![], |v| vec![v as &dyn AnyCollectableVec]),
self.dateindex_to_spent_output_profit_ratio
.as_ref()
.map_or(vec![], |v| vec![v as &dyn AnyCollectableVec]),
self.dateindex_to_adjusted_spent_output_profit_ratio
.as_ref()
.map_or(vec![], |v| vec![v as &dyn AnyCollectableVec]),
self.indexes_to_value_destroyed
.as_ref()
.map_or(vec![], |v| v.vecs()),
@@ -690,6 +898,15 @@ impl Vecs {
self.indexes_to_adjusted_value_destroyed
.as_ref()
.map_or(vec![], |v| v.vecs()),
self.dateindex_to_realized_cap_30d_change
.as_ref()
.map_or(vec![], |v| vec![v]),
self.indexes_to_net_realized_profit_and_loss
.as_ref()
.map_or(vec![], |v| v.vecs()),
self.dateindex_to_sell_side_risk_ratio
.as_ref()
.map_or(vec![], |v| vec![v]),
]
.into_iter()
.flatten()
@@ -714,6 +931,7 @@ impl Clone for Vecs {
indexes_to_realized_profit: self.indexes_to_realized_profit.clone(),
height_to_realized_loss: self.height_to_realized_loss.clone(),
indexes_to_realized_loss: self.indexes_to_realized_loss.clone(),
indexes_to_negative_realized_loss: self.indexes_to_negative_realized_loss.clone(),
height_to_value_created: self.height_to_value_created.clone(),
indexes_to_value_created: self.indexes_to_value_created.clone(),
height_to_adjusted_value_created: self.height_to_adjusted_value_created.clone(),
@@ -722,9 +940,21 @@ impl Clone for Vecs {
indexes_to_value_destroyed: self.indexes_to_value_destroyed.clone(),
height_to_adjusted_value_destroyed: self.height_to_adjusted_value_destroyed.clone(),
indexes_to_adjusted_value_destroyed: self.indexes_to_adjusted_value_destroyed.clone(),
dateindex_to_realized_cap_30d_change: self.dateindex_to_realized_cap_30d_change.clone(),
indexes_to_realized_value: self.indexes_to_realized_value.clone(),
indexes_to_net_realized_profit_and_loss: self
.indexes_to_net_realized_profit_and_loss
.clone(),
indexes_to_realized_price: self.indexes_to_realized_price.clone(),
dateindex_to_sell_side_risk_ratio: self.dateindex_to_sell_side_risk_ratio.clone(),
indexes_to_realized_price_extra: self.indexes_to_realized_price_extra.clone(),
dateindex_to_spent_output_profit_ratio: self
.dateindex_to_spent_output_profit_ratio
.clone(),
dateindex_to_adjusted_spent_output_profit_ratio: self
.dateindex_to_adjusted_spent_output_profit_ratio
.clone(),
}
}
}
+33 -9
View File
@@ -22,11 +22,11 @@ use super::Dollars;
KnownLayout,
Serialize,
)]
pub struct Cents(u64);
pub struct Cents(i64);
impl From<Dollars> for Cents {
fn from(value: Dollars) -> Self {
Self((*value * 100.0).round() as u64)
Self((*value * 100.0).round() as i64)
}
}
@@ -36,15 +36,36 @@ impl From<Cents> for f64 {
}
}
impl From<i64> for Cents {
fn from(value: i64) -> Self {
Self(value)
}
}
impl From<u64> for Cents {
fn from(value: u64) -> Self {
Self(value)
Self(value as i64)
}
}
impl From<usize> for Cents {
fn from(value: usize) -> Self {
Self(value as i64)
}
}
impl From<Cents> for i64 {
fn from(value: Cents) -> Self {
value.0
}
}
impl From<Cents> for u64 {
fn from(value: Cents) -> Self {
value.0
if value.0 < 0 {
panic!("Shouldn't convert neg cents to u64")
}
value.0 as u64
}
}
@@ -58,21 +79,24 @@ impl Add for Cents {
impl Div<usize> for Cents {
type Output = Self;
fn div(self, rhs: usize) -> Self::Output {
Self(self.0 / rhs as u64)
Self(self.0 / rhs as i64)
}
}
impl From<u128> for Cents {
fn from(value: u128) -> Self {
if value > u64::MAX as u128 {
panic!("u128 bigger than u64")
if value > i64::MAX as u128 {
panic!("u128 bigger than i64")
}
Self(value as u64)
Self(value as i64)
}
}
impl From<Cents> for u128 {
fn from(value: Cents) -> Self {
if value.0 < 0 {
panic!("Shouldn't convert neg cents to u128")
}
value.0 as u128
}
}
@@ -87,7 +111,7 @@ impl Mul<Cents> for Cents {
impl Mul<usize> for Cents {
type Output = Cents;
fn mul(self, rhs: usize) -> Self::Output {
Self(self.0 * rhs as u64)
Self(self.0 * rhs as i64)
}
}
+11 -2
View File
@@ -147,10 +147,17 @@ impl Mul<Bitcoin> for Dollars {
impl Mul<StoredF32> for Dollars {
type Output = Self;
fn mul(self, rhs: StoredF32) -> Self::Output {
self * *rhs as f64
}
}
impl Mul<f64> for Dollars {
type Output = Self;
fn mul(self, rhs: f64) -> Self::Output {
if rhs.is_nan() {
self
} else {
Self::from(Cents::from(Self::from(self.0 * *rhs as f64)))
Self::from(Cents::from(self) * Cents::from(Dollars::from(rhs)))
}
}
}
@@ -204,7 +211,9 @@ impl CheckedSub for Dollars {
impl CheckedSub<usize> for Dollars {
fn checked_sub(self, rhs: usize) -> Option<Self> {
Some(Self(self.0 - rhs as f64))
Some(Dollars::from(
Cents::from(self).checked_sub(Cents::from(rhs)).unwrap(),
))
}
}
+10
View File
@@ -1,3 +1,4 @@
use core::panic;
use std::{
cmp::Ordering,
ops::{Add, Div, Mul, Sub},
@@ -24,10 +25,19 @@ impl From<f32> for StoredF32 {
impl From<f64> for StoredF32 {
fn from(value: f64) -> Self {
if value > f32::MAX as f64 {
panic!("f64 is too big")
}
Self(value as f32)
}
}
impl From<StoredF32> for f64 {
fn from(value: StoredF32) -> Self {
value.0 as f64
}
}
impl From<StoredF64> for StoredF32 {
fn from(value: StoredF64) -> Self {
Self(*value as f32)
+1 -1
View File
@@ -24,7 +24,7 @@ color-eyre = { workspace = true }
jiff = { workspace = true }
log = { workspace = true }
minreq = { workspace = true }
oxc = { version = "0.72.0", features = ["codegen", "minifier"] }
oxc = { version = "0.72.1", features = ["codegen", "minifier"] }
serde = { workspace = true }
tokio = { workspace = true }
tower-http = { version = "0.6.4", features = ["compression-full", "trace"] }
+86
View File
@@ -194,6 +194,61 @@ where
self.safe_flush(exit)
}
pub fn compute_add(
&mut self,
max_from: I,
added: &impl AnyIterableVec<I, T>,
adder: &impl AnyIterableVec<I, T>,
exit: &Exit,
) -> Result<()>
where
T: Add<Output = T>,
{
self.validate_computed_version_or_reset_file(
Version::ZERO + self.inner.version() + added.version() + adder.version(),
)?;
let index = max_from.min(I::from(self.len()));
let mut added_iter = adder.iter();
added.iter_at(index).try_for_each(|(i, v)| {
let v = v.into_inner() + added_iter.unwrap_get_inner(i);
self.forced_push_at(i, v, exit)
})?;
self.safe_flush(exit)
}
pub fn compute_subtract(
&mut self,
max_from: I,
subtracted: &impl AnyIterableVec<I, T>,
subtracter: &impl AnyIterableVec<I, T>,
exit: &Exit,
) -> Result<()>
where
T: CheckedSub,
{
self.validate_computed_version_or_reset_file(
Version::ZERO + self.inner.version() + subtracted.version() + subtracter.version(),
)?;
let index = max_from.min(I::from(self.len()));
let mut subtracted_iter = subtracter.iter();
subtracted.iter_at(index).try_for_each(|(i, v)| {
let v = v
.into_inner()
.checked_sub(subtracted_iter.unwrap_get_inner(i))
.unwrap();
self.forced_push_at(i, v, exit)
})?;
self.safe_flush(exit)
}
pub fn compute_divide<T2, T3, T4>(
&mut self,
max_from: I,
@@ -610,6 +665,37 @@ where
self.safe_flush(exit)
}
pub fn compute_change(
&mut self,
max_from: I,
source: &impl AnyIterableVec<I, T>,
len: usize,
exit: &Exit,
) -> Result<()>
where
I: CheckedSub,
T: CheckedSub + Default,
{
self.validate_computed_version_or_reset_file(
Version::ZERO + self.inner.version() + source.version(),
)?;
let index = max_from.min(I::from(self.len()));
let mut source_iter = source.iter();
source.iter_at(index).try_for_each(|(i, current)| {
let current = current.into_inner();
let prev = i
.checked_sub(I::from(len))
.map(|prev_i| source_iter.unwrap_get_inner(prev_i))
.unwrap_or_default();
self.forced_push_at(i, current.checked_sub(prev).unwrap(), exit)
})?;
self.safe_flush(exit)
}
pub fn compute_percentage_change<T2>(
&mut self,
max_from: I,
+1
View File
@@ -1153,6 +1153,7 @@
window.document.documentElement.dataset.display = "standalone";
}
console.log(navigator);
if ("serviceWorker" in navigator) {
navigator.serviceWorker.register("/scripts/service-worker.js");
}
@@ -44,7 +44,6 @@ export default import("./v5.0.6-treeshaked/script.js").then((lc) => {
elements,
options: _options = {},
}) {
console.log(elements.style.fontFamily);
/** @satisfies {DeepPartial<ChartOptions>} */
const options = {
autoSize: true,
@@ -199,7 +198,6 @@ export default import("./v5.0.6-treeshaked/script.js").then((lc) => {
*/
function createSetFetchedDataEffect(series, valuesResource) {
const fetchedKey = vecsResources.defaultFetchedKey;
console.log(fetchedKey);
signals.runWithOwner(owner, () =>
signals.createEffect(
+1 -3
View File
@@ -23,8 +23,6 @@ export function init({
vecsResources,
vecIdToIndexes,
}) {
console.log("init chart state");
elements.charts.append(utils.dom.createShadow("left"));
elements.charts.append(utils.dom.createShadow("right"));
@@ -223,7 +221,7 @@ export function init({
{ blueprints: option.bottom, paneIndex: 1 },
].forEach(({ blueprints, paneIndex }) => {
const unit = paneIndex ? bottomUnit : topUnit;
console.log({ unit });
blueprints[unit]?.forEach((blueprint) => {
const indexes = /** @type {readonly number[]} */ (
vecIdToIndexes[blueprint.key]
+4 -14
View File
@@ -729,17 +729,13 @@ function createUtils() {
id === "close" ||
id === "open" ||
id === "marketcap" ||
id.includes("in-usd") ||
id.startsWith("price") ||
id.endsWith("price") ||
id.endsWith("value-created") ||
id.endsWith("value-destroyed") ||
id.endsWith("realized-cap") ||
id.endsWith("realized-loss") ||
id.endsWith("realized-loss-sum") ||
id.endsWith("realized-profit") ||
id.endsWith("realized-profit-sum") ||
id.includes("in-usd") ||
(!id.includes("ratio") && id.endsWith("sma")) ||
(id.includes("realized") && !id.includes("ratio")) ||
(id.endsWith("sma") && !id.includes("ratio")) ||
id.endsWith("ath"))
) {
if (unit) throw Error(`Unit "${unit}" already assigned "${id}"`);
@@ -752,11 +748,7 @@ function createUtils() {
if (
(!unit || thoroughUnitCheck) &&
(id.endsWith("ratio") ||
(id.includes("ratio") &&
(id.endsWith("-sma") ||
id.endsWith("-1w-sma") ||
id.endsWith("-1m-sma") ||
id.endsWith("-1y-sma"))) ||
(id.includes("ratio") && id.endsWith("sma")) ||
id.endsWith("1sd") ||
id.endsWith("2sd") ||
id.endsWith("3sd") ||
@@ -2244,8 +2236,6 @@ function main() {
switch (option.kind) {
case "chart": {
console.log("chart", option);
element = elements.charts;
lastChartOption.set(option);
+15 -30
View File
@@ -1,36 +1,19 @@
// @ts-check
const version = "v1";
self.addEventListener("install", (_event) => {
console.log("service-worker: install");
const event = /** @type {any} */ (_event);
event.waitUntil(
caches.open(version).then((cache) => {
return cache.addAll([
"/",
"/index.html",
"/assets/fonts/geist_mono_var_1_4_01.woff2",
"/scripts/main.js",
"/scripts/options.js",
"/scripts/chart.js",
"/styles/chart.css",
"/scripts/simulation.js",
"/styles/simulation.css",
"/packages/lean-qr/v2.3.4/script.js",
"/packages/lightweight-charts/v5.0.6-treeshaked/script.js",
"/packages/solid-signals/v0.3.0-treeshaked/script.js",
"/packages/ufuzzy/v1.0.14/script.js",
]);
}),
);
// @ts-ignore
console.log("sw: install");
// The worker skips waiting and becomes active immediately
self.skipWaiting();
});
self.addEventListener("activate", (event) => {
console.log("sw: active");
event.waitUntil(
// Claim clients, so the SW starts controlling pages immediately
self.clients.claim(),
);
});
self.addEventListener("fetch", (_event) => {
const event = /** @type {any} */ (_event);
@@ -56,18 +39,20 @@ self.addEventListener("fetch", (_event) => {
}
request = new Request(url, request.mode !== "navigate" ? request : undefined);
console.log(`service-worker: fetching: ${url}`);
console.log(request);
console.log(`service-worker: fetch ${url}`);
event.respondWith(
caches.match(request).then(async (cachedResponse) => {
return fetch(request)
.then((response) => {
const { status } = response;
const { status, type } = response;
if (method !== "GET" || slashApiSlashMatches) {
// API calls are cached in script.js
return response;
} else if (status === 200 || status === 304) {
} else if ((status === 200 || status === 304) && type === "basic") {
if (status === 200) {
const clonedResponse = response.clone();
caches.open(version).then((cache) => {
File diff suppressed because it is too large Load Diff