def test_signatures(): lat = kwant.lattice.square() syst = kwant.Builder(kwant.TranslationalSymmetry((-3, 0), (0, 1))) # onsites and hoppings that will be bound as sites syst[lat(-2, 0)] = 4 syst[(lat(-2, 0), lat(-2, 1))] = -1 # syst[lat(-1, 0)] = lambda a, E1: E1 syst[(lat(-1, 0), lat(-1, 1))] = lambda a, b, t1: t1 # syst[lat(0, 0)] = lambda a, E2, **kwargs: E2 syst[(lat(0, 0), lat(0, 1))] = lambda a, b, t2, **kwargs: t2 # hoppings that will be bound as hoppings syst[(lat(-2, 0), lat(-1, 0))] = -1 syst[(lat(-2, 0), lat(2, 0))] = -1 # syst[(lat(-2, 0), lat(0, 0))] = -1 syst[(lat(-2, 0), lat(3, 0))] = lambda a, b, t3: t3 syst[(lat(-1, 0), lat(0, 0))] = lambda a, b, t4, **kwargs: t4 syst[(lat(-1, 0), lat(3, 0))] = lambda a, b, t5: t5 wrapped_syst = wraparound(syst) ## testing momenta = ['k_x', 'k_y'] onsites = [ (lat(-2, 0), momenta, False), (lat(-1, 0), ['E1', 't1'] + momenta, False), (lat(0, 0), ['E2', 't2'] + momenta, True), ] for site, params_should_be, should_take_kwargs in onsites: params, _, takes_kwargs = get_parameters(wrapped_syst[site]) assert params[1:] == params_should_be assert takes_kwargs == should_take_kwargs hoppings = [ ((lat(-2, 0), lat(-1, 0)), momenta, False), ((lat(-2, 0), lat(0, 0)), ['t3'] + momenta, False), ((lat(-1, 0), lat(0, 0)), ['t4', 't5'] + momenta, True), ] for hopping, params_should_be, should_take_kwargs in hoppings: params, _, takes_kwargs = get_parameters(wrapped_syst[hopping]) assert params[2:] == params_should_be assert takes_kwargs == should_take_kwargs
def test_signatures(): lat = kwant.lattice.square() syst = kwant.Builder(kwant.TranslationalSymmetry((-3, 0), (0, 1))) # onsites and hoppings that will be bound as sites syst[lat(-2, 0)] = 4 syst[(lat(-2, 0), lat(-2, 1))] = -1 # syst[lat(-1, 0)] = lambda a, E1: E1 syst[(lat(-1, 0), lat(-1, 1))] = lambda a, b, t1: t1 # syst[lat(0, 0)] = lambda a, E2: E2 syst[(lat(0, 0), lat(0, 1))] = lambda a, b, t2: t2 # hoppings that will be bound as hoppings syst[(lat(-2, 0), lat(-1, 0))] = -1 syst[(lat(-2, 0), lat(2, 0))] = -1 # syst[(lat(-2, 0), lat(0, 0))] = -1 syst[(lat(-2, 0), lat(3, 0))] = lambda a, b, t3: t3 syst[(lat(-1, 0), lat(0, 0))] = lambda a, b, t4: t4 syst[(lat(-1, 0), lat(3, 0))] = lambda a, b, t5: t5 wrapped_syst = wraparound(syst) ## testing momenta = ('k_x', 'k_y') onsites = [ (lat(-2, 0), momenta), (lat(-1, 0), ('E1', 't1') + momenta), (lat(0, 0), ('E2', 't2') + momenta), ] for site, params_should_be in onsites: params = get_parameters(wrapped_syst[site]) assert params[1:] == params_should_be hoppings = [ ((lat(-2, 0), lat(-1, 0)), momenta), ((lat(-2, 0), lat(0, 0)), ('t3', ) + momenta), ((lat(-1, 0), lat(0, 0)), ('t4', 't5') + momenta), ] for hopping, params_should_be in hoppings: params = get_parameters(wrapped_syst[hopping]) assert params[2:] == params_should_be
def test_symmetry(): syst = _simple_syst(kwant.lattice.square()) matrices = [np.random.rand(2, 2) for i in range(4)] laws = (matrices, [(lambda a: m) for m in matrices]) for cl, ch, ph, tr in laws: syst.conservation_law = cl syst.chiral = ch syst.particle_hole = ph syst.time_reversal = tr with pytest.warns(RuntimeWarning): wrapped = wraparound(syst) assert wrapped.time_reversal is None assert wrapped.particle_hole is None for attr in ('conservation_law', 'chiral'): new = getattr(wrapped, attr) orig = getattr(syst, attr) if callable(orig): params = get_parameters(new) assert params[1:] == ('k_x', 'k_y') assert np.all(orig(None) == new(None, None, None)) else: assert np.all(orig == new)
def function_to_terms(site_or_hop, value, fixed_params): assert callable(value) parameters = get_parameters(value) # remove site or site1, site2 parameters if isinstance(site_or_hop, builder.Site): parameters = parameters[1:] site_or_hop = (site_or_hop,) else: parameters = parameters[2:] free_parameters = (par for par in parameters if par not in fixed_params.keys()) # first set all free parameters to 0 args = ((fixed_params[par] if par in fixed_params.keys() else 0) for par in parameters) h_0 = value(*site_or_hop, *args) # set one of the free parameters to 1 at a time, the rest 0 terms = [] for p in free_parameters: args = ((fixed_params[par] if par in fixed_params.keys() else (1 if par == p else 0)) for par in parameters) terms.append((p, value(*site_or_hop, *args) - h_0)) return terms + [('1', h_0)]