# 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 Flatten(Base): @staticmethod def export() -> None: shape = (2, 3, 4, 5) a = np.random.random_sample(shape).astype(np.float32) for i in range(len(shape)): node = onnx.helper.make_node( "Flatten", inputs=["a"], outputs=["b"], axis=i, ) new_shape = (1, -1) if i == 0 else (np.prod(shape[0:i]).astype(int), -1) b = np.reshape(a, new_shape) expect(node, inputs=[a], outputs=[b], name="test_flatten_axis" + str(i)) @staticmethod def export_flatten_with_default_axis() -> None: node = onnx.helper.make_node( "Flatten", inputs=["a"], outputs=["b"], # Default value for axis: axis=1 ) shape = (5, 4, 3, 2) a = np.random.random_sample(shape).astype(np.float32) new_shape = (5, 24) b = np.reshape(a, new_shape) expect(node, inputs=[a], outputs=[b], name="test_flatten_default_axis") @staticmethod def export_flatten_negative_axis() -> None: shape = (2, 3, 4, 5) a = np.random.random_sample(shape).astype(np.float32) for i in range(-len(shape), 0): node = onnx.helper.make_node( "Flatten", inputs=["a"], outputs=["b"], axis=i, ) new_shape = (np.prod(shape[0:i]).astype(int), -1) b = np.reshape(a, new_shape) expect( node, inputs=[a], outputs=[b], name="test_flatten_negative_axis" + str(abs(i)), )