All checks were successful
gitea-physics/pathfinder/pipeline/head This commit looks good
77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
import numpy
|
|
import pathfinder.model.static as model
|
|
|
|
|
|
def test_dotdipolemodel_repr():
|
|
mod = model.DotDipoleModel((), 1)
|
|
assert repr(mod) == "DotDipoleModel([], 1)"
|
|
|
|
|
|
def test_dotdipolemodel_m():
|
|
mod = model.DotDipoleModel([model.DotMeasurement(1, (0, 0, 0)), model.DotMeasurement(2, (0, 0, 0))], 1)
|
|
assert mod.m == 2
|
|
|
|
|
|
def test_dotdipolemodel_cost():
|
|
mod = model.DotDipoleModel([model.DotMeasurement(1, (0, 0, 1)), model.DotMeasurement(2, (1, 0, 0))], 1)
|
|
costs = mod.costs()
|
|
jac = mod.jac()
|
|
|
|
pt_to_test = numpy.array((1, 2, 3, 4, 5, 6))
|
|
expected_cost = [-1.05408565512728256, -2.05293155269909457]
|
|
expected_jacobian = [
|
|
[
|
|
-0.007460090362383803, -0.009325112952979752, -0.009325112952979752,
|
|
0.007968732887091788, 0.00856214916591777, 0.006697126575321822
|
|
], [
|
|
-0.00512240832571883, -0.008537347209531383, -0.01024481665143766,
|
|
0.005098015905120168, 0.007927536694564856, 0.008488562368334061
|
|
]
|
|
]
|
|
|
|
numpy.testing.assert_allclose(costs(pt_to_test), expected_cost, err_msg="Costs aren't as expected.")
|
|
numpy.testing.assert_allclose(jac(pt_to_test), expected_jacobian, err_msg="Jacobian aren't as expected.")
|
|
|
|
|
|
def print_result(msg, result):
|
|
print(msg)
|
|
print(f"\tResult: {result.x}")
|
|
print(f"\tSuccess: {result.success}. {result.message}")
|
|
try:
|
|
print(f"\tFunc evals: {result.nfev}")
|
|
except AttributeError:
|
|
pass
|
|
try:
|
|
print(f"\tJacb evals: {result.njev}")
|
|
except AttributeError:
|
|
pass
|
|
|
|
|
|
def test_dot_dipole_model_solution():
|
|
v1 = -0.05547767706400186526225414
|
|
v2 = -0.06018573388098888319642888
|
|
v3 = -0.06364032191901859480476888
|
|
v4 = -0.06488383879243851188402150
|
|
v5 = -0.06297148063759813929659130
|
|
v6 = -0.05735489606460216
|
|
v7 = -0.07237320672886623
|
|
v8 = -0.1082531754730548
|
|
v9 = -0.04471694936155558
|
|
|
|
c1 = model.DotMeasurement(v1, [0, 0, 1])
|
|
c2 = model.DotMeasurement(v2, [0, 0, 2])
|
|
c3 = model.DotMeasurement(v3, [0, 0, 3])
|
|
c4 = model.DotMeasurement(v4, [0, 0, 4])
|
|
c5 = model.DotMeasurement(v5, [0, 0, 5])
|
|
c6 = model.DotMeasurement(v6, [0, 0, 6])
|
|
c7 = model.DotMeasurement(v7, [1, 1, 7])
|
|
c8 = model.DotMeasurement(v8, [1, 2, 3])
|
|
c9 = model.DotMeasurement(v9, [0, -1, 0])
|
|
|
|
expected_result = numpy.array([1, 3, 5, 5, 6, 7])
|
|
|
|
mod = model.DotDipoleModel([c1, c2, c3, c4, c5, c6, c7, c8, c9], 1)
|
|
res = mod.sol()
|
|
assert res.success, "The solution for a single dipole should have succeeded."
|
|
numpy.testing.assert_allclose(res.x, expected_result, err_msg="Dipole wasn't as expected.")
|