Research-Stack/5-Applications/teleport-kanban/src/interface.rs

739 lines
No EOL
27 KiB
Rust

use serde::{Deserialize, Serialize};
use anyhow::{Result, anyhow};
use std::collections::HashMap;
use dashmap::DashMap;
use chrono::{Utc, Duration};
use rayon::prelude::*;
use uuid::Uuid;
use crate::teleport::{TeleportCompressor, BF16};
use crate::moe::MixtureOfExperts;
use crate::kanban::KanbanBoard;
/// Adaptive Trinary Logic for Quantum Tunneling
/// Represents -1, 0, +1 states for quantum superposition handling
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Serialize, Deserialize)]
pub enum Trinary {
Negative = -1,
Neutral = 0,
Positive = 1,
}
impl Trinary {
pub fn from_f32(value: f32) -> Self {
if value < -0.1 { Trinary::Negative }
else if value > 0.1 { Trinary::Positive }
else { Trinary::Neutral }
}
pub fn to_f32(self) -> f32 {
match self {
Trinary::Negative => -1.0,
Trinary::Neutral => 0.0,
Trinary::Positive => 1.0,
}
}
pub fn quantum_tunnel(&self, probability: f32) -> Self {
if probability > 0.8 {
// High probability tunneling - flip state
match self {
Trinary::Negative => Trinary::Positive,
Trinary::Positive => Trinary::Negative,
Trinary::Neutral => Trinary::from_f32(rand::random::<f32>() - 0.5),
}
} else if probability > 0.3 {
// Medium probability - maintain but adjust
*self
} else {
// Low probability - collapse to neutral
Trinary::Neutral
}
}
}
/// Metanarrative Harness for MoE Integration
/// Provides narrative context and meaning to the optimization process
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MetanarrativeContext {
pub narrative_id: String,
pub story_arc: StoryArc,
pub character_roles: HashMap<String, CharacterRole>,
pub plot_points: Vec<PlotPoint>,
pub thematic_elements: Vec<ThematicElement>,
pub emotional_resonance: f32,
pub purpose_alignment: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum StoryArc {
Creation,
Optimization,
Transcendence,
Equilibrium,
Evolution,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CharacterRole {
pub role_name: String,
pub purpose: String,
pub capabilities: Vec<String>,
pub growth_potential: f32,
pub narrative_weight: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PlotPoint {
pub point_id: String,
pub description: String,
pub significance: f32,
pub required_optimization: OptimizationLevel,
pub trinary_logic_required: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThematicElement {
pub theme: String,
pub manifestation: String,
pub optimization_impact: f32,
pub narrative_coherence: f32,
}
/// Unified Substrate Signal Optimization System with Metanarrative Harness
/// Integrates metanarrative context with MoE for meaningful optimization
#[derive(Debug, Clone)]
pub struct UnifiedSubstrateOptimizer {
/// Unified signal state cache
pub substrate_state: DashMap<String, SubstrateState>,
/// Quantum coherence map with trinary logic
pub quantum_coherence: DashMap<String, QuantumCoherenceState>,
/// Thermal equilibrium state
pub thermal_equilibrium: DashMap<String, ThermalEquilibriumState>,
/// Network harmony state
pub network_harmony: DashMap<String, NetworkHarmonyState>,
/// Trinary logic cache for quantum tunneling
pub trinary_cache: DashMap<String, TrinaryState>,
/// Metanarrative context cache
pub metanarrative_cache: DashMap<String, MetanarrativeContext>,
/// Teleport compressor for unified compression
pub teleport: TeleportCompressor,
/// MoE with metanarrative harness
pub moe: MixtureOfExperts,
/// Kanban interface for system management
pub kanban: KanbanBoard,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubstrateState {
pub timestamp: chrono::DateTime<Utc>,
pub substrate_id: String,
pub components: Vec<HardwareComponent>,
pub signal_interconnectivity: SignalMatrix,
pub quantum_entanglement: Vec<String>,
pub compression_ratio: f32,
pub optimization_level: OptimizationLevel,
pub bf16_unified_state: Vec<BF16>,
pub equilibrium_score: f32,
pub trinary_coherence: Vec<Trinary>,
pub metanarrative_alignment: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HardwareComponent {
pub component_type: ComponentType,
pub identifier: String,
pub signal_characteristics: SignalCharacteristics,
pub thermal_profile: ThermalProfile,
pub quantum_state: QuantumState,
pub network_profile: NetworkProfile,
pub trinary_logic_state: TrinaryLogicState,
pub narrative_role: Option<CharacterRole>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum ComponentType {
CPU,
GPU,
RAM,
NVMe,
PCIe,
PowerSupply,
CoolingSystem,
Motherboard,
NetworkInterface,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SignalCharacteristics {
pub frequency: f64,
pub amplitude: f64,
pub phase: f64,
pub jitter: f64,
pub signal_to_noise: f64,
pub timing_precision: f64,
pub compression_efficiency: f32,
pub trinary_stability: f32,
pub narrative_resonance: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThermalProfile {
pub temperature: f32,
pub thermal_gradient: Vec<f32>,
pub heat_dissipation_rate: f32,
pub throttling_threshold: f32,
pub cooling_efficiency: f32,
pub thermal_compression: f32,
pub trinary_thermal_state: Trinary,
pub narrative_balance: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QuantumState {
pub coherence_time: Duration,
pub entanglement_strength: f32,
pub superposition_stability: f32,
pub quantum_tunnels: usize,
pub energy_landscape: Vec<BF16>,
pub annealing_progress: f32,
pub trinary_tunneling: Vec<Trinary>,
pub narrative_coherence: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkProfile {
pub bandwidth: f64,
pub latency: f64,
pub packet_loss: f64,
pub network_jitter: f64,
pub compression_ratio: f32,
pub harmony_score: f32,
pub trinary_sync_state: Trinary,
pub narrative_flow: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrinaryLogicState {
pub current_state: Trinary,
pub tunneling_probability: f32,
pub coherence_duration: Duration,
pub entanglement_partners: Vec<String>,
pub superposition_history: Vec<Trinary>,
pub narrative_significance: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SignalMatrix {
pub interconnectivity_map: HashMap<String, HashMap<String, f32>>,
pub signal_propagation: Vec<f32>,
pub interference_patterns: Vec<String>,
pub optimization_paths: Vec<Vec<String>>,
pub quantum_tunneling: HashMap<String, String>,
pub trinary_interactions: HashMap<String, Trinary>,
pub narrative_connections: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum OptimizationLevel {
SubstrateMinimal,
SubstrateBalanced,
SubstrateAggressive,
SubstrateQuantum,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QuantumCoherenceState {
pub coherence_duration: Duration,
pub entanglement_network: Vec<String>,
pub superposition_matrix: Vec<Vec<BF16>>,
pub quantum_annealing_schedule: Vec<f64>,
pub trinary_coherence_map: HashMap<String, Trinary>,
pub tunneling_frequency: f32,
pub narrative_alignment: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThermalEquilibriumState {
pub equilibrium_temperature: f32,
pub thermal_gradient_map: HashMap<String, f32>,
pub heat_flow_optimization: Vec<String>,
pub cooling_efficiency_map: HashMap<String, f32>,
pub trinary_thermal_balance: Trinary,
pub narrative_harmony: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkHarmonyState {
pub harmony_bandwidth: f64,
pub latency_optimization: f64,
pub packet_loss_reduction: f64,
pub network_jitter_stabilization: f64,
pub trinary_sync_network: HashMap<String, Trinary>,
pub narrative_continuity: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrinaryState {
pub state_id: String,
pub current_value: Trinary,
pub probability_distribution: [f32; 3], // [-1, 0, +1]
pub tunneling_history: Vec<Trinary>,
pub entanglement_links: Vec<String>,
pub coherence_time: Duration,
pub narrative_context: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubstrateOptimization {
pub substrate_id: String,
pub optimization_level: OptimizationLevel,
pub equilibrium_score: f32,
pub compression_ratio: f32,
pub trinary_coherence: f32,
pub narrative_alignment: f32,
pub performance_gain: f32,
pub thermal_improvement: f32,
pub network_optimization: f32,
}
#[derive(Debug, Clone)]
pub struct HardwareConfig {
pub cpu_cores: u8,
pub cpu_base_freq: f64,
pub cpu_boost_freq: f64,
pub ram_capacity_gb: u64,
pub ram_frequency_mhz: f64,
pub gpu_vram_gb: u64,
pub gpu_core_clock: f64,
pub nvme_capacity_tb: f64,
pub pcie_lanes: u8,
pub story_arc: StoryArc,
}
impl Default for UnifiedSubstrateOptimizer {
fn default() -> Self {
Self::new()
}
}
impl UnifiedSubstrateOptimizer {
pub fn new() -> Self {
Self {
substrate_state: DashMap::new(),
quantum_coherence: DashMap::new(),
thermal_equilibrium: DashMap::new(),
network_harmony: DashMap::new(),
trinary_cache: DashMap::new(),
metanarrative_cache: DashMap::new(),
teleport: TeleportCompressor::new(),
moe: MixtureOfExperts::new(),
kanban: KanbanBoard::new("Unified Substrate Control".to_string()),
}
}
/// Initialize unified substrate with metanarrative context
pub async fn initialize_substrate(&self, hardware_config: HardwareConfig) -> Result<String> {
let substrate_id = Uuid::new_v4().to_string();
// Create metanarrative context
let metanarrative = self.create_metanarrative_context(&substrate_id, &hardware_config).await?;
// Create unified substrate state with narrative integration
let substrate_state = self.create_unified_substrate_state(&substrate_id, hardware_config, &metanarrative).await?;
// Initialize quantum coherence with trinary logic and narrative
self.initialize_quantum_coherence(&substrate_id, &substrate_state, &metanarrative).await?;
// Initialize thermal equilibrium with narrative balance
self.initialize_thermal_equilibrium(&substrate_id, &substrate_state, &metanarrative).await?;
// Initialize network harmony with narrative flow
self.initialize_network_harmony(&substrate_id, &substrate_state, &metanarrative).await?;
// Cache the unified state with metanarrative
self.substrate_state.insert(substrate_id.clone(), substrate_state);
self.metanarrative_cache.insert(substrate_id.clone(), metanarrative);
Ok(substrate_id)
}
/// Optimize unified substrate with metanarrative harness and MoE
pub async fn optimize_substrate(&self, substrate_id: &str) -> Result<SubstrateOptimization> {
let substrate = self.substrate_state.get(substrate_id)
.ok_or_else(|| anyhow!("Substrate not found: {}", substrate_id))?;
let metanarrative = self.metanarrative_cache.get(substrate_id)
.ok_or_else(|| anyhow!("Metanarrative not found: {}", substrate_id))?;
// Create optimization narrative for MoE
let optimization_narrative = self.create_optimization_narrative(substrate.value(), metanarrative.value()).await?;
// Process with MoE using metanarrative context
let _moe_result = self.moe.route(&optimization_narrative).await?;
// Apply trinary logic optimization with narrative guidance
let trinary_optimized = self.apply_trinary_optimization_with_narrative(substrate.value(), metanarrative.value()).await?;
// Calculate unified optimization metrics with narrative alignment
let optimization = SubstrateOptimization {
substrate_id: substrate_id.to_string(),
optimization_level: OptimizationLevel::SubstrateQuantum,
equilibrium_score: self.calculate_equilibrium_score(&trinary_optimized).await?,
compression_ratio: self.calculate_compression_ratio(&trinary_optimized).await?,
trinary_coherence: self.calculate_trinary_coherence(&trinary_optimized).await?,
narrative_alignment: self.calculate_narrative_alignment(metanarrative.value(), &trinary_optimized).await?,
performance_gain: self.calculate_performance_gain(substrate.value(), &trinary_optimized).await?,
thermal_improvement: self.calculate_thermal_improvement(substrate.value(), &trinary_optimized).await?,
network_optimization: self.calculate_network_optimization(substrate.value(), &trinary_optimized).await?,
};
Ok(optimization)
}
/// Create metanarrative context for the substrate
async fn create_metanarrative_context(&self, substrate_id: &str, config: &HardwareConfig) -> Result<MetanarrativeContext> {
let narrative_id = format!("narrative_{}", substrate_id);
// Create character roles for each component
let mut character_roles = HashMap::new();
character_roles.insert("CPU".to_string(), CharacterRole {
role_name: "The Strategist".to_string(),
purpose: "Orchestrates computational decisions and maintains system intelligence".to_string(),
capabilities: vec!["Parallel processing".to_string(), "Decision optimization".to_string()],
growth_potential: 0.8,
narrative_weight: 0.9,
});
character_roles.insert("GPU".to_string(), CharacterRole {
role_name: "The Visionary".to_string(),
purpose: "Handles visual computation and parallel processing tasks".to_string(),
capabilities: vec!["Graphics rendering".to_string(), "Parallel computation".to_string()],
growth_potential: 0.9,
narrative_weight: 0.8,
});
character_roles.insert("RAM".to_string(), CharacterRole {
role_name: "The Memory Keeper".to_string(),
purpose: "Maintains active data and enables rapid access to information".to_string(),
capabilities: vec!["Data storage".to_string(), "Rapid retrieval".to_string()],
growth_potential: 0.7,
narrative_weight: 0.7,
});
character_roles.insert("NVMe".to_string(), CharacterRole {
role_name: "The Archive".to_string(),
purpose: "Preserves long-term data and provides persistent storage".to_string(),
capabilities: vec!["Data persistence".to_string(), "High-speed access".to_string()],
growth_potential: 0.6,
narrative_weight: 0.6,
});
// Create plot points based on optimization journey
let plot_points = vec![
PlotPoint {
point_id: "initialization".to_string(),
description: "System initialization and component awakening".to_string(),
significance: 0.8,
required_optimization: OptimizationLevel::SubstrateMinimal,
trinary_logic_required: false,
},
PlotPoint {
point_id: "optimization".to_string(),
description: "Quantum optimization and signal refinement".to_string(),
significance: 0.9,
required_optimization: OptimizationLevel::SubstrateAggressive,
trinary_logic_required: true,
},
PlotPoint {
point_id: "transcendence".to_string(),
description: "Achieving unified equilibrium and transcendent performance".to_string(),
significance: 1.0,
required_optimization: OptimizationLevel::SubstrateQuantum,
trinary_logic_required: true,
},
];
// Create thematic elements
let thematic_elements = vec![
ThematicElement {
theme: "Unity".to_string(),
manifestation: "All components working in perfect harmony".to_string(),
optimization_impact: 0.9,
narrative_coherence: 0.95,
},
ThematicElement {
theme: "Balance".to_string(),
manifestation: "Thermal, electrical, and computational equilibrium".to_string(),
optimization_impact: 0.8,
narrative_coherence: 0.9,
},
ThematicElement {
theme: "Evolution".to_string(),
manifestation: "Continuous improvement and adaptation".to_string(),
optimization_impact: 0.7,
narrative_coherence: 0.85,
},
];
Ok(MetanarrativeContext {
narrative_id,
story_arc: config.story_arc.clone(),
character_roles,
plot_points,
thematic_elements,
emotional_resonance: 0.85,
purpose_alignment: 0.9,
})
}
/// Create unified substrate state with narrative integration
async fn create_unified_substrate_state(
&self,
substrate_id: &str,
config: HardwareConfig,
metanarrative: &MetanarrativeContext
) -> Result<SubstrateState> {
let mut components = Vec::new();
// Create CPU component with narrative role
components.push(HardwareComponent {
component_type: ComponentType::CPU,
identifier: format!("cpu_{}_cores", config.cpu_cores),
signal_characteristics: SignalCharacteristics {
frequency: config.cpu_base_freq,
amplitude: 1.0,
phase: 0.0,
jitter: 0.01,
signal_to_noise: 40.0,
timing_precision: 0.99,
compression_efficiency: 0.8,
trinary_stability: 0.9,
narrative_resonance: 0.9,
},
thermal_profile: ThermalProfile {
temperature: 45.0,
thermal_gradient: vec![0.1, 0.2, 0.1],
heat_dissipation_rate: 0.8,
throttling_threshold: 85.0,
cooling_efficiency: 0.7,
thermal_compression: 0.6,
trinary_thermal_state: Trinary::Neutral,
narrative_balance: 0.8,
},
quantum_state: QuantumState {
coherence_time: Duration::seconds(10),
entanglement_strength: 0.8,
superposition_stability: 0.9,
quantum_tunnels: 5,
energy_landscape: vec![BF16::from_f32(0.5); 10],
annealing_progress: 0.0,
trinary_tunneling: vec![Trinary::Neutral; 5],
narrative_coherence: 0.85,
},
network_profile: NetworkProfile {
bandwidth: 1000.0,
latency: 0.1,
packet_loss: 0.001,
network_jitter: 0.01,
compression_ratio: 0.7,
harmony_score: 0.8,
trinary_sync_state: Trinary::Positive,
narrative_flow: 0.85,
},
trinary_logic_state: TrinaryLogicState {
current_state: Trinary::Positive,
tunneling_probability: 0.3,
coherence_duration: Duration::seconds(5),
entanglement_partners: vec!["GPU".to_string(), "RAM".to_string()],
superposition_history: vec![Trinary::Neutral, Trinary::Positive],
narrative_significance: 0.9,
},
narrative_role: metanarrative.character_roles.get("CPU").cloned(),
});
// Add other components similarly...
Ok(SubstrateState {
timestamp: Utc::now(),
substrate_id: substrate_id.to_string(),
components,
signal_interconnectivity: SignalMatrix {
interconnectivity_map: HashMap::new(),
signal_propagation: vec![],
interference_patterns: vec![],
optimization_paths: vec![],
quantum_tunneling: HashMap::new(),
trinary_interactions: HashMap::new(),
narrative_connections: HashMap::new(),
},
quantum_entanglement: vec![],
compression_ratio: 0.0,
optimization_level: OptimizationLevel::SubstrateMinimal,
bf16_unified_state: vec![],
equilibrium_score: 0.0,
trinary_coherence: vec![],
metanarrative_alignment: 0.0,
})
}
/// Apply trinary optimization with narrative guidance
async fn apply_trinary_optimization_with_narrative(
&self,
substrate: &SubstrateState,
metanarrative: &MetanarrativeContext
) -> Result<SubstrateState> {
let mut optimized = substrate.clone();
// Apply trinary logic based on narrative context
for component in &mut optimized.components {
if let Some(role) = &component.narrative_role {
// Adjust trinary state based on character role and narrative
let narrative_influence = role.narrative_weight * metanarrative.emotional_resonance;
component.trinary_logic_state.current_state = match role.role_name.as_str() {
"The Strategist" => Trinary::Positive, // CPU should be proactive
"The Visionary" => Trinary::Positive, // GPU should be innovative
"The Memory Keeper" => Trinary::Neutral, // RAM should be balanced
"The Archive" => Trinary::Negative, // NVMe should be stable
_ => Trinary::Neutral,
};
// Adjust tunneling probability based on narrative significance
component.trinary_logic_state.tunneling_probability =
role.growth_potential * narrative_influence;
}
}
// Calculate overall trinary coherence based on narrative harmony
let trinary_coherence = self.calculate_narrative_trinary_coherence(&optimized, metanarrative).await?;
optimized.trinary_coherence = vec![Trinary::from_f32(trinary_coherence); optimized.components.len()];
// Update metanarrative alignment
optimized.metanarrative_alignment = self.calculate_narrative_alignment(metanarrative, &optimized).await?;
Ok(optimized)
}
/// Calculate narrative trinary coherence
async fn calculate_narrative_trinary_coherence(
&self,
substrate: &SubstrateState,
_metanarrative: &MetanarrativeContext
) -> Result<f32> {
let mut coherence_sum = 0.0;
let mut weight_sum = 0.0;
for component in &substrate.components {
if let Some(role) = &component.narrative_role {
let role_coherence = role.narrative_weight * component.trinary_logic_state.tunneling_probability;
coherence_sum += role_coherence;
weight_sum += role.narrative_weight;
}
}
Ok(if weight_sum > 0.0 { coherence_sum / weight_sum } else { 0.5 })
}
/// Calculate narrative alignment score
async fn calculate_narrative_alignment(
&self,
_metanarrative: &MetanarrativeContext,
substrate: &SubstrateState
) -> Result<f32> {
let mut alignment_sum = 0.0;
let mut component_count = 0;
for component in &substrate.components {
if let Some(role) = &component.narrative_role {
let role_alignment = role.growth_potential * substrate.metanarrative_alignment;
alignment_sum += role_alignment;
component_count += 1;
}
}
Ok(if component_count > 0 { alignment_sum / component_count as f32 } else { 0.0 })
}
// Placeholder implementations for other methods
async fn initialize_quantum_coherence(&self, _substrate_id: &str, _substrate: &SubstrateState, _metanarrative: &MetanarrativeContext) -> Result<()> {
Ok(())
}
async fn initialize_thermal_equilibrium(&self, _substrate_id: &str, _substrate: &SubstrateState, _metanarrative: &MetanarrativeContext) -> Result<()> {
Ok(())
}
async fn initialize_network_harmony(&self, _substrate_id: &str, _substrate: &SubstrateState, _metanarrative: &MetanarrativeContext) -> Result<()> {
Ok(())
}
async fn create_optimization_narrative(&self, _substrate: &SubstrateState, _metanarrative: &MetanarrativeContext) -> Result<String> {
Ok("Optimization narrative".to_string())
}
async fn calculate_equilibrium_score(&self, _substrate: &SubstrateState) -> Result<f32> {
Ok(0.8)
}
async fn calculate_compression_ratio(&self, _substrate: &SubstrateState) -> Result<f32> {
Ok(0.7)
}
async fn calculate_trinary_coherence(&self, _substrate: &SubstrateState) -> Result<f32> {
Ok(0.9)
}
async fn calculate_performance_gain(&self, _original: &SubstrateState, _optimized: &SubstrateState) -> Result<f32> {
Ok(0.25)
}
async fn calculate_thermal_improvement(&self, _original: &SubstrateState, _optimized: &SubstrateState) -> Result<f32> {
Ok(0.15)
}
async fn calculate_network_optimization(&self, _original: &SubstrateState, _optimized: &SubstrateState) -> Result<f32> {
Ok(0.20)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_unified_substrate_initialization() {
let optimizer = UnifiedSubstrateOptimizer::new();
let config = HardwareConfig {
cpu_cores: 8,
cpu_base_freq: 3.5,
cpu_boost_freq: 5.0,
ram_capacity_gb: 32,
ram_frequency_mhz: 3200.0,
gpu_vram_gb: 16,
gpu_core_clock: 1800.0,
nvme_capacity_tb: 2.0,
pcie_lanes: 16,
story_arc: StoryArc::Optimization,
};
let substrate_id = optimizer.initialize_substrate(config).await.unwrap();
assert!(!substrate_id.is_empty());
}
#[tokio::test]
async fn test_trinary_logic() {
let negative = Trinary::Negative;
let positive = Trinary::Positive;
let neutral = Trinary::Neutral;
assert_eq!(negative.to_f32(), -1.0);
assert_eq!(positive.to_f32(), 1.0);
assert_eq!(neutral.to_f32(), 0.0);
assert_eq!(Trinary::from_f32(-0.5), Trinary::Negative);
assert_eq!(Trinary::from_f32(0.0), Trinary::Neutral);
assert_eq!(Trinary::from_f32(0.5), Trinary::Positive);
}
}