Skip to content

kups.core.typing

Structural typing protocols and sentinel ID types for simulation entities.

Defines :class:ParticleId, :class:SystemId, and other sentinel int/str sub-types used as type-safe index labels, plus Has* protocols for structural duck-typing of simulation data (positions, momenta, forces, etc.).

ExclusionId

Bases: int

Sentinel type for exclusion group indices.

Source code in src/kups/core/typing.py
class ExclusionId(int):
    """Sentinel type for exclusion group indices."""

GroupId

Bases: int

Sentinel type for molecular group indices.

Source code in src/kups/core/typing.py
class GroupId(int):
    """Sentinel type for molecular group indices."""

HasAtomicNumbers

Bases: Protocol

Protocol for entities with atomic numbers.

Attributes:

Name Type Description
atomic_numbers Array

Array of atomic numbers for each atom.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasAtomicNumbers(Protocol):
    """Protocol for entities with atomic numbers.

    Attributes:
        atomic_numbers: Array of atomic numbers for each atom.
    """

    @property
    def atomic_numbers(self) -> Array: ...

HasCache

Bases: Protocol

Protocol for objects carrying primary data alongside a cache.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasCache[Data, Cache](Protocol):
    """Protocol for objects carrying primary data alongside a cache."""

    @property
    def data(self) -> Data: ...
    @property
    def cache(self) -> Cache: ...

HasCharges

Bases: Protocol

Protocol for entities with charge data.

Attributes:

Name Type Description
charges Array

Array of charges for each entity (e.g., atoms).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasCharges(Protocol):
    """Protocol for entities with charge data.

    Attributes:
        charges: Array of charges for each entity (e.g., atoms).
    """

    @property
    def charges(self) -> Array: ...

HasCompressibility

Bases: Protocol

Protocol for systems with isothermal compressibility.

Attributes:

Name Type Description
compressibility Array

Isothermal compressibility \(\beta\) (units: length³/energy).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasCompressibility(Protocol):
    r"""Protocol for systems with isothermal compressibility.

    Attributes:
        compressibility: Isothermal compressibility $\beta$ (units: length³/energy).
    """

    @property
    def compressibility(self) -> Array: ...

HasCutoff

Bases: Protocol

Protocol for entities with a distance cutoff.

Attributes:

Name Type Description
cutoff Array

Cutoff distance (units: length).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasCutoff(Protocol):
    """Protocol for entities with a distance cutoff.

    Attributes:
        cutoff: Cutoff distance (units: length).
    """

    @property
    def cutoff(self) -> Array: ...

HasExclusionIndex

Bases: Protocol

Protocol for entities with exclusion group index.

Attributes:

Name Type Description
exclusion Index[ExclusionId]

Index mapping particles to exclusion groups.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasExclusionIndex(Protocol):
    """Protocol for entities with exclusion group index.

    Attributes:
        exclusion: Index mapping particles to exclusion groups.
    """

    @property
    def exclusion(self) -> Index[ExclusionId]: ...

HasForces

Bases: Protocol

Protocol for entities with force data.

Attributes:

Name Type Description
forces Array

Array of forces for each entity (e.g., atoms).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasForces(Protocol):
    """Protocol for entities with force data.

    Attributes:
        forces: Array of forces for each entity (e.g., atoms).
    """

    @property
    def forces(self) -> Array: ...

HasFrictionCoefficient

Bases: Protocol

Protocol for systems with Langevin friction coefficient.

Attributes:

Name Type Description
friction_coefficient Array

Friction coefficient \(\gamma\) (units: 1/time).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasFrictionCoefficient(Protocol):
    r"""Protocol for systems with Langevin friction coefficient.

    Attributes:
        friction_coefficient: Friction coefficient $\gamma$ (units: 1/time).
    """

    @property
    def friction_coefficient(self) -> Array: ...

HasGroupIndex

Bases: Protocol

Protocol for entities with molecular group index.

Attributes:

Name Type Description
group Index[GroupId]

Index mapping particles to molecular groups.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasGroupIndex(Protocol):
    """Protocol for entities with molecular group index.

    Attributes:
        group: Index mapping particles to molecular groups.
    """

    @property
    def group(self) -> Index[GroupId]: ...

HasInclusionIndex

Bases: Protocol

Protocol for entities with inclusion group index.

Attributes:

Name Type Description
inclusion Index[InclusionId]

Index mapping particles to inclusion groups.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasInclusionIndex(Protocol):
    """Protocol for entities with inclusion group index.

    Attributes:
        inclusion: Index mapping particles to inclusion groups.
    """

    @property
    def inclusion(self) -> Index[InclusionId]: ...

HasLabels

Bases: Protocol

Protocol for entities with string labels.

Attributes:

Name Type Description
labels Index[Label]

Species identifier for each group (e.g., molecule type).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasLabels(Protocol):
    """Protocol for entities with string labels.

    Attributes:
        labels: Species identifier for each group (e.g., molecule type).
    """

    @property
    def labels(self) -> Index[Label]: ...

HasLogActivity

Bases: Protocol

Protocol for entities with chemical activity parameters.

Attributes:

Name Type Description
log_activity Array

Natural log of chemical activity per species [dimensionless], shape (n_systems, n_species).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasLogActivity(Protocol):
    """Protocol for entities with chemical activity parameters.

    Attributes:
        log_activity: Natural log of chemical activity per species [dimensionless],
            shape `(n_systems, n_species)`.
    """

    @property
    def log_activity(self) -> Array: ...

HasMasses

Bases: Protocol

Protocol for entities with mass data.

Attributes:

Name Type Description
masses Array

Array of masses for each entity (e.g., atoms).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasMasses(Protocol):
    """Protocol for entities with mass data.

    Attributes:
        masses: Array of masses for each entity (e.g., atoms).
    """

    @property
    def masses(self) -> Array: ...

HasMinimumScaleFactor

Bases: Protocol

Protocol for systems with minimum barostat scale factor.

Attributes:

Name Type Description
minimum_scale_factor Array

Minimum scaling factor \(\mu_{\text{min}}\) (dimensionless).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasMinimumScaleFactor(Protocol):
    r"""Protocol for systems with minimum barostat scale factor.

    Attributes:
        minimum_scale_factor: Minimum scaling factor $\mu_{\text{min}}$ (dimensionless).
    """

    @property
    def minimum_scale_factor(self) -> Array: ...

HasMomenta

Bases: Protocol

Protocol for entities with momentum data.

Attributes:

Name Type Description
momenta Array

Array of momenta for each entity (e.g., atoms).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasMomenta(Protocol):
    """Protocol for entities with momentum data.

    Attributes:
        momenta: Array of momenta for each entity (e.g., atoms).
    """

    @property
    def momenta(self) -> Array: ...

HasMotifAndSystemIndex

Bases: HasMotifIndex, HasSystemIndex, Protocol

Protocol for entities with both motif and system indices.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasMotifAndSystemIndex(HasMotifIndex, HasSystemIndex, Protocol):
    """Protocol for entities with both motif and system indices."""

HasMotifIndex

Bases: Protocol

Protocol for entities with molecular motif index.

Attributes:

Name Type Description
motif Index[MotifId]

Index mapping particles to motif templates.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasMotifIndex(Protocol):
    """Protocol for entities with molecular motif index.

    Attributes:
        motif: Index mapping particles to motif templates.
    """

    @property
    def motif(self) -> Index[MotifId]: ...

HasPositions

Bases: Protocol

Protocol for entities with position data.

Attributes:

Name Type Description
positions Array

Array of positions for each entity (e.g., atoms).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasPositions(Protocol):
    """Protocol for entities with position data.

    Attributes:
        positions: Array of positions for each entity (e.g., atoms).
    """

    @property
    def positions(self) -> Array: ...

HasPositionsAndAtomicNumbers

Bases: HasPositions, HasAtomicNumbers, Protocol

Protocol for entities with both position and atomic number data.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasPositionsAndAtomicNumbers(HasPositions, HasAtomicNumbers, Protocol):
    """Protocol for entities with both position and atomic number data."""

    ...

HasPositionsAndGroupIndex

Bases: HasPositions, HasGroupIndex, Protocol

Protocol for entities with both position data and group index.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasPositionsAndGroupIndex(HasPositions, HasGroupIndex, Protocol):
    """Protocol for entities with both position data and group index."""

HasPositionsAndLabels

Bases: HasPositions, HasLabels, Protocol

Protocol for entities with both position and label data.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasPositionsAndLabels(HasPositions, HasLabels, Protocol):
    """Protocol for entities with both position and label data."""

    ...

HasPositionsAndSystemIndex

Bases: HasPositions, HasSystemIndex, Protocol

Protocol for entities with both position data and system index.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasPositionsAndSystemIndex(HasPositions, HasSystemIndex, Protocol):
    """Protocol for entities with both position data and system index."""

HasPotentialEnergy

Bases: Protocol

Protocol for systems with a potential energy.

Attributes:

Name Type Description
potential_energy Array

Potential energy in eV.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasPotentialEnergy(Protocol):
    r"""Protocol for systems with a potential energy.

    Attributes:
        potential_energy: Potential energy in eV.
    """

    @property
    def potential_energy(self) -> Array: ...

HasPressureCouplingTime

Bases: Protocol

Protocol for systems with barostat coupling time constant.

Attributes:

Name Type Description
pressure_coupling_time Array

Barostat time constant \(\tau_P\) (units: time).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasPressureCouplingTime(Protocol):
    r"""Protocol for systems with barostat coupling time constant.

    Attributes:
        pressure_coupling_time: Barostat time constant $\tau_P$ (units: time).
    """

    @property
    def pressure_coupling_time(self) -> Array: ...

HasStressTensor

Bases: Protocol

Protocol for systems with computed virial stress tensor.

Attributes:

Name Type Description
stress_tensor Array

Virial stress tensor \(\mathbf{W}\) (units: energy).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasStressTensor(Protocol):
    r"""Protocol for systems with computed virial stress tensor.

    Attributes:
        stress_tensor: Virial stress tensor $\mathbf{W}$ (units: energy).
    """

    @property
    def stress_tensor(self) -> Array: ...

HasSystemIndex

Bases: Protocol

Protocol for entities with simulation system index.

Attributes:

Name Type Description
system Index[SystemId]

Index mapping entities to independent simulation boxes.

Source code in src/kups/core/typing.py
@runtime_checkable
class HasSystemIndex(Protocol):
    """Protocol for entities with simulation system index.

    Attributes:
        system: Index mapping entities to independent simulation boxes.
    """

    @property
    def system(self) -> Index[SystemId]: ...

HasTargetPressure

Bases: Protocol

Protocol for systems with target pressure for barostat.

Attributes:

Name Type Description
target_pressure Array

Target pressure \(P_0\) (units: energy/length³).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasTargetPressure(Protocol):
    r"""Protocol for systems with target pressure for barostat.

    Attributes:
        target_pressure: Target pressure $P_0$ (units: energy/length³).
    """

    @property
    def target_pressure(self) -> Array: ...

HasTemperature

Bases: Protocol

Protocol for entities with temperature parameters.

Attributes:

Name Type Description
temperature Array

Temperature array [energy units], shape (n_systems,).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasTemperature(Protocol):
    """Protocol for entities with temperature parameters.

    Attributes:
        temperature: Temperature array [energy units], shape `(n_systems,)`.
    """

    @property
    def temperature(self) -> Array: ...

HasThermalEnergy

Bases: Protocol

Protocol for systems with target thermal energy.

Attributes:

Name Type Description
thermal_energy Array

Thermal energy \(k_B T\) (units: energy).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasThermalEnergy(Protocol):
    r"""Protocol for systems with target thermal energy.

    Attributes:
        thermal_energy: Thermal energy $k_B T$ (units: energy).
    """

    @property
    def thermal_energy(self) -> Array: ...

HasThermostatTimeConstant

Bases: Protocol

Protocol for systems with thermostat coupling time constant.

Attributes:

Name Type Description
thermostat_time_constant Array

Thermostat time constant \(\tau\) (units: time).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasThermostatTimeConstant(Protocol):
    r"""Protocol for systems with thermostat coupling time constant.

    Attributes:
        thermostat_time_constant: Thermostat time constant $\tau$ (units: time).
    """

    @property
    def thermostat_time_constant(self) -> Array: ...

HasTimeStep

Bases: Protocol

Protocol for systems with integration time step.

Attributes:

Name Type Description
time_step Array

Time step \(\Delta t\) (units: time).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasTimeStep(Protocol):
    r"""Protocol for systems with integration time step.

    Attributes:
        time_step: Time step $\Delta t$ (units: time).
    """

    @property
    def time_step(self) -> Array: ...

HasUnitCell

Bases: Protocol

Protocol for entities with unit cell parameters.

Attributes:

Name Type Description
unitcell UnitCell

Unit cell parameters for each system (lattice vectors, volume).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasUnitCell(Protocol):
    """Protocol for entities with unit cell parameters.

    Attributes:
        unitcell: Unit cell parameters for each system (lattice vectors, volume).
    """

    @property
    def unitcell(self) -> UnitCell: ...

HasVelocities

Bases: Protocol

Protocol for entities with velocity data.

Attributes:

Name Type Description
velocities Array

Array of velocities for each entity (e.g., atoms).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasVelocities(Protocol):
    """Protocol for entities with velocity data.

    Attributes:
        velocities: Array of velocities for each entity (e.g., atoms).
    """

    @property
    def velocities(self) -> Array: ...

HasWeights

Bases: Protocol

Protocol for entities with weight/mass data.

Attributes:

Name Type Description
weights Array

Array of weights/masses for each entity (e.g., atoms).

Source code in src/kups/core/typing.py
@runtime_checkable
class HasWeights(Protocol):
    """Protocol for entities with weight/mass data.

    Attributes:
        weights: Array of weights/masses for each entity (e.g., atoms).
    """

    @property
    def weights(self) -> Array: ...

InclusionId

Bases: int

Sentinel type for inclusion group indices.

Source code in src/kups/core/typing.py
class InclusionId(int):
    """Sentinel type for inclusion group indices."""

Label

Bases: str

Sentinel type for species/molecule string labels.

Source code in src/kups/core/typing.py
class Label(str):
    """Sentinel type for species/molecule string labels."""

MotifId

Bases: int

Sentinel type for motif template indices.

Source code in src/kups/core/typing.py
class MotifId(int):
    """Sentinel type for motif template indices."""

MotifParticleId

Bases: int

Sentinel type for motif particle indices.

Source code in src/kups/core/typing.py
class MotifParticleId(int):
    """Sentinel type for motif particle indices."""

ParticleId

Bases: int

Sentinel type for particle indices.

Source code in src/kups/core/typing.py
class ParticleId(int):
    """Sentinel type for particle indices."""

SystemId

Bases: int

Sentinel type for simulation system indices.

Source code in src/kups/core/typing.py
class SystemId(int):
    """Sentinel type for simulation system indices."""