diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6fa6725 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,64 @@ +name: "Rust checks" + +on: + pull_request: + branches: [ main ] + +permissions: + contents: read + actions: read + +jobs: + check: + # Target self-hosted runner by label + runs-on: [ nixos ] + + # SECURITY: Require manual approval for external PRs + if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository }} + + steps: + - name: checkout-code + uses: actions/checkout@v4 + + - name: cargo-check + env: + RUSTFLAGS: "-D warnings" # Make all warnings deny. + run: nix develop --command cargo check + + - name: cargo-test + env: + RUSTFLAGS: "-D warnings" # Make all warnings deny. + run: nix develop --command cargo test + + # TODO: make clippy work + # - name: cargo-clippy + # env: + # RUSTFLAGS: "-D warnings" # Make all warnings deny. + # run: nix develop --command cargo clippy + + - name: cargo-bench + run: nix develop --command cargo bench --no-run # Just to make sure it compiles + + - name: cargo-fmt + run: nix develop --command cargo fmt --check + + - name: cargo-doc + run: nix develop --command cargo doc + + - name: nix-flake-check + run: nix flake check + + - name: nix-deadnix + run: nix develop --command deadnix + + - name: nix-statix + run: nix develop --command statix check + + - name: nix-alejandra + run: nix develop --command alejandra --check . + + # TODO: enable hongdown + # - name: markdown-formatting + # run: nix develop --command hongdown --check . + + diff --git a/Cargo.lock b/Cargo.lock index 8968d60..52f20d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,18 +10,21 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "alloca" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "e5a7d05ea6aea7e9e64d25b9156ba2fee3fdd659e34e41063cd2fc7cd020d7f4" +dependencies = [ + "cc", +] [[package]] name = "android_system_properties" @@ -40,9 +43,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "autocfg" @@ -58,21 +61,21 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.3" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" [[package]] name = "byteorder" @@ -88,26 +91,26 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.34" +version = "1.2.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" +checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" dependencies = [ + "find-msvc-tools", "shlex", ] [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", @@ -144,18 +147,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.45" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" +checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" dependencies = [ "anstyle", "clap_lex", @@ -163,9 +166,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "color_quant" @@ -236,10 +239,11 @@ dependencies = [ [[package]] name = "criterion" -version = "0.7.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1c047a62b0cc3e145fa84415a3191f628e980b194c2755aa12300a4e6cbd928" +checksum = "950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3" dependencies = [ + "alloca", "anes", "cast", "ciborium", @@ -248,6 +252,7 @@ dependencies = [ "itertools", "num-traits", "oorandom", + "page_size", "plotters", "rayon", "regex", @@ -259,9 +264,9 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.6.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1bcc0dc7dfae599d84ad0b1a55f80cde8af3725da8313b528da95ef783e338" +checksum = "d8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29ea" dependencies = [ "cast", "itertools", @@ -330,9 +335,9 @@ dependencies = [ [[package]] name = "dwrote" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c93d234bac0cdd0e2ac08bc8a5133f8df2169e95b262dfcea5e5cb7855672f" +checksum = "9e1b35532432acc8b19ceed096e35dfa088d3ea037fe4f3c085f1f97f33b4d02" dependencies = [ "lazy_static", "libc", @@ -355,11 +360,17 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", @@ -377,7 +388,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c7e611d49285d4c4b2e1727b72cf05353558885cc5252f93707b845dfcaf3d3" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "byteorder", "core-foundation", "core-graphics", @@ -436,25 +447,25 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", ] [[package]] @@ -481,19 +492,20 @@ dependencies = [ [[package]] name = "half" -version = "2.6.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "zerocopy", ] [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -538,9 +550,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jpeg-decoder" @@ -550,9 +562,9 @@ checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" dependencies = [ "once_cell", "wasm-bindgen", @@ -566,47 +578,47 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets", + "windows-link", ] [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "libc", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "miniz_oxide" @@ -710,6 +722,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "page_size" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "pathfinder_geometry" version = "0.5.1" @@ -827,18 +849,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -871,11 +893,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] @@ -914,16 +936,16 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.11.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -933,9 +955,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -944,9 +966,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "round" @@ -969,12 +991,6 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - [[package]] name = "same-file" version = "1.0.6" @@ -986,24 +1002,34 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -1012,14 +1038,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[package]] @@ -1030,9 +1057,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "sliding_features" @@ -1049,9 +1076,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -1060,18 +1087,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -1107,9 +1134,9 @@ checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "walkdir" @@ -1128,45 +1155,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1174,31 +1188,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" dependencies = [ "js-sys", "wasm-bindgen", @@ -1206,9 +1220,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "winapi" @@ -1228,9 +1242,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ "windows-sys", ] @@ -1243,9 +1257,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", @@ -1256,9 +1270,9 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -1267,9 +1281,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -1278,102 +1292,37 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] [[package]] name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.53.3" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - [[package]] name = "wio" version = "0.2.2" @@ -1384,13 +1333,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.3", -] +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "yeslogic-fontconfig-sys" @@ -1405,20 +1351,26 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "57cf3aa6855b23711ee9852dfc97dfaa51c45feaba5b645d0c777414d494a961" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "8a616990af1a287837c4fe6596ad77ef57948f787e46ce28e166facc0cc1cb75" dependencies = [ "proc-macro2", "quote", "syn", ] + +[[package]] +name = "zmij" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" diff --git a/Cargo.toml b/Cargo.toml index 7185825..67a1b4e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,7 @@ time_series_generator = "0.4.1" rand = "0.9" round = "0.1" plotters = "0.3" -criterion = "0.7" +criterion = "0.8" [[bench]] name = "alma" diff --git a/benches/alma.rs b/benches/alma.rs index 441fc53..273a869 100644 --- a/benches/alma.rs +++ b/benches/alma.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::Alma, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::Alma, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/center_of_gravity.rs b/benches/center_of_gravity.rs index d7e2011..14bed19 100644 --- a/benches/center_of_gravity.rs +++ b/benches/center_of_gravity.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::CenterOfGravity, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::CenterOfGravity, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/correlation_trend_indicator.rs b/benches/correlation_trend_indicator.rs index 9aa58df..4e3e96c 100644 --- a/benches/correlation_trend_indicator.rs +++ b/benches/correlation_trend_indicator.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::CorrelationTrendIndicator, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::CorrelationTrendIndicator, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/cumulative.rs b/benches/cumulative.rs index 290e61e..2d1b171 100644 --- a/benches/cumulative.rs +++ b/benches/cumulative.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::Cumulative, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::Cumulative, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/cyber_cycle.rs b/benches/cyber_cycle.rs index 74a19c7..1c3a16d 100644 --- a/benches/cyber_cycle.rs +++ b/benches/cyber_cycle.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::CyberCycle, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::CyberCycle, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/ehlers_fisher_transform.rs b/benches/ehlers_fisher_transform.rs index 3f73b39..8218c3c 100644 --- a/benches/ehlers_fisher_transform.rs +++ b/benches/ehlers_fisher_transform.rs @@ -1,11 +1,24 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, rngs::SmallRng, Rng, SeedableRng}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + SeedableRng, + rng, + rngs::SmallRng, +}; use sliding_features::{ - pure_functions::Echo, - sliding_windows::{EhlersFisherTransform, Ema}, View, + pure_functions::Echo, + sliding_windows::{ + EhlersFisherTransform, + Ema, + }, }; use time_series_generator::generate_standard_normal; diff --git a/benches/ema.rs b/benches/ema.rs index 4684d9b..d71cfd1 100644 --- a/benches/ema.rs +++ b/benches/ema.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::Ema, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::Ema, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/hl_normalizer.rs b/benches/hl_normalizer.rs index 6e07dd2..e76229a 100644 --- a/benches/hl_normalizer.rs +++ b/benches/hl_normalizer.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::HLNormalizer, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::HLNormalizer, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/laguerre_filter.rs b/benches/laguerre_filter.rs index 7a3ea30..e5e9fdc 100644 --- a/benches/laguerre_filter.rs +++ b/benches/laguerre_filter.rs @@ -1,6 +1,18 @@ -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::LaguerreFilter, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::LaguerreFilter, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/laguerre_rsi.rs b/benches/laguerre_rsi.rs index ad50438..6316e31 100644 --- a/benches/laguerre_rsi.rs +++ b/benches/laguerre_rsi.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::LaguerreRSI, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::LaguerreRSI, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/my_rsi.rs b/benches/my_rsi.rs index f19cb8d..bb693e0 100644 --- a/benches/my_rsi.rs +++ b/benches/my_rsi.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::MyRSI, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::MyRSI, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/noise_elimination_technology.rs b/benches/noise_elimination_technology.rs index 975e3c1..7b96909 100644 --- a/benches/noise_elimination_technology.rs +++ b/benches/noise_elimination_technology.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::NoiseEliminationTechnology, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::NoiseEliminationTechnology, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/polarized_fractal_efficiency.rs b/benches/polarized_fractal_efficiency.rs index 9aece11..93aaffa 100644 --- a/benches/polarized_fractal_efficiency.rs +++ b/benches/polarized_fractal_efficiency.rs @@ -1,11 +1,22 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; use sliding_features::{ - pure_functions::Echo, - sliding_windows::{Ema, PolarizedFractalEfficiency}, View, + pure_functions::Echo, + sliding_windows::{ + Ema, + PolarizedFractalEfficiency, + }, }; fn criterion_benchmark(c: &mut Criterion) { diff --git a/benches/re_flex.rs b/benches/re_flex.rs index 805b731..fd337a3 100644 --- a/benches/re_flex.rs +++ b/benches/re_flex.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::ReFlex, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::ReFlex, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/roc.rs b/benches/roc.rs index 0e985c3..910cdc0 100644 --- a/benches/roc.rs +++ b/benches/roc.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::Roc, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::Roc, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/roofing_filter.rs b/benches/roofing_filter.rs index d638c6a..df4431a 100644 --- a/benches/roofing_filter.rs +++ b/benches/roofing_filter.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::RoofingFilter, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::RoofingFilter, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/rsi.rs b/benches/rsi.rs index 4826d40..b2eec9b 100644 --- a/benches/rsi.rs +++ b/benches/rsi.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::Rsi, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::Rsi, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/sma.rs b/benches/sma.rs index e07401b..0c48e5b 100644 --- a/benches/sma.rs +++ b/benches/sma.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::Sma, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::Sma, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/super_smoother.rs b/benches/super_smoother.rs index eefd552..fabc38d 100644 --- a/benches/super_smoother.rs +++ b/benches/super_smoother.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::SuperSmoother, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::SuperSmoother, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/trend_flex.rs b/benches/trend_flex.rs index 967c361..a49e2e1 100644 --- a/benches/trend_flex.rs +++ b/benches/trend_flex.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::TrendFlex, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::TrendFlex, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/vsct.rs b/benches/vsct.rs index 1bc2a35..76ca009 100644 --- a/benches/vsct.rs +++ b/benches/vsct.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::Vsct, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::Vsct, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/vst.rs b/benches/vst.rs index 512ee79..3985287 100644 --- a/benches/vst.rs +++ b/benches/vst.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::Vst, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::Vst, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/benches/welford_online.rs b/benches/welford_online.rs index 0addb6b..6fad18f 100644 --- a/benches/welford_online.rs +++ b/benches/welford_online.rs @@ -1,8 +1,20 @@ use std::num::NonZeroUsize; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use rand::{rng, Rng}; -use sliding_features::{pure_functions::Echo, sliding_windows::WelfordOnline, View}; +use criterion::{ + Criterion, + black_box, + criterion_group, + criterion_main, +}; +use rand::{ + Rng, + rng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::WelfordOnline, +}; fn criterion_benchmark(c: &mut Criterion) { let mut rng = rng(); diff --git a/examples/basic_chainable_view.rs b/examples/basic_chainable_view.rs index 322fc9d..dafb341 100644 --- a/examples/basic_chainable_view.rs +++ b/examples/basic_chainable_view.rs @@ -5,9 +5,12 @@ use std::num::NonZeroUsize; // import the needed structs, and the View trait use sliding_features::{ - pure_functions::Echo, - sliding_windows::{Alma, Vsct}, View, + pure_functions::Echo, + sliding_windows::{ + Alma, + Vsct, + }, }; fn main() { diff --git a/examples/basic_single_view.rs b/examples/basic_single_view.rs index e92ed5b..f942b39 100644 --- a/examples/basic_single_view.rs +++ b/examples/basic_single_view.rs @@ -3,8 +3,15 @@ extern crate time_series_generator; use std::num::NonZeroUsize; -use rand::{rngs::SmallRng, SeedableRng}; -use sliding_features::{pure_functions::Echo, sliding_windows::Rsi, View}; +use rand::{ + SeedableRng, + rngs::SmallRng, +}; +use sliding_features::{ + View, + pure_functions::Echo, + sliding_windows::Rsi, +}; use time_series_generator::generate_standard_normal; fn main() { diff --git a/flake.lock b/flake.lock index 2da9855..85e7d68 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -20,10 +20,12 @@ }, "nixpkgs": { "locked": { - "lastModified": 0, - "narHash": "sha256-Vr3Qi346M+8CjedtbyUevIGDZW8LcA1fTG0ugPY/Hic=", - "path": "/nix/store/vdyq3cl640n39sclkc8br4xgd09fdj2w-source", - "type": "path" + "lastModified": 1770169770, + "narHash": "sha256-awR8qIwJxJJiOmcEGgP2KUqYmHG4v/z8XpL9z8FnT1A=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "aa290c9891fa4ebe88f8889e59633d20cc06a5f2", + "type": "github" }, "original": { "id": "nixpkgs", @@ -32,11 +34,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1736320768, - "narHash": "sha256-nIYdTAiKIGnFNugbomgBJR+Xv5F1ZQU+HfaBqJKroC0=", + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4bc9c909d9ac828a039f288cf872d16d38185db8", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", "type": "github" }, "original": { @@ -48,11 +50,11 @@ }, "nixpks": { "locked": { - "lastModified": 1711703276, - "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", + "lastModified": 1770197578, + "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", + "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", "type": "github" }, "original": { @@ -75,11 +77,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1740969088, - "narHash": "sha256-BajboqzFnDhxVT0SXTDKVJCKtFP96lZXccBlT/43mao=", + "lastModified": 1770260791, + "narHash": "sha256-ADTBfENFjRVDQMcCycyX/pAy6NFI/Ct6Mrar3gsmXI0=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "20fdb02098fdda9a25a2939b975abdd7bc03f62d", + "rev": "42ec85352e419e601775c57256a52f6d48a39906", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 7b974cc..4b22467 100644 --- a/flake.nix +++ b/flake.nix @@ -19,16 +19,17 @@ pkgs = import nixpkgs { inherit system overlays; }; - rust = ( - pkgs.rust-bin.stable.latest.default.override { + rust = pkgs.rust-bin.selectLatestNightlyWith (toolchain: + toolchain.default.override { extensions = [ "rust-src" "rust-analyzer" + "miri" "clippy" ]; targets = ["x86_64-unknown-linux-gnu"]; - } - ); + }); + cargo_upgrades = pkgs.rustPlatform.buildRustPackage { name = "cargo-upgrades"; src = builtins.fetchGit { @@ -43,23 +44,29 @@ homepage = "https://gitlab.com/kornelski/cargo-upgrades"; }; }; + buildInputs = with pkgs; [ + rust + openssl + protobuf + clang + pkg-config + fontconfig + cmake + ]; + tools = with pkgs; [ + taplo + cargo-semver-checks + cargo_upgrades + ]; + nix_tools = with pkgs; [ + alejandra # Nix code formatter + deadnix # Nix dead code checker. + statix # Nix static code checker. + ]; in with pkgs; { devShells.default = mkShell { - buildInputs = [ - openssl - protobuf - clang - pkg-config - fontconfig - cmake - # Use nightly formatter, but otherwise stable channel - (lib.hiPrio rust-bin.nightly."2024-04-01".rustfmt) - rust - taplo - cargo-semver-checks - cargo_upgrades - ]; + buildInputs = buildInputs ++ tools ++ nix_tools; }; } ); diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..232c983 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,3 @@ +group_imports = "StdExternalCrate" +imports_granularity = "Crate" +imports_layout = "Vertical" diff --git a/src/pure_functions/add.rs b/src/pure_functions/add.rs index a8edbd0..b726eeb 100644 --- a/src/pure_functions/add.rs +++ b/src/pure_functions/add.rs @@ -1,6 +1,7 @@ -use crate::View; use num::Float; +use crate::View; + /// Add View a to b #[derive(Debug)] pub struct Add { diff --git a/src/pure_functions/divide.rs b/src/pure_functions/divide.rs index 98710e0..dd52905 100644 --- a/src/pure_functions/divide.rs +++ b/src/pure_functions/divide.rs @@ -1,6 +1,7 @@ -use crate::View; use num::Float; +use crate::View; + /// Divide View a by b #[derive(Debug, Clone)] pub struct Divide { diff --git a/src/pure_functions/echo.rs b/src/pure_functions/echo.rs index 4141a65..d4c00a4 100644 --- a/src/pure_functions/echo.rs +++ b/src/pure_functions/echo.rs @@ -30,8 +30,10 @@ impl View for Echo { #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + test_data::TEST_DATA, + }; #[test] fn echo_plot() { diff --git a/src/pure_functions/gte.rs b/src/pure_functions/gte.rs index 1a15f5d..d1c0453 100644 --- a/src/pure_functions/gte.rs +++ b/src/pure_functions/gte.rs @@ -1,6 +1,7 @@ -use crate::View; use num::Float; +use crate::View; + /// Greater Than or Equal /// Will allow values >= clipping_point through and clip other values to the clipping point #[derive(Debug, Clone)] @@ -51,9 +52,8 @@ where #[cfg(test)] mod tests { - use crate::pure_functions::Echo; - use super::*; + use crate::pure_functions::Echo; #[test] fn gte() { diff --git a/src/pure_functions/lte.rs b/src/pure_functions/lte.rs index bda2bc3..8cd8f56 100644 --- a/src/pure_functions/lte.rs +++ b/src/pure_functions/lte.rs @@ -1,6 +1,7 @@ -use crate::View; use num::Float; +use crate::View; + /// Lower Than or Equal filter, /// which only allows values lower than the specified clipping point through #[derive(Debug, Clone)] @@ -51,9 +52,8 @@ where #[cfg(test)] mod tests { - use crate::pure_functions::Echo; - use super::*; + use crate::pure_functions::Echo; #[test] fn lte() { diff --git a/src/pure_functions/multiply.rs b/src/pure_functions/multiply.rs index e53c70d..2db6d1f 100644 --- a/src/pure_functions/multiply.rs +++ b/src/pure_functions/multiply.rs @@ -1,6 +1,7 @@ -use crate::View; use num::Float; +use crate::View; + /// Multiply View a by b #[derive(Debug, Clone)] pub struct Multiply { diff --git a/src/pure_functions/subtract.rs b/src/pure_functions/subtract.rs index 96cd9e9..6629650 100644 --- a/src/pure_functions/subtract.rs +++ b/src/pure_functions/subtract.rs @@ -1,6 +1,7 @@ -use crate::View; use num::Float; +use crate::View; + /// Subtract View a from b #[derive(Debug, Clone)] pub struct Subtract { diff --git a/src/pure_functions/tanh.rs b/src/pure_functions/tanh.rs index 430efa8..48d91cc 100644 --- a/src/pure_functions/tanh.rs +++ b/src/pure_functions/tanh.rs @@ -1,6 +1,7 @@ -use crate::View; use num::Float; +use crate::View; + /// Applies the Tanh function to the output of its View component #[derive(Debug, Clone)] pub struct Tanh { diff --git a/src/rolling/drawdown.rs b/src/rolling/drawdown.rs index 0138884..6ea6f91 100644 --- a/src/rolling/drawdown.rs +++ b/src/rolling/drawdown.rs @@ -1,5 +1,12 @@ -use crate::{pure_functions::Echo, View}; -use num::{Float, Zero}; +use num::{ + Float, + Zero, +}; + +use crate::{ + View, + pure_functions::Echo, +}; /// Keep track of the current peak to valley. #[derive(Debug, Clone)] diff --git a/src/rolling/ln_return.rs b/src/rolling/ln_return.rs index a1bd167..f1c9170 100644 --- a/src/rolling/ln_return.rs +++ b/src/rolling/ln_return.rs @@ -1,6 +1,10 @@ -use crate::{pure_functions::Echo, View}; use num::Float; +use crate::{ + View, + pure_functions::Echo, +}; + /// Computes the natural logarithm and keep track of the last value. /// Usually applied to price data. #[derive(Debug, Clone)] diff --git a/src/rolling/welford_rolling.rs b/src/rolling/welford_rolling.rs index 7b0bc88..3f237ad 100644 --- a/src/rolling/welford_rolling.rs +++ b/src/rolling/welford_rolling.rs @@ -1,10 +1,14 @@ //! Welford online algorithm for computing mean and variance on-the-fly //! over a sliding window -use crate::{pure_functions::Echo, View}; use getset::CopyGetters; use num::Float; +use crate::{ + View, + pure_functions::Echo, +}; + /// Welford online algorithm for computing mean and variance on-the-fly /// over a sliding window #[derive(Debug, Clone, CopyGetters)] @@ -77,11 +81,14 @@ where #[cfg(test)] mod tests { - use super::*; - use crate::plot::plot_values; - use crate::test_data::TEST_DATA; use round::round; + use super::*; + use crate::{ + plot::plot_values, + test_data::TEST_DATA, + }; + #[test] fn welford_online() { let mut wo = WelfordRolling::default(); diff --git a/src/sliding_windows/alma.rs b/src/sliding_windows/alma.rs index 5ca166d..8b1f694 100644 --- a/src/sliding_windows/alma.rs +++ b/src/sliding_windows/alma.rs @@ -1,9 +1,13 @@ //! ALMA - Arnaud Legoux Moving Average //! reference: +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -103,10 +107,17 @@ where #[cfg(test)] mod tests { + use rand::{ + Rng, + rng, + }; + use super::*; - use crate::test_data::TEST_DATA; - use crate::{plot::plot_values, pure_functions::Echo}; - use rand::{rng, Rng}; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn alma() { diff --git a/src/sliding_windows/binary_entropy.rs b/src/sliding_windows/binary_entropy.rs index 663444b..7567454 100644 --- a/src/sliding_windows/binary_entropy.rs +++ b/src/sliding_windows/binary_entropy.rs @@ -1,9 +1,13 @@ //! Shannon entropy sliding window over values, //! where a positive / negative values are interpreted as true / false +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -79,9 +83,8 @@ where #[cfg(test)] mod tests { - use crate::pure_functions::Echo; - use super::*; + use crate::pure_functions::Echo; #[test] fn binary_entropy() { diff --git a/src/sliding_windows/center_of_gravity.rs b/src/sliding_windows/center_of_gravity.rs index 3249cb8..492def4 100644 --- a/src/sliding_windows/center_of_gravity.rs +++ b/src/sliding_windows/center_of_gravity.rs @@ -1,9 +1,13 @@ //! John Ehlers Center of Gravity Indicator //! from: +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -82,9 +86,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn center_of_gravity_plot() { diff --git a/src/sliding_windows/correlation_trend_indicator.rs b/src/sliding_windows/correlation_trend_indicator.rs index 19773b4..94486c9 100644 --- a/src/sliding_windows/correlation_trend_indicator.rs +++ b/src/sliding_windows/correlation_trend_indicator.rs @@ -1,10 +1,15 @@ //! John Ehlers Correlation Trend Indicator //! from: -use crate::View; +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; + +use crate::View; /// John Ehlers Correlation Trend Indicator /// from: @@ -80,9 +85,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn correlation_trend_indicator() { diff --git a/src/sliding_windows/cumulative.rs b/src/sliding_windows/cumulative.rs index 16d9ee7..0ae30cf 100644 --- a/src/sliding_windows/cumulative.rs +++ b/src/sliding_windows/cumulative.rs @@ -1,8 +1,12 @@ //! Cumulative sliding window +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -67,9 +71,12 @@ where #[cfg(test)] mod tests { - use crate::{plot::plot_values, pure_functions::Echo, test_data::TEST_DATA}; - use super::*; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn cumulative_plot() { diff --git a/src/sliding_windows/cyber_cycle.rs b/src/sliding_windows/cyber_cycle.rs index 674a1aa..a965a58 100644 --- a/src/sliding_windows/cyber_cycle.rs +++ b/src/sliding_windows/cyber_cycle.rs @@ -1,9 +1,13 @@ //! John Ehlers Cyber Cycle Indicator //! from: +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -96,9 +100,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn cyber_cycle_plot() { diff --git a/src/sliding_windows/ehlers_fisher_transform.rs b/src/sliding_windows/ehlers_fisher_transform.rs index ce03651..d8f88d5 100644 --- a/src/sliding_windows/ehlers_fisher_transform.rs +++ b/src/sliding_windows/ehlers_fisher_transform.rs @@ -1,10 +1,16 @@ //! John Ehlers Fisher Transform Indicator //! from: -use crate::View; +use std::{ + cmp::Ordering, + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{cmp::Ordering, collections::VecDeque, num::NonZeroUsize}; + +use crate::View; /// John Ehlers Fisher Transform Indicator /// from: @@ -122,10 +128,12 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::sliding_windows::Ema; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + sliding_windows::Ema, + test_data::TEST_DATA, + }; #[test] fn ehlers_fisher_transform_plot() { diff --git a/src/sliding_windows/ema.rs b/src/sliding_windows/ema.rs index c51ea22..ba9983b 100644 --- a/src/sliding_windows/ema.rs +++ b/src/sliding_windows/ema.rs @@ -2,9 +2,10 @@ use std::num::NonZeroUsize; -use crate::View; use num::Float; +use crate::View; + #[derive(Clone, Debug)] /// EMA - Exponential Moving Average pub struct Ema { @@ -76,9 +77,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn ema_plot() { diff --git a/src/sliding_windows/hl_normalizer.rs b/src/sliding_windows/hl_normalizer.rs index cc23612..d4ae028 100644 --- a/src/sliding_windows/hl_normalizer.rs +++ b/src/sliding_windows/hl_normalizer.rs @@ -1,8 +1,12 @@ //! A sliding High - Low Normalizer +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -112,7 +116,10 @@ where #[cfg(test)] mod tests { use super::*; - use crate::{pure_functions::Echo, test_data::TEST_DATA}; + use crate::{ + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn normalizer() { diff --git a/src/sliding_windows/lag.rs b/src/sliding_windows/lag.rs index 743bb0f..69f16ae 100644 --- a/src/sliding_windows/lag.rs +++ b/src/sliding_windows/lag.rs @@ -1,4 +1,7 @@ -use std::{collections::VecDeque, num::NonZeroUsize}; +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; use getset::CopyGetters; use num::Float; @@ -56,9 +59,8 @@ where #[cfg(test)] mod test { - use crate::pure_functions::Echo; - use super::*; + use crate::pure_functions::Echo; #[test] fn lag() { diff --git a/src/sliding_windows/laguerre_filter.rs b/src/sliding_windows/laguerre_filter.rs index 96357b5..dbb73dd 100644 --- a/src/sliding_windows/laguerre_filter.rs +++ b/src/sliding_windows/laguerre_filter.rs @@ -1,9 +1,10 @@ //! John Ehlers Laguerre Filter //! from: -use crate::View; use num::Float; +use crate::View; + /// John Ehlers Laguerre Filter /// from: #[derive(Debug, Clone)] @@ -98,10 +99,17 @@ where #[cfg(test)] mod tests { + use rand::{ + Rng, + rng, + }; + use super::*; - use crate::test_data::TEST_DATA; - use crate::{plot::plot_values, pure_functions::Echo}; - use rand::{rng, Rng}; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn laguerre_filter() { diff --git a/src/sliding_windows/laguerre_rsi.rs b/src/sliding_windows/laguerre_rsi.rs index e9a784e..b420c9b 100644 --- a/src/sliding_windows/laguerre_rsi.rs +++ b/src/sliding_windows/laguerre_rsi.rs @@ -1,9 +1,13 @@ //! John Ehlers LaguerreRSI //! from: +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -126,9 +130,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn laguerre_rsi() { diff --git a/src/sliding_windows/max.rs b/src/sliding_windows/max.rs index 2b535e4..6964dd6 100644 --- a/src/sliding_windows/max.rs +++ b/src/sliding_windows/max.rs @@ -1,4 +1,7 @@ -use std::{collections::VecDeque, num::NonZeroUsize}; +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; use getset::CopyGetters; use num::Float; @@ -72,9 +75,8 @@ where #[cfg(test)] mod test { - use crate::pure_functions::Echo; - use super::*; + use crate::pure_functions::Echo; #[test] fn max() { diff --git a/src/sliding_windows/min.rs b/src/sliding_windows/min.rs index 72a1874..b3ea888 100644 --- a/src/sliding_windows/min.rs +++ b/src/sliding_windows/min.rs @@ -1,4 +1,7 @@ -use std::{collections::VecDeque, num::NonZeroUsize}; +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; use getset::CopyGetters; use num::Float; @@ -72,9 +75,8 @@ where #[cfg(test)] mod test { - use crate::pure_functions::Echo; - use super::*; + use crate::pure_functions::Echo; #[test] fn min() { diff --git a/src/sliding_windows/my_rsi.rs b/src/sliding_windows/my_rsi.rs index ba18f21..fcc073c 100644 --- a/src/sliding_windows/my_rsi.rs +++ b/src/sliding_windows/my_rsi.rs @@ -1,10 +1,15 @@ //! John Ehlers MyRSI //! from: -use crate::View; +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; + +use crate::View; /// John Ehlers MyRSI /// from: @@ -94,9 +99,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn my_rsi() { diff --git a/src/sliding_windows/noise_elimination_technology.rs b/src/sliding_windows/noise_elimination_technology.rs index bf34133..f602c3e 100644 --- a/src/sliding_windows/noise_elimination_technology.rs +++ b/src/sliding_windows/noise_elimination_technology.rs @@ -1,10 +1,15 @@ //! John Ehlers Noise elimination technology using kendall correlation //! from -use crate::View; +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; + +use crate::View; /// John Ehlers Noise elimination technology using kendall correlation /// from @@ -83,10 +88,12 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::sliding_windows::MyRSI; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + sliding_windows::MyRSI, + test_data::TEST_DATA, + }; #[test] fn net_my_rsi_plot() { diff --git a/src/sliding_windows/polarized_fractal_efficiency.rs b/src/sliding_windows/polarized_fractal_efficiency.rs index 02b0747..34ca07c 100644 --- a/src/sliding_windows/polarized_fractal_efficiency.rs +++ b/src/sliding_windows/polarized_fractal_efficiency.rs @@ -1,10 +1,15 @@ //! A PolarizedFractalEfficiency indicator with output range [-1.0 and 1.0] rather than [-100, 100] //! it is also possible to use a custom moving average instead of the default EMA in the original -use crate::View; +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; + +use crate::View; #[derive(Debug, Clone, CopyGetters)] /// A PolarizedFractalEfficiency indicator with output range [-1.0 and 1.0] rather than [-100, 100] @@ -86,10 +91,12 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::sliding_windows::Ema; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + sliding_windows::Ema, + test_data::TEST_DATA, + }; #[test] fn polarized_fractal_efficiency() { diff --git a/src/sliding_windows/re_flex.rs b/src/sliding_windows/re_flex.rs index 08fef54..cc23792 100644 --- a/src/sliding_windows/re_flex.rs +++ b/src/sliding_windows/re_flex.rs @@ -1,9 +1,13 @@ //! John Ehlers ReFlex Indicator //! from: +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -111,9 +115,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn re_flex_plot() { diff --git a/src/sliding_windows/roc.rs b/src/sliding_windows/roc.rs index 7c55f16..733d1e3 100644 --- a/src/sliding_windows/roc.rs +++ b/src/sliding_windows/roc.rs @@ -1,8 +1,12 @@ //! Rate of Change Indicator +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -75,9 +79,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn roc_plot() { diff --git a/src/sliding_windows/roofing_filter.rs b/src/sliding_windows/roofing_filter.rs index f0713a7..d894000 100644 --- a/src/sliding_windows/roofing_filter.rs +++ b/src/sliding_windows/roofing_filter.rs @@ -1,10 +1,13 @@ use std::num::NonZeroUsize; -use crate::{pure_functions::Echo, View}; use getset::CopyGetters; use num::Float; use super::SuperSmoother; +use crate::{ + View, + pure_functions::Echo, +}; /// Roofing Filter by John Ehlers /// From paper: @@ -96,8 +99,10 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + test_data::TEST_DATA, + }; #[test] fn roofing_filter_plot() { diff --git a/src/sliding_windows/rsi.rs b/src/sliding_windows/rsi.rs index 5491d4a..66cf03a 100644 --- a/src/sliding_windows/rsi.rs +++ b/src/sliding_windows/rsi.rs @@ -1,8 +1,12 @@ //! Relative Strength Index Indicator +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -110,9 +114,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn rsi_plot() { diff --git a/src/sliding_windows/sma.rs b/src/sliding_windows/sma.rs index ff59f63..fc70ecf 100644 --- a/src/sliding_windows/sma.rs +++ b/src/sliding_windows/sma.rs @@ -1,7 +1,11 @@ //! SMA - Simple Moving Average +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -64,10 +68,17 @@ where #[cfg(test)] mod tests { + use rand::{ + Rng, + rng, + }; + use super::*; - use crate::test_data::TEST_DATA; - use crate::{plot::plot_values, pure_functions::Echo}; - use rand::{rng, Rng}; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn sma() { diff --git a/src/sliding_windows/super_smoother.rs b/src/sliding_windows/super_smoother.rs index 301c16e..ef864b0 100644 --- a/src/sliding_windows/super_smoother.rs +++ b/src/sliding_windows/super_smoother.rs @@ -1,6 +1,10 @@ +use std::{ + f64::consts::PI, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{f64::consts::PI, num::NonZeroUsize}; use crate::View; @@ -92,9 +96,12 @@ where #[cfg(test)] mod tests { - use crate::{plot::plot_values, pure_functions::Echo, test_data::TEST_DATA}; - use super::*; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn super_smoother_plot() { diff --git a/src/sliding_windows/trend_flex.rs b/src/sliding_windows/trend_flex.rs index 08e223f..461389c 100644 --- a/src/sliding_windows/trend_flex.rs +++ b/src/sliding_windows/trend_flex.rs @@ -1,9 +1,13 @@ //! John Ehlers TrendFlex Indicators //! from: +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; use crate::View; @@ -110,9 +114,11 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; #[test] fn trend_flex_plot() { diff --git a/src/sliding_windows/variance_stabilizing_transformation.rs b/src/sliding_windows/variance_stabilizing_transformation.rs index ecf398c..d5d3ea3 100644 --- a/src/sliding_windows/variance_stabilizing_transformation.rs +++ b/src/sliding_windows/variance_stabilizing_transformation.rs @@ -2,10 +2,13 @@ use std::num::NonZeroUsize; -use crate::{pure_functions::Echo, View}; use num::Float; use super::WelfordOnline; +use crate::{ + View, + pure_functions::Echo, +}; /// Variance Stabilizing Transform uses the standard deviation to normalize values #[derive(Debug, Clone)] @@ -66,8 +69,10 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + test_data::TEST_DATA, + }; #[test] fn variance_stabilizing_transform_plot() { diff --git a/src/sliding_windows/vsct.rs b/src/sliding_windows/vsct.rs index fc96dfc..bc8e7cc 100644 --- a/src/sliding_windows/vsct.rs +++ b/src/sliding_windows/vsct.rs @@ -2,10 +2,13 @@ use std::num::NonZeroUsize; -use crate::{pure_functions::Echo, View}; use num::Float; use super::WelfordOnline; +use crate::{ + View, + pure_functions::Echo, +}; /// Variance Stabilizing Centering Transform Sliding Window #[derive(Debug, Clone)] @@ -68,8 +71,10 @@ where #[cfg(test)] mod tests { use super::*; - use crate::plot::plot_values; - use crate::test_data::TEST_DATA; + use crate::{ + plot::plot_values, + test_data::TEST_DATA, + }; #[test] fn vsct_plot() { diff --git a/src/sliding_windows/welford_online.rs b/src/sliding_windows/welford_online.rs index 0b099cc..2a8cf3a 100644 --- a/src/sliding_windows/welford_online.rs +++ b/src/sliding_windows/welford_online.rs @@ -1,10 +1,15 @@ //! Welford online algorithm for computing mean and variance on-the-fly //! over a sliding window -use crate::View; +use std::{ + collections::VecDeque, + num::NonZeroUsize, +}; + use getset::CopyGetters; use num::Float; -use std::{collections::VecDeque, num::NonZeroUsize}; + +use crate::View; /// Welford online algorithm for computing mean and variance on-the-fly /// over a sliding window @@ -105,12 +110,15 @@ where #[cfg(test)] mod tests { - use super::*; - use crate::plot::plot_values; - use crate::pure_functions::Echo; - use crate::test_data::TEST_DATA; use round::round; + use super::*; + use crate::{ + plot::plot_values, + pure_functions::Echo, + test_data::TEST_DATA, + }; + #[test] fn welford_online() { let mut wo = WelfordOnline::new(Echo::new(), NonZeroUsize::new(TEST_DATA.len()).unwrap()); diff --git a/src/test_data.rs b/src/test_data.rs index a87fdc3..e5afdff 100644 --- a/src/test_data.rs +++ b/src/test_data.rs @@ -260,7 +260,10 @@ pub const TEST_DATA: [f64; 256] = [ #[cfg(test)] mod tests { - use rand::{rngs::SmallRng, SeedableRng}; + use rand::{ + SeedableRng, + rngs::SmallRng, + }; use time_series_generator::generate_standard_normal; #[test]