def __init__(self, lattice=None, basis=None, coords=None, cartesian=False, wrap_coords=False): super().__init__() if basis is None: basis = BasisAtoms() else: basis = BasisAtoms(basis) basis.lattice = lattice if lattice is not None and coords is not None: for atom, pos in zip(basis, coords): atom.lattice = lattice if not cartesian: atom.rs = pos else: atom.rs = lattice.cartesian_to_fractional(pos) self.lattice = lattice self.basis = basis self.wrap_coords = wrap_coords self.fmtstr = "{lattice!r}, {basis!r}, {coords!r}, " + \ "cartesian=False, wrap_coords={wrap_coords!r}"
def __init__(self, lattice=None, basis=None, coords=None, cartesian=False, wrap_coords=False, unit_cell=None, scaling_matrix=None): super().__init__() if unit_cell is None and basis is not None: basis = BasisAtoms(basis) basis.lattice = lattice if lattice is not None and coords is not None: for atom, pos in zip(basis, coords): atom.lattice = lattice if not cartesian: atom.rs = pos else: atom.rs = lattice.cartesian_to_fractional(pos) # if basis is None: # basis = BasisAtoms() # These attributes may be reset in the `@scaling_matrix.setter` # method and so they need to be initialized *before* setting # `self.scaling_matrix`. self.basis = basis self.lattice = lattice self.unit_cell = unit_cell self.wrap_coords = wrap_coords self.scaling_matrix = scaling_matrix self.fmtstr = \ "lattice={lattice!r}, basis={basis!r}, coords={coords!r}, " + \ "cartesian=False, wrap_coords={wrap_coords!r}, " + \ "unit_cell={unit_cell!r}, scaling_matrix={scaling_matrix!r}"
def test4(): lattice = Crystal3DLattice.cubic(a=5.0) basis = BasisAtoms(atoms=['C', 'C']) print(basis) print(basis.lattice) assert_true(basis.lattice is None) basis.lattice = lattice assert_true(isinstance(basis.lattice, Crystal3DLattice))