1use super::core::{MessageCategory, MessageKey, MessageTemplate, MessageType};
4use std::collections::HashMap;
5
6pub fn initialize_solver_messages(registry: &mut HashMap<MessageKey, MessageTemplate>) {
8 initialize_substitution_messages(registry);
9 initialize_elimination_messages(registry);
10 initialize_matrix_method_messages(registry);
11 initialize_solution_interpretation_messages(registry);
12}
13
14fn initialize_substitution_messages(registry: &mut HashMap<MessageKey, MessageTemplate>) {
16 registry.insert(
17 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemSubstitution, 0),
18 MessageTemplate::new(
19 "Substitution Method Introduction",
20 "Solve system using substitution method\nStep 1: Solve one equation for one variable\nStep 2: Substitute into other equation",
21 &[]
22 )
23 );
24
25 registry.insert(
26 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemSubstitution, 1),
27 MessageTemplate::new(
28 "Substitution Step 1: Isolate Variable",
29 "From equation {equation_number}: {equation}\nSolve for {variable}: {variable} = {expression}",
30 &["equation_number", "equation", "variable", "expression"]
31 )
32 );
33
34 registry.insert(
35 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemSubstitution, 2),
36 MessageTemplate::new(
37 "Substitution Step 2: Substitute",
38 "Substitute {variable} = {expression} into equation {equation_number}:\n{original_equation} becomes {substituted_equation}",
39 &["variable", "expression", "equation_number", "original_equation", "substituted_equation"]
40 )
41 );
42
43 registry.insert(
44 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemSubstitution, 3),
45 MessageTemplate::new(
46 "Substitution Step 3: Solve Single Variable",
47 "Now solve for {variable} in the single-variable equation:\n{equation}\nSolution: {variable} = {solution}",
48 &["variable", "equation", "solution"]
49 )
50 );
51
52 registry.insert(
53 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemSubstitution, 4),
54 MessageTemplate::new(
55 "Substitution Step 4: Back-Substitute",
56 "Substitute {variable} = {value} back into {variable_expr} = {expression}:\n{result_variable} = {result_value}",
57 &["variable", "value", "variable_expr", "expression", "result_variable", "result_value"]
58 )
59 );
60}
61
62fn initialize_elimination_messages(registry: &mut HashMap<MessageKey, MessageTemplate>) {
64 registry.insert(
65 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemElimination, 0),
66 MessageTemplate::new(
67 "Elimination Method Introduction",
68 "Solve system using elimination (addition) method\nAlign equations and add/subtract to eliminate one variable",
69 &[]
70 )
71 );
72
73 registry.insert(
74 MessageKey::new(
75 MessageCategory::SystemEquation,
76 MessageType::SystemElimination,
77 1,
78 ),
79 MessageTemplate::new(
80 "Elimination Step 1: Align Equations",
81 "Write system in standard form:\nEquation 1: {equation1}\nEquation 2: {equation2}",
82 &["equation1", "equation2"],
83 ),
84 );
85
86 registry.insert(
87 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemElimination, 2),
88 MessageTemplate::new(
89 "Elimination Step 2: Multiply for Elimination",
90 "To eliminate {variable}, multiply:\nEquation 1 by {multiplier1}: {new_equation1}\nEquation 2 by {multiplier2}: {new_equation2}",
91 &["variable", "multiplier1", "new_equation1", "multiplier2", "new_equation2"]
92 )
93 );
94
95 registry.insert(
96 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemElimination, 3),
97 MessageTemplate::new(
98 "Elimination Step 3: Add/Subtract Equations",
99 "{operation} the equations to eliminate {variable}:\n({equation1}) {operator} ({equation2})\nResult: {resulting_equation}",
100 &["operation", "variable", "equation1", "operator", "equation2", "resulting_equation"]
101 )
102 );
103
104 registry.insert(
105 MessageKey::new(
106 MessageCategory::SystemEquation,
107 MessageType::SystemElimination,
108 4,
109 ),
110 MessageTemplate::new(
111 "Elimination Step 4: Solve for Remaining Variable",
112 "Solve simplified equation for {variable}:\n{equation}\n{variable} = {solution}",
113 &["variable", "equation", "solution"],
114 ),
115 );
116
117 registry.insert(
118 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemElimination, 5),
119 MessageTemplate::new(
120 "Elimination Step 5: Find Other Variable",
121 "Substitute {variable} = {value} into original equation:\n{equation}\nSolve for {other_variable}: {other_variable} = {other_value}",
122 &["variable", "value", "equation", "other_variable", "other_value"]
123 )
124 );
125}
126
127fn initialize_matrix_method_messages(registry: &mut HashMap<MessageKey, MessageTemplate>) {
129 registry.insert(
130 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemMatrix, 0),
131 MessageTemplate::new(
132 "Matrix Method Introduction",
133 "Solve system using matrix form: Ax = b\nWrite system as augmented matrix and row reduce",
134 &[]
135 )
136 );
137
138 registry.insert(
139 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemMatrix, 1),
140 MessageTemplate::new(
141 "Matrix Form Setup",
142 "Express system as matrix equation:\nCoefficient matrix A: {coefficient_matrix}\nVariable vector x: {variable_vector}\nConstant vector b: {constant_vector}",
143 &["coefficient_matrix", "variable_vector", "constant_vector"]
144 )
145 );
146
147 registry.insert(
148 MessageKey::new(
149 MessageCategory::SystemEquation,
150 MessageType::SystemMatrix,
151 2,
152 ),
153 MessageTemplate::new(
154 "Augmented Matrix",
155 "Form augmented matrix [A|b]:\n{augmented_matrix}\nApply row operations to reduce",
156 &["augmented_matrix"],
157 ),
158 );
159
160 registry.insert(
161 MessageKey::new(
162 MessageCategory::SystemEquation,
163 MessageType::SystemMatrix,
164 3,
165 ),
166 MessageTemplate::new(
167 "Row Reduction Step",
168 "Row operation: {operation}\nBefore: {matrix_before}\nAfter: {matrix_after}",
169 &["operation", "matrix_before", "matrix_after"],
170 ),
171 );
172
173 registry.insert(
174 MessageKey::new(MessageCategory::SystemEquation, MessageType::SystemMatrix, 4),
175 MessageTemplate::new(
176 "Reduced Row Echelon Form",
177 "Matrix in reduced row echelon form:\n{rref_matrix}\nRead solutions directly from final column",
178 &["rref_matrix"]
179 )
180 );
181}
182
183fn initialize_solution_interpretation_messages(
185 registry: &mut HashMap<MessageKey, MessageTemplate>,
186) {
187 registry.insert(
188 MessageKey::new(MessageCategory::SystemEquation, MessageType::Result, 0),
189 MessageTemplate::new(
190 "Unique Solution Found",
191 "System has unique solution:\n{solution_display}\nThis is the only point that satisfies all equations",
192 &["solution_display"]
193 )
194 );
195
196 registry.insert(
197 MessageKey::new(MessageCategory::SystemEquation, MessageType::Result, 1),
198 MessageTemplate::new(
199 "No Solution",
200 "System has no solution (inconsistent)\n{contradiction_explanation}\nThe equations represent parallel lines/planes that never intersect",
201 &["contradiction_explanation"]
202 )
203 );
204
205 registry.insert(
206 MessageKey::new(MessageCategory::SystemEquation, MessageType::Result, 2),
207 MessageTemplate::new(
208 "Infinitely Many Solutions",
209 "System has infinitely many solutions (dependent)\nSolution set: {parametric_solution}\nThe equations represent the same line/plane",
210 &["parametric_solution"]
211 )
212 );
213
214 registry.insert(
215 MessageKey::new(MessageCategory::SystemEquation, MessageType::Verification, 0),
216 MessageTemplate::new(
217 "Verify System Solution",
218 "Check solution {solution} in all equations:\nEquation 1: {verification1}\nEquation 2: {verification2}\n{verification_conclusion}",
219 &["solution", "verification1", "verification2", "verification_conclusion"]
220 )
221 );
222
223 registry.insert(
224 MessageKey::new(MessageCategory::SystemEquation, MessageType::Insight, 0),
225 MessageTemplate::new(
226 "System Solving Strategy",
227 "Choosing solution method:\nSubstitution: Best when one variable is already isolated\nElimination: Best when coefficients line up nicely\nMatrix: Best for large systems (3+ equations)",
228 &[]
229 )
230 );
231
232 registry.insert(
233 MessageKey::new(MessageCategory::SystemEquation, MessageType::Insight, 1),
234 MessageTemplate::new(
235 "Geometric Interpretation",
236 "Geometric meaning for {dimension}D system:\n{geometric_description}\nSolution represents intersection point(s)",
237 &["dimension", "geometric_description"]
238 )
239 );
240}