def test_broyden(): from pickles import loads, dumps from pylada.dftcrystal import Functional from pylada.dftcrystal.electronic import Broyden from pylada.error import ValueError, TypeError a = Functional() b = a.scf._input['broyden'] assert a.broyden.w0 is None assert a.broyden.imix is None assert a.broyden.istart is None assert b.output_map() is None assert eval(repr(b), {'Broyden': Broyden}).w0 is None assert eval(repr(b), {'Broyden': Broyden}).imix is None assert eval(repr(b), {'Broyden': Broyden}).istart is None a.broyden.w0 = 1e-4 assert abs(a.broyden.w0 - 1e-4) < 1e-8 assert a.broyden.imix is None assert a.broyden.istart is None assert b.output_map() is None assert abs(eval(repr(b), {'Broyden': Broyden}).w0 - 1e-4) < 1e-8 assert eval(repr(b), {'Broyden': Broyden}).imix is None assert eval(repr(b), {'Broyden': Broyden}).istart is None a.broyden.w0 = None a.broyden.imix = 50 a.broyden.istart = 3 assert a.broyden.w0 is None assert a.broyden.imix == 50 assert a.broyden.istart == 3 assert eval(repr(b), {'Broyden': Broyden}).w0 is None assert eval(repr(b), {'Broyden': Broyden}).imix == 50 assert eval(repr(b), {'Broyden': Broyden}).istart == 3 assert b.output_map() is None a.broyden.w0 = 1e-4 a.broyden.imix = 50 a.broyden.istart = 3 assert abs(a.broyden.w0 - 1e-4) < 1e-8 assert a.broyden.imix == 50 assert a.broyden.istart == 3 assert abs(eval(repr(b), {'Broyden': Broyden}).w0 - 1e-4) < 1e-8 assert eval(repr(b), {'Broyden': Broyden}).imix == 50 assert eval(repr(b), {'Broyden': Broyden}).istart == 3 assert b.output_map() is not None assert 'broyden' in b.output_map() assert len(b.output_map()['broyden'].split()) == 3 assert abs(float(b.output_map()['broyden'].split()[0])-1e-4) < 1e-8 assert int(b.output_map()['broyden'].split()[1]) == 50 assert int(b.output_map()['broyden'].split()[2]) == 3 a.broyden[0] = '1e-2' assert abs(a.broyden.w0 - 1e-2) < 1e-8 assert abs(a.broyden[0] - 1e-2) < 1e-8 a.broyden[1] = 25 assert a.broyden.imix == 25 assert a.broyden[1] == 25 a.broyden[2] = 5 assert a.broyden.istart == 5 assert a.broyden[2] == 5 assert abs(loads(dumps(b))[0] - 1e-2) < 1e-8 assert loads(dumps(b))[1] == 25 assert loads(dumps(b))[2] == 5 a.broyden = None assert a.broyden.w0 is None assert a.broyden.imix is None assert a.broyden.istart is None a.broyden = ' 1e-2', 25, 5 assert abs(a.broyden[0] - 1e-2) < 1e-8 assert a.broyden[1] == 25 assert a.broyden[2] == 5 try: a.broyden = 0 except TypeError: pass else: raise Exception() try: a.broyden = 0, 1 except TypeError: pass else: raise Exception() try: a.broyden[1] = 0 except ValueError: pass else: raise Exception() try: a.broyden[2] = 1 except ValueError: pass else: raise Exception()