Skip to content

Commit de5d0f3

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
fix: Update get_experiment_df to pass Experiment and allow empty metrics.
PiperOrigin-RevId: 634867806
1 parent abacda6 commit de5d0f3

File tree

4 files changed

+53
-10
lines changed

4 files changed

+53
-10
lines changed

google/cloud/aiplatform/metadata/experiment_resources.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,8 @@ def get_data_frame(
482482
metadata_context.schema_title
483483
]._query_experiment_row,
484484
metadata_context,
485-
include_time_series,
485+
experiment=self,
486+
include_time_series=include_time_series,
486487
)
487488
for metadata_context in contexts
488489
]
@@ -494,7 +495,8 @@ def get_data_frame(
494495
metadata_execution.schema_title
495496
]._query_experiment_row,
496497
metadata_execution,
497-
include_time_series,
498+
experiment=self,
499+
include_time_series=include_time_series,
498500
)
499501
for metadata_execution in executions
500502
)

google/cloud/aiplatform/metadata/experiment_run_resource.py

+12-4
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,8 @@ def _initialize_experiment_run(
454454
self._metadata_metric_artifact = self._v1_get_metric_artifact()
455455
if not self._is_legacy_experiment_run() and lookup_tensorboard_run:
456456
self._backing_tensorboard_run = self._lookup_tensorboard_run_artifact()
457+
if not self._backing_tensorboard_run:
458+
self._assign_to_experiment_backing_tensorboard()
457459

458460
@classmethod
459461
def list(
@@ -553,13 +555,16 @@ def _create_v1_experiment_run(
553555
def _query_experiment_row(
554556
cls,
555557
node: Union[context.Context, execution.Execution],
556-
include_time_series: Optional[bool] = True,
558+
experiment: Optional[experiment_resources.Experiment] = None,
559+
include_time_series: bool = True,
557560
) -> experiment_resources._ExperimentRow:
558561
"""Retrieves the runs metric and parameters into an experiment run row.
559562
560563
Args:
561564
node (Union[context._Context, execution.Execution]):
562565
Required. Metadata node instance that represents this run.
566+
experiment:
567+
Optional. Experiment associated with this run.
563568
include_time_series (bool):
564569
Optional. Whether or not to include time series metrics in df.
565570
Default is True.
@@ -568,7 +573,7 @@ def _query_experiment_row(
568573
"""
569574
this_experiment_run = cls.__new__(cls)
570575
this_experiment_run._initialize_experiment_run(
571-
node, lookup_tensorboard_run=include_time_series
576+
node, experiment=experiment, lookup_tensorboard_run=include_time_series
572577
)
573578

574579
row = experiment_resources._ExperimentRow(
@@ -620,8 +625,11 @@ def _get_latest_time_series_metric_columns(self) -> Dict[str, Union[float, int]]
620625
return {
621626
display_name: data.values[-1].scalar.value
622627
for display_name, data in time_series_metrics.items()
623-
if data.value_type
624-
== gca_tensorboard_time_series.TensorboardTimeSeries.ValueType.SCALAR
628+
if (
629+
data.values
630+
and data.value_type
631+
== gca_tensorboard_time_series.TensorboardTimeSeries.ValueType.SCALAR
632+
)
625633
}
626634
return {}
627635

google/cloud/aiplatform/pipeline_jobs.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -887,17 +887,24 @@ def _get_context(self) -> context.Context:
887887

888888
@classmethod
889889
def _query_experiment_row(
890-
cls, node: context.Context, include_time_series: Optional[bool] = True
890+
cls,
891+
node: context.Context,
892+
experiment: Optional[experiment_resources.Experiment] = None,
893+
include_time_series: bool = True,
891894
) -> experiment_resources._ExperimentRow:
892895
"""Queries the PipelineJob metadata as an experiment run parameter and metric row.
893896
894-
Parameters are retrieved from the system.Run Execution.metadata of the PipelineJob.
897+
Parameters are retrieved from the system.Run Execution.metadata of the
898+
PipelineJob.
895899
896-
Metrics are retrieved from the system.Metric Artifacts.metadata produced by this PipelineJob.
900+
Metrics are retrieved from the system.Metric Artifacts.metadata produced
901+
by this PipelineJob.
897902
898903
Args:
899904
node (context._Context):
900905
Required. System.PipelineRun context that represents a PipelineJob Run.
906+
experiment:
907+
Optional. Experiment associated with this run.
901908
include_time_series (bool):
902909
Optional. Whether or not to include time series metrics in df.
903910
Default is True.

tests/unit/aiplatform/test_metadata.py

+27-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import os
1919
import copy
2020
from importlib import reload
21-
from unittest import mock
21+
from unittest import TestCase, mock
2222
from unittest.mock import patch, call
2323

2424
import numpy as np
@@ -2048,6 +2048,32 @@ def test_log_pipeline_job(
20482048
],
20492049
)
20502050

2051+
@pytest.mark.usefixtures(
2052+
"get_experiment_mock",
2053+
)
2054+
def test_get_experiment_df_passes_experiment_variable(
2055+
self,
2056+
list_context_mock_for_experiment_dataframe_mock,
2057+
list_artifact_mock_for_experiment_dataframe,
2058+
list_executions_mock_for_experiment_dataframe,
2059+
get_tensorboard_run_artifact_mock,
2060+
get_tensorboard_run_mock,
2061+
):
2062+
aiplatform.init(project=_TEST_PROJECT, location=_TEST_LOCATION)
2063+
2064+
with patch.object(
2065+
experiment_run_resource.ExperimentRun, "_query_experiment_row"
2066+
) as query_experiment_row_mock:
2067+
row = experiment_resources._ExperimentRow(
2068+
experiment_run_type=constants.SYSTEM_EXPERIMENT_RUN,
2069+
name=_TEST_EXPERIMENT,
2070+
)
2071+
query_experiment_row_mock.return_value = row
2072+
2073+
aiplatform.get_experiment_df(_TEST_EXPERIMENT)
2074+
_, kwargs = query_experiment_row_mock.call_args_list[0]
2075+
TestCase.assertTrue(self, kwargs["experiment"].name == _TEST_EXPERIMENT)
2076+
20512077
@pytest.mark.usefixtures(
20522078
"get_experiment_mock",
20532079
"list_tensorboard_time_series_mock",

0 commit comments

Comments
 (0)