base_name = "heis_af_sandwich_scattering_N%u_D%u" % (sim.N, hu.s.D)

if __name__ == "__main__":
    mid = N / 2

    sim.apply_op_1s(Sp, mid - 15 - 5)
    sim.apply_op_1s(Sm, mid - 15 + 5)

    sim.apply_op_1s(Sm, mid + 15 - 5)
    sim.apply_op_1s(Sp, mid + 15 + 5)

    op, en, S, OL = sw.go(sim,
                          dt * 1.j,
                          steps,
                          RK4=True,
                          op=Sz,
                          op_every=1,
                          autogrow=True,
                          autogrow_amount=4 / hu.s.L)

    if plot_results:
        import matplotlib.pyplot as plt

        op = sp.array(op)
        plt.imshow(op,
                   origin="lower",
                   interpolation="none",
                   aspect="auto",
                   extent=(-10, sim.N + 9, 0, (op.shape[0] - 1) * dt))
        plt.xlabel('site')
        plt.ylabel('t')
Sy = hu.Sy
Sz = hu.Sz

Sp = Sx + 1.j * Sy
Sm = Sx - 1.j * Sy

base_name = "heis_af_sandwich_scattering_N%u_D%u" % (sim.N, hu.s.D)

if __name__ == "__main__":
    mid = N/2

    sim.apply_op_1s(Sp, mid - 15 - 5)
    sim.apply_op_1s(Sm, mid - 15 + 5)

    sim.apply_op_1s(Sm, mid + 15 - 5)
    sim.apply_op_1s(Sp, mid + 15 + 5)

    op, en, S, OL = sw.go(sim, dt*1.j, steps, RK4=True, op=Sz, op_every=1,
                          autogrow=True, autogrow_amount=4)

    if plot_results:
        import matplotlib.pyplot as plt

        op = sp.array(op)
        plt.imshow(op, origin="lower", interpolation="none",
                   aspect="auto", extent=(-10, sim.N + 9, 0, (op.shape[0] - 1) * dt))
        plt.xlabel('site')
        plt.ylabel('t')
        cb = plt.colorbar()
        cb.set_label('Sz')
        plt.show()
def Sp(n,s,t):
    return Sx(s,t) + 1.j * Sy(s,t)
    
def Sm(n,s,t):
    return Sx(s,t) - 1.j * Sy(s,t)
    
base_name = "heis_af_sandwich_impurity_N%u_m%u_D%u_lam%g" % (sim.N, imp_pos, 
                                                             hu.s.D, lam)

if __name__ == "__main__":
    
    load_step = 0
    
    if load_step > 0:
        sim.load_state("data/" + base_name + "_%u.npy" % load_step)
    
    sw.go(sim, dtau, max_steps, tol=tol, 
          op=Sx, op_save_as=base_name + "_Sx.txt", op_every=3,
          append_saved=False,
          counter_start=load_step,
          csv_file=base_name + ".csv",
          autogrow=False)
           
    plt.plot(map(lambda n: sim.expect_1s(Sx, n).real, range(-10, sim.N + 11)))
    plt.plot(map(lambda n: sim.expect_1s(Sy, n).real, range(-10, sim.N + 11)))
    plt.plot(map(lambda n: sim.expect_1s(Sz, n).real, range(-10, sim.N + 11)))
    plt.show()
    
    plt.plot(map(lambda n: sim.expect_2s(sim.h_nn, n).real, range(-10, sim.N + 11)))
    plt.show()
    
sim = sw.EvoMPS_TDVP_Sandwich(N, hu.s)
sim.h_nn[imp_pos] = (1 + lam) * sim.h_nn[1]

Sx = hu.Sx
Sy = hu.Sy
Sz = hu.Sz

Sp = Sx + 1.j * Sy
Sm = Sx - 1.j * Sy

if __name__ == "__main__":

    sim.add_noise()

    sw.go(sim, dtau, max_steps, tol=tol)

    if plot_results:
        import matplotlib.pyplot as plt

        plt.plot(range(-10, sim.N + 11),
                 map(lambda n: sim.expect_1s(Sx, n).real,
                     range(-10, sim.N + 11)),
                 label='Sx')
        plt.plot(range(-10, sim.N + 11),
                 map(lambda n: sim.expect_1s(Sy, n).real,
                     range(-10, sim.N + 11)),
                 label='Sy')
        plt.plot(range(-10, sim.N + 11),
                 map(lambda n: sim.expect_1s(Sz, n).real,
                     range(-10, sim.N + 11)),
sim = sw.EvoMPS_TDVP_Sandwich(N, hu.s)
sim.h_nn[imp_pos] = (1 + lam) * sim.h_nn[1]

Sx = hu.Sx
Sy = hu.Sy
Sz = hu.Sz

Sp = Sx + 1.j * Sy
Sm = Sx - 1.j * Sy

if __name__ == "__main__":

    sim.add_noise()

    sw.go(sim, dtau, max_steps, tol=tol)

    if plot_results:
        import matplotlib.pyplot as plt

        plt.plot(range(-10, sim.N + 11), map(lambda n: sim.expect_1s(Sx, n).real, range(-10, sim.N + 11)), label='Sx')
        plt.plot(range(-10, sim.N + 11), map(lambda n: sim.expect_1s(Sy, n).real, range(-10, sim.N + 11)), label='Sy')
        plt.plot(range(-10, sim.N + 11), map(lambda n: sim.expect_1s(Sz, n).real, range(-10, sim.N + 11)), label='Sz')
        plt.xlabel('site')
        plt.legend()

        plt.figure()
        plt.plot(map(lambda n: sim.expect_2s(get_h_nn(n), n).real, range(-10, sim.N + 11)))
        plt.xlabel('site')
        plt.ylabel('h')
        plt.show()
    
base_name = "heis_af_sandwich_scattering_N%u_D%u" % (sim.N, hu.s.D)

if __name__ == "__main__":
    mid = int(round(11/20. * sim.N))
    
    sim.apply_op_1s(Sp, mid - 15 - 5)
    sim.apply_op_1s(Sm, mid - 15 + 5)

    sim.apply_op_1s(Sm, mid + 15 - 5)
    sim.apply_op_1s(Sp, mid + 15 + 5)
    
    load_step = 0
    
    if load_step > 0:
        sim.load_state("data/" + base_name + "_%u.npy" % load_step)
    
    op, en, S = sw.go(sim, dt*1.j, steps, RK4=True, 
                      autogrow=not use_damping, autogrow_amount=4,
                      op=Sz, op_save_as=base_name + "_Sz.txt", op_every=1,
                      en_save_as=base_name + "_h.txt",
                      append_saved=False,
                      #save_as="data/" + base_name, save_every=10,
                      counter_start=load_step,
                      csv_file=base_name + ".csv")
                           
    op = sp.array(op)
    
    plt.imshow(op, origin="lower", interpolation="none", 
               aspect="auto", extent=(-10, sim.N + 9, 0, op.shape[0] - 1))
    plt.show()