# Copyright (c) ONNX Project Contributors # # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations import numpy as np import onnx from onnx.backend.test.case.base import Base from onnx.backend.test.case.node import expect class StringNormalizer(Base): @staticmethod def export_nostopwords_nochangecase() -> None: input = np.array(["monday", "tuesday"]).astype(object) output = input # No stopwords. This is a NOOP node = onnx.helper.make_node( "StringNormalizer", inputs=["x"], outputs=["y"], is_case_sensitive=1, ) expect( node, inputs=[input], outputs=[output], name="test_strnormalizer_nostopwords_nochangecase", ) @staticmethod def export_monday_casesensintive_nochangecase() -> None: input = np.array(["monday", "tuesday", "wednesday", "thursday"]).astype(object) output = np.array(["tuesday", "wednesday", "thursday"]).astype(object) stopwords = ["monday"] node = onnx.helper.make_node( "StringNormalizer", inputs=["x"], outputs=["y"], is_case_sensitive=1, stopwords=stopwords, ) expect( node, inputs=[input], outputs=[output], name="test_strnormalizer_export_monday_casesensintive_nochangecase", ) @staticmethod def export_monday_casesensintive_lower() -> None: input = np.array(["monday", "tuesday", "wednesday", "thursday"]).astype(object) output = np.array(["tuesday", "wednesday", "thursday"]).astype(object) stopwords = ["monday"] node = onnx.helper.make_node( "StringNormalizer", inputs=["x"], outputs=["y"], case_change_action="LOWER", is_case_sensitive=1, stopwords=stopwords, ) expect( node, inputs=[input], outputs=[output], name="test_strnormalizer_export_monday_casesensintive_lower", ) @staticmethod def export_monday_casesensintive_upper() -> None: input = np.array(["monday", "tuesday", "wednesday", "thursday"]).astype(object) output = np.array(["TUESDAY", "WEDNESDAY", "THURSDAY"]).astype(object) stopwords = ["monday"] node = onnx.helper.make_node( "StringNormalizer", inputs=["x"], outputs=["y"], case_change_action="UPPER", is_case_sensitive=1, stopwords=stopwords, ) expect( node, inputs=[input], outputs=[output], name="test_strnormalizer_export_monday_casesensintive_upper", ) @staticmethod def export_monday_empty_output() -> None: input = np.array(["monday", "monday"]).astype(object) output = np.array([""]).astype(object) stopwords = ["monday"] node = onnx.helper.make_node( "StringNormalizer", inputs=["x"], outputs=["y"], case_change_action="UPPER", is_case_sensitive=1, stopwords=stopwords, ) expect( node, inputs=[input], outputs=[output], name="test_strnormalizer_export_monday_empty_output", ) @staticmethod def export_monday_insensintive_upper_twodim() -> None: input = ( np.array( ["Monday", "tuesday", "wednesday", "Monday", "tuesday", "wednesday"] ) .astype(object) .reshape([1, 6]) ) # It does upper case cecedille, accented E # and german umlaut but fails # with german eszett output = ( np.array(["TUESDAY", "WEDNESDAY", "TUESDAY", "WEDNESDAY"]) .astype(object) .reshape([1, 4]) ) stopwords = ["monday"] node = onnx.helper.make_node( "StringNormalizer", inputs=["x"], outputs=["y"], case_change_action="UPPER", stopwords=stopwords, ) expect( node, inputs=[input], outputs=[output], name="test_strnormalizer_export_monday_insensintive_upper_twodim", )