1use crate::{ModelConfig, TrainingStats};
9use scirs2_core::ndarray_ext::{Array1, Array2, Array3};
10use serde::{Deserialize, Serialize};
11use std::collections::HashMap;
12use uuid::Uuid;
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct NovelArchitectureConfig {
17 pub base_config: ModelConfig,
18 pub architecture: ArchitectureType,
20 pub architecture_params: ArchitectureParams,
22 pub dynamics_config: DynamicsConfig,
24 pub geometric_config: GeometricConfig,
26}
27
28impl Default for NovelArchitectureConfig {
29 fn default() -> Self {
30 Self {
31 base_config: ModelConfig::default(),
32 architecture: ArchitectureType::GraphTransformer,
33 architecture_params: ArchitectureParams::default(),
34 dynamics_config: DynamicsConfig::default(),
35 geometric_config: GeometricConfig::default(),
36 }
37 }
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42pub enum ArchitectureType {
43 GraphTransformer,
45 NeuralODE,
47 HyperbolicEmbedding,
49 GeometricDeepLearning,
51 QuantumInspired,
53 ContinuousNormalizingFlow,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize, Default)]
59pub struct ArchitectureParams {
60 pub transformer_params: GraphTransformerParams,
62 pub ode_params: NeuralODEParams,
64 pub hyperbolic_params: HyperbolicParams,
66 pub geometric_params: GeometricParams,
68 pub quantum_params: QuantumParams,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct GraphTransformerParams {
75 pub num_heads: usize,
77 pub num_layers: usize,
79 pub attention_dim: usize,
81 pub ff_dim: usize,
83 pub structural_dim: usize,
85 pub use_positional_encoding: bool,
87 pub attention_mechanism: AttentionMechanism,
89 pub structural_bias: StructuralBias,
91}
92
93impl Default for GraphTransformerParams {
94 fn default() -> Self {
95 Self {
96 num_heads: 8,
97 num_layers: 6,
98 attention_dim: 512,
99 ff_dim: 2048,
100 structural_dim: 128,
101 use_positional_encoding: true,
102 attention_mechanism: AttentionMechanism::SparseAttention,
103 structural_bias: StructuralBias::SpectralFeatures,
104 }
105 }
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
110pub enum AttentionMechanism {
111 MultiHeadAttention,
113 SparseAttention,
115 LinearAttention,
117 PerformerAttention,
119 GraphAwareAttention,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
125pub enum StructuralBias {
126 SpectralFeatures,
128 ShortestPath,
130 RandomWalk,
132 CentralityMeasures,
134 GraphMotifs,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct NeuralODEParams {
141 pub solver_type: ODESolverType,
143 pub time_steps: usize,
145 pub tolerance: f64,
147 pub hidden_dims: Vec<usize>,
149 pub activation: ActivationType,
151 pub use_adjoint: bool,
153 pub regularization: ODERegularization,
155}
156
157impl Default for NeuralODEParams {
158 fn default() -> Self {
159 Self {
160 solver_type: ODESolverType::DormandPrince,
161 time_steps: 100,
162 tolerance: 1e-6,
163 hidden_dims: vec![512, 256, 128],
164 activation: ActivationType::Swish,
165 use_adjoint: true,
166 regularization: ODERegularization::None,
167 }
168 }
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
173pub enum ODESolverType {
174 Euler,
176 RungeKutta4,
178 DormandPrince,
180 AdamsBashforth,
182 BackwardEuler,
184}
185
186#[derive(Debug, Clone, Serialize, Deserialize)]
188pub enum ODERegularization {
189 None,
190 KineticEnergy,
192 JacobianFrobenius,
194 SpectralNormalization,
196}
197
198#[derive(Debug, Clone, Serialize, Deserialize)]
200pub enum ActivationType {
201 ReLU,
202 Swish,
203 Mish,
204 GELU,
205 ELU,
206 LeakyReLU,
207 Tanh,
208}
209
210#[derive(Debug, Clone, Serialize, Deserialize)]
212pub struct HyperbolicParams {
213 pub manifold: HyperbolicManifold,
215 pub curvature: f64,
217 pub manifold_dim: usize,
219 pub optimizer: ManifoldOptimizer,
221 pub distance_function: HyperbolicDistance,
223 pub initialization: HyperbolicInit,
225}
226
227impl Default for HyperbolicParams {
228 fn default() -> Self {
229 Self {
230 manifold: HyperbolicManifold::Poincare,
231 curvature: -1.0,
232 manifold_dim: 128,
233 optimizer: ManifoldOptimizer::RiemannianAdam,
234 distance_function: HyperbolicDistance::Poincare,
235 initialization: HyperbolicInit::RandomNormal,
236 }
237 }
238}
239
240#[derive(Debug, Clone, Serialize, Deserialize)]
242pub enum HyperbolicManifold {
243 Poincare,
245 Klein,
247 Hyperboloid,
249 UpperHalfSpace,
251}
252
253#[derive(Debug, Clone, Serialize, Deserialize)]
255pub enum ManifoldOptimizer {
256 RiemannianSGD,
258 RiemannianAdam,
260 RiemannianAdaGrad,
262 ExponentialMap,
264}
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
268pub enum HyperbolicDistance {
269 Poincare,
271 Hyperboloid,
273 Geodesic,
275}
276
277#[derive(Debug, Clone, Serialize, Deserialize)]
279pub enum HyperbolicInit {
280 RandomNormal,
282 WrappedNormal,
284 UniformHyperbolic,
286 TreeBased,
288}
289
290#[derive(Debug, Clone, Serialize, Deserialize)]
292pub struct GeometricParams {
293 pub space_type: GeometricSpace,
295 pub equivariance_groups: Vec<EquivarianceGroup>,
297 pub use_gauge_equivariance: bool,
299 pub fiber_dim: usize,
301 pub learn_connection: bool,
303 pub curvature_regularization: f64,
305}
306
307impl Default for GeometricParams {
308 fn default() -> Self {
309 Self {
310 space_type: GeometricSpace::RiemannianManifold,
311 equivariance_groups: vec![EquivarianceGroup::SO3, EquivarianceGroup::SE3],
312 use_gauge_equivariance: true,
313 fiber_dim: 64,
314 learn_connection: true,
315 curvature_regularization: 0.01,
316 }
317 }
318}
319
320#[derive(Debug, Clone, Serialize, Deserialize)]
322pub enum GeometricSpace {
323 RiemannianManifold,
325 LieGroup,
327 FiberBundle,
329 HomogeneousSpace,
331 SimplicialComplex,
333}
334
335#[derive(Debug, Clone, Serialize, Deserialize)]
337pub enum EquivarianceGroup {
338 SO3,
340 SE3,
342 GLn,
344 SymmetricGroup,
346 LorentzGroup,
348}
349
350#[derive(Debug, Clone, Serialize, Deserialize)]
352pub struct QuantumParams {
353 pub num_qubits: usize,
355 pub gate_set: QuantumGateSet,
357 pub entanglement: EntanglementStructure,
359 pub measurement: QuantumMeasurement,
361 pub noise_model: QuantumNoise,
363 pub hybrid_layers: bool,
365}
366
367impl Default for QuantumParams {
368 fn default() -> Self {
369 Self {
370 num_qubits: 10,
371 gate_set: QuantumGateSet::Universal,
372 entanglement: EntanglementStructure::Linear,
373 measurement: QuantumMeasurement::Computational,
374 noise_model: QuantumNoise::None,
375 hybrid_layers: true,
376 }
377 }
378}
379
380#[derive(Debug, Clone, Serialize, Deserialize)]
382pub enum QuantumGateSet {
383 Universal,
385 Clifford,
387 Variational,
389 Adiabatic,
391}
392
393#[derive(Debug, Clone, Serialize, Deserialize)]
395pub enum EntanglementStructure {
396 Linear,
398 AllToAll,
400 Tree,
402 HardwareEfficient,
404}
405
406#[derive(Debug, Clone, Serialize, Deserialize)]
408pub enum QuantumMeasurement {
409 Computational,
411 Pauli,
413 Tomography,
415 Shadow,
417}
418
419#[derive(Debug, Clone, Serialize, Deserialize)]
421pub enum QuantumNoise {
422 None,
423 Depolarizing,
425 AmplitudeDamping,
427 PhaseDamping,
429 DeviceNoise,
431}
432
433#[derive(Debug, Clone, Serialize, Deserialize)]
435pub struct DynamicsConfig {
436 pub time_evolution: TimeEvolution,
438 pub flow_type: FlowType,
440 pub integration_scheme: IntegrationScheme,
442 pub stability_constraints: StabilityConstraints,
444}
445
446impl Default for DynamicsConfig {
447 fn default() -> Self {
448 Self {
449 time_evolution: TimeEvolution::default(),
450 flow_type: FlowType::NormalizingFlow,
451 integration_scheme: IntegrationScheme::AdaptiveRungeKutta,
452 stability_constraints: StabilityConstraints::default(),
453 }
454 }
455}
456
457#[derive(Debug, Clone, Serialize, Deserialize)]
459pub struct TimeEvolution {
460 pub t_start: f64,
462 pub t_end: f64,
464 pub time_steps: usize,
466 pub adaptive: bool,
468}
469
470impl Default for TimeEvolution {
471 fn default() -> Self {
472 Self {
473 t_start: 0.0,
474 t_end: 1.0,
475 time_steps: 100,
476 adaptive: true,
477 }
478 }
479}
480
481#[derive(Debug, Clone, Serialize, Deserialize)]
483pub enum FlowType {
484 NormalizingFlow,
486 ContinuousNormalizingFlow,
488 NeuralFlow,
490 HamiltonianFlow,
492}
493
494#[derive(Debug, Clone, Serialize, Deserialize)]
496pub enum IntegrationScheme {
497 FixedRungeKutta,
499 AdaptiveRungeKutta,
501 SymplecticIntegrator,
503 ImplicitMethods,
505}
506
507#[derive(Debug, Clone, Serialize, Deserialize)]
509pub struct StabilityConstraints {
510 pub max_eigenvalue: f64,
512 pub lyapunov_reg: f64,
514 pub spectral_norm: bool,
516}
517
518impl Default for StabilityConstraints {
519 fn default() -> Self {
520 Self {
521 max_eigenvalue: 1.0,
522 lyapunov_reg: 0.01,
523 spectral_norm: true,
524 }
525 }
526}
527
528#[derive(Debug, Clone, Serialize, Deserialize, Default)]
530pub struct GeometricConfig {
531 pub manifold_learning: ManifoldLearning,
533 pub curvature_computation: CurvatureComputation,
535 pub parallel_transport: ParallelTransport,
537}
538
539#[derive(Debug, Clone, Serialize, Deserialize)]
541pub struct ManifoldLearning {
542 pub intrinsic_dim: usize,
544 pub neighborhood_size: usize,
546 pub embedding_method: ManifoldMethod,
548}
549
550impl Default for ManifoldLearning {
551 fn default() -> Self {
552 Self {
553 intrinsic_dim: 64,
554 neighborhood_size: 10,
555 embedding_method: ManifoldMethod::Isomap,
556 }
557 }
558}
559
560#[derive(Debug, Clone, Serialize, Deserialize)]
562pub enum ManifoldMethod {
563 Isomap,
565 LLE,
567 LaplacianEigenmaps,
569 DiffusionMaps,
571 TSNE,
573 UMAP,
575}
576
577#[derive(Debug, Clone, Serialize, Deserialize)]
579pub struct CurvatureComputation {
580 pub curvature_type: CurvatureType,
582 pub computation_method: CurvatureMethod,
584 pub regularization: f64,
586}
587
588impl Default for CurvatureComputation {
589 fn default() -> Self {
590 Self {
591 curvature_type: CurvatureType::Ricci,
592 computation_method: CurvatureMethod::FormanRicci,
593 regularization: 0.01,
594 }
595 }
596}
597
598#[derive(Debug, Clone, Serialize, Deserialize)]
600pub enum CurvatureType {
601 Gaussian,
603 Mean,
605 Ricci,
607 Scalar,
609 Sectional,
611}
612
613#[derive(Debug, Clone, Serialize, Deserialize)]
615pub enum CurvatureMethod {
616 FormanRicci,
618 OllivierRicci,
620 DiscreteGaussian,
622 GraphBased,
624}
625
626#[derive(Debug, Clone, Serialize, Deserialize)]
628pub struct ParallelTransport {
629 pub method: TransportMethod,
631 pub path_steps: usize,
633 pub tolerance: f64,
635}
636
637impl Default for ParallelTransport {
638 fn default() -> Self {
639 Self {
640 method: TransportMethod::SchildLadder,
641 path_steps: 50,
642 tolerance: 1e-6,
643 }
644 }
645}
646
647#[derive(Debug, Clone, Serialize, Deserialize)]
649pub enum TransportMethod {
650 SchildLadder,
652 PoleLadder,
654 GeodesicTransport,
656 DiscreteTransport,
658}
659
660#[derive(Debug, Clone)]
662pub struct NovelArchitectureModel {
663 pub config: NovelArchitectureConfig,
664 pub model_id: Uuid,
665 pub entities: HashMap<String, usize>,
666 pub relations: HashMap<String, usize>,
667 pub entity_embeddings: Array2<f64>,
668 pub relation_embeddings: Array2<f64>,
669 pub architecture_state: ArchitectureState,
670 pub training_stats: Option<TrainingStats>,
671 pub is_trained: bool,
672}
673
674#[derive(Debug, Clone)]
676pub struct ArchitectureState {
677 pub transformer_state: Option<GraphTransformerState>,
679 pub ode_state: Option<NeuralODEState>,
681 pub hyperbolic_state: Option<HyperbolicState>,
683 pub geometric_state: Option<GeometricState>,
685 pub quantum_state: Option<QuantumState>,
687}
688
689#[derive(Debug, Clone)]
691pub struct GraphTransformerState {
692 pub attention_weights: Array3<f64>,
694 pub layer_outputs: Vec<Array2<f64>>,
696 pub structural_features: Array2<f64>,
698 pub position_encodings: Option<Array2<f64>>,
700}
701
702#[derive(Debug, Clone)]
704pub struct NeuralODEState {
705 pub current_time: f64,
707 pub trajectory: Vec<Array2<f64>>,
709 pub ode_params: Array2<f64>,
711 pub integration_stats: IntegrationStats,
713}
714
715#[derive(Debug, Clone)]
717pub struct IntegrationStats {
718 pub steps_taken: usize,
719 pub function_evaluations: usize,
720 pub jacobian_evaluations: usize,
721 pub failed_steps: usize,
722 pub final_error: f64,
723}
724
725#[derive(Debug, Clone)]
727pub struct HyperbolicState {
728 pub manifold_embeddings: Array2<f64>,
730 pub curvature: f64,
732 pub tangent_vectors: Array2<f64>,
734 pub metric_tensor: Array3<f64>,
736}
737
738#[derive(Debug, Clone)]
740pub struct GeometricState {
741 pub connection: Array3<f64>,
743 pub curvature_tensor: Array3<f64>,
745 pub transport_maps: HashMap<String, Array2<f64>>,
747 pub equivariance_maps: Vec<Array2<f64>>,
749}
750
751#[derive(Debug, Clone)]
753pub struct QuantumState {
754 pub state_vector: Array1<f64>,
756 pub gates: Vec<Array2<f64>>,
758 pub measurements: Vec<f64>,
760 pub entanglement: f64,
762}