Source code for Tests.Classes.test_compare
from numpy import ones, pi, array, linspace, zeros
from os.path import join
import pytest
from pyleecan.Classes.Simu1 import Simu1
from pyleecan.Classes.InputCurrent import InputCurrent
from pyleecan.Classes.ImportGenVectLin import ImportGenVectLin
from pyleecan.Classes.ImportMatrixVal import ImportMatrixVal
from pyleecan.Classes.WindingUD import WindingUD
from pyleecan.Classes.MagFEMM import MagFEMM
from pyleecan.Classes.PostPlot import PostPlot
from pyleecan.Classes.PostFunction import PostFunction
from pyleecan.Classes.Output import Output
from pyleecan.Functions.load import load
from pyleecan.definitions import DATA_DIR
[docs]@pytest.mark.MagFEMM
@pytest.mark.IPMSM
@pytest.mark.periodicity
@pytest.mark.SingleOP
def test_compare():
"""Test the compare method"""
# Create reference object
Toyota_Prius = load(join(DATA_DIR, "Machine", "Toyota_Prius.json"))
simu = Simu1(name="test_compare", machine=Toyota_Prius)
# Initialization of the simulation starting point
simu.input = InputCurrent()
# Set time and space discretization
simu.input.time = ImportMatrixVal(
value=linspace(start=0, stop=0.015, num=4, endpoint=True)
)
simu.input.Na_tot = 1024
# Definition of the enforced output of the electrical module
simu.input.Is = ImportMatrixVal(
value=array( # Stator currents as a function of time
[
[6.97244193e-06, 2.25353053e02, -2.25353060e02],
[-2.60215295e02, 1.30107654e02, 1.30107642e02],
[-6.97244208e-06, -2.25353053e02, 2.25353060e02],
[2.60215295e02, -1.30107654e02, -1.30107642e02],
]
)
)
simu.input.Ir = None # SPMSM machine => no rotor currents to define
simu.input.N0 = 3000 # Rotor speed [rpm]
simu.input.angle_rotor_initial = 0.5216 + pi # Rotor position at t=0 [rad]
# Definition of the magnetic simulation (no symmetry)
simu.mag = MagFEMM(type_BH_stator=2, type_BH_rotor=2, is_periodicity_a=False)
simu.force = None
simu.struct = None
simu.postproc_list = [
PostPlot(param_list=[1, 2], param_dict={"test": 2}),
PostFunction(run="lambda out: out.elec.N0"),
]
# Create the differences
simu2 = simu.copy()
simu2.name = "test_compare2"
simu2.machine.stator.L1 = 2 # float
simu2.machine.rotor.hole[0].magnet_0.mat_type.name = "Test " # str
simu2.input.Nt_tot = 1234 # int
simu2.mag.is_periodicity_a = True # bool
# complex
simu2.input.Is = zeros((4, 2))
# list(ndarray)
# dict(ndarray)
simu2.mag.transform_list = ["bla"] # len(list)
simu2.postproc_list[0].param_list = [1, 3] # list diff
simu2.postproc_list[0].param_dict["test2"] = 3 # len(dict)
simu2.postproc_list[1].run = "lambda out: out.elec.Id_ref" # function
# dict diff
simu2.machine.stator.winding = WindingUD() # pyleecan type diff
# pyleecan dict
# SciDataTool list
# SciDataTool dict
# Compare
diff_list = simu.compare(simu2, "simu")
assert "simu.name" in diff_list
assert "simu.machine.stator.L1" in diff_list
assert "simu.machine.rotor.hole[0].magnet_0.mat_type.name" in diff_list
assert "simu.input.Nt_tot" in diff_list
assert "simu.mag.is_periodicity_a" in diff_list
assert "simu.mag.transform_list" in diff_list
assert "simu.postproc_list[0].param_list" in diff_list
assert "simu.postproc_list[0].param_dict" in diff_list
assert "type(simu.machine.stator.winding)" in diff_list
assert "simu.input.Is.value" in diff_list
assert "simu.postproc_list[1].run" in diff_list
assert len(diff_list) == 11
if __name__ == "__main__":
test_compare()