from __future__ import annotations from datetime import datetime from uuid import UUID from pydantic import BaseModel, Field class ChangeDetectionRequest(BaseModel): source_dataset_id: UUID target_dataset_id: UUID iou_threshold: float = Field(default=0.8, ge=0.0, le=1.0) include_unchanged: bool = True class ChangeDetectionSummary(BaseModel): source_dataset_id: UUID target_dataset_id: UUID source_feature_count: int target_feature_count: int added_count: int removed_count: int # A footprint that was redrawn rather than demolished and rebuilt. Without # this class it appeared as one removal plus one addition. modified_count: int = 0 unchanged_count: int iou_threshold: float modified_iou_threshold: float | None = None warnings: list[str] = Field(default_factory=list) generated_at: datetime geojson: dict