Example #1
0
 def metric_from_sqa_util(self, metric_sqa: SQAMetric) -> Metric:
     """Convert SQLAlchemy Metric to Ax Metric"""
     metric_class = REVERSE_METRIC_REGISTRY.get(metric_sqa.metric_type)
     if metric_class is None:
         raise SQADecodeError(
             f"Cannot decode SQAMetric because {metric_sqa.metric_type} "
             f"is an invalid type.")
     args = metric_sqa.properties or {}
     args["name"] = metric_sqa.name
     args["lower_is_better"] = metric_sqa.lower_is_better
     args = metric_class.deserialize_init_args(args=args)
     metric = metric_class(**args)
     return metric
Example #2
0
File: decoder.py Project: HaysS/Ax
    def metric_from_sqa(
        self, metric_sqa: SQAMetric
    ) -> Union[Metric, Objective, OutcomeConstraint]:
        """Convert SQLAlchemy Metric to Ax Metric, Objective, or OutcomeConstraint."""
        metric_class = REVERSE_METRIC_REGISTRY.get(metric_sqa.metric_type)
        if metric_class is None:
            raise SQADecodeError(
                f"Cannot decode SQAMetric because {metric_sqa.metric_type} "
                f"is an invalid type."
            )

        args = self.get_init_args_from_properties(
            # pyre-fixme[6]: Expected `SQABase` for ...es` but got `SQAMetric`.
            object_sqa=metric_sqa,
            class_=metric_class,
        )
        metric = metric_class(**args)

        if metric_sqa.intent == MetricIntent.TRACKING:
            return metric
        elif metric_sqa.intent == MetricIntent.OBJECTIVE:
            if metric_sqa.minimize is None:
                raise SQADecodeError(  # pragma: no cover
                    "Cannot decode SQAMetric to Objective because minimize is None."
                )
            # pyre-fixme[6]: Expected `bool` for 2nd param but got `Optional[bool]`.
            return Objective(metric=metric, minimize=metric_sqa.minimize)
        elif metric_sqa.intent == MetricIntent.OUTCOME_CONSTRAINT:
            if (
                metric_sqa.bound is None
                or metric_sqa.op is None
                or metric_sqa.relative is None
            ):
                raise SQADecodeError(  # pragma: no cover
                    "Cannot decode SQAMetric to OutcomeConstraint because "
                    "bound, op, or relative is None."
                )
            return OutcomeConstraint(
                metric=metric,
                # pyre-fixme[6]: Expected `float` for 2nd param but got
                #  `Optional[float]`.
                bound=metric_sqa.bound,
                op=metric_sqa.op,
                relative=metric_sqa.relative,
            )
        else:
            raise SQADecodeError(
                f"Cannot decode SQAMetric because {metric_sqa.intent} "
                f"is an invalid intent."
            )
Example #3
0
 def metric_from_sqa_util(self, metric_sqa: SQAMetric) -> Metric:
     """Convert SQLAlchemy Metric to Ax Metric"""
     metric_class = REVERSE_METRIC_REGISTRY.get(metric_sqa.metric_type)
     if metric_class is None:
         raise SQADecodeError(
             f"Cannot decode SQAMetric because {metric_sqa.metric_type} "
             f"is an invalid type.")
     args = self.get_init_args_from_properties(
         # pyre-fixme[6]: Expected `SQABase` for ...es` but got `SQAMetric`.
         object_sqa=metric_sqa,
         class_=metric_class,
     )
     metric = metric_class(**args)
     return metric
Example #4
0
 def metric_from_sqa_util(self, metric_sqa: SQAMetric) -> Metric:
     """Convert SQLAlchemy Metric to Ax Metric"""
     metric_class = REVERSE_METRIC_REGISTRY.get(metric_sqa.metric_type)
     if metric_class is None:
         raise SQADecodeError(
             f"Cannot decode SQAMetric because {metric_sqa.metric_type} "
             f"is an invalid type.")
     args = dict(
         object_from_json(
             metric_sqa.properties,
             decoder_registry=self.config.json_decoder_registry,
             class_decoder_registry=self.config.json_class_decoder_registry,
         ) or {})
     args["name"] = metric_sqa.name
     args["lower_is_better"] = metric_sqa.lower_is_better
     args = metric_class.deserialize_init_args(args=args)
     metric = metric_class(**args)
     metric.db_id = metric_sqa.id
     return metric