"""
Camelot-based table extraction.

`acquire` is the shared Camelot layer: page rendering, both flavors in
spawn-context subprocesses, content-empty shell detection. Two deprecated
extraction strategies build on it:

- `correspondence` — the rasterized page is the arbiter: a detector
  agent says what tables exist and where, Camelot chunks are assigned to
  them by bbox overlap, and a completeness audit checks the assembled
  grids against the page text layer.
- `llm` — Camelot output from both flavors flows through an LLM
  classifier (drops non-tables) and unifier (combines the flavor outputs
  per page), orchestrated as a pydantic-graph async graph.

Both stay reachable from the CLI through `quber table --engine`, and
`quber validate` runs the `llm` extractor for its raw Camelot counts. In
`llm`, Camelot's cells are the only value source the LLMs are given, and
only the prompts tell them not to change numbers. In `correspondence`, the
correction LLM also gets the table region's text layer and the page's text,
its prompt names the text layer as the authoritative value source, and it
may recover rows from it. The grounding guard rejects a corrected number
found in neither the grid nor the page text layer.

The package also holds code the live Set-of-Mark engine depends on.
`recapture` repairs values Camelot's cell assignment dropped. `tighten`
fits Camelot cell rectangles onto the words each cell prints. The
`correspondence` modules `correction`, `geometry` and `recovery` supply
the structure correction, coordinate conversions and the
region-constrained Camelot pass, and `geometry` also serves
`quber.core.fusion` and `quber.core.figures`. (The same-named third-party
`camelot` library is a different package; absolute imports keep the two
apart.)
"""

from quber.core.extractors.camelot.correspondence import CamelotCorrespondenceExtractor
from quber.core.extractors.camelot.llm import CamelotLLMTableExtractor

__all__ = ["CamelotCorrespondenceExtractor", "CamelotLLMTableExtractor"]
