Ejemplo n.º 1
0
def test_extended_huckel_hamiltonian_if_s_orthogonal():
    S = np.eye(2)
    m = Molecule([Atom(C, 0, 0, 0), Atom(N, 0, 0, 0)])

    h = ExtendedHuckelHamiltonian(S=S, molecule=m).matrix()

    assert is_diagonal(h)

    assert h[0, 0] == -C.voie
    assert h[1, 1] == -N.voie
Ejemplo n.º 2
0
def test_eigenbasis_transformation_non_orthogonal():

    basis = [HarmonicOscillator(n=i, center=0.25) for i in range(2)] + [
        HarmonicOscillator(n=i, center=-0.25) for i in range(2)
    ]

    S = pairwise_array_from_func(basis, Overlap())
    H = pairwise_array_from_func(basis, Hamiltonian(Harmonic(center=0.0)))
    eigb = EigenBasis.from_basis(basis, H, S)
    xform_H = eigb.transformed(H)

    assert is_diagonal(xform_H)
    assert np.allclose(np.diag(xform_H), eigb.energies, atol=conf.small_number)
Ejemplo n.º 3
0
def test_eigenbasis_transformation_orthogonal():
    basis = [lambda _: 2 for _ in range(2)]

    d = 0.1
    e = 1.0

    H = np.array([[e, d], [d, e]])
    S = np.eye(2)

    eigb = EigenBasis.from_basis(basis, H, S)

    xform_H = eigb.transformed(H)

    assert is_diagonal(xform_H)
    assert np.allclose(np.diag(xform_H), eigb.energies, atol=conf.small_number)
Ejemplo n.º 4
0
    def group_objects(self, laparams, objs):
        obj0 = None
        line = None
        for obj1 in objs:
            if obj0 is not None:
                # halign: obj0 and obj1 is horizontally aligned.
                #
                #   +------+ - - -
                #   | obj0 | - - +------+   -
                #   |      |     | obj1 |   | (line_overlap)
                #   +------+ - - |      |   -
                #          - - - +------+
                #
                #          |<--->|
                #        (char_margin)
                halign = (obj0.neighbor_compatible_reason(obj1)
                          and is_diagonal(obj0.matrix)
                          and is_diagonal(obj1.matrix)
                          and obj0.is_voverlap(obj1)
                          and (min(obj0.height, obj1.height) *
                               laparams.line_overlap < obj0.voverlap(obj1)) and
                          (obj0.hdistance(obj1) <
                           max(obj0.width, obj1.width) * laparams.char_margin))

                # valign: obj0 and obj1 is vertically aligned.
                #
                #   +------+
                #   | obj0 |
                #   |      |
                #   +------+ - - -
                #     |    |     | (char_margin)
                #     +------+ - -
                #     | obj1 |
                #     |      |
                #     +------+
                #
                #     |<-->|
                #   (line_overlap)
                valign = (
                    laparams.detect_vertical
                    and obj0.neighbor_compatible_reason(obj1)
                    and not is_diagonal(obj0.matrix)
                    and not is_diagonal(obj1.matrix) and obj0.is_hoverlap(obj1)
                    and (min(obj0.width, obj1.width) * laparams.line_overlap <
                         obj0.hoverlap(obj1))
                    and (obj0.vdistance(obj1) <
                         max(obj0.height, obj1.height) * laparams.char_margin))

                if ((halign and isinstance(line, LTTextLineHorizontal))
                        or (valign and isinstance(line, LTTextLineVertical))):
                    line.add(obj1)
                elif line is not None:
                    yield line
                    line = None
                else:
                    if valign and not halign:
                        line = LTTextLineVertical(laparams.word_margin)
                        line.add(obj0)
                        line.add(obj1)
                    elif halign and not valign:
                        line = LTTextLineHorizontal(laparams.word_margin)
                        line.add(obj0)
                        line.add(obj1)
                    else:
                        line = LTTextLineHorizontal(laparams.word_margin)
                        line.add(obj0)
                        yield line
                        line = None
            obj0 = obj1
        if line is None:
            line = LTTextLineHorizontal(laparams.word_margin)
            line.add(obj0)
        yield line
        return
Ejemplo n.º 5
0
def test_ho_eigen_basis_hamiltonian(ho_eigen_basis):
    H = op.Hamiltonian(ho_eigen_basis[0].potential).matrix(ho_eigen_basis)
    energies = np.asarray([b.energy for b in ho_eigen_basis])

    assert np.allclose(np.diag(H), energies)
    assert is_diagonal(H)
Ejemplo n.º 6
0
def test_ho_eigen_basis_overlap_is_diagonal(ho_eigen_basis):
    S = op.Overlap().matrix(ho_eigen_basis)
    assert is_diagonal(S)
    assert is_identity(S)