A great re-architecture of the cli
continuous-integration/drone/push Build is failing

This commit is contained in:
2023-03-08 16:16:44 +00:00
parent eceb067add
commit 7216fd561e
19 changed files with 455 additions and 518 deletions
+68 -62
View File
@@ -1,92 +1,98 @@
#![feature(array_zip)]
#![feature(generic_const_exprs)]
use std::path::PathBuf;
use clap::Parser;
use rand::prelude::*;
use crate::cli::{drive_system};
use crate::cli::cli::{StickProbabilityCli, InitialCli, BallsCli, PCM, ModelCli};
use crate::cli::output::write;
use crate::system::model::DLASystem;
use crate::system::spaces::continuous::{ContinuousSticker, ContinuousStorage, ContinuousWalker};
use crate::system::spaces::hexagonal::HexPosition;
use crate::system::spaces::square_grid::{Grid2D, Grid3D};
use crate::system::spaces::VectorStorage;
use crate::system::spawner::UniformSpawner;
use crate::system::sticker::{ProbabilisticSticking, SimpleSticking};
use crate::system::walker::LocalRandomWalker;
mod system;
mod example_systems;
use clap::Parser;
use crate::example_systems::{cont, drive_system, stick_probability, three_dimensional, write_csv, write_json};
#[derive(clap::ValueEnum, Clone, Debug)]
enum PreConfiguredSystem {
Grid2,
Grid3,
Hex,
Balls,
}
#[derive(Parser, Debug)]
struct Cli {
#[arg(value_enum, long, default_value_t = PreConfiguredSystem::Grid2)]
mode: PreConfiguredSystem,
#[arg(long, default_value_t = 1600)]
grid_size: u32,
#[arg(short, long)]
max_frames: Option<usize>,
seed: u64,
max_particles: usize,
stick_probability: f32,
output: PathBuf,
}
mod surface_probability_measure;
mod cli;
fn main() {
let cli = Cli::parse();
let cli = ModelCli::parse();
println!("Running: {:?}", cli);
match cli.mode {
PreConfiguredSystem::Grid2 => {
let mut sys = stick_probability(
cli.seed,
cli.grid_size,
match cli.preconfigured_model {
PCM::Initial(InitialCli { grid_size }) => {
let mut sys = DLASystem::<_, Grid2D, _, _, _, _>::new(
SmallRng::seed_from_u64(cli.seed),
VectorStorage::new(grid_size, 2),
LocalRandomWalker,
UniformSpawner,
SimpleSticking,
cli.max_particles,
cli.stick_probability,
);
drive_system(&mut sys, cli.max_frames);
write_csv(&mut sys, &cli.output);
write(&sys, cli.format, &cli.output);
}
PreConfiguredSystem::Grid3 => {
let mut sys = three_dimensional(
cli.seed,
cli.grid_size,
PCM::StickProbability(StickProbabilityCli { grid_size, stick_probability }) => {
let mut sys = DLASystem::<_, Grid2D, _, _, _, _>::new(
SmallRng::seed_from_u64(cli.seed),
VectorStorage::new(grid_size, 2),
LocalRandomWalker,
UniformSpawner,
ProbabilisticSticking { stick_probability },
cli.max_particles,
cli.stick_probability,
);
drive_system(&mut sys, cli.max_frames);
write_json(&mut sys, &cli.output);
write(&sys, cli.format, &cli.output);
}
PreConfiguredSystem::Hex => {
let mut sys = three_dimensional(
cli.seed,
cli.grid_size,
cli.max_particles,
cli.stick_probability,
);
drive_system(&mut sys, cli.max_frames);
write_json(&mut sys, &cli.output);
},
PreConfiguredSystem::Balls => {
let mut sys = cont(
cli.seed,
PCM::Grid3(StickProbabilityCli { grid_size, stick_probability }) => {
let mut sys = DLASystem::<_, Grid3D, _, _, _, _>::new(
SmallRng::seed_from_u64(cli.seed),
VectorStorage::new(grid_size, 3),
LocalRandomWalker,
UniformSpawner,
ProbabilisticSticking { stick_probability },
cli.max_particles,
);
drive_system(&mut sys, cli.max_frames);
write(&sys, cli.format, &cli.output);
}
write_json(&mut sys, &cli.output);
PCM::Hex(StickProbabilityCli { grid_size, stick_probability }) => {
let mut sys = DLASystem::<_, HexPosition, _, _, _, _>::new(
SmallRng::seed_from_u64(cli.seed),
VectorStorage::new(grid_size, 2),
LocalRandomWalker,
UniformSpawner,
ProbabilisticSticking { stick_probability },
cli.max_particles,
);
drive_system(&mut sys, cli.max_frames);
write(&sys, cli.format, &cli.output);
}
PCM::Balls(BallsCli { ball_radius, stick_distance, walk_step }) => {
let mut sys = DLASystem::new(
SmallRng::seed_from_u64(cli.seed),
ContinuousStorage { inner: kiddo::KdTree::new(), ball_radius_sq: ball_radius * ball_radius },
ContinuousWalker { walk_step },
UniformSpawner,
ContinuousSticker { range_sq: stick_distance * stick_distance },
cli.max_particles,
);
drive_system(&mut sys, cli.max_frames);
write(&sys, cli.format, &cli.output);
}
}
}