pycsamt.seg.base#

Base classes for SEG-EDI objects and components.

This module provides a small reusable base class that standardizes: string representation, pretty printing of key/value lines in the SEG-EDI style, and simple (de)serialization helpers.

Subclasses only need to: - set _section (e.g., "HEAD", "INFO", …) - define typed attributes (via __annotations__ or dataclass) - optionally override validate or value formatting if needed.

Classes

Base(*args[, verbose, logger])

BaseMixin(*args[, verbose, logger])

EDIComponentBase(*args[, verbose, logger])

EdiFileBase(*[, path, strict_validate])

SEGBase(*args[, verbose, logger])

SurveyBase(*[, verbose])

class pycsamt.seg.base.Base(*args, verbose=0, logger=None, **kwargs)[source]#

Bases: object

Parameters:

verbose (int)

INDENT: int = 2#
PER_LINE: int = 6#
FLOAT_FMT: str = '{: .6E}'#
class pycsamt.seg.base.BaseMixin(*args, verbose=0, logger=None, **kwargs)[source]#

Bases: Base

Parameters:

verbose (int)

class pycsamt.seg.base.SEGBase(*args, verbose=0, logger=None, **kwargs)[source]#

Bases: Base

Parameters:

verbose (int)

class pycsamt.seg.base.EDIComponentBase(*args, verbose=0, logger=None, **kwargs)[source]#

Bases: Base

Parameters:

verbose (int)

to_dict(*, exclude_none=True)[source]#
Parameters:

exclude_none (bool)

Return type:

dict[str, Any]

classmethod from_dict(data)[source]#
Parameters:

data (Mapping[str, Any])

Return type:

EDIComponentBase

to_lines(*, only=None, indent=None)[source]#
Parameters:
Return type:

list[str]

to_text()[source]#
Return type:

str

update(**kw)[source]#
Parameters:

kw (Any)

Return type:

EDIComponentBase

clone(**ov)[source]#
Parameters:

ov (Any)

Return type:

EDIComponentBase

validate()[source]#
Return type:

None

class pycsamt.seg.base.EdiFileBase(*, path=None, strict_validate=True)[source]#

Bases: EDIComponentBase, ABC

Parameters:
  • path (Path | None)

  • strict_validate (bool)

path: Path | None = None#
strict_validate: bool = True#
block_size: int = 6#
number_fmt: str = ' 15.6e'#
data_header_tpl: str = '>!****{title}****!\n'#
sections: dict[str, EDIComponentBase] = {}#
classmethod from_file(file, **kw)[source]#
Parameters:
Return type:

EdiFileBase

write_file(file=None, *, overwrite=True)[source]#
Parameters:
Return type:

Path

abstractmethod read()[source]#
Return type:

EdiFileBase

abstractmethod compose()[source]#
Return type:

str | list[str]

add_section(name, s)[source]#
Parameters:
Return type:

None

get_section(name)[source]#
Parameters:

name (str)

Return type:

EDIComponentBase | None

remove_section(name)[source]#
Parameters:

name (str)

Return type:

None

iter_sections()[source]#
Return type:

Iterable[tuple[str, EDIComponentBase]]

property dataid: str | None[source]#
property lat: float | None[source]#
property lon: float | None[source]#
property elev: float | None[source]#
static normalize_section_title(title)[source]#
Parameters:

title (str)

Return type:

str

format_block_header(title)[source]#
Parameters:

title (str)

Return type:

str

static format_section_head(head)[source]#
Parameters:

head (str)

Return type:

str

format_kv(key, value, *, quote=False, width=None)[source]#
Parameters:
Return type:

str

format_data_block(title, data, *, per_line=None, header_comment=True, count_comment=True)[source]#
Parameters:
Return type:

list[str]

static ensure_descending_frequency(freq)[source]#
Parameters:

freq (Iterable[float])

Return type:

tuple[list[float], list[int] | None]

to_dict()[source]#
Return type:

dict[str, Any]

classmethod from_dict(data)[source]#
Parameters:

data (Mapping[str, Any])

Return type:

EdiFileBase

summary()[source]#
Return type:

str

compose_to_string()[source]#
Return type:

str