Skip to content

Commit d69f160

Browse files
Merge branch 'main' into feature/aquav1.0.2
2 parents 6248583 + 79ab368 commit d69f160

File tree

31 files changed

+521
-138
lines changed

31 files changed

+521
-138
lines changed

.github/workflows/run-forecast-unit-tests.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
strategy:
2828
fail-fast: false
2929
matrix:
30-
python-version: ["3.8"]
30+
python-version: ["3.8", "3.9", "3.10"]
3131

3232
steps:
3333
- uses: actions/checkout@v4
@@ -56,4 +56,7 @@ jobs:
5656
$CONDA/bin/conda init
5757
source /home/runner/.bashrc
5858
pip install -r test-requirements-operators.txt
59+
pip install "oracle-automlx[classic]>=24.2.0"
60+
pip install "oracle-automlx[forecasting]>=24.2.0"
61+
pip install pandas>=2.2.0
5962
python -m pytest -v -p no:warnings --durations=5 tests/operators/forecast

.github/workflows/run-operators-unit-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
strategy:
2828
fail-fast: false
2929
matrix:
30-
python-version: ["3.8"]
30+
python-version: ["3.8", "3.9", "3.10"]
3131

3232
steps:
3333
- uses: actions/checkout@v4

ads/opctl/operator/lowcode/anomaly/__main__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ def operate(operator_config: AnomalyOperatorConfig) -> None:
4040
AnomalyOperatorModelFactory.get_model(
4141
operator_config, datasets
4242
).generate_report()
43-
except Exception as e2:
43+
except Exception as ee:
4444
logger.debug(
45-
f"Failed to backup forecast with error {e2.args}. Raising original error."
45+
f"Failed to backup forecast with error {ee.args}. Raising original error."
4646
)
47-
raise e
47+
raise ee
4848
else:
4949
raise e
5050

ads/opctl/operator/lowcode/anomaly/model/autots.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def _generate_report(self):
9191
),
9292
]
9393
model_description = rc.Text(
94-
"The automlx model automatically pre-processes, selects and engineers "
94+
"The autots model automatically pre-processes, selects and engineers "
9595
"high-quality features in your dataset, which then given to an automatically "
9696
"chosen and optimized machine learning model.."
9797
)

ads/opctl/operator/lowcode/anomaly/model/base_model.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,29 @@
44
# Copyright (c) 2023, 2024 Oracle and/or its affiliates.
55
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
66

7+
import fsspec
8+
import numpy as np
79
import os
10+
import pandas as pd
811
import tempfile
912
import time
1013
from abc import ABC, abstractmethod
11-
from typing import Tuple
12-
13-
import fsspec
14-
import pandas as pd
15-
import numpy as np
1614
from sklearn import linear_model
15+
from typing import Tuple
1716

17+
from ads.common.object_storage_details import ObjectStorageDetails
1818
from ads.opctl import logger
19-
20-
from ..operator_config import AnomalyOperatorConfig, AnomalyOperatorSpec
21-
from .anomaly_dataset import AnomalyDatasets, AnomalyOutput, TestData
2219
from ads.opctl.operator.lowcode.anomaly.const import OutputColumns, SupportedMetrics
23-
from ..const import SupportedModels
20+
from ads.opctl.operator.lowcode.anomaly.utils import _build_metrics_df, default_signer
2421
from ads.opctl.operator.lowcode.common.utils import (
2522
human_time_friendly,
2623
enable_print,
2724
disable_print,
2825
write_data,
29-
merge_category_columns,
30-
find_output_dirname,
3126
)
32-
from ads.opctl.operator.lowcode.anomaly.utils import _build_metrics_df, default_signer
33-
from ads.common.object_storage_details import ObjectStorageDetails
27+
from .anomaly_dataset import AnomalyDatasets, AnomalyOutput, TestData
28+
from ..const import SupportedModels
29+
from ..operator_config import AnomalyOperatorConfig, AnomalyOperatorSpec
3430

3531

3632
class AnomalyOperatorBaseModel(ABC):
@@ -246,7 +242,7 @@ def _save_report(
246242
"""Saves resulting reports to the given folder."""
247243
import report_creator as rc
248244

249-
unique_output_dir = find_output_dirname(self.spec.output_directory)
245+
unique_output_dir = self.spec.output_directory.url
250246

251247
if ObjectStorageDetails.is_oci_path(unique_output_dir):
252248
storage_options = default_signer()
@@ -320,11 +316,11 @@ def _fallback_build_model(self):
320316
# Iterate over the full_data_dict items
321317
for target, df in self.datasets.full_data_dict.items():
322318
est = linear_model.SGDOneClassSVM(random_state=42)
323-
est.fit(df[target].values.reshape(-1, 1))
319+
est.fit(df[self.spec.target_column].fillna(0).values.reshape(-1, 1))
324320
y_pred = np.vectorize(self.outlier_map.get)(
325-
est.predict(df[target].values.reshape(-1, 1))
321+
est.predict(df[self.spec.target_column].fillna(0).values.reshape(-1, 1))
326322
)
327-
scores = est.score_samples(df[target].values.reshape(-1, 1))
323+
scores = est.score_samples(df[self.spec.target_column].fillna(0).values.reshape(-1, 1))
328324

329325
anomaly = pd.DataFrame(
330326
{date_column: df[date_column], OutputColumns.ANOMALY_COL: y_pred}

ads/opctl/operator/lowcode/anomaly/operator_config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
InputData,
1717
)
1818
from .const import SupportedModels
19+
from ads.opctl.operator.lowcode.common.utils import find_output_dirname
1920

2021

2122
@dataclass(repr=True)
@@ -79,6 +80,7 @@ class AnomalyOperatorSpec(DataClassSerializable):
7980

8081
def __post_init__(self):
8182
"""Adjusts the specification details."""
83+
self.output_directory = self.output_directory or OutputDirectory(url=find_output_dirname(self.output_directory))
8284
self.report_file_name = self.report_file_name or "report.html"
8385
self.report_theme = self.report_theme or "light"
8486
self.inliers_filename = self.inliers_filename or "inliers.csv"

ads/opctl/operator/lowcode/anomaly/schema.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,9 +349,8 @@ spec:
349349
model:
350350
type: string
351351
required: false
352-
default: automlx
352+
default: autots
353353
allowed:
354-
- automlx
355354
- autots
356355
- auto
357356
meta:

ads/opctl/operator/lowcode/anomaly/utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22
# -*- coding: utf-8 -*--
33

4-
# Copyright (c) 2023 Oracle and/or its affiliates.
4+
# Copyright (c) 2023, 2024 Oracle and/or its affiliates.
55
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
66

77
import os
@@ -77,5 +77,6 @@ def default_signer(**kwargs):
7777

7878
return default_signer(**kwargs)
7979

80+
8081
def select_auto_model(datasets, operator_config):
81-
return SupportedModels.AutoMLX
82+
return SupportedModels.AutoTS

ads/opctl/operator/lowcode/common/transformations.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ def _set_series_id_column(self, df):
9797
for value in merged_values:
9898
self._target_category_columns_map[value] = df[df[DataColumns.Series] == value][self.target_category_columns].drop_duplicates().iloc[0].to_dict()
9999

100-
df = df.drop(self.target_category_columns, axis=1)
100+
if self.target_category_columns != [DataColumns.Series]:
101+
df = df.drop(self.target_category_columns, axis=1)
101102
return df
102103

103104
def _format_datetime_col(self, df):

ads/opctl/operator/lowcode/common/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def human_time_friendly(seconds):
215215

216216

217217
def find_output_dirname(output_dir: OutputDirectory):
218-
if output_dir:
218+
if output_dir and output_dir.url:
219219
return output_dir.url
220220
output_dir = "results"
221221

0 commit comments

Comments
 (0)