Skip to content

Commit 8f3a070

Browse files
authored
Merge branch 'add_min_max_prophet' into add_report_title
2 parents 32e748e + 92e22f8 commit 8f3a070

File tree

17 files changed

+410
-201
lines changed

17 files changed

+410
-201
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: 2 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
@@ -265,7 +265,7 @@ def find_output_dirname(output_dir: OutputDirectory):
265265
while os.path.exists(unique_output_dir):
266266
unique_output_dir = f"{output_dir}_{counter}"
267267
counter += 1
268-
logger.warn(
268+
logger.warning(
269269
f"Since the output directory was not specified, the output will be saved to {unique_output_dir} directory."
270270
)
271271
return unique_output_dir

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ def _train_model(self, i, s_id, df, model_kwargs):
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+
logger.warning(f"Encountered Error: {e}. Skipping.")
141+
logger.warning(traceback.format_exc())
142142

143143
def _build_model(self) -> pd.DataFrame:
144144
full_data_dict = self.datasets.get_data_by_series()
@@ -166,7 +166,7 @@ def _generate_report(self):
166166
sec5_text = rc.Heading("ARIMA Model Parameters", level=2)
167167
blocks = [
168168
rc.Html(
169-
m['model'].summary().as_html(),
169+
m["model"].summary().as_html(),
170170
label=s_id if self.target_cat_col else None,
171171
)
172172
for i, (s_id, m) in enumerate(self.models.items())
@@ -201,11 +201,15 @@ def _generate_report(self):
201201
self.formatted_local_explanation = aggregate_local_explanations
202202

203203
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,
204+
self.formatted_global_explanation = (
205+
self.formatted_global_explanation.rename(
206+
{"Series 1": self.original_target_column},
207+
axis=1,
208+
)
209+
)
210+
self.formatted_local_explanation.drop(
211+
"Series", axis=1, inplace=True
207212
)
208-
self.formatted_local_explanation.drop("Series", axis=1, inplace=True)
209213

210214
# Create a markdown section for the global explainability
211215
global_explanation_section = rc.Block(
@@ -235,7 +239,7 @@ def _generate_report(self):
235239
local_explanation_section,
236240
]
237241
except Exception as e:
238-
logger.warn(f"Failed to generate Explanations with error: {e}.")
242+
logger.warning(f"Failed to generate Explanations with error: {e}.")
239243
logger.debug(f"Full Traceback: {traceback.format_exc()}")
240244

241245
model_description = rc.Text(

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ def _build_model(self) -> pd.DataFrame:
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+
logger.warning(f"Encountered Error: {e}. Skipping.")
193+
logger.warning(traceback.format_exc())
194194

195195
logger.debug("===========Forecast Generated===========")
196196

@@ -257,7 +257,9 @@ def _generate_report(self):
257257
)
258258

259259
self.formatted_global_explanation.rename(
260-
columns={self.spec.datetime_column.name: ForecastOutputColumns.DATE},
260+
columns={
261+
self.spec.datetime_column.name: ForecastOutputColumns.DATE
262+
},
261263
inplace=True,
262264
)
263265

@@ -312,7 +314,7 @@ def _generate_report(self):
312314
local_explanation_section,
313315
]
314316
except Exception as e:
315-
logger.warn(f"Failed to generate Explanations with error: {e}.")
317+
logger.warning(f"Failed to generate Explanations with error: {e}.")
316318
logger.debug(f"Full Traceback: {traceback.format_exc()}")
317319

318320
model_description = rc.Text(
@@ -478,7 +480,9 @@ def explain_model(self):
478480
except Exception as e:
479481
if s_id in self.errors_dict:
480482
self.errors_dict[s_id]["explainer_error"] = str(e)
481-
self.errors_dict[s_id]["explainer_error_trace"] = traceback.format_exc()
483+
self.errors_dict[s_id]["explainer_error_trace"] = (
484+
traceback.format_exc()
485+
)
482486
else:
483487
self.errors_dict[s_id] = {
484488
"model_name": self.spec.model,

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(

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def generate_report(self):
143143
inplace=True,
144144
)
145145
except Exception:
146-
logger.warn("Unable to generate Test Metrics.")
146+
logger.warning("Unable to generate Test Metrics.")
147147
logger.debug(f"Full Traceback: {traceback.format_exc()}")
148148
report_sections = []
149149

@@ -366,7 +366,7 @@ def _test_evaluate_metrics(self, elapsed_time=0):
366366
-self.spec.horizon :
367367
]
368368
except KeyError as ke:
369-
logger.warn(
369+
logger.warning(
370370
f"Error Generating Metrics: Unable to find {s_id} in the test data. Error: {ke.args}"
371371
)
372372
y_pred = self.forecast_output.get_forecast(s_id)["forecast_value"].values[
@@ -542,7 +542,7 @@ def _save_report(
542542
)
543543
results.set_metrics(metrics_df_formatted)
544544
else:
545-
logger.warn(
545+
logger.warning(
546546
f"Attempted to generate the {self.spec.metrics_filename} file with the training metrics, however the training metrics could not be properly generated."
547547
)
548548

@@ -564,7 +564,7 @@ def _save_report(
564564
)
565565
results.set_test_metrics(test_metrics_df_formatted)
566566
else:
567-
logger.warn(
567+
logger.warning(
568568
f"Attempted to generate the {self.spec.test_metrics_filename} file with the test metrics, however the test metrics could not be properly generated."
569569
)
570570
# explanations csv reports
@@ -583,7 +583,7 @@ def _save_report(
583583
)
584584
results.set_global_explanations(self.formatted_global_explanation)
585585
else:
586-
logger.warn(
586+
logger.warning(
587587
f"Attempted to generate global explanations for the {self.spec.global_explanation_filename} file, but an issue occured in formatting the explanations."
588588
)
589589

@@ -600,11 +600,11 @@ def _save_report(
600600
)
601601
results.set_local_explanations(self.formatted_local_explanation)
602602
else:
603-
logger.warn(
603+
logger.warning(
604604
f"Attempted to generate local explanations for the {self.spec.local_explanation_filename} file, but an issue occured in formatting the explanations."
605605
)
606606
except AttributeError as e:
607-
logger.warn(
607+
logger.warning(
608608
"Unable to generate explanations for this model type or for this dataset."
609609
)
610610
logger.debug(f"Got error: {e.args}")
@@ -772,7 +772,7 @@ def explain_model(self):
772772
local_ex_time = local_ex_time + time.time() - exp_end_time
773773

774774
if not len(kernel_explnr_vals):
775-
logger.warn(
775+
logger.warning(
776776
"No explanations generated. Ensure that additional data has been provided."
777777
)
778778
else:
@@ -783,7 +783,7 @@ def explain_model(self):
783783
)
784784
)
785785
else:
786-
logger.warn(
786+
logger.warning(
787787
f"Skipping explanations for {s_id}, as forecast was not generated."
788788
)
789789

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@
2323

2424

2525
class HistoricalData(AbstractData):
26-
def __init__(self, spec, historical_data = None):
26+
def __init__(self, spec, historical_data=None):
2727
super().__init__(spec=spec, name="historical_data", data=historical_data)
2828

2929
def _ingest_data(self, spec):
3030
try:
3131
self.freq = get_frequency_of_datetime(self.data.index.get_level_values(0))
3232
except TypeError as e:
33-
logger.warn(
33+
logger.warning(
3434
f"Error determining frequency: {e.args}. Setting Frequency to None"
3535
)
3636
logger.debug(f"Full traceback: {e}")
@@ -106,7 +106,7 @@ def _ingest_data(self, spec):
106106
_spec = spec
107107
self.additional_regressors = list(self.data.columns)
108108
if not self.additional_regressors:
109-
logger.warn(
109+
logger.warning(
110110
f"No additional variables found in the additional_data. Only columns found: {self.data.columns}. Skipping for now."
111111
)
112112
# Check that datetime column matches historical datetime column
@@ -121,7 +121,13 @@ def __init__(self, spec, test_data):
121121

122122

123123
class ForecastDatasets:
124-
def __init__(self, config: ForecastOperatorConfig, historical_data=None, additional_data=None, test_data=None):
124+
def __init__(
125+
self,
126+
config: ForecastOperatorConfig,
127+
historical_data=None,
128+
additional_data=None,
129+
test_data=None,
130+
):
125131
"""Instantiates the DataIO instance.
126132
127133
Properties
@@ -136,7 +142,9 @@ def __init__(self, config: ForecastOperatorConfig, historical_data=None, additio
136142
self._target_col = config.spec.target_column
137143
if historical_data is not None:
138144
self.historical_data = HistoricalData(config.spec, historical_data)
139-
self.additional_data = AdditionalData(config.spec, self.historical_data, additional_data)
145+
self.additional_data = AdditionalData(
146+
config.spec, self.historical_data, additional_data
147+
)
140148
else:
141149
self._load_data(config.spec)
142150
self.test_data = TestData(config.spec, test_data)
@@ -147,7 +155,7 @@ def _load_data(self, spec):
147155
self.additional_data = AdditionalData(spec, self.historical_data)
148156

149157
if spec.generate_explanations and spec.additional_data is None:
150-
logger.warn(
158+
logger.warning(
151159
"Unable to generate explanations as there is no additional data passed in. Either set generate_explanations to False, or pass in additional data."
152160
)
153161
spec.generate_explanations = False

0 commit comments

Comments
 (0)