def test_CustomCircuit(): initial_guess = [.01, .005, .1, .005, .1, .001, 200] custom_string = 'R0-p(R1,C1)-p(R2,C2)-Wo1' custom_circuit = CustomCircuit(initial_guess=initial_guess, circuit=custom_string) # check get_param_names() full_names, all_units = custom_circuit.get_param_names() assert full_names == ['R0', 'R1', 'C1', 'R2', 'C2', 'Wo1_0', 'Wo1_1'] assert all_units == ['Ohm', 'Ohm', 'F', 'Ohm', 'F', 'Ohm', 'sec'] # check _is_fit() assert not custom_circuit._is_fit() initial_guess = [.01, .005, .1] custom_string = 'R0-p(R1,C1)' custom_circuit = CustomCircuit(initial_guess=initial_guess, circuit=custom_string, name='Test') assert str(custom_circuit) == \ '\nName: Test\n' + \ 'Circuit string: R0-p(R1,C1)\n' + \ 'Fit: False\n' + \ '\nInitial guesses:\n' + \ ' R0 = 1.00e-02 [Ohm]\n' + \ ' R1 = 5.00e-03 [Ohm]\n' + \ ' C1 = 1.00e-01 [F]\n' # check that it rejects improper inputs # enforcing the length of initial_guess try: initial_guess = [.01, .005, .1, .005, .1, .001, 200] custom_string = 'R0-p(R1,CPE1)-p(R1,C1)-Wo1' custom_circuit = CustomCircuit(initial_guess=initial_guess, circuit=custom_string) except(AssertionError): pass else: raise Exception('unhandled error occurred') return
def test_CustomCircuit(): initial_guess = [.01, .005, .1, .005, .1, .001, 200] custom_string = 'R0-p(R1,C1)-p(R2,C2)-Wo1' custom_circuit = CustomCircuit(initial_guess=initial_guess, circuit=custom_string) # check get_param_names() full_names, all_units = custom_circuit.get_param_names() assert full_names == ['R0', 'R1', 'C1', 'R2', 'C2', 'Wo1_0', 'Wo1_1'] assert all_units == ['Ohm', 'Ohm', 'F', 'Ohm', 'F', 'Ohm', 'sec'] # check _is_fit() assert not custom_circuit._is_fit() # check predictions from initial_guesses high_f = np.array([1e9]) assert np.isclose(np.real(custom_circuit.predict(high_f)[0]), initial_guess[0]) # __str()__ initial_guess = [.01, .005, .1] custom_string = 'R0-p(R1,C1)' custom_circuit = CustomCircuit(initial_guess=initial_guess, circuit=custom_string) assert str(custom_circuit) == \ '\nCircuit string: R0-p(R1,C1)\n' + \ 'Fit: False\n' + \ '\nInitial guesses:\n' + \ ' R0 = 1.00e-02 [Ohm]\n' + \ ' R1 = 5.00e-03 [Ohm]\n' + \ ' C1 = 1.00e-01 [F]\n' custom_circuit.fit(f, Z) assert custom_circuit._is_fit() custom_circuit.plot(f_data=f, Z_data=Z) # constants and _ in circuit and no name circuit = 'R_0-p(R_1,C_1)-Wo_1' constants = {'R_0': 0.02, 'Wo_1_1': 200} initial_guess = [.005, .1, .001] custom_circuit = CustomCircuit(initial_guess=initial_guess, constants=constants, circuit=circuit, name='Test') assert str(custom_circuit) == \ '\nName: Test\n' + \ 'Circuit string: R_0-p(R_1,C_1)-Wo_1\n' + \ 'Fit: False\n' + \ '\nConstants:\n' + \ ' R_0 = 2.00e-02 [Ohm]\n' + \ ' Wo_1_1 = 2.00e+02 [sec]\n' + \ '\nInitial guesses:\n' + \ ' R_1 = 5.00e-03 [Ohm]\n' + \ ' C_1 = 1.00e-01 [F]\n' + \ ' Wo_1_0 = 1.00e-03 [Ohm]\n' # incorrect number of initial guesses with pytest.raises(ValueError): initial_guess = [.01, .005, .1, .005, .1, .001, 200] custom_string = 'R0-p(R1,CPE1)-p(R1,C1)-Wo1' custom_circuit = CustomCircuit(initial_guess=initial_guess, circuit=custom_string) # no initial guesses supplied before fitting with pytest.raises(ValueError): custom_circuit = CustomCircuit() custom_circuit.fit(f, Z) # incorrect circuit element in circuit with pytest.raises(ValueError): custom_circuit = CustomCircuit('R0-NotAnElement', initial_guess=[1, 2])