amari_automata/lib.rs
1//! # Amari Automata
2//!
3//! Cellular automata, inverse design, and self-assembly using geometric algebra.
4//! This crate implements the mathematical foundation for Cliffy-Alive's self-assembling
5//! UI system, where geometric algebra provides natural composition rules for CA cells.
6//!
7//! ## Key Concepts
8//!
9//! - **Geometric CA**: Cellular automata where cells contain multivectors
10//! - **Inverse Design**: Finding seeds that produce target configurations using dual numbers
11//! - **Self-Assembly**: Polyomino tiling with geometric algebra constraints
12//! - **Cayley Navigation**: CA evolution as navigation in Cayley graphs
13//! - **Tropical Solving**: Using max-plus algebra to linearize discrete constraints
14//!
15//! ## Architecture
16//!
17//! The crate combines three mathematical frameworks:
18//! 1. Geometric algebra for spatial relationships and rotations
19//! 2. Dual numbers for automatic differentiation through time
20//! 3. Tropical algebra for constraint solving and optimization
21//!
22//! ## Usage
23//!
24//! ```rust
25//! use amari_automata::{GeometricCA, Evolvable};
26//! use amari_core::Multivector;
27//!
28//! // Create a 2D geometric cellular automaton
29//! let mut ca = GeometricCA::<3, 0, 0>::new_2d(64, 64);
30//!
31//! // Set initial configuration with multivector cells using 2D coordinates
32//! ca.set_cell_2d(32, 32, Multivector::basis_vector(0)).unwrap();
33//!
34//! // Evolve the system
35//! ca.step().unwrap();
36//! ```
37
38#![no_std]
39
40#[macro_use]
41extern crate alloc;
42
43// Re-export dependencies for convenience
44pub use amari_core::{Bivector, Multivector, Vector};
45pub use amari_dual::DualMultivector;
46pub use amari_tropical::TropicalMultivector;
47
48// Domain types
49pub mod error;
50pub mod traits;
51
52// Core modules
53pub mod cayley_navigation;
54pub mod geometric_ca;
55pub mod inverse_design;
56pub mod self_assembly;
57pub mod tropical_solver;
58pub mod ui_assembly;
59
60// Re-export main types
61pub use cayley_navigation::{
62 CayleyGraph, CayleyGraphNavigator, CayleyNavigator, DefaultCayleyNavigator, Generator,
63 GroupElement,
64};
65pub use geometric_ca::{CARule, CellState, GeometricCA, RuleType};
66pub use inverse_design::{Configuration, Target};
67pub use inverse_design::{
68 InverseCADesigner, InverseDesigner, Objective, TargetPattern, TropicalConstraint,
69};
70pub use self_assembly::{
71 Assembly, AssemblyConfig, AssemblyConstraint, AssemblyRule, Component, ComponentType,
72 Polyomino, SelfAssembler, SelfAssembly, Shape, TileSet, UIComponentType, WangTileSet,
73};
74pub use tropical_solver::{
75 ConstraintType, SolverConfig, TropicalExpression, TropicalSolver, TropicalSystem,
76};
77pub use ui_assembly::{Layout, LayoutConstraint, UIAssembler, UIAssemblyConfig, UIComponent};
78
79// Re-export domain types
80pub use error::{AutomataError, AutomataResult};
81pub use traits::{Evolvable, InverseDesignable, SelfAssembling};
82
83// Test modules
84#[cfg(test)]
85mod comprehensive_tests_simple;
86#[cfg(test)]
87mod verified_contracts_simple;
88
89// GPU acceleration exports