Source code for pysisyphus.intcoords.Coords
from abc import abstractmethod
from typing import List, Optional, Protocol
from numpy.typing import NDArray
[docs]
class CoordSys(Protocol):
[docs]
@abstractmethod
def transform_forces(self, cart_forces: NDArray) -> NDArray:
"""Transform Cartesian forces to this coordinate system."""
pass
[docs]
@abstractmethod
def transform_hessian(
self, cart_hessian: NDArray, int_gradient: Optional[NDArray]
) -> NDArray:
"""Transform Cartesian Hessian to this coordinate system."""
pass
[docs]
@abstractmethod
def transform_int_step(
self, step: NDArray, update_constraints: bool = False, pure: bool = False
) -> NDArray:
"""Transform step in this coordinate system to Cartesians."""
pass
[docs]
@abstractmethod
def project_hessian(self, hessian: NDArray) -> NDArray:
"""Project Hessian in the current coordinate system."""
pass
@property
@abstractmethod
def coords(self) -> NDArray:
"""Getter for coordinates in this coordinate system."""
pass
@property
@abstractmethod
def coords3d(self) -> NDArray:
"""Getter for 3d Cartesian coordinates."""
pass
@coords3d.setter
@abstractmethod
def coords3d(self, coords3d: NDArray):
"""Setter for 3d Cartesian coordinates."""
pass
@property
@abstractmethod
def typed_prims(self) -> List:
"""List of (primitive) internal coordinates.
May be empty, e.g., when the coordinate system is Cartesian."""
pass