18 个版本

0.8.2 2022 年 1 月 16 日
0.8.1 2020 年 6 月 13 日
0.7.0 2020 年 4 月 18 日
0.6.3 2020 年 3 月 12 日
0.5.5 2019 年 3 月 19 日

模拟 中排名 #83

Download history 1/week @ 2024-03-08 15/week @ 2024-03-29 4/week @ 2024-04-05

每月下载 57

MIT/Apache 协议

135KB
3K SLoC

Calcify

一个用于 3 维和 4 维向量及矩阵代数的 crate,专为物理模拟设计。从基本的 ThreeVec 结构开始,包含大多数常用操作。包括物理常数、3 维和 4 维向量和矩阵以及许多相关操作、集合、直方图和输出树,这些树以 json 或 MessagePack 格式序列化。

ICalcify

用于分析 Tree 文件的 Python 命令行工具和模块。

查看 这里!

用法

use std::error;

extern crate calcify;

use calcify::Tree;
use calcify::FeedTree;
use calcify::Collection;
use calcify::Bin;
use calcify::Point;
use calcify::io::ToFile;

mod dummy_experiment_lib;

use dummy_experiment_lib::Projectile;
use dummy_experiment_lib::Lab;

fn main() -> Result<(),Box<dyn error::Error>> {
    let mut ftree = FeedTree::<Projectile>::new("Dummy_States","Object");
    let mut ttree = Tree::new("Dummy_Data");

    ftree.add_field("Desc","A FeedTree of states for a simulation that does not exist.")?;
    ttree.add_field("Desc","A Tree data branches for a simulation that does not exist.")?;

    let mut dummy_lab = Lab::new();

    let init_state: Collection<Projectile> = Collection::from(dummy_lab.state.clone());
    let init_hist: Collection<Bin> = init_state.map(|x| {x.r().r()}).hist(500);
    let init_spread: Collection<Point> = Collection::plot(&init_state.map(|x| {*x.r().x0()}).vec,
                                                          &init_state.map(|x| {*x.r().x1()}).vec)
                                                          .cut(|p| p.r() <= 1.0);

    ftree.add_feed("init_state", init_state)?;
    ttree.add_branch("init_hist", init_hist, "Bin")?;
    ttree.add_branch("init_spread", init_spread, "Point")?;

    dummy_lab.run(1000);

    let fin_state: Collection<Projectile> = Collection::from(dummy_lab.state.clone());
    let fin_hist: Collection<Bin> = fin_state.map(|x| {x.r().r()}).hist(500);
    let fin_spread: Collection<Point> = Collection::plot(&fin_state.map(|x| {*x.r().x0()}).vec,
                                                         &fin_state.map(|x| {*x.r().x1()}).vec)
                                                         .cut(|p| p.r() <= 1.0);

    ftree.add_feed("fin_state", fin_state)?;
    ttree.add_branch("fin_hist", fin_hist, "Bin")?;
    ttree.add_branch("fin_spread", fin_spread, "Point")?;

    ftree.write_msg("dummy_states.msg")?;
    ttree.write_msg("dummy_data.msg")?;
    Ok(())
}

示例

cargorun --exampleuniverse_in_a_box --发布

关于文件 I/O 的注意事项

  • 尽管支持 json 格式的读写,但其实现效率不高,在读取大文件时可能会导致速度减慢。建议仅用于调试,以便读取测试结果,否则请使用 msg。

  • 在实现您的类型的序列化特性时,请随时使用 Serde。

写入 读取
支持所有子类型 仅内部类型,不包括 Object

FeedTrees

写入 读取
支持所有子类型 支持所有子类型

许可证

许可证为以下之一

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交并包含在作品中的任何贡献,都将按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~0.8–1.1MB
~16K SLoC