radiate_engines/steps/
mod.rs1pub mod evaluate;
2pub mod filter;
3pub mod front;
4pub mod metric;
5pub mod recombine;
6pub mod speciate;
7
8pub use evaluate::*;
9pub use filter::*;
10pub use front::*;
11pub use metric::*;
12
13use radiate_core::{Chromosome, Ecosystem, MetricSet};
14use radiate_error::Result;
15
16use radiate_utils::ToSnakeCase;
17pub use recombine::*;
18pub use speciate::*;
19
20pub trait EngineStep<C>: Send + Sync
21where
22 C: Chromosome,
23{
24 fn name(&self) -> &'static str {
25 let name = std::any::type_name::<Self>()
26 .split("<")
27 .next()
28 .unwrap_or(std::any::type_name::<Self>())
29 .split("::")
30 .last()
31 .unwrap_or("Unknown Step");
32
33 let snake_case = name.to_snake_case();
34
35 let mut parts = snake_case
36 .split('_')
37 .filter(|part| !part.is_empty() && !part.contains("step"))
38 .collect::<Vec<_>>();
39
40 parts.insert(0, "step");
41 let result = parts.join(".");
42
43 radiate_utils::intern!(result)
44 }
45
46 fn execute(
47 &mut self,
48 generation: usize,
49 ecosystem: &mut Ecosystem<C>,
50 metrics: &mut MetricSet,
51 ) -> Result<()>;
52}