"""
Table-only extractors.

`TableExtractor` is the seam for engines whose job is *table extraction*,
not document parsing — explicitly decoupled from `Parser` (see
core/README.md). They answer different questions and produce different
shapes:

- `Parser` -> `ParseResult` (whole document, structured; the
  `DoclingDocument` is on `.document`)
- `TableExtractor` -> `list[ExtractedTable]` (tables only, Pydantic models)

The two are composed in `quber.core.fusion` (`fuse_artifacts`,
`DocumentFusion`), which grafts the extracted tables into a unified
`DoclingDocument`.

The active engine is `SetOfMarkExtractor` (vision locates each table and its
region; Camelot fills it in-region; grounded correction cleans structure).
`CamelotCorrespondenceExtractor` and `CamelotLLMTableExtractor` are DEPRECATED
— not for new use. Both stay reachable through `quber table --engine`, and
`quber validate` always runs `CamelotLLMTableExtractor` (with mock classifier
and unifier) for its raw Camelot counts, so removing it breaks that command.
"""

from quber.core.extractors.base import ExtractedTable, ExtractionRecord, FilledCell, TableExtractor
from quber.core.extractors.camelot.correspondence import CamelotCorrespondenceExtractor
from quber.core.extractors.camelot.llm import CamelotLLMTableExtractor
from quber.core.extractors.mock import MockTableExtractor
from quber.core.extractors.set_of_mark import SetOfMarkExtractor

__all__ = [
    "SetOfMarkExtractor",
    "ExtractedTable",
    "ExtractionRecord",
    "FilledCell",
    "MockTableExtractor",
    "TableExtractor",
    # deprecated / dormant
    "CamelotCorrespondenceExtractor",
    "CamelotLLMTableExtractor",
]
