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
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
 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)]