changed quote layout to single quote Added NotImplemented returnvalue to __eq__ functions
This commit is contained in:
parent
cb1143a472
commit
71bc92fed0
|
@ -125,7 +125,7 @@ class Orientation(Rotation,Crystal):
|
|||
Rotation.__repr__(self)])
|
||||
|
||||
def __copy__(self,
|
||||
rotation: Union[FloatSequence, Rotation] = None) -> "Orientation":
|
||||
rotation: Union[FloatSequence, Rotation] = None) -> 'Orientation':
|
||||
"""Create deep copy."""
|
||||
dup = copy.deepcopy(self)
|
||||
if rotation is not None:
|
||||
|
@ -148,7 +148,7 @@ class Orientation(Rotation,Crystal):
|
|||
|
||||
"""
|
||||
if not isinstance(other, Orientation):
|
||||
raise TypeError
|
||||
raise NotImplemented
|
||||
matching_type = self.family == other.family and \
|
||||
self.lattice == other.lattice and \
|
||||
self.parameters == other.parameters
|
||||
|
@ -235,7 +235,7 @@ class Orientation(Rotation,Crystal):
|
|||
|
||||
|
||||
def __mul__(self,
|
||||
other: Union[Rotation, "Orientation"]) -> "Orientation":
|
||||
other: Union[Rotation, 'Orientation']) -> 'Orientation':
|
||||
"""
|
||||
Compose this orientation with other.
|
||||
|
||||
|
@ -290,77 +290,77 @@ class Orientation(Rotation,Crystal):
|
|||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_random, _parameter_doc)
|
||||
def from_random(cls, **kwargs) -> "Orientation":
|
||||
def from_random(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_random)
|
||||
return cls(rotation=Rotation.from_random(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_quaternion,_parameter_doc)
|
||||
def from_quaternion(cls, **kwargs) -> "Orientation":
|
||||
def from_quaternion(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_quaternion)
|
||||
return cls(rotation=Rotation.from_quaternion(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_Euler_angles,_parameter_doc)
|
||||
def from_Euler_angles(cls, **kwargs) -> "Orientation":
|
||||
def from_Euler_angles(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_Euler_angles)
|
||||
return cls(rotation=Rotation.from_Euler_angles(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_axis_angle,_parameter_doc)
|
||||
def from_axis_angle(cls, **kwargs) -> "Orientation":
|
||||
def from_axis_angle(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_axis_angle)
|
||||
return cls(rotation=Rotation.from_axis_angle(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_basis,_parameter_doc)
|
||||
def from_basis(cls, **kwargs) -> "Orientation":
|
||||
def from_basis(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_basis)
|
||||
return cls(rotation=Rotation.from_basis(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_matrix,_parameter_doc)
|
||||
def from_matrix(cls, **kwargs) -> "Orientation":
|
||||
def from_matrix(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_matrix)
|
||||
return cls(rotation=Rotation.from_matrix(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_Rodrigues_vector,_parameter_doc)
|
||||
def from_Rodrigues_vector(cls, **kwargs) -> "Orientation":
|
||||
def from_Rodrigues_vector(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_Rodrigues_vector)
|
||||
return cls(rotation=Rotation.from_Rodrigues_vector(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_homochoric,_parameter_doc)
|
||||
def from_homochoric(cls, **kwargs) -> "Orientation":
|
||||
def from_homochoric(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_homochoric)
|
||||
return cls(rotation=Rotation.from_homochoric(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_cubochoric,_parameter_doc)
|
||||
def from_cubochoric(cls, **kwargs) -> "Orientation":
|
||||
def from_cubochoric(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_cubochoric)
|
||||
return cls(rotation=Rotation.from_cubochoric(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_spherical_component,_parameter_doc)
|
||||
def from_spherical_component(cls, **kwargs) -> "Orientation":
|
||||
def from_spherical_component(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_spherical_component)
|
||||
return cls(rotation=Rotation.from_spherical_component(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
||||
@classmethod
|
||||
@util.extended_docstring(Rotation.from_fiber_component,_parameter_doc)
|
||||
def from_fiber_component(cls, **kwargs) -> "Orientation":
|
||||
def from_fiber_component(cls, **kwargs) -> 'Orientation':
|
||||
kwargs_rot,kwargs_ori = Orientation._split_kwargs(kwargs,Rotation.from_fiber_component)
|
||||
return cls(rotation=Rotation.from_fiber_component(**kwargs_rot),**kwargs_ori)
|
||||
|
||||
|
@ -370,7 +370,7 @@ class Orientation(Rotation,Crystal):
|
|||
def from_directions(cls,
|
||||
uvw: FloatSequence,
|
||||
hkl: FloatSequence,
|
||||
**kwargs) -> "Orientation":
|
||||
**kwargs) -> 'Orientation':
|
||||
"""
|
||||
Initialize orientation object from two crystallographic directions.
|
||||
|
||||
|
@ -390,7 +390,7 @@ class Orientation(Rotation,Crystal):
|
|||
|
||||
|
||||
@property
|
||||
def equivalent(self) -> "Orientation":
|
||||
def equivalent(self) -> 'Orientation':
|
||||
"""
|
||||
Orientations that are symmetrically equivalent.
|
||||
|
||||
|
@ -404,7 +404,7 @@ class Orientation(Rotation,Crystal):
|
|||
|
||||
|
||||
@property
|
||||
def reduced(self) -> "Orientation":
|
||||
def reduced(self) -> 'Orientation':
|
||||
"""Select symmetrically equivalent orientation that falls into fundamental zone according to symmetry."""
|
||||
eq = self.equivalent
|
||||
ok = eq.in_FZ
|
||||
|
@ -940,7 +940,7 @@ class Orientation(Rotation,Crystal):
|
|||
|
||||
|
||||
def related(self,
|
||||
model: str) -> "Orientation":
|
||||
model: str) -> 'Orientation':
|
||||
"""
|
||||
Orientations derived from the given relationship.
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ class Rotation:
|
|||
__slots__ = ['quaternion']
|
||||
|
||||
def __init__(self,
|
||||
rotation: Union[FloatSequence, "Rotation"] = np.array([1.0,0.0,0.0,0.0])):
|
||||
rotation: Union[FloatSequence, 'Rotation'] = np.array([1.0,0.0,0.0,0.0])):
|
||||
"""
|
||||
New rotation.
|
||||
|
||||
|
@ -83,7 +83,7 @@ class Rotation:
|
|||
elif np.array(rotation).shape[-1] == 4:
|
||||
self.quaternion = np.array(rotation)
|
||||
else:
|
||||
raise TypeError('"rotation" is neither a Rotation nor a quaternion')
|
||||
raise TypeError('Rotation is neither a Rotation nor a quaternion')
|
||||
|
||||
|
||||
def __repr__(self) -> str:
|
||||
|
@ -93,7 +93,7 @@ class Rotation:
|
|||
|
||||
|
||||
def __copy__(self,
|
||||
rotation: Union[FloatSequence, "Rotation"] = None) -> "Rotation":
|
||||
rotation: Union[FloatSequence, 'Rotation'] = None) -> 'Rotation':
|
||||
"""Create deep copy."""
|
||||
dup = copy.deepcopy(self)
|
||||
if rotation is not None:
|
||||
|
@ -122,7 +122,7 @@ class Rotation:
|
|||
|
||||
"""
|
||||
if not isinstance(other, Rotation):
|
||||
raise TypeError
|
||||
return NotImplemented
|
||||
return np.logical_or(np.all(self.quaternion == other.quaternion,axis=-1),
|
||||
np.all(self.quaternion == -1.0*other.quaternion,axis=-1))
|
||||
|
||||
|
@ -143,7 +143,7 @@ class Rotation:
|
|||
|
||||
|
||||
def isclose(self,
|
||||
other: "Rotation",
|
||||
other: 'Rotation',
|
||||
rtol: float = 1e-5,
|
||||
atol: float = 1e-8,
|
||||
equal_nan: bool = True) -> bool:
|
||||
|
@ -174,7 +174,7 @@ class Rotation:
|
|||
|
||||
|
||||
def allclose(self,
|
||||
other: "Rotation",
|
||||
other: 'Rotation',
|
||||
rtol: float = 1e-5,
|
||||
atol: float = 1e-8,
|
||||
equal_nan: bool = True) -> Union[np.bool_, bool]:
|
||||
|
@ -220,14 +220,14 @@ class Rotation:
|
|||
return 0 if self.shape == () else self.shape[0]
|
||||
|
||||
|
||||
def __invert__(self) -> "Rotation":
|
||||
def __invert__(self) -> 'Rotation':
|
||||
"""Inverse rotation (backward rotation)."""
|
||||
dup = self.copy()
|
||||
dup.quaternion[...,1:] *= -1
|
||||
return dup
|
||||
|
||||
|
||||
def __pow__(self, exp: int) -> "Rotation":
|
||||
def __pow__(self, exp: int) -> 'Rotation':
|
||||
"""
|
||||
Perform the rotation 'exp' times.
|
||||
|
||||
|
@ -241,7 +241,7 @@ class Rotation:
|
|||
p = self.quaternion[...,1:]/np.linalg.norm(self.quaternion[...,1:],axis=-1,keepdims=True)
|
||||
return self.copy(rotation=Rotation(np.block([np.cos(exp*phi),np.sin(exp*phi)*p]))._standardize())
|
||||
|
||||
def __ipow__(self, exp: int) -> "Rotation":
|
||||
def __ipow__(self, exp: int) -> 'Rotation':
|
||||
"""
|
||||
Perform the rotation 'exp' times (in-place).
|
||||
|
||||
|
@ -254,7 +254,7 @@ class Rotation:
|
|||
return self**exp
|
||||
|
||||
|
||||
def __mul__(self, other: "Rotation") -> "Rotation":
|
||||
def __mul__(self, other: 'Rotation') -> 'Rotation':
|
||||
"""
|
||||
Compose with other.
|
||||
|
||||
|
@ -280,7 +280,7 @@ class Rotation:
|
|||
else:
|
||||
raise TypeError('Use "R@b", i.e. matmul, to apply rotation "R" to object "b"')
|
||||
|
||||
def __imul__(self, other: "Rotation") -> "Rotation":
|
||||
def __imul__(self, other: 'Rotation') -> 'Rotation':
|
||||
"""
|
||||
Compose with other (in-place).
|
||||
|
||||
|
@ -293,7 +293,7 @@ class Rotation:
|
|||
return self*other
|
||||
|
||||
|
||||
def __truediv__(self, other: "Rotation") -> "Rotation":
|
||||
def __truediv__(self, other: 'Rotation') -> 'Rotation':
|
||||
"""
|
||||
Compose with inverse of other.
|
||||
|
||||
|
@ -313,7 +313,7 @@ class Rotation:
|
|||
else:
|
||||
raise TypeError('Use "R@b", i.e. matmul, to apply rotation "R" to object "b"')
|
||||
|
||||
def __itruediv__(self, other: "Rotation") -> "Rotation":
|
||||
def __itruediv__(self, other: 'Rotation') -> 'Rotation':
|
||||
"""
|
||||
Compose with inverse of other (in-place).
|
||||
|
||||
|
@ -369,14 +369,14 @@ class Rotation:
|
|||
apply = __matmul__
|
||||
|
||||
|
||||
def _standardize(self) -> "Rotation":
|
||||
def _standardize(self) -> 'Rotation':
|
||||
"""Standardize quaternion (ensure positive real hemisphere)."""
|
||||
self.quaternion[self.quaternion[...,0] < 0.0] *= -1
|
||||
return self
|
||||
|
||||
|
||||
def append(self,
|
||||
other: Union["Rotation", List["Rotation"]]) -> "Rotation":
|
||||
other: Union['Rotation', List['Rotation']]) -> 'Rotation':
|
||||
"""
|
||||
Extend array along first dimension with other array(s).
|
||||
|
||||
|
@ -390,7 +390,7 @@ class Rotation:
|
|||
|
||||
|
||||
def flatten(self,
|
||||
order: Literal['C','F','A'] = 'C') -> "Rotation":
|
||||
order: Literal['C','F','A'] = 'C') -> 'Rotation':
|
||||
"""
|
||||
Flatten array.
|
||||
|
||||
|
@ -405,7 +405,7 @@ class Rotation:
|
|||
|
||||
def reshape(self,
|
||||
shape: Union[int, Tuple[int, ...]],
|
||||
order: Literal['C','F','A'] = 'C') -> "Rotation":
|
||||
order: Literal['C','F','A'] = 'C') -> 'Rotation':
|
||||
"""
|
||||
Reshape array.
|
||||
|
||||
|
@ -421,7 +421,7 @@ class Rotation:
|
|||
|
||||
def broadcast_to(self,
|
||||
shape: Union[int, Tuple[int, ...]],
|
||||
mode: Literal["left", "right"] = 'right') -> "Rotation":
|
||||
mode: Literal['left', 'right'] = 'right') -> 'Rotation':
|
||||
"""
|
||||
Broadcast array.
|
||||
|
||||
|
@ -445,7 +445,7 @@ class Rotation:
|
|||
|
||||
|
||||
def average(self,
|
||||
weights: np.ndarray = None) -> "Rotation":
|
||||
weights: np.ndarray = None) -> 'Rotation':
|
||||
"""
|
||||
Average along last array dimension.
|
||||
|
||||
|
@ -485,7 +485,7 @@ class Rotation:
|
|||
|
||||
|
||||
def misorientation(self,
|
||||
other: "Rotation") -> "Rotation":
|
||||
other: 'Rotation') -> 'Rotation':
|
||||
"""
|
||||
Calculate misorientation to other Rotation.
|
||||
|
||||
|
@ -690,7 +690,7 @@ class Rotation:
|
|||
@staticmethod
|
||||
def from_quaternion(q: Union[Sequence[FloatSequence], np.ndarray],
|
||||
accept_homomorph: bool = False,
|
||||
P: Literal[1, -1] = -1) -> "Rotation":
|
||||
P: Literal[1, -1] = -1) -> 'Rotation':
|
||||
"""
|
||||
Initialize from quaternion.
|
||||
|
||||
|
@ -724,7 +724,7 @@ class Rotation:
|
|||
|
||||
@staticmethod
|
||||
def from_Euler_angles(phi: np.ndarray,
|
||||
degrees: bool = False) -> "Rotation":
|
||||
degrees: bool = False) -> 'Rotation':
|
||||
"""
|
||||
Initialize from Bunge Euler angles.
|
||||
|
||||
|
@ -755,7 +755,7 @@ class Rotation:
|
|||
def from_axis_angle(axis_angle: np.ndarray,
|
||||
degrees:bool = False,
|
||||
normalize: bool = False,
|
||||
P: Literal[1, -1] = -1) -> "Rotation":
|
||||
P: Literal[1, -1] = -1) -> 'Rotation':
|
||||
"""
|
||||
Initialize from Axis angle pair.
|
||||
|
||||
|
@ -792,7 +792,7 @@ class Rotation:
|
|||
@staticmethod
|
||||
def from_basis(basis: np.ndarray,
|
||||
orthonormal: bool = True,
|
||||
reciprocal: bool = False) -> "Rotation":
|
||||
reciprocal: bool = False) -> 'Rotation':
|
||||
"""
|
||||
Initialize from lattice basis vectors.
|
||||
|
||||
|
@ -826,7 +826,7 @@ class Rotation:
|
|||
return Rotation(Rotation._om2qu(om))
|
||||
|
||||
@staticmethod
|
||||
def from_matrix(R: np.ndarray) -> "Rotation":
|
||||
def from_matrix(R: np.ndarray) -> 'Rotation':
|
||||
"""
|
||||
Initialize from rotation matrix.
|
||||
|
||||
|
@ -840,7 +840,7 @@ class Rotation:
|
|||
|
||||
@staticmethod
|
||||
def from_parallel(a: np.ndarray,
|
||||
b: np.ndarray ) -> "Rotation":
|
||||
b: np.ndarray ) -> 'Rotation':
|
||||
"""
|
||||
Initialize from pairs of two orthogonal lattice basis vectors.
|
||||
|
||||
|
@ -870,7 +870,7 @@ class Rotation:
|
|||
@staticmethod
|
||||
def from_Rodrigues_vector(rho: np.ndarray,
|
||||
normalize: bool = False,
|
||||
P: Literal[1, -1] = -1) -> "Rotation":
|
||||
P: Literal[1, -1] = -1) -> 'Rotation':
|
||||
"""
|
||||
Initialize from Rodrigues–Frank vector (angle separated from axis).
|
||||
|
||||
|
@ -901,7 +901,7 @@ class Rotation:
|
|||
|
||||
@staticmethod
|
||||
def from_homochoric(h: np.ndarray,
|
||||
P: Literal[1, -1] = -1) -> "Rotation":
|
||||
P: Literal[1, -1] = -1) -> 'Rotation':
|
||||
"""
|
||||
Initialize from homochoric vector.
|
||||
|
||||
|
@ -928,7 +928,7 @@ class Rotation:
|
|||
|
||||
@staticmethod
|
||||
def from_cubochoric(x: np.ndarray,
|
||||
P: Literal[1, -1] = -1) -> "Rotation":
|
||||
P: Literal[1, -1] = -1) -> 'Rotation':
|
||||
"""
|
||||
Initialize from cubochoric vector.
|
||||
|
||||
|
@ -956,7 +956,7 @@ class Rotation:
|
|||
|
||||
@staticmethod
|
||||
def from_random(shape: Tuple[int, ...] = None,
|
||||
rng_seed: Union[int, IntSequence] = None) -> "Rotation":
|
||||
rng_seed: Union[int, IntSequence] = None) -> 'Rotation':
|
||||
"""
|
||||
Initialize with random rotation.
|
||||
|
||||
|
@ -990,7 +990,7 @@ class Rotation:
|
|||
N: int = 500,
|
||||
degrees: bool = True,
|
||||
fractions: bool = True,
|
||||
rng_seed: Union[None, int, IntSequence] = None) -> "Rotation":
|
||||
rng_seed: Union[None, int, IntSequence] = None) -> 'Rotation':
|
||||
"""
|
||||
Sample discrete values from a binned orientation distribution function (ODF).
|
||||
|
||||
|
@ -1043,11 +1043,11 @@ class Rotation:
|
|||
|
||||
|
||||
@staticmethod
|
||||
def from_spherical_component(center: "Rotation",
|
||||
def from_spherical_component(center: 'Rotation',
|
||||
sigma: float,
|
||||
N: int = 500,
|
||||
degrees: bool = True,
|
||||
rng_seed: Union[None, int, IntSequence] = None) -> "Rotation":
|
||||
rng_seed: Union[None, int, IntSequence] = None) -> 'Rotation':
|
||||
"""
|
||||
Calculate set of rotations with Gaussian distribution around center.
|
||||
|
||||
|
|
Loading…
Reference in New Issue