Skip to content

Commit 35cccdd

Browse files
authored
min/max in prophet, report title, disable file gen (#1117)
2 parents 0249269 + 856f7ae commit 35cccdd

File tree

20 files changed

+730
-304
lines changed

20 files changed

+730
-304
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def generate_report(self):
7171
try:
7272
anomaly_output = self._build_model()
7373
except Exception as e:
74-
logger.warn(f"Found exception: {e}")
74+
logger.warning(f"Found exception: {e}")
7575
if self.spec.datetime_column:
7676
anomaly_output = self._fallback_build_model()
7777
raise e
@@ -347,7 +347,7 @@ def _save_report(
347347
storage_options=storage_options,
348348
)
349349

350-
logger.warn(
350+
logger.warning(
351351
f"The report has been successfully "
352352
f"generated and placed to the: {unique_output_dir}."
353353
)
@@ -356,7 +356,7 @@ def _fallback_build_model(self):
356356
"""
357357
Fallback method for the sub model _build_model method.
358358
"""
359-
logger.warn(
359+
logger.warning(
360360
f"The build_model method has failed for the model: {self.spec.model}. "
361361
"A fallback model will be built."
362362
)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def _build_model(self) -> AnomalyOutput:
9595

9696
anomaly_output.add_output(target, anomaly, score)
9797
except Exception as e:
98-
logger.warn(f"Encountered Error: {e}. Skipping series {target}.")
98+
logger.warning(f"Encountered Error: {e}. Skipping series {target}.")
9999

100100
return anomaly_output
101101

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def _build_metrics_df(y_true, y_pred, column_name):
4444
# Throws exception if y_true has only one class
4545
metrics[SupportedMetrics.ROC_AUC] = roc_auc_score(y_true, y_pred)
4646
except Exception as e:
47-
logger.warn(f"An exception occurred: {e}")
47+
logger.warning(f"An exception occurred: {e}")
4848
metrics[SupportedMetrics.ROC_AUC] = None
4949
precision, recall, thresholds = precision_recall_curve(y_true, y_pred)
5050
metrics[SupportedMetrics.PRC_AUC] = auc(recall, precision)

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,11 @@ def run(self, data):
9898
return clean_df
9999

100100
def _remove_trailing_whitespace(self, df):
101-
return df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
101+
return df.apply(
102+
lambda x: x.str.strip()
103+
if hasattr(x, "dtype") and x.dtype == "object"
104+
else x
105+
)
102106

103107
def _clean_column_names(self, df):
104108
"""

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

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

6+
import json
67
import logging
78
import os
89
import shutil
@@ -12,7 +13,6 @@
1213

1314
import fsspec
1415
import oracledb
15-
import json
1616
import pandas as pd
1717

1818
from ads.common.object_storage_details import ObjectStorageDetails
@@ -142,6 +142,11 @@ def write_data(data, filename, format, storage_options=None, index=False, **kwar
142142
)
143143

144144

145+
def write_json(json_dict, filename, storage_options=None):
146+
with fsspec.open(filename, mode="w", **storage_options) as f:
147+
f.write(json.dumps(json_dict))
148+
149+
145150
def write_simple_json(data, path):
146151
if ObjectStorageDetails.is_oci_path(path):
147152
storage_options = default_signer()
@@ -265,7 +270,7 @@ def find_output_dirname(output_dir: OutputDirectory):
265270
while os.path.exists(unique_output_dir):
266271
unique_output_dir = f"{output_dir}_{counter}"
267272
counter += 1
268-
logger.warn(
273+
logger.warning(
269274
f"Since the output directory was not specified, the output will be saved to {unique_output_dir} directory."
270275
)
271276
return unique_output_dir

ads/opctl/operator/lowcode/forecast/model/arima.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python
22

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

66
import logging
@@ -132,13 +132,14 @@ def _train_model(self, i, s_id, df, model_kwargs):
132132

133133
logger.debug("===========Done===========")
134134
except Exception as e:
135-
self.errors_dict[s_id] = {
135+
new_error = {
136136
"model_name": self.spec.model,
137137
"error": str(e),
138138
"error_trace": traceback.format_exc(),
139139
}
140-
logger.warn(f"Encountered Error: {e}. Skipping.")
141-
logger.warn(traceback.format_exc())
140+
self.errors_dict[s_id] = new_error
141+
logger.warning(f"Encountered Error: {e}. Skipping.")
142+
logger.warning(traceback.format_exc())
142143

143144
def _build_model(self) -> pd.DataFrame:
144145
full_data_dict = self.datasets.get_data_by_series()
@@ -166,7 +167,7 @@ def _generate_report(self):
166167
sec5_text = rc.Heading("ARIMA Model Parameters", level=2)
167168
blocks = [
168169
rc.Html(
169-
m['model'].summary().as_html(),
170+
m["model"].summary().as_html(),
170171
label=s_id if self.target_cat_col else None,
171172
)
172173
for i, (s_id, m) in enumerate(self.models.items())
@@ -201,11 +202,15 @@ def _generate_report(self):
201202
self.formatted_local_explanation = aggregate_local_explanations
202203

203204
if not self.target_cat_col:
204-
self.formatted_global_explanation = self.formatted_global_explanation.rename(
205-
{"Series 1": self.original_target_column},
206-
axis=1,
205+
self.formatted_global_explanation = (
206+
self.formatted_global_explanation.rename(
207+
{"Series 1": self.original_target_column},
208+
axis=1,
209+
)
210+
)
211+
self.formatted_local_explanation.drop(
212+
"Series", axis=1, inplace=True
207213
)
208-
self.formatted_local_explanation.drop("Series", axis=1, inplace=True)
209214

210215
# Create a markdown section for the global explainability
211216
global_explanation_section = rc.Block(
@@ -235,7 +240,7 @@ def _generate_report(self):
235240
local_explanation_section,
236241
]
237242
except Exception as e:
238-
logger.warn(f"Failed to generate Explanations with error: {e}.")
243+
logger.warning(f"Failed to generate Explanations with error: {e}.")
239244
logger.debug(f"Full Traceback: {traceback.format_exc()}")
240245

241246
model_description = rc.Text(

ads/opctl/operator/lowcode/forecast/model/automlx.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,13 +184,18 @@ def _build_model(self) -> pd.DataFrame:
184184
"selected_model_params": model.selected_model_params_,
185185
}
186186
except Exception as e:
187-
self.errors_dict[s_id] = {
187+
new_error = {
188188
"model_name": self.spec.model,
189189
"error": str(e),
190190
"error_trace": traceback.format_exc(),
191191
}
192-
logger.warn(f"Encountered Error: {e}. Skipping.")
193-
logger.warn(traceback.format_exc())
192+
if s_id in self.errors_dict:
193+
self.errors_dict[s_id]["model_fitting"] = new_error
194+
else:
195+
self.errors_dict[s_id] = {"model_fitting": new_error}
196+
logger.warning(f"Encountered Error: {e}. Skipping.")
197+
logger.warning(f"self.errors_dict[s_id]: {self.errors_dict[s_id]}")
198+
logger.warning(traceback.format_exc())
194199

195200
logger.debug("===========Forecast Generated===========")
196201

@@ -314,7 +319,7 @@ def _generate_report(self):
314319
local_explanation_section,
315320
]
316321
except Exception as e:
317-
logger.warn(f"Failed to generate Explanations with error: {e}.")
322+
logger.warning(f"Failed to generate Explanations with error: {e}.")
318323
logger.debug(f"Full Traceback: {traceback.format_exc()}")
319324

320325
model_description = rc.Text(

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,8 @@ def _build_model(self) -> pd.DataFrame:
211211
"error": str(e),
212212
"error_trace": traceback.format_exc(),
213213
}
214-
logger.warn(f"Encountered Error: {e}. Skipping.")
215-
logger.warn(traceback.format_exc())
214+
logger.warning(f"Encountered Error: {e}. Skipping.")
215+
logger.warning(traceback.format_exc())
216216

217217
logger.debug("===========Done===========")
218218

@@ -242,7 +242,7 @@ def _generate_report(self) -> tuple:
242242
self.models.df_wide_numeric, series=s_id
243243
),
244244
self.datasets.list_series_ids(),
245-
target_category_column=self.target_cat_col
245+
target_category_column=self.target_cat_col,
246246
)
247247
section_1 = rc.Block(
248248
rc.Heading("Forecast Overview", level=2),
@@ -260,15 +260,17 @@ def _generate_report(self) -> tuple:
260260
)
261261

262262
except KeyError:
263-
logger.warn("Issue generating Model Parameters Table Section. Skipping")
263+
logger.warning(
264+
"Issue generating Model Parameters Table Section. Skipping"
265+
)
264266
sec2 = rc.Text("Error generating model parameters.")
265267

266268
section_2 = rc.Block(sec2_text, sec2)
267269

268270
all_sections = [section_1, section_2]
269271

270272
if self.spec.generate_explanations:
271-
logger.warn("Explanations not yet supported for the AutoTS Module")
273+
logger.warning("Explanations not yet supported for the AutoTS Module")
272274

273275
# Model Description
274276
model_description = rc.Text(

0 commit comments

Comments
 (0)