-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__init__.py
More file actions
116 lines (93 loc) · 2.85 KB
/
Copy path__init__.py
File metadata and controls
116 lines (93 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from typing import Dict, Optional
from onnx import ModelProto
from .model import OnnxGraph, ProtoType
from .translate import Translater
from .var import Var, Vars
from .inner_emitter import InnerEmitter
def start(
opset: Optional[int] = None,
opsets: Optional[Dict[str, int]] = None,
) -> OnnxGraph:
"""
Starts an onnx model.
:param opset: main opset version
:param opsets: others opsets as a dictionary
:return: an instance of :class:`onnx_array_api.light_api.OnnxGraph`
A very simple model:
.. runpython::
:showcode:
from onnx_array_api.light_api import start
onx = start().vin("X").Neg().rename("Y").vout().to_onnx()
print(onx)
Another with operator Add:
.. runpython::
:showcode:
from onnx_array_api.light_api import start
onx = (
start()
.vin("X")
.vin("Y")
.bring("X", "Y")
.Add()
.rename("Z")
.vout()
.to_onnx()
)
print(onx)
"""
return OnnxGraph(opset=opset, opsets=opsets)
def g() -> OnnxGraph:
"""
Starts a subgraph.
:return: an instance of :class:`onnx_array_api.light_api.OnnxGraph`
"""
return OnnxGraph(proto_type=ProtoType.GRAPH)
def translate(proto: ModelProto, single_line: bool = False, api: str = "light") -> str:
"""
Translates an ONNX proto into a code using :ref:`l-light-api`
to describe the ONNX graph.
:param proto: model to translate
:param single_line: as a single line or not
:param api: API to export into,
default is `"light"` and this is handle by class
:class:`onnx_array_api.light_api.emitter.Emitter`,
another value is `"onnx"` which is the inner API implemented
in onnx package.
:return: code
.. runpython::
:showcode:
from onnx_array_api.light_api import start, translate
onx = (
start()
.vin("X")
.reshape((-1, 1))
.Transpose(perm=[1, 0])
.rename("Y")
.vout()
.to_onnx()
)
code = translate(onx)
print(code)
The inner API from onnx packahe is also available.
.. runpython::
:showcode:
from onnx_array_api.light_api import start, translate
onx = (
start()
.vin("X")
.reshape((-1, 1))
.Transpose(perm=[1, 0])
.rename("Y")
.vout()
.to_onnx()
)
code = translate(onx, api="onnx")
print(code)
"""
if api == "light":
tr = Translater(proto)
return tr.export(single_line=single_line, as_str=True)
if api == "onnx":
tr = Translater(proto, emitter=InnerEmitter())
return tr.export(as_str=True)
raise ValueError(f"Unexpected value {api!r} for api.")