1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//! Partial Differential Equation (PDE) Solvers
//!
//! This module provides a comprehensive framework for solving partial differential equations.
//! It includes classification, various solution methods, and support for standard PDEs like
//! heat, wave, and Laplace equations.
//!
//! # Organization
//!
//! - `types`: Core PDE types and boundary/initial conditions
//! - `classification`: PDE classification algorithms (order, linearity, type)
//! - `registry`: Registry-based solver dispatch (O(1) lookup, extensible)
//! - `methods`: Solution methods (separation of variables, method of characteristics)
//! - `standard`: Standard PDE solvers (heat, wave, Laplace)
//! - `common`: Shared utilities for PDE solving
//!
//! # Examples
//!
//! ```rust
//! use mathhook_core::calculus::pde;
//! use mathhook_core::{symbol, expr};
//!
//! let u = symbol!(u);
//! let x = symbol!(x);
//! let t = symbol!(t);
//! let equation = expr!(u);
//! let pde = pde::Pde::new(equation, u, vec![x, t]);
//!
//! // Solve using automatic solver selection
//! let solution = pde::solve(&pde).unwrap();
//! ```
// Registry pattern for solver dispatch
// Solution methods
// Standard PDEs
// Common utilities
// Educational wrapper
// Re-exports
pub use *;
pub use *;
pub use ;
pub use *;
pub use *;
/// Solves a PDE using automatic solver selection.
///
/// Classifies the PDE and dispatches to the appropriate solver based on PDE type
/// (parabolic, hyperbolic, elliptic) using the registry system.
///
/// # Arguments
///
/// * `pde` - The partial differential equation to solve
///
/// # Returns
///
/// Returns the PDE solution wrapped in `PDESolution` type, or an error if solving fails.
///
/// # Examples
///
/// ```rust
/// use mathhook_core::calculus::pde;
/// use mathhook_core::{symbol, expr};
///
/// let u = symbol!(u);
/// let x = symbol!(x);
/// let t = symbol!(t);
/// let equation = expr!(u);
/// let pde = pde::Pde::new(equation, u, vec![x, t]);
///
/// let solution = pde::solve(&pde).unwrap();
/// ```
///
/// # Errors
///
/// Returns `PDEError` if:
/// - PDE classification fails
/// - No solver available for the PDE type
/// - Solver execution fails