"""The datatypes this package will use.""" from dataclasses import dataclass from typing import Sequence, Optional @dataclass class DotGenoFields: """Custom .geno file format values""" name: str, mat: str, pat: str, het: str, type_: Optional[str] = None unk: Optional[str] = None @dataclass(frozen=True) class FieldsIdentity: """Data type for identity of the fields.""" marker: str chromosome: str genetic_distance: str # cM physical_distance: str # Mb samples: Sequence[str] @dataclass(frozen=True) class LineDetails: """Data type for processed line details""" line_content: Sequence[Union[str, None]] geno_symbols: Sequence[str] line_header: Optional[str] = None @dataclass(frozen=True) class LineError: """An error object for a line.""" marker: str field: str value: Union[str, None] message: str @dataclass(frozen=True) class FileStats: """Custom file statistics.""" data_lines: int total_lines: int geno_symbols: Sequence[str] blank_lines: int = 0 comment_lines: int = 0 dot_geno_lines: int = 0 dot_geno_fields: Optional[DotGenoFields] = None samples: Sequence[str] = field(default_factory=tuple) samples_list: Sequence[str] = field(default_factory=tuple) markers_list: Sequence[str] = field(default_factory=tuple) errors: Sequence[LineError] = field(default_factory=tuple)