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
每月下载 57 次
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 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交并包含在作品中的任何贡献,都将按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~0.8–1.1MB
~16K SLoC