@@ -175,112 +175,112 @@ def test_solve_with_symbolic_input(self):
175
175
np .testing .assert_array_equal (solution ["var" ].sensitivity ["param" ], - 1 )
176
176
np .testing .assert_array_equal (solution ["var" ].sensitivity ["all" ], - 1 )
177
177
178
- def test_least_squares_fit (self ):
179
- # Simple system: a single algebraic equation
180
- var = pybamm .Variable ("var" , domain = "negative electrode" )
181
- model = pybamm .BaseModel ()
182
- # Set length scale to avoid warning
183
- model .length_scales = {"negative electrode" : 1 }
184
-
185
- p = pybamm .InputParameter ("p" )
186
- q = pybamm .InputParameter ("q" )
187
- model .algebraic = {var : (var - p )}
188
- model .initial_conditions = {var : 3 }
189
- model .variables = {"objective" : (var - q ) ** 2 + (p - 3 ) ** 2 }
190
-
191
- # create discretisation
192
- disc = tests .get_discretisation_for_testing ()
193
- disc .process_model (model )
194
-
195
- # Solve
196
- solver = pybamm .CasadiAlgebraicSolver (sensitivity = "casadi" )
197
-
198
- def objective (x ):
199
- solution = solver .solve (model , [0 ], inputs = {"p" : x [0 ], "q" : x [1 ]})
200
- return solution ["objective" ].data .flatten ()
201
-
202
- # without jacobian
203
- lsq_sol = least_squares (objective , [2 , 2 ], method = "lm" )
204
- np .testing .assert_array_almost_equal (lsq_sol .x , [3 , 3 ], decimal = 3 )
205
-
206
- def jac (x ):
207
- solution = solver .solve (model , [0 ], inputs = {"p" : x [0 ], "q" : x [1 ]})
208
- return solution ["objective" ].sensitivity ["all" ]
209
-
210
- # with jacobian
211
- lsq_sol = least_squares (objective , [2 , 2 ], jac = jac , method = "lm" )
212
- np .testing .assert_array_almost_equal (lsq_sol .x , [3 , 3 ], decimal = 3 )
213
-
214
- def test_solve_with_symbolic_input_vector_variable_scalar_input (self ):
215
- var = pybamm .Variable ("var" , "negative electrode" )
216
- model = pybamm .BaseModel ()
217
- # Set length scale to avoid warning
218
- model .length_scales = {"negative electrode" : 1 }
219
- param = pybamm .InputParameter ("param" )
220
- model .algebraic = {var : var + param }
221
- model .initial_conditions = {var : 2 }
222
- model .variables = {"var" : var }
223
-
224
- # create discretisation
225
- disc = tests .get_discretisation_for_testing ()
226
- disc .process_model (model )
227
-
228
- # Solve - scalar input
229
- solver = pybamm .CasadiAlgebraicSolver (sensitivity = "casadi" )
230
- solution = solver .solve (model , [0 ], inputs = {"param" : 7 })
231
- np .testing .assert_array_equal (solution ["var" ].data , - 7 )
232
- solution = solver .solve (model , [0 ], inputs = {"param" : 3 })
233
- np .testing .assert_array_equal (solution ["var" ].data , - 3 )
234
- np .testing .assert_array_equal (solution ["var" ].sensitivity ["param" ], - 1 )
235
-
236
- def test_solve_with_symbolic_input_vector_variable_vector_input (self ):
237
- var = pybamm .Variable ("var" , "negative electrode" )
238
- model = pybamm .BaseModel ()
239
- # Set length scale to avoid warning
240
- model .length_scales = {"negative electrode" : 1 }
241
- param = pybamm .InputParameter ("param" , "negative electrode" )
242
- model .algebraic = {var : var + param }
243
- model .initial_conditions = {var : 2 }
244
- model .variables = {"var" : var }
245
-
246
- # create discretisation
247
- disc = tests .get_discretisation_for_testing ()
248
- disc .process_model (model )
249
- n = disc .mesh ["negative electrode" ].npts
250
-
251
- # Solve - vector input
252
- solver = pybamm .CasadiAlgebraicSolver (sensitivity = "casadi" )
253
- solution = solver .solve (model , [0 ], inputs = {"param" : 3 * np .ones (n )})
254
-
255
- np .testing .assert_array_almost_equal (solution ["var" ].data , - 3 )
256
- np .testing .assert_array_almost_equal (
257
- solution ["var" ].sensitivity ["param" ], - np .eye (40 )
258
- )
259
-
260
- p = np .linspace (0 , 1 , n )[:, np .newaxis ]
261
- solution = solver .solve (model , [0 ], inputs = {"param" : 2 * p })
262
- np .testing .assert_array_almost_equal (solution ["var" ].data , - 2 * p )
263
- np .testing .assert_array_almost_equal (
264
- solution ["var" ].sensitivity ["param" ], - np .eye (40 )
265
- )
266
-
267
- def test_solve_with_symbolic_input_in_initial_conditions (self ):
268
- # Simple system: a single algebraic equation
269
- var = pybamm .Variable ("var" )
270
- model = pybamm .BaseModel ()
271
- model .algebraic = {var : var + 2 }
272
- model .initial_conditions = {var : pybamm .InputParameter ("param" )}
273
- model .variables = {"var" : var }
274
-
275
- # create discretisation
276
- disc = pybamm .Discretisation ()
277
- disc .process_model (model )
278
-
279
- # Solve
280
- solver = pybamm .CasadiAlgebraicSolver (sensitivity = "casadi" )
281
- solution = solver .solve (model , [0 ], inputs = {"param" : 7 })
282
- np .testing .assert_array_equal (solution ["var" ].data , - 2 )
283
- np .testing .assert_array_equal (solution ["var" ].sensitivity ["param" ], 0 )
178
+ # def test_least_squares_fit(self):
179
+ # # Simple system: a single algebraic equation
180
+ # var = pybamm.Variable("var", domain="negative electrode")
181
+ # model = pybamm.BaseModel()
182
+ # # Set length scale to avoid warning
183
+ # model.length_scales = {"negative electrode": 1}
184
+
185
+ # p = pybamm.InputParameter("p")
186
+ # q = pybamm.InputParameter("q")
187
+ # model.algebraic = {var: (var - p)}
188
+ # model.initial_conditions = {var: 3}
189
+ # model.variables = {"objective": (var - q) ** 2 + (p - 3) ** 2}
190
+
191
+ # # create discretisation
192
+ # disc = tests.get_discretisation_for_testing()
193
+ # disc.process_model(model)
194
+
195
+ # # Solve
196
+ # solver = pybamm.CasadiAlgebraicSolver(sensitivity="casadi")
197
+
198
+ # def objective(x):
199
+ # solution = solver.solve(model, [0], inputs={"p": x[0], "q": x[1]})
200
+ # return solution["objective"].data.flatten()
201
+
202
+ # # without jacobian
203
+ # lsq_sol = least_squares(objective, [2, 2], method="lm")
204
+ # np.testing.assert_array_almost_equal(lsq_sol.x, [3, 3], decimal=3)
205
+
206
+ # def jac(x):
207
+ # solution = solver.solve(model, [0], inputs={"p": x[0], "q": x[1]})
208
+ # return solution["objective"].sensitivity["all"]
209
+
210
+ # # with jacobian
211
+ # lsq_sol = least_squares(objective, [2, 2], jac=jac, method="lm")
212
+ # np.testing.assert_array_almost_equal(lsq_sol.x, [3, 3], decimal=3)
213
+
214
+ # def test_solve_with_symbolic_input_vector_variable_scalar_input(self):
215
+ # var = pybamm.Variable("var", "negative electrode")
216
+ # model = pybamm.BaseModel()
217
+ # # Set length scale to avoid warning
218
+ # model.length_scales = {"negative electrode": 1}
219
+ # param = pybamm.InputParameter("param")
220
+ # model.algebraic = {var: var + param}
221
+ # model.initial_conditions = {var: 2}
222
+ # model.variables = {"var": var}
223
+
224
+ # # create discretisation
225
+ # disc = tests.get_discretisation_for_testing()
226
+ # disc.process_model(model)
227
+
228
+ # # Solve - scalar input
229
+ # solver = pybamm.CasadiAlgebraicSolver(sensitivity="casadi")
230
+ # solution = solver.solve(model, [0], inputs={"param": 7})
231
+ # np.testing.assert_array_equal(solution["var"].data, -7)
232
+ # solution = solver.solve(model, [0], inputs={"param": 3})
233
+ # np.testing.assert_array_equal(solution["var"].data, -3)
234
+ # np.testing.assert_array_equal(solution["var"].sensitivity["param"], -1)
235
+
236
+ # def test_solve_with_symbolic_input_vector_variable_vector_input(self):
237
+ # var = pybamm.Variable("var", "negative electrode")
238
+ # model = pybamm.BaseModel()
239
+ # # Set length scale to avoid warning
240
+ # model.length_scales = {"negative electrode": 1}
241
+ # param = pybamm.InputParameter("param", "negative electrode")
242
+ # model.algebraic = {var: var + param}
243
+ # model.initial_conditions = {var: 2}
244
+ # model.variables = {"var": var}
245
+
246
+ # # create discretisation
247
+ # disc = tests.get_discretisation_for_testing()
248
+ # disc.process_model(model)
249
+ # n = disc.mesh["negative electrode"].npts
250
+
251
+ # # Solve - vector input
252
+ # solver = pybamm.CasadiAlgebraicSolver(sensitivity="casadi")
253
+ # solution = solver.solve(model, [0], inputs={"param": 3 * np.ones(n)})
254
+
255
+ # np.testing.assert_array_almost_equal(solution["var"].data, -3)
256
+ # np.testing.assert_array_almost_equal(
257
+ # solution["var"].sensitivity["param"], -np.eye(40)
258
+ # )
259
+
260
+ # p = np.linspace(0, 1, n)[:, np.newaxis]
261
+ # solution = solver.solve(model, [0], inputs={"param": 2 * p})
262
+ # np.testing.assert_array_almost_equal(solution["var"].data, -2 * p)
263
+ # np.testing.assert_array_almost_equal(
264
+ # solution["var"].sensitivity["param"], -np.eye(40)
265
+ # )
266
+
267
+ # def test_solve_with_symbolic_input_in_initial_conditions(self):
268
+ # # Simple system: a single algebraic equation
269
+ # var = pybamm.Variable("var")
270
+ # model = pybamm.BaseModel()
271
+ # model.algebraic = {var: var + 2}
272
+ # model.initial_conditions = {var: pybamm.InputParameter("param")}
273
+ # model.variables = {"var": var}
274
+
275
+ # # create discretisation
276
+ # disc = pybamm.Discretisation()
277
+ # disc.process_model(model)
278
+
279
+ # # Solve
280
+ # solver = pybamm.CasadiAlgebraicSolver(sensitivity="casadi")
281
+ # solution = solver.solve(model, [0], inputs={"param": 7})
282
+ # np.testing.assert_array_equal(solution["var"].data, -2)
283
+ # np.testing.assert_array_equal(solution["var"].sensitivity["param"], 0)
284
284
285
285
286
286
if __name__ == "__main__" :
0 commit comments