Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions circe/execution/databricks_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,13 @@ def apply_databricks_post_connect_workaround(
This helper should be applied lazily by the execution path when a
Databricks backend is actually used.
"""
import ibis
from packaging.version import Version

# If the installed Ibis version is late enough to contain the fix, skip patch
if Version(ibis.__version__) >= Version("10.0.0"):
return False

backend_cls = _databricks_backend_class() if backend_cls is None else backend_cls
if backend_cls is None:
return False
Expand All @@ -70,6 +77,15 @@ def apply_databricks_post_connect_workaround(
if not _post_connect_needs_workaround(post_connect):
return False

import warnings

warnings.warn(
"The Databricks workaround for Ibis issue #11598 is active. "
"This will be removed in a future release once older Ibis versions are deprecated.",
DeprecationWarning,
stacklevel=2,
)

@functools.wraps(post_connect)
def _patched_post_connect(self: Any, *args: Any, **kwargs: Any) -> Any:
try:
Expand Down
4 changes: 2 additions & 2 deletions circe/execution/lower/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
from .criteria import LOWERERS, lower_criterion
from .criteria import LowerFn, lower_criterion

__all__ = ["LOWERERS", "lower_criterion"]
__all__ = ["LowerFn", "lower_criterion"]
4 changes: 4 additions & 0 deletions circe/execution/lower/condition_era.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
from __future__ import annotations

from circe.cohortdefinition.criteria import ConditionEra
from circe.extensions import lowerer

from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
from ..plan.schema import OCCURRENCE_COUNT
Expand All @@ -11,6 +14,7 @@
)


@lowerer(ConditionEra)
def lower_condition_era(
criterion: NormalizedCriterion,
*,
Expand Down
3 changes: 3 additions & 0 deletions circe/execution/lower/condition_occurrence.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import ConditionOccurrence
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
Expand All @@ -13,6 +15,7 @@
)


@lowerer(ConditionOccurrence)
def lower_condition_occurrence(
criterion: NormalizedCriterion,
*,
Expand Down
63 changes: 7 additions & 56 deletions circe/execution/lower/criteria.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,11 @@

from typing import Protocol

from ...cohortdefinition.criteria import (
ConditionEra,
ConditionOccurrence,
Criteria,
Death,
DeviceExposure,
DoseEra,
DrugEra,
DrugExposure,
LocationRegion,
Measurement,
Observation,
ObservationPeriod,
PayerPlanPeriod,
ProcedureOccurrence,
Specimen,
VisitDetail,
VisitOccurrence,
)
from circe.extensions import get_registry

from ..errors import UnsupportedCriterionError
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
from .condition_era import lower_condition_era
from .condition_occurrence import lower_condition_occurrence
from .death import lower_death
from .device_exposure import lower_device_exposure
from .dose_era import lower_dose_era
from .drug_era import lower_drug_era
from .drug_exposure import lower_drug_exposure
from .location_region import lower_location_region
from .measurement import lower_measurement
from .observation import lower_observation
from .observation_period import lower_observation_period
from .payer_plan_period import lower_payer_plan_period
from .procedure_occurrence import lower_procedure_occurrence
from .specimen import lower_specimen
from .visit_detail import lower_visit_detail
from .visit_occurrence import lower_visit_occurrence


class LowerFn(Protocol):
Expand All @@ -51,34 +18,18 @@ def __call__(
) -> EventPlan: ...


LOWERERS: dict[type[Criteria], LowerFn] = {
ConditionOccurrence: lower_condition_occurrence,
DrugExposure: lower_drug_exposure,
VisitOccurrence: lower_visit_occurrence,
Measurement: lower_measurement,
ProcedureOccurrence: lower_procedure_occurrence,
Observation: lower_observation,
VisitDetail: lower_visit_detail,
DeviceExposure: lower_device_exposure,
Specimen: lower_specimen,
Death: lower_death,
ObservationPeriod: lower_observation_period,
PayerPlanPeriod: lower_payer_plan_period,
ConditionEra: lower_condition_era,
DrugEra: lower_drug_era,
DoseEra: lower_dose_era,
LocationRegion: lower_location_region,
}


def lower_criterion(
criterion: NormalizedCriterion,
*,
criterion_index: int,
) -> EventPlan:
lowerer = LOWERERS.get(type(criterion.raw_criteria))
registry = get_registry()
criteria_cls = type(criterion.raw_criteria)
lowerer = registry.get_lowerer(criteria_cls)

if lowerer is not None:
return lowerer(criterion, criterion_index=criterion_index)

raise UnsupportedCriterionError(
f"Ibis executor lowering error: no lowerer registered for {criterion.criterion_type}."
)
3 changes: 3 additions & 0 deletions circe/execution/lower/death.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import Death
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
from .common import append_concept_filters, build_standard_domain_plan, lower_common_steps


@lowerer(Death)
def lower_death(
criterion: NormalizedCriterion,
*,
Expand Down
3 changes: 3 additions & 0 deletions circe/execution/lower/device_exposure.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import DeviceExposure
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
Expand All @@ -14,6 +16,7 @@
)


@lowerer(DeviceExposure)
def lower_device_exposure(
criterion: NormalizedCriterion,
*,
Expand Down
4 changes: 4 additions & 0 deletions circe/execution/lower/dose_era.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
from __future__ import annotations

from circe.cohortdefinition.criteria import DoseEra
from circe.extensions import lowerer

from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
from .common import append_duration_filter, build_standard_domain_plan, lower_common_steps


@lowerer(DoseEra)
def lower_dose_era(
criterion: NormalizedCriterion,
*,
Expand Down
4 changes: 4 additions & 0 deletions circe/execution/lower/drug_era.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
from __future__ import annotations

from circe.cohortdefinition.criteria import DrugEra
from circe.extensions import lowerer

from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
from ..plan.schema import GAP_DAYS, OCCURRENCE_COUNT
Expand All @@ -11,6 +14,7 @@
)


@lowerer(DrugEra)
def lower_drug_era(
criterion: NormalizedCriterion,
*,
Expand Down
3 changes: 3 additions & 0 deletions circe/execution/lower/drug_exposure.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import DrugExposure
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
Expand All @@ -14,6 +16,7 @@
)


@lowerer(DrugExposure)
def lower_drug_exposure(
criterion: NormalizedCriterion,
*,
Expand Down
4 changes: 4 additions & 0 deletions circe/execution/lower/location_region.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
from __future__ import annotations

from circe.cohortdefinition.criteria import LocationRegion
from circe.extensions import lowerer

from ..normalize.criteria import NormalizedCriterion
from ..plan.events import (
EventPlan,
Expand All @@ -11,6 +14,7 @@
)


@lowerer(LocationRegion)
def lower_location_region(
criterion: NormalizedCriterion,
*,
Expand Down
3 changes: 3 additions & 0 deletions circe/execution/lower/measurement.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import Measurement
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
Expand All @@ -14,6 +16,7 @@
)


@lowerer(Measurement)
def lower_measurement(
criterion: NormalizedCriterion,
*,
Expand Down
3 changes: 3 additions & 0 deletions circe/execution/lower/observation.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import Observation
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
Expand All @@ -14,6 +16,7 @@
)


@lowerer(Observation)
def lower_observation(
criterion: NormalizedCriterion,
*,
Expand Down
4 changes: 4 additions & 0 deletions circe/execution/lower/observation_period.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
from __future__ import annotations

from circe.cohortdefinition.criteria import ObservationPeriod
from circe.extensions import lowerer

from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
from .common import lower_standard_domain_plan


@lowerer(ObservationPeriod)
def lower_observation_period(
criterion: NormalizedCriterion,
*,
Expand Down
4 changes: 4 additions & 0 deletions circe/execution/lower/payer_plan_period.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
from __future__ import annotations

from circe.cohortdefinition.criteria import PayerPlanPeriod
from circe.extensions import lowerer

from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
from .common import lower_standard_domain_plan


@lowerer(PayerPlanPeriod)
def lower_payer_plan_period(
criterion: NormalizedCriterion,
*,
Expand Down
3 changes: 3 additions & 0 deletions circe/execution/lower/procedure_occurrence.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import ProcedureOccurrence
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
Expand All @@ -13,6 +15,7 @@
)


@lowerer(ProcedureOccurrence)
def lower_procedure_occurrence(
criterion: NormalizedCriterion,
*,
Expand Down
3 changes: 3 additions & 0 deletions circe/execution/lower/specimen.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import Specimen
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan
Expand All @@ -12,6 +14,7 @@
)


@lowerer(Specimen)
def lower_specimen(
criterion: NormalizedCriterion,
*,
Expand Down
3 changes: 3 additions & 0 deletions circe/execution/lower/visit_detail.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import VisitDetail
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan, PlanStep
Expand All @@ -14,6 +16,7 @@
)


@lowerer(VisitDetail)
def lower_visit_detail(
criterion: NormalizedCriterion,
*,
Expand Down
3 changes: 3 additions & 0 deletions circe/execution/lower/visit_occurrence.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from circe.extensions import lowerer

from ...cohortdefinition.criteria import VisitOccurrence
from ..normalize.criteria import NormalizedCriterion
from ..plan.events import EventPlan, PlanStep
Expand All @@ -14,6 +16,7 @@
)


@lowerer(VisitOccurrence)
def lower_visit_occurrence(
criterion: NormalizedCriterion,
*,
Expand Down
Loading
Loading