"""
PDB format module
"""
from __future__ import annotations
import numpy
import nuri.core._core
import os
__all__: list[str] = ['Atom', 'AtomSite', 'Chain', 'Model', 'Residue', 'ResidueId', 'read_models']
class Atom:
    @property
    def element(self) -> nuri.core._core.Element:
        ...
    @property
    def formal_charge(self) -> int:
        ...
    @property
    def hetero(self) -> bool:
        ...
    @property
    def name(self) -> str:
        ...
    @property
    def res_id(self) -> ResidueId:
        ...
    @property
    def sites(self) -> _AtomSiteList:
        ...
class AtomSite:
    @property
    def altloc(self) -> str:
        ...
    @property
    def occupancy(self) -> float:
        ...
    @property
    def pos(self) -> numpy.ndarray:
        ...
    @property
    def tempfactor(self) -> float:
        ...
class Chain:
    def __repr__(self) -> str:
        ...
    @property
    def id(self) -> str:
        ...
    @property
    def res_idxs(self) -> numpy.ndarray:
        ...
class Model:
    def __repr__(self) -> str:
        ...
    def as_dict(self) -> dict:
        """
        Convert the PDB model to a dictionary.
        """
    @property
    def atoms(self) -> _AtomList:
        ...
    @property
    def chains(self) -> _ChainList:
        ...
    @property
    def major_conf(self) -> numpy.ndarray:
        ...
    @property
    def props(self) -> nuri.core._core._PropertyMap:
        ...
    @property
    def residues(self) -> _ResidueList:
        ...
class Residue:
    @property
    def atom_idxs(self) -> numpy.ndarray:
        ...
    @property
    def id(self) -> ResidueId:
        ...
    @property
    def name(self) -> str:
        ...
class ResidueId:
    @property
    def chain_id(self) -> str:
        ...
    @property
    def ins_code(self) -> str:
        ...
    @property
    def res_seq(self) -> int:
        ...
class _AtomList:
    def __contains__(self, idx: int) -> bool:
        ...
    def __getitem__(self, idx: int) -> Atom:
        ...
    def __iter__(self) -> _AtomListIterator:
        ...
    def __len__(self) -> int:
        ...
    def __repr__(self) -> str:
        ...
class _AtomListIterator:
    def __iter__(self) -> _AtomListIterator:
        ...
    def __next__(self) -> Atom:
        ...
class _AtomSiteList:
    def __contains__(self, idx: int) -> bool:
        ...
    def __getitem__(self, idx: int) -> AtomSite:
        ...
    def __iter__(self) -> _AtomSiteListIterator:
        ...
    def __len__(self) -> int:
        ...
    def __repr__(self) -> str:
        ...
class _AtomSiteListIterator:
    def __iter__(self) -> _AtomSiteListIterator:
        ...
    def __next__(self) -> AtomSite:
        ...
class _ChainList:
    def __contains__(self, idx: int) -> bool:
        ...
    def __getitem__(self, idx: int) -> Chain:
        ...
    def __iter__(self) -> _ChainListIterator:
        ...
    def __len__(self) -> int:
        ...
    def __repr__(self) -> str:
        ...
class _ChainListIterator:
    def __iter__(self) -> _ChainListIterator:
        ...
    def __next__(self) -> Chain:
        ...
class _ResidueList:
    def __contains__(self, idx: int) -> bool:
        ...
    def __getitem__(self, idx: int) -> Residue:
        ...
    def __iter__(self) -> _ResidueListIterator:
        ...
    def __len__(self) -> int:
        ...
    def __repr__(self) -> str:
        ...
class _ResidueListIterator:
    def __iter__(self) -> _ResidueListIterator:
        ...
    def __next__(self) -> Residue:
        ...
def read_models(path: os.PathLike, skip_on_error: bool = False) -> list[Model]:
    """
    Read PDB models from a file.
    
    :param path: The path to the PDB file.
    :param skip_on_error: Whether to skip a model if an error occurs, instead of
      raising an exception.
    :raises OSError: If any file-related error occurs.
    :raises ValueError: If reading a model fails, unless `skip_on_error` is set.
    """
