Coverage for mlprodict/onnxrt/ops_cpu/op_flatten.py: 100%

15 statements  

« prev     ^ index     » next       coverage.py v7.1.0, created at 2023-02-04 02:28 +0100

1# -*- encoding: utf-8 -*- 

2# pylint: disable=E0203,E1101,C0111 

3""" 

4@file 

5@brief Runtime operator. 

6""" 

7import numpy 

8from ._op import OpRunUnary 

9 

10 

11class Flatten(OpRunUnary): 

12 

13 atts = {'axis': 1} 

14 

15 def __init__(self, onnx_node, desc=None, **options): 

16 OpRunUnary.__init__(self, onnx_node, desc=desc, 

17 expected_attributes=Flatten.atts, 

18 **options) 

19 

20 def _run(self, x, attributes=None, verbose=0, fLOG=None): # pylint: disable=W0221 

21 i = self.axis 

22 shape = x.shape 

23 new_shape = ((1, -1) if i == 0 else 

24 (numpy.prod(shape[:i]).astype(int), -1)) 

25 return (x.reshape(new_shape), ) 

26 

27 def to_python(self, inputs): 

28 lines = ['new_shape = ((1, -1) if axis == 0 else', 

29 f' (numpy.prod({inputs[0]}.shape[:axis]).astype(int), -1))', 

30 f'return {inputs[0]}.reshape(new_shape)'] 

31 return 'import numpy', '\n'.join(lines)