color_tools.reconcilers.filament_reconciliation_models

Format-neutral models for filament catalog reconciliation.

class color_tools.reconcilers.filament_reconciliation_models.FilamentMatchCandidate(filament_id, score, kind, reasons=())[source]

Bases: object

One ranked existing-catalog candidate for an imported filament.

Parameters:
  • filament_id (str)

  • score (float)

  • kind (Literal['exact', 'normalized', 'synonym', 'fuzzy'])

  • reasons (tuple[str, ...])

filament_id: str
score: float
kind: Literal['exact', 'normalized', 'synonym', 'fuzzy']
reasons: tuple[str, ...]
__post_init__()[source]

Validate the bounded similarity score.

Return type:

None

class color_tools.reconcilers.filament_reconciliation_models.FilamentReconciliationEntry(source_index, provisional_record, owned, status, candidates, automatic_filament_id, proposed_filament_id)[source]

Bases: object

Planned treatment of one source filament in source order.

Parameters:
source_index: int
provisional_record: FilamentRecord
owned: bool
status: Literal['matched', 'ambiguous', 'new', 'skipped']
candidates: tuple[FilamentMatchCandidate, ...]
automatic_filament_id: str | None
proposed_filament_id: str
class color_tools.reconcilers.filament_reconciliation_models.FilamentReconciliationPlan(source, catalog, entries, fuzzy_matching_available)[source]

Bases: object

Immutable review plan produced before caller decisions are applied.

Parameters:
source: FilamentExportData
catalog: tuple[FilamentRecord, ...]
entries: tuple[FilamentReconciliationEntry, ...]
fuzzy_matching_available: bool
property unresolved_count: int

Return the number of entries requiring an explicit resolution.

count(status)[source]

Return the number of entries with one planned status.

Return type:

int

Parameters:

status (Literal['matched', 'ambiguous', 'new', 'skipped'])

class color_tools.reconcilers.filament_reconciliation_models.FilamentReconciliationPolicy(candidate_score=75.0, automatic_score=85.0, automatic_margin=4.0, candidate_limit=5, candidate_score_window=10.0)[source]

Bases: object

Thresholds controlling automatic and candidate fuzzy matches.

Parameters:
  • candidate_score (float)

  • automatic_score (float)

  • automatic_margin (float)

  • candidate_limit (int)

  • candidate_score_window (float)

candidate_score: float
automatic_score: float
automatic_margin: float
candidate_limit: int
candidate_score_window: float
__post_init__()[source]

Validate score ranges and ordering.

Return type:

None

class color_tools.reconcilers.filament_reconciliation_models.FilamentReconciliationResult(data, mappings)[source]

Bases: object

Resolved new-filament data plus source-to-final ID mappings.

Parameters:
data: FilamentExportData
mappings: tuple[FilamentResolutionMapping, ...]
count(action)[source]

Return the number of mappings using one final action.

Return type:

int

Parameters:

action (Literal['use_existing', 'import_new', 'skip'])

class color_tools.reconcilers.filament_reconciliation_models.FilamentResolutionMapping(source_index, source_filament_id, final_filament_id, action)[source]

Bases: object

Map one source entry to its final Color Tools filament ID, if any.

Parameters:
  • source_index (int)

  • source_filament_id (str)

  • final_filament_id (str | None)

  • action (Literal['use_existing', 'import_new', 'skip'])

source_index: int
source_filament_id: str
final_filament_id: str | None
action: Literal['use_existing', 'import_new', 'skip']