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
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)
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)
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
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)
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)