Beispiel #1
0
    def select_runs(
        self,
        expression: Optional[Union[str, Expression,
                                   BinaryExpressionTree]] = None,
        default_expression: Optional[Union[str, Expression,
                                           BinaryExpressionTree]] = None,
    ) -> List[Run]:
        runs = {
            exp_name: [
                Run(self, exp_name, run_hash)
                for run_hash in self.list_branch_commits(exp_name)
            ]
            for exp_name in self.list_branches()
        }

        matched_runs = []  # type: List[Run]

        # Build expression tree
        if expression:
            expression = build_bet(expression)
            expression.strict = True

        if default_expression:
            default_expression = build_bet(default_expression)
            default_expression.strict = True
            if expression:
                expression.concat(default_expression)
            else:
                expression = default_expression

        for experiment_runs in runs.values():
            for run in experiment_runs:
                # Add metrics path modifier
                expression.dump_path_modifiers()
                if AIM_MAP_METRICS_KEYWORD in run.params.keys():
                    expression.add_path_modifier(
                        lambda path_token: self.metrics_path_checker(
                            path_token, run.config.keys()),
                        lambda path_token: self.metrics_path_modifier(
                            path_token, run.params[AIM_MAP_METRICS_KEYWORD]))

                # Dictionary representing all search fields
                fields = {
                    'experiment': run.experiment_name,
                    'run':
                    run.config,  # Run configs (date, name, archived etc)
                    'params': run.params,  # Run parameters (`NestedMap`)
                }
                # Default parameters - ones passed without namespace
                default_params = run.params.get(AIM_NESTED_MAP_DEFAULT) or {}

                if not expression:
                    res = True
                else:
                    res = expression.match(fields, run.params, default_params)
                if res is True:
                    matched_runs.append(run)

        return matched_runs
Beispiel #2
0
    def select_metrics(self, select_metrics: Union[str, List[str], Tuple[str]],
                       expression: Optional[
                           Union[str,
                                 Expression,
                                 BinaryExpressionTree]] = None,
                       default_expression: Optional[
                           Union[str,
                                 Expression,
                                 BinaryExpressionTree]] = None,
                       ) -> List[Run]:
        """
        Searches repo and returns matching metrics
        """
        if isinstance(select_metrics, str):
            select_metrics = [select_metrics]

        runs = {
            exp_name: [
                Run(self, exp_name, run_hash)
                for run_hash in self.list_branch_commits(exp_name)
            ]
            for exp_name in self.list_branches()
        }

        matched_runs: List[Run] = []

        expression = build_bet(expression)
        expression.strict = True
        if default_expression:
            default_expression = build_bet(default_expression)
            expression.concat(default_expression)

        for experiment_runs in runs.values():
            for run in experiment_runs:
                # Add metrics path modifier
                expression.dump_path_modifiers()
                if AIM_MAP_METRICS_KEYWORD in run.params.keys():
                    expression.add_path_modifier(
                        lambda path_token: self.metrics_path_checker(
                            path_token,
                            run.config.keys()),
                        lambda path_token: self.metrics_path_modifier(
                            path_token,
                            run.params[AIM_MAP_METRICS_KEYWORD])
                    )

                # Dictionary representing all search fields
                fields = {
                    'experiment': run.experiment_name,
                    'run': run.config,  # Run configs (date, name, archived etc)
                    'params': run.params,  # Run parameters (`NestedMap`)
                }
                # Default parameters - ones passed without namespace
                default_params = run.params.get(AIM_NESTED_MAP_DEFAULT) or {}

                # Search metrics
                for metric_name, metric in run.get_all_metrics().items():
                    if metric_name not in select_metrics:
                        continue

                    fields['metric'] = metric_name
                    for trace in metric.get_all_traces():
                        fields['context'] = trace.context
                        # Pass fields in descending order by priority
                        if expression is None:
                            res = True
                        else:
                            res = expression.match(fields,
                                                   run.params,
                                                   default_params)
                        if res is True:
                            metric.append(trace)
                            run.add(metric)
                            if run not in matched_runs:
                                matched_runs.append(run)

        return matched_runs
Beispiel #3
0
    def select(
        self,
        select_fields: List[str] = [],
        expression: Optional[Union[str, Expression,
                                   BinaryExpressionTree]] = None,
        default_expression: Optional[Union[str, Expression,
                                           BinaryExpressionTree]] = None,
    ):
        select_result = SelectResult(select_fields)

        runs = {
            exp_name: [
                Run(self, exp_name, run_hash)
                for run_hash in self.list_branch_commits(exp_name)
            ]
            for exp_name in self.list_branches()
        }

        # Build expression tree
        if expression:
            expression = build_bet(expression)
            expression.strict = True

        if default_expression:
            default_expression = build_bet(default_expression)
            default_expression.strict = True
            if expression:
                expression.concat(default_expression)
            else:
                expression = default_expression

        for experiment_runs in runs.values():
            for run in experiment_runs:
                # Dictionary representing all search fields
                fields = {
                    'experiment': run.experiment_name,
                    'run':
                    run.config,  # Run configs (date, name, archived etc)
                    'params': run.params,  # Run parameters (`NestedMap`)
                }
                # Default parameters - those passed without namespace
                default_params = {
                    'params': (run.params.get(AIM_NESTED_MAP_DEFAULT) or {}),
                }

                # Search metrics
                for metric_name, metric in run.get_all_metrics().items():
                    fields['metric'] = metric_name
                    for trace in metric.get_all_traces():
                        fields['context'] = trace.context
                        # Pass fields in descending order by priority
                        if expression is None:
                            res = True
                        else:
                            res = expression.match(fields, run.params,
                                                   default_params)

                        if res is not True:
                            continue

                        # Append trace data if metric is selected
                        for select_field in select_fields:
                            if select_field == metric_name:
                                metric.append(trace)
                                run.add(metric)
                                break

                        # Append run if either metric or param is selected
                        for select_field in select_fields:
                            if select_field == metric_name:
                                select_result.append_run(run)
                                break

                            field_val = get_dict_item_by_path(
                                run.params, select_field)
                            if field_val is not None:
                                select_result.append_run(run)
                                break

        return select_result