From aacd1a3a0b67c9db868efa828b522454901dc418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Dupr=C3=A9?= Date: Thu, 8 Feb 2024 14:13:53 +0100 Subject: [PATCH] Fix style issues and update CI to use onnxruntime==1.17.0 (#1067) * Fix style issues and update CI to use onnxruntime==1.17.0 Signed-off-by: Xavier Dupre * fix 3.12 Signed-off-by: Xavier Dupre --------- Signed-off-by: Xavier Dupre --- .azure-pipelines/linux-conda-CI.yml | 18 +++++++++-- .azure-pipelines/win32-conda-CI.yml | 19 ++++++++--- docs/tutorial/plot_jfunction_transformer.py | 1 + docs/tutorial/plot_transformer_discrepancy.py | 1 + skl2onnx/algebra/onnx_operator.py | 8 +++-- skl2onnx/helpers/investigate.py | 6 ++-- skl2onnx/sklapi/cast_regressor.py | 1 - skl2onnx/sklapi/cast_transformer.py | 1 - skl2onnx/sklapi/replace_transformer.py | 1 - skl2onnx/sklapi/sklearn_text.py | 1 + skl2onnx/sklapi/woe_transformer.py | 1 - skl2onnx/sklapi/woe_transformer_onnx.py | 32 ++++++++++++------- tests/test_sklearn_classifiers_extreme.py | 8 +++-- 13 files changed, 66 insertions(+), 32 deletions(-) diff --git a/.azure-pipelines/linux-conda-CI.yml b/.azure-pipelines/linux-conda-CI.yml index e461c4be1..734c18d41 100644 --- a/.azure-pipelines/linux-conda-CI.yml +++ b/.azure-pipelines/linux-conda-CI.yml @@ -14,6 +14,20 @@ jobs: strategy: matrix: + Py311-Onnx150-Rt170-Skl140: + do.bench: '0' + python.version: '3.11' # onnxruntime-extensions needs to be update to switch to 3.12 + numpy.version: '>=1.21.1' + scipy.version: '>=1.7.0' + onnx.version: 'onnx==1.15.0' # -i https://test.pypi.org/simple/ onnx==1.15.0rc2' + onnx.target_opset: '' + onnxrt.version: 'onnxruntime==1.17.0' + sklearn.version: '>=1.4.0' + pandas.version: '' + lgbm.version: '' + onnxcc.version: '>=1.8.1' + run.example: '1' + Py311-Onnx150-Rt163-Skl140: do.bench: '0' python.version: '3.11' @@ -22,11 +36,11 @@ jobs: onnx.version: 'onnx==1.15.0' # -i https://test.pypi.org/simple/ onnx==1.15.0rc2' onnx.target_opset: '' onnxrt.version: 'onnxruntime==1.16.3' - sklearn.version: '>=1.4.0' + sklearn.version: '==1.4.0' pandas.version: '' lgbm.version: '' onnxcc.version: '>=1.8.1' - run.example: '1' + run.example: '0' Py311-Onnx150-Rt161-Skl132: do.bench: '0' diff --git a/.azure-pipelines/win32-conda-CI.yml b/.azure-pipelines/win32-conda-CI.yml index 16ffae3dc..32b3d705d 100644 --- a/.azure-pipelines/win32-conda-CI.yml +++ b/.azure-pipelines/win32-conda-CI.yml @@ -13,7 +13,16 @@ jobs: vmImage: 'windows-latest' strategy: matrix: - Py310-Onnx150-Rt163-Skl140: + Py311-Onnx150-Rt170-Skl140: + python.version: '3.11' # onnxruntime-extensions needs to be update to switch to 3.12 + onnx.version: 'onnx==1.15.0' # '-i https://test.pypi.org/simple/ onnx==1.15.0rc2' + onnx.target_opset: '' + numpy.version: 'numpy>=1.22.3' + scipy.version: 'scipy' + onnxrt.version: 'onnxruntime==1.17.0' + onnxcc.version: 'onnxconverter-common>=1.8.1' + sklearn.version: '>=1.4.0' + Py311-Onnx150-Rt163-Skl140: python.version: '3.11' onnx.version: 'onnx==1.15.0' # '-i https://test.pypi.org/simple/ onnx==1.15.0rc2' onnx.target_opset: '' @@ -21,8 +30,8 @@ jobs: scipy.version: 'scipy' onnxrt.version: 'onnxruntime==1.16.3' onnxcc.version: 'onnxconverter-common>=1.8.1' - sklearn.version: '>=1.4.0' - Py310-Onnx150-Rt163-Skl131: + sklearn.version: '==1.4.0' + Py311-Onnx150-Rt163-Skl131: python.version: '3.11' onnx.version: 'onnx==1.15.0' onnx.target_opset: '' @@ -31,7 +40,7 @@ jobs: onnxrt.version: 'onnxruntime==1.16.1' onnxcc.version: 'onnxconverter-common>=1.8.1' sklearn.version: '==1.3.1' - Py310-Onnx141-Rt160-Skl131: + Py311-Onnx141-Rt160-Skl131: python.version: '3.11' onnx.version: 'onnx==1.14.1' onnx.target_opset: '' @@ -40,7 +49,7 @@ jobs: onnxrt.version: 'onnxruntime==1.16.0' onnxcc.version: 'onnxconverter-common>=1.8.1' sklearn.version: '>=1.3.1' - Py310-Onnx140-Rt151-Skl130: + Py311-Onnx140-Rt151-Skl130: python.version: '3.11' onnx.version: 'onnx==1.14.0' onnx.target_opset: '' diff --git a/docs/tutorial/plot_jfunction_transformer.py b/docs/tutorial/plot_jfunction_transformer.py index 6e9162f37..0fadb6bda 100644 --- a/docs/tutorial/plot_jfunction_transformer.py +++ b/docs/tutorial/plot_jfunction_transformer.py @@ -13,6 +13,7 @@ A very simple pipeline and the first attempt to convert it into ONNX. """ + import numpy as np from numpy.testing import assert_allclose from onnx.version_converter import convert_version diff --git a/docs/tutorial/plot_transformer_discrepancy.py b/docs/tutorial/plot_transformer_discrepancy.py index 11098f5f5..2335de8c7 100644 --- a/docs/tutorial/plot_transformer_discrepancy.py +++ b/docs/tutorial/plot_transformer_discrepancy.py @@ -19,6 +19,7 @@ All imports. It also registered onnx converters for :epkg:`xgboost` and :epkg:`lightgbm`. """ + import pprint import numpy from sklearn.pipeline import Pipeline diff --git a/skl2onnx/algebra/onnx_operator.py b/skl2onnx/algebra/onnx_operator.py index 2dca4485c..e9bf0542d 100644 --- a/skl2onnx/algebra/onnx_operator.py +++ b/skl2onnx/algebra/onnx_operator.py @@ -586,9 +586,11 @@ def __str__(self): return "{}({} in) -> {}".format( self.__class__.__name__, len(self.inputs) if self.inputs is not None else 0, - [str(o) for o in self.output_names] - if self.output_names is not None - else "?", + ( + [str(o) for o in self.output_names] + if self.output_names is not None + else "?" + ), ) def set_onnx_name_prefix(self, onnx_prefix_name): diff --git a/skl2onnx/helpers/investigate.py b/skl2onnx/helpers/investigate.py index c3ecbe4db..d7aaa6063 100644 --- a/skl2onnx/helpers/investigate.py +++ b/skl2onnx/helpers/investigate.py @@ -107,9 +107,9 @@ def __init__(self, model): model.decision_function ): # noqa model._debug_decision_function = model.decision_function # noqa - self.methods[ - "decision_function" - ] = lambda model, X: model._debug_decision_function(X) + self.methods["decision_function"] = ( + lambda model, X: model._debug_decision_function(X) + ) def __repr__(self): """ diff --git a/skl2onnx/sklapi/cast_regressor.py b/skl2onnx/sklapi/cast_regressor.py index 37e83da41..9e7274f65 100644 --- a/skl2onnx/sklapi/cast_regressor.py +++ b/skl2onnx/sklapi/cast_regressor.py @@ -12,7 +12,6 @@ def _deprecate_positional_args(x): class CastRegressor(RegressorMixin, BaseEstimator): # noqa - """ Cast predictions into a specific types. This should be used to minimize the conversion diff --git a/skl2onnx/sklapi/cast_transformer.py b/skl2onnx/sklapi/cast_transformer.py index 703b8b5c0..8416366b9 100644 --- a/skl2onnx/sklapi/cast_transformer.py +++ b/skl2onnx/sklapi/cast_transformer.py @@ -12,7 +12,6 @@ def _deprecate_positional_args(x): class CastTransformer(TransformerMixin, BaseEstimator): - """ Cast features into a specific types. This should be used to minimize the conversion diff --git a/skl2onnx/sklapi/replace_transformer.py b/skl2onnx/sklapi/replace_transformer.py index 46083455a..bc084d83e 100644 --- a/skl2onnx/sklapi/replace_transformer.py +++ b/skl2onnx/sklapi/replace_transformer.py @@ -12,7 +12,6 @@ def _deprecate_positional_args(x): class ReplaceTransformer(TransformerMixin, BaseEstimator): - """ Replaces a value by another one. It can be used to replace 0 by nan. diff --git a/skl2onnx/sklapi/sklearn_text.py b/skl2onnx/sklapi/sklearn_text.py index 43b474b05..6f81caae0 100644 --- a/skl2onnx/sklapi/sklearn_text.py +++ b/skl2onnx/sklapi/sklearn_text.py @@ -2,6 +2,7 @@ @file @brief Overloads :epkg:`TfidfVectorizer` and :epkg:`CountVectorizer`. """ + from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer try: diff --git a/skl2onnx/sklapi/woe_transformer.py b/skl2onnx/sklapi/woe_transformer.py index 46ade73ef..9e045becf 100644 --- a/skl2onnx/sklapi/woe_transformer.py +++ b/skl2onnx/sklapi/woe_transformer.py @@ -12,7 +12,6 @@ def _deprecate_positional_args(x): class WOETransformer(TransformerMixin, BaseEstimator): - """ This transformer cannot be trained. It takes a list of intervals, one list per columns, and returns for every feature the list diff --git a/skl2onnx/sklapi/woe_transformer_onnx.py b/skl2onnx/sklapi/woe_transformer_onnx.py index 8b550c8f1..18c966318 100644 --- a/skl2onnx/sklapi/woe_transformer_onnx.py +++ b/skl2onnx/sklapi/woe_transformer_onnx.py @@ -101,9 +101,11 @@ def __str__(self): "Node(%s, is_left=%r, is_leaf=%r, feature=%r, " "threshold=%r, value=%r, index=%r)%s" % ( - self.parent - if isinstance(self.parent, int) - else "id%r" % id(self.parent), + ( + self.parent + if isinstance(self.parent, int) + else "id%r" % id(self.parent) + ), self.is_left, self.is_leaf, self.feature, @@ -115,15 +117,21 @@ def __str__(self): self.onnx_mode, self.onnx_threshold, self.onnx_value, - " -- %r" % self.intervals_ - if hasattr(self, "intervals_") - else "", - " LL %r" % self.intervals_left_ - if hasattr(self, "intervals_left_") - else "", - " RR %r" % self.intervals_right_ - if hasattr(self, "intervals_right_") - else "", + ( + " -- %r" % self.intervals_ + if hasattr(self, "intervals_") + else "" + ), + ( + " LL %r" % self.intervals_left_ + if hasattr(self, "intervals_left_") + else "" + ), + ( + " RR %r" % self.intervals_right_ + if hasattr(self, "intervals_right_") + else "" + ), ), ) ) diff --git a/tests/test_sklearn_classifiers_extreme.py b/tests/test_sklearn_classifiers_extreme.py index d26ca31a5..d8d0725d7 100644 --- a/tests/test_sklearn_classifiers_extreme.py +++ b/tests/test_sklearn_classifiers_extreme.py @@ -25,9 +25,11 @@ def test_one_training_class(self): onx = to_onnx(cl, x, target_opset=TARGET_OPSET, options={"zipmap": False}) for cls in [ - (lambda onx: ReferenceEvaluator(onx, verbose=0)) - if ReferenceEvaluator is not None - else None, + ( + (lambda onx: ReferenceEvaluator(onx, verbose=0)) + if ReferenceEvaluator is not None + else None + ), lambda onx: InferenceSession( onx.SerializeToString(), providers=["CPUExecutionProvider"] ),