From 723965c572d0062934537355cc4d7ff4c2189b02 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Tue, 23 Apr 2019 18:44:33 +0800 Subject: [PATCH 001/117] WIP --- utensor_cgen/frontend/tflite.py | 113 +++++++++++++ .../frontend/tflite_flatbuffer/AbsOptions.py | 22 +++ .../ActivationFunctionType.py | 12 ++ .../frontend/tflite_flatbuffer/AddNOptions.py | 22 +++ .../frontend/tflite_flatbuffer/AddOptions.py | 30 ++++ .../tflite_flatbuffer/ArgMaxOptions.py | 30 ++++ .../tflite_flatbuffer/ArgMinOptions.py | 30 ++++ .../BatchToSpaceNDOptions.py | 22 +++ .../BidirectionalSequenceLSTMOptions.py | 62 +++++++ .../BidirectionalSequenceRNNOptions.py | 46 ++++++ .../frontend/tflite_flatbuffer/Buffer.py | 46 ++++++ .../tflite_flatbuffer/BuiltinOperator.py | 121 ++++++++++++++ .../tflite_flatbuffer/BuiltinOptions.py | 97 +++++++++++ .../frontend/tflite_flatbuffer/CallOptions.py | 30 ++++ .../frontend/tflite_flatbuffer/CastOptions.py | 38 +++++ .../tflite_flatbuffer/CombinerType.py | 9 ++ .../ConcatEmbeddingsOptions.py | 78 +++++++++ .../tflite_flatbuffer/ConcatenationOptions.py | 38 +++++ .../tflite_flatbuffer/Conv2DOptions.py | 70 ++++++++ .../frontend/tflite_flatbuffer/CosOptions.py | 22 +++ .../tflite_flatbuffer/CustomOptionsFormat.py | 7 + .../tflite_flatbuffer/CustomQuantization.py | 46 ++++++ .../DepthwiseConv2DOptions.py | 78 +++++++++ .../tflite_flatbuffer/DequantizeOptions.py | 22 +++ .../frontend/tflite_flatbuffer/DivOptions.py | 30 ++++ .../EmbeddingLookupSparseOptions.py | 30 ++++ .../tflite_flatbuffer/EqualOptions.py | 22 +++ .../frontend/tflite_flatbuffer/ExpOptions.py | 22 +++ .../tflite_flatbuffer/ExpandDimsOptions.py | 22 +++ .../tflite_flatbuffer/FakeQuantOptions.py | 54 +++++++ .../frontend/tflite_flatbuffer/FillOptions.py | 22 +++ .../tflite_flatbuffer/FloorDivOptions.py | 22 +++ .../tflite_flatbuffer/FloorModOptions.py | 22 +++ .../FullyConnectedOptions.py | 38 +++++ .../FullyConnectedOptionsWeightsFormat.py | 8 + .../tflite_flatbuffer/GatherNdOptions.py | 22 +++ .../tflite_flatbuffer/GatherOptions.py | 30 ++++ .../tflite_flatbuffer/GreaterEqualOptions.py | 22 +++ .../tflite_flatbuffer/GreaterOptions.py | 22 +++ .../tflite_flatbuffer/L2NormOptions.py | 30 ++++ .../tflite_flatbuffer/LSHProjectionOptions.py | 30 ++++ .../tflite_flatbuffer/LSHProjectionType.py | 9 ++ .../tflite_flatbuffer/LSTMKernelType.py | 8 + .../frontend/tflite_flatbuffer/LSTMOptions.py | 54 +++++++ .../tflite_flatbuffer/LeakyReluOptions.py | 30 ++++ .../tflite_flatbuffer/LessEqualOptions.py | 22 +++ .../frontend/tflite_flatbuffer/LessOptions.py | 22 +++ .../LocalResponseNormalizationOptions.py | 54 +++++++ .../tflite_flatbuffer/LogSoftmaxOptions.py | 22 +++ .../tflite_flatbuffer/LogicalAndOptions.py | 22 +++ .../tflite_flatbuffer/LogicalNotOptions.py | 22 +++ .../tflite_flatbuffer/LogicalOrOptions.py | 22 +++ .../tflite_flatbuffer/MatrixDiagOptions.py | 22 +++ .../tflite_flatbuffer/MatrixSetDiagOptions.py | 22 +++ .../MaximumMinimumOptions.py | 22 +++ .../tflite_flatbuffer/MirrorPadMode.py | 8 + .../tflite_flatbuffer/MirrorPadOptions.py | 30 ++++ .../frontend/tflite_flatbuffer/Model.py | 128 +++++++++++++++ .../frontend/tflite_flatbuffer/MulOptions.py | 30 ++++ .../frontend/tflite_flatbuffer/NegOptions.py | 22 +++ .../tflite_flatbuffer/NotEqualOptions.py | 22 +++ .../tflite_flatbuffer/OneHotOptions.py | 30 ++++ .../frontend/tflite_flatbuffer/Operator.py | 153 ++++++++++++++++++ .../tflite_flatbuffer/OperatorCode.py | 46 ++++++ .../frontend/tflite_flatbuffer/PackOptions.py | 38 +++++ .../frontend/tflite_flatbuffer/PadOptions.py | 22 +++ .../tflite_flatbuffer/PadV2Options.py | 22 +++ .../frontend/tflite_flatbuffer/Padding.py | 8 + .../tflite_flatbuffer/Pool2DOptions.py | 70 ++++++++ .../frontend/tflite_flatbuffer/PowOptions.py | 22 +++ .../tflite_flatbuffer/QuantizationDetails.py | 8 + .../QuantizationParameters.py | 145 +++++++++++++++++ .../tflite_flatbuffer/QuantizeOptions.py | 22 +++ .../frontend/tflite_flatbuffer/RNNOptions.py | 30 ++++ .../tflite_flatbuffer/RangeOptions.py | 22 +++ .../frontend/tflite_flatbuffer/RankOptions.py | 22 +++ .../tflite_flatbuffer/ReducerOptions.py | 30 ++++ .../tflite_flatbuffer/ReshapeOptions.py | 46 ++++++ .../ResizeBilinearOptions.py | 30 ++++ .../ResizeNearestNeighborOptions.py | 30 ++++ .../ReverseSequenceOptions.py | 38 +++++ .../tflite_flatbuffer/ReverseV2Options.py | 22 +++ .../frontend/tflite_flatbuffer/SVDFOptions.py | 38 +++++ .../tflite_flatbuffer/SelectOptions.py | 22 +++ .../tflite_flatbuffer/SequenceRNNOptions.py | 38 +++++ .../tflite_flatbuffer/ShapeOptions.py | 30 ++++ .../tflite_flatbuffer/SkipGramOptions.py | 46 ++++++ .../tflite_flatbuffer/SliceOptions.py | 22 +++ .../tflite_flatbuffer/SoftmaxOptions.py | 30 ++++ .../SpaceToBatchNDOptions.py | 22 +++ .../tflite_flatbuffer/SpaceToDepthOptions.py | 30 ++++ .../tflite_flatbuffer/SparseToDenseOptions.py | 30 ++++ .../tflite_flatbuffer/SplitOptions.py | 30 ++++ .../tflite_flatbuffer/SplitVOptions.py | 30 ++++ .../tflite_flatbuffer/SquareOptions.py | 22 +++ .../SquaredDifferenceOptions.py | 22 +++ .../tflite_flatbuffer/SqueezeOptions.py | 46 ++++++ .../tflite_flatbuffer/StridedSliceOptions.py | 62 +++++++ .../frontend/tflite_flatbuffer/SubGraph.py | 122 ++++++++++++++ .../frontend/tflite_flatbuffer/SubOptions.py | 30 ++++ .../frontend/tflite_flatbuffer/Tensor.py | 90 +++++++++++ .../frontend/tflite_flatbuffer/TensorType.py | 16 ++ .../frontend/tflite_flatbuffer/TileOptions.py | 22 +++ .../tflite_flatbuffer/TopKV2Options.py | 22 +++ .../tflite_flatbuffer/TransposeConvOptions.py | 46 ++++++ .../tflite_flatbuffer/TransposeOptions.py | 22 +++ .../UnidirectionalSequenceLSTMOptions.py | 54 +++++++ .../tflite_flatbuffer/UniqueOptions.py | 30 ++++ .../tflite_flatbuffer/UnpackOptions.py | 38 +++++ .../tflite_flatbuffer/WhereOptions.py | 22 +++ .../tflite_flatbuffer/ZerosLikeOptions.py | 22 +++ .../frontend/tflite_flatbuffer/__init__.py | 0 112 files changed, 4044 insertions(+) create mode 100644 utensor_cgen/frontend/tflite.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/AbsOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ActivationFunctionType.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/AddNOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/AddOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ArgMaxOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ArgMinOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BatchToSpaceNDOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceLSTMOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceRNNOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Buffer.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BuiltinOperator.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BuiltinOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CallOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CastOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CombinerType.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ConcatEmbeddingsOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ConcatenationOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Conv2DOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CosOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CustomOptionsFormat.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CustomQuantization.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/DepthwiseConv2DOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/DequantizeOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/DivOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/EmbeddingLookupSparseOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/EqualOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ExpOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ExpandDimsOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FakeQuantOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FillOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FloorDivOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FloorModOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptionsWeightsFormat.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/GatherNdOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/GatherOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/GreaterEqualOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/GreaterOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/L2NormOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionType.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LSTMKernelType.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LSTMOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LeakyReluOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LessEqualOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LessOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LocalResponseNormalizationOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LogSoftmaxOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LogicalAndOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LogicalNotOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LogicalOrOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MatrixDiagOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MatrixSetDiagOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MaximumMinimumOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MirrorPadMode.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MirrorPadOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Model.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MulOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/NegOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/NotEqualOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/OneHotOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Operator.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/OperatorCode.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/PackOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/PadOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/PadV2Options.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Padding.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Pool2DOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/PowOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/QuantizationDetails.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/QuantizationParameters.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/QuantizeOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/RNNOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/RangeOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/RankOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ReducerOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ReshapeOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ResizeBilinearOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ResizeNearestNeighborOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ReverseSequenceOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ReverseV2Options.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SVDFOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SelectOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SequenceRNNOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ShapeOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SkipGramOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SliceOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SoftmaxOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SpaceToBatchNDOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SpaceToDepthOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SparseToDenseOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SplitOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SplitVOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SquareOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SquaredDifferenceOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SqueezeOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/StridedSliceOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SubGraph.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SubOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Tensor.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TensorType.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TileOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TopKV2Options.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TransposeConvOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TransposeOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/UnidirectionalSequenceLSTMOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/UniqueOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/UnpackOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/WhereOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ZerosLikeOptions.py create mode 100644 utensor_cgen/frontend/tflite_flatbuffer/__init__.py diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py new file mode 100644 index 00000000..e1e17447 --- /dev/null +++ b/utensor_cgen/frontend/tflite.py @@ -0,0 +1,113 @@ +from __future__ import absolute_import +import os +import six + +import numpy as np + +from utensor_cgen.frontend.base import Parser +from utensor_cgen.frontend import FrontendSelector +from utensor_cgen.ir.base import TensorInfo, OperationInfo, uTensorGraph +from utensor_cgen.utils import topologic_order_graph + +import flatbuffers +from tflite_flatbuffer.Model import Model + +@FrontendSelector.register(target_exts=['.tflite']) +class TFLiteParser(Parser): + + @classmethod + def parse(self, pb_file, output_nodes=None): + buf = open(pb_file, 'rb').read() + buf = bytearray(buf) + model = Model.GetRootAsModel(buf, 0) + #TODO: version check + #print(model.Version()) + + assert model.SubgraphsLength() == 1 + subgraph = model.Subgraphs(0) + + #table to convert opcode to op-class + opcode_to_class= [] + for i in range(0, model.OperatorCodesLength()): + op_code = model.OperatorCodes(i) + opcode_to_class.append(op_code) + + #construct lookup objects for builtin ops + from tflite.BuiltinOperator import BuiltinOperator + from tflite.BuiltinOptions import BuiltinOptions + + builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} + op_options = {v: k for k, v in BuiltinOptions.__dict__.items()} + builtin_option_class = self.get_builtin_option_class() + + ugraph = uTensorGraph(output_nodes=output_nodes, + backend="tensorflow") #FIXME: with the proper backend + + #assuming this is the equivalent to ugraph's topological order + for i in range(0, subgraph.OperatorsLength()): + op = subgraph.Operators(i) + opIndex = op.OpcodeIndex() + op_class = opcode_to_class[opIndex] + builtin_code = op_class.BuiltinCode() + op_type = builtin_ops[builtin_code] #op's type in string + + op_attr = dict() + + if(op.CustomOptionsLength() < 1): + option = builtin_option_class[op_type] + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + op_attr['option'] = option + + if(op_type == 'FULLY_CONNECTED'): + from tflite_flatbuffer.FullyConnectedOptionsWeightsFormat import FullyConnectedOptionsWeightsFormat + w_formats = {v: k for k, v in FullyConnectedOptionsWeightsFormat.__dict__.items()} + op_attr['weights_format'] = w_formats + else: + op_attr['custom_option'] = op.CustomOptionsAsNumpy() + + fb_input_tensors = [subgraph.Tensors(input_idx) for input_idx in op.InputsAsNumpy()] + in_tensors = [TensorInfo(name=tensor.Name(), + ugraph=ugraph, + op_name=tensor.op.name, #FIXME: who the fuck knows + dtype=self.tensor_type_lookup(tensor.Type()), + shape=tensor.ShapeAsNumpy()) + for tensor in fb_input_tensors] + + fb_output_tensors = [subgraph.Tensors(output_idx) for output_idx in op.OutputsAsNumpy()] + out_tensors = [TensorInfo(name=tensor.Name(), + ugraph=ugraph, + op_name=tensor.op.name, #FIXME: who the fuck knows + dtype=self.tensor_type_lookup(tensor.Type()), + shape=tensor.ShapeAsNumpy()) + for tensor in fb_output_tensors] + + node_name = op_type + "_" + i + + op_info = OperationInfo(name=node_name, + input_tensors=in_tensors, + output_tensors=out_tensors, + op_type=op_type, + backend='tensorflow', #FIXME: what should this be? + op_attr=op_attr, + ugraph=ugraph) + + ugraph.ops_info[node_name] = op_info + + topologic_order_graph(ugraph) + return ugraph + + + def get_builtin_option_class(self): + from tflite_flatbuffer.FullyConnectedOptions import FullyConnectedOptions + from tflite_flatbuffer.ArgMaxOptions import ArgMaxOptions + + table = dict() + table['FULLY_CONNECTED'] = FullyConnectedOptions() + table['ARG_MAX'] = ArgMaxOptions() + + return table + + def tensor_type_lookup(self, int_type): + #see TensorType.py + return -1 diff --git a/utensor_cgen/frontend/tflite_flatbuffer/AbsOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/AbsOptions.py new file mode 100644 index 00000000..0cbfb8c0 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/AbsOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class AbsOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsAbsOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = AbsOptions() + x.Init(buf, n + offset) + return x + + # AbsOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def AbsOptionsStart(builder): builder.StartObject(0) +def AbsOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ActivationFunctionType.py b/utensor_cgen/frontend/tflite_flatbuffer/ActivationFunctionType.py new file mode 100644 index 00000000..dc177dee --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ActivationFunctionType.py @@ -0,0 +1,12 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class ActivationFunctionType(object): + NONE = 0 + RELU = 1 + RELU_N1_TO_1 = 2 + RELU6 = 3 + TANH = 4 + SIGN_BIT = 5 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/AddNOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/AddNOptions.py new file mode 100644 index 00000000..b5c2ddb7 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/AddNOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class AddNOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsAddNOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = AddNOptions() + x.Init(buf, n + offset) + return x + + # AddNOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def AddNOptionsStart(builder): builder.StartObject(0) +def AddNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/AddOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/AddOptions.py new file mode 100644 index 00000000..d6cbfcf5 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/AddOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class AddOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsAddOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = AddOptions() + x.Init(buf, n + offset) + return x + + # AddOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # AddOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def AddOptionsStart(builder): builder.StartObject(1) +def AddOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def AddOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ArgMaxOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ArgMaxOptions.py new file mode 100644 index 00000000..fbf1415e --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ArgMaxOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ArgMaxOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsArgMaxOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ArgMaxOptions() + x.Init(buf, n + offset) + return x + + # ArgMaxOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ArgMaxOptions + def OutputType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def ArgMaxOptionsStart(builder): builder.StartObject(1) +def ArgMaxOptionsAddOutputType(builder, outputType): builder.PrependInt8Slot(0, outputType, 0) +def ArgMaxOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ArgMinOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ArgMinOptions.py new file mode 100644 index 00000000..120fdca2 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ArgMinOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ArgMinOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsArgMinOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ArgMinOptions() + x.Init(buf, n + offset) + return x + + # ArgMinOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ArgMinOptions + def OutputType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def ArgMinOptionsStart(builder): builder.StartObject(1) +def ArgMinOptionsAddOutputType(builder, outputType): builder.PrependInt8Slot(0, outputType, 0) +def ArgMinOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BatchToSpaceNDOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/BatchToSpaceNDOptions.py new file mode 100644 index 00000000..3ddcfd3f --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/BatchToSpaceNDOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class BatchToSpaceNDOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsBatchToSpaceNDOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = BatchToSpaceNDOptions() + x.Init(buf, n + offset) + return x + + # BatchToSpaceNDOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def BatchToSpaceNDOptionsStart(builder): builder.StartObject(0) +def BatchToSpaceNDOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceLSTMOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceLSTMOptions.py new file mode 100644 index 00000000..8d8b7bea --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceLSTMOptions.py @@ -0,0 +1,62 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class BidirectionalSequenceLSTMOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsBidirectionalSequenceLSTMOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = BidirectionalSequenceLSTMOptions() + x.Init(buf, n + offset) + return x + + # BidirectionalSequenceLSTMOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # BidirectionalSequenceLSTMOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # BidirectionalSequenceLSTMOptions + def CellClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # BidirectionalSequenceLSTMOptions + def ProjClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # BidirectionalSequenceLSTMOptions + def MergeOutputs(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # BidirectionalSequenceLSTMOptions + def TimeMajor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return True + +def BidirectionalSequenceLSTMOptionsStart(builder): builder.StartObject(5) +def BidirectionalSequenceLSTMOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def BidirectionalSequenceLSTMOptionsAddCellClip(builder, cellClip): builder.PrependFloat32Slot(1, cellClip, 0.0) +def BidirectionalSequenceLSTMOptionsAddProjClip(builder, projClip): builder.PrependFloat32Slot(2, projClip, 0.0) +def BidirectionalSequenceLSTMOptionsAddMergeOutputs(builder, mergeOutputs): builder.PrependBoolSlot(3, mergeOutputs, 0) +def BidirectionalSequenceLSTMOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(4, timeMajor, 1) +def BidirectionalSequenceLSTMOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceRNNOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceRNNOptions.py new file mode 100644 index 00000000..673af6b9 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceRNNOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class BidirectionalSequenceRNNOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsBidirectionalSequenceRNNOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = BidirectionalSequenceRNNOptions() + x.Init(buf, n + offset) + return x + + # BidirectionalSequenceRNNOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # BidirectionalSequenceRNNOptions + def TimeMajor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # BidirectionalSequenceRNNOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # BidirectionalSequenceRNNOptions + def MergeOutputs(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def BidirectionalSequenceRNNOptionsStart(builder): builder.StartObject(3) +def BidirectionalSequenceRNNOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(0, timeMajor, 0) +def BidirectionalSequenceRNNOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) +def BidirectionalSequenceRNNOptionsAddMergeOutputs(builder, mergeOutputs): builder.PrependBoolSlot(2, mergeOutputs, 0) +def BidirectionalSequenceRNNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Buffer.py b/utensor_cgen/frontend/tflite_flatbuffer/Buffer.py new file mode 100644 index 00000000..754dee3b --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/Buffer.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Buffer(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsBuffer(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Buffer() + x.Init(buf, n + offset) + return x + + # Buffer + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Buffer + def Data(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Buffer + def DataAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Buffer + def DataLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def BufferStart(builder): builder.StartObject(1) +def BufferAddData(builder, data): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(data), 0) +def BufferStartDataVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def BufferEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOperator.py b/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOperator.py new file mode 100644 index 00000000..229e1270 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOperator.py @@ -0,0 +1,121 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class BuiltinOperator(object): + ADD = 0 + AVERAGE_POOL_2D = 1 + CONCATENATION = 2 + CONV_2D = 3 + DEPTHWISE_CONV_2D = 4 + DEQUANTIZE = 6 + EMBEDDING_LOOKUP = 7 + FLOOR = 8 + FULLY_CONNECTED = 9 + HASHTABLE_LOOKUP = 10 + L2_NORMALIZATION = 11 + L2_POOL_2D = 12 + LOCAL_RESPONSE_NORMALIZATION = 13 + LOGISTIC = 14 + LSH_PROJECTION = 15 + LSTM = 16 + MAX_POOL_2D = 17 + MUL = 18 + RELU = 19 + RELU_N1_TO_1 = 20 + RELU6 = 21 + RESHAPE = 22 + RESIZE_BILINEAR = 23 + RNN = 24 + SOFTMAX = 25 + SPACE_TO_DEPTH = 26 + SVDF = 27 + TANH = 28 + CONCAT_EMBEDDINGS = 29 + SKIP_GRAM = 30 + CALL = 31 + CUSTOM = 32 + EMBEDDING_LOOKUP_SPARSE = 33 + PAD = 34 + UNIDIRECTIONAL_SEQUENCE_RNN = 35 + GATHER = 36 + BATCH_TO_SPACE_ND = 37 + SPACE_TO_BATCH_ND = 38 + TRANSPOSE = 39 + MEAN = 40 + SUB = 41 + DIV = 42 + SQUEEZE = 43 + UNIDIRECTIONAL_SEQUENCE_LSTM = 44 + STRIDED_SLICE = 45 + BIDIRECTIONAL_SEQUENCE_RNN = 46 + EXP = 47 + TOPK_V2 = 48 + SPLIT = 49 + LOG_SOFTMAX = 50 + DELEGATE = 51 + BIDIRECTIONAL_SEQUENCE_LSTM = 52 + CAST = 53 + PRELU = 54 + MAXIMUM = 55 + ARG_MAX = 56 + MINIMUM = 57 + LESS = 58 + NEG = 59 + PADV2 = 60 + GREATER = 61 + GREATER_EQUAL = 62 + LESS_EQUAL = 63 + SELECT = 64 + SLICE = 65 + SIN = 66 + TRANSPOSE_CONV = 67 + SPARSE_TO_DENSE = 68 + TILE = 69 + EXPAND_DIMS = 70 + EQUAL = 71 + NOT_EQUAL = 72 + LOG = 73 + SUM = 74 + SQRT = 75 + RSQRT = 76 + SHAPE = 77 + POW = 78 + ARG_MIN = 79 + FAKE_QUANT = 80 + REDUCE_PROD = 81 + REDUCE_MAX = 82 + PACK = 83 + LOGICAL_OR = 84 + ONE_HOT = 85 + LOGICAL_AND = 86 + LOGICAL_NOT = 87 + UNPACK = 88 + REDUCE_MIN = 89 + FLOOR_DIV = 90 + REDUCE_ANY = 91 + SQUARE = 92 + ZEROS_LIKE = 93 + FILL = 94 + FLOOR_MOD = 95 + RANGE = 96 + RESIZE_NEAREST_NEIGHBOR = 97 + LEAKY_RELU = 98 + SQUARED_DIFFERENCE = 99 + MIRROR_PAD = 100 + ABS = 101 + SPLIT_V = 102 + UNIQUE = 103 + CEIL = 104 + REVERSE_V2 = 105 + ADD_N = 106 + GATHER_ND = 107 + COS = 108 + WHERE = 109 + RANK = 110 + ELU = 111 + REVERSE_SEQUENCE = 112 + MATRIX_DIAG = 113 + QUANTIZE = 114 + MATRIX_SET_DIAG = 115 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOptions.py new file mode 100644 index 00000000..9830f648 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOptions.py @@ -0,0 +1,97 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class BuiltinOptions(object): + NONE = 0 + Conv2DOptions = 1 + DepthwiseConv2DOptions = 2 + ConcatEmbeddingsOptions = 3 + LSHProjectionOptions = 4 + Pool2DOptions = 5 + SVDFOptions = 6 + RNNOptions = 7 + FullyConnectedOptions = 8 + SoftmaxOptions = 9 + ConcatenationOptions = 10 + AddOptions = 11 + L2NormOptions = 12 + LocalResponseNormalizationOptions = 13 + LSTMOptions = 14 + ResizeBilinearOptions = 15 + CallOptions = 16 + ReshapeOptions = 17 + SkipGramOptions = 18 + SpaceToDepthOptions = 19 + EmbeddingLookupSparseOptions = 20 + MulOptions = 21 + PadOptions = 22 + GatherOptions = 23 + BatchToSpaceNDOptions = 24 + SpaceToBatchNDOptions = 25 + TransposeOptions = 26 + ReducerOptions = 27 + SubOptions = 28 + DivOptions = 29 + SqueezeOptions = 30 + SequenceRNNOptions = 31 + StridedSliceOptions = 32 + ExpOptions = 33 + TopKV2Options = 34 + SplitOptions = 35 + LogSoftmaxOptions = 36 + CastOptions = 37 + DequantizeOptions = 38 + MaximumMinimumOptions = 39 + ArgMaxOptions = 40 + LessOptions = 41 + NegOptions = 42 + PadV2Options = 43 + GreaterOptions = 44 + GreaterEqualOptions = 45 + LessEqualOptions = 46 + SelectOptions = 47 + SliceOptions = 48 + TransposeConvOptions = 49 + SparseToDenseOptions = 50 + TileOptions = 51 + ExpandDimsOptions = 52 + EqualOptions = 53 + NotEqualOptions = 54 + ShapeOptions = 55 + PowOptions = 56 + ArgMinOptions = 57 + FakeQuantOptions = 58 + PackOptions = 59 + LogicalOrOptions = 60 + OneHotOptions = 61 + LogicalAndOptions = 62 + LogicalNotOptions = 63 + UnpackOptions = 64 + FloorDivOptions = 65 + SquareOptions = 66 + ZerosLikeOptions = 67 + FillOptions = 68 + BidirectionalSequenceLSTMOptions = 69 + BidirectionalSequenceRNNOptions = 70 + UnidirectionalSequenceLSTMOptions = 71 + FloorModOptions = 72 + RangeOptions = 73 + ResizeNearestNeighborOptions = 74 + LeakyReluOptions = 75 + SquaredDifferenceOptions = 76 + MirrorPadOptions = 77 + AbsOptions = 78 + SplitVOptions = 79 + UniqueOptions = 80 + ReverseV2Options = 81 + AddNOptions = 82 + GatherNdOptions = 83 + CosOptions = 84 + WhereOptions = 85 + RankOptions = 86 + ReverseSequenceOptions = 87 + MatrixDiagOptions = 88 + QuantizeOptions = 89 + MatrixSetDiagOptions = 90 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CallOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/CallOptions.py new file mode 100644 index 00000000..5ae2eeae --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/CallOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class CallOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCallOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CallOptions() + x.Init(buf, n + offset) + return x + + # CallOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # CallOptions + def Subgraph(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + +def CallOptionsStart(builder): builder.StartObject(1) +def CallOptionsAddSubgraph(builder, subgraph): builder.PrependUint32Slot(0, subgraph, 0) +def CallOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CastOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/CastOptions.py new file mode 100644 index 00000000..70ae2e37 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/CastOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class CastOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCastOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CastOptions() + x.Init(buf, n + offset) + return x + + # CastOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # CastOptions + def InDataType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # CastOptions + def OutDataType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def CastOptionsStart(builder): builder.StartObject(2) +def CastOptionsAddInDataType(builder, inDataType): builder.PrependInt8Slot(0, inDataType, 0) +def CastOptionsAddOutDataType(builder, outDataType): builder.PrependInt8Slot(1, outDataType, 0) +def CastOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CombinerType.py b/utensor_cgen/frontend/tflite_flatbuffer/CombinerType.py new file mode 100644 index 00000000..17d91510 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/CombinerType.py @@ -0,0 +1,9 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class CombinerType(object): + SUM = 0 + MEAN = 1 + SQRTN = 2 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ConcatEmbeddingsOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ConcatEmbeddingsOptions.py new file mode 100644 index 00000000..9d26c510 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ConcatEmbeddingsOptions.py @@ -0,0 +1,78 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ConcatEmbeddingsOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsConcatEmbeddingsOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ConcatEmbeddingsOptions() + x.Init(buf, n + offset) + return x + + # ConcatEmbeddingsOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ConcatEmbeddingsOptions + def NumChannels(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # ConcatEmbeddingsOptions + def NumColumnsPerChannel(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # ConcatEmbeddingsOptions + def NumColumnsPerChannelAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # ConcatEmbeddingsOptions + def NumColumnsPerChannelLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # ConcatEmbeddingsOptions + def EmbeddingDimPerChannel(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # ConcatEmbeddingsOptions + def EmbeddingDimPerChannelAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # ConcatEmbeddingsOptions + def EmbeddingDimPerChannelLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def ConcatEmbeddingsOptionsStart(builder): builder.StartObject(3) +def ConcatEmbeddingsOptionsAddNumChannels(builder, numChannels): builder.PrependInt32Slot(0, numChannels, 0) +def ConcatEmbeddingsOptionsAddNumColumnsPerChannel(builder, numColumnsPerChannel): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(numColumnsPerChannel), 0) +def ConcatEmbeddingsOptionsStartNumColumnsPerChannelVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ConcatEmbeddingsOptionsAddEmbeddingDimPerChannel(builder, embeddingDimPerChannel): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(embeddingDimPerChannel), 0) +def ConcatEmbeddingsOptionsStartEmbeddingDimPerChannelVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ConcatEmbeddingsOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ConcatenationOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ConcatenationOptions.py new file mode 100644 index 00000000..c8e0b6ab --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ConcatenationOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ConcatenationOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsConcatenationOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ConcatenationOptions() + x.Init(buf, n + offset) + return x + + # ConcatenationOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ConcatenationOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # ConcatenationOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def ConcatenationOptionsStart(builder): builder.StartObject(2) +def ConcatenationOptionsAddAxis(builder, axis): builder.PrependInt32Slot(0, axis, 0) +def ConcatenationOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) +def ConcatenationOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Conv2DOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/Conv2DOptions.py new file mode 100644 index 00000000..ef49f751 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/Conv2DOptions.py @@ -0,0 +1,70 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Conv2DOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsConv2DOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Conv2DOptions() + x.Init(buf, n + offset) + return x + + # Conv2DOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Conv2DOptions + def Padding(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Conv2DOptions + def StrideW(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Conv2DOptions + def StrideH(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Conv2DOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Conv2DOptions + def DilationWFactor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + + # Conv2DOptions + def DilationHFactor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + +def Conv2DOptionsStart(builder): builder.StartObject(6) +def Conv2DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) +def Conv2DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) +def Conv2DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) +def Conv2DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(3, fusedActivationFunction, 0) +def Conv2DOptionsAddDilationWFactor(builder, dilationWFactor): builder.PrependInt32Slot(4, dilationWFactor, 1) +def Conv2DOptionsAddDilationHFactor(builder, dilationHFactor): builder.PrependInt32Slot(5, dilationHFactor, 1) +def Conv2DOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CosOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/CosOptions.py new file mode 100644 index 00000000..7fbf8487 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/CosOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class CosOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCosOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CosOptions() + x.Init(buf, n + offset) + return x + + # CosOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def CosOptionsStart(builder): builder.StartObject(0) +def CosOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CustomOptionsFormat.py b/utensor_cgen/frontend/tflite_flatbuffer/CustomOptionsFormat.py new file mode 100644 index 00000000..bef384cf --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/CustomOptionsFormat.py @@ -0,0 +1,7 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class CustomOptionsFormat(object): + FLEXBUFFERS = 0 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CustomQuantization.py b/utensor_cgen/frontend/tflite_flatbuffer/CustomQuantization.py new file mode 100644 index 00000000..21ec0da4 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/CustomQuantization.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class CustomQuantization(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCustomQuantization(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CustomQuantization() + x.Init(buf, n + offset) + return x + + # CustomQuantization + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # CustomQuantization + def Custom(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # CustomQuantization + def CustomAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # CustomQuantization + def CustomLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def CustomQuantizationStart(builder): builder.StartObject(1) +def CustomQuantizationAddCustom(builder, custom): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(custom), 0) +def CustomQuantizationStartCustomVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def CustomQuantizationEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/DepthwiseConv2DOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/DepthwiseConv2DOptions.py new file mode 100644 index 00000000..9689383b --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/DepthwiseConv2DOptions.py @@ -0,0 +1,78 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class DepthwiseConv2DOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsDepthwiseConv2DOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DepthwiseConv2DOptions() + x.Init(buf, n + offset) + return x + + # DepthwiseConv2DOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # DepthwiseConv2DOptions + def Padding(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def StrideW(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def StrideH(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def DepthMultiplier(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def DilationWFactor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + + # DepthwiseConv2DOptions + def DilationHFactor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + +def DepthwiseConv2DOptionsStart(builder): builder.StartObject(7) +def DepthwiseConv2DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) +def DepthwiseConv2DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) +def DepthwiseConv2DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) +def DepthwiseConv2DOptionsAddDepthMultiplier(builder, depthMultiplier): builder.PrependInt32Slot(3, depthMultiplier, 0) +def DepthwiseConv2DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(4, fusedActivationFunction, 0) +def DepthwiseConv2DOptionsAddDilationWFactor(builder, dilationWFactor): builder.PrependInt32Slot(5, dilationWFactor, 1) +def DepthwiseConv2DOptionsAddDilationHFactor(builder, dilationHFactor): builder.PrependInt32Slot(6, dilationHFactor, 1) +def DepthwiseConv2DOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/DequantizeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/DequantizeOptions.py new file mode 100644 index 00000000..5ef8b8dd --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/DequantizeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class DequantizeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsDequantizeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DequantizeOptions() + x.Init(buf, n + offset) + return x + + # DequantizeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def DequantizeOptionsStart(builder): builder.StartObject(0) +def DequantizeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/DivOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/DivOptions.py new file mode 100644 index 00000000..905a3be0 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/DivOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class DivOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsDivOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DivOptions() + x.Init(buf, n + offset) + return x + + # DivOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # DivOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def DivOptionsStart(builder): builder.StartObject(1) +def DivOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def DivOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/EmbeddingLookupSparseOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/EmbeddingLookupSparseOptions.py new file mode 100644 index 00000000..7d9c1442 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/EmbeddingLookupSparseOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class EmbeddingLookupSparseOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsEmbeddingLookupSparseOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = EmbeddingLookupSparseOptions() + x.Init(buf, n + offset) + return x + + # EmbeddingLookupSparseOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # EmbeddingLookupSparseOptions + def Combiner(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def EmbeddingLookupSparseOptionsStart(builder): builder.StartObject(1) +def EmbeddingLookupSparseOptionsAddCombiner(builder, combiner): builder.PrependInt8Slot(0, combiner, 0) +def EmbeddingLookupSparseOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/EqualOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/EqualOptions.py new file mode 100644 index 00000000..f787ef85 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/EqualOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class EqualOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsEqualOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = EqualOptions() + x.Init(buf, n + offset) + return x + + # EqualOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def EqualOptionsStart(builder): builder.StartObject(0) +def EqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ExpOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ExpOptions.py new file mode 100644 index 00000000..eac1456e --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ExpOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ExpOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsExpOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ExpOptions() + x.Init(buf, n + offset) + return x + + # ExpOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def ExpOptionsStart(builder): builder.StartObject(0) +def ExpOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ExpandDimsOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ExpandDimsOptions.py new file mode 100644 index 00000000..69d63665 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ExpandDimsOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ExpandDimsOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsExpandDimsOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ExpandDimsOptions() + x.Init(buf, n + offset) + return x + + # ExpandDimsOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def ExpandDimsOptionsStart(builder): builder.StartObject(0) +def ExpandDimsOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FakeQuantOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FakeQuantOptions.py new file mode 100644 index 00000000..46c371c3 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/FakeQuantOptions.py @@ -0,0 +1,54 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FakeQuantOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFakeQuantOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FakeQuantOptions() + x.Init(buf, n + offset) + return x + + # FakeQuantOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # FakeQuantOptions + def Min(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # FakeQuantOptions + def Max(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # FakeQuantOptions + def NumBits(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # FakeQuantOptions + def NarrowRange(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def FakeQuantOptionsStart(builder): builder.StartObject(4) +def FakeQuantOptionsAddMin(builder, min): builder.PrependFloat32Slot(0, min, 0.0) +def FakeQuantOptionsAddMax(builder, max): builder.PrependFloat32Slot(1, max, 0.0) +def FakeQuantOptionsAddNumBits(builder, numBits): builder.PrependInt32Slot(2, numBits, 0) +def FakeQuantOptionsAddNarrowRange(builder, narrowRange): builder.PrependBoolSlot(3, narrowRange, 0) +def FakeQuantOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FillOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FillOptions.py new file mode 100644 index 00000000..5a1e651a --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/FillOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FillOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFillOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FillOptions() + x.Init(buf, n + offset) + return x + + # FillOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def FillOptionsStart(builder): builder.StartObject(0) +def FillOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FloorDivOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FloorDivOptions.py new file mode 100644 index 00000000..64b474fb --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/FloorDivOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FloorDivOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFloorDivOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FloorDivOptions() + x.Init(buf, n + offset) + return x + + # FloorDivOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def FloorDivOptionsStart(builder): builder.StartObject(0) +def FloorDivOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FloorModOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FloorModOptions.py new file mode 100644 index 00000000..37c8e5a5 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/FloorModOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FloorModOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFloorModOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FloorModOptions() + x.Init(buf, n + offset) + return x + + # FloorModOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def FloorModOptionsStart(builder): builder.StartObject(0) +def FloorModOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptions.py new file mode 100644 index 00000000..fb7ebc28 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FullyConnectedOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFullyConnectedOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FullyConnectedOptions() + x.Init(buf, n + offset) + return x + + # FullyConnectedOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # FullyConnectedOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # FullyConnectedOptions + def WeightsFormat(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def FullyConnectedOptionsStart(builder): builder.StartObject(2) +def FullyConnectedOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def FullyConnectedOptionsAddWeightsFormat(builder, weightsFormat): builder.PrependInt8Slot(1, weightsFormat, 0) +def FullyConnectedOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptionsWeightsFormat.py b/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptionsWeightsFormat.py new file mode 100644 index 00000000..6d81eca1 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptionsWeightsFormat.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class FullyConnectedOptionsWeightsFormat(object): + DEFAULT = 0 + SHUFFLED4x16INT8 = 1 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/GatherNdOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/GatherNdOptions.py new file mode 100644 index 00000000..f515eb5c --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/GatherNdOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class GatherNdOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsGatherNdOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = GatherNdOptions() + x.Init(buf, n + offset) + return x + + # GatherNdOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def GatherNdOptionsStart(builder): builder.StartObject(0) +def GatherNdOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/GatherOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/GatherOptions.py new file mode 100644 index 00000000..9fbc3e40 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/GatherOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class GatherOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsGatherOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = GatherOptions() + x.Init(buf, n + offset) + return x + + # GatherOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # GatherOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def GatherOptionsStart(builder): builder.StartObject(1) +def GatherOptionsAddAxis(builder, axis): builder.PrependInt32Slot(0, axis, 0) +def GatherOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/GreaterEqualOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/GreaterEqualOptions.py new file mode 100644 index 00000000..a29e200a --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/GreaterEqualOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class GreaterEqualOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsGreaterEqualOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = GreaterEqualOptions() + x.Init(buf, n + offset) + return x + + # GreaterEqualOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def GreaterEqualOptionsStart(builder): builder.StartObject(0) +def GreaterEqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/GreaterOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/GreaterOptions.py new file mode 100644 index 00000000..59d63501 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/GreaterOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class GreaterOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsGreaterOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = GreaterOptions() + x.Init(buf, n + offset) + return x + + # GreaterOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def GreaterOptionsStart(builder): builder.StartObject(0) +def GreaterOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/L2NormOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/L2NormOptions.py new file mode 100644 index 00000000..38bdf573 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/L2NormOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class L2NormOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsL2NormOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = L2NormOptions() + x.Init(buf, n + offset) + return x + + # L2NormOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # L2NormOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def L2NormOptionsStart(builder): builder.StartObject(1) +def L2NormOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def L2NormOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionOptions.py new file mode 100644 index 00000000..ad550be2 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LSHProjectionOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLSHProjectionOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LSHProjectionOptions() + x.Init(buf, n + offset) + return x + + # LSHProjectionOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # LSHProjectionOptions + def Type(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def LSHProjectionOptionsStart(builder): builder.StartObject(1) +def LSHProjectionOptionsAddType(builder, type): builder.PrependInt8Slot(0, type, 0) +def LSHProjectionOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionType.py b/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionType.py new file mode 100644 index 00000000..d6a136e8 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionType.py @@ -0,0 +1,9 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class LSHProjectionType(object): + UNKNOWN = 0 + SPARSE = 1 + DENSE = 2 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LSTMKernelType.py b/utensor_cgen/frontend/tflite_flatbuffer/LSTMKernelType.py new file mode 100644 index 00000000..1ca4df0a --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LSTMKernelType.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class LSTMKernelType(object): + FULL = 0 + BASIC = 1 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LSTMOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LSTMOptions.py new file mode 100644 index 00000000..93a83093 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LSTMOptions.py @@ -0,0 +1,54 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LSTMOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLSTMOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LSTMOptions() + x.Init(buf, n + offset) + return x + + # LSTMOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # LSTMOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # LSTMOptions + def CellClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # LSTMOptions + def ProjClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # LSTMOptions + def KernelType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def LSTMOptionsStart(builder): builder.StartObject(4) +def LSTMOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def LSTMOptionsAddCellClip(builder, cellClip): builder.PrependFloat32Slot(1, cellClip, 0.0) +def LSTMOptionsAddProjClip(builder, projClip): builder.PrependFloat32Slot(2, projClip, 0.0) +def LSTMOptionsAddKernelType(builder, kernelType): builder.PrependInt8Slot(3, kernelType, 0) +def LSTMOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LeakyReluOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LeakyReluOptions.py new file mode 100644 index 00000000..b61b21d5 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LeakyReluOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LeakyReluOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLeakyReluOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LeakyReluOptions() + x.Init(buf, n + offset) + return x + + # LeakyReluOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # LeakyReluOptions + def Alpha(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + +def LeakyReluOptionsStart(builder): builder.StartObject(1) +def LeakyReluOptionsAddAlpha(builder, alpha): builder.PrependFloat32Slot(0, alpha, 0.0) +def LeakyReluOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LessEqualOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LessEqualOptions.py new file mode 100644 index 00000000..d49b7289 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LessEqualOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LessEqualOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLessEqualOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LessEqualOptions() + x.Init(buf, n + offset) + return x + + # LessEqualOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LessEqualOptionsStart(builder): builder.StartObject(0) +def LessEqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LessOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LessOptions.py new file mode 100644 index 00000000..469cb0b0 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LessOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LessOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLessOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LessOptions() + x.Init(buf, n + offset) + return x + + # LessOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LessOptionsStart(builder): builder.StartObject(0) +def LessOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LocalResponseNormalizationOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LocalResponseNormalizationOptions.py new file mode 100644 index 00000000..db875603 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LocalResponseNormalizationOptions.py @@ -0,0 +1,54 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LocalResponseNormalizationOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLocalResponseNormalizationOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LocalResponseNormalizationOptions() + x.Init(buf, n + offset) + return x + + # LocalResponseNormalizationOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # LocalResponseNormalizationOptions + def Radius(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # LocalResponseNormalizationOptions + def Bias(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # LocalResponseNormalizationOptions + def Alpha(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # LocalResponseNormalizationOptions + def Beta(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + +def LocalResponseNormalizationOptionsStart(builder): builder.StartObject(4) +def LocalResponseNormalizationOptionsAddRadius(builder, radius): builder.PrependInt32Slot(0, radius, 0) +def LocalResponseNormalizationOptionsAddBias(builder, bias): builder.PrependFloat32Slot(1, bias, 0.0) +def LocalResponseNormalizationOptionsAddAlpha(builder, alpha): builder.PrependFloat32Slot(2, alpha, 0.0) +def LocalResponseNormalizationOptionsAddBeta(builder, beta): builder.PrependFloat32Slot(3, beta, 0.0) +def LocalResponseNormalizationOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LogSoftmaxOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LogSoftmaxOptions.py new file mode 100644 index 00000000..47893855 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LogSoftmaxOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LogSoftmaxOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLogSoftmaxOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LogSoftmaxOptions() + x.Init(buf, n + offset) + return x + + # LogSoftmaxOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LogSoftmaxOptionsStart(builder): builder.StartObject(0) +def LogSoftmaxOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LogicalAndOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LogicalAndOptions.py new file mode 100644 index 00000000..cee1cdb4 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LogicalAndOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LogicalAndOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLogicalAndOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LogicalAndOptions() + x.Init(buf, n + offset) + return x + + # LogicalAndOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LogicalAndOptionsStart(builder): builder.StartObject(0) +def LogicalAndOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LogicalNotOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LogicalNotOptions.py new file mode 100644 index 00000000..9971450c --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LogicalNotOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LogicalNotOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLogicalNotOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LogicalNotOptions() + x.Init(buf, n + offset) + return x + + # LogicalNotOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LogicalNotOptionsStart(builder): builder.StartObject(0) +def LogicalNotOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LogicalOrOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LogicalOrOptions.py new file mode 100644 index 00000000..e94a5dec --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/LogicalOrOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LogicalOrOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLogicalOrOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LogicalOrOptions() + x.Init(buf, n + offset) + return x + + # LogicalOrOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LogicalOrOptionsStart(builder): builder.StartObject(0) +def LogicalOrOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MatrixDiagOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MatrixDiagOptions.py new file mode 100644 index 00000000..0f64e657 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/MatrixDiagOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MatrixDiagOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMatrixDiagOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MatrixDiagOptions() + x.Init(buf, n + offset) + return x + + # MatrixDiagOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def MatrixDiagOptionsStart(builder): builder.StartObject(0) +def MatrixDiagOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MatrixSetDiagOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MatrixSetDiagOptions.py new file mode 100644 index 00000000..14178cf8 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/MatrixSetDiagOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MatrixSetDiagOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMatrixSetDiagOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MatrixSetDiagOptions() + x.Init(buf, n + offset) + return x + + # MatrixSetDiagOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def MatrixSetDiagOptionsStart(builder): builder.StartObject(0) +def MatrixSetDiagOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MaximumMinimumOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MaximumMinimumOptions.py new file mode 100644 index 00000000..f0806e2d --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/MaximumMinimumOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MaximumMinimumOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMaximumMinimumOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MaximumMinimumOptions() + x.Init(buf, n + offset) + return x + + # MaximumMinimumOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def MaximumMinimumOptionsStart(builder): builder.StartObject(0) +def MaximumMinimumOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadMode.py b/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadMode.py new file mode 100644 index 00000000..ce7579d2 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadMode.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class MirrorPadMode(object): + REFLECT = 0 + SYMMETRIC = 1 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadOptions.py new file mode 100644 index 00000000..254ae217 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MirrorPadOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMirrorPadOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MirrorPadOptions() + x.Init(buf, n + offset) + return x + + # MirrorPadOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # MirrorPadOptions + def Mode(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def MirrorPadOptionsStart(builder): builder.StartObject(1) +def MirrorPadOptionsAddMode(builder, mode): builder.PrependInt8Slot(0, mode, 0) +def MirrorPadOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Model.py b/utensor_cgen/frontend/tflite_flatbuffer/Model.py new file mode 100644 index 00000000..aab841ab --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/Model.py @@ -0,0 +1,128 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Model(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsModel(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Model() + x.Init(buf, n + offset) + return x + + # Model + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Model + def Version(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + # Model + def OperatorCodes(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .OperatorCode import OperatorCode + obj = OperatorCode() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Model + def OperatorCodesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Model + def Subgraphs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .SubGraph import SubGraph + obj = SubGraph() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Model + def SubgraphsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Model + def Description(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Model + def Buffers(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .Buffer import Buffer + obj = Buffer() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Model + def BuffersLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Model + def MetadataBuffer(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # Model + def MetadataBufferAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # Model + def MetadataBufferLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def ModelStart(builder): builder.StartObject(6) +def ModelAddVersion(builder, version): builder.PrependUint32Slot(0, version, 0) +def ModelAddOperatorCodes(builder, operatorCodes): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(operatorCodes), 0) +def ModelStartOperatorCodesVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ModelAddSubgraphs(builder, subgraphs): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(subgraphs), 0) +def ModelStartSubgraphsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ModelAddDescription(builder, description): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(description), 0) +def ModelAddBuffers(builder, buffers): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(buffers), 0) +def ModelStartBuffersVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ModelAddMetadataBuffer(builder, metadataBuffer): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(metadataBuffer), 0) +def ModelStartMetadataBufferVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ModelEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MulOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MulOptions.py new file mode 100644 index 00000000..55b9506f --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/MulOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MulOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMulOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MulOptions() + x.Init(buf, n + offset) + return x + + # MulOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # MulOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def MulOptionsStart(builder): builder.StartObject(1) +def MulOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def MulOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/NegOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/NegOptions.py new file mode 100644 index 00000000..05d55c26 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/NegOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class NegOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsNegOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = NegOptions() + x.Init(buf, n + offset) + return x + + # NegOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def NegOptionsStart(builder): builder.StartObject(0) +def NegOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/NotEqualOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/NotEqualOptions.py new file mode 100644 index 00000000..4c511e93 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/NotEqualOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class NotEqualOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsNotEqualOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = NotEqualOptions() + x.Init(buf, n + offset) + return x + + # NotEqualOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def NotEqualOptionsStart(builder): builder.StartObject(0) +def NotEqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/OneHotOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/OneHotOptions.py new file mode 100644 index 00000000..793a3e75 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/OneHotOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class OneHotOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsOneHotOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = OneHotOptions() + x.Init(buf, n + offset) + return x + + # OneHotOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # OneHotOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def OneHotOptionsStart(builder): builder.StartObject(1) +def OneHotOptionsAddAxis(builder, axis): builder.PrependInt32Slot(0, axis, 0) +def OneHotOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Operator.py b/utensor_cgen/frontend/tflite_flatbuffer/Operator.py new file mode 100644 index 00000000..fd237845 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/Operator.py @@ -0,0 +1,153 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Operator(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsOperator(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Operator() + x.Init(buf, n + offset) + return x + + # Operator + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Operator + def OpcodeIndex(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + # Operator + def Inputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # Operator + def InputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # Operator + def InputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Operator + def Outputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # Operator + def OutputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # Operator + def OutputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Operator + def BuiltinOptionsType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # Operator + def BuiltinOptions(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + return None + + # Operator + def CustomOptions(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Operator + def CustomOptionsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Operator + def CustomOptionsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Operator + def CustomOptionsFormat(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Operator + def MutatingVariableInputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.BoolFlags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Operator + def MutatingVariableInputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.BoolFlags, o) + return 0 + + # Operator + def MutatingVariableInputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def OperatorStart(builder): builder.StartObject(8) +def OperatorAddOpcodeIndex(builder, opcodeIndex): builder.PrependUint32Slot(0, opcodeIndex, 0) +def OperatorAddInputs(builder, inputs): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(inputs), 0) +def OperatorStartInputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def OperatorAddOutputs(builder, outputs): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(outputs), 0) +def OperatorStartOutputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def OperatorAddBuiltinOptionsType(builder, builtinOptionsType): builder.PrependUint8Slot(3, builtinOptionsType, 0) +def OperatorAddBuiltinOptions(builder, builtinOptions): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(builtinOptions), 0) +def OperatorAddCustomOptions(builder, customOptions): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(customOptions), 0) +def OperatorStartCustomOptionsVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def OperatorAddCustomOptionsFormat(builder, customOptionsFormat): builder.PrependInt8Slot(6, customOptionsFormat, 0) +def OperatorAddMutatingVariableInputs(builder, mutatingVariableInputs): builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(mutatingVariableInputs), 0) +def OperatorStartMutatingVariableInputsVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def OperatorEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/OperatorCode.py b/utensor_cgen/frontend/tflite_flatbuffer/OperatorCode.py new file mode 100644 index 00000000..dd525f53 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/OperatorCode.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class OperatorCode(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsOperatorCode(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = OperatorCode() + x.Init(buf, n + offset) + return x + + # OperatorCode + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # OperatorCode + def BuiltinCode(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # OperatorCode + def CustomCode(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # OperatorCode + def Version(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + +def OperatorCodeStart(builder): builder.StartObject(3) +def OperatorCodeAddBuiltinCode(builder, builtinCode): builder.PrependInt8Slot(0, builtinCode, 0) +def OperatorCodeAddCustomCode(builder, customCode): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(customCode), 0) +def OperatorCodeAddVersion(builder, version): builder.PrependInt32Slot(2, version, 1) +def OperatorCodeEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/PackOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/PackOptions.py new file mode 100644 index 00000000..6a8ee2bb --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/PackOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class PackOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPackOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = PackOptions() + x.Init(buf, n + offset) + return x + + # PackOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # PackOptions + def ValuesCount(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # PackOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def PackOptionsStart(builder): builder.StartObject(2) +def PackOptionsAddValuesCount(builder, valuesCount): builder.PrependInt32Slot(0, valuesCount, 0) +def PackOptionsAddAxis(builder, axis): builder.PrependInt32Slot(1, axis, 0) +def PackOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/PadOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/PadOptions.py new file mode 100644 index 00000000..d0833c68 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/PadOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class PadOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPadOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = PadOptions() + x.Init(buf, n + offset) + return x + + # PadOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def PadOptionsStart(builder): builder.StartObject(0) +def PadOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/PadV2Options.py b/utensor_cgen/frontend/tflite_flatbuffer/PadV2Options.py new file mode 100644 index 00000000..5ea0d70c --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/PadV2Options.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class PadV2Options(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPadV2Options(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = PadV2Options() + x.Init(buf, n + offset) + return x + + # PadV2Options + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def PadV2OptionsStart(builder): builder.StartObject(0) +def PadV2OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Padding.py b/utensor_cgen/frontend/tflite_flatbuffer/Padding.py new file mode 100644 index 00000000..6027f4b5 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/Padding.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class Padding(object): + SAME = 0 + VALID = 1 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Pool2DOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/Pool2DOptions.py new file mode 100644 index 00000000..b8b9f178 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/Pool2DOptions.py @@ -0,0 +1,70 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Pool2DOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPool2DOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Pool2DOptions() + x.Init(buf, n + offset) + return x + + # Pool2DOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Pool2DOptions + def Padding(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def StrideW(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def StrideH(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def FilterWidth(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def FilterHeight(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def Pool2DOptionsStart(builder): builder.StartObject(6) +def Pool2DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) +def Pool2DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) +def Pool2DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) +def Pool2DOptionsAddFilterWidth(builder, filterWidth): builder.PrependInt32Slot(3, filterWidth, 0) +def Pool2DOptionsAddFilterHeight(builder, filterHeight): builder.PrependInt32Slot(4, filterHeight, 0) +def Pool2DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(5, fusedActivationFunction, 0) +def Pool2DOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/PowOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/PowOptions.py new file mode 100644 index 00000000..666ca488 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/PowOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class PowOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPowOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = PowOptions() + x.Init(buf, n + offset) + return x + + # PowOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def PowOptionsStart(builder): builder.StartObject(0) +def PowOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/QuantizationDetails.py b/utensor_cgen/frontend/tflite_flatbuffer/QuantizationDetails.py new file mode 100644 index 00000000..7159efbd --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/QuantizationDetails.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class QuantizationDetails(object): + NONE = 0 + CustomQuantization = 1 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/QuantizationParameters.py b/utensor_cgen/frontend/tflite_flatbuffer/QuantizationParameters.py new file mode 100644 index 00000000..fcd686cf --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/QuantizationParameters.py @@ -0,0 +1,145 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class QuantizationParameters(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsQuantizationParameters(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = QuantizationParameters() + x.Init(buf, n + offset) + return x + + # QuantizationParameters + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # QuantizationParameters + def Min(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # QuantizationParameters + def MinAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Float32Flags, o) + return 0 + + # QuantizationParameters + def MinLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # QuantizationParameters + def Max(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # QuantizationParameters + def MaxAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Float32Flags, o) + return 0 + + # QuantizationParameters + def MaxLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # QuantizationParameters + def Scale(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # QuantizationParameters + def ScaleAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Float32Flags, o) + return 0 + + # QuantizationParameters + def ScaleLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # QuantizationParameters + def ZeroPoint(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int64Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 8)) + return 0 + + # QuantizationParameters + def ZeroPointAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int64Flags, o) + return 0 + + # QuantizationParameters + def ZeroPointLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # QuantizationParameters + def DetailsType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # QuantizationParameters + def Details(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + return None + + # QuantizationParameters + def QuantizedDimension(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def QuantizationParametersStart(builder): builder.StartObject(7) +def QuantizationParametersAddMin(builder, min): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(min), 0) +def QuantizationParametersStartMinVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def QuantizationParametersAddMax(builder, max): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(max), 0) +def QuantizationParametersStartMaxVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def QuantizationParametersAddScale(builder, scale): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(scale), 0) +def QuantizationParametersStartScaleVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def QuantizationParametersAddZeroPoint(builder, zeroPoint): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(zeroPoint), 0) +def QuantizationParametersStartZeroPointVector(builder, numElems): return builder.StartVector(8, numElems, 8) +def QuantizationParametersAddDetailsType(builder, detailsType): builder.PrependUint8Slot(4, detailsType, 0) +def QuantizationParametersAddDetails(builder, details): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(details), 0) +def QuantizationParametersAddQuantizedDimension(builder, quantizedDimension): builder.PrependInt32Slot(6, quantizedDimension, 0) +def QuantizationParametersEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/QuantizeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/QuantizeOptions.py new file mode 100644 index 00000000..28af8cc9 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/QuantizeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class QuantizeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsQuantizeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = QuantizeOptions() + x.Init(buf, n + offset) + return x + + # QuantizeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def QuantizeOptionsStart(builder): builder.StartObject(0) +def QuantizeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/RNNOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/RNNOptions.py new file mode 100644 index 00000000..3cfdb6af --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/RNNOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class RNNOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsRNNOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = RNNOptions() + x.Init(buf, n + offset) + return x + + # RNNOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # RNNOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def RNNOptionsStart(builder): builder.StartObject(1) +def RNNOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def RNNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/RangeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/RangeOptions.py new file mode 100644 index 00000000..cb705b57 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/RangeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class RangeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsRangeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = RangeOptions() + x.Init(buf, n + offset) + return x + + # RangeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def RangeOptionsStart(builder): builder.StartObject(0) +def RangeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/RankOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/RankOptions.py new file mode 100644 index 00000000..4e4a5ecd --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/RankOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class RankOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsRankOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = RankOptions() + x.Init(buf, n + offset) + return x + + # RankOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def RankOptionsStart(builder): builder.StartObject(0) +def RankOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ReducerOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ReducerOptions.py new file mode 100644 index 00000000..93bbde17 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ReducerOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ReducerOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsReducerOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ReducerOptions() + x.Init(buf, n + offset) + return x + + # ReducerOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ReducerOptions + def KeepDims(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def ReducerOptionsStart(builder): builder.StartObject(1) +def ReducerOptionsAddKeepDims(builder, keepDims): builder.PrependBoolSlot(0, keepDims, 0) +def ReducerOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ReshapeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ReshapeOptions.py new file mode 100644 index 00000000..157d45d9 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ReshapeOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ReshapeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsReshapeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ReshapeOptions() + x.Init(buf, n + offset) + return x + + # ReshapeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ReshapeOptions + def NewShape(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # ReshapeOptions + def NewShapeAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # ReshapeOptions + def NewShapeLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def ReshapeOptionsStart(builder): builder.StartObject(1) +def ReshapeOptionsAddNewShape(builder, newShape): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(newShape), 0) +def ReshapeOptionsStartNewShapeVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ReshapeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ResizeBilinearOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ResizeBilinearOptions.py new file mode 100644 index 00000000..0d1f9624 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ResizeBilinearOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ResizeBilinearOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsResizeBilinearOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ResizeBilinearOptions() + x.Init(buf, n + offset) + return x + + # ResizeBilinearOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ResizeBilinearOptions + def AlignCorners(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def ResizeBilinearOptionsStart(builder): builder.StartObject(3) +def ResizeBilinearOptionsAddAlignCorners(builder, alignCorners): builder.PrependBoolSlot(2, alignCorners, 0) +def ResizeBilinearOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ResizeNearestNeighborOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ResizeNearestNeighborOptions.py new file mode 100644 index 00000000..4b166e95 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ResizeNearestNeighborOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ResizeNearestNeighborOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsResizeNearestNeighborOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ResizeNearestNeighborOptions() + x.Init(buf, n + offset) + return x + + # ResizeNearestNeighborOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ResizeNearestNeighborOptions + def AlignCorners(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def ResizeNearestNeighborOptionsStart(builder): builder.StartObject(1) +def ResizeNearestNeighborOptionsAddAlignCorners(builder, alignCorners): builder.PrependBoolSlot(0, alignCorners, 0) +def ResizeNearestNeighborOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ReverseSequenceOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ReverseSequenceOptions.py new file mode 100644 index 00000000..cbaf96db --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ReverseSequenceOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ReverseSequenceOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsReverseSequenceOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ReverseSequenceOptions() + x.Init(buf, n + offset) + return x + + # ReverseSequenceOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ReverseSequenceOptions + def SeqDim(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # ReverseSequenceOptions + def BatchDim(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def ReverseSequenceOptionsStart(builder): builder.StartObject(2) +def ReverseSequenceOptionsAddSeqDim(builder, seqDim): builder.PrependInt32Slot(0, seqDim, 0) +def ReverseSequenceOptionsAddBatchDim(builder, batchDim): builder.PrependInt32Slot(1, batchDim, 0) +def ReverseSequenceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ReverseV2Options.py b/utensor_cgen/frontend/tflite_flatbuffer/ReverseV2Options.py new file mode 100644 index 00000000..dbac9362 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ReverseV2Options.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ReverseV2Options(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsReverseV2Options(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ReverseV2Options() + x.Init(buf, n + offset) + return x + + # ReverseV2Options + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def ReverseV2OptionsStart(builder): builder.StartObject(0) +def ReverseV2OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SVDFOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SVDFOptions.py new file mode 100644 index 00000000..6f391db1 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SVDFOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SVDFOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSVDFOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SVDFOptions() + x.Init(buf, n + offset) + return x + + # SVDFOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SVDFOptions + def Rank(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # SVDFOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def SVDFOptionsStart(builder): builder.StartObject(2) +def SVDFOptionsAddRank(builder, rank): builder.PrependInt32Slot(0, rank, 0) +def SVDFOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) +def SVDFOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SelectOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SelectOptions.py new file mode 100644 index 00000000..d67daf36 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SelectOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SelectOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSelectOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SelectOptions() + x.Init(buf, n + offset) + return x + + # SelectOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SelectOptionsStart(builder): builder.StartObject(0) +def SelectOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SequenceRNNOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SequenceRNNOptions.py new file mode 100644 index 00000000..74a4954a --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SequenceRNNOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SequenceRNNOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSequenceRNNOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SequenceRNNOptions() + x.Init(buf, n + offset) + return x + + # SequenceRNNOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SequenceRNNOptions + def TimeMajor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # SequenceRNNOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def SequenceRNNOptionsStart(builder): builder.StartObject(2) +def SequenceRNNOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(0, timeMajor, 0) +def SequenceRNNOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) +def SequenceRNNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ShapeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ShapeOptions.py new file mode 100644 index 00000000..2d24c05f --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ShapeOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ShapeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsShapeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ShapeOptions() + x.Init(buf, n + offset) + return x + + # ShapeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ShapeOptions + def OutType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def ShapeOptionsStart(builder): builder.StartObject(1) +def ShapeOptionsAddOutType(builder, outType): builder.PrependInt8Slot(0, outType, 0) +def ShapeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SkipGramOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SkipGramOptions.py new file mode 100644 index 00000000..0e8bdc1d --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SkipGramOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SkipGramOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSkipGramOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SkipGramOptions() + x.Init(buf, n + offset) + return x + + # SkipGramOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SkipGramOptions + def NgramSize(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # SkipGramOptions + def MaxSkipSize(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # SkipGramOptions + def IncludeAllNgrams(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def SkipGramOptionsStart(builder): builder.StartObject(3) +def SkipGramOptionsAddNgramSize(builder, ngramSize): builder.PrependInt32Slot(0, ngramSize, 0) +def SkipGramOptionsAddMaxSkipSize(builder, maxSkipSize): builder.PrependInt32Slot(1, maxSkipSize, 0) +def SkipGramOptionsAddIncludeAllNgrams(builder, includeAllNgrams): builder.PrependBoolSlot(2, includeAllNgrams, 0) +def SkipGramOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SliceOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SliceOptions.py new file mode 100644 index 00000000..4b41568d --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SliceOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SliceOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSliceOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SliceOptions() + x.Init(buf, n + offset) + return x + + # SliceOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SliceOptionsStart(builder): builder.StartObject(0) +def SliceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SoftmaxOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SoftmaxOptions.py new file mode 100644 index 00000000..a7168534 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SoftmaxOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SoftmaxOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSoftmaxOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SoftmaxOptions() + x.Init(buf, n + offset) + return x + + # SoftmaxOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SoftmaxOptions + def Beta(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + +def SoftmaxOptionsStart(builder): builder.StartObject(1) +def SoftmaxOptionsAddBeta(builder, beta): builder.PrependFloat32Slot(0, beta, 0.0) +def SoftmaxOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SpaceToBatchNDOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SpaceToBatchNDOptions.py new file mode 100644 index 00000000..b61ef96f --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SpaceToBatchNDOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SpaceToBatchNDOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSpaceToBatchNDOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SpaceToBatchNDOptions() + x.Init(buf, n + offset) + return x + + # SpaceToBatchNDOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SpaceToBatchNDOptionsStart(builder): builder.StartObject(0) +def SpaceToBatchNDOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SpaceToDepthOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SpaceToDepthOptions.py new file mode 100644 index 00000000..d571174a --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SpaceToDepthOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SpaceToDepthOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSpaceToDepthOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SpaceToDepthOptions() + x.Init(buf, n + offset) + return x + + # SpaceToDepthOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SpaceToDepthOptions + def BlockSize(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def SpaceToDepthOptionsStart(builder): builder.StartObject(1) +def SpaceToDepthOptionsAddBlockSize(builder, blockSize): builder.PrependInt32Slot(0, blockSize, 0) +def SpaceToDepthOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SparseToDenseOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SparseToDenseOptions.py new file mode 100644 index 00000000..826eee08 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SparseToDenseOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SparseToDenseOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSparseToDenseOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SparseToDenseOptions() + x.Init(buf, n + offset) + return x + + # SparseToDenseOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SparseToDenseOptions + def ValidateIndices(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def SparseToDenseOptionsStart(builder): builder.StartObject(1) +def SparseToDenseOptionsAddValidateIndices(builder, validateIndices): builder.PrependBoolSlot(0, validateIndices, 0) +def SparseToDenseOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SplitOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SplitOptions.py new file mode 100644 index 00000000..3207525b --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SplitOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SplitOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSplitOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SplitOptions() + x.Init(buf, n + offset) + return x + + # SplitOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SplitOptions + def NumSplits(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def SplitOptionsStart(builder): builder.StartObject(1) +def SplitOptionsAddNumSplits(builder, numSplits): builder.PrependInt32Slot(0, numSplits, 0) +def SplitOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SplitVOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SplitVOptions.py new file mode 100644 index 00000000..418959de --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SplitVOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SplitVOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSplitVOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SplitVOptions() + x.Init(buf, n + offset) + return x + + # SplitVOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SplitVOptions + def NumSplits(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def SplitVOptionsStart(builder): builder.StartObject(1) +def SplitVOptionsAddNumSplits(builder, numSplits): builder.PrependInt32Slot(0, numSplits, 0) +def SplitVOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SquareOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SquareOptions.py new file mode 100644 index 00000000..56633f6a --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SquareOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SquareOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSquareOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SquareOptions() + x.Init(buf, n + offset) + return x + + # SquareOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SquareOptionsStart(builder): builder.StartObject(0) +def SquareOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SquaredDifferenceOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SquaredDifferenceOptions.py new file mode 100644 index 00000000..906855d1 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SquaredDifferenceOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SquaredDifferenceOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSquaredDifferenceOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SquaredDifferenceOptions() + x.Init(buf, n + offset) + return x + + # SquaredDifferenceOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SquaredDifferenceOptionsStart(builder): builder.StartObject(0) +def SquaredDifferenceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SqueezeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SqueezeOptions.py new file mode 100644 index 00000000..25b294dc --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SqueezeOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SqueezeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSqueezeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SqueezeOptions() + x.Init(buf, n + offset) + return x + + # SqueezeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SqueezeOptions + def SqueezeDims(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # SqueezeOptions + def SqueezeDimsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # SqueezeOptions + def SqueezeDimsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def SqueezeOptionsStart(builder): builder.StartObject(1) +def SqueezeOptionsAddSqueezeDims(builder, squeezeDims): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(squeezeDims), 0) +def SqueezeOptionsStartSqueezeDimsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SqueezeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/StridedSliceOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/StridedSliceOptions.py new file mode 100644 index 00000000..3bbb36b8 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/StridedSliceOptions.py @@ -0,0 +1,62 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class StridedSliceOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsStridedSliceOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = StridedSliceOptions() + x.Init(buf, n + offset) + return x + + # StridedSliceOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # StridedSliceOptions + def BeginMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # StridedSliceOptions + def EndMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # StridedSliceOptions + def EllipsisMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # StridedSliceOptions + def NewAxisMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # StridedSliceOptions + def ShrinkAxisMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def StridedSliceOptionsStart(builder): builder.StartObject(5) +def StridedSliceOptionsAddBeginMask(builder, beginMask): builder.PrependInt32Slot(0, beginMask, 0) +def StridedSliceOptionsAddEndMask(builder, endMask): builder.PrependInt32Slot(1, endMask, 0) +def StridedSliceOptionsAddEllipsisMask(builder, ellipsisMask): builder.PrependInt32Slot(2, ellipsisMask, 0) +def StridedSliceOptionsAddNewAxisMask(builder, newAxisMask): builder.PrependInt32Slot(3, newAxisMask, 0) +def StridedSliceOptionsAddShrinkAxisMask(builder, shrinkAxisMask): builder.PrependInt32Slot(4, shrinkAxisMask, 0) +def StridedSliceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SubGraph.py b/utensor_cgen/frontend/tflite_flatbuffer/SubGraph.py new file mode 100644 index 00000000..eaa42fac --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SubGraph.py @@ -0,0 +1,122 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SubGraph(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSubGraph(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SubGraph() + x.Init(buf, n + offset) + return x + + # SubGraph + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SubGraph + def Tensors(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .Tensor import Tensor + obj = Tensor() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # SubGraph + def TensorsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # SubGraph + def Inputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # SubGraph + def InputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # SubGraph + def InputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # SubGraph + def Outputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # SubGraph + def OutputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # SubGraph + def OutputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # SubGraph + def Operators(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .Operator import Operator + obj = Operator() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # SubGraph + def OperatorsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # SubGraph + def Name(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + +def SubGraphStart(builder): builder.StartObject(5) +def SubGraphAddTensors(builder, tensors): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(tensors), 0) +def SubGraphStartTensorsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SubGraphAddInputs(builder, inputs): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(inputs), 0) +def SubGraphStartInputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SubGraphAddOutputs(builder, outputs): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(outputs), 0) +def SubGraphStartOutputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SubGraphAddOperators(builder, operators): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(operators), 0) +def SubGraphStartOperatorsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SubGraphAddName(builder, name): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) +def SubGraphEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SubOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SubOptions.py new file mode 100644 index 00000000..eccd7aba --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/SubOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SubOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSubOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SubOptions() + x.Init(buf, n + offset) + return x + + # SubOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SubOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def SubOptionsStart(builder): builder.StartObject(1) +def SubOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def SubOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Tensor.py b/utensor_cgen/frontend/tflite_flatbuffer/Tensor.py new file mode 100644 index 00000000..9b5b8f87 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/Tensor.py @@ -0,0 +1,90 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Tensor(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTensor(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Tensor() + x.Init(buf, n + offset) + return x + + # Tensor + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Tensor + def Shape(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # Tensor + def ShapeAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # Tensor + def ShapeLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Tensor + def Type(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Tensor + def Buffer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + # Tensor + def Name(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Tensor + def Quantization(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + from .QuantizationParameters import QuantizationParameters + obj = QuantizationParameters() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Tensor + def IsVariable(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def TensorStart(builder): builder.StartObject(6) +def TensorAddShape(builder, shape): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(shape), 0) +def TensorStartShapeVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def TensorAddType(builder, type): builder.PrependInt8Slot(1, type, 0) +def TensorAddBuffer(builder, buffer): builder.PrependUint32Slot(2, buffer, 0) +def TensorAddName(builder, name): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) +def TensorAddQuantization(builder, quantization): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(quantization), 0) +def TensorAddIsVariable(builder, isVariable): builder.PrependBoolSlot(5, isVariable, 0) +def TensorEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TensorType.py b/utensor_cgen/frontend/tflite_flatbuffer/TensorType.py new file mode 100644 index 00000000..2455835a --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/TensorType.py @@ -0,0 +1,16 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class TensorType(object): + FLOAT32 = 0 + FLOAT16 = 1 + INT32 = 2 + UINT8 = 3 + INT64 = 4 + STRING = 5 + BOOL = 6 + INT16 = 7 + COMPLEX64 = 8 + INT8 = 9 + diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TileOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/TileOptions.py new file mode 100644 index 00000000..ec8396dc --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/TileOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class TileOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTileOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TileOptions() + x.Init(buf, n + offset) + return x + + # TileOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def TileOptionsStart(builder): builder.StartObject(0) +def TileOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TopKV2Options.py b/utensor_cgen/frontend/tflite_flatbuffer/TopKV2Options.py new file mode 100644 index 00000000..ccd51033 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/TopKV2Options.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class TopKV2Options(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTopKV2Options(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TopKV2Options() + x.Init(buf, n + offset) + return x + + # TopKV2Options + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def TopKV2OptionsStart(builder): builder.StartObject(0) +def TopKV2OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TransposeConvOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/TransposeConvOptions.py new file mode 100644 index 00000000..423571c8 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/TransposeConvOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class TransposeConvOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTransposeConvOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TransposeConvOptions() + x.Init(buf, n + offset) + return x + + # TransposeConvOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # TransposeConvOptions + def Padding(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # TransposeConvOptions + def StrideW(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # TransposeConvOptions + def StrideH(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def TransposeConvOptionsStart(builder): builder.StartObject(3) +def TransposeConvOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) +def TransposeConvOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) +def TransposeConvOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) +def TransposeConvOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TransposeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/TransposeOptions.py new file mode 100644 index 00000000..42c596d9 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/TransposeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class TransposeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTransposeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TransposeOptions() + x.Init(buf, n + offset) + return x + + # TransposeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def TransposeOptionsStart(builder): builder.StartObject(0) +def TransposeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/UnidirectionalSequenceLSTMOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/UnidirectionalSequenceLSTMOptions.py new file mode 100644 index 00000000..1b0c112c --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/UnidirectionalSequenceLSTMOptions.py @@ -0,0 +1,54 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class UnidirectionalSequenceLSTMOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsUnidirectionalSequenceLSTMOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = UnidirectionalSequenceLSTMOptions() + x.Init(buf, n + offset) + return x + + # UnidirectionalSequenceLSTMOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # UnidirectionalSequenceLSTMOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # UnidirectionalSequenceLSTMOptions + def CellClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # UnidirectionalSequenceLSTMOptions + def ProjClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # UnidirectionalSequenceLSTMOptions + def TimeMajor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def UnidirectionalSequenceLSTMOptionsStart(builder): builder.StartObject(4) +def UnidirectionalSequenceLSTMOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def UnidirectionalSequenceLSTMOptionsAddCellClip(builder, cellClip): builder.PrependFloat32Slot(1, cellClip, 0.0) +def UnidirectionalSequenceLSTMOptionsAddProjClip(builder, projClip): builder.PrependFloat32Slot(2, projClip, 0.0) +def UnidirectionalSequenceLSTMOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(3, timeMajor, 0) +def UnidirectionalSequenceLSTMOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/UniqueOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/UniqueOptions.py new file mode 100644 index 00000000..841c6977 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/UniqueOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class UniqueOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsUniqueOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = UniqueOptions() + x.Init(buf, n + offset) + return x + + # UniqueOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # UniqueOptions + def IdxOutType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 2 + +def UniqueOptionsStart(builder): builder.StartObject(1) +def UniqueOptionsAddIdxOutType(builder, idxOutType): builder.PrependInt8Slot(0, idxOutType, 2) +def UniqueOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/UnpackOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/UnpackOptions.py new file mode 100644 index 00000000..eed40193 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/UnpackOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class UnpackOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsUnpackOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = UnpackOptions() + x.Init(buf, n + offset) + return x + + # UnpackOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # UnpackOptions + def Num(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # UnpackOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def UnpackOptionsStart(builder): builder.StartObject(2) +def UnpackOptionsAddNum(builder, num): builder.PrependInt32Slot(0, num, 0) +def UnpackOptionsAddAxis(builder, axis): builder.PrependInt32Slot(1, axis, 0) +def UnpackOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/WhereOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/WhereOptions.py new file mode 100644 index 00000000..ab69f6aa --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/WhereOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class WhereOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsWhereOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = WhereOptions() + x.Init(buf, n + offset) + return x + + # WhereOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def WhereOptionsStart(builder): builder.StartObject(0) +def WhereOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ZerosLikeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ZerosLikeOptions.py new file mode 100644 index 00000000..e6aa9639 --- /dev/null +++ b/utensor_cgen/frontend/tflite_flatbuffer/ZerosLikeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ZerosLikeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsZerosLikeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ZerosLikeOptions() + x.Init(buf, n + offset) + return x + + # ZerosLikeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def ZerosLikeOptionsStart(builder): builder.StartObject(0) +def ZerosLikeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/__init__.py b/utensor_cgen/frontend/tflite_flatbuffer/__init__.py new file mode 100644 index 00000000..e69de29b From 765927356a60105a1c0719f56a4f19ccc986abdb Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Wed, 24 Apr 2019 22:36:12 +0800 Subject: [PATCH 002/117] - verified dependencies are importable - updated Pipfile.lock --- Pipfile | 3 +- utensor_cgen/frontend/tflite.py | 180 ++++++++++++++++---------------- 2 files changed, 93 insertions(+), 90 deletions(-) diff --git a/Pipfile b/Pipfile index 95e51bba..0fdf5036 100644 --- a/Pipfile +++ b/Pipfile @@ -4,7 +4,8 @@ verify_ssl = true name = "pypi" [packages] -"e1839a8" = {path = ".", editable = true} +e1839a8 = {path = ".",editable = true} +flatbuffers = "*" [dev-packages] pylint = "*" diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index e1e17447..be005694 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -10,104 +10,106 @@ from utensor_cgen.utils import topologic_order_graph import flatbuffers -from tflite_flatbuffer.Model import Model +from .tflite_flatbuffer.Model import Model @FrontendSelector.register(target_exts=['.tflite']) class TFLiteParser(Parser): @classmethod def parse(self, pb_file, output_nodes=None): - buf = open(pb_file, 'rb').read() - buf = bytearray(buf) - model = Model.GetRootAsModel(buf, 0) - #TODO: version check - #print(model.Version()) - - assert model.SubgraphsLength() == 1 - subgraph = model.Subgraphs(0) - - #table to convert opcode to op-class - opcode_to_class= [] - for i in range(0, model.OperatorCodesLength()): - op_code = model.OperatorCodes(i) - opcode_to_class.append(op_code) - - #construct lookup objects for builtin ops - from tflite.BuiltinOperator import BuiltinOperator - from tflite.BuiltinOptions import BuiltinOptions - - builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} - op_options = {v: k for k, v in BuiltinOptions.__dict__.items()} - builtin_option_class = self.get_builtin_option_class() - - ugraph = uTensorGraph(output_nodes=output_nodes, - backend="tensorflow") #FIXME: with the proper backend - - #assuming this is the equivalent to ugraph's topological order - for i in range(0, subgraph.OperatorsLength()): - op = subgraph.Operators(i) - opIndex = op.OpcodeIndex() - op_class = opcode_to_class[opIndex] - builtin_code = op_class.BuiltinCode() - op_type = builtin_ops[builtin_code] #op's type in string - - op_attr = dict() - - if(op.CustomOptionsLength() < 1): - option = builtin_option_class[op_type] - builtin_data = op.BuiltinOptions() - option.Init(builtin_data.Bytes, builtin_data.Pos) - op_attr['option'] = option - - if(op_type == 'FULLY_CONNECTED'): - from tflite_flatbuffer.FullyConnectedOptionsWeightsFormat import FullyConnectedOptionsWeightsFormat - w_formats = {v: k for k, v in FullyConnectedOptionsWeightsFormat.__dict__.items()} - op_attr['weights_format'] = w_formats - else: - op_attr['custom_option'] = op.CustomOptionsAsNumpy() - - fb_input_tensors = [subgraph.Tensors(input_idx) for input_idx in op.InputsAsNumpy()] - in_tensors = [TensorInfo(name=tensor.Name(), - ugraph=ugraph, - op_name=tensor.op.name, #FIXME: who the fuck knows - dtype=self.tensor_type_lookup(tensor.Type()), - shape=tensor.ShapeAsNumpy()) - for tensor in fb_input_tensors] - - fb_output_tensors = [subgraph.Tensors(output_idx) for output_idx in op.OutputsAsNumpy()] - out_tensors = [TensorInfo(name=tensor.Name(), - ugraph=ugraph, - op_name=tensor.op.name, #FIXME: who the fuck knows - dtype=self.tensor_type_lookup(tensor.Type()), - shape=tensor.ShapeAsNumpy()) - for tensor in fb_output_tensors] - - node_name = op_type + "_" + i - - op_info = OperationInfo(name=node_name, - input_tensors=in_tensors, - output_tensors=out_tensors, - op_type=op_type, - backend='tensorflow', #FIXME: what should this be? - op_attr=op_attr, - ugraph=ugraph) - - ugraph.ops_info[node_name] = op_info + print("TF Lite Parser") + exit() +# buf = open(pb_file, 'rb').read() +# buf = bytearray(buf) +# model = Model.GetRootAsModel(buf, 0) +# #TODO: version check +# #print(model.Version()) + +# assert model.SubgraphsLength() == 1 +# subgraph = model.Subgraphs(0) + +# #table to convert opcode to op-class +# opcode_to_class= [] +# for i in range(0, model.OperatorCodesLength()): +# op_code = model.OperatorCodes(i) +# opcode_to_class.append(op_code) + +# #construct lookup objects for builtin ops +# from tflite.BuiltinOperator import BuiltinOperator +# from tflite.BuiltinOptions import BuiltinOptions + +# builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} +# op_options = {v: k for k, v in BuiltinOptions.__dict__.items()} +# builtin_option_class = self.get_builtin_option_class() + +# ugraph = uTensorGraph(output_nodes=output_nodes, +# backend="tensorflow") #FIXME: with the proper backend + +# #assuming this is the equivalent to ugraph's topological order +# for i in range(0, subgraph.OperatorsLength()): +# op = subgraph.Operators(i) +# opIndex = op.OpcodeIndex() +# op_class = opcode_to_class[opIndex] +# builtin_code = op_class.BuiltinCode() +# op_type = builtin_ops[builtin_code] #op's type in string + +# node_name = op_type + "_" + i + +# op_attr = dict() + +# if(op.CustomOptionsLength() < 1): +# option = builtin_option_class[op_type] +# builtin_data = op.BuiltinOptions() +# option.Init(builtin_data.Bytes, builtin_data.Pos) +# op_attr['option'] = option + +# if(op_type == 'FULLY_CONNECTED'): +# from tflite_flatbuffer.FullyConnectedOptionsWeightsFormat import FullyConnectedOptionsWeightsFormat +# w_formats = {v: k for k, v in FullyConnectedOptionsWeightsFormat.__dict__.items()} +# op_attr['weights_format'] = w_formats +# else: +# op_attr['custom_option'] = op.CustomOptionsAsNumpy() + +# fb_input_tensors = [subgraph.Tensors(input_idx) for input_idx in op.InputsAsNumpy()] +# in_tensors = [TensorInfo(name=tensor.Name(), +# ugraph=ugraph, +# op_name=tensor.op.name, #FIXME: who the fuck knows +# dtype=self.tensor_type_lookup(tensor.Type()), +# shape=tensor.ShapeAsNumpy()) +# for tensor in fb_input_tensors] + +# fb_output_tensors = [subgraph.Tensors(output_idx) for output_idx in op.OutputsAsNumpy()] +# out_tensors = [TensorInfo(name=tensor.Name(), +# ugraph=ugraph, +# op_name=tensor.op.name, #FIXME: who the fuck knows +# dtype=self.tensor_type_lookup(tensor.Type()), +# shape=tensor.ShapeAsNumpy()) +# for tensor in fb_output_tensors] + +# op_info = OperationInfo(name=node_name, +# input_tensors=in_tensors, +# output_tensors=out_tensors, +# op_type=op_type, +# backend='tensorflow', #FIXME: what should this be? +# op_attr=op_attr, +# ugraph=ugraph) + +# ugraph.ops_info[node_name] = op_info - topologic_order_graph(ugraph) - return ugraph +# topologic_order_graph(ugraph) +# return ugraph - def get_builtin_option_class(self): - from tflite_flatbuffer.FullyConnectedOptions import FullyConnectedOptions - from tflite_flatbuffer.ArgMaxOptions import ArgMaxOptions +# def get_builtin_option_class(self): +# from tflite_flatbuffer.FullyConnectedOptions import FullyConnectedOptions +# from tflite_flatbuffer.ArgMaxOptions import ArgMaxOptions - table = dict() - table['FULLY_CONNECTED'] = FullyConnectedOptions() - table['ARG_MAX'] = ArgMaxOptions() +# table = dict() +# table['FULLY_CONNECTED'] = FullyConnectedOptions() +# table['ARG_MAX'] = ArgMaxOptions() - return table +# return table - def tensor_type_lookup(self, int_type): - #see TensorType.py - return -1 +# def tensor_type_lookup(self, int_type): +# #see TensorType.py +# return -1 From 236ec41d4b5d1b710986c60170ca6a0a0cde4c59 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Fri, 4 Oct 2019 23:35:46 +0800 Subject: [PATCH 003/117] initial commit next: op code --- utensor_cgen/third_party/instruction.md | 26 + utensor_cgen/third_party/schema.fbs | 932 ++++++++++++++++++ utensor_cgen/third_party/tflite/AbsOptions.py | 22 + .../tflite/ActivationFunctionType.py | 12 + .../third_party/tflite/AddNOptions.py | 22 + utensor_cgen/third_party/tflite/AddOptions.py | 30 + .../third_party/tflite/ArgMaxOptions.py | 30 + .../third_party/tflite/ArgMinOptions.py | 30 + .../tflite/BatchToSpaceNDOptions.py | 22 + .../BidirectionalSequenceLSTMOptions.py | 62 ++ .../tflite/BidirectionalSequenceRNNOptions.py | 46 + utensor_cgen/third_party/tflite/Buffer.py | 46 + .../third_party/tflite/BuiltinOperator.py | 128 +++ .../third_party/tflite/BuiltinOptions.py | 103 ++ .../third_party/tflite/CallOptions.py | 30 + .../third_party/tflite/CastOptions.py | 38 + .../third_party/tflite/CombinerType.py | 9 + .../tflite/ConcatEmbeddingsOptions.py | 78 ++ .../tflite/ConcatenationOptions.py | 38 + .../third_party/tflite/Conv2DOptions.py | 70 ++ utensor_cgen/third_party/tflite/CosOptions.py | 22 + .../third_party/tflite/CustomOptionsFormat.py | 7 + .../third_party/tflite/CustomQuantization.py | 46 + .../third_party/tflite/DepthToSpaceOptions.py | 30 + .../tflite/DepthwiseConv2DOptions.py | 78 ++ .../third_party/tflite/DequantizeOptions.py | 22 + utensor_cgen/third_party/tflite/DivOptions.py | 30 + .../tflite/EmbeddingLookupSparseOptions.py | 30 + .../third_party/tflite/EqualOptions.py | 22 + utensor_cgen/third_party/tflite/ExpOptions.py | 22 + .../third_party/tflite/ExpandDimsOptions.py | 22 + .../third_party/tflite/FakeQuantOptions.py | 54 + .../third_party/tflite/FillOptions.py | 22 + .../third_party/tflite/FloorDivOptions.py | 22 + .../third_party/tflite/FloorModOptions.py | 22 + .../tflite/FullyConnectedOptions.py | 46 + .../FullyConnectedOptionsWeightsFormat.py | 8 + .../third_party/tflite/GatherNdOptions.py | 22 + .../third_party/tflite/GatherOptions.py | 30 + .../third_party/tflite/GreaterEqualOptions.py | 22 + .../third_party/tflite/GreaterOptions.py | 22 + .../third_party/tflite/HardSwishOptions.py | 22 + utensor_cgen/third_party/tflite/IfOptions.py | 38 + .../third_party/tflite/L2NormOptions.py | 30 + .../tflite/LSHProjectionOptions.py | 30 + .../third_party/tflite/LSHProjectionType.py | 9 + .../third_party/tflite/LSTMKernelType.py | 8 + .../third_party/tflite/LSTMOptions.py | 54 + .../third_party/tflite/LeakyReluOptions.py | 30 + .../third_party/tflite/LessEqualOptions.py | 22 + .../third_party/tflite/LessOptions.py | 22 + .../LocalResponseNormalizationOptions.py | 54 + .../third_party/tflite/LogSoftmaxOptions.py | 22 + .../third_party/tflite/LogicalAndOptions.py | 22 + .../third_party/tflite/LogicalNotOptions.py | 22 + .../third_party/tflite/LogicalOrOptions.py | 22 + .../third_party/tflite/MatrixDiagOptions.py | 22 + .../tflite/MatrixSetDiagOptions.py | 22 + .../tflite/MaximumMinimumOptions.py | 22 + utensor_cgen/third_party/tflite/Metadata.py | 38 + .../third_party/tflite/MirrorPadMode.py | 8 + .../third_party/tflite/MirrorPadOptions.py | 30 + utensor_cgen/third_party/tflite/Model.py | 150 +++ utensor_cgen/third_party/tflite/MulOptions.py | 30 + utensor_cgen/third_party/tflite/NegOptions.py | 22 + .../tflite/NonMaxSuppressionV4Options.py | 22 + .../tflite/NonMaxSuppressionV5Options.py | 22 + .../third_party/tflite/NotEqualOptions.py | 22 + .../third_party/tflite/OneHotOptions.py | 30 + utensor_cgen/third_party/tflite/Operator.py | 177 ++++ .../third_party/tflite/OperatorCode.py | 46 + .../third_party/tflite/PackOptions.py | 38 + utensor_cgen/third_party/tflite/PadOptions.py | 22 + .../third_party/tflite/PadV2Options.py | 22 + utensor_cgen/third_party/tflite/Padding.py | 8 + .../third_party/tflite/Pool2DOptions.py | 70 ++ utensor_cgen/third_party/tflite/PowOptions.py | 22 + .../third_party/tflite/QuantizationDetails.py | 8 + .../tflite/QuantizationParameters.py | 145 +++ .../third_party/tflite/QuantizeOptions.py | 22 + utensor_cgen/third_party/tflite/RNNOptions.py | 30 + .../third_party/tflite/RangeOptions.py | 22 + .../third_party/tflite/RankOptions.py | 22 + .../third_party/tflite/ReducerOptions.py | 30 + .../third_party/tflite/ReshapeOptions.py | 46 + .../tflite/ResizeBilinearOptions.py | 30 + .../tflite/ResizeNearestNeighborOptions.py | 30 + .../tflite/ReverseSequenceOptions.py | 38 + .../third_party/tflite/ReverseV2Options.py | 22 + .../third_party/tflite/SVDFOptions.py | 38 + .../third_party/tflite/SelectOptions.py | 22 + .../third_party/tflite/SequenceRNNOptions.py | 38 + .../third_party/tflite/ShapeOptions.py | 30 + .../third_party/tflite/SkipGramOptions.py | 46 + .../third_party/tflite/SliceOptions.py | 22 + .../third_party/tflite/SoftmaxOptions.py | 30 + .../tflite/SpaceToBatchNDOptions.py | 22 + .../third_party/tflite/SpaceToDepthOptions.py | 30 + .../tflite/SparseToDenseOptions.py | 30 + .../third_party/tflite/SplitOptions.py | 30 + .../third_party/tflite/SplitVOptions.py | 30 + .../third_party/tflite/SquareOptions.py | 22 + .../tflite/SquaredDifferenceOptions.py | 22 + .../third_party/tflite/SqueezeOptions.py | 46 + .../third_party/tflite/StridedSliceOptions.py | 62 ++ utensor_cgen/third_party/tflite/SubGraph.py | 122 +++ utensor_cgen/third_party/tflite/SubOptions.py | 30 + utensor_cgen/third_party/tflite/Tensor.py | 90 ++ utensor_cgen/third_party/tflite/TensorType.py | 16 + .../third_party/tflite/TileOptions.py | 22 + .../third_party/tflite/TopKV2Options.py | 22 + .../tflite/TransposeConvOptions.py | 46 + .../third_party/tflite/TransposeOptions.py | 22 + .../UnidirectionalSequenceLSTMOptions.py | 54 + .../third_party/tflite/UniqueOptions.py | 30 + .../third_party/tflite/UnpackOptions.py | 38 + .../third_party/tflite/WhereOptions.py | 22 + .../third_party/tflite/WhileOptions.py | 38 + .../third_party/tflite/ZerosLikeOptions.py | 22 + utensor_cgen/third_party/tflite/__init__.py | 0 utensor_cgen/transformer/tflite_exporter.py | 164 +++ 121 files changed, 5330 insertions(+) create mode 100644 utensor_cgen/third_party/instruction.md create mode 100644 utensor_cgen/third_party/schema.fbs create mode 100644 utensor_cgen/third_party/tflite/AbsOptions.py create mode 100644 utensor_cgen/third_party/tflite/ActivationFunctionType.py create mode 100644 utensor_cgen/third_party/tflite/AddNOptions.py create mode 100644 utensor_cgen/third_party/tflite/AddOptions.py create mode 100644 utensor_cgen/third_party/tflite/ArgMaxOptions.py create mode 100644 utensor_cgen/third_party/tflite/ArgMinOptions.py create mode 100644 utensor_cgen/third_party/tflite/BatchToSpaceNDOptions.py create mode 100644 utensor_cgen/third_party/tflite/BidirectionalSequenceLSTMOptions.py create mode 100644 utensor_cgen/third_party/tflite/BidirectionalSequenceRNNOptions.py create mode 100644 utensor_cgen/third_party/tflite/Buffer.py create mode 100644 utensor_cgen/third_party/tflite/BuiltinOperator.py create mode 100644 utensor_cgen/third_party/tflite/BuiltinOptions.py create mode 100644 utensor_cgen/third_party/tflite/CallOptions.py create mode 100644 utensor_cgen/third_party/tflite/CastOptions.py create mode 100644 utensor_cgen/third_party/tflite/CombinerType.py create mode 100644 utensor_cgen/third_party/tflite/ConcatEmbeddingsOptions.py create mode 100644 utensor_cgen/third_party/tflite/ConcatenationOptions.py create mode 100644 utensor_cgen/third_party/tflite/Conv2DOptions.py create mode 100644 utensor_cgen/third_party/tflite/CosOptions.py create mode 100644 utensor_cgen/third_party/tflite/CustomOptionsFormat.py create mode 100644 utensor_cgen/third_party/tflite/CustomQuantization.py create mode 100644 utensor_cgen/third_party/tflite/DepthToSpaceOptions.py create mode 100644 utensor_cgen/third_party/tflite/DepthwiseConv2DOptions.py create mode 100644 utensor_cgen/third_party/tflite/DequantizeOptions.py create mode 100644 utensor_cgen/third_party/tflite/DivOptions.py create mode 100644 utensor_cgen/third_party/tflite/EmbeddingLookupSparseOptions.py create mode 100644 utensor_cgen/third_party/tflite/EqualOptions.py create mode 100644 utensor_cgen/third_party/tflite/ExpOptions.py create mode 100644 utensor_cgen/third_party/tflite/ExpandDimsOptions.py create mode 100644 utensor_cgen/third_party/tflite/FakeQuantOptions.py create mode 100644 utensor_cgen/third_party/tflite/FillOptions.py create mode 100644 utensor_cgen/third_party/tflite/FloorDivOptions.py create mode 100644 utensor_cgen/third_party/tflite/FloorModOptions.py create mode 100644 utensor_cgen/third_party/tflite/FullyConnectedOptions.py create mode 100644 utensor_cgen/third_party/tflite/FullyConnectedOptionsWeightsFormat.py create mode 100644 utensor_cgen/third_party/tflite/GatherNdOptions.py create mode 100644 utensor_cgen/third_party/tflite/GatherOptions.py create mode 100644 utensor_cgen/third_party/tflite/GreaterEqualOptions.py create mode 100644 utensor_cgen/third_party/tflite/GreaterOptions.py create mode 100644 utensor_cgen/third_party/tflite/HardSwishOptions.py create mode 100644 utensor_cgen/third_party/tflite/IfOptions.py create mode 100644 utensor_cgen/third_party/tflite/L2NormOptions.py create mode 100644 utensor_cgen/third_party/tflite/LSHProjectionOptions.py create mode 100644 utensor_cgen/third_party/tflite/LSHProjectionType.py create mode 100644 utensor_cgen/third_party/tflite/LSTMKernelType.py create mode 100644 utensor_cgen/third_party/tflite/LSTMOptions.py create mode 100644 utensor_cgen/third_party/tflite/LeakyReluOptions.py create mode 100644 utensor_cgen/third_party/tflite/LessEqualOptions.py create mode 100644 utensor_cgen/third_party/tflite/LessOptions.py create mode 100644 utensor_cgen/third_party/tflite/LocalResponseNormalizationOptions.py create mode 100644 utensor_cgen/third_party/tflite/LogSoftmaxOptions.py create mode 100644 utensor_cgen/third_party/tflite/LogicalAndOptions.py create mode 100644 utensor_cgen/third_party/tflite/LogicalNotOptions.py create mode 100644 utensor_cgen/third_party/tflite/LogicalOrOptions.py create mode 100644 utensor_cgen/third_party/tflite/MatrixDiagOptions.py create mode 100644 utensor_cgen/third_party/tflite/MatrixSetDiagOptions.py create mode 100644 utensor_cgen/third_party/tflite/MaximumMinimumOptions.py create mode 100644 utensor_cgen/third_party/tflite/Metadata.py create mode 100644 utensor_cgen/third_party/tflite/MirrorPadMode.py create mode 100644 utensor_cgen/third_party/tflite/MirrorPadOptions.py create mode 100644 utensor_cgen/third_party/tflite/Model.py create mode 100644 utensor_cgen/third_party/tflite/MulOptions.py create mode 100644 utensor_cgen/third_party/tflite/NegOptions.py create mode 100644 utensor_cgen/third_party/tflite/NonMaxSuppressionV4Options.py create mode 100644 utensor_cgen/third_party/tflite/NonMaxSuppressionV5Options.py create mode 100644 utensor_cgen/third_party/tflite/NotEqualOptions.py create mode 100644 utensor_cgen/third_party/tflite/OneHotOptions.py create mode 100644 utensor_cgen/third_party/tflite/Operator.py create mode 100644 utensor_cgen/third_party/tflite/OperatorCode.py create mode 100644 utensor_cgen/third_party/tflite/PackOptions.py create mode 100644 utensor_cgen/third_party/tflite/PadOptions.py create mode 100644 utensor_cgen/third_party/tflite/PadV2Options.py create mode 100644 utensor_cgen/third_party/tflite/Padding.py create mode 100644 utensor_cgen/third_party/tflite/Pool2DOptions.py create mode 100644 utensor_cgen/third_party/tflite/PowOptions.py create mode 100644 utensor_cgen/third_party/tflite/QuantizationDetails.py create mode 100644 utensor_cgen/third_party/tflite/QuantizationParameters.py create mode 100644 utensor_cgen/third_party/tflite/QuantizeOptions.py create mode 100644 utensor_cgen/third_party/tflite/RNNOptions.py create mode 100644 utensor_cgen/third_party/tflite/RangeOptions.py create mode 100644 utensor_cgen/third_party/tflite/RankOptions.py create mode 100644 utensor_cgen/third_party/tflite/ReducerOptions.py create mode 100644 utensor_cgen/third_party/tflite/ReshapeOptions.py create mode 100644 utensor_cgen/third_party/tflite/ResizeBilinearOptions.py create mode 100644 utensor_cgen/third_party/tflite/ResizeNearestNeighborOptions.py create mode 100644 utensor_cgen/third_party/tflite/ReverseSequenceOptions.py create mode 100644 utensor_cgen/third_party/tflite/ReverseV2Options.py create mode 100644 utensor_cgen/third_party/tflite/SVDFOptions.py create mode 100644 utensor_cgen/third_party/tflite/SelectOptions.py create mode 100644 utensor_cgen/third_party/tflite/SequenceRNNOptions.py create mode 100644 utensor_cgen/third_party/tflite/ShapeOptions.py create mode 100644 utensor_cgen/third_party/tflite/SkipGramOptions.py create mode 100644 utensor_cgen/third_party/tflite/SliceOptions.py create mode 100644 utensor_cgen/third_party/tflite/SoftmaxOptions.py create mode 100644 utensor_cgen/third_party/tflite/SpaceToBatchNDOptions.py create mode 100644 utensor_cgen/third_party/tflite/SpaceToDepthOptions.py create mode 100644 utensor_cgen/third_party/tflite/SparseToDenseOptions.py create mode 100644 utensor_cgen/third_party/tflite/SplitOptions.py create mode 100644 utensor_cgen/third_party/tflite/SplitVOptions.py create mode 100644 utensor_cgen/third_party/tflite/SquareOptions.py create mode 100644 utensor_cgen/third_party/tflite/SquaredDifferenceOptions.py create mode 100644 utensor_cgen/third_party/tflite/SqueezeOptions.py create mode 100644 utensor_cgen/third_party/tflite/StridedSliceOptions.py create mode 100644 utensor_cgen/third_party/tflite/SubGraph.py create mode 100644 utensor_cgen/third_party/tflite/SubOptions.py create mode 100644 utensor_cgen/third_party/tflite/Tensor.py create mode 100644 utensor_cgen/third_party/tflite/TensorType.py create mode 100644 utensor_cgen/third_party/tflite/TileOptions.py create mode 100644 utensor_cgen/third_party/tflite/TopKV2Options.py create mode 100644 utensor_cgen/third_party/tflite/TransposeConvOptions.py create mode 100644 utensor_cgen/third_party/tflite/TransposeOptions.py create mode 100644 utensor_cgen/third_party/tflite/UnidirectionalSequenceLSTMOptions.py create mode 100644 utensor_cgen/third_party/tflite/UniqueOptions.py create mode 100644 utensor_cgen/third_party/tflite/UnpackOptions.py create mode 100644 utensor_cgen/third_party/tflite/WhereOptions.py create mode 100644 utensor_cgen/third_party/tflite/WhileOptions.py create mode 100644 utensor_cgen/third_party/tflite/ZerosLikeOptions.py create mode 100644 utensor_cgen/third_party/tflite/__init__.py create mode 100644 utensor_cgen/transformer/tflite_exporter.py diff --git a/utensor_cgen/third_party/instruction.md b/utensor_cgen/third_party/instruction.md new file mode 100644 index 00000000..eed0b7da --- /dev/null +++ b/utensor_cgen/third_party/instruction.md @@ -0,0 +1,26 @@ +# Instructions for generating Tensorflow Lite flatbuffer API + +## Building flatc +Visit the Flatbuffer repository +Tutorials are here + +``` +git clone https://github.com/google/flatbuffers +cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release +make +``` + +Add `flac` to your .bash_profile + +``` +alias flac=`~/PATH/TO/flatbuffers/flatc` +``` + + +## Generate TF Lite schema + +``` +wget https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/lite/schema/schema.fbs +pip install flatbuffers +flatc -p schema.fbs +``` \ No newline at end of file diff --git a/utensor_cgen/third_party/schema.fbs b/utensor_cgen/third_party/schema.fbs new file mode 100644 index 00000000..2a7c2228 --- /dev/null +++ b/utensor_cgen/third_party/schema.fbs @@ -0,0 +1,932 @@ +// Copyright 2017 The TensorFlow Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Revision History +// Version 0: Initial version. +// Version 1: Add subgraphs to schema. +// Version 2: Rename operators to conform to NN API. +// Version 3: Move buffer data from Model.Subgraph.Tensors to Model.Buffers. + +namespace tflite; + +// This corresponds to the version. +file_identifier "TFL3"; +// File extension of any written files. +file_extension "tflite"; + +// IMPORTANT: All new members of tables, enums and unions must be added at the +// end to ensure backwards compatibility. + +// The type of data stored in a tensor. +enum TensorType : byte { + FLOAT32 = 0, + FLOAT16 = 1, + INT32 = 2, + UINT8 = 3, + INT64 = 4, + STRING = 5, + BOOL = 6, + INT16 = 7, + COMPLEX64 = 8, + INT8 = 9, +} + +// Custom quantization parameters for experimenting with new quantization +// techniques. +table CustomQuantization { + custom:[ubyte] (force_align: 16); +} + +// Represents a specific quantization technique's parameters. +union QuantizationDetails { + CustomQuantization, +} + +// Parameters for converting a quantized tensor back to float. +table QuantizationParameters { + // These four parameters are the asymmetric linear quantization parameters. + // Given a quantized value q, the corresponding float value f should be: + // f = scale * (q - zero_point) + // For other quantization types, the QuantizationDetails below is used. + min:[float]; // For importing back into tensorflow. + max:[float]; // For importing back into tensorflow. + scale:[float]; // For dequantizing the tensor's values. + zero_point:[long]; + + // If this is not none, the other quantization parameters (i.e. min, max, + // scale, zero_point fields above) are ignored and the value of the + // QuantizationDetails union should be used. + details:QuantizationDetails; + + // Specifies the dimension of the Tensor's shape that the scales and + // zero_points correspond to. For example, a tensor t, with dims=[4, 3, 2, 1] + // with quantization params: + // scale=[1.0, 2.0, 3.0], zero_point=[1, 2, 3], quantization_dimension=1 + // will be quantized across the second dimension of t. + // t[:, 0, :, :] will have scale[0]=1.0, zero_point[0]=1 + // t[:, 1, :, :] will have scale[1]=2.0, zero_point[0]=2 + // t[:, 2, :, :] will have scale[2]=3.0, zero_point[0]=3 + quantized_dimension:int; +} + +table Tensor { + // The tensor shape. The meaning of each entry is operator-specific but + // builtin ops use: [batch size, height, width, number of channels] (That's + // Tensorflow's NHWC). + shape:[int]; + type:TensorType; + // An index that refers to the buffers table at the root of the model. Or, + // if there is no data buffer associated (i.e. intermediate results), then + // this is 0 (which refers to an always existent empty buffer). + // + // The data_buffer itself is an opaque container, with the assumption that the + // target device is little-endian. In addition, all builtin operators assume + // the memory is ordered such that if `shape` is [4, 3, 2], then index + // [i, j, k] maps to data_buffer[i*3*2 + j*2 + k]. + buffer:uint; + name:string; // For debugging and importing back into tensorflow. + quantization:QuantizationParameters; // Optional. + + is_variable:bool = false; +} + +// A list of builtin operators. Builtin operators are slightly faster than custom +// ones, but not by much. Moreover, while custom operators accept an opaque +// object containing configuration parameters, builtins have a predetermined +// set of acceptable options. +enum BuiltinOperator : byte { + ADD = 0, + AVERAGE_POOL_2D = 1, + CONCATENATION = 2, + CONV_2D = 3, + DEPTHWISE_CONV_2D = 4, + DEPTH_TO_SPACE = 5, + DEQUANTIZE = 6, + EMBEDDING_LOOKUP = 7, + FLOOR = 8, + FULLY_CONNECTED = 9, + HASHTABLE_LOOKUP = 10, + L2_NORMALIZATION = 11, + L2_POOL_2D = 12, + LOCAL_RESPONSE_NORMALIZATION = 13, + LOGISTIC = 14, + LSH_PROJECTION = 15, + LSTM = 16, + MAX_POOL_2D = 17, + MUL = 18, + RELU = 19, + // NOTE(aselle): RELU_N1_TO_1 used to be called RELU1, but it was renamed + // since different model developers use RELU1 in different ways. Never + // create another op called RELU1. + RELU_N1_TO_1 = 20, + RELU6 = 21, + RESHAPE = 22, + RESIZE_BILINEAR = 23, + RNN = 24, + SOFTMAX = 25, + SPACE_TO_DEPTH = 26, + SVDF = 27, + TANH = 28, + // TODO(aselle): Consider rename to CONCATENATE_EMBEDDINGS + CONCAT_EMBEDDINGS = 29, + SKIP_GRAM = 30, + CALL = 31, + CUSTOM = 32, + EMBEDDING_LOOKUP_SPARSE = 33, + PAD = 34, + UNIDIRECTIONAL_SEQUENCE_RNN = 35, + GATHER = 36, + BATCH_TO_SPACE_ND = 37, + SPACE_TO_BATCH_ND = 38, + TRANSPOSE = 39, + MEAN = 40, + SUB = 41, + DIV = 42, + SQUEEZE = 43, + UNIDIRECTIONAL_SEQUENCE_LSTM = 44, + STRIDED_SLICE = 45, + BIDIRECTIONAL_SEQUENCE_RNN = 46, + EXP = 47, + TOPK_V2 = 48, + SPLIT = 49, + LOG_SOFTMAX = 50, + // DELEGATE is a special op type for the operations which are delegated to + // other backends. + // WARNING: Experimental interface, subject to change + DELEGATE = 51, + BIDIRECTIONAL_SEQUENCE_LSTM = 52, + CAST = 53, + PRELU = 54, + MAXIMUM = 55, + ARG_MAX = 56, + MINIMUM = 57, + LESS = 58, + NEG = 59, + PADV2 = 60, + GREATER = 61, + GREATER_EQUAL = 62, + LESS_EQUAL = 63, + SELECT = 64, + SLICE = 65, + SIN = 66, + TRANSPOSE_CONV = 67, + SPARSE_TO_DENSE = 68, + TILE = 69, + EXPAND_DIMS = 70, + EQUAL = 71, + NOT_EQUAL = 72, + LOG = 73, + SUM = 74, + SQRT = 75, + RSQRT = 76, + SHAPE = 77, + POW = 78, + ARG_MIN = 79, + FAKE_QUANT = 80, + REDUCE_PROD = 81, + REDUCE_MAX = 82, + PACK = 83, + LOGICAL_OR = 84, + ONE_HOT = 85, + LOGICAL_AND = 86, + LOGICAL_NOT = 87, + UNPACK = 88, + REDUCE_MIN = 89, + FLOOR_DIV = 90, + REDUCE_ANY = 91, + SQUARE = 92, + ZEROS_LIKE = 93, + FILL = 94, + FLOOR_MOD = 95, + RANGE = 96, + RESIZE_NEAREST_NEIGHBOR = 97, + LEAKY_RELU = 98, + SQUARED_DIFFERENCE = 99, + MIRROR_PAD = 100, + ABS = 101, + SPLIT_V = 102, + UNIQUE = 103, + CEIL = 104, + REVERSE_V2 = 105, + ADD_N = 106, + GATHER_ND = 107, + COS = 108, + WHERE = 109, + RANK = 110, + ELU = 111, + REVERSE_SEQUENCE = 112, + MATRIX_DIAG = 113, + QUANTIZE = 114, + MATRIX_SET_DIAG = 115, + ROUND = 116, + HARD_SWISH = 117, + IF = 118, + WHILE = 119, + NON_MAX_SUPPRESSION_V4 = 120, + NON_MAX_SUPPRESSION_V5 = 121, +} + +// Options for the builtin operators. +union BuiltinOptions { + Conv2DOptions, + DepthwiseConv2DOptions, + ConcatEmbeddingsOptions, + LSHProjectionOptions, + Pool2DOptions, + SVDFOptions, + RNNOptions, + FullyConnectedOptions, + SoftmaxOptions, + ConcatenationOptions, + AddOptions, + L2NormOptions, + LocalResponseNormalizationOptions, + LSTMOptions, + ResizeBilinearOptions, + CallOptions, + ReshapeOptions, + SkipGramOptions, + SpaceToDepthOptions, + EmbeddingLookupSparseOptions, + MulOptions, + PadOptions, + GatherOptions, + BatchToSpaceNDOptions, + SpaceToBatchNDOptions, + TransposeOptions, + ReducerOptions, + SubOptions, + DivOptions, + SqueezeOptions, + SequenceRNNOptions, + StridedSliceOptions, + ExpOptions, + TopKV2Options, + SplitOptions, + LogSoftmaxOptions, + CastOptions, + DequantizeOptions, + MaximumMinimumOptions, + ArgMaxOptions, + LessOptions, + NegOptions, + PadV2Options, + GreaterOptions, + GreaterEqualOptions, + LessEqualOptions, + SelectOptions, + SliceOptions, + TransposeConvOptions, + SparseToDenseOptions, + TileOptions, + ExpandDimsOptions, + EqualOptions, + NotEqualOptions, + ShapeOptions, + PowOptions, + ArgMinOptions, + FakeQuantOptions, + PackOptions, + LogicalOrOptions, + OneHotOptions, + LogicalAndOptions, + LogicalNotOptions, + UnpackOptions, + FloorDivOptions, + SquareOptions, + ZerosLikeOptions, + FillOptions, + BidirectionalSequenceLSTMOptions, + BidirectionalSequenceRNNOptions, + UnidirectionalSequenceLSTMOptions, + FloorModOptions, + RangeOptions, + ResizeNearestNeighborOptions, + LeakyReluOptions, + SquaredDifferenceOptions, + MirrorPadOptions, + AbsOptions, + SplitVOptions, + UniqueOptions, + ReverseV2Options, + AddNOptions, + GatherNdOptions, + CosOptions, + WhereOptions, + RankOptions, + ReverseSequenceOptions, + MatrixDiagOptions, + QuantizeOptions, + MatrixSetDiagOptions, + HardSwishOptions, + IfOptions, + WhileOptions, + DepthToSpaceOptions, + NonMaxSuppressionV4Options, + NonMaxSuppressionV5Options +} + +enum Padding : byte { SAME, VALID } + +enum ActivationFunctionType : byte { + NONE = 0, + RELU = 1, + RELU_N1_TO_1 = 2, + RELU6 = 3, + TANH = 4, + SIGN_BIT = 5, +} + +table Conv2DOptions { + padding:Padding; + stride_w:int; + stride_h:int; + fused_activation_function:ActivationFunctionType; + dilation_w_factor:int = 1; + dilation_h_factor:int = 1; +} + +table Pool2DOptions { + padding:Padding; + stride_w:int; + stride_h:int; + filter_width:int; + filter_height:int; + fused_activation_function:ActivationFunctionType; +} + +table DepthwiseConv2DOptions { + // Parameters for DepthwiseConv version 1 or above. + padding:Padding; + stride_w:int; + stride_h:int; + depth_multiplier:int; + fused_activation_function:ActivationFunctionType; + // Parameters for DepthwiseConv version 2 or above. + dilation_w_factor:int = 1; + dilation_h_factor:int = 1; +} + +table ConcatEmbeddingsOptions { + num_channels:int; + num_columns_per_channel:[int]; + embedding_dim_per_channel:[int]; // This could be inferred from parameters. +} + +enum LSHProjectionType: byte { + UNKNOWN = 0, + SPARSE = 1, + DENSE = 2, +} + +table LSHProjectionOptions { + type: LSHProjectionType; +} + +table SVDFOptions { + rank:int; + fused_activation_function:ActivationFunctionType; +} + +// An implementation of TensorFlow RNNCell. +table RNNOptions { + fused_activation_function:ActivationFunctionType; +} + +// An implementation of TensorFlow dynamic_rnn with RNNCell. +table SequenceRNNOptions { + time_major:bool; + fused_activation_function:ActivationFunctionType; +} + +// An implementation of TensorFlow bidrectional_dynamic_rnn with RNNCell. +table BidirectionalSequenceRNNOptions { + time_major:bool; + fused_activation_function:ActivationFunctionType; + merge_outputs: bool; +} + +enum FullyConnectedOptionsWeightsFormat: byte { + DEFAULT = 0, + SHUFFLED4x16INT8 = 1, +} + +// An implementation of TensorFlow fully_connected (a.k.a Dense) layer. +table FullyConnectedOptions { + // Parameters for FullyConnected version 1 or above. + fused_activation_function:ActivationFunctionType; + + // Parameters for FullyConnected version 2 or above. + weights_format:FullyConnectedOptionsWeightsFormat = DEFAULT; + + // Parameters for FullyConnected version 5 or above. + // If set to true, then the number of dimension is preserved. Furthermore, + // all but the last dimension of the input and output shapes will be equal. + keep_num_dims: bool; +} + +table SoftmaxOptions { + beta: float; +} + +// An implementation of TensorFlow concat. +table ConcatenationOptions { + axis:int; + fused_activation_function:ActivationFunctionType; +} + +table AddOptions { + fused_activation_function:ActivationFunctionType; +} + +table MulOptions { + fused_activation_function:ActivationFunctionType; +} + +table L2NormOptions { + fused_activation_function:ActivationFunctionType; +} + +table LocalResponseNormalizationOptions { + radius:int; + bias:float; + alpha:float; + beta:float; +} + +enum LSTMKernelType : byte { + // Full LSTM kernel which supports peephole and projection. + FULL = 0, + // Basic LSTM kernels. Equivalent to TensorFlow BasicLSTMCell. + BASIC = 1, +} + +// An implementation of TensorFlow LSTMCell and CoupledInputForgetGateLSTMCell +table LSTMOptions { + // Parameters for LSTM version 1 or above. + fused_activation_function:ActivationFunctionType; + cell_clip: float; // Optional, 0.0 means no clipping + proj_clip: float; // Optional, 0.0 means no clipping + + // Parameters for LSTM version 2 or above. + // Basic kernel is only supported in version 2 or above. + kernel_type: LSTMKernelType = FULL; +} + +// An implementation of TensorFlow dynamic_rnn with LSTMCell. +table UnidirectionalSequenceLSTMOptions { + fused_activation_function:ActivationFunctionType; + cell_clip: float; // Optional, 0.0 means no clipping + proj_clip: float; // Optional, 0.0 means no clipping + + // If true then first dimension is sequence, otherwise batch. + time_major:bool; +} + +table BidirectionalSequenceLSTMOptions { + // Parameters supported by version 1: + fused_activation_function:ActivationFunctionType; + cell_clip: float; // Optional, 0.0 means no clipping + proj_clip: float; // Optional, 0.0 means no clipping + + // If true, store the outputs of both directions into the first output. + merge_outputs: bool; + + // Parameters supported by version 2: + // If true then first dimension is sequence, otherwise batch. + // Version 1 implementations assumed time_major to be true, so this default + // value should never change. + time_major: bool = true; +} + +table ResizeBilinearOptions { + new_height: int (deprecated); + new_width: int (deprecated); + align_corners: bool; +} + +table ResizeNearestNeighborOptions { + align_corners: bool; +} + +// A call operation options +table CallOptions { + // The subgraph index that needs to be called. + subgraph:uint; +} + +table PadOptions { +} + +table PadV2Options { +} + +table ReshapeOptions { + new_shape:[int]; +} + +table SpaceToBatchNDOptions { +} + +table BatchToSpaceNDOptions { +} + +table SkipGramOptions { + ngram_size: int; + max_skip_size: int; + include_all_ngrams: bool; +} + +table SpaceToDepthOptions { + block_size: int; +} + +table DepthToSpaceOptions { + block_size: int; +} + +table SubOptions { + fused_activation_function:ActivationFunctionType; +} + +table DivOptions { + fused_activation_function:ActivationFunctionType; +} + +table TopKV2Options { +} + +enum CombinerType : byte { + SUM = 0, + MEAN = 1, + SQRTN = 2, +} + +table EmbeddingLookupSparseOptions { + combiner:CombinerType; +} + +table GatherOptions { + axis: int; +} + +table TransposeOptions { +} + +table ExpOptions { +} + +table CosOptions { +} + +table ReducerOptions { + keep_dims: bool; +} + +table SqueezeOptions { + squeeze_dims:[int]; +} + +table SplitOptions { + num_splits: int; +} + +table SplitVOptions { + num_splits: int; +} + +table StridedSliceOptions { + begin_mask: int; + end_mask: int; + ellipsis_mask: int; + new_axis_mask: int; + shrink_axis_mask: int; +} + +table LogSoftmaxOptions { +} + +table CastOptions { + in_data_type: TensorType; + out_data_type: TensorType; +} + +table DequantizeOptions { +} + +table MaximumMinimumOptions { +} + +table TileOptions { +} + +table ArgMaxOptions { + output_type : TensorType; +} + +table ArgMinOptions { + output_type : TensorType; +} + +table GreaterOptions { +} + +table GreaterEqualOptions { +} + +table LessOptions { +} + +table LessEqualOptions { +} + +table NegOptions { +} + +table SelectOptions { +} + +table SliceOptions { +} + +table TransposeConvOptions { + padding:Padding; + stride_w:int; + stride_h:int; +} + +table ExpandDimsOptions { +} + +table SparseToDenseOptions { + validate_indices:bool; +} + +table EqualOptions { +} + +table NotEqualOptions { +} + +table ShapeOptions { + // Optional output type of the operation (int32 or int64). Defaults to int32. + out_type : TensorType; +} + +table RankOptions { +} + +table PowOptions { +} + +table FakeQuantOptions { + // Parameters supported by version 1: + min:float; + max:float; + num_bits:int; + + // Parameters supported by version 2: + narrow_range:bool; +} + +table PackOptions { + values_count:int; + axis:int; +} + +table LogicalOrOptions { +} + +table OneHotOptions { + axis:int; +} + +table AbsOptions { +} + + +table HardSwishOptions { +} + +table LogicalAndOptions { +} + +table LogicalNotOptions { +} + +table UnpackOptions { + num:int; + axis:int; +} + +table FloorDivOptions { +} + +table SquareOptions { +} + +table ZerosLikeOptions { +} + +table FillOptions { +} + +table FloorModOptions { +} + +table RangeOptions { +} + +table LeakyReluOptions { + alpha:float; +} + +table SquaredDifferenceOptions { +} + +enum MirrorPadMode : byte { + // Doesn't include borders. + REFLECT = 0, + // Includes borders. + SYMMETRIC = 1, +} + +table MirrorPadOptions { + mode:MirrorPadMode; +} + +table UniqueOptions { + idx_out_type:TensorType = INT32; +} + +table ReverseV2Options { +} + +table AddNOptions { +} + +table GatherNdOptions { +} + +table WhereOptions { +} + +table ReverseSequenceOptions { + seq_dim:int; + batch_dim:int = 0; +} + +table MatrixDiagOptions { +} + +table QuantizeOptions { +} + +table MatrixSetDiagOptions { +} + +table IfOptions { + then_subgraph_index:int; + else_subgraph_index:int; +} + +table WhileOptions { + cond_subgraph_index:int; + body_subgraph_index:int; +} + +table NonMaxSuppressionV4Options { +} + +table NonMaxSuppressionV5Options { +} + +// An OperatorCode can be an enum value (BuiltinOperator) if the operator is a +// builtin, or a string if the operator is custom. +table OperatorCode { + builtin_code:BuiltinOperator; + custom_code:string; + + // The version of the operator. The version need to be bumped whenever new + // parameters are introduced into an op. + version:int = 1; +} + +enum CustomOptionsFormat : byte { + FLEXBUFFERS = 0, +} + +// An operator takes tensors as inputs and outputs. The type of operation being +// performed is determined by an index into the list of valid OperatorCodes, +// while the specifics of each operations is configured using builtin_options +// or custom_options. +table Operator { + // Index into the operator_codes array. Using an integer here avoids + // complicate map lookups. + opcode_index:uint; + + // Optional input and output tensors are indicated by -1. + inputs:[int]; + outputs:[int]; + + builtin_options:BuiltinOptions; + custom_options:[ubyte]; + custom_options_format:CustomOptionsFormat; + + // A list of booleans indicating the input tensors which are being mutated by + // this operator.(e.g. used by RNN and LSTM). + // For example, if the "inputs" array refers to 5 tensors and the second and + // fifth are mutable variables, then this list will contain + // [false, true, false, false, true]. + // + // If the list is empty, no variable is mutated in this operator. + // The list either has the same length as `inputs`, or is empty. + mutating_variable_inputs:[bool]; + + // A list of indices to the subgraph's "tensors" that are internal to an Op. + // Internal tensors are those that do not flow in or out of the operation, + // but instead are part of internal computation. As such, the operation's + // implementation may manage its memory more efficiently. They are needed + // however (i.e. not just an implementation detail) since they are part of the + // computation, which may require relevant metadata such as quantization + // parameters. + intermediates:[int]; +} + +// The root type, defining a subgraph, which typically represents an entire +// model. +table SubGraph { + // A list of all tensors used in this subgraph. + tensors:[Tensor]; + + // Indices of the tensors that are inputs into this subgraph. Note this is + // the list of non-static tensors that feed into the subgraph for inference. + inputs:[int]; + + // Indices of the tensors that are outputs out of this subgraph. Note this is + // the list of output tensors that are considered the product of the + // subgraph's inference. + outputs:[int]; + + // All operators, in execution order. + operators:[Operator]; + + // Name of this subgraph (used for debugging). + name:string; +} + +// Table of raw data buffers (used for constant tensors). Referenced by tensors +// by index. The generous alignment accommodates mmap-friendly data structures. +table Buffer { + data:[ubyte] (force_align: 16); +} + +table Metadata { + // A human readable string to uniquely identify a Metadata. + name:string; + // An index to the buffers table. + buffer:uint; +} + +table Model { + // Version of the schema. + version:uint; + + // A list of all operator codes used in this model. This is + // kept in order because operators carry an index into this + // vector. + operator_codes:[OperatorCode]; + + // All the subgraphs of the model. The 0th is assumed to be the main + // model. + subgraphs:[SubGraph]; + + // A description of the model. + description:string; + + // Buffers of the model. + // Note the 0th entry of this array must be an empty buffer (sentinel). + // This is a convention so that tensors without a buffer can provide 0 as + // their buffer. + buffers:[Buffer]; + + // Metadata about the model. Indirects into the existings buffers list. + // Deprecated, prefer to use metadata field. + metadata_buffer:[int]; + + // Metadata about the model. + metadata:[Metadata]; +} + +root_type Model; diff --git a/utensor_cgen/third_party/tflite/AbsOptions.py b/utensor_cgen/third_party/tflite/AbsOptions.py new file mode 100644 index 00000000..0cbfb8c0 --- /dev/null +++ b/utensor_cgen/third_party/tflite/AbsOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class AbsOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsAbsOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = AbsOptions() + x.Init(buf, n + offset) + return x + + # AbsOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def AbsOptionsStart(builder): builder.StartObject(0) +def AbsOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ActivationFunctionType.py b/utensor_cgen/third_party/tflite/ActivationFunctionType.py new file mode 100644 index 00000000..dc177dee --- /dev/null +++ b/utensor_cgen/third_party/tflite/ActivationFunctionType.py @@ -0,0 +1,12 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class ActivationFunctionType(object): + NONE = 0 + RELU = 1 + RELU_N1_TO_1 = 2 + RELU6 = 3 + TANH = 4 + SIGN_BIT = 5 + diff --git a/utensor_cgen/third_party/tflite/AddNOptions.py b/utensor_cgen/third_party/tflite/AddNOptions.py new file mode 100644 index 00000000..b5c2ddb7 --- /dev/null +++ b/utensor_cgen/third_party/tflite/AddNOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class AddNOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsAddNOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = AddNOptions() + x.Init(buf, n + offset) + return x + + # AddNOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def AddNOptionsStart(builder): builder.StartObject(0) +def AddNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/AddOptions.py b/utensor_cgen/third_party/tflite/AddOptions.py new file mode 100644 index 00000000..d6cbfcf5 --- /dev/null +++ b/utensor_cgen/third_party/tflite/AddOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class AddOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsAddOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = AddOptions() + x.Init(buf, n + offset) + return x + + # AddOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # AddOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def AddOptionsStart(builder): builder.StartObject(1) +def AddOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def AddOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ArgMaxOptions.py b/utensor_cgen/third_party/tflite/ArgMaxOptions.py new file mode 100644 index 00000000..fbf1415e --- /dev/null +++ b/utensor_cgen/third_party/tflite/ArgMaxOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ArgMaxOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsArgMaxOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ArgMaxOptions() + x.Init(buf, n + offset) + return x + + # ArgMaxOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ArgMaxOptions + def OutputType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def ArgMaxOptionsStart(builder): builder.StartObject(1) +def ArgMaxOptionsAddOutputType(builder, outputType): builder.PrependInt8Slot(0, outputType, 0) +def ArgMaxOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ArgMinOptions.py b/utensor_cgen/third_party/tflite/ArgMinOptions.py new file mode 100644 index 00000000..120fdca2 --- /dev/null +++ b/utensor_cgen/third_party/tflite/ArgMinOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ArgMinOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsArgMinOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ArgMinOptions() + x.Init(buf, n + offset) + return x + + # ArgMinOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ArgMinOptions + def OutputType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def ArgMinOptionsStart(builder): builder.StartObject(1) +def ArgMinOptionsAddOutputType(builder, outputType): builder.PrependInt8Slot(0, outputType, 0) +def ArgMinOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/BatchToSpaceNDOptions.py b/utensor_cgen/third_party/tflite/BatchToSpaceNDOptions.py new file mode 100644 index 00000000..3ddcfd3f --- /dev/null +++ b/utensor_cgen/third_party/tflite/BatchToSpaceNDOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class BatchToSpaceNDOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsBatchToSpaceNDOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = BatchToSpaceNDOptions() + x.Init(buf, n + offset) + return x + + # BatchToSpaceNDOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def BatchToSpaceNDOptionsStart(builder): builder.StartObject(0) +def BatchToSpaceNDOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/BidirectionalSequenceLSTMOptions.py b/utensor_cgen/third_party/tflite/BidirectionalSequenceLSTMOptions.py new file mode 100644 index 00000000..8d8b7bea --- /dev/null +++ b/utensor_cgen/third_party/tflite/BidirectionalSequenceLSTMOptions.py @@ -0,0 +1,62 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class BidirectionalSequenceLSTMOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsBidirectionalSequenceLSTMOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = BidirectionalSequenceLSTMOptions() + x.Init(buf, n + offset) + return x + + # BidirectionalSequenceLSTMOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # BidirectionalSequenceLSTMOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # BidirectionalSequenceLSTMOptions + def CellClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # BidirectionalSequenceLSTMOptions + def ProjClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # BidirectionalSequenceLSTMOptions + def MergeOutputs(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # BidirectionalSequenceLSTMOptions + def TimeMajor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return True + +def BidirectionalSequenceLSTMOptionsStart(builder): builder.StartObject(5) +def BidirectionalSequenceLSTMOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def BidirectionalSequenceLSTMOptionsAddCellClip(builder, cellClip): builder.PrependFloat32Slot(1, cellClip, 0.0) +def BidirectionalSequenceLSTMOptionsAddProjClip(builder, projClip): builder.PrependFloat32Slot(2, projClip, 0.0) +def BidirectionalSequenceLSTMOptionsAddMergeOutputs(builder, mergeOutputs): builder.PrependBoolSlot(3, mergeOutputs, 0) +def BidirectionalSequenceLSTMOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(4, timeMajor, 1) +def BidirectionalSequenceLSTMOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/BidirectionalSequenceRNNOptions.py b/utensor_cgen/third_party/tflite/BidirectionalSequenceRNNOptions.py new file mode 100644 index 00000000..673af6b9 --- /dev/null +++ b/utensor_cgen/third_party/tflite/BidirectionalSequenceRNNOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class BidirectionalSequenceRNNOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsBidirectionalSequenceRNNOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = BidirectionalSequenceRNNOptions() + x.Init(buf, n + offset) + return x + + # BidirectionalSequenceRNNOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # BidirectionalSequenceRNNOptions + def TimeMajor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # BidirectionalSequenceRNNOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # BidirectionalSequenceRNNOptions + def MergeOutputs(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def BidirectionalSequenceRNNOptionsStart(builder): builder.StartObject(3) +def BidirectionalSequenceRNNOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(0, timeMajor, 0) +def BidirectionalSequenceRNNOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) +def BidirectionalSequenceRNNOptionsAddMergeOutputs(builder, mergeOutputs): builder.PrependBoolSlot(2, mergeOutputs, 0) +def BidirectionalSequenceRNNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/Buffer.py b/utensor_cgen/third_party/tflite/Buffer.py new file mode 100644 index 00000000..754dee3b --- /dev/null +++ b/utensor_cgen/third_party/tflite/Buffer.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Buffer(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsBuffer(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Buffer() + x.Init(buf, n + offset) + return x + + # Buffer + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Buffer + def Data(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Buffer + def DataAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Buffer + def DataLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def BufferStart(builder): builder.StartObject(1) +def BufferAddData(builder, data): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(data), 0) +def BufferStartDataVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def BufferEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/BuiltinOperator.py b/utensor_cgen/third_party/tflite/BuiltinOperator.py new file mode 100644 index 00000000..61028141 --- /dev/null +++ b/utensor_cgen/third_party/tflite/BuiltinOperator.py @@ -0,0 +1,128 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class BuiltinOperator(object): + ADD = 0 + AVERAGE_POOL_2D = 1 + CONCATENATION = 2 + CONV_2D = 3 + DEPTHWISE_CONV_2D = 4 + DEPTH_TO_SPACE = 5 + DEQUANTIZE = 6 + EMBEDDING_LOOKUP = 7 + FLOOR = 8 + FULLY_CONNECTED = 9 + HASHTABLE_LOOKUP = 10 + L2_NORMALIZATION = 11 + L2_POOL_2D = 12 + LOCAL_RESPONSE_NORMALIZATION = 13 + LOGISTIC = 14 + LSH_PROJECTION = 15 + LSTM = 16 + MAX_POOL_2D = 17 + MUL = 18 + RELU = 19 + RELU_N1_TO_1 = 20 + RELU6 = 21 + RESHAPE = 22 + RESIZE_BILINEAR = 23 + RNN = 24 + SOFTMAX = 25 + SPACE_TO_DEPTH = 26 + SVDF = 27 + TANH = 28 + CONCAT_EMBEDDINGS = 29 + SKIP_GRAM = 30 + CALL = 31 + CUSTOM = 32 + EMBEDDING_LOOKUP_SPARSE = 33 + PAD = 34 + UNIDIRECTIONAL_SEQUENCE_RNN = 35 + GATHER = 36 + BATCH_TO_SPACE_ND = 37 + SPACE_TO_BATCH_ND = 38 + TRANSPOSE = 39 + MEAN = 40 + SUB = 41 + DIV = 42 + SQUEEZE = 43 + UNIDIRECTIONAL_SEQUENCE_LSTM = 44 + STRIDED_SLICE = 45 + BIDIRECTIONAL_SEQUENCE_RNN = 46 + EXP = 47 + TOPK_V2 = 48 + SPLIT = 49 + LOG_SOFTMAX = 50 + DELEGATE = 51 + BIDIRECTIONAL_SEQUENCE_LSTM = 52 + CAST = 53 + PRELU = 54 + MAXIMUM = 55 + ARG_MAX = 56 + MINIMUM = 57 + LESS = 58 + NEG = 59 + PADV2 = 60 + GREATER = 61 + GREATER_EQUAL = 62 + LESS_EQUAL = 63 + SELECT = 64 + SLICE = 65 + SIN = 66 + TRANSPOSE_CONV = 67 + SPARSE_TO_DENSE = 68 + TILE = 69 + EXPAND_DIMS = 70 + EQUAL = 71 + NOT_EQUAL = 72 + LOG = 73 + SUM = 74 + SQRT = 75 + RSQRT = 76 + SHAPE = 77 + POW = 78 + ARG_MIN = 79 + FAKE_QUANT = 80 + REDUCE_PROD = 81 + REDUCE_MAX = 82 + PACK = 83 + LOGICAL_OR = 84 + ONE_HOT = 85 + LOGICAL_AND = 86 + LOGICAL_NOT = 87 + UNPACK = 88 + REDUCE_MIN = 89 + FLOOR_DIV = 90 + REDUCE_ANY = 91 + SQUARE = 92 + ZEROS_LIKE = 93 + FILL = 94 + FLOOR_MOD = 95 + RANGE = 96 + RESIZE_NEAREST_NEIGHBOR = 97 + LEAKY_RELU = 98 + SQUARED_DIFFERENCE = 99 + MIRROR_PAD = 100 + ABS = 101 + SPLIT_V = 102 + UNIQUE = 103 + CEIL = 104 + REVERSE_V2 = 105 + ADD_N = 106 + GATHER_ND = 107 + COS = 108 + WHERE = 109 + RANK = 110 + ELU = 111 + REVERSE_SEQUENCE = 112 + MATRIX_DIAG = 113 + QUANTIZE = 114 + MATRIX_SET_DIAG = 115 + ROUND = 116 + HARD_SWISH = 117 + IF = 118 + WHILE = 119 + NON_MAX_SUPPRESSION_V4 = 120 + NON_MAX_SUPPRESSION_V5 = 121 + diff --git a/utensor_cgen/third_party/tflite/BuiltinOptions.py b/utensor_cgen/third_party/tflite/BuiltinOptions.py new file mode 100644 index 00000000..a7957d28 --- /dev/null +++ b/utensor_cgen/third_party/tflite/BuiltinOptions.py @@ -0,0 +1,103 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class BuiltinOptions(object): + NONE = 0 + Conv2DOptions = 1 + DepthwiseConv2DOptions = 2 + ConcatEmbeddingsOptions = 3 + LSHProjectionOptions = 4 + Pool2DOptions = 5 + SVDFOptions = 6 + RNNOptions = 7 + FullyConnectedOptions = 8 + SoftmaxOptions = 9 + ConcatenationOptions = 10 + AddOptions = 11 + L2NormOptions = 12 + LocalResponseNormalizationOptions = 13 + LSTMOptions = 14 + ResizeBilinearOptions = 15 + CallOptions = 16 + ReshapeOptions = 17 + SkipGramOptions = 18 + SpaceToDepthOptions = 19 + EmbeddingLookupSparseOptions = 20 + MulOptions = 21 + PadOptions = 22 + GatherOptions = 23 + BatchToSpaceNDOptions = 24 + SpaceToBatchNDOptions = 25 + TransposeOptions = 26 + ReducerOptions = 27 + SubOptions = 28 + DivOptions = 29 + SqueezeOptions = 30 + SequenceRNNOptions = 31 + StridedSliceOptions = 32 + ExpOptions = 33 + TopKV2Options = 34 + SplitOptions = 35 + LogSoftmaxOptions = 36 + CastOptions = 37 + DequantizeOptions = 38 + MaximumMinimumOptions = 39 + ArgMaxOptions = 40 + LessOptions = 41 + NegOptions = 42 + PadV2Options = 43 + GreaterOptions = 44 + GreaterEqualOptions = 45 + LessEqualOptions = 46 + SelectOptions = 47 + SliceOptions = 48 + TransposeConvOptions = 49 + SparseToDenseOptions = 50 + TileOptions = 51 + ExpandDimsOptions = 52 + EqualOptions = 53 + NotEqualOptions = 54 + ShapeOptions = 55 + PowOptions = 56 + ArgMinOptions = 57 + FakeQuantOptions = 58 + PackOptions = 59 + LogicalOrOptions = 60 + OneHotOptions = 61 + LogicalAndOptions = 62 + LogicalNotOptions = 63 + UnpackOptions = 64 + FloorDivOptions = 65 + SquareOptions = 66 + ZerosLikeOptions = 67 + FillOptions = 68 + BidirectionalSequenceLSTMOptions = 69 + BidirectionalSequenceRNNOptions = 70 + UnidirectionalSequenceLSTMOptions = 71 + FloorModOptions = 72 + RangeOptions = 73 + ResizeNearestNeighborOptions = 74 + LeakyReluOptions = 75 + SquaredDifferenceOptions = 76 + MirrorPadOptions = 77 + AbsOptions = 78 + SplitVOptions = 79 + UniqueOptions = 80 + ReverseV2Options = 81 + AddNOptions = 82 + GatherNdOptions = 83 + CosOptions = 84 + WhereOptions = 85 + RankOptions = 86 + ReverseSequenceOptions = 87 + MatrixDiagOptions = 88 + QuantizeOptions = 89 + MatrixSetDiagOptions = 90 + HardSwishOptions = 91 + IfOptions = 92 + WhileOptions = 93 + DepthToSpaceOptions = 94 + NonMaxSuppressionV4Options = 95 + NonMaxSuppressionV5Options = 96 + diff --git a/utensor_cgen/third_party/tflite/CallOptions.py b/utensor_cgen/third_party/tflite/CallOptions.py new file mode 100644 index 00000000..5ae2eeae --- /dev/null +++ b/utensor_cgen/third_party/tflite/CallOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class CallOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCallOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CallOptions() + x.Init(buf, n + offset) + return x + + # CallOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # CallOptions + def Subgraph(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + +def CallOptionsStart(builder): builder.StartObject(1) +def CallOptionsAddSubgraph(builder, subgraph): builder.PrependUint32Slot(0, subgraph, 0) +def CallOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/CastOptions.py b/utensor_cgen/third_party/tflite/CastOptions.py new file mode 100644 index 00000000..70ae2e37 --- /dev/null +++ b/utensor_cgen/third_party/tflite/CastOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class CastOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCastOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CastOptions() + x.Init(buf, n + offset) + return x + + # CastOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # CastOptions + def InDataType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # CastOptions + def OutDataType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def CastOptionsStart(builder): builder.StartObject(2) +def CastOptionsAddInDataType(builder, inDataType): builder.PrependInt8Slot(0, inDataType, 0) +def CastOptionsAddOutDataType(builder, outDataType): builder.PrependInt8Slot(1, outDataType, 0) +def CastOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/CombinerType.py b/utensor_cgen/third_party/tflite/CombinerType.py new file mode 100644 index 00000000..17d91510 --- /dev/null +++ b/utensor_cgen/third_party/tflite/CombinerType.py @@ -0,0 +1,9 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class CombinerType(object): + SUM = 0 + MEAN = 1 + SQRTN = 2 + diff --git a/utensor_cgen/third_party/tflite/ConcatEmbeddingsOptions.py b/utensor_cgen/third_party/tflite/ConcatEmbeddingsOptions.py new file mode 100644 index 00000000..9d26c510 --- /dev/null +++ b/utensor_cgen/third_party/tflite/ConcatEmbeddingsOptions.py @@ -0,0 +1,78 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ConcatEmbeddingsOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsConcatEmbeddingsOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ConcatEmbeddingsOptions() + x.Init(buf, n + offset) + return x + + # ConcatEmbeddingsOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ConcatEmbeddingsOptions + def NumChannels(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # ConcatEmbeddingsOptions + def NumColumnsPerChannel(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # ConcatEmbeddingsOptions + def NumColumnsPerChannelAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # ConcatEmbeddingsOptions + def NumColumnsPerChannelLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # ConcatEmbeddingsOptions + def EmbeddingDimPerChannel(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # ConcatEmbeddingsOptions + def EmbeddingDimPerChannelAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # ConcatEmbeddingsOptions + def EmbeddingDimPerChannelLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def ConcatEmbeddingsOptionsStart(builder): builder.StartObject(3) +def ConcatEmbeddingsOptionsAddNumChannels(builder, numChannels): builder.PrependInt32Slot(0, numChannels, 0) +def ConcatEmbeddingsOptionsAddNumColumnsPerChannel(builder, numColumnsPerChannel): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(numColumnsPerChannel), 0) +def ConcatEmbeddingsOptionsStartNumColumnsPerChannelVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ConcatEmbeddingsOptionsAddEmbeddingDimPerChannel(builder, embeddingDimPerChannel): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(embeddingDimPerChannel), 0) +def ConcatEmbeddingsOptionsStartEmbeddingDimPerChannelVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ConcatEmbeddingsOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ConcatenationOptions.py b/utensor_cgen/third_party/tflite/ConcatenationOptions.py new file mode 100644 index 00000000..c8e0b6ab --- /dev/null +++ b/utensor_cgen/third_party/tflite/ConcatenationOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ConcatenationOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsConcatenationOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ConcatenationOptions() + x.Init(buf, n + offset) + return x + + # ConcatenationOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ConcatenationOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # ConcatenationOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def ConcatenationOptionsStart(builder): builder.StartObject(2) +def ConcatenationOptionsAddAxis(builder, axis): builder.PrependInt32Slot(0, axis, 0) +def ConcatenationOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) +def ConcatenationOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/Conv2DOptions.py b/utensor_cgen/third_party/tflite/Conv2DOptions.py new file mode 100644 index 00000000..ef49f751 --- /dev/null +++ b/utensor_cgen/third_party/tflite/Conv2DOptions.py @@ -0,0 +1,70 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Conv2DOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsConv2DOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Conv2DOptions() + x.Init(buf, n + offset) + return x + + # Conv2DOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Conv2DOptions + def Padding(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Conv2DOptions + def StrideW(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Conv2DOptions + def StrideH(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Conv2DOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Conv2DOptions + def DilationWFactor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + + # Conv2DOptions + def DilationHFactor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + +def Conv2DOptionsStart(builder): builder.StartObject(6) +def Conv2DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) +def Conv2DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) +def Conv2DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) +def Conv2DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(3, fusedActivationFunction, 0) +def Conv2DOptionsAddDilationWFactor(builder, dilationWFactor): builder.PrependInt32Slot(4, dilationWFactor, 1) +def Conv2DOptionsAddDilationHFactor(builder, dilationHFactor): builder.PrependInt32Slot(5, dilationHFactor, 1) +def Conv2DOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/CosOptions.py b/utensor_cgen/third_party/tflite/CosOptions.py new file mode 100644 index 00000000..7fbf8487 --- /dev/null +++ b/utensor_cgen/third_party/tflite/CosOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class CosOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCosOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CosOptions() + x.Init(buf, n + offset) + return x + + # CosOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def CosOptionsStart(builder): builder.StartObject(0) +def CosOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/CustomOptionsFormat.py b/utensor_cgen/third_party/tflite/CustomOptionsFormat.py new file mode 100644 index 00000000..bef384cf --- /dev/null +++ b/utensor_cgen/third_party/tflite/CustomOptionsFormat.py @@ -0,0 +1,7 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class CustomOptionsFormat(object): + FLEXBUFFERS = 0 + diff --git a/utensor_cgen/third_party/tflite/CustomQuantization.py b/utensor_cgen/third_party/tflite/CustomQuantization.py new file mode 100644 index 00000000..21ec0da4 --- /dev/null +++ b/utensor_cgen/third_party/tflite/CustomQuantization.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class CustomQuantization(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsCustomQuantization(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = CustomQuantization() + x.Init(buf, n + offset) + return x + + # CustomQuantization + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # CustomQuantization + def Custom(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # CustomQuantization + def CustomAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # CustomQuantization + def CustomLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def CustomQuantizationStart(builder): builder.StartObject(1) +def CustomQuantizationAddCustom(builder, custom): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(custom), 0) +def CustomQuantizationStartCustomVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def CustomQuantizationEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/DepthToSpaceOptions.py b/utensor_cgen/third_party/tflite/DepthToSpaceOptions.py new file mode 100644 index 00000000..97b93aa7 --- /dev/null +++ b/utensor_cgen/third_party/tflite/DepthToSpaceOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class DepthToSpaceOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsDepthToSpaceOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DepthToSpaceOptions() + x.Init(buf, n + offset) + return x + + # DepthToSpaceOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # DepthToSpaceOptions + def BlockSize(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def DepthToSpaceOptionsStart(builder): builder.StartObject(1) +def DepthToSpaceOptionsAddBlockSize(builder, blockSize): builder.PrependInt32Slot(0, blockSize, 0) +def DepthToSpaceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/DepthwiseConv2DOptions.py b/utensor_cgen/third_party/tflite/DepthwiseConv2DOptions.py new file mode 100644 index 00000000..9689383b --- /dev/null +++ b/utensor_cgen/third_party/tflite/DepthwiseConv2DOptions.py @@ -0,0 +1,78 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class DepthwiseConv2DOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsDepthwiseConv2DOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DepthwiseConv2DOptions() + x.Init(buf, n + offset) + return x + + # DepthwiseConv2DOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # DepthwiseConv2DOptions + def Padding(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def StrideW(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def StrideH(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def DepthMultiplier(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # DepthwiseConv2DOptions + def DilationWFactor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + + # DepthwiseConv2DOptions + def DilationHFactor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + +def DepthwiseConv2DOptionsStart(builder): builder.StartObject(7) +def DepthwiseConv2DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) +def DepthwiseConv2DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) +def DepthwiseConv2DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) +def DepthwiseConv2DOptionsAddDepthMultiplier(builder, depthMultiplier): builder.PrependInt32Slot(3, depthMultiplier, 0) +def DepthwiseConv2DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(4, fusedActivationFunction, 0) +def DepthwiseConv2DOptionsAddDilationWFactor(builder, dilationWFactor): builder.PrependInt32Slot(5, dilationWFactor, 1) +def DepthwiseConv2DOptionsAddDilationHFactor(builder, dilationHFactor): builder.PrependInt32Slot(6, dilationHFactor, 1) +def DepthwiseConv2DOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/DequantizeOptions.py b/utensor_cgen/third_party/tflite/DequantizeOptions.py new file mode 100644 index 00000000..5ef8b8dd --- /dev/null +++ b/utensor_cgen/third_party/tflite/DequantizeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class DequantizeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsDequantizeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DequantizeOptions() + x.Init(buf, n + offset) + return x + + # DequantizeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def DequantizeOptionsStart(builder): builder.StartObject(0) +def DequantizeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/DivOptions.py b/utensor_cgen/third_party/tflite/DivOptions.py new file mode 100644 index 00000000..905a3be0 --- /dev/null +++ b/utensor_cgen/third_party/tflite/DivOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class DivOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsDivOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = DivOptions() + x.Init(buf, n + offset) + return x + + # DivOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # DivOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def DivOptionsStart(builder): builder.StartObject(1) +def DivOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def DivOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/EmbeddingLookupSparseOptions.py b/utensor_cgen/third_party/tflite/EmbeddingLookupSparseOptions.py new file mode 100644 index 00000000..7d9c1442 --- /dev/null +++ b/utensor_cgen/third_party/tflite/EmbeddingLookupSparseOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class EmbeddingLookupSparseOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsEmbeddingLookupSparseOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = EmbeddingLookupSparseOptions() + x.Init(buf, n + offset) + return x + + # EmbeddingLookupSparseOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # EmbeddingLookupSparseOptions + def Combiner(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def EmbeddingLookupSparseOptionsStart(builder): builder.StartObject(1) +def EmbeddingLookupSparseOptionsAddCombiner(builder, combiner): builder.PrependInt8Slot(0, combiner, 0) +def EmbeddingLookupSparseOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/EqualOptions.py b/utensor_cgen/third_party/tflite/EqualOptions.py new file mode 100644 index 00000000..f787ef85 --- /dev/null +++ b/utensor_cgen/third_party/tflite/EqualOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class EqualOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsEqualOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = EqualOptions() + x.Init(buf, n + offset) + return x + + # EqualOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def EqualOptionsStart(builder): builder.StartObject(0) +def EqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ExpOptions.py b/utensor_cgen/third_party/tflite/ExpOptions.py new file mode 100644 index 00000000..eac1456e --- /dev/null +++ b/utensor_cgen/third_party/tflite/ExpOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ExpOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsExpOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ExpOptions() + x.Init(buf, n + offset) + return x + + # ExpOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def ExpOptionsStart(builder): builder.StartObject(0) +def ExpOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ExpandDimsOptions.py b/utensor_cgen/third_party/tflite/ExpandDimsOptions.py new file mode 100644 index 00000000..69d63665 --- /dev/null +++ b/utensor_cgen/third_party/tflite/ExpandDimsOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ExpandDimsOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsExpandDimsOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ExpandDimsOptions() + x.Init(buf, n + offset) + return x + + # ExpandDimsOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def ExpandDimsOptionsStart(builder): builder.StartObject(0) +def ExpandDimsOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/FakeQuantOptions.py b/utensor_cgen/third_party/tflite/FakeQuantOptions.py new file mode 100644 index 00000000..46c371c3 --- /dev/null +++ b/utensor_cgen/third_party/tflite/FakeQuantOptions.py @@ -0,0 +1,54 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FakeQuantOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFakeQuantOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FakeQuantOptions() + x.Init(buf, n + offset) + return x + + # FakeQuantOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # FakeQuantOptions + def Min(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # FakeQuantOptions + def Max(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # FakeQuantOptions + def NumBits(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # FakeQuantOptions + def NarrowRange(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def FakeQuantOptionsStart(builder): builder.StartObject(4) +def FakeQuantOptionsAddMin(builder, min): builder.PrependFloat32Slot(0, min, 0.0) +def FakeQuantOptionsAddMax(builder, max): builder.PrependFloat32Slot(1, max, 0.0) +def FakeQuantOptionsAddNumBits(builder, numBits): builder.PrependInt32Slot(2, numBits, 0) +def FakeQuantOptionsAddNarrowRange(builder, narrowRange): builder.PrependBoolSlot(3, narrowRange, 0) +def FakeQuantOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/FillOptions.py b/utensor_cgen/third_party/tflite/FillOptions.py new file mode 100644 index 00000000..5a1e651a --- /dev/null +++ b/utensor_cgen/third_party/tflite/FillOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FillOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFillOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FillOptions() + x.Init(buf, n + offset) + return x + + # FillOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def FillOptionsStart(builder): builder.StartObject(0) +def FillOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/FloorDivOptions.py b/utensor_cgen/third_party/tflite/FloorDivOptions.py new file mode 100644 index 00000000..64b474fb --- /dev/null +++ b/utensor_cgen/third_party/tflite/FloorDivOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FloorDivOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFloorDivOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FloorDivOptions() + x.Init(buf, n + offset) + return x + + # FloorDivOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def FloorDivOptionsStart(builder): builder.StartObject(0) +def FloorDivOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/FloorModOptions.py b/utensor_cgen/third_party/tflite/FloorModOptions.py new file mode 100644 index 00000000..37c8e5a5 --- /dev/null +++ b/utensor_cgen/third_party/tflite/FloorModOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FloorModOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFloorModOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FloorModOptions() + x.Init(buf, n + offset) + return x + + # FloorModOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def FloorModOptionsStart(builder): builder.StartObject(0) +def FloorModOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/FullyConnectedOptions.py b/utensor_cgen/third_party/tflite/FullyConnectedOptions.py new file mode 100644 index 00000000..a6b4e40f --- /dev/null +++ b/utensor_cgen/third_party/tflite/FullyConnectedOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class FullyConnectedOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsFullyConnectedOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = FullyConnectedOptions() + x.Init(buf, n + offset) + return x + + # FullyConnectedOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # FullyConnectedOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # FullyConnectedOptions + def WeightsFormat(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # FullyConnectedOptions + def KeepNumDims(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def FullyConnectedOptionsStart(builder): builder.StartObject(3) +def FullyConnectedOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def FullyConnectedOptionsAddWeightsFormat(builder, weightsFormat): builder.PrependInt8Slot(1, weightsFormat, 0) +def FullyConnectedOptionsAddKeepNumDims(builder, keepNumDims): builder.PrependBoolSlot(2, keepNumDims, 0) +def FullyConnectedOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/FullyConnectedOptionsWeightsFormat.py b/utensor_cgen/third_party/tflite/FullyConnectedOptionsWeightsFormat.py new file mode 100644 index 00000000..6d81eca1 --- /dev/null +++ b/utensor_cgen/third_party/tflite/FullyConnectedOptionsWeightsFormat.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class FullyConnectedOptionsWeightsFormat(object): + DEFAULT = 0 + SHUFFLED4x16INT8 = 1 + diff --git a/utensor_cgen/third_party/tflite/GatherNdOptions.py b/utensor_cgen/third_party/tflite/GatherNdOptions.py new file mode 100644 index 00000000..f515eb5c --- /dev/null +++ b/utensor_cgen/third_party/tflite/GatherNdOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class GatherNdOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsGatherNdOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = GatherNdOptions() + x.Init(buf, n + offset) + return x + + # GatherNdOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def GatherNdOptionsStart(builder): builder.StartObject(0) +def GatherNdOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/GatherOptions.py b/utensor_cgen/third_party/tflite/GatherOptions.py new file mode 100644 index 00000000..9fbc3e40 --- /dev/null +++ b/utensor_cgen/third_party/tflite/GatherOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class GatherOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsGatherOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = GatherOptions() + x.Init(buf, n + offset) + return x + + # GatherOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # GatherOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def GatherOptionsStart(builder): builder.StartObject(1) +def GatherOptionsAddAxis(builder, axis): builder.PrependInt32Slot(0, axis, 0) +def GatherOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/GreaterEqualOptions.py b/utensor_cgen/third_party/tflite/GreaterEqualOptions.py new file mode 100644 index 00000000..a29e200a --- /dev/null +++ b/utensor_cgen/third_party/tflite/GreaterEqualOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class GreaterEqualOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsGreaterEqualOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = GreaterEqualOptions() + x.Init(buf, n + offset) + return x + + # GreaterEqualOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def GreaterEqualOptionsStart(builder): builder.StartObject(0) +def GreaterEqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/GreaterOptions.py b/utensor_cgen/third_party/tflite/GreaterOptions.py new file mode 100644 index 00000000..59d63501 --- /dev/null +++ b/utensor_cgen/third_party/tflite/GreaterOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class GreaterOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsGreaterOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = GreaterOptions() + x.Init(buf, n + offset) + return x + + # GreaterOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def GreaterOptionsStart(builder): builder.StartObject(0) +def GreaterOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/HardSwishOptions.py b/utensor_cgen/third_party/tflite/HardSwishOptions.py new file mode 100644 index 00000000..4f6a5200 --- /dev/null +++ b/utensor_cgen/third_party/tflite/HardSwishOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class HardSwishOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsHardSwishOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = HardSwishOptions() + x.Init(buf, n + offset) + return x + + # HardSwishOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def HardSwishOptionsStart(builder): builder.StartObject(0) +def HardSwishOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/IfOptions.py b/utensor_cgen/third_party/tflite/IfOptions.py new file mode 100644 index 00000000..13f4e697 --- /dev/null +++ b/utensor_cgen/third_party/tflite/IfOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class IfOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsIfOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = IfOptions() + x.Init(buf, n + offset) + return x + + # IfOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # IfOptions + def ThenSubgraphIndex(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # IfOptions + def ElseSubgraphIndex(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def IfOptionsStart(builder): builder.StartObject(2) +def IfOptionsAddThenSubgraphIndex(builder, thenSubgraphIndex): builder.PrependInt32Slot(0, thenSubgraphIndex, 0) +def IfOptionsAddElseSubgraphIndex(builder, elseSubgraphIndex): builder.PrependInt32Slot(1, elseSubgraphIndex, 0) +def IfOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/L2NormOptions.py b/utensor_cgen/third_party/tflite/L2NormOptions.py new file mode 100644 index 00000000..38bdf573 --- /dev/null +++ b/utensor_cgen/third_party/tflite/L2NormOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class L2NormOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsL2NormOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = L2NormOptions() + x.Init(buf, n + offset) + return x + + # L2NormOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # L2NormOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def L2NormOptionsStart(builder): builder.StartObject(1) +def L2NormOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def L2NormOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LSHProjectionOptions.py b/utensor_cgen/third_party/tflite/LSHProjectionOptions.py new file mode 100644 index 00000000..ad550be2 --- /dev/null +++ b/utensor_cgen/third_party/tflite/LSHProjectionOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LSHProjectionOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLSHProjectionOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LSHProjectionOptions() + x.Init(buf, n + offset) + return x + + # LSHProjectionOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # LSHProjectionOptions + def Type(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def LSHProjectionOptionsStart(builder): builder.StartObject(1) +def LSHProjectionOptionsAddType(builder, type): builder.PrependInt8Slot(0, type, 0) +def LSHProjectionOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LSHProjectionType.py b/utensor_cgen/third_party/tflite/LSHProjectionType.py new file mode 100644 index 00000000..d6a136e8 --- /dev/null +++ b/utensor_cgen/third_party/tflite/LSHProjectionType.py @@ -0,0 +1,9 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class LSHProjectionType(object): + UNKNOWN = 0 + SPARSE = 1 + DENSE = 2 + diff --git a/utensor_cgen/third_party/tflite/LSTMKernelType.py b/utensor_cgen/third_party/tflite/LSTMKernelType.py new file mode 100644 index 00000000..1ca4df0a --- /dev/null +++ b/utensor_cgen/third_party/tflite/LSTMKernelType.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class LSTMKernelType(object): + FULL = 0 + BASIC = 1 + diff --git a/utensor_cgen/third_party/tflite/LSTMOptions.py b/utensor_cgen/third_party/tflite/LSTMOptions.py new file mode 100644 index 00000000..93a83093 --- /dev/null +++ b/utensor_cgen/third_party/tflite/LSTMOptions.py @@ -0,0 +1,54 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LSTMOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLSTMOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LSTMOptions() + x.Init(buf, n + offset) + return x + + # LSTMOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # LSTMOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # LSTMOptions + def CellClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # LSTMOptions + def ProjClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # LSTMOptions + def KernelType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def LSTMOptionsStart(builder): builder.StartObject(4) +def LSTMOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def LSTMOptionsAddCellClip(builder, cellClip): builder.PrependFloat32Slot(1, cellClip, 0.0) +def LSTMOptionsAddProjClip(builder, projClip): builder.PrependFloat32Slot(2, projClip, 0.0) +def LSTMOptionsAddKernelType(builder, kernelType): builder.PrependInt8Slot(3, kernelType, 0) +def LSTMOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LeakyReluOptions.py b/utensor_cgen/third_party/tflite/LeakyReluOptions.py new file mode 100644 index 00000000..b61b21d5 --- /dev/null +++ b/utensor_cgen/third_party/tflite/LeakyReluOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LeakyReluOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLeakyReluOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LeakyReluOptions() + x.Init(buf, n + offset) + return x + + # LeakyReluOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # LeakyReluOptions + def Alpha(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + +def LeakyReluOptionsStart(builder): builder.StartObject(1) +def LeakyReluOptionsAddAlpha(builder, alpha): builder.PrependFloat32Slot(0, alpha, 0.0) +def LeakyReluOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LessEqualOptions.py b/utensor_cgen/third_party/tflite/LessEqualOptions.py new file mode 100644 index 00000000..d49b7289 --- /dev/null +++ b/utensor_cgen/third_party/tflite/LessEqualOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LessEqualOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLessEqualOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LessEqualOptions() + x.Init(buf, n + offset) + return x + + # LessEqualOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LessEqualOptionsStart(builder): builder.StartObject(0) +def LessEqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LessOptions.py b/utensor_cgen/third_party/tflite/LessOptions.py new file mode 100644 index 00000000..469cb0b0 --- /dev/null +++ b/utensor_cgen/third_party/tflite/LessOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LessOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLessOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LessOptions() + x.Init(buf, n + offset) + return x + + # LessOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LessOptionsStart(builder): builder.StartObject(0) +def LessOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LocalResponseNormalizationOptions.py b/utensor_cgen/third_party/tflite/LocalResponseNormalizationOptions.py new file mode 100644 index 00000000..db875603 --- /dev/null +++ b/utensor_cgen/third_party/tflite/LocalResponseNormalizationOptions.py @@ -0,0 +1,54 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LocalResponseNormalizationOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLocalResponseNormalizationOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LocalResponseNormalizationOptions() + x.Init(buf, n + offset) + return x + + # LocalResponseNormalizationOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # LocalResponseNormalizationOptions + def Radius(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # LocalResponseNormalizationOptions + def Bias(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # LocalResponseNormalizationOptions + def Alpha(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # LocalResponseNormalizationOptions + def Beta(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + +def LocalResponseNormalizationOptionsStart(builder): builder.StartObject(4) +def LocalResponseNormalizationOptionsAddRadius(builder, radius): builder.PrependInt32Slot(0, radius, 0) +def LocalResponseNormalizationOptionsAddBias(builder, bias): builder.PrependFloat32Slot(1, bias, 0.0) +def LocalResponseNormalizationOptionsAddAlpha(builder, alpha): builder.PrependFloat32Slot(2, alpha, 0.0) +def LocalResponseNormalizationOptionsAddBeta(builder, beta): builder.PrependFloat32Slot(3, beta, 0.0) +def LocalResponseNormalizationOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LogSoftmaxOptions.py b/utensor_cgen/third_party/tflite/LogSoftmaxOptions.py new file mode 100644 index 00000000..47893855 --- /dev/null +++ b/utensor_cgen/third_party/tflite/LogSoftmaxOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LogSoftmaxOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLogSoftmaxOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LogSoftmaxOptions() + x.Init(buf, n + offset) + return x + + # LogSoftmaxOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LogSoftmaxOptionsStart(builder): builder.StartObject(0) +def LogSoftmaxOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LogicalAndOptions.py b/utensor_cgen/third_party/tflite/LogicalAndOptions.py new file mode 100644 index 00000000..cee1cdb4 --- /dev/null +++ b/utensor_cgen/third_party/tflite/LogicalAndOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LogicalAndOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLogicalAndOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LogicalAndOptions() + x.Init(buf, n + offset) + return x + + # LogicalAndOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LogicalAndOptionsStart(builder): builder.StartObject(0) +def LogicalAndOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LogicalNotOptions.py b/utensor_cgen/third_party/tflite/LogicalNotOptions.py new file mode 100644 index 00000000..9971450c --- /dev/null +++ b/utensor_cgen/third_party/tflite/LogicalNotOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LogicalNotOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLogicalNotOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LogicalNotOptions() + x.Init(buf, n + offset) + return x + + # LogicalNotOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LogicalNotOptionsStart(builder): builder.StartObject(0) +def LogicalNotOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/LogicalOrOptions.py b/utensor_cgen/third_party/tflite/LogicalOrOptions.py new file mode 100644 index 00000000..e94a5dec --- /dev/null +++ b/utensor_cgen/third_party/tflite/LogicalOrOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class LogicalOrOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsLogicalOrOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = LogicalOrOptions() + x.Init(buf, n + offset) + return x + + # LogicalOrOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def LogicalOrOptionsStart(builder): builder.StartObject(0) +def LogicalOrOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/MatrixDiagOptions.py b/utensor_cgen/third_party/tflite/MatrixDiagOptions.py new file mode 100644 index 00000000..0f64e657 --- /dev/null +++ b/utensor_cgen/third_party/tflite/MatrixDiagOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MatrixDiagOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMatrixDiagOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MatrixDiagOptions() + x.Init(buf, n + offset) + return x + + # MatrixDiagOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def MatrixDiagOptionsStart(builder): builder.StartObject(0) +def MatrixDiagOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/MatrixSetDiagOptions.py b/utensor_cgen/third_party/tflite/MatrixSetDiagOptions.py new file mode 100644 index 00000000..14178cf8 --- /dev/null +++ b/utensor_cgen/third_party/tflite/MatrixSetDiagOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MatrixSetDiagOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMatrixSetDiagOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MatrixSetDiagOptions() + x.Init(buf, n + offset) + return x + + # MatrixSetDiagOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def MatrixSetDiagOptionsStart(builder): builder.StartObject(0) +def MatrixSetDiagOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/MaximumMinimumOptions.py b/utensor_cgen/third_party/tflite/MaximumMinimumOptions.py new file mode 100644 index 00000000..f0806e2d --- /dev/null +++ b/utensor_cgen/third_party/tflite/MaximumMinimumOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MaximumMinimumOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMaximumMinimumOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MaximumMinimumOptions() + x.Init(buf, n + offset) + return x + + # MaximumMinimumOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def MaximumMinimumOptionsStart(builder): builder.StartObject(0) +def MaximumMinimumOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/Metadata.py b/utensor_cgen/third_party/tflite/Metadata.py new file mode 100644 index 00000000..273e51ee --- /dev/null +++ b/utensor_cgen/third_party/tflite/Metadata.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Metadata(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMetadata(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Metadata() + x.Init(buf, n + offset) + return x + + # Metadata + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Metadata + def Name(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Metadata + def Buffer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + +def MetadataStart(builder): builder.StartObject(2) +def MetadataAddName(builder, name): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) +def MetadataAddBuffer(builder, buffer): builder.PrependUint32Slot(1, buffer, 0) +def MetadataEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/MirrorPadMode.py b/utensor_cgen/third_party/tflite/MirrorPadMode.py new file mode 100644 index 00000000..ce7579d2 --- /dev/null +++ b/utensor_cgen/third_party/tflite/MirrorPadMode.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class MirrorPadMode(object): + REFLECT = 0 + SYMMETRIC = 1 + diff --git a/utensor_cgen/third_party/tflite/MirrorPadOptions.py b/utensor_cgen/third_party/tflite/MirrorPadOptions.py new file mode 100644 index 00000000..254ae217 --- /dev/null +++ b/utensor_cgen/third_party/tflite/MirrorPadOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MirrorPadOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMirrorPadOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MirrorPadOptions() + x.Init(buf, n + offset) + return x + + # MirrorPadOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # MirrorPadOptions + def Mode(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def MirrorPadOptionsStart(builder): builder.StartObject(1) +def MirrorPadOptionsAddMode(builder, mode): builder.PrependInt8Slot(0, mode, 0) +def MirrorPadOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/Model.py b/utensor_cgen/third_party/tflite/Model.py new file mode 100644 index 00000000..cc9991ba --- /dev/null +++ b/utensor_cgen/third_party/tflite/Model.py @@ -0,0 +1,150 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Model(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsModel(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Model() + x.Init(buf, n + offset) + return x + + # Model + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Model + def Version(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + # Model + def OperatorCodes(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .OperatorCode import OperatorCode + obj = OperatorCode() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Model + def OperatorCodesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Model + def Subgraphs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .SubGraph import SubGraph + obj = SubGraph() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Model + def SubgraphsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Model + def Description(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Model + def Buffers(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .Buffer import Buffer + obj = Buffer() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Model + def BuffersLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Model + def MetadataBuffer(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # Model + def MetadataBufferAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # Model + def MetadataBufferLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Model + def Metadata(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .Metadata import Metadata + obj = Metadata() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Model + def MetadataLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def ModelStart(builder): builder.StartObject(7) +def ModelAddVersion(builder, version): builder.PrependUint32Slot(0, version, 0) +def ModelAddOperatorCodes(builder, operatorCodes): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(operatorCodes), 0) +def ModelStartOperatorCodesVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ModelAddSubgraphs(builder, subgraphs): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(subgraphs), 0) +def ModelStartSubgraphsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ModelAddDescription(builder, description): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(description), 0) +def ModelAddBuffers(builder, buffers): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(buffers), 0) +def ModelStartBuffersVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ModelAddMetadataBuffer(builder, metadataBuffer): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(metadataBuffer), 0) +def ModelStartMetadataBufferVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ModelAddMetadata(builder, metadata): builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(metadata), 0) +def ModelStartMetadataVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ModelEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/MulOptions.py b/utensor_cgen/third_party/tflite/MulOptions.py new file mode 100644 index 00000000..55b9506f --- /dev/null +++ b/utensor_cgen/third_party/tflite/MulOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class MulOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsMulOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = MulOptions() + x.Init(buf, n + offset) + return x + + # MulOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # MulOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def MulOptionsStart(builder): builder.StartObject(1) +def MulOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def MulOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/NegOptions.py b/utensor_cgen/third_party/tflite/NegOptions.py new file mode 100644 index 00000000..05d55c26 --- /dev/null +++ b/utensor_cgen/third_party/tflite/NegOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class NegOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsNegOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = NegOptions() + x.Init(buf, n + offset) + return x + + # NegOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def NegOptionsStart(builder): builder.StartObject(0) +def NegOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/NonMaxSuppressionV4Options.py b/utensor_cgen/third_party/tflite/NonMaxSuppressionV4Options.py new file mode 100644 index 00000000..6ad10a2e --- /dev/null +++ b/utensor_cgen/third_party/tflite/NonMaxSuppressionV4Options.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class NonMaxSuppressionV4Options(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsNonMaxSuppressionV4Options(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = NonMaxSuppressionV4Options() + x.Init(buf, n + offset) + return x + + # NonMaxSuppressionV4Options + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def NonMaxSuppressionV4OptionsStart(builder): builder.StartObject(0) +def NonMaxSuppressionV4OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/NonMaxSuppressionV5Options.py b/utensor_cgen/third_party/tflite/NonMaxSuppressionV5Options.py new file mode 100644 index 00000000..99cbdbbf --- /dev/null +++ b/utensor_cgen/third_party/tflite/NonMaxSuppressionV5Options.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class NonMaxSuppressionV5Options(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsNonMaxSuppressionV5Options(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = NonMaxSuppressionV5Options() + x.Init(buf, n + offset) + return x + + # NonMaxSuppressionV5Options + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def NonMaxSuppressionV5OptionsStart(builder): builder.StartObject(0) +def NonMaxSuppressionV5OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/NotEqualOptions.py b/utensor_cgen/third_party/tflite/NotEqualOptions.py new file mode 100644 index 00000000..4c511e93 --- /dev/null +++ b/utensor_cgen/third_party/tflite/NotEqualOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class NotEqualOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsNotEqualOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = NotEqualOptions() + x.Init(buf, n + offset) + return x + + # NotEqualOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def NotEqualOptionsStart(builder): builder.StartObject(0) +def NotEqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/OneHotOptions.py b/utensor_cgen/third_party/tflite/OneHotOptions.py new file mode 100644 index 00000000..793a3e75 --- /dev/null +++ b/utensor_cgen/third_party/tflite/OneHotOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class OneHotOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsOneHotOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = OneHotOptions() + x.Init(buf, n + offset) + return x + + # OneHotOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # OneHotOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def OneHotOptionsStart(builder): builder.StartObject(1) +def OneHotOptionsAddAxis(builder, axis): builder.PrependInt32Slot(0, axis, 0) +def OneHotOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/Operator.py b/utensor_cgen/third_party/tflite/Operator.py new file mode 100644 index 00000000..cbae3dab --- /dev/null +++ b/utensor_cgen/third_party/tflite/Operator.py @@ -0,0 +1,177 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Operator(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsOperator(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Operator() + x.Init(buf, n + offset) + return x + + # Operator + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Operator + def OpcodeIndex(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + # Operator + def Inputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # Operator + def InputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # Operator + def InputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Operator + def Outputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # Operator + def OutputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # Operator + def OutputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Operator + def BuiltinOptionsType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # Operator + def BuiltinOptions(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + return None + + # Operator + def CustomOptions(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Operator + def CustomOptionsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) + return 0 + + # Operator + def CustomOptionsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Operator + def CustomOptionsFormat(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Operator + def MutatingVariableInputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.BoolFlags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) + return 0 + + # Operator + def MutatingVariableInputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.BoolFlags, o) + return 0 + + # Operator + def MutatingVariableInputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Operator + def Intermediates(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # Operator + def IntermediatesAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # Operator + def IntermediatesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def OperatorStart(builder): builder.StartObject(9) +def OperatorAddOpcodeIndex(builder, opcodeIndex): builder.PrependUint32Slot(0, opcodeIndex, 0) +def OperatorAddInputs(builder, inputs): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(inputs), 0) +def OperatorStartInputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def OperatorAddOutputs(builder, outputs): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(outputs), 0) +def OperatorStartOutputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def OperatorAddBuiltinOptionsType(builder, builtinOptionsType): builder.PrependUint8Slot(3, builtinOptionsType, 0) +def OperatorAddBuiltinOptions(builder, builtinOptions): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(builtinOptions), 0) +def OperatorAddCustomOptions(builder, customOptions): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(customOptions), 0) +def OperatorStartCustomOptionsVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def OperatorAddCustomOptionsFormat(builder, customOptionsFormat): builder.PrependInt8Slot(6, customOptionsFormat, 0) +def OperatorAddMutatingVariableInputs(builder, mutatingVariableInputs): builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(mutatingVariableInputs), 0) +def OperatorStartMutatingVariableInputsVector(builder, numElems): return builder.StartVector(1, numElems, 1) +def OperatorAddIntermediates(builder, intermediates): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(intermediates), 0) +def OperatorStartIntermediatesVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def OperatorEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/OperatorCode.py b/utensor_cgen/third_party/tflite/OperatorCode.py new file mode 100644 index 00000000..dd525f53 --- /dev/null +++ b/utensor_cgen/third_party/tflite/OperatorCode.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class OperatorCode(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsOperatorCode(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = OperatorCode() + x.Init(buf, n + offset) + return x + + # OperatorCode + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # OperatorCode + def BuiltinCode(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # OperatorCode + def CustomCode(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # OperatorCode + def Version(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 1 + +def OperatorCodeStart(builder): builder.StartObject(3) +def OperatorCodeAddBuiltinCode(builder, builtinCode): builder.PrependInt8Slot(0, builtinCode, 0) +def OperatorCodeAddCustomCode(builder, customCode): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(customCode), 0) +def OperatorCodeAddVersion(builder, version): builder.PrependInt32Slot(2, version, 1) +def OperatorCodeEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/PackOptions.py b/utensor_cgen/third_party/tflite/PackOptions.py new file mode 100644 index 00000000..6a8ee2bb --- /dev/null +++ b/utensor_cgen/third_party/tflite/PackOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class PackOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPackOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = PackOptions() + x.Init(buf, n + offset) + return x + + # PackOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # PackOptions + def ValuesCount(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # PackOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def PackOptionsStart(builder): builder.StartObject(2) +def PackOptionsAddValuesCount(builder, valuesCount): builder.PrependInt32Slot(0, valuesCount, 0) +def PackOptionsAddAxis(builder, axis): builder.PrependInt32Slot(1, axis, 0) +def PackOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/PadOptions.py b/utensor_cgen/third_party/tflite/PadOptions.py new file mode 100644 index 00000000..d0833c68 --- /dev/null +++ b/utensor_cgen/third_party/tflite/PadOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class PadOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPadOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = PadOptions() + x.Init(buf, n + offset) + return x + + # PadOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def PadOptionsStart(builder): builder.StartObject(0) +def PadOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/PadV2Options.py b/utensor_cgen/third_party/tflite/PadV2Options.py new file mode 100644 index 00000000..5ea0d70c --- /dev/null +++ b/utensor_cgen/third_party/tflite/PadV2Options.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class PadV2Options(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPadV2Options(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = PadV2Options() + x.Init(buf, n + offset) + return x + + # PadV2Options + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def PadV2OptionsStart(builder): builder.StartObject(0) +def PadV2OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/Padding.py b/utensor_cgen/third_party/tflite/Padding.py new file mode 100644 index 00000000..6027f4b5 --- /dev/null +++ b/utensor_cgen/third_party/tflite/Padding.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class Padding(object): + SAME = 0 + VALID = 1 + diff --git a/utensor_cgen/third_party/tflite/Pool2DOptions.py b/utensor_cgen/third_party/tflite/Pool2DOptions.py new file mode 100644 index 00000000..b8b9f178 --- /dev/null +++ b/utensor_cgen/third_party/tflite/Pool2DOptions.py @@ -0,0 +1,70 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Pool2DOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPool2DOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Pool2DOptions() + x.Init(buf, n + offset) + return x + + # Pool2DOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Pool2DOptions + def Padding(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def StrideW(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def StrideH(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def FilterWidth(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def FilterHeight(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # Pool2DOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def Pool2DOptionsStart(builder): builder.StartObject(6) +def Pool2DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) +def Pool2DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) +def Pool2DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) +def Pool2DOptionsAddFilterWidth(builder, filterWidth): builder.PrependInt32Slot(3, filterWidth, 0) +def Pool2DOptionsAddFilterHeight(builder, filterHeight): builder.PrependInt32Slot(4, filterHeight, 0) +def Pool2DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(5, fusedActivationFunction, 0) +def Pool2DOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/PowOptions.py b/utensor_cgen/third_party/tflite/PowOptions.py new file mode 100644 index 00000000..666ca488 --- /dev/null +++ b/utensor_cgen/third_party/tflite/PowOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class PowOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsPowOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = PowOptions() + x.Init(buf, n + offset) + return x + + # PowOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def PowOptionsStart(builder): builder.StartObject(0) +def PowOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/QuantizationDetails.py b/utensor_cgen/third_party/tflite/QuantizationDetails.py new file mode 100644 index 00000000..7159efbd --- /dev/null +++ b/utensor_cgen/third_party/tflite/QuantizationDetails.py @@ -0,0 +1,8 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class QuantizationDetails(object): + NONE = 0 + CustomQuantization = 1 + diff --git a/utensor_cgen/third_party/tflite/QuantizationParameters.py b/utensor_cgen/third_party/tflite/QuantizationParameters.py new file mode 100644 index 00000000..fcd686cf --- /dev/null +++ b/utensor_cgen/third_party/tflite/QuantizationParameters.py @@ -0,0 +1,145 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class QuantizationParameters(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsQuantizationParameters(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = QuantizationParameters() + x.Init(buf, n + offset) + return x + + # QuantizationParameters + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # QuantizationParameters + def Min(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # QuantizationParameters + def MinAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Float32Flags, o) + return 0 + + # QuantizationParameters + def MinLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # QuantizationParameters + def Max(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # QuantizationParameters + def MaxAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Float32Flags, o) + return 0 + + # QuantizationParameters + def MaxLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # QuantizationParameters + def Scale(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # QuantizationParameters + def ScaleAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Float32Flags, o) + return 0 + + # QuantizationParameters + def ScaleLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # QuantizationParameters + def ZeroPoint(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int64Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 8)) + return 0 + + # QuantizationParameters + def ZeroPointAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int64Flags, o) + return 0 + + # QuantizationParameters + def ZeroPointLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # QuantizationParameters + def DetailsType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) + return 0 + + # QuantizationParameters + def Details(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + from flatbuffers.table import Table + obj = Table(bytearray(), 0) + self._tab.Union(obj, o) + return obj + return None + + # QuantizationParameters + def QuantizedDimension(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def QuantizationParametersStart(builder): builder.StartObject(7) +def QuantizationParametersAddMin(builder, min): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(min), 0) +def QuantizationParametersStartMinVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def QuantizationParametersAddMax(builder, max): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(max), 0) +def QuantizationParametersStartMaxVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def QuantizationParametersAddScale(builder, scale): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(scale), 0) +def QuantizationParametersStartScaleVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def QuantizationParametersAddZeroPoint(builder, zeroPoint): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(zeroPoint), 0) +def QuantizationParametersStartZeroPointVector(builder, numElems): return builder.StartVector(8, numElems, 8) +def QuantizationParametersAddDetailsType(builder, detailsType): builder.PrependUint8Slot(4, detailsType, 0) +def QuantizationParametersAddDetails(builder, details): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(details), 0) +def QuantizationParametersAddQuantizedDimension(builder, quantizedDimension): builder.PrependInt32Slot(6, quantizedDimension, 0) +def QuantizationParametersEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/QuantizeOptions.py b/utensor_cgen/third_party/tflite/QuantizeOptions.py new file mode 100644 index 00000000..28af8cc9 --- /dev/null +++ b/utensor_cgen/third_party/tflite/QuantizeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class QuantizeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsQuantizeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = QuantizeOptions() + x.Init(buf, n + offset) + return x + + # QuantizeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def QuantizeOptionsStart(builder): builder.StartObject(0) +def QuantizeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/RNNOptions.py b/utensor_cgen/third_party/tflite/RNNOptions.py new file mode 100644 index 00000000..3cfdb6af --- /dev/null +++ b/utensor_cgen/third_party/tflite/RNNOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class RNNOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsRNNOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = RNNOptions() + x.Init(buf, n + offset) + return x + + # RNNOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # RNNOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def RNNOptionsStart(builder): builder.StartObject(1) +def RNNOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def RNNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/RangeOptions.py b/utensor_cgen/third_party/tflite/RangeOptions.py new file mode 100644 index 00000000..cb705b57 --- /dev/null +++ b/utensor_cgen/third_party/tflite/RangeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class RangeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsRangeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = RangeOptions() + x.Init(buf, n + offset) + return x + + # RangeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def RangeOptionsStart(builder): builder.StartObject(0) +def RangeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/RankOptions.py b/utensor_cgen/third_party/tflite/RankOptions.py new file mode 100644 index 00000000..4e4a5ecd --- /dev/null +++ b/utensor_cgen/third_party/tflite/RankOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class RankOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsRankOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = RankOptions() + x.Init(buf, n + offset) + return x + + # RankOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def RankOptionsStart(builder): builder.StartObject(0) +def RankOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ReducerOptions.py b/utensor_cgen/third_party/tflite/ReducerOptions.py new file mode 100644 index 00000000..93bbde17 --- /dev/null +++ b/utensor_cgen/third_party/tflite/ReducerOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ReducerOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsReducerOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ReducerOptions() + x.Init(buf, n + offset) + return x + + # ReducerOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ReducerOptions + def KeepDims(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def ReducerOptionsStart(builder): builder.StartObject(1) +def ReducerOptionsAddKeepDims(builder, keepDims): builder.PrependBoolSlot(0, keepDims, 0) +def ReducerOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ReshapeOptions.py b/utensor_cgen/third_party/tflite/ReshapeOptions.py new file mode 100644 index 00000000..157d45d9 --- /dev/null +++ b/utensor_cgen/third_party/tflite/ReshapeOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ReshapeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsReshapeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ReshapeOptions() + x.Init(buf, n + offset) + return x + + # ReshapeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ReshapeOptions + def NewShape(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # ReshapeOptions + def NewShapeAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # ReshapeOptions + def NewShapeLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def ReshapeOptionsStart(builder): builder.StartObject(1) +def ReshapeOptionsAddNewShape(builder, newShape): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(newShape), 0) +def ReshapeOptionsStartNewShapeVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def ReshapeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ResizeBilinearOptions.py b/utensor_cgen/third_party/tflite/ResizeBilinearOptions.py new file mode 100644 index 00000000..0d1f9624 --- /dev/null +++ b/utensor_cgen/third_party/tflite/ResizeBilinearOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ResizeBilinearOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsResizeBilinearOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ResizeBilinearOptions() + x.Init(buf, n + offset) + return x + + # ResizeBilinearOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ResizeBilinearOptions + def AlignCorners(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def ResizeBilinearOptionsStart(builder): builder.StartObject(3) +def ResizeBilinearOptionsAddAlignCorners(builder, alignCorners): builder.PrependBoolSlot(2, alignCorners, 0) +def ResizeBilinearOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ResizeNearestNeighborOptions.py b/utensor_cgen/third_party/tflite/ResizeNearestNeighborOptions.py new file mode 100644 index 00000000..4b166e95 --- /dev/null +++ b/utensor_cgen/third_party/tflite/ResizeNearestNeighborOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ResizeNearestNeighborOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsResizeNearestNeighborOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ResizeNearestNeighborOptions() + x.Init(buf, n + offset) + return x + + # ResizeNearestNeighborOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ResizeNearestNeighborOptions + def AlignCorners(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def ResizeNearestNeighborOptionsStart(builder): builder.StartObject(1) +def ResizeNearestNeighborOptionsAddAlignCorners(builder, alignCorners): builder.PrependBoolSlot(0, alignCorners, 0) +def ResizeNearestNeighborOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ReverseSequenceOptions.py b/utensor_cgen/third_party/tflite/ReverseSequenceOptions.py new file mode 100644 index 00000000..cbaf96db --- /dev/null +++ b/utensor_cgen/third_party/tflite/ReverseSequenceOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ReverseSequenceOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsReverseSequenceOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ReverseSequenceOptions() + x.Init(buf, n + offset) + return x + + # ReverseSequenceOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ReverseSequenceOptions + def SeqDim(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # ReverseSequenceOptions + def BatchDim(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def ReverseSequenceOptionsStart(builder): builder.StartObject(2) +def ReverseSequenceOptionsAddSeqDim(builder, seqDim): builder.PrependInt32Slot(0, seqDim, 0) +def ReverseSequenceOptionsAddBatchDim(builder, batchDim): builder.PrependInt32Slot(1, batchDim, 0) +def ReverseSequenceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ReverseV2Options.py b/utensor_cgen/third_party/tflite/ReverseV2Options.py new file mode 100644 index 00000000..dbac9362 --- /dev/null +++ b/utensor_cgen/third_party/tflite/ReverseV2Options.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ReverseV2Options(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsReverseV2Options(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ReverseV2Options() + x.Init(buf, n + offset) + return x + + # ReverseV2Options + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def ReverseV2OptionsStart(builder): builder.StartObject(0) +def ReverseV2OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SVDFOptions.py b/utensor_cgen/third_party/tflite/SVDFOptions.py new file mode 100644 index 00000000..6f391db1 --- /dev/null +++ b/utensor_cgen/third_party/tflite/SVDFOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SVDFOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSVDFOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SVDFOptions() + x.Init(buf, n + offset) + return x + + # SVDFOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SVDFOptions + def Rank(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # SVDFOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def SVDFOptionsStart(builder): builder.StartObject(2) +def SVDFOptionsAddRank(builder, rank): builder.PrependInt32Slot(0, rank, 0) +def SVDFOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) +def SVDFOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SelectOptions.py b/utensor_cgen/third_party/tflite/SelectOptions.py new file mode 100644 index 00000000..d67daf36 --- /dev/null +++ b/utensor_cgen/third_party/tflite/SelectOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SelectOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSelectOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SelectOptions() + x.Init(buf, n + offset) + return x + + # SelectOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SelectOptionsStart(builder): builder.StartObject(0) +def SelectOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SequenceRNNOptions.py b/utensor_cgen/third_party/tflite/SequenceRNNOptions.py new file mode 100644 index 00000000..74a4954a --- /dev/null +++ b/utensor_cgen/third_party/tflite/SequenceRNNOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SequenceRNNOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSequenceRNNOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SequenceRNNOptions() + x.Init(buf, n + offset) + return x + + # SequenceRNNOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SequenceRNNOptions + def TimeMajor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + + # SequenceRNNOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def SequenceRNNOptionsStart(builder): builder.StartObject(2) +def SequenceRNNOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(0, timeMajor, 0) +def SequenceRNNOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) +def SequenceRNNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ShapeOptions.py b/utensor_cgen/third_party/tflite/ShapeOptions.py new file mode 100644 index 00000000..2d24c05f --- /dev/null +++ b/utensor_cgen/third_party/tflite/ShapeOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ShapeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsShapeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ShapeOptions() + x.Init(buf, n + offset) + return x + + # ShapeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # ShapeOptions + def OutType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def ShapeOptionsStart(builder): builder.StartObject(1) +def ShapeOptionsAddOutType(builder, outType): builder.PrependInt8Slot(0, outType, 0) +def ShapeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SkipGramOptions.py b/utensor_cgen/third_party/tflite/SkipGramOptions.py new file mode 100644 index 00000000..0e8bdc1d --- /dev/null +++ b/utensor_cgen/third_party/tflite/SkipGramOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SkipGramOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSkipGramOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SkipGramOptions() + x.Init(buf, n + offset) + return x + + # SkipGramOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SkipGramOptions + def NgramSize(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # SkipGramOptions + def MaxSkipSize(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # SkipGramOptions + def IncludeAllNgrams(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def SkipGramOptionsStart(builder): builder.StartObject(3) +def SkipGramOptionsAddNgramSize(builder, ngramSize): builder.PrependInt32Slot(0, ngramSize, 0) +def SkipGramOptionsAddMaxSkipSize(builder, maxSkipSize): builder.PrependInt32Slot(1, maxSkipSize, 0) +def SkipGramOptionsAddIncludeAllNgrams(builder, includeAllNgrams): builder.PrependBoolSlot(2, includeAllNgrams, 0) +def SkipGramOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SliceOptions.py b/utensor_cgen/third_party/tflite/SliceOptions.py new file mode 100644 index 00000000..4b41568d --- /dev/null +++ b/utensor_cgen/third_party/tflite/SliceOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SliceOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSliceOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SliceOptions() + x.Init(buf, n + offset) + return x + + # SliceOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SliceOptionsStart(builder): builder.StartObject(0) +def SliceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SoftmaxOptions.py b/utensor_cgen/third_party/tflite/SoftmaxOptions.py new file mode 100644 index 00000000..a7168534 --- /dev/null +++ b/utensor_cgen/third_party/tflite/SoftmaxOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SoftmaxOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSoftmaxOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SoftmaxOptions() + x.Init(buf, n + offset) + return x + + # SoftmaxOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SoftmaxOptions + def Beta(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + +def SoftmaxOptionsStart(builder): builder.StartObject(1) +def SoftmaxOptionsAddBeta(builder, beta): builder.PrependFloat32Slot(0, beta, 0.0) +def SoftmaxOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SpaceToBatchNDOptions.py b/utensor_cgen/third_party/tflite/SpaceToBatchNDOptions.py new file mode 100644 index 00000000..b61ef96f --- /dev/null +++ b/utensor_cgen/third_party/tflite/SpaceToBatchNDOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SpaceToBatchNDOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSpaceToBatchNDOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SpaceToBatchNDOptions() + x.Init(buf, n + offset) + return x + + # SpaceToBatchNDOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SpaceToBatchNDOptionsStart(builder): builder.StartObject(0) +def SpaceToBatchNDOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SpaceToDepthOptions.py b/utensor_cgen/third_party/tflite/SpaceToDepthOptions.py new file mode 100644 index 00000000..d571174a --- /dev/null +++ b/utensor_cgen/third_party/tflite/SpaceToDepthOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SpaceToDepthOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSpaceToDepthOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SpaceToDepthOptions() + x.Init(buf, n + offset) + return x + + # SpaceToDepthOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SpaceToDepthOptions + def BlockSize(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def SpaceToDepthOptionsStart(builder): builder.StartObject(1) +def SpaceToDepthOptionsAddBlockSize(builder, blockSize): builder.PrependInt32Slot(0, blockSize, 0) +def SpaceToDepthOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SparseToDenseOptions.py b/utensor_cgen/third_party/tflite/SparseToDenseOptions.py new file mode 100644 index 00000000..826eee08 --- /dev/null +++ b/utensor_cgen/third_party/tflite/SparseToDenseOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SparseToDenseOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSparseToDenseOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SparseToDenseOptions() + x.Init(buf, n + offset) + return x + + # SparseToDenseOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SparseToDenseOptions + def ValidateIndices(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def SparseToDenseOptionsStart(builder): builder.StartObject(1) +def SparseToDenseOptionsAddValidateIndices(builder, validateIndices): builder.PrependBoolSlot(0, validateIndices, 0) +def SparseToDenseOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SplitOptions.py b/utensor_cgen/third_party/tflite/SplitOptions.py new file mode 100644 index 00000000..3207525b --- /dev/null +++ b/utensor_cgen/third_party/tflite/SplitOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SplitOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSplitOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SplitOptions() + x.Init(buf, n + offset) + return x + + # SplitOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SplitOptions + def NumSplits(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def SplitOptionsStart(builder): builder.StartObject(1) +def SplitOptionsAddNumSplits(builder, numSplits): builder.PrependInt32Slot(0, numSplits, 0) +def SplitOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SplitVOptions.py b/utensor_cgen/third_party/tflite/SplitVOptions.py new file mode 100644 index 00000000..418959de --- /dev/null +++ b/utensor_cgen/third_party/tflite/SplitVOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SplitVOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSplitVOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SplitVOptions() + x.Init(buf, n + offset) + return x + + # SplitVOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SplitVOptions + def NumSplits(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def SplitVOptionsStart(builder): builder.StartObject(1) +def SplitVOptionsAddNumSplits(builder, numSplits): builder.PrependInt32Slot(0, numSplits, 0) +def SplitVOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SquareOptions.py b/utensor_cgen/third_party/tflite/SquareOptions.py new file mode 100644 index 00000000..56633f6a --- /dev/null +++ b/utensor_cgen/third_party/tflite/SquareOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SquareOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSquareOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SquareOptions() + x.Init(buf, n + offset) + return x + + # SquareOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SquareOptionsStart(builder): builder.StartObject(0) +def SquareOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SquaredDifferenceOptions.py b/utensor_cgen/third_party/tflite/SquaredDifferenceOptions.py new file mode 100644 index 00000000..906855d1 --- /dev/null +++ b/utensor_cgen/third_party/tflite/SquaredDifferenceOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SquaredDifferenceOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSquaredDifferenceOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SquaredDifferenceOptions() + x.Init(buf, n + offset) + return x + + # SquaredDifferenceOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def SquaredDifferenceOptionsStart(builder): builder.StartObject(0) +def SquaredDifferenceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SqueezeOptions.py b/utensor_cgen/third_party/tflite/SqueezeOptions.py new file mode 100644 index 00000000..25b294dc --- /dev/null +++ b/utensor_cgen/third_party/tflite/SqueezeOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SqueezeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSqueezeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SqueezeOptions() + x.Init(buf, n + offset) + return x + + # SqueezeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SqueezeOptions + def SqueezeDims(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # SqueezeOptions + def SqueezeDimsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # SqueezeOptions + def SqueezeDimsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def SqueezeOptionsStart(builder): builder.StartObject(1) +def SqueezeOptionsAddSqueezeDims(builder, squeezeDims): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(squeezeDims), 0) +def SqueezeOptionsStartSqueezeDimsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SqueezeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/StridedSliceOptions.py b/utensor_cgen/third_party/tflite/StridedSliceOptions.py new file mode 100644 index 00000000..3bbb36b8 --- /dev/null +++ b/utensor_cgen/third_party/tflite/StridedSliceOptions.py @@ -0,0 +1,62 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class StridedSliceOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsStridedSliceOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = StridedSliceOptions() + x.Init(buf, n + offset) + return x + + # StridedSliceOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # StridedSliceOptions + def BeginMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # StridedSliceOptions + def EndMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # StridedSliceOptions + def EllipsisMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # StridedSliceOptions + def NewAxisMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # StridedSliceOptions + def ShrinkAxisMask(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def StridedSliceOptionsStart(builder): builder.StartObject(5) +def StridedSliceOptionsAddBeginMask(builder, beginMask): builder.PrependInt32Slot(0, beginMask, 0) +def StridedSliceOptionsAddEndMask(builder, endMask): builder.PrependInt32Slot(1, endMask, 0) +def StridedSliceOptionsAddEllipsisMask(builder, ellipsisMask): builder.PrependInt32Slot(2, ellipsisMask, 0) +def StridedSliceOptionsAddNewAxisMask(builder, newAxisMask): builder.PrependInt32Slot(3, newAxisMask, 0) +def StridedSliceOptionsAddShrinkAxisMask(builder, shrinkAxisMask): builder.PrependInt32Slot(4, shrinkAxisMask, 0) +def StridedSliceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SubGraph.py b/utensor_cgen/third_party/tflite/SubGraph.py new file mode 100644 index 00000000..eaa42fac --- /dev/null +++ b/utensor_cgen/third_party/tflite/SubGraph.py @@ -0,0 +1,122 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SubGraph(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSubGraph(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SubGraph() + x.Init(buf, n + offset) + return x + + # SubGraph + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SubGraph + def Tensors(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .Tensor import Tensor + obj = Tensor() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # SubGraph + def TensorsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # SubGraph + def Inputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # SubGraph + def InputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # SubGraph + def InputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # SubGraph + def Outputs(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # SubGraph + def OutputsAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # SubGraph + def OutputsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # SubGraph + def Operators(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .Operator import Operator + obj = Operator() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # SubGraph + def OperatorsLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # SubGraph + def Name(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + +def SubGraphStart(builder): builder.StartObject(5) +def SubGraphAddTensors(builder, tensors): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(tensors), 0) +def SubGraphStartTensorsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SubGraphAddInputs(builder, inputs): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(inputs), 0) +def SubGraphStartInputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SubGraphAddOutputs(builder, outputs): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(outputs), 0) +def SubGraphStartOutputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SubGraphAddOperators(builder, operators): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(operators), 0) +def SubGraphStartOperatorsVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def SubGraphAddName(builder, name): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) +def SubGraphEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/SubOptions.py b/utensor_cgen/third_party/tflite/SubOptions.py new file mode 100644 index 00000000..eccd7aba --- /dev/null +++ b/utensor_cgen/third_party/tflite/SubOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class SubOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsSubOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SubOptions() + x.Init(buf, n + offset) + return x + + # SubOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # SubOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + +def SubOptionsStart(builder): builder.StartObject(1) +def SubOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def SubOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/Tensor.py b/utensor_cgen/third_party/tflite/Tensor.py new file mode 100644 index 00000000..9b5b8f87 --- /dev/null +++ b/utensor_cgen/third_party/tflite/Tensor.py @@ -0,0 +1,90 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class Tensor(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTensor(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Tensor() + x.Init(buf, n + offset) + return x + + # Tensor + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # Tensor + def Shape(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) + return 0 + + # Tensor + def ShapeAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) + return 0 + + # Tensor + def ShapeLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Tensor + def Type(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # Tensor + def Buffer(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) + return 0 + + # Tensor + def Name(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return self._tab.String(o + self._tab.Pos) + return None + + # Tensor + def Quantization(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) + if o != 0: + x = self._tab.Indirect(o + self._tab.Pos) + from .QuantizationParameters import QuantizationParameters + obj = QuantizationParameters() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Tensor + def IsVariable(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def TensorStart(builder): builder.StartObject(6) +def TensorAddShape(builder, shape): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(shape), 0) +def TensorStartShapeVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def TensorAddType(builder, type): builder.PrependInt8Slot(1, type, 0) +def TensorAddBuffer(builder, buffer): builder.PrependUint32Slot(2, buffer, 0) +def TensorAddName(builder, name): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) +def TensorAddQuantization(builder, quantization): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(quantization), 0) +def TensorAddIsVariable(builder, isVariable): builder.PrependBoolSlot(5, isVariable, 0) +def TensorEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/TensorType.py b/utensor_cgen/third_party/tflite/TensorType.py new file mode 100644 index 00000000..2455835a --- /dev/null +++ b/utensor_cgen/third_party/tflite/TensorType.py @@ -0,0 +1,16 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +class TensorType(object): + FLOAT32 = 0 + FLOAT16 = 1 + INT32 = 2 + UINT8 = 3 + INT64 = 4 + STRING = 5 + BOOL = 6 + INT16 = 7 + COMPLEX64 = 8 + INT8 = 9 + diff --git a/utensor_cgen/third_party/tflite/TileOptions.py b/utensor_cgen/third_party/tflite/TileOptions.py new file mode 100644 index 00000000..ec8396dc --- /dev/null +++ b/utensor_cgen/third_party/tflite/TileOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class TileOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTileOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TileOptions() + x.Init(buf, n + offset) + return x + + # TileOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def TileOptionsStart(builder): builder.StartObject(0) +def TileOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/TopKV2Options.py b/utensor_cgen/third_party/tflite/TopKV2Options.py new file mode 100644 index 00000000..ccd51033 --- /dev/null +++ b/utensor_cgen/third_party/tflite/TopKV2Options.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class TopKV2Options(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTopKV2Options(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TopKV2Options() + x.Init(buf, n + offset) + return x + + # TopKV2Options + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def TopKV2OptionsStart(builder): builder.StartObject(0) +def TopKV2OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/TransposeConvOptions.py b/utensor_cgen/third_party/tflite/TransposeConvOptions.py new file mode 100644 index 00000000..423571c8 --- /dev/null +++ b/utensor_cgen/third_party/tflite/TransposeConvOptions.py @@ -0,0 +1,46 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class TransposeConvOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTransposeConvOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TransposeConvOptions() + x.Init(buf, n + offset) + return x + + # TransposeConvOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # TransposeConvOptions + def Padding(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # TransposeConvOptions + def StrideW(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # TransposeConvOptions + def StrideH(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def TransposeConvOptionsStart(builder): builder.StartObject(3) +def TransposeConvOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) +def TransposeConvOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) +def TransposeConvOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) +def TransposeConvOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/TransposeOptions.py b/utensor_cgen/third_party/tflite/TransposeOptions.py new file mode 100644 index 00000000..42c596d9 --- /dev/null +++ b/utensor_cgen/third_party/tflite/TransposeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class TransposeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsTransposeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TransposeOptions() + x.Init(buf, n + offset) + return x + + # TransposeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def TransposeOptionsStart(builder): builder.StartObject(0) +def TransposeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/UnidirectionalSequenceLSTMOptions.py b/utensor_cgen/third_party/tflite/UnidirectionalSequenceLSTMOptions.py new file mode 100644 index 00000000..1b0c112c --- /dev/null +++ b/utensor_cgen/third_party/tflite/UnidirectionalSequenceLSTMOptions.py @@ -0,0 +1,54 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class UnidirectionalSequenceLSTMOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsUnidirectionalSequenceLSTMOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = UnidirectionalSequenceLSTMOptions() + x.Init(buf, n + offset) + return x + + # UnidirectionalSequenceLSTMOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # UnidirectionalSequenceLSTMOptions + def FusedActivationFunction(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 0 + + # UnidirectionalSequenceLSTMOptions + def CellClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # UnidirectionalSequenceLSTMOptions + def ProjClip(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) + return 0.0 + + # UnidirectionalSequenceLSTMOptions + def TimeMajor(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) + if o != 0: + return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) + return False + +def UnidirectionalSequenceLSTMOptionsStart(builder): builder.StartObject(4) +def UnidirectionalSequenceLSTMOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) +def UnidirectionalSequenceLSTMOptionsAddCellClip(builder, cellClip): builder.PrependFloat32Slot(1, cellClip, 0.0) +def UnidirectionalSequenceLSTMOptionsAddProjClip(builder, projClip): builder.PrependFloat32Slot(2, projClip, 0.0) +def UnidirectionalSequenceLSTMOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(3, timeMajor, 0) +def UnidirectionalSequenceLSTMOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/UniqueOptions.py b/utensor_cgen/third_party/tflite/UniqueOptions.py new file mode 100644 index 00000000..841c6977 --- /dev/null +++ b/utensor_cgen/third_party/tflite/UniqueOptions.py @@ -0,0 +1,30 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class UniqueOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsUniqueOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = UniqueOptions() + x.Init(buf, n + offset) + return x + + # UniqueOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # UniqueOptions + def IdxOutType(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) + return 2 + +def UniqueOptionsStart(builder): builder.StartObject(1) +def UniqueOptionsAddIdxOutType(builder, idxOutType): builder.PrependInt8Slot(0, idxOutType, 2) +def UniqueOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/UnpackOptions.py b/utensor_cgen/third_party/tflite/UnpackOptions.py new file mode 100644 index 00000000..eed40193 --- /dev/null +++ b/utensor_cgen/third_party/tflite/UnpackOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class UnpackOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsUnpackOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = UnpackOptions() + x.Init(buf, n + offset) + return x + + # UnpackOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # UnpackOptions + def Num(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # UnpackOptions + def Axis(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def UnpackOptionsStart(builder): builder.StartObject(2) +def UnpackOptionsAddNum(builder, num): builder.PrependInt32Slot(0, num, 0) +def UnpackOptionsAddAxis(builder, axis): builder.PrependInt32Slot(1, axis, 0) +def UnpackOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/WhereOptions.py b/utensor_cgen/third_party/tflite/WhereOptions.py new file mode 100644 index 00000000..ab69f6aa --- /dev/null +++ b/utensor_cgen/third_party/tflite/WhereOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class WhereOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsWhereOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = WhereOptions() + x.Init(buf, n + offset) + return x + + # WhereOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def WhereOptionsStart(builder): builder.StartObject(0) +def WhereOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/WhileOptions.py b/utensor_cgen/third_party/tflite/WhileOptions.py new file mode 100644 index 00000000..7d5a6dfa --- /dev/null +++ b/utensor_cgen/third_party/tflite/WhileOptions.py @@ -0,0 +1,38 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class WhileOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsWhileOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = WhileOptions() + x.Init(buf, n + offset) + return x + + # WhileOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + + # WhileOptions + def CondSubgraphIndex(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + + # WhileOptions + def BodySubgraphIndex(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) + return 0 + +def WhileOptionsStart(builder): builder.StartObject(2) +def WhileOptionsAddCondSubgraphIndex(builder, condSubgraphIndex): builder.PrependInt32Slot(0, condSubgraphIndex, 0) +def WhileOptionsAddBodySubgraphIndex(builder, bodySubgraphIndex): builder.PrependInt32Slot(1, bodySubgraphIndex, 0) +def WhileOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/ZerosLikeOptions.py b/utensor_cgen/third_party/tflite/ZerosLikeOptions.py new file mode 100644 index 00000000..e6aa9639 --- /dev/null +++ b/utensor_cgen/third_party/tflite/ZerosLikeOptions.py @@ -0,0 +1,22 @@ +# automatically generated by the FlatBuffers compiler, do not modify + +# namespace: tflite + +import flatbuffers + +class ZerosLikeOptions(object): + __slots__ = ['_tab'] + + @classmethod + def GetRootAsZerosLikeOptions(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = ZerosLikeOptions() + x.Init(buf, n + offset) + return x + + # ZerosLikeOptions + def Init(self, buf, pos): + self._tab = flatbuffers.table.Table(buf, pos) + +def ZerosLikeOptionsStart(builder): builder.StartObject(0) +def ZerosLikeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/third_party/tflite/__init__.py b/utensor_cgen/third_party/tflite/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py new file mode 100644 index 00000000..8daa164e --- /dev/null +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -0,0 +1,164 @@ +# -*- coding:utf8 -*- +r"""Graph Visualization Transformer + +Transformers that export a flatbuffer file presenting the Tensorflow Lite's model. +""" +import re +from collections import OrderedDict +from copy import deepcopy + +from utensor_cgen.ir import OperationInfo, uTensorGraph +import flatbuffers +import utensor_cgen.third_party.tflite as tflite +from utensor_cgen.third_party.tflite.BuiltinOperator import BuiltinOperator +from utensor_cgen.third_party.tflite.BuiltinOptions import BuiltinOptions +from utensor_cgen.third_party.tflite.TensorType import TensorType +from utensor_cgen.logger import logger +from utensor_cgen.utils import parse_tensor_name + +from .base import Transformer + +__all__ = ["TFLiteExporter"] + +class FlatbufferOpManager: + op_list = list() + code_name_lookup = {v: k for k, v in BuiltinOperator.__dict__.items()} + + def regsiter_op(self, op_type_str): + if op_type_str not in BuiltinOperator.__dict__: + assert("invalid op str") + if op_type_str not in self.op_list: + self.op_list.append(op_type_str) + return self.op_index(op_type_str) + + def op_index(self, op_type_str): + return self.op_list.index(op_type_str) + def op_code(self, op_type_str): + return BuiltinOperator.__dict__[op_type_str] + def code2name(self, _op_code): + return self.code_name_lookup[_op_code] + def code2index(self, _op_code): + return self.op_list.index(self.code2name(_op_code)) + def index2code(self, _index): + op_type = self.op_list[_index] + return BuiltinOperator.__dict__[op_type] + def index2name(self, _index): + code = self.index2code(_index) + return self.code2name(code) + +class TFLiteExporter(Transformer): + METHOD_NAME = 'tflite_export' + KWARGS_NAMESCOPE = '_tflite_export' + Max_fbuff_size = 1024 * 10 + op_manager = FlatbufferOpManager() + fbuilder = flatbuffers.Builder(Max_fbuff_size) + tensor_buffer_index = OrderedDict() #added to the Model object + tensor_index = OrderedDict() #added to the Subgraph object + op_exec_order = list() + + def __init__(self): + self.prune_graph = False #what is this? + + def transform(self, ugraph): + #visitor pattern here + return ugraph + + def build_buffer(self, ugraph): + + #tensor data buffers + + pass + + def create_tensor_data(self, fbuilder, ugraph): + target_ops = ["Inline", "Const"] + export_tensor_name = True + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + op_type = op_info.op_type + if op_type in target_ops: + out_tensor_info = op_info.output_tensors[0] + out_tname, out_dtype, tensor_shape = (out_tensor_info.name, + out_tensor_info.dtype, + out_tensor_info.shape) + #weight + value = op_info.op_attr['value'].value.np_array.flatten() #TODO: specify endianness here + raw_data = value.tobytes() + tflite.Buffer.BufferStartDataVector(fbuilder, len(raw_data)) + for i in raw_data: + fbuilder.PrependUint8(i) + data_vec = fbuilder.EndVector(len(raw_data)) + self.tensor_buffer_index[out_tname] = data_vec + + #shape + tflite.Tensor.TensorStartShapeVector(fbuilder, len(tensor_shape)) + for d in tensor_shape: + fbuilder.PrependInt32(d) + shape_vec = fbuilder.EndVector(len(tensor_shape)) + + #name + if export_tensor_name: + tensor_name = fbuilder.CreateString(out_tname) #TODO: legalize + + #quantization + (q_min, q_max) = self.quantization_info(op_info) + ##Min vec + tflite.QuantizationParameters.QuantizationParametersStartMinVector(fbuilder, 1) + fbuilder.PrependFloat32(q_min) + q_min_vec = fbuilder.EndVector(1) + ##Max Vec + tflite.QuantizationParameters.QuantizationParametersStartMaxVector(fbuilder, 1) + fbuilder.PrependFloat32(q_max) + q_max_vec = fbuilder.EndVector(1) + + tflite.QuantizationParameters.QuantizationParametersStart(fbuilder) + tflite.QuantizationParameters.QuantizationParametersAddMin(fbuilder, q_min_vec) + tflite.QuantizationParameters.QuantizationParametersAddMax(fbuilder, q_max_vec) + q_param = tflite.QuantizationParameters.QuantizationParametersEnd(fbuilder) + + #tensor object + tflite.Tensor.TensorStart(fbuilder) + tflite.Tensor.TensorAddShape(fbuilder, shape_vec) + tflite.Tensor.TensorAddType(fbuilder, TensorType.INT8) #TODO: a conversion class here + if export_tensor_name: + tflite.Tensor.TensorAddName(fbuilder, tensor_name) + tflite.Tensor.TensorAddQuantization(fbuilder, q_param) + tflite.Tensor.TensorAddIsVariable(fbuilder, False) + + tflite.Tensor.TensorAddBuffer(fbuilder, 0) + new_tensor = tflite.Tensor.TensorEnd(fbuilder) + self.tensor_index[out_tname] = new_tensor + + def output_vector(self, tensor_infos): + n = len(tensor_infos) + tflite.Operator.OperatorStartOutputsVector(self.fbuilder, n) + for tensor_info in tensor_infos: + tensor_index = self.tensor_index.keys().index(tensor_info.name) + self.fbuilder.PrependInt32(tensor_index) + return self.fbuilder.EndVector(n) + + def input_vector(self, tensor_infos): + n = len(tensor_infos) + tflite.Operator.OperatorStartInputsVector(self.fbuilder, n) + for tensor_info in tensor_infos: + tensor_index = self.tensor_index.keys().index(tensor_info.name) + self.fbuilder.PrependInt32(tensor_index) + return self.fbuilder.EndVector(n) + + + def add_FullyConnectedOp(self, inputs, outputs): + op_inputs = self.input_vector(inputs) + op_outputs = self.output_vector(outputs) + + tflite.Operator.OperatorStart(self.fbuilder) + tflite.Operator.OperatorAddOpcodeIndex(self.fbuilder, self.op_manager.op_index('FULLY_CONNECTED')) + tflite.Operator.OperatorAddInputs(self.fbuilder, op_inputs) + tflite.Operator.OperatorAddOutputs(self.fbuilder, op_outputs) + op = tflite.Operator.OperatorEnd(self.fbuilder) + self.op_exec_order.append(op) + + def quantization_info(self, op_info): + values = op_info.op_attr['value'].value.np_array.flatten() + return (values.min(), values.max()) + + + #TODO: op code From 4bb2de552e211e7912c16009c6cfc252b2cbefae Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Sun, 6 Oct 2019 00:28:39 +0800 Subject: [PATCH 004/117] op regristation --- utensor_cgen/transformer/tflite_exporter.py | 71 +++++++++++++-------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 8daa164e..11a710af 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -54,6 +54,7 @@ class TFLiteExporter(Transformer): fbuilder = flatbuffers.Builder(Max_fbuff_size) tensor_buffer_index = OrderedDict() #added to the Model object tensor_index = OrderedDict() #added to the Subgraph object + op_exec_order = list() def __init__(self): @@ -69,7 +70,7 @@ def build_buffer(self, ugraph): pass - def create_tensor_data(self, fbuilder, ugraph): + def create_tensor_data(self, ugraph): target_ops = ["Inline", "Const"] export_tensor_name = True for op_name in ugraph.topo_order: @@ -83,49 +84,49 @@ def create_tensor_data(self, fbuilder, ugraph): #weight value = op_info.op_attr['value'].value.np_array.flatten() #TODO: specify endianness here raw_data = value.tobytes() - tflite.Buffer.BufferStartDataVector(fbuilder, len(raw_data)) + tflite.Buffer.BufferStartDataVector(self.fbuilder, len(raw_data)) for i in raw_data: - fbuilder.PrependUint8(i) - data_vec = fbuilder.EndVector(len(raw_data)) + self.fbuilder.PrependUint8(i) + data_vec = self.fbuilder.EndVector(len(raw_data)) self.tensor_buffer_index[out_tname] = data_vec #shape - tflite.Tensor.TensorStartShapeVector(fbuilder, len(tensor_shape)) + tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_shape)) for d in tensor_shape: - fbuilder.PrependInt32(d) - shape_vec = fbuilder.EndVector(len(tensor_shape)) + self.fbuilder.PrependInt32(d) + shape_vec = self.fbuilder.EndVector(len(tensor_shape)) #name if export_tensor_name: - tensor_name = fbuilder.CreateString(out_tname) #TODO: legalize + tensor_name = self.fbuilder.CreateString(out_tname) #TODO: legalize #quantization (q_min, q_max) = self.quantization_info(op_info) ##Min vec - tflite.QuantizationParameters.QuantizationParametersStartMinVector(fbuilder, 1) - fbuilder.PrependFloat32(q_min) - q_min_vec = fbuilder.EndVector(1) + tflite.QuantizationParameters.QuantizationParametersStartMinVector(self.fbuilder, 1) + self.fbuilder.PrependFloat32(q_min) + q_min_vec = self.fbuilder.EndVector(1) ##Max Vec - tflite.QuantizationParameters.QuantizationParametersStartMaxVector(fbuilder, 1) - fbuilder.PrependFloat32(q_max) - q_max_vec = fbuilder.EndVector(1) + tflite.QuantizationParameters.QuantizationParametersStartMaxVector(self.fbuilder, 1) + self.fbuilder.PrependFloat32(q_max) + q_max_vec = self.fbuilder.EndVector(1) - tflite.QuantizationParameters.QuantizationParametersStart(fbuilder) - tflite.QuantizationParameters.QuantizationParametersAddMin(fbuilder, q_min_vec) - tflite.QuantizationParameters.QuantizationParametersAddMax(fbuilder, q_max_vec) - q_param = tflite.QuantizationParameters.QuantizationParametersEnd(fbuilder) + tflite.QuantizationParameters.QuantizationParametersStart(self.fbuilder) + tflite.QuantizationParameters.QuantizationParametersAddMin(self.fbuilder, q_min_vec) + tflite.QuantizationParameters.QuantizationParametersAddMax(self.fbuilder, q_max_vec) + q_param = tflite.QuantizationParameters.QuantizationParametersEnd(self.fbuilder) #tensor object - tflite.Tensor.TensorStart(fbuilder) - tflite.Tensor.TensorAddShape(fbuilder, shape_vec) - tflite.Tensor.TensorAddType(fbuilder, TensorType.INT8) #TODO: a conversion class here + tflite.Tensor.TensorStart(self.fbuilder) + tflite.Tensor.TensorAddShape(self.fbuilder, shape_vec) + tflite.Tensor.TensorAddType(self.fbuilder, TensorType.INT8) #TODO: a conversion class here if export_tensor_name: - tflite.Tensor.TensorAddName(fbuilder, tensor_name) - tflite.Tensor.TensorAddQuantization(fbuilder, q_param) - tflite.Tensor.TensorAddIsVariable(fbuilder, False) + tflite.Tensor.TensorAddName(self.fbuilder, tensor_name) + tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) + tflite.Tensor.TensorAddIsVariable(self.fbuilder, False) - tflite.Tensor.TensorAddBuffer(fbuilder, 0) - new_tensor = tflite.Tensor.TensorEnd(fbuilder) + tflite.Tensor.TensorAddBuffer(self.fbuilder, 0) + new_tensor = tflite.Tensor.TensorEnd(self.fbuilder) self.tensor_index[out_tname] = new_tensor def output_vector(self, tensor_infos): @@ -144,6 +145,22 @@ def input_vector(self, tensor_infos): self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) + def create_op_codes(self, ugraph): + #scan, translation and register + op_codes = list() + for op_name in ugraph.topo_order: + op_type = ugraph.ops_info[op_name].op_type + tflite.OperatorCode.OperatorCodeStart(self.fbuilder) + #TODO: op type translation happen here + opcode_index = self.op_manager.regsiter_op(op_type) + tflite.OperatorCode.OperatorCodeAddBuiltinCode(self.fbuilder, opcode_index) + op_codes.append(tflite.OperatorCode.OperatorCodeEnd(self.fbuilder)) + + tflite.Model.ModelStartOperatorCodesVector(self.fbuilder, len(op_codes)) + for it_op_code in op_codes: + self.fbuilder.PrependUOffsetTRelative(it_op_code) + op_code_vec = self.fbuilder.EndVector(len(op_codes)) + return op_code_vec #needs to be added into the Model def add_FullyConnectedOp(self, inputs, outputs): op_inputs = self.input_vector(inputs) @@ -160,5 +177,3 @@ def quantization_info(self, op_info): values = op_info.op_attr['value'].value.np_array.flatten() return (values.min(), values.max()) - - #TODO: op code From 3f19de7d42602f15cd0611a5848e4ba5073bcb38 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Mon, 7 Oct 2019 18:17:30 +0800 Subject: [PATCH 005/117] tied everything together; lacks of op factory/converter quantization param for intermediate tensors? --- utensor_cgen/transformer/tflite_exporter.py | 133 ++++++++++++++++---- 1 file changed, 109 insertions(+), 24 deletions(-) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 11a710af..7095f71c 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -52,8 +52,10 @@ class TFLiteExporter(Transformer): Max_fbuff_size = 1024 * 10 op_manager = FlatbufferOpManager() fbuilder = flatbuffers.Builder(Max_fbuff_size) - tensor_buffer_index = OrderedDict() #added to the Model object - tensor_index = OrderedDict() #added to the Subgraph object + tensor_buffer_index = OrderedDict() # out_name : data buff vec + # added to the Model object + tensor_index = OrderedDict() # out_name : ref tensor object + #added to the Subgraph object op_exec_order = list() @@ -61,22 +63,67 @@ def __init__(self): self.prune_graph = False #what is this? def transform(self, ugraph): - #visitor pattern here - return ugraph + #create tensor data buffer + #create const tensors + #update tensor_index + self.create_static_tensor(ugraph) + + #create intermediate tensors + #update tensor_index + self.create_variable_tensors(ugraph) + + #interacts with FlatbufferOpManager + op_codes_vec = self.create_op_codes(ugraph) #to be added into the Model + + #create subgraph + #first, create the tensor vector + tflite.SubGraph.SubGraphStartTensorsVector(self.fbuilder, len(self.tensor_index)) + for t_name, f_obj in self.tensor_index.items(): + self.fbuilder.PrependUOffsetTRelative(f_obj) + tensors_vec = self.fbuilder.EndVector(len(self.tensor_index)) + + ## TODO: traverse the graph and produce + ops_vec = None + ## here + + tflite.SubGraph.SubGraphStart(self.fbuilder) + tflite.SubGraph.SubGraphAddTensors(self.fbuilder, tensors_vec) + tflite.SubGraph.SubGraphAddOperators(self.fbuilder, ops_vec) + subgraph = tflite.SubGraph.SubGraphEnd(self.fbuilder) + + tflite.Model.ModelStartSubgraphsVector(self.fbuilder, 1) #TFLM runtime only support 1 subgraph + self.fbuilder.PrependUOffsetTRelative(subgraph) + subgraph_vec = self.fbuilder.EndVector(1) - def build_buffer(self, ugraph): + #model + # first, add tensor buffer here + tflite.Model.ModelStartBuffersVector(self.fbuilder, len(self.tensor_buffer_index)) + for t_name, f_obj in self.tensor_buffer_index.items(): + self.fbuilder.PrependUOffsetTRelative(f_obj) + buff_vec = self.fbuilder.EndVector(len(self.tensor_buffer_index)) - #tensor data buffers + tflite.Model.ModelStart(self.fbuilder) + tflite.Model.ModelAddVersion(self.fbuilder, 100) #TODO: change this + tflite.Model.ModelAddOperatorCodes(self.fbuilder, op_codes_vec) + tflite.Model.ModelAddSubgraphs(self.fbuilder, subgraph_vec) + tflite.Model.ModelAddBuffers(self.fbuilder, buff_vec) - pass + model = tflite.Model.ModelEnd(self.fbuilder) - def create_tensor_data(self, ugraph): + self.fbuilder.Finish(model) + + output = self.fbuilder.Output() #do something with the output here + print(output) + + return ugraph + + def create_static_tensor(self, ugraph): target_ops = ["Inline", "Const"] export_tensor_name = True for op_name in ugraph.topo_order: op_info = ugraph.ops_info[op_name] op_type = op_info.op_type - if op_type in target_ops: + if op_type in target_ops: #TODO: check if op data is empty out_tensor_info = op_info.output_tensors[0] out_tname, out_dtype, tensor_shape = (out_tensor_info.name, out_tensor_info.dtype, @@ -98,28 +145,16 @@ def create_tensor_data(self, ugraph): #name if export_tensor_name: - tensor_name = self.fbuilder.CreateString(out_tname) #TODO: legalize + tensor_name = self.fbuilder.CreateString(self.legalize_name(out_tname)) #quantization (q_min, q_max) = self.quantization_info(op_info) - ##Min vec - tflite.QuantizationParameters.QuantizationParametersStartMinVector(self.fbuilder, 1) - self.fbuilder.PrependFloat32(q_min) - q_min_vec = self.fbuilder.EndVector(1) - ##Max Vec - tflite.QuantizationParameters.QuantizationParametersStartMaxVector(self.fbuilder, 1) - self.fbuilder.PrependFloat32(q_max) - q_max_vec = self.fbuilder.EndVector(1) - - tflite.QuantizationParameters.QuantizationParametersStart(self.fbuilder) - tflite.QuantizationParameters.QuantizationParametersAddMin(self.fbuilder, q_min_vec) - tflite.QuantizationParameters.QuantizationParametersAddMax(self.fbuilder, q_max_vec) - q_param = tflite.QuantizationParameters.QuantizationParametersEnd(self.fbuilder) + q_param = self.create_quantization_param([q_min], [q_max]) #tensor object tflite.Tensor.TensorStart(self.fbuilder) tflite.Tensor.TensorAddShape(self.fbuilder, shape_vec) - tflite.Tensor.TensorAddType(self.fbuilder, TensorType.INT8) #TODO: a conversion class here + tflite.Tensor.TensorAddType(self.fbuilder, TensorType.INT8) #TODO: a conversion class here, out_dtype if export_tensor_name: tflite.Tensor.TensorAddName(self.fbuilder, tensor_name) tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) @@ -177,3 +212,53 @@ def quantization_info(self, op_info): values = op_info.op_attr['value'].value.np_array.flatten() return (values.min(), values.max()) + def create_quantization_param(self, mins, maxs): + assert len(mins) != len(maxs), "mins and maxs length mismatch" + + + tflite.QuantizationParameters.QuantizationParametersStartMinVector(self.fbuilder, len(mins)) + for _min in mins: + self.fbuilder.PrependFloat32(_min) + q_min_vec = self.fbuilder.EndVector(len(mins)) + + tflite.QuantizationParameters.QuantizationParametersStartMaxVector(self.fbuilder, len(maxs)) + for _max in maxs: + self.fbuilder.PrependFloat32(_max) + q_max_vec = self.fbuilder.EndVector(len(maxs)) + + tflite.QuantizationParameters.QuantizationParametersStart(self.fbuilder) + tflite.QuantizationParameters.QuantizationParametersAddMin(self.fbuilder, q_min_vec) + tflite.QuantizationParameters.QuantizationParametersAddMax(self.fbuilder, q_max_vec) + q_param = tflite.QuantizationParameters.QuantizationParametersEnd(self.fbuilder) + + return q_param + + def create_variable_tensors(self, ugraph): + tensor_infos = set() + for op_name in ugraph.topo_order: + tensor_infos.update(ugraph.ops_info[op_name].inputs) + tensor_infos.update(ugraph.ops_info[op_name].outputs) + for tensor_info in tensor_infos: + tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_info.shape)) + for d in tensor_info.shape: + self.fbuilder.PrependInt32(d) + shape_vec = self.fbuilder.EndVector(len(tensor_info.shape)) + + tensor_name = self.fbuilder.CreateString(self.legalize_name(tensor_info.name)) + + q_param = self.create_quantization_param([-20],[200]) #TODO: workout how to treat the quantization here + + tflite.Tensor.TensorStart(self.fbuilder) + tflite.Tensor.TensorAddShape(self.fbuilder, shape_vec) + tflite.Tensor.TensorAddType(self.fbuilder, TensorType.INT8) #TODO: tensor type conversion here + tflite.Tensor.TensorAddName(self.fbuilder, tensor_name) + tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) + tflite.Tensor.TensorAddIsVariable(self.fbuilder, True) + + self.tensor_index[tensor_info.name] = tflite.Tensor.TensorEnd(self.fbuilder) + + def legalize_name(self, str): + #TODO: legalize the name + return str + +# How to construct the quantization parameter for intermediate tensors? From 9db8ba4f12d632c99b12dea68dd69fa4b313706b Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Wed, 9 Oct 2019 17:43:29 +0800 Subject: [PATCH 006/117] uses Affine Quantization --- utensor_cgen/transformer/tflite_exporter.py | 52 ++++++++++++++------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 7095f71c..efa44488 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -5,6 +5,7 @@ """ import re from collections import OrderedDict +import numpy as np from copy import deepcopy from utensor_cgen.ir import OperationInfo, uTensorGraph @@ -148,8 +149,9 @@ def create_static_tensor(self, ugraph): tensor_name = self.fbuilder.CreateString(self.legalize_name(out_tname)) #quantization - (q_min, q_max) = self.quantization_info(op_info) - q_param = self.create_quantization_param([q_min], [q_max]) + ## only per-layer supported + (q_scale, q_zero) = self.sym_quantization_info(op_info) + q_param = self.create_quantization_param([q_scale], [q_zero]) #tensor object tflite.Tensor.TensorStart(self.fbuilder) @@ -208,31 +210,46 @@ def add_FullyConnectedOp(self, inputs, outputs): op = tflite.Operator.OperatorEnd(self.fbuilder) self.op_exec_order.append(op) - def quantization_info(self, op_info): - values = op_info.op_attr['value'].value.np_array.flatten() - return (values.min(), values.max()) - def create_quantization_param(self, mins, maxs): - assert len(mins) != len(maxs), "mins and maxs length mismatch" + def sym_quantization_info(self, op_info): + """ + https://www.tensorflow.org/lite/performance/quantization_spec + C++: TfLiteAffineQuantization struct + zero-point = 0 : symmetric quantization + Returns (scale, zero) + + TODO: per-axis quantization + """ + + values = op_info.op_attr['value'].value.np_array.flatten() + abs_max = np.absolute(values).max() + #based on quantizted int8 dtype + scale = 127 / abs_max + + return (scale, 0) + + def create_quantization_param(self, scales, zeros): + assert len(scales) != len(zeros), "scales and zero-points length mismatch" - tflite.QuantizationParameters.QuantizationParametersStartMinVector(self.fbuilder, len(mins)) - for _min in mins: - self.fbuilder.PrependFloat32(_min) - q_min_vec = self.fbuilder.EndVector(len(mins)) + tflite.QuantizationParameters.QuantizationParametersStartScaleVector(self.fbuilder, len(scales)) + for _scale in scales: + self.fbuilder.PrependFloat32(_scale) + q_scales_vec = self.fbuilder.EndVector(len(scales)) - tflite.QuantizationParameters.QuantizationParametersStartMaxVector(self.fbuilder, len(maxs)) - for _max in maxs: - self.fbuilder.PrependFloat32(_max) - q_max_vec = self.fbuilder.EndVector(len(maxs)) + tflite.QuantizationParameters.QuantizationParametersStartZeroPointVector(self.fbuilder, len(zeros)) + for _zero in zeros: + self.fbuilder.PrependFloat32(_zero) + q_zeros_vec = self.fbuilder.EndVector(len(zeros)) tflite.QuantizationParameters.QuantizationParametersStart(self.fbuilder) - tflite.QuantizationParameters.QuantizationParametersAddMin(self.fbuilder, q_min_vec) - tflite.QuantizationParameters.QuantizationParametersAddMax(self.fbuilder, q_max_vec) + tflite.QuantizationParameters.QuantizationParametersAddScale(self.fbuilder, q_scales_vec) + tflite.QuantizationParameters.QuantizationParametersAddZeroPoint(self.fbuilder, q_zeros_vec) q_param = tflite.QuantizationParameters.QuantizationParametersEnd(self.fbuilder) return q_param + # These are often the intermediate output tensors with online quantization def create_variable_tensors(self, ugraph): tensor_infos = set() for op_name in ugraph.topo_order: @@ -262,3 +279,4 @@ def legalize_name(self, str): return str # How to construct the quantization parameter for intermediate tensors? +## zero point and scale From f46ff9fc280c5e3daf920d68aa9e4d0d9d7e490d Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Wed, 9 Oct 2019 18:10:27 +0800 Subject: [PATCH 007/117] private variable and member functions --- utensor_cgen/transformer/tflite_exporter.py | 76 ++++++++++----------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index efa44488..85f675a8 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -50,13 +50,13 @@ def index2name(self, _index): class TFLiteExporter(Transformer): METHOD_NAME = 'tflite_export' KWARGS_NAMESCOPE = '_tflite_export' - Max_fbuff_size = 1024 * 10 - op_manager = FlatbufferOpManager() - fbuilder = flatbuffers.Builder(Max_fbuff_size) - tensor_buffer_index = OrderedDict() # out_name : data buff vec - # added to the Model object - tensor_index = OrderedDict() # out_name : ref tensor object - #added to the Subgraph object + __Max_fbuff_size = 1024 * 10 + __op_manager = FlatbufferOpManager() + fbuilder = flatbuffers.Builder(__Max_fbuff_size) + __tensor_buffer_index = OrderedDict() # out_name : data buff vec + # added to the Model object + __tensor_index = OrderedDict() # out_name : ref tensor object + #added to the Subgraph object op_exec_order = list() @@ -67,21 +67,21 @@ def transform(self, ugraph): #create tensor data buffer #create const tensors #update tensor_index - self.create_static_tensor(ugraph) + self.__create_static_tensor(ugraph) #create intermediate tensors #update tensor_index - self.create_variable_tensors(ugraph) + self.__create_variable_tensors(ugraph) #interacts with FlatbufferOpManager - op_codes_vec = self.create_op_codes(ugraph) #to be added into the Model + op_codes_vec = self.__create_op_codes(ugraph) #to be added into the Model #create subgraph #first, create the tensor vector - tflite.SubGraph.SubGraphStartTensorsVector(self.fbuilder, len(self.tensor_index)) - for t_name, f_obj in self.tensor_index.items(): + tflite.SubGraph.SubGraphStartTensorsVector(self.fbuilder, len(self.__tensor_index)) + for t_name, f_obj in self.__tensor_index.items(): self.fbuilder.PrependUOffsetTRelative(f_obj) - tensors_vec = self.fbuilder.EndVector(len(self.tensor_index)) + tensors_vec = self.fbuilder.EndVector(len(self.__tensor_index)) ## TODO: traverse the graph and produce ops_vec = None @@ -98,10 +98,10 @@ def transform(self, ugraph): #model # first, add tensor buffer here - tflite.Model.ModelStartBuffersVector(self.fbuilder, len(self.tensor_buffer_index)) - for t_name, f_obj in self.tensor_buffer_index.items(): + tflite.Model.ModelStartBuffersVector(self.fbuilder, len(self.__tensor_buffer_index)) + for t_name, f_obj in self.__tensor_buffer_index.items(): self.fbuilder.PrependUOffsetTRelative(f_obj) - buff_vec = self.fbuilder.EndVector(len(self.tensor_buffer_index)) + buff_vec = self.fbuilder.EndVector(len(self.__tensor_buffer_index)) tflite.Model.ModelStart(self.fbuilder) tflite.Model.ModelAddVersion(self.fbuilder, 100) #TODO: change this @@ -118,7 +118,7 @@ def transform(self, ugraph): return ugraph - def create_static_tensor(self, ugraph): + def __create_static_tensor(self, ugraph): target_ops = ["Inline", "Const"] export_tensor_name = True for op_name in ugraph.topo_order: @@ -136,7 +136,7 @@ def create_static_tensor(self, ugraph): for i in raw_data: self.fbuilder.PrependUint8(i) data_vec = self.fbuilder.EndVector(len(raw_data)) - self.tensor_buffer_index[out_tname] = data_vec + self.__tensor_buffer_index[out_tname] = data_vec #shape tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_shape)) @@ -146,12 +146,12 @@ def create_static_tensor(self, ugraph): #name if export_tensor_name: - tensor_name = self.fbuilder.CreateString(self.legalize_name(out_tname)) + tensor_name = self.fbuilder.CreateString(self.__legalize_name(out_tname)) #quantization ## only per-layer supported - (q_scale, q_zero) = self.sym_quantization_info(op_info) - q_param = self.create_quantization_param([q_scale], [q_zero]) + (q_scale, q_zero) = self.__sym_quantization_info(op_info) + q_param = self.__create_quantization_param([q_scale], [q_zero]) #tensor object tflite.Tensor.TensorStart(self.fbuilder) @@ -164,32 +164,32 @@ def create_static_tensor(self, ugraph): tflite.Tensor.TensorAddBuffer(self.fbuilder, 0) new_tensor = tflite.Tensor.TensorEnd(self.fbuilder) - self.tensor_index[out_tname] = new_tensor + self.__tensor_index[out_tname] = new_tensor - def output_vector(self, tensor_infos): + def __output_vector(self, tensor_infos): n = len(tensor_infos) tflite.Operator.OperatorStartOutputsVector(self.fbuilder, n) for tensor_info in tensor_infos: - tensor_index = self.tensor_index.keys().index(tensor_info.name) + tensor_index = self.__tensor_index.keys().index(tensor_info.name) self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) - def input_vector(self, tensor_infos): + def __input_vector(self, tensor_infos): n = len(tensor_infos) tflite.Operator.OperatorStartInputsVector(self.fbuilder, n) for tensor_info in tensor_infos: - tensor_index = self.tensor_index.keys().index(tensor_info.name) + tensor_index = self.__tensor_index.keys().index(tensor_info.name) self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) - def create_op_codes(self, ugraph): + def __create_op_codes(self, ugraph): #scan, translation and register op_codes = list() for op_name in ugraph.topo_order: op_type = ugraph.ops_info[op_name].op_type tflite.OperatorCode.OperatorCodeStart(self.fbuilder) #TODO: op type translation happen here - opcode_index = self.op_manager.regsiter_op(op_type) + opcode_index = self.__op_manager.regsiter_op(op_type) tflite.OperatorCode.OperatorCodeAddBuiltinCode(self.fbuilder, opcode_index) op_codes.append(tflite.OperatorCode.OperatorCodeEnd(self.fbuilder)) @@ -200,18 +200,18 @@ def create_op_codes(self, ugraph): return op_code_vec #needs to be added into the Model def add_FullyConnectedOp(self, inputs, outputs): - op_inputs = self.input_vector(inputs) - op_outputs = self.output_vector(outputs) + op_inputs = self.__input_vector(inputs) + op_outputs = self.__output_vector(outputs) tflite.Operator.OperatorStart(self.fbuilder) - tflite.Operator.OperatorAddOpcodeIndex(self.fbuilder, self.op_manager.op_index('FULLY_CONNECTED')) + tflite.Operator.OperatorAddOpcodeIndex(self.fbuilder, self.__op_manager.op_index('FULLY_CONNECTED')) tflite.Operator.OperatorAddInputs(self.fbuilder, op_inputs) tflite.Operator.OperatorAddOutputs(self.fbuilder, op_outputs) op = tflite.Operator.OperatorEnd(self.fbuilder) self.op_exec_order.append(op) - def sym_quantization_info(self, op_info): + def __sym_quantization_info(self, op_info): """ https://www.tensorflow.org/lite/performance/quantization_spec C++: TfLiteAffineQuantization struct @@ -228,7 +228,7 @@ def sym_quantization_info(self, op_info): return (scale, 0) - def create_quantization_param(self, scales, zeros): + def __create_quantization_param(self, scales, zeros): assert len(scales) != len(zeros), "scales and zero-points length mismatch" @@ -250,7 +250,7 @@ def create_quantization_param(self, scales, zeros): return q_param # These are often the intermediate output tensors with online quantization - def create_variable_tensors(self, ugraph): + def __create_variable_tensors(self, ugraph): tensor_infos = set() for op_name in ugraph.topo_order: tensor_infos.update(ugraph.ops_info[op_name].inputs) @@ -261,9 +261,9 @@ def create_variable_tensors(self, ugraph): self.fbuilder.PrependInt32(d) shape_vec = self.fbuilder.EndVector(len(tensor_info.shape)) - tensor_name = self.fbuilder.CreateString(self.legalize_name(tensor_info.name)) + tensor_name = self.fbuilder.CreateString(self.__legalize_name(tensor_info.name)) - q_param = self.create_quantization_param([-20],[200]) #TODO: workout how to treat the quantization here + q_param = self.__create_quantization_param([-20],[200]) #TODO: workout how to treat the quantization here tflite.Tensor.TensorStart(self.fbuilder) tflite.Tensor.TensorAddShape(self.fbuilder, shape_vec) @@ -272,9 +272,9 @@ def create_variable_tensors(self, ugraph): tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) tflite.Tensor.TensorAddIsVariable(self.fbuilder, True) - self.tensor_index[tensor_info.name] = tflite.Tensor.TensorEnd(self.fbuilder) + self.__tensor_index[tensor_info.name] = tflite.Tensor.TensorEnd(self.fbuilder) - def legalize_name(self, str): + def __legalize_name(self, str): #TODO: legalize the name return str From 8b60cc528a16ee00d7ab4c77d76f42b71ed27f2a Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Wed, 16 Oct 2019 16:24:09 +0800 Subject: [PATCH 008/117] float32 for intermediate tensors --- utensor_cgen/transformer/tflite_exporter.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 85f675a8..ab2cded1 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -250,6 +250,7 @@ def __create_quantization_param(self, scales, zeros): return q_param # These are often the intermediate output tensors with online quantization + # Allocation them as Float32 to use online quantization def __create_variable_tensors(self, ugraph): tensor_infos = set() for op_name in ugraph.topo_order: @@ -263,13 +264,14 @@ def __create_variable_tensors(self, ugraph): tensor_name = self.fbuilder.CreateString(self.__legalize_name(tensor_info.name)) - q_param = self.__create_quantization_param([-20],[200]) #TODO: workout how to treat the quantization here + #q_param = self.__create_quantization_param([-20],[200]) #TODO: workout how to treat the quantization here tflite.Tensor.TensorStart(self.fbuilder) tflite.Tensor.TensorAddShape(self.fbuilder, shape_vec) - tflite.Tensor.TensorAddType(self.fbuilder, TensorType.INT8) #TODO: tensor type conversion here + #tflite.Tensor.TensorAddType(self.fbuilder, TensorType.INT8) #TODO: tensor type conversion here + tflite.Tensor.TensorAddType(self.fbuilder, TensorType.FLOAT32) tflite.Tensor.TensorAddName(self.fbuilder, tensor_name) - tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) + #tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) tflite.Tensor.TensorAddIsVariable(self.fbuilder, True) self.__tensor_index[tensor_info.name] = tflite.Tensor.TensorEnd(self.fbuilder) From 295efea905bf2e620a25bb88f63f33c9677d51d6 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 17 Oct 2019 18:14:48 +0800 Subject: [PATCH 009/117] - bugfixes in tflite_exporter.py - layout the test mechanism - making third_party/tflite all importable --- tests/tflm/tflite_export/__init__.py | 0 tests/tflm/tflite_export/conftest.py | 105 ++++++++++++++++++++ tests/tflm/tflite_export/test_write.py | 16 +++ utensor_cgen/third_party/tflite/__init__.py | 4 + utensor_cgen/transformer/__init__.py | 1 + utensor_cgen/transformer/tflite_exporter.py | 46 ++++++--- 6 files changed, 156 insertions(+), 16 deletions(-) create mode 100644 tests/tflm/tflite_export/__init__.py create mode 100644 tests/tflm/tflite_export/conftest.py create mode 100644 tests/tflm/tflite_export/test_write.py diff --git a/tests/tflm/tflite_export/__init__.py b/tests/tflm/tflite_export/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/tflm/tflite_export/conftest.py b/tests/tflm/tflite_export/conftest.py new file mode 100644 index 00000000..899cb8c2 --- /dev/null +++ b/tests/tflm/tflite_export/conftest.py @@ -0,0 +1,105 @@ +import numpy as np +from pytest import fixture + +import tensorflow as tf +from utensor_cgen.ir import TensorInfo, OperationInfo, uTensorGraph +from utensor_cgen.utils import prune_graph, topologic_order_graph + +@fixture(name='sample_ugraph') +def simple_tflm_graph(): + ugraph = uTensorGraph() + + weight_op = OperationInfo( + name = "weight_const", + op_type = "Const", + backend = "tensorflow", + ugraph = ugraph, + op_attr = dict(), + input_tensors = [], + output_tensors = [] + ) + weight_op.op_attr["value"] = np.array([1,2,3,4], dtype=np.int8) + weight_op.op_attr["shape"] = [1,4] + + weight = TensorInfo( + name = "weight", + op_name = "weight_const", + dtype = np.dtype("int8"), + shape = weight_op.op_attr["shape"], + ugraph = ugraph + ) + weight_op.output_tensors = [weight] + + mock_input_op = OperationInfo( + name = "mock_input_const", + op_type = "Const", + backend = "tensorflow", + ugraph = ugraph, + op_attr = dict(), + input_tensors = [], + output_tensors = [] + ) + mock_input_op.op_attr["value"] = np.array([[1],[2],[3],[4]], dtype=np.int8) + mock_input_op.op_attr["shape"] = [4,1] + + input1 = TensorInfo( + name = "input", + op_name = "mock_input_const", + dtype = np.dtype("float"), + shape = [1, 4], + ugraph = ugraph + ) + + mock_input_op.output_tensors = [input1] + + bias_op = OperationInfo( + name = "bias_const", + op_type = "Const", + backend = "tensorflow", + ugraph = ugraph, + op_attr = dict(), + input_tensors = [], + output_tensors = [] + ) + bias_op.op_attr["value"] = np.array([1], dtype=np.int8) + bias_op.op_attr["shape"] = [1] + + bias = TensorInfo( + name = "bias", + op_name = "bias_const", + dtype = np.dtype("int8"), + shape = weight_op.op_attr["shape"], + ugraph = ugraph + ) + bias_op.output_tensors = [bias] + + + fc1_op = OperationInfo( + name = "FC1", + op_type = "FULLY_CONNECTED", + backend = "tensorflow", + ugraph = ugraph, + op_attr = dict(), + input_tensors = [], + output_tensors = [] + ) + + output = TensorInfo( + name = "output", + op_name = "FC1", + dtype = np.dtype("float"), + shape = [1, 1], + ugraph = ugraph + ) + + fc1_op.input_tensors = [input1, weight, bias] + fc1_op.output_tensors = [output] + + ugraph.ops_info["FC1"] = fc1_op + ugraph.output_nodes = ["FC1"] + #ugraph.backend = "tensorflow" + + topologic_order_graph(ugraph) + #ugraph = prune_graph(ugraph) + + return ugraph diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py new file mode 100644 index 00000000..f98a484b --- /dev/null +++ b/tests/tflm/tflite_export/test_write.py @@ -0,0 +1,16 @@ +import numpy as np + +import tensorflow as tf +from utensor_cgen.frontend.tensorflow import GraphDefParser +from utensor_cgen.matcher import uTensorGraphMatcher +from utensor_cgen.utils import prune_graph, topologic_order_graph +from utensor_cgen.transformer import TFLiteExporter + +def test_tflite_fb_write(sample_ugraph): + exporter = TFLiteExporter() + ugraph = exporter.transform(sample_ugraph) + exporter.output() + print(exporter.output()) + + test_pass = True + assert test_pass, 'error message here' diff --git a/utensor_cgen/third_party/tflite/__init__.py b/utensor_cgen/third_party/tflite/__init__.py index e69de29b..1cb91d4c 100644 --- a/utensor_cgen/third_party/tflite/__init__.py +++ b/utensor_cgen/third_party/tflite/__init__.py @@ -0,0 +1,4 @@ +from os.path import dirname, basename, isfile, join +import glob +modules = glob.glob(join(dirname(__file__), "*.py")) +__all__ = [ basename(f)[:-3] for f in modules if isfile(f) and not f.endswith('__init__.py')] \ No newline at end of file diff --git a/utensor_cgen/transformer/__init__.py b/utensor_cgen/transformer/__init__.py index 13a003e0..ae6d6a23 100644 --- a/utensor_cgen/transformer/__init__.py +++ b/utensor_cgen/transformer/__init__.py @@ -7,3 +7,4 @@ from .optimizer import * from .pipeline import TransformerPipeline from .quantize import * +from .tflite_exporter import * diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index ab2cded1..99f8aaa7 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -11,6 +11,7 @@ from utensor_cgen.ir import OperationInfo, uTensorGraph import flatbuffers import utensor_cgen.third_party.tflite as tflite +from utensor_cgen.third_party.tflite import * from utensor_cgen.third_party.tflite.BuiltinOperator import BuiltinOperator from utensor_cgen.third_party.tflite.BuiltinOptions import BuiltinOptions from utensor_cgen.third_party.tflite.TensorType import TensorType @@ -58,7 +59,7 @@ class TFLiteExporter(Transformer): __tensor_index = OrderedDict() # out_name : ref tensor object #added to the Subgraph object - op_exec_order = list() + #op_exec_order = list() def __init__(self): self.prune_graph = False #what is this? @@ -83,9 +84,16 @@ def transform(self, ugraph): self.fbuilder.PrependUOffsetTRelative(f_obj) tensors_vec = self.fbuilder.EndVector(len(self.__tensor_index)) - ## TODO: traverse the graph and produce - ops_vec = None - ## here + ##traverse ugraph + fb_ops_list = list() + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + fb_ops_list.append(self.add_Op(op_info)) + + tflite.SubGraph.SubGraphStartOperatorsVector(self.fbuilder, len(fb_ops_list)) + for fb_op in fb_ops_list: + self.fbuilder.PrependUOffsetTRelative(fb_op) + ops_vec = self.fbuilder.EndVector(len(fb_ops_list)) tflite.SubGraph.SubGraphStart(self.fbuilder) tflite.SubGraph.SubGraphAddTensors(self.fbuilder, tensors_vec) @@ -130,7 +138,8 @@ def __create_static_tensor(self, ugraph): out_tensor_info.dtype, out_tensor_info.shape) #weight - value = op_info.op_attr['value'].value.np_array.flatten() #TODO: specify endianness here + #value = op_info.op_attr['value'].value.np_array.flatten() #TODO: specify endianness here + value = op_info.op_attr['value'].flatten() #FIXME: deal with the proper attribute type here raw_data = value.tobytes() tflite.Buffer.BufferStartDataVector(self.fbuilder, len(raw_data)) for i in raw_data: @@ -170,7 +179,7 @@ def __output_vector(self, tensor_infos): n = len(tensor_infos) tflite.Operator.OperatorStartOutputsVector(self.fbuilder, n) for tensor_info in tensor_infos: - tensor_index = self.__tensor_index.keys().index(tensor_info.name) + tensor_index = list(self.__tensor_index.keys()).index(tensor_info.name) self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) @@ -178,7 +187,7 @@ def __input_vector(self, tensor_infos): n = len(tensor_infos) tflite.Operator.OperatorStartInputsVector(self.fbuilder, n) for tensor_info in tensor_infos: - tensor_index = self.__tensor_index.keys().index(tensor_info.name) + tensor_index = list(self.__tensor_index.keys()).index(tensor_info.name) self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) @@ -199,16 +208,17 @@ def __create_op_codes(self, ugraph): op_code_vec = self.fbuilder.EndVector(len(op_codes)) return op_code_vec #needs to be added into the Model - def add_FullyConnectedOp(self, inputs, outputs): - op_inputs = self.__input_vector(inputs) - op_outputs = self.__output_vector(outputs) + def add_Op(self, op_info): + op_inputs = self.__input_vector(op_info.input_tensors) + op_outputs = self.__output_vector(op_info.output_tensors) tflite.Operator.OperatorStart(self.fbuilder) - tflite.Operator.OperatorAddOpcodeIndex(self.fbuilder, self.__op_manager.op_index('FULLY_CONNECTED')) + tflite.Operator.OperatorAddOpcodeIndex(self.fbuilder, self.__op_manager.op_index(op_info.op_type)) tflite.Operator.OperatorAddInputs(self.fbuilder, op_inputs) tflite.Operator.OperatorAddOutputs(self.fbuilder, op_outputs) op = tflite.Operator.OperatorEnd(self.fbuilder) - self.op_exec_order.append(op) + #self.op_exec_order.append(op) + return op #to be added into SubGraphStartOperatorsVector def __sym_quantization_info(self, op_info): @@ -221,7 +231,8 @@ def __sym_quantization_info(self, op_info): TODO: per-axis quantization """ - values = op_info.op_attr['value'].value.np_array.flatten() + #values = op_info.op_attr['value'].value.np_array.flatten() + values = op_info.op_attr['value'].flatten() #FIXME: deal with the proper attribute type here abs_max = np.absolute(values).max() #based on quantizted int8 dtype scale = 127 / abs_max @@ -229,7 +240,7 @@ def __sym_quantization_info(self, op_info): return (scale, 0) def __create_quantization_param(self, scales, zeros): - assert len(scales) != len(zeros), "scales and zero-points length mismatch" + assert len(scales) == len(zeros), "scales and zero-points length mismatch" tflite.QuantizationParameters.QuantizationParametersStartScaleVector(self.fbuilder, len(scales)) @@ -254,8 +265,8 @@ def __create_quantization_param(self, scales, zeros): def __create_variable_tensors(self, ugraph): tensor_infos = set() for op_name in ugraph.topo_order: - tensor_infos.update(ugraph.ops_info[op_name].inputs) - tensor_infos.update(ugraph.ops_info[op_name].outputs) + tensor_infos.update(ugraph.ops_info[op_name].input_tensors) + tensor_infos.update(ugraph.ops_info[op_name].output_tensors) for tensor_info in tensor_infos: tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_info.shape)) for d in tensor_info.shape: @@ -280,5 +291,8 @@ def __legalize_name(self, str): #TODO: legalize the name return str + def output(self): + return self.fbuilder.Output() + # How to construct the quantization parameter for intermediate tensors? ## zero point and scale From b7f3adb4a614ad8ce85742a7d6f6cd37cb9bf1b4 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 17 Oct 2019 23:04:43 +0800 Subject: [PATCH 010/117] problem with tensor.isVariable() --- tests/tflm/tflite_export/test_write.py | 76 ++++++++++++++++++++- utensor_cgen/transformer/tflite_exporter.py | 4 +- 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index f98a484b..f964d02d 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -5,12 +5,86 @@ from utensor_cgen.matcher import uTensorGraphMatcher from utensor_cgen.utils import prune_graph, topologic_order_graph from utensor_cgen.transformer import TFLiteExporter +import flatbuffers +import utensor_cgen.third_party.tflite as tflite +from utensor_cgen.third_party.tflite import * +from utensor_cgen.third_party.tflite.BuiltinOperator import BuiltinOperator +from utensor_cgen.third_party.tflite.Model import Model +from utensor_cgen.third_party.tflite.BuiltinOptions import BuiltinOptions +from utensor_cgen.third_party.tflite.TensorType import TensorType + +builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} +op_options = {v: k for k, v in BuiltinOptions.__dict__.items()} + +tensor_np_type = dict() +tensor_np_type[0] = np.float32 +tensor_np_type[1] = np.float16 +tensor_np_type[2] = np.int32 +tensor_np_type[3] = np.uint8 +tensor_np_type[4] = np.uint64 +tensor_np_type[5] = np.ubyte #FIXME: supposed to be string +tensor_np_type[6] = np.bool +tensor_np_type[7] = np.int16 +tensor_np_type[8] = np.cdouble +tensor_np_type[9] = np.int8 + +def print_tflite_graph(byte_buff): + + model = Model.GetRootAsModel(byte_buff, 0) + subgraphs_len = model.SubgraphsLength() + subgraph = model.Subgraphs(0) + n_ops = subgraph.OperatorsLength() + print("version: ", model.Version()) + print("subgraph len: ", subgraphs_len) + print("number of operators: ", n_ops) + print("flat buffer length: ", len(byte_buff), " bytes") + op_codes = [] + for i in range(0, model.OperatorCodesLength()): + op_code = model.OperatorCodes(i) + op_codes.append(op_code) + print("op code length: ", len(op_codes)) + + for i in range(0, subgraph.OperatorsLength()): + op = subgraph.Operators(i) + print("op code index: ", op.OpcodeIndex()) + opIndex = op.OpcodeIndex() + op_code = op_codes[opIndex] + builtin_code = op_code.BuiltinCode() + op_type = builtin_ops[builtin_code] + print(op_type) + + input_tensors = [subgraph.Tensors(input_idx) for input_idx in op.InputsAsNumpy()] + for tensor in input_tensors: + print(tensor.Name(), ", ", tensor.ShapeAsNumpy()) + + print("variable: ", tensor.IsVariable()) + if tensor.Type() == np.uint8 or tensor.Type() == np.int8: + q = tensor.Quantization() + assert q != None + print("quantization info: ") + print(" Detail Type: ", q.DetailsType()) + print(" Scales: ", q.ScaleAsNumpy()) + print(" Zeros: ", q.ZeroPointAsNumpy()) + print(" Scale: ", q.ScaleAsNumpy()) + print(" Zero Point: ", q.ZeroPointAsNumpy()) + print(" Dimension: ", q.QuantizedDimension()) + + print(tensor.IsVariable()) + if not tensor.IsVariable(): + buffer_index = tensor.Buffer() + assert buffer_index >= 0 + assert model.Buffers(buffer_index).DataLength() <= 0 + buffer_content = model.Buffers(buffer_index).DataAsNumpy() + print("Tensor values: ", buffer_content.astype(tensor_np_type[tensor.Type()])) + else: + print("None") def test_tflite_fb_write(sample_ugraph): exporter = TFLiteExporter() ugraph = exporter.transform(sample_ugraph) exporter.output() - print(exporter.output()) + #print(exporter.output()) + print_tflite_graph(exporter.output()) test_pass = True assert test_pass, 'error message here' diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 99f8aaa7..34d782a1 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -121,8 +121,7 @@ def transform(self, ugraph): self.fbuilder.Finish(model) - output = self.fbuilder.Output() #do something with the output here - print(output) + #output = self.fbuilder.Output() #do something with the output here return ugraph @@ -130,6 +129,7 @@ def __create_static_tensor(self, ugraph): target_ops = ["Inline", "Const"] export_tensor_name = True for op_name in ugraph.topo_order: + import pdb; pdb.set_trace() op_info = ugraph.ops_info[op_name] op_type = op_info.op_type if op_type in target_ops: #TODO: check if op data is empty From 4d37abf84ff9d5e3039a8091c68a4370338982c4 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 17 Oct 2019 23:49:38 +0800 Subject: [PATCH 011/117] problem reading back tensor buffers --- tests/tflm/tflite_export/test_write.py | 6 ++- utensor_cgen/transformer/tflite_exporter.py | 57 +++++++++++---------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index f964d02d..73f46ded 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -37,6 +37,7 @@ def print_tflite_graph(byte_buff): print("version: ", model.Version()) print("subgraph len: ", subgraphs_len) print("number of operators: ", n_ops) + print("number of t buff: ", model.BuffersLength()) print("flat buffer length: ", len(byte_buff), " bytes") op_codes = [] for i in range(0, model.OperatorCodesLength()): @@ -53,10 +54,11 @@ def print_tflite_graph(byte_buff): op_type = builtin_ops[builtin_code] print(op_type) + #import pdb;pdb.set_trace() input_tensors = [subgraph.Tensors(input_idx) for input_idx in op.InputsAsNumpy()] for tensor in input_tensors: + print() print(tensor.Name(), ", ", tensor.ShapeAsNumpy()) - print("variable: ", tensor.IsVariable()) if tensor.Type() == np.uint8 or tensor.Type() == np.int8: q = tensor.Quantization() @@ -73,7 +75,7 @@ def print_tflite_graph(byte_buff): if not tensor.IsVariable(): buffer_index = tensor.Buffer() assert buffer_index >= 0 - assert model.Buffers(buffer_index).DataLength() <= 0 + assert model.Buffers(buffer_index).DataLength() >= 0 buffer_content = model.Buffers(buffer_index).DataAsNumpy() print("Tensor values: ", buffer_content.astype(tensor_np_type[tensor.Type()])) else: diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 34d782a1..871956db 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -52,17 +52,17 @@ class TFLiteExporter(Transformer): METHOD_NAME = 'tflite_export' KWARGS_NAMESCOPE = '_tflite_export' __Max_fbuff_size = 1024 * 10 - __op_manager = FlatbufferOpManager() - fbuilder = flatbuffers.Builder(__Max_fbuff_size) - __tensor_buffer_index = OrderedDict() # out_name : data buff vec - # added to the Model object - __tensor_index = OrderedDict() # out_name : ref tensor object - #added to the Subgraph object - - #op_exec_order = list() + static_op_types = ["Inline", "Const"] def __init__(self): self.prune_graph = False #what is this? + self.op_manager = FlatbufferOpManager() + self.fbuilder = flatbuffers.Builder(self.__Max_fbuff_size) + self.tensor_buffer_index = OrderedDict() # out_name : data buff vec + # added to the Model object + self.tensor_index = OrderedDict() # out_name : ref tensor object + #added to the Subgraph object + def transform(self, ugraph): #create tensor data buffer @@ -79,16 +79,17 @@ def transform(self, ugraph): #create subgraph #first, create the tensor vector - tflite.SubGraph.SubGraphStartTensorsVector(self.fbuilder, len(self.__tensor_index)) - for t_name, f_obj in self.__tensor_index.items(): + tflite.SubGraph.SubGraphStartTensorsVector(self.fbuilder, len(self.tensor_index)) + for t_name, f_obj in self.tensor_index.items(): self.fbuilder.PrependUOffsetTRelative(f_obj) - tensors_vec = self.fbuilder.EndVector(len(self.__tensor_index)) + tensors_vec = self.fbuilder.EndVector(len(self.tensor_index)) ##traverse ugraph fb_ops_list = list() for op_name in ugraph.topo_order: op_info = ugraph.ops_info[op_name] - fb_ops_list.append(self.add_Op(op_info)) + if not op_info.op_type in self.static_op_types: + fb_ops_list.append(self.add_Op(op_info)) tflite.SubGraph.SubGraphStartOperatorsVector(self.fbuilder, len(fb_ops_list)) for fb_op in fb_ops_list: @@ -106,10 +107,10 @@ def transform(self, ugraph): #model # first, add tensor buffer here - tflite.Model.ModelStartBuffersVector(self.fbuilder, len(self.__tensor_buffer_index)) - for t_name, f_obj in self.__tensor_buffer_index.items(): + tflite.Model.ModelStartBuffersVector(self.fbuilder, len(self.tensor_buffer_index)) + for t_name, f_obj in self.tensor_buffer_index.items(): self.fbuilder.PrependUOffsetTRelative(f_obj) - buff_vec = self.fbuilder.EndVector(len(self.__tensor_buffer_index)) + buff_vec = self.fbuilder.EndVector(len(self.tensor_buffer_index)) tflite.Model.ModelStart(self.fbuilder) tflite.Model.ModelAddVersion(self.fbuilder, 100) #TODO: change this @@ -126,13 +127,12 @@ def transform(self, ugraph): return ugraph def __create_static_tensor(self, ugraph): - target_ops = ["Inline", "Const"] export_tensor_name = True for op_name in ugraph.topo_order: - import pdb; pdb.set_trace() + op_info = ugraph.ops_info[op_name] op_type = op_info.op_type - if op_type in target_ops: #TODO: check if op data is empty + if op_type in self.static_op_types: #TODO: check if op data is empty out_tensor_info = op_info.output_tensors[0] out_tname, out_dtype, tensor_shape = (out_tensor_info.name, out_tensor_info.dtype, @@ -145,7 +145,7 @@ def __create_static_tensor(self, ugraph): for i in raw_data: self.fbuilder.PrependUint8(i) data_vec = self.fbuilder.EndVector(len(raw_data)) - self.__tensor_buffer_index[out_tname] = data_vec + self.tensor_buffer_index[out_tname] = data_vec #shape tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_shape)) @@ -173,13 +173,13 @@ def __create_static_tensor(self, ugraph): tflite.Tensor.TensorAddBuffer(self.fbuilder, 0) new_tensor = tflite.Tensor.TensorEnd(self.fbuilder) - self.__tensor_index[out_tname] = new_tensor + self.tensor_index[out_tname] = new_tensor def __output_vector(self, tensor_infos): n = len(tensor_infos) tflite.Operator.OperatorStartOutputsVector(self.fbuilder, n) for tensor_info in tensor_infos: - tensor_index = list(self.__tensor_index.keys()).index(tensor_info.name) + tensor_index = list(self.tensor_index.keys()).index(tensor_info.name) self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) @@ -187,7 +187,7 @@ def __input_vector(self, tensor_infos): n = len(tensor_infos) tflite.Operator.OperatorStartInputsVector(self.fbuilder, n) for tensor_info in tensor_infos: - tensor_index = list(self.__tensor_index.keys()).index(tensor_info.name) + tensor_index = list(self.tensor_index.keys()).index(tensor_info.name) self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) @@ -196,9 +196,12 @@ def __create_op_codes(self, ugraph): op_codes = list() for op_name in ugraph.topo_order: op_type = ugraph.ops_info[op_name].op_type + if op_type in self.static_op_types: + continue + tflite.OperatorCode.OperatorCodeStart(self.fbuilder) #TODO: op type translation happen here - opcode_index = self.__op_manager.regsiter_op(op_type) + opcode_index = self.op_manager.regsiter_op(op_type) tflite.OperatorCode.OperatorCodeAddBuiltinCode(self.fbuilder, opcode_index) op_codes.append(tflite.OperatorCode.OperatorCodeEnd(self.fbuilder)) @@ -213,11 +216,11 @@ def add_Op(self, op_info): op_outputs = self.__output_vector(op_info.output_tensors) tflite.Operator.OperatorStart(self.fbuilder) - tflite.Operator.OperatorAddOpcodeIndex(self.fbuilder, self.__op_manager.op_index(op_info.op_type)) + tflite.Operator.OperatorAddOpcodeIndex(self.fbuilder, self.op_manager.op_index(op_info.op_type)) tflite.Operator.OperatorAddInputs(self.fbuilder, op_inputs) tflite.Operator.OperatorAddOutputs(self.fbuilder, op_outputs) op = tflite.Operator.OperatorEnd(self.fbuilder) - #self.op_exec_order.append(op) + return op #to be added into SubGraphStartOperatorsVector @@ -268,6 +271,8 @@ def __create_variable_tensors(self, ugraph): tensor_infos.update(ugraph.ops_info[op_name].input_tensors) tensor_infos.update(ugraph.ops_info[op_name].output_tensors) for tensor_info in tensor_infos: + if ugraph.ops_info[tensor_info.op_name].op_type in self.static_op_types: + continue tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_info.shape)) for d in tensor_info.shape: self.fbuilder.PrependInt32(d) @@ -285,7 +290,7 @@ def __create_variable_tensors(self, ugraph): #tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) tflite.Tensor.TensorAddIsVariable(self.fbuilder, True) - self.__tensor_index[tensor_info.name] = tflite.Tensor.TensorEnd(self.fbuilder) + self.tensor_index[tensor_info.name] = tflite.Tensor.TensorEnd(self.fbuilder) def __legalize_name(self, str): #TODO: legalize the name From fdd18a28e90ec1c53d89a23377cde22d08a325a1 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Fri, 18 Oct 2019 22:50:43 +0800 Subject: [PATCH 012/117] tensor buffer bug fix --- utensor_cgen/transformer/tflite_exporter.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 871956db..10d7df58 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -145,7 +145,12 @@ def __create_static_tensor(self, ugraph): for i in raw_data: self.fbuilder.PrependUint8(i) data_vec = self.fbuilder.EndVector(len(raw_data)) - self.tensor_buffer_index[out_tname] = data_vec + + tflite.Buffer.BufferStart(self.fbuilder) + tflite.Buffer.BufferAddData(self.fbuilder, data_vec) + tensor_buff = tflite.Buffer.BufferEnd(self.fbuilder) + + self.tensor_buffer_index[out_tname] = tensor_buff #shape tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_shape)) @@ -171,7 +176,7 @@ def __create_static_tensor(self, ugraph): tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) tflite.Tensor.TensorAddIsVariable(self.fbuilder, False) - tflite.Tensor.TensorAddBuffer(self.fbuilder, 0) + tflite.Tensor.TensorAddBuffer(self.fbuilder, list(self.tensor_buffer_index.keys()).index(out_tname)) new_tensor = tflite.Tensor.TensorEnd(self.fbuilder) self.tensor_index[out_tname] = new_tensor From 280fdc8df6819e667e0f06582a45dd7b11fff474 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Tue, 22 Oct 2019 16:26:27 +0800 Subject: [PATCH 013/117] -fixed problem with builtin_opcode - modified test graph * the input tensor not showing up in the print-graph --- tests/tflm/tflite_export/conftest.py | 4 ++-- utensor_cgen/transformer/tflite_exporter.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/tflm/tflite_export/conftest.py b/tests/tflm/tflite_export/conftest.py index 899cb8c2..3f34874c 100644 --- a/tests/tflm/tflite_export/conftest.py +++ b/tests/tflm/tflite_export/conftest.py @@ -19,7 +19,7 @@ def simple_tflm_graph(): output_tensors = [] ) weight_op.op_attr["value"] = np.array([1,2,3,4], dtype=np.int8) - weight_op.op_attr["shape"] = [1,4] + weight_op.op_attr["shape"] = [4,1] weight = TensorInfo( name = "weight", @@ -40,7 +40,7 @@ def simple_tflm_graph(): output_tensors = [] ) mock_input_op.op_attr["value"] = np.array([[1],[2],[3],[4]], dtype=np.int8) - mock_input_op.op_attr["shape"] = [4,1] + mock_input_op.op_attr["shape"] = [1,4] input1 = TensorInfo( name = "input", diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 10d7df58..a029b95e 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -31,7 +31,7 @@ def regsiter_op(self, op_type_str): assert("invalid op str") if op_type_str not in self.op_list: self.op_list.append(op_type_str) - return self.op_index(op_type_str) + return self.op_code(op_type_str) def op_index(self, op_type_str): return self.op_list.index(op_type_str) @@ -179,6 +179,7 @@ def __create_static_tensor(self, ugraph): tflite.Tensor.TensorAddBuffer(self.fbuilder, list(self.tensor_buffer_index.keys()).index(out_tname)) new_tensor = tflite.Tensor.TensorEnd(self.fbuilder) self.tensor_index[out_tname] = new_tensor + def __output_vector(self, tensor_infos): n = len(tensor_infos) From 4f72a8bdfc6460e7642aa538985d2053d6e2c85b Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 21 Nov 2019 18:41:42 -0800 Subject: [PATCH 014/117] iterables require reversing prior to flatbuffer prepending --- tests/tflm/tflite_export/test_write.py | 1 - utensor_cgen/transformer/tflite_exporter.py | 60 ++++++++++++--------- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index 73f46ded..698a889a 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -54,7 +54,6 @@ def print_tflite_graph(byte_buff): op_type = builtin_ops[builtin_code] print(op_type) - #import pdb;pdb.set_trace() input_tensors = [subgraph.Tensors(input_idx) for input_idx in op.InputsAsNumpy()] for tensor in input_tensors: print() diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index a029b95e..cfe8bc2d 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -28,10 +28,13 @@ class FlatbufferOpManager: def regsiter_op(self, op_type_str): if op_type_str not in BuiltinOperator.__dict__: - assert("invalid op str") - if op_type_str not in self.op_list: - self.op_list.append(op_type_str) + assert("invalid op str") + assert "op already been registered", not self.is_registered(op_type_str) + self.op_list.append(op_type_str) return self.op_code(op_type_str) + + def is_registered(self, op_type_str): + return op_type_str in self.op_list def op_index(self, op_type_str): return self.op_list.index(op_type_str) @@ -65,37 +68,41 @@ def __init__(self): def transform(self, ugraph): - #create tensor data buffer - #create const tensors - #update tensor_index + # create tensor data buffer + # create const tensors + # update tensor_index self.__create_static_tensor(ugraph) - #create intermediate tensors - #update tensor_index + # create intermediate tensors + # update tensor_index self.__create_variable_tensors(ugraph) - #interacts with FlatbufferOpManager - op_codes_vec = self.__create_op_codes(ugraph) #to be added into the Model + # interacts with FlatbufferOpManager + op_codes_vec = self.__create_op_codes(ugraph) # to be added into the Model - #create subgraph - #first, create the tensor vector + # create subgraph + # first, create the tensor vector tflite.SubGraph.SubGraphStartTensorsVector(self.fbuilder, len(self.tensor_index)) - for t_name, f_obj in self.tensor_index.items(): + #reverse the order for prepend, so flatbuffer's indexi aggree with self.tensor_index's + for t_name, f_obj in reversed(self.tensor_index.items()): self.fbuilder.PrependUOffsetTRelative(f_obj) tensors_vec = self.fbuilder.EndVector(len(self.tensor_index)) - ##traverse ugraph + # traverse ugraph + # compile a list of static ops : fb_ops_list fb_ops_list = list() for op_name in ugraph.topo_order: op_info = ugraph.ops_info[op_name] if not op_info.op_type in self.static_op_types: fb_ops_list.append(self.add_Op(op_info)) + # buile the operators vector tflite.SubGraph.SubGraphStartOperatorsVector(self.fbuilder, len(fb_ops_list)) - for fb_op in fb_ops_list: + for fb_op in reversed(fb_ops_list): self.fbuilder.PrependUOffsetTRelative(fb_op) ops_vec = self.fbuilder.EndVector(len(fb_ops_list)) + # construct the subgraph tflite.SubGraph.SubGraphStart(self.fbuilder) tflite.SubGraph.SubGraphAddTensors(self.fbuilder, tensors_vec) tflite.SubGraph.SubGraphAddOperators(self.fbuilder, ops_vec) @@ -108,7 +115,7 @@ def transform(self, ugraph): #model # first, add tensor buffer here tflite.Model.ModelStartBuffersVector(self.fbuilder, len(self.tensor_buffer_index)) - for t_name, f_obj in self.tensor_buffer_index.items(): + for t_name, f_obj in reversed(self.tensor_buffer_index.items()): self.fbuilder.PrependUOffsetTRelative(f_obj) buff_vec = self.fbuilder.EndVector(len(self.tensor_buffer_index)) @@ -142,7 +149,7 @@ def __create_static_tensor(self, ugraph): value = op_info.op_attr['value'].flatten() #FIXME: deal with the proper attribute type here raw_data = value.tobytes() tflite.Buffer.BufferStartDataVector(self.fbuilder, len(raw_data)) - for i in raw_data: + for i in reversed(raw_data): self.fbuilder.PrependUint8(i) data_vec = self.fbuilder.EndVector(len(raw_data)) @@ -154,7 +161,7 @@ def __create_static_tensor(self, ugraph): #shape tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_shape)) - for d in tensor_shape: + for d in reversed(tensor_shape): self.fbuilder.PrependInt32(d) shape_vec = self.fbuilder.EndVector(len(tensor_shape)) @@ -184,7 +191,7 @@ def __create_static_tensor(self, ugraph): def __output_vector(self, tensor_infos): n = len(tensor_infos) tflite.Operator.OperatorStartOutputsVector(self.fbuilder, n) - for tensor_info in tensor_infos: + for tensor_info in reversed(tensor_infos): tensor_index = list(self.tensor_index.keys()).index(tensor_info.name) self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) @@ -192,7 +199,7 @@ def __output_vector(self, tensor_infos): def __input_vector(self, tensor_infos): n = len(tensor_infos) tflite.Operator.OperatorStartInputsVector(self.fbuilder, n) - for tensor_info in tensor_infos: + for tensor_info in reversed(tensor_infos): tensor_index = list(self.tensor_index.keys()).index(tensor_info.name) self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) @@ -206,13 +213,16 @@ def __create_op_codes(self, ugraph): continue tflite.OperatorCode.OperatorCodeStart(self.fbuilder) - #TODO: op type translation happen here + + if self.op_manager.is_registered(op_type): + continue + opcode_index = self.op_manager.regsiter_op(op_type) tflite.OperatorCode.OperatorCodeAddBuiltinCode(self.fbuilder, opcode_index) op_codes.append(tflite.OperatorCode.OperatorCodeEnd(self.fbuilder)) tflite.Model.ModelStartOperatorCodesVector(self.fbuilder, len(op_codes)) - for it_op_code in op_codes: + for it_op_code in reversed(op_codes): self.fbuilder.PrependUOffsetTRelative(it_op_code) op_code_vec = self.fbuilder.EndVector(len(op_codes)) return op_code_vec #needs to be added into the Model @@ -253,12 +263,12 @@ def __create_quantization_param(self, scales, zeros): tflite.QuantizationParameters.QuantizationParametersStartScaleVector(self.fbuilder, len(scales)) - for _scale in scales: + for _scale in reversed(scales): self.fbuilder.PrependFloat32(_scale) q_scales_vec = self.fbuilder.EndVector(len(scales)) tflite.QuantizationParameters.QuantizationParametersStartZeroPointVector(self.fbuilder, len(zeros)) - for _zero in zeros: + for _zero in reversed(zeros): self.fbuilder.PrependFloat32(_zero) q_zeros_vec = self.fbuilder.EndVector(len(zeros)) @@ -280,7 +290,7 @@ def __create_variable_tensors(self, ugraph): if ugraph.ops_info[tensor_info.op_name].op_type in self.static_op_types: continue tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_info.shape)) - for d in tensor_info.shape: + for d in reversed(tensor_info.shape): self.fbuilder.PrependInt32(d) shape_vec = self.fbuilder.EndVector(len(tensor_info.shape)) From 58d533f4ac100e8fc9bf66c3a91f4267efbdbc12 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Fri, 22 Nov 2019 17:08:19 -0800 Subject: [PATCH 015/117] refactoring: fb-vector-builder in progress tflite_exporter.py:174 --- utensor_cgen/transformer/tflite_exporter.py | 66 ++++++++++++--------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index cfe8bc2d..38217d47 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -81,12 +81,8 @@ def transform(self, ugraph): op_codes_vec = self.__create_op_codes(ugraph) # to be added into the Model # create subgraph - # first, create the tensor vector - tflite.SubGraph.SubGraphStartTensorsVector(self.fbuilder, len(self.tensor_index)) - #reverse the order for prepend, so flatbuffer's indexi aggree with self.tensor_index's - for t_name, f_obj in reversed(self.tensor_index.items()): - self.fbuilder.PrependUOffsetTRelative(f_obj) - tensors_vec = self.fbuilder.EndVector(len(self.tensor_index)) + tensors_vec = self.__fb_vector(tflite.SubGraph.SubGraphStartTensorsVector, + [f_obj for t_name, f_obj in self.tensor_index.items()]) # traverse ugraph # compile a list of static ops : fb_ops_list @@ -96,11 +92,8 @@ def transform(self, ugraph): if not op_info.op_type in self.static_op_types: fb_ops_list.append(self.add_Op(op_info)) - # buile the operators vector - tflite.SubGraph.SubGraphStartOperatorsVector(self.fbuilder, len(fb_ops_list)) - for fb_op in reversed(fb_ops_list): - self.fbuilder.PrependUOffsetTRelative(fb_op) - ops_vec = self.fbuilder.EndVector(len(fb_ops_list)) + # build the operators vector + ops_vec = self.__fb_vector(tflite.SubGraph.SubGraphStartOperatorsVector, fb_ops_list) # construct the subgraph tflite.SubGraph.SubGraphStart(self.fbuilder) @@ -108,16 +101,11 @@ def transform(self, ugraph): tflite.SubGraph.SubGraphAddOperators(self.fbuilder, ops_vec) subgraph = tflite.SubGraph.SubGraphEnd(self.fbuilder) - tflite.Model.ModelStartSubgraphsVector(self.fbuilder, 1) #TFLM runtime only support 1 subgraph - self.fbuilder.PrependUOffsetTRelative(subgraph) - subgraph_vec = self.fbuilder.EndVector(1) + #TFLM runtime only support 1 subgraph + subgraph_vec = self.__fb_vector(tflite.Model.ModelStartSubgraphsVector, [subgraph]) #model - # first, add tensor buffer here - tflite.Model.ModelStartBuffersVector(self.fbuilder, len(self.tensor_buffer_index)) - for t_name, f_obj in reversed(self.tensor_buffer_index.items()): - self.fbuilder.PrependUOffsetTRelative(f_obj) - buff_vec = self.fbuilder.EndVector(len(self.tensor_buffer_index)) + buff_vec = self.__fb_vector(tflite.Model.ModelStartBuffersVector, [f_obj for t_name, f_obj in self.tensor_buffer_index.items()]) tflite.Model.ModelStart(self.fbuilder) tflite.Model.ModelAddVersion(self.fbuilder, 100) #TODO: change this @@ -148,10 +136,8 @@ def __create_static_tensor(self, ugraph): #value = op_info.op_attr['value'].value.np_array.flatten() #TODO: specify endianness here value = op_info.op_attr['value'].flatten() #FIXME: deal with the proper attribute type here raw_data = value.tobytes() - tflite.Buffer.BufferStartDataVector(self.fbuilder, len(raw_data)) - for i in reversed(raw_data): - self.fbuilder.PrependUint8(i) - data_vec = self.fbuilder.EndVector(len(raw_data)) + data_vec = self.__fb_vector(tflite.Buffer.BufferStartDataVector, raw_data) + tflite.Buffer.BufferStart(self.fbuilder) tflite.Buffer.BufferAddData(self.fbuilder, data_vec) @@ -160,10 +146,7 @@ def __create_static_tensor(self, ugraph): self.tensor_buffer_index[out_tname] = tensor_buff #shape - tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_shape)) - for d in reversed(tensor_shape): - self.fbuilder.PrependInt32(d) - shape_vec = self.fbuilder.EndVector(len(tensor_shape)) + shape_vec = self.__fb_vector(tflite.Tensor.TensorStartShapeVector, tensor_shape) #name if export_tensor_name: @@ -188,13 +171,14 @@ def __create_static_tensor(self, ugraph): self.tensor_index[out_tname] = new_tensor - def __output_vector(self, tensor_infos): + def __output_vector(self, tensor_infos): ##TODO left it here n = len(tensor_infos) tflite.Operator.OperatorStartOutputsVector(self.fbuilder, n) for tensor_info in reversed(tensor_infos): tensor_index = list(self.tensor_index.keys()).index(tensor_info.name) self.fbuilder.PrependInt32(tensor_index) return self.fbuilder.EndVector(n) + def __input_vector(self, tensor_infos): n = len(tensor_infos) @@ -315,5 +299,31 @@ def __legalize_name(self, str): def output(self): return self.fbuilder.Output() + def __fb_vector(self, vector_constructor, arr_list): + prepend_method_table = dict() + prepend_method_table[tflite.SubGraph.SubGraphStartTensorsVector] = self.fbuilder.PrependUOffsetTRelative + prepend_method_table[tflite.SubGraph.SubGraphStartOperatorsVector] = self.fbuilder.PrependUOffsetTRelative + prepend_method_table[tflite.Model.ModelStartSubgraphsVector] = self.fbuilder.PrependUOffsetTRelative + prepend_method_table[tflite.Model.ModelStartBuffersVector] = self.fbuilder.PrependUOffsetTRelative + prepend_method_table[tflite.Model.ModelStartOperatorCodesVector] = self.fbuilder.PrependUOffsetTRelative + prepend_method_table[tflite.Buffer.BufferStartDataVector] = self.fbuilder.PrependUint8 + prepend_method_table[tflite.Tensor.TensorStartShapeVector] = self.fbuilder.PrependInt32 + prepend_method_table[tflite.Operator.OperatorStartOutputsVector] = self.fbuilder.PrependInt32 + prepend_method_table[tflite.Operator.OperatorStartInputsVector] = self.fbuilder.PrependInt32 + prepend_method_table[tflite.QuantizationParameters.QuantizationParametersStartScaleVector] = self.fbuilder.PrependFloat32 + prepend_method_table[tflite.QuantizationParameters.QuantizationParametersStartZeroPointVector] = self.fbuilder.PrependFloat32 + + preprend_method = prepend_method_table[vector_constructor] + + num_items = len(arr_list) + assert num_items > 0 + + vector_constructor(self.fbuilder, num_items) + # reversed to handle prepend + for it in reversed(arr_list): + preprend_method(it) + + return self.fbuilder.EndVector(num_items) + # How to construct the quantization parameter for intermediate tensors? ## zero point and scale From 5a56092b5975c115f0186c244e7f29f14f8e53ad Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Sat, 23 Nov 2019 11:27:53 -0800 Subject: [PATCH 016/117] fb-vector-builder refactoring completed --- utensor_cgen/transformer/tflite_exporter.py | 48 ++++++--------------- 1 file changed, 13 insertions(+), 35 deletions(-) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 38217d47..5f77ce47 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -170,23 +170,15 @@ def __create_static_tensor(self, ugraph): new_tensor = tflite.Tensor.TensorEnd(self.fbuilder) self.tensor_index[out_tname] = new_tensor + #construct the output tensor vector for an op + def __output_vector(self, tensor_infos): + tensor_indexi = [list(self.tensor_index.keys()).index(tensor_info.name) for tensor_info in tensor_infos] + return self.__fb_vector(tflite.Operator.OperatorStartOutputsVector, tensor_indexi) - def __output_vector(self, tensor_infos): ##TODO left it here - n = len(tensor_infos) - tflite.Operator.OperatorStartOutputsVector(self.fbuilder, n) - for tensor_info in reversed(tensor_infos): - tensor_index = list(self.tensor_index.keys()).index(tensor_info.name) - self.fbuilder.PrependInt32(tensor_index) - return self.fbuilder.EndVector(n) - - + #construct the input tensor vector for an op def __input_vector(self, tensor_infos): - n = len(tensor_infos) - tflite.Operator.OperatorStartInputsVector(self.fbuilder, n) - for tensor_info in reversed(tensor_infos): - tensor_index = list(self.tensor_index.keys()).index(tensor_info.name) - self.fbuilder.PrependInt32(tensor_index) - return self.fbuilder.EndVector(n) + tensor_indexi = [list(self.tensor_index.keys()).index(tensor_info.name) for tensor_info in tensor_infos] + return self.__fb_vector(tflite.Operator.OperatorStartInputsVector, tensor_indexi) def __create_op_codes(self, ugraph): #scan, translation and register @@ -205,11 +197,8 @@ def __create_op_codes(self, ugraph): tflite.OperatorCode.OperatorCodeAddBuiltinCode(self.fbuilder, opcode_index) op_codes.append(tflite.OperatorCode.OperatorCodeEnd(self.fbuilder)) - tflite.Model.ModelStartOperatorCodesVector(self.fbuilder, len(op_codes)) - for it_op_code in reversed(op_codes): - self.fbuilder.PrependUOffsetTRelative(it_op_code) - op_code_vec = self.fbuilder.EndVector(len(op_codes)) - return op_code_vec #needs to be added into the Model + op_code_vec = self.__fb_vector(tflite.Model.ModelStartOperatorCodesVector, op_codes) + return op_code_vec def add_Op(self, op_info): op_inputs = self.__input_vector(op_info.input_tensors) @@ -223,7 +212,6 @@ def add_Op(self, op_info): return op #to be added into SubGraphStartOperatorsVector - def __sym_quantization_info(self, op_info): """ https://www.tensorflow.org/lite/performance/quantization_spec @@ -244,18 +232,10 @@ def __sym_quantization_info(self, op_info): def __create_quantization_param(self, scales, zeros): assert len(scales) == len(zeros), "scales and zero-points length mismatch" - - tflite.QuantizationParameters.QuantizationParametersStartScaleVector(self.fbuilder, len(scales)) - for _scale in reversed(scales): - self.fbuilder.PrependFloat32(_scale) - q_scales_vec = self.fbuilder.EndVector(len(scales)) + q_scales_vec = self.__fb_vector(tflite.QuantizationParameters.QuantizationParametersStartScaleVector, scales) + q_zeros_vec = self.__fb_vector(tflite.QuantizationParameters.QuantizationParametersStartZeroPointVector, zeros) - tflite.QuantizationParameters.QuantizationParametersStartZeroPointVector(self.fbuilder, len(zeros)) - for _zero in reversed(zeros): - self.fbuilder.PrependFloat32(_zero) - q_zeros_vec = self.fbuilder.EndVector(len(zeros)) - tflite.QuantizationParameters.QuantizationParametersStart(self.fbuilder) tflite.QuantizationParameters.QuantizationParametersAddScale(self.fbuilder, q_scales_vec) tflite.QuantizationParameters.QuantizationParametersAddZeroPoint(self.fbuilder, q_zeros_vec) @@ -273,10 +253,8 @@ def __create_variable_tensors(self, ugraph): for tensor_info in tensor_infos: if ugraph.ops_info[tensor_info.op_name].op_type in self.static_op_types: continue - tflite.Tensor.TensorStartShapeVector(self.fbuilder, len(tensor_info.shape)) - for d in reversed(tensor_info.shape): - self.fbuilder.PrependInt32(d) - shape_vec = self.fbuilder.EndVector(len(tensor_info.shape)) + + shape_vec = self.__fb_vector(tflite.Tensor.TensorStartShapeVector, tensor_info.shape) tensor_name = self.fbuilder.CreateString(self.__legalize_name(tensor_info.name)) From 1a184ed117646737d8d9a04f5f2421f3e1695284 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Sun, 24 Nov 2019 18:03:32 -0800 Subject: [PATCH 017/117] - using flatbuffers 136d75fa6580ef87d1b7cbc243e617f21149852e - included flatbuffers python in utensor_cgen/third_party/flatbuffers - added file_identifier : TFL3 - changed schema version field to : 3 - bugfix in the confteest.py test_write.py WIP --- tests/tflm/tflite_export/conftest.py | 2 +- tests/tflm/tflite_export/test_write.py | 14 +- .../third_party/flatbuffers/__init__.py | 17 + .../third_party/flatbuffers/builder.py | 764 ++++++++++++++++++ .../third_party/flatbuffers/compat.py | 81 ++ .../third_party/flatbuffers/encode.py | 42 + .../third_party/flatbuffers/number_types.py | 181 +++++ .../third_party/flatbuffers/packer.py | 42 + utensor_cgen/third_party/flatbuffers/table.py | 129 +++ utensor_cgen/third_party/flatbuffers/util.py | 43 + utensor_cgen/transformer/tflite_exporter.py | 9 +- 11 files changed, 1316 insertions(+), 8 deletions(-) create mode 100644 utensor_cgen/third_party/flatbuffers/__init__.py create mode 100644 utensor_cgen/third_party/flatbuffers/builder.py create mode 100644 utensor_cgen/third_party/flatbuffers/compat.py create mode 100644 utensor_cgen/third_party/flatbuffers/encode.py create mode 100644 utensor_cgen/third_party/flatbuffers/number_types.py create mode 100644 utensor_cgen/third_party/flatbuffers/packer.py create mode 100644 utensor_cgen/third_party/flatbuffers/table.py create mode 100644 utensor_cgen/third_party/flatbuffers/util.py diff --git a/tests/tflm/tflite_export/conftest.py b/tests/tflm/tflite_export/conftest.py index 3f34874c..2aa974b6 100644 --- a/tests/tflm/tflite_export/conftest.py +++ b/tests/tflm/tflite_export/conftest.py @@ -68,7 +68,7 @@ def simple_tflm_graph(): name = "bias", op_name = "bias_const", dtype = np.dtype("int8"), - shape = weight_op.op_attr["shape"], + shape = bias_op.op_attr["shape"], ugraph = ugraph ) bias_op.output_tensors = [bias] diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index 698a889a..bc4bc918 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -74,7 +74,7 @@ def print_tflite_graph(byte_buff): if not tensor.IsVariable(): buffer_index = tensor.Buffer() assert buffer_index >= 0 - assert model.Buffers(buffer_index).DataLength() >= 0 + assert model.Buffers(buffer_index).DataLength() > 0 buffer_content = model.Buffers(buffer_index).DataAsNumpy() print("Tensor values: ", buffer_content.astype(tensor_np_type[tensor.Type()])) else: @@ -83,9 +83,15 @@ def print_tflite_graph(byte_buff): def test_tflite_fb_write(sample_ugraph): exporter = TFLiteExporter() ugraph = exporter.transform(sample_ugraph) - exporter.output() - #print(exporter.output()) - print_tflite_graph(exporter.output()) + model_content = exporter.output() + + print_tflite_graph(model_content) + + # referece_model_content = open('/Users/neitan01/Documents/tflm/sinExample/sine_model.tflite', "rb").read() + # print_tflite_graph(referece_model_content) + + open("tflm_test_model.tflite", "wb").write(model_content) + test_model = tf.lite.Interpreter('tflm_test_model.tflite') test_pass = True assert test_pass, 'error message here' diff --git a/utensor_cgen/third_party/flatbuffers/__init__.py b/utensor_cgen/third_party/flatbuffers/__init__.py new file mode 100644 index 00000000..d14872ae --- /dev/null +++ b/utensor_cgen/third_party/flatbuffers/__init__.py @@ -0,0 +1,17 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .builder import Builder +from .table import Table +from .compat import range_func as compat_range diff --git a/utensor_cgen/third_party/flatbuffers/builder.py b/utensor_cgen/third_party/flatbuffers/builder.py new file mode 100644 index 00000000..478cdcd5 --- /dev/null +++ b/utensor_cgen/third_party/flatbuffers/builder.py @@ -0,0 +1,764 @@ +# Copyright 2014 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import number_types as N +from .number_types import (UOffsetTFlags, SOffsetTFlags, VOffsetTFlags) + +from . import encode +from . import packer + +from . import compat +from .compat import range_func +from .compat import memoryview_type +from .compat import import_numpy, NumpyRequiredForThisFeature + +np = import_numpy() +## @file +## @addtogroup flatbuffers_python_api +## @{ + +## @cond FLATBUFFERS_INTERNAL +class OffsetArithmeticError(RuntimeError): + """ + Error caused by an Offset arithmetic error. Probably caused by bad + writing of fields. This is considered an unreachable situation in + normal circumstances. + """ + pass + + +class IsNotNestedError(RuntimeError): + """ + Error caused by using a Builder to write Object data when not inside + an Object. + """ + pass + + +class IsNestedError(RuntimeError): + """ + Error caused by using a Builder to begin an Object when an Object is + already being built. + """ + pass + + +class StructIsNotInlineError(RuntimeError): + """ + Error caused by using a Builder to write a Struct at a location that + is not the current Offset. + """ + pass + + +class BuilderSizeError(RuntimeError): + """ + Error caused by causing a Builder to exceed the hardcoded limit of 2 + gigabytes. + """ + pass + +class BuilderNotFinishedError(RuntimeError): + """ + Error caused by not calling `Finish` before calling `Output`. + """ + pass + + +# VtableMetadataFields is the count of metadata fields in each vtable. +VtableMetadataFields = 2 +## @endcond + +class Builder(object): + """ A Builder is used to construct one or more FlatBuffers. + + Typically, Builder objects will be used from code generated by the `flatc` + compiler. + + A Builder constructs byte buffers in a last-first manner for simplicity and + performance during reading. + + Internally, a Builder is a state machine for creating FlatBuffer objects. + + It holds the following internal state: + - Bytes: an array of bytes. + - current_vtable: a list of integers. + - vtables: a hash of vtable entries. + + Attributes: + Bytes: The internal `bytearray` for the Builder. + finished: A boolean determining if the Builder has been finalized. + """ + + ## @cond FLATBUFFERS_INTENRAL + __slots__ = ("Bytes", "current_vtable", "head", "minalign", "objectEnd", + "vtables", "nested", "forceDefaults", "finished") + + """Maximum buffer size constant, in bytes. + + Builder will never allow it's buffer grow over this size. + Currently equals 2Gb. + """ + MAX_BUFFER_SIZE = 2**31 + ## @endcond + + def __init__(self, initialSize): + """Initializes a Builder of size `initial_size`. + + The internal buffer is grown as needed. + """ + + if not (0 <= initialSize <= Builder.MAX_BUFFER_SIZE): + msg = "flatbuffers: Cannot create Builder larger than 2 gigabytes." + raise BuilderSizeError(msg) + + self.Bytes = bytearray(initialSize) + ## @cond FLATBUFFERS_INTERNAL + self.current_vtable = None + self.head = UOffsetTFlags.py_type(initialSize) + self.minalign = 1 + self.objectEnd = None + self.vtables = {} + self.nested = False + self.forceDefaults = False + ## @endcond + self.finished = False + + def Output(self): + """Return the portion of the buffer that has been used for writing data. + + This is the typical way to access the FlatBuffer data inside the + builder. If you try to access `Builder.Bytes` directly, you would need + to manually index it with `Head()`, since the buffer is constructed + backwards. + + It raises BuilderNotFinishedError if the buffer has not been finished + with `Finish`. + """ + + if not self.finished: + raise BuilderNotFinishedError() + + return self.Bytes[self.Head():] + + ## @cond FLATBUFFERS_INTERNAL + def StartObject(self, numfields): + """StartObject initializes bookkeeping for writing a new object.""" + + self.assertNotNested() + + # use 32-bit offsets so that arithmetic doesn't overflow. + self.current_vtable = [0 for _ in range_func(numfields)] + self.objectEnd = self.Offset() + self.nested = True + + def WriteVtable(self): + """ + WriteVtable serializes the vtable for the current object, if needed. + + Before writing out the vtable, this checks pre-existing vtables for + equality to this one. If an equal vtable is found, point the object to + the existing vtable and return. + + Because vtable values are sensitive to alignment of object data, not + all logically-equal vtables will be deduplicated. + + A vtable has the following format: + + + * N, where N is the number of fields + in the schema for this type. Includes deprecated fields. + Thus, a vtable is made of 2 + N elements, each VOffsetT bytes wide. + + An object has the following format: + + + + """ + + # Prepend a zero scalar to the object. Later in this function we'll + # write an offset here that points to the object's vtable: + self.PrependSOffsetTRelative(0) + + objectOffset = self.Offset() + + vtKey = [] + trim = True + for elem in reversed(self.current_vtable): + if elem == 0: + if trim: + continue + else: + elem = objectOffset - elem + trim = False + + vtKey.append(elem) + + vtKey = tuple(vtKey) + vt2Offset = self.vtables.get(vtKey) + if vt2Offset is None: + # Did not find a vtable, so write this one to the buffer. + + # Write out the current vtable in reverse , because + # serialization occurs in last-first order: + i = len(self.current_vtable) - 1 + trailing = 0 + trim = True + while i >= 0: + off = 0 + elem = self.current_vtable[i] + i -= 1 + + if elem == 0: + if trim: + trailing += 1 + continue + else: + # Forward reference to field; + # use 32bit number to ensure no overflow: + off = objectOffset - elem + trim = False + + self.PrependVOffsetT(off) + + # The two metadata fields are written last. + + # First, store the object bytesize: + objectSize = UOffsetTFlags.py_type(objectOffset - self.objectEnd) + self.PrependVOffsetT(VOffsetTFlags.py_type(objectSize)) + + # Second, store the vtable bytesize: + vBytes = len(self.current_vtable) - trailing + VtableMetadataFields + vBytes *= N.VOffsetTFlags.bytewidth + self.PrependVOffsetT(VOffsetTFlags.py_type(vBytes)) + + # Next, write the offset to the new vtable in the + # already-allocated SOffsetT at the beginning of this object: + objectStart = SOffsetTFlags.py_type(len(self.Bytes) - objectOffset) + encode.Write(packer.soffset, self.Bytes, objectStart, + SOffsetTFlags.py_type(self.Offset() - objectOffset)) + + # Finally, store this vtable in memory for future + # deduplication: + self.vtables[vtKey] = self.Offset() + else: + # Found a duplicate vtable. + objectStart = SOffsetTFlags.py_type(len(self.Bytes) - objectOffset) + self.head = UOffsetTFlags.py_type(objectStart) + + # Write the offset to the found vtable in the + # already-allocated SOffsetT at the beginning of this object: + encode.Write(packer.soffset, self.Bytes, self.Head(), + SOffsetTFlags.py_type(vt2Offset - objectOffset)) + + self.current_vtable = None + return objectOffset + + def EndObject(self): + """EndObject writes data necessary to finish object construction.""" + self.assertNested() + self.nested = False + return self.WriteVtable() + + def growByteBuffer(self): + """Doubles the size of the byteslice, and copies the old data towards + the end of the new buffer (since we build the buffer backwards).""" + if len(self.Bytes) == Builder.MAX_BUFFER_SIZE: + msg = "flatbuffers: cannot grow buffer beyond 2 gigabytes" + raise BuilderSizeError(msg) + + newSize = min(len(self.Bytes) * 2, Builder.MAX_BUFFER_SIZE) + if newSize == 0: + newSize = 1 + bytes2 = bytearray(newSize) + bytes2[newSize-len(self.Bytes):] = self.Bytes + self.Bytes = bytes2 + ## @endcond + + def Head(self): + """Get the start of useful data in the underlying byte buffer. + + Note: unlike other functions, this value is interpreted as from the + left. + """ + ## @cond FLATBUFFERS_INTERNAL + return self.head + ## @endcond + + ## @cond FLATBUFFERS_INTERNAL + def Offset(self): + """Offset relative to the end of the buffer.""" + return UOffsetTFlags.py_type(len(self.Bytes) - self.Head()) + + def Pad(self, n): + """Pad places zeros at the current offset.""" + for i in range_func(n): + self.Place(0, N.Uint8Flags) + + def Prep(self, size, additionalBytes): + """ + Prep prepares to write an element of `size` after `additional_bytes` + have been written, e.g. if you write a string, you need to align + such the int length field is aligned to SizeInt32, and the string + data follows it directly. + If all you need to do is align, `additionalBytes` will be 0. + """ + + # Track the biggest thing we've ever aligned to. + if size > self.minalign: + self.minalign = size + + # Find the amount of alignment needed such that `size` is properly + # aligned after `additionalBytes`: + alignSize = (~(len(self.Bytes) - self.Head() + additionalBytes)) + 1 + alignSize &= (size - 1) + + # Reallocate the buffer if needed: + while self.Head() < alignSize+size+additionalBytes: + oldBufSize = len(self.Bytes) + self.growByteBuffer() + updated_head = self.head + len(self.Bytes) - oldBufSize + self.head = UOffsetTFlags.py_type(updated_head) + self.Pad(alignSize) + + def PrependSOffsetTRelative(self, off): + """ + PrependSOffsetTRelative prepends an SOffsetT, relative to where it + will be written. + """ + + # Ensure alignment is already done: + self.Prep(N.SOffsetTFlags.bytewidth, 0) + if not (off <= self.Offset()): + msg = "flatbuffers: Offset arithmetic error." + raise OffsetArithmeticError(msg) + off2 = self.Offset() - off + N.SOffsetTFlags.bytewidth + self.PlaceSOffsetT(off2) + ## @endcond + + def PrependUOffsetTRelative(self, off): + """Prepends an unsigned offset into vector data, relative to where it + will be written. + """ + + # Ensure alignment is already done: + self.Prep(N.UOffsetTFlags.bytewidth, 0) + if not (off <= self.Offset()): + msg = "flatbuffers: Offset arithmetic error." + raise OffsetArithmeticError(msg) + off2 = self.Offset() - off + N.UOffsetTFlags.bytewidth + self.PlaceUOffsetT(off2) + + ## @cond FLATBUFFERS_INTERNAL + def StartVector(self, elemSize, numElems, alignment): + """ + StartVector initializes bookkeeping for writing a new vector. + + A vector has the following format: + - + - +, where T is the type of elements of this vector. + """ + + self.assertNotNested() + self.nested = True + self.Prep(N.Uint32Flags.bytewidth, elemSize*numElems) + self.Prep(alignment, elemSize*numElems) # In case alignment > int. + return self.Offset() + ## @endcond + + def EndVector(self, vectorNumElems): + """EndVector writes data necessary to finish vector construction.""" + + self.assertNested() + ## @cond FLATBUFFERS_INTERNAL + self.nested = False + ## @endcond + # we already made space for this, so write without PrependUint32 + self.PlaceUOffsetT(vectorNumElems) + return self.Offset() + + def CreateString(self, s, encoding='utf-8', errors='strict'): + """CreateString writes a null-terminated byte string as a vector.""" + + self.assertNotNested() + ## @cond FLATBUFFERS_INTERNAL + self.nested = True + ## @endcond + + if isinstance(s, compat.string_types): + x = s.encode(encoding, errors) + elif isinstance(s, compat.binary_types): + x = s + else: + raise TypeError("non-string passed to CreateString") + + self.Prep(N.UOffsetTFlags.bytewidth, (len(x)+1)*N.Uint8Flags.bytewidth) + self.Place(0, N.Uint8Flags) + + l = UOffsetTFlags.py_type(len(s)) + ## @cond FLATBUFFERS_INTERNAL + self.head = UOffsetTFlags.py_type(self.Head() - l) + ## @endcond + self.Bytes[self.Head():self.Head()+l] = x + + return self.EndVector(len(x)) + + def CreateByteVector(self, x): + """CreateString writes a byte vector.""" + + self.assertNotNested() + ## @cond FLATBUFFERS_INTERNAL + self.nested = True + ## @endcond + + if not isinstance(x, compat.binary_types): + raise TypeError("non-byte vector passed to CreateByteVector") + + self.Prep(N.UOffsetTFlags.bytewidth, len(x)*N.Uint8Flags.bytewidth) + + l = UOffsetTFlags.py_type(len(x)) + ## @cond FLATBUFFERS_INTERNAL + self.head = UOffsetTFlags.py_type(self.Head() - l) + ## @endcond + self.Bytes[self.Head():self.Head()+l] = x + + return self.EndVector(len(x)) + + def CreateNumpyVector(self, x): + """CreateNumpyVector writes a numpy array into the buffer.""" + + if np is None: + # Numpy is required for this feature + raise NumpyRequiredForThisFeature("Numpy was not found.") + + if not isinstance(x, np.ndarray): + raise TypeError("non-numpy-ndarray passed to CreateNumpyVector") + + if x.dtype.kind not in ['b', 'i', 'u', 'f']: + raise TypeError("numpy-ndarray holds elements of unsupported datatype") + + if x.ndim > 1: + raise TypeError("multidimensional-ndarray passed to CreateNumpyVector") + + self.StartVector(x.itemsize, x.size, x.dtype.alignment) + + # Ensure little endian byte ordering + if x.dtype.str[0] == "<": + x_lend = x + else: + x_lend = x.byteswap(inplace=False) + + # Calculate total length + l = UOffsetTFlags.py_type(x_lend.itemsize * x_lend.size) + ## @cond FLATBUFFERS_INTERNAL + self.head = UOffsetTFlags.py_type(self.Head() - l) + ## @endcond + + # tobytes ensures c_contiguous ordering + self.Bytes[self.Head():self.Head()+l] = x_lend.tobytes(order='C') + + return self.EndVector(x.size) + + ## @cond FLATBUFFERS_INTERNAL + def assertNested(self): + """ + Check that we are in the process of building an object. + """ + + if not self.nested: + raise IsNotNestedError() + + def assertNotNested(self): + """ + Check that no other objects are being built while making this + object. If not, raise an exception. + """ + + if self.nested: + raise IsNestedError() + + def assertStructIsInline(self, obj): + """ + Structs are always stored inline, so need to be created right + where they are used. You'll get this error if you created it + elsewhere. + """ + + N.enforce_number(obj, N.UOffsetTFlags) + if obj != self.Offset(): + msg = ("flatbuffers: Tried to write a Struct at an Offset that " + "is different from the current Offset of the Builder.") + raise StructIsNotInlineError(msg) + + def Slot(self, slotnum): + """ + Slot sets the vtable key `voffset` to the current location in the + buffer. + + """ + self.assertNested() + self.current_vtable[slotnum] = self.Offset() + ## @endcond + + def __Finish(self, rootTable, sizePrefix, file_identifier=None): + """Finish finalizes a buffer, pointing to the given `rootTable`.""" + N.enforce_number(rootTable, N.UOffsetTFlags) + + if file_identifier is not None: + self.Prep(N.UOffsetTFlags.bytewidth, N.Uint8Flags.bytewidth*4) + + # Convert bytes object file_identifier to an array of 4 8-bit integers, + # and use big-endian to enforce size compliance. + # https://docs.python.org/2/library/struct.html#format-characters + file_identifier = N.struct.unpack(">BBBB", file_identifier) + for i in range(encode.FILE_IDENTIFIER_LENGTH-1, -1, -1): + # Place the bytes of the file_identifer in reverse order: + self.Place(file_identifier[i], N.Uint8Flags) + + self.PrependUOffsetTRelative(rootTable) + if sizePrefix: + size = len(self.Bytes) - self.Head() + N.enforce_number(size, N.Int32Flags) + self.PrependInt32(size) + self.finished = True + return self.Head() + + def Finish(self, rootTable, file_identifier=None): + """Finish finalizes a buffer, pointing to the given `rootTable`.""" + return self.__Finish(rootTable, False, file_identifier=file_identifier) + + def FinishSizePrefixed(self, rootTable, file_identifier=None): + """ + Finish finalizes a buffer, pointing to the given `rootTable`, + with the size prefixed. + """ + return self.__Finish(rootTable, True, file_identifier=file_identifier) + + ## @cond FLATBUFFERS_INTERNAL + def Prepend(self, flags, off): + self.Prep(flags.bytewidth, 0) + self.Place(off, flags) + + def PrependSlot(self, flags, o, x, d): + N.enforce_number(x, flags) + N.enforce_number(d, flags) + if x != d or self.forceDefaults: + self.Prepend(flags, x) + self.Slot(o) + + def PrependBoolSlot(self, *args): self.PrependSlot(N.BoolFlags, *args) + + def PrependByteSlot(self, *args): self.PrependSlot(N.Uint8Flags, *args) + + def PrependUint8Slot(self, *args): self.PrependSlot(N.Uint8Flags, *args) + + def PrependUint16Slot(self, *args): self.PrependSlot(N.Uint16Flags, *args) + + def PrependUint32Slot(self, *args): self.PrependSlot(N.Uint32Flags, *args) + + def PrependUint64Slot(self, *args): self.PrependSlot(N.Uint64Flags, *args) + + def PrependInt8Slot(self, *args): self.PrependSlot(N.Int8Flags, *args) + + def PrependInt16Slot(self, *args): self.PrependSlot(N.Int16Flags, *args) + + def PrependInt32Slot(self, *args): self.PrependSlot(N.Int32Flags, *args) + + def PrependInt64Slot(self, *args): self.PrependSlot(N.Int64Flags, *args) + + def PrependFloat32Slot(self, *args): self.PrependSlot(N.Float32Flags, + *args) + + def PrependFloat64Slot(self, *args): self.PrependSlot(N.Float64Flags, + *args) + + def PrependUOffsetTRelativeSlot(self, o, x, d): + """ + PrependUOffsetTRelativeSlot prepends an UOffsetT onto the object at + vtable slot `o`. If value `x` equals default `d`, then the slot will + be set to zero and no other data will be written. + """ + + if x != d or self.forceDefaults: + self.PrependUOffsetTRelative(x) + self.Slot(o) + + def PrependStructSlot(self, v, x, d): + """ + PrependStructSlot prepends a struct onto the object at vtable slot `o`. + Structs are stored inline, so nothing additional is being added. + In generated code, `d` is always 0. + """ + + N.enforce_number(d, N.UOffsetTFlags) + if x != d: + self.assertStructIsInline(x) + self.Slot(v) + + ## @endcond + + def PrependBool(self, x): + """Prepend a `bool` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.BoolFlags, x) + + def PrependByte(self, x): + """Prepend a `byte` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Uint8Flags, x) + + def PrependUint8(self, x): + """Prepend an `uint8` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Uint8Flags, x) + + def PrependUint16(self, x): + """Prepend an `uint16` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Uint16Flags, x) + + def PrependUint32(self, x): + """Prepend an `uint32` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Uint32Flags, x) + + def PrependUint64(self, x): + """Prepend an `uint64` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Uint64Flags, x) + + def PrependInt8(self, x): + """Prepend an `int8` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Int8Flags, x) + + def PrependInt16(self, x): + """Prepend an `int16` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Int16Flags, x) + + def PrependInt32(self, x): + """Prepend an `int32` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Int32Flags, x) + + def PrependInt64(self, x): + """Prepend an `int64` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Int64Flags, x) + + def PrependFloat32(self, x): + """Prepend a `float32` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Float32Flags, x) + + def PrependFloat64(self, x): + """Prepend a `float64` to the Builder buffer. + + Note: aligns and checks for space. + """ + self.Prepend(N.Float64Flags, x) + + def ForceDefaults(self, forceDefaults): + """ + In order to save space, fields that are set to their default value + don't get serialized into the buffer. Forcing defaults provides a + way to manually disable this optimization. When set to `True`, will + always serialize default values. + """ + self.forceDefaults = forceDefaults + +############################################################## + + ## @cond FLATBUFFERS_INTERNAL + def PrependVOffsetT(self, x): self.Prepend(N.VOffsetTFlags, x) + + def Place(self, x, flags): + """ + Place prepends a value specified by `flags` to the Builder, + without checking for available space. + """ + + N.enforce_number(x, flags) + self.head = self.head - flags.bytewidth + encode.Write(flags.packer_type, self.Bytes, self.Head(), x) + + def PlaceVOffsetT(self, x): + """PlaceVOffsetT prepends a VOffsetT to the Builder, without checking + for space. + """ + N.enforce_number(x, N.VOffsetTFlags) + self.head = self.head - N.VOffsetTFlags.bytewidth + encode.Write(packer.voffset, self.Bytes, self.Head(), x) + + def PlaceSOffsetT(self, x): + """PlaceSOffsetT prepends a SOffsetT to the Builder, without checking + for space. + """ + N.enforce_number(x, N.SOffsetTFlags) + self.head = self.head - N.SOffsetTFlags.bytewidth + encode.Write(packer.soffset, self.Bytes, self.Head(), x) + + def PlaceUOffsetT(self, x): + """PlaceUOffsetT prepends a UOffsetT to the Builder, without checking + for space. + """ + N.enforce_number(x, N.UOffsetTFlags) + self.head = self.head - N.UOffsetTFlags.bytewidth + encode.Write(packer.uoffset, self.Bytes, self.Head(), x) + ## @endcond + +## @cond FLATBUFFERS_INTERNAL +def vtableEqual(a, objectStart, b): + """vtableEqual compares an unwritten vtable to a written vtable.""" + + N.enforce_number(objectStart, N.UOffsetTFlags) + + if len(a) * N.VOffsetTFlags.bytewidth != len(b): + return False + + for i, elem in enumerate(a): + x = encode.Get(packer.voffset, b, i * N.VOffsetTFlags.bytewidth) + + # Skip vtable entries that indicate a default value. + if x == 0 and elem == 0: + pass + else: + y = objectStart - elem + if x != y: + return False + return True +## @endcond +## @} diff --git a/utensor_cgen/third_party/flatbuffers/compat.py b/utensor_cgen/third_party/flatbuffers/compat.py new file mode 100644 index 00000000..2fc9cca0 --- /dev/null +++ b/utensor_cgen/third_party/flatbuffers/compat.py @@ -0,0 +1,81 @@ +# Copyright 2016 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" A tiny version of `six` to help with backwards compability. Also includes + compatibility helpers for numpy. """ + +import sys +import imp + +PY2 = sys.version_info[0] == 2 +PY26 = sys.version_info[0:2] == (2, 6) +PY27 = sys.version_info[0:2] == (2, 7) +PY275 = sys.version_info[0:3] >= (2, 7, 5) +PY3 = sys.version_info[0] == 3 +PY34 = sys.version_info[0:2] >= (3, 4) + +if PY3: + string_types = (str,) + binary_types = (bytes,bytearray) + range_func = range + memoryview_type = memoryview + struct_bool_decl = "?" +else: + string_types = (unicode,) + if PY26 or PY27: + binary_types = (str,bytearray) + else: + binary_types = (str,) + range_func = xrange + if PY26 or (PY27 and not PY275): + memoryview_type = buffer + struct_bool_decl = " Date: Tue, 26 Nov 2019 22:34:17 -0800 Subject: [PATCH 018/117] daily commit - ops require options; see TODO in tflite_exporter.py --- tests/tflm/tflite_export/conftest.py | 9 ++++---- tests/tflm/tflite_export/test_write.py | 11 ++++++++-- utensor_cgen/transformer/tflite_exporter.py | 23 +++++++++++++++++++-- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/tests/tflm/tflite_export/conftest.py b/tests/tflm/tflite_export/conftest.py index 2aa974b6..e798b3f4 100644 --- a/tests/tflm/tflite_export/conftest.py +++ b/tests/tflm/tflite_export/conftest.py @@ -5,7 +5,7 @@ from utensor_cgen.ir import TensorInfo, OperationInfo, uTensorGraph from utensor_cgen.utils import prune_graph, topologic_order_graph -@fixture(name='sample_ugraph') +@fixture(name='hybrid_quant_output') def simple_tflm_graph(): ugraph = uTensorGraph() @@ -39,13 +39,13 @@ def simple_tflm_graph(): input_tensors = [], output_tensors = [] ) - mock_input_op.op_attr["value"] = np.array([[1],[2],[3],[4]], dtype=np.int8) + mock_input_op.op_attr["value"] = np.array([[1.0],[2.0],[3.0],[4.0]], dtype=np.float32) mock_input_op.op_attr["shape"] = [1,4] input1 = TensorInfo( name = "input", op_name = "mock_input_const", - dtype = np.dtype("float"), + dtype = mock_input_op.op_attr["value"].dtype, shape = [1, 4], ugraph = ugraph ) @@ -102,4 +102,5 @@ def simple_tflm_graph(): topologic_order_graph(ugraph) #ugraph = prune_graph(ugraph) - return ugraph + #return: ugraph, input tensors, output tensors + return [ugraph, [], ["output"]] diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index bc4bc918..efc039a6 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -80,8 +80,9 @@ def print_tflite_graph(byte_buff): else: print("None") -def test_tflite_fb_write(sample_ugraph): - exporter = TFLiteExporter() +def test_tflite_fb_write(hybrid_quant_output): + [sample_ugraph, input_tensors, output_tensors] = hybrid_quant_output + exporter = TFLiteExporter(input_tensors=input_tensors, output_tensors=output_tensors) ugraph = exporter.transform(sample_ugraph) model_content = exporter.output() @@ -92,6 +93,12 @@ def test_tflite_fb_write(sample_ugraph): open("tflm_test_model.tflite", "wb").write(model_content) test_model = tf.lite.Interpreter('tflm_test_model.tflite') + test_model.allocate_tensors() + test_model_output_index = test_model.tensor(test_model.get_output_details()[0]["index"]) + test_model.invoke() + output_content = test_model.get_tensor(test_model_output_index)[0] + + print(output_content) test_pass = True assert test_pass, 'error message here' diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 5fc4d9b8..cf9de297 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -60,7 +60,12 @@ class TFLiteExporter(Transformer): schema_version = 3 file_ident = "TFL3" - def __init__(self): + def __init__(self, input_tensors, output_tensors): + """ + input_tensors: a list of input tensor names + output_tensors: alist of output tensor names + """ + self.prune_graph = False #what is this? self.op_manager = FlatbufferOpManager() self.fbuilder = flatbuffers.Builder(self.__Max_fbuff_size) @@ -68,6 +73,8 @@ def __init__(self): # added to the Model object self.tensor_index = OrderedDict() # out_name : ref tensor object #added to the Subgraph object + self.input_tensors = input_tensors + self.output_tensors = output_tensors def transform(self, ugraph): @@ -87,6 +94,12 @@ def transform(self, ugraph): tensors_vec = self.__fb_vector(tflite.SubGraph.SubGraphStartTensorsVector, [f_obj for t_name, f_obj in self.tensor_index.items()]) + subgraph_input_t_names = [list(self.tensor_index.keys()).index(t_name) for t_name in self.input_tensors] + subgraph_input_vec = self.__fb_vector(tflite.SubGraph.SubGraphStartInputsVector, subgraph_input_t_names) + + subgraph_output_t_names = [list(self.tensor_index.keys()).index(t_name) for t_name in self.output_tensors] + subgraph_output_vec = self.__fb_vector(tflite.SubGraph.SubGraphStartOutputsVector, subgraph_output_t_names) + # traverse ugraph # compile a list of static ops : fb_ops_list fb_ops_list = list() @@ -102,6 +115,8 @@ def transform(self, ugraph): tflite.SubGraph.SubGraphStart(self.fbuilder) tflite.SubGraph.SubGraphAddTensors(self.fbuilder, tensors_vec) tflite.SubGraph.SubGraphAddOperators(self.fbuilder, ops_vec) + tflite.SubGraph.SubGraphAddInputs(self.fbuilder, subgraph_input_vec) + tflite.SubGraph.SubGraphAddOutputs(self.fbuilder, subgraph_output_vec) subgraph = tflite.SubGraph.SubGraphEnd(self.fbuilder) #TFLM runtime only support 1 subgraph @@ -207,6 +222,8 @@ def add_Op(self, op_info): op_inputs = self.__input_vector(op_info.input_tensors) op_outputs = self.__output_vector(op_info.output_tensors) + ##TODO: add op factory to deal with op options + tflite.Operator.OperatorStart(self.fbuilder) tflite.Operator.OperatorAddOpcodeIndex(self.fbuilder, self.op_manager.op_index(op_info.op_type)) tflite.Operator.OperatorAddInputs(self.fbuilder, op_inputs) @@ -293,11 +310,13 @@ def __fb_vector(self, vector_constructor, arr_list): prepend_method_table[tflite.Operator.OperatorStartInputsVector] = self.fbuilder.PrependInt32 prepend_method_table[tflite.QuantizationParameters.QuantizationParametersStartScaleVector] = self.fbuilder.PrependFloat32 prepend_method_table[tflite.QuantizationParameters.QuantizationParametersStartZeroPointVector] = self.fbuilder.PrependFloat32 + prepend_method_table[tflite.SubGraph.SubGraphStartOutputsVector] = self.fbuilder.PrependInt32 + prepend_method_table[tflite.SubGraph.SubGraphStartInputsVector] = self.fbuilder.PrependInt32 preprend_method = prepend_method_table[vector_constructor] num_items = len(arr_list) - assert num_items > 0 + #assert num_items > 0 vector_constructor(self.fbuilder, num_items) # reversed to handle prepend From ab7d08ec4100ad75acf2ebf1d4fdd9a0a16bce89 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Wed, 27 Nov 2019 17:58:48 -0800 Subject: [PATCH 019/117] OperatorAddBuiltinOptions breaks input tensors? try regenerate the flatbuffer python bindings --- utensor_cgen/transformer/tflite_exporter.py | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index cf9de297..597975b0 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -15,6 +15,7 @@ from utensor_cgen.third_party.tflite import * from utensor_cgen.third_party.tflite.BuiltinOperator import BuiltinOperator from utensor_cgen.third_party.tflite.BuiltinOptions import BuiltinOptions +from utensor_cgen.third_party.tflite.ActivationFunctionType import ActivationFunctionType from utensor_cgen.third_party.tflite.TensorType import TensorType from utensor_cgen.logger import logger from utensor_cgen.utils import parse_tensor_name @@ -23,6 +24,20 @@ __all__ = ["TFLiteExporter"] +def get_fullyconnected_builtin_option(fbuilder, op_info): + + weight_format = tflite.FullyConnectedOptionsWeightsFormat.FullyConnectedOptionsWeightsFormat.DEFAULT + + tflite.FullyConnectedOptions.FullyConnectedOptionsStart(fbuilder) + #FIXME: node fusion and select an activation function here + tflite.FullyConnectedOptions.FullyConnectedOptionsAddFusedActivationFunction(fbuilder, ActivationFunctionType.NONE) + tflite.FullyConnectedOptions.FullyConnectedOptionsAddWeightsFormat(fbuilder, weight_format) + #FIXME: check the parameter here + tflite.FullyConnectedOptions.FullyConnectedOptionsAddKeepNumDims(fbuilder, False) + obj = tflite.FullyConnectedOptions.FullyConnectedOptionsEnd(fbuilder) + + return obj, BuiltinOptions.FullyConnectedOptions + class FlatbufferOpManager: op_list = list() code_name_lookup = {v: k for k, v in BuiltinOperator.__dict__.items()} @@ -223,11 +238,19 @@ def add_Op(self, op_info): op_outputs = self.__output_vector(op_info.output_tensors) ##TODO: add op factory to deal with op options + op_option_factory = dict() + op_option_factory["FULLY_CONNECTED"] = get_fullyconnected_builtin_option + + builtin_opt_func = op_option_factory[op_info.op_type] + + builtin_opt, builtin_opt_type = builtin_opt_func(self.fbuilder, op_info) tflite.Operator.OperatorStart(self.fbuilder) tflite.Operator.OperatorAddOpcodeIndex(self.fbuilder, self.op_manager.op_index(op_info.op_type)) tflite.Operator.OperatorAddInputs(self.fbuilder, op_inputs) tflite.Operator.OperatorAddOutputs(self.fbuilder, op_outputs) + tflite.Operator.OperatorAddBuiltinOptionsType(self.fbuilder, builtin_opt_type) + #tflite.Operator.OperatorAddBuiltinOptions(self.fbuilder, builtin_opt) op = tflite.Operator.OperatorEnd(self.fbuilder) return op #to be added into SubGraphStartOperatorsVector From 2fd92f6fedf7d7b2d21bbf8320e8e33becc81949 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 28 Nov 2019 16:09:09 -0800 Subject: [PATCH 020/117] regenerated the fb python bindings hybrid quantization failed --- utensor_cgen/third_party/tflite/AbsOptions.py | 4 ++++ utensor_cgen/third_party/tflite/AddNOptions.py | 4 ++++ utensor_cgen/third_party/tflite/AddOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ArgMaxOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ArgMinOptions.py | 4 ++++ utensor_cgen/third_party/tflite/BatchToSpaceNDOptions.py | 4 ++++ .../third_party/tflite/BidirectionalSequenceLSTMOptions.py | 4 ++++ .../third_party/tflite/BidirectionalSequenceRNNOptions.py | 4 ++++ utensor_cgen/third_party/tflite/Buffer.py | 4 ++++ utensor_cgen/third_party/tflite/CallOptions.py | 4 ++++ utensor_cgen/third_party/tflite/CastOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ConcatEmbeddingsOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ConcatenationOptions.py | 4 ++++ utensor_cgen/third_party/tflite/Conv2DOptions.py | 4 ++++ utensor_cgen/third_party/tflite/CosOptions.py | 4 ++++ utensor_cgen/third_party/tflite/CustomQuantization.py | 4 ++++ utensor_cgen/third_party/tflite/DepthToSpaceOptions.py | 4 ++++ utensor_cgen/third_party/tflite/DepthwiseConv2DOptions.py | 4 ++++ utensor_cgen/third_party/tflite/DequantizeOptions.py | 4 ++++ utensor_cgen/third_party/tflite/DivOptions.py | 4 ++++ .../third_party/tflite/EmbeddingLookupSparseOptions.py | 4 ++++ utensor_cgen/third_party/tflite/EqualOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ExpOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ExpandDimsOptions.py | 4 ++++ utensor_cgen/third_party/tflite/FakeQuantOptions.py | 4 ++++ utensor_cgen/third_party/tflite/FillOptions.py | 4 ++++ utensor_cgen/third_party/tflite/FloorDivOptions.py | 4 ++++ utensor_cgen/third_party/tflite/FloorModOptions.py | 4 ++++ utensor_cgen/third_party/tflite/FullyConnectedOptions.py | 4 ++++ utensor_cgen/third_party/tflite/GatherNdOptions.py | 4 ++++ utensor_cgen/third_party/tflite/GatherOptions.py | 4 ++++ utensor_cgen/third_party/tflite/GreaterEqualOptions.py | 4 ++++ utensor_cgen/third_party/tflite/GreaterOptions.py | 4 ++++ utensor_cgen/third_party/tflite/HardSwishOptions.py | 4 ++++ utensor_cgen/third_party/tflite/IfOptions.py | 4 ++++ utensor_cgen/third_party/tflite/L2NormOptions.py | 4 ++++ utensor_cgen/third_party/tflite/LSHProjectionOptions.py | 4 ++++ utensor_cgen/third_party/tflite/LSTMOptions.py | 4 ++++ utensor_cgen/third_party/tflite/LeakyReluOptions.py | 4 ++++ utensor_cgen/third_party/tflite/LessEqualOptions.py | 4 ++++ utensor_cgen/third_party/tflite/LessOptions.py | 4 ++++ .../third_party/tflite/LocalResponseNormalizationOptions.py | 4 ++++ utensor_cgen/third_party/tflite/LogSoftmaxOptions.py | 4 ++++ utensor_cgen/third_party/tflite/LogicalAndOptions.py | 4 ++++ utensor_cgen/third_party/tflite/LogicalNotOptions.py | 4 ++++ utensor_cgen/third_party/tflite/LogicalOrOptions.py | 4 ++++ utensor_cgen/third_party/tflite/MatrixDiagOptions.py | 4 ++++ utensor_cgen/third_party/tflite/MatrixSetDiagOptions.py | 4 ++++ utensor_cgen/third_party/tflite/MaximumMinimumOptions.py | 4 ++++ utensor_cgen/third_party/tflite/Metadata.py | 4 ++++ utensor_cgen/third_party/tflite/MirrorPadOptions.py | 4 ++++ utensor_cgen/third_party/tflite/Model.py | 4 ++++ utensor_cgen/third_party/tflite/MulOptions.py | 4 ++++ utensor_cgen/third_party/tflite/NegOptions.py | 4 ++++ utensor_cgen/third_party/tflite/NonMaxSuppressionV4Options.py | 4 ++++ utensor_cgen/third_party/tflite/NonMaxSuppressionV5Options.py | 4 ++++ utensor_cgen/third_party/tflite/NotEqualOptions.py | 4 ++++ utensor_cgen/third_party/tflite/OneHotOptions.py | 4 ++++ utensor_cgen/third_party/tflite/Operator.py | 4 ++++ utensor_cgen/third_party/tflite/OperatorCode.py | 4 ++++ utensor_cgen/third_party/tflite/PackOptions.py | 4 ++++ utensor_cgen/third_party/tflite/PadOptions.py | 4 ++++ utensor_cgen/third_party/tflite/PadV2Options.py | 4 ++++ utensor_cgen/third_party/tflite/Pool2DOptions.py | 4 ++++ utensor_cgen/third_party/tflite/PowOptions.py | 4 ++++ utensor_cgen/third_party/tflite/QuantizationParameters.py | 4 ++++ utensor_cgen/third_party/tflite/QuantizeOptions.py | 4 ++++ utensor_cgen/third_party/tflite/RNNOptions.py | 4 ++++ utensor_cgen/third_party/tflite/RangeOptions.py | 4 ++++ utensor_cgen/third_party/tflite/RankOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ReducerOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ReshapeOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ResizeBilinearOptions.py | 4 ++++ .../third_party/tflite/ResizeNearestNeighborOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ReverseSequenceOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ReverseV2Options.py | 4 ++++ utensor_cgen/third_party/tflite/SVDFOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SelectOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SequenceRNNOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ShapeOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SkipGramOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SliceOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SoftmaxOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SpaceToBatchNDOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SpaceToDepthOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SparseToDenseOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SplitOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SplitVOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SquareOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SquaredDifferenceOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SqueezeOptions.py | 4 ++++ utensor_cgen/third_party/tflite/StridedSliceOptions.py | 4 ++++ utensor_cgen/third_party/tflite/SubGraph.py | 4 ++++ utensor_cgen/third_party/tflite/SubOptions.py | 4 ++++ utensor_cgen/third_party/tflite/Tensor.py | 4 ++++ utensor_cgen/third_party/tflite/TileOptions.py | 4 ++++ utensor_cgen/third_party/tflite/TopKV2Options.py | 4 ++++ utensor_cgen/third_party/tflite/TransposeConvOptions.py | 4 ++++ utensor_cgen/third_party/tflite/TransposeOptions.py | 4 ++++ .../third_party/tflite/UnidirectionalSequenceLSTMOptions.py | 4 ++++ utensor_cgen/third_party/tflite/UniqueOptions.py | 4 ++++ utensor_cgen/third_party/tflite/UnpackOptions.py | 4 ++++ utensor_cgen/third_party/tflite/WhereOptions.py | 4 ++++ utensor_cgen/third_party/tflite/WhileOptions.py | 4 ++++ utensor_cgen/third_party/tflite/ZerosLikeOptions.py | 4 ++++ utensor_cgen/transformer/tflite_exporter.py | 2 +- 106 files changed, 421 insertions(+), 1 deletion(-) diff --git a/utensor_cgen/third_party/tflite/AbsOptions.py b/utensor_cgen/third_party/tflite/AbsOptions.py index 0cbfb8c0..3da6cb0f 100644 --- a/utensor_cgen/third_party/tflite/AbsOptions.py +++ b/utensor_cgen/third_party/tflite/AbsOptions.py @@ -14,6 +14,10 @@ def GetRootAsAbsOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def AbsOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # AbsOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/AddNOptions.py b/utensor_cgen/third_party/tflite/AddNOptions.py index b5c2ddb7..a29858bd 100644 --- a/utensor_cgen/third_party/tflite/AddNOptions.py +++ b/utensor_cgen/third_party/tflite/AddNOptions.py @@ -14,6 +14,10 @@ def GetRootAsAddNOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def AddNOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # AddNOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/AddOptions.py b/utensor_cgen/third_party/tflite/AddOptions.py index d6cbfcf5..b9fe03b8 100644 --- a/utensor_cgen/third_party/tflite/AddOptions.py +++ b/utensor_cgen/third_party/tflite/AddOptions.py @@ -14,6 +14,10 @@ def GetRootAsAddOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def AddOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # AddOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ArgMaxOptions.py b/utensor_cgen/third_party/tflite/ArgMaxOptions.py index fbf1415e..741135dd 100644 --- a/utensor_cgen/third_party/tflite/ArgMaxOptions.py +++ b/utensor_cgen/third_party/tflite/ArgMaxOptions.py @@ -14,6 +14,10 @@ def GetRootAsArgMaxOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ArgMaxOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ArgMaxOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ArgMinOptions.py b/utensor_cgen/third_party/tflite/ArgMinOptions.py index 120fdca2..f62455f7 100644 --- a/utensor_cgen/third_party/tflite/ArgMinOptions.py +++ b/utensor_cgen/third_party/tflite/ArgMinOptions.py @@ -14,6 +14,10 @@ def GetRootAsArgMinOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ArgMinOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ArgMinOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/BatchToSpaceNDOptions.py b/utensor_cgen/third_party/tflite/BatchToSpaceNDOptions.py index 3ddcfd3f..8398ca19 100644 --- a/utensor_cgen/third_party/tflite/BatchToSpaceNDOptions.py +++ b/utensor_cgen/third_party/tflite/BatchToSpaceNDOptions.py @@ -14,6 +14,10 @@ def GetRootAsBatchToSpaceNDOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def BatchToSpaceNDOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # BatchToSpaceNDOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/BidirectionalSequenceLSTMOptions.py b/utensor_cgen/third_party/tflite/BidirectionalSequenceLSTMOptions.py index 8d8b7bea..f1671b5a 100644 --- a/utensor_cgen/third_party/tflite/BidirectionalSequenceLSTMOptions.py +++ b/utensor_cgen/third_party/tflite/BidirectionalSequenceLSTMOptions.py @@ -14,6 +14,10 @@ def GetRootAsBidirectionalSequenceLSTMOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def BidirectionalSequenceLSTMOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # BidirectionalSequenceLSTMOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/BidirectionalSequenceRNNOptions.py b/utensor_cgen/third_party/tflite/BidirectionalSequenceRNNOptions.py index 673af6b9..340d6667 100644 --- a/utensor_cgen/third_party/tflite/BidirectionalSequenceRNNOptions.py +++ b/utensor_cgen/third_party/tflite/BidirectionalSequenceRNNOptions.py @@ -14,6 +14,10 @@ def GetRootAsBidirectionalSequenceRNNOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def BidirectionalSequenceRNNOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # BidirectionalSequenceRNNOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/Buffer.py b/utensor_cgen/third_party/tflite/Buffer.py index 754dee3b..1333f955 100644 --- a/utensor_cgen/third_party/tflite/Buffer.py +++ b/utensor_cgen/third_party/tflite/Buffer.py @@ -14,6 +14,10 @@ def GetRootAsBuffer(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def BufferBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # Buffer def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/CallOptions.py b/utensor_cgen/third_party/tflite/CallOptions.py index 5ae2eeae..3216f8a1 100644 --- a/utensor_cgen/third_party/tflite/CallOptions.py +++ b/utensor_cgen/third_party/tflite/CallOptions.py @@ -14,6 +14,10 @@ def GetRootAsCallOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def CallOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # CallOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/CastOptions.py b/utensor_cgen/third_party/tflite/CastOptions.py index 70ae2e37..1f007650 100644 --- a/utensor_cgen/third_party/tflite/CastOptions.py +++ b/utensor_cgen/third_party/tflite/CastOptions.py @@ -14,6 +14,10 @@ def GetRootAsCastOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def CastOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # CastOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ConcatEmbeddingsOptions.py b/utensor_cgen/third_party/tflite/ConcatEmbeddingsOptions.py index 9d26c510..13be8026 100644 --- a/utensor_cgen/third_party/tflite/ConcatEmbeddingsOptions.py +++ b/utensor_cgen/third_party/tflite/ConcatEmbeddingsOptions.py @@ -14,6 +14,10 @@ def GetRootAsConcatEmbeddingsOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ConcatEmbeddingsOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ConcatEmbeddingsOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ConcatenationOptions.py b/utensor_cgen/third_party/tflite/ConcatenationOptions.py index c8e0b6ab..f6928a6b 100644 --- a/utensor_cgen/third_party/tflite/ConcatenationOptions.py +++ b/utensor_cgen/third_party/tflite/ConcatenationOptions.py @@ -14,6 +14,10 @@ def GetRootAsConcatenationOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ConcatenationOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ConcatenationOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/Conv2DOptions.py b/utensor_cgen/third_party/tflite/Conv2DOptions.py index ef49f751..a05b39cb 100644 --- a/utensor_cgen/third_party/tflite/Conv2DOptions.py +++ b/utensor_cgen/third_party/tflite/Conv2DOptions.py @@ -14,6 +14,10 @@ def GetRootAsConv2DOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def Conv2DOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # Conv2DOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/CosOptions.py b/utensor_cgen/third_party/tflite/CosOptions.py index 7fbf8487..12d49268 100644 --- a/utensor_cgen/third_party/tflite/CosOptions.py +++ b/utensor_cgen/third_party/tflite/CosOptions.py @@ -14,6 +14,10 @@ def GetRootAsCosOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def CosOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # CosOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/CustomQuantization.py b/utensor_cgen/third_party/tflite/CustomQuantization.py index 21ec0da4..5b1013c6 100644 --- a/utensor_cgen/third_party/tflite/CustomQuantization.py +++ b/utensor_cgen/third_party/tflite/CustomQuantization.py @@ -14,6 +14,10 @@ def GetRootAsCustomQuantization(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def CustomQuantizationBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # CustomQuantization def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/DepthToSpaceOptions.py b/utensor_cgen/third_party/tflite/DepthToSpaceOptions.py index 97b93aa7..e6b44f42 100644 --- a/utensor_cgen/third_party/tflite/DepthToSpaceOptions.py +++ b/utensor_cgen/third_party/tflite/DepthToSpaceOptions.py @@ -14,6 +14,10 @@ def GetRootAsDepthToSpaceOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def DepthToSpaceOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # DepthToSpaceOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/DepthwiseConv2DOptions.py b/utensor_cgen/third_party/tflite/DepthwiseConv2DOptions.py index 9689383b..50dcdbfb 100644 --- a/utensor_cgen/third_party/tflite/DepthwiseConv2DOptions.py +++ b/utensor_cgen/third_party/tflite/DepthwiseConv2DOptions.py @@ -14,6 +14,10 @@ def GetRootAsDepthwiseConv2DOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def DepthwiseConv2DOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # DepthwiseConv2DOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/DequantizeOptions.py b/utensor_cgen/third_party/tflite/DequantizeOptions.py index 5ef8b8dd..bd9f2e2d 100644 --- a/utensor_cgen/third_party/tflite/DequantizeOptions.py +++ b/utensor_cgen/third_party/tflite/DequantizeOptions.py @@ -14,6 +14,10 @@ def GetRootAsDequantizeOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def DequantizeOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # DequantizeOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/DivOptions.py b/utensor_cgen/third_party/tflite/DivOptions.py index 905a3be0..2988a8e3 100644 --- a/utensor_cgen/third_party/tflite/DivOptions.py +++ b/utensor_cgen/third_party/tflite/DivOptions.py @@ -14,6 +14,10 @@ def GetRootAsDivOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def DivOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # DivOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/EmbeddingLookupSparseOptions.py b/utensor_cgen/third_party/tflite/EmbeddingLookupSparseOptions.py index 7d9c1442..eaa83569 100644 --- a/utensor_cgen/third_party/tflite/EmbeddingLookupSparseOptions.py +++ b/utensor_cgen/third_party/tflite/EmbeddingLookupSparseOptions.py @@ -14,6 +14,10 @@ def GetRootAsEmbeddingLookupSparseOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def EmbeddingLookupSparseOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # EmbeddingLookupSparseOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/EqualOptions.py b/utensor_cgen/third_party/tflite/EqualOptions.py index f787ef85..b7b14bb3 100644 --- a/utensor_cgen/third_party/tflite/EqualOptions.py +++ b/utensor_cgen/third_party/tflite/EqualOptions.py @@ -14,6 +14,10 @@ def GetRootAsEqualOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def EqualOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # EqualOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ExpOptions.py b/utensor_cgen/third_party/tflite/ExpOptions.py index eac1456e..ea1cfead 100644 --- a/utensor_cgen/third_party/tflite/ExpOptions.py +++ b/utensor_cgen/third_party/tflite/ExpOptions.py @@ -14,6 +14,10 @@ def GetRootAsExpOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ExpOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ExpOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ExpandDimsOptions.py b/utensor_cgen/third_party/tflite/ExpandDimsOptions.py index 69d63665..2350c6e7 100644 --- a/utensor_cgen/third_party/tflite/ExpandDimsOptions.py +++ b/utensor_cgen/third_party/tflite/ExpandDimsOptions.py @@ -14,6 +14,10 @@ def GetRootAsExpandDimsOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ExpandDimsOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ExpandDimsOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/FakeQuantOptions.py b/utensor_cgen/third_party/tflite/FakeQuantOptions.py index 46c371c3..d97da180 100644 --- a/utensor_cgen/third_party/tflite/FakeQuantOptions.py +++ b/utensor_cgen/third_party/tflite/FakeQuantOptions.py @@ -14,6 +14,10 @@ def GetRootAsFakeQuantOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def FakeQuantOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # FakeQuantOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/FillOptions.py b/utensor_cgen/third_party/tflite/FillOptions.py index 5a1e651a..f6b2ca3a 100644 --- a/utensor_cgen/third_party/tflite/FillOptions.py +++ b/utensor_cgen/third_party/tflite/FillOptions.py @@ -14,6 +14,10 @@ def GetRootAsFillOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def FillOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # FillOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/FloorDivOptions.py b/utensor_cgen/third_party/tflite/FloorDivOptions.py index 64b474fb..53a3c4c6 100644 --- a/utensor_cgen/third_party/tflite/FloorDivOptions.py +++ b/utensor_cgen/third_party/tflite/FloorDivOptions.py @@ -14,6 +14,10 @@ def GetRootAsFloorDivOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def FloorDivOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # FloorDivOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/FloorModOptions.py b/utensor_cgen/third_party/tflite/FloorModOptions.py index 37c8e5a5..6e5f679f 100644 --- a/utensor_cgen/third_party/tflite/FloorModOptions.py +++ b/utensor_cgen/third_party/tflite/FloorModOptions.py @@ -14,6 +14,10 @@ def GetRootAsFloorModOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def FloorModOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # FloorModOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/FullyConnectedOptions.py b/utensor_cgen/third_party/tflite/FullyConnectedOptions.py index a6b4e40f..c2eff3a3 100644 --- a/utensor_cgen/third_party/tflite/FullyConnectedOptions.py +++ b/utensor_cgen/third_party/tflite/FullyConnectedOptions.py @@ -14,6 +14,10 @@ def GetRootAsFullyConnectedOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def FullyConnectedOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # FullyConnectedOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/GatherNdOptions.py b/utensor_cgen/third_party/tflite/GatherNdOptions.py index f515eb5c..db09182b 100644 --- a/utensor_cgen/third_party/tflite/GatherNdOptions.py +++ b/utensor_cgen/third_party/tflite/GatherNdOptions.py @@ -14,6 +14,10 @@ def GetRootAsGatherNdOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def GatherNdOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # GatherNdOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/GatherOptions.py b/utensor_cgen/third_party/tflite/GatherOptions.py index 9fbc3e40..d0915f82 100644 --- a/utensor_cgen/third_party/tflite/GatherOptions.py +++ b/utensor_cgen/third_party/tflite/GatherOptions.py @@ -14,6 +14,10 @@ def GetRootAsGatherOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def GatherOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # GatherOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/GreaterEqualOptions.py b/utensor_cgen/third_party/tflite/GreaterEqualOptions.py index a29e200a..03a86fa2 100644 --- a/utensor_cgen/third_party/tflite/GreaterEqualOptions.py +++ b/utensor_cgen/third_party/tflite/GreaterEqualOptions.py @@ -14,6 +14,10 @@ def GetRootAsGreaterEqualOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def GreaterEqualOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # GreaterEqualOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/GreaterOptions.py b/utensor_cgen/third_party/tflite/GreaterOptions.py index 59d63501..593e0d75 100644 --- a/utensor_cgen/third_party/tflite/GreaterOptions.py +++ b/utensor_cgen/third_party/tflite/GreaterOptions.py @@ -14,6 +14,10 @@ def GetRootAsGreaterOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def GreaterOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # GreaterOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/HardSwishOptions.py b/utensor_cgen/third_party/tflite/HardSwishOptions.py index 4f6a5200..cbbf99cc 100644 --- a/utensor_cgen/third_party/tflite/HardSwishOptions.py +++ b/utensor_cgen/third_party/tflite/HardSwishOptions.py @@ -14,6 +14,10 @@ def GetRootAsHardSwishOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def HardSwishOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # HardSwishOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/IfOptions.py b/utensor_cgen/third_party/tflite/IfOptions.py index 13f4e697..aad72769 100644 --- a/utensor_cgen/third_party/tflite/IfOptions.py +++ b/utensor_cgen/third_party/tflite/IfOptions.py @@ -14,6 +14,10 @@ def GetRootAsIfOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def IfOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # IfOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/L2NormOptions.py b/utensor_cgen/third_party/tflite/L2NormOptions.py index 38bdf573..0b1212fc 100644 --- a/utensor_cgen/third_party/tflite/L2NormOptions.py +++ b/utensor_cgen/third_party/tflite/L2NormOptions.py @@ -14,6 +14,10 @@ def GetRootAsL2NormOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def L2NormOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # L2NormOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LSHProjectionOptions.py b/utensor_cgen/third_party/tflite/LSHProjectionOptions.py index ad550be2..b545e78d 100644 --- a/utensor_cgen/third_party/tflite/LSHProjectionOptions.py +++ b/utensor_cgen/third_party/tflite/LSHProjectionOptions.py @@ -14,6 +14,10 @@ def GetRootAsLSHProjectionOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LSHProjectionOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LSHProjectionOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LSTMOptions.py b/utensor_cgen/third_party/tflite/LSTMOptions.py index 93a83093..59c680c9 100644 --- a/utensor_cgen/third_party/tflite/LSTMOptions.py +++ b/utensor_cgen/third_party/tflite/LSTMOptions.py @@ -14,6 +14,10 @@ def GetRootAsLSTMOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LSTMOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LSTMOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LeakyReluOptions.py b/utensor_cgen/third_party/tflite/LeakyReluOptions.py index b61b21d5..5b8c647a 100644 --- a/utensor_cgen/third_party/tflite/LeakyReluOptions.py +++ b/utensor_cgen/third_party/tflite/LeakyReluOptions.py @@ -14,6 +14,10 @@ def GetRootAsLeakyReluOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LeakyReluOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LeakyReluOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LessEqualOptions.py b/utensor_cgen/third_party/tflite/LessEqualOptions.py index d49b7289..8465ff3e 100644 --- a/utensor_cgen/third_party/tflite/LessEqualOptions.py +++ b/utensor_cgen/third_party/tflite/LessEqualOptions.py @@ -14,6 +14,10 @@ def GetRootAsLessEqualOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LessEqualOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LessEqualOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LessOptions.py b/utensor_cgen/third_party/tflite/LessOptions.py index 469cb0b0..93f3edcd 100644 --- a/utensor_cgen/third_party/tflite/LessOptions.py +++ b/utensor_cgen/third_party/tflite/LessOptions.py @@ -14,6 +14,10 @@ def GetRootAsLessOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LessOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LessOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LocalResponseNormalizationOptions.py b/utensor_cgen/third_party/tflite/LocalResponseNormalizationOptions.py index db875603..5f4399a3 100644 --- a/utensor_cgen/third_party/tflite/LocalResponseNormalizationOptions.py +++ b/utensor_cgen/third_party/tflite/LocalResponseNormalizationOptions.py @@ -14,6 +14,10 @@ def GetRootAsLocalResponseNormalizationOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LocalResponseNormalizationOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LocalResponseNormalizationOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LogSoftmaxOptions.py b/utensor_cgen/third_party/tflite/LogSoftmaxOptions.py index 47893855..584d628c 100644 --- a/utensor_cgen/third_party/tflite/LogSoftmaxOptions.py +++ b/utensor_cgen/third_party/tflite/LogSoftmaxOptions.py @@ -14,6 +14,10 @@ def GetRootAsLogSoftmaxOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LogSoftmaxOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LogSoftmaxOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LogicalAndOptions.py b/utensor_cgen/third_party/tflite/LogicalAndOptions.py index cee1cdb4..1ec0e6e4 100644 --- a/utensor_cgen/third_party/tflite/LogicalAndOptions.py +++ b/utensor_cgen/third_party/tflite/LogicalAndOptions.py @@ -14,6 +14,10 @@ def GetRootAsLogicalAndOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LogicalAndOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LogicalAndOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LogicalNotOptions.py b/utensor_cgen/third_party/tflite/LogicalNotOptions.py index 9971450c..ce66ec3b 100644 --- a/utensor_cgen/third_party/tflite/LogicalNotOptions.py +++ b/utensor_cgen/third_party/tflite/LogicalNotOptions.py @@ -14,6 +14,10 @@ def GetRootAsLogicalNotOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LogicalNotOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LogicalNotOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/LogicalOrOptions.py b/utensor_cgen/third_party/tflite/LogicalOrOptions.py index e94a5dec..ae4b36b0 100644 --- a/utensor_cgen/third_party/tflite/LogicalOrOptions.py +++ b/utensor_cgen/third_party/tflite/LogicalOrOptions.py @@ -14,6 +14,10 @@ def GetRootAsLogicalOrOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def LogicalOrOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # LogicalOrOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/MatrixDiagOptions.py b/utensor_cgen/third_party/tflite/MatrixDiagOptions.py index 0f64e657..85113659 100644 --- a/utensor_cgen/third_party/tflite/MatrixDiagOptions.py +++ b/utensor_cgen/third_party/tflite/MatrixDiagOptions.py @@ -14,6 +14,10 @@ def GetRootAsMatrixDiagOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def MatrixDiagOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # MatrixDiagOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/MatrixSetDiagOptions.py b/utensor_cgen/third_party/tflite/MatrixSetDiagOptions.py index 14178cf8..361d3b69 100644 --- a/utensor_cgen/third_party/tflite/MatrixSetDiagOptions.py +++ b/utensor_cgen/third_party/tflite/MatrixSetDiagOptions.py @@ -14,6 +14,10 @@ def GetRootAsMatrixSetDiagOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def MatrixSetDiagOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # MatrixSetDiagOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/MaximumMinimumOptions.py b/utensor_cgen/third_party/tflite/MaximumMinimumOptions.py index f0806e2d..86b94f9e 100644 --- a/utensor_cgen/third_party/tflite/MaximumMinimumOptions.py +++ b/utensor_cgen/third_party/tflite/MaximumMinimumOptions.py @@ -14,6 +14,10 @@ def GetRootAsMaximumMinimumOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def MaximumMinimumOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # MaximumMinimumOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/Metadata.py b/utensor_cgen/third_party/tflite/Metadata.py index 273e51ee..bd2bcfd2 100644 --- a/utensor_cgen/third_party/tflite/Metadata.py +++ b/utensor_cgen/third_party/tflite/Metadata.py @@ -14,6 +14,10 @@ def GetRootAsMetadata(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def MetadataBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # Metadata def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/MirrorPadOptions.py b/utensor_cgen/third_party/tflite/MirrorPadOptions.py index 254ae217..fa408556 100644 --- a/utensor_cgen/third_party/tflite/MirrorPadOptions.py +++ b/utensor_cgen/third_party/tflite/MirrorPadOptions.py @@ -14,6 +14,10 @@ def GetRootAsMirrorPadOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def MirrorPadOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # MirrorPadOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/Model.py b/utensor_cgen/third_party/tflite/Model.py index cc9991ba..e9a57966 100644 --- a/utensor_cgen/third_party/tflite/Model.py +++ b/utensor_cgen/third_party/tflite/Model.py @@ -14,6 +14,10 @@ def GetRootAsModel(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ModelBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # Model def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/MulOptions.py b/utensor_cgen/third_party/tflite/MulOptions.py index 55b9506f..5b53c4bb 100644 --- a/utensor_cgen/third_party/tflite/MulOptions.py +++ b/utensor_cgen/third_party/tflite/MulOptions.py @@ -14,6 +14,10 @@ def GetRootAsMulOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def MulOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # MulOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/NegOptions.py b/utensor_cgen/third_party/tflite/NegOptions.py index 05d55c26..9cf217cc 100644 --- a/utensor_cgen/third_party/tflite/NegOptions.py +++ b/utensor_cgen/third_party/tflite/NegOptions.py @@ -14,6 +14,10 @@ def GetRootAsNegOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def NegOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # NegOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/NonMaxSuppressionV4Options.py b/utensor_cgen/third_party/tflite/NonMaxSuppressionV4Options.py index 6ad10a2e..4764bc00 100644 --- a/utensor_cgen/third_party/tflite/NonMaxSuppressionV4Options.py +++ b/utensor_cgen/third_party/tflite/NonMaxSuppressionV4Options.py @@ -14,6 +14,10 @@ def GetRootAsNonMaxSuppressionV4Options(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def NonMaxSuppressionV4OptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # NonMaxSuppressionV4Options def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/NonMaxSuppressionV5Options.py b/utensor_cgen/third_party/tflite/NonMaxSuppressionV5Options.py index 99cbdbbf..ce84c863 100644 --- a/utensor_cgen/third_party/tflite/NonMaxSuppressionV5Options.py +++ b/utensor_cgen/third_party/tflite/NonMaxSuppressionV5Options.py @@ -14,6 +14,10 @@ def GetRootAsNonMaxSuppressionV5Options(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def NonMaxSuppressionV5OptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # NonMaxSuppressionV5Options def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/NotEqualOptions.py b/utensor_cgen/third_party/tflite/NotEqualOptions.py index 4c511e93..b99152df 100644 --- a/utensor_cgen/third_party/tflite/NotEqualOptions.py +++ b/utensor_cgen/third_party/tflite/NotEqualOptions.py @@ -14,6 +14,10 @@ def GetRootAsNotEqualOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def NotEqualOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # NotEqualOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/OneHotOptions.py b/utensor_cgen/third_party/tflite/OneHotOptions.py index 793a3e75..7bc9ba36 100644 --- a/utensor_cgen/third_party/tflite/OneHotOptions.py +++ b/utensor_cgen/third_party/tflite/OneHotOptions.py @@ -14,6 +14,10 @@ def GetRootAsOneHotOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def OneHotOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # OneHotOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/Operator.py b/utensor_cgen/third_party/tflite/Operator.py index cbae3dab..f10fdf4f 100644 --- a/utensor_cgen/third_party/tflite/Operator.py +++ b/utensor_cgen/third_party/tflite/Operator.py @@ -14,6 +14,10 @@ def GetRootAsOperator(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def OperatorBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # Operator def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/OperatorCode.py b/utensor_cgen/third_party/tflite/OperatorCode.py index dd525f53..9d87429a 100644 --- a/utensor_cgen/third_party/tflite/OperatorCode.py +++ b/utensor_cgen/third_party/tflite/OperatorCode.py @@ -14,6 +14,10 @@ def GetRootAsOperatorCode(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def OperatorCodeBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # OperatorCode def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/PackOptions.py b/utensor_cgen/third_party/tflite/PackOptions.py index 6a8ee2bb..2d590c52 100644 --- a/utensor_cgen/third_party/tflite/PackOptions.py +++ b/utensor_cgen/third_party/tflite/PackOptions.py @@ -14,6 +14,10 @@ def GetRootAsPackOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def PackOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # PackOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/PadOptions.py b/utensor_cgen/third_party/tflite/PadOptions.py index d0833c68..58d33e54 100644 --- a/utensor_cgen/third_party/tflite/PadOptions.py +++ b/utensor_cgen/third_party/tflite/PadOptions.py @@ -14,6 +14,10 @@ def GetRootAsPadOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def PadOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # PadOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/PadV2Options.py b/utensor_cgen/third_party/tflite/PadV2Options.py index 5ea0d70c..2b81bdd5 100644 --- a/utensor_cgen/third_party/tflite/PadV2Options.py +++ b/utensor_cgen/third_party/tflite/PadV2Options.py @@ -14,6 +14,10 @@ def GetRootAsPadV2Options(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def PadV2OptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # PadV2Options def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/Pool2DOptions.py b/utensor_cgen/third_party/tflite/Pool2DOptions.py index b8b9f178..031629bb 100644 --- a/utensor_cgen/third_party/tflite/Pool2DOptions.py +++ b/utensor_cgen/third_party/tflite/Pool2DOptions.py @@ -14,6 +14,10 @@ def GetRootAsPool2DOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def Pool2DOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # Pool2DOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/PowOptions.py b/utensor_cgen/third_party/tflite/PowOptions.py index 666ca488..b9c9f848 100644 --- a/utensor_cgen/third_party/tflite/PowOptions.py +++ b/utensor_cgen/third_party/tflite/PowOptions.py @@ -14,6 +14,10 @@ def GetRootAsPowOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def PowOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # PowOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/QuantizationParameters.py b/utensor_cgen/third_party/tflite/QuantizationParameters.py index fcd686cf..66ec8ac2 100644 --- a/utensor_cgen/third_party/tflite/QuantizationParameters.py +++ b/utensor_cgen/third_party/tflite/QuantizationParameters.py @@ -14,6 +14,10 @@ def GetRootAsQuantizationParameters(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def QuantizationParametersBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # QuantizationParameters def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/QuantizeOptions.py b/utensor_cgen/third_party/tflite/QuantizeOptions.py index 28af8cc9..12135988 100644 --- a/utensor_cgen/third_party/tflite/QuantizeOptions.py +++ b/utensor_cgen/third_party/tflite/QuantizeOptions.py @@ -14,6 +14,10 @@ def GetRootAsQuantizeOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def QuantizeOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # QuantizeOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/RNNOptions.py b/utensor_cgen/third_party/tflite/RNNOptions.py index 3cfdb6af..9b493386 100644 --- a/utensor_cgen/third_party/tflite/RNNOptions.py +++ b/utensor_cgen/third_party/tflite/RNNOptions.py @@ -14,6 +14,10 @@ def GetRootAsRNNOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def RNNOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # RNNOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/RangeOptions.py b/utensor_cgen/third_party/tflite/RangeOptions.py index cb705b57..dfb3b6b2 100644 --- a/utensor_cgen/third_party/tflite/RangeOptions.py +++ b/utensor_cgen/third_party/tflite/RangeOptions.py @@ -14,6 +14,10 @@ def GetRootAsRangeOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def RangeOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # RangeOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/RankOptions.py b/utensor_cgen/third_party/tflite/RankOptions.py index 4e4a5ecd..808d0c0b 100644 --- a/utensor_cgen/third_party/tflite/RankOptions.py +++ b/utensor_cgen/third_party/tflite/RankOptions.py @@ -14,6 +14,10 @@ def GetRootAsRankOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def RankOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # RankOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ReducerOptions.py b/utensor_cgen/third_party/tflite/ReducerOptions.py index 93bbde17..bc9c399d 100644 --- a/utensor_cgen/third_party/tflite/ReducerOptions.py +++ b/utensor_cgen/third_party/tflite/ReducerOptions.py @@ -14,6 +14,10 @@ def GetRootAsReducerOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ReducerOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ReducerOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ReshapeOptions.py b/utensor_cgen/third_party/tflite/ReshapeOptions.py index 157d45d9..d942ec5d 100644 --- a/utensor_cgen/third_party/tflite/ReshapeOptions.py +++ b/utensor_cgen/third_party/tflite/ReshapeOptions.py @@ -14,6 +14,10 @@ def GetRootAsReshapeOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ReshapeOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ReshapeOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ResizeBilinearOptions.py b/utensor_cgen/third_party/tflite/ResizeBilinearOptions.py index 0d1f9624..cbc7f73e 100644 --- a/utensor_cgen/third_party/tflite/ResizeBilinearOptions.py +++ b/utensor_cgen/third_party/tflite/ResizeBilinearOptions.py @@ -14,6 +14,10 @@ def GetRootAsResizeBilinearOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ResizeBilinearOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ResizeBilinearOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ResizeNearestNeighborOptions.py b/utensor_cgen/third_party/tflite/ResizeNearestNeighborOptions.py index 4b166e95..38e24a0a 100644 --- a/utensor_cgen/third_party/tflite/ResizeNearestNeighborOptions.py +++ b/utensor_cgen/third_party/tflite/ResizeNearestNeighborOptions.py @@ -14,6 +14,10 @@ def GetRootAsResizeNearestNeighborOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ResizeNearestNeighborOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ResizeNearestNeighborOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ReverseSequenceOptions.py b/utensor_cgen/third_party/tflite/ReverseSequenceOptions.py index cbaf96db..525c5980 100644 --- a/utensor_cgen/third_party/tflite/ReverseSequenceOptions.py +++ b/utensor_cgen/third_party/tflite/ReverseSequenceOptions.py @@ -14,6 +14,10 @@ def GetRootAsReverseSequenceOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ReverseSequenceOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ReverseSequenceOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ReverseV2Options.py b/utensor_cgen/third_party/tflite/ReverseV2Options.py index dbac9362..3168fdc8 100644 --- a/utensor_cgen/third_party/tflite/ReverseV2Options.py +++ b/utensor_cgen/third_party/tflite/ReverseV2Options.py @@ -14,6 +14,10 @@ def GetRootAsReverseV2Options(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ReverseV2OptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ReverseV2Options def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SVDFOptions.py b/utensor_cgen/third_party/tflite/SVDFOptions.py index 6f391db1..ff1d6727 100644 --- a/utensor_cgen/third_party/tflite/SVDFOptions.py +++ b/utensor_cgen/third_party/tflite/SVDFOptions.py @@ -14,6 +14,10 @@ def GetRootAsSVDFOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SVDFOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SVDFOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SelectOptions.py b/utensor_cgen/third_party/tflite/SelectOptions.py index d67daf36..d0f158da 100644 --- a/utensor_cgen/third_party/tflite/SelectOptions.py +++ b/utensor_cgen/third_party/tflite/SelectOptions.py @@ -14,6 +14,10 @@ def GetRootAsSelectOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SelectOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SelectOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SequenceRNNOptions.py b/utensor_cgen/third_party/tflite/SequenceRNNOptions.py index 74a4954a..701cc80f 100644 --- a/utensor_cgen/third_party/tflite/SequenceRNNOptions.py +++ b/utensor_cgen/third_party/tflite/SequenceRNNOptions.py @@ -14,6 +14,10 @@ def GetRootAsSequenceRNNOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SequenceRNNOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SequenceRNNOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ShapeOptions.py b/utensor_cgen/third_party/tflite/ShapeOptions.py index 2d24c05f..fa8256b8 100644 --- a/utensor_cgen/third_party/tflite/ShapeOptions.py +++ b/utensor_cgen/third_party/tflite/ShapeOptions.py @@ -14,6 +14,10 @@ def GetRootAsShapeOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ShapeOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ShapeOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SkipGramOptions.py b/utensor_cgen/third_party/tflite/SkipGramOptions.py index 0e8bdc1d..5657db54 100644 --- a/utensor_cgen/third_party/tflite/SkipGramOptions.py +++ b/utensor_cgen/third_party/tflite/SkipGramOptions.py @@ -14,6 +14,10 @@ def GetRootAsSkipGramOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SkipGramOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SkipGramOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SliceOptions.py b/utensor_cgen/third_party/tflite/SliceOptions.py index 4b41568d..fbc01a9d 100644 --- a/utensor_cgen/third_party/tflite/SliceOptions.py +++ b/utensor_cgen/third_party/tflite/SliceOptions.py @@ -14,6 +14,10 @@ def GetRootAsSliceOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SliceOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SliceOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SoftmaxOptions.py b/utensor_cgen/third_party/tflite/SoftmaxOptions.py index a7168534..b5304f44 100644 --- a/utensor_cgen/third_party/tflite/SoftmaxOptions.py +++ b/utensor_cgen/third_party/tflite/SoftmaxOptions.py @@ -14,6 +14,10 @@ def GetRootAsSoftmaxOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SoftmaxOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SoftmaxOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SpaceToBatchNDOptions.py b/utensor_cgen/third_party/tflite/SpaceToBatchNDOptions.py index b61ef96f..44fc19f0 100644 --- a/utensor_cgen/third_party/tflite/SpaceToBatchNDOptions.py +++ b/utensor_cgen/third_party/tflite/SpaceToBatchNDOptions.py @@ -14,6 +14,10 @@ def GetRootAsSpaceToBatchNDOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SpaceToBatchNDOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SpaceToBatchNDOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SpaceToDepthOptions.py b/utensor_cgen/third_party/tflite/SpaceToDepthOptions.py index d571174a..32c05480 100644 --- a/utensor_cgen/third_party/tflite/SpaceToDepthOptions.py +++ b/utensor_cgen/third_party/tflite/SpaceToDepthOptions.py @@ -14,6 +14,10 @@ def GetRootAsSpaceToDepthOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SpaceToDepthOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SpaceToDepthOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SparseToDenseOptions.py b/utensor_cgen/third_party/tflite/SparseToDenseOptions.py index 826eee08..3653a320 100644 --- a/utensor_cgen/third_party/tflite/SparseToDenseOptions.py +++ b/utensor_cgen/third_party/tflite/SparseToDenseOptions.py @@ -14,6 +14,10 @@ def GetRootAsSparseToDenseOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SparseToDenseOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SparseToDenseOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SplitOptions.py b/utensor_cgen/third_party/tflite/SplitOptions.py index 3207525b..5f2bbcf7 100644 --- a/utensor_cgen/third_party/tflite/SplitOptions.py +++ b/utensor_cgen/third_party/tflite/SplitOptions.py @@ -14,6 +14,10 @@ def GetRootAsSplitOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SplitOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SplitOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SplitVOptions.py b/utensor_cgen/third_party/tflite/SplitVOptions.py index 418959de..bceaf9ab 100644 --- a/utensor_cgen/third_party/tflite/SplitVOptions.py +++ b/utensor_cgen/third_party/tflite/SplitVOptions.py @@ -14,6 +14,10 @@ def GetRootAsSplitVOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SplitVOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SplitVOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SquareOptions.py b/utensor_cgen/third_party/tflite/SquareOptions.py index 56633f6a..3a3efabd 100644 --- a/utensor_cgen/third_party/tflite/SquareOptions.py +++ b/utensor_cgen/third_party/tflite/SquareOptions.py @@ -14,6 +14,10 @@ def GetRootAsSquareOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SquareOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SquareOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SquaredDifferenceOptions.py b/utensor_cgen/third_party/tflite/SquaredDifferenceOptions.py index 906855d1..90b53260 100644 --- a/utensor_cgen/third_party/tflite/SquaredDifferenceOptions.py +++ b/utensor_cgen/third_party/tflite/SquaredDifferenceOptions.py @@ -14,6 +14,10 @@ def GetRootAsSquaredDifferenceOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SquaredDifferenceOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SquaredDifferenceOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SqueezeOptions.py b/utensor_cgen/third_party/tflite/SqueezeOptions.py index 25b294dc..443ca9b3 100644 --- a/utensor_cgen/third_party/tflite/SqueezeOptions.py +++ b/utensor_cgen/third_party/tflite/SqueezeOptions.py @@ -14,6 +14,10 @@ def GetRootAsSqueezeOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SqueezeOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SqueezeOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/StridedSliceOptions.py b/utensor_cgen/third_party/tflite/StridedSliceOptions.py index 3bbb36b8..65edbe71 100644 --- a/utensor_cgen/third_party/tflite/StridedSliceOptions.py +++ b/utensor_cgen/third_party/tflite/StridedSliceOptions.py @@ -14,6 +14,10 @@ def GetRootAsStridedSliceOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def StridedSliceOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # StridedSliceOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SubGraph.py b/utensor_cgen/third_party/tflite/SubGraph.py index eaa42fac..7e12f246 100644 --- a/utensor_cgen/third_party/tflite/SubGraph.py +++ b/utensor_cgen/third_party/tflite/SubGraph.py @@ -14,6 +14,10 @@ def GetRootAsSubGraph(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SubGraphBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SubGraph def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/SubOptions.py b/utensor_cgen/third_party/tflite/SubOptions.py index eccd7aba..a0d84e74 100644 --- a/utensor_cgen/third_party/tflite/SubOptions.py +++ b/utensor_cgen/third_party/tflite/SubOptions.py @@ -14,6 +14,10 @@ def GetRootAsSubOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def SubOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # SubOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/Tensor.py b/utensor_cgen/third_party/tflite/Tensor.py index 9b5b8f87..12cccf6e 100644 --- a/utensor_cgen/third_party/tflite/Tensor.py +++ b/utensor_cgen/third_party/tflite/Tensor.py @@ -14,6 +14,10 @@ def GetRootAsTensor(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def TensorBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # Tensor def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/TileOptions.py b/utensor_cgen/third_party/tflite/TileOptions.py index ec8396dc..a17473ee 100644 --- a/utensor_cgen/third_party/tflite/TileOptions.py +++ b/utensor_cgen/third_party/tflite/TileOptions.py @@ -14,6 +14,10 @@ def GetRootAsTileOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def TileOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # TileOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/TopKV2Options.py b/utensor_cgen/third_party/tflite/TopKV2Options.py index ccd51033..5f65915b 100644 --- a/utensor_cgen/third_party/tflite/TopKV2Options.py +++ b/utensor_cgen/third_party/tflite/TopKV2Options.py @@ -14,6 +14,10 @@ def GetRootAsTopKV2Options(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def TopKV2OptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # TopKV2Options def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/TransposeConvOptions.py b/utensor_cgen/third_party/tflite/TransposeConvOptions.py index 423571c8..83a71b8b 100644 --- a/utensor_cgen/third_party/tflite/TransposeConvOptions.py +++ b/utensor_cgen/third_party/tflite/TransposeConvOptions.py @@ -14,6 +14,10 @@ def GetRootAsTransposeConvOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def TransposeConvOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # TransposeConvOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/TransposeOptions.py b/utensor_cgen/third_party/tflite/TransposeOptions.py index 42c596d9..64b04425 100644 --- a/utensor_cgen/third_party/tflite/TransposeOptions.py +++ b/utensor_cgen/third_party/tflite/TransposeOptions.py @@ -14,6 +14,10 @@ def GetRootAsTransposeOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def TransposeOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # TransposeOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/UnidirectionalSequenceLSTMOptions.py b/utensor_cgen/third_party/tflite/UnidirectionalSequenceLSTMOptions.py index 1b0c112c..610edaae 100644 --- a/utensor_cgen/third_party/tflite/UnidirectionalSequenceLSTMOptions.py +++ b/utensor_cgen/third_party/tflite/UnidirectionalSequenceLSTMOptions.py @@ -14,6 +14,10 @@ def GetRootAsUnidirectionalSequenceLSTMOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def UnidirectionalSequenceLSTMOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # UnidirectionalSequenceLSTMOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/UniqueOptions.py b/utensor_cgen/third_party/tflite/UniqueOptions.py index 841c6977..40bd4f38 100644 --- a/utensor_cgen/third_party/tflite/UniqueOptions.py +++ b/utensor_cgen/third_party/tflite/UniqueOptions.py @@ -14,6 +14,10 @@ def GetRootAsUniqueOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def UniqueOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # UniqueOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/UnpackOptions.py b/utensor_cgen/third_party/tflite/UnpackOptions.py index eed40193..f90fbe30 100644 --- a/utensor_cgen/third_party/tflite/UnpackOptions.py +++ b/utensor_cgen/third_party/tflite/UnpackOptions.py @@ -14,6 +14,10 @@ def GetRootAsUnpackOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def UnpackOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # UnpackOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/WhereOptions.py b/utensor_cgen/third_party/tflite/WhereOptions.py index ab69f6aa..544b0028 100644 --- a/utensor_cgen/third_party/tflite/WhereOptions.py +++ b/utensor_cgen/third_party/tflite/WhereOptions.py @@ -14,6 +14,10 @@ def GetRootAsWhereOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def WhereOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # WhereOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/WhileOptions.py b/utensor_cgen/third_party/tflite/WhileOptions.py index 7d5a6dfa..9aa52a43 100644 --- a/utensor_cgen/third_party/tflite/WhileOptions.py +++ b/utensor_cgen/third_party/tflite/WhileOptions.py @@ -14,6 +14,10 @@ def GetRootAsWhileOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def WhileOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # WhileOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/third_party/tflite/ZerosLikeOptions.py b/utensor_cgen/third_party/tflite/ZerosLikeOptions.py index e6aa9639..5ed55e8a 100644 --- a/utensor_cgen/third_party/tflite/ZerosLikeOptions.py +++ b/utensor_cgen/third_party/tflite/ZerosLikeOptions.py @@ -14,6 +14,10 @@ def GetRootAsZerosLikeOptions(cls, buf, offset): x.Init(buf, n + offset) return x + @classmethod + def ZerosLikeOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False): + return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed) + # ZerosLikeOptions def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 597975b0..6759750c 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -250,7 +250,7 @@ def add_Op(self, op_info): tflite.Operator.OperatorAddInputs(self.fbuilder, op_inputs) tflite.Operator.OperatorAddOutputs(self.fbuilder, op_outputs) tflite.Operator.OperatorAddBuiltinOptionsType(self.fbuilder, builtin_opt_type) - #tflite.Operator.OperatorAddBuiltinOptions(self.fbuilder, builtin_opt) + tflite.Operator.OperatorAddBuiltinOptions(self.fbuilder, builtin_opt) op = tflite.Operator.OperatorEnd(self.fbuilder) return op #to be added into SubGraphStartOperatorsVector From 56bbd266d19712f589ef0b738918c21feccca83f Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 28 Nov 2019 18:53:29 -0800 Subject: [PATCH 021/117] input1 tensor failed to print after invoke --- tests/tflm/tflite_export/conftest.py | 26 +++++++++++---------- tests/tflm/tflite_export/test_write.py | 10 ++++---- utensor_cgen/transformer/tflite_exporter.py | 13 +++++++++-- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/tests/tflm/tflite_export/conftest.py b/tests/tflm/tflite_export/conftest.py index e798b3f4..adcd52bd 100644 --- a/tests/tflm/tflite_export/conftest.py +++ b/tests/tflm/tflite_export/conftest.py @@ -18,13 +18,14 @@ def simple_tflm_graph(): input_tensors = [], output_tensors = [] ) - weight_op.op_attr["value"] = np.array([1,2,3,4], dtype=np.int8) - weight_op.op_attr["shape"] = [4,1] + #weight_op.op_attr["value"] = np.array([1,2,3,4], dtype=np.int8) + weight_op.op_attr["value"] = np.array([10,20,30,40], dtype=np.float32) + weight_op.op_attr["shape"] = [1,4] weight = TensorInfo( name = "weight", op_name = "weight_const", - dtype = np.dtype("int8"), + dtype = np.dtype("float32"), shape = weight_op.op_attr["shape"], ugraph = ugraph ) @@ -39,14 +40,14 @@ def simple_tflm_graph(): input_tensors = [], output_tensors = [] ) - mock_input_op.op_attr["value"] = np.array([[1.0],[2.0],[3.0],[4.0]], dtype=np.float32) - mock_input_op.op_attr["shape"] = [1,4] + mock_input_op.op_attr["value"] = np.array([[2],[4],[6],[8]], dtype=np.float32) + mock_input_op.op_attr["shape"] = [4,1] input1 = TensorInfo( - name = "input", + name = "input1", op_name = "mock_input_const", dtype = mock_input_op.op_attr["value"].dtype, - shape = [1, 4], + shape = mock_input_op.op_attr["shape"], ugraph = ugraph ) @@ -61,13 +62,14 @@ def simple_tflm_graph(): input_tensors = [], output_tensors = [] ) - bias_op.op_attr["value"] = np.array([1], dtype=np.int8) + #bias_op.op_attr["value"] = np.array([1], dtype=np.int8) + bias_op.op_attr["value"] = np.array([7], dtype=np.float32) bias_op.op_attr["shape"] = [1] bias = TensorInfo( name = "bias", op_name = "bias_const", - dtype = np.dtype("int8"), + dtype = np.dtype("float32"), shape = bias_op.op_attr["shape"], ugraph = ugraph ) @@ -87,8 +89,8 @@ def simple_tflm_graph(): output = TensorInfo( name = "output", op_name = "FC1", - dtype = np.dtype("float"), - shape = [1, 1], + dtype = np.dtype("float32"), + shape = [1], ugraph = ugraph ) @@ -103,4 +105,4 @@ def simple_tflm_graph(): #ugraph = prune_graph(ugraph) #return: ugraph, input tensors, output tensors - return [ugraph, [], ["output"]] + return [ugraph, [], ["input1", "weight", "bias", "output"]] diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index efc039a6..4efe9f78 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -86,7 +86,7 @@ def test_tflite_fb_write(hybrid_quant_output): ugraph = exporter.transform(sample_ugraph) model_content = exporter.output() - print_tflite_graph(model_content) + #print_tflite_graph(model_content) # referece_model_content = open('/Users/neitan01/Documents/tflm/sinExample/sine_model.tflite', "rb").read() # print_tflite_graph(referece_model_content) @@ -94,11 +94,13 @@ def test_tflite_fb_write(hybrid_quant_output): open("tflm_test_model.tflite", "wb").write(model_content) test_model = tf.lite.Interpreter('tflm_test_model.tflite') test_model.allocate_tensors() - test_model_output_index = test_model.tensor(test_model.get_output_details()[0]["index"]) test_model.invoke() - output_content = test_model.get_tensor(test_model_output_index)[0] - print(output_content) + print(test_model.get_tensor_details()) + print("1 :", test_model.get_tensor(test_model.get_output_details()[0]["index"])) + print("2 :", test_model.get_tensor(test_model.get_output_details()[1]["index"])) + print("3 :", test_model.get_tensor(test_model.get_output_details()[2]["index"])) + print("out :", test_model.get_tensor(test_model.get_output_details()[3]["index"])) test_pass = True assert test_pass, 'error message here' diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 6759750c..a0a0373b 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -38,6 +38,15 @@ def get_fullyconnected_builtin_option(fbuilder, op_info): return obj, BuiltinOptions.FullyConnectedOptions +def tensor_type_lookup(numpy_dtype): + TensorType = tflite.TensorType.TensorType + lookup_map = dict() + lookup_map[np.dtype('float32')] = TensorType.FLOAT32 + lookup_map[np.dtype('int8')] = TensorType.INT8 + + return lookup_map[numpy_dtype] + + class FlatbufferOpManager: op_list = list() code_name_lookup = {v: k for k, v in BuiltinOperator.__dict__.items()} @@ -193,7 +202,7 @@ def __create_static_tensor(self, ugraph): #tensor object tflite.Tensor.TensorStart(self.fbuilder) tflite.Tensor.TensorAddShape(self.fbuilder, shape_vec) - tflite.Tensor.TensorAddType(self.fbuilder, TensorType.INT8) #TODO: a conversion class here, out_dtype + tflite.Tensor.TensorAddType(self.fbuilder, tensor_type_lookup(out_dtype)) if export_tensor_name: tflite.Tensor.TensorAddName(self.fbuilder, tensor_name) tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) @@ -306,7 +315,7 @@ def __create_variable_tensors(self, ugraph): tflite.Tensor.TensorStart(self.fbuilder) tflite.Tensor.TensorAddShape(self.fbuilder, shape_vec) #tflite.Tensor.TensorAddType(self.fbuilder, TensorType.INT8) #TODO: tensor type conversion here - tflite.Tensor.TensorAddType(self.fbuilder, TensorType.FLOAT32) + tflite.Tensor.TensorAddType(self.fbuilder, tensor_type_lookup(tensor_info.dtype)) tflite.Tensor.TensorAddName(self.fbuilder, tensor_name) #tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) tflite.Tensor.TensorAddIsVariable(self.fbuilder, True) From acef9d0e4a330002e7dc62ac01b3d5a3fb7bffd0 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 28 Nov 2019 21:58:33 -0800 Subject: [PATCH 022/117] - a more comprehensive test graph - add op the first tensor still fails --- tests/tflm/tflite_export/conftest.py | 86 +++++++++++++++------ tests/tflm/tflite_export/test_write.py | 16 ++-- utensor_cgen/transformer/tflite_exporter.py | 12 ++- 3 files changed, 86 insertions(+), 28 deletions(-) diff --git a/tests/tflm/tflite_export/conftest.py b/tests/tflm/tflite_export/conftest.py index adcd52bd..d5d11dac 100644 --- a/tests/tflm/tflite_export/conftest.py +++ b/tests/tflm/tflite_export/conftest.py @@ -9,8 +9,8 @@ def simple_tflm_graph(): ugraph = uTensorGraph() - weight_op = OperationInfo( - name = "weight_const", + mock_input_op0 = OperationInfo( + name = "mock_input_const0", op_type = "Const", backend = "tensorflow", ugraph = ugraph, @@ -18,21 +18,21 @@ def simple_tflm_graph(): input_tensors = [], output_tensors = [] ) - #weight_op.op_attr["value"] = np.array([1,2,3,4], dtype=np.int8) - weight_op.op_attr["value"] = np.array([10,20,30,40], dtype=np.float32) - weight_op.op_attr["shape"] = [1,4] - - weight = TensorInfo( - name = "weight", - op_name = "weight_const", - dtype = np.dtype("float32"), - shape = weight_op.op_attr["shape"], + mock_input_op0.op_attr["value"] = np.array([[2],[4],[6],[8]], dtype=np.float32) + mock_input_op0.op_attr["shape"] = [4,1] + + input0 = TensorInfo( + name = "input0", + op_name = "mock_input_const0", + dtype = mock_input_op0.op_attr["value"].dtype, + shape = mock_input_op0.op_attr["shape"], ugraph = ugraph ) - weight_op.output_tensors = [weight] - mock_input_op = OperationInfo( - name = "mock_input_const", + mock_input_op0.output_tensors = [input0] + + mock_input1_op = OperationInfo( + name = "mock_input_const1", op_type = "Const", backend = "tensorflow", ugraph = ugraph, @@ -40,18 +40,60 @@ def simple_tflm_graph(): input_tensors = [], output_tensors = [] ) - mock_input_op.op_attr["value"] = np.array([[2],[4],[6],[8]], dtype=np.float32) - mock_input_op.op_attr["shape"] = [4,1] + mock_input1_op.op_attr["value"] = np.array([[2],[4],[6],[8]], dtype=np.float32) + mock_input1_op.op_attr["shape"] = [4,1] input1 = TensorInfo( name = "input1", - op_name = "mock_input_const", - dtype = mock_input_op.op_attr["value"].dtype, - shape = mock_input_op.op_attr["shape"], + op_name = "mock_input_const1", + dtype = mock_input1_op.op_attr["value"].dtype, + shape = mock_input1_op.op_attr["shape"], + ugraph = ugraph + ) + + mock_input1_op.output_tensors = [input1] + + add_output = TensorInfo( + name = "add_out", + op_name = "add0", + dtype = mock_input_op0.op_attr["value"].dtype, + shape = mock_input_op0.op_attr["shape"], ugraph = ugraph ) - mock_input_op.output_tensors = [input1] + add_op = OperationInfo( + name = "add0", + op_type = "ADD", + backend = "tensorflow", + ugraph = ugraph, + op_attr = dict(), + input_tensors = [input0, input1], + output_tensors = [add_output] + ) + + ugraph.ops_info["ADD0"] = add_op + + weight_op = OperationInfo( + name = "weight_const", + op_type = "Const", + backend = "tensorflow", + ugraph = ugraph, + op_attr = dict(), + input_tensors = [], + output_tensors = [] + ) + #weight_op.op_attr["value"] = np.array([1,2,3,4], dtype=np.int8) + weight_op.op_attr["value"] = np.array([10,20,30,40], dtype=np.float32) + weight_op.op_attr["shape"] = [1,4] + + weight = TensorInfo( + name = "weight", + op_name = "weight_const", + dtype = np.dtype("float32"), + shape = weight_op.op_attr["shape"], + ugraph = ugraph + ) + weight_op.output_tensors = [weight] bias_op = OperationInfo( name = "bias_const", @@ -94,7 +136,7 @@ def simple_tflm_graph(): ugraph = ugraph ) - fc1_op.input_tensors = [input1, weight, bias] + fc1_op.input_tensors = [add_output, weight, bias] fc1_op.output_tensors = [output] ugraph.ops_info["FC1"] = fc1_op @@ -105,4 +147,4 @@ def simple_tflm_graph(): #ugraph = prune_graph(ugraph) #return: ugraph, input tensors, output tensors - return [ugraph, [], ["input1", "weight", "bias", "output"]] + return [ugraph, ["input0", "input1"], ["weight", "bias", "output"]] diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index 4efe9f78..480cc5de 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -86,7 +86,7 @@ def test_tflite_fb_write(hybrid_quant_output): ugraph = exporter.transform(sample_ugraph) model_content = exporter.output() - #print_tflite_graph(model_content) + print_tflite_graph(model_content) # referece_model_content = open('/Users/neitan01/Documents/tflm/sinExample/sine_model.tflite', "rb").read() # print_tflite_graph(referece_model_content) @@ -96,11 +96,17 @@ def test_tflite_fb_write(hybrid_quant_output): test_model.allocate_tensors() test_model.invoke() + print("0 :", test_model.get_tensor(0)) + print("1 :", test_model.get_tensor(1)) + print("2 :", test_model.get_tensor(2)) + print("3 :", test_model.get_tensor(3)) + + print(test_model.get_tensor_details()) - print("1 :", test_model.get_tensor(test_model.get_output_details()[0]["index"])) - print("2 :", test_model.get_tensor(test_model.get_output_details()[1]["index"])) - print("3 :", test_model.get_tensor(test_model.get_output_details()[2]["index"])) - print("out :", test_model.get_tensor(test_model.get_output_details()[3]["index"])) + print("out0 :", test_model.get_tensor(test_model.get_output_details()[0]["index"])) + print("out1 :", test_model.get_tensor(test_model.get_output_details()[1]["index"])) + print("out2 :", test_model.get_tensor(test_model.get_output_details()[2]["index"])) + test_pass = True assert test_pass, 'error message here' diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index a0a0373b..664cb8b2 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -38,6 +38,15 @@ def get_fullyconnected_builtin_option(fbuilder, op_info): return obj, BuiltinOptions.FullyConnectedOptions +def get_add_builtin_option(fbuilder, op_info): + + tflite.AddOptions.AddOptionsStart(fbuilder) + #FIXME: node fusion and select an activation function here + tflite.AddOptions.AddOptionsAddFusedActivationFunction(fbuilder, ActivationFunctionType.NONE) + obj = tflite.AddOptions.AddOptionsEnd(fbuilder) + + return obj, BuiltinOptions.AddOptions + def tensor_type_lookup(numpy_dtype): TensorType = tflite.TensorType.TensorType lookup_map = dict() @@ -249,6 +258,7 @@ def add_Op(self, op_info): ##TODO: add op factory to deal with op options op_option_factory = dict() op_option_factory["FULLY_CONNECTED"] = get_fullyconnected_builtin_option + op_option_factory["ADD"] = get_add_builtin_option builtin_opt_func = op_option_factory[op_info.op_type] @@ -314,11 +324,11 @@ def __create_variable_tensors(self, ugraph): tflite.Tensor.TensorStart(self.fbuilder) tflite.Tensor.TensorAddShape(self.fbuilder, shape_vec) - #tflite.Tensor.TensorAddType(self.fbuilder, TensorType.INT8) #TODO: tensor type conversion here tflite.Tensor.TensorAddType(self.fbuilder, tensor_type_lookup(tensor_info.dtype)) tflite.Tensor.TensorAddName(self.fbuilder, tensor_name) #tflite.Tensor.TensorAddQuantization(self.fbuilder, q_param) tflite.Tensor.TensorAddIsVariable(self.fbuilder, True) + #tflite.Tensor.TensorAddIsVariable(self.fbuilder, False) #FIXME: TOCO outputs False here, no idea why self.tensor_index[tensor_info.name] = tflite.Tensor.TensorEnd(self.fbuilder) From 0e3c5f1b1346911cf3833f515b4faadbbad24131 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 28 Nov 2019 22:17:00 -0800 Subject: [PATCH 023/117] binding data to the first input tensor --- tests/tflm/tflite_export/test_write.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index 480cc5de..b905fb77 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -94,6 +94,8 @@ def test_tflite_fb_write(hybrid_quant_output): open("tflm_test_model.tflite", "wb").write(model_content) test_model = tf.lite.Interpreter('tflm_test_model.tflite') test_model.allocate_tensors() + input_data = np.array(np.ones([4,1]), dtype=np.float32) + test_model.set_tensor(test_model.get_input_details()[0]['index'], input_data) test_model.invoke() print("0 :", test_model.get_tensor(0)) From b16236b2ef1d09c9741e2251404a1409310efb09 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 28 Nov 2019 22:24:04 -0800 Subject: [PATCH 024/117] run test with "pytest -s tests/tflm" --- tests/tflm/tflite_export/test_write.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index b905fb77..c5930e71 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -110,5 +110,6 @@ def test_tflite_fb_write(hybrid_quant_output): print("out2 :", test_model.get_tensor(test_model.get_output_details()[2]["index"])) - test_pass = True - assert test_pass, 'error message here' + output = test_model.get_tensor(test_model.get_output_details()[2]["index"]) + + assert np.abs(output - 707) <= 0.0001, 'error is greater than 0.0001' From 3c60d92f706293b2672fcb0cd207ce042f2ccd9e Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 28 Nov 2019 23:02:47 -0800 Subject: [PATCH 025/117] clean up flatbuffers import --- tests/tflm/tflite_export/test_write.py | 3 +-- utensor_cgen/transformer/tflite_exporter.py | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/tflm/tflite_export/test_write.py b/tests/tflm/tflite_export/test_write.py index c5930e71..7fdaf3e2 100644 --- a/tests/tflm/tflite_export/test_write.py +++ b/tests/tflm/tflite_export/test_write.py @@ -5,9 +5,8 @@ from utensor_cgen.matcher import uTensorGraphMatcher from utensor_cgen.utils import prune_graph, topologic_order_graph from utensor_cgen.transformer import TFLiteExporter -import flatbuffers +import utensor_cgen.third_party.flatbuffers as flatbuffers import utensor_cgen.third_party.tflite as tflite -from utensor_cgen.third_party.tflite import * from utensor_cgen.third_party.tflite.BuiltinOperator import BuiltinOperator from utensor_cgen.third_party.tflite.Model import Model from utensor_cgen.third_party.tflite.BuiltinOptions import BuiltinOptions diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 664cb8b2..2d21b303 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -9,7 +9,6 @@ from copy import deepcopy from utensor_cgen.ir import OperationInfo, uTensorGraph -#import flatbuffers import utensor_cgen.third_party.flatbuffers as flatbuffers import utensor_cgen.third_party.tflite as tflite from utensor_cgen.third_party.tflite import * From 5c1bf6050a45074bb9b8ae97f7b7fe03d9a46cad Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 5 Dec 2019 17:02:40 -0800 Subject: [PATCH 026/117] added flatbuffers to setup.py --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 37d7a061..63849a6b 100644 --- a/setup.py +++ b/setup.py @@ -37,7 +37,8 @@ 'torch', 'torchvision', 'onnx-tf==1.2.1', - 'graphviz' + 'graphviz', + 'flatbuffers' ], extras_require={ 'dev': ['pytest'] From f4b87e5b1bf470a5a176c7b833f5e5e63ad0e514 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 12 Dec 2019 18:33:47 +0800 Subject: [PATCH 027/117] updated this branch to use the new ugraph-constructor --- tests/tflm/tflite_export/conftest.py | 265 ++++++++++---------- utensor_cgen/transformer/tflite_exporter.py | 46 +++- 2 files changed, 171 insertions(+), 140 deletions(-) diff --git a/tests/tflm/tflite_export/conftest.py b/tests/tflm/tflite_export/conftest.py index d5d11dac..dd5bc005 100644 --- a/tests/tflm/tflite_export/conftest.py +++ b/tests/tflm/tflite_export/conftest.py @@ -3,148 +3,137 @@ import tensorflow as tf from utensor_cgen.ir import TensorInfo, OperationInfo, uTensorGraph +from utensor_cgen.ir.converter import (AttrValueConverter, DataTypeConverter, + GenericTensorConverterMixin) from utensor_cgen.utils import prune_graph, topologic_order_graph - -@fixture(name='hybrid_quant_output') -def simple_tflm_graph(): - ugraph = uTensorGraph() - - mock_input_op0 = OperationInfo( - name = "mock_input_const0", - op_type = "Const", - backend = "tensorflow", - ugraph = ugraph, - op_attr = dict(), - input_tensors = [], - output_tensors = [] - ) - mock_input_op0.op_attr["value"] = np.array([[2],[4],[6],[8]], dtype=np.float32) - mock_input_op0.op_attr["shape"] = [4,1] - - input0 = TensorInfo( - name = "input0", - op_name = "mock_input_const0", - dtype = mock_input_op0.op_attr["value"].dtype, - shape = mock_input_op0.op_attr["shape"], - ugraph = ugraph - ) - - mock_input_op0.output_tensors = [input0] - - mock_input1_op = OperationInfo( - name = "mock_input_const1", - op_type = "Const", - backend = "tensorflow", - ugraph = ugraph, - op_attr = dict(), - input_tensors = [], - output_tensors = [] - ) - mock_input1_op.op_attr["value"] = np.array([[2],[4],[6],[8]], dtype=np.float32) - mock_input1_op.op_attr["shape"] = [4,1] - - input1 = TensorInfo( - name = "input1", - op_name = "mock_input_const1", - dtype = mock_input1_op.op_attr["value"].dtype, - shape = mock_input1_op.op_attr["shape"], - ugraph = ugraph - ) - - mock_input1_op.output_tensors = [input1] - - add_output = TensorInfo( - name = "add_out", - op_name = "add0", - dtype = mock_input_op0.op_attr["value"].dtype, - shape = mock_input_op0.op_attr["shape"], - ugraph = ugraph - ) - - add_op = OperationInfo( - name = "add0", - op_type = "ADD", - backend = "tensorflow", - ugraph = ugraph, - op_attr = dict(), - input_tensors = [input0, input1], - output_tensors = [add_output] +from utensor_cgen.backend.operators import OperatorFactory, _Operator +from utensor_cgen.matcher import OpEqualityDelegate, _morphism + + +@OperatorFactory.register +@OpEqualityDelegate.is_associative( + permutations=((0, 1), (1, 0)) +) +class _TFLM_AddOperator(_Operator): + + op_type = "TFLM_ADD" # tf op type + + def __init__(self, op_info, **kwargs): + _Operator.__init__(self) + inputs = [tensor_info.name for tensor_info in op_info.input_tensors] + output = op_info.output_tensors[0].name + tf_dtype = op_info.input_tensors[0].dtype + + @classmethod + def build_op_info(cls, ugraph, name, tensor_x, tensor_y, **kwargs): + # broadcast the shape and promote types + dummy_x = np.empty(tensor_x.shape) + dummy_y = np.empty(tensor_y.shape) + output_shape = np.broadcast(dummy_x, dummy_y).shape + output_dtype = np.promote_types(tensor_x.dtype, tensor_y.dtype) + return OperationInfo( + name=name, + input_tensors=[tensor_x, tensor_y], + output_tensors=[ + TensorInfo( + name='{}:0'.format(name), + op_name=name, + dtype=output_dtype, + shape=list(output_shape), + ugraph=ugraph + ) + ], + op_type=cls.op_type, + op_attr={ + 'T': AttrValueConverter.__utensor_generic_type__( + value_name='type', + value=DataTypeConverter.get_tf_value(output_dtype) + ) + }, + ugraph=ugraph, + backend=kwargs.get('backend', 'TFLM') ) - ugraph.ops_info["ADD0"] = add_op - weight_op = OperationInfo( - name = "weight_const", - op_type = "Const", - backend = "tensorflow", - ugraph = ugraph, - op_attr = dict(), - input_tensors = [], - output_tensors = [] +@OperatorFactory.register +class _TFLM_FULLY_CONNECTED_Operator(_Operator): + + op_type="TFLM_FULLY_CONNECTED" + + def __init__(self, op_info, **kwargs): + _Operator.__init__(self) + inputs = [tensor_info.name for tensor_info in op_info.input_tensors] + output = op_info.output_tensors[0].name + out_dtype = op_info.output_tensors[0].dtype + in_dtypes = [tensor_info.dtype for tensor_info in op_info.input_tensors] + #assert (op_info.input_tensors[0].shape[1] == None or op_info.input_tensors[0].shape[1] == 1) + + @classmethod + def build_op_info(cls, ugraph, name, tensor_x, tensor_w, tensor_b, **kwargs): + output_shape = [tensor_w.shape[0], tensor_x.shape[1]] + #output_dtype = np.promote_types(tensor_x.dtype, tensor_y.dtype) + output_dtype = tensor_x.dtype + return OperationInfo( + name=name, + input_tensors=[tensor_x, tensor_w, tensor_b], + output_tensors=[ + TensorInfo( + name='{}:0'.format(name), + op_name=name, + dtype=output_dtype, + shape=list(output_shape), + ugraph=ugraph + ) + ], + op_type=cls.op_type, + op_attr={ + 'T': AttrValueConverter.__utensor_generic_type__( + value_name='type', + value=DataTypeConverter.get_tf_value(output_dtype) + ) + }, + ugraph=ugraph, + backend=kwargs.get('backend', 'TFLM') ) - #weight_op.op_attr["value"] = np.array([1,2,3,4], dtype=np.int8) - weight_op.op_attr["value"] = np.array([10,20,30,40], dtype=np.float32) - weight_op.op_attr["shape"] = [1,4] - weight = TensorInfo( - name = "weight", - op_name = "weight_const", - dtype = np.dtype("float32"), - shape = weight_op.op_attr["shape"], - ugraph = ugraph - ) - weight_op.output_tensors = [weight] - - bias_op = OperationInfo( - name = "bias_const", - op_type = "Const", - backend = "tensorflow", - ugraph = ugraph, - op_attr = dict(), - input_tensors = [], - output_tensors = [] - ) - #bias_op.op_attr["value"] = np.array([1], dtype=np.int8) - bias_op.op_attr["value"] = np.array([7], dtype=np.float32) - bias_op.op_attr["shape"] = [1] - - bias = TensorInfo( - name = "bias", - op_name = "bias_const", - dtype = np.dtype("float32"), - shape = bias_op.op_attr["shape"], - ugraph = ugraph - ) - bias_op.output_tensors = [bias] - - - fc1_op = OperationInfo( - name = "FC1", - op_type = "FULLY_CONNECTED", - backend = "tensorflow", - ugraph = ugraph, - op_attr = dict(), - input_tensors = [], - output_tensors = [] - ) - - output = TensorInfo( - name = "output", - op_name = "FC1", - dtype = np.dtype("float32"), - shape = [1], - ugraph = ugraph - ) - - fc1_op.input_tensors = [add_output, weight, bias] - fc1_op.output_tensors = [output] - - ugraph.ops_info["FC1"] = fc1_op - ugraph.output_nodes = ["FC1"] - #ugraph.backend = "tensorflow" - - topologic_order_graph(ugraph) - #ugraph = prune_graph(ugraph) +@fixture(name='hybrid_quant_output') +def simple_tflm_graph(): + ugraph = uTensorGraph() - #return: ugraph, input tensors, output tensors - return [ugraph, ["input0", "input1"], ["weight", "bias", "output"]] + with ugraph.begin_construction(): + tensor_x0, = ugraph.add_op( + op_type='Const', + name='x0', + value=np.array([1, 1, 1, 1], dtype=np.float32)[:, np.newaxis] + ) + tensor_x1, = ugraph.add_op( + op_type='Const', + name='x1', + value=np.array([2, 4, 6, 8], dtype=np.float32)[:, np.newaxis] + ) + tensor_w, = ugraph.add_op( + op_type='Const', + name='w', + value=np.array([10, 20, 30, 40], dtype=np.float32)[np.newaxis, :] + ) + tensor_b, = ugraph.add_op( + op_type='Const', + name='b', + value=np.array([7], dtype=np.float32) + ) + + + tensor_addout, = ugraph.add_op( + tensor_x0, tensor_x1, + op_type='TFLM_ADD', + name='TFLM_ADD0' + ) + + tensor_out, = ugraph.add_op( + tensor_addout, tensor_w, tensor_b, + op_type='TFLM_FULLY_CONNECTED', + name='TFLM_FULLY_CONNECTED00', + is_output=True + ) + + return [ugraph, ["x0:0", "x1:0"], ["w:0", "b:0", tensor_out.name]] diff --git a/utensor_cgen/transformer/tflite_exporter.py b/utensor_cgen/transformer/tflite_exporter.py index 2d21b303..0277f010 100644 --- a/utensor_cgen/transformer/tflite_exporter.py +++ b/utensor_cgen/transformer/tflite_exporter.py @@ -23,6 +23,42 @@ __all__ = ["TFLiteExporter"] +def rename_ugraph_ops_(ugraph, name_old, name_new): + op = ugraph.ops_info.pop(name_old) + op.name = name_new + for out_tensor in op.output_tensors: + pass # renaming tensors + for out_node in op.output_nodes: + for in_tensor in out_node.input_tensors: + if in_tensor.op_name == name_old: + in_tensor.op_name = name_new + ugraph.ops_info[name_new] = op + for i, op_name in enumerate(ugraph.topo_order): + if op_name == name_old: + ugraph.topo_order[i] = name_new + break + for i, op_name in enumerate(ugraph.output_nodes): + if op_name == name_old: + ugraph.output_nodes[i] = name_new + break + + op.name = name_new + for out_tensor in op.output_tensors: + pass # renaming tensors + for out_node in op.output_nodes: + for in_tensor in out_node.input_tensors: + if in_tensor.op_name == name_old: + in_tensor.op_name = name_new + ugraph.ops_info[name_new] = op + for i, op_name in enumerate(ugraph.topo_order): + if op_name == name_old: + ugraph.topo_order[i] = name_new + break + for i, op_name in enumerate(ugraph.output_nodes): + if op_name == name_old: + ugraph.output_nodes[i] = name_new + break + def get_fullyconnected_builtin_option(fbuilder, op_info): weight_format = tflite.FullyConnectedOptionsWeightsFormat.FullyConnectedOptionsWeightsFormat.DEFAULT @@ -110,6 +146,7 @@ def __init__(self, input_tensors, output_tensors): def transform(self, ugraph): + self.__tflm_graph_legalize_(ugraph) # create tensor data buffer # create const tensors # update tensor_index @@ -184,7 +221,7 @@ def __create_static_tensor(self, ugraph): out_tensor_info.shape) #weight #value = op_info.op_attr['value'].value.np_array.flatten() #TODO: specify endianness here - value = op_info.op_attr['value'].flatten() #FIXME: deal with the proper attribute type here + value = op_info.op_attr['value'].value.np_array.flatten() #FIXME: deal with the proper attribute type here raw_data = value.tobytes() data_vec = self.__fb_vector(tflite.Buffer.BufferStartDataVector, raw_data) @@ -284,7 +321,7 @@ def __sym_quantization_info(self, op_info): """ #values = op_info.op_attr['value'].value.np_array.flatten() - values = op_info.op_attr['value'].flatten() #FIXME: deal with the proper attribute type here + values = op_info.op_attr['value'].value.np_array.flatten() #FIXME: deal with the proper attribute type here abs_max = np.absolute(values).max() #based on quantizted int8 dtype scale = 127 / abs_max @@ -366,5 +403,10 @@ def __fb_vector(self, vector_constructor, arr_list): return self.fbuilder.EndVector(num_items) + def __tflm_graph_legalize_(self, ugraph): + for _, op in ugraph.ops_info.items(): + assert op.op_type.startswith("TFLM_") or op.op_type in self.static_op_types + #TODO: strip the leading TFLM_ only + op.op_type = op.op_type.replace("TFLM_", '') # How to construct the quantization parameter for intermediate tensors? ## zero point and scale From ab6940ad54594f8d34de20164f85908ed21fd0df Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sat, 22 Feb 2020 16:15:30 +0800 Subject: [PATCH 028/117] - onnx frontend build ugraph done (missing shape and dtype) - onnx code generation --- utensor_cgen/backend/utensor/_graph_lower.py | 40 ++-- utensor_cgen/cli.py | 13 +- utensor_cgen/frontend/__init__.py | 2 + utensor_cgen/frontend/onnx.py | 233 ++++++++++++++++++- utensor_cgen/frontend/tensorflow.py | 15 +- utensor_cgen/ir/base.py | 2 +- utensor_cgen/legalizer/__init__.py | 2 + utensor_cgen/legalizer/onnx.py | 53 +++++ utensor_cgen/transformer/linear_reoder.py | 5 +- utensor_cgen/utils.py | 4 - 10 files changed, 321 insertions(+), 48 deletions(-) create mode 100644 utensor_cgen/legalizer/onnx.py diff --git a/utensor_cgen/backend/utensor/_graph_lower.py b/utensor_cgen/backend/utensor/_graph_lower.py index 8ba62a17..95f51b4e 100644 --- a/utensor_cgen/backend/utensor/_graph_lower.py +++ b/utensor_cgen/backend/utensor/_graph_lower.py @@ -1,22 +1,29 @@ +import logging from copy import deepcopy from utensor_cgen.backend.base import BackendPart from utensor_cgen.utils import class_property +logger = logging.getLogger(__name__) -class uTensorLegacyGraphLower(BackendPart): - +class uTensorGraphLowerBase(BackendPart): TARGET = 'utensor' - PART = 'legacy_graph_lower' + def handle_default(self, ugraph): + logger.warning('fall back to default graph lowering (do nothing)') + return ugraph + + def get_handler(self, ugraph): + handler = getattr(self, 'handle_{}'.format(ugraph.lib_name), self.handle_default) + return handler + def apply(self, ugraph): - handler = getattr(self, 'handle_{}'.format(ugraph.lib_name)) - if handler is None: - raise RuntimeError( - 'can not lower ugraph from {} to utensor'.format(ugraph.lib_name) - ) + handler = self.get_handler(ugraph) return handler(ugraph) +class uTensorLegacyGraphLower(uTensorGraphLowerBase): + PART = 'legacy_graph_lower' + def handle_tensorflow(self, ugraph): return ugraph @@ -25,11 +32,10 @@ def default_config(cls): return {} -class uTensorRearchGraphLower(BackendPart): - TARGET = 'utensor' +class uTensorRearchGraphLower(uTensorGraphLowerBase): PART = 'rearch_graph_lower' - class OptypRenameManager(object): + class OptypeRenameManager(object): NAME_MAP = { 'Add': 'AddOperator', 'Conv2D': 'ConvOperator', @@ -40,22 +46,12 @@ class OptypRenameManager(object): def get_new_optype(cls, op_type): return cls.NAME_MAP.get(op_type, op_type) - def apply(self, ugraph): - handler = getattr(self, 'handle_{}'.format(ugraph.lib_name)) - if handler is None: - raise RuntimeError( - 'can not lower ugraph from {} to utensor'.format(ugraph.lib_name) - ) - return handler(ugraph) - def handle_tensorflow(self, ugraph): new_ugraph = deepcopy(ugraph) for op_info in new_ugraph.ops_info.values(): - op_info.op_type = self.OptypRenameManager.get_new_optype(op_info.op_type) + op_info.op_type = self.OptypeRenameManager.get_new_optype(op_info.op_type) return new_ugraph @class_property def default_config(cls): return {} - - diff --git a/utensor_cgen/cli.py b/utensor_cgen/cli.py index 74cbeead..e7ed0394 100644 --- a/utensor_cgen/cli.py +++ b/utensor_cgen/cli.py @@ -81,7 +81,6 @@ def generate_config(target, output): '--output-nodes', type=NArgsParam(), metavar="NODE_NAME,NODE_NAME,...", - required=True, help="list of output nodes" ) @click.option('--config', default='utensor_cli.toml', show_default=True, metavar='CONFIG.toml') @@ -129,10 +128,12 @@ def list_trans_methods(verbose): type=NArgsParam(), metavar="NODE_NAME,NODE_NAME,...", help="list of output nodes") +@click.option('--config', default='utensor_cli.toml', show_default=True, metavar='CONFIG.toml') @click.argument('model_file', required=True, metavar='MODEL.{pb,pkl}') -def show_graph(model_file, **kwargs): +def show_graph(model_file, config, **kwargs): import pickle from utensor_cgen.frontend import FrontendSelector + _, ext = os.path.splitext(model_file) output_nodes = kwargs.pop('output_nodes') @@ -142,9 +143,13 @@ def show_graph(model_file, **kwargs): _show_ugraph(ugraph, **kwargs) return 0 + if os.path.exists(config): + with open(config) as fid: + config = loads(fid.read()) + else: + config = {} try: - parser = FrontendSelector.select_parser(ext) - ugraph = parser.parse(model_file, output_nodes) + ugraph = FrontendSelector.parse(model_file, output_nodes, config) _show_ugraph(ugraph, **kwargs) return 0 except RuntimeError as err: diff --git a/utensor_cgen/frontend/__init__.py b/utensor_cgen/frontend/__init__.py index f122ea18..0b70318e 100644 --- a/utensor_cgen/frontend/__init__.py +++ b/utensor_cgen/frontend/__init__.py @@ -26,6 +26,8 @@ def parse(cls, model_file, output_nodes, config=None): if config is None: config = {} _, ext = os.path.splitext(model_file) + if ext != '.onnx' and not output_nodes: + raise ValueError('output_nodes are required for {} file'.format(ext)) parser = cls.select_parser(ext)(config) return parser.parse(model_file, output_nodes) diff --git a/utensor_cgen/frontend/onnx.py b/utensor_cgen/frontend/onnx.py index fc681bae..fe41a1e1 100644 --- a/utensor_cgen/frontend/onnx.py +++ b/utensor_cgen/frontend/onnx.py @@ -1,19 +1,238 @@ +import os +import re +from collections import Counter + +import numpy as np import onnx -from onnx_tf.backend import prepare +import tensorflow as tf +from onnx.onnx_pb import TensorProto +from onnx_tf.backend import TensorflowBackend, prepare from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser +from utensor_cgen.ir import OperationInfo, TensorInfo, uTensorGraph +from utensor_cgen.ir.converter import AttrValueConverter, TensorProtoConverter +from utensor_cgen.legalizer import Legalizer +from utensor_cgen.utils import topologic_order_graph from .tensorflow import GraphDefParser +def _convert_op_attribute(attrib_pb): + # TODO: integrate with ir.converter + if attrib_pb.HasField('f'): + return attrib_pb.f + elif attrib_pb.HasField('i'): + return attrib_pb.i + elif attrib_pb.HasField('s'): + return attrib_pb.s + else: + raise ValueError('Unknown attribute value: {}'.format(attrib_pb)) + + @FrontendSelector.register(target_exts=['.onnx']) class OnnxParser(Parser): + # https://github.com/onnx/onnx/blob/master/onnx/onnx.proto + # https://pytorch.org/docs/stable/onnx.html - @classmethod - def parse(cls, onnx_file, output_nodes): - onnx_model = onnx.load(onnx_file) - tf_rep = prepare(onnx_model) - graph_def = tf_rep.graph.as_graph_def() - ugraph = GraphDefParser.parse(graph_def, output_nodes) + def parse(self, onnx_file, output_nodes=None): + graph_name, _ = os.path.splitext(onnx_file) + tf.reset_default_graph() + model = onnx.load(onnx_file) + onnx_graph = model.graph + ugraph = uTensorGraph( + name=graph_name, + output_nodes=[], + lib_name='onnx', + ops_info={}, + ) + self._build_graph(onnx_graph, ugraph) + ugraph = Legalizer.legalize(ugraph) + tf.reset_default_graph() return ugraph + + def _build_graph(self, onnx_graph, ugraph): + op_types_cnt = Counter() + tensor_names_map = {} + # add const ops + params_dict = self._get_params_dict(onnx_graph) + for tensor_name, tensor_value in params_dict.items(): + cnt = op_types_cnt['Const'] + node_name = self._format_node_name(tensor_name, 'Const', cnt) + op_types_cnt['Const'] += 1 + tensor_names_map[tensor_name] = TensorInfo( + name=self._format_tensor_name('', node_name, 0), + op_name=node_name, + dtype=tensor_value.value.dtype, + shape=list(tensor_value.value.np_array.shape), + ugraph=ugraph + ) + OperationInfo( + name=node_name, + input_tensors=[], + output_tensors=[tensor_names_map[tensor_name]], + op_type='Const', + lib_name='onnx', + ugraph=ugraph, + op_attr={ + 'value': tensor_value + } + ) + # placeholders + for value in onnx_graph.input: + # value: ValueInfoProto + tensor_name = value.name + if tensor_name in tensor_names_map: + # tensor in initializers MAY appears in input, ignore + continue + cnt = op_types_cnt['Placeholder'] + node_name = self._format_node_name(tensor_name, 'Placeholder', cnt) + op_types_cnt['Placeholder'] += 1 + assert value.type.HasField('tensor_type'), 'invalid graph input value' + tensor_type = value.type.tensor_type + dtype_str = TensorProto.DataType.Name(tensor_type.elem_type).lower() + if dtype_str == 'float': + dtype_str = 'float32' + dtype = np.dtype(dtype_str) + shape = [ + dim.dim_value for dim in tensor_type.shape.dim + ] + tensor_names_map[tensor_name] = TensorInfo( + name=self._format_tensor_name('', node_name, 0), + op_name=node_name, + dtype=dtype, + shape=shape, + ugraph=ugraph, + ) + OperationInfo( + name=node_name, + input_tensors=[], + output_tensors=[tensor_names_map[tensor_name]], + op_type='Placeholder', + ugraph=ugraph, + lib_name='onnx', + op_attr={} + ) + for node in onnx_graph.node: + cnt = op_types_cnt[node.op_type] + node_name = self._format_node_name(node.name, node.op_type, cnt) + for i, tensor_name in enumerate(node.output): + tensor_names_map[tensor_name] = TensorInfo( + name=self._format_tensor_name(tensor_name, node_name, i), + op_name=node_name, + dtype=None, + shape=None, + ugraph=ugraph, + ) + node_names_map = {} + # create all outupt tensors + for node in onnx_graph.node: + cnt = op_types_cnt[node.op_type] + node_name = self._format_node_name(node.name, node.op_type, cnt) + op_types_cnt[node.op_type] += 1 + for i, name in enumerate(node.output): + tensor_names_map[name] = TensorInfo( + name=self._format_tensor_name(name, node_name, i), + op_name=node_name, + dtype=None, + shape=None, + ugraph=ugraph + ) + if node.name: + node_names_map[node.name] = node_name + # create ops + for node in onnx_graph.node: + input_tensors = [ + tensor_names_map[name] for name in node.input + ] + output_tensors = [ + tensor_names_map[name] for name in node.output + ] + + op_attr = { + attrib_pb.name: _convert_op_attribute(attrib_pb) + for attrib_pb in node.attribute + } + node_name = output_tensors[0].op_name + OperationInfo( + name=node_name, + input_tensors=input_tensors, + output_tensors=output_tensors, + op_type=node.op_type, + lib_name='onnx', + ugraph=ugraph, + op_attr=op_attr + ) + # find outupt nodes + distinct_out_tensors = set() + graph_output = set([v.name for v in onnx_graph.output]) + for name, tensor_info in tensor_names_map.items(): + if name in graph_output: + distinct_out_tensors.add(tensor_info.op_name) + ugraph.output_nodes = list(distinct_out_tensors) + topologic_order_graph(ugraph) + _PostProcessing.post_process(ugraph) + + def _format_node_name(self, node_name, op_type, op_cnt): + if node_name == '': + node_name = '{}_{}'.format(op_type, op_cnt) + return re.sub(r'[\.:/]', '_', node_name) + + def _format_tensor_name(self, name, node_name, offset): + if re.match(r'[a-zA-Z][a-zA-Z0-9]*:[0-9]+', name): + return name + return '{}:{}'.format(node_name, offset) + + def _get_params_dict(self, onnx_graph): + dict_items = TensorflowBackend._onnx_initializer_to_input_dict_items(onnx_graph.initializer) + params_dict = {} + for name, tf_tensor in dict_items: + params_dict[name] = AttrValueConverter.GenericType( + value_name='value', + value=TensorProtoConverter.get_generic_value( + tf_tensor.op.get_attr('value') + ) + ) + return params_dict + + +class _PostProcessing(object): + + @classmethod + def post_process(cls, ugraph): + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + handler = getattr(cls, '_handle_{}'.format(op_info.op_type.lower()), lambda op_info: op_info) + handler(op_info) + + @staticmethod + def _handle_gemm(op_info): + ugraph = op_info.ugraph + output_tensor = op_info.output_tensors[0] + input_a, input_w, input_bias = op_info.input_tensors + a = np.empty(input_a.shape, dtype=input_a.dtype) + w = np.empty(input_w.shape, dtype=input_w.dtype) + b = np.empty(input_bias.shape, dtype=input_bias.dtype) + out = np.matmul(a, w.T) + b + output_tensor.dtype = out.dtype + output_tensor.shape = list(out.shape) + for op in output_tensor.op.output_nodes: + for i, in_tensor in enumerate(op.input_tensors): + if in_tensor.name == output_tensor.name: + op.input_tensors[i] = output_tensor + + @staticmethod + def _handle_relu(op_info): + input_tensor = op_info.input_tensors[0] + op_info.output_tensors[0].dtype = input_tensor.dtype + op_info.output_tensors[0].shape = input_tensor.shape[:] + + @staticmethod + def _handle_softmax(op_info): + input_tensor = op_info.input_tensors[0] + logistics = np.empty(input_tensor.shape, dtype=input_tensor.dtype) + out = np.exp(-logistics) + out /= out.sum(axis=1) + output_tensor = op_info.output_tensors[0] + output_tensor.shape = list(out.shape) + output_tensor.dtype = out.dtype diff --git a/utensor_cgen/frontend/tensorflow.py b/utensor_cgen/frontend/tensorflow.py index 263faa92..bd357a1d 100644 --- a/utensor_cgen/frontend/tensorflow.py +++ b/utensor_cgen/frontend/tensorflow.py @@ -17,10 +17,9 @@ @FrontendSelector.register(target_exts=['.pb', '.pbtxt']) class GraphDefParser(Parser): - @classmethod - def parse(cls, pb_file, output_nodes=None): - graph_def, graph_name = cls._load_graph_def(pb_file) - if not cls._tf_is_freeze_graph(graph_def): + def parse(self, pb_file, output_nodes=None): + graph_def, graph_name = self._load_graph_def(pb_file) + if not self._tf_is_freeze_graph(graph_def): raise ValueError('Given graph_def is not freezed') if output_nodes is None: output_nodes = [node.name for node in graph_def.node] @@ -39,14 +38,14 @@ def parse(cls, pb_file, output_nodes=None): ugraph=ugraph, op_name=tensor.op.name, dtype=np.dtype(tensor.dtype.as_numpy_dtype), - shape=cls._tf_parse_tshape(tensor.shape), + shape=self._tf_parse_tshape(tensor.shape), ) for tensor in op.inputs] out_tensors = [TensorInfo(name=tensor.name, ugraph=ugraph, op_name=op.name, dtype=np.dtype(tensor.dtype.as_numpy_dtype), - shape=cls._tf_parse_tshape(tensor.shape), + shape=self._tf_parse_tshape(tensor.shape), ) for tensor in op.outputs] op_type = node.op @@ -91,7 +90,7 @@ def _tf_parse_tshape(t_shape): shape = None return shape - @classmethod - def _tf_is_freeze_graph(self, graph_def): + @staticmethod + def _tf_is_freeze_graph(graph_def): is_frozen = all(node.op not in ['VariableV2'] for node in graph_def.node) return is_frozen diff --git a/utensor_cgen/ir/base.py b/utensor_cgen/ir/base.py index 5fef8683..827adc98 100644 --- a/utensor_cgen/ir/base.py +++ b/utensor_cgen/ir/base.py @@ -66,7 +66,7 @@ class TensorInfo(IRBase, _NoShallowCopyMixin): """ name = attr.ib(validator=instance_of(six.string_types)) op_name = attr.ib(validator=instance_of(six.string_types)) - dtype = attr.ib(validator=instance_of(np.dtype)) + dtype = attr.ib(validator=instance_of((np.dtype, type(None)))) shape = attr.ib(validator=instance_of((list, type(None)))) diff --git a/utensor_cgen/legalizer/__init__.py b/utensor_cgen/legalizer/__init__.py index 15e82b78..824a36b3 100644 --- a/utensor_cgen/legalizer/__init__.py +++ b/utensor_cgen/legalizer/__init__.py @@ -1,5 +1,6 @@ from .base import LegalizerBase from .tensorflow import GraphDefLegalizer +from .onnx import OnnxLegalizer class Legalizer(object): @@ -32,3 +33,4 @@ def legalize(cls, ugraph, config=None): return legalizer.legalize(ugraph) Legalizer.register(GraphDefLegalizer) +Legalizer.register(OnnxLegalizer) diff --git a/utensor_cgen/legalizer/onnx.py b/utensor_cgen/legalizer/onnx.py new file mode 100644 index 00000000..13c46a27 --- /dev/null +++ b/utensor_cgen/legalizer/onnx.py @@ -0,0 +1,53 @@ +from utensor_cgen.ir import OperationInfo, TensorInfo +from utensor_cgen.utils import topologic_order_graph + +from .base import LegalizerBase + + +class OnnxLegalizer(LegalizerBase): + TARGET = 'onnx' + + def legalize(self, ugraph): + self._visit(ugraph) + return ugraph + + def _visit(self, ugraph): + for op_info in list(ugraph.ops_info.values()): + visitor = getattr( + self, + '_visit_{}'.format(op_info.op_type.lower()), + lambda op_info: op_info + ) + visitor(op_info) + topologic_order_graph(ugraph) + + def _visit_gemm(self, op_info): + ugraph = op_info.ugraph + op_info.op_type = 'MatMul' + tensor_a, tensor_w, tensor_bias = op_info.input_tensors + out_tensor = TensorInfo( + name='{}_MatMul:0'.format(op_info.name), + op_name='{}_MatMul'.format(op_info.name), + dtype=op_info.output_tensors[0].dtype, + shape=op_info.output_tensors[0].shape[:], + ugraph=ugraph, + ) + OperationInfo( + name='{}_MatMul'.format(op_info.name), + input_tensors=[tensor_a, tensor_w], + output_tensors=[out_tensor], + op_type='MatMul', + lib_name=op_info.lib_name, + ugraph=ugraph, + op_attr=op_info.op_attr + ) + add_op = OperationInfo( + name='{}_AddBias'.format(op_info.name), + input_tensors=[out_tensor, tensor_bias], + output_tensors=op_info.output_tensors[:], + op_type='Add', + lib_name=op_info.lib_name, + ugraph=ugraph, + op_attr={} + ) + op_info.output_tensors[0].op_name = add_op.name diff --git a/utensor_cgen/transformer/linear_reoder.py b/utensor_cgen/transformer/linear_reoder.py index 2cce490e..491f9f11 100644 --- a/utensor_cgen/transformer/linear_reoder.py +++ b/utensor_cgen/transformer/linear_reoder.py @@ -5,6 +5,7 @@ """ import tensorflow as tf + from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.matcher import uTensorGraphMatcher from utensor_cgen.utils import prune_graph, topologic_order_graph @@ -30,7 +31,7 @@ def pattern_ugraph(self): dummy_input = tf.placeholder(dtype=tf.float32, shape=[None, 128, 128, 3]) relu = tf.nn.relu(dummy_input, name='relu') tf.nn.max_pool(relu, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name='max_pool') - pattern_ugraph = GraphDefParser.parse(graph.as_graph_def(), output_nodes=['max_pool']) + pattern_ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), output_nodes=['max_pool']) pattern_ugraph['relu'].replace_with_null_input_tensor(0) pattern_ugraph = prune_graph(pattern_ugraph) topologic_order_graph(pattern_ugraph) @@ -56,7 +57,7 @@ def __call__(self, match): dummy_input = tf.placeholder(dtype=tf.float32, shape=[None, 128, 128, 3]) max_pool = tf.nn.max_pool(dummy_input, ksize=ksize, strides=strides, padding=padding, name='max_pool') tf.nn.relu(max_pool, name='relu') - ugraph = GraphDefParser.parse(graph.as_graph_def(), output_nodes=['relu']) + ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), output_nodes=['relu']) ugraph['max_pool'].replace_with_null_input_tensor(0) ugraph = prune_graph(ugraph) topologic_order_graph(ugraph) diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index 006bf0dd..70c28657 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -352,10 +352,6 @@ def get_topologic_order(ugraph, init_nodes=None): - `Topological Sorting (wiki) `_ """ - if ugraph.lib_name != "tensorflow": - raise ValueError( - "topologic_order_graph works only on tensorflow graph" - ) if init_nodes is None: init_nodes = ugraph.output_nodes queue = deepcopy(init_nodes) From 6317edac08f8250aa183f91f4914890c50d99a68 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 25 Feb 2020 00:53:26 +0800 Subject: [PATCH 029/117] update tests and fix transformers --- tests/test_ir/test_uTensorGraph/test_graph.py | 10 +++++----- .../test_matcher/test_permutation/conftest.py | 10 +++++----- tests/test_matcher/test_replace/conftest.py | 6 +++--- .../test_matcher/test_replace/test_replace.py | 4 ++-- .../test_transformer/test_convpool/conftest.py | 4 ++-- .../test_transformer/test_dropout/conftest.py | 4 ++-- .../test_dropout/test_dropout_transormer.py | 7 ++++--- .../test_id_remove/test_transformer.py | 7 ++++--- .../test_inline/test_inline_optimizer.py | 2 +- .../test_linear_reorder/conftest.py | 4 ++-- .../test_refcnt/test_refcnt_optimizer.py | 2 +- .../test_allocator_optimizer.py | 18 +++++++++--------- utensor_cgen/transformer/conv_pool.py | 3 ++- utensor_cgen/transformer/ns_transformer.py | 4 ++-- utensor_cgen/transformer/quantize.py | 7 +++++-- 15 files changed, 49 insertions(+), 43 deletions(-) diff --git a/tests/test_ir/test_uTensorGraph/test_graph.py b/tests/test_ir/test_uTensorGraph/test_graph.py index 6a60e595..af8e441d 100644 --- a/tests/test_ir/test_uTensorGraph/test_graph.py +++ b/tests/test_ir/test_uTensorGraph/test_graph.py @@ -1,8 +1,8 @@ from copy import deepcopy import numpy as np - import tensorflow as tf + from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.ir import OperationInfo, uTensorGraph from utensor_cgen.ir.converter import TensorProtoConverter @@ -10,7 +10,7 @@ def test_ugraph_topo_order(graph_tuple): graph_def, output_nodes = graph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes) first_out, second_out = output_nodes meet_first = False for node_name in ugraph.topo_order: @@ -21,7 +21,7 @@ def test_ugraph_topo_order(graph_tuple): def test_ugraph_copy(graph_tuple): graph_def, output_nodes = graph_tuple - ugraph_1 = GraphDefParser.parse(graph_def, output_nodes) + ugraph_1 = GraphDefParser(config={}).parse(graph_def, output_nodes) ugraph_2 = deepcopy(ugraph_1) assert ugraph_1 is not ugraph_2 assert ugraph_1.graph_def == ugraph_2.graph_def @@ -53,7 +53,7 @@ def test_op_info(): def test_in_out_nodes(graph_tuple): graph_def, output_nodes = graph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes) x3 = ugraph.ops_info['x3'] assert x3.ugraph is ugraph assert len(x3.input_nodes) == len(set([op.name for op in x3.input_nodes])) @@ -65,7 +65,7 @@ def test_in_out_nodes(graph_tuple): def test_tensor_ops(graph_tuple): graph_def, output_nodes = graph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes) for op in ugraph.ops_info.values(): for tensor in op.output_tensors: assert tensor.op is op diff --git a/tests/test_matcher/test_permutation/conftest.py b/tests/test_matcher/test_permutation/conftest.py index ddc6a422..71cb1713 100644 --- a/tests/test_matcher/test_permutation/conftest.py +++ b/tests/test_matcher/test_permutation/conftest.py @@ -1,6 +1,6 @@ import pytest - import tensorflow as tf + from utensor_cgen.frontend.tensorflow import GraphDefParser @@ -12,7 +12,7 @@ def patrn_ugraph(): ptrn_input1 = tf.placeholder(dtype=tf.float32, name='input1') ptrn_add0 = tf.add(ptrn_input0, ptrn_input1, name='add0') ptrn_out = tf.add(ptrn_add0, ptrn_input1, name='output') - ugraph = GraphDefParser.parse(graph.as_graph_def(), [ptrn_out.op.name]) + ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), [ptrn_out.op.name]) # ugraph.ops_info[ptrn_input0.op.name].add_null_input_tensor() return ugraph @@ -26,7 +26,7 @@ def subject_ugraph1(): sub_add0 = tf.add(sub_input0, sub_input1, name='sub_add0') sub_add1 = tf.add(sub_add0, sub_input1, name='sub_add1') sub_output = tf.add(sub_add1, sub_input2, name='sub_output') - ugraph = GraphDefParser.parse(graph.as_graph_def(), [sub_output.op.name]) + ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), [sub_output.op.name]) return ugraph @pytest.fixture(scope='function', name='subject_ugraph1_1') @@ -40,7 +40,7 @@ def subject_ugraph1_1(): sub_add0 = tf.add(sub_input1, sub_input0, name='sub_add0') sub_add1 = tf.add(sub_add0, sub_input1, name='sub_add1') sub_output = tf.multiply(sub_add1, sub_input2, name='sub_output') - ugraph = GraphDefParser.parse(graph.as_graph_def(), [sub_output.op.name]) + ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), [sub_output.op.name]) return ugraph @pytest.fixture(scope='function', name='subject_ugraph1_2') @@ -53,6 +53,6 @@ def subject_ugraph1_2(): sub_add0 = tf.add(sub_input0, sub_input1, name='sub_add0') sub_add1 = tf.add(sub_input1, sub_add0, name='sub_add1') sub_output = tf.multiply(sub_add1, sub_input2, name='sub_output') - ugraph = GraphDefParser.parse(graph.as_graph_def(), [sub_output.op.name]) + ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), [sub_output.op.name]) # ugraph.ops_info[sub_input1.op.name].add_null_input_tensor() return ugraph diff --git a/tests/test_matcher/test_replace/conftest.py b/tests/test_matcher/test_replace/conftest.py index 64d8a6e3..e212a332 100644 --- a/tests/test_matcher/test_replace/conftest.py +++ b/tests/test_matcher/test_replace/conftest.py @@ -1,7 +1,7 @@ import numpy as np +import tensorflow as tf from pytest import fixture -import tensorflow as tf from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.utils import prune_graph, topologic_order_graph @@ -14,7 +14,7 @@ def fully_connect_pattern1(): w_prime = tf.constant(np.random.rand(3, 3), name='w_prime', dtype=tf.float32) a_prime = tf.matmul(z_prime, w_prime, name='a_prime') r_prime = tf.nn.relu(a_prime, name='r_prime') - patrn_ugraph = GraphDefParser.parse(patrn_graph.as_graph_def(), output_nodes=[r_prime.op.name]) + patrn_ugraph = GraphDefParser(config={}).parse(patrn_graph.as_graph_def(), output_nodes=[r_prime.op.name]) for i in range(2): patrn_ugraph.ops_info['a_prime'].replace_with_null_input_tensor(i) patrn_ugraph = prune_graph(patrn_ugraph) @@ -33,5 +33,5 @@ def subject_ugraph_1(): a = tf.matmul(z, w, name='a') r = tf.nn.relu(a, name='r') out = tf.add(x, r, name='out') - subj_ugraph = GraphDefParser.parse(subj_graph.as_graph_def(), output_nodes=[out.op.name]) + subj_ugraph = GraphDefParser(config={}).parse(subj_graph.as_graph_def(), output_nodes=[out.op.name]) return subj_ugraph diff --git a/tests/test_matcher/test_replace/test_replace.py b/tests/test_matcher/test_replace/test_replace.py index 9615b0f2..0bfb96d4 100644 --- a/tests/test_matcher/test_replace/test_replace.py +++ b/tests/test_matcher/test_replace/test_replace.py @@ -1,6 +1,6 @@ import numpy as np - import tensorflow as tf + from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.matcher import uTensorGraphMatcher from utensor_cgen.utils import prune_graph, topologic_order_graph @@ -13,7 +13,7 @@ def callback(match): a = tf.placeholder(dtype=tf.float32, name='a') b = tf.placeholder(dtype=tf.float32, name='b') out = tf.add(a, b, name='fused_node') - ugraph = GraphDefParser.parse(graph.as_graph_def(), output_nodes=[out.op.name]) + ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), output_nodes=[out.op.name]) ugraph.ops_info['fused_node'].replace_with_null_input_tensor(0) ugraph.ops_info['fused_node'].replace_with_null_input_tensor(1) topologic_order_graph(ugraph) diff --git a/tests/test_transformer/test_convpool/conftest.py b/tests/test_transformer/test_convpool/conftest.py index e9125cbb..dd3d7d68 100644 --- a/tests/test_transformer/test_convpool/conftest.py +++ b/tests/test_transformer/test_convpool/conftest.py @@ -1,9 +1,9 @@ from random import sample import numpy as np +import tensorflow as tf from pytest import fixture -import tensorflow as tf from utensor_cgen.frontend.tensorflow import GraphDefParser @@ -39,5 +39,5 @@ def gen_vgg_graph(): name='pool_{}'.format(i), padding='SAME', ) - ugraph = GraphDefParser.parse(graph.as_graph_def(), output_nodes=[in_feat.op.name]) + ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), output_nodes=[in_feat.op.name]) return ugraph diff --git a/tests/test_transformer/test_dropout/conftest.py b/tests/test_transformer/test_dropout/conftest.py index d4937bff..a0c685c7 100644 --- a/tests/test_transformer/test_dropout/conftest.py +++ b/tests/test_transformer/test_dropout/conftest.py @@ -2,8 +2,8 @@ import numpy as np import pytest - import tensorflow as tf + from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.utils import random_str @@ -68,4 +68,4 @@ def gen_vgg_graph(): ) if i != num_layers: in_feat = tf.nn.dropout(in_feat, rate=rate, name='dropout_{}'.format(i)) - return GraphDefParser.parse(graph.as_graph_def(), output_nodes=[in_feat.op.name]) + return GraphDefParser(config={}).parse(graph.as_graph_def(), output_nodes=[in_feat.op.name]) diff --git a/tests/test_transformer/test_dropout/test_dropout_transormer.py b/tests/test_transformer/test_dropout/test_dropout_transormer.py index 98593527..a6085879 100644 --- a/tests/test_transformer/test_dropout/test_dropout_transormer.py +++ b/tests/test_transformer/test_dropout/test_dropout_transormer.py @@ -1,4 +1,5 @@ import tensorflow as tf + from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.transformer.ns_transformer import (DropoutTransformer, DropoutTransformerV2) @@ -8,7 +9,7 @@ def test_dropout_trans_1_1(droput_graph_tuple): (graph_def, (keep_prob_name, dropout_output_name), output_nodes) = droput_graph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = DropoutTransformer() new_ugraph = transformer.transform(ugraph) for op in new_ugraph.ops_info.values(): @@ -40,7 +41,7 @@ def test_dropout_trans_1_2(droput_graph_tuple): (graph_def, (keep_prob_name, dropout_output_name), output_nodes) = droput_graph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = DropoutTransformerV2() new_ugraph = transformer.transform(ugraph) for op in new_ugraph.ops_info.values(): @@ -70,7 +71,7 @@ def test_dropout_trans_1_2(droput_graph_tuple): def test_dropout_trans_2(dropout_graph_tuple2): graph_def, output_nodes = dropout_graph_tuple2 - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) trans = DropoutTransformerV2() new_ugraph = trans.transform(ugraph) assert len(new_ugraph.ops_info) == 1 diff --git a/tests/test_transformer/test_id_remove/test_transformer.py b/tests/test_transformer/test_id_remove/test_transformer.py index d09654eb..edd1b440 100644 --- a/tests/test_transformer/test_id_remove/test_transformer.py +++ b/tests/test_transformer/test_id_remove/test_transformer.py @@ -1,8 +1,9 @@ from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.transformer.optimizer import IdOpRemoveOptimizer + def test_id_rm_transform_1(id_graph_def_1): - ugraph = GraphDefParser.parse(id_graph_def_1, output_nodes=['z']) + ugraph = GraphDefParser(config={}).parse(id_graph_def_1, output_nodes=['z']) optimizer = IdOpRemoveOptimizer() new_ugraph = optimizer.transform(ugraph) for op in new_ugraph.ops_info.values(): @@ -12,11 +13,11 @@ def test_id_rm_transform_1(id_graph_def_1): assert set(['x', 'y']) == in_op_names def test_id_rm_transform_2(id_graph_def_2): - ugraph = GraphDefParser.parse(id_graph_def_2, output_nodes=['z']) + ugraph = GraphDefParser(config={}).parse(id_graph_def_2, output_nodes=['z']) optimizer = IdOpRemoveOptimizer() new_ugraph = optimizer.transform(ugraph) for op in new_ugraph.ops_info.values(): assert op.op_type != 'Identity' op_z = new_ugraph.ops_info['z'] in_op_names = set([op.name for op in op_z.input_nodes]) - assert set(['w', 'y']) == in_op_names \ No newline at end of file + assert set(['w', 'y']) == in_op_names diff --git a/tests/test_transformer/test_inline/test_inline_optimizer.py b/tests/test_transformer/test_inline/test_inline_optimizer.py index 48b82dfd..f416d9b3 100644 --- a/tests/test_transformer/test_inline/test_inline_optimizer.py +++ b/tests/test_transformer/test_inline/test_inline_optimizer.py @@ -4,7 +4,7 @@ def test_inline_optimizer(inlinegraph_tuple): (graph_def, inline_ans, output_nodes)= inlinegraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes) transformer = InlineTransformer() ugraph = transformer.transform(ugraph) for node_name in ugraph.topo_order: diff --git a/tests/test_transformer/test_linear_reorder/conftest.py b/tests/test_transformer/test_linear_reorder/conftest.py index e69dd354..7209afbe 100644 --- a/tests/test_transformer/test_linear_reorder/conftest.py +++ b/tests/test_transformer/test_linear_reorder/conftest.py @@ -1,6 +1,6 @@ +import tensorflow as tf from pytest import fixture -import tensorflow as tf from utensor_cgen.frontend.tensorflow import GraphDefParser @@ -15,5 +15,5 @@ def subject_ugraph_1(): relu_2 = tf.nn.relu(input_2, name='relu_2') max_pool_2 = tf.nn.max_pool(relu_2, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='VALID', name='pool_2') output = tf.add(max_pool_1, max_pool_2, name='output') - subj_ugraph = GraphDefParser.parse(graph.as_graph_def(), output_nodes=[output.op.name]) + subj_ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), output_nodes=[output.op.name]) return subj_ugraph diff --git a/tests/test_transformer/test_refcnt/test_refcnt_optimizer.py b/tests/test_transformer/test_refcnt/test_refcnt_optimizer.py index e032e725..ea696d7a 100644 --- a/tests/test_transformer/test_refcnt/test_refcnt_optimizer.py +++ b/tests/test_transformer/test_refcnt/test_refcnt_optimizer.py @@ -4,7 +4,7 @@ def test_refcnt_optimizer(refgraph_tuple): (graph_def, refcnt_ans, output_nodes)= refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = RefCntOptimizer() ugraph = transformer.transform(ugraph) for node_name in ugraph.topo_order: diff --git a/tests/test_transformer/test_tensorallocator/test_allocator_optimizer.py b/tests/test_transformer/test_tensorallocator/test_allocator_optimizer.py index 491de548..83f9090b 100644 --- a/tests/test_transformer/test_tensorallocator/test_allocator_optimizer.py +++ b/tests/test_transformer/test_tensorallocator/test_allocator_optimizer.py @@ -4,7 +4,7 @@ def test_create_resource_table(refgraph_tuple): (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = TensorLifeProbe() table = transformer._create_resource_table(ugraph) resource_ans = { @@ -21,7 +21,7 @@ def test_create_resource_table(refgraph_tuple): def test_create_allocate_table(refgraph_tuple): (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = TensorLifeProbe() table = transformer._create_resource_table(ugraph) allocate_table = dict() @@ -36,7 +36,7 @@ def test_create_allocate_table(refgraph_tuple): def test_query_offset_address(refgraph_tuple): (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = TensorLifeProbe() table = transformer._create_resource_table(ugraph) allocate_table = dict() @@ -50,7 +50,7 @@ def test_query_offset_address(refgraph_tuple): def test_query_timeline(refgraph_tuple): (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = TensorLifeProbe() table = transformer._create_resource_table(ugraph) allocate_table = dict() @@ -64,7 +64,7 @@ def test_query_timeline(refgraph_tuple): def test_query_result(refgraph_tuple): (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = TensorLifeProbe() table = transformer._create_resource_table(ugraph) allocate_table = dict() @@ -91,7 +91,7 @@ def test_query_result(refgraph_tuple): def test_allocate_tensor(refgraph_tuple): (graph_def, output_nodes) = refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = TensorLifeProbe() tensors = [] table = transformer._create_resource_table(ugraph) @@ -108,7 +108,7 @@ def test_allocate_tensor(refgraph_tuple): def test_allocate_graph(refgraph_tuple): (graph_def, output_nodes) = refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = TensorLifeProbe() use_def_table = transformer._create_resource_table(ugraph) unit_size = 4 @@ -120,7 +120,7 @@ def test_allocate_graph(refgraph_tuple): def test_query_check(refgraph_tuple): (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = TensorLifeProbe() table = transformer._create_resource_table(ugraph) allocate_table = dict() @@ -136,6 +136,6 @@ def test_query_check(refgraph_tuple): def test_memory_allocation(refgraph_tuple): (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser.parse(graph_def, output_nodes=output_nodes) + ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = TensorLifeProbe() ugraph = transformer.transform(ugraph) diff --git a/utensor_cgen/transformer/conv_pool.py b/utensor_cgen/transformer/conv_pool.py index 21cae4e0..9be901eb 100644 --- a/utensor_cgen/transformer/conv_pool.py +++ b/utensor_cgen/transformer/conv_pool.py @@ -7,6 +7,7 @@ from copy import deepcopy import tensorflow as tf + from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.ir import OperationInfo, TensorInfo, uTensorGraph from utensor_cgen.matcher import uTensorGraphMatcher @@ -35,7 +36,7 @@ def pattern_ugraph(self): dummy_weight = tf.zeros([32, 32, 3, 10], dtype=tf.float32, name='dummy_weight') conv = tf.nn.conv2d(dummy_input, dummy_weight, strides=[1, 2, 2, 1], padding='VALID', name='conv') maxpool = tf.nn.max_pool(conv, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID', name='maxpool') - ugraph = GraphDefParser.parse(graph.as_graph_def(), output_nodes=[maxpool.op.name]) + ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), output_nodes=[maxpool.op.name]) quant_ugraph = QuantizeTransformer().transform(ugraph) patrn_ugraph = deepcopy(quant_ugraph) quant_conv_op = patrn_ugraph['conv/eightbit'] diff --git a/utensor_cgen/transformer/ns_transformer.py b/utensor_cgen/transformer/ns_transformer.py index f4fdee2d..2a627b61 100644 --- a/utensor_cgen/transformer/ns_transformer.py +++ b/utensor_cgen/transformer/ns_transformer.py @@ -9,8 +9,8 @@ from copy import deepcopy import numpy as np - import tensorflow as tf + from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.ir import OperationInfo, uTensorGraph from utensor_cgen.logger import logger @@ -367,7 +367,7 @@ def pattern_ugraph(self): dummy_x = tf.constant(np.random.rand(10, 10), dtype=tf.float32, name='dummy_x') dummy_rate = tf.placeholder(dtype=tf.float32, name='dummy_rate') dropout = tf.nn.dropout(dummy_x, rate=dummy_rate, name='dropout') - patrn_ugraph = GraphDefParser.parse(graph.as_graph_def(), output_nodes=[dropout.op.name]) + patrn_ugraph = GraphDefParser(config={}).parse(graph.as_graph_def(), output_nodes=[dropout.op.name]) # replace dummy_x patrn_ugraph['dropout/truediv'].replace_with_null_input_tensor(0) # # replace dummy_rate diff --git a/utensor_cgen/transformer/quantize.py b/utensor_cgen/transformer/quantize.py index d876ed69..df724d8e 100644 --- a/utensor_cgen/transformer/quantize.py +++ b/utensor_cgen/transformer/quantize.py @@ -1,4 +1,5 @@ from tensorflow.tools.graph_transforms import TransformGraph + from utensor_cgen.frontend.tensorflow import GraphDefParser from .base import Transformer @@ -18,5 +19,7 @@ def transform(self, ugraph): inputs=[], outputs=ugraph.output_nodes, transforms=["quantize_weights", "quantize_nodes"]) - return GraphDefParser.parse(quant_graph_def, - output_nodes=ugraph.output_nodes) + return GraphDefParser(config={}).parse( + quant_graph_def, + output_nodes=ugraph.output_nodes + ) From f697120809ecde49da40dc640b4d619cf22dba6d Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 25 Feb 2020 17:41:07 +0800 Subject: [PATCH 030/117] making some transformer generic (not specific to tensorflow) --- utensor_cgen/legalizer/onnx.py | 4 ++++ utensor_cgen/transformer/conv_pool.py | 3 ++- utensor_cgen/transformer/optimizer.py | 7 ++----- utensor_cgen/transformer/quantize.py | 3 ++- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/utensor_cgen/legalizer/onnx.py b/utensor_cgen/legalizer/onnx.py index 13c46a27..2a8fceba 100644 --- a/utensor_cgen/legalizer/onnx.py +++ b/utensor_cgen/legalizer/onnx.py @@ -51,3 +51,7 @@ def _visit_gemm(self, op_info): op_attr={} ) op_info.output_tensors[0].op_name = add_op.name + + def _visit_id(self, op_info): + # identity op should have op_type == 'Identity' + return op_info diff --git a/utensor_cgen/transformer/conv_pool.py b/utensor_cgen/transformer/conv_pool.py index 9be901eb..d3de708a 100644 --- a/utensor_cgen/transformer/conv_pool.py +++ b/utensor_cgen/transformer/conv_pool.py @@ -7,7 +7,6 @@ from copy import deepcopy import tensorflow as tf - from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.ir import OperationInfo, TensorInfo, uTensorGraph from utensor_cgen.matcher import uTensorGraphMatcher @@ -48,6 +47,8 @@ def pattern_ugraph(self): return patrn_ugraph def transform(self, ugraph): + if ugraph.lib_name != 'tensorflow': + raise ValueError('only support tensorflow graph') matcher = uTensorGraphMatcher(pattern_ugraph=self.pattern_ugraph) matches = matcher.match(ugraph, n=1) while matches: diff --git a/utensor_cgen/transformer/optimizer.py b/utensor_cgen/transformer/optimizer.py index e83d081c..f10c9cfc 100644 --- a/utensor_cgen/transformer/optimizer.py +++ b/utensor_cgen/transformer/optimizer.py @@ -54,12 +54,9 @@ def __init__(self, **kwargs): self.prune_graph = True def transform(self, ugraph): - if ugraph.lib_name == 'tensorflow': - return self._transform_tf(ugraph) - else: - raise RuntimeError('unsupported lib_name: {}'.format(ugraph.lib_name)) + return self._transform(ugraph) - def _transform_tf(self, ugraph): + def _transform(self, ugraph): ops_to_remove = [ op for op_name, op in ugraph.ops_info.items() diff --git a/utensor_cgen/transformer/quantize.py b/utensor_cgen/transformer/quantize.py index df724d8e..8f030565 100644 --- a/utensor_cgen/transformer/quantize.py +++ b/utensor_cgen/transformer/quantize.py @@ -1,5 +1,4 @@ from tensorflow.tools.graph_transforms import TransformGraph - from utensor_cgen.frontend.tensorflow import GraphDefParser from .base import Transformer @@ -14,6 +13,8 @@ class QuantizeTransformer(Transformer): KWARGS_NAMESCOPE = '_quantize' def transform(self, ugraph): + if ugraph.lib_name != 'tensorflow': + raise ValueError('only support tensorflow graph') graph_def = ugraph.graph_def quant_graph_def = TransformGraph(input_graph_def=graph_def, inputs=[], From fb5413e4a9500bebb89a2ff51ae66fc2dd645a4d Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 28 Feb 2020 00:27:05 +0800 Subject: [PATCH 031/117] update pipfile, locks --- Pipfile | 6 +- Pipfile.lock | 962 --------------------------------------------------- setup.py | 1 + 3 files changed, 6 insertions(+), 963 deletions(-) delete mode 100644 Pipfile.lock diff --git a/Pipfile b/Pipfile index 62bfd748..13c552e8 100644 --- a/Pipfile +++ b/Pipfile @@ -1,12 +1,13 @@ [[source]] url = "https://pypi.python.org/simple" -verify_ssl = true +verify_ssl = false name = "pypi" [packages] e1839a8 = {path = ".",editable = true} [dev-packages] +matplotlib = "*" pylint = "*" "flake8" = "*" pytest = "*" @@ -16,3 +17,6 @@ scipy = "*" graphviz = "*" sphinx = "*" sphinx-autoapi = "*" + +[pipenv] +allow_prereleases = true diff --git a/Pipfile.lock b/Pipfile.lock deleted file mode 100644 index 403da44e..00000000 --- a/Pipfile.lock +++ /dev/null @@ -1,962 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "ff0b58731e6f51ecb106fdbf32c5a60479ca4aea1b27a1670e6cf6d61e3ac739" - }, - "pipfile-spec": 6, - "requires": {}, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.python.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "absl-py": { - "hashes": [ - "sha256:75e737d6ce7723d9ff9b7aa1ba3233c34be62ef18d5859e706b8fdc828989830" - ], - "version": "==0.9.0" - }, - "astor": { - "hashes": [ - "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5", - "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e" - ], - "version": "==0.8.1" - }, - "attrs": { - "hashes": [ - "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", - "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" - ], - "version": "==19.3.0" - }, - "click": { - "hashes": [ - "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", - "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" - ], - "version": "==7.0" - }, - "e1839a8": { - "editable": true, - "path": "." - }, - "gast": { - "hashes": [ - "sha256:5c7617f1f6c8b8b426819642b16b9016727ddaecd16af9a07753e537eba8a3a5" - ], - "version": "==0.3.2" - }, - "graphviz": { - "hashes": [ - "sha256:241fb099e32b8e8c2acca747211c8237e40c0b89f24b1622860075d59f4c4b25", - "sha256:60acbeee346e8c14555821eab57dbf68a169e6c10bce40e83c1bf44f63a62a01" - ], - "version": "==0.13.2" - }, - "grpcio": { - "hashes": [ - "sha256:066630f6b62bffa291dacbee56994279a6a3682b8a11967e9ccaf3cc770fc11e", - "sha256:07e95762ca6b18afbeb3aa2793e827c841152d5e507089b1db0b18304edda105", - "sha256:0a0fb2f8e3a13537106bc77e4c63005bc60124a6203034304d9101921afa4e90", - "sha256:0c61b74dcfb302613926e785cb3542a0905b9a3a86e9410d8cf5d25e25e10104", - "sha256:13383bd70618da03684a8aafbdd9e3d9a6720bf8c07b85d0bc697afed599d8f0", - "sha256:1c6e0f6b9d091e3717e9a58d631c8bb4898be3b261c2a01fe46371fdc271052f", - "sha256:1cf710c04689daa5cc1e598efba00b028215700dcc1bf66fcb7b4f64f2ea5d5f", - "sha256:2da5cee9faf17bb8daf500cd0d28a17ae881ab5500f070a6aace457f4c08cac4", - "sha256:2f78ebf340eaf28fa09aba0f836a8b869af1716078dfe8f3b3f6ff785d8f2b0f", - "sha256:33a07a1a8e817d733588dbd18e567caad1a6fe0d440c165619866cd490c7911a", - "sha256:3d090c66af9c065b7228b07c3416f93173e9839b1d40bb0ce3dd2aa783645026", - "sha256:42b903a3596a10e2a3727bae2a76f8aefd324d498424b843cfa9606847faea7b", - "sha256:4fffbb58134c4f23e5a8312ac3412db6f5e39e961dc0eb5e3115ce5aa16bf927", - "sha256:57be5a6c509a406fe0ffa6f8b86904314c77b5e2791be8123368ad2ebccec874", - "sha256:5b0fa09efb33e2af4e8822b4eb8b2cbc201d562e3e185c439be7eaeee2e8b8aa", - "sha256:5ef42dfc18f9a63a06aca938770b69470bb322e4c137cf08cf21703d1ef4ae5c", - "sha256:6a43d2f2ff8250f200fdf7aa31fa191a997922aa9ea1182453acd705ad83ab72", - "sha256:6d8ab28559be98b02f8b3a154b53239df1aa5b0d28ff865ae5be4f30e7ed4d3f", - "sha256:6e47866b7dc14ca3a12d40c1d6082e7bea964670f1c5315ea0fb8b0550244d64", - "sha256:6edda1b96541187f73aab11800d25f18ee87e53d5f96bb74473873072bf28a0e", - "sha256:7109c8738a8a3c98cfb5dda1c45642a8d6d35dc00d257ab7a175099b2b4daecd", - "sha256:8d866aafb08657c456a18c4a31c8526ea62de42427c242b58210b9eae6c64559", - "sha256:9939727d9ae01690b24a2b159ac9dbca7b7e8e6edd5af6a6eb709243cae7b52b", - "sha256:99fd873699df17cb11c542553270ae2b32c169986e475df0d68a8629b8ef4df7", - "sha256:b6fda5674f990e15e1bcaacf026428cf50bce36e708ddcbd1de9673b14aab760", - "sha256:bdb2f3dcb664f0c39ef1312cd6acf6bc6375252e4420cf8f36fff4cb4fa55c71", - "sha256:bfd7d3130683a1a0a50c456273c21ec8a604f2d043b241a55235a78a0090ee06", - "sha256:c6c2db348ac73d73afe14e0833b18abbbe920969bf2c5c03c0922719f8020d06", - "sha256:cb7a4b41b5e2611f85c3402ac364f1d689f5d7ecbc24a55ef010eedcd6cf460f", - "sha256:cd3d3e328f20f7c807a862620c6ee748e8d57ba2a8fc960d48337ed71c6d9d32", - "sha256:d1a481777952e4f99b8a6956581f3ee866d7614100d70ae6d7e07327570b85ce", - "sha256:d1d49720ed636920bb3d74cedf549382caa9ad55aea89d1de99d817068d896b2", - "sha256:d42433f0086cccd192114343473d7dbd4aae9141794f939e2b7b83efc57543db", - "sha256:d44c34463a7c481e076f691d8fa25d080c3486978c2c41dca09a8dd75296c2d7", - "sha256:d7e5b7af1350e9c8c17a7baf99d575fbd2de69f7f0b0e6ebd47b57506de6493a", - "sha256:d9542366a0917b9b48bab1fee481ac01f56bdffc52437b598c09e7840148a6a9", - "sha256:df7cdfb40179acc9790a462c049e0b8e109481164dd7ad1a388dd67ff1528759", - "sha256:e1a9d9d2e7224d981aea8da79260c7f6932bf31ce1f99b7ccfa5eceeb30dc5d0", - "sha256:ed10e5fad105ecb0b12822f924e62d0deb07f46683a0b64416b17fd143daba1d", - "sha256:f0ec5371ce2363b03531ed522bfbe691ec940f51f0e111f0500fc0f44518c69d", - "sha256:f6580a8a4f5e701289b45fd62a8f6cb5ec41e4d77082424f8b676806dcd22564", - "sha256:f7b83e4b2842d44fce3cdc0d54db7a7e0d169a598751bf393601efaa401c83e0", - "sha256:ffec45b0db18a555fdfe0c6fa2d0a3fceb751b22b31e8fcd14ceed7bde05481e" - ], - "version": "==1.26.0" - }, - "h5py": { - "hashes": [ - "sha256:063947eaed5f271679ed4ffa36bb96f57bc14f44dd4336a827d9a02702e6ce6b", - "sha256:13c87efa24768a5e24e360a40e0bc4c49bcb7ce1bb13a3a7f9902cec302ccd36", - "sha256:16ead3c57141101e3296ebeed79c9c143c32bdd0e82a61a2fc67e8e6d493e9d1", - "sha256:3dad1730b6470fad853ef56d755d06bb916ee68a3d8272b3bab0c1ddf83bb99e", - "sha256:51ae56894c6c93159086ffa2c94b5b3388c0400548ab26555c143e7cfa05b8e5", - "sha256:54817b696e87eb9e403e42643305f142cd8b940fe9b3b490bbf98c3b8a894cf4", - "sha256:549ad124df27c056b2e255ea1c44d30fb7a17d17676d03096ad5cd85edb32dc1", - "sha256:64f74da4a1dd0d2042e7d04cf8294e04ddad686f8eba9bb79e517ae582f6668d", - "sha256:6998be619c695910cb0effe5eb15d3a511d3d1a5d217d4bd0bebad1151ec2262", - "sha256:6ef7ab1089e3ef53ca099038f3c0a94d03e3560e6aff0e9d6c64c55fb13fc681", - "sha256:769e141512b54dee14ec76ed354fcacfc7d97fea5a7646b709f7400cf1838630", - "sha256:79b23f47c6524d61f899254f5cd5e486e19868f1823298bc0c29d345c2447172", - "sha256:7be5754a159236e95bd196419485343e2b5875e806fe68919e087b6351f40a70", - "sha256:84412798925dc870ffd7107f045d7659e60f5d46d1c70c700375248bf6bf512d", - "sha256:86868dc07b9cc8cb7627372a2e6636cdc7a53b7e2854ad020c9e9d8a4d3fd0f5", - "sha256:8bb1d2de101f39743f91512a9750fb6c351c032e5cd3204b4487383e34da7f75", - "sha256:a5f82cd4938ff8761d9760af3274acf55afc3c91c649c50ab18fcff5510a14a5", - "sha256:aac4b57097ac29089f179bbc2a6e14102dd210618e94d77ee4831c65f82f17c0", - "sha256:bffbc48331b4a801d2f4b7dac8a72609f0b10e6e516e5c480a3e3241e091c878", - "sha256:c0d4b04bbf96c47b6d360cd06939e72def512b20a18a8547fa4af810258355d5", - "sha256:c54a2c0dd4957776ace7f95879d81582298c5daf89e77fb8bee7378f132951de", - "sha256:cbf28ae4b5af0f05aa6e7551cee304f1d317dbed1eb7ac1d827cee2f1ef97a99", - "sha256:d35f7a3a6cefec82bfdad2785e78359a0e6a5fbb3f605dd5623ce88082ccd681", - "sha256:d3c59549f90a891691991c17f8e58c8544060fdf3ccdea267100fa5f561ff62f", - "sha256:d7ae7a0576b06cb8e8a1c265a8bc4b73d05fdee6429bffc9a26a6eb531e79d72", - "sha256:ecf4d0b56ee394a0984de15bceeb97cbe1fe485f1ac205121293fc44dcf3f31f", - "sha256:f0e25bb91e7a02efccb50aba6591d3fe2c725479e34769802fcdd4076abfa917", - "sha256:f23951a53d18398ef1344c186fb04b26163ca6ce449ebd23404b153fd111ded9", - "sha256:ff7d241f866b718e4584fa95f520cb19405220c501bd3a53ee11871ba5166ea2" - ], - "version": "==2.10.0" - }, - "idx2numpy": { - "hashes": [ - "sha256:c609d5b260e6e7b538d458ba266c55b5b478e43e581d24d7017351813e67fcae" - ], - "version": "==1.2.2" - }, - "jinja2": { - "hashes": [ - "sha256:74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f", - "sha256:9fe95f19286cfefaa917656583d020be14e7859c6b0252588391e47db34527de" - ], - "version": "==2.10.3" - }, - "keras-applications": { - "hashes": [ - "sha256:5579f9a12bcde9748f4a12233925a59b93b73ae6947409ff34aa2ba258189fe5", - "sha256:df4323692b8c1174af821bf906f1e442e63fa7589bf0f1230a0b6bdc5a810c95" - ], - "version": "==1.0.8" - }, - "keras-preprocessing": { - "hashes": [ - "sha256:44aee5f2c4d80c3b29f208359fcb336df80f293a0bb6b1c738da43ca206656fb", - "sha256:5a8debe01d840de93d49e05ccf1c9b81ae30e210d34dacbcc47aeb3049b528e5" - ], - "version": "==1.1.0" - }, - "markdown": { - "hashes": [ - "sha256:2e50876bcdd74517e7b71f3e7a76102050edec255b3983403f1a63e7c8a41e7a", - "sha256:56a46ac655704b91e5b7e6326ce43d5ef72411376588afa1dd90e881b83c7e8c" - ], - "version": "==3.1.1" - }, - "markupsafe": { - "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" - ], - "version": "==1.1.1" - }, - "mock": { - "hashes": [ - "sha256:83657d894c90d5681d62155c82bda9c1187827525880eda8ff5df4ec813437c3", - "sha256:d157e52d4e5b938c550f39eb2fd15610db062441a9c2747d3dbfa9298211d0f8" - ], - "version": "==3.0.5" - }, - "numpy": { - "hashes": [ - "sha256:0a7a1dd123aecc9f0076934288ceed7fd9a81ba3919f11a855a7887cbe82a02f", - "sha256:0c0763787133dfeec19904c22c7e358b231c87ba3206b211652f8cbe1241deb6", - "sha256:3d52298d0be333583739f1aec9026f3b09fdfe3ddf7c7028cb16d9d2af1cca7e", - "sha256:43bb4b70585f1c2d153e45323a886839f98af8bfa810f7014b20be714c37c447", - "sha256:475963c5b9e116c38ad7347e154e5651d05a2286d86455671f5b1eebba5feb76", - "sha256:64874913367f18eb3013b16123c9fed113962e75d809fca5b78ebfbb73ed93ba", - "sha256:683828e50c339fc9e68720396f2de14253992c495fdddef77a1e17de55f1decc", - "sha256:6ca4000c4a6f95a78c33c7dadbb9495c10880be9c89316aa536eac359ab820ae", - "sha256:75fd817b7061f6378e4659dd792c84c0b60533e867f83e0d1e52d5d8e53df88c", - "sha256:7d81d784bdbed30137aca242ab307f3e65c8d93f4c7b7d8f322110b2e90177f9", - "sha256:8d0af8d3664f142414fd5b15cabfd3b6cc3ef242a3c7a7493257025be5a6955f", - "sha256:9679831005fb16c6df3dd35d17aa31dc0d4d7573d84f0b44cc481490a65c7725", - "sha256:a8f67ebfae9f575d85fa859b54d3bdecaeece74e3274b0b5c5f804d7ca789fe1", - "sha256:acbf5c52db4adb366c064d0b7c7899e3e778d89db585feadd23b06b587d64761", - "sha256:ada4805ed51f5bcaa3a06d3dd94939351869c095e30a2b54264f5a5004b52170", - "sha256:c7354e8f0eca5c110b7e978034cd86ed98a7a5ffcf69ca97535445a595e07b8e", - "sha256:e2e9d8c87120ba2c591f60e32736b82b67f72c37ba88a4c23c81b5b8fa49c018", - "sha256:e467c57121fe1b78a8f68dd9255fbb3bb3f4f7547c6b9e109f31d14569f490c3", - "sha256:ede47b98de79565fcd7f2decb475e2dcc85ee4097743e551fe26cfc7eb3ff143", - "sha256:f58913e9227400f1395c7b800503ebfdb0772f1c33ff8cb4d6451c06cabdf316", - "sha256:fe39f5fd4103ec4ca3cb8600b19216cd1ff316b4990f4c0b6057ad982c0a34d5" - ], - "version": "==1.17.4" - }, - "onnx": { - "hashes": [ - "sha256:051ac54cb08d9a1ae0dec5fbd79c7604ceb97ddb678bc4145e49a3f4da5d928c", - "sha256:0cae2a5511cf8522aea726507abad2aa85a5406f5ff7232ba937aadf71f77220", - "sha256:130d63b6f7bfee367c7693350fe4caea6b7067d254704bb20d136c6e7460ec56", - "sha256:3b88c3fe521151651a0403c4d131cb2e0311bd28b753ef692020a432a81ce345", - "sha256:40a47587025092c9d033f50fe4b9395c021539bcacbbaa141673ecd5eeca0aa0", - "sha256:4204fca478bcf668c606470b52cd3f42b111dcf5503b32c46480cabd9b9d4387", - "sha256:42298189743d9f390890c31907bad74899bf023bbb52c68a94b1f6d534468571", - "sha256:48acb524204137bd52a312709cb52a693832cce9e72c8f39db382d826e4bb6ec", - "sha256:4a47a4813647d07cb544429e12cf5a71262bc82edd9237c4ae91219b4ef841af", - "sha256:4fbe1630e33bd8d79d4e17a23d24bd8e464871dde37cb21e648c3728d33e64e2", - "sha256:6c90c2fdb0836e6fadd093ca053d6cebd00ac4a774759002b0b0860d652a3d31", - "sha256:912264fedd3df4647b31a4b7cd167982d54b4641eaf91bc1a9982c5eb9ebcb5f", - "sha256:926f73ad969ce649ae68be1f2255d7825a703a915a2766de8ec3f73b282f154f", - "sha256:988e20a30b38de2977f61c745ae68931ad9edbc8a687287e38555d17cd25df9d", - "sha256:9b32e04abe02cba4c4edb6c3cc15db917e734521ca8631e46bea3971a142d709", - "sha256:a78d7f0b784b26890f50cb48d7b1718db63f10ed3196cb023dd70631001c73a3", - "sha256:a7e3ab3e81684bc75ac5476b5f2c690ad8d250bc8ece02eed5445c115577e6e4", - "sha256:c67867a426eb661c661d7b2adea5c7876d7c5478b8d5af3c26bb40839b06e8c5", - "sha256:d169bebc845e9869f229b8e3f65e3144e647a251ae9594efae52de23502d6b13", - "sha256:d390ed80b8b1cffa23e25cd4e4a3f3a95c70f438cf5f160659f74f4ab5f6ee04", - "sha256:f21a7ea757cea83067ce0d2f98b701a5980b0166fc0c0f1202550fdfe16a1c80" - ], - "version": "==1.6.0" - }, - "onnx-tf": { - "hashes": [ - "sha256:0ecd83e481edf7024de1e191f12414c80dbaacadcea7f6abc85fe547c5649ff5" - ], - "version": "==1.2.1" - }, - "pillow": { - "hashes": [ - "sha256:047d9473cf68af50ac85f8ee5d5f21a60f849bc17d348da7fc85711287a75031", - "sha256:0f66dc6c8a3cc319561a633b6aa82c44107f12594643efa37210d8c924fc1c71", - "sha256:12c9169c4e8fe0a7329e8658c7e488001f6b4c8e88740e76292c2b857af2e94c", - "sha256:248cffc168896982f125f5c13e9317c059f74fffdb4152893339f3be62a01340", - "sha256:27faf0552bf8c260a5cee21a76e031acaea68babb64daf7e8f2e2540745082aa", - "sha256:285edafad9bc60d96978ed24d77cdc0b91dace88e5da8c548ba5937c425bca8b", - "sha256:384b12c9aa8ef95558abdcb50aada56d74bc7cc131dd62d28c2d0e4d3aadd573", - "sha256:38950b3a707f6cef09cd3cbb142474357ad1a985ceb44d921bdf7b4647b3e13e", - "sha256:4aad1b88933fd6dc2846552b89ad0c74ddbba2f0884e2c162aa368374bf5abab", - "sha256:4ac6148008c169603070c092e81f88738f1a0c511e07bd2bb0f9ef542d375da9", - "sha256:4deb1d2a45861ae6f0b12ea0a786a03d19d29edcc7e05775b85ec2877cb54c5e", - "sha256:59aa2c124df72cc75ed72c8d6005c442d4685691a30c55321e00ed915ad1a291", - "sha256:5a47d2123a9ec86660fe0e8d0ebf0aa6bc6a17edc63f338b73ea20ba11713f12", - "sha256:5cc901c2ab9409b4b7ac7b5bcc3e86ac14548627062463da0af3b6b7c555a871", - "sha256:6c1db03e8dff7b9f955a0fb9907eb9ca5da75b5ce056c0c93d33100a35050281", - "sha256:7ce80c0a65a6ea90ef9c1f63c8593fcd2929448613fc8da0adf3e6bfad669d08", - "sha256:809c19241c14433c5d6135e1b6c72da4e3b56d5c865ad5736ab99af8896b8f41", - "sha256:83792cb4e0b5af480588601467c0764242b9a483caea71ef12d22a0d0d6bdce2", - "sha256:846fa202bd7ee0f6215c897a1d33238ef071b50766339186687bd9b7a6d26ac5", - "sha256:9f5529fc02009f96ba95bea48870173426879dc19eec49ca8e08cd63ecd82ddb", - "sha256:a423c2ea001c6265ed28700df056f75e26215fd28c001e93ef4380b0f05f9547", - "sha256:ac4428094b42907aba5879c7c000d01c8278d451a3b7cccd2103e21f6397ea75", - "sha256:b1ae48d87f10d1384e5beecd169c77502fcc04a2c00a4c02b85f0a94b419e5f9", - "sha256:bf4e972a88f8841d8fdc6db1a75e0f8d763e66e3754b03006cbc3854d89f1cb1", - "sha256:c6414f6aad598364aaf81068cabb077894eb88fed99c6a65e6e8217bab62ae7a", - "sha256:c710fcb7ee32f67baf25aa9ffede4795fd5d93b163ce95fdc724383e38c9df96", - "sha256:c7be4b8a09852291c3c48d3c25d1b876d2494a0a674980089ac9d5e0d78bd132", - "sha256:c9e5ffb910b14f090ac9c38599063e354887a5f6d7e6d26795e916b4514f2c1a", - "sha256:e0697b826da6c2472bb6488db4c0a7fa8af0d52fa08833ceb3681358914b14e5", - "sha256:e9a3edd5f714229d41057d56ac0f39ad9bdba6767e8c888c951869f0bdd129b0" - ], - "version": "==6.2.1" - }, - "protobuf": { - "hashes": [ - "sha256:0329e86a397db2a83f9dcbe21d9be55a47f963cdabc893c3a24f4d3a8f117c37", - "sha256:0a7219254afec0d488211f3d482d8ed57e80ae735394e584a98d8f30a8c88a36", - "sha256:14d6ac53df9cb5bb87c4f91b677c1bc5cec9c0fd44327f367a3c9562de2877c4", - "sha256:180fc364b42907a1d2afa183ccbeffafe659378c236b1ec3daca524950bb918d", - "sha256:3d7a7d8d20b4e7a8f63f62de2d192cfd8b7a53c56caba7ece95367ca2b80c574", - "sha256:3f509f7e50d806a434fe4a5fbf602516002a0f092889209fff7db82060efffc0", - "sha256:4571da974019849201fc1ec6626b9cea54bd11b6bed140f8f737c0a33ea37de5", - "sha256:56bd1d84fbf4505c7b73f04de987eef5682e5752c811141b0186a3809bfb396f", - "sha256:680c668d00b5eff08b86aef9e5ba9a705e621ea05d39071cfea8e28cb2400946", - "sha256:6b5b947dc8b3f2aec0eaad65b0b5113fcd642c358c31357c647da6281ee31104", - "sha256:6e96dffaf4d0a9a329e528b353ba62fd9ef13599688723d96bc9c165d0b6871e", - "sha256:919f0d6f6addc836d08658eba3b52be2e92fd3e76da3ce00c325d8e9826d17c7", - "sha256:9c7b19c30cf0644afd0e4218b13f637ce54382fdcb1c8f75bf3e84e49a5f6d0a", - "sha256:a2e6f57114933882ec701807f217df2fb4588d47f71f227c0a163446b930d507", - "sha256:a6b970a2eccfcbabe1acf230fbf112face1c4700036c95e195f3554d7bcb04c1", - "sha256:bc45641cbcdea068b67438244c926f9fd3e5cbdd824448a4a64370610df7c593", - "sha256:d61b14a9090da77fe87e38ba4c6c43d3533dcbeb5d84f5474e7ac63c532dcc9c", - "sha256:d6faf5dbefb593e127463f58076b62fcfe0784187be8fe1aa9167388f24a22a1" - ], - "version": "==3.11.2" - }, - "pyyaml": { - "hashes": [ - "sha256:0e7f69397d53155e55d10ff68fdfb2cf630a35e6daf65cf0bdeaf04f127c09dc", - "sha256:2e9f0b7c5914367b0916c3c104a024bb68f269a486b9d04a2e8ac6f6597b7803", - "sha256:35ace9b4147848cafac3db142795ee42deebe9d0dad885ce643928e88daebdcc", - "sha256:38a4f0d114101c58c0f3a88aeaa44d63efd588845c5a2df5290b73db8f246d15", - "sha256:483eb6a33b671408c8529106df3707270bfacb2447bf8ad856a4b4f57f6e3075", - "sha256:4b6be5edb9f6bb73680f5bf4ee08ff25416d1400fbd4535fe0069b2994da07cd", - "sha256:7f38e35c00e160db592091751d385cd7b3046d6d51f578b29943225178257b31", - "sha256:8100c896ecb361794d8bfdb9c11fce618c7cf83d624d73d5ab38aef3bc82d43f", - "sha256:c0ee8eca2c582d29c3c2ec6e2c4f703d1b7f1fb10bc72317355a746057e7346c", - "sha256:e4c015484ff0ff197564917b4b4246ca03f411b9bd7f16e02a2f586eb48b6d04", - "sha256:ebc4ed52dcc93eeebeae5cf5deb2ae4347b3a81c3fa12b0b8c976544829396a4" - ], - "version": "==5.2" - }, - "six": { - "hashes": [ - "sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd", - "sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66" - ], - "version": "==1.13.0" - }, - "tensorboard": { - "hashes": [ - "sha256:53d8f40589c903dae65f39a799c2bc49defae3703754984d90613d26ebd714a4", - "sha256:b664fe7772be5670d8b04200342e681af7795a12cd752709aed565c06c0cc196" - ], - "version": "==1.13.1" - }, - "tensorflow": { - "hashes": [ - "sha256:0de5887495c20e1130ae4d9bcfaf80cec87f579a9c27a84141a588a46e5aa853", - "sha256:0f305f3c461ed2ce5e0b65fccc7b7452f483c7935dd8a52a466d622e642fdea8", - "sha256:4325f20b5a703b80a5f7a8807f07ad8735025bd2a947093ffff1c26fbdc7980b", - "sha256:4c86be0e476b64cedf4ffa059d71b764e75b895effb697345687e3057929a7b5", - "sha256:6b0a0a413390302ce7c22c98695983d6fb8406861cfb418b25536f57a96c0b89", - "sha256:77eec2351d0a9b5312ea01ee4c78c13996f249cf1bead2e68256a65e533f45ef", - "sha256:87bf719a564f11d63e4f614e933e5a612dd4e67c88266b774236e0982f5fcf69", - "sha256:ba29e66331cd2a8f824e0fa937ce44bd624bc37739f2f083694e473051d89ace", - "sha256:bc374f5a662b6e164cd1c4da61ccc752ec208a44893d2f9dcf47d2a0a2cef311", - "sha256:bcf86966b7554e407bb7d73341f2e108df62a910d40b4cd2a914867f2a5de51c", - "sha256:c3abffd51c168cfd62a557243c47a29ab48deb52a64465e6818060f20755ddb4", - "sha256:c41862c65628261229db22e33f9e570d845eeb5cea66dcbaebe404405edaa69b", - "sha256:d7341617aedd73c2c847755e87697e9c19eb625c73da26d6cd669220c5565119", - "sha256:de0425b58cb34006e4500565239b4c3a3055b95bff132f097fa46c87d8e463c9", - "sha256:f21fb65c8e874f40c654bc9b3ff3db3ec26f98f03fe64a541bc768f6f5c52ac2" - ], - "version": "==1.13.1" - }, - "tensorflow-estimator": { - "hashes": [ - "sha256:7cfdaa3e83e3532f31713713feb98be7ea9f3065722be4267e49b6c301271419" - ], - "version": "==1.13.0" - }, - "termcolor": { - "hashes": [ - "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b" - ], - "version": "==1.1.0" - }, - "toml": { - "hashes": [ - "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", - "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e" - ], - "version": "==0.10.0" - }, - "torch": { - "hashes": [ - "sha256:0cec2e13a2e95c24c34f17d437f354ee2a40902e8d515a524556b350e12555dd", - "sha256:134e8291a97151b1ffeea09cb9ddde5238beb4e6d9dfb66657143d6990bfb865", - "sha256:31062923ac2e60eac676f6a0ae14702b051c158bbcf7f440eaba266b0defa197", - "sha256:3b05233481b51bb636cee63dc761bb7f602e198178782ff4159d385d1759608b", - "sha256:458f1d87e5b7064b2c39e36675d84e163be3143dd2fc806057b7878880c461bc", - "sha256:72a1c85bffd2154f085bc0a1d378d8a54e55a57d49664b874fe7c949022bf071", - "sha256:77fd8866c0bf529861ffd850a5dada2190a8d9c5167719fb0cfa89163e23b143", - "sha256:b6f01d851d1c5989d4a99b50ae0187762b15b7718dcd1a33704b665daa2402f9", - "sha256:d8e1d904a6193ed14a4fed220b00503b2baa576e71471286d1ebba899c851fae" - ], - "version": "==1.3.1" - }, - "torchvision": { - "hashes": [ - "sha256:0f8245d6378acc86917f58492675f93df5279abae8bc5f832e3510722191f6c9", - "sha256:1ad7593d94f6612ccb84a59467f0d10cdc213fb3e2bb91f1e773eb844787fa4c", - "sha256:2553405b9afe3cedb410873b9877eb18b1526f8b01cb7c2747e51b69a936e0b5", - "sha256:276a385f2f5fe484bf08467b5d081d9144b97eb458ba5b4a11e4640389e53149", - "sha256:66deba9c577e36f4f071decdd894bf7ba794ac133dae64b3fd02fc3f0c6b989d", - "sha256:7a458330e4efcd66f9f70127ab21fcf8cfea84acda8e707322fd2843aa6dd396", - "sha256:8ff715c2323d9eca89126824ebfa74b282a95d6f64a4743fbe9b738d2de21c77", - "sha256:dca4aadc12a123730957b501f9c5c2870d2f6727a2c28552cb7907b68b0ea10c", - "sha256:dda25ce304978bba19e6543f7dcfee4f37d2f128ec83d4ab0c7e8f991d64865f" - ], - "version": "==0.4.2" - }, - "typing-extensions": { - "hashes": [ - "sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2", - "sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d", - "sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575" - ], - "version": "==3.7.4.1" - }, - "werkzeug": { - "hashes": [ - "sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7", - "sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4" - ], - "version": "==0.16.0" - }, - "wheel": { - "hashes": [ - "sha256:10c9da68765315ed98850f8e048347c3eb06dd81822dc2ab1d4fde9dc9702646", - "sha256:f4da1763d3becf2e2cd92a14a7c920f0f00eca30fdde9ea992c836685b9faf28" - ], - "markers": "python_version >= '3'", - "version": "==0.33.6" - } - }, - "develop": { - "alabaster": { - "hashes": [ - "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359", - "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02" - ], - "version": "==0.7.12" - }, - "astroid": { - "hashes": [ - "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a", - "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42" - ], - "markers": "python_version >= '3'", - "version": "==2.3.3" - }, - "attrs": { - "hashes": [ - "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", - "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" - ], - "version": "==19.3.0" - }, - "babel": { - "hashes": [ - "sha256:af92e6106cb7c55286b25b38ad7695f8b4efb36a90ba483d7f7a6628c46158ab", - "sha256:e86135ae101e31e2c8ec20a4e0c5220f4eed12487d5cf3f78be7e98d3a57fc28" - ], - "version": "==2.7.0" - }, - "certifi": { - "hashes": [ - "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", - "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" - ], - "version": "==2019.11.28" - }, - "chardet": { - "hashes": [ - "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", - "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" - ], - "version": "==3.0.4" - }, - "docutils": { - "hashes": [ - "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0", - "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827", - "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99" - ], - "version": "==0.15.2" - }, - "entrypoints": { - "hashes": [ - "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", - "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" - ], - "version": "==0.3" - }, - "flake8": { - "hashes": [ - "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb", - "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca" - ], - "index": "pypi", - "version": "==3.7.9" - }, - "graphviz": { - "hashes": [ - "sha256:241fb099e32b8e8c2acca747211c8237e40c0b89f24b1622860075d59f4c4b25", - "sha256:60acbeee346e8c14555821eab57dbf68a169e6c10bce40e83c1bf44f63a62a01" - ], - "version": "==0.13.2" - }, - "idna": { - "hashes": [ - "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", - "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" - ], - "version": "==2.8" - }, - "imagesize": { - "hashes": [ - "sha256:3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8", - "sha256:f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5" - ], - "version": "==1.1.0" - }, - "importlib-metadata": { - "hashes": [ - "sha256:073a852570f92da5f744a3472af1b61e28e9f78ccf0c9117658dc32b15de7b45", - "sha256:d95141fbfa7ef2ec65cfd945e2af7e5a6ddbd7c8d9a25e66ff3be8e3daf9f60f" - ], - "markers": "python_version < '3.8'", - "version": "==1.3.0" - }, - "isort": { - "hashes": [ - "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", - "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" - ], - "version": "==4.3.21" - }, - "jinja2": { - "hashes": [ - "sha256:74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f", - "sha256:9fe95f19286cfefaa917656583d020be14e7859c6b0252588391e47db34527de" - ], - "version": "==2.10.3" - }, - "lazy-object-proxy": { - "hashes": [ - "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d", - "sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449", - "sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08", - "sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a", - "sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50", - "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd", - "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239", - "sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb", - "sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea", - "sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e", - "sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156", - "sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142", - "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442", - "sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62", - "sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db", - "sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531", - "sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383", - "sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a", - "sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357", - "sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4", - "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0" - ], - "version": "==1.4.3" - }, - "markupsafe": { - "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" - ], - "version": "==1.1.1" - }, - "mccabe": { - "hashes": [ - "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", - "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" - ], - "version": "==0.6.1" - }, - "more-itertools": { - "hashes": [ - "sha256:b84b238cce0d9adad5ed87e745778d20a3f8487d0f0cb8b8a586816c7496458d", - "sha256:c833ef592a0324bcc6a60e48440da07645063c453880c9477ceb22490aec1564" - ], - "version": "==8.0.2" - }, - "numpy": { - "hashes": [ - "sha256:0a7a1dd123aecc9f0076934288ceed7fd9a81ba3919f11a855a7887cbe82a02f", - "sha256:0c0763787133dfeec19904c22c7e358b231c87ba3206b211652f8cbe1241deb6", - "sha256:3d52298d0be333583739f1aec9026f3b09fdfe3ddf7c7028cb16d9d2af1cca7e", - "sha256:43bb4b70585f1c2d153e45323a886839f98af8bfa810f7014b20be714c37c447", - "sha256:475963c5b9e116c38ad7347e154e5651d05a2286d86455671f5b1eebba5feb76", - "sha256:64874913367f18eb3013b16123c9fed113962e75d809fca5b78ebfbb73ed93ba", - "sha256:683828e50c339fc9e68720396f2de14253992c495fdddef77a1e17de55f1decc", - "sha256:6ca4000c4a6f95a78c33c7dadbb9495c10880be9c89316aa536eac359ab820ae", - "sha256:75fd817b7061f6378e4659dd792c84c0b60533e867f83e0d1e52d5d8e53df88c", - "sha256:7d81d784bdbed30137aca242ab307f3e65c8d93f4c7b7d8f322110b2e90177f9", - "sha256:8d0af8d3664f142414fd5b15cabfd3b6cc3ef242a3c7a7493257025be5a6955f", - "sha256:9679831005fb16c6df3dd35d17aa31dc0d4d7573d84f0b44cc481490a65c7725", - "sha256:a8f67ebfae9f575d85fa859b54d3bdecaeece74e3274b0b5c5f804d7ca789fe1", - "sha256:acbf5c52db4adb366c064d0b7c7899e3e778d89db585feadd23b06b587d64761", - "sha256:ada4805ed51f5bcaa3a06d3dd94939351869c095e30a2b54264f5a5004b52170", - "sha256:c7354e8f0eca5c110b7e978034cd86ed98a7a5ffcf69ca97535445a595e07b8e", - "sha256:e2e9d8c87120ba2c591f60e32736b82b67f72c37ba88a4c23c81b5b8fa49c018", - "sha256:e467c57121fe1b78a8f68dd9255fbb3bb3f4f7547c6b9e109f31d14569f490c3", - "sha256:ede47b98de79565fcd7f2decb475e2dcc85ee4097743e551fe26cfc7eb3ff143", - "sha256:f58913e9227400f1395c7b800503ebfdb0772f1c33ff8cb4d6451c06cabdf316", - "sha256:fe39f5fd4103ec4ca3cb8600b19216cd1ff316b4990f4c0b6057ad982c0a34d5" - ], - "version": "==1.17.4" - }, - "packaging": { - "hashes": [ - "sha256:28b924174df7a2fa32c1953825ff29c61e2f5e082343165438812f00d3a7fc47", - "sha256:d9551545c6d761f3def1677baf08ab2a3ca17c56879e70fecba2fc4dde4ed108" - ], - "version": "==19.2" - }, - "pillow": { - "hashes": [ - "sha256:047d9473cf68af50ac85f8ee5d5f21a60f849bc17d348da7fc85711287a75031", - "sha256:0f66dc6c8a3cc319561a633b6aa82c44107f12594643efa37210d8c924fc1c71", - "sha256:12c9169c4e8fe0a7329e8658c7e488001f6b4c8e88740e76292c2b857af2e94c", - "sha256:248cffc168896982f125f5c13e9317c059f74fffdb4152893339f3be62a01340", - "sha256:27faf0552bf8c260a5cee21a76e031acaea68babb64daf7e8f2e2540745082aa", - "sha256:285edafad9bc60d96978ed24d77cdc0b91dace88e5da8c548ba5937c425bca8b", - "sha256:384b12c9aa8ef95558abdcb50aada56d74bc7cc131dd62d28c2d0e4d3aadd573", - "sha256:38950b3a707f6cef09cd3cbb142474357ad1a985ceb44d921bdf7b4647b3e13e", - "sha256:4aad1b88933fd6dc2846552b89ad0c74ddbba2f0884e2c162aa368374bf5abab", - "sha256:4ac6148008c169603070c092e81f88738f1a0c511e07bd2bb0f9ef542d375da9", - "sha256:4deb1d2a45861ae6f0b12ea0a786a03d19d29edcc7e05775b85ec2877cb54c5e", - "sha256:59aa2c124df72cc75ed72c8d6005c442d4685691a30c55321e00ed915ad1a291", - "sha256:5a47d2123a9ec86660fe0e8d0ebf0aa6bc6a17edc63f338b73ea20ba11713f12", - "sha256:5cc901c2ab9409b4b7ac7b5bcc3e86ac14548627062463da0af3b6b7c555a871", - "sha256:6c1db03e8dff7b9f955a0fb9907eb9ca5da75b5ce056c0c93d33100a35050281", - "sha256:7ce80c0a65a6ea90ef9c1f63c8593fcd2929448613fc8da0adf3e6bfad669d08", - "sha256:809c19241c14433c5d6135e1b6c72da4e3b56d5c865ad5736ab99af8896b8f41", - "sha256:83792cb4e0b5af480588601467c0764242b9a483caea71ef12d22a0d0d6bdce2", - "sha256:846fa202bd7ee0f6215c897a1d33238ef071b50766339186687bd9b7a6d26ac5", - "sha256:9f5529fc02009f96ba95bea48870173426879dc19eec49ca8e08cd63ecd82ddb", - "sha256:a423c2ea001c6265ed28700df056f75e26215fd28c001e93ef4380b0f05f9547", - "sha256:ac4428094b42907aba5879c7c000d01c8278d451a3b7cccd2103e21f6397ea75", - "sha256:b1ae48d87f10d1384e5beecd169c77502fcc04a2c00a4c02b85f0a94b419e5f9", - "sha256:bf4e972a88f8841d8fdc6db1a75e0f8d763e66e3754b03006cbc3854d89f1cb1", - "sha256:c6414f6aad598364aaf81068cabb077894eb88fed99c6a65e6e8217bab62ae7a", - "sha256:c710fcb7ee32f67baf25aa9ffede4795fd5d93b163ce95fdc724383e38c9df96", - "sha256:c7be4b8a09852291c3c48d3c25d1b876d2494a0a674980089ac9d5e0d78bd132", - "sha256:c9e5ffb910b14f090ac9c38599063e354887a5f6d7e6d26795e916b4514f2c1a", - "sha256:e0697b826da6c2472bb6488db4c0a7fa8af0d52fa08833ceb3681358914b14e5", - "sha256:e9a3edd5f714229d41057d56ac0f39ad9bdba6767e8c888c951869f0bdd129b0" - ], - "version": "==6.2.1" - }, - "pluggy": { - "hashes": [ - "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", - "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" - ], - "version": "==0.13.1" - }, - "py": { - "hashes": [ - "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", - "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53" - ], - "version": "==1.8.0" - }, - "pycodestyle": { - "hashes": [ - "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", - "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" - ], - "version": "==2.5.0" - }, - "pyflakes": { - "hashes": [ - "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", - "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" - ], - "version": "==2.1.1" - }, - "pygments": { - "hashes": [ - "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b", - "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe" - ], - "version": "==2.5.2" - }, - "pylint": { - "hashes": [ - "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd", - "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4" - ], - "index": "pypi", - "version": "==2.4.4" - }, - "pyparsing": { - "hashes": [ - "sha256:20f995ecd72f2a1f4bf6b072b63b22e2eb457836601e76d6e5dfcd75436acc1f", - "sha256:4ca62001be367f01bd3e92ecbb79070272a9d4964dce6a48a82ff0b8bc7e683a" - ], - "version": "==2.4.5" - }, - "pytest": { - "hashes": [ - "sha256:6b571215b5a790f9b41f19f3531c53a45cf6bb8ef2988bc1ff9afb38270b25fa", - "sha256:e41d489ff43948babd0fad7ad5e49b8735d5d55e26628a58673c39ff61d95de4" - ], - "index": "pypi", - "version": "==5.3.2" - }, - "pytz": { - "hashes": [ - "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d", - "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be" - ], - "version": "==2019.3" - }, - "pyyaml": { - "hashes": [ - "sha256:0e7f69397d53155e55d10ff68fdfb2cf630a35e6daf65cf0bdeaf04f127c09dc", - "sha256:2e9f0b7c5914367b0916c3c104a024bb68f269a486b9d04a2e8ac6f6597b7803", - "sha256:35ace9b4147848cafac3db142795ee42deebe9d0dad885ce643928e88daebdcc", - "sha256:38a4f0d114101c58c0f3a88aeaa44d63efd588845c5a2df5290b73db8f246d15", - "sha256:483eb6a33b671408c8529106df3707270bfacb2447bf8ad856a4b4f57f6e3075", - "sha256:4b6be5edb9f6bb73680f5bf4ee08ff25416d1400fbd4535fe0069b2994da07cd", - "sha256:7f38e35c00e160db592091751d385cd7b3046d6d51f578b29943225178257b31", - "sha256:8100c896ecb361794d8bfdb9c11fce618c7cf83d624d73d5ab38aef3bc82d43f", - "sha256:c0ee8eca2c582d29c3c2ec6e2c4f703d1b7f1fb10bc72317355a746057e7346c", - "sha256:e4c015484ff0ff197564917b4b4246ca03f411b9bd7f16e02a2f586eb48b6d04", - "sha256:ebc4ed52dcc93eeebeae5cf5deb2ae4347b3a81c3fa12b0b8c976544829396a4" - ], - "version": "==5.2" - }, - "requests": { - "hashes": [ - "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", - "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" - ], - "version": "==2.22.0" - }, - "rope": { - "hashes": [ - "sha256:6b728fdc3e98a83446c27a91fc5d56808a004f8beab7a31ab1d7224cecc7d969", - "sha256:c5c5a6a87f7b1a2095fb311135e2a3d1f194f5ecb96900fdd0a9100881f48aaf", - "sha256:f0dcf719b63200d492b85535ebe5ea9b29e0d0b8aebeb87fe03fc1a65924fdaf" - ], - "index": "pypi", - "version": "==0.14.0" - }, - "scipy": { - "hashes": [ - "sha256:00af72998a46c25bdb5824d2b729e7dabec0c765f9deb0b504f928591f5ff9d4", - "sha256:0902a620a381f101e184a958459b36d3ee50f5effd186db76e131cbefcbb96f7", - "sha256:1e3190466d669d658233e8a583b854f6386dd62d655539b77b3fa25bfb2abb70", - "sha256:2cce3f9847a1a51019e8c5b47620da93950e58ebc611f13e0d11f4980ca5fecb", - "sha256:3092857f36b690a321a662fe5496cb816a7f4eecd875e1d36793d92d3f884073", - "sha256:386086e2972ed2db17cebf88610aab7d7f6e2c0ca30042dc9a89cf18dcc363fa", - "sha256:71eb180f22c49066f25d6df16f8709f215723317cc951d99e54dc88020ea57be", - "sha256:770254a280d741dd3436919d47e35712fb081a6ff8bafc0f319382b954b77802", - "sha256:787cc50cab3020a865640aba3485e9fbd161d4d3b0d03a967df1a2881320512d", - "sha256:8a07760d5c7f3a92e440ad3aedcc98891e915ce857664282ae3c0220f3301eb6", - "sha256:8d3bc3993b8e4be7eade6dcc6fd59a412d96d3a33fa42b0fa45dc9e24495ede9", - "sha256:9508a7c628a165c2c835f2497837bf6ac80eb25291055f56c129df3c943cbaf8", - "sha256:a144811318853a23d32a07bc7fd5561ff0cac5da643d96ed94a4ffe967d89672", - "sha256:a1aae70d52d0b074d8121333bc807a485f9f1e6a69742010b33780df2e60cfe0", - "sha256:a2d6df9eb074af7f08866598e4ef068a2b310d98f87dc23bd1b90ec7bdcec802", - "sha256:bb517872058a1f087c4528e7429b4a44533a902644987e7b2fe35ecc223bc408", - "sha256:c5cac0c0387272ee0e789e94a570ac51deb01c796b37fb2aad1fb13f85e2f97d", - "sha256:cc971a82ea1170e677443108703a2ec9ff0f70752258d0e9f5433d00dda01f59", - "sha256:dba8306f6da99e37ea08c08fef6e274b5bf8567bb094d1dbe86a20e532aca088", - "sha256:dc60bb302f48acf6da8ca4444cfa17d52c63c5415302a9ee77b3b21618090521", - "sha256:dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59" - ], - "index": "pypi", - "version": "==1.4.1" - }, - "six": { - "hashes": [ - "sha256:1f1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd", - "sha256:30f610279e8b2578cab6db20741130331735c781b56053c59c4076da27f06b66" - ], - "version": "==1.13.0" - }, - "snowballstemmer": { - "hashes": [ - "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0", - "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52" - ], - "version": "==2.0.0" - }, - "sphinx": { - "hashes": [ - "sha256:0a11e2fd31fe5c7e64b4fc53c2c022946512f021d603eb41ac6ae51d5fcbb574", - "sha256:138e39aa10f28d52aa5759fc6d1cba2be6a4b750010974047fa7d0e31addcf63" - ], - "index": "pypi", - "version": "==2.3.0" - }, - "sphinx-autoapi": { - "hashes": [ - "sha256:623646ed1be7127486cab5f4e3ffc17a9327c2d2f3fce18effc39d73975a2973", - "sha256:b6b5f008edc174768a4d1fa87bc8ba1287744c9a9ff82e49064783da7a2ad03e" - ], - "index": "pypi", - "version": "==1.2.1" - }, - "sphinxcontrib-applehelp": { - "hashes": [ - "sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897", - "sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d" - ], - "version": "==1.0.1" - }, - "sphinxcontrib-devhelp": { - "hashes": [ - "sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34", - "sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981" - ], - "version": "==1.0.1" - }, - "sphinxcontrib-htmlhelp": { - "hashes": [ - "sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422", - "sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7" - ], - "version": "==1.0.2" - }, - "sphinxcontrib-jsmath": { - "hashes": [ - "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", - "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" - ], - "version": "==1.0.1" - }, - "sphinxcontrib-qthelp": { - "hashes": [ - "sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20", - "sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f" - ], - "version": "==1.0.2" - }, - "sphinxcontrib-serializinghtml": { - "hashes": [ - "sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227", - "sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768" - ], - "version": "==1.1.3" - }, - "typed-ast": { - "hashes": [ - "sha256:1170afa46a3799e18b4c977777ce137bb53c7485379d9706af8a59f2ea1aa161", - "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", - "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e", - "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0", - "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c", - "sha256:48e5b1e71f25cfdef98b013263a88d7145879fbb2d5185f2a0c79fa7ebbeae47", - "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631", - "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4", - "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34", - "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b", - "sha256:7954560051331d003b4e2b3eb822d9dd2e376fa4f6d98fee32f452f52dd6ebb2", - "sha256:838997f4310012cf2e1ad3803bce2f3402e9ffb71ded61b5ee22617b3a7f6b6e", - "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a", - "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233", - "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1", - "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36", - "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d", - "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a", - "sha256:fdc1c9bbf79510b76408840e009ed65958feba92a88833cdceecff93ae8fff66", - "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12" - ], - "markers": "implementation_name == 'cpython' and python_version < '3.8'", - "version": "==1.4.0" - }, - "unidecode": { - "hashes": [ - "sha256:1d7a042116536098d05d599ef2b8616759f02985c85b4fef50c78a5aaf10822a", - "sha256:2b6aab710c2a1647e928e36d69c21e76b453cd455f4e2621000e54b2a9b8cce8" - ], - "version": "==1.1.1" - }, - "urllib3": { - "hashes": [ - "sha256:a8a318824cc77d1fd4b2bec2ded92646630d7fe8619497b142c84a9e6f5a7293", - "sha256:f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745" - ], - "version": "==1.25.7" - }, - "wcwidth": { - "hashes": [ - "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", - "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" - ], - "version": "==0.1.7" - }, - "wrapt": { - "hashes": [ - "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" - ], - "version": "==1.11.2" - }, - "zipp": { - "hashes": [ - "sha256:3718b1cbcd963c7d4c5511a8240812904164b7f381b647143a89d3b98f9bcd8e", - "sha256:f06903e9f1f43b12d371004b4ac7b06ab39a44adc747266928ae6debfa7b3335" - ], - "version": "==0.6.0" - } - } -} diff --git a/setup.py b/setup.py index 23812db2..e7da3b4c 100644 --- a/setup.py +++ b/setup.py @@ -60,6 +60,7 @@ class _Develop(_CompileFlatbuffMixin, _develop): pass 'onnx-tf==1.2.1', 'graphviz', 'toml', + 'ortools', ], extras_require={ 'dev': ['pytest'] From ae052c90000974c71321e80b6fbfe512b2f9a5bd Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 28 Feb 2020 09:23:41 +0800 Subject: [PATCH 032/117] lock file update --- Pipfile.lock | 1044 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1044 insertions(+) create mode 100644 Pipfile.lock diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 00000000..0c7b4cd7 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,1044 @@ +{ + "_meta": { + "hash": { + "sha256": "2d2fa0bb78c2073c03bb527a14d8cc8dee5629f499f975395f44c66a86c87e3a" + }, + "pipfile-spec": 6, + "requires": {}, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": false + } + ] + }, + "default": { + "absl-py": { + "hashes": [ + "sha256:75e737d6ce7723d9ff9b7aa1ba3233c34be62ef18d5859e706b8fdc828989830" + ], + "version": "==0.9.0" + }, + "astor": { + "hashes": [ + "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5", + "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e" + ], + "version": "==0.8.1" + }, + "attrs": { + "hashes": [ + "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", + "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" + ], + "version": "==19.3.0" + }, + "click": { + "hashes": [ + "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", + "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" + ], + "version": "==7.0" + }, + "e1839a8": { + "editable": true, + "path": "." + }, + "gast": { + "hashes": [ + "sha256:8f46f5be57ae6889a4e16e2ca113b1703ef17f2b0abceb83793eaba9e1351a45", + "sha256:b881ef288a49aa81440d2c5eb8aeefd4c2bb8993d5f50edae7413a85bfdb3b57" + ], + "version": "==0.3.3" + }, + "graphviz": { + "hashes": [ + "sha256:241fb099e32b8e8c2acca747211c8237e40c0b89f24b1622860075d59f4c4b25", + "sha256:60acbeee346e8c14555821eab57dbf68a169e6c10bce40e83c1bf44f63a62a01" + ], + "version": "==0.13.2" + }, + "grpcio": { + "hashes": [ + "sha256:109d3a9aa4728f2a30b34bfd12d1d9bd5f5430cb51c983955309de2ab938f0b5", + "sha256:183c4bfeac07d2ffd7e462fc98f6bbb25718e80d252162ff80abc5249730f16b", + "sha256:374cf9033c42dc36084d0d20a9f92d792f0f44f6fc44c01e9d3a6d65d15c252f", + "sha256:3a2016a51c8668e87fd40af1e02d42e9fad90fdf7c5ba65e0a7d9b76f566513a", + "sha256:3fb35b3428ee877fa8236982d97fa539bb937faa3d15f1651fbb8b1df111467e", + "sha256:40772044359b744ab0357db7918307f26bd9336b8ca1ec1e0691112f8d70bb89", + "sha256:50f01cdb337f8020b20afd304f5b361156fcb5a74226fbb6f02076544213c0d8", + "sha256:6fa4fdd8c1668848e3decd6f3765edbfd028972720be399763e360ce267cb657", + "sha256:7c2fe5a631ee42e6e65d5e7698fa102f2097dcebc77f3516f572f7d865c23894", + "sha256:8de53c6320ebd54868713250ab9a6b117552e7f77d33d669aa39bd799a9aad57", + "sha256:979ae7b022a0a352df5d3625f3549eaeae525698460c7dd15f4a1d8902ee5b2f", + "sha256:a0fbb6fc41e9dbe3831cc97c64077d1e05cb71ba57eddcbf7f2e5a3bf0251bcf", + "sha256:aaf99d0db5f2ea57303d735d3ace68aa941c4de8048cb61dd50e4b8b76bcfe74", + "sha256:bae2d171b43bafb44d3c459e9e6f9573b26517f67cad5330c9a9a1000a598e8c", + "sha256:bda2ed8c6bab7749f0d8fae5c2e2fa50ad1901caea6de76b2159f44550642950", + "sha256:bdf61c33536b03c7f4f5268fe3811a238063418294698d118cb04ebb9b3fb793", + "sha256:c6d79360a7cfed9531f08d92dbc9d1ae9aff401d767f3bc610558617adf895b0", + "sha256:c88d5c76dcbb01cd466cd16144797fbba3c31c2bb8972f3b8cfb392ffbec727a", + "sha256:c905fa65356903424f3942872f0635bbb62bf017c54cd645498efd7b0c871c9f", + "sha256:d24acfb3b15a22c69a5558009f0f107daf11fb9954886b6fea8d2b20388b34ff", + "sha256:d50966b58109f726820a23d029fed25762ae9055c9f77ba715e6bd007968d480", + "sha256:dbc5a413bb9d530f6ef3c265476f351fc80ea5510b4ccdabf7571032161f11c4", + "sha256:ddb922c15c8769db146b759209fd6de20cca313ee200a026fff96a43f1699522", + "sha256:ea1c6caaa67262caddb2eea03c9f47a2021ac70a005b388fc33cbbd1e6809262", + "sha256:ea681b433728f690f8519e8d3e2c5d77c3b6b691fb2e017eb79b0a8497885f30", + "sha256:eb7cb6f4b681f30d0b3accb87eae4fc2a4ca2116ea5b83fd98b6869ba64fbb24", + "sha256:ef902a609be05e69e63126cd8ba6c4e8a28a6435c1b759169bd7162fb09fec1b", + "sha256:f0200ad9556eaa0b14549b2292227a658c6963e576d4ac0cb3a3ecc7fd56629c", + "sha256:f59ee620e4de94f307c6860bc37255a3c9f35c672d13939c2497120102cd69c2", + "sha256:f7403d8f8322612a9e9b7d37c5da770781e473e72735c01cad886568a7461f53", + "sha256:fa33a7c99059c2cd35016db66777b8349a0d83f07a3fcc62fd451c3dbae7c3fd" + ], + "version": "==1.28.0rc1" + }, + "h5py": { + "hashes": [ + "sha256:063947eaed5f271679ed4ffa36bb96f57bc14f44dd4336a827d9a02702e6ce6b", + "sha256:13c87efa24768a5e24e360a40e0bc4c49bcb7ce1bb13a3a7f9902cec302ccd36", + "sha256:16ead3c57141101e3296ebeed79c9c143c32bdd0e82a61a2fc67e8e6d493e9d1", + "sha256:3dad1730b6470fad853ef56d755d06bb916ee68a3d8272b3bab0c1ddf83bb99e", + "sha256:51ae56894c6c93159086ffa2c94b5b3388c0400548ab26555c143e7cfa05b8e5", + "sha256:54817b696e87eb9e403e42643305f142cd8b940fe9b3b490bbf98c3b8a894cf4", + "sha256:549ad124df27c056b2e255ea1c44d30fb7a17d17676d03096ad5cd85edb32dc1", + "sha256:64f74da4a1dd0d2042e7d04cf8294e04ddad686f8eba9bb79e517ae582f6668d", + "sha256:6998be619c695910cb0effe5eb15d3a511d3d1a5d217d4bd0bebad1151ec2262", + "sha256:6ef7ab1089e3ef53ca099038f3c0a94d03e3560e6aff0e9d6c64c55fb13fc681", + "sha256:769e141512b54dee14ec76ed354fcacfc7d97fea5a7646b709f7400cf1838630", + "sha256:79b23f47c6524d61f899254f5cd5e486e19868f1823298bc0c29d345c2447172", + "sha256:7be5754a159236e95bd196419485343e2b5875e806fe68919e087b6351f40a70", + "sha256:84412798925dc870ffd7107f045d7659e60f5d46d1c70c700375248bf6bf512d", + "sha256:86868dc07b9cc8cb7627372a2e6636cdc7a53b7e2854ad020c9e9d8a4d3fd0f5", + "sha256:8bb1d2de101f39743f91512a9750fb6c351c032e5cd3204b4487383e34da7f75", + "sha256:a5f82cd4938ff8761d9760af3274acf55afc3c91c649c50ab18fcff5510a14a5", + "sha256:aac4b57097ac29089f179bbc2a6e14102dd210618e94d77ee4831c65f82f17c0", + "sha256:bffbc48331b4a801d2f4b7dac8a72609f0b10e6e516e5c480a3e3241e091c878", + "sha256:c0d4b04bbf96c47b6d360cd06939e72def512b20a18a8547fa4af810258355d5", + "sha256:c54a2c0dd4957776ace7f95879d81582298c5daf89e77fb8bee7378f132951de", + "sha256:cbf28ae4b5af0f05aa6e7551cee304f1d317dbed1eb7ac1d827cee2f1ef97a99", + "sha256:d35f7a3a6cefec82bfdad2785e78359a0e6a5fbb3f605dd5623ce88082ccd681", + "sha256:d3c59549f90a891691991c17f8e58c8544060fdf3ccdea267100fa5f561ff62f", + "sha256:d7ae7a0576b06cb8e8a1c265a8bc4b73d05fdee6429bffc9a26a6eb531e79d72", + "sha256:ecf4d0b56ee394a0984de15bceeb97cbe1fe485f1ac205121293fc44dcf3f31f", + "sha256:f0e25bb91e7a02efccb50aba6591d3fe2c725479e34769802fcdd4076abfa917", + "sha256:f23951a53d18398ef1344c186fb04b26163ca6ce449ebd23404b153fd111ded9", + "sha256:ff7d241f866b718e4584fa95f520cb19405220c501bd3a53ee11871ba5166ea2" + ], + "version": "==2.10.0" + }, + "idx2numpy": { + "hashes": [ + "sha256:c609d5b260e6e7b538d458ba266c55b5b478e43e581d24d7017351813e67fcae" + ], + "version": "==1.2.2" + }, + "jinja2": { + "hashes": [ + "sha256:c10142f819c2d22bdcd17548c46fa9b77cf4fda45097854c689666bf425e7484", + "sha256:c922560ac46888d47384de1dbdc3daaa2ea993af4b26a436dec31fa2c19ec668" + ], + "version": "==3.0.0a1" + }, + "keras-applications": { + "hashes": [ + "sha256:5579f9a12bcde9748f4a12233925a59b93b73ae6947409ff34aa2ba258189fe5", + "sha256:df4323692b8c1174af821bf906f1e442e63fa7589bf0f1230a0b6bdc5a810c95" + ], + "version": "==1.0.8" + }, + "keras-preprocessing": { + "hashes": [ + "sha256:44aee5f2c4d80c3b29f208359fcb336df80f293a0bb6b1c738da43ca206656fb", + "sha256:5a8debe01d840de93d49e05ccf1c9b81ae30e210d34dacbcc47aeb3049b528e5" + ], + "version": "==1.1.0" + }, + "markdown": { + "hashes": [ + "sha256:90fee683eeabe1a92e149f7ba74e5ccdc81cd397bd6c516d93a8da0ef90b6902", + "sha256:e4795399163109457d4c5af2183fbe6b60326c17cfdf25ce6e7474c6624f725d" + ], + "version": "==3.2.1" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", + "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" + ], + "version": "==1.1.1" + }, + "mock": { + "hashes": [ + "sha256:2a572b715f09dd2f0a583d8aeb5bb67d7ed7a8fd31d193cf1227a99c16a67bc3", + "sha256:5e48d216809f6f393987ed56920305d8f3c647e6ed35407c1ff2ecb88a9e1151" + ], + "version": "==4.0.1" + }, + "numpy": { + "hashes": [ + "sha256:1786a08236f2c92ae0e70423c45e1e62788ed33028f94ca99c4df03f5be6b3c6", + "sha256:17aa7a81fe7599a10f2b7d95856dc5cf84a4eefa45bc96123cbbc3ebc568994e", + "sha256:20b26aaa5b3da029942cdcce719b363dbe58696ad182aff0e5dcb1687ec946dc", + "sha256:2d75908ab3ced4223ccba595b48e538afa5ecc37405923d1fea6906d7c3a50bc", + "sha256:39d2c685af15d3ce682c99ce5925cc66efc824652e10990d2462dfe9b8918c6a", + "sha256:56bc8ded6fcd9adea90f65377438f9fea8c05fcf7c5ba766bef258d0da1554aa", + "sha256:590355aeade1a2eaba17617c19edccb7db8d78760175256e3cf94590a1a964f3", + "sha256:70a840a26f4e61defa7bdf811d7498a284ced303dfbc35acb7be12a39b2aa121", + "sha256:77c3bfe65d8560487052ad55c6998a04b654c2fbc36d546aef2b2e511e760971", + "sha256:9537eecf179f566fd1c160a2e912ca0b8e02d773af0a7a1120ad4f7507cd0d26", + "sha256:9acdf933c1fd263c513a2df3dceecea6f3ff4419d80bf238510976bf9bcb26cd", + "sha256:ae0975f42ab1f28364dcda3dde3cf6c1ddab3e1d4b2909da0cb0191fa9ca0480", + "sha256:b3af02ecc999c8003e538e60c89a2b37646b39b688d4e44d7373e11c2debabec", + "sha256:b6ff59cee96b454516e47e7721098e6ceebef435e3e21ac2d6c3b8b02628eb77", + "sha256:b765ed3930b92812aa698a455847141869ef755a87e099fddd4ccf9d81fffb57", + "sha256:c98c5ffd7d41611407a1103ae11c8b634ad6a43606eca3e2a5a269e5d6e8eb07", + "sha256:cf7eb6b1025d3e169989416b1adcd676624c2dbed9e3bcb7137f51bfc8cc2572", + "sha256:d92350c22b150c1cae7ebb0ee8b5670cc84848f6359cf6b5d8f86617098a9b73", + "sha256:e422c3152921cece8b6a2fb6b0b4d73b6579bd20ae075e7d15143e711f3ca2ca", + "sha256:e840f552a509e3380b0f0ec977e8124d0dc34dc0e68289ca28f4d7c1d0d79474", + "sha256:f3d0a94ad151870978fb93538e95411c83899c9dc63e6fb65542f769568ecfa5" + ], + "version": "==1.18.1" + }, + "onnx": { + "hashes": [ + "sha256:051ac54cb08d9a1ae0dec5fbd79c7604ceb97ddb678bc4145e49a3f4da5d928c", + "sha256:0cae2a5511cf8522aea726507abad2aa85a5406f5ff7232ba937aadf71f77220", + "sha256:130d63b6f7bfee367c7693350fe4caea6b7067d254704bb20d136c6e7460ec56", + "sha256:3b88c3fe521151651a0403c4d131cb2e0311bd28b753ef692020a432a81ce345", + "sha256:40a47587025092c9d033f50fe4b9395c021539bcacbbaa141673ecd5eeca0aa0", + "sha256:4204fca478bcf668c606470b52cd3f42b111dcf5503b32c46480cabd9b9d4387", + "sha256:42298189743d9f390890c31907bad74899bf023bbb52c68a94b1f6d534468571", + "sha256:48acb524204137bd52a312709cb52a693832cce9e72c8f39db382d826e4bb6ec", + "sha256:4a47a4813647d07cb544429e12cf5a71262bc82edd9237c4ae91219b4ef841af", + "sha256:4fbe1630e33bd8d79d4e17a23d24bd8e464871dde37cb21e648c3728d33e64e2", + "sha256:6c90c2fdb0836e6fadd093ca053d6cebd00ac4a774759002b0b0860d652a3d31", + "sha256:912264fedd3df4647b31a4b7cd167982d54b4641eaf91bc1a9982c5eb9ebcb5f", + "sha256:926f73ad969ce649ae68be1f2255d7825a703a915a2766de8ec3f73b282f154f", + "sha256:988e20a30b38de2977f61c745ae68931ad9edbc8a687287e38555d17cd25df9d", + "sha256:9b32e04abe02cba4c4edb6c3cc15db917e734521ca8631e46bea3971a142d709", + "sha256:a78d7f0b784b26890f50cb48d7b1718db63f10ed3196cb023dd70631001c73a3", + "sha256:a7e3ab3e81684bc75ac5476b5f2c690ad8d250bc8ece02eed5445c115577e6e4", + "sha256:c67867a426eb661c661d7b2adea5c7876d7c5478b8d5af3c26bb40839b06e8c5", + "sha256:d169bebc845e9869f229b8e3f65e3144e647a251ae9594efae52de23502d6b13", + "sha256:d390ed80b8b1cffa23e25cd4e4a3f3a95c70f438cf5f160659f74f4ab5f6ee04", + "sha256:f21a7ea757cea83067ce0d2f98b701a5980b0166fc0c0f1202550fdfe16a1c80" + ], + "version": "==1.6.0" + }, + "onnx-tf": { + "hashes": [ + "sha256:0ecd83e481edf7024de1e191f12414c80dbaacadcea7f6abc85fe547c5649ff5" + ], + "version": "==1.2.1" + }, + "ortools": { + "hashes": [ + "sha256:026e6556f3138be64fffd56cffe2ee8fabbd5d269ebee3fa24b92ce7fbabddd2", + "sha256:056f01e9b147610d88fb0f80dccd3aa8a0f9ce73a35a7e1c3e2a85c791054d86", + "sha256:121ad9f122c4ea78ff2e61fc8c371f927eb8dbd92519e0af2f1fedcc73d2375e", + "sha256:2ba6b95beae46e7fb27583a75065b38657096de1a968ab24fd57bf66d396f217", + "sha256:502f6e724847424fff088b6d3647a4e8f8b909f15a9218fb361edac9bfdfb0c8", + "sha256:512863472f620eac8eaebb4d3fa76834c4c1c8fcf13a5c07987a0a527114e0b5", + "sha256:96d85e75e0276182ee82c4352121706379facf8c1e4448fc0feccc0fc1f6ed8f", + "sha256:c57f25e7052071a8707cdb44f8bf2e7e9ea026ec75ef8486ca18dccbf48381e3", + "sha256:db54ad4fa4c8a33214ab2edf8b08fbb280f4c792de4498c9b46e8377b03fe625", + "sha256:decd6b220d750c057e5a89cdfb9fc0cf6aeae84b2985bbb3ca6b07fe5f384cbc" + ], + "version": "==7.5.7466" + }, + "pillow": { + "hashes": [ + "sha256:0a628977ac2e01ca96aaae247ec2bd38e729631ddf2221b4b715446fd45505be", + "sha256:54ebae163e8412aff0b9df1e88adab65788f5f5b58e625dc5c7f51eaf14a6837", + "sha256:5bfef0b1cdde9f33881c913af14e43db69815c7e8df429ceda4c70a5e529210f", + "sha256:5f3546ceb08089cedb9e8ff7e3f6a7042bb5b37c2a95d392fb027c3e53a2da00", + "sha256:5f7ae9126d16194f114435ebb79cc536b5682002a4fa57fa7bb2cbcde65f2f4d", + "sha256:62a889aeb0a79e50ecf5af272e9e3c164148f4bd9636cc6bcfa182a52c8b0533", + "sha256:7406f5a9b2fd966e79e6abdaf700585a4522e98d6559ce37fc52e5c955fade0a", + "sha256:8453f914f4e5a3d828281a6628cf517832abfa13ff50679a4848926dac7c0358", + "sha256:87269cc6ce1e3dee11f23fa515e4249ae678dbbe2704598a51cee76c52e19cda", + "sha256:875358310ed7abd5320f21dd97351d62de4929b0426cdb1eaa904b64ac36b435", + "sha256:8ac6ce7ff3892e5deaab7abaec763538ffd011f74dc1801d93d3c5fc541feee2", + "sha256:91b710e3353aea6fc758cdb7136d9bbdcb26b53cefe43e2cba953ac3ee1d3313", + "sha256:9d2ba4ed13af381233e2d810ff3bab84ef9f18430a9b336ab69eaf3cd24299ff", + "sha256:a28aca76fac5b5e04ce42122e5407e111bd5f56dfb881d2ee07b617b020003e3", + "sha256:a62ec5e13e227399be73303ff301f2865bf68657d15ea50b038d25fc41097317", + "sha256:ab76e5580b0ed647a8d8d2d2daee170e8e9f8aad225ede314f684e297e3643c2", + "sha256:bf4003aa538af3f4205c5fac56eacaa67a6dd81e454ffd9e9f055fff9f1bc614", + "sha256:bf598d2e37cf8edb1a2f26ed3fb255191f5232badea4003c16301cb94ac5bdd0", + "sha256:c18f70dc27cc5d236f10e7834236aff60aadc71346a5bc1f4f83a4b3abee6386", + "sha256:c5ed816632204a2fc9486d784d8e0d0ae754347aba99c811458d69fcdfd2a2f9", + "sha256:dc058b7833184970d1248135b8b0ab702e6daa833be14035179f2acb78ff5636", + "sha256:ff3797f2f16bf9d17d53257612da84dd0758db33935777149b3334c01ff68865" + ], + "version": "==7.0.0" + }, + "protobuf": { + "hashes": [ + "sha256:0bae429443cc4748be2aadfdaf9633297cfaeb24a9a02d0ab15849175ce90fab", + "sha256:24e3b6ad259544d717902777b33966a1a069208c885576254c112663e6a5bb0f", + "sha256:310a7aca6e7f257510d0c750364774034272538d51796ca31d42c3925d12a52a", + "sha256:52e586072612c1eec18e1174f8e3bb19d08f075fc2e3f91d3b16c919078469d0", + "sha256:73152776dc75f335c476d11d52ec6f0f6925774802cd48d6189f4d5d7fe753f4", + "sha256:7774bbbaac81d3ba86de646c39f154afc8156717972bf0450c9dbfa1dc8dbea2", + "sha256:82d7ac987715d8d1eb4068bf997f3053468e0ce0287e2729c30601feb6602fee", + "sha256:8eb9c93798b904f141d9de36a0ba9f9b73cc382869e67c9e642c0aba53b0fc07", + "sha256:adf0e4d57b33881d0c63bb11e7f9038f98ee0c3e334c221f0858f826e8fb0151", + "sha256:c40973a0aee65422d8cb4e7d7cbded95dfeee0199caab54d5ab25b63bce8135a", + "sha256:c77c974d1dadf246d789f6dad1c24426137c9091e930dbf50e0a29c1fcf00b1f", + "sha256:dd9aa4401c36785ea1b6fff0552c674bdd1b641319cb07ed1fe2392388e9b0d7", + "sha256:e11df1ac6905e81b815ab6fd518e79be0a58b5dc427a2cf7208980f30694b956", + "sha256:e2f8a75261c26b2f5f3442b0525d50fd79a71aeca04b5ec270fc123536188306", + "sha256:e512b7f3a4dd780f59f1bf22c302740e27b10b5c97e858a6061772668cd6f961", + "sha256:ef2c2e56aaf9ee914d3dccc3408d42661aaf7d9bb78eaa8f17b2e6282f214481", + "sha256:fac513a9dc2a74b99abd2e17109b53945e364649ca03d9f7a0b96aa8d1807d0a", + "sha256:fdfb6ad138dbbf92b5dbea3576d7c8ba7463173f7d2cb0ca1bd336ec88ddbd80" + ], + "version": "==3.11.3" + }, + "pyyaml": { + "hashes": [ + "sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6", + "sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf", + "sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5", + "sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e", + "sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811", + "sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e", + "sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d", + "sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20", + "sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689", + "sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994", + "sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615" + ], + "version": "==5.3" + }, + "six": { + "hashes": [ + "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", + "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" + ], + "version": "==1.14.0" + }, + "tensorboard": { + "hashes": [ + "sha256:53d8f40589c903dae65f39a799c2bc49defae3703754984d90613d26ebd714a4", + "sha256:b664fe7772be5670d8b04200342e681af7795a12cd752709aed565c06c0cc196" + ], + "version": "==1.13.1" + }, + "tensorflow": { + "hashes": [ + "sha256:0de5887495c20e1130ae4d9bcfaf80cec87f579a9c27a84141a588a46e5aa853", + "sha256:0f305f3c461ed2ce5e0b65fccc7b7452f483c7935dd8a52a466d622e642fdea8", + "sha256:4325f20b5a703b80a5f7a8807f07ad8735025bd2a947093ffff1c26fbdc7980b", + "sha256:4c86be0e476b64cedf4ffa059d71b764e75b895effb697345687e3057929a7b5", + "sha256:6b0a0a413390302ce7c22c98695983d6fb8406861cfb418b25536f57a96c0b89", + "sha256:77eec2351d0a9b5312ea01ee4c78c13996f249cf1bead2e68256a65e533f45ef", + "sha256:87bf719a564f11d63e4f614e933e5a612dd4e67c88266b774236e0982f5fcf69", + "sha256:ba29e66331cd2a8f824e0fa937ce44bd624bc37739f2f083694e473051d89ace", + "sha256:bc374f5a662b6e164cd1c4da61ccc752ec208a44893d2f9dcf47d2a0a2cef311", + "sha256:bcf86966b7554e407bb7d73341f2e108df62a910d40b4cd2a914867f2a5de51c", + "sha256:c3abffd51c168cfd62a557243c47a29ab48deb52a64465e6818060f20755ddb4", + "sha256:c41862c65628261229db22e33f9e570d845eeb5cea66dcbaebe404405edaa69b", + "sha256:d7341617aedd73c2c847755e87697e9c19eb625c73da26d6cd669220c5565119", + "sha256:de0425b58cb34006e4500565239b4c3a3055b95bff132f097fa46c87d8e463c9", + "sha256:f21fb65c8e874f40c654bc9b3ff3db3ec26f98f03fe64a541bc768f6f5c52ac2" + ], + "version": "==1.13.1" + }, + "tensorflow-estimator": { + "hashes": [ + "sha256:7cfdaa3e83e3532f31713713feb98be7ea9f3065722be4267e49b6c301271419" + ], + "version": "==1.13.0" + }, + "termcolor": { + "hashes": [ + "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b" + ], + "version": "==1.1.0" + }, + "toml": { + "hashes": [ + "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", + "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e" + ], + "version": "==0.10.0" + }, + "torch": { + "hashes": [ + "sha256:271d4d1e44df6ed57c530f8849b028447c62b8a19b8e8740dd9baa56e7f682c1", + "sha256:30ce089475b287a37d6fbb8d71853e672edaf66699e3dd2eb19be6ce6296732a", + "sha256:405b9eb40e44037d2525b3ddb5bc4c66b519cd742bff249d4207d23f83e88ea5", + "sha256:504915c6bc6051ba6a4c2a43c446463dff04411e352f1e26fe13debeae431778", + "sha256:54d06a0e8ee85e5a437c24f4af9f4196c819294c23ffb5914e177756f55f1829", + "sha256:6f2fd9eb8c7eaf38a982ab266dbbfba0f29fb643bc74e677d045d6f2595e4692", + "sha256:8856f334aa9ecb742c1504bd2563d0ffb8dceb97149c8d72a04afa357f667dbc", + "sha256:8fff03bf7b474c16e4b50da65ea14200cc64553b67b9b2307f9dc7e8c69b9d28", + "sha256:9a1b1db73d8dcfd94b2eee24b939368742aa85f1217c55b8f5681e76c581e99a", + "sha256:bb1e87063661414e1149bef2e3a2499ce0b5060290799d7e26bc5578037075ba", + "sha256:d7b34a78f021935ad727a3bede56a8a8d4fda0b0272314a04c5f6890bbe7bb29" + ], + "version": "==1.4.0" + }, + "torchvision": { + "hashes": [ + "sha256:0ca9cae9ddf1784737493e201aa9411abe62a4479b2e67d1d51b4b7acf16f6eb", + "sha256:1a68d3d98e074d995f3d42a492cca716b0d94605a6fadddf0ce9665425968669", + "sha256:1af6d7b0a515d2a83fe9b6e7969b57ba94ba87a3333e7ed707324a5be1ef5f60", + "sha256:2bf1dc1e16c73c5810d96e4ea463e61129e890100740cd57724413a84d301e41", + "sha256:323500d349d8d91ce2662de41212e8eb1845c68dbf5d4f215ca1e94c7f20723b", + "sha256:358967343eaba74fd748a87f40ea75ca23757e947dbef9a11cd53414d707f793", + "sha256:35e9483858cf8a38debc647c74741605c5c12448d314aa96961082380aadf7e5", + "sha256:4dd05cbc497210928ae3d4d6194561985263c879c3554e9f1823a0fa43d35746", + "sha256:517425af7d41b64caae0f5d9e6b14eeb48d6e62d45f302b73a11a9ec5ee3b6c8", + "sha256:78d455a1da7d10bd38f2e2a0d2ac285e4845c9e7e28aafdf068472cc96bd156b", + "sha256:9e85ba17ff93a0cf6afd39b9a0ad56ca7321db4f1eb90d2034d3b0ecd79be47b", + "sha256:a696ec5009eb52356508eb9b23ddb977043fb82ff7b204459e4c81aca1e5affe", + "sha256:aa4354d339de2c5ea2633a6c94294c68bae3e42a4b099624299e2a50c9e97a85", + "sha256:ec7e4cd54f5ff3a889b90f24b33da1fa9fe3f78d17348965678d9503de1e4a49", + "sha256:fea3d431bf639c0719afff5972eb568ebe143eba447c1c8bb491c7dfb0025ed6" + ], + "version": "==0.5.0" + }, + "typing-extensions": { + "hashes": [ + "sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2", + "sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d", + "sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575" + ], + "version": "==3.7.4.1" + }, + "werkzeug": { + "hashes": [ + "sha256:169ba8a33788476292d04186ab33b01d6add475033dfc07215e6d219cc077096", + "sha256:6dc65cf9091cf750012f56f2cad759fa9e879f511b5ff8685e456b4e3bf90d16" + ], + "version": "==1.0.0" + }, + "wheel": { + "hashes": [ + "sha256:8788e9155fe14f54164c1b9eb0a319d98ef02c160725587ad60f14ddc57b6f96", + "sha256:df277cb51e61359aba502208d680f90c0493adec6f0e848af94948778aed386e" + ], + "markers": "python_version >= '3'", + "version": "==0.34.2" + } + }, + "develop": { + "alabaster": { + "hashes": [ + "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359", + "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02" + ], + "version": "==0.7.12" + }, + "astroid": { + "hashes": [ + "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a", + "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42" + ], + "markers": "python_version >= '3'", + "version": "==2.3.3" + }, + "attrs": { + "hashes": [ + "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", + "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" + ], + "version": "==19.3.0" + }, + "babel": { + "hashes": [ + "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38", + "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4" + ], + "version": "==2.8.0" + }, + "certifi": { + "hashes": [ + "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", + "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" + ], + "version": "==2019.11.28" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "cycler": { + "hashes": [ + "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d", + "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8" + ], + "version": "==0.10.0" + }, + "docutils": { + "hashes": [ + "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af", + "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc" + ], + "version": "==0.16" + }, + "entrypoints": { + "hashes": [ + "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", + "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" + ], + "version": "==0.3" + }, + "flake8": { + "hashes": [ + "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb", + "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca" + ], + "index": "pypi", + "version": "==3.7.9" + }, + "graphviz": { + "hashes": [ + "sha256:241fb099e32b8e8c2acca747211c8237e40c0b89f24b1622860075d59f4c4b25", + "sha256:60acbeee346e8c14555821eab57dbf68a169e6c10bce40e83c1bf44f63a62a01" + ], + "version": "==0.13.2" + }, + "idna": { + "hashes": [ + "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb", + "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa" + ], + "version": "==2.9" + }, + "imagesize": { + "hashes": [ + "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1", + "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1" + ], + "version": "==1.2.0" + }, + "importlib-metadata": { + "hashes": [ + "sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302", + "sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b" + ], + "markers": "python_version < '3.8'", + "version": "==1.5.0" + }, + "isort": { + "hashes": [ + "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", + "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" + ], + "version": "==4.3.21" + }, + "jinja2": { + "hashes": [ + "sha256:c10142f819c2d22bdcd17548c46fa9b77cf4fda45097854c689666bf425e7484", + "sha256:c922560ac46888d47384de1dbdc3daaa2ea993af4b26a436dec31fa2c19ec668" + ], + "version": "==3.0.0a1" + }, + "kiwisolver": { + "hashes": [ + "sha256:05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f", + "sha256:210d8c39d01758d76c2b9a693567e1657ec661229bc32eac30761fa79b2474b0", + "sha256:26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7", + "sha256:3b15d56a9cd40c52d7ab763ff0bc700edbb4e1a298dc43715ecccd605002cf11", + "sha256:3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe", + "sha256:400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c", + "sha256:47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5", + "sha256:53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75", + "sha256:58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187", + "sha256:5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641", + "sha256:5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883", + "sha256:682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5", + "sha256:76275ee077772c8dde04fb6c5bc24b91af1bb3e7f4816fd1852f1495a64dad93", + "sha256:79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2", + "sha256:7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3", + "sha256:8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389", + "sha256:8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897", + "sha256:9105ce82dcc32c73eb53a04c869b6a4bc756b43e4385f76ea7943e827f529e4d", + "sha256:933df612c453928f1c6faa9236161a1d999a26cd40abf1dc5d7ebbc6dbfb8fca", + "sha256:939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a", + "sha256:9491578147849b93e70d7c1d23cb1229458f71fc79c51d52dce0809b2ca44eea", + "sha256:9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c", + "sha256:a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326", + "sha256:a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0", + "sha256:aa716b9122307c50686356cfb47bfbc66541868078d0c801341df31dca1232a9", + "sha256:acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e", + "sha256:b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544", + "sha256:d22702cadb86b6fcba0e6b907d9f84a312db9cd6934ee728144ce3018e715ee1", + "sha256:d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995", + "sha256:d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f", + "sha256:db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee", + "sha256:e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004", + "sha256:e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2", + "sha256:f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9", + "sha256:f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a", + "sha256:f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f", + "sha256:fe51b79da0062f8e9d49ed0182a626a7dc7a0cbca0328f612c6ee5e4711c81e4" + ], + "version": "==1.1.0" + }, + "lazy-object-proxy": { + "hashes": [ + "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d", + "sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449", + "sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08", + "sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a", + "sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50", + "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd", + "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239", + "sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb", + "sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea", + "sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e", + "sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156", + "sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142", + "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442", + "sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62", + "sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db", + "sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531", + "sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383", + "sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a", + "sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357", + "sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4", + "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0" + ], + "version": "==1.4.3" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", + "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" + ], + "version": "==1.1.1" + }, + "matplotlib": { + "hashes": [ + "sha256:019db591268b51dd30de5f3a8bbbf69589207e2d461de91c3aa425db6f135d3d", + "sha256:14d8b073d5a23094b84e0fda7a4460215e98cc18917e8a71bb143fd18930660b", + "sha256:23c186a5c521670f831bbd1f076ef1658e07a8cce3c7e8be1da0c828e86e08db", + "sha256:2bbd55057ae22283bccca6251259dfeb6b5eaf0d7d2ce1cc963c2fb03174b50d", + "sha256:42904319a69afcf36d27acfe9dc605cad2f19175d1e7e1a51a1e6f1c6515ba2a", + "sha256:4a78312908e92f453ea554fb32290b51e4df799f4c31ec99f04c87dbb3553b18", + "sha256:647a457c42ba4bd3a989384e1961a1f8766617a6519c4e53d6d3b215fad96756", + "sha256:797cb1c5eed0f09bc7f16ae01b6cafc90e0768fd4809b7716e806ae693b10f89", + "sha256:7b59131aaa13edcbe96a0d7d2d7d3a83a39749a39e97cc701f7355c2060f9945", + "sha256:a396ea75cd64e0f730ef2a397dabcc894db702f496f2d9c3cb978daa6588220c", + "sha256:a7d917bbe3f6de06c42d25df32003a527424ff367726e7a55e8daad53d6189d4", + "sha256:b54cf89cb6400f1a8753a7b6479b6bf75fdfedff5fdb4ccc4458fadf245ae5ff", + "sha256:c40a6d3455dcd37f3726e8e289b85f9df0125afb12cc3aeb781104c6390cae58", + "sha256:d9be08267fc44f1eee2f13f603633726f6752780a72e0f0973c6ade5b35e98fe" + ], + "index": "pypi", + "version": "==3.2.0rc3" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "more-itertools": { + "hashes": [ + "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c", + "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507" + ], + "version": "==8.2.0" + }, + "numpy": { + "hashes": [ + "sha256:1786a08236f2c92ae0e70423c45e1e62788ed33028f94ca99c4df03f5be6b3c6", + "sha256:17aa7a81fe7599a10f2b7d95856dc5cf84a4eefa45bc96123cbbc3ebc568994e", + "sha256:20b26aaa5b3da029942cdcce719b363dbe58696ad182aff0e5dcb1687ec946dc", + "sha256:2d75908ab3ced4223ccba595b48e538afa5ecc37405923d1fea6906d7c3a50bc", + "sha256:39d2c685af15d3ce682c99ce5925cc66efc824652e10990d2462dfe9b8918c6a", + "sha256:56bc8ded6fcd9adea90f65377438f9fea8c05fcf7c5ba766bef258d0da1554aa", + "sha256:590355aeade1a2eaba17617c19edccb7db8d78760175256e3cf94590a1a964f3", + "sha256:70a840a26f4e61defa7bdf811d7498a284ced303dfbc35acb7be12a39b2aa121", + "sha256:77c3bfe65d8560487052ad55c6998a04b654c2fbc36d546aef2b2e511e760971", + "sha256:9537eecf179f566fd1c160a2e912ca0b8e02d773af0a7a1120ad4f7507cd0d26", + "sha256:9acdf933c1fd263c513a2df3dceecea6f3ff4419d80bf238510976bf9bcb26cd", + "sha256:ae0975f42ab1f28364dcda3dde3cf6c1ddab3e1d4b2909da0cb0191fa9ca0480", + "sha256:b3af02ecc999c8003e538e60c89a2b37646b39b688d4e44d7373e11c2debabec", + "sha256:b6ff59cee96b454516e47e7721098e6ceebef435e3e21ac2d6c3b8b02628eb77", + "sha256:b765ed3930b92812aa698a455847141869ef755a87e099fddd4ccf9d81fffb57", + "sha256:c98c5ffd7d41611407a1103ae11c8b634ad6a43606eca3e2a5a269e5d6e8eb07", + "sha256:cf7eb6b1025d3e169989416b1adcd676624c2dbed9e3bcb7137f51bfc8cc2572", + "sha256:d92350c22b150c1cae7ebb0ee8b5670cc84848f6359cf6b5d8f86617098a9b73", + "sha256:e422c3152921cece8b6a2fb6b0b4d73b6579bd20ae075e7d15143e711f3ca2ca", + "sha256:e840f552a509e3380b0f0ec977e8124d0dc34dc0e68289ca28f4d7c1d0d79474", + "sha256:f3d0a94ad151870978fb93538e95411c83899c9dc63e6fb65542f769568ecfa5" + ], + "version": "==1.18.1" + }, + "packaging": { + "hashes": [ + "sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73", + "sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334" + ], + "version": "==20.1" + }, + "pillow": { + "hashes": [ + "sha256:0a628977ac2e01ca96aaae247ec2bd38e729631ddf2221b4b715446fd45505be", + "sha256:54ebae163e8412aff0b9df1e88adab65788f5f5b58e625dc5c7f51eaf14a6837", + "sha256:5bfef0b1cdde9f33881c913af14e43db69815c7e8df429ceda4c70a5e529210f", + "sha256:5f3546ceb08089cedb9e8ff7e3f6a7042bb5b37c2a95d392fb027c3e53a2da00", + "sha256:5f7ae9126d16194f114435ebb79cc536b5682002a4fa57fa7bb2cbcde65f2f4d", + "sha256:62a889aeb0a79e50ecf5af272e9e3c164148f4bd9636cc6bcfa182a52c8b0533", + "sha256:7406f5a9b2fd966e79e6abdaf700585a4522e98d6559ce37fc52e5c955fade0a", + "sha256:8453f914f4e5a3d828281a6628cf517832abfa13ff50679a4848926dac7c0358", + "sha256:87269cc6ce1e3dee11f23fa515e4249ae678dbbe2704598a51cee76c52e19cda", + "sha256:875358310ed7abd5320f21dd97351d62de4929b0426cdb1eaa904b64ac36b435", + "sha256:8ac6ce7ff3892e5deaab7abaec763538ffd011f74dc1801d93d3c5fc541feee2", + "sha256:91b710e3353aea6fc758cdb7136d9bbdcb26b53cefe43e2cba953ac3ee1d3313", + "sha256:9d2ba4ed13af381233e2d810ff3bab84ef9f18430a9b336ab69eaf3cd24299ff", + "sha256:a28aca76fac5b5e04ce42122e5407e111bd5f56dfb881d2ee07b617b020003e3", + "sha256:a62ec5e13e227399be73303ff301f2865bf68657d15ea50b038d25fc41097317", + "sha256:ab76e5580b0ed647a8d8d2d2daee170e8e9f8aad225ede314f684e297e3643c2", + "sha256:bf4003aa538af3f4205c5fac56eacaa67a6dd81e454ffd9e9f055fff9f1bc614", + "sha256:bf598d2e37cf8edb1a2f26ed3fb255191f5232badea4003c16301cb94ac5bdd0", + "sha256:c18f70dc27cc5d236f10e7834236aff60aadc71346a5bc1f4f83a4b3abee6386", + "sha256:c5ed816632204a2fc9486d784d8e0d0ae754347aba99c811458d69fcdfd2a2f9", + "sha256:dc058b7833184970d1248135b8b0ab702e6daa833be14035179f2acb78ff5636", + "sha256:ff3797f2f16bf9d17d53257612da84dd0758db33935777149b3334c01ff68865" + ], + "version": "==7.0.0" + }, + "pluggy": { + "hashes": [ + "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", + "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" + ], + "version": "==0.13.1" + }, + "py": { + "hashes": [ + "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa", + "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0" + ], + "version": "==1.8.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", + "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" + ], + "version": "==2.5.0" + }, + "pyflakes": { + "hashes": [ + "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", + "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" + ], + "version": "==2.1.1" + }, + "pygments": { + "hashes": [ + "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b", + "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe" + ], + "version": "==2.5.2" + }, + "pylint": { + "hashes": [ + "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd", + "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4" + ], + "index": "pypi", + "version": "==2.4.4" + }, + "pyparsing": { + "hashes": [ + "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f", + "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec" + ], + "version": "==2.4.6" + }, + "pytest": { + "hashes": [ + "sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d", + "sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6" + ], + "index": "pypi", + "version": "==5.3.5" + }, + "python-dateutil": { + "hashes": [ + "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", + "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" + ], + "version": "==2.8.1" + }, + "pytz": { + "hashes": [ + "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d", + "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be" + ], + "version": "==2019.3" + }, + "pyyaml": { + "hashes": [ + "sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6", + "sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf", + "sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5", + "sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e", + "sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811", + "sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e", + "sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d", + "sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20", + "sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689", + "sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994", + "sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615" + ], + "version": "==5.3" + }, + "requests": { + "hashes": [ + "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee", + "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6" + ], + "version": "==2.23.0" + }, + "rope": { + "hashes": [ + "sha256:52423a7eebb5306a6d63bdc91a7c657db51ac9babfb8341c9a1440831ecf3203", + "sha256:ae1fa2fd56f64f4cc9be46493ce54bed0dd12dee03980c61a4393d89d84029ad", + "sha256:d2830142c2e046f5fc26a022fe680675b6f48f81c7fc1f03a950706e746e9dfe" + ], + "index": "pypi", + "version": "==0.16.0" + }, + "scipy": { + "hashes": [ + "sha256:00af72998a46c25bdb5824d2b729e7dabec0c765f9deb0b504f928591f5ff9d4", + "sha256:0902a620a381f101e184a958459b36d3ee50f5effd186db76e131cbefcbb96f7", + "sha256:1e3190466d669d658233e8a583b854f6386dd62d655539b77b3fa25bfb2abb70", + "sha256:2cce3f9847a1a51019e8c5b47620da93950e58ebc611f13e0d11f4980ca5fecb", + "sha256:3092857f36b690a321a662fe5496cb816a7f4eecd875e1d36793d92d3f884073", + "sha256:386086e2972ed2db17cebf88610aab7d7f6e2c0ca30042dc9a89cf18dcc363fa", + "sha256:71eb180f22c49066f25d6df16f8709f215723317cc951d99e54dc88020ea57be", + "sha256:770254a280d741dd3436919d47e35712fb081a6ff8bafc0f319382b954b77802", + "sha256:787cc50cab3020a865640aba3485e9fbd161d4d3b0d03a967df1a2881320512d", + "sha256:8a07760d5c7f3a92e440ad3aedcc98891e915ce857664282ae3c0220f3301eb6", + "sha256:8d3bc3993b8e4be7eade6dcc6fd59a412d96d3a33fa42b0fa45dc9e24495ede9", + "sha256:9508a7c628a165c2c835f2497837bf6ac80eb25291055f56c129df3c943cbaf8", + "sha256:a144811318853a23d32a07bc7fd5561ff0cac5da643d96ed94a4ffe967d89672", + "sha256:a1aae70d52d0b074d8121333bc807a485f9f1e6a69742010b33780df2e60cfe0", + "sha256:a2d6df9eb074af7f08866598e4ef068a2b310d98f87dc23bd1b90ec7bdcec802", + "sha256:bb517872058a1f087c4528e7429b4a44533a902644987e7b2fe35ecc223bc408", + "sha256:c5cac0c0387272ee0e789e94a570ac51deb01c796b37fb2aad1fb13f85e2f97d", + "sha256:cc971a82ea1170e677443108703a2ec9ff0f70752258d0e9f5433d00dda01f59", + "sha256:dba8306f6da99e37ea08c08fef6e274b5bf8567bb094d1dbe86a20e532aca088", + "sha256:dc60bb302f48acf6da8ca4444cfa17d52c63c5415302a9ee77b3b21618090521", + "sha256:dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59" + ], + "index": "pypi", + "version": "==1.4.1" + }, + "six": { + "hashes": [ + "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", + "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" + ], + "version": "==1.14.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0", + "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52" + ], + "version": "==2.0.0" + }, + "sphinx": { + "hashes": [ + "sha256:776ff8333181138fae52df65be733127539623bb46cc692e7fa0fcfc80d7aa88", + "sha256:ca762da97c3b5107cbf0ab9e11d3ec7ab8d3c31377266fd613b962ed971df709" + ], + "index": "pypi", + "version": "==2.4.3" + }, + "sphinx-autoapi": { + "hashes": [ + "sha256:623646ed1be7127486cab5f4e3ffc17a9327c2d2f3fce18effc39d73975a2973", + "sha256:b6b5f008edc174768a4d1fa87bc8ba1287744c9a9ff82e49064783da7a2ad03e" + ], + "index": "pypi", + "version": "==1.2.1" + }, + "sphinxcontrib-applehelp": { + "hashes": [ + "sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897", + "sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-devhelp": { + "hashes": [ + "sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34", + "sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-htmlhelp": { + "hashes": [ + "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f", + "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b" + ], + "version": "==1.0.3" + }, + "sphinxcontrib-jsmath": { + "hashes": [ + "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", + "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-qthelp": { + "hashes": [ + "sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20", + "sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f" + ], + "version": "==1.0.2" + }, + "sphinxcontrib-serializinghtml": { + "hashes": [ + "sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227", + "sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768" + ], + "version": "==1.1.3" + }, + "typed-ast": { + "hashes": [ + "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355", + "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919", + "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa", + "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652", + "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75", + "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01", + "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d", + "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1", + "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907", + "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c", + "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3", + "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b", + "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614", + "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb", + "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b", + "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41", + "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6", + "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34", + "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe", + "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4", + "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7" + ], + "markers": "implementation_name == 'cpython' and python_version < '3.8'", + "version": "==1.4.1" + }, + "unidecode": { + "hashes": [ + "sha256:1d7a042116536098d05d599ef2b8616759f02985c85b4fef50c78a5aaf10822a", + "sha256:2b6aab710c2a1647e928e36d69c21e76b453cd455f4e2621000e54b2a9b8cce8" + ], + "version": "==1.1.1" + }, + "urllib3": { + "hashes": [ + "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc", + "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc" + ], + "version": "==1.25.8" + }, + "wcwidth": { + "hashes": [ + "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603", + "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8" + ], + "version": "==0.1.8" + }, + "wrapt": { + "hashes": [ + "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" + ], + "version": "==1.11.2" + }, + "zipp": { + "hashes": [ + "sha256:12248a63bbdf7548f89cb4c7cda4681e537031eda29c02ea29674bc6854460c2", + "sha256:7c0f8e91abc0dc07a5068f315c52cb30c66bfbc581e5b50704c8a2f6ebae794a" + ], + "version": "==3.0.0" + } + } +} From 8e8ef35f84101ae0b5dc85dfacf6ce90116dde21 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sat, 29 Feb 2020 21:43:33 +0800 Subject: [PATCH 033/117] ortools mem allocation optimizer --- utensor_cgen/__init__.py | 3 + utensor_cgen/frontend/onnx.py | 17 +++--- utensor_cgen/ir/base.py | 4 +- utensor_cgen/transformer/__init__.py | 1 + utensor_cgen/transformer/mem_alloc.py | 79 +++++++++++++++++++++++++++ 5 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 utensor_cgen/transformer/mem_alloc.py diff --git a/utensor_cgen/__init__.py b/utensor_cgen/__init__.py index c8e03414..87b59bd1 100644 --- a/utensor_cgen/__init__.py +++ b/utensor_cgen/__init__.py @@ -2,6 +2,9 @@ import pkg_resources +# https://github.com/google/or-tools/issues/1830 +# we need to import ortools before tensorflow +from ortools.sat.python import cp_model as _ from utensor_cgen._extensions import _ExtensionsLoader __version__ = ( diff --git a/utensor_cgen/frontend/onnx.py b/utensor_cgen/frontend/onnx.py index fe41a1e1..544887d9 100644 --- a/utensor_cgen/frontend/onnx.py +++ b/utensor_cgen/frontend/onnx.py @@ -7,7 +7,6 @@ import tensorflow as tf from onnx.onnx_pb import TensorProto from onnx_tf.backend import TensorflowBackend, prepare - from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser from utensor_cgen.ir import OperationInfo, TensorInfo, uTensorGraph @@ -209,10 +208,12 @@ def post_process(cls, ugraph): def _handle_gemm(op_info): ugraph = op_info.ugraph output_tensor = op_info.output_tensors[0] + if output_tensor.dtype is not None and output_tensor.shape is not None: + return input_a, input_w, input_bias = op_info.input_tensors - a = np.empty(input_a.shape, dtype=input_a.dtype) - w = np.empty(input_w.shape, dtype=input_w.dtype) - b = np.empty(input_bias.shape, dtype=input_bias.dtype) + a = np.zeros(input_a.shape, dtype=input_a.dtype) + w = np.zeros(input_w.shape, dtype=input_w.dtype) + b = np.zeros(input_bias.shape, dtype=input_bias.dtype) out = np.matmul(a, w.T) + b output_tensor.dtype = out.dtype output_tensor.shape = list(out.shape) @@ -230,9 +231,11 @@ def _handle_relu(op_info): @staticmethod def _handle_softmax(op_info): input_tensor = op_info.input_tensors[0] - logistics = np.empty(input_tensor.shape, dtype=input_tensor.dtype) - out = np.exp(-logistics) - out /= out.sum(axis=1) output_tensor = op_info.output_tensors[0] + if output_tensor.dtype is not None and output_tensor.shape is not None: + return + logistics = np.zeros(input_tensor.shape, dtype=input_tensor.dtype) + out = np.exp(-logistics) * 1e-6 + out /= out.sum(axis=1) output_tensor.shape = list(out.shape) output_tensor.dtype = out.dtype diff --git a/utensor_cgen/ir/base.py b/utensor_cgen/ir/base.py index 827adc98..30718e72 100644 --- a/utensor_cgen/ir/base.py +++ b/utensor_cgen/ir/base.py @@ -4,10 +4,10 @@ from functools import reduce import attr -import numpy as np import six from attr.validators import instance_of +import numpy as np import tensorflow as tf from tensorflow.core.framework.attr_value_pb2 import AttrValue as _AttrValue from tensorflow.core.framework.attr_value_pb2 import \ @@ -464,6 +464,7 @@ class uTensorGraph(IRBase, _NoShallowCopyMixin, uTensorGraphBuilderMixin): topo_order = attr.ib(factory=list, init=False) data_manager = attr.ib(default=None, init=False) _type_to_op_map = attr.ib(factory=dict, init=False, repr=False) + attributes = attr.ib(factory=dict, init=False, repr=False) def __attrs_post_init__(self): if not all( @@ -671,6 +672,7 @@ def __deepcopy__(self, memo): new_graph.data_manager = DataManager({}) new_graph.data_manager.StorageCenter = deepcopy(self.data_manager.StorageCenter) new_graph._lib_name = self._lib_name + new_graph.attributes = deepcopy(self.attributes) topologic_order_graph(new_graph) return new_graph diff --git a/utensor_cgen/transformer/__init__.py b/utensor_cgen/transformer/__init__.py index 13a003e0..c4674258 100644 --- a/utensor_cgen/transformer/__init__.py +++ b/utensor_cgen/transformer/__init__.py @@ -3,6 +3,7 @@ from .conv_pool import * from .graph_viz import * from .linear_reoder import * +from .mem_alloc import * from .ns_transformer import * from .optimizer import * from .pipeline import TransformerPipeline diff --git a/utensor_cgen/transformer/mem_alloc.py b/utensor_cgen/transformer/mem_alloc.py new file mode 100644 index 00000000..b6489f36 --- /dev/null +++ b/utensor_cgen/transformer/mem_alloc.py @@ -0,0 +1,79 @@ +from collections import Counter, defaultdict, namedtuple +from itertools import combinations, product + +from ortools.sat.python import cp_model + +from .base import Transformer +from .pipeline import TransformerPipeline + +__all__ = ['TensorAllocationTransformer'] + +Allocation = namedtuple('Allocation', ['start', 'end', 'size']) +AllocationPlan = namedtuple('AllocationPlan', ['plan', 'total_size']) + +@TransformerPipeline.register_transformer +class TensorAllocationTransformer(Transformer): + METHOD_NAME = "tensor_alloc" + KWARGS_NAMESCOPE = "_tensor_alloc" + + def __init__(self, prune_graph=True, max_pool_size=1024*1024*1024): + super(TensorAllocationTransformer, self).__init__(prune_graph=prune_graph) + self.max_pool_size = max_pool_size + + def transform(self, ugraph): + ref_cnts = Counter() + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + for tensor in op_info.input_tensors: + ref_cnts[tensor.name] += 1 + visited_tensors = set() + nonoverlap_map = defaultdict(set) + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + for in_tensor, out_tensor in product(op_info.input_tensors, op_info.output_tensors): + nonoverlap_map[out_tensor].add(in_tensor) + visited_tensors.add(in_tensor) + for known_tensor, out_tensor in product(visited_tensors, op_info.output_tensors): + if ref_cnts[known_tensor.name] > 0: + nonoverlap_map[out_tensor].add(known_tensor) + for in_tensor in op_info.input_tensors: + ref_cnts[in_tensor.name] -= 1 + for out_tensor1, out_tensor2 in combinations(ugraph.output_tensors, 2): + nonoverlap_map[out_tensor1].add(out_tensor2) + visited_tensors.update(ugraph.output_tensors) + + model = cp_model.CpModel() + inter_vars = {} + tensor_allocs = {} + for tensor in visited_tensors: + var_start = model.NewIntVar(0, self.max_pool_size, f'{tensor.name}_start') + var_end = model.NewIntVar(0, self.max_pool_size, f'{tensor.name}_end') + size = tensor.size * tensor.dtype.itemsize + intv_var = model.NewIntervalVar(var_start, size, var_end, f'{tensor.name}_alloc') + inter_vars[tensor.name] = intv_var + tensor_allocs[tensor.name] = Allocation(var_start, var_end, size) + for tensor in visited_tensors: + inter_var = inter_vars[tensor.name] + nonoverlap_vars = [inter_vars[t.name] for t in nonoverlap_map[tensor]] + for other in nonoverlap_vars: + model.AddNoOverlap([inter_var, other]) + var_mem_span = model.NewIntVar(0, self.max_pool_size, f'mem_span') + model.AddMaxEquality(var_mem_span, [alloc.end for alloc in tensor_allocs.values()]) + model.Minimize(var_mem_span) + + solver = cp_model.CpSolver() + status = solver.Solve(model) + if solver.StatusName(status) == 'OPTIMAL': + opt_mem_span = solver.Value(var_mem_span) + alloc_plan = {} + for name, alloc in tensor_allocs.items(): + alloc_plan[name] = Allocation( + start=solver.Value(alloc.start), + end=solver.Value(alloc.end), + size=alloc.size + ) + ugraph.attributes[self.KWARGS_NAMESCOPE] = AllocationPlan( + plan=alloc_plan, + total_size=opt_mem_span + ) + return ugraph From 4a23369b7dc9c12d98a47bcf386ea7c680d5f0d6 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 1 Mar 2020 00:29:00 +0800 Subject: [PATCH 034/117] tensor mem alloc: fix bug and add logging --- utensor_cgen/transformer/mem_alloc.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/utensor_cgen/transformer/mem_alloc.py b/utensor_cgen/transformer/mem_alloc.py index b6489f36..6cb4b4c6 100644 --- a/utensor_cgen/transformer/mem_alloc.py +++ b/utensor_cgen/transformer/mem_alloc.py @@ -2,6 +2,7 @@ from itertools import combinations, product from ortools.sat.python import cp_model +from utensor_cgen.logger import logger from .base import Transformer from .pipeline import TransformerPipeline @@ -30,17 +31,23 @@ def transform(self, ugraph): nonoverlap_map = defaultdict(set) for op_name in ugraph.topo_order: op_info = ugraph.ops_info[op_name] + # no overlapping between input/output tensors for in_tensor, out_tensor in product(op_info.input_tensors, op_info.output_tensors): nonoverlap_map[out_tensor].add(in_tensor) visited_tensors.add(in_tensor) - for known_tensor, out_tensor in product(visited_tensors, op_info.output_tensors): - if ref_cnts[known_tensor.name] > 0: - nonoverlap_map[out_tensor].add(known_tensor) - for in_tensor in op_info.input_tensors: - ref_cnts[in_tensor.name] -= 1 - for out_tensor1, out_tensor2 in combinations(ugraph.output_tensors, 2): - nonoverlap_map[out_tensor1].add(out_tensor2) - visited_tensors.update(ugraph.output_tensors) + # no overlapping among input tensors + for in_tensor1, in_tensor2 in combinations(op_info.input_tensors, 2): + nonoverlap_map[in_tensor1].add(in_tensor2) + # no overlapping between output tensors and all evaluated tensors + for known_tensor, out_tensor in product(visited_tensors, op_info.output_tensors): + if ref_cnts[known_tensor.name] > 0: + nonoverlap_map[out_tensor].add(known_tensor) + visited_tensors.update(op_info.output_tensors) + for in_tensor in op_info.input_tensors: + ref_cnts[in_tensor.name] -= 1 + for out_tensor1, out_tensor2 in combinations(ugraph.output_tensors, 2): + nonoverlap_map[out_tensor1].add(out_tensor2) + visited_tensors.update(ugraph.output_tensors) model = cp_model.CpModel() inter_vars = {} @@ -72,8 +79,11 @@ def transform(self, ugraph): end=solver.Value(alloc.end), size=alloc.size ) + logger.info('optimal tensor allocation plan solved, memory span: %i bytes', opt_mem_span) ugraph.attributes[self.KWARGS_NAMESCOPE] = AllocationPlan( plan=alloc_plan, total_size=opt_mem_span ) + else: + logger.info('tensor allocation plan not found, status: %s', solver.StatusName(status)) return ugraph From 3e282a248f067740d57da8708fbbd50f00184cb1 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 1 Mar 2020 16:39:53 +0800 Subject: [PATCH 035/117] tensor mem alloc visualization --- setup.py | 1 + utensor_cgen/ir/base.py | 7 ++ utensor_cgen/ir/misc/graph_viz.py | 49 ++++++++- utensor_cgen/transformer/mem_alloc.py | 142 ++++++++++++++------------ 4 files changed, 130 insertions(+), 69 deletions(-) diff --git a/setup.py b/setup.py index e7da3b4c..03b526b2 100644 --- a/setup.py +++ b/setup.py @@ -59,6 +59,7 @@ class _Develop(_CompileFlatbuffMixin, _develop): pass 'torchvision', 'onnx-tf==1.2.1', 'graphviz', + 'matplotlib', 'toml', 'ortools', ], diff --git a/utensor_cgen/ir/base.py b/utensor_cgen/ir/base.py index 30718e72..3ba8acf0 100644 --- a/utensor_cgen/ir/base.py +++ b/utensor_cgen/ir/base.py @@ -17,6 +17,7 @@ TensorShapeProto as _TensorShapeProto from tensorflow.core.framework.types_pb2 import DataType as _DataType from utensor_cgen.ir.instr import DataManager +from utensor_cgen.logger import logger from utensor_cgen.utils import random_str, topologic_order_graph from .converter import AttrValueConverter, ConverterDispatcher @@ -173,6 +174,12 @@ def is_null_tensor(self): @property def size(self): + if None in self.shape: + logger.warning( + 'nondeterministic shape, implicit converting None to 1: %s, %s', + self.name, + self.shape, + ) return reduce(lambda i, j: i*(j is None and 1 or j), self.shape, 1) def __deepcopy__(self, memo): diff --git a/utensor_cgen/ir/misc/graph_viz.py b/utensor_cgen/ir/misc/graph_viz.py index befe3780..7e072146 100644 --- a/utensor_cgen/ir/misc/graph_viz.py +++ b/utensor_cgen/ir/misc/graph_viz.py @@ -1,7 +1,12 @@ -from graphviz import Digraph +from random import random +import matplotlib.pyplot as plt +from graphviz import Digraph +from matplotlib import cm as _cm from utensor_cgen.logger import logger +plt.style.use('ggplot') + def viz_graph(ugraph, out_fname=None, view=False, cleanup=True, colored_nodes=None, suffix=''): if colored_nodes is None: @@ -65,3 +70,45 @@ def viz_graph(ugraph, out_fname=None, view=False, cleanup=True, colored_nodes=No dot.render(out_fname, view=view, cleanup=cleanup) logger.info('graph visualization file generated: %s', out_fname) return dot + + +def viz_memalloc(ugraph, out_fname=None, fontsize=12, lw=15, cmap=_cm.BrBG_r): + fig = plt.gcf() + if TensorAllocationTransformer.KWARGS_NAMESCOPE not in ugraph.attributes: + logger.info('No tensor allocation plan to visualize: %s', ugraph.name) + return fig + alloc_plan = ugraph.attributes[TensorAllocationTransformer.KWARGS_NAMESCOPE] + topo_tensors = [] + visited_tensors = set() + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + for tensor in op_info.input_tensors: + if tensor not in visited_tensors: + topo_tensors.append(tensor) + visited_tensors.add(tensor) + for tensor in ugraph.output_tensors: + if tensor not in visited_tensors: + topo_tensors.append(tensor) + visited_tensors.add(tensor) + num_tensors = len(topo_tensors) + ys = [num_tensors - i for i in range(len(topo_tensors))] + xmins = [alloc_plan.plan[tensor.name].start for tensor in topo_tensors] + xmaxs = [alloc_plan.plan[tensor.name].end for tensor in topo_tensors] + colors = [cmap(random()) for _ in alloc_plan.plan] + labels = [tensor.name for tensor in topo_tensors] + sizes = [alloc_plan.plan[tensor.name].size for tensor in topo_tensors] + for y, xmin, xmax, color, size in zip(ys, xmins, xmaxs, colors, sizes): + plt.hlines(y, xmin, xmax, lw=lw, colors=color) + plt.text(xmax, y-0.15, '{} bytes'.format(size), fontdict={'fontsize': fontsize}) + plt.xlabel('Offset (bytes)', fontdict={'fontsize': fontsize}) + plt.yticks(ys, labels, fontsize=fontsize) + plt.ylabel('Tensor Names (Topological Ordered, Top to Bottom)', fontdict={'fontsize':fontsize}) + fig.set_size_inches(len(ys), len(ys)*0.5) + plt.tight_layout() + if out_fname: + logger.info('saving tensor mem allocation to %s', out_fname) + fig.savefig(out_fname) + return fig + +# cyclic import +from utensor_cgen.transformer.mem_alloc import TensorAllocationTransformer # isort:skip diff --git a/utensor_cgen/transformer/mem_alloc.py b/utensor_cgen/transformer/mem_alloc.py index 6cb4b4c6..13dfbbc5 100644 --- a/utensor_cgen/transformer/mem_alloc.py +++ b/utensor_cgen/transformer/mem_alloc.py @@ -14,76 +14,82 @@ @TransformerPipeline.register_transformer class TensorAllocationTransformer(Transformer): - METHOD_NAME = "tensor_alloc" - KWARGS_NAMESCOPE = "_tensor_alloc" + METHOD_NAME = "tensor_alloc" + KWARGS_NAMESCOPE = "_tensor_alloc" - def __init__(self, prune_graph=True, max_pool_size=1024*1024*1024): - super(TensorAllocationTransformer, self).__init__(prune_graph=prune_graph) - self.max_pool_size = max_pool_size + def __init__(self, prune_graph=True, max_pool_size=1024*1024*1024): + super(TensorAllocationTransformer, self).__init__(prune_graph=prune_graph) + self.max_pool_size = max_pool_size - def transform(self, ugraph): - ref_cnts = Counter() - for op_name in ugraph.topo_order: - op_info = ugraph.ops_info[op_name] - for tensor in op_info.input_tensors: - ref_cnts[tensor.name] += 1 - visited_tensors = set() - nonoverlap_map = defaultdict(set) - for op_name in ugraph.topo_order: - op_info = ugraph.ops_info[op_name] - # no overlapping between input/output tensors - for in_tensor, out_tensor in product(op_info.input_tensors, op_info.output_tensors): - nonoverlap_map[out_tensor].add(in_tensor) - visited_tensors.add(in_tensor) - # no overlapping among input tensors - for in_tensor1, in_tensor2 in combinations(op_info.input_tensors, 2): - nonoverlap_map[in_tensor1].add(in_tensor2) - # no overlapping between output tensors and all evaluated tensors - for known_tensor, out_tensor in product(visited_tensors, op_info.output_tensors): - if ref_cnts[known_tensor.name] > 0: - nonoverlap_map[out_tensor].add(known_tensor) - visited_tensors.update(op_info.output_tensors) - for in_tensor in op_info.input_tensors: - ref_cnts[in_tensor.name] -= 1 - for out_tensor1, out_tensor2 in combinations(ugraph.output_tensors, 2): - nonoverlap_map[out_tensor1].add(out_tensor2) - visited_tensors.update(ugraph.output_tensors) + def transform(self, ugraph): + ref_cnts = Counter() + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + for tensor in op_info.input_tensors: + ref_cnts[tensor.name] += 1 + visited_tensors = set() + nonoverlap_map = defaultdict(set) + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + # no overlapping between input/output tensors + for in_tensor, out_tensor in product(op_info.input_tensors, op_info.output_tensors): + nonoverlap_map[out_tensor].add(in_tensor) + visited_tensors.add(in_tensor) + # no overlapping among input tensors + for in_tensor1, in_tensor2 in combinations(op_info.input_tensors, 2): + nonoverlap_map[in_tensor1].add(in_tensor2) + # no overlapping between output tensors and all evaluated tensors + for known_tensor, out_tensor in product(visited_tensors, op_info.output_tensors): + if ref_cnts[known_tensor.name] > 0: + nonoverlap_map[out_tensor].add(known_tensor) + visited_tensors.update(op_info.output_tensors) + for in_tensor in op_info.input_tensors: + ref_cnts[in_tensor.name] -= 1 + for out_tensor1, out_tensor2 in combinations(ugraph.output_tensors, 2): + nonoverlap_map[out_tensor1].add(out_tensor2) + visited_tensors.update(ugraph.output_tensors) + alloc_plan = self._solve_opt_plan(visited_tensors, nonoverlap_map) + if alloc_plan is not None: + ugraph.attributes[self.KWARGS_NAMESCOPE] = alloc_plan + return ugraph - model = cp_model.CpModel() - inter_vars = {} - tensor_allocs = {} - for tensor in visited_tensors: - var_start = model.NewIntVar(0, self.max_pool_size, f'{tensor.name}_start') - var_end = model.NewIntVar(0, self.max_pool_size, f'{tensor.name}_end') - size = tensor.size * tensor.dtype.itemsize - intv_var = model.NewIntervalVar(var_start, size, var_end, f'{tensor.name}_alloc') - inter_vars[tensor.name] = intv_var - tensor_allocs[tensor.name] = Allocation(var_start, var_end, size) - for tensor in visited_tensors: - inter_var = inter_vars[tensor.name] - nonoverlap_vars = [inter_vars[t.name] for t in nonoverlap_map[tensor]] - for other in nonoverlap_vars: - model.AddNoOverlap([inter_var, other]) - var_mem_span = model.NewIntVar(0, self.max_pool_size, f'mem_span') - model.AddMaxEquality(var_mem_span, [alloc.end for alloc in tensor_allocs.values()]) - model.Minimize(var_mem_span) + def _solve_opt_plan(self, visited_tensors, nonoverlap_map): + model = cp_model.CpModel() + inter_vars = {} + tensor_allocs = {} + for tensor in visited_tensors: + var_start = model.NewIntVar(0, self.max_pool_size, f'{tensor.name}_start') + var_end = model.NewIntVar(0, self.max_pool_size, f'{tensor.name}_end') + size = tensor.size * tensor.dtype.itemsize + intv_var = model.NewIntervalVar(var_start, size, var_end, f'{tensor.name}_alloc') + inter_vars[tensor.name] = intv_var + tensor_allocs[tensor.name] = Allocation(var_start, var_end, size) + for tensor in visited_tensors: + inter_var = inter_vars[tensor.name] + nonoverlap_vars = [inter_vars[t.name] for t in nonoverlap_map[tensor]] + for other in nonoverlap_vars: + model.AddNoOverlap([inter_var, other]) + var_mem_span = model.NewIntVar(0, self.max_pool_size, f'mem_span') + model.AddMaxEquality(var_mem_span, [alloc.end for alloc in tensor_allocs.values()]) + model.Minimize(var_mem_span) - solver = cp_model.CpSolver() - status = solver.Solve(model) - if solver.StatusName(status) == 'OPTIMAL': - opt_mem_span = solver.Value(var_mem_span) - alloc_plan = {} - for name, alloc in tensor_allocs.items(): - alloc_plan[name] = Allocation( - start=solver.Value(alloc.start), - end=solver.Value(alloc.end), - size=alloc.size - ) - logger.info('optimal tensor allocation plan solved, memory span: %i bytes', opt_mem_span) - ugraph.attributes[self.KWARGS_NAMESCOPE] = AllocationPlan( - plan=alloc_plan, - total_size=opt_mem_span + solver = cp_model.CpSolver() + status = solver.Solve(model) + alloc_plan = None + if solver.StatusName(status) == 'OPTIMAL': + opt_mem_span = solver.Value(var_mem_span) + alloc_plan = {} + for name, alloc in tensor_allocs.items(): + alloc_plan[name] = Allocation( + start=solver.Value(alloc.start), + end=solver.Value(alloc.end), + size=alloc.size ) - else: - logger.info('tensor allocation plan not found, status: %s', solver.StatusName(status)) - return ugraph + logger.info('optimal tensor allocation plan solved, memory span: %i bytes', opt_mem_span) + alloc_plan = AllocationPlan( + plan=alloc_plan, + total_size=opt_mem_span + ) + else: + logger.info('tensor allocation plan not found, status: %s', solver.StatusName(status)) + return alloc_plan From ba5ad38a5df72b8da3fa8db19e10cd532d5b7de8 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 1 Mar 2020 16:49:05 +0800 Subject: [PATCH 036/117] minor fix --- utensor_cgen/ir/misc/graph_viz.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/utensor_cgen/ir/misc/graph_viz.py b/utensor_cgen/ir/misc/graph_viz.py index 7e072146..316b68f4 100644 --- a/utensor_cgen/ir/misc/graph_viz.py +++ b/utensor_cgen/ir/misc/graph_viz.py @@ -1,4 +1,4 @@ -from random import random +from random import random, seed import matplotlib.pyplot as plt from graphviz import Digraph @@ -72,7 +72,8 @@ def viz_graph(ugraph, out_fname=None, view=False, cleanup=True, colored_nodes=No return dot -def viz_memalloc(ugraph, out_fname=None, fontsize=12, lw=15, cmap=_cm.BrBG_r): +def viz_memalloc(ugraph, out_fname=None, fontsize=12, lw=15, cmap=_cm.BrBG_r, rand_seed=1024): + seed(rand_seed) fig = plt.gcf() if TensorAllocationTransformer.KWARGS_NAMESCOPE not in ugraph.attributes: logger.info('No tensor allocation plan to visualize: %s', ugraph.name) From c87784e62b5ab79e0419303f233960a4699b5f04 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 1 Mar 2020 22:10:10 +0800 Subject: [PATCH 037/117] python3.5 compatible (no f-string) --- utensor_cgen/ir/misc/graph_viz.py | 1 + utensor_cgen/transformer/mem_alloc.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/utensor_cgen/ir/misc/graph_viz.py b/utensor_cgen/ir/misc/graph_viz.py index 316b68f4..8161acba 100644 --- a/utensor_cgen/ir/misc/graph_viz.py +++ b/utensor_cgen/ir/misc/graph_viz.py @@ -103,6 +103,7 @@ def viz_memalloc(ugraph, out_fname=None, fontsize=12, lw=15, cmap=_cm.BrBG_r, ra plt.text(xmax, y-0.15, '{} bytes'.format(size), fontdict={'fontsize': fontsize}) plt.xlabel('Offset (bytes)', fontdict={'fontsize': fontsize}) plt.yticks(ys, labels, fontsize=fontsize) + plt.xticks(fontsize=fontsize) plt.ylabel('Tensor Names (Topological Ordered, Top to Bottom)', fontdict={'fontsize':fontsize}) fig.set_size_inches(len(ys), len(ys)*0.5) plt.tight_layout() diff --git a/utensor_cgen/transformer/mem_alloc.py b/utensor_cgen/transformer/mem_alloc.py index 13dfbbc5..8ab58224 100644 --- a/utensor_cgen/transformer/mem_alloc.py +++ b/utensor_cgen/transformer/mem_alloc.py @@ -58,10 +58,10 @@ def _solve_opt_plan(self, visited_tensors, nonoverlap_map): inter_vars = {} tensor_allocs = {} for tensor in visited_tensors: - var_start = model.NewIntVar(0, self.max_pool_size, f'{tensor.name}_start') - var_end = model.NewIntVar(0, self.max_pool_size, f'{tensor.name}_end') + var_start = model.NewIntVar(0, self.max_pool_size, '{}_start'.format(tensor.name)) + var_end = model.NewIntVar(0, self.max_pool_size, '{}_end'.format(tensor.name)) size = tensor.size * tensor.dtype.itemsize - intv_var = model.NewIntervalVar(var_start, size, var_end, f'{tensor.name}_alloc') + intv_var = model.NewIntervalVar(var_start, size, var_end, '{}_alloc'.format(tensor.name)) inter_vars[tensor.name] = intv_var tensor_allocs[tensor.name] = Allocation(var_start, var_end, size) for tensor in visited_tensors: @@ -69,7 +69,7 @@ def _solve_opt_plan(self, visited_tensors, nonoverlap_map): nonoverlap_vars = [inter_vars[t.name] for t in nonoverlap_map[tensor]] for other in nonoverlap_vars: model.AddNoOverlap([inter_var, other]) - var_mem_span = model.NewIntVar(0, self.max_pool_size, f'mem_span') + var_mem_span = model.NewIntVar(0, self.max_pool_size, 'mem_span') model.AddMaxEquality(var_mem_span, [alloc.end for alloc in tensor_allocs.values()]) model.Minimize(var_mem_span) From 8b09892ab70c12c34ee150baed558b44d31c7278 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Mon, 2 Mar 2020 17:38:02 +0800 Subject: [PATCH 038/117] remove data manager from snippet creation and update tests --- tests/deep_mlp/end_to_end.ipynb | 208 +++++------------- tests/deep_mlp/simple_mnist.pb | Bin 438801 -> 438744 bytes tests/test_ir/__init__.py | 1 + tests/test_matcher/__init__.py | 1 + tests/test_transformer/__init__.py | 1 + .../code_generator/legacy/_code_generator.py | 46 ++-- .../code_generator/legacy/_operators.py | 190 ++++++++++------ .../utensor/snippets/legacy/_snippets.py | 4 + utensor_cgen/ir/misc/graph_viz.py | 19 +- utensor_cgen/transformer/__init__.py | 2 +- utensor_cgen/transformer/mem_alloc.py | 74 +++++-- utensor_cgen/transformer/ns_transformer.py | 11 +- utensor_cgen/utils.py | 31 +-- 13 files changed, 291 insertions(+), 297 deletions(-) create mode 100644 tests/test_matcher/__init__.py diff --git a/tests/deep_mlp/end_to_end.ipynb b/tests/deep_mlp/end_to_end.ipynb index cd69e021..d61a2519 100644 --- a/tests/deep_mlp/end_to_end.ipynb +++ b/tests/deep_mlp/end_to_end.ipynb @@ -10,23 +10,8 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:36:04.135548Z", - "start_time": "2018-05-20T08:35:58.619420Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/base.py:198: retry (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Use the retry module or similar alternatives.\n" - ] - } - ], + "metadata": {}, + "outputs": [], "source": [ "import tensorflow as tf\n", "from tensorflow.python.framework import graph_util\n", @@ -36,19 +21,12 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:36:04.143346Z", - "start_time": "2018-05-20T08:36:04.138305Z" - } - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", - "text": [ - "1.7.0\n" - ] + "text": "1.13.1\n" } ], "source": [ @@ -58,44 +36,16 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:36:10.734171Z", - "start_time": "2018-05-20T08:36:10.056448Z" - } - }, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", - "text": [ - "WARNING:tensorflow:From :1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n", - "WARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Please write your own downloading logic.\n", - "WARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Please use tf.data to implement this functionality.\n", - "Extracting data/train-images-idx3-ubyte.gz\n", - "WARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Please use tf.data to implement this functionality.\n", - "Extracting data/train-labels-idx1-ubyte.gz\n", - "WARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Please use tf.one_hot on tensors.\n", - "Extracting data/t10k-images-idx3-ubyte.gz\n", - "Extracting data/t10k-labels-idx1-ubyte.gz\n", - "WARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n" - ] + "text": "WARNING:tensorflow:From :1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\nInstructions for updating:\nPlease use alternatives such as official/mnist/dataset.py from tensorflow/models.\nWARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow-1.13.1-py3.6-macosx-10.15-x86_64.egg/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\nInstructions for updating:\nPlease write your own downloading logic.\nWARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow-1.13.1-py3.6-macosx-10.15-x86_64.egg/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\nInstructions for updating:\nPlease use tf.data to implement this functionality.\nExtracting mnist_data/train-images-idx3-ubyte.gz\nWARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow-1.13.1-py3.6-macosx-10.15-x86_64.egg/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\nInstructions for updating:\nPlease use tf.data to implement this functionality.\nExtracting mnist_data/train-labels-idx1-ubyte.gz\nWARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow-1.13.1-py3.6-macosx-10.15-x86_64.egg/tensorflow/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\nInstructions for updating:\nPlease use tf.one_hot on tensors.\nExtracting mnist_data/t10k-images-idx3-ubyte.gz\nExtracting mnist_data/t10k-labels-idx1-ubyte.gz\nWARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow-1.13.1-py3.6-macosx-10.15-x86_64.egg/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\nInstructions for updating:\nPlease use alternatives such as official/mnist/dataset.py from tensorflow/models.\n" } ], "source": [ - "mnist = read_data_sets('data', one_hot=True)" + "mnist = read_data_sets('mnist_data', one_hot=True)" ] }, { @@ -108,42 +58,47 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:36:15.435585Z", - "start_time": "2018-05-20T08:36:15.431209Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "def weight_variable(shape, name):\n", " \"\"\"weight_variable generates a weight variable of a given shape.\"\"\"\n", " initial = tf.truncated_normal(shape, stddev=0.1)\n", - " return tf.Variable(initial, name)\n", + " return tf.Variable(initial, name=name)\n", "\n", "\n", "def bias_variable(shape, name):\n", " \"\"\"bias_variable generates a bias variable of a given shape.\"\"\"\n", " initial = tf.constant(0.1, shape=shape)\n", - " return tf.Variable(initial, name)" + " return tf.Variable(initial, name=name)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "batch_size = 10" ] }, { "cell_type": "code", "execution_count": 6, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:38:12.753876Z", - "start_time": "2018-05-20T08:38:12.568009Z" + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": "WARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow-1.13.1-py3.6-macosx-10.15-x86_64.egg/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\nInstructions for updating:\nColocations handled automatically by placer.\n" } - }, - "outputs": [], + ], "source": [ "graph = tf.Graph()\n", "\n", "with graph.as_default():\n", - " x = tf.placeholder(tf.float32, [None, 784], name=\"x\")\n", - " y = tf.placeholder(tf.float32, [None, 10], name=\"y\")\n", + " x = tf.placeholder(tf.float32, [batch_size, 784], name=\"x\")\n", + " y = tf.placeholder(tf.float32, [batch_size, 10], name=\"y\")\n", "\n", " with tf.name_scope(\"Layer1\"):\n", " W_fc1 = weight_variable([784, 128], name='W_fc1')\n", @@ -176,21 +131,14 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:44:06.198243Z", - "start_time": "2018-05-20T08:44:06.193588Z" - } - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "'y_pred'" - ] + "text/plain": "'y_pred'" }, - "execution_count": 12, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -201,40 +149,13 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:38:43.202667Z", - "start_time": "2018-05-20T08:38:14.106117Z" - } - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", - "text": [ - "step 1000, training accuracy 0.88\n", - "step 2000, training accuracy 0.98\n", - "step 3000, training accuracy 0.92\n", - "step 4000, training accuracy 0.96\n", - "step 5000, training accuracy 0.96\n", - "step 6000, training accuracy 0.96\n", - "step 7000, training accuracy 0.96\n", - "step 8000, training accuracy 0.94\n", - "step 9000, training accuracy 0.94\n", - "step 10000, training accuracy 0.94\n", - "step 11000, training accuracy 1\n", - "step 12000, training accuracy 1\n", - "step 13000, training accuracy 0.96\n", - "step 14000, training accuracy 0.98\n", - "step 15000, training accuracy 0.96\n", - "step 16000, training accuracy 1\n", - "step 17000, training accuracy 0.96\n", - "step 18000, training accuracy 0.96\n", - "step 19000, training accuracy 1\n", - "step 20000, training accuracy 1\n", - "test accuracy 0.9704\n" - ] + "text": "step 1000, training accuracy 0.7\nstep 2000, training accuracy 0.9\nstep 3000, training accuracy 0.8\nstep 4000, training accuracy 1\nstep 5000, training accuracy 0.9\nstep 6000, training accuracy 1\nstep 7000, training accuracy 1\nstep 8000, training accuracy 0.9\nstep 9000, training accuracy 0.8\nstep 10000, training accuracy 1\nstep 11000, training accuracy 0.8\nstep 12000, training accuracy 1\nstep 13000, training accuracy 0.9\nstep 14000, training accuracy 1\nstep 15000, training accuracy 1\nstep 16000, training accuracy 1\nstep 17000, training accuracy 0.8\nstep 18000, training accuracy 0.9\nstep 19000, training accuracy 1\nstep 20000, training accuracy 0.9\n" } ], "source": [ @@ -243,32 +164,24 @@ " saver = tf.train.Saver()\n", "\n", " for i in range(1, 20001):\n", - " images, labels = mnist.train.next_batch(50)\n", + " images, labels = mnist.train.next_batch(batch_size)\n", " train_step.run(feed_dict={x: images, y: labels})\n", " if i % 1000 == 0:\n", " train_accuracy = accuracy.eval(feed_dict={x: images, y: labels})\n", " print('step %d, training accuracy %g' % (i, train_accuracy))\n", - " print('test accuracy %g' % accuracy.eval(feed_dict={x: mnist.test.images, y: mnist.test.labels}))\n", " chkp_path = saver.save(sess, \"./my-model/model.ckpt\")" ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:38:43.221800Z", - "start_time": "2018-05-20T08:38:43.205483Z" - } - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "'./my-model/model.ckpt'" - ] + "text/plain": "'./my-model/model.ckpt'" }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -286,22 +199,13 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:39:09.259145Z", - "start_time": "2018-05-20T08:39:09.191322Z" - } - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", - "text": [ - "INFO:tensorflow:Restoring parameters from ./my-model/model.ckpt\n", - "INFO:tensorflow:Froze 6 variables.\n", - "Converted 6 variables to const ops.\n" - ] + "text": "WARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow-1.13.1-py3.6-macosx-10.15-x86_64.egg/tensorflow/python/training/saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\nInstructions for updating:\nUse standard file APIs to check for files with this prefix.\nINFO:tensorflow:Restoring parameters from ./my-model/model.ckpt\nWARNING:tensorflow:From :4: remove_training_nodes (from tensorflow.python.framework.graph_util_impl) is deprecated and will be removed in a future version.\nInstructions for updating:\nUse tf.compat.v1.graph_util.remove_training_nodes\nWARNING:tensorflow:From :5: convert_variables_to_constants (from tensorflow.python.framework.graph_util_impl) is deprecated and will be removed in a future version.\nInstructions for updating:\nUse tf.compat.v1.graph_util.convert_variables_to_constants\nWARNING:tensorflow:From /Users/dboyliao/Work/open_source/uTensor/utensor_cgen/.venv/lib/python3.6/site-packages/tensorflow-1.13.1-py3.6-macosx-10.15-x86_64.egg/tensorflow/python/framework/graph_util_impl.py:245: extract_sub_graph (from tensorflow.python.framework.graph_util_impl) is deprecated and will be removed in a future version.\nInstructions for updating:\nUse tf.compat.v1.graph_util.extract_sub_graph\nINFO:tensorflow:Froze 6 variables.\nINFO:tensorflow:Converted 6 variables to const ops.\n" } ], "source": [ @@ -314,20 +218,13 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:39:11.127661Z", - "start_time": "2018-05-20T08:39:11.120094Z" - } - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", - "text": [ - "written graph to: ./my-model/simple_mnist.pb\n" - ] + "text": "written graph to: ./my-model/simple_mnist.pb\n" } ], "source": [ @@ -340,13 +237,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "ExecuteTime": { - "end_time": "2018-05-20T08:40:11.092109Z", - "start_time": "2018-05-20T08:40:11.087863Z" - } - }, + "execution_count": 12, + "metadata": {}, "outputs": [], "source": [ "# you are ready to use simple_mnist.pb to generate uTensor implementation" @@ -376,7 +268,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.6.8-final" }, "toc": { "nav_menu": {}, @@ -391,4 +283,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/tests/deep_mlp/simple_mnist.pb b/tests/deep_mlp/simple_mnist.pb index 4609616c038933cb53fb0a68161147abc19d772b..3c0ca455957eb7002f0855a93e9c5eb96695e0da 100644 GIT binary patch literal 438744 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

5Dl^ba~_swxVbhdpq|sCT}sM z=cZSal|HI4K3WYOuUSx;%|*~8kq1$Y--y>s6`Up9IUpb%1%NC%8*dby3))GutNU0~ zygCFgisBaoOyNK8B3K$}f_6Jg0oBwsnUqyRQ=~#(CRbc9Z&;zTCAx; zuP-kDl*7^ojHUBtiphoTfn?FW=j^!VFMRi8H75OxM&%kkh>ATf%4+MzKL;o`J?lyL zRWr<3Cc(8f9%osvY$38v5)Viy)0Pj))WgyotFQZ`@1;ge8{*C%?MsD@_+{{PmmPog z%$Aol>%;7)<&WiMmLv zKDL7Ws2|w1Y6$$+xdZj%Zi}4j8ZpI5n)9beAaeD7kj3dBJ?brS-cv|Se|-XXZCyT5 z>LxTCGv{XceK6Sksp#nJr>Olni7k-70P!vXR54SIuil=8FDE=g9Zh8@HF-rYT$#!J zLMp-fW;FjE{sK0X=@n#lLporRxLfi#JJCJXGRq3bwL`03ySPB|ecpE!;0 zSUM0y!aGQ-b}$*cObL}oDT})jXX4O1$H8sh2`EQJcHx0A6C1xCast0Iuh<~^(rGYG zY8}W;&yS(g%6$3i4OX~jXD|#~xqzQJd7f;Zr@#v`i&3)a7gL_=2qPq-VboYn>}`CF zvzjGn)valCY~ldkpFarqZ@i0xmnWcj?R9WW^~5`mO!$pBZ8=uHIHecX@n@X?3Z26aHUgImy+gAh&=j2rl7w;@r8+26s z)=~|tw@k;ZW8c7O@&e+UOD^u=0Y7QUP~ z`dxvzg++MZZWxa^Y7YGgk1<#?2F;o;VVS%+Ilto@toibYH4kbBjs4Sv z_hYSS|G8!|f9aI+Fkyb5HZuz?tR?7tH+??AMTw5yB84*1dR(daAo}?@a+#0>vTnTw z^sT=GWqH4GYr%THQ?!^Ur47ajGY0YNpGq)yiY7I0Sd1}W%!DpROVzVKSwa@wlm(wT zhX=QL@`^*AeD>_K2=}dE#KSU_J!Hj~|OL2Fi&Lm7$4t!dYplM-t3Gx*87K52m{lasP@0LwWRm@D|) zB79O%two<_4L%7wZFb|wt>sQ5dUhiy2}~csH#TkHZjkDA;%RpjAS`zv%G*7_>qls^<|* zdAyOyj~zubTXRX#8Drf0p-FThF9#m_r=tIspKSetOmNArfPkQUsNVjY?Ylpk9;;X? z%#a4~CyB4bF3nTP!jaXed)9<>(lC&JstIx@UHI2QS4h${6<)aT3M~KKK|Hz@xm}d7 z=NabVv?1*XEc-f&A3otmiP;YJaPJttc^mI< zH|5cjRCvFAhLgqOLKMCGja5SnQU72%l&1M&)bMPGJCcnho{!lzsW+fCzXTQ%H?Ej& zOxKlW1CI;?ovCHGdF&|uY~x8tpDXml4CHB5`Y_t-myGda62#q;)!=Q(F6LBu4R)R( zkbUqF=oG5bu6l;$OU${eo-1aiC5U^zB*M>UI#~SJg-&{CkI6yLVc&2+Vp#2rlSAZj z(&lG)(C|3ykQhih8}5?O3u8fQw-QRedyV;K_W0Ltp6HZT3o}n0&ZX&li0c~8L$5pV zgS*dSmBfB{l(dgMaT>tw=8mDSPYedxreIWDaS?*2EF_&(yW?l|;67nc{+TPjS64V?B3Vk-rTc%0<-~xTDyD@4A#L|Z=_ERQ^_(WIV6htcSTG_4Nbf|C{+!nVp#lzgtimySM6${ugW z(!N1_)9_oM`Lzvh{R(IPA*Z1&Sx0QN#)n8uHDS9CpJ$5F*=%#Rz?k~V;p#s<-c{O- z8<%yHn3g}x|6V8trIOEHClD6g? zyWP<)-uP((|1wdDe))I_)STUsP1ECN#>J4S1Ikb%FBANdp5bM)$LQLiN;B^ZW6#`w zFie=uoYfJYC5yV*GZ{P4-hOF%?5rj8Ix~>VN|+Is>$CBl)j&FQ{ZP36W-hwOPG$uw ztJw3~QaoYs74|hRlNp}*A@&gN(36=Om>5XXPIaLdE4T;#opoZTu7;B!ITv1-I3A+Q z?fJ_y)>wb)G*r$}W}ojx!QZSpk!5ffD5VXj7Am%M){R3T`3Y!8i7Fdar%M;x-mWSq z{>)pmjLD2!1tz7VXxAz&Y9{3M`_|opsh+2Vzx6{rw6F%QzO^HoGwwsIRxG)ma)kwK z>?R{~+sXFv^C8w%kuLst4N6`Ld;QM2w5jL`NUK}X37_|2%Wx%XzVQuokIcjuMtZbh z{4DIPA58g=Y;=xyf`#w%MKNC$`4u7a9VNOW*2>~25p)h)c1OX2o!{A8QL_OosK3=rF&ft!&y*)3%}3d2D34cSG^OT-I1MW7<^$R}NW1GlTT6YXuoc>V_iy7}cQTs21qo=dGDemgCAa``wq>r)+W zo{9K8Jr=^A`_fX4S}3Yb2WXKH*OW@5XpcF@80>*Fhsv0L!(BGEBLQZJpF_*M{qSPv z6zG+U0-q7bNK%zP*XmV)kKtE|YWgLRgDa@;q=>xVeGxp8wNUk14%u=y4t~#WfXe$x z?DEk~Xe?Wd=X_>B$m^ftl>rs--@&0Y`89@XosWZ_KW^-uPP^cy zyMfW|3ViZMpg-Yic~IVkeYD4yQdv z{cvWi0*pOk%;#_Fz}W7Icp<=q9=&ow{Q03CiHcL9t%a6+&)j=rqvCLQ@S_e#)*psF z-6A{?IfU3JydrWI4&>5ceSs~hz!O^utjiO4!nsRCvBx{WR%eC4J2->a8q1-po#E1% zrqt=jSvZ^%0Ir+TA;%yEm;Sj4FFFk9RQWeVMz5~Q{_ZGv)Bi)%GXmMtO9;8)-@tWe zKh8P$5KkX>TK--$-gOBpqM9a^Sy+&|B#p^y~mX2|Ix;4R)UjkAj>^ofZev% zMB`ZqlpIi}O^1rB)@7VyfpR10p;>oHz;;In5vgI0w>-3H5ju5vJX!U6IEvr+!{%k_ zup~e@t6a9jMQ>F3uK+ndMoN#H4z|P{#t(6YYirfF^3{CPsH@-$lenZ@KlyO8R$#b1 z!$3HO)F9%`%nYE&$A`{XOF{$oP{(aWjEYQ)1-?}9>TuO z3Y4yJCI3}P!kQtP-0Jg7d=#oFl9SS=;m#vyal;j;o_X!5;kYDnI?dJ3U>3?6{GMbbKDn?H%g5xif!hgNC-TRYPY1A|I(2$u#%lba zIhbBau*ETlcHx}k_VlTpB-J^mPNx}rqQwRk;w2-2F9OHnijJ>LHMI~l9dC$3Z)M_g z5)EHf9kG3KEquB265r2N<6358s@`e$6X)xd@Ps#zXpasiCGjc=@mJ5Z-+ORzFAK3n$4$Gab!Eu`*J2aydB8^($_2LJj?Mc(| z;N^UHH&>Mx2A2>Wm2*I+N`q!fFP0QtgvYD_b>&p)DNRd=Nh&}Us>^?_zW`eC>X_~M zA5qw6#Al~YVlrup{LFqG{_<)Ae3TdoXnBDxGMz(zhAksw?HPHvFai^U=iqst4srjP zOL+cJ8os)a%SOGKfa7P4ARfPa@V|q)Fu+vkl*}Jb7r2{YWuYbwe_IX5pA>_$R~4jt z&E%>s!kJ&lcqm*?hK6<8FznC>YBMK@Y}FKYZU#T_W7Bmk4Y>>(JKY@b|AJm51wY!nm)G2u{p_^y;M~OF^Dj84I4qYo)OMq9m=z+YVI; zGA!^vHBKXg$(>t=;Zv;vPhN2YahZq@zHh)~`$E_Tf+)ElX6J3xAug z;nBrDu5c!a_^@We_L z7l-eL3FmF7MN2EVh*ygW3NOIRh;w-ARW>;6U5d3OA4p-{1FX!|MX96*j8z`R2bnT- zr=}F2AjhEdLKnN!luQC1PlM3Ht8n1Md8Y}9{X|9f2Wl+82LFbZ!FZ#cP^Y9!{#Z;C zIZqye`wwNq5xECqy9K+TICegLKWG9EF&see2Q;!HV^1*4>qX40LyLCljpE7IITi;= z)ASqnL`(Wo$g*1}vFdg#^gncF&P_#Z>%RSLX1oF{w#*l4SI+?V<~1y=q=QxIEX9T5 z@emsQ3qKxh1FcyJkhtpuY&oe){eJGpZ{kLlu=fO6-MXE5yHznTxGO##c1!T%P2h^> zGl@aADfw~jBK*v@hJF9E=-}B)(Ktl{rlsb?O3PHTd|egU`TRHDnJdF3ZL;8J_yk-Z zWk6qaFc7xn=s*7z^AtJ;W8o}mxql0+LJono;7Cx9GeX&fm(0n%8otTwgW=@@FWY7Z zJNaP-eCp5=&c{!|(Xb6|GhJa)UI7LVyhRo}O7IabOL0bW8`wErhKXHwfbZS~$2VtU zXSy~`(NTc4>;&qm2LY%b#8NL4JeDqGiZ*59rZsD@Vr)667kl%bG2hr9$3gHQIRM91b&z(010&OIyt)>I9s+zVWMxf7btd(*8^ zv*7#68K699J<0I0;NkP{gZHL*@T}O3(hcDl;r0X;4qAwht`uPF$C=QXn$P}hZmC#) zOcE@n^}*T*FR)r_jLid|k{^)6zW@0HHrK9#U-Dh%diXM!EZ8n;TGJQEyYenu?5)E$fTyV|a5qpO|f*(I4plZ-!z9b?OzpiS5+l~_Gv2vvNp5+8yQd@-``#*_!Z3yNqo<@fq zoJ$YfpAYY5K7x+-mi$}N3FbC_H}fdpjAwk5L~9qlK>NpA=%n}eJt%ZO>E;kD3n8RPI9JT_=9O&x{|F`#~bh=Hm&Y4tP)&C8A#b!gD7J1}s1@-7Gk! zHeSP*ubM&arXL1I%pgx@ra-{p$#_w55Y8)Cq#CdP!1U~!B(VG%Ittv&E#e@S`>l+n zwI3i~x<6NySrlRIR%5Eu{{U^%$3nZZn2j4E!C{Oc>~-}x%zzN6PR11LH%E4vuU?&=&Lt-pirCxMVS^Pe_9&K-*}2q38zq9eH}PC z{9u)NIuKNNiyhUnf&6v0^xb!@sz=|K^BlM1V#&*~m>j>91((f(??TQgDWen*JkX;N zHZSnkD}9*z{Dipb#sD7Ib{7C|au1a@8Cb{W<`j3QWlK zKNakB!#s>?-pJm>bwWbyJ2bsAjvTq30mfMZzy6{$TBeDa$vk`d;zahi#Mp02@uN!NjKn;HF_3u1%~U)s8K2o)(~t&J*~OH-64VwGvg_EmO*o2wI*o>ESZjhRl}OFrTzpKWB#OHW*$vk5+| zjm8=x(I<{EME*YGvdX&wcR!FR+-zW-Q?SQ?@}?Ez229CFfl znUL#NgR1AliQc6Oa(hKI9FV}?v#PliRHn^AqC1qaNT(LwDBde;*=N&450t1D=!A=<2_z7-{i><*nXB`YbQvAi23j zdu=3}IZqQ_9U8!gjI0y6^bg|aj~mdMt-_8nREJi2e}?KSLTB(`JZNQ0W7u(lnZo6$ zbDar&B-23Z$0$;j5!U?0)LDkoh zEfHn|#nDEXaq}3wDj!TQT}kH866(jh7#G8W!6SHmiUM)}xKLp8`~dUa5~%iXISzzs zfxonx3>MrWXUCL4dEXKEs4;@RIBE@dja2!}NL45rrV5Qq>~Yu93H+7d&#{RTR+G02 zK!B-$hoLb&cxnvJwGh$qY!KbJHV^30k!+>@CaCb(%FW|6=uzVj5O<&(VERQke^7=S zysm|q^+oXhRu60o?_i^LrJ>cAFK~DJV*1i~8+!tEcbgX zSjx7*fD0V_%`z}YQ|7_FUnk7n8^&SJ$5??$7XmR(KA2Le%F_#F zVORY+(&XXHyVX9!-x&hKVE%G!YK<1~a<=^Bp1Jg9!X$F0&>3Pym%xX`!SgBm#CPrv zfmDA32wwRGUbe)Lr$QDzPfmt@7IOFgMpxn0;Wn&ZvWb0FvV`PxN6gat%ye$=l3dE=I*4CvXqh-^x+g(T}%@!G$)37HWEuNo@ggHZrD%oq*! ztM{VQ+8Rjt_#fmfp2+oX$%$qRUc@n34>zQD!G%c#y$>nD_q!ZC*eJY^X+sMIj!wzs zC9tUX8iZfhhqL#b(Y5C|Iixy^hWrpXzBX@h=V(K2?Abvkxu}E6^~EIpsyZ{( zra|R{DzW+3ne2n`toXblU-T~t$~c3c|h96KMhHM8*3 z5lUzDN^=L|0k<+;%adUw{{XCvvZSTi{06 zMBE{|jQ6D}eGu?Q+!JdGVa?CkrTw#DcC8GZGHEbB{zQS%v$NUZFH`W6rX%+{ZG&N( zW5iEQU&8qF@;r9bc$C;bfV$hr(F1P(#3Q5Kc(7L%`tB9@A2C{JbnqDqequnftd4^B z5F==BjDwc(kwjj2U+zc>qtX4j;PY%M8?fjC$_2E5N|PryS|U%grQP{Txk0=puVei9 zxx?w%`>AlgPzrxti^pSI2GAX6QdwF~wczRqgn}J0&>a#@e2SBKgV}6)`Q}CVRFX%+ zeFkxsw;1P)lcC{Tg3J}v*X`Z_{-eV|zQ+*u zl#UYBs;cndlS$;;Lcwd2sRpToRwB;60x{+>Xe?v{9&eq()_)bKUT$N+boq4Lwq!NZ z`Hx`tsu;1X+H%6){bXJPW3cOlGyF(B4R-&gVaEdpIFTjK-~H90*$a*6M1_g8%WWNz zTJua?)se>zZjd6eFDvl-*D-j3jNzdskHK%%0vhf53RCzHIP>8my4i6!7AK+_j$Pn1 z=qH%3I4$Ab9->0Db`=W5ZOozeKUxEJVXj0qQ2{Uv&(Klj`xZ(0($|4PjiM5uZp!!G;Q3T$Wf4ZuB%%*Wbc$5y7e|Bf5UMIZwf5 ztVwvr*Oq)tUW>n5{|VZ>yopD_&vKU z*pjM2R|xys^4zhU)qO!dQ-Nz&{#iWWWEAX}sK%D*Sdz#Gf6(x)9$A(rFo&Leb^2Ew zK|>zAgV&o*f|V!`je}mJ=e1TaFYzWXBIS5Nu?MEvn$dzbv5+&ZBOgA_;(kNDXxKwv zY+(&-mBl}J)Oj6u<}IX7`O+l7bt~xm1jCps^3WzY6(O_+YJ~G;xp9ctVr?Q;-&g@9 zzwe3qTBkzDA6r5)e?wkK1AH4I$v=#}jD;%eU|N$MFMh88rLX;A@b9}gI_Dqx^;#SM zr|3NVss8>rZbvp5C8AQPjHrxz-Uo$J+Nl(Zrf5%1G|2u6nOP0mM8!StBcxIkl9mc3 zMX5w-sNd)J2Y6hMdms0H&UwFIujg~BgamIHwVj4p+Aw*WW0>33Nm4ys;Aq)(ygIW6 z)j|{Q4EojZo%v?$-w>EFrj@n-syWMS{xh!{TYTL z?K|$!rBDUuf5o$a>IHD#_79QyBJ7tA9zczbe({s5dq8vI4(i=`g`M$^5U==Ji@K}) zF_29aRqy@@y2@VIHe~{r@+iaYQ#Qep&?tQIc_WHy&%|pwH4>x{USD==L_3YJH-1O%<(|f zYc_Uk2-bU#rA_PGif5GAaBI70^thG|Wp`iV-<&OQV1wXHwg4(GWH6PVhQU;wF43zO zLuh|`Hp?9B#xj0%lAlZcA^UJ5T817VhnyC{)gSTDb@c}Pl3j)7GO4(Hoh8ptvJu%P z&0}ZXW|AYemjza82E^L;6}K!;w`(!hg$YGd=$08}>=4<8H!EioP2FHVC(4}`TYiM1 z|GdZzPdRR_>>fUv~b7Q4>-2_ zPvHK4Q@~}k9@d=s0uv6!LE(rra^yInikk09-sD#h;Pr@{xwM&{Gk3xzKJu74K3&u+ zaDZpK15f?;gH0TmNsK#!(78tpyHm8m^z}lR`0_q9E;)xG7s8Mw?Y=(6e=S7xe1O+Y z@px6}HjN%F%WF=(#%VjcV5h$q_O(u+QRZKuZ}u#zzrRq_;CT)$;{TDZ`{}gB$B^Dl z5ju7H|G{smV1%&0P;x*@tUuit3#Pt+IQb$L`@4k<6Q9Bl_Ns78U-)fVAb9G{g}zaX zJ^z^=%6=`)M~&fqcwJOr>rsCPLeyjTqoOh>yR(pzU)UbK9cJKd2~@(vn3uxqAV*;@AzQrW&-+Pm-rh zdx<+j*W#e+QE={L6R}VpO5bkZ$zAqd!{h~KwB3u5)6ahkXW)}?RxblB`t-rK;T1Xd zC?1_A$C0aTimc4USLD}V0yX)z{NddeT<}(odw4goK%t*FXKMg;=X==gbNzVG;SFRo zTTr&_mEDiY;qc6E4a#Qx6t6HojkNj;J8&0>gHWjYZ{j_?lko!Qj22_|#b>bF@*Ylh z-3Rk(5@D~s@N2)k4+2aq;KtyQ=<($e47NTE-*hve{Mby=+4>uLM%Iv$GzA)?r_QAd zDj@FSIruQ7n|=PK%8N{d*`v_ynbEIA=Qv%0P1|hgmfxB*Gj0%mx#B=g?hk{HEeoL| zK$yi&*P@@t1(D$o87zD91~few-kWj{`Zm4AxTofPNm&${K0Qt>&cA2Yiz}eDVi9-! z6A#vb|A{00exb?9WyHu^if?vt;0u=tyYF2xTsdzK+gfxHm!^twV#+7@*Es~fhEKq- zE-9LSXaUYjeT0?o@3Cng@_~6t@mBMJRMEo`*9<)m%Ta`9R0r_2>zC8#lWl1HqV`v(84D@2xV(i~`kxZW-lRu?GCF0((yD1ClsgY_lBYh0G zUGbu$3CECs(sYs1RBGXxDx9~cajp1id~KRF$xv8B6J6`r>5s~^p($F( z={~fbIpv?IK;D@6uiFJ_dBTp&Q;}|3El2D3dx4hsQa(aY1RG4ZkO3ujNQDg8v1KE% zE7O+MuFn+QD&hF%?m~eBK9Wiq7r|G>XgH8L5WPGlx!sBD;#WpfsiCj~(Nmp7SH>&D zHfw)+two;)@BasOGk)7S-CRsnBfDVPm!;^lUx&_~@{?TJ@(#qVX;{7RAl}p31tAIE zWa-D#sA4XOuO=oDw>c%E+bKDCNU9!NjtcXlwx8&*EQt*rdJwv^UNL10f6;u6C@h<_ zglb-E!)X^B;Hty?z=UPV3XW8;RuKgPk9$pb;0*(BOlas-dvPPKbvmyJeF zmN5D&1?#C=pm0x`Itq-1EPEqra4Hmz46P6sHmUH{52pzX(PeP&bP2?!DA6%PoayrH ze3q?Sj|b%%i}TtC!t|@90>}1avCCCkT+;f5sN8eqA3A;E*$^o@w@eX6h$6%d;=AC# z-~=n*RD|Ib>8Sg#4*$#k3sZv+^A)ML(Xj9!9rrdK&rf{DJX+5|fvO&k8Y%&y1p$1Y zFwg6H{2vQk=|^Ihq`-ov4|XlKH$*q7GxWV#&$K2C2J4L7Vp-F83_N(2yURtPPfh^N z4bK*9rA(yzBU)jkeF)x^8q5b=Iggi^IqMF1iJB`DLEURKJ-nxd9Unaf{rb-{yfvGu z*%(u&E${H3p&i^W@`pLUcDGX&12!IvVqVbDN4&uq1uopuo)C7c0rPl9@$SkOY>omi%M=(G`V7b3m4!GQ&DA6O z#Ur@{efgl2G;J1`u3JsH?`UDJ?{^-vgq~IMMjL#n?g(wcConW!g6e>csC~EK6aKs& z{^rY3`@nmsU~4I!zad<7WBVnxwPhgPEk8+oYNsl_H0mB`wk%*nRWsqYvnx^|XL!eQ&<3T0YgE9%F+!zB2-QMlQppZkDdL)u)Ih}=ICtY%5swKbOZbfY_ zslYwG7&7)p3@bD9CZ2I0C{tqw!`~ z2)XQ&1kEcyV4t}LE!Q}NW1|j3@@!SUeBf##H`j(%3ZL)i)F9-)uj7aZ9oT=)o6fMD z0x}*qSb%C4xHoJOhwPuia&~s z;tL;~=+#6GUi*C%T3?o?@8$eq*d%8dba!ubP3BlBg@rl zW7z)FFJQqcDcb$~04Xb%p!pU*n4{oty8j5lN#hF(C*iQXzZ}gk9fJFxH-i7!i>y$b zgT6ACc~{V5(%$q+==WQ*t%>Vl2(Z$?i#|IW()nufvZ4!qycq1IS@Uk6qYnj z(>1$Vf0XeiEYEL zMbDtW#@KVSdqcS2^(2vn)meDB$3R>Z@I~aObb_b`Uc^rcv&52vqQ$kR$I)<+{{8r6a7&`wLEWZ`Y;x*dX_<+OY!U;{3iChOW29BoZQ@-P;|L0=Zbck^L z4oAbCFwWx#Ze13Mi&uuhnxh)v3qf?(`Dj+KsDylo^`zg7HR-M)`$d`Z8IT&Bfq`kW zsL?-rbT4Rye`F!XjAVRU;|3;`;Q-BJgE2QXfy`)H0jqtliWIDDujd#n zU3^!4751w}V(oAP`+uV7{}X(2f)JQJ1F z7ZA^@<>>pw4D#>glldMItg_}OM(Nse{RN9)`1B*9jfz5M^ZO@(2du-!+&(0@&^~~L zb-76N@g2E)X%gn&9L+cV8Oyglt$=S&RgyQ!^mCo!7}TH{hx(YyYja+{UxmHtdJXRvCVz`#!yZ zVaxxBsrDH-pqY=+9)kZ3voPWFa60r~6%@aY5~<7+IEN|^Sc_vN+U_qz4+%#SC+|%t z*Pyy<#$$B;ed4{-9eV@Uz@!B|Et)0;Uq4;}XZKn%VU#hum)OfjZk@#s zZ@bSFHY(sq4-tHr{~RM*y}87ZCXhEB12;$Xmb|Hb2AM}=AVj|l+P@zM``0c|aO?qY zu#;tm%Sy0ztSW7@6PS+!Q{hEMmFSJ!a31zZoy!F!V7qAuoJu?bGd!ka|A$Ay>`#Vk z=S~;cIl^6}uz?)(b7hvdW<76yWd#K^*3FGa35&&RI*)NrB8>4Lh0j*=5aN$g6& zC_ec^GSDPK=lFleT_hCLYv%B=Ztakp^A`7)o8yvcl-qeO2Z!6Qv3t!Oul5XDSDQB+`s_oe0Gu-xQSx4iz#oQA}^pPzu%SS>$R%nlfF7-02xW zhopam{EqWzalR63W{U9f@^O5v;a?1he1m(BpTOEiZT_I67yb$zbB*TdxQDBg&bf6k z+F6@NjoAw^8B_7@8D&~%q{%xw7ocj`U8eqfB~>|YO8qXL6|qsOH1YCKx>7WR?#~@4DGLrx3b<|mNnBGe?nYa%VMUcV>zt3kJ}d^f5w@ zXDnVSt;1>Oy@U>?A#VGAgoUpAf)33;g)TunT8B$f|3^iTXFmeu7kpq|E0dYF@m=)! z{s6)v%wf{+J?QpW1Abi9U=QRZ=^%e=x+(1#c#VIHuO4iNi<(GEDtC%YmXE_Rwn235 z)Ck!3(jV5U9LIL)jj-rQCR>v{oT>(V6c71VgpaP;LxWg{o--*#tzB1Gi~MC+H(vk( zjP-}*kEX*|87DqVR*xUOIZUj&_YX#f)(X#44@$W&jQW*|f4&xpJ5L@*W&N=<;lpL7 zn|~B%4i@|`7Pql>fF!@%++EWCXab*|H2|M4_z#|ij6g-4i1llJAzLk+*G)(BV;u#c zXD*A?S;NE`ar60j=}b0IR>+qJXX2I#^1S2YJMqij1=ub=MAUi$X~&IcpzgViOG$Ky zLLC|e#{WxDynY?!gk1X9h;FcPZb2WR53}^|a;okyo|=!d&CR^pQ(`TSr1I`xhtt8U?i0ieC~QY@9%LO5va?z9dCoI zjACYK(15vT_M*|xde9ZE=RdAjLDzv#EKEbh7oU3zZ;trEVclW;+u3jU;e8eva$FA& z?*n!$#FZ~=FoWBJRru7+Iaoiy2ABIDW&MGlAtA$>XW!PxmeX2P?oS$&$sdPwrGL=V zn$BD=l#{XA*HJg`BK~VXj<J6mTWIFE1 z_JT|e11c+C51AfMVL%m!o!goOzrZ?(`72LrMd5&&`?yc*Z??}TLY%VCnf^Yr9@Bp2 zgY)r3?l3BtjFC*i??EPf+v6}8E&CiN)!iq1bvN?eg_B`xNFQ2WYQ#hRYsi*?0((EW zS^Rh95mNO|*nivhF?stl;Cp2%?<_Y!^Aq!+%tT4_=fMPiaX}i6ozROTQHHnec>>=j z>hbut)5O|Op3ZwcfS*yEgBAmmxkX3{o(gc`n&)3*V(ogkv|L!G3gX62EUn$jjqMr$g&uZ=#Ta@awwkQBY5=>BgL!q_G{KQMh3^Uw zo&zzuWcX(#GUMHSYzoc8w76%!twaM1eRyc5<6b+8MfzM8y2hDq8YuCC1jVs0PFJ@3_M@9a;G!kuAKEiQ-O7ZC4B&O;y3AFDlCr-Ll=x9%&Q}55m zKjJ^44|}6AL|bs#-CRvJzh2A!tOb~JS_-L<6PuN)K-UDh3He!Lh%uRmJ*mnt{+k4y zS9lCU4`^|5y(YcXmVvis?W4t_9h_^;r+0rohdcY-h?{IHxp)A@CHkxI>zyRHlJyEo z&CQ_jsuZd!|3u|=b9qWc02rIh<|@K2+4`P{r{)#2dbQ#F%$OdCHa;bA7+bL_`W&Rr zX(aoDw~|L@VPL43AY^1m@uXD=#7AD(8R`#&DA85WcXxp7aAO{|P>Z{|>EZKUHU7*c z4(zU4!|72$?27JkP?Q1-?A!M+fEqVANM*wE2{c%j^DPWRxTI^fJfrU$LSsy#;vqu#R}u zU>}?__$_(0qZTd3t)S+*viK2aP&dKaPZh`*i2J!rz##pyOncC@Dz%R9KJ?7IqYroMw;;u|pJ$1aE+mP;0z4aAkFDCP!_f!-C~e0!-Cf9RipONYtQE57>N z?vtd@!&@ZksHuX>GfZ*2-W;k?(?#aC&4m}|uc1PB20mIc9Jg;>2!X**;LO2E#Ac;2 z+&MHIH8yxq&qqR*YQ_kzcJw_cJSs&4p--eTW|!#X5M|grG2iZO{#i_RUXRXdQgrsH z3c=|&2eoA7_&19%e)+_7*q%3tCvG;y4Lf7meAB1kUN3k|1YV39k3-A+8d#a{2~U?s zlLx&yM76q|7}=HJn;c2(xAF%kYiG!LbRDze!|?O@vFKsY3(}wRG42(ic02XJ$ykGq z*ff%72wA+4hC-0rL}vn(M}3B^^Bs+cQO*EmX5}gGm#0t<^QgCfwz(x zxqV|bKKC-9gC&PT{?RU!@CYLh!bEIssS6BsorzVO_4tN8LVskS42k-4kF30R8}ihQ zxa<1usGfZV-=2C$mdmu^`>6)Rent>Z-f;sodJ{q1GnVW1Bw*8P1+G=Q1Kv0FL1C{V z@9d3*0;zpiquK?V)D_S${y8WgFrbSMSKyly0T|(f#Q(%->Q!!m72Ac`eY6t%9KIPH zg&v)r)l72Ut&3fKFG2m%Uf}fS9!#fzX?b8OYi2D04GnQZWx%%}ZQ=2Is7;&F>u=v-g}6Lwp&F|~I@3DZ^S z6T>;EG%gD#zp&v(H+G<>rYe7v+y~=^-(+`p7=)73O+Rq4oK$FIw3>BMks@PR3Ch9n~BL+rBVAp4OGUfF}X5XrdI9A98V`RThBpM>0t&W<=D_j zof_EtUdYu%8j(9M|3mdbL0H$H0(asGvFA@J;%-wy&Y#r?aoRVHq;xMZl4i3D|3=6w!veXb8%etczWx`NpQ#~ z=)N`@K4*DA(bD%gEW;c9_k0A+mmg84Kwz4b^)jWtC3aE|Ww=|cKA-+E%+9$n6=Mdg zK-WTL95k*TwGT>S;x~D)9+QL%;^Xk%$idW<#^K_`Xw0Jn>4_=hscT*~+}AFEVX3lI z^*h05ImztB%6_!yHNx|2H3S?&7?h1D0L6ggxVrQS{65x*Wvi0xA_|4Oy&2)@uRBC- zZU!W6u9Tg-&>uHHE5l7sEa6j+)PZ-kDy)5)3i6x^Qfl}PP*JYN- zeI1UPm4(dfgZT2~S`s*~9K4%l=v|Mobj_q()Q=kj)3-Dd!{i8T-q zFT#eNY+SUaid96aa{2X*BsEQzjxRBy>w-IR<>gke2|6P1W)tD|kr^1US(<+M5(F>* z#6X;sIWBjq##xe!U~R7(efQlGYAafq=;wSWxqJbSnQSbHFPM()*8lMD_O-and<}Nn z3}zGh3Ss-Ncvw}t1inr$7XSTZflv1-Gov4e(960CLX~Gi_`0`vXZ&=VKP}SiX;?TL zaWIVxIeZ`9gjtFIE^{Z()+{G^%mrOKkHFH*AUNmq9yTvzIQr#B_Do)buPqHG1tz(m z@TnT>pKXQLRTKFwjbboXzK6O8pF-$tM|v&&18&o`rlS>DbsT*qpVWc2%qf6R(LpZKydI{oaYLOT!?r zV-{@s8Z3$}ngtWShXM1D=0PL1dG3Z}^i^<#)@z@{6UCJ*S9So^qz~;*_dFvZfnPDT zH4?32=E0a95kxgfU@X4O!sjQd(dW=WYLu2D_ytbm+dLOONyVGa&*>wDs^+2}rx)?$ z$6ra#fkHg%T@ESEZRFOg4iZ^-m^mjp!S&G9;OJEX4+I`@fLCQmo_d`HnRU4C3wj+}ex4Xx>Fv}gMZczph|t$f7{Smv`Aj?ffv3n?b=ggr|9 zt6o&LdX76~WS~N36KI*lq4~t0Y|Wsb{4>P{#`|&L z@J`tMX$$GkPJzrUY4HW`x0sb!hZfsq*}foW9FQaj7Nrt2Hf=Xuyy_IZ+Xmce*$Vco zYpuYai-7?Jp)5$zfS$c6K{H0#!Rw$gV75^X{@5Hv<$<>7e$5N^eH_3Yk~TxXP6Js` zp+GfXG+#y*fBjE(yB6{ z=~uUC?EET}Ykdx+el2XhvQp@7q%qypY}oz&JSiKlk5+|`S+z!({#@Q)dD}`~tXudTkGad2Bm{SmnWww335_wcN8ka! zKf^rs)`}<3D`JoLm@;ESC7yme8*_YgV8eEOI`_Y)NK_>0ikla)SH=^p`qbdVWCNP4 zKa@{>S&VxVX5j$2Vd4s$ONT>#Nk>sXTwB?IQv*zIuh+Pi+8AA)6K^ zqfO--)oI|sl^8#58GgLsif@IPcJuywIPPp2g#Kw2c!1wUiIUFnMphXoJ>AJ_YL4Nh zWh!*S%`?!PE4WnlED$%^tb;_4QK+j@EF=Jbku2#m-rfcYB@_}c4@;#(;LXoTTqPG?U3|c8f<0odM^@wXl{OiNbf~n7A_k4K6TC!4;4YOa5+L%`20eMrQ?1m zx4Vd|?Il3=x+bOHteJGI1b_A4D5_d6umH^L@tWyLb|!f<8h-o_7Dap8C1m!IkhyYL z+AK>q|D&wnKtJ58T0`(T`ZzdL)V!8 ztT%?)1{^)oZlc3r1+I90FiCo^$p36!iiK$^ytpkCGuA&sQ9uj$Yo8?%W>NUm@gaUa zI2>0jZ4-Ymn}QQ(YO>Bb|G}A?M}cl{X9G9N(Dk#Dp=xP4T5BD}AMV41=iwJJdqx?) zRXoGgeh4DG#ffcg;ti@@r5bxV05D-T+X*6Ufy10PI@O~uDAkTavHcOtN|3&J(#_I z718i4ge7ktkf!yoi0jK-;to?GA$|s|dZ0#cP4xY^PT()`acE+U5-#e#n0BXa82H`E+Hir>AMf<_1R_#jpc5upP}LH1H`n&t>L z&o7c7=Ol=FX2J`o0Ekxki$VN`9!pY+e!SJP{?Fl^}$c=8p=ItNg`S8Uk-940to~vS&(Mw1b2IdIog+fP<~R6M>g#Sg}L_V@=S$y=GNo#U6#C8 zc*Z{+dmo(_{kGE`^#dn1{2==d#KGB<+FYgn02Yr}PP0bI;rl}}{L-y_EPho{JCNcXX=YLtZWLZepO}s4o;9@?ep_>}j&k5jN$F7A=;Sqdhl1h=#onkmmkUb{(*!yDI+AfV4c>j5#(%Hb#BOfbgU)}K zP_-aKuCs0*h??Z+;a)j1PC<+B_w@r=QwC18G3dZEFcmv$7#`b*%W+G~s(X|18@zEtbrE91c>a z1WvixA1J(eQ{+2bmsfNR7k>ZMiBX$Eaq0JR2wPyv>nj{_o_`*SX2#%-gK@YG212fo zk2APq1`nIYfoXRy+sT1X*}jnWKI8f5gQMm7t%nZu{`-m48)C`S7aI7E=aN>zxA0P&jHU-i2_5r4f>NUab5<&G z>0|9674p^Yqv#ZyFnJu$Z@ea2)}u|GHsy#f`JThN-%>OQ6=1Pw24-4Fo2I4Ci{5LXnW^Z645#$K_^&TUs(nlK)_9 z?)(AMW^3Z^mD2dDIRfiyJ7Ko>VxnF!3H0Z^XY)D+@-~&za3d-jZDKT-zR+bii(Uf1 z?-qf*R}?BgeGkhY2f>3lV{Wx%0vb)61EG5~sC$ba-g|7y%~daxx zeUIQRnFqxFOgGr)Dp2XPvpB$UHMZ*YuqpH6?Xo-!`B+_VzOehSDAgnZOxH#cYb|%! zbJB*Mc|MFDRC`Tas+ZC&zQw3zoeyfdF}QKcE%bA}AULgxnT?)46!#d={8kg%`#cd< z)_H*Em26OZQUZ_13p3~-U(m|)!9($O=;Im*o=ekNfvJ{A)-?^TZndO46ZA1cX$bpi zrOhQB<{eje=>Z8z#M*2n2q1I3K{-xdGIWZN6(tu5d7#EYxpo7z5@q6 zc2Imwc|9D>y$Fg^!og(FCYIiCvqY`*k!U(U2UEY@$4b8t6iL2>$UWnE-dkOIGDMLs zd%u91*e8NgpNZhaJHrfmW$5fb(!8fJ3@WzAuryCGevBJSS{qI9wc{b|*HdQX(PNls zH$u|QuNLkJ|C7pumA$n|W^+fJJ z{32|abp_rAPGoyW>BE#k7wk^#kft-kHh|&_DSjn+I1k+W8yAkOz~-o*@Yz}nPYzo` zUWg?vmDFc%3d>pMkH0{L`=DHExHzLKhAsG1ihG$Co%5{%KTEzwe99R1eHYK&q0U=+ zZ@~0%%G@d95Y|sKBI^_v)5>+x{6*_4fw^`VE@(~0<@_34dDx878FJKe*md|&?FwG) zHoW(p4bj;@k62i&qMNSFg^6+Wme#Rkl!dN|*js4`q!_U0}HF14_8;z_szWNKM%i zbd<{w?>Hh!j`F7%weSdRUU3*!t%}0$ZObtA?g=s~#e%1r8qzb7e*CkkIZQM1gG=)S zKFwrjTzW#9YW0ufL4i}n4&QQdiDnxHDQ)DNa!SFmPnY^RszNm{2RXIN5Im-m-Aeq# zj0RiKPwEc*Z-X(+-?xevmY>J??yM605% zz2PE7%ip+R-jJd6z*KdR@jlL4$}@=f(?m>nY7+c5+0gGEi^GOqV;84};z>m>)KqJO zwE-6B;k6!hS|?#^nKb>mr5L)*n@RX437%4Vi5>a+n@nF84xx3rbk7QJXt_3=h9Al! zqvcogMQ0>1E_MbTT(p;koyjIrFHLc-f;siOA3!x$IMAY77JPA|8I|zA4K2ecY+4tH ze@4pisOD$*JF>IHv%VZ&*1uu7imOOnxIa{#6V9=3?dihz8^AkGiR=H70r`(EklD5e ziiYxOD{ZauuvxcB|h%_&csm2K5oc8kW3+Az9#GiL+Fj;Xg zrU?!d_%RxMyX$e%@X0iCcNw#H65Iq^$Ks)VLHuWT72EST4vXjKlP-m7EZOr$lukFp z3A>pfYw?E65&llH*^DOmO7Mp1(tH8i21X7?L=Kkw_%drFXs>Q&-v4fsKSj&v%sJ&k zM|B9dNtlL3Tb|>eoQcf#k_fB(&G<=w3Hs;RI;cD_8YJ{ivYX=-=&{(RAZ;wi-wzl_ zMhgA2ck{I9oKROj)oC4>_#q3P&}mdl@Y?^D7y@mlE$M`CBW@-2NjQ%z9`hyjwQEBk}yWtF)!@*V1pzz&}d0Nct|&raIXeX)3W1> z14p2{$q@*8-z)G#4aL%F3z*4%L;mqdDf-mU#5Em`{6xrJShMVusQ%nGe59$wH_G}F zg-hi`ezm{~93e}0Cx2!W4nM+W-I`Rx_bMp8Yy`e+Eo@uo2J6Gk=~})Kbm{{5kP#N- z#@zQX%;+>mJ#?eJ^BL05cZR~INV=f*iCA24-KJHbz6qs zpM4DGJ!-(B>Ou6dz%57~Y{_0G%yJJBraYc_>|Y=^>u8{wZ{0SL2P1E75G*L)e%n%%OI)z?`2S?Y4#}@lp5~TlP$W zmijYf?Ia;H*H8{)!~$2Na~3&NBsk$$cCtK=6GZnoB_=bZ=oEDyaDMy>T8z4 zh0AI@X;~PAEK$Py@$u;OO>m5PjH8q9o)pV%*n!*nZTV6?Kc2Bm$l^8XP^tU)oE|KX|f)1ZHJD(|QenEP{|vU+hLG|TGq2S*I4$j8!E(mfx_irnd| zkPh6iZXxg4G8xWIc7VsVnV=(=4A-}+bIF4FT>Zdd$jTL1bps~DyO&~E{6biko;(i6 z8_r{BNHT5Dd`FtUPN(;ycVfY#Oq7|aiSy(%*>2ah{My_&G_6zTGemI+JI;~Ij@tCV z-tE+{qf|IAk7Ld^`cc8`DL5^Q2N$h>aHz^oS&z@}9gzW64y5;8N*>gE5||6Q(*)1-(u?d`jtqY?Ul&3?tFhel&8TTV2#$<- z0zPkcK+OFLSTwdp{H{HSt}!)~zNZL`Z-#N_;of}H!%yP&sfPt`pCj*U5&UU# zhuQt7;Sej80a!rW&^2nZ}M()bU@3=;S>=T0#Dt4Cp{nJo1G3xmVW&zbpf;cm0y zws^`j1K#kijycvy;lN1(Yv!^Cn>RTc?dGk)pp{GTkA4?Rvsp!4&pYxQHxK^ki4X2> z_65xid&#;z!s{xogx!1E(QH&O>~wO}p9oAJksLbgw_ zom?{vf=^CK`0&FqY;5zvmttA&)Rl;4l1q7ol@VQ`WKTzZ&m-ZU`QUJWA_Q-r1}oGK zixsV_$-T}m;9=ehYi3S>k0cPT&9bBcqlSset7wtfAr?KO#zSTDSRS@4TX1eHWA_CA z^b#F=uK7ikxxE)W4wF7YY4$3fA{q_X*BbGF#nlXbAA_fX4o^v$!gH^#Vja`8K>YP0 zYddKJ20fCnOCb_$`x`-4$X}agj3ydJfyDi}C(P8{Na7{bsQYX)^or?*YbsaK#(xa6 z+cpdAhgPzX-U1f7^bi`hCc{|@bjCbo8oXcdRNd3&K}SN!!awg(UYrDy7Q>;cPGCI@ z@fYxaGgzwYbG$O;2Tc6kOJ3dT1@Ez1%(Hecv+MB&-q=}pMClJG7ckxZkZ)V~A88)ixpnv8mv^gZf6OO$=Go zO}KJkD1L&Om!>D%+afZKY4_J@Rn48JJ(Lg#WwLrmQ!h<^Syfo5i%}P{?R@}p?Hkwmem``Um(rDp1p=_oD)WG9zrM1%_KL>)A4ptIhIOQ!rrBl zyvbrFH+J#I%^Sv%$I=6tsn-~qo8?a3H{8IoyQbo+DvV{`{SSJ_7D7pHI$oEsM4A^5 z6RVVX+=0<-ZdxlQhyRbF^A4-|edBmLEop0MDQPK+>OA*DQ#NTUg^X18_}Z01LzGf9 z5Hb=Wqt0_bq_U;5LxYr&O^WFE`TgJ3bQ6!gp2m8Hn?v!VF?>w2 zAq4zd&R1!FCWCz3uwFkM=dUOb?O*tiZ7+7BrSh#L^oK0XvV2QwD~#!+Bki!fybc>K z^^?wsr{eutVWLE{Az<&A#LkuHv&ia7DE560vYW=^Q2&4EtI>xcPG7M8_!CIcyNY^~ zJ)zOk4CS}Zg{^t};PuZ+96!tu-%IR<@=M*!c4G()|LsVJSxkp7d(8P|YY}#7zh#FP zRzRftXfk7Gy;x;gGCF;8AW`0$_1^#Vl%vx zZDy_3hR{{{4;RHb(JzYyUq`(zzO(S=LvOpG^LB4^`>abdrdq+96GC4;SqURMd}u;I z46~fM6MIgsf@C&?mj10I8-h)!fwvw#>XJaN8*0+Jd3M~9=u^87nQ$d?2S^;*i2EAC zxzXHF;@Q*;f<~@KXU|6FE6k(U&-@Q{PYHgWYT&=#Y<7g~ zEBPd0Zy#!Rk7kVx{g8W*(u&ZJ#JhKz==Ji=cyh`SA`=Vzxwg(ga;$J7{aht5lU|=;J52t-yTI{$ zu#y6|9+CvbT4UHQ>B+duSOeC0$n%+&@>r;9#Or_fd)UV?s zSJ+UKIeX#BA}{*rxjF7DH|4%2_t>D@CiMHJ<6srzMpqj);^|B$I%MHb@H-ui;|tvQ zG|_IM&lLeh!y3hsgW`$Q!Iv<3;&`fRY6Jx90I;8Z^H-e0-|5Fmn_O~r{`v7;_8e*{w%(powf@mqfnpA z3^9gt3-|DK63>{DcQ)zz#YoBu3+#;*{O&47@H``)1$`-Y87lPfK0B1ag#Sj-@*(?i z)IV8F`w~auY_dpWdk5Lg6yNAYw`wlKHJ#e1?z;MN}k>$4O@v1+@}lbFH$ujb?_z&RCCa3#pV($Mvpr=!DEJJR;-;74h}1_2=dJdb8`Ur>_p6RgjA3 zE@or*oxfm}captryn<^FYjP*^!Mw$&i1a4zXH~-e>|f6%_}7+3Mrc0~?fI9D#R)m! z81jW|?0ARYGRi>a@mBG^c11oLmg7w+8R5BJllu&qM_n_$Am9rDtx8JPNdyb|@MhTh zcPVC!I7gx-WpGoWz%6Jm1m7QtkT~-+lYOfO5vdl?J#-jvip^wBq6mKH(M@RU9g4pe z)}YhR&-mzI9yvS4j-K0Ufst=bg<98ay?^58MV|r0h$QC@O z>2a539^e<@&W2Y@^6H)ITt~hsVI@=(Zmltd<^6w9rfvjTyDtG}8;!xEiyq^ytHKVw zz?b|XKFz4TBuU;Mi04MFU<)e-;@rqxWUFxl?ER)lJO2wsUDXNf`oUd{Yx~v(EW3hS0DY!NEHkduTMJD8*#i}tsL{UyA-0XZSOM2rAi9>#|l}CJ;#xh|a zy*GfKa!7@1Qm@3dQ^vs=EJp*k9~j~C6^vhN2{}>-y!W3%KRs;}7e3WRYv)#++2jw$ zCAY)2Bfh+I!Fs;de1~Hb#IQrwU7ECDn;;SD&J&t ztQmTq_kd6K-|)aYfpz|V44g9@OQJ+Ck)?kWjvWKGc)cI?{3^kZs~$n=eO)?o+EtK{ zszAko%2Z*%XIxThiw{4Bh+0E*cz4JocsWa!7dah=e}m+B^#lHdht+*m@as)3u>`R|@Y~4cQ4#U z(D)NZ?%)0_T5uvAZ%Iw#ax=l)WP4_4qiS8n&8>H~e*2Nf8bquOy zgv!Ngj2YuxfjMSeNIlveH3f%>vEk~)`AX?gqh_Q zQ+`V!3tv`Wg5XRm`ed*ru39EZ_$z;pA7r6HGf1+(XR-z@J*oKQovon`Gb# z7z$eHrd-j_f}f8=ti1LO2duiyUiZ!fdlNP8u;&>wnd1jOGaF#F(-$~9brgMUy_TOj zPkFu5JW=7ALt@)Yu6&ZADUI7cpIR=;;9o8s!J9P}{C8mj+|}-5uP*P$kiXNZxyNWQ z%u6DPQ;>7EKox`QZh^Wuk|Oh6s^ zT)c2Yk1W{a3fFDB;AdM5xb54C1Cq>yZkrfdvp3j&4>=UA`%e&qft`F7ft)7 z@wFpGbij;i(TFwqXe7+tqUJl^pR@XAoE+jJ;!>V#NV!37j}ktl7DCR++_lc|EEuR_s`UR@?Q z$J z&}%k?>Aobz;b~wc?B?5gt;1L5^GV-)Nj~be8m|`Bpp5W447y^+)NWpe1?kpQ zE<^=75^5lH{XjnXrY!CImx!mm8gb5AAMtbZQ>erWz+}HO)!p@xoVU7-;v8v#38P0n z-3!Ho;V-<^7x4^H7n&R#jG%G* zhU5E)A7shZMqDAxD+~Ylz@Pz9{Gf18J?j>XCwUnuHyVP)bF4vGWe@oDkK}s46{+0F z4T9&-j*m9{0?$X8k>RiIAVNH@KUBih{LC>rVj%6Q@4(fw7l~I@{Kiz%0P48mEe7AH z6+aFTGLNCh!Txn3?3^yor_cX{#jcxp+1L5FD5n#LuUdy^*2Y)n-rqxgOdhh48nU#< zZ6IGiOHBL~@1S{PJj4Z5!DYismGTA(T=u{Y7%m}Cqg+1fI=i{9bC z!YVe^*d52XNQzA>X4725d6@swnNzm~{B<9~rn$yEW?(BTT(=0sb8Fbm)JO0^UxYcn z3Yfn%kM#Q{W80Z?cz4Py{H`g%_x8kbYr`n`<^KoP3%ua2o_;obcP(yK9wT(juD~yx z3C7Z+Xw0AcY|)`=Y<|Z{>I%Yd2@HVbsY!4_Q;&Pfx5A;PJ>ibK8#6uA^4!j zlRmXm!mopFquIG=EI96fmsF4Au`mAgOuq@QH8G&g!uxchQ4Blqyq=8vw*wD$OYzX+ zR2*6*g(n9Tihp=70$O$s+?QAYS99QA^RzK&!)sD#H-H)am&=^I58$yGJ0NLK63+A-bjbWL=+4&XFYYy9wDTdncuzst^?i*MgQaQrTYbTC@*Jv_$54g( zJ8&mOMCa5o(fsY<=&Id8GAh>5SN<8;SnVJR{Z`3z-z)}w^Mxc;lMrjsI+RcRD%z$m zFmijofg@_un>W(n{?m=Pcfdic9I=C`8Kl7(f%X5!KOOfKMiGq=XPlx_3pa)NUF(GZ zV1oNO_E19L0j^z!%g3AW{=NF(p=f}6%rgaVybQ)R+o069U1Y&15oX<2<&ow3y!)vX z7FiC)xwC@ADcRfLMV=aDV7xFTb^Kkcj16-PAi7NAFkO*a2T-m9J z-()Yr%3HfYHwH*Ooq>05dy8(bD~4Y$KEUBtIZl$O!_omHAHMomN-or{hRX0h{OmRt`qpYQ=^alPzcdkkjqevlRyy!t>-}u1 z&k$%kya@&f9L?M;Sy<6FkXHtK;{DkZNo}5cMft>1=Crj5)#yu<#0jw4_cMvl`5^Yl z)8q$2v+$XZ?sgD&K%0k$4f!$bIx)18edAK7L3*kP`Tyvy{pzd@Ds#-{RQm=|gM3%#+ z`@_(a^g(U53c9!2P-<#QN4NMxcxXH}ex4%apUT+cx|aDKmExz{RKdu3DM*$$z_U$R zIQY*??EUu!#7noL>bOE?-c}BOE#olk*ctJwmqV%9ASE7?T>~fkWVnN=BQu^b4R-5_ zK+)g@%MR&bVX;D=>gqZy@Do8LN>knN6t+vn5!R=E5&f%BASaHGtUNI3GAv6R4oM2< ziM%j(jhIsci)yz+Q_yVY@l%!iEv&0lZqJ9v;0w^D6a=YN8_0p*%b`7Z04miSBz99@ z!PB0@Xhw2LY8K5@%nIX7g;d9ckvmPc^9wQy$-Qc#R zAD;CWz_5-H5G>?$H`8y4GgqF0DKDRZ{Jm)KNt{PLh7IM>SNyn-svNxEvk3xI3}N54 zV7lYMRDtnsOZ%p5fROreWWs|3?DLf#xOGvP77t9QJl(K@Me%9;yyPhI^6ydMdR2&I z_W;~f5Dz*>P7rrZfe-o1p4`;G0&SJ~uqIFFLLK=bT=QPwCgjU82d?+0gXKq+LhbK~ARab@9oZ|)AU}+Qnyn^qQOOwG6?Lff zuE}sve-BCtPSu%GTLtILaNbpZ24eQ>fdSi0QqY*z1br5*{pL*P#-|a}zET#awgudN z-bD#dS85(UoDRHg4^DlN-l~@ya3maEL3fYOWW! zq*^rMUn4}>7_hiYh48Os1U?IFA|sFMVA0$8v@taT#6H6<+Pmcy)zcm$0SJ*%% zl_Se~evuQOFN$+}&M@A+2R0h7!uLrkv^Z}p4?3QV+ZvqEZ2Sy54&_bnwDq;&3f1o}N9F{(jj(GE45@`%muh_~ih;GFyczzEYr4 z0*^{^#%y@Ae7`7sL=lF(7{dpQyn<7OUE^Cu`^b_r1L-A~VEA)hi7T#j;4`W-v1Ix# z;K#gp!`u!c75EGPb*k|#zskw5^uMBO@vbmizED*9NSPg783{qHx)>P{DVEea!*XWp zP#@1!@Lky2{55wcHLa!!jn}b5ez?f89s_IbAqE!;v4_y;az=IER_rD#V{9J^9mm z#@?(Eb{0y9gNFZ1I}Uz31U7Bf&zMHRO!J}JJtMiJzX zr(&siFfB;G2uV}-v2On`sCe^~%$r|LjH_Sc?iaG8YS2@>){_WPy?W%?wsql46m?z4U0S2Tqm{zw>H=Z!C5eTXIl#osEQpZ# zh!Vs9621P<*edXYokJb?gpv(JQP!oI~6_xDtUsv8{^&9tfyMkfrD)gvPrjOdR z`H;DG_;R)b_#fzmqv1j>A(6`Rx@Bndw0EpV@ebKFV+LcTUD)^QD+J6eBbTE}@YlS7 zm^MkBpFet^Mg4W6QQ3FV({U19`2HN7gZIPD_EzYw8V}YBw8`4)pDc574s-ELCL=PI z5JkBOeETB}$jooR64^rdR_M!}PMg!{w68d_e;REr8%dWp3x})mas1`nf-xbZp=*u6 z%ZNThUdzSu8GnTxf7{D!*2^2W4HpVz>-S7My(I+j=Vn$tnEZMfyCV(>b3maTko z0fOc{gGWR2#k;d{3ycS8p7?t#-?eF{xN}4n%=8(_FD;gX zcXf#ODzAtw+;&6k^xs77Njak%dn7j?gs$@#aihWr}`bqKe zeXp5~sw_Hv@ZnblMs|9?GOxIrj>k?fBGt3rVLOrM+P#r@p?(^F@oOP`uPw&4ySm}- z*cgafs|QOZg4m(#tvGY67_T{|!XA&2Wb9!D`s-0CE*$)itlqLuq&-!ZOFc+qs~10j zqPV9}x<>|Y)Sn{Xmmg-^Zk6DzFDiV)bqW5rSa7arzJrv=MDen#0v|waEesZRf;R5X zBxWt1yt%3Xuf07kR!kTCuceV#IG05iXqagi4euYD(j96OEA%`L zk$2@oXpGBLI<9OXX*zrqEH=tQ&Er1&!7hQ{q$+51l|{8#)~>&pB!4gTc~)9oM<1at zud4VTc`R#6(&FrSTc;cMu!@8233*^}upX1cs$hNhdx2Auk7;874hgJ~=3|oFs$7J< z!M0@k$*1g)kPoEJn9Q?}mm{qE2)_i@`{Mg+dG+;bwz6vsQ9a#;fi*|a_+%gc4Oiud z!%A_z#C)7s=0irBMMFyj!aZ7w~ zvN{cl{zv9px$rIPjhSvqym+RJP30peS(?3QH}~kYq`BFl+-aC2t$Vu>!xQ_l_serK zQey?V=p@FLV0|vVAb=<3t-yyapYf~Iajd&DgsF2mJ`V|uw$tO^{#yhdd&hFy8`

    `meIrYyWHU+cy0g$b`76wyEW=XF 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

    fQ7>;@TygLx-L3tS%ZT@a z1x%KB>-Ryd!!8j1m<3NQOz_}rPojLbj?)hBfG4)M!0+#Es6QA>0&g9KcSkSroRqVu z(v#%uF?SObpNRtBa6imc(Pdqx!$^LF4ijxFpozt0u<3OPXT|H&Pw1W$PL>X3C%-5V zN!t>^iAj6lj!rISI*Vh+QZx2O&5l_&JCOC;zr*^^63|7a;*nHw&M9g(R5nDz-pBzs ze!yRF%-n;M%5TBD-&|PjpVe%@b}H^ppDS!Hy$o8V?Re`MpPzRXX{962dKSMA+>#e` z|G0GMD1HFU@;ayBf?y!CKWx#)c4tA_5nhbly+Ejm4)h;MHVq7d?(W zuO0~Rlq!(v(g0d{(Jq9B0V<_FlATzHuxH9D&f#AZPTnTXu3tXJdCJ6NU1lSsn%R-r z4&`vPE1%}g)rRS(r9fu_!8P?xMEcQNNUizCbs3IgBMNT8m5smX7;+WgJSr9L+TaL# zg}>=eo|zaD-vc_~y`1B4Rr0-08y_2~vGVRS5alril}`}) z_BQ|C9)y@o6BZbM0ao(!vpiaf`YF634C@ zPhSroM^=psg;C%9$PA@sa1t5GI{7@D8;88{!_*Y~=sp#;C90B)3+%@WR3bFt zyiX}-I!m9#c%*SZMNB~6B}lMiFcY45WkPYI9WmW3M#Mu$l7EGnbYi9{6g&RH`S%Q% z&5Kq}e`+|V=GXyh&-7Sj^C0*iRS>-KpFy;O{mI<32k>`>2YwUPU=GZcj6KvtJxd?p zzn?>No031X50P{d}Z z^TzE5@Jo(A-WjXU6m(?>aJ*M|kt>PO?#7=pO5iH50kj>e=7z*Jz_u_I=BTm(#r%!9 z&;}iL|NC9e?zk}KFae8GD$ zBd?SQp4n=k`vygJP}Kn<<1BdQvlZKPBn-^gj%69Yl$eol43k)U5d*$o$1fY@*xZ3Z zObJgG?isGiHuYxG+cLbDa?Jms=uF(H{JJn~h>RIBM#!v`3`Ndfn+!!HQmIhHuStVw zPJ<8$iBd?jG@ua0dDm8oN=izkfuf{AR7!<>@AnV5T<1FHefM7LdG7m*uqrAO46cj7 zfy;ZKS@jOL^RyaN=^TThrPnw=eLlDAdH^)UM`QOKo;k0e!@`wEvK-e9ur$pZ`)jOO zR;4}-&PPaiHxW*WTQR-q7NDq|hDS_alVRmOP@MH1*X$As?KfV6)CJ>lNAeli`Ex^;{N z8=N9S<&1e=$W1+_kgSavx4Qv!6{*F%4wOHY1&^|w!Rdi3SAV7q9p43j^yeo6J*g2i zS~G{(@Gg_44h=Rfzme#1tEv8>L0Eb(8Y?dS1Y_$_)bxfZJ=Tna>Jw z^uFWRQJ4k))mfv}22EDt+6pgN6vx%^4C%%i(Cv2MZd@2b@!vgY`Z1avSS82u4N~Ys z`#;#9A#Xph{}pLn5J&45`H(++rA;~62iHBb0lSA{R8E9v`jtQ7!s?3v*#;WsMMmDM6H*A>)+O}>aZ%b&3Faua3kNH(qvi^ zD{E@O?(DdlWawAjtqvnFWM<3$$q#E?(&!o>vc@Ov_QFiKX zGRV|f^L-;bh_i~v1y5=P;VUk}HL+cs-0oiR_%n`94}Bz9t!>V>`?lkXRnDk&Sd5O% z2%rn39unJc@n8|5h;QT`5Uwo)S2(D$;MbSnLd|meAySpiuD(d^W=2EnTUBOnsm99g z8^X?w&!FMeSeDb-4%3JIXe955IG$jPW#8nPsFNlxTp$gDk$0dwQo z!xbk9_HxAolI9u(_QiVa()ttFoD)dL?3x2|*DG*CtORErRtvYMWjcZ;$fiyQc z(V!L4!tK@@xSxM)sCV-Y%$GTaTlPqx^Q41tT;U;j)`?Q#6J@GxAPV7S!LW7yMM$5} z2O?5d)Gl2Pie*+{MpYc1H|>Fwd-lQU-jO`7dJkDRk$0+{k!NA@!#Hl40$I7U01jD= zqGR(mq1(R&oKJQep6{3DU7rznNo_qkeECCu?&q1=Unk?t-BHk({hF*gmIL|xJ7{@( z45p7?2OoZqgpGfl>7L2S;B&^B|Ll|SaE~ojsyq%chX{(klx1r?{}UV@+y^lV=JZ#J z4LaI6kdaIF(L0y!^Eu&I`eyY3_Nt`|+>Fk@@RX!~^q~WyFR}ZfCRdr2 z2v@a#pwrMy3~OIQ3{%EY{U$qF*p?5w`Tp-0?jy*g&*858VelZf2-2r(QrR_U;j{Br zbd4#*=);q5stTL)20&xQScob9 z&COgo5gLMikcms{$ic26T#&X3bQtgE?Qq2S>ILARbQ*Pi_rkUXSHWk6HS;_*hVQhm z;>uU>908k4__;k>P3e`QHV!u<|Ktc#BfK8QSFQc@3ui#gbNzm!_8% zn9}6=VHkPs7X{RUNhBW=Z><8wr-!)oZcn}&7zw6N8*$a7 z1uUpVm34&{LLNB+>wL%3kqfP8h>0nkCKv^}Z+*FjKc9&2{h;S=MZsLOW~zx|#=)9GJ0 z=HHB8PkzMC0AE-U)G4^zKO6m)2cYV@Vq6!xoJq|21XN)+>TA0qk>h>NwOMd;X$UU2 zJp?gcx-h|5!1g$dp(%qu@#iTm;mf>QT(R#W=Pg*sv$QXgxtNB=Q%;Z!o-;7Gl;1V# zJ%y*EPr`Zmqj0m(lTJ*I<>v^UWYe)#u)Z)B;Nxe(w!%)#c-MqQdMnu2MbY%Zjp=O6 z)-;IGvLMbEbEv59GxVg|3*f=d zakS;XsciNVcdC*!fqA~X1eHkrPSQ!#=fpUwxU~fNtM@6c#=4gr41bIC)Yip-W%FzQs$Ku;?np zTP83(GnIwwjRu)0Gh|x%^m$t(s{tK4?O`j0YHSSR@Ou~&GZaxycqQQ?l? zGlEoe4QeG_hyM<-bJ_{E9|570KyYTd?j*E4M_b$Cbpt zz?c!rbn4=3=whiuW}JP*X&jISMU9J`svGZ<&aFiE&zmu8ZU%nI7X#d+#|i>v(LYm? z8l>E}zhtEXlG`otkM8GbhVOoouxv@TLB@owm|Z~{gw@>8;Yip!tVHMXPUnt5OZpU) zpvL_(EL%94Qx3X>)(>;w`CmQ!%13-0wMxh-mpG95#(xLL#*)o5#z=PWjcn;dPO^$SS-NQw0Q3J&JxV|&Szr{c~1OOW%?s` z9BZom%~{B8g|FeVtX9d94JV9djdu^g+F1g+gy(CQ#Y9t^shvCV|EQ=cJIZ`FE^n`=4v8`L!QPej z9VfC;xIKiBo_Im?9tqS6FlT|3n731#T!I0A)L!Y$GF#(VoRXy+v_szpMm z$Om8WxHCpL(RC8_x~xxs|4ipvlx@*sCI^rE{h)gc--Wli37h+j&@t8)XDay#FE^aV z9eq51b!a|5AIyjJhu3lAQ3+vbe+Kp#f5ZC{`|!C-EwqT{lL5bDym#y*%#JQ2iT+ne z_{agi4@c0ZcNDw(@F~}kFooOj{1fM_7lcl~$Fbq(53t6z4x`%vf;5kD%TJo4z_|&$ z9_Z1-O*aK^MHH9}pM7keuFB45sPT@$)8w+!CfMK70(}Mrf*X(PkUZFrkDB-nQ>X(S zD>IhH`6R-C3VnD|I4~(97mW)3ClY8@W6Am_7!}(}^ngjd5{zVs- zt?Cr^9Q%QD&!?eu$39e9k_^*qMnJ5fS)k(=P%%wQ74m#8L0fn!UXD+Mblr0Da#k#y zE9ge;>kIjBH9+0@3RbmLYt;-$i$P5k+OV3-}ZO-Bi(PTk?8j)kL@ zj3_&7FcyO3Z`-dOvSaqCs&vDbJZQ}Eppk=b@v@3J>#IBowNVcs=$$SNbZiDmqadit z-Y;Cx+sSndNMQ`WyR|W0%Ov}rkQ=ovNm)FqnS?wui){2h*W$v#QF;l4acE6`OJC zI)SjZzKIN|dIN7`MLT=~>yHI+&;H7?8)*@=eCJa8hspkEYLm-(oNb2pS6k4e$%Y+E zGo&9~>Y(^PA8uvZGwxSeGIabr1IF(QV5Zz$Ix@`wJr2f_F991k$KGT3M|(45jI+ZK zyH=2t{6;!HoepI`5y}*%(KQx@B=nj#{p>bme+_c6>75=O%-D}Bx|85i z^%yoj(-<|`C3KzQOOMA7!fE*|;gz~%O!-fN`R~mkT)YLjwV@Q!{N?f9o6R^`>okm& zccdE^ZwHq(clrK@HU3F-#UBxID5hIae);{vni?ZWvs7nKBuc?zV+XuZa-cz5j-s;b zSo$i^4C40A!CmXSVc8xz8rPM=kt`ETj!MNFOX5l9+_RjNjJ7Q7KOk)X6?iSJ2U*Wl*`j78Hb(gk7~Gb_C!!+Ey;hP9ubM-Q>qmgf zm>V#D*=A~85zf6ubF!KkQN_-$-0{KnxRm#7JGW|`Eu4BFh8y`AM$PrbRPJ6MOggQD(rJ92GIS!Deo34Qw^pG6 zSFYne>voXcr^$sqdJodBPf_!p1a-2o1+yj*CK($H95;sU;kMY{tm3dQz#q$mMOd=s zwZOlf<35o?U}Z#M>EtH#@cT@PvqNdy>`;7qEF2P&#$vI>N6^Eg=r-JipYD}%*Waap zqnk7}T_8#a9<1ep7JUFRRgw-}tpzFZjksUg9d5)GqFhiemlC)Ne4qJHFXJ0Lx26ie zFSlm_g0{79zHG#pa)&~Jj_C#SCbSp!~Hq6n`HcOpc{(!Zl0z-^0s zQq0f407R!utC$7}@(3@5r|aGt)a@mXZ|Hka-R-@}86WfGym{+7euX{C-ev1G^}pMxzGa zprx}BeV!XmR{kW=yYB*btnwduak~et>W!JaHqRQ5TMAPQ%$TY>(7Dq2Xy&+|Jn(6Q z7aAeN_jMl_?9LZPzaPU5)m|Y2+a5f)X*F<#29(%YlM}Y3*tTIh>|31y@ZdZa@LbA` zBNXwxTn%=QNai!ZCU~vmEK%rCq&6NwPOd zuirr~NTx!-(jlBI@5x$|i!oX-6_o@Rz@_;QI2;^{iaHf!M&(8*(|Z8kq5~M{UW-}g zIasl38ZObJN1>VYW! zGsvF(8>J80qP%e|>h5`rk{c|j=(ZF{vX^2RGBw=AW?lB*9%I;DZN?H5_TWG93=$-z z%pTv>q}kt;@$xqQ9?<5)@34!w-BR&T78t|_V}n4scnsUVz6jd3+y=DBgS^OHaQ)0m zveRZANUZ+}6DE1V=OfoSiK`AwYQ#msOc##xznw`!{l0N#gReQ;j^(%_jltvNA2B9p z7Bk%@#LL6V)VQmPv-)=gW~T#Nqbwu*Z)-mh>gdzf%3SzjSb(p3YhXgabHY`ghEs03 z_(o5Oc9roxrI2X+xcDfyeuFl%pO!%vuXAShE}^iZX%T(M=LcRF@V=aR(=j%0t58#Z zHVz&&U@dnw*r@oq^iI%vHf4M%csmS0!kb;}XG;=oQ#(oZ%^Y|q9S6#Oli27Riu79K zG5l6Fh$;8gdG6*gId{1mF7|to@$C|{<**QbC~Gj)Onw%f{a4UoU4TS10aASB@VZti z22Aq@J@qE;@Ud#NF>WTy+_&Lsi(ZH<2*#xCuI!@EIGD8iDP;I*P=||7EHGb$P26Na z4eE~2pl%(u^g#y~+tx}vUd^ZR>5p*k;tlXS*Ph)_U&Ri*>w?6}_h@o%G@Z6rOE`Xb z5xLwvgXZ>1(nAr^82)tt%}k8hquBr0B~=4v{DF5ZK?!$E<_szA$zt~<3!%tNjB)Sz z{w?n))puEn_mXAs%K{VJA~~Kp{gb0Q6U^8(!zZvY-WBfsGNw*5jG!Sc57@-fOzhV` zjPPygJ1U#|-O_Kl}oztnS?h@XqOj%D}Lzi}N!---1< zaZH;yhUJ^4kRsa^IH$@II*)uHT$%#6wyOe`@{R$zMwb;^&IE(g^O(Z@3uyV|Eo?Tu z3>s4Y)N)A+axu5TSNQjwRAkwGRo%_%Azpsv<~&SbqAH*v*DdE4Oidv#ZOji zsfy?zrf!}MQ~ryG9SJi~uXZ8n`A?HA)Bc8^#iyYlSd;7A9l%`9K8KLEtI!XQg6fi` zRCPx@xc!cTT&Fl_x_J_}%#&qpc1z&P?;Nh7A{NkU0kk+aVPJw3^(k>;d8-GoHfT2* zY|X)i_e|kyZVt!~JHpKW_-9(80-rA^BR!*5;i*(*EK9$_1#2uq>4rr#iq3#2ZxMDY zYy#81ehN%Cx>2(Q%B)Rwe7WeWJ9s&EHWUu2&}qD@#PD+kLg{qsv*IsDe_rRrHjRVi z-{-Nxxd!z+N3qJ=TcPdqE1{v~Fgc=iQ`l{(#B~3e02)Z+A7=xyW=|+ra6KOnlsYoM zz+qH}SE%=R5p@)u4$@kS;qjwN%re}@+DF>ZZF|LOKt?Tos_>=7*JCR*u2Oh%P!uOF zJU|sy=hCo%&A2?=4WBMIp{oxq5_noE(AaY)ai7FTsBOsOw%wM1UWpdi*>Huw<8h?g zU>X}!pbqnxGV}5c#_`psu`uBt*iKA>uB4TCWqcjya5w^x&o(}c8qLNf%E9r7Sv2(>5O|!3|kFW6qf072Z~-_vZ$)Qk8$CVSFwLp6mb(XJc_dt`}K$ z42|JdGGoWXFl_uo(7fmgG@e`v!kZSf?pr@-?mHrUF{g(ch?v8QBih0F+HBk>wugNg zIs|RrqhVVX@20QwB)v~XvBKJ()m`6I(H~ri$_vu*bioK_6to#CBaU*Po{way{h^e8 zy@(rprP&v1%)+$afRl|ho;T*122*O#KYkaUG*yoQDMr?VbKpiV36$aF~&rlqz4EzZ4yfxMAy#-i&yGm^mN&a+@I9gp*9 z0{>e&j~gc3#@yL@tbDP6jyn(l3g6oBXwC+v{#26r>Xz8gyVU@3Q+UVFy+$zH(@IV? zwR0o&e1zkh4XEZrCH9N&Kwfxr4W7t(u;9mYxtQ{2@Y!4kyp)4!NGkb2Zb$K_C$-yz+WA9_6BeYV~iXycwR1eS#czwc^63azC!n1XECsKG__sEzH){_Zy>J26{Vf(u(E12RPcMP&GC#Jf zSBcKE)miPvmQU7$89jEK?b%L&lA051&oyLe&Yf^wdJ#RA z)dm?+A}n_C8nSlUJ$QNWJ)B8>O;$fV!z>Q|$HqLDgHSzQ2@@$`b5%mQyCQRGlhI*P zy4PBm>b#y>y!Jz>O&WMPq!Et1(%?G_qlx%*clsx$5DtHpqcwxGsFSM=lX)eC@x2mw zEwh+p&by5V%1!__dehZY%$b+}O|o>>NEUWei-q&^A(v(Cc=lWfyXA41T@K~5j-6I7i51XLQsP?%UrjHMFgJ&rLMPFpVN-_cW1%7 zKl?&q8*s#a%JHX!V1PdR`!A~`OHo-xh2`WuUOmP^T`_Tf+Lycjv z?JiK!EXNx;7ss$62=Z2qwEya1T{@-n|>pKcIwc^0W zUID|NnQ%E`AseMXf$_o3t$1@*? zM5>v!n}DqxNFGfC=bvu$$;^$gMb(C_@Ei*-A9%yXh1YOxoG28>+!5Z{Da-dkp5g=# zEp}M{D}FRPClHmn3O62Ra^JEHXpiq^;%~?2HjfR!e*@jZ4T)9uhEl8H!+t~Poj4J% z@hp(PaV?P8EzZJDnsOEgW*wFz-Je&`dH)JA<@rXu=>H5B_q{}R-<93nc>!#v&%nbU zs)Tp?8Y`T?gu&A`0{P17xNEH$RnHS)O7E<=D=&DiyH9b&3L2pULN}o+N?(1ld8r{MP2fWs2Yudqe+u#@RU_hl{TN1m=+0aKHAcQ=f86E{sdx( zOBY(KlL42^PjHH?qEcV@y;Z^|F5fhrOTXVk#t-iS!wg@zA~A+-^7Q4;K>A>^xs&)0 zBA$ti@8{AF3FwCM6U5oR1ocgc z{p=6!)HgQ-*I#eNBi$}+^+`qcL~<=Q2P)F_atTl^`I<{Ko{JxsCXy99a$wJEds5c* zloqg`?Xr&L{p zpBvinZp$LDbW~$+MmD2KL>3gxo&fWs&j|ZBEQ1d@!EkoYJ+ObN$QG=>f>$ejvEphw z_&@#!w#l=(sKRx0*HR7-oib(1_iJ%`%_pO5U?jWucR7Y;Z^ttAH~g%J??vB~fx$DU zz@=N6ls_K_Z`D2R_ip^h`K70E`iA?ldE{?S#Ha;jO_JecV;784v}BJ$_dss>E&Sm* znd*#lWNYOCkCAv7QF99J#C<_?XK}WVcfiPuG@|-pyLtZFT28hw8t$}~aLpr3nYY9- z+%at}&_%u&v@Qs>1H$i`#dOtI63_Dr`YUE8uiV3ULSqw;V&f3FM=oP&QZjHH7yU7U%^J?!P3 z13M}olWjBIp(terGv?Qq%yKt3`ho>b_E(|(p3;sqL^<$1urbm)$&sU>!pHE^RO0RO#f6SQD=N71q zzX$EJ|G^dBK~Q02&rayirzZb>;GW+q!-=KR@U&fw#QG=Wwi#mZ*s%^P#!Er>6&d!T zUzytbm2!?3hDefr5YhiNfpLM;nVG2;y}F3!;+{@`DL%O%i2T6qSN6fBpL=j(kQ66* z^clH4?<0DbMnDNW4uXlV?4zz((~YlY;l<6HiQYz@$3OAn7fySr)Sl{)6d)K%P4Zc~xUUy3IP9BJPcvc9) zF2OqIR_IhI$I_zHXnvxS7>7Iq)B7Iu@AHFvx3wHH){J6j9tPoyHD6#v(>dOMXa-a6 z^Dfn`BiQexvSb#X7+jX+tdK5-!F4(^pemecpTm6ORVUsBQL<#T9OWoLC}r6gsC^S!@P;BCFu*h&=A2uQ+x;`HG1GBM6B2hKsblLKANn)Mm9`7_l2{9EDl0Z0MoK2~>30n}r6d*9 z-t-DD>o4Vq;2SP8e#$xUvyN!&L#goNcs}YLk(Ns2c2!=%bFLd*qcY z*wJ_p0(Uu~xxpcHSR#VX#wyIu)&rzBq$AgR5L!N7&idpGQ~MP0OOOox zHL8|;o-@c*91p~q54Ex4Y?81aWU2n7y(DlYKc_fR3YZ>;@($`WH+dQL7VE~zV!CYk zCmHr`VjlUn?;mKbkz{wROR#>VA>~psfORy$z4&FMt*;55SYCpR6x;sF`iuK3A( zJe_er1xNSW&{apHS;iJ^rg>-uU3tiiQ+qj)jxN~Bv!5PwJrj8r?qNyxx~K-Cl78UG zwHH8qwKwhxXvWN64s2W64I~~K)abk_d^%MP#vaC~y|4l=TpNI}aXP#+Esf7JT)}zE zmXlF)ZwMFc^+3HhYlN%fWU2Y2M{t=YHa#9kKVSV$ zf>K69%`Q*$z05yXjsnWIuIBi^3Nq0G)RC%$@J@Hw^_=f@NEYG3XKIvrXt189NXV7b zqp1rVX=qL%u6i8D767V6c8MpA=ss}&fP;_)1 zIku+`*1LV=pEFIM()tFnyNcoaeJ?U6Wg=b{CS&w9TO`ptsr{mrH1@6>RGQy{TO|iU z@Gb@$i6<-KeRNd??sTP+7dW}_yRR3eTxOUD`>;-#)#?txt)N0&pSKHNjyi%Zb~m6} zBojohS^|ywhiCb-d#mWwC!@lba2iuAv3032 zPIt3lftm9ll%=tg^Hl_*?LjoDrW5;mYOv|U5jd=NkluM2fo`^&K@fU}=lyL#<5Dkb zw)Y&*A1g!Nt^(o*PT|(WaiB4ACcv&g{0z~OUWmGa9Y>?+_Bq9%Xsj*tZMh7~;Wx}L zKLKhdZsQ;B0{3dG6{yKOc*dWi#FmDG9xjCfNClkK; zhjHfX9ugnN`DDfeO{y(z%x3bvP>s*4&}wB8>(n|SeED+@aj!1nX4{9utLOY~{1-6M zr3aBKImnz>@$cYSzEo;fB6#v=!Khky`ZUg+ElwW6g7-ehQFRkQDdQtoKlT~?eLIit zaCL)}llx(zh76~$&;f53tpwV54TmHpS*N%TOVLrHv-y{5LDX^l;r0?!on8~i?(-Nb z6G0t*@LYbk52$84n(cR2=CfPNsA1SiNYY9vwgHEk*_Il9++^;i=?O8Ge0h@Qx2Hb~T1#@vpZn5Ba>3+;t z^hJHkeAw~uCM^0fi9u*4xZRJ%xx;c0wMT~Y+){^WZ_L<%a}&tknrVXs<;x{ zwmTKsq?5S#YYnU!?}j@9+-aeV5{~_S1;3r%hNTjb5UCykA9pth+?r%qRM;fCfxlP6 zuH!Ji`XN?!nLxT#H=5-Z;g-nFwDS8IP%Marb^GK{n`iAOs^-EA!$|Pnu^XS6OrnY- zBA}5_p~aa#d^BQ!nB6!I*L|v?M`k?SogWWZ%J@0xwsx*-;T3$tKSOUkn~L>!`ON0= zTj*&zom%FVa(l*J!N5h1G&l14+HQjoi>nq0O@_*u((49;&p@|!NIg(AB-_OOq z+kyCb5>(%j!Hi1{+~gV~y6V9Me9^ZF--txhymcb1Uvnil(sVg>u6u|1=Q43&&I1w` z9?ko1MzhGt>*>|K>BM_dlJMuvwNUsamn`}@n~t$^q^~v0;q=yF!Sm1_Zq7hGbV`(f z&r2CxrhO1$RUJ`3dpc^w&p7w;X12_Yvr&tfg` z?6^x*73AoF%6vGq`vA%E{>zOvKZgYg*Kn%ORW8%_9w(`PMX)5>fqwgbkM}B#6|^rN zN&Q1r>DJvN*uFuY>&WlqUG95AajFrXP?e?A63fVz3sjJEtpFx%Tu!p)58{j&cgo%P zo$B}D-|%kUTySq}MN6Gd93Gg3GevHIc}+JQY6#||zvJnRz-ZKoI*JX0RX9C(0#2!k z$N2U*VMFH+B9SzeEs6GkM@>fTqKrFi%?-n|;sqdlnu^VLGhkU%0hrFt#s5xcLGqzm zT)g}U-1@Z9I3Db3t$XC>oVzMz1Gq zL>WlBN6^2ww_)ErfRG4%JT;*j&AD1=?EL{!nMu5JL56*OHU-iSkENTd+`(2jfj&K? zO?TSW;9shUBIkACSsKqfoG8xz_4&aRvEStM>8a2oUIoYOkE5N=E0{W!;oEDuq|%+g zSGhY=`*nUeey1MqIy=i%tXogl%Z7q;!!2+svS;%9Y}tNgNnF#WP7TO2qOlD5{OlxV z&^eZMeHzDFT#Yf+dpCI`X8~(QjAOQ%S4qAM-!oHJW|~_!5RE55?G5zl$L)$Z+A0>F zs6T?DW)Zf~M;;94iqd`4_rtn(Y1}~iFyM>R_+?M{{Wxrp>Y5V(Bb1&XSo?3405SX~iFBv7Z=Rf_+g7dHJc zVE3Pl!P|3cNQUTvf3Y9zGVt)%~pWx ziLIa=GKCo4s)Vk_jL?9lFlfW;R z-w;i+RF=UR(}%$a=&jKgp_>$fVZ=8R|*IDSxrFFB>LbU z;F%YzV1B#@Hvd%s``MZJ{$w0W8FdREO@D<|#x-z!))9PlIuF{t;&GY1E81`0&AT17 zKyqOwv|F0l&$zjU6u$n&e=e>ppih@tpO}w(XYJs&6{<7+O-C`}mK(osm1AM0Hu#@Z zH7X8n#~NpSwtN0LvU6t#Oh^@>zlA5!d|Dn|^PT6$%xWZiuYTt?wmwIz$T5tbx{ht~ zghgEc4nAfh;Pmw-?#0$)c(v|3F4dgJMU){BnU}=`xb%{sGn-_mlae zPcV6JDt7$r6Z)5lQSbM@_$Shm)dY-T<32kJ(c7PH2hgKZdw{3UBbzy)jO-EhL$LL9JiMKhFDzZ-N!lY`;w2wBMt``& z*vaMjl%eaFC)^zN2K#k#QKvl&ZrAXP$mxY7VZlcXc@s&vg-h|`kR@!f3WN6+nza7) zD0j>8R#>C6r+o7pBhHvU=c0<^=pAo&+}%9ofn5XgXbLBko8)0i*3qX>aCXj3`OQ^yLQh zPkI%(HF_6JO-q2@QPH6MWj+MN`+>(~cMQ@uK+VU$ATC6g+2U=CvJazKw%;Lniab44 z=8EH@cxuYeR5m@tiQ~#7*@q%8ZcdOk{cq(xs4RF#bnLcrttaQQ16zB^xwIG}=XwL8 zXCR)7dX7TnJY49=-|t^0(raV)z!rTioH08Ik8SBfvA>5P_2^snzfa{a@K>C$8K&$saSZ@M`z0{?Tl!SQW=P|Mlj&olG_QOe>*rZ=QDvUEtK)*wJ5t(Kh>G z>I+pg^%o^WzZ*D-mr5+Lr5A#|d4;B&BojXs3|S9P<4HAH`m|^nx8m_FI5}XA?{2?^ z`Py5-_}u}B`dY@hh}ZD<4>@*|(`WKCj+4^3<9w!hBJFJ9GaGG*Sf{E7xjWuL&W2~0 z7x#sHzm$UKB==GApM`==;bQFO$A9E?ZYwy6-6TPmi#WFtm+d87^=bLl27I^FiLwY2 zHt6F<8;hr~nxB7BF>?>!Oa4oYiWcK=lMgp`nif5usmk1~Em)FA1N$}e5Ol}I zawE;IkP|9>T!!jS`b~ENd;C*{NzA^9&f_d$i1!$e$vI5@SCoQ7)MN~HT0_NnXGrA! zUi-#j7dThH4+~~HG5br_RQ63a?7XB)a6W%Gdq0y7)}{R4F~qeVdX6CzY*D&ao>)f- z=-!+K^l+&xr+?xUm#WF$3aPJOad$bwuXnsIc$TOIk)l7=|Cs3VLi!jEz0sNf#{`7BGIz~jC zW^Gjx zoo7ZCy_f~dGUHI`8b33A(?G5sk*ug{Q=}Rl@o@Fg8G&_T9C$qZkE&*TKtoRl{2Qr6 zKZ$RrVt)QS=5Hn4yW%8{ZFQzKeTC?@y9xSMd_iH)5?1Ixj=nuDhl&xmVAEVrT+A4H zUlqke#qrFvS&Cg*y%Oszb?EZ-#aP*J0fN7Ef&GpdYzN4=6R=R+h^cXJP-1T@x9i|SY)(2tWjBe??OZjw){dt{v>cyI zDkhtz%mlGF{TLWVsm(|fl?(z)I}FRt$kQ=Z*@6hSO#Chx%B-g* zz~#f|@P^`Nu-h6+Sx;O~liMGt}fjQ`F6k;jwnI01@#uiWbhSd1AptPb1 zO3O8vSV1}JiSL5>J4T|G;b>`tzc5VMRlR3$h2+5El8trv1QKB-GNRvut%FwJ) zgd!!%tU{%ER@m3MG*Ka`M5K{Y2^FG2{jU4D-{*PX`}e+oI2^~`_FikRecAh5>->H{ zUz!x(jH(s_47yN_sd;fY&a{pjcP|~JdWNt@g$NqzYsb#;e1fvd6QHQxhZoHqz~4U& z3!2}Nw;|GO&6wXD=r)64@^~;;IxLu?aU5k9I2nGhpUrQ`%g53MOc4!pVqumUN{B;u6$Y z#EM@Kd}lj#%aEk2tZnHWO*^*o{z1qZ{RquIFl-Lo0cG(Lz}1R^M$|-Rv+gC_qnF{8 z+$uC(5ySl{o=gv!XHe%=%URM(Wu`D8i>6zy7pxl4guWsL;x;{ow5_$q-1Tj^=J*ag zt{8`!g*m@9glBI+G=+V95qo`NrT>5!MKmR#x%6hyfp?}D5@LU>B{T3gBD8WLi z+@eA^O?yeI3tRBstdVpQ??v3OcOJTUzeCd$2h=zlh1Fwp*sH}2WL*od5!^YRj{iBH zK5Xjd^Q2y)#DG2KjCN$%)7xQ;dWvA)a0?Wu>?ON>R>2c<7i_z%N=H|XK_7Q5ZtI+M z{(nfG)fk?I2iG28p~4kZxZi-W>vh<-i~iu$aR97e%0c@ho=cG8z|Nc$r5}`suJ%%6 z=lppFReda1S&MzJT6pYm{!f#x4IsG4^6Dm;31q)zQcOI8hEjz4;6|UIfFB9eCDSp z_ptaDW;;mIumJ~VNoDAa{stVe+mcP6x0-t%V~?vxPh`{APNg@m&t!-8i?baO;dHV8 z7`EZ1IXrvr2`XtG*pnwhwzR*%-`7radR5nJ&0S@f~#D4j;&lEeg0)9q*j>GN|O(q)@fJx!)K+|jpcKgueD&5o;j~!Udlac zK(yXBlCL4V;N+!!5U}(mp#lTl3ANN-Yg%?JhfyFZB z^lOtf-9DzAeEI56el@6L_Bkc^eP%l>{WuhSQdQ{}>)w)-;i;VHY$K|?Y6;nHV2QWe zc9GjrXNh5b2gEv$!LI&j*loQGmTJEyfr}IHu6z=dMQ;(@XnabNzY-RttWA#&zX!Jh z_T!4{D^VoEjIC<%fScy+u*>Nssq_AVt0x2OdDaWl57?sWha0d{!Gtbcf03M>`wndi z1<2x-5Wm#vOmoLhvVr6Co?H&W!`6MUuwgSscACJBi)CEk3~~H+YzXxkm!R{d2bC&S~eB3GFsuM^f2MaU1R9X04MUi={#Clh~y1B6oC`p<3x|p835Pn-x8&m0}KOW5GcFd@1T)T*k7mn_{L$JXg`i zh^nKIyX&aUcF9~MHbW+{l|kD`+LDj>{$?mu^td8)NIwC?1!C;PPkDh!$a6e$Zv^w1 zsLxC-kh}lu8-8AJ6X5mP-!v8o1U#w>@F$^e0Cr#F4IT)@=JwK4pU z5Xwt$L8oLQ+ScX@nmRQJlTc!MQ&VVB)^d8cNsZ6DmY@q4Hep1N8xFPC#y1BoxRH+8 zko?;M_BH2`O&g41xzlb8R}KQd_eTljX>yL$TOhvVAc%O_z{HmlRFD)4u3gcB*!;a* z{Z}kjmk*-0EK12F4p3iLXzrT+Sk@M`k__^zrZLK!7Ie%+n^nYdQqHba}L748PP zA`_;(uNumIteK8~CVX`XV*?kav#!caxDlL%sh!=@YUn*6aw`VE!Ctw&~*dWKH;L zqf2GS1;U318%b{0a|{}~jJos!jWwe@Zw87vR>iUGE*{WdnM*kIfjXw%;HZibZJZ1BH-(c7s9k4m~0GCKE<@v99 z#G!}xrROOSKe&l^cLr1MvG&ZHze?0*B4H0=-rgS)$$pj`^Q+b zw(K^63eO^z)#lmu7shiVijI-|;YM`Bzyx||OBM0YvZb;-v!LJ&u)&Tdyl1zU*K;~B z$3??gRCy>jSN|zY2+u~3PG1a|dJFb08UY&bY@vJRWV)hyEUvykjXY}^g8OyNxGF0J zs%qJX>DM=*3+K$dUN~@vZp_Au()#q3P7>@lH)HGTz2N>&Ro2WiE*s}9f?}T`wCeR( zw%qLsXCtkEyX4PBN7IrHcFI=uYuyEV#BAFTBp?>Ygt_IqT&@7Wa@0yt-7AMxEr(Ibu6V$(aCw@njacuNBI2N7!2$-kfMvupT)}%g-ZzY+=H*S$H=1ek=NgZ06@y9854hU+Q@HhvDkyJE0M~Q{@QOOl$qw{ltmYY^>ZZlS zV3;a@?z|18O54!P!VjAl1;F4%0p0z?cwIXU(WlIuHem)`{4DUd~Tje0mMyOE_gbo7z5tfQPKV4@ZhEd z`zkk&rM9RrZ>cF%aakDJS*c)_-3A0+8+>MyC7p7^ie9YcIj67YaZ+swm^RQ2#};cd zxu9z>?c!x_{Y4)>J3yX#ifOQcgXN&R{RnCl?FF$QV>V^E1T7@mWN>i|K>avIluuwh%Z>haMs2acx-z=JPSFilOsWQu~o#rH7G zQT;`-Q{Ho;fibMVQdOvuHH97gM{Cj0Fyxj=YJc*XUgXZJdRjG!}}VL-#!uJBJ`Q4 z=UQR;t4<={Ka*)*k>E8srgW>CE|q^K$V2o|teE_vR(iZ-H;% zZP`X9Y^;OaJ||AbXe)jj5l*G7)9BJqKHzA%5D&I*;R-fb)1DVj*jrb}ZPu2-Nf#Pm zf|5AhS6E0k1@0uP*JR=4EF-wO(SVzCa;30;St++}dp_9kIm6#p=5p;lBkAn7_E7)Q zAB;&Tb@|4D+Q&M9_se>svFIv@f1g5wE$_j_+}R-5=Ekl|9pkQzd;*bTQe0B%J23s~ z!T0nHq4jYs1e{pO+*^l|@7y_r%vLIz|MN>7Pq9m9OPV5DreYw{5a|&S0{)6cGO~AGvm!|>I zQP?Zj-z8CT2>J?we_sf8c`%_R| zY$lF-aR3G+8@aH2S*kyBDD)@&B6ZDgFz#Fj+3H#gJuw?uQfVSOzk4U#WpW(1S}W0L z-bZu0#0Y#osiVQUr-ExOi4ZnN7jFxBu5fmub-}yeC=~yL!6EO_VPuQ&;)Yvf`%G)d z)#h7&RlB)-RAxDGU*MgU2n))63VNCh?Ok2qmWVg}DXD|?^TyEb`t?}R*oc|kX3Xov zQm$=~vY>ip2{<)Nn5=Uq2p$Ka)`PQDa9J(6K7)u+%sg|_gl zwU<1fC`bK>a73uuaQK%V>)rnqcRbKxV>R}3i&Rg;Mwi1dnd4bHl@Gun zT!*_l_#rx1Jm4G+HVTT~^mEBEQ)pZ75?pU4MLScMF^wQa+P*3n_O~d~rDc-rP0~-e zp_Bx<1y(RCZY;eKOzFageBp~K-uTjXp38_n4L4yFj!(w~V;B(kAV7M3iGf%lKw!S~n$sNiS36vFq#f;js@NM z#o$)SfqJAhYt6HOgYLcX+(m%OYFeOr%L8mWY>1UR>_}7BZfI@h{bwf*lFgMZ z+>f|fkfbn(`M1u&J?Ga$fm0oJ2pP9$Q375v6k~CY8JvqlGO7dp*MvArrRDSC|^jS}SDrW$NtxCgI)mxq+sGBm<37M}}^=?lyGIP`EOoXR<1eK>0f zjuqt7_9>b~5;Si56D&EWd~G}g8oq-+(=FI%Ll^9^%?0~hUYqPEO&0%HgmW(46ntA3MGO~J z!#lG$FjO0`z7$plt9lmVgG@uU7QU^`1-NEU7uPt&%kD%M@VxyoO;LBdZU{% z{VFR>)f&%n3qI)K>GYf2gsu>JX~39TMk_NzGKD78M6>I>7E{-99VTKfSQpC@iC{$( zO|5{C$wm-2A_{c}#zJ6kES#*3CT(MSVNRtHE_PN1k%m5SXht%B_$=xu;!eq-C^RWH z<#OCEU`o$vJh<`$ESYeT?B22)Mz8J1fN7_oc`APf?A6U#5lQCryo!VBVYTJA5N>v@WbA2_X|L5@WDA zKOLOYjzi%A892B`4|R`?r7wA#b4E-lT#p)r5_wC3*IuHz*;BB4HiBI(;CDnr)TqK! zFJa%f36Nx9Kz&MlS#Ll;F1$9Mc3pOxOOiIpi_p~cHlb4#g-ORpzzFkn zKJ!A0ofz7VMji`cUfB_FYe|6pA&u~s&;NUM+5n)&5}(~)1J8Sg(1q(pVEc*L_`cPU zZsb2pR8;rig3m#mtAY+hF6<}Pdzzu7bCfccpOH2o$+tGl{6 zr;)xO%r78YcrRzD*;%1iVJuhTr9r=x-{c;3uLpX=kWNchr>8@9L;1q@oP(A!oo0Po zP+oBbq;y8nm;@cp_Re4`S`>|*MiXFxM>HmETm$3dze32dv%)s99k4O*2RL0>h8YKX z@Z8PKxNfHp){}PpvRRB8KkXJ~eDh#w+V7$A`rv*r05hr;2AiPY{O-xDx& z#c9^}NuI(}y!hb=cYTt+pyBOlT)M)5UZ{P7oeNsgaNT1;ZTEdL+$$Nyr60r36TAlQ zvLk!m{u%aVc9PS(5f zJ`|mkW8J`VDPlk1EiMU&@CEEd6~k-y3E zrqAeSsDeg4lZjzwId<^*Q+@(nY9J;A|0DHiHv1e5ns*Yk%xCaE@v~q)TZdS_*+Oo| z2IAq3kFnZ)6q`Ronn_s{Exb{5;QD13dHZ7~vKw6e*S~uW@-?s&yPuRf0 z1=%pCE)*Y^XT!eosr2>C@x1qr&zlUrg&AF`oPE(bjGQHhkB3lH7?;a!(BH~?p&me@ z^BK@+ddNhP?SC3=u5=wLG4uwPq}9 z9{i%-EXBY9@AdOcI!BLXp{4ws-Mr|77|&_$rqg-v}ZH zH9=a~fLrXJkqs%M;N_GNv@z{9s))uC+MIz?=kbaHsrTH6;nMU?um!7}vV;yhvl>V8 zj9-}tBFvr+<6amk(lLLMX!Ut7>SLqKUQZoDyavrf$MPR!c31)$roXhF+OCJm6R#1? zr(v&lEKFvAE4NuL)nv^`0RwcwbP?8m{FoZb?(?P^TZyaAJJvqa5xDjOPqv> zjzg)(p-hza$N`g7Y2nNrnOONrneWR`I<@#4s&u;1ou;GN@Jd@e5W62foLx%oO-jL9 zc^Bj*#}SV{6Ke4DC%N@)JQ{1s(WmOGaZb`=vVmN{#`Q|{a==*HQI-VTKADggcM4&f zzAH=bO@y7JtwAe}_m)m)Xb_SN`at{86kEZA?0a2qdtkxRXLmk z>U*l-gq?@1T7gj@2C(boFWA zoys@}skzThtaPQT$260rU&3+jtN_-3MTA!IJ(_*jf0AUmaoozl1mfDXgnm?42hr7P zRIP3j`y%NL>t4mss!i^&JEK65Q9XqERkUH5U=prKl3}a%zQwLBWl*G84wt^U)7+6F9C%yHLQrxaScF8exx8;)T(cT>D9O=26FK&Ns51Sv{xptnDaGwRk%BP~ zO_&wtpw;;~^c@*OxrATB(rSM;I8m1sgbza}Rb5tXp@bS+4}-Z{2g)>t&>vI2VrJ@5 zVYBE2sBU_~b?o2Co{2i)^HHA6J|z(y^TNQh$_Li?22o$B2QV<|5t!|fzzFY4#5+Qq za*BE6`}hEw)3<`X$w(yK=ik7t?hQD7*=elj`@DLuYcOs40($&b1{c<`LGX5bGbX(2 z<$j5%5CsKs+$ebxa?Q1HX}UBEd*=og8)`tXU^DluJpq@nI4l%Nz~@iuu@VmuYguvX z8*>}3h+hHcKnv335(!E>W0+`m3&?wqg;pt3GVg;5b^l`pBYCHx+ACN3M06?A*zXGfn{gGmVMyZT>r|qL@>3k%f-bEUuy@O*ngdreIWm4)^5C=QwRR?zc{m%7ieE-nugU60*>YN4*34vuH0$&_ip{3& zU@0a-hUWy}>5(dsKWG-qHRah}7o%~r<}#qS_32T~>!8&-1CDM_$2%dPF)m{;>z`(g zrpsG-Cch4TnrlG~7dVh-vXSI|%6Ay;WD9RM84K>-IY(YdNI`n=L@MRDl&YTCfZCt` z;Op*V0xwT-$Y1dp_bu-OrH_s%F>e?3{dxr7JsAd3B1bqa#T}$tD+5-HevYD(3-P>r z7lc-xL+yP#aCWRCef8)Dmu!0#zK^{DdOyM;^37@}wCacWN7-;i=L}JO)dwdY|His_ z4Gb)QL&8q|7M_nf04|?R*d?8-q}C^i%RaCh)wl8eL77r;UA+%4fBh-6%8ADbni8x* z+5*?5ET%R6gXp-k9QipW4-R}Oz#)P#n0DzjXqLI4a=H_9*^npfdDG7I=Cxt_sd($R zZ};PH=_j!9y9(`;isEv_2SBZCF$!Gz(XA_hHXNxS#~&)t<@lXAe$BwH*Lu+U>kqfL z(*Wf$oqKY$6=bJOq2A;T=$VhE?bfb%;CC2~@|?uIs<0&^j3sE!jJfb=%MjYvXoJHf zN3eP2pTXX23peNSJ>c{V(ez3h&j_A{_iA}fMU5&eeRvx)gLxGCifD4`lqxK(drRap zb-CHs9kS9yv#ex7lKPyw`yq_OQp#)9X2_%2-bG<_607zU1bX zaUd~Qi?tR75}Rg6Zs*1&`1Z*vHlU?Xoju%H(646RJ97s6hwsKoYob9fT*ze%n}E6H zRpesZ1eV=@+4|JH>u|1etUs& z+eeTQP;jtfEfWFs}Q zn?{GHtI)Xo>*UEoc~DZ_iBEjmggffPShTt(^;eRG{bvWbm23}i3hSU(Lxvrir%i(= zi?fC#O*-U$9t?lEnnkJlu;jBoU~^{)OO||u7Cf8NR8CgXcWq?2pNg1;s4R-f$~$>S z`mMG!U$M;J$5KUdT3G0swWb+jvXbk)SFZC@*(+w3C?+GSBB3HCGgUuIEKFRF_ElAZ z`FL46ljkA4|0F^=FEOf`+XKcaLdbb|4j${~z%#*T$f&srElL%Tr(O?tMFgT=j^@KdEH7CslR_~$^Gl*aprD*E7xiL zdx<^&T4K||vT|!zdxx$G4_o86Y=w%Lv52X(tf>26@5evy^Zx5TS?m7{v1yG@*lIr& zaa&(st$z;tpAr7`CjRH?WJk;XJrB!&%|k`vU$go5L;rrd|Ni50Ras@%b>ZvQ{%h*y ze@)iv-`7Kq>c6jt6ji%@s{HjJ^Vjvj|H$e`srID~$L=d(^wes;Z<-O0TGJvp_r6rY zu>3x}8~KS-Ja7Zc3Kz2exe}1pU;uW>`dpGpB6f;!P&V^2%r~6Pxux2$exnI&qbcBQ zDLuAlPc&WNXD8IQ{0LhuqTq#LI_*jfW3?k)SXb447B?b+wCPkKH}nvv{pSFd#8trN zRrbuJjMqq~QQp@uj{ON+ByFA?28H3WE-@r!2l|8$* zmcHql%;Mg=@@)F~-0nwh#Bj}6?z?>%T)%pb9Eo$Ib{DcCHYE$fE3-jdW)D-iW6Xun zH&7;Z9EXKWr;Z`jI8xUi_9QEzc99EK%++8<(Q{};eE|G8BrouKPzoN3`^bIwT1eX7 zi0i7(^PIp$2(|HG`9-5JEh2`coKS>Lg{Aavgc1~MDN=(7Q>OIQl#agkmDdb}vRbPV zIDBUqEf0u9t>WLD-ug~*qIxOwAGMxrOgx6iE*tjQd%LYe0+@1+)m>o@@l)-5kDeif8ZF+R{qA1^Ges!s77;!WBup z20L0n29jsucBfD#DJ#ZO>lV>7siXP*Qay>eP>;QRLz!LE0;Y4n=r5)Q_dWL@j@!8# zb<326kK`7!D!$*s$v?${Rx9}A^BY3%ye4AyndrY$hPEx2rCBB)cwOsgTs0zq&ayhs zLSN4mx>v-rMV>CaK0+N`hTG$hfzj+*>j>N$G(co8n9%a*P@=#0KAL>BC;O$xv($1; zdUxI|W|YqB6mHI8b1vKkiM+AUQ;@+nyuStG4lSjU`KdUhdl6Y`D8*KV1k!>{jGcea zYt5F)J^exW92Ac;IiOd>$vAr_d;m& zSbA0bH%P4ggh#WE7f+OmgWd{F`ms-)_1oC8!fB=Ch`Kkuv-lMGp}2y@t$7JARk5J@$D5Tvlq~CdlX!V+9@ZxkfjJ#0?XU^%- zHN>A-E#$qY9?2{;$A!kfb_Ov|H#~4_DNEJk>;CSG*qc0!s(Y)`aewsLi`TA9a_%QC zOWy_*?D#B9QFoqy+AW;2Jrvp(>eIR}MVJ~0kUCF+uI%XHmgt)?8?9JKzoo|dY`^03 zD{{2Uhi$3T zrz7X{83snNP!+frZlwKy$wB*tp|i%boOc*&%Q+$Y(A~3elt0 zmitgqM*^1D!C=)o%;`Q0Rn~`b#IH9HW1z?a&VC1x))17ObCXDhR-@X$9ul=ll@`lf zWIls;gX%70tZ96M=k^}K1*U#1X6i?7ds!w|`^|{Xh%v#;h{3RKf-*HaDbH@iIAZIy z*SPrfAZ(tVkM}3!z@WBDFz2M$oZ?)t;n%H}-_wi>Ri=lBJs~IN^k70`4>#`9KB|~9v2S}Yh1E?O5}q zkw`VJgL?Z|=z0>!(fWg2-Ya8Lv%sCTo|K_VXQ%Rh{2iS8Q8$RqWw7anIIA0RmYd%3 z7Mn!mnDe`-EO_JuDqiFX8rqtI^KeSw@3|Qs7HQMA4?NE+?Hw8{IL1X+Ok{6{8vTR$R zC%%0-ojd*d3!dDdLEE03CA;5$$Gw-H5D_C4y5DmGT_4G3-W1ORBCzMbi-%KRKBLs} z{Ss_U$i=^Idw5J0<^*$sJfCIwvvDR{&gU3^^{NH2mAi1-;ho%dgDL>xN zEgxQ6NTQC@M7FR>fu?N;hG!40m{h}W+%siAyl~JJPFs@zvOOc{Pv0iUyHSL?Co@3> zf1}omyI67GmMuJBNJK??p+!!K?bv=1wQ`3u`=81<(5*oi%BG;f`$O!P<1f47iMGlHGTXg~^^EG^ zz9&$g^(+BPjNPbU$}i&363ER`_rd6Mk!&vS1Fnj9g@I$a+?GixknbglcBZpf@|wvw z|M7M*GgLrjo_nxqrniN&+lBbgn%M6jW#nHK>3_;d_;(dK-p=yB_7t-E#?(3&QbnYw zgxU+pdA1(Rc|`lK{U&tf#!7f!@*TVu1;M2~=l{R0OOWi~|52^}pXK-8Wv|x%s%rm_ zGW(x5{j(~Uo$-&MR)z%xtzGkX8UDYg@Q=~{_2U1#!nT%Gj$9VL+RxYAH)xe#=$fFg z(0>=$D*s-YL3YwI;wmE6qN4wERmEk!WTpOotcsNF>Huf&javV6?7!!v^}n9}KV$#( e`oh+&<*WN;|F!uWWGX8w;U46>k>7am1O7jrEVjD< literal 438801 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

    =viNgDtZDf_> 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

    `d zo!?5ZYd?&$5^sx5H_LGS0D=8g_#30IwGg%0d&no3zoKQcBx!g5evI+lL7(-PgHweJ zz3JYEA7dkMd+kA3=}s|B|1he!o`g}F?l5kC4}KgkgGTGF;kdu)7?QjdE)@#E)OBO| zpNZ4qpN2hY$hyTI4Pq*iLwK8;Qj5Xh(*2r@FjriXW*P*q46Kp$ZOC^$vvGtv- z_{`7{eD>a&7$obV+(Z*r89b8LM^2}omTUx(?{b(=>LEAfChVzmr%S)g=YIzshL(MO zByIR_mM~@_&AYizv?W`bYZOkWRULM8-}6j?J7k4Neo`1cM0ghS6wwu=6-th%!Mcp$ zFk!YM^>{o2-rK&!A1m(S(B;kS+zKmHq2b`$@C#oY(WX_0|AQ5E_rcXM2oG2;N9S8x z1lGl79@tyYdgiZ(O8KKO_fZrEd~1Nu>;Xo%MnGm{42)X!5-z)~Cq0M#Xokd0oMC%{ zl*>!dXt!Z}_534nR;dr`t3n0#mpdgt)x~#{vhl&taH1UTgm-#{`+?jf9vfc@HD+qO z)@73@{nR6Z{(hm-1z(bZ;v$T)l@r zuDy=ymKgE`+420y1W9`G;WajVR55 z|G^6@uHJORI?5(zk;o67c%(4{XDt}TdkTIs@52GamYR`@>-UJ?K30MB^#4_J6#B3=SKBw#&yS2+69

    Q(0@zDJn;$|=w^eh`CWOTp^F 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

    1SJI--g?)BU!9f?RpqC#@cLqrx1|zQzETSD zIs#8kvq?;YCe!xabEv}JLY%~|5EmagJig5pZ2a{2#gbe2oKNSi=>y@Rf-(KP=`K`n zTMILrPmo2gEV`)l&Q}KE+x~LQ9A%`N(EOCM*B4Kq&14m- zwM~J``_|+7W6u0RR+Y$DqXp_heIZ8ZPb}^|CSKqm%cI+OqiFwL49{IgRvj}3`#H@d z?CLI-mZw1H#GJrxXv8gtEnrJh8MY3eMtY^*lehkBz%??J{C9j0{t4IT#zDW>1L?bP zB~1+arxxLsuom#~s>5lcH2L$3mCUX^fprNxiTCLrS=ns^a2DnS61i1O-0~bwjNAZW zrIq-)um--&ISK#1$qTufP!eq0NoK3=f!3B-RJx+TFV<@EM;jU;VxtBuu8`%+ChiqG zPc?xml}?P&{tAZ<3p3W^a(G_&Pwmb16|#>}?7wA6sNWNZZ>P=y>ku;_}^tRf7KXvX^6p1G@W;hvB*Zc*&2M17Q z#0~LOtKB&LdN7(eF98)F8OPRnf61=Y9boW{(2YN%vh4ol}H!=(CGcy5j|Kl)0U2kvXff%6uj`QlJ)G<^a3 z$2*Ag=Rmqnbv14|7DY^nHsmim4aa5d>G>fE&@oDz8=7=&Z$O}Nj_1QM&HPuIs&tR0wvTYX}2 z>#wIoK2?l{2_^Vv^nBqq%2mn_5i z^VDpz_NmaVeEgJzZ?<2ZD59|i;t!jTJ>Q?WBexk0)h zx{w8Kp(gZaW;^>B?;?J@<|Fz{2_Oe7-Z8V6c684S2_AK%hs=dgjBHI1Uv3(~oAcc1 z_<1w2w@`znb{B)EP8%4M+F^p4DYdv`fxqir*nbkbc z%WY{)lO69LEY1Du-?N&D((KK;msm=*d6>N5K-_)?>H~Xlo$+Im>_400nJaL3_*@2& zMc8meo_{kxjO%|}&~<}OG6njO%zJLkmRdX_LDOzCy^I;co#BQ!HQ9=nudjp!v$OHZ zyr=Nn@E`shJ&#|@;&?UX8?hFbik;67CC(W};2wE|N!=cfyISJO=dK5$Z7vDu66ucm zD<$ZK+x~3uMhSd(JQ<#yIfEx_12N*AH-Gi;Cuu$qEpVXPAhw5vf#DqnWyt_uf4N=3`Hh|9o8F`hvM+^4U;$nfeb}Z|K3tzF6{b zs2*NF`~*Fo-o(E{FR~p&J^7o$U2LS~OIYZ8MD%1OXBmbgaFS{hyWFUXCK@tm_EH;s z*PQ`3?-rb(w;5hz4Et))F7WJEuz2A+eoDK~mck^ya`$J}7!XHnTP$c##ZOe4Jc~Z# z?@%!;315#;#!=PtVCu?k7&iD)npurhC~lu2OWpE?d9c7ojZyvtRmOSnbBF}jxYWtM)?N@iNcz-Je;QBeD#X^+ zD*Vj?O{gA`O7hdDfZ^327&YIMre27Jlv}64V$*tD|8FVu6{Hb!DS>5acmx+5FymEW zg8QXQ1(L1%@m;DW349ub#kZDVnfo4;lG5VU>pRdgz=%&6Hk7DWZN|tm{;)KHi<=6& zVdWDwu9g-614_Fb4fF?~lBE+4-|R%+)sCmPQmfdvxdn{3U&gV4)--;cAKk5+jT8PI zKu3*VB>7(jk&{jnhjdxcrG{tW!Sx&%sh@)j6%XSSn@X~-XCGjXJU#B~$R`XvB>cDL z;~Z#%_mMxzVET@nt2u_tY#d>;))DHxeIgHLk621_6F$3X#i>z|X#Jie;1UuJx{<-+ zuhqHuA?YirnbnByc5P^QYB7;;pURv!J%*4oqp=|_2Y1hY3gPk6^!cxcOs(7-%6gM9 zOL-z1)QQke;7QFG{(#Mn9}a%o?QutNDKS#E$ACLs$X8hL6RinwE$Sdnzahz&-McIH zGjE5nvkWoKQH-gZ=ks-)D)h%AOMY_camPa0&qTd)6SxmQj9GrMTtaw`#d}k*a^zPw z&O@4yFFh%AXZmqXUEHvNq-n}4vLM8WZjTlm*7XbNVi^(1 zQ#63}eUnitIu+im+kw9_4nVJFp6G*`-~~*ZL%#Jc7rf-r^uFUxT9_0roaO4-=e}ZC zU0lNg3O<2HUKqIAd4bop98rdAFnls|1VK^DpVw+pi=V@3aM4`;U~C=C8Xqgn^iIR{ zSFV`mrVSqDn*6h|z|?C~U`us0sGs&_rYUPo<8UKJYHq@&0mZ~ESelo_3c04lFZfV$ z5Y2A%q<^iig7dmc_Pr_<AB{tgL8&k-!ItZOX~r#e z4xFDWg{5wD#YT@UVRxnqFTEcm-m^oK&sZnyAe@DsrrvmTy0#oIiH1_I^yegKY$9qp z1!JM-GhAsmfj%>PK|X3trGxxx!K?H;#2yrbMWQw+SWcv^!W=q$>1Oy_@>s0sd*h=7icOx-`BcE>xsy;r$mRK&O2IWNJM_CL^pSTh zLc0z>rkTn_+H<_|TM=Au{Fdo%>zw=(P=%VD|tXw6cc>gGsL5zYyjmj%wiZ!!CJMUAG63FB+-je%3y zSHShK6uz5sS^VJDNzB@%!DnZ00I%aY*nM#tFRwoZ**h~)ahoPn6(1!6Obw0>T+KiK znnP9Y7|MocMiyw`G*2&?hwKkERyp#-Ofm&G5x1Jmq zI0DV@X5)zKQvCC$w`^_3KAbxu8;5OCpzRskpl+cN8Ke<|mCK{?l2;sz+8E9DHjIO} zA2<#hm;hE&yNKkiTKJ=UhaK21NB&C#_?l569%Lst9~vcb;>#l}!_gXERe0dk>9(XP z*&KRrWf0X`KoT$5+jY0qvx@c2>uA|XlL7E05J z<(2qdeJE`SRHex;<@tsp8-9HIT{c@_Y#3IZ$NtSLLHw~&bY^ibY@oIjQY3i8y7QoL zuaX^G^_Go$k%%VqWW=E#%~8|dk}Kbdg&MH}kFtM(YfTT~=;~Euq3n97f1Bz!x_&>7 z*18WRv7ZGm(MY;6yq=}MF{bm2X5o&Yr2@l1g*VQ3<+0i}lu0_!U;qBV?V-wig}NQ8 zjhE!#N-m0`!W2dA`68|x_JaKRWX>Nce?VV{39x#WGN;Fc?0!Tj%xUSnV(};kZ6-)E zmy#HGbVQbuvZc`3)Qe*!M)T8tN<7W0Q{1&j0(7e$qHp5_Y|Pk?%f{-9=N$Wl)eGf` z_T@b|W+Q>02PUz7hARA{^cZYYxqy$K-o_t`1kP2`ZW6oAkp5Ns45#Jh@ss0UgW8)O z(7Y*}*(Z8K(t{10=0q?P83}&kUkwg!zK(S#Pe9O|c;ODFO>YU=+(m0saQc>?Y{p?D z-WFem%UdjXnr1HQMf`zxE-u)jKapawBx~;Pf%;R2p?0glY;n0E>dB15sF0D|t9c}k zUpt5okvRhDgG2b6rstUGG?z#n^&xe8x^au*7&hyxEbZ5x!KW&eh~{0f!D&(-c>10} zbl|}^MCDj91U-}@p5>ol{m03~yDb#vPTmPQDyIB(UM|eZcHnt;1c%4yQS{OY8E}q0 zj$@4j@PMWU{ZCGt&zyOVO;nk|w_e;0ZJL+SNG=MBO-1z5r;XUvkjOLVRp3D(qmVv9 zfqu=OC3M;;e4LR1xpu-Vs6GqE6&%G$-eX|X=K;Lou`bwu97?U!>dDN4ZtRGW<^z@_ zqux7zvF?hIe22h0Y%3MRq@^kF}sFG);YB}daoIeRQXKY^W(`b_jJ;*zzyP@H2K{?8!EqdFc#q^CvnwuK@}~kV?EAr<{1JLEUoOH2l8ufZS1pO4>on?!mW*xu%ch+C1YL` zK9yRilnDEme?;QZ1a>|~T_1U~O7X0EpeqFGcSOG|!cKP{Pef$u!augeY+l`RaFw3Io+K) ziLCkNcQ;A5VInUt*hv3OmFEjroI|H|SFrxVD!M%}1qw(93~w*M^DAn=WBF9UrC~^a zzn=;r&VeK=zX?PpZa6fb!qRtXu*1L!{ibX~|9)GTczYCS8uJpQ%7#Gp`8tS=*a=C` zV|cmnJFWS!7;D3VsA+KwK8)0+HfbwWNN=)so%sbfhs~& zl!I_@je*BoVsXRjq0}Q&h0dF{8@~uUj-DEIvD}$8@MF;}(Sh+Iu&fhYBp14&bVM1x z{QLv^JmWDx=LLCu`!vpxJB+(CPvB@XPr9#Mm@PlkrQM_sS3VSa*S32EHseyEfAVaQiPm*yd#g{w9v%DOcR-vc9Dv_oNmwbypI| zT0Ow5Ky%DjRf4UDPILLZvm`Gcdfg8iTjpB-v-uVfKlm z;;>Qk@Z8!&o{$mE43=-lfih(imdLl_{M?IRzC8f-ugqm1(rjsHn+pD_Ya%1pOrtM< z%x2%ml*4dE!Z%KJ;$w5xli!afQg@ft_}YB}Pmq%0zvLTmhwn{{nUxRT4jz;bNrJt) zU*M#x3cPR`h)1ufk=WLw(DTNL*l9%Jfv5U(?bY|tX(Gn@z02sPxqI=>_j$Z}D zsopInt8s*kFCPd$GIycqPa0@EynsGuwy`6v*2Mh&G}>Nyl;xF5)AHvwe4xPXR4ItY z&k^U?yPnb1Nhh96Z#x85h4OT9@nSxF_CvN+4IzHyZFv9h4O<;B2ul_|#gh*_dDyCA zbgC(Ykm_Z)E@2pr+iFkJx&$6jMG05_VoTMk%~;2$c#Nq{sZji&htHRcAqW4vhO4e7 z;W(jBeeQSxyZ7FPE9M&V!#T%brr!au_xpgg4ow*KFdM#Fd%(yAC$XsR1IczVfM`Q^ znp3uho=z%&)20HqV_+DUliejUDO?EOgF5lbjs?&XD9KB1DN|$e7xpgSK_4Gfr`u;{ z!XbAXR0}jD))(|d4;8ZEqL3rmoM6NKg`9QsNL75i6+t?p7oR0@=Jh0yuGfpf@BT_8 zvGEIGO{w^8|32)n>PD^7Va!J=i73aXLbKsc^6~p?tTvjAGYkW{@5FuZ>)$@?p16wd zJ9>y*>*^&#x|+dG^8+|^OLIfdyWr&T4~8FmiUzh*VcGabCOIt$$7e)ANOldZP5&cg zwiU4?A_9(U%kZRg99+2}-G3$=$2iM!yUB@gr^t_fezEYy}d%YrHqstwlQ_FV{tTLqAzS1`VF}6wBh~ zvtZo_^gn1zr!IA&eY%UW>FPD{-66$bwxbJ!Dg$}8!wk?FS0}J7%3zQcg+vcs>QZ$P zTTe%j;MOvtU^ReheJmt83p+(mZr#G`K4bZ+9Zr1l#|TUU$6Z5+I z#9?T{yK3^`_{-aHR$B&l_6R-xl?!NdcDitu5R-_gA8=Ow8w<=c#q@^DtaeoqRPj3O z_xMX(I=rB4p&7)gcj5WHB8>H{$LPT$seMu*vn(^F4LdyegicNH_%#Yn{#!-9evktB z-aBl+#!;ev`xq`5^_WPnS}yqNb$M}>7xX)rlV>3{Ot+{IL)xF=@I8HK8f^x3Aw%%y ztbsJpMj0-(*yB0h-DI@vEAaY!kHP0q$Fa^{IP2UEFpQDKcBhBvu-c0sGMW#`89KZ! z_%n;JQNwrjuLS4nc>2??4Xu-Gc<}P~th944(S2A?zF%#{yVrXlWRn3SCnuv)?LDTr zXgheB*)XWi!J{K);~42sn0EXW?7o=~;uYuN`TK47a%n6*ZFGefXqfYn(}u#((f)k+ z@DT2ikOSw*)C!A)Oc1Vq%q*agwa@zg!`(PMfK8OamTcd)X z2lG_kiWBEZ(&-isLQh%+{9ii3f)Wba`pcPIa|Wyro{xQblJuK&hj{p_LULb!4Aq%< z3)+vDLFBU_OlmoTzh|q^{lBk)#VcD-omYn&ij(+KcOCAuB|~g!*@Af>N@% zK*>(BWo{e^{5Fo?^6rHL4}wu~wjR!v&439$bLpxzKiR5;{aAim7FX=E<8#HG(87GM zUpSv0N-(0<4=iC;)g`fE-AX7M@er+=Y`EJqA7+;Mo4pruA6tD~dHF#_y2!N_hn{nQ zY&+pB;OYa1LiPx=f+O%CZXNtsrjD21+tUo)3-GnPkT{$X@>i~y@5lU6ZA zVL}V4=_ZjCS^+}0l;g;tN2KMpgpifVCqKGf@YUxt%s%@JC~8XZz6S&7hPwm!l9G>X zR#X|>{icPH?MCEX&IUYR^NP9M7J8nwrI6Kni`3lErrH6wM1S?&;HJfExO6lC=2b+2 zy3YrkH)X46$RZtXvZWK=jI*Nl8L}9cKMT*>_mI_hrSQ?GDM**i2G~4<=N&3QQxrH` zOHSd?^7A;@bP`RNm<)c=zX*4(5p_kG@ei))IOsqsWY72DO5>%3KD{yY=9q9*2OV0~ z69G9TzXi@+EIbzYH?#euXs2-)&e$Z$Q_X5{joTrd|9hFJR^ODGIXQxg*=zK^C4)1@ zzh_d*hLRe?gAm_%i>$9y#CKK7)L#i8;bl7nzY8P-11~{XdN~#yY-9N;S4ixTBk)&O z4?S{hsHt!-&3OC^ocb^0xWT9J+xQr;UX;TA)aJndyDYQ19q5k@F8s-bwfHU}3YUG_ z$Y^&PNIQUNS!E`)+vOs6(}&L)uYs(MA!ke0U`hQLk{$ShEqr|l`>Y1?eLr;R@^gcE zc+pCH`okCx=~ltli%Qg@Uz2)iyQ2ILffbmV2lrY$s8PX82zM=pg8bhwWRWzjSAW4? z?K;8w>XdnwOA)A8snacr0g!uc6^=Z<9;M11pwL2_{T0q6+Z0!#4DDhT;d0#fs|K)3 zBhhwh85*QIz*b&_vJw-=@DPVuIiL6o9VB1#j#@tE3cdg8T z>Fz(tm&{ZsX&pcZ{n?FF;w@ynCOECHPgL}EDEMT)6uLn|*08UH#Qo{O#YY#Qao>G3 zTW3X|pHbn%?tj46cU3rksS?Feb!Zf%0b}>5qNRTZ_X#|MTTNcUOv7Su-FX=fS8f;j zF!iJ^UKT&4+RRBKz`@b|`UcG>9^S`TQ(yz_mqZ`w$B`{n@4P;3U%kT$aLN;Y%5IElt|Js>ltctW4y z6CBtsO&Tw|@busW_Wg&VeYmv1+i%@1n(^@*?)iEG`u~PuRlgI}Gwon~X7|JcL^Jqx z@0Hj(@&gXn?uD;jdZ6{l9n7h-=uWma#JWrH>B2kQeQcu0k6eSndge58q8{(LxgYNy zoJ1UR2hq%p3(&IZG~8Mrj_cp-#UpV-Pj=8(h@5@^u1IRp;>dCAW|;}UVK<8J{WAo| zpJ*3P|2jqVX0RR=MOu@idTCI-{ROrNn!*09>hxCreYWYpMzZ>oB#m+-+Oy^8+68q?obCX%w-d1Ao!~vacNpJou;Y5B!&pa-yx92l zSaA8_M16ECq3`5gkxjNF4fJ0`GjG|!>CRiYdu2R|+EPLBc?ksQrBzIOF3Ei&D`9b` zH9UAP+$Db9B4>|Y#Hj%luxo+9Y*5tT=T&X_pf*Ec#~Mr)^hJq(NB@Ntt#6R@J%GEZ z)_kyS1uROF#^v^f5Vu|zzkBCEWOX8>?0!UUTz>_XogZ< zU6{1+-E9}TQR6}5S*7d^@dAH$I6rI^7@u#3*s&sLyy-|w^-sW{erXg zl;N`ZchX_z#=n*ir{8+garzJ&-f>_It-7BFI}UaTp0R_laQH6R)T;vbE{1^0*H+xy zJdB=DQKdUX*Wlz}=J?>E3U!H6p%1(jsO_o(D1I~yH)h_38IB7`tPSf;e~A;jCHR^JJ1{9JpS-GmhErY(dEKN$xD@IERA7%hB2hTbu%E>p zizPK{s(={xqRS@_!4FnU_|A>69&w!?YFRgL*_sQ7_od$Z_!Q^CVE(v5s|TS?ob9)i7 z{BIsS9FojtH;Ld^+<&;p<1s82{9T4tTHIfMFxoc=%(L+Ys7Nj_>={94lmR?xnL!pc zt5W^`{aAF^h@LPK<`|7{p!0hHnNe{7%C{B>`Ee7Ba;pIu6!shmFsMvDfYPd| zxLTqZ3zUz-?>-OMEWDSFFLGjAYh>xOvzL$-jwDY${KAFb4#LI4zpN_I5QY`Y(c6+o zz)3%oEtYx&jRP`Jx8bWer#TyY5)ch;7C^HI(EPF;A%FWXrh&a184k&{bTe= z_by>J>UzX+Kzsq1&ETSIH(pe9=EmVlxp>ktY9;i0ctB9qf2bX`f#u!#4GB5}C_ncZ z?_P)lGuHvs^kON_SUZ9?D{O@1Pm{6an>LkY@-(kP$X*5=z|(C9nfj)eu+`sy*_VXS zPkRd4)+gRvH`0+#eW^&_YwW`D@{ge_UJ4wi^oaxZ`p{*5DY&k^5t`SnL(#Ba%s-$D zpEh&$>DNqdH{ld`CKTcI?9J#_c}Y}ctH#%_xqzl`O~8C&Nz>jQU2{U#kdHK86XLvo)|f_aZJatOnmbgTd@|3jT|U#S5y|{8x|$-SItLGzrS^ zv$wPO{`-80YcC{Q*Nb51uL`{KSz0{RPzN{uy^7nyDda|nv#g}qII->wELeG8d_hB+ z?-**uM>r_)J11Qsm;A(<+FbBjYe+Y5x(QuXDNHxOh+b9y4Iwcee4mf0c+R5VWN|_^ zxT)^Kz#(;@FnJ^&m!i%h&!wUB2s6Iq_e3FUsLVr4t@zFgMSf|#G5m8$;-wpgk;LME zn0~KH+@$r6=|r1QvQd`!{F;sRBfdealyKKPB268S>VjYCN8r=0VgJTRfipHuygFBj z2b~#CBz%)lYt0;NP0bRe1q|eqzpbY)2V8_z1IOdmj9)?zS;!zR5T4NlL!Of9z{f0i zro%UBQu%r2(9o|1b629{#Dg6~=TRiYZh1^B4-Mru9kgJRZVvL2NdorKnHLLMwFAA3)}XHOowgVJwXF17qHdwX^n36}Su*KWCz zoOxr(b*Ahc&_4yE1`wij4E|kE(;@$YCNEZ`&MPiS&TBPm# zTWIjSElzs#0($a)IjQe%dEEI?)n)wrn6HbEnYmW*uRRs7uxlWR#33k*!37N<=cA`@E6{lA@?jX=$iL zQBq2L@89o#$MKBAbKlo}p6~bTC4p0Z=)mazTd!JADow*#RDo1`2FZ=@}O)O z)_YvT-xeBlVN)z7QzK9anu9kyrm|M63z$8agiD+YxrOc0Sn)O#yu!Y~#jjgnT4y`V z%{>QN`o3I+hZWXF&BS%&ADkYz1X({5;lc}35SNL?juI(+2@Y@afXEuK1t_B^T~<6}!8hd;lYD@Egr z$?e$JGMkw{6=4gE$52-J3S+ir5?}9B&TPYRV6Xq;%V`7L{j4$cOXGL^_K-SyT&Tlk z1G_;#ss;_6TR`XJG+;XM$jyvGQ7N7ox@`@Yyw3pMm46`FZs#C^_Yoc{w8FZuT2Q%> zf(w5)kj0zxNboFCc9CaX_@0%98E@7@>3R;{(n6B(!v^L~pTK54Je#)?;Qo!SqDPY$-CtzHf$4JQ!4Bgc>h=HM!~0<^ec4&{sY z;2}jVx@_wNc1|^vYYyr_kxijhwXX3jZH^@KdVP#@idQ2SYI5*=>nzNV`i#5gY#}v) z$FS$23*7veMZSt}u6mIvN0mH{grz+b@I`_svrBjk(nm&v;nYTq{<97Zzn8!iMNP`h z&leape&VJ-`GMSWbCBk*+2;-(#x*4(U|tr-xrAND_k&{C5TJ)yNimoy%s`KfJ)kCe z3I=%=XqJ~GZXapQ-Rt|s$@-vx2xii8nI^)`D{pd_<=4R#^Y3u!Y7FU~P>4fQ2QV*e zH9Pv=ftye{ihhY#U^iOyK~wcQ&!yCd%6dv#72ILlgjgKudk(YW7V_DgTvVRT&vZ8* zgU;1IKqG1dj9wuN#R&|bt+^xER=JmK47&^tphov!ih#2j=SjJ88q}`pCs)EhLv%_w zC?S78-qH;_eyFkj2x+RQ9!DzPNwF!zOF4&DeQ0h9hV>urqK?d3R=fQZesk`H<5Nz+ z3O;M{aHba!9Vb|Q;V^la#mEWF0r%Q@DC(<2)=kN&`jO4S^}D$^ZKO2`Iy!>3&rZV+ z6Z7FJ@9WO-mSBg3LbMsVwerji8&t8Hg6EC$xj1cg^fhp$Z@(3TRmC|t5jYBtB&R`< z{tCRZ&>bi$fW2-q*2!POl{s&rN+8KBe2-&iN(&k%kHyCeE=1w6 zeosn$g&MS=UJ;iLSU{&2p9P$7k}O{K1veLU@feZU zrAyh4@V_wOP$}-^_ul_D=78?cHDuAUTimGk>7@8V3jUPm`x5%w(EDQtZ2!y&A{*{P zn#Nd^J$D64-rOawsT}VNsDr%yr{HMP7-}qbj;t_y%lYv9yvu5*_+4l`D(&e&50~}$ zYn~2!n)KCCe^n(MYb^#bc{>!1w}NY#&vABcArb990uwe&X3Yf=AaicNaHzhE6O4~0 zISK?S-kiXqcr|w0Z3=_l-}uC&7iyQx#EQ+*wEy5UJlb=SEB713loU_ytWi7ypC{k3 zs0Tw!dFMKcVA9T)WXsTPbTL?qfj15cJiR92w#J8eLh}WF2r^)EUs%95p35NrvlDJc z_mIC=d3Iq1&*4(KPehsnxR_l$v$HG_8p^Ide$5k*?F61(J4Aw0+Lnd+4g=_CScxAs=7Zr&5AI)4Co#Pd zh$Ra+iT(Cs7=2Ndj;@yC9=9k{Igd10IYJuKE(U`+-%YRm^e~EB-4+jHyyl`uQxvvYUxm~-H@3fV8cZooCPUwMP=o94 zOjr>K?v=AxXs-(Gu#gA&fp)TK?b=`xHQy8}K&u0u!FQ{dcu8skd$5#vmGI{ev% zDR)>2_gdI8Wgl5A-93UuM@iFyCv$L%*OW<}mH~PvO_{MC{tt1K)F}Ft?{x z;17#v$p)T7yvYk1?{RR`s+j!I(Pw@&!}z>(DMVz=!KjpZP$hd1y=O#W`KbFKHK5FP zhJO|AEnUSDKe@rLosT(3g(@;Vi|^H5j7$RKR{Gv%zEO_36wbDMvi+Hkbqa%PjW$C_J8JgR%7SBJME8K%jIC-)Wz4IlD^AR$9vQQp4 ze`)%d?O?9jQmnE-9s8Ck;T>BGwkD(BaiyLpeQ9Wi)(I)lQ!7rpCt6eE^ZC$hXv}Wx z?&a9;1lSY1fJPbetnqorXbj(j+S$eDK}(w;*gO|PmgRw;G5;Eu8L-}YuzFSv$qiHC z0%BHiMUQ2e)Wj5Kw{ijROq)z6R25)X_8IuC=0t0G{(#H&vGhaW4!G?78m&FPg2kG< z(EivTes4cvZz=6cuZqTU?YD-($G8HQs`LLxb^>Zy?8xkI@iSsF9Vg6?XR$m>?dGF4 z;-#O7^|?;M)=#GN^^9tK7Bt9v8av?jX;my9GZr)Vu4bx1%h7hF8I>8)M*gV-6-)0$ zTWe)1S^tGA+0usJ>=SXX+#kFhScpq!1=4C6fQut?1!b`Z=z*d{ejlg7`l2^+Q$mlU zSZEfmTc-$}`~Tq78+%yW^ux@q&k4)&r-G_)HAE>6gZg(x`ZjVZm%1~FRA;z=xlW8g zRwM&7*B!$k&sW08LpR9Jifbt2n1M3`f>2_jEcjpgjXVCE!d>tCKs1#k*=i>ZW_7X; zdKctF_N$lRu-=!`S$PP`WhSC_>Py@eo`ZLX+IE(a1~#_!+Lg4pF0C+2Os7ONzJ zG1RLOY!~l`sVBX0YxP6;ttG+!ISxW;?GnMryWDQcl58Sg$3Be#^f)?&7&&&~#%B}361H=1kFCb=-=B%8cmr4zl!Crd z4Hl_3;jB1)EU_HPMi*p|@#=EitKk)3sBKTQXDhHc{%DW7s|a0XW%PL8QV?u1)Nh zu*^0d(^kx)FS4~+ZRA+!-ZhV#hO23$p#t;Jk!KgWcn`+7HL&tV2t=CP!h@C<(aXS` ze&(HHe?q3y>aZuA@6|?BRozH?y&~a^P?Xv93CIm*L1YG^@Rsc{=-x)C(o!E#HC~0X ztuBHy>DlCR?OEZ4>fbPDst8+O)k4&Vi?{$eAZD4n9A?DZv#Hw=`_dJ#xmcCW^|pqo zu@Y!HJ7vHZAw_Oss6C=IJAvtrnb~#Jv z@#hensh**_w#>`Wb`!m;pnA^sp6F!*u;#(B!I#C!F`oM)@P zJktlCb`7KFhSOjWt;zbWE!c$iQE1=z1@E_?B;)0GW6fEHQn5o0p2neA5;dPI*(e9W zdVoilkD-@*q*(Wv#gOftfj%Aauy?;4__+>~NZzS8{z5CPHjrawr#I61$?JrnJlAOA zhc0ZD&;nP!Ly^$kf?ulYLy>{XI!$XFDmelEhR;d6k1y5}4J=Bz3;MHW;^X_~ z@I?GMO58MNBVSlh_q6SBN-zQD`fkGIi9^KYOf%L^UWz6^tkCbX7rDC81YgWDWBIbj zxO#D2CY7`p>+kjB%p>Ob_DU!@Dv=Fa-p{2gJkDW~Rx-@Ibq&8vzDqu09*%RZ=7RLC zsY`r2jBi_q$_4cTrHdZ;>X|Y%BOP4U8o-EWm$}7<|~M09%Idp;y6wSl_IJD#i79 za^*<2*Jl<4jg_MB};N{nG+ z9TsA!`BQRS{4%WES-?q|yOXpT3FLl-m+-~k*-Xcw2>OqnM$!A0@GUM2rm22#{L8K4 zxgOfIxa%%ND`~NhE-%4CbUW?dSqLY3`TJVWM{MxEfX&ypK-uUuZ13q<*!6cRNaUDP zao(>X+R+Kyw@5?E2Q?O3WX*oQXn=1EoYdk zogZN!F&tYh4+H+I^V=+&*rLd$b*xU0D&RM498yDU)FJ`1d$D?-J@L&Jcvw z=(CI+SvdEk8r!7)9h}4zaE0Oy?36i&*{Qbhsr3fYh;pUJ&9~stjT|yJcRW?HG~*fa zai|md8D<_|3y%ZF(hUbPVfuX~u3_eNczer=Y5q%N6Ql_wiG6~zv%9cwsValEdBUM7 z+HAM}YEta%Mw=sVaUSdV+=j0*sqA!tG_^4-E|g;WoWB^CI|Fg#6N~{~U&4e@X-Qs_rngN|q$%?{f$DNGMVq^j$O?H-pm#r*lfrm@^^8OK{>cM;wMzDt>t`X zjbN7PN$4~|92?96a3~-QHy$zs3BF(1@RoO@IcDR63u4si{R_dj>Q2ol+`?Pmi=vdFU}N9n-{x-IQgvuNj!}{kZvyPecF44(MIvLC5{_$KD_b zRwrtQhh|Ele``0cRG-H^cK8i{v}*(p4=cf5ab@cq3}r_Zjly8`5J9-sS#y5(|ERdI>+U;W#Y&0v#{fV8{PnQdi?2E zyb{^Xl|-Dz<1YvCjo}*j_T!c?rt=!ste!?cIemr=3pxe66@I|fdj}xzT_#scpP|UE zUMx_PgPlLt5!>K*u=dFi&mwFAtMq(6)AWiw*ZT@S@yD=+pJS{WdscXFD*rw8X5)m( zn^9`cRQ5;dDQueD4y!IM5@rSsC(#o4@c3y6*FYS7oPoM$3KFpB4w=2ZY@7 z2MgJZj%jFEtOk31Z-eHS@i5iZ7vI^WfZLp}5D@tfkCtv=eqv)VER|;xyCVRK@T>`a8yn4(OQbn6_PO1TXdp3_dM?~4e zsXyTTp=$1Q`z)Sg+6uo#w!{7}_qbXwo*|!{2*M|}I5540yK_T=nn#$>jSd-T_RyR= zdTIrKwrE9FvwBCvI!mf=D8&Y5FQh#wAvp4Z5={%SrncXWxt8=m{(CW_@8@2H*5qtF zb1MS2+iMdd!HiqJ? zQFu}<2T$}PTBP-GMzUfou`-#=3k$=SuW#e{uhksBH>6|Fj%TJ*?J;cp6z=wKFU~}o z!&jM`=$)14@s)J}{<|*%=bL@t$7yji{T<89Jd3cJuLPAu{o~&3n8pRKi+~iRWc+pa zCF<4f<*Xlz;)#N>wCk`UsErtbHj9i%q z@3UPf|6L54+eR}@wX16K3#XEHvKbMN&hV(AwM6o z++V@(UvH}PJ6?if-&XWqaFG9Qc+dN+oBXo_f8V|Hk@Ua(Lgw^zqi~`nINd%;Y`-az zhbx|;Yp@7gEE55X5)QKG3$K$?ANF#GbS+`r&j@ILl!2M^MXAa}-mN)9gn77>;)@7Z zPFr*djC$OLrqe#c=sVkSl*)PZ8?J}lPikR!nK|qpZN)0bQg9i*1l*V;3?_#*;tS{D9{%61rSX(;s8kmuedx1qryL%w^{3=_p36L&a_8$Tb1 zb*8;IK|2S|9evC7%t+^UnYz$@G?#oV4W`9vdazt=BA@g1N2lZEI5hE$K-TLH_^>E& zOu7XU%^{BQky@y}G#k4eWvcXU??sz<6(qO65%)2Zpsqg=`v&p^hg#K0Nmm|Lt}g(e zy{b5Q>|z=oQ^|M8H&mSswSXtq;cUsv0jRc3$K{7@xB~^hpeuC@ONHq;#P>-(!v7LZ zJ_l_!tJ8}y`*E)0C5){8iDC^#G(M~Wxi7!T)#fSiTQeO~3XIu{Lt8*+hbfpX9LoeU zXFyN29h|Hx(4ig4mg~RqM~(|Ub@K&N+Mb}3)*Mf3%p8I zaCt&1ifO&&H0)*Z)t}8wJzRv`w)-Gl@@N+Bw>l?Ck6eUjq%Q#6E?^?ngM8*Q1_Dm2 zGt;sjfy+=oMi};jTS+Ng+4@58MG^7aLSCD&P?BvMMy&hIgs1GK$nCko;ILo?-jjZY zH&+>Po4@L^K_9+zv9SS{WPC+Ot9A7CVt%Ki7EPB3w$K@Uad1;26Wee6<1>gH8XVE2 zVfP6UyL292>^0)DSI6Kl+y5|oXb8rRdWl7n&G;Xq*s13R@5fHTF@qDqL7w2kE77FB ztqpZu&*S;&?NG8x84M->Zjf(!!IX#w(KEL8}Z z0L%C3vOR?-1TOlTfX7VHZ9*U6AB4Q%ebmslegkA9CgVBy7B zjNMzyy*oGt^au99+7Hig|1>w|mpTaPmX^fXUWxOXslt1`BZ!Qsr|?8=1Pk!YB4?JC z!Oz2C9Oy~Xc}E+B9-2siXB2yAAJvQ{)*#jevPL~N~iFQtI4c$%rfX*vz#5$+zL;Ys?v$aG6bI$ z-@u+{^`!Ht7hNsXZTha0iz9>5dUu`JGIgmdiDJv%GQo`9Z}@uCWf=Y-)eMt55nKD1N<)82KII3 zKvFK{Ue~9A&#XGmPHsGqi+nch;6EIZJ)LErE=NgqSu~J)2dxJ@*wvY_C@DQ%(D>Yd za$XLMla!&yr*C3~haSQ7o6ERgH^WfB=`z-C8^v^mCj{A@S7CGRDbf*EN)}k2LtWyC zBL%vT74wr+GF41J(t962LO(${34;OH}J06}NvOqcS^TIVZW7w0kN1%9S z4;17*<@wAJST>J-1H3*q}qeJJ~F1IyliMz(z3n&9ecB5!A^jqTyCCKs4dn*qeQ<(XDkLesgyEVhIBV8|%fI>4_HUEfri{~E z&D+b|Fe*XjMpx!Hdp|i|V~AdlPNMI`!^Cg37V|p3kB!?@17lzO2D=t%+Wl(=`aeGk z8_vE$q0v{IJmWPy%`>FsH3qnA?t5}!{}k-i9t(TKrI}l{1d}M2W}R1UQPk%d2Agi; zvum$$@1!)i>bVgn%my zm;GPi)2ne1by$dd6MRs@M21b^XZRNLZ-dJ?H@H|dj%%7&3N7Lx+#`NQ+Zyr;-e(&! zDZfN6N?{NWEIo_v;j^Li_%3GnvI@6PpFjc=7Q#svMVj69L$LGdXcU!i6!yFt#11(T z?rVAiNc|_xS@JyB6Kj)6b%zUH3{a!TM8wJEZMraW(tGrLRR+m*YsuC*S77nUcozH1 z3=hb1EZL`^oiyBlM^=t99JUz||; zTyQ(d7)0M`v2~&==%{^Pz;pjStokvT)eM!uCatMtTMRpF)8M5^ zx=;}O7KH*icp!eCjND`l`Q^i8wPimPuZlyTI3>ETCJ_AQOrRD03Haw%80eVCU~J!f zs%tcw*|R5tp6t4+7oCxK$3>5Pk}ll7(R9aPB5bV9b9_8Yi;Wx=j$1BV=bl9Qu<-+@VS3jqRLW_>xu<7PeJg$!U8n=a z)<*2@h(fScYZN+_%do?0R@j@h4MggKxfU;Z>~0*vwAR;w^@Y)_Fu|1`oa_M~0~=A% z@ep~{d;vUzgt$aW8AFeoa>k02+2C<6R=#>2niRN`9)(KK*dHZKgD@O?u4ZMpJ;2ti{k)#=|Q>jjDqhl4H!4+P6gW7X~ zU{k~cyl)$c51Qw2BZA*xt!onEs2G8kD(@1Ii6p+}resXnAEA5Qd$3P%K&|0}xL-|{ z*4x}-hosb4h07?69X4U7L+!!aLzb>cmxpI>+J*0vXR}{R=CgxaEwT8O3o8%#D*S7j zjPYvaQ1-9_6mGdwr4f_ZoYbeNb$=mt-rWl+!P}~StvN|Ax^{5KtxluQZzXnTrY&c) zVJQn=eF7#1r^3_|@~q@WIya?a0;jDW!Sa4e(n9&=v{ULIYK3NV-(7dW&z~x6)qyc^ z?1MU+^ydhR@VN={Tg92urU-gHI}XQB^}@q5#vr`p&oX;P(?93TspM)tvyw7~DJAxD z%C^zCYvfK+D|#AB`fYLhg;2f=Zv#r3M!4Sh4=&exh%xhjaqY`AsKc%4 zd@fm))Jna>sd*6eKbXQ^Aia~`K;=*Ksk z(cHZqwubD+6H{Gi`%49u8(xO_o*iJPBEs6V9YM!59A4@;;Km;UXsPhR$T1=)xv-q` z+G7lr%e4S=r;_3i7PN6vB&Z}VpkIUuXgzS0)XhDIez#TV^+`u@j<5+w!H^wJ0ODYpEv`-<(Y?y>GzZjVtN-fOGKP zN}0OftiZPE1vpavu^?4{J1q+ggR2W?)0Vp}f*pHzfponl?OX5~pA2-8-qaFU6k3mu z1<{Z({}?=QP-ZgurnEuxC^(-sBloWqz)REX!uP-But{q(i60fr?VGaGw_Y`osqQjg;;|QwoRuTRSN@gqam$9hC8DKbj5;n~aU|v;U!S{tG z9B9txOaf0rS9c1geS1ed^e@7j5re3dFMwBJ!?1$S;>mrKrw+7KxYVWy7g%2+*M#%o z@%L)9=DF`HkCeb}X*WnSuSIul4UoIggl~R&V8yov==gku+oH@fGy=l7#)?nEPcpfn zxl8UN_RqxH_uwR=T>El;&%p>9(nS6RC$|v>X zZZQ$6-y=c~@_RzVm|^Z!bQ{zjz5=&!2<~Ji!f(|taKO%xI0U_g=|ehL(R&s5?^_BE zvlZx9n@41L^KP)#P7>_ia~8LC&lZH;7)3MZuL7l8VVD)8EJ!K806A%|FjjR8&6lXg zZhseg)4BmZ-V&qF149He5)EkWK1n8R_MN=r=UjGzOSmJ>9o1UW@N3&fT%z>>Vqrea z(-Pv_3vbEyd(w2HIO92|*SVQfR7mXle6)HNL4sxpx#)LC@r;fF2Cg!o3OrdWZoUA^ zPp`uy{{3V}x-pOHkL7m{H4}&9eD9{eigOxg1irev@prKkC-Ukz3b)Bp|KCoy*tDDL zxv&M_zt~51KNO)B<7>Gi@uO*yqc&BVEXH#9j@Yn)iJ($O4r|suL4|N5P`WscR-H*l z)mj0Rc&vdbOC}IM|3DZs&j-?Hp2OvCDs;2%M=r!B0ZuwiqkCQ#^D}xSx?E==mAlV7 zpChNxPI*tl1-Zl8HvZXetUWc0yCjS%c?BOAG;;Inm(bb5Qf_|??*P~w$(AWOLeSbt zbhE&cJbB+qn(J~%Z15QW~9o}XMMw95OtQ-1xAuaV-+?k?mp(290Lja zI+DI!lh06%#N6eN2>W&hY)45j)%I@A>BcZTFq}rS>-@F56_H?0R{8+ql)dD}iItdG3Z-hxht>mDL1zDi+3j6l$LpXL0daTCL z5jS_^IkR8nSN$$dwo?`MjCco~Z;wN5^-DqY+y=}!tI3QGdy=_3a>4M;M_4oN0tS@K zL|=&zkm3E&-)F9;aU&NA@2iz_^Bh)ke%Bpv$zK&F9(tHGJaTnh_i+RZh&w~>^rWHF zG9~%~uE4!rDh!+o^3bH0RoPdRZe z`^>3Eo;6~i0evRx$~N@A7TQ0)&u#N`AxCy=;4b4y^y{TAILha^CWanloi7h^*Sh7< z+Aj)j*(7tu6BL=T+Ahv5Hj@0F7!6-GG~lf~HSUakGniU*!O4)tf~6Z2sMr%*_T9Cnly{Bwl&!O9mraT?w!ZzqJt)LI&)S*#y2mXUSH!C$Xv%w1uR zb+2}l=anw-ahEr2mg2jnhT3>jZvkeUE{76l54dg-j4=((+|zG5^lh9o$XpxC%vvrB z79>t#2b^;t?O6iqM@yi0hZ3!NkVx8pb$^WPP9!hHt$2TnD(x-Xjmt~Y;8?{& z(*M_)tuo1n(385<+tHrKEzoZ>lY#lezggZN|JOd|SXAz5hg0Rj`GsJD$B8EAP& zejPo<=@hS}lSe2rQL`o-$|}d4Mnz_nYYG?5d}z6)CeI(LfQoU}%qjFQx9hI~c248F zh#ZyP5km8ycA-W8RLB~3gzzoiIP3g3EN=b;Utu*@ zNT$=|lR7YS#2AoNd?9==w+lowX5c{1O*mp~i8n6Gusbmy`F&?Br@T3f7{5D%>V-0} zq;Vsj^S6h11tZq$dWAdf_>;t6dW|ETX2ANE7m&5GhLrJn;a0!txNdne_tD`odejBN zSb1ag@#kl9T2sJA)t-0tjUv8vFW~C!PY`l$E!1ox9~Ts%&Ej@XCV$@b za6i6D!Sz}3c<6%xaGeR4%+wo1NIK3TVh;83>m>r*2vMTt7->pu< z!?io{@Xi8QGCGYDUKxPGV8jw=AGrx z$k-D0G*uHgR>{S0YJ}+cgZyx~O7K~166{ww0R}jRP11S|&1HMRSbYPG$bW)!A1xK= z6eqyrP1|6Hu_|dee+w3vSkNi=uY<0-7W=t*1W20IVd(i%JaizR_zTVX-RL0qSnV7HKW-JMDc=38#XkIW_s)Q^5;Z;ZBo!8NEAPg-_}0k?4+w;I7W{dT+0V7 zBMJ|q-61OYC0Db20P^2$B7y2EWN7wi+&t5l7!0(nUcAApIX%Z|WNrJJM zaqM~LdR9|5h=rDGh4ReG=>Yb~F>JOp|XhK>a%0)!54Rubvw*)VbSPNHd&1c7pAK>EZw`1ex;ET(P6 z72C$)ryXrr?N$y(_ijLI=?Bi=Ck%)A>{kAbl|&>X9-nj_!&|N%xOpA8&(NFKUHKIp7W^np=q#q)N!;3cmp|Nr*PS&ukcxW8nLvmCn>!( zsJkGaTU(ya_rZ*C@3Kr7Jv$!7RyARYnkc#4YmFm#F2k8s8Z;<`z~B*{Z*ob8bBImi zB+|Zf&0Cs5U1SV>bzg<$rs%P^`w<&cMzQ+=qIB!!S#YOwCBX7(c%!C^-CfqKz0m=~ zkGI1bBSWFg*LQ-t+fU%c^QCN(+EEPnya&DZ?88dD={Pb`6w0DcfNHQ4m(Y0w>m~0K zq^I$#eGiEKa>mu6O&Hf(EXX^kf-5`^qx*XUFn#I=nWfLsQ0^jEwEhtZUYbfIB(KA9 ze+^WV*#iA@I)rP#kE55IUJ#E5fAO7sKhd1+#-F2N(QwOeqLzFI*L5~x-R%f0TyM$V zPL##A8;?QRbkQ*NZng7+4wkV9GIhR#E!_Z2DHQ{Z}WTR_z8fI+KeI zsKde+QTFex2kudRhk=bZg%6HU7JXq0U0N&(^13c~KhhVs8kS&QF3*ZVP*g(T<$}yzv068>n9ysH?BvergE53VJ@`Flp(ri z@8Cq#C7?lRI4@Y8-rrdcrlV2`iyTV_=hboxe`gCE?L{y&M322%=S_E3=E0*kBkAH0 zY21AFJc&D^PCrM8qK8O3cP+dfXNRQW+{I>iYxR8Gf8r1JegDagZqh*A;ZgML5^r|H zzX{s-YxJ5uQadrm2GCTr{F52O^i`NAaB8&dtuPLSE zB3OS`mBlT%h^r2$vHAS2DCd_QRJ?eOO=6YgvT+C*nq$DsPo=??(obky!sl1s%0a>G zOSta&7f$PZHJFMlL+epKblw*!Oz%&_C~X;5w)wAM)^1n2;E4yle~st!tgpq0yM~zB zzMXq=e-CDfJQ3iCNI2guPp#gW!mn|$FfHc-^x7@P$mDFeqGZTalf>|>*B89JGz2q1 z7fu@OM>(R74o@}NlMzvP-=3$;f6$>Fe^=nw-JiJeYXwxD&w7?0E`l;wb*6U50^)BR zhF#{7Z1W5^e&_KT+fVDmvcfS`+C3Q4dG67p!fMnE(qRuft?{9kWz}}GRV*%f3e?t~ z0j=dhATcTmql0JS$TQWTIPL{1_g_W*%6T-%_&#Tlq(Rya+me@R3Y5Q7;gR>BL48ja zmZ1cD-#Q&fdl$jn`{8V*-c!8SZ%$*w9HIUl&xFn6=a~9putrW3mR>9qjQD0xH+Cg+ zDXawUH=0pf1AYD+Gek5KC1GKPHP?Fc1x^oDWV?K7Fe1i?TQ+o-JUb*ojkg7HKhCAY zrs$I>D>(}cq`QSrx4eS1ZztG{Jbou;DM_uZC79%qYiO^bAndu(3d_h>-ie$<=Bs7G z?GOd3n0N!-KgUD2Zv?hTFXtW>#K4-5Nwi7Ho1N@7!#}@IupPSlA&8Wr!)9YV*_#Xf zv)bUFcL(Tn-N7&uv8vRoJcXbW8j1GF-HU+x1C^d z+s&$;roSbAZst_Iu>?f7xUqB5|FGgo0!(RKOF#cSgwp%W*9 z3G0N4^mc4`Y{HUv_2bUwRc!aQPArz|fV*C9)JYHvah^J?e9ugFXU;dgnH$Y{Nn~<~ za1b=aOxW?0{M^S`A3X~l1QB-Pp%h#vGX$45 zU&FED6WM?J-*T?O7vU=JUa?LHCU>J;=$su!^q>A|5Y9QmGM=}hSkEDtpg$Vwj11_C zcWShH_ytJ`4#WSPH0i_z$Ka<_0K8uJl1xZH1|$E3eg)5jR`{#+0vz*RgP+AN!K8n|%s_b(_2Hcd z!9V$aQ-U(ji*P1=xf{W8`F!{hybr?z-jFKYJ(%253^hn3=#dfv&NF8) z965@5*nEKRmNx91-*k52$7J&QNd;)#8We=5$Dnk~H?Ti$fTu#A;`z9HMA`EzM2xz} zcPwLZSgR9bPMpOninc73zXl1{J|>HOG zo#@pqF`%r%_l#a$ARpNP=^$0;&p*Fx_z{EUeoC~!_9q;5je`quQ<#fDsA~@XK2a=uc}u{=mbk)2(QOcSZyc7J2H@M3F-R62#-KA#u(yKe zVm!GHf31#EJ=>Xh@bR0fhXFG%^`9j^sOIO{fg9Pa=lXQnHCq~E8Nj>W?&CkMAJ&%o zvaZ+%AR-WB%IeG5@+>>P4-gKIYK5fRsRr7Lbm6FUI^;OG(zZ*IRB$-9^76Vkuw8Tt zP42gV$MkgJlMpeco-P6|MT5j{>rGU_^RO?r0Zp8*5OMyDV5b|%Qu#ddjen=e9E||( z=-Fhh-}n#-SX5RuwK0+ldMZb=OXPUQ(J0H<8+0S0<_q*@)^rewE zpY%(SrnDRJYz0Sn=g+}>S|=M$lF)tIEI#Oi9CsK#j^1}jgX;c?;MV(sTzOLlF1=Cs z?($8n_&?8Ll{R@IGoPq-72#WtAS~PC$QyGupre)#dlrx*c9!cUS*|CEvAzL`KQ<5^ z)`pAS=4;cH7Z*{P-=86q2_D(jG*Fwl4h2vi`s-$stfQF%i}oC3?Ou;n3Z`_2Um@FC zyqX@nb|2G=BAH}U0-1EB3)U1@<0Gvkl6a~X-^ku$DI_7=h~HIW;uTL0Vu_6-7=7$SuO;4e)4^TD+Vdoef?s2^^KF~3pZZLt z)D>z_4+q*N^Sj|Dqphc3`xXz%#53k{w3)5iU zf2U!;zZxCd{Dlpeyb(88K7xS#t|UREK%H!b9TBTwPiL-1t@YM?z~W~1XsZ>>G`@*l zwO5O_0SNN4bPX3hwS2NVy1H*_lB$RUs7Lj zpQ<8Ndv_IQ3!$zlI~s8Mhp2+wZ?=sb22j~sFgoDN=r{Ws&qZcgS9;AcPwpYmj%Og_Mc%Ps7Z=~G-% z`kh-oB=AP0Q+Z#=yo4j_z=i9ZQG_V)m z1V)Y;&YSnY5LYFr(}Mfcsm6%$C|#h$#m=%+=f_mhsDVO<es7q7%Ga?&1}(A=)F~~ZWYfA zTtWtiT?W%vE_gcO2GQN*hNor{!DA)jYDLj(;p!}LbU`9KvRaBapKZi>H*>^)EN7wI zurYLvnG2*oHl-y8L%}L31!P^9!tVdvcYr-xip5K)=2Q>z zuIn&7F!vJq-R}YGzcZjWYB*+oeq~c%C`UitkAw63wv$C$VnIJ+1&$c-Nc^+#mylHm z!>cOY@V@;NUOpEO3-tAP)wg>PmF&qjY~2STWuMWp@UqSPSNZrLs1=7i^bs9iGn6+y z*1`n08t{{Lgy~+x_z|}&#A3{AEXr6~&~WAetc+0N7Q+Y74wW1%7%0J~{1bvz8X9z| zz8h1to`$n0UuG}l?D5P)BGwaJv{Ew-Fsf%eJ{)`wBnFsLou;MKS9rg;n)nsv@)fD3 zkY!M~atp5B?trnP@;;E2B;jEhN!X?1ldZLOwS~ zwF2~VjYM*8_IED$yNT%EX!I0c!}P}i)Ozq>{&1lj#!Pgf%{TyF3M>1^3pbt+s@o&r105-x2&V^B0rr&Lj^Nk`Zppvy1;p;e#PHDBd}R zti32hJJxi7vsNmx3sc~Jv*z$BV8_Uf zT-H>LmMl}oQ%+&1yLLE#QZkKb3ti{X=V!>;z*;z&s|~~QhQQLD$KYG?576IPiJDSl zz*X3DJna(Z{4*!h@;&7w`kWqDduGpX@kUlGkp!tx5`4n*i}1-wjxRbm04(49Lbqw# z@Y7)>?rCpCoxd962O5I&OFA*zVF@_trot@yI2d+pHoK50@N~z;K;68<5HfNnFWn`E z4JF2WeVq!eFCGPMdwNCdUf&~^OAO(n+ACrfO2G>I3i@Z=#4TwVQ1@F5GD5b%PPP$T z3MJv~Z##T)bR7S9s1@674zuBnmr!H5H;x{VibuyB#j5J_u=nRul=1$DG$>zuCc6SK zQ62Vsn8P7&Ni^8^Tuc(xc;3b(_+^9O1s<6vE;hG-_P-+j>%JMy(T^9H+bR$wHBD6B zsfE*73`BT71NUW|m5dbO?~1c%tW=BH`J3omJ2m3nR!z=oDbb>h^0Xx+5uAmcp;^dU zZ10^)@a_SAVY&hLUKR|auFHeV?@#chPm)i!uw>2kMmAAX{4s998`3gvBS`5Ugf0VJ zn!Y(7Ob`BtZRIIo?<7Y(P7I|h*Nx}5p4ouiD+BmvIh=oBx5)W92k067M2turPCZ9P zu`k)-{9jluyL@aSw_1M(f1wdn2=0$}`C>>lUkEd*3doNS4&tzVb&&ePjMPpGK^w~r z>{VVOs4J=2yo;~HxMxwY(Rd=9*R3J1-&Mo+w`o(JUyyfmsiG zCgfi&xmAuEd-Me`EI|eL9_e5w8wzahNaVxQHpX6e=+T8lRq&P8LT(PwXrFXk;$_T} zzrJQGr%ZvzZ5Dj}nmq6m7-V>+)`P8jpZMka0QP*;b*wKjrfQGk1g^;^IQ86F z^fEIH*9;p5eJbU6^nn2v`-#Epr5tzPD@~FwJr*B#kp&OE8!%zi)c1YeKuUIkHWkJ6YfCX!HU%)aI17@ z#Yz#l^}ZW@dSC&_IRPEiEhziy{{)| zm)!%Xofk*GKDsGhec6zg&e3Ou|9yo=@v`*Gr+w&oXd5}_tO|;k7DJgsC@h;436VX| zz;w-Qe(padE@LtcH=9`E3$4LWZjWS-ehogkAC0G$+{R=aNgr>$#T4a&v9D|p%(cuX zdYjew$t7Fk%t2-C$Y^p9H~a|%K~Mm?PUGq zGWdJ;D!hBYf?OZl1R4&P$;FMmVCLCP26A3m^+$?zp)*K&&BO>+b;YU}o%&iVR9K%rQwxW2&-+^?s{do*I-3Nxf z@#Lv%6Z@K-T(J8KgUAVf__y*6PJG^la&^F|;usuna2X!GPsRP))??z-tFU0y8k(cL z9GasavBnH(x^-g-+&?ENIL;ffa>^O#Othpv{x_k1Tmw@smFEwO3*lJkQJiDx&dYXN z(yDGHD!o#M1a+K(pwo}V|1^$cM9>PhZK52V&~_HBqc_km;^(-4dVow+5F5B9f;}rb z&6bTl4h>7spri74+{|3rGMNtcWz+*aKXDu_uiik!wTrp2K^I7mv%vYI*OBhPCg$EP zutz4v;-tJd@s)s)H1ug36y8;!5w{4x_3b)N@u|QYG4tu*3l6-qDvAx=$3eqKoez3i zF6^3qvnh+e;-F3!{@i*3zx(z#Td_->&vrVBC+=pzaC={<@VOGUwj9Oh-nYrG z3UiFPx&Tv`r(#LrLeazK-S8sElrJir$FCdvvi}S$xE2&c;_V*hcv0X3FB(R}7QPUA zlf}Yp{2=Ce2*0nnfXgnnkX{oNTq^mF{QW!+LuH#`!m>$JJj8_W5Ykuk<6T9PfxB_` z__dg|t51A!RGaw8LJv4}@+Zq)dxA`M9!5`|-ofW=nZXn5wlL8?OET`CDK0i0Lt4`2 z(j)ysa>G(Yi(SUkU5Cf%r?GRAE=th+G?R7tMeGvcBU4Oi5aJ>;>3F&>z z+q@D?jBRP;{>yhJeN=!o>uwPuN3eYHU~W-6f&Y25Oqc;E!_b3cpe3ph=Xwd!yCZ!!hJlw^)Nl1BguUnYRQtN4dOWKU^c3;_qN}>IbbQ=YyBc7 z@~i&QxUxGMJ~2h!_pk}b))g>p>1r-cH$}gR6(aBOPVtv*2{_41iT4lC=61@H=&PG2 zm}S=<9($@7R=%E3kC!fIXRPeuL)1qs84?PupIy=H?ocYZ`T*$}(tx2E1vu366Lk3x zpi^pOX~{1&K6!^El?+$pyWiU5zV{;fqf8xN9%zT`vPKr2F$F629)&IM^D*e9m~56B zi_?QOar+Nttg)c{%cp+48ZXHQggnP9m4&z+2z}W`C22{_+>P`vp$$r+Fe4At&05Xr$CUgO2Gxkl)+*7WSr19 z5S#VHP;@#I1??V$Y_SHXfmxVc@({ZO7FDTi8q_|P#k*JE2{W-AI6Gn=`}5TV&+}W@ z)Ygx=sWNzlNzlX|fD3vLxpJ5Ywsg;AuifN$_rcPs2aHnCYH&WTnMb+Ivm0#j;=N+E zz+0%IxeJWDeux}Xlb~;p9T~VuohDqiA!VHsH0%!*wdmDCh_2|}lz-@L zr+}Ji1t^=J0^PEoAVP05u6$U7>eqYVsEi+3G9?OvoEk9Y+aTC1KS-=Q+!_xm--XM* z4(Pn2S3Jq52=TETO)Gp)PWLMcEOt#+knRQ3VlC*t${v{MOhIz&I3BygPo!*E1$BE) zKuF+SaC57LE!Rr%v`Cs#aWV!upMcz$4iXn)#bwhM&^;F-QOY(Bg6ua!=EFgB^skrr zcH(bL*moD6eK*HZ|32e8|58*CI$m%~i7Ov!fVPwYym#*}5@@HwS6y3)!wQ-UTtue) zo-oIo_;V13ZV=d{*y8;_87P_pZ@KnCgo1SCEm)>;XzCZuNg_0V4TE}w!OCQ;kT?|s5 z72;IIL{ay`y#OgQ$be19@U`kHUfH9H0Z&FET_WNEdoPo7KS%Q9MHw(_@q66mcmo_4 z>2sg8di;ES9LzaLIM+3%O1Ac7>dD)JT5UG_ z#s!ST)!0#J(|J? zDT{HyrMGx(LNdwUBt`9mQsL}lUHokLx!DWO{a=_-cP1L1FM+5T zBhd7sIn_y)L-Ulk*qKG~=Jn$+Bkl{CE50hQWc~5j&Ar?;+J()&Q%H73o8!M*8Z>BL z88D(JPTX0G9kTbp+B*;;4h;jBV0k|KtTtMFevfBfg~RJ1%JiL(V^J}=g4vYPKrkHQPwi z=a3G{%`Z`*&6bXI_=~;93Vii?p;JBV1hcw12TC5y=JkhdxLw3?Fdz7XEqgA>M+=#m z=gD@~HD;v{Gjsy9esLw#heLCg6211|4X>^a1?imve{I7OsJZzG_V_$Tr^j-Y2_|W(6nqq* zV&io<8=r?Ui`HO~c>o(?sRQF3cf%3Ju{%+j>x@lgMTZo4TeS*=`_^Nimf-4J@`U}) zN)|1dUJh^CxA9f-UF=Yk7AofcW0MW{2)h6+{-z|EyqTJY>#vRw7ysCchosf$54Yp6 zNL+`L3kGqsigvc|$4&?vK7iRQ>BFO{nlvI(l6QxmAP=WV@Fi)MT>t0*+V?I2LNW$m z$dZX*^71)ziApAMpJT9iuP@l7xTD`oOI|Z}I$N=33U9vt5Q=2&_?K3F-Vk8`Y?Bjn zn|KLY-hY4@_A+$UsS{{Frx)(rzr$*)ez0yAV?I!KFkgMc60R{1n6K~67dJF83%S$K z7OjWGX$P1&xD!Lo|)&kdgwAzWn)a&`Q0Nk zQg5QSXEa7^*JBOYF}TPr8z=p}2Kvk$6bk1;)6_=(($fc>Cy%4-VhE~D9!;KyC8J;Z zp91~#T`XwR1|F6iFZgS9d9QgAS(HB*;$HqEUuUXtdqu%p{=Jt?xpdiP;Iv8*)i*+6 zizdCNbQ`5FhvCTWabTIDNsF>hv3(1ZMDydv3oPY#P~<|Pdb~VWJr_t!tUr+|+23qT z!FU{bX(u!mN^-{u&1AHJ2F(B51R>{?(2L!NLH&nV)!#ypyC+R+XIS%t2Q0X(hdSN= zVK{#toW~L?{Ge%R8+;me9Y5r3fUwyPsQKO)R+haWV^1m2{KYjerE(rr?>GZNk85$F zUm(oBk_=@l^3Xw{h3!hz;x$YQ`!%~^e9T7vZsBht`Z))0O*Z7+3w9F?`5>(7xJP`N z9uW3<8Wh#Jl3N`rTw$&VrX4)VVU{H1SzIH-#LB2zZA=~|>OooQ5{MWulkeVXh=$vh zaK>XD?7LeoJgc8$vE~I(>#^YXq+i3Pmky|ZwTwNuz*$jeKW?HAF`+vaPb%ESNBbIZ z%=FnPajB5KSYpDrlDGK2ZwIKKu7RT8^Wl8q5ngvckS@*>c39etoDGwW zY$At$>wy2B!#wx#X$Ta$STc#;?8ORaI#eXM$(E|qe6cpKtA7c_d2Oh?JPOjr9)mU+CN6?1nTj<25QuZz(6#NQByv##Hjo%38yx319>X?e6Nn?3pd;%U=9gcw(oJDZKjuO&{Nf71_PyS>bzZ_uGOi zln8&VZ_aH_tfv7p<8fpiP{XwbC=*jIz|2 znT_kGq~NoZTW~2)gI~NM@C>;H1TQ-)JXe~@&oM3V_Ua9AJr=>kWInU)7S}-jH$kHz zT9nQ>hF(Uk1f@*jS5+^@ME%E4Z(C30c>vb~cu(qf$aulyHng}@VJs1w33kE`d z`o9U%)Hb66ik8KT3yd?#r-BDeBj+M$t<8rga-XoyEQ9piyDz#_beeq4nF$YO29VbR z6MnZaFS>G2@N)WP5zVVd!A@=ls2OL$W6?#tzikLy$vOfrq- z1tvW*V$~{BAg@RoZnvtyiM$D5P(K_JKNzuplQgNZ#TyJX@T4`$G0+w42>kV6+A=m7 z+WH4me~C`a(Y?dy5NT>;dxMF-4dV+E15venpeV>zmEIhcfuq`kU|7LF>}=}?FFRT8 z_&Sd*-h2^Wl+}qU1lPiWA>Bmj;uUDDIf~aE?Ga+mLid&19=8SP@ZMR|4|cT0H(pVbrvr%mK~TDRfe z+!;s(ccAs%K-jbHHAzmmEaIBSiM;!LOp%{Qi>{YpkoXH+{k<2IwtL~Hi3ULXOUa>8 z`6#of5DVh&z;~tFB=?09|Ke&$ZylVA7mKrDPG=x4Q7IDcC4snF*B)lnDd3Y2Y2?MX zbMW7`Xc+#viFF&>lCJs>qQw1oVd3_#z zH8LK9vF1){zu^VyttogG>x7%YdhQD#`T9!TkKJ15ADHW)fCy#`kSLz`qXt z3&Wiq~+!_^9+(r+t5$58Pqhj_{~AdP&`h7=iNTSlBfH_x^Yio=_M1e_eg--Yi7`-$;w=N zk2cMy6xf1E<1l1;6I(xi1%13YhTTSlUE#kA;=J4;A^oN}<-$tpc0~?yep=9Wr&RbJ zmrFt>pJH_bX2QG4Dm-FZoXE<*5sQRpkYsc}a}2M**&VdgD08lR@Wz|Qh+uzQgKZza{Kx`qU;u3EwGZdwE5Oy&u>mRZEV zN6zNI)p4SqV`kF-tk1)4fy=u2ff5x7y`q)E4rAw+RJ?4u34FH6LWW8Z2{^r(KiEBo z?b=x(j@yz1A<0?rX;eA{ulb3VQp#BR{Wd!#9gj~>=)s&N>16&I7g}1Ti0gX}pk#Cr z%D*~hBfIr*rq+#p=-tpt$xNyMgNTYseUWV!;R0Pnyq{>YC741xsS5mccik zP)4zE4zB$;6g&DdK%^o|C+vMder)~$I;&Sv_s#F|Y8mByy%PN2NJm(zehZwM@8P^) zCo*Na1D&3|8x;mfa8IH4{U~rM_^&L%Q*aRii%VJG5;=Z%{3@=wz0NoUz@Ll3-BwU(b>c8tk~j0M#hHDFL{g@?Y+!rrsbi0O=6D8yZm^~x4I z|Ab+j?KYCCoN8hrTENuwl$*4AU%tcQLQgzbqV=rx)S8mqYl5 zu6X=jG7BC2#^UiIX0*L^4!vD5oF`^EFxjQDLQ}n2Udquu;biIjA-9Q^B#K^D1H){=1;D{!jAz&*2j>yzI#PHXG%ky zV>xu|brS7&M$}c^5;04WdZy{o@jd`K=dQC`EyMZiA+N}Yy+#=HAQN_f8jhB#y^w>I zKv!$(GP{pR_;&1g|Ha64%#Pv8T1jJ&bcF!DqV|q)+%V3R4y9X zErC6oFQBW;a56BV1XldyVDO_Dr^K7WP)|A7mTM1RX`9IF7)5vWjhN)T12)=yA(gi* zxjUJG)#oR$F@4)u@jxy3Z~70`BywWos&?V`=Kp{eji<&!hxJeIK^a+6jzbijTelD^+}bc=+Dv-f+X6ngC9$=K=fN-cJuJNSEIu7R zo7@RkVn34QS@RhQP&pj}{nLl=l0!ONOJW?BOmBo*f!DJqa6ed04TTyq9ksm+a|%)?T=``Jz~cd?^q{G_0HdkVT9 zWRMo`ST+aP+s6x48ENq-tz4=*_1-~{UbB!=R=+FP5c1l{I)Q1c?PIxE`s6P z7Q+vNfqY7`(9w$;&2P*Y#k2Kxv4B_)acgN1gf$605~+EZll`8AUjGOs%ih9oI-d4d zo)89F_4c@l8Q5KcaDMn&l&TyyBFcoYv6x81x0R~tgf(A%2edzoOy>!Il1 z8V>h{o`*G#TZsCmM7Z%=8#a#+o=a7i;GD4EIGaBjPk)VI8@}9x_Xj*8@u&SoEz~ZGk&OV&N5?!irjmd3xebsNW zBz+`lUVaRkMlXl^De)-%e4l{08^LWp0z4c&7v2QO^6xr+=wk4d{5iG(HJ)C;Q)+fR z@{$5f^Qyr&*UaddO(VF%_h4ScW-!k|u2AAz03Tj`7v`MLaJp?78ilk%&qYdIzXp?A z^W7n2lQdPV)Zljp=8EFO8`*)ra&S%5!(iLdqBjGTd6Jtx?NKX)`@#TP+||SK_UrKK zb_J-JS0LX0WhguG^#T|^3Fg0*9*eB=qhQ6^V8A7hU}S$Pp1m}kXidL?SUr~^yt+#vIU6tz1&1XLQspz^|Xw$o)4U2tL~FQ#&M zNcn=m5X*-UkMaD=no?#x^B2tet43a1>_jj;41B5+Ja=6sS}4qU-JFFA(z*=;|lS8667c22puQ^vvaDa!agf8h78~SO<3Xs=tD7b3B z5|10@L-ww7xI|ilXRGI}QUFcU7SxQ~&74=7(pO5ify1+i8-o90~svkcoX z>f9)_dlG;>{>wxIorONlr!+Wi@d$PF0t%|@|G~Kj)-?TC5gHw-&D7`giQ>y&L));)G$T5b%vw8uPx!MI zzdjJ=0u|56)$9Otc9#V6;sNk4EgEglv_eOx3V!)f$0miP;cO>uNLJh}_-(V`m^FyU zuxsEecZZb355ac==lb?uBbv4G0{a)c9P3tR;@1(%eE62zLXO81EtmR{SAE~mSu9Hz z-9JLLdLEOCyc3`{{S2ti?ZY97)3C38BivlLOSIZ@JT;IkV$sx%`ml$P@*r1qaM%~N zb7~n8-_|CXy|3Z<^gfY&tOxt5n@nCkOo9Uwe_^;{jd(`Z77qF2p(jN`v^-vmS_wSX z$L@AmYg7;UdRM@`Tn;-SjjcL4vFD2vy{ zLPzrLCrAxaT1w<1fkA=I#Vu;4x2Pq6kK zEcM?^jNM1^N!PAnerXu4lFY!O5#wmM_XIwnJ_&ovhjG8F+U&!`3;0H0<=80fMM=$S zoVp+ngIk)Q)%_#hJvJXlPf@~K6Y?N7G8c7M`%u}IF_5_D7+8E-hxQpGxJ->2KQJH! z^J3GPy};EdkuYOWI}VK><%601C_GkL492fF*r@H1ruzOH&{#efJU1!RQx{~Y_qKlc z^zjXg9U%+rwiyd&ObmQkcZ>aJD)bN6^?Go-Fz$j!Oj=9(a6VFP+;I(GF zx7!oiUMO=1MY+G{7q%lRxFn|MLa2#QJZeVb_+eG<%i? zytV#-{(TYHXM7)9mfjRiuq(yc*YC530Y8|&=O6slM_|(lU(|OS2fs_c68Ef=uqnm@ zyKhcIXAfsSazH((*t`?}oi`7B2Aa`1+k_0(psDDyOxSm}58#89kFmF{E9slnBWbyk zG{2Md8qS_8z$Nyl@X){4c;dlvm^JeS%9#k9vZvZulN|?UW%tn{BM~;NtAnQVOF-2` zaCm;cjR!Xz!&NH=gV;=(&geJgGk)zxm-J2in0XZ@maayHyCQhF;s-I)7P_LXhTv4f zK&vee{_N{xssqcgHgha`*MzY46iFJ}5(E!3W5I3NF!9g}XR$@*GVc8T82?r^<7Fa; zFZwQlP9P(GbSw)rjile)qe(*Aa16%N;wjJn;ex$6Hs*fEMK5-Qz?bK;e6iU}oL}<_ zmz|g8Z5dC$OhkJZuSs zhr%vAZRK1Vf6ti8Z5@vBI}C_MfE^8*wvKLEqDp0T+Hi8RKK{mFSUmWbxLn}+z9_s0 z|AO7QdrmvMFzYBE(y@TA4b;E}A>(D zA*aN&f9_-_Go@+T{8BLfoQ4Bi1V{OI7hWJ1xny_mN7qZ!}a<1~2dGX+lDO+-6%-3UNhQjd z-6E$i*ojPOFo{7%_nx1E#SIN1LMnlc$?F6%=!KbH+UQd1DQy&LQfA43wuwp zB$Zf{MB==A2jJJ)C!*Jtr){W$EX@rOoSb8e;HaNG&yM#*%^pLx{%&JIfW$C7JLdzm zXMJZ65(Gw#?i|s`jFa$l?<4#;y$QveTHt8^W@!0T4cBj80LvsPnztiNT-S92rhXT^ z9ixSQQhzVbJ+~E#t5;C+T$m%7J;$Zer{UFZb11D&0O_-FqKW0VVMOIs(OCm?OjNev z$+M0S{W)jh_;p#xsk)2PLxp>KwkbZ}$=bw!CE2Qk%6`53=Zi6hMw?(c(nTxb<~ z&Jo;@kCV`6R1(bkZx;A^$*{^$N&d#TAH;rsBHJiOnv>?pe`<{4;kt&jezqe<7_Gwg zG-uHK=*AnQp5Sc5JXmQp8FUhIFk|^6w&}nee$##mR!5BGk8>kI!EG-6F{}@49t5#V z+2`5fN@Y6Z=@XbdY!qA^5Dt5`jiDiFZJ=Qz_(Hepa*xsvp!K(ooOYcCXZ%f>$=MMs zf753O{rw-Da9WM|SJR-wPL&Qj`c@RW-xou+y(M}HS74pPJU)16IvYJS2Tr_{h53iy zgOQmetMg8S9nBi}*yaT8v6Thee@eJ5z>L;iSEKtZ)(Smd3!Js#5}W&JFn`};4*rvd z!s6HEHX5xXF|5*C9Pr!1G?H&y zkA=k>XvyjvR_rv0j~w>^Yqy(2#^6$%v(z2^BU(w(pah(yB7=uNA47im3U(ath6gTl zAUKP#Vh5pH{m2qNZGK8FmB-@jc74d&HJLv$E62kP5%f}PDZZTZ1cxcFhi5s$&eTw{UuZ>u@=^Lt6#&OA4pYZA2XbfJRi0Xm|?d3jWx~3urdNK#o zsJjDb^oBB=eNPT_uJ;4)+=O*LuMyW>!XIDO}HWU0W+u>mUp{zo873|sn8g{)|PZk^u;*D?1ajw;V znB`H4qJjrdy|105Io80cLkBT1K^u%0_7R5%Juq&FCV#s50F1xPNbnFiqzc-8BT_7ft_LV zaBS#Ej@xV5dLu*bnIO+EJ`?7;en-W3GDh*8lV8Eql_zjQ!a&&9tw8T9dBg9xUN{~2 z9RKSdPdf|~*a{b^sjcIh@bjo-+;HLrx(LnjX%QRgvFe-naoRL$@4A&g$kqhKqq!_W z`zmVH#=>jv2L0I=S!%@uUi@wWuUH#P?tXAZFOescl>JFMoQq+H;yZTs$t65se~=qY z?}CZt6*&Lt9egbCDxSSoqk|f?sEo%XY~H#SjkdPoY)w6iloZ^2hYC)GU4gch z4zN439xj|r!gcQlW5vj~M63NOxa^K$F3TDGeIpj=b_B2G-Bu3y)D+p0J*}%^AesFOZ|lO@g5J><0SzyC*Du z<&C~0yy%boRXj-78TKEY$bwx%iHe~G+Br5ruh@uQ{oV=Jg^uOIaXV;cwGmfMGsW9> z_h7DX2DDF}OAV&Sl8LIZ0!J3blee|w>vDlzC2KCskFT-Jh{NDez=5Xw(;cA&Sbba< z{|hwyB@GrKa)Y~riS42mIddPbHVCj8lEW1!f#r?MXRiCknR6|f!1zy z8yvF$wTe7ht7HXOSnUFddO5n{hVXZ<<9Ju97g|HZao^YrWW>q4C`dC&PjvvX`rgS* zTk;?a-{U}?`FP{7uu{xD0avX|M0Jx#xAQb^58frA?!z@@LBgs$*3R#cIWCF@2&{ZT7A`P3&eIQE52 zxrsDCvA>7CYJ7|1zc0j-8q#z_<>!JKCAm)dIcoTZ3HU=f8>+#M3Qs|+j!5#B+#e+f-Z|xey zGv)um!Lg-aqjZYM>c2}YQ8+Xo zmFm{8=H@&Ym}*Ov*Q$V{&LrL$kbnWD`%um`5|)kDTr4 z)tHTJm!bEKZlm0>!(f*t!+T_h(6Wn#L{;+;(^zGVv5Uj;@J=N(mYBiD{N0b8FE3!6 z&>3>Z95 z-HrwC>yC??##RywgRR)^+6mSk$HC8_0C)6F#(&Qqz_I>8Z2Ox~EDaIS79V?hm|4;_ zXGhcV0rPS7v{&SXUnj`kw}Rp;n&>?3GqaCBizkvryzkf+aQ2D8^J=2 z1}W0m$Xn>5`w1R?y9$M|RjlTd3_Yx<$b*$Nc;of2Y+i5*3hP;Z<#Ze~8vdLlsB8mo zw>OyJlnq{yA8^gZ1o-G*hR)GLg!^V5R)=PZ4qUNf{Rj2yqJ08SC^u{fXlh5}^MWq8rgR;)PtX?2 zhnw-btA%X8YcyynXJSvwcgXxy3g3ejcz3rKW@K)I2jAMr;Qirn;`S(kh1P`aYR{ol zVEljHx&*FB9RM}ad;HL9PWsL~A|kzDtZ$a3k9{W4sI$WCux2Fv*;WX?Sb;{*#_+T| ziMZ0f6s#5t4$C8TxLe_xxXd6$c-J$hp;03KIN%KnhPzWfxPyHf;f9TH(sb~(G0`H@-W+0uF?3wX6t1xhx3 zz@Q`Vah}XuD3(t}lxRR-<(JrWBSZXLSDRkCH;_N@oG$noa@paAbX+A8aR+4q16`Ga zmSaz&k^5~Dyy7A@@2tjA4@1GpxEP1o_X=m3Eq!!MjFX1xVe;xuw&|o9D}M4CCW>>! zr#%ayj~7}mXD$Pqt)r_g-rz$mTjaJ%?#^No8JCDi<{Ue(l2tQ(0RoU zP0X$g3J>thZvx?-n(B|6_* z=x%JF5U*~`FT9(94uUUuh*dc3D!C7lbH_6CKrfOb>yyGQD{w zkx(s0y=fv*@b^{dU^raxQzl`!xQzM#(xsll|5W)yJ8|0jJW~G7oWG4(1C@XK;Gj`4 zI89ZBi^;CEb@N<|8Mq4q6bx|w5rJi#{Qx`;_Y?T~g?K0jfUV6D@?lUOl$tj}gzpi! zdhv`XZSH2CD6fxgb7gquvun)ls1Z27tUxJ+H)47D-|+IHH+Q#{fce9vVAak-aA~+A z+ERBFTUSSuzJNvu-!vZnICyg3-Pg&X0k`l!#n}J?*WdC(DyU2nfnByIb9^j?3%{RZ z=X#%zCCB8b&);)4&ckeAV~H5w8{7c*$+2)ZvH~<_Br{9T*+S<=hc25_Qs5vjiMiEM9WSs;KS%}{!IM|@$Imo<8uw+q53X% zNO2#$UsVa6M>X({ZX^tuE}Zo~yG8cLk$JRNK)>+5AJQ|3r76UdnOW^*{r8gsnBpEh z%`u`;o2Jr(=`wWXl(9I~&W!7S6dVvrw(#r3SM2ckO=ej~!Jov(s4+8w_P?IT_ly;0 zffJq*m*R3!;JqHu`Y;!tMQf9-JL}2dRl}&ydl6<>wXtID&){`k#50#~!Gvl5!S{n9 zaJTEUSj*)D9{ceC&y|g!O1kr4qJISwUDiggtUz9O!jcbkO(n(uZ6IfYHqZ${WmqM% zi@kp4#8Y>Mqw|UeyjnS%cGlQXYAKC+lBsa9U_JTNy%&f4vPHv_KVU$EGH;fa$MLhA z=&N@VxPsRLjO~9fTGI3df>Zj%2fBL2df^{2Pj0@z{M3Z3^1JYJeS)Z{ahs?!=M0uu zZzBQ!UW#wbNrfPPT^^`-ht*F=L*qzGs_QO|n`VWfp}5}3LW&#eo^@ThzIJglb{a|f5BM4#XPBJ4s6|H zM0LE6qC>8k(B+b$u8aSYvAY&h$LQ5?B<&p5OgRVUtB3P>V}C=9xDCRpqIt1vJ!?sv zO())$CdRu0P&a2b$?tpvZB-t``EoU!{2xQ-;Yj5d#&LU-%8HUuGE&Kid!9o>rP9z4 zr9HJYRJ0QnQdwyrB)iPQJ zsvJUBD4&DEzk}%O>-B6znlil+Jsi^KyOLMabfJISVjRb`scLXE792gts;%V!FhLs9CBx@M-+&w z9vaZ75NFyE{1qRGPV#{QFY4?1V*DPI1=psunSzQmlI{o+Fx zDy_w`+bKB0JV*#WyoPg6*3oad|H!#>1w?ItDu&P4EaVl6L55|5_<{)!o}a)z8fLP= z?!q(i#8aaG-IzM6%VNOxDk?gvs~xFqh6|G)+jt#4YV))z{zP zJ!&g{a+t;^Ixgew($nZYm16XHnZ=w%1F89LO`ds+!(5xY#6LY(T=yUbw(a_isXr4* z#n5H6O{pk6gtNx!0+$# zXu>eguC{YrI(ns)2eGU5ia1%s(`Us4Vbm&WZ4u1Xp7%}k(KjP$1 zL)?sEhu#tx$}dC0ej^$<#TcHL-N%*}VKDM;AXY{RdG%XQVP#|+==QB{ zGye&h_v{GNOsobuml1q^gFaK7EbQZ3=Q(Jfk>S13wpge94EtRb`MRgq9p>x3!(Oe2 z;*TyyiqO^2=^cU^!@ioP&Xt{zf10Q@K9)pb%Na80e?du~?dKI-Ge8+0Csf`_ya zW7iCfwn< zFSfuJu{Y>{gS40OK)Sy2q%o~eQBN!wxR%NLMsw*#dvNaBu_?jm)O zELYjGABoR?-1B=oDEvLlC2F1!SK$sn@JTj2J5^P*^3(~4=<36VO_K$dhapIO9>Q~V z#^7EdgV#0W9@Zyxfw#qD?78!pD9(R}N{SLV?Xom|qpL)<9;(3JdH=|6=RdIHz%rt^ za3M??d>TeHS<$6`D_}sT5uW=x8rq)9(yXdobZJBc^N@cA=N+A4^nfmWUvQS4IJOK2 z_DzTGOHWW%dNFT2{u*}&R-=5}ARawkGh?B%Bot$^>;rf1H7f`A7y;;b8UFk{6#Xw#~M%99`2 z)w{A#_e&S&fjYGH;h}{ISaj?)Y5cMfzI!yn&SC_s9YFu(Pa-P6Y9Xe#pHzsp z3B3+Ecqpu9_eupYiN13%$HJPu3#i5RwMy{&({E_bOJM6-$AM_4FsBdC!A-Yi=w0W- zWM=D3(a1F;_?78V*cvQ&&Dz#N;l~yDLcIrD-K=9~z60N12m<>9GPLzv08G4L09Q6hL2hz6nGleLOPn0B?ub9txFWFUo`+)4 zgT3(bi5gAGNn)=De> z^K=57KlvLU-FKm70c!M_`+4Ge&>0RGj^SEGVxric0jX#1W1WWzHto=a54ZctLmz?L z(vpI4{{)XkTr#X`I0=sn$MfL{r(y0N30|7L7gpvz6+f~o#n)f^@UV{zZ5N!DB|G+@ ze0($*X_iCz3`Mbn(I8rrI)z=VPR7uYquG#tRsQSTSD0Sv#FDl-(Gj!}RP<|w88ASs zUz|c}ggf9v!i<9BW%;pqXL5Lm9Jg9}MCkLCV7>Vq2t4xz56)K>mWO6S&UP6eJM)Lw zO*;Xq$sK@@r|?p5AvV9ej{Pt8h?I6|@~_@zDBa50g5kT^XJ;`5jyZw&$d}G|-34~{Ov%r3GuCfuRWzaHC)ngv zpiX%lbBw>wW_4T8j=`a@GU5XEgg(G9D#>fIO{j!UDxNF90|$l}!k*5>5FV_}*H0Kg zHzj|7-R67Xc~UA{m*RxZTXn@Q8)YeL*GBr^N*rBgwcL()CB=i~g;a6a zNP&y(8pLMb4nZdyJ=BnNL*EY%G0QvwpUl0;9QSV)Z%&S4wetJnOW{#?p}CCMcjtim zm{hhx=(m6I?I60TgXqcRk#tyZGr2sI@GpMXi#xM2aNLM*Xnt@d-gvhQ zoe4vot%vbx|8ufiO>jhj9{O~oiA6D)AUk;)(J)lvJu?pT%;Zz3^z#NY@ejn>7z4mj z=b`WZNt~GyivRdCOtVv_+jmT)HI41;^R}~GCdwLq?02J;-Ggb_m z4#IuFJ<+p4Z(+uy5!8QL4|Ez@g5vHIFn9fbtiy2(x4ZZd-dg&?Pm2(Q0yWsYb}(&L zQKUi31mDSlex`IV8xOyIC`xKnC-kHmpL#D6Vy;Uti%*U4;fDoZ_4@{VI3VOr^mgKw zW$tX2XMDsZSwgU9zq^EJ}lcvm6}&RUa%gFzYUY~T5(@G&%mFE1QL)-`Fs z!%7`-(4KK<|KBATEl!4AeYfGYry)PqlmyqFt%E9I-~4`h8jlQ6(3GtAS+fSAnP16G;>7H#3q{wkGtSAIz+l zIy*W(T7e#llZ0z&#w5T#npIpsj*ivM%;IkyE+uiWO6eMEB(}4v&CW#EvH+`Q55We5 z!Fb~Gc{X9BBX};j%Phx!WEGlkaNFWY5Uo$btj*~-{ZuJvW@v!uyegEeQ=;V3MDkp1MfaLhMde^7Y#%eAyWf{U2nxMMODFn>-7@O!~xTD+}+o%O$yLNCDnxxQTOz zG!hxFd@L!oD^eGI75J!@JVoUSe7rJ(Pfw7iH!FhJ@cBzoBi)p*34a80tQSD!Aw)~l zH#laD2mf0V3Q;E&sAG8oj_}C`6I~O!XmK9&{Qil- zG5qhQ<8ZV+4rjf-gYR}-fRgH;sQSyCN+_n`>@C81^hcKuR4QlkjkdhC>?c^}_SR6cpR;C=nSBghr&_E>?*ANAon{C<0C93GU;5ldq8u8Z6 zp8R3#Ozg>8PX9W-!JdFJ^3Pp|-rYWvbd(OmcDaY*RfA7sPs{{r7c+z&{+0=S-K#Ob zKNmVA`!V39KFZSKj3Zd!w9`bw}<{sYio*(_-K z4ji>E1QzV5M*mt9syBXgu}kk75JzW|6J^E_eB&6=gpu%T)k?IR^@`n@W66&sn91(pYS`pU`?mKGlKX(v82ZN6bx0U1AooSBLBjj z7%RV+x;x0w6|EwXiNJ^by|f8#>FmWHcYKQCXIz8VFXZvz{JZ$=PB<*mUq$>KJYd_8 zD-hYa6_eXbMKf%ykq=xdUg4-r$L-S=$sOYOS#CS)3`oc9OLowB{ko7rUPqpG-vjB< zJ3!TBBa?75;)lOI!A*0Yij(9fqy6N3wB8%cDv!F7-8DHP-N!r7u{}`0q)OA~^*_L> zL<@R^rqM;^v2@WjHF}{l8>fdCil)tI6tx`ORQ!7-p)zlO<8ytL;@$SDbZzHr>^&xh zGj$KK{8g**w?z&c;dc{ezL^FyAATUQp=aT?buw1caRPhy64|$DJ;;TR7M$0QKt^vA zZna54|Ise+C_aFB&S6AxC6agc^D&wGh*flq#qOtE`NwxDIQ*SD=v^9uFGpH%*y+#;!IE$@bG!xoAb8+Dc;WH?R6X`@YO#J#y9u7OsCWb!dxZ~0? z7TtJJ$j4n1?=$;Jr0xu+zFJWr@vfL$$*%>43Kjlls4Gd^GXhEj$I`Kxs{FOkvnU_1 z5(XA%!QqGd*ui^3*KO}0{?KZH=w`7r-KcjPKCjJ&_({6lws#bL^mznLUn?*$p zy2ShZ132*7i5}aUf&UJ=2|mBcOnX^7vAH;kA1idk6_Zb3ag`yR9(D+qOBcf_rxR@a z*s1uW-k5HVxPiS_x8nP>bQm(`3zlE9Maw`#coM7vW|2;CTI@%IXa9pzEknxh4o34j zA@9&~28NYXqI!EQaryO&e47&n8oAXFzSs&v@~?`#a0;s5yaZbu{=@4g-3HF8RxF-G21UuH4P9UM>S{lmiDkv3c$u>$Kb zSM=cL4jfW4kbj?)gr*u-@W+NMh_U{R|GDo%$%$$(mlcYpY***9)yD+ak{Mkcpif;^ z>G1J3`)FWs8EhM!1cUda!-idrV)>U7Y25mAFwUe`6sfopJWfQ4{x10`e)X;rj)#YX z&)4x>QrJNz6+7Suxde0_p~!pX-;vvTF%UD`2K}|}!{xbQ#PUKWY}7f=te342|N3{8 z)&152-=q!jWV0g-S8f3rq4WRC<^bMK)SxA!FXGEj>Uiq<8#vghOr>HYa9;HY8nNso z+mJT~KGXmYY0;)XzYM1VD&de+P>FyG86P=*#zUSD**6b;1s0~``9bh;z63RYVUDYh9U@9wM+vM$1CiW@BHTIa0X$Z9 zr(3sAWb@kGscd>S)EbYVt6t53-GN8p)sh@CL^&L&04{<%}TS4A-Yd@JltXhP~O1%C=Y z;L4u{ILRRuE2rk7?wmKU?9MD${!EHq*j0$nhbi%M6Wn0Ck%$EAu4XgwDk$tc2GJ== z#DS%w-Mcqdcmt~!=!vI#q>I$_+t6yF5`B}d#I?LUc+0Tk z@bU0D3=UO;%pt;AWv9ajPpZTW62so=N*2#;3UiRC-Ol#j4ACQxJ+CRr5XuBAX#ut2-z{;F$1anNnO#O z-Q_5r`vC$+M#1_Q8RV_%EG|Dd3T?lSpc&OuF=OIP%yoLiR(EXV>9H3`qfCTDTm49s z8)Smf!76y@;$Y4_Z(x@0KrVN1B&yj;)5ZGNak<$8)}eh7T7>sZ@A_Ey&S%h%3(BF& z$qqt=JKhq3n=?AK9OX;uQ0ZSXSe+?=8wyG^C+9ioRKF?Y3Uf&=8P4$cEt3D~8cBL9 zMdQsQapIg)IH{}#o+!BSm5*1j*@1tc($)h%+(;9(U0y@ z;aU0W4mNs^;Ok{xk;~h+@QI&xbH%MTlw3IhON$PZBj=Sd&2JDDf==vxZ#k@OszP<) zbL9&kkmFs!O!zX36WZ!Pt4Nqfg>3M~FS0yh&3kcHukd#ly2DSqO4z=l^XTeh2_bA4 z&r1$u6~5UdXrns0ciA1*sMrCsUjdU6&p_-mC+=@^598%(*!yeQ?4@@i>gUOV+vFR# zV_q8cEuIRiH(n73R%|2+>5J)qH>S~54%&2I|2S&8^&r*-_JF*`Wauf#0M`{4z{fZX zX1;m`8;S-(aOn!zulAHhuT6#=byJ?;^O9Y>(G8M={h|HV2au{apjrz*;I(bvAXLi< z9yuw1osvH+zhMZA0)yEywOg>9CE}o*R=oR6kG_dA;dZHd{O*%m%=BUa?sm0?@(LBY zH@y=gH=buo55K~OuZ#>#mZPL_4xJ<9xQL+`pQ|3BRU0M<`5AL)(DFpyGL%0`TL44U zg>$o0mU?aO60Z-HqCZ1ViF{jJxKa5H;XQa5t(*LUXe?8qZuMuNGe{Z+yv{&(zX(*# zFM(}NbKuCH8R$2~0DZKBaQ>ug#9+ulac+h#H8^$@c8nj(k9yB4Qp_(Pc^Zli2WmGn z*CjeQHRLkd*EhhSjFHqWBNNiM4dTrL%R){kN*t-N4Nl9xz$0@_xD6NaQLj>P{lro9 z@8BOWZ^}vd-C2N9g;&Vy%zMRsS2>GI>2lcfGY?ki)uR4hfitqR1J4)i#p1wsAo6M! z_FY$CdZiV8+98EE;=aPQYsay`O-sD!j|}i_Tokh-la(u4p%`}I`yZBk)m1~R7rH00 zY58#e<8bUrKZ!R@-m;cuD^XI%9j05)$6H&qNReRz8oITDkL?iDyBz>FVK&rZn=;p0 zD?^JUhr#8jBrHBPlv>`IfV&MA(})AbP?(WOl8pNtb{_l%Lm!?JX?>iH^$X9!$EUrR zH~u`>|6UFo2DU-%yR9@*F&eX94#JjCa=5`Q9K)xd$FLQrSm<+ajJ$A8bjEiaS8(dY zK^wP#{MKU8&crGb;h@8pWelN$s+9a@7l>5JU-HOuG+gPD;!7pexOZ&|te7v&qYfF< zCks9yS@RxedU|s4dL8OGIJJ0VpgN!adZNHM8qfWm{P@ql!6I872mVbe7ycCM(w?UI z^xhsx-n4oLIIJiY`fVq`SlIhQu?bCGWCD7l6Hw*uI%+3*4nF%E;g+GnaK-ZoE-T>0 zHml~s$FEOBe|I4%e6fV>JXsI#7MW7X;v?|P`vs;RRN*tk7r?fi%O)5#JAoMe3cxwRQ}MhEhihBMKzrVG{Pfj~cmHH)u2KMZ zA1>vGRT&zf4utQ%3Y#XaLY;U1XmBh`l&;zV7Sn}{(yV{@HEO-6UC5y1Ouyg@)>_`f>_8==p77XQ@=fjoU#A0OC2j9`mq~(8J<+N4Sx4qo7lmF?JHa5GuhxE9v3Mf+prN z`Z1IDu7X-8C46f67bFd0(aZRXxZ2krJ6;O?m=jLiq%sND<~+q=2L)GfO9CwYUWvrZ zkRJ6O&rMxN@e8${LRxX0IxgJH-jk>;b%Ml0AJ}I-8zca1^7ijG-nUE5(mVARMy2 z%hrWE;@vsBA-`VW)~6YUG$7kM+Gxu8fja| zG}nBBsTzM77CG>k9xL8Ux}Y)SF#OAy3O|K8EOg^m;yPQMMlFp2xsS83GCEygXS$*4 ztr4JNGK7b8hU4r0qu4r5fu?V)CnN7ofx2}E=?-SWkIFqn>)%1(Tx#`s6eTdwvj)fLN=l96-tb}2s#Oea8ivW z&o>Ex&^c!zt<#02Y+27A@X z|I_1r!fr}Yt%~fK=7Qqt3cTeWj#`C-=~v@feEw=*oH1%8>UgiG-FJ?#+Y9c1uk%mT zzkQjU?IOHj`*1uUWa=f0-@?&@WzhLC9Q3BflecoYc;k;nQNrygki7g1R(PL7iD|?5 zMMW7HIIEjX)}2QavjivmP%pmb^a#+e?1j9mlKiZ^F>Th(6MC0d1ow^}G)7&*3+0cH0qc;S{9IZslxn;u6 zu7do2sf#(|zLW982_5;TN?_6-z<_ssFm#1AKCQWiLC!inPVu$)kas)i+)4(Ot?x(GkN*n%dFb08>0f=>SHiF#LequWqRzSwFXi2qqaRIVv0DTo$LznefR z4XQv{5 z3-7{>CU>~1Ka6iERHR`hYII2YI=;Cnlid?CD0gq@inJn(xt3cPjC%AK*G_(bM>_|K zM&CXS0R=u3l7FFQ&@Tv355O}cD#?7;Zk+hjQZ&x56|85i#)}&^f{o^WB3Wm_4)(mk z6k%3-_TvG*t{uu#otDAFLpo5c%fM?&ERG2|ioQ?pV|L7I=(JI!UOoEU{?Jk0SjE9$ z!Em1CsYsh;gGkP{8|>pc;m&=v1dPns1gjRdVWKdX?ene$sj@`wd1x7!%1nZ#TYJHV z#p0}!)_jwT4wY9L#8-Ss6FT@G*@DaKv8PBC{I`6^Wnp4gttQ8lJF7|jFG;N2*Nj<~ z0@HSjm&ja04~VP*on0lz!(#iaIcVy(9jLQZ`)Sl=|EMkC(Fp9tUtKGU6`?U?jnBU~_o@E+`CSbY1!MxsH z2fOwAa5kS!m7^8N4|OIItHh#S)nXj7ii&Sml`yjtr-V+m0iOTw2t8}sz)}siP}%I? zWVfj-S|~g({;i%3GT)G_Kd(YH^51~f8Xpu{Y!$Wjm*D0x41G_X!`jLHFz%Zs@a|LvKdle64x(BbQ>+OH*KZb0*nIZj*&)ba}4!B&zBraQ6m$!QKv=;&~PsBq zq5&Hp5Vddm)TvzrEB4-mN9{AfZi~IJ%REZD{gp`Ltu{RC<^i8?equ4!@!NG-aoPHwlAhcZ4lq_c!)nfn~56d3XEd&JDBAcPfQhK z#XB=9AlLXTsk;@2o(>E6rv27j^~5KUliOa0mTzHDCo3l&^~{xh&Mp-XC&zf|teJS- zX)i4QE-)ws=Xr_N9~RNngr4^qYSbuj7e612*=5TAdBww{iwvq$R-utiFz?-G!H3n_ zK&GF-hCMw8w=Y_ZU*^7qGPjlR(dGo(7%M@yqzA#c^}G1di{J22tO}j8*_ev8X2FGv zeh{uX9x`+?N%JCs|8iP|Z!2@A7amQ=X&4WawkM;cbufxUCJN8tc9xd9kVmdui!-Mb z!H9!4+@)wPUp40lxc-{VVgmZX-+erHDf5QaE&AYg`7HK!-NUBa{h)XC6U2PiX0M*q zljrO#?qe@7`}JFrwo`>4n*9^Y&n2)S`3ksH=O_eT(Q!_N(uST0Dr9-ID z-7zd^hf2$Ad~!bv0{-(6+-{sDy!3|FvhdMav+ynw5Vb-C1~X*f=b<66;42${Ew2uUxxbK539vT`aMpLPlb z{0DvJs7`z~C4iAxGk%G?%oMiuG4+dg1g^?ScyC@QcuI$3YN;dMysJ!CzZEjV&56WL z$B0^J7*ngS(|M%CePY`?7sK1@*_oLKdA^4ddW_D6UGX!(aOq`metDm%8AL+Mr!iDk zb^x7WRt!&GI8k>#i+#_NMup%Dcs+I+w^Q4JmE&WIoJx<HI0$F!=~M zrFfdHTL$R*J`-E#%F?w5641D`pZKnngoc3+FiW@yH}KP@YrXG?Z)V!Tf#6nfiWcEv zt)$}N9!u~_sW#u6y#`HcZ(*JFdWt)C!b-}uaaWm<80h+o z?r3#80mB8>l;_Y!k@T`0;^Nrl&{F)Fcw5WBRih$Sxbzx6-jNC)R7}KGW-8df!veP5 zP=PxE&A7H>E10GQvp8){?ou$FFDEBpgNiw%c$o6Ber{BH=5{R1AB$&aPM~Fa|3UaV zU1~M836=>N=J3M=4&Giu`jZ9`p>&T|q(?(7c7QK^kEMgoV^Ol;?0tTa%{nQZmAT7d z(uuqHS>`idxm1HmBW18+sRJ+}cQSf7@UGvCocg?)y{+WC?u|Qpa;h_!rgqK|1>HQm#&?{nt#28 zEmL$Mh4e#r$s_g;iqPAn1al5dz=geLyehd0JBHL@psf)tS~r0jmrB#lVOLD12uksjS0rW zWhS#wm)6aEh}||rv2E5vrg~_Z*d4Y~w4&$F*wqR4lJ6KTh;+Bo@@3KB$%|@><#=Z&qbg}C_7P%}`qjx(?#g^5vN5whgS0oAYKxS^hcNlkXlh1C6`2 zv2@K#w&Lb@2%(-Z|IRI9G5rA+50j(DIZyDfgTTMCt6_=zBA9Xo1#k8NOeUWN52;MH zTID|bebAi79&Kj9uS&__mAKw-FS_> zeXEXkz6-gLO(-n!4Tl+Xir`gWp~KUr62Xlpi+4LmU{JKM7twVj^S{^kBgWy; zr1=nLd6JFWdJ&bHj-%!Qe^3{nMBN^N1)u&JA5C}(+l3#ucC{HE{V@&yxTUj@x$j|8 zUJJVsW)FZ~`_x z_$0m!@9=iI7MG(XgB1d#8GdS(r4WKa=5sPH|}9*CpCr;0*U?ofJRb zqDhs0RKtZ~ounYt68di%;@GCss9z%wPeuw%YZVhPz3zbsMq&uObM+-t^cS25ZHirJ2PXD!5Ih22Rho6o~^770hFrn=pRGV%i zOWJclU+*!f>px+!Kjiq&z-SsN|4{7gI~tU)__3*zg}tfptXw|fBB+x&q~LlQj4IRQ zcQ2_^4Tog7p{dIY4c$P|_MO=5Sqxa6Q>OOYWik4h2_&V9vAuYTcwmhhtv@>if}h3< z&w&l#eWnm{G(Fihc_V%+Lbw+Uh{hJ5qaZag7oYl1<@+o`X}aStI6qE`?(v=guDt_b z+q@WzEt?Dr>RkA~DOC{nE&@e~ArRqg1*%h=u_9e|=QT>5c7!Rk7 z<4VzOh9x~dy$bhi|KK2>XaHBs<#@@`a*^zWqj<{b7V)y6v4B-oy@hW3axJ`!0kpMFA=B4i*hE?(2-AJ zXZd>^*4hl)Oa6gHRt>CLyr0%@ISo#`=F^uaPh!-MY9ehomVUS+3+nkJx$?#3c+Ykt zv~Qiwt!H+_-!li{+=>X?QjyJEGu7d9%6%wFcm#(#_QBPn7>t?e!AES(W#{S^6EjUo zSnrd`mK>?T+uctcp2zRue}23aScp;3sNYN0yVbMCgr{&^B5mOq_0Vl>ZV7`Tyi--2FgsFw};r1{{Lp8km7%A-HMh zVEV!+Ox!#blq(_y-ugYTnL?Rta3ue?Aq2?+W!~E}8)6bC!@xyWu*rNCZ2oQsW*4{c zfIkK_CDa!-B_)!|kQzw#@ZiHd9qE5!E2=SKs5s!kb&>t+Oky@{D@JXQERH&(%cf4R z75M94iI&tmWTMY(dr=Uogv(Q#&u7U|*KvIH*#L-ZTEd^i&*pbG{wAk|+{C~_f6}Jm z&r()Nz=P^BIRAVZwyhNWjdj}eR7o;PD3`|B34kKi9CmSr4~RNC@OH8@x-LISqH3E+ z>GmL4p!h`STS?QmheYsmV;G56=p`{~cb;Bz-%x=!w!pxJpgie2e_{?cZZv9~yd^68y zZ)Z&AiG%E6p~G4*+cF%i6r`x>pzR`st0C<5PkrjU?kcVr-GT+ZkDu5B(@FiC}K zcbr4_N+Y;fT_^hLF^IIO#zB)$D)tJ|aighn=|<}iWuq=k6|S}ox?PCb zv)_hChpW=>^+qUBaFfk% zFCsVFuVG+&6E1orcoM(7Vo}l&U`>nIukRCu^Gr+v-=2h5AMTJ)u@=2~Y#MHVdX6Zx z-hpA&s(kE>7^2a91sqe0$f`5<@O7gfJ_%PKCqJq2Pc_$z*R6Sp4gET_veg!bDrLd4 zzDKBNzm`m}yC?VvTe0WkDEznC692sGBg&QoxKG?*vDfJWcppia;#VObC07Nz#0^9U zuW}{BhoZS}*0Z|)+i+L^8dy3!7j*_c!80ueFxzi8v#?l6?tZ)s#brOy^06N6y;ln! z*}GxovgB!hnc!ofvea4yV}hxgS6{GMY6TX$>F)RO^m>L4-M{SZ z8ZTh!%+q+^ehEg8e9gW*48o=L-_aTB#AUle;LM?JVOMDYc1~6p`JonPs^^KP(-{1# z-OG*-^$r)Y*7prXfe789m zrZSFC4yz`U-p=Apf}`lhdmVUqvkm_{KN#1+Az`W+0NvK(8Jbl{pq0pCI>Etm!NY&2wu8xLgh0o*xX6= zD6QQG1OG%q`Qr}sUYZ163gdDA!d$%RcR_r)C_`j%%^h0jsPJ{#`LH{jleQ&e`Qb?& z4l7bRajj`J#GP3@_7Y~9-c(5-VXxfJ1#KwY6I)b|BVgjZa{nI z5_YR_3Ew|PpDqz*6i?;(Jg>MEc1Iiqxy(FxCu4|b|LB93V=zlFPsbng^=Yn#1d6`O zhQrcse>C2q zLs#3`(~qS?p~GV$H(a*>Y?997sh>tX=*>U$-na>_30_yV8ZA2dnDCtmJcHhSB3R~o zfn~<4^4*&Pq0xQ@l{A^boT4Ux?T9J}YxO24Hki?xOX>Jvu;4(9cf?Wk3OvSE24CLQ z#)RSCwD4yxi@zt$t9I3in@U@;F60|jQxRR>Q5f_+0h1qNt?2=F| z+MX7|y2ljb-#HQF;`Os^clmDUs(TIo(X#x|7b$FcWedAg1^&v%QGB0%9=tlM$kTFv zkl!%_x#yE_aB|vSSoFe+xcof{eMgPqcvlm)osPlg-_>H3FY0uxnLl{n9VQNae+E8} zSOk(T7ueTb0c7>=F|_A;DBEc%MJuy)V2nu&cCA*%IjJJ@euyyFII5u5t0@pXI8T(P8V)DTy797kINEQ1i3v*-cvzW@>7bCnHB_R11>|uT`}5+UT06H8^H9Sp z^pU*r^4d{!N~Rhw-SI#?{cAKtN9cfc?R;+S8wy*KBMGUMrGBfsu)^RTdaY8V6Rrh` z>hu?4#;klYYN8?uE4&J+@@9PRH+wpKni5~Gf2R0uc_J9Ueh)TU=WwOg8SGzm1tmq< zOm^2;u=m`9W`d`43F`8k+xiZR7HU#ey@PNu&zHSWJVKT`N%GwD`t(@gLRd4gP&6lb z1GXf&u>To44@WA$Fpk^Vd!`~pDAL3|&!HiqrBcz*UfTLer6Ob`A`KBGEs9XWJmyNcrhO1?mivJD##;2W`(@OtM^Ju$jreDs0sF<**{cX^VRs@yLj}*zk0*Z6 zzB!8dwlsmy+jKlK)097Qd4Nx5c0h9SMHss8F4C$WP?kEFTe~kr?(d2CIg2U0c?b6@ z$3kD2AC{iEjpNL8Fsh~tM$|~*^1sWOMPvXTbPI)`w5`}M%Y^4&Me@{OK5Wo?#FBpB zVQ=|VeBL*l=ce|c@v1!BvUd#M@Yb3hG{3?w3eRw&+Eehqd{X>!yET25HX1ta1j47} zJ5c+z4cEX;+}A(Qai`;AagB@|UpFBV^B!2D@sdjNS#caYd}ui~c3;Qs!a3xZk2c+0 z@B&jODAT11(dbe$hwc^nE>Fux6kVSu#cO6fDpt>y;;bz>f#qa zJefGJPk1(^cy5s=j;o)~$WakoPSB;$@Pti0D^0JCZv(9+1K7X+AZCYTv-x{s*stY% zB+a(~2k4n%NsbzOme2+#qXa(rH-WFYnn6&=V6ys`0)^^1+!aK4Oz7;07VX7@aS^22 zRhjMzjli<12Y8`*IA3~a3b|VEjeZU#;`R+jG(Mvd&K2p?2Jd`i3WCQ~X*nHr;SoF# z-^P6=!u$4B6Pw@lm1LqD_@w`WBRft39U-v8%q_(cul3*nSEYL^5sp5LW;(E-)6pn;OHLu~o*JR{k2mA0D0n)3T&d;fgx- zc-#%O>z)#imRqPWzX=C^Jq-D7MXca+Bii$0g@)pOp##pucgDIx(yni4^ECmU zEmfp)w2m#wAI%KTBw(lBUQ(MHFFN7!8C0XC`O5M3Buc`U*$Vl+?^hbIVnZeI6bZjI zt(w$qe>emUG@&C^9Oz$BBUW}T5Ts&?z;p0S`*nE>cWLta`IsWoK^vmvtlI5oz0>{k82et`p z-Av(KAG;SXzN^NfDp|0cwg;kbYU1Rri?Cpy6e?C1fajS$qTF_hoNRsyPIkuu<^lKf zjTWA}Z&013$qrueg1b+I+4(swe7SlCkoW2E$o~hc=t?Cw$4P?r_MKS0zJeq*deV(c z&4l}u;7I>Zo}Li)7E5an;z2p#Y&B7zX8bC{5}ObBqs5F~!6@SBL&%|Jvv}Oc(T=jtkSpLPKnHR+0e;>#FGWyhfY6mVUwnD8k2WAkq3X@9a!K(oeurPZO zWPTk$x7ez(CBuW!Lf4Vn-twojy{@D2=wvo}nk+3V@W=4D!?@$G_iq57VRQ#JEs4Z~+HYa_0!x%BIt)8zKXVMq{R6!+1t9nK46ch93KR98 zvaDcJ(bYXw5c=u?@jbE|p3fYMu=E`SYLB5;tdgNdQRtrc#Dm2B2ckzNgQE>Ps4qc1T&)owaHl@L)gEt^x*fq4zzJVi+Tv7L1B7C3d z0acQNQKIArEbi9e){p&R&E6JL6y5KwQ-<2ar<+Kd-81vl!i!=MpgiM&ve z&z6(H3e^Z!JEI$S`c9xR3)QK9Qx&O>&S8ba9C?iH0vOl3AG>Z#p}*AtUR^c<)0)&^ zy;m|8TDgft%?9GMpLTSY+aW+-f%lq>SHuOX^K%UGWCJj}?u3-?U5`7;AI8sSxd_L3&t z@V}=pygL^aTCJ#}#RW3mP-_ z>jal_MI+9$(4b*JQR9*vz7v?gnzbr4BP54p9TYsRcW&byA%y=lUmdf& zt@*PRx1i~$3hf`lS>})sV$ru0{7=V2_NflI9sik~GP8ll71p%tQ6A6y4# zV$FMmJ!_*o#d|75R6cV>~d-Q9z zsY!wE3ymQX!m}xb!ayPXEy~Wb6FPH8;NpuNqAkB=sb!!tgsn7WAD%i=|A#ACg628+ zHvbZ_vD6jL4K9Lna|j!@R1vm$R=~F>AHX%x5C?vAfL{ShL|1t#`66vf54<*{Isa7I zyto2LdiX-r_Wm50o^heW;-A9YOXcw1&yMMKRFY*9^ThSJD)fMNAr2|>0?pxt>^&R+ z_t<9Aleh<4E|j2DR~vA%85odlMrY$ zT8O?lmi`$Zh#Bi^nU$Rp{u{Lu9@MzuXGI5eX>KLEO^o64@FQ?CQXPBOPT&KTbotH7 zByqh}Hrg~VBervEA=s&oL?^!mzxE8MNV`C8w;o{oZ(f3^xx#)-PK`LPoeCr8Eie8g zoH0jm2iErE60E3dB8T4W0UPt_{J@kr_Uyx2lodRz@l%eW^O$~->%w^O7@f^;KGvqA zEzc5vS2J)rqKQXZ3UMfjqpHoZ*!g@pxJ39u(!pqmj{eDFjI;#LZVKLIM?tpn3!KgV z&a^&V#(V!&f*Sn@BcE&s`%xhxbBi4?Fmr|AQ%DDyfLG+0YcQM{>jlEkHlzqU!ZV9b z!{%r4@I1_%9x@!m>HR2h;N6)1+8)g5WmLRw!k4evhZz+QQ8lL?6q`ST#V{dvY2E6zQ* z_sB@Nq-@7MpUmL{)u!TldY7n2J;!Xh{qXCL2y=D55HGz)s6O^4SukD|?uE~$U(Of8 z!|iggY4~XfR_nr=N7_VY?JN8}x)uyKDBvN-U_9k14bv>cM5<+$y#I{`HmWPpe|vtj zp?jC0(Pkgm*YXl|cJ5%)`f^}#9WQeA{{UP5-NkKWAw4?dGfB9V&NhGVL9e7d)Kc=` zo6b%oMXApq`c5`^adAFO*r7%}X05{Qb6SXd{4$W-=>##_A>eN$iqH$Nix>wF{bg~q?gH`mbq`ST$rwm7s263a+tGKMPO|sG{ir=n zc=p%m!>SiZ{GZ71$xrsfexLp1Vc1ew8ViOsN)i zTkQ(rS1;_GJ!m z_3mUEI`bjE6-B|S-c-yre1aD)$b zb5Qr4H^JT9(1zf+8z+IT#{=9B;&?k0)xh{jy)o0p!WDdfop#sjpfcTqxH_r zYV{ZRAYAgY_k_bqi$Q!zUmiK!e1~mVsE%D`(#7_dOzGx<6*%`@D?1r9gMWWC3!bYR z(24(@hFQxD=$iCg_KBXVrf0BFZ#($&!UOk)OQ3Lrrf|!NzwVv_4?2c1+hYT`muW06g9i5B#0>OkgwR# zehF<#r}6$B&%~?i6!5gbWV>1G%~tMMLQZzdaQ83iY^Sb1_L~{f)RT3^JBE!y@yE|7 zWvxg54*CFfe$Pc$KFj0WlsM7q!rKtPdkyT_bq{p+4#Eh@R=8DI1F3S=j{PUh_#tU! zx@UhRuHK{~cq%S1-L5Fn2Df+kGuIy@K4(L$Pam9<*)6WwTSAsGIrz|f4mD!)aYRlM z8r}&NxHDUE!nm*acyAg$xN;B$Av%`p=d#{xWByvs3ZpFKdEagY==oj<7RDcN?C8t5 z-SaX$-M$k4E>VU%1GW-35VJIcf%IX+YYaL*5H`rwf{np&{_1)Nj@uZDTmQBbQh@m1 z#CvSPwdL6MEQU|tT1zC)ro!z5m!afF3DeBmh@%q|aBZ@Xms&N1p9uW`3%yRFa{XXB z;zALQzg^B055$wIr0-DL7fdGn>q1R|g>w8$F2+Bohb@`c!1rUMc&7e-V&E^$ZRs1Z z{5TV*oZHQIEnP}4ybKas8%Tinb04-tK9-HM>cxWP@n9*EhSI~MMB76b;4)R=OnyEB z_3qB2A1o7D?be&<7j%{e*OVi_c^?M<9t7K}^m$6fc@+6tP@hnHNZa)Y5>E)f-CKN6 z+F0OHPksT1zimUEIb(~?&vsOJ|&k#OoI*`n`&d_*yDj>Gw^h*4aot6y9Y z8;`zwKM{|iR-)wJ?H#PW_r9(OGk4F1?CHO0oilpu&8T;}!&fe|Fe_jeFviEv$%l&<@bHz=x z?l}hmoBilAg@N$cCz0Khk>=mRGx*zJ85($X13u_11!s+q;&9~!_lE05e)rj~=4@E5J`)0ewu6_yxxhmbGB@D|VBq<+;>ZE2{O18-54&SG+{krc zD(*7kKK&U2ldW1bR>gxldJlvblhQ!G`VabkTEzI4hh*wt4@~nK$YJ0{I5A@~cpAjw zxtM%xaSP&0WE=3_dkPF4Fh|D+IT>Z(IT->^us;G9NmhS?JsA>Iii`#v(~ z%+=J+SsgCEnnDLTjo=?%%_ocgn(+m_?r0llil;jWomNtUJ9{SZ-Ioi=qd}RBR{zDX z(Vs9-Cm1IzI*n^ut!csHgM_}^$96lWGE(yyMAKhF_2Ek(HLpe#Set{7r&h4jF<+Rw zcMa>8bmc|k4#L(rdA|MXJB+z{6;oHd#k)}(At@jM>@tPV`QuLb_kI`;OCCzUzLDok zs0Lkp;xSg+?}e#H6sVTFuHYdV1||XT*v$j6{KPDQ`7k$`h1E@lcM@e#XCleJNUud} zA**PA|E+lbUJbtH>1=+|aRA)BxBv<_`p{Q5Yf<&h9GFwt$QGxWl9kWQKqq7)>38pj zS3WOD`@~~d`sTN|KmUi&qmt*=Rfcr>Kn4DGr5=4ZDo4&sn!!ap8b3w@U-P>*^&@o4u}oSjq&CqF)fAAFav&r#&p zv$vD*GHp6ESQkGj0R45}PyCOZAueGdVrn>t3->g9vg$Z_b!#+B5qd+J#1?kEe+qW< z5|JOgz-BZmLDa2g$hMxyuV!z7{~ndWn&u*Oao>s;4BunT13ju%!oY8HET~qw(((gm zarLbYecn<4`4giR~9QwqP#i!AUl3T6ZYo5!`sr! z=*paxOwz`O%{O;KYIz;fwq7T)zQf9~s&^Djrx)i}+i@ zXngXq6i2oNqd2q)6eTu+%XlT~FP#5;c1qyrJwjgE;0BH>Z)Zy!@8b|*MpWuQfy*YO zgW`}wBKWAzU#(q*3;gtOUcWJy8P$Y+DXlo^`wuqhxgwWI+{UJauj8vG+(#XcE}ST^ zOgH|NrQTD<@xD3ssIcND2z4UZFF5}?6P~evl@YjP%MDQR?!XZ%Ua(X(Q@+L8hKA}T zv+vzWL|5 z_~w#3?#pZe51q9wU)TpI-cW++3cS`=()m`U}WKNFEtC_807j$i3kqBdJ{ z@o%#Qz4>ku)$r+oU6Zsh%SDCSY$y|5Bc-C1Y%IS$#Eh%19e|$??uRLFT|xLB@DSr` zj!Q28fIG*hl84tP@kWR1sG<~u#)2nvR(&4i{Tj+I*%ULy-*z-%%?pwma1582{1IH_ zj$G5df*g60jwZw6G2Yk?G&C3-6!t~_f7G}^+%eqWDNA&W+adY+WxyfvIPc+6QhoLx zSz;!`6>bgX=U$BBTi4iO)pIrKS>?$HIyzYF6ZS8;vHV`%8@$x>0~O~DVkfoJg?r`% zes)G0nhNKRJdFw%`s^>9Jgdh`$JRks=ONPA*TIw$7)-gc9^2PE#I+aC!^f5rBDeRm z_+R-A!kPV<&?_4cYiG;S8>tgv){BW$PS=l)Em7dV+ea6|p=ptxC!{~q-ON4NTux!<=!=cws)@*p?5 zS+@jJWb??`>ms(xUYZ5k2M{HVIe622AYIt6OJ~+ekrOinzq|e)*mcnm!`t_YMr3Y= z<-c-ZtBO5|=-CRH@(Fl!;}E>$^^M&aCBl?D_2ibh2nTF*rLvtBOx}1VH#V4z(T8uM z>&`rK>`f+7SAWdTcc!CvZ#KK%@fepJ3&f^~H|(bS5PI#~82LW?boT^n{O|lu-o^!v;2e9Z zwh&9|%g_$#TD*MLkxreM3N8{F z!p{2~xu5+J6GsXh2(!=daMA?kXdyVC=lvrXauhrI*HiEJ@_a+|8FV?g7E0YuV&CGawBKaX9L%wU#LEB+2DiP!oJ30OF=dmMh0Vv~Z#=UzMpoI4g+;qB)y)oC| zB|m-mv^{0wrZfZIzpxGc=9@!a*-nA2f1VtSU&;Md6di2TA7J=Ick#HYdJM;eVt>gb zQt;*%#>`IzKkq|eJL^5{ZJ3L8AqQZ~$Xo1(`fz*~G>|`?Gzt@M4T6BO^LSohn7tEf zIeE5j^jyVOs#U7TEq088V?*Z(Zi)_!{oaf(l}`zG=hvX(9)REds=%=BA1?e#(brps z?pl6Yyw|FiWT~`~(f4nnr$sR?oa>JNAhLzeWPR5$TjZA5)*pJUj^ z7?564jz#}j(v-1UB>JtGtcvWjFxfZW=VPA@y-?xkVO0; zX+pa;1%Xnfz+KtD3R_+J(ER>V(Eq1M2kY3P&55;8sgMYM#>d3v#xr4U*L3mW=JWjG0Cw#o=F@XX>R|)4iZx>CBRudcal+~k z*D-h89J+sYJ6kw56tmYkQu$IFdPb#zNO)ZkauOeleh+O26~{|tc1r@BDYR!>ibYT` z{tFhz593cxp94qDW>Qsm%W?4McC0i#3JbTNfH#6`?!rUPMo2wiNgk_6mEwMg-k!i* z7D&>(r3$p|O$-c&dPqO;7VbTJBJj~N;kyOU=88z%o~$HZEUm`3ok?PYCP{*#aM%An zSe@R{(%>SG)8vV&8Lf*XhvFcE`xvq75L7rP5Lsb{cev!R(4!56Edhc@{*Vz=t{+Sqzg!cK+xiSon5grl zMf$W~cRLpB`3M{Tli(Xi+y^OxPRtXB!0*X5Z2a1r_()NUUI14*{GBO{7fXU}<$bUl zHUPrUyOO&$JIS6#b@1DvL(eK%(7PrukU`b2{G5P)2f98 z6`F!#gB_Gq>Chq9RCvWcF?pD*#Rohj7_4^^tb>=*mnHEq@7yZ%T5U{AHO}G}dkr#2 zREO&>g^M?;U&A_C!B1>kLZ(cf!=LZpf#*kWhau^=*vn1NAj@zU=tdnUs*9TNrL-Bc zvq{(?lZU@Y4W@aaq1e{k!EW^LCgs*sNQIgq9H}Mn;AtJc51Ro0AOx;;%jFFmLTf>{a{5o=hG|ZdGW}^3fu?e^(901t;LG z@;4&ct(_Ps5y*7U+w$*U16c3z3G`U92_9>g<8v$_FgL~ylckIVR-Puzsyc)r zWFVEkeUc53j1t#WT!ZrJda&L=AmaTYT-9)!onHT)wS7qz_KUATeyXrv%+3(!+|#7F zn~GVSxdIPv*W-(ARJoMda~vnLPWYah!o{KEPEr_oZ9O45fA05*Gx8a-0msb38-26|jkV9{A}Bv}$Mpb;^Zjvspp zd^NRb#_rF|cBnRH-B;i}lS`P{hwrR^#Srdk`37^#)}ryxuPkBnTStvfO=^4eBkuTm znZ*lC5gKw0^3AwPE=G&xc?M)(5j=)gw7(5-8fitHhq04?9 z8XJL-9pFfo$(LiX=@4Arpb6JC_Jim1LOd}&6@Fxvqtd-RsL)xBuFcN)W}yPCeQ8K$ ztGmPcrLr{Cd$ut z#0h?ML&#{KfPZr$K$LKgotsvOa{HWc!=ET@5h>6QCDWmQfD+YfvOtOXGx*c^saPW1 zF;0FSh${~gOzjn1>seN)d{mfMC_WJ-W{&V zTb&y~V&Hk)`gj*FzNE>oc^l!vVFPHS<~>pxArDu>WN6`0OMd!7IvhvBFH78jzQsZp zVOJ6y`(fuehh{K|C{zC1?V_mh(G}t|_XS2ksNf;m2?IuzLjSud+$Hc9>^^)HyI;(s zosspT!J*ZnwxRRT?bH}L**TU($7}FGie7Yvt_plv@r3xSF(G$nl#*cr?^W&4T4tCp zI75V7&i(jO(r~{~e4@{W&xtU^di{x1>7hB^JemaOO>Ft^5ieO*TOC_pA&JYJEJQw8 z5>(MMgvHG`18eN&h_;Wsg6m>(ptOB5>MY8K-DOMheU_6jC%BGpMwUT~S0dZ==^|`X z)i0LVa|Rx}2SLfjWJhWJ3{a0N0*xUP>AosoRu|!oE3@tZG|ABJRkmO-{x!32na)>s zZiE@Hgf3y^bjZ1-MMpNOa;xS=q^u#-Y!j>kB*=V+}iEW{~1MhDE|R% zu@Rjv?!#ZZyP?drk`2TZ?C(2<-id`Mv;91g@d3`|E(Iv0ZQXdDA#$SMs&??PP3H9I+iFPMQHLS-s~{@%7>rAl?!`+|MZu;yy9 zgZd!awDK8j(N$ney(gp5$P(6aAOhN;=A9y+51O^xeq0V@rf}^eiX5-ZOx_e%vp(&8R zmh}R&NhA4iBAlPc{Dckj9)iYQJ5sKrjg}|YlM8Qu6WLp)^o@`kg@ysR--ck>f2YWP zKM|Zik0dZN2=gsI;;MztY;Cv+dG~T89Mv5_@bv)RH}V-9+c$uBPmRU5b?WHp{|LW+ z562lA*1|dMDx^Q^fzcb4sL42AG^;oViO*9Yd08;&T5iR%x|Hek{4iYUB28!e*OSu8 zaWH=S9cX*k4}a5t;9I9w{Ih2*akmd4t3SyKjJi11Y~GB)%{FjvN*7u`I}dLxC-D{G zXW+8YDc0&Vf%nYUrJ?J!ans)uP`y@>NUE4pqnM+7cds;`xcxnxesmTWTp9-+Rl*$7 z#Eu8)y&=~QrjpPJpTNLcmS(Cy#g;VQ4+#C$85Wi(YHfFwXclC`6}&w$WMWFRO=9?ZQqXu@yH6EZMlZM|kfi z0)P4@V|QZ=>WtonDP2N7|3V)w4>3kBC;(I-uq2RGRZGCit?Dp{j z=@AU~PY%OHGEy+PNfk`prsE(l9T*f~O)W>igN|i>;##u^?3$)Wa-f>{esTgWz5*4! z)_`ih5!KNbn9`zm_%5T7EZX@LB>x>^a_ts;kx@5VM(Dzb_ph;cS_53J7>+TG;ovk{ zjoZ?}lRM}1RxOHCw#xPln@$Z+}0xoqYj zPtcg{gwOm_usTVB&OWi6S1!^-J%#PCuVyZlDe|TYA=^kpRRL<+33silV`0XMVo;TQ zC$gT_i~n^mCzX~06UFc!p6a~HPBdP@*`yDW8(P3gvyU|82*mDvH}I$QMeK0y5*_0` zAQdu`$^JKyi#C?y8|Rm}w#^#8PE80Zt?9t!VY~ZDbaQq!7uftsEn^{KaW%)+zu-y}TGmfCks!7lvD(s=BL_w0i z4xcmPEgow=jeb)-;n!2P~=V{PW7FhyE$P!Ka zib13OID9Gh!#ndgfP`ul*u)=jl{f8@{##)(m$q%C)FDOlz z>CUId9c0~)ibVe&>*DFmWbv$`V6sy63?wZ+S2VdW1ZRe>Vb||m2DcSfsNQn`5~Dw} zD8~{QX==u8{yPR@=Nr&5Snwx0j-=gpjQA+S>#%IvOJbF>jmHd1#WB7JCw;r|NYXc0 zBGp6uR?UKo+cQM|IGzv8-;6_yr_t`V0nF${C#e{A3v~RQ(e>1PZ0&6$dZtz)sSDbC z*0ghY*|-6Rg}Xr1wU2Du(=JCxn_I-C_5~O%VM5=0C?toS6MTXm;&=L*w9)zsj;u9> zy{>)mNNpnSQ{IJcLPuNu+DhU#>NIr9Un=fB)dq=s*U;FiSlnnAkLD>hIQwK4tKA>Q zj*sw$(n;@7b-X?8_N9?Tx|}6`QHcmSUOwaeMmfp)+H06qQF#Oe+whhRresK zSw<+}OvY~`%;D30Sw2$qN)#x)L2MB8R&<_A;QH`qu=rmXY#AoSw@Sou^Fg{otK&1P z9b!ULq}G91f(On$?vL(*J15I&KL0YM86!^xVbFhnQ1f;j>d*9mAD+2TnrX<^>>o}Y zu76|U>TTe^a}xHo2o5m)k0Q;DvN%Cn9VTV?;0~P+u+_~0-s~*H&@^kFlRSj3zX&|X zi@-7IP~xDh&Og@A;w$yGgTDVY!3!+U>wanQ1^yS%LoW(F&9%jEEamv_HLsX!rvh(0 zvIn;mG{TdaC(!AICSU(DgS7s)*0EMfn;L|LkeKFt95Zk__jwotbE9>rThd5cI9Huk z%Zu;;#>1KG^HGQpU}|}o$R=U}u^xFDtJ@{1hvz7vQ=|aS!|vh18RwwGyBV5?MZunT zo;0f7fc`X$gdbAK%0svCL8g~*TV<$2Pjoaaary;c-&@mY1EELUn1V~*EA!?-gK4MF z94?*R4CSw6`HHQ}@zsX&?7G}3(ev4Uh}D1D{X|I`Hfjynp3>%ZQHL?IN$@($TtK}M z7ooStfE(RlkU5}`MHR)e-O4j)X2vQgUKfdB&eI?-{tC)=jRbYu=OoS51v+}&S*wK? z`Mv85)UQcq%Rdd_bNgpQ*YF7R-dZd^t*Am@2hL`bZq4JW($C>$Y7@IwK7`M_dKwfg z6G{Aq1V}cL;fj^lL9=)n=DO98D{B;~yTC&_{-XlBE)9Wh=TJ~d(WT@U%w{6xoYR~Fsu zD1}=(YjF13Onl^RhOewD(RW~yqlSyXkiH#rW%;1YxeMJT#eocFMuB zW#vem`^X`a3TcDq4Q4 z6kXW+3Da|qVW{VSuzA)hrtvQfUrI#^pNctIbFG1O$d|I49g{`QLXN>NF#$XruA;-W zrQAmFmZbi71|$kjgREvdG%uE>s{*z=F&=@ej)y_f~QSqGyVRDWpw5<3AbDo!hn+84s+hjZ3pyPs97o;$c^U6H?mNcL2nu-=u{xIg3Ig;v^ z_;>0P*fnk#_}stAvW2|N)RMul>)t~cma2rO6+_AMXE~y}qVvq_>1tGylI5q?D~J|+ z5O`gw5pZg&9#{-E!n#LZFx2Hdtl1+tSG7%;N0>D24g7<13xq6S;8ifPiiBy~UXh-P zbQl?5fyZTcz~=@bW3wcUT%79x>u%Z7F?*%N3lyyBg|z}Z)`vpyj$!nm^9k{^k&f_2 z0@=59gJ7km5f8d2$0vfo_$>U+`V4(RbX=2@cOIaZo`rR<4?^R7LT?=U#(vRAX6UVt zqA~ZNGUFa|S*^?ioQpA_z78HuR)d>wR`3Jbb!1t74yM!=qeI~(Y!wgZp4s8J!+8ST zu-S$hL|AL9=-p?pl`u(n@XY_R9BoY-ushez%1G zx-ChQY%*bc*nEePo|FW(O@F~Q)qy(w zRHD1xFJS)!MQ-wBG+s|U0Q>VO9h;gD&nIoA4Z>NaUu78;Io7awe!sAGuN2k&o&r`9 zSKyoC9f47Q32sDx1-|Ysn_sL$;vSF1FDC9}ajy~yJ2oEjCy3~Il@}mevq;=ro6Xwd zrBHHdESn;*(~K8Nu)x3wTv!qf{l^c$ES$CbvL1_)?&jr4f4h- z0Osa2!go0&8Q#YP281y8mQ|r`2hOAMkuBn1cL(s?;FTD;(VbcEJO|>%Sr8Y09MeGkFQehd$pa+g)b76{!1%H*xjL(yu6uDTcO zP1mI0@g7ZfXqO>z2o7eWeD5%mN_pBfMuH`VNb;t>3qr^G2^m)?I0AR3z^|GBV(wT7 z5}vE!cV0TAE^lV@0+aCLR85M%K9dx`zasq`=fsu zLWCC?>UR&n?kPp_l=pD;X%!6kzKR;-EF5g542f+$u+wZLk23m+fl+Hw(yt5bt^Yu7 z%M4-uHb&@*PXq5sg2(95Ac3I}1&WCkX!&0YEWPN7Pm2$;;2VSa)%HVh`_ny8KJ^6O z<;8+Z!bzyec~4riS};AuoolVNC&B$HIP=$V&|P7P?rAsC_`4J@d^uTQ?)}C#-56MR zP>J^od5fS)PVD9866kR-0O{|O>87kUa_j3K@N7*)B^hNnZ8C%wR!)J1Z5mWO1z?n$ zz^r_GNhEPB0UD&Y6JuYYGq5WGKNcBs=_y(Gtp6-rDR}`~j|@YzgQIDziVytvJR0_P zJ;R{bU65;+MOw~$WezSy;2tsytfFIy{rpw*fx-jPcFkU>`L+i0ZS~mJya8m#X?d!3 z-V@d>EI~_g9i|k&2F-k+qJT1CXMKV7thOYV($BHZ?bifHj~mQz6I^Y1TbZ)s9Mm&A zivbn3yvb$=4UoHvb}65QuBRAwc?kT*l34K4je@T`8jA~d3OVMqWE>*<1hxqO)3N6i z$&G+hnE%=h`gN^w-tS&WIpxR~G}Vg6HvWOJ@|RK7beZ5&xkt|VNYY+o0#42&x$>s3 zVD@1WO+VX=Q(s&cFFo}e-i~Mz71RkXHer_cu27TBO*u*4_FK}l)|dFT%Z#s@at!RG zF5u&U1TuEy3ABHs2!$@E$N(#Ito&;O124{k*3L29G~+V1tvQ2QBNe%1X#m#Vs)fMk z$}}!Tm~jMaLvn$%Fq8QKE9U%!FkN9kx5R~57ix0#kNaSj)qju^GlX^^R`O`hD^~Ym~Uth$|`(>kj zTR0^2&4f+De0|BbkB-HE-$6?GCMcTIj&b|s>GDBm@MpngQSKYz9JnVM*Dq}%a^Y#9 zU7iN1UXO51o$xMwBzUhk3Ge8^PjGg{LZ+~-k=c|@z=lFaT=rR76psEf};C#fXphu?#UZP@rUl>^GHKlmaoQ_cJ9I`<-;hT63{3~ zj^2dp=!uHKTm56mTc-nC|&{|h)tSazIVz=PSkSZMcC>^go*W#BS9c8In zL%>^f5w05wb4}TQY(@80{C;#DO#Ng^7rfO3W$_~zI`0B;y&nNy4Zf_uBZDjp7JNJ# zOz^d)j$`0%5270$4S&D7|F|# zvfgu_j6_nQJyep=(9+VklC*@7R7NBf6`~05xu1+AG!&H-m8Q}l2}Qr>_aAsYFV8vm zeO;dq`!;^OFurahdu6v9o5ih&!^}YtTPagu~D0yCV3YD(bf$nf`c~WBq>X|eO zSUB$lclkZKC5q52h;h^(8(u9(PGR5@;5p`*!ot5KGCFn zN9zkoyf=n^f57_>S4N}8liiTDZ%4V2n>I?1_7=20IKm$JZ-s;H8)=5IELncAmRPhb z!^4@H+>(T6Y^IeBjTkiuE1cG#|Gz!ZWG4nIC)Yrjb_bp^F`!4)ZZhL;1I|lrK3JZg z%J-8AYRwa;-@SRqv3EK7;MIo`24=|g#u{c|Bm3_Q_9MTV- zf-~MP!JuXopVo_fNf42=`!Whm@#oA4RzfQu4*$; zDc}aXe$}39^yWKdKcc}d;sc)gG?li$EyH2bcphoWbxcUC?@CXeZaX2z zJ$+6dU$)e_o}UJtVChTt}jOZix3L?ffG<94+n z=AF_430BFt04HFVH}Azbf0c|4PC@nQGx4+82%5}iViUG1(7ifl^j5DVeOTYSXLbKCVke+V^ z#ae2xgLmd^hXx#9orM;IlxUhg0=vxVAmkZ;onI&se}5XsyRT;Hqq9M+_87}`4#1-4L(fye|__tU)?AR&;$rAJMMSc?D0`B3p z5B<;+dQb2|i(9i+#S|Fy%InB#2K&ph6(sKkcD zzp?Ng5}>D}LNz5sP_iimaP22HtayT{OY=K2%Uy&^QfIrZc5}tPqtRO;gVY`Q00r^= z#OUKusLjg34SXkI3%L&8AK!<_Q|82!lBG({#gEZCt;R{yl5oXQ@_WQ~N^ti|K9gAmE z8NF1nPm9LM^@JO9;tL6#%=fzA>hiod&5W^xmSLCh6v--H0cFC*XD2bf}fG?M{`A2;ndoxG@^ShcS%GBZv+j5z`f9f zOUnp^0EY$ibp1!DJ}m(Qeoow?uj$0+zh06fejBcNSHXd0ZMgh>n()Lu1Ntn^1rxT| z!fkrznLpneIwV87l#`NZqrj_>8 zR1k@47izIPxufXD=y#-Ll|JNDrQwHf?8wCj*y_diCZ5lPw&p0J z&hx!B+@6u5@#o2h9hXVem)FoDJCh5V{2pHntjFK~Ucx)0ZRF2aUrwamiHkKXz@~lT zRQ3A-aCm$OU&NgvZ$gd9rgV3h`Z5J8@@nCzaVAsUT#EhXqv>VAU*<6;jd!)wVPk#{ zI?aBLb8afZ0Xr=$Z~P~S*tit*?nraL2Jex(*Uqr&;SX4tvV$b$egt{Gvt^`u2Uq)6 z!-idpx#8&t@M*=i~I8-^7%PhrHg4$^bLnCsaS4dFl3 zK*k_cFs59CiR&BVl{IIeWA#F;n<_$Y^9&xhmwk}8;S%&p7GS?^B}!)I3hiIYGLPq0 zSa3?fG6yor?9D^i8^TD1W@^8cRpA!_*RFyqds7bRy?GX)E2bRFZyz$9Q>?2uR;I;4Dr|Ma}#YnCC14G0PXj z5iZTj^!TQh{5@y=g?<|7_UBfc7V{6g^MW>;~fU_Wo%`~dt9>n1#v3wgr4)4A-R7PNNqmL7HnUO_S1L6-nQSu zjh7=)q&AIBba%!GA8&l8!*dK({;(;l+hOB2XMArI2S1kI!xyrBY+$fZ@K&e}KNm`I zTki|d>+e7Cti2948{_DeGj4R7VILGJXXAgDX2X{Sc3{1R-@|tl!bt5DaP8fJ)!y5P z>B}jwYpEE-t;vIx64!``wYgBPaL6 z*qFrvyKM=;IjGZ#zboJ!y9t(WTFBext032Hj;pss!=}J~w&GP3w``RTXD9B*`kvHa z_=YG>v%!E9y*iaNZxmq0f@5q%=ThG9I2!vlf5ioJQlwuD|*3u@ij#C^pzE7Z!f0#h~ zi+U2a^by`D3MMueq)3UF1Gl4^BUN9F@N45KQp$Jdwy*z&mrD5W!onC_Cm6u0V$kgF>EKplbUT}zofrU6(=>>N0QKxE$%80VeL#)zr z#31WXk>&fXyQTbauAAHkrwM0Wa@ zHU>MUz^)6O5U#z09m;lRT{4RF1N6lE`1|9{2AxgeKQ>XU`{$O zOLBGh_?!TrG51<~kz|joCHfLNoK!#>ZuZ#EN;X(<11=+=^Jo^_xBoysbj+kSpR;jB zkTZApXfDp)Qv>IJALc%bJc0Qx$(Y7x1QZ5iFgjC|B(0fE-31FF_>nUEy~q{SJ{r)I z(^RQoW)7?^xJgXMoCLMtFt&O!&jblDW0QT_Aam+#Qo3OecV^Z`IP>Bh?+xaiyZVRl zy!d^@ssfz%Q4f}%$s=7>*|_x2D>8ZcQ}kKM&o*~023;+EI_$=0zn+}KzY*csm&9jG zP8tf{gxfMzy-KG3ow4o9)`92Z7o@jG8btGLVAMroXvBcskGYdcy~c53)INb@-=y0=Kb~@7U`^5FD2X2g;1O$vo3|w?rwt zyI2W^Zxi8#*a&)~;C{JW`vq`N5OBdSdA`IH-XoZxjeiWsQ%`Gi$oJmDf#F!<@T*lY z=Jfzp#~c)tvz@T2+?eJKz9s(*lkvm53ou@lA6U)G#Iak-N@vQC=iUaNMxWES*tdf# z$@tHOyqkLxd-<18o9`NMBz`2^D7K_i`jx@2k@pa`d_}Xw&8Qu7lZB>D!P*o*`0;2Z zbrn{@!-odAZr4eCKA+#gUCP2v<-72wLX*v3bq;5TC}G;fZb-^A;+A(@6~4{sXGeqY zuzeqO9Tx~sq5H79;JoZl^3RvUH={?Bg$UMW0bEyi4J0~+LJP0zJG`~Iy#KukWG|7z zzH35e@bdc7lTVZmJ(H$<1{;j7EN$_}-3p zZC>^OjW4p0%imLFr$m9l)}wf>-x%J0p2%4%9tWufnq1Z5Cb*#7zyq5rpmL%$jj7in zPiF6cm(&L}re~1rgZFXu*2@^WW)0anEgj~Ig~7OOCAj#8E9?_7gV=MEOyOu%vJb8I_=e6#@yEVLS^I14rPw zdt0$~!g|_Uvl$ojIr{aBH-KeC4?fLw0QmqPPWMM1_6d*Tt(`$k|J@kAkNBAFwhx3f zex7hdKAD`&C}PL_n$SaX8}mP2$u4h9hc?X$JiYG>`P7Air zk!TE`yB|v>Z=#dgAO0CkBtE7NwAsz z^ayKSO=tJa4Y1u%l~vbO;kayl8oc2tbl0b%d}0+2ZI|Yp=Cxow{(#@5s~~@D0{JBj zz^gYixYyOD-1iNC@ruSM`e4c-e0TK<-a4mCuO*G7`F(ZhIB5a6)kT0{&sdtj{{ng~ zsb-xoCAf>mnp}p-d48^;NOKeXpST!1TiFZC?A4RO({L?Xe{|=rdF#@nSO^zq zI?yvx+Z=aGOyI8Tohcjn+JOG^m*PU7T64~)tx+WWF_S-Phc=7juulIL>ABA^XQv$d z_bCHyolI%%=Rf4j-dNtr6Tufn-bltphNS;qu`;IA>F-@Kj*3Tpi}yNBHby@`RN^GnLAz4 zeg9QKg7+5;sF;MSJT?h!JoaK#Q7fdJJA}=)(?IF`Uot;xJBEjy0-fj@@cF_)UsN~t ztuv&m)iT`1b6#-k?j*Wa#uexE-9%SCU+`R5zy^D5xy99gu~+UJ+xev)JIhSDt&4x7 zlBgJG@-7{I>^X$Yk;ejWH}lX`UNYgk?vul z9xK7ET%*WU58oyhQkP(p|5ahnjGq|&F_k%)-NvNy-O!Qj!{47v;Ij$eQT0{i{JOQN zxnl;5Sow|=Sf3QUQ_g}lqfVjTLpw;l!p~e!2cqEhGY}?4qq9mn+^cdi`n%^+}F zB1A0>!j*$kEVkGXw;tI73XA2@-CmA6YmtkZ8`Xpo#u2dhgc>}1^c1(;EGN5q6wo~M z7yAA88BQh^5qk?eCfh56(oHY;?(r!++$&9!k{43Hgo_~Cq|7Z@nFGnb&7}M1Drz=z z6x_4SLz~+QFy_uCs0ez4{}ok|d8xACvFJKE`+EldIqwBC6y~C|Z$GSDyaEs5G2!;) zv7GxLrGclOVzqxVj+RY@cdak++MF`pMcKo8FKN;I`G`JBy0q)qSA0Jx$%*j0#7%2d z$p)4C_~WlFtz4_cUD}fdCOl*Qi_3M?-ZFu?EZ&H@)C3|%?F6HHDj47MlHZOuP$+ywZI-a@ib)XWKoAIVx zERM6(;M5o1BOhe?$wJdAFqq&7gr7J0EINzvpZAiJ<#RFZr8u4LmkY0l+`!UfH%{SJ zV&&mTH0nvl#Gy>)yXPR9#GNMDYqx@9@j>vvch@oN(pz{J%*edM#_~R(Fb9yk^#sskjD7E6T!gmu%N!#MmWl-4P2=v zH}qr@Eq*ZqBoFT-@4iK`QSgUsA2ET}HWbVD(p_igJY+M?sIT|}X5&btP}uIjSz)1N@8XbGCPl;T>|bj);Z#g!hT z=%m7p=)TDvU#%WQ)!E+sxxI)fyr?4+yZ*5K;{wQx?LTohEx=vMw?TgA1*q2>#aX?M zh5F?e_i6VR9c0n@c7)x^6uLK}(zZmUY-{aQO9*8(Rif4HjvrhpJ$XR_^CMKng z>vXi(+9y#^chQ>M8hZ{$@Li1ThoV$i=>`W~?qYzq0zLJq8roVq$cPjXvSFqum%0<- zyx18uZrldxrtReDmQo14FqwY78w&4IqA)MUMp)t74ZiOSiN5Z1?EF_ow0}NiTY9Q7 zSg1sAPU{1|mU5hYVH~~7_gvjSE5ZIk7b*cqz;tx3psce5H!l8<6?k2O^MWD%nO-3E zrS>%ZWg}+l^JM(7Ddlk|%5iGgbKL)L3i0LLHEQ1^Y2wdAmuw;rpnb0(A3+CUPgmVLn zV2kiRy!c>Bml|qtH(r{-gxuL+cJ3A)8BByr(M9+yYBx?_Zis;~*v4~(3|$pq~aoY?1q?fl)fdYcw_zv_UMHBJ;zhdn8hMzN|_SgraG-!6NJ zAGhh#x4Oab0vo_Rcm~su+k}7DToUrSVc}LiS*|5#5O-T&2l*x9T#(8;^2K#IM8^DM zzT0JB!0QB-7dUX%$3tOA-cCq&+`?mjN8r$8H)x6O<-cdE(Q@WfL2OqaJ2<|Pcw2lF z{&ztWw1>0>3wa;nN}p14=A{vRwOs{{-j)MPGdFZKk>M6v*MaMVL}-3fjpYxeXkERs z;L&$U_*O;9rLS^u4jt&E6X)Rf#aW;hV@HoXl_h(BDROHIui@a!7TjlW2-nq?!m}G2 z$i7vDOn#`8bx(4{X^96w$- zE{*Kyho>dSVdsC>z*=e?lY3N7Rz1r@rBTsvxLKdQZ!f_YN2j6PIdxinS%-c3VaeIn zD{;&_8D~hxH=5gd-4fP)cnoVi~lSMSPy@9XBF zpC6xtUiU?4=|Jfy|6n{Tzm@CZd9HI6K9Z151sbgIh-`{Dh(8Pdv7?!%AW6oa?l^ss z4gY(Ox*~|SYgXe}--}?=)y}-qLYZb-JsjAq1;DL>+`EgQOVtUxlO6H+^Ep&r^)gyD zPbNkhn{j2qIJoHa7Uny95#s-T zO~7>34G_w@V$F+9uxGI%PS9OUuV{NxqiesxdEr+%m`|T+!3p@!1$>9+F02KoHB#KbvM@ZT=8a`bMu9hX3l=_{z;iSk z@qNQzyeygwwNbNR?Ita(nG{6Dw>2`mGJS6BXB*P9c^9nUJ%gRK5jcg<74J{d;9Nyd zz~b4x@b=UN!7s1*d^f%Zo-dDp>D|`cgOCUoW%U^(RR*C=BnsC^W-!y$3iR(yBMkk1 z2|8A2;&FLLTA+>4p2YBVUO9d*)26ZBm9YNpCfI+~h_f=Pfjxs3)XK>L)IR>g)Yv$X z2`(eyEAE2$GYh)r+dTCCA&0u-zmbNX=dh#4jlMc!LSD{tfbbo^NW|hhxW?-MxJ-$` z@yVuik5jzeJ>L{?QT@fvs4KI$TbbnQG`>D8LFpa0M$kRjE>NEn1fDw5^qtoil9zAd zxYXO7x;2V`x^r=P@X%vOxHFk6u(hSDy|3XU{|v00_>(LNK0%f}%q2hHuV>XBKR{p1 zoW71pEw}z|N2})lC5D3wS$T)Az}RXZ&RVNSANQXZ-uY!I%KP=k2e`RJS3iAjUnm_G3{Jb#snyXE;V$jEN=P`r&71}S$UgK~9?&XZRC zMX*NGfKyqcz?GU0qp6@8th-e~Ye6)o94`~EcuQ=wzl*&Nx+v}G2|LVqhH<;G zFzK8pw~=^bm4rQhYuN~c;dkKfM1D7aHiz#5hmx$N2WaxXpXl`980a}zaR2$b0IYiE zm=b3~w-F!i<{-oUVRbNI16)z(e3rQ*gT?klW4`ASd^)y>z#o4!cyJHRGGl@A-Q}`3 zUtmP@Zc?_TO8C%Ehq_B8f(g&b*fwO~S4 zF<VG3DJ0D z)Gb_*iuv?alio|+8H=A;mb z+Eo62DN3DOM7ZEoQLgWu4%gJ-M!osG>{$IPtko}nM?zC#@W>%w^g6Vh)zP;%u3SA->J5m^LO4* z50W0940+1aAZr3YOO6X*L6;i^(Ov7|kosYa-0H>^2KNeVoKi5s{w8$q$wjxHnc#Z! zA0{j?rZ(v#{BJNpbJ6OW<~F))CV5c10RkEmfz!p0}{g$N~SBEQXIE4S2F%m-`YT6z<`<<+YJP z#DO%jM?qIXGHw*dbSGk*i@wlxj2IU>dYS`gK6eOA8wv6WDUSVhB>wfro#1FVE}6{G2fdOg_rd2S2aj{Y#U0uZR>r&{U)A zQG;`wBY}w_)5zOIa~#NzMS8XbS?mQktvsIk9k&F}8<|iiyOn0}=l(TICc`wbT`()8 zfj!bp!YhuCz`7|N^8-@^8jc5X%AVz1)^m5^scbR&fv@k!?QUkv6_NZsr_Xny#e{QQ za!A^MIR}?rxU?*5Dx1Ums8k$S-f$O8n_Z6nezsu$)`xgVSK9I{eX4B|*yvyis7`)KFfWO|~ zVG~~T;E#qX7?YNaOc``RFgaLR%Qe&4bC_X;pwla8C$@s6>eD@5_&bolU1j(g;3 z0H(tZ+^^z$Y=P*1<@;XCaek8|=qQs$KJQz{zKS;rMQ3Sps@5Nw^36EdZQDxBr>8Le zH&ak=rarcvjE0EVUM!j02z?sLG{xEyi+mRW?;qrX=jqaSV}tSVnNol{{l?GRhtg6RQ+-1WngM>sYSOoH)?k{Rj+fTW;A+B4N#%^ zcV^l{yrTlNI_q(Mu4AcGlmjgB4}ed5YJ{J(Z{X3kRCJ3IFzr$2Fg-mPU(7uXF3vJ^ zS>x394KBazw38&MU#3i6!)+qU)p0;?{mf|~G%2B-tU$#tFpE{o!Lv8BE@Gc2^DD@vE zuSd(!)#prTUwbMn?=E1oPR-_CQ#BegDO7m7>^DXzYtq5Xy=3(_ai~=rL8Y_2*l<`s zC?B~)qAL#|+|%G1CKrO`?pMrEHwIK_W=rs^Erd`q7e+~qqtF^Ic&rQ?r1THNUbH=23*F3LCZ{;)N+ z-1!Nsv2Ch34Ci)1yT)t??;8(siB8bov>j)Z8lmyI4LDy_mOffx%3boG4x6st2A#K* z`zy8s*3C~4DlUk^E6P^|ZrNQ--+vsl+Ud!881ec4ZxU4Nc?{}zuO{mjc#i6x~yn!=~p6`VM&dhve+M| zZR}KE0ZiK0go;zOso(o(++LWE@hkqq{0VO0wzdg-Y>mkNdZ6$2-XwNWjl!3sYB6j? zEvud}2kV=(>DJ`k7~VGJYfUqr1=s&mrkmZ1ydIa2*EU`3b? z9_0C2F|#W0vak*UENr-=2gIQvuo(VHh(oNOH0_i92y15E;v0r)a70Rhs+SzWNl*BG z-QLAC%W5{aV8LSHQ;BVYtS)rj2iusYX;BtPBFLV)>v`;E`&|uyZr2RxusSW z@GoaNs^JX({2vONeuP0#WeGW579=!%`-S~mD~3O#hQa-5CwbGR&m4l%AU69knYaBg zJn1?PU!UpGwd>xX>4zs6{0u>y{l{lmuVQ=FM{@Y_I6B8Q5iBkO44U<#*FMU|1mZ{3V9FOsoEI<6tGMC2Y}+2EN#g)sYv4=9a5qanXA?k$nO50(7v%#fIzg73ZdJ3WM~BbiN;0$j|#! zVe&CKNNasSoJ9$JoEi_Mr!C5}_#FC#$O3e>=ews7srY!Vi*U?YQ_cpeR&!ce_?=Ljh|qsb_bmL@DSfx1;I== zA?R%BBXZk0vUvou(Rmla{!1=Q_1{>YqrhQEPcZEKun=SLv5 zL4a$9zT(3Dx^&HDIo4q_l^D$w=e{?F!M-7$6Ri{|{QYVvY+b7hDz9XK8Uj2xFoa{H zCXx1FMNs;qM+Z(O!JGTdByy%174`UvL663>!`GFmaaA`+5B!4r)#GST-833fqJ@%Y zi`kXuyoZFoOJ`8gN14hV z5TysU}>C!aTSh-PP^ zWmcKw(X4GCXZ;1UN`h#Nw=K-}IDk$0bKs`?0sQaRGxlU)EDyz&fE;^G+FdDuOE%=d zZk~@Go?`&LN+$SbQ3pO=eF)N`9^!9PUD)pU5jJYB5N0dfzzeGuabkf>Fg0N;%=37~ z)}RpIeJ)|Lsk<>(Zv|XfKLjV)NH0YXm0voNYsLb}8B$VH|`5dW2@s>(hcIGMn z-Ed)NcI2`LwKe$8P>dE%y9K6;67eGEiB@qtsr{98G+*o$V5cwd=5^%s;v3+xcM4eh zzjW+T3xsyDuf)E)6?(;O;ngcqh`n_Ne)Rmu^}3B?(>LY9oooA1^3QC#ta1f$(4%yK z&v9g&=Ku8$h;e*69YlBvXS%i?SdtOK0sUR1KQxYL#h--9bChY4zc*c|y#vcs|6=xm z^TgrgO}2BY2r&<~guIyEa=o8Xc&Ag3TRmkYNRQo*W0Uzz(Ur+iBejG+iJwi=_b)@o z4jt&2s7fj}>!G`iGTlGWi52;#Y%n{Ic!jp{P8vs0_jRZ45jsHUKfzi)i+JMoR#5VG zr2F^l;y>3sw9?@jsOxgddsRP7U9UF^rMPBN#3$D;Ag+ZW*NI)}>Ux`LhAF?=$4 zF%=E?2nz*0Y`*zJsF8ci`+3SRWCTTnhdgKNtQ2dmw}N{!E?}g?0f^kU3I%>!iPrT9 zxL}ry`U{q$u?|DUmHIR*e3MX3#DjjUNrHKa!Fa^?5_-H!fHAwG$oDo`y5RO)jJmEt zPoOL=2#+P{&eNfPZ9U#h>xL$a&zN(*A6*uR;KioVl)sv3n@(yc`D;*NtOd zL3_cdbtxCWZ$DHH1cU74*R1_@I{Egj7$iO4LH=SfF6vVOJ9laoUg(nJ9+;1(Tf;LT zz}B2f{hW>Y;cpx*+JA!W_d-x8G3NcaQ)#AX2tDum5Mp!nX|KH{S9no{hS=*t?3?WZ zpR~{T-_j4L|Hh6jNPUbQl{fgD)mL^Q>lpYLx^rh9{bO@QYlzRILwNg&BpqiaNsAXG{HQoM7KQ4J>Qz zA|)o1c@Eh_{I_~FJgAO=G_NBpUDgvzgS}`%$x8Md7NNSKgi(^YN&!bwI3o6{%1F<20p^dyni}-Gxka7lKVLaus`${ zxiW%R!Yvd-NhuDU_7n?iYQN$1_nE@AWe-u)@d`{-J;UrRZ{e-h5!CI+L$s{e2VI|z zlMhd>2@>RG=nh+FYO^R8T|3-_2fkZCPoyk;cGrZiSg;6e$T3(p(~8eA&Zee2+p!|< zAX)KmB+Ne`O=WmbNAH8n@MFz1Ql9(=5(AFFroApOJk^CS@bPnsgy&cjr%6W#JtnvA zj)IP`YB=;^fc&@k5WQinCv+XI#0H7)!XmS|)WQA(T+Y3Nhm-X<>5e2OQC|;#iVXw< zM^<3s0b{y5OoCi z0j-^Wp>weaoxNiaCf?~m$?1h?QJDmhyPv|;78#n}D@I2Pv_ZkenA@_A&se!+lhW

    0&?JDF=G(#Wo=GpJH0^E7ZIA1`aHERQ|EsmWIa~mU{F_qWhl=%-5Hq zi>8(Vu1JCKuL6AVpcQtf_CwwcNz&J-0R;zAQKf1?(1dqT!DIy0a;$;Ra%Onfu%ETt z@-Cr`Bk0EK32aBmRdQ{DJiT&u2CP3WN0YDoW|Kenu)vMp^x4Tr!nPl4=vcu~VqaB_ z($h7mLQp$&%8V84exVIh|GA<}UtS)bIGmjI7rxa7ZcjFggwrFEPhY0V5I0=K}wuGeYK7ES9^%C`#a0w>EDrD#*=>h zJa7dno4X(_&XumS<3Eo~99TB3hkmXCv;UpN)+4PjI21>!r(MVCTU>~t@c}5c&W6t; zbK&y(MEtWi8$6Bd$cX>)*{3}oiyXuAl`j~ZBJ-YzmOUyj-G9pSqc z(RiPWB2T7|q0aMVVdA7OaMoQ8dyTcZ8lQ_`D>9usYo|iTG5x!qLc8Xh za7)caIMHLR~`erN8?x*CO%V$#e_5&cqQn3NQkXX9d!|MZdsJqX_A{I5Jb`6mTL%7?6FIscg0(-7||E zXGo+%J*P{P_CFxjI$I*z*U92JTDERH?J=8m- zNpHP6gwNjy$@iX-74@dDv_uXcglC}YrWU+6{uI}EB@rL@3xwxy@f=LU8PtEG1=Tt9 z77X+B=#D)a^w~fhda5R|9;sY`!qmw^x1hg}II|efOZ#EY?iKj1XdSGb_#QeGGNGsc z8c7SSWESr=XFysmw$PEA`i*jNB~oax{vy0Qq7Bc&oXKZjU$X43IMR_3@O4fDTVFGgpI-@4 z;q!U;yC@K=eqUhm<5uBfjR+{=7j*XjO&9!YE5)&j=A`2LQ~Xsw7S;IO*uQoucpg&& zbC>s`=h7IKqSOX9I&XzLZ}gI~bRVudd_O3@9t{fJ&d~CHJ+3ex!EJw-j!9GAk$t-~ zFuk#`v5wpJ@#}`3+NUm=M z+iRo7&3AiAn%7OGYt+9oy1W`E?kxuqzw6L5{uyquM6&W@tFX>Q2v0w4<(4;R;cPQo zI$@IyMs6%ZPtk2~tNJBzN~~hJ#d&Dot-bBr{0&NHXCH|1fP-Ca-(-cW9qDi0y+m1+1X53b2A8`5kopw;RzZW(Pt z=S=Dprb$c_#)Ns$&f!Wh-Pen|)#T{j0B_j4#DddYmVnDXra*1kbtZOaKFVZF5e5_{ z;$-6({26o_2J#MI%ISyfd~G`<`pg86X*p1#kVyVqF66TlN4RpMaM&92lH}(E_ir&#s!D+?)eov zAuK2j{XYUdDr|Cm)pgM^J7zm1DU5-?R;9#wTp)6S}ke)6chQY*l~?bv7@85k}vcp0y;m zQ6r0Z9KFZ(dLQ5vP>n0{=I0^@hd_RWGMD>q0k_HgDr)_@4tt+lal-+Mv|j28@FjRW zzv3|Hbv3}M?d@o}SdAR_*#fV(+=2enPnp=?ySR4FMl|HJYAQFB=(A(V-1vNZNJ_cG z3=5tR#g2Rw*Vzxf$2YM_QXe7o%Uy6c6_$5oUcuhIOURQ#AzH@#ftkx!;{gz(YsM@> zd6`JA;$jx+7c6CwW)I-Yp)7LcswusHg+EvBP^Bw&J;&nV)i~o?JepiTf+Njr(T>kC z+U==gE!!sI*&GjU`f4%SG_1mne>4egw_aySd}l4BsEpnI^ac z(eIKWPPsjUOI~3?UllZykB_J0!YhuPLf(8FwY~t#OtdK4rjU@6`VjiQl1*`ZhclcE zxxY3M`0}U-eX#2gQy<9026Isg?h&jZcobSrM||Td1I=**!oJTUY=py8=-)006E9NS z`fD9Y+^UHylqTY&>FcmaEFMDoCgYnMuAIUcJC3?m1UEBqfr=N*o97shcbWM*bWAxeZ2%5(0cq@qZgG_*Ce6sa^s zlKG-Ul0qsCG*F&%A5juzq^*=9QVA_I-{0S^=el_Cd(OG<@AvchengKN4%`Iy4*J4F zqef_nl%RQi)99{DHA<#LiPoM=6{#pn@_d)?aR0nJan*K0>m6J8xA&h>VY(EamurDL z!z4JZRONrChhbVx4_S2XFFbgZfoVYo^j)zl9_h7Z&Q~f)@t{UxRxQKxf0vQP3k~=+ z&+*jrP9mIvumKb$DM-KK^-OiE|3pv4Fhys68@~ZEJ9#<8G}3-CzB9V?!IPcQHbl z4cc_dWM8W5sYo@BXmDR;WfUG<^joJEU%w1^O1p6B`P0u54v(X)b5ccr4>R;Re;YDi z7US}^CeUBK4owb>BfBy$piRbkEV6lp+tc)Mw$y)Y>!5sG=GL#wk_Rp4A_c)`?4Se%`-_FF z=p%AA)Q-C<-hi!6mcYccb^P)bclv%uAo}j<7cCiV%2zE)0!6>(OOKhmtVL=smt)B0)R5zpyDAZ7_eEIp0-r8kbwfLDimRux+dz zJ`9Qx>)(^blrynVx~LhPK6=u8Idy&~cNXWbJK%NrTXN}&7FRqjN2b_BgS^joe5!mE z?hD*4*(=dPFGmk{R4w5LkGzJ#(Qojr|0VoBKN5!*+(f6~JlH>5jtit7{GeUTw$v-q z%uscHao$$)ByT8PAzn!{-8aDg=|>z7Hy;42A8zz({(!)`^eb#%%wT$Y>>-G{F^Wo8l%eULG;x5HHfENp zqeJgqHn1uVY|6zr(j;G`@4OGMIST!$s$dNDS&4q8=G=4VJXo@)9#+5ifY_3ocz1At zC|!F$1gDt8jke(sZrqGd4opL(woD|Bsux6e+u&hy( z9e#vvX5ReqhAjM5X#_KF8`D)E2IAby39!momCNTJX8$&u;q+JInSg=jdvG9B>%K)D z;XL3_dl}zGeuG5y&D>dFBL2*tz|H)q$-DKvw#oYCd0fh{AYF71wZNHZYYYNBUuCgMqS-1oIPQ1oBVO40WdWy)bwiGQ1 z{DL~xEu^4kDg0p8AaO|w_O|4Lp45NDGIJ#ss`}x_>BZ#zk4UD?W$Ed}3e2!p=D(`i z*tmImC03ftxoye;qVo5?uw!e2Y2R)i*ZWmd;e2*<0H=f7GKW%~PUw1ID_bpqPav3B4EG9xeif{7bhve0=bc z82Zc7oi}Ca-x@7UNh1PBd>}TItCN56N3oO-$2F;&ggawDQ;jD4O>UVH{O*7EvRInSI(k1a0t)al!=F%tVAC5M?k9J z0{RKu3X{Jxp`^`?pPIcCPA1et==Dz+@YP*BV(A!CJGK#PjuAXv6N%=XRj8VJiQU+) zj8BdOtXlhBR4!V}vlQdtTD26lTkHxQg6GiU&1xLCIiBo#5>Hx|-pAbL6!h#HK;sRM zV6%`-la3D&jq9|fo<+&PH}2psRy9GA)MB#azkVW_(kM>4T7tVi{s!MauOYcDh25{u zgZ|H|+;!+g-mUtCJ)ipo!csn9?VnunKNgD8s~)oxvcEwl!;gEuJOu_D2czWg#q1}yq!kTc#iMU76>UG^ zfeu%0vM{pNEPhi7ll7#+4`1;d+{IaDS zC;OE#>q0pa;9$ztb?V?=j5c-}3Z4@0|47QQ)s7`YeIR{iJf^4nptkA-wj`z;uR5f` zCp#fW@GVXJAfylv$*zUHZJS8v<53uOxg2_qEFd}&hV)<10KC!l2KP=JL5GiYMeAu+ zTZdm%fum%SVN5av#u25%pZ zM2&m~lNa~mk*o%YcRPq9TZK&jAz_9-Fb>u?KNj~ay9_(hlEoco102aaXJ!#^$>%2j zg`pvYrw%aXYHD-fjLTuDts6{>oEuP-GRHAM`4`z+w76vR1cp-&MZ>B}L#{NW1aImK z_j0~b{9u$0ILQaWzRTBe+o*%My7)55_G=+#va)z>?OXOfG6$1}2V=|Aqfq$cJn>nS z2S(pjr!(WMZ>ZjP0pp7%|t(`P$u{`VKEqdFk|)oxrGDsWx2)nVD64%{c6LhjC* zNL(VLn5yhO_9|ciUwuH9PK_JH-yST+zXf)D{dj_!=tb7m9>lotHj!oOK4z)6fPc@= zL)pQT;rhLYP*0j*!0v;%bx;MUHhmK>37G+(oeyJqwg&$e9g9T^yjl6e18my;kId|M zDD3p!1n&gDdtmBjaE*S13p;G+Nnd&1Tv8(vFL;Sx-FMM2m9x+$Fc&Ue5`*ui4{#vi z80l3kWUtRlarZ})*n$~TN-7`6kn#6FGmFf5WNzU>7_`Wj`)EDK)s4vdaK&1(y>z1)Px zH_yRC6(gy~U}yGnN(=dtB0+~Px1yI~3t8G>X~?j47WQ;CveeXh-c#9{aQH0d@YPE8BMQTY=hZ1BO#`G1MCx=S)=+J zaIL8=zES>x+3tpdgISB-dsc&E&wqvO-Nh5g7%xyaSpl9B$&fzf0G1d9;P*v0aF(#Y zb@UOuarfO}_T#OXk*0^;H~LU4D8$DsZ5E)tlejKv?6@T1ZREYMm49wt^; z_vi@5w4cD_;vx8B^dVBd%a zoH6~^08vVTDn6UL9|qJlz|;FS*m-dzk1#x5;=E@i&dWOoiX~S_pQ9bWEZkGA2P@)c zjmubY^DV)Bn8jSAF;IF=n#D5_p@VoACNc=L1Sr4B9aqm}>l<~Vs>SJx3 z>gdXh5B!HB(Gr+^(g|X1Y%smnhAOVlN0E?`8L`ljzvz!+zmyQ}zB-1bkCnN4YzO}8 z{e%&|lkpj>n!5iJJ>Bm}^(2J$ zQYoqwSay2C4zRqgyu{l+0k-4^p~-%ZR*zG$uIK`}pe7?6yR7-GuLgX^>jWG;L50^v zSo0?1H-d+E4N5CSL0^b5pSSD)mX{6_{dx75^qq@=8A>^5&@h^wl(K-lI%5*6H45MT z7)T$VUq&SK)lfe(2%>X$LT*X9`1ocEwBES`ulg0hyht^kWj7g<%m&d>X-B}bOdsEA z7@}#+96bB32~J$jz}%K==lgJWcKb{) z&Dz6aj=r97_~RbXzhj6^Z68SYzdu--mj#OxE7;6dIld=9wq)#RWu7gZHIE&+iMKjb z`3SfDcwSkUnF+Ipe-;-ow4fGFmhZ<0LlWTd#2f7Ev$goOQc+Z$!WT8q-L@ zRjs(goR7RvE4D5#gXDI3=DcDX6t3*U1()n`S=tNEFQ< zs!Qn(EBq&0hUXeqi5A5V0z02exUcjqRMt)5C*|Ie#}leR>4XEd#oG`cc#7_XVFLaH`IXto~8_nL=%o!#N$%dh4%&w zB)z>$O1drxuH7Xr{QbdTG+y?GEu3qQz25}~&A|gAk`(7b@Rd2)1D<9&yo?AkmVh-z#wV>U) zTKFQ?0DWw-A;EVRlQvSp*#-Z|^UM+<*DOahMt#FfVb?=vCzFZOrtq32VJyzYklJ1| zB^AA2M86d%yY{RUy~PxUPgdm3zazn*+LV{I=wi{a8-#V3!r=*ts8-tpa~i%tbNOh} zn9z!UC!J#v=bPE;oo|`NfM|B)q(0Yfjm0y&K0)%q`)G5`o4N_}#cOBfc*4Bf%#ScSyWD5+783`_P^ja#DLhIJwqhkpMbCx%A~|-03R~b0Xz3Er>_PnP}5}s*FAAC z-PvZ!*W{K#>95&PwrL(MoIeL{FB?a#KZU~LYdgpa%e%y*SQ^5vYvKf94z}x|Dj!t& z2Bx3L7MUo-u-W2H+>$c^zwj!uN9J*IB;_g*i{Zh`Rw~_Uv)iMBB#ekK{^cf&T{ORD-jR1E{B`H`tah0 zQ7~_=EIsF8K-Z{S3TIL&h(5dnef_eL{TS zS`E8}Jn9|YBuE$fn-k4_pkej|E}N}M-F7QejbUMU%WFK&z1Bv)B}wBzjahVJUKVC5 z-@qi<0J_IYU_Vut;);V_JkRei4BQe4WA_Kbc=G}<>fZtnbSm*rp1|vC{VUA#^~Lp? zKj3~tE2=3dfKpN_>nJS)<6+S(N0{aBTOSTe>pfsmup*uP>N!5X@&lunJ%&%>E}Rw7 zCgkltLsWbcX43s|`AWaYM&~MczR<@Ta~F&6+PhQvIAK=rcLx^#lO^qboD)^~N($Mm{rsd^D7D+63p1_%z>EBPNF4PF zUM&(jo||s6ImNbos%H+$l-__@CoT&ddmsMUy9#IIj)P52p}10W9N#gkm>s%x0so%p zCECj;Lt42ctu?=j%e9s1n1HSL=-dO4tJEdlcWh~~vk12fGxaOQd!R(46!!-mr1Fc3 z$gVCA@r!#}{MzmpaE7Ph)^h{V_N8!t6?Xp`wKDYcZFhX~-2nF(_u!ySKk({96?RU- zjV_Wm#_Rv} zbq(&bQ06Wlg4tg93%&;;$Rg(qOwIElEid0N?K{RamR*KcVhepX-|@Ut243+S&ZT2N zi#JF{;jTwf?2_CBzG$_B*yZ~*NL1)2pF(;>Tdtpi-!szj(4%IiR<49TP%V6aLQmvX z0fw!3N>b$Z;krC$-c+qiw+*iW>+CpODBN!vigdYu!yyR&BJj9{=U>Dmb*{ZW6f`QF z(0+>xb(emNwnC;r*rb4cb3Jp;UI>~G`$QghqgeKh!}y=!Al@*k7t)v6(+V(!(Jwc# zqoWCxtX%+`Kj=ByxFC-69z%624>9?+c6b&zkuLQ(BXm?Vp#J1o?qTo5H>DloI&0_C zzZ0aX(VkeiHop!Ee)q%g*}6OtB7qm#P}w3UUfg$1^!!;obe?%fnkx3f)~P31i^gy| z>eU}OlWxaX$mn92QT8Gw?b69qA5DXD?RUf?L5N(f+y&94ywR;(w-iYosX#a#>-9oyHcfY$l7s1W)AL z>Exn@AvrKv0zOr`WA@eS>}^UBvviux%=XTLt`(`^=A(h(qgIili>%1vj&6)^l!I#% zLP)l~IZb&j$9uOf5xlNZ(E4mQh;|-j$-|84qP;8WfEX!0Gr<~H{V|{lm!IIPmZi|t zCC8i2ric#yP6w}}L9j9_9#-h=C6U5DXJVZeY><(mPct^tksWVARbT~u+!O&9Uv0#p z1ta-4i^DjdWW!JiS?)EchqXWXi93Sxg*=O_*k;EX^2nIM{IktC;_(Wo%d21!PL=R{ zgS1FGP60_qI5cm{LD`Q9IMgOh^x@1rTGRiOB!rHolDmDuO1A=YYt3QJj9RR|xg4wL z9bCFX=(N`DgMSYdu&L=aS)OeP$}gH>OJf66>E6UC%~SFHj9buad=JMNN5ewP7}g-U zif>tH3~?p4m?e3WdAGiS_j%(`b^ZaU_UOfjcU%Qm=>qhgxfL5m$&*pTTjAn9U!wH$ zEIJLhW`Ct#I_|D|Ct7>m0kfR_sh{Wvnl5UBU6vPN@VLjgFKIc~n6?W1cl8mE*k@vM zXG)XfXYmkqH4N)s!0SgzQNHr0(9;yd*6gL&m3N91o2No^{W_SZFcUuOzeejn!%6q( zFt~E>CLCDYgdWXE7QJaB_-8I|n)b|b0$joCcRqssh$hU5h@~z5si4Td;N*3q=@0){ zG?TI7EfTLWq;nfBC1bI+!-DHBsllxsjkv{QId3W6Pl&=ekkNk1R0P)Eod?U9;p|*I zxbG7#Ui}XD6sbe)*rVY1VjQ;mbfSM>7i=yVB`|w>iL&rNmu2h=%RIJ%(S~7S@a$lZ zcFyH{=4kO(!CrjX?xDO#<`#Ae9{W^JCUoBp5otYVK4IJ?-1*&sPWvTv^)Ae!Bc5cz zw^33st-y>gK2=Qe^UverReC&JrU>tU-+~J!MTrN0zlqOxtOwbjQ&7ruDXbpzR1{g2 z35}-jSkJ9g_|Gc}`x+zh@Lt4{39E^K#et&H_B2thL!9cWhOKM}$a=?<4pAc1yxl{# z>^jS;X5VGs8n0pFT%jKmH^lDZMd2RfXt^NHK zHYe4yt5W6|FtCGtpUbg!p^&@jS%$WEf}qPc3>O=ek!cbU@WXHs+UtJ9@q?mpYm6ft zEi@O!N~fW5k`50@GouyyOWBX3Eg%mG?EYa%+V*n{UY34}@|Q-^20n`(Yw%U1_{k`_R>xFeMXY>vywa+V}K2x8A@0LpsK7iO^)?|D7i}*8Q970gecRfn+o8Qw+}A; zZorDLLbBn-MJSZ@!2E!HbZ>wqPj?Ft7k++6+Qm_9yWz#+KrBeySrhh?-m&5 zF`FjEH)DjJ6@J3_|zTL_^F)h%qi>#xVgoV^*>zb0?BP`n|-*a0mXb_Z}IQ)Wcqzz zJZ>^G<{l*x>}RkQ)(*M@?F#m!eoYlzsF$K;y5bVco>{PU69vmfj?8lGSsYoRg8OX3 zFh(yM?D}Jc^Kt|FJ~AWHlM>+f!%CR;%>ayM?1P5QDtuY*ez^Le6s+tu`2gbxY<7E0 z9=jdGH7)wMczg#jeQ*lBkG~+BUUN9Ky_P{q6Yd)@Uu4tSjmZN9o4H*$FAL7a^&_-l z$_EYT6}XGIsujkhdO_P)GcNa4mL^tPq1^`s`c~K%ZRji(OV8C7gHPvjowd5f3uYO*!j z?zzKupKiv5;(Sr=dJpn%<^g&xu#oJ^X%&2+5kdz2D6Z@nM@MBE(ZC5E0I>P|DTv%yn^QxzOzj==P)x*m$&|#NsI3bpNTh4 zgUNA$MR_KO_50ZHx!Ng?n@+SsoApfURDXb7&TD5LOOBEk*%^4~LJdCh&V=&G&mm8B zAekTh2#)rYLjB-S9Cn})Dl!gYNpmE&YBj?Tk6IRZOo?_@tU|56&%`Jq4W?HQo z7x*U8oEC>F!Pc40EcLB7x_{e&3!-aqkiRnTy4pk9=f&atpi^w5&=I^idk)(iJptn? z{Yc`lvAosEg-)LlOEmhDK*n2(eu$mhVP0~c@_4&z(cVGfgzMQMF;P&|nDu zENOy^YFCBqLKQqcr^#=)p2J1U0D`CIo*k*ylGqiYoh8U#w2${~QMj#b4gZ^2y z1XT)Z06cq1+kbteXI>SWobyDV>4wl=(FmVhg}G&WGFUuuhM20G>`LNrXd`Y=S54sA z@l}pf{zhQdD|=q$AC2MW`S5J37QbhwPph}P!QGfp@N<%4MVAc7PN6pv=l+V|ptW@M z_XQYu<^>z~W+oM%8AE4~56m@TGYrvlWv7k{E;VriM4OWl1@xyC6JY z7cGWKDyn?w;r%#$UNO3szkqt{clg)6Ts$zq1`DTaQ|nU{WMU6OZ*c+0gcqW(QxaS) z9mppwY6tc3K4SA{6(q^tfi=vYHcu`m>Awl2EI$tyPYSb!wiB>0Pa360=dn@Gud!<3 z@34K^Kpb~YiCX4pqe6ljb^6o`Glf~J`QU{#HAjK>zKmp9-6jyOWku_nC7HXUKlYFe zQPS1_;FDf9jv5sVZU0Wel&)krlnxH=-@VGYH8@n z+PAF~+(vmYENmKI@=NGl#C2iHNDcnl^(l)=&tMW0BVh92M3yEwhz7ff*~a1Labc7S z9XKkQ+%r8a2c;_)0ckdPMwW40+|!BS>BTfCX(}E2VOw zW@{&&YSv`28`{`GuS{^5bd1&Z%_HBZYQXtuf0TA!4L4WDVtP_GuChBxrYI*eZ_PQd zp{tE-ol=ed=X=TP56NtW#9;16zkqJvag?`=#mChws9EPQxKS1~CZQSo*4Voi_=afSvn>eZ$QYUKA4PS0RT&M!6Df5P&o5x_(4Rda= z*qJ;1t|blfi+J|pKDJ_m0-tv7vsnMN756F>vRT=Cu-mec%#6uI``y}f`K~_#)A@=> zd_;y`&Rc_{)>HV9-9%na2!*hff5_IIGsynq`gHK4gA;NqL`F33e zMtF`zde`a3p}D5?%kH=A#HU|mR?$PaYZXDv0((i`(pjK0SVM634acSOJ3xMEy6DW` zQV7*^;MKi*VU_P;)?!%-wk}iYAeqksciv4bd;YfA%c2Zoayr0h&v1A?X$=pv4M$PM zT-G$t8~1qJ#;CTRI8plsZl7K_K@t7o-u?A-LNXP-Xg$a_o|WYnB$i+|4xw50Q}Jot zKrlU22`v)sSSI+~@2>fXH@lp9mEhCZT`^4@H1;G8%UC6rnODpT*J#rBQ&YgrPn8;Z z3r?mPyGfYKd3+YJ8sB=DL&OUWe$BfKTg~LT;(<0yJvtcud@kZt^*tdF}dZ?P0p;_hA}suv9-e4T(n^ZzgMM8Q+o|TGCz~3NZ*4=qy5o&-VG3u zQ}B0C87L^M!O1yK$coAraQkTx_HRE5x8v5aISPxR)FP3E-B~5hOZfHCI@X>JfgjDujq`&zHtbdn*=0kL_;F}^>w9w_@A0ohS`xH9HzzuB*W%=0Y1*}G9E3{Q+ z;KaNLn%b>IPR$uF{$3L!Ev$P){Hidxz5^TOhrGBC{xqmDDc^` zLda2^0{@Od-07Jdy!hP;fj0G+6icCU`Y}k}Y3vv(xNwULmO;y+VE|=+NlQ*7i?G@U zmv5|qNq#=`>xMemqdkhL$gYOS+g`Y0+)8SP9$ZOM$N}!(i6@*Hs7^QwwH*WK#^y&b z`fN1G{9KK*R*%N@8HpHRQpD;mD$=$C`si-G5XELHtSw?N-g`2f!Z>I6W7Usyc6E}& z7em=G4=1d88VvK-DsjIsBlh6qC#X0y0#~;WrRL#U)OvS6aXkG2;cM7wVL0lCYNPpNDGDE=+v%XE^tMiNnuc{*cX`M=?tyE~w*`fTY>~eV2 zGsSVQmnkoZTuehLVoKc_JY`TQH~>z-?wgO8tHWq;dFjT_l7W7Q@!YG+aMWlD0ei6PcGX7O)yC0FOpGWu;XMDOx99`O~Fxkw^x`I$*M!W z(H%l-2h-ZsIdI*%7Zw%}v9q@dRF6!-;ZB93pPC^;rqG#8>bJz)$oHZtU6wH2=_Uyd z%>$y;1=g$Q(2Sohu;Jh`7%cFEHW@VHx63hj$~qcq_C3O=zR~=AKn$3EB4lBF2<&%K zfjiH8MY99kpjKrl#TD5w^LH+pp#2Y}O^hIC)+xwU(WY9NI=DQv681Jp(e|9TqO8IU zP|ux14-A@1b$u2?;r8Y1C%$4U(#oOT`z4TN$GEDLCtu$bhU!#ZGDtLw);^px4?AN1g`ar5Xb9nO{I_ zmIMBJ6CpUp2Jrg(?WAE~KO3s)$?~;#!;as=TraKylrohuJo*bpPrD?#;&lMF9hHR> zYVUFT4iQ}y*Uhe+mZsn97h#E6Bpbb94`?qprW<;GI=18}&`sNAVaR_);`^3&p=5eL z`OJha?tk(EbZHGeHeetPPLGGR_w4As)$5^1=OB}9*X6Eb9qAMy&_8Rn2)^dzivwTB z!tE_1VI^#V>~+?3OqT)~t;6xo(JC6K0ahR|si*nu=P@XYsz00$NMy0=w1>|EW)cxLw6i zHc^(h-2Z@ECVH|%-Nv{`zl!8POocDrvXEp`1?gf5zVf>{-%)%G*m_$qE0U+qy3<56 ziW5XG$(J#0^FTH(;Rks6i&3V<5$sI*NM6rmsykjd_uRDPQaV#frO-_)n*B*&%E!U) zgfz0z=8IUmeh4N@902=MpCLs}VA$r}Mg_|@)|(?_N+#aGs-EvCukevb-Ex86Z?(|0 zOOj3>*a=5pp21-|CqOxkBzh~O!O~tIu`d9FTLj08#12f0vf{^2?nM8T!ThgVH%3%9 z5Q8)=bnbbH4)HFiI;9MwbCzKF_Uqtq@(r8)%?3N9lgX4Z9?bCLKS+MW&}brJ?eT7~ zj@RLbzschE!f9}Kr7s<``!IH`7x<^%%enJaS?K>WjEeHZ_{Huxw*2}PaX+hs)n|5N zg^mmDH!+~+h4bqh^&n7-4rovDo-Wsm8jIPO5)P}klFmo#O@xUH*@zI z*nABV*y;!I<3?HP-Yo}nrwL5UhF5Hkiww1L(xBJn4v>EreE5}-R@Bc!4yS&!;%d|xoZdb8EL;M6Dtu6l44x#bB1Nat~0o?V_6X8}j zPQ3p{B->zqnb}niqO%9f!twxR9=szK=E{X~`7uwyE%_q$z7f2ZagF3iVGo8r7hGR) z_fh)NN7C?H9(4rY^Vq0PGBHgK-tR4AJ8$-oDb~Wi>QO07-dezPqvN2^z=+4D>CmOb znT0rei~U{8iHV;yPmNrHwTbTN&?bR#A$uXgXfz}*@PPKb38MEOeTj^$p-3xo7bH~# z!}>cebgK7%O#S67*dB0Rocm)R9=`gRsOC?@FT+oQ+LB?swn~g48wS#k#-DN5swi9} zsmCQe_QJ)wa2y{c-07d6U|TCzf&BRwgc(&~PryJPt}>5KQ-9l@MJTwR{lzZ1Swq}c zWtHRBj+mwwz-hW+n{BKE5;b(=p9+u>Sc?P{cp(ii(7DmuuI)!AjjLE zN|L$3`(Q>w6X{)_3>jOMxLtfbytGXgH`*HGanC+NHs8eH`$|Gie>Mz@y#_PWg>7kD zL&@~Ve~HT2FJ#N?5Lh0Q4L;GiXnt6m-qF*CeUrn`?c^k!I(H;L)$<0Pv|I3h)`e)( zSp`Xn>&X!LpCpDf!X_d6^=Wo0%UgSn9JW8i9v2!>>oMcm=gdFo)T++s1*NkoH*+xY z*bz)twB?OUFXEL`ov>zpC^@x2n%B#pLNfX|&fF>ZPKE66UY8j-Y4b(g{-qQbIlqAQ z68o5SZ5R1&Hi&2FrIN*FMUdIvEP5~b0+;CsPMt<=x~D4z-3?!${t;>3=W2>Y!q2-Q z>mp3ARpI;p*by7|W32MVEOy_10{7c<82uU?L?}bh{hxk^f17{xEN`?-63^m6cVMoDaVtn2XFHF9M zX`{`Eh35o%|L7{gg(~7-ZWzPW(+En}Wcfk82Jmd(hlwg}aR`LV8s-bnM1P^+03LZ~e%cVwo z!3@)KfqQ)(Mh=zbrg?2>Ftf5S(vwBDmke9x`)76bqcI1^zc$vHesUPS`pG zhrE{(-v5gz|6~DCc;`ife-5OwQD326W+#N1u7l_8+03oY5cUhtkU$SDdRJeG(ige- z@?foKb6Y)X{-J#80b8oJB?Hu2pOA$D8}XRdYF>P5BC1W%z@O_z&}At*Fm+og8W_yL z>mP1oZrNpKI9!!G#x;?~iWD|A;s%c0*@@<_yYQ)39#-AD4!#2G>cb#w{$Q%W+n zEyu*cJ72#e?jKbM-J1H25Kmy&sAC$-Z=MTrrtF z;|J>PUN8Q1w+y$p&!v(Z-N62tCm(a=Gpow$L~&sSKJPAus3$|gNAS(Kt$&ZNHa6mn zk-f0YoYLaMb5VDq89BZ}nNK?yDLS31&FdY*P_;<{EY*g>#u?+`YE=?^O(Ym!S;5Y_ zsd1URiu8KE2L!!m5E%Sd^w2}_-<^ zH{}Cn{cA+Lm4df3!Z}w9^-1D7?c1aYl5^I|k)5M;OgMyccNqNv&F7$0nlcOJxpPfs*zU32Gkr5<=>NDlOB_`qzPC9v|j z7y4%;!sy>Q@YO#V-+VJf+gu0QpcEzAsb@rcHm9P+*FxmCPGhByHJ3ioi+eoZLH4@< zsE@N_>1L+DZ%v1_E0@wMNyX3|YXL@|bx}k4JsJOWFWMjI7q5L8jfF%0fX<37#BQw@ z?=(^1!^Vhs=)z?1kQ~6TJ?_UZ!h35ZvSY?wTXFk{8Vrt^$gL$!@wM3-ST*Du+}fE0 z_AgGCsNBBDeqa6vBWirvR=>+|^^GD;uwLbO>#ZG3d1Oa(?GkZ$!d;efBN_U7CAo`y z9U14Rg}z7klT`yQL--UGXiaJn6ZvnbShN<7#Y=KkHBabNIRIOP{QSpQ4}N?mH(3 z?r9fM+u=J)e$$2F2K|JF9uNf#@)p}nTt%N=Oop^hFDla*!g74YSS;`>PVaU`m*3s2 z|86=vqxuOYmE`#7Gmpd}3PLV6YYf?2wv+x$uOS;^PT@5VUogv!<1@9FGLc6ejCYP^ zVXxGLTx*xeHKiUu?CZftTKRBb+beSE^gEJxM}xP;A7iEiMsaI31|cF@w$jxtN~%*$e~xZj;veCOkPj1zKVRHo=Edp$Ea> zsF^SAuQ>^K(iU>piZQgntp{`_a*<7h2VoEHh|^7s_|4-Z_|{5i`1nBq10FobCI7|1 zn{tk-dNp`jU}RrDlZV;@57AWmEZUj-p?kp=ffaAdll$Kw7~EzmuUtfqi{n9TG>CSt zOA()(l8H%G2QW0@J?@$0#;p9c`0Miu9of+3HkJm$8r5TGMcb5^{TYHf2(h^4x8chAW-H6xP2)^%j4Zge(kKYm-an;U2+-FZ7XbjNf zTPhu(plSfg5%Or0E)~Ho(H-{buRBw^WW%SP6&$KT(Kvp?0nn6I;^7T;RLA5PQ}FEp zYtM0b!l#>TF{y>|bUb&sIf5o@P9YJc$+(Od!tGfH(5Y=0OG>#2(dS;m9@P<|*s)=3 z(6483^JE9u)mVuZz4a5iSOF+n*H7wqy0gl2EsoL49>Tv5l3-yI2EmUXl8ui|_)%|9 z_?Zxk-EPLLXz~(JT^<8w&10Eg*h!SEJ3ywK70#p{(&*SHN3&)ou_H%-Otx|XQ`dZ< zM`^}QUO7U-rj^j4Z^1k4Qc2WjGrqm~Df;~P4u7551bgkiA|4RV1-rEImxCr3%{`39 zudd>XN%CBE(K^vVllw4it(Is`)MkwQN1ei+V5mf7;r#~bncXU>Y%TgJ0-NEtjvR?FkwAxOf(KD$Gh}p^!uxw; z1-@zoCYQQmU$u!yKIA)_>!}V-0a2j&;R!jD@QV#yS;M1#x=+EDv%8(|T0KYC6C=olT`rjTs15EfTMuN;Q{dI@WXYBN zwDW^1F?70)6Q;i9>fSmDTsyTm4~v%&e^Q?{%6x%D-S`UW?b%p)GLs8P%7{UpOwnNMa4&{*GCR|^ze%Da`GoG z1aJC`1dSJY5Ll9frK@AWYQcLH+kFDe_Ue)RI8!1BZo`IVF53&;sS$J{Ei(~zk>yy{Mj`8J&qab zp)3B$pzo(*?C3a84Rw|A_nsKRb;Fl1GPMCWAq0K86Qz}1jk zG^+^4k*cY*QN#7n;Jg%yMCk9~FtIi9A`?`VI?!jw6{eqU6u2Ancm;(y__an`j?2z+3U9!sTK+ zi1=1ba&w+4%yZZSjxygNGN={2rcdXeZ{FK-dk@akYX<}QSJ?2>1Z+kWaTw~vHS(E6 zt=PqE<_vST!=M-=^^U@n)E=;Q@JBP{VeV;_J3E$o0R#=#s8oy;4C!B{EafSj^oYV| zk>#*`>Px(6AR%Ah!J6X>teX4;?o*!;41O!*QA z@(=EDFO;Q7;HI~rAZ;dG)1|?Cfvi!^P7(Uvo`F~Hd@fA2m+H(ojpJf2!)N_bsNheX z>-}=@Xss;En^}&bg6A~via4%U3>Wl%?t$vy1n&Hh8van5%5B#vgj+d(K{@soH+Iue z82Yn#s_xD~xYja!jV#zybY4k?fT?MeFVG*hsG$VegfiKCE>35S)xV~=)zQqwN z_5X%?hxsmNaTtDawjhsI9HQy2=CIT7CKR~e1ntrhjP^*dPkRgS>zWR_+NlZVNg!wS zTnjPaUA>XCX;_>+=I`%inqCl=9t!fS zq)E&re>l5l3OjN;58oCjk*>CCZu>V2$hYmm9KBjt@JbgKtXK$FOsPBH~q#~|v^ z0B1H!je$)Inn%TgYppte=Fj4)236U7yG;VKX+e+>-w29o1L$AW3Ugfy;I~*adQ_ef zE`KV@3&AxZX@xl3S8$Jt`AV_pJXUhhXP&cTf)He@Z@>|r^YveDBzh^lr2gwXF)gPV z?rpF@&w@YPIlK&IN^PK+6%4YLgh{8ZT=UWFM(HGCv4ET%)M_LgDyw6!s)F8f-_N-oGw*neHpUg zkYy`Wb_s?f$2*`&LxZjQq|X(_odWfk3So?!I!T@r2DRUf*ovdSP+{a+d?^+M&t+%f zEpK%;BQ6$|Z@fU{yAg`&YCP}j49^Z9TnXv=w&Zi6I;0KMgV@5cpb`=_XuD3d_}+8H|W=*TyF8$8mb@g6O-<%GMUOZxK#NA?Ts~McTzK9Dyic_atulM ztxdRbS{8U{{ubtz*1_PftDqg;hhO__iQ5$;^1JezQ2N<9n7U#J-!`9y1{GWGP=^}n z&(y&q!e_8t+yK_@x5J=k?HIng1$8w#!Q+A=?*oZ-%GJom57I|qxyVxL6*mK3?n%SU z24jpDucXHPC&00(6^b@B!Tat*Ft+Op$WN6fMz*iGf3AGiBL{NPFJ$S0o%guHw;|Kf#oY8p{WWNrfb}7&GOpJu%rBxVQI>@a^@#k|?_QW8* zPMES!hF!X`6lTtT&1t(`#mwDJ-0o{*=uAgPOvx_iw(@QRU7l-OH>pYZGm}c0#!-S5r~FLLN=|Xt9@JH+TM2V%9B7CY}+9GxP3Flp+K&5Bf(D9 zZt${;gU{9HVS-B+yt=E%G7Am~_Dvo`b~cNUg%e7+Vwp+^TI~e$9ge|<@A5o9%c-I! z^^M@BtS4Bi>B07l3#grcT2Q7U3OiQCa=tOAAx`Bp6wY%2X2Ux%ld92cO+5bmC(U-u zv}RT@azwo^1ICs7g##1sz=Ql2+%4FE&PBgzdrJXa40%fDw$H$=$9|z~f;zfw<8xy_ zwAtgNoj6T(GB!Ge;zNz8OjdXR4*$}{8#8*a=4AtI$-9Ng^U5&n+Y(e?s!hJ_xrq{M zjliZ{9`5*Fhgy+1oOtpAytm2wGg4=(>w`x7IyUdcv z1w0V$c=rvKotX^+nPhAde?iM`yU-~W_9SY`JmL@OaOgr7eU(^eb=*33a(i5?lZ z(T;b|l;gj_9E?{|XL>6qU{~WPW^AoR-rD!$M@4DpgO}`a_XAaSsbmVe3x9J z+k^jD5Qcu>**jOh;$P`XSbVw|=h)r>E%WcVyR45JV3lyyLk`}3)&k8xhNMW1clm1O z@Vo;vkaN$4`Rx*fyYvqw?#jZvy!D)PcMED-9l#&D$FXxs2P#Y6prpAK&4$ydkM3mr z@B3fj!Cm9Y2#F4SbkmsF_@04Tr;Yh+(PXkIUKGzPErA3(Sq!t&!IT98yc*pCC%-mh zY4;XdFnTW;+HnMB{NrI>_)0dscbahd?uT4JP&alu#8Sl}DXLqhj`3qwVnxG=}zhwUxhQTk}%Bg4r={0!JQk-$*ZFcuqM`&m?y3UI_S#cM=ykpL$A2` zQ@#O}6C**y1?%oKQPmU1M5d>S#=YjqqxU&DN%ab@ziL40b`0RUo0U){JsbV}`22tV zCAz)V7u2$|A!_>zdeZGB&0IQ(gg7}0XN+11t;|knH#me^rw4G>q*cT#>^!cYo{gKM zy@}z=hKhdW#q^y0C&(Rr9_ydq1v8gdeAe&<`neC$gN-i?QJRQD%=Y6Q@Te+yZlstd|2Y=kYfZ^7W6 z7L)RNNWE8%Ay)!*NRIMknqj6yt}P$MrsPJzo;joFw~vKh*o0y$U~1IM@zzT2q9H zqhnx)qc(iJEK4SadD&nRxcIDxhlea7+dYgJZ~TouqKinz z-FsXEpa0C;V8-2QZ$U+7gJ+T^vX?!D!dVF?G0is?{Y_>utwg?)su%@&R83Yq;~%VZoh$FJXPqX0vje@k8 z0)bJdIBUvSO-CLd#Ra9!C;6{OQOvMshlm16o#@Uk)Tyx*=aks*Q@%_@I}yL{nhlf8 z9N2lSP7bFZWgegV!Ew)V2+nMVgO&T?yMeMm2@SBGi@~t3?;#~0fWE(s6LXWWn0I=G zSzMqGzHI{AKOVSv%NN0&{pZnnbS&6vUB>{myD;d)@RizrOv*4723LQ?F*2iQ$z30i zJ@gdBz1}%%&zs8pKcAd$__-k;BTkzn80UN9)3)q zHf}3nAUztx_we_g6>H(4@^`Sm^&cl$$L}VS_JQJ!0f2e~w76N$4f|Dbfx7j$LH{bP z8}`PUe{%T9^Cbqgg|c7oUD=!m?wpCG7TMtS8M4-k;hrS^tmU>I|6II^NokX4dCqva ztosf&b~AhtAcY=hykK^13MY-w z-(%Nl!rJCTpy6l=14~CxaW5ls^ukHvx6p~Oha0%tui|mdzs1bk?mLZN5Q{eF$1=HP zm+@k26Ix8`uJ8$Dkmj+FpC6vVIwuKIdwv~8I(&nnIgja@b>oR8W?;;>4pifrVwtak zVEtYfxIbqjvEHuBB)5B!$eRmDZFaigJZ#19Czp|*t`U5O_ZSR|J;d)94xr-8W}%yL z90Zt*JT5O80E$_|6E6&Ani>Wg$9t zG=aied7|@WB75Cl&53(uq4DkkR4ZN#6=O2ty>&8ZHb}EZ8x!_Wq8r8$BeYVC5ym+U zP>pK}%x0_~wv~M6u-6~m)qUC1=1|%*?+E_ncRj_6s$s?%Wg)RO$Oe z3KcTqu{Ys7MAyk;_lYxP%iY$BIff$Gw{DhiJVdQXxx<`MXpWFL|qpJ2v4Yhe*Gof%5$UH*5f0|gICLeQ%ZyH%!w(k_Ih_oy~jhLVp-N za^IFS=2?HAWq)udYdS&U>1BxA5{lH~fbiauTyUOv3{2|ZK#o1netf?ZAL}VF&x0j+ zTJRh%@ZEggILCLcGGNd<0)69Oz`pyu$7bm${4G@s67MFFzoYqYqx}f7|APgtemD)i z{X>zhdq6k3O~9TNZ-k%wEZB2JIrjFi1d7G%WZLeIOy+DcS{j&xO6fgJT^j(ut2OBD zC_a<6WixiTu3+zvjDrYZU5*9Fx_ zq&OvCoE;x?4$o{01%vb~9D8>=bqtU}HDNDcjUvpwnuWO|OK81v6zs;Z{^K z9$2`54X@J|TAdq*^);)g|IlNc^r9b>%SU3%m*2uS{On+A`X!Fc-#~84%j50K$6(K@ zamuf?npM;=d)_ zoYqR=qV=DJ(}tx=dnCHa%E6L(<3N0$4*KP%f%9r>P}=Iu zjyzK(J>y3ciPvwr?WwKMSIoOHOB8W?L22O@Wj%epnh2uafu@COUo9Bg?)p{Lj}AK(VlI)*n$dAZgROTW66&_ z`uxtU0i7MTvDzoALA)=J{mW^fRxeeF;))|UYFHn*Ig4SV8^2D*6``zVFITr!VXzGW6ZF5QYdjt67 zl?KfPz&y0N;nuh%Tt$aCR``e0H$S(MfT#o!?9x2Mw3klM~k?uq8&4`>9-u4kxE`uYZ=(XQ>7-Gv*PDG)#sq z4^7DDC3&EmAH}?OI%7}KaWGnQ51tL2Ll0jal34wSYwmdmryFO|f40X#^6*q@6EYb- zgigSuR54aO*^;e_*hy30OMuNYedZ-Lj+BZj!XM(s?yi(%haSj~?|W5PzQrG|*J>0K zEBy_3?|MV6-*IS?t%92GSHWGZ0GCyZvKud~h*Ifwp+L4tX!S}$AUVaAWo%Jr7iIWt z?7s7~ad{QzJ}nPyi)P|P$*1V!umJ{}blL7%1zcjKEKBW^Brl}3iQZ@{T;OKG?|nxw z`PkRc{xKXTxV^(^!*>MB=ZuG2n!Zd?OOr(;GzduS6}s_@G^t+OgnP7XXvjM$tmZq0 zcl|WT!mw44zEmH?P0g@i$tdu%yo!SpXOnK_zesi^poH&hZou0aMlRVbxaSrN;VsK> zN8@UU(Aq;}ruGSP_T>w5kKTn>^HjOTe3qoj`3PrlxB$YrEPOmU8|L|LM5}8~M0Q{o z@l1>-<_#gV{N+c`KDUh>OPWaTinx=U&a1*>Lj`#A5%A9L&uH%2Os#xYu%-6r@p760 zv)TWbKK!K2p7HFl7W@kHn>WF*ouiZ2hju=j%I72aGvm8DMdIMC93imep@c{+7gob7lsXZ5YeOmqwuJ=jkM{_&y$bHh>|E3wh_qVH)QjgBsVba3f;f z;PId1aJ)BD4IV+r_7;OWZQ=tH@GJa19UguVJO z9n{V_VMVzb7kD67cun^VYWtPK-_5Hr##Eh)(1?VPik0VeXJAQ(HZ1iT$88D*VsU2(Ok3~c9D{TaoL&J{ zb-Tb``Vx8n>@acfN`W(CM=^48EOl1-08`dk(j7eHa`@r{dY$aytlp|Ku>t{fPxFE5 zJ$GTui)%P({~f$CAk8-LIb6?>OWf)Q*Qr|SRfziVmK$O4gZpmzlKxn+njDrsO5J;O z*^^4X8dp z#vPWs1(uuIQNE%a6!N#jVdd|1?Y2^sa&?DI=N{k|9b2$%6(xJz3Hxq!A57PWW4!tk zr$k4@-={~i(|00Sk4qHizT2Ga+fzr|CXGT#Ygs1ls=$7|YXc3dREQAy2TH_`Js;hN z({IQ?ubdA0fQjLnQr!d&UeM5|&prhmLd4URqq z*@z6-yJ;dknQRW-<=;W$buQ+doyNBP`U{E^{(@}(cAO*^$~;GGB^!=t;E}14Oyx%v z^zU&a2U|xnllpQ9OWMjMaT#3lycmr8WK2h1ZRFOj--)Ta^;k?sGVU^!WuX zpxaLdwsp9ozjzTS{c|S?_L`*Sn>W_^9zlGnfZoYh=#{y7+yZe$B2~B#`j>fveX%V| zsn!M8-{zFqf2PxIp5gGTt%CMuzGwK61LrrBur8m^(Q2g$Uj0gf6M@q}^g=EC>itB$ zP0X28;3Md$4W<6G4&hR(WY}k^361w|Vo|<1(ei0PYI21O3JB-M4t1gE(KhgF8$tA) zk2!xA@J_4Lv8aC}ks0~L;|&iDDnE47DdK<_X6f!=Zw}36!zz+Y@~Au$i`FCImv3N} z(=B|g>CeBTWZ3tJrPz7oJ^$@*f}^un(ES-eJ_K8G6eH=@CnsSn&sY!IG?QB#ejP?O zhTzpu2h`hm0%vUqV|r~TA)Dusme-4uJ$oL(v_=6j=ukr|nG%%#-iOKa-O*!B0@Z)F zoz1TA;6~6q95~#HE{cblw2Cok3R0ozavtoNw1)Nxy=n8UKX7-~XU^9{z?|$_kTrY3 zVUq~RuzluKZv6mj=W8&Z2q9M&Rz_FXW}35F!zdCu>f9 z&+YHixf}0tZ7W8@dq)>&j?aRZ?$_`K?~&2J^b_J@voZX-6-j?K1@|uWfrX`eFzEe0 zwB4rw11bKrm&s6nr-R&X83jl-D8!i#@31kbkc)M{4E43rEPh-qC+%wmZ6nU(Jf#fO zvEln`V@z4lh&uZGV}`KLYLIjJdm5HVRDcHiF4%|C?C`kL(5+|5*zOy2%=@t{=kQgk zJX0Na@UF;tKTUCKyAKoI%L9qFweUtk4Gx)%WO}MK;Nhjq?5{m>o||wMo@kuL2f5QY zfs6@`y8jE_?c0mZkHdv0ZoJ1?EhZ53_bZL?K#a7#!tc_jqn;z5vD&1CdHfC_G|d8c z4X+mVth@q~4D8S&ZV04HWk~osNA~*eW!UXqg8VWNH54>S#+XLllk|;y`TYm#&%Q3a zTylep;(Je~i&v6WD!_J*slm}LyVzgLK1|5vpNCRkb|Zco*-Ni-?^jJ^6E%+rMP{xL zN_U+^*S|XK;J0;H^Yx0;^cJL%UUJMMI~+rn&m=i|l3+xO;JaTgj&NQJiFfvZi`+!~ z{I3GDs>R5(Y1RUh2rmrbvl<1f*PxmIJ#JuSS`(5rOE|k+?mj6Fg5x)7dvez^7t5-2b^5lpgUr-^^7oIiU`@b@|Y* zpusJxhzaOe2&W$??=O#e9zQNjcj;7m95`kNDL*^L0sn|DEMxqW&?*oH2oAU ze^rDn8XcVcImX2YZi0XPN_e9p3#U1B;w%+Q{IlQ|2m@Zj-sCx~!JhYkd>f15j{{+m zNilpmc%RdfeheGVAH(%=w{a@(sw|uf&*y6Qmiz~| z|D|vf3a-MzdqbGk8IK;ggKJK-s^~wN1E#iGaH%p0i=-}L_GTY4YUgk4nj^~{ovTMi zh)fea)7}Rbp7tzzoe0c|Q(*6lB-zueTiI{xmlz^<0g5N=CP!=I_U=*<{ow7l&H)y;7*yl@h9WnTNZc6~V*c04Dy1?`Li1`<;9CV2HLji)oo8SasV% zkQdbl?N8*{_DP$dA}9%)LRR5*`(%zA@f<6%ui|5pic2cqAk_V%{h|}-^fgY{Vs%Pj zlCYF)IP;J{L!X0^W4t4vD2J-f?SeG@3YZ-~p8eir!}jOd;inPXAZOTvpZ!gO%SSJw zQh_Vp_4OtqSENxP-U^NwHRHWm%Ft+^4=>K#hV?hp*{TVvS=w7m(%-xef3EvW@A@H% zFZEy@+L!63)?D1ca~0LXuHm>f=XgiWUUImymcB7H$7Sc^=$7nn^l4@-h)Se0r`}KK z!483}st**jU4yajJD^8?8tMp-p?-CI#m`7vK68=_U1`&ydN@pYztkM_=YOTIMn-|{ zx@drr0wTIDiW?W81+R-IGjhlc&UIblig|VkjWq?GXVZx7#{|guZv%PeXMjHg2kB~` zZCE0*9Tr+%g03ES%ng)eyKSQYQeM#kzgXHnekHpgCB{-hlPc_N8=-|~uKcP_5%g=F z!IJJ*pgqe07H;)q+`)TbmLWlW)W$LunUSo;Xf`#Twg$(y&Y%hozPv-A1K!pMm{jNr zFp5c}%4LZ#wICaRshg0Q_co)UwLdv=@;I0J*9X`2OECpu0p#4420zs%=-HUTNh~(z z&nk!5!7X{!9=W`rBz%$hM@?pE39>B$KO|aQl0iVe2AURB)L^aGO zeR~w)+fEhSmr_pm@Gi>I>^KNqZo;NFFM^%R#K9pirC&bXLvQw~X+!GkDuZ*Lm4$-o?F<8@L!1E02fYfWydoNex zhbNsCzAXnJvep4QWfE}FMqjLT*@y8@V)4|~@o+|AFNCT{ReTgPBDY@JvfrOyQ?;+& zZ0-bUSVn{Cv1n6Bn{f+EaTH689Z7c9HweNVhw;dH-ZwTpff$c{h`0A?kVA8)!6cu} z+%e;W_=DwgcefozHX)XC_}z#qA1&D6M;#)U{)DEE)4*6ag2D4Y<5$rK+#0n2;%lZr zR;we|`RWv^yi{VI9};2N?=fT^?W4-CHF3<>0B-o(Y_hQaCaf)q;QX%}vW+i#;OJ6S zf#fM`Fnx0zj^z@jmz~EQ{PCG9;d?4yzdFEMLb`A4A4*O z`91Pup%4E)>`=<8Fb>tg@w>*6AGOP&s4fTsHs^92 zg`hN*5zW(&#k8dzIM+UdW}H-Gf>-;;Mp?wVw z$&Er&WJ2+?cW}X}b&UQT0ZVSB!^f$;Tx9w&$hJ}?okvb!`U7{eg%jfAJ)6O`ET0n& zIJ5FvUGk;DABWZsg1_}8LG+HdkX%uUga7%!AkUhd-L%v>taT|HlAer{C)?rV=l_JK z!pvcScP%|F*2ZH>Cd_0~Eij*TEPb;TKJoa$?bRGh&WmrNHnWp3(@cxSa08r4K@rTE zO>wuyJ9Lecf&7^s%+h;0`@UqJK)=cre+oBKk?k@>JJXWrdrU^QkFYn#96+sJf^EJh z!s+f977jUv(?gjB^c2tZp3xADFAN35JAM|(CodK7b$_mStTg`Jwu5dyD$ZuK^q^Ss z56+)=pB@f#VXiwmq5YE=a2w+|hd4VFyQ|A~nW~W$`cCX~fEOp{7eJO|rog7q5BT&Y z@0Sd)XA6{2XRZ-@Di0@N-EMp!!8QPM`_;6tc zwzy4XpRe7+CFxhG$+04+=ikG%-~2ErtrBIaqcA+hf@2r&@NA42*mS`kJx1)rvGpn# zYob6R9>&0MlmM!KZ>0e@yqSOENU%4XPU3cz(9DkuLHVBn`~7DC`t^oUtUU!DHO;{R z{gaS8Nx=HQJftg!gYagL5UXCyBg<#i!-~x_$Og%o@Wnxk92#$piyCvmcbXa*-;;*> zzM3=Lc1!HIE>HBmjjGw~FBx@0Z=S=Y%m z*sjAzYL~EWnJ3-)RDwI~kjs63K9&8)f2VsNuS1*klfw54|G+s3Lr@8`VaJ|2GyUFI z*u`VjVrd6R&5oiUJqK{(>QHXRrXZ?fpNWr0M>)@y52*;0+m10e(qZZSyU@SAMsTL= zv!L+dIrgU+INPlOoWH`gP!=BzZ*wyo{bNG={Y|O zZbZBKc+^=lfX}x%5^v9FmR>dtu3N?sL+LufqUVo6`dut8uvdiK#fHpu!EyS~b`3cy zuS!Ky>%c@d5>uazW>b=)@X^p5h@Y~MrcADaT}zc1p7F z@;=O^UFS~F&2eQ=7t$yAb|;(|jh)HvdfU*vOW|n6c|%F7BD>Rj1=2(hzy_t)c>ho) zNIHxp4|z|tdDRqB6LgG@n*11du8M-puOrCI(YskOaI7d&g#GL+2AQ|(K&dJNzg!$e z`&AjYu4WV)xkijEtec3oLC1)(FbDn{cNs%0b8z*-`ONEW4K|i%^UlbxsA&=p;s?`_ z=&8Zmpf_B>+J9W;>|>Z)_Z1}Wzv3p33*`1aG-Nq7Lm(S2LZVOY;Tc#0oTSC*3)v5_ zY|<>YHAnz?E6tflxjoz3nM7sUli^oT4lXn@q;j)$*o?(vSzwJ1q}xpt#H~FHK86uA z#4?wHLk3=2^A-w)6WF%vR``qWvv{g*C!2Iev&S=Q;iUf&5MOi#op;`bF`J6GEi>!z z^OwgEaLtVjyR8u34$*;rpCtSdJDoKdNU%Zu5Gpy3cN&V1WD}GU!HH+T8?T?t7U+*8 zt}VCdyyK>{&F2&N;|!J#K>o%#t$WmYf+m^uC;VtBg8Q zgLroL9Vq*-6L-j26TQ0Q)F7YF-4}0Sy))$LL`d`ABIPL$2TIBXgIm_(w?F%w%jTcP)SHuu_?4sJ z7^p;z<3m~3g;qQ+!e{BGTd{kV-jrQAga*N{1$8I7;hJnR_6N4%-Zf={0?ThWSYcG~BVkD|KS%lAj+bZf9HRmLze)e&ytm4bACZe# z>)cpwgQP5^#hb9S(kIZ{Ab~SRd+S0ORAE^^L5F=7$-b>qYS%L)3H@3PvBxW94-_iZSzNv z&N-W4*{2WqZh0RryHJ8}UB)nn`Lg6^;&Gg#5Qg7t6kz(Fb*SeSX&} z?tj(>g*p59``u)AeK-)|aSl2jt-&vF$@%XWd2*Q5K(d@G&KA|gc}*$kUL{Fd+y4mm zUI<5pxhr|E^c-MElVQT;185j_7*pnWvRf!$$?0 zVh+Nnz_r|vV;g=-qEL4002gi|S#xC;D%>r`^yyOt@BVGZ|9Ubx$5jUG zV2wHJyerGjkeNKYDhG|8uLjQ@9`N<)CZ3Nq8Y;qj@bBPlZo^b@a;h|)Tlh@?J{i%% zpU31N*7p$K*)79tkJ04kjD2u;-5>nET?!ly#0$13IFsdnW^s9=iumq=6!ZR<4P$cE z@k5W0RyEw>cWs93_XZ)p_B#Npzjb1slnA|7;Z6+PU(oQiC18?R%Jbf2iILKJu8i** zes?*Ie>8?+?MqDzogKqW%sR1qbBW;9^AB`~l#Wo9-(y8Bih+tRBRJbmKX$ZY6h3+< z1o6a!{P*30+x=kx$4hBoc%m!&mn%tfB+bbb{dD{hJ(Y~{UjwZpt7yY~YZ5Ui#+K;3 z1g=MkjUIY0T=iUsg-xo!lr9%&JFUuu@2t>!c|N}HYjS!ZCrk7*G+FO&U#zN#LYt~w zsQquFuvGaZtV$^7bjtd1ICL4rm|sB4BcG|CZ#f2VZJg_>czm?flKxqIL&E_d94L33TexLAduh%0$l_Xr}J z&B=`K7R>W&EmZ!Kp;wJxbG664VOqlslEC-OQwMfn>+^%;naUm*Ti*c*V^i_%m>=+D z>17x%Ey_CMbTKwsj6R#D#-?Z{f-lee$ew-)4Sv0YBl~J;)-E$vzqE>8-(Zx}Du3sF9HQPlQ2sL>Q(@NrylOl)=)+fqk zJfCUtIHv7?4tjrVLh%nVnDm?XAC=_eYY|WQ;ulOO?^6Nq;K%SLgr(Ro3Ibd~TgXzz@I z$=AYAGO7_pI;T;$%x}0@Tbjv)>eBW167k>^d-T50g!d!l*}riDc(Dy&bz?havE#9P zuQeOzszaJ|Ns-gR@ANKZm@{BogCXB7b{cV%+_pVXIYXP5a7~{tGP~6Fa-gB_^ zk_^)x@e}oidm%Za5HGewL&UN1Ol^H1%;lD2g3~sP@gBwUR6?9vo&E^YEB!FB$DWDo zXyITCpTTIlhet97;9>GX-2SGyVq%{Px4XHV`z-iCFFsxie|ET`i$@I_sp}BoAsG^S zZ97PR;2Aj6=g}u4&tp)cC6=}E_n%l1R-`?HDO{U@!7GBHGhmz`?vf;Fbj`)&gXbXc zsW?j$e}=X1^SGO*c}|MkU#v)43hN3*xxQ_pT(<5S*y-_rTGn>ps0qig>&ii)*XZfw zx2-f2TQAR={pu@@M65s~H6=K6<|=xLf5pzx33!m7x7Cz{;dR}!C||9{j;CzF<-44) z)s5$MXHTYi(I+6fJs2AedeG&>4NN$ZiLwz(LF11nPG7c^=ZHOmkYlmbd&(pdGrb=> zine3sBSVrXxB$(o)j)^OW@xrW(!s91VAi3`W>xq*OQ#*>a{BgRf|d^3@?1!(aXc}J zn2+1^JuvMoNcNYPqg2C8c3a(x zmPrV3oA@MBNs=nG*2%MX`SsYoL<5rD1GuuG&*0K~kxo!q4J|c7jB`g^CK&)DqD<(Z z>~uCbMVBnvr3ITCZ9r0&_wA1ErFRc}!_=uISomr?w{CwV^xye`ZtHBo<%Y;4iN#`skoyU{MW)kfk66AS@9$c8Y5m#Q9!Kn^Hj29}f$jJ)S(#egi4X_r9 z@bCY#1w!<0iQwiRQe+S1azTE=bEKMCpi(r26;&qFgqxylhfX`EmnKO{95vZj<>hif?=Q(>s0&zC!|xkr|TQ&s!NMtIiD}i)T+SDfGpfS zb}WtAvyr_UKc4+N@dg#Qe{!zucr0l8)q%rjjIr_NM0PU4)|RE^Yr3jNmzb z+P=ng(DOOIX_O$pcc(j_ee5Yb+Y|}^4G1_%&jQYxMxdhhO;|Ut3l@$v!lt)nXuQ&x z_k!KQuK4SM@e9tOVTKXP+}Q_sY&5ia$wQ2y6TFTr#0foz`CRTF!QF~ph;NZVvq`JK zyhx5oO?iaT|2%}7^Rn^3zmg>U5AR7(6eV)21_Z{%YGBOw$gY%qqeg-_ykU?lkdpp@ zJymfWAFqItIXTeha)kce{S7vMpGwcIpMe>1_H5_FLcZ@?0Ot#5a|n%7^V8m-=iR0)nx+a>+IOCb;}^xYzFp*ALYI;;yvT$4cv}LCt=NwEUR?@I?j4DjBkO!jWV`VjrisE0z-m%YoAhdln?Q z74OQ7AWuI%0rgqU@Mp3W%sh05N_eNyH|O+NdZ-amsUE|0OeK&=74BNU5ojqwQ0%@q<3{UM=w7 z(E%z_!T9(_A6L<2!HS0-121Vt&&Ai_`eiZpJhTs!Y@2abusRhB8$&Plw&El61eEUP zpTl#375<{CVEWgNn_K#rTXr%W= z92g!P&y*kXEY|LDY-8^1w3rIdZM+4;7SqWFqQ>-h-N#iC{uS>RTch`}K1r?7HB*ng7b&6!{PVy6-(rkah=g(1d3HhKUhbcM41OK48I<*^@N32v zm|8MlV7^9{JJV>5{a#rxooX=k&5gGdy)~E`BSUgm?ORkEeG9-rH0o=-mGZn$64LS?(*8 zu%3fkR=vQGBa%$+xGAgTckjP!q*%`w8|Y2+fboeUWPjpOY`!2WsLATaB7SDyIUpeG zj2}R&^;ulM@D`42HQ~GRicGmug}Xc42nm`!AUn1j7kS;nb;qJ;oL~VCp9qHo`&C&} zk|Gy#cqG2uUkdI!LQw0H99zvZ2tvtdlJM^^{Pz7NJa1@#ody#~52)jkC;w=9%^6(( zHUd)fYv4iMZ)&%G6dbqE#VgBs=kDx3bhgk6p0rxBO)GVT-&dW*9f4M)^~_j&zl-mo z1`N`+u8A1h5(cVAs_}n{&O4l|_l@I5D6@>LkeL~!fzP=gB~i*K6(!$>hEhtUO-4wC zl8^?42FXr*p8F9c?Ijsap-81-t2SRs#g=JM==j|!>L_C_UxM(&8T90shf#2G6Zgl{gj;I&8Df`I?{44Ksc zrr5pa^rv3rRHyMyIeTgLwr@7rjQ)d9x`R0V^d+!EG=gV8?T425NNO*liU9^8SXEs` zx9*t28Vb@-V#YUA%87%iwxRBnCuaU3BU1y8zkSwS72 zb?0j+mWtwR3(tg#@ctr*jT3o=+sq0bx|d#_T+O4+vb4JgHqvvjY}Y?NSB=wh;pOjCc%N425|0{WsM?_ zz}YGmJVJSo-A?|Ule!uH_zr_YQVn`p@q1_4TQGagF`9c-liImhkkLzdN9Ek@Tu`PH zQ{+3+Lsu{1g;CC^<1Ef3^Hca}_+~+Bw>zwOzW}e^7(w4<^;et_bs#s6KjX|ATVV9n zR$<5dE@Ap&0ZF4H`8(Z8Zk!3n-i)ZCAJScjYPJm7>f{IE!c!PB!GhI(bfEq767XrB zmtgR09yAyyVN0hrgjvPGBvE~K1B}SECFihm_7D2xVg}a#2*mUg_c+%x^5i3p;9QFv z1*<|+;rJ<0lnFbH=k5r(gz`%GAo#_-u}J}AX*D<{gQF7zR270M{ z7T#KAOGNrl!xkeGnEN!5d*G9Y54!pO?8g+;5c>!X&L#M>iSId`)ugjF?uADXR)nAWTR|r7GIiJ_fm`BL zh>Wd0S}ar(?z=2Q!rVJh_eK~sdwLg~rw^gUs!&X}h=BDiCqO#hoGf;}fSyKUV8M|b zTbJL~+_J1v*rHFM;4UAi{+tBQ6+3VYe{P%i>;bq2;UOVi7Derl#rXN5OZx}l zJ&o@})IYU5v`QINs?>;mYBk)AbOGfx%kj&>!`!Ez{A_Y~3@m=IvBJ~;7VO*1^F8i- z!)aQt@oEk4HaILp=v70qs;81}cTK|8j(bSf7b!CNkPIo!l!DoQ-SmK90FR_D0@eN3 zd7eoEC~vgGlMd3DmZi&cnYPl!vZI)r@G57iISE8um8J)uS&XBI9s9B2IgT|mXMz56 zxnzaiV7)gLZ@9Q}>msMY1o?Dac|IJBJ5cQIEl(>>+ZJ|(l5n7y#gU%pLk|Fkq zhE#RHH@5-|nc^c@p!5cp%;q_}hxiP_G&hXdd7Kso(Gl=uHn&@lfQI$GSMD>eNfV|fD_anGP> z%~7HDB1Yjm*vc@1wFb2E@*y2rG}gMeRDERKF@KPDf=o$_y=$y zjVZX~UpmBv&O)&}GimKBDKy+60}EwTh;n`+*1i}aoV=|M6n$!nQGcd_%eD!ql29S^-KohMU)&JBZTd-pu5uDuj<9I%x0v!Br!_fCf_;x$HqN z9kzorH$A`EjhH&0MpkRE(_`J(KKVw7)Bb=DC)FUoTql)B9%1hx3#z`$ z2{YZl;kboG+!h-fGOkULtV}!vQ>SLb=F(|IC8`l;eviaGMi1%KyT*{S$(Qvk;Mv@! zn*6;!n>IX}z>M!{uo*YnPOEi1H~L%wUh@wFkGT?%GtQi@4qwIQ2baQ|LwC4b zJ$WV?Ar3+1byz6Fb4l+Vf#Yw3N%NA)r0<40`i4(o>6f)(heieLc{ha~;(La7ABPIw zTR(^+A&PrkrQ4Wrqqa{}@VcwW}~RMO?+u^Feq*^ds49E_jXj^*|`pb1GMtE1-*4@Jl*h^hi#%NINa4?TQYy*@7y?=x4Hx- zH$8=giAv;eL_2-je-4A5Z{gbK7IKp$=X3iv+v7yDB)ZY00-s#o1qxx?V0ZFGw2IP$ z>vE>>G1GyapH+<)E5c|LHxYD>x!axjIs+XIGN4=O8y6J+0M^IavF@-)y6zmG?dkn# z*EeYrwn#mtrwi4{1uBpJufoy0U>Xy|fV8 z(r4Gwr^e6d*9mrP9PeBe+p5XV_c@WFlb^X!j=c9RsSc&?i;_#PUC7~VUus$r#5hA2 zrrA1#f~I#U)|ZQSWxmlP4-#`4Cw0yPvt;8brx+6?%$_uqhMH3U&%C$nyH-pfQ%P6OBKh$aFh)$5^sm zlX*rKcL$WeAH?VD7LYafL#S-ZRBHL)EVoqR7`Rycz*Ci9c#gRq_o=xY#*X71Zxi{s zoWmu!S9TmF=}Xw8u!oL(Do+06GX+7B_YqR(vcE>zkau5|W@n(hNEcM(BC#YeAA6h_dWPx3IwsBJ#;zk)K1-P@pT{mNO(jP5chMFb@UQVl zRMCtOruVl9hurw@({oeaXa5#ADl0-%LOl*&HR87V9D@Gn^Jt?!f%K1jIC*zZK3-MCv zd`ua`vsr&;<8I+UZsgHx!j}H+e6Hv^CmmD@ua}nN`9SZAi%(T)QK$+zP?e3}4aM!+ z7Q3T}XFt}h&c%UM7R>*Y0KfFAu=!<1jJ>>wD}Ih)+jEP!S9fPZq=6Q>cj^~hpDW5n zM^B>D_TIs+B|CAekqpl+?ZFqX?!)DKw**)AsoUkh3TD~!dxbSswOn4(d0fzy50Uxy z#N8x{d95`NKKhf-XAet3ep3Xr@8$dK@j19TO^#dc@)DXF-N}^ipE=d(8u0pq7(1G? z1N=9vL&YO|I6M7b$mSh?ufOwLqE|z7)j4&}wp0%)_x{5#XDwOrqLHNK)^l9k*~z^a zKZ9vYDUCpce;RNmI{<8IdU3zDo`rKn5B1z z5L`KkuZ{DucuyMVFB{L@Ta-utDNZF(Yt`}SQNpwn=Ha7hXK;)BWLB_Ci|twY4nsFN z!^nj_R3$2y{0WXC;#P7by0#zuSGdu`_hz%_*T#@{CO*u>gm*azhj3`(2R!NOi%w#4 zczxqfocZ50nrCqhF+PO-omUTW(T428H$!5uRUI-uyyL9qwPD~1SI~G;MH@$6Mq^)H z;_*5Md%14z(RQ8}D6dEAu4HlH@-aj^^Z@uzv?8`C+AMzDFYZ%R7>F9Y;#_W9lh281 z5L6Jue(ITG(yK|#w9XMbmy0tde*_*6g>bVP&6)Io7n?se5MR910{c@t@XwDA&@{=5 z40zPS0zXqWStAo>eN|$r8^VPl`m(sj`wV`4t3pf?QbAmLHD@sF!@9n>b4`;O7pgLv zwdZ=F(_jQyGibo-uO7$J@g{Km%QDu*`ysRp9f;A)8oa3FMMOW|1&LMbiNiw%Ql3|E z?!YTy@~1vf-|>igR?Q=eAIv8*?>yPzOE=NAkwEzQSgzAP2kf`pMFmj>mOfa=aizvA z@#ao&*w_z6v(^xhQDt^=#r!=ipB`|k!iSAI>}h`so^R!6>Cv`i{VPkRHme_Rx1^)o zKm-rSkR(pe=CP|{li0=IIrvTgCG;$@LY)UY2{(L!4mB-+2hr7N@uixp>D*5xbd1

    cp|GHTOZx`~eMg%mJmq$1qhzgb6SA@H2Hu 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%0Aiy46qd!RLRh#ld$7%fx5_3AUb~+Ic6$v| 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 0: nonoverlap_map[out_tensor].add(known_tensor) - visited_tensors.update(op_info.output_tensors) + tensors_to_schedule.update(op_info.output_tensors) for in_tensor in op_info.input_tensors: ref_cnts[in_tensor.name] -= 1 for out_tensor1, out_tensor2 in combinations(ugraph.output_tensors, 2): nonoverlap_map[out_tensor1].add(out_tensor2) - visited_tensors.update(ugraph.output_tensors) - alloc_plan = self._solve_opt_plan(visited_tensors, nonoverlap_map) + tensors_to_schedule.update(ugraph.output_tensors) + alloc_plan = self._solve_opt_plan(tensors_to_schedule, nonoverlap_map) if alloc_plan is not None: ugraph.attributes[self.KWARGS_NAMESCOPE] = alloc_plan + if self.vizualize_fname: + viz_memalloc(ugraph=ugraph, out_fname=self.vizualize_fname, **self.vizualize_kwargs) return ugraph - def _solve_opt_plan(self, visited_tensors, nonoverlap_map): + @timed + def _solve_opt_plan(self, tensors_to_schedule, nonoverlap_map): model = cp_model.CpModel() inter_vars = {} tensor_allocs = {} - for tensor in visited_tensors: + for tensor in tensors_to_schedule: var_start = model.NewIntVar(0, self.max_pool_size, '{}_start'.format(tensor.name)) var_end = model.NewIntVar(0, self.max_pool_size, '{}_end'.format(tensor.name)) size = tensor.size * tensor.dtype.itemsize intv_var = model.NewIntervalVar(var_start, size, var_end, '{}_alloc'.format(tensor.name)) inter_vars[tensor.name] = intv_var - tensor_allocs[tensor.name] = Allocation(var_start, var_end, size) - for tensor in visited_tensors: + tensor_allocs[tensor.name] = MemorySpan(var_start, var_end, size) + for tensor in tensors_to_schedule: inter_var = inter_vars[tensor.name] nonoverlap_vars = [inter_vars[t.name] for t in nonoverlap_map[tensor]] for other in nonoverlap_vars: model.AddNoOverlap([inter_var, other]) - var_mem_span = model.NewIntVar(0, self.max_pool_size, 'mem_span') - model.AddMaxEquality(var_mem_span, [alloc.end for alloc in tensor_allocs.values()]) - model.Minimize(var_mem_span) + var_mempool_size = model.NewIntVar(0, self.max_pool_size, 'mempool_size') + model.AddMaxEquality(var_mempool_size, [alloc.end for alloc in tensor_allocs.values()]) + model.Minimize(var_mempool_size) solver = cp_model.CpSolver() status = solver.Solve(model) alloc_plan = None if solver.StatusName(status) == 'OPTIMAL': - opt_mem_span = solver.Value(var_mem_span) - alloc_plan = {} + opt_mempool_size = solver.Value(var_mempool_size) + plan = {} for name, alloc in tensor_allocs.items(): - alloc_plan[name] = Allocation( + plan[name] = MemorySpan( start=solver.Value(alloc.start), end=solver.Value(alloc.end), size=alloc.size ) - logger.info('optimal tensor allocation plan solved, memory span: %i bytes', opt_mem_span) + logger.info('optimal tensor allocation plan solved, memory span: %i bytes', opt_mempool_size) alloc_plan = AllocationPlan( - plan=alloc_plan, - total_size=opt_mem_span + plan=plan, + total_size=opt_mempool_size ) else: logger.info('tensor allocation plan not found, status: %s', solver.StatusName(status)) return alloc_plan + +from utensor_cgen.ir.misc.graph_viz import viz_memalloc # isort:skip diff --git a/utensor_cgen/transformer/ns_transformer.py b/utensor_cgen/transformer/ns_transformer.py index 2a627b61..ef0acd5e 100644 --- a/utensor_cgen/transformer/ns_transformer.py +++ b/utensor_cgen/transformer/ns_transformer.py @@ -10,7 +10,6 @@ import numpy as np import tensorflow as tf - from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.ir import OperationInfo, uTensorGraph from utensor_cgen.logger import logger @@ -21,13 +20,18 @@ from .base import Transformer from .pipeline import TransformerPipeline -__all__ = ["DropoutTransformer", "BatchNormTransformer", "InlineTransformer", "TensorLifeProbe"] +__all__ = [ + "DropoutTransformer", + "BatchNormTransformer", + "InlineTransformer", + "TensorLifeProbe" +] @TransformerPipeline.register_transformer class TensorLifeProbe(Transformer): METHOD_NAME = 'tensorlife' - KWARGS_NAMESCOPE = '_utensor_utlife' + KWARGS_NAMESCOPE = '_tensorlife' DATA_NAME = 'address' def __init__( @@ -56,6 +60,7 @@ def transform(self, ugraph): for out_o in out_t_infos: if out_o.name in allocate_table: new_ugraph.data_manager.address = (out_o.name, allocate_table[out_o.name]['offsetstart']) + new_ugraph.attributes[self.KWARGS_NAMESCOPE] = allocate_table return new_ugraph return ugraph diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index 70c28657..095c53c0 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -6,15 +6,17 @@ from ast import literal_eval from collections import deque from copy import deepcopy +from functools import wraps from random import choice from string import ascii_letters, digits +from time import time import attr -import numpy as np from click.types import ParamType from toml import loads as _parse import idx2numpy as idx2np +import numpy as np from utensor_cgen.logger import logger __all__ = ["save_idx", "save_consts", "save_graph", "log_graph", @@ -197,7 +199,7 @@ class NamescopedKWArgsParser: TODO: replace it with a better data manager """ - def __init__(self, namespace, kwargs, data_manager=None, op_info=None): + def __init__(self, namespace, kwargs): ns_pattern = re.compile(r'^([^\d\W][\w\d_]*)__([^\d\W][\w\d_]*)') self._namespace = namespace self._private_kwargs = {} @@ -211,17 +213,7 @@ def __init__(self, namespace, kwargs, data_manager=None, op_info=None): self._private_kwargs[argname] = value else: self._shared_kwargs[key] = value - if op_info is not None and data_manager is not None: - outputs = [tensor_info.name for tensor_info in op_info.output_tensors] - for tensor in outputs: - values = data_manager.group(tensor) - for key, value in values.items(): - if key not in self._private_kwargs: - self._private_kwargs[key] = [] - self._private_kwargs[key].append(value) - else: - self._private_kwargs[key].append(value) - + def get(self, argname, default=None): """ Get value of given name in the namespace @@ -539,3 +531,16 @@ def __repr__(self): ' user_config={} \n' ')' ).format(self._defaults, self._user_config) + + +def timed(func): + + @wraps(func) + def wrapped(*args, **kwargs): + start_time = time() + ret = func(*args, **kwargs) + end_time = time() + logger.info('collapsed time of calling %s: %0.4f seconds', func.__name__, end_time - start_time) + return ret + + return wrapped From 5f3f2d2519c8f44966b047db998912e662737495 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Mon, 2 Mar 2020 22:06:53 +0800 Subject: [PATCH 039/117] cleanup DataManager, TensorLifeProbe transformer and update tests --- .../test_tensorallocator/__init__.py | 0 .../test_tensorallocator/conftest.py | 16 -- .../test_allocator_optimizer.py | 141 ------------- utensor_cgen/ir/base.py | 9 - utensor_cgen/ir/instr.py | 59 ------ utensor_cgen/transformer/ns_transformer.py | 192 ------------------ 6 files changed, 417 deletions(-) delete mode 100644 tests/test_transformer/test_tensorallocator/__init__.py delete mode 100644 tests/test_transformer/test_tensorallocator/conftest.py delete mode 100644 tests/test_transformer/test_tensorallocator/test_allocator_optimizer.py delete mode 100644 utensor_cgen/ir/instr.py diff --git a/tests/test_transformer/test_tensorallocator/__init__.py b/tests/test_transformer/test_tensorallocator/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/test_transformer/test_tensorallocator/conftest.py b/tests/test_transformer/test_tensorallocator/conftest.py deleted file mode 100644 index e3a6f948..00000000 --- a/tests/test_transformer/test_tensorallocator/conftest.py +++ /dev/null @@ -1,16 +0,0 @@ -import pytest -import tensorflow as tf - - -@pytest.fixture(scope='session', name='refgraph_tuple') -def refgraph(): - graph = tf.Graph() - with graph.as_default(): - x = tf.constant(1, name='x', dtype=tf.float32) - y = tf.constant(1, name='y', dtype=tf.float32) - z = tf.add(x, y, name='z') - w = tf.add(x, 2.0, name='w') - k = tf.add(z, w, name='k') - - - return graph.as_graph_def(), [k.op.name] \ No newline at end of file diff --git a/tests/test_transformer/test_tensorallocator/test_allocator_optimizer.py b/tests/test_transformer/test_tensorallocator/test_allocator_optimizer.py deleted file mode 100644 index 83f9090b..00000000 --- a/tests/test_transformer/test_tensorallocator/test_allocator_optimizer.py +++ /dev/null @@ -1,141 +0,0 @@ -from utensor_cgen.frontend.tensorflow import GraphDefParser -from utensor_cgen.transformer import TensorLifeProbe - - -def test_create_resource_table(refgraph_tuple): - (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) - transformer = TensorLifeProbe() - table = transformer._create_resource_table(ugraph) - resource_ans = { - 'x:0' : [0, 4], - 'y:0' : [1, 2], - 'z:0' : [2, 5], - 'w/y:0': [3, 4], - 'w:0' : [4, 5], - 'k:0' : [5, 5] - } - for t in table: - assert table[t]['start'] == resource_ans[t][0] - assert table[t]['end'] == resource_ans[t][1] - -def test_create_allocate_table(refgraph_tuple): - (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) - transformer = TensorLifeProbe() - table = transformer._create_resource_table(ugraph) - allocate_table = dict() - l = ugraph.topo_order[3] - g = ugraph.ops_info[l] - x = g.output_tensors[0] - result = transformer._update_allocation_table(allocate_table, table, x, 0, 5) - assert result['w/y:0']['offsetstart'] == 0 - assert result['w/y:0']['offsetend'] == 5 - - - -def test_query_offset_address(refgraph_tuple): - (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) - transformer = TensorLifeProbe() - table = transformer._create_resource_table(ugraph) - allocate_table = dict() - l = ugraph.topo_order[3] - g = ugraph.ops_info[l] - x = g.output_tensors[0] - result = transformer._update_allocation_table(allocate_table, table, x, 0, 5) - start, end = transformer._query_offset_fromallocate_table(allocate_table, 1, 5) - assert start == 0 - assert end == 5 - -def test_query_timeline(refgraph_tuple): - (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) - transformer = TensorLifeProbe() - table = transformer._create_resource_table(ugraph) - allocate_table = dict() - l = ugraph.topo_order[3] - g = ugraph.ops_info[l] - x = g.output_tensors[0] - result = transformer._update_allocation_table(allocate_table, table, x, 0, 5) - start, end = transformer._query_time_fromallocate_table(allocate_table, 1, 5) - assert start == 1 - assert end == 5 - -def test_query_result(refgraph_tuple): - (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) - transformer = TensorLifeProbe() - table = transformer._create_resource_table(ugraph) - allocate_table = dict() - l = ugraph.topo_order[0] - g = ugraph.ops_info[l] - x = g.output_tensors[0] - result = transformer._update_allocation_table(allocate_table, table, x, 5, 10) - l = ugraph.topo_order[1] - g = ugraph.ops_info[l] - y = g.output_tensors[0] - #address and time overlap - s = transformer._query_result(allocate_table, 3, 6, 1, 2) - assert s - s = transformer._query_result(allocate_table, 6, 8, 1, 2) - assert s - s = transformer._query_result(allocate_table, 9, 11, 1, 2) - assert s - #address overlap, but time doesn't - s = transformer._query_result(allocate_table, 3, 6, 5, 6) - assert not s - #time overlap, but address doesn't - s = transformer._query_result(allocate_table, 3, 4, 1, 2) - assert s - -def test_allocate_tensor(refgraph_tuple): - (graph_def, output_nodes) = refgraph_tuple - ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) - transformer = TensorLifeProbe() - tensors = [] - table = transformer._create_resource_table(ugraph) - allocate_table = dict() - l = ugraph.topo_order[3] - g = ugraph.ops_info[l] - x = g.output_tensors[0] - tensors.append(x) - unit_size = 4 - buffer_size = 30000 #1k bytes - result = transformer.allocate_tensor(tensors, 0, allocate_table, table, buffer_size, unit_size) - - assert result == True - -def test_allocate_graph(refgraph_tuple): - (graph_def, output_nodes) = refgraph_tuple - ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) - transformer = TensorLifeProbe() - use_def_table = transformer._create_resource_table(ugraph) - unit_size = 4 - buffer_size = 3000 #1k bytes - allocate_table = dict() - result = transformer.allocate_graph(ugraph, allocate_table, use_def_table, buffer_size, unit_size) - assert result == True - - -def test_query_check(refgraph_tuple): - (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) - transformer = TensorLifeProbe() - table = transformer._create_resource_table(ugraph) - allocate_table = dict() - l = ugraph.topo_order[3] - g = ugraph.ops_info[l] - x = g.output_tensors[0] - result = transformer._update_allocation_table(allocate_table, table, x, 0, 5) - l = ugraph.topo_order[1] - g = ugraph.ops_info[l] - y = g.output_tensors[0] - valid = transformer._check(result, table, y, 4, 10) - assert valid == False - -def test_memory_allocation(refgraph_tuple): - (graph_def, output_nodes)= refgraph_tuple - ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) - transformer = TensorLifeProbe() - ugraph = transformer.transform(ugraph) diff --git a/utensor_cgen/ir/base.py b/utensor_cgen/ir/base.py index 3ba8acf0..1c674de0 100644 --- a/utensor_cgen/ir/base.py +++ b/utensor_cgen/ir/base.py @@ -16,7 +16,6 @@ from tensorflow.core.framework.tensor_shape_pb2 import \ TensorShapeProto as _TensorShapeProto from tensorflow.core.framework.types_pb2 import DataType as _DataType -from utensor_cgen.ir.instr import DataManager from utensor_cgen.logger import logger from utensor_cgen.utils import random_str, topologic_order_graph @@ -469,7 +468,6 @@ class uTensorGraph(IRBase, _NoShallowCopyMixin, uTensorGraphBuilderMixin): ops_info = attr.ib(factory=dict) # non-init topo_order = attr.ib(factory=list, init=False) - data_manager = attr.ib(default=None, init=False) _type_to_op_map = attr.ib(factory=dict, init=False, repr=False) attributes = attr.ib(factory=dict, init=False, repr=False) @@ -617,10 +615,6 @@ def ops(self): if not self.topo_order: topologic_order_graph(self) return [self.ops_info[name] for name in self.topo_order] - - def setup_data_manager(self, datas): - manager = DataManager(datas) - self.data_manager = manager def unsafe_merge_into(self, other_ugraph): """ @@ -675,9 +669,6 @@ def __deepcopy__(self, memo): k: deepcopy(v, memo) for k, v in self.ops_info.items() } - if self.data_manager: - new_graph.data_manager = DataManager({}) - new_graph.data_manager.StorageCenter = deepcopy(self.data_manager.StorageCenter) new_graph._lib_name = self._lib_name new_graph.attributes = deepcopy(self.attributes) topologic_order_graph(new_graph) diff --git a/utensor_cgen/ir/instr.py b/utensor_cgen/ir/instr.py deleted file mode 100644 index b452cd4c..00000000 --- a/utensor_cgen/ir/instr.py +++ /dev/null @@ -1,59 +0,0 @@ -class MemoryAllocation(object): - _store_name = "address" - - def __init__(self): - self._address_map = {} - - def __setattr__(self, attr, value): - if attr == '_address_map': - return super(MemoryAllocation, self).__setattr__(attr, value) - self._address_map[attr] = value - - def __getattr__(self, att): - return self._address_map[att] - - def __deepcopy__(self, memo): - new_obj = MemoryAllocation() - new_obj._address_map = {k: v for k, v in self._address_map.items()} - return new_obj - -class DataManager(object): - - InfoCenterMap = { - MemoryAllocation._store_name: MemoryAllocation - } - - def __init__(self, datas): - self.StorageCenter = {} - for data_name in datas: - data_cls = self.InfoCenterMap.get(data_name, None) - if data_cls is None: - raise ValueError("Unknown transformation method: {}".format(data_name)) - datastorage = data_cls() - self.StorageCenter.update({data_name: datastorage}) - - @classmethod - def register_datamap(cls, data_cls, overwrite=False): - cls.InfoCenterMap[data_cls.name] = data_cls - - def __getattr__(self, attr): - if attr == 'StorageCenter': - raise AttributeError('StorageCenter') - elif attr.startswith('__'): - return super(DataManager, self).__getattr__(attr) - cls_instance = self.StorageCenter[attr] - return cls_instance - - def __setattr__(self, attr, value): - if attr == 'StorageCenter': - return super(DataManager, self).__setattr__(attr, value) - cls_instance = self.StorageCenter[attr] - k, v = value - cls_instance.__setattr__(k, v) - - def group(self, tensor): - ret = {} - for cls_object in self.StorageCenter.values(): - ans = cls_object.__getattr__(tensor) - ret.update({cls_object._store_name: ans}) - return ret diff --git a/utensor_cgen/transformer/ns_transformer.py b/utensor_cgen/transformer/ns_transformer.py index ef0acd5e..31acd247 100644 --- a/utensor_cgen/transformer/ns_transformer.py +++ b/utensor_cgen/transformer/ns_transformer.py @@ -24,201 +24,9 @@ "DropoutTransformer", "BatchNormTransformer", "InlineTransformer", - "TensorLifeProbe" ] -@TransformerPipeline.register_transformer -class TensorLifeProbe(Transformer): - METHOD_NAME = 'tensorlife' - KWARGS_NAMESCOPE = '_tensorlife' - DATA_NAME = 'address' - - def __init__( - self, - buff_size=100000, #1k bytes - unit_size=4 - ): - self.buff_size = buff_size - self.unit_size = unit_size - - def transform(self, ugraph): - new_ugraph = deepcopy(ugraph) - new_ugraph.setup_data_manager({self.DATA_NAME: " "}) - # use_def_table: dict, tensor_name -> {'start': op_idx, 'end': op_idx} - use_def_table = self._create_resource_table(new_ugraph) - allocate_table = dict() - allocate_success = self.allocate_graph(new_ugraph, allocate_table, use_def_table, self.buff_size, self.unit_size) - - if allocate_success: - for node_name in new_ugraph.topo_order: - in_t_infos = new_ugraph.ops_info[node_name].input_tensors - for in_o in in_t_infos: - if in_o.name in allocate_table: - new_ugraph.data_manager.address = (in_o.name, allocate_table[in_o.name]['offsetstart']) - out_t_infos = new_ugraph.ops_info[node_name].output_tensors - for out_o in out_t_infos: - if out_o.name in allocate_table: - new_ugraph.data_manager.address = (out_o.name, allocate_table[out_o.name]['offsetstart']) - new_ugraph.attributes[self.KWARGS_NAMESCOPE] = allocate_table - return new_ugraph - return ugraph - - def _query_offset_fromallocate_table(self, allocate_table, start, end): - new_start = start - new_end = end - for key in allocate_table: - if allocate_table[key]['offsetstart'] >= start and allocate_table[key]['offsetend'] <= end: - continue - elif allocate_table[key]['offsetstart'] <= start and allocate_table[key]['offsetend'] >= start: - new_start = allocate_table[key]['offsetstart'] - if allocate_table[key]['offsetend'] >= end: - new_end = max(new_end, allocate_table[key]['offsetend']) - else: - new_end = max(end, new_end) - elif allocate_table[key]['offsetstart'] >= start and allocate_table[key]['offsetend'] >= start: - if allocate_table[key]['offsetend'] >= end: - new_end = max(new_end, allocate_table[key]['offsetend']) - else: - new_end = max(end, new_end) - return new_start, new_end - - def _query_time_fromallocate_table(self, allocate_table, start, end): - time_start = start - time_end = end - for key in allocate_table: - if allocate_table[key]['start'] >= start and allocate_table[key]['end'] <= end: - continue - elif allocate_table[key]['start'] <= start and allocate_table[key]['end'] >= start: - if allocate_table[key]['end'] >= end: - time_end = max(time_end, allocate_table[key]['end']) - else: - time_end = max(end, time_end) - elif allocate_table[key]['start'] >= start and allocate_table[key]['end'] >= start: - if allocate_table[key]['end'] >= end: - time_end = max(time_end, allocate_table[key]['end']) - else: - time_end = max(end, time_end) - return time_start, time_end - - def _query_result(self, allocate_table, offset, length, timestart, timeend): - for key in allocate_table: - mem_occupied = ( - (allocate_table[key]['offsetstart'] >= offset and allocate_table[key]['offsetstart'] <= offset + length) or - (allocate_table[key]['offsetstart'] <= offset and allocate_table[key]['offsetend'] >= offset) - ) - life_span_occupied = ( - (allocate_table[key]['start'] >= timestart and allocate_table[key]['start'] <= timeend) or - (allocate_table[key]['start'] <= timestart and allocate_table[key]['end'] >= timestart) - ) - if mem_occupied and life_span_occupied: - return True - return False - - def allocate_tensor(self, tensors, tensor_index, allocate_table, use_def_table, buffer_size, unit_size): - if tensor_index == len(tensors): - return True - if tensors[tensor_index].name in allocate_table: - return self.allocate_tensor(tensors, tensor_index + 1, allocate_table, use_def_table, buffer_size, unit_size) - - tensor = tensors[tensor_index] - candidates = self._get_candidates(allocate_table, use_def_table, buffer_size, unit_size, tensor) - if not candidates: - return False - success = False - for candidate in candidates: - self._update_allocation_table(allocate_table, use_def_table, tensor, candidate, candidate + tensor.size) - success = self.allocate_tensor(tensors, tensor_index + 1, allocate_table, use_def_table, buffer_size, unit_size) - if success: - break - else: - self._remove_allocate_table(allocate_table, tensor) - return success - - def allocate_graph(self, ugraph, allocate_table, use_def_table, buffer_size, unit_size): - tensors = [] - - for node_name in ugraph.topo_order: - in_t_infos = [ - tensor - for tensor in ugraph.ops_info[node_name].input_tensors - if tensor.op.op_type != 'Inline' - ] - out_t_infos = [ - tensor - for tensor in ugraph.ops_info[node_name].output_tensors - if tensor.op.op_type != 'Inline' - ] - tensors.extend(in_t_infos) - tensors.extend(out_t_infos) - - succ = self.allocate_tensor(tensors, 0, allocate_table, use_def_table, buffer_size, unit_size) - return succ - - def _check(self, allocate_table, use_def_table, tensor, tensor_offset_start, tensor_offset_end): - valid = False - timestart = use_def_table[tensor.name]['start'] - timeend = use_def_table[tensor.name]['end'] - offset, length = self._query_offset_fromallocate_table(allocate_table, tensor_offset_start, tensor_offset_end) - timestart, timeend = self._query_time_fromallocate_table(allocate_table, timestart, timeend) - occupied = self._query_result(allocate_table, offset, length, timestart, timeend) - if not occupied: - valid = True - return valid - - def _get_candidates(self, allocate_table, use_def_table, buffer_size, unit_size, in_o): - ret = [] - for i in range(0, buffer_size, unit_size): - if self._check(allocate_table, use_def_table, in_o, i, i + in_o.size): - ret.append(i) - return ret - - def _update_allocation_table( - self, - allocate_table, - use_def_table, - tensor, - offset_start, - offset_end - ): - time_start = use_def_table[tensor.name]['start'] - time_end = use_def_table[tensor.name]['end'] - attribute = dict() - attribute['start'] = time_start - attribute['end'] = time_end - attribute['offsetstart'] = offset_start - attribute['offsetend'] = offset_end - allocate_table[tensor.name] = attribute - return allocate_table - - def _remove_allocate_table(self, allocate_table, tensor): - del allocate_table[tensor.name] - - def _create_resource_table(self, ugraph): - resource_table = dict() - len_map = { - op_name: idx - for idx, op_name in enumerate(ugraph.topo_order) - } - for node_name in ugraph.topo_order: - for tensor_info in ugraph.ops_info[node_name].input_tensors: - if tensor_info.name not in resource_table: - lifetime = dict() - lifetime['start'] = len_map[node_name] - lifetime['end'] = len_map[node_name] - resource_table[tensor_info.name] = lifetime - resource_table[tensor_info.name]['end']= len_map[node_name] - - for outtensor in ugraph.ops_info[node_name].output_tensors: - if outtensor.name not in resource_table: - lifetime = dict() - lifetime['start'] = len_map[node_name] - lifetime['end'] = len_map[node_name] - resource_table[outtensor.name] = lifetime - - return resource_table - - @TransformerPipeline.register_transformer class BiasAddTransformer(Transformer): METHOD_NAME = 'biasAdd' From 2b3481b5bf6aa394c0e8a0d5a01216c12f3d2f1c Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 3 Mar 2020 01:13:45 +0800 Subject: [PATCH 040/117] Fix kwargs parsing bug, add include_inputs flag for tensor alloc transformer --- tests/deep_mlp/.gitignore | 1 + utensor_cgen/transformer/mem_alloc.py | 46 +++++++++++++++++++++++---- utensor_cgen/transformer/pipeline.py | 9 +----- 3 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 tests/deep_mlp/.gitignore diff --git a/tests/deep_mlp/.gitignore b/tests/deep_mlp/.gitignore new file mode 100644 index 00000000..405ec2c3 --- /dev/null +++ b/tests/deep_mlp/.gitignore @@ -0,0 +1 @@ +*.toml diff --git a/utensor_cgen/transformer/mem_alloc.py b/utensor_cgen/transformer/mem_alloc.py index b5ac194a..129534fe 100644 --- a/utensor_cgen/transformer/mem_alloc.py +++ b/utensor_cgen/transformer/mem_alloc.py @@ -1,3 +1,4 @@ +import pickle from collections import Counter, defaultdict, namedtuple from itertools import chain, combinations, product @@ -15,6 +16,23 @@ @TransformerPipeline.register_transformer class TensorAllocationTransformer(Transformer): + """ + Offline Tensor Allocation Optimizer + + analyse tensor lifetime and find the optimal allocation offset in the managed memory pool + + :param max_pool_size: the size of the memory pool (default: 1 KB) + :type max_pool_size: int + + :param include_inputs: include the input tensors (Placeholder) in the allocation plan + :type include_inputs: bool + + :param out_fname: the file name of memory allocation visualization (will NOT generate if not given) + :type out_fname: str + + :param aesthetic_kwargs: the keyword arguments controlling the aesthetic of the visualization of allocation plan + :type aesthetic_kwargs: dict + """ METHOD_NAME = "tensor_alloc" KWARGS_NAMESCOPE = "_tensor_alloc" @@ -22,13 +40,15 @@ def __init__( self, prune_graph=False, max_pool_size=1024*1024, # 1k bytes - vizualize_fname=None, - **vizualize_kwargs + include_inputs=False, + out_fname=None, + **aesthetic_kwargs ): super(TensorAllocationTransformer, self).__init__(prune_graph=prune_graph) self.max_pool_size = max_pool_size - self.vizualize_fname = vizualize_fname - self.vizualize_kwargs = vizualize_kwargs + self.include_inputs = include_inputs + self.out_fname = out_fname + self.aesthetic_kwargs = aesthetic_kwargs def transform(self, ugraph): ref_cnts = Counter() @@ -43,11 +63,22 @@ def transform(self, ugraph): for op in ugraph.get_ops_by_type('Inline') ]) ) + if not self.include_inputs: + tensors_to_ignore.update( + chain(*[ + op.output_tensors + for op in ugraph.get_ops_by_type('Placeholder') + ]) + ) nonoverlap_map = defaultdict(set) for op_name in ugraph.topo_order: op_info = ugraph.ops_info[op_name] + # ignore inline ops if op_info.op_type == 'Inline': continue + # ignore placeholders if not included + if not self.include_inputs and op_info.op_type == 'Placeholder': + continue # no overlapping between input/output tensors for in_tensor, out_tensor in product(op_info.input_tensors, op_info.output_tensors): if not in_tensor in tensors_to_ignore: @@ -72,8 +103,11 @@ def transform(self, ugraph): alloc_plan = self._solve_opt_plan(tensors_to_schedule, nonoverlap_map) if alloc_plan is not None: ugraph.attributes[self.KWARGS_NAMESCOPE] = alloc_plan - if self.vizualize_fname: - viz_memalloc(ugraph=ugraph, out_fname=self.vizualize_fname, **self.vizualize_kwargs) + if self.out_fname: + fig = viz_memalloc(ugraph=ugraph, out_fname=self.out_fname, **self.aesthetic_kwargs) + with open('{}.pkl'.format(self.out_fname), 'wb') as fid: + pickle.dump(fig, fid) + logger.info('matplotlib figure object dumped (pickle): %s', fid.name) return ugraph @timed diff --git a/utensor_cgen/transformer/pipeline.py b/utensor_cgen/transformer/pipeline.py index 500f58a0..1279f325 100644 --- a/utensor_cgen/transformer/pipeline.py +++ b/utensor_cgen/transformer/pipeline.py @@ -1,5 +1,4 @@ import re -from ast import literal_eval from .base import Transformer @@ -74,10 +73,4 @@ def _parse_expr(cls, expr): @classmethod def _get_kwargs(cls, kws_str): - kw_arg_strs = [s.strip() for s in kws_str.split(',')] - kwargs = {} - for kw_str in kw_arg_strs: - name, v_str = kw_str.split('=') - value = literal_eval(v_str) - kwargs[name] = value - return kwargs + return eval('dict({})'.format(kws_str), {}, {}) From 44583197bcb1dec1858b4198c6c69c4dccefb5eb Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 3 Mar 2020 13:31:44 +0800 Subject: [PATCH 041/117] better visualization --- utensor_cgen/frontend/__init__.py | 4 +- utensor_cgen/frontend/onnx.py | 1 + utensor_cgen/frontend/tensorflow.py | 161 ++++++++++++++------------ utensor_cgen/ir/misc/graph_viz.py | 141 ++++++++++++++-------- utensor_cgen/transformer/mem_alloc.py | 1 + 5 files changed, 183 insertions(+), 125 deletions(-) diff --git a/utensor_cgen/frontend/__init__.py b/utensor_cgen/frontend/__init__.py index 0b70318e..32b82590 100644 --- a/utensor_cgen/frontend/__init__.py +++ b/utensor_cgen/frontend/__init__.py @@ -22,12 +22,10 @@ def _register(parser_cls): return _register @classmethod - def parse(cls, model_file, output_nodes, config=None): + def parse(cls, model_file, output_nodes=None, config=None): if config is None: config = {} _, ext = os.path.splitext(model_file) - if ext != '.onnx' and not output_nodes: - raise ValueError('output_nodes are required for {} file'.format(ext)) parser = cls.select_parser(ext)(config) return parser.parse(model_file, output_nodes) diff --git a/utensor_cgen/frontend/onnx.py b/utensor_cgen/frontend/onnx.py index 544887d9..c7767eda 100644 --- a/utensor_cgen/frontend/onnx.py +++ b/utensor_cgen/frontend/onnx.py @@ -7,6 +7,7 @@ import tensorflow as tf from onnx.onnx_pb import TensorProto from onnx_tf.backend import TensorflowBackend, prepare + from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser from utensor_cgen.ir import OperationInfo, TensorInfo, uTensorGraph diff --git a/utensor_cgen/frontend/tensorflow.py b/utensor_cgen/frontend/tensorflow.py index bd357a1d..64a42b8b 100644 --- a/utensor_cgen/frontend/tensorflow.py +++ b/utensor_cgen/frontend/tensorflow.py @@ -4,93 +4,102 @@ import numpy as np import six - import tensorflow as tf from google.protobuf import text_format + from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser from utensor_cgen.ir.base import OperationInfo, TensorInfo, uTensorGraph from utensor_cgen.legalizer import Legalizer +from utensor_cgen.logger import logger from utensor_cgen.utils import random_str, topologic_order_graph -@FrontendSelector.register(target_exts=['.pb', '.pbtxt']) +@FrontendSelector.register(target_exts=[".pb", ".pbtxt"]) class GraphDefParser(Parser): + def parse(self, pb_file, output_nodes=None): + graph_def, graph_name = self._load_graph_def(pb_file) + if not self._is_freeze_graph(graph_def): + raise ValueError("Given graph_def is not freezed") + if output_nodes is None: + output_nodes = [node.name for node in graph_def.node] + logger.warning( + 'output_nodes is not given, use all nodes instead (may cause unexpected behaviour)' + ) - def parse(self, pb_file, output_nodes=None): - graph_def, graph_name = self._load_graph_def(pb_file) - if not self._tf_is_freeze_graph(graph_def): - raise ValueError('Given graph_def is not freezed') - if output_nodes is None: - output_nodes = [node.name for node in graph_def.node] - - graph = tf.Graph() - with graph.as_default(): - tf.import_graph_def(graph_def, name='') - ugraph = uTensorGraph( - name=graph_name, - output_nodes=output_nodes, - lib_name="tensorflow", - ) - for node in graph_def.node: - op = graph.get_operation_by_name(node.name) - in_tensors = [TensorInfo(name=tensor.name, - ugraph=ugraph, - op_name=tensor.op.name, - dtype=np.dtype(tensor.dtype.as_numpy_dtype), - shape=self._tf_parse_tshape(tensor.shape), - ) - for tensor in op.inputs] - out_tensors = [TensorInfo(name=tensor.name, - ugraph=ugraph, - op_name=op.name, - dtype=np.dtype(tensor.dtype.as_numpy_dtype), - shape=self._tf_parse_tshape(tensor.shape), - ) - for tensor in op.outputs] - op_type = node.op - op_attr = node.attr - op_info = OperationInfo(name=node.name, - input_tensors=in_tensors, - n_inputs=len(in_tensors), - output_tensors=out_tensors, - n_outputs=len(out_tensors), - op_type=op_type, - lib_name='tensorflow', - op_attr=op_attr, - ugraph=ugraph) - op_info.op_attr['tensorflow__device'] = node.device - ugraph.ops_info[node.name] = op_info - topologic_order_graph(ugraph) - ugraph = Legalizer.legalize(ugraph, {}) - return ugraph + graph = tf.Graph() + with graph.as_default(): + tf.import_graph_def(graph_def, name="") + ugraph = uTensorGraph( + name=graph_name, output_nodes=output_nodes, lib_name="tensorflow", + ) + for node in graph_def.node: + op = graph.get_operation_by_name(node.name) + in_tensors = [ + TensorInfo( + name=tensor.name, + ugraph=ugraph, + op_name=tensor.op.name, + dtype=np.dtype(tensor.dtype.as_numpy_dtype), + shape=self._tf_parse_tshape(tensor.shape), + ) + for tensor in op.inputs + ] + out_tensors = [ + TensorInfo( + name=tensor.name, + ugraph=ugraph, + op_name=op.name, + dtype=np.dtype(tensor.dtype.as_numpy_dtype), + shape=self._tf_parse_tshape(tensor.shape), + ) + for tensor in op.outputs + ] + op_type = node.op + op_attr = node.attr + op_info = OperationInfo( + name=node.name, + input_tensors=in_tensors, + n_inputs=len(in_tensors), + output_tensors=out_tensors, + n_outputs=len(out_tensors), + op_type=op_type, + lib_name="tensorflow", + op_attr=op_attr, + ugraph=ugraph, + ) + op_info.op_attr["tensorflow__device"] = node.device + ugraph.ops_info[node.name] = op_info + topologic_order_graph(ugraph) + ugraph = Legalizer.legalize(ugraph, {}) + return ugraph - @staticmethod - def _load_graph_def(pb_file): - if isinstance(pb_file, tf.GraphDef): - return pb_file, 'tf_graph_{}'.format(random_str(6)) - assert isinstance(pb_file, six.string_types) - graph_name, _ = os.path.splitext(os.path.basename(pb_file)) - graph_def = tf.GraphDef() - if pb_file[-3:] == ".pb": - with open(pb_file, 'rb') as fid: - graph_def.ParseFromString(fid.read()) - elif pb_file[-6:] == ".pbtxt": - with open(pb_file, 'r') as fid: - text_format.Parse(fid.read(), graph_def) - else: - raise ValueError('unknown file format: %s' % pb_file) - return graph_def, graph_name + @staticmethod + def _load_graph_def(pb_file): + if isinstance(pb_file, tf.GraphDef): + return pb_file, "tf_graph_{}".format(random_str(6)) + assert isinstance(pb_file, six.string_types) + graph_name, _ = os.path.splitext(os.path.basename(pb_file)) + graph_def = tf.GraphDef() + if pb_file[-3:] == ".pb": + with open(pb_file, "rb") as fid: + graph_def.ParseFromString(fid.read()) + elif pb_file[-6:] == ".pbtxt": + with open(pb_file, "r") as fid: + text_format.Parse(fid.read(), graph_def) + else: + raise ValueError("unknown file format: %s" % pb_file) + return graph_def, graph_name - @staticmethod - def _tf_parse_tshape(t_shape): - try: - shape = t_shape.as_list() - except ValueError: - shape = None - return shape + @staticmethod + def _tf_parse_tshape(t_shape): + try: + shape = t_shape.as_list() + except ValueError: + shape = None + return shape - @staticmethod - def _tf_is_freeze_graph(graph_def): - is_frozen = all(node.op not in ['VariableV2'] for node in graph_def.node) - return is_frozen + @staticmethod + def _is_freeze_graph(graph_def): + is_frozen = all(node.op not in ["VariableV2"] for node in graph_def.node) + return is_frozen diff --git a/utensor_cgen/ir/misc/graph_viz.py b/utensor_cgen/ir/misc/graph_viz.py index c71424f6..f4f7efc5 100644 --- a/utensor_cgen/ir/misc/graph_viz.py +++ b/utensor_cgen/ir/misc/graph_viz.py @@ -1,3 +1,5 @@ +import os +from math import ceil, log10 from random import random, seed import matplotlib.pyplot as plt @@ -72,54 +74,101 @@ def viz_graph(ugraph, out_fname=None, view=False, cleanup=True, colored_nodes=No return dot -def viz_memalloc(ugraph, out_fname=None, figsize=None, fontsize=12, lw=15, cmap=_cm.BrBG_r, rand_seed=1111): - seed(rand_seed) - fig = plt.gcf() - if TensorAllocationTransformer.KWARGS_NAMESCOPE not in ugraph.attributes: - logger.info('No tensor allocation plan to visualize: %s', ugraph.name) - return fig - alloc_plan = ugraph.attributes[TensorAllocationTransformer.KWARGS_NAMESCOPE] - topo_tensors = [] - visited_tensors = set() - for op_name in ugraph.topo_order: - op_info = ugraph.ops_info[op_name] - for tensor in op_info.input_tensors: +class _MemallcVisualizer(object): + + @classmethod + def viz_memalloc( + cls, + ugraph, + out_fname=None, + split_on_large_graph=True, + num_tensors_per_split=20, + figsize=None, + fontsize=12, + lw=15, + cmap=_cm.BrBG_r, + rand_seed=1111 + ): + seed(rand_seed) + if TensorAllocationTransformer.KWARGS_NAMESCOPE not in ugraph.attributes: + logger.info('No tensor allocation plan to visualize: %s', ugraph.name) + return plt.Figure() + alloc_plan = ugraph.attributes[TensorAllocationTransformer.KWARGS_NAMESCOPE] + topo_tensors = [] + visited_tensors = set() + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + for tensor in op_info.input_tensors: + if tensor.name in alloc_plan.plan and tensor not in visited_tensors: + topo_tensors.append(tensor) + visited_tensors.add(tensor) + for tensor in ugraph.output_tensors: if tensor.name in alloc_plan.plan and tensor not in visited_tensors: topo_tensors.append(tensor) visited_tensors.add(tensor) - for tensor in ugraph.output_tensors: - if tensor.name in alloc_plan.plan and tensor not in visited_tensors: - topo_tensors.append(tensor) - visited_tensors.add(tensor) - num_tensors = len(topo_tensors) - ys = [num_tensors - i for i in range(len(topo_tensors))] - xmins = [alloc_plan.plan[tensor.name].start for tensor in topo_tensors] - xmaxs = [alloc_plan.plan[tensor.name].end for tensor in topo_tensors] - colors = [cmap(random()) for _ in alloc_plan.plan] - labels = [tensor.name for tensor in topo_tensors] - sizes = [alloc_plan.plan[tensor.name].size for tensor in topo_tensors] - for y, xmin, xmax, color, size in zip(ys, xmins, xmaxs, colors, sizes): - plt.hlines(y, xmin, xmax, lw=lw, colors=color) - plt.text(xmax, y-0.15, '{} bytes'.format(size), fontdict={'fontsize': fontsize}) - plt.xlabel('Offset (bytes)', fontdict={'fontsize': fontsize}) - plt.yticks(ys, labels, fontsize=fontsize) - plt.xticks(fontsize=fontsize) - plt.ylabel( - 'Tensor Names (Topological Ordered, Top to Bottom)', - fontdict={'fontsize':fontsize} - ) - plt.title( - 'Optimal Tensor Allocation: {} bytes in total'.format(alloc_plan.total_size), - fontdict={'fontsize': fontsize} - ) - if figsize is None: - figsize = (len(ys), len(ys)*0.5) - fig.set_size_inches(*figsize) - plt.tight_layout() - if out_fname: - logger.info('saving tensor mem allocation to %s', out_fname) - fig.savefig(out_fname) - return fig + if out_fname: + figs = cls._draw_figs(topo_tensors, alloc_plan, cmap, figsize, fontsize, lw, split_on_large_graph, num_tensors_per_split) + if len(figs) == 1: + logger.info('saving tensor mem allocation to %s', out_fname) + figs[0].savefig(out_fname) + else: + num_digits = ceil(log10(len(figs))) + file_format = '{{}}_{{:0{}d}}{{}}'.format(num_digits) + for i, fig in enumerate(figs, 1): + fname, ext = os.path.splitext(out_fname) + fname = file_format.format(fname, i, ext) + logger.info('saving tensor mem allocation to %s', fname) + fig.savefig(fname) + + @classmethod + def _draw_figs(cls, topo_tensors, alloc_plan, cmap, figsize, fontsize, lw, split_on_large_graph, num_tensors_per_split): + xmins = [alloc_plan.plan[tensor.name].start for tensor in topo_tensors] + xmaxs = [alloc_plan.plan[tensor.name].end for tensor in topo_tensors] + colors = [cmap(random()) for _ in alloc_plan.plan] + labels = [tensor.name for tensor in topo_tensors] + sizes = [alloc_plan.plan[tensor.name].size for tensor in topo_tensors] + if split_on_large_graph: + xmin_chunks = [xmins[i:i+num_tensors_per_split] for i in range(0, len(xmins), num_tensors_per_split)] + xmax_chunks = [xmaxs[i:i+num_tensors_per_split] for i in range(0, len(xmaxs), num_tensors_per_split)] + color_chunks = [colors[i:i+num_tensors_per_split] for i in range(0, len(colors), num_tensors_per_split)] + label_chunks = [labels[i:i+num_tensors_per_split] for i in range(0, len(labels), num_tensors_per_split)] + size_chunks = [sizes[i:i+num_tensors_per_split] for i in range(0, len(sizes), num_tensors_per_split)] + else: + xmin_chunks = [xmins] + xmax_chunks = [xmaxs] + color_chunks = [colors] + label_chunks = [labe] + size_chunks = [sizes] + figs = [] + for i, (xmins, xmaxs, colors, sizes) in enumerate(zip(xmin_chunks, xmax_chunks, color_chunks, size_chunks)): + fig, _ = plt.subplots(1, 1) + ys = [len(xmins)-i for i in range(len(xmins))] + for y, xmin, xmax, color, size in zip(ys, xmins, xmaxs, colors, sizes): + plt.hlines(y, xmin, xmax, lw=lw, colors=color) + plt.text(xmax+lw*5, y-0.2*lw/3, '{} bytes'.format(size), fontdict={'fontsize': fontsize}) + plt.xlabel('Offset (bytes)', fontdict={'fontsize': fontsize}) + plt.yticks(ys, labels, fontsize=fontsize) + plt.xticks(fontsize=fontsize) + plt.ylabel( + 'Tensor Names (Topological Ordered, Top to Bottom)', + fontdict={'fontsize':fontsize} + ) + if i: + title = 'Optimal Tensor Allocation: {} bytes in total (Cont.)'.format(alloc_plan.total_size) + else: + title = 'Optimal Tensor Allocation: {} bytes in total'.format(alloc_plan.total_size) + plt.title( + title, + fontdict={'fontsize': fontsize} + ) + if figsize is None: + figsize = (num_tensors_per_split, num_tensors_per_split / 2) + fig.set_size_inches(*figsize) + fig.tight_layout() + figs.append(fig) + return figs + +viz_memalloc = _MemallcVisualizer.viz_memalloc -# cyclic import +# FIXME: cyclic import from utensor_cgen.transformer.mem_alloc import TensorAllocationTransformer # isort:skip diff --git a/utensor_cgen/transformer/mem_alloc.py b/utensor_cgen/transformer/mem_alloc.py index 129534fe..1e5bb8d3 100644 --- a/utensor_cgen/transformer/mem_alloc.py +++ b/utensor_cgen/transformer/mem_alloc.py @@ -152,4 +152,5 @@ def _solve_opt_plan(self, tensors_to_schedule, nonoverlap_map): logger.info('tensor allocation plan not found, status: %s', solver.StatusName(status)) return alloc_plan +# FIXME: cyclic import from utensor_cgen.ir.misc.graph_viz import viz_memalloc # isort:skip From a5a3043453c9260433c7e588bafbc675b721ab1f Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 3 Mar 2020 13:31:55 +0800 Subject: [PATCH 042/117] update README --- README.rst | 30 ++++++++++++++++++++++--- doc/source/_images/mlp_alloc.png | Bin 0 -> 25540 bytes doc/source/_images/mlp_alloc_graph.png | Bin 0 -> 178181 bytes doc/source/images.rst | 6 +++++ tests/deep_cnn/.gitignore | 1 + 5 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 doc/source/_images/mlp_alloc.png create mode 100644 doc/source/_images/mlp_alloc_graph.png diff --git a/README.rst b/README.rst index 68ab57d3..000be69e 100644 --- a/README.rst +++ b/README.rst @@ -226,12 +226,32 @@ Use Case: Dropout Layer Removal \ |cnn-dropout| -.. subgraph-match-end - We use mainly `Tensorflow`_ for declaring the pattern graph for matcher now. High-level graph builder is on its way, see `Future Works <#future-works>`_ for detail. +.. subgraph-match-end + +.. offline-tensor-alloc-start + +Offline Tensor Memory Allocation +-------------------------------- + +Considering following simple multi layers perceptron (`simple_mnist.pb`_): + +\ |mlp-alloc-graph| + +Once enabled the optimization transformer, ``tensor_alloc``, +which is an offline tensor memory allocation planner, +``utensor-cli`` will generate ``uTensor`` runtime codes that use following optimized allocation plan: + +\ |mlp-alloc| + +- On the y-axis, these are tensor names ordered by topological sorting +- On the x-axis, these are the memory span occupied by each tensor + +.. offline-tensor-alloc-end + Tutorials ========= @@ -313,6 +333,7 @@ Future Works .. _Tensorflow: https://www.tensorflow.org .. _PyTorch: https://pytorch.org/ .. _uTensor: https://github.com/uTensor/uTensor +.. _simple_mnist.pb: https://github.com/uTensor/utensor_cgen/blob/develop/tests/deep_mlp/simple_mnist.pb .. readme_end @@ -322,7 +343,10 @@ Future Works :alt: conv-pool-fuse .. |convert-example| image:: doc/source/_images/convert_example.png :alt: convert-example - +.. |mlp-alloc| image:: doc/source/_images/mlp_alloc.png + :alt: mlp-alloc +.. |mlp-alloc-graph| image:: doc/source/_images/mlp_alloc_graph.png + :alt: mlp-alloc-graph .. TODOs .. ===== diff --git a/doc/source/_images/mlp_alloc.png b/doc/source/_images/mlp_alloc.png new file mode 100644 index 0000000000000000000000000000000000000000..d14aad8615dacdee2d9f6f383d2b6ed9a230c5e4 GIT binary patch literal 25540 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�%c)@U&cs3=J^K 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�j~sS*dUmmFAO)k;3877GhX>0z5L zvbBw0aP`*=@YTpOn5K4DPpqEtouCa))$PgAo!jhs3o?9ipe?(z(;JXrmgQ*4)ZR z3V^R}7&%XftAaI5N01@}*YvT=Dgs7d-tna|xwJ15b%Z>ULA#0idhBttRNREP{&3%# zy+!ss?Hj4si&NY41N($>nX>J_KAJiwW00vcQqdMkory(84!Wf&IPD~o?!C+7L{f^f<=+LKy~%y3yTw^(sAdt9(mI#!B4{_gqym9uc5D2Qv$;gmQCJ!b^M}}dwyYRr=Du*6TRj%QB$c2hMOwv6w5MC>F zVG`#oRT7Wotm$6cFY?ixz|?Pw_rW?gv-aV+U^A0uLu{Qa-Iw9}tdsWk`P=H~;0Inv zAqO|YkaS_#9_{sC9jgOA8)K3UPq;k`PkWQ1?+uQfFHhJb2>oA#gW&l4wxDT!=QPND zr`Nv2o$8vur1J4D53Ypw^NSyW7Yo|=EzVkhV_&oPt;KfhYQ>BP(*F6{p-a6!L;mpv>->F`NKFzS%!j%}AK)M>VIWRLebP z49b&UKhOh6akf$s9nq?xi}Y>~3JzJ2P7E2*c(pmSO}}~E-n$~yJX7u_NtN&-vD+OH zX%w2QZ3z$w*N-1gA?{#>W(haZ8BAZUvaAwfOWViSToxbu*txiuHcCp!yT!D%XScKv z1_gw^TG*U4&|$KS)#<(>1fy!JRR(IVz{R1^)Tg5e`&Ni{4Evd?nv5y2PP=*iI8%WM z0FXdrW3OZgUar({S;mYnRMFeiXRa(3LK5!fMA;ShkL1|0{j7LLI%NrYze`Ff$$BPr z=`D_e@8WH>=5mKXV-^+VOR?S<^>^#*Zgob-?{K*0&;3qa4+_HMmxAze2`pc`k>4G@ zgR=n68o{entm)sFBzTeeR^0#;q2+i~AWt52aoBfxEe1|HBK!;R)SSA50Q7?a z1*l?u1|#-~qkF|b8dpW(Ltz)-#e$CLwIcLP{%4Ii?h2&^Ico>-2{7wbi@oIMT^gm? zJD94%WG|U_3cY@d>uz_OE^{Ou*cZHY{*}}?z0*=Tdq`A>)oh5Z&*hyhV^3l)wgf-@ zwvwK!>v8`831WxDME<$>I^Ux7TX**D;i39vy$HJa$k<-#97@BL`@80~5IyW>30Bxu zS$~~u?kEp9hhIwBF7`!bnqRNi#nq!&!8$xfm+v@!-fHEwyt~FD=KV>>*EPMy5B5$i z&p74Rcba-7L(l2v@S2N{Faz*t1a_Fp`A1E(&r@yNd57I$KX1#m*N@cQ=DxS5cQDWT zO+vBU6WcD&d*DfBh#y{qouVEC;6aU}i$ zx$5BXBtI3NZgin4oX_ppn5?qDS6GpMn9DypRUWqoI6aOru&R0aZWrcgNM;o@VGj)gf4FsmuqQhcm3;zg zPv}Ll08Ip4bVtYekiSp$`nWfJ`jHHea60k4$;ZT~W{l{~p-t8CgdDu?)Y2I)#UQ zo(zw3!Lf<`SHb}UDQ$X@2%3Bd;FU1F#Sn#JUErX~s9Fj=IaETF3tTJJ(q^X%_4B}j zNSg)@!;1q}F(M7b-Z?^Nl;=nuhj~o6?wIO(i<8zw&X~H7W)t#tIxJaI-x^Tmm{OJ1 z?P2$0D*}+KdktaxT-k$A!TEqN0n&Kwq6me;Ngp%xOL8q#Lkw@yfrGaT4+u!eU(fAm zHFIL**EwX4+$XW^F!3G*@c_KYxO4jLY2SASG>Ljp36v^ajz`Sm2BiL`wjFu8?0fF0 zKb!FG7~4YEkB>r233_%wN(-4Ef9^u@JpoLl4}L3b1w!R0O~8{tf)-t3bgINa(IPZF zW>dkrk&AqvvV)6;~!+qwEy2adK$tY9Y?kM5}6ygdoPRE30oAfk%Axz|s z;=QoNoi{k{lL3|8p?~t!9;mWEIz9`8aP-LI)5aDw&mdI$f&uTX|DmM&%D~cSX7>wy zto2SpK8~tiW!6^dA8aAS5#th8henWSsp;#$M{^YfkogE)PzoTz1ib(R;Gjn8iY1#A zqJC-!<3*l2kUwL2&@)Fpq-T2-GC(m&5DPt1BCOqI8$98e=96Y=YJu5z$--9$r44nn z4sC*ItyQ9>w>!k0h$kIO81wap@7S+y(&6tTV0dose&|Lb@*!m3RqVO0Y5SG3FCG-- zh00k0Fhd4g3waZ#h0?k6bl`m)GVT-B${K-P+RW*mD#Jdy!8OC}oWZWyRPiAC^HpoVz6gm%cB z7@Y{}gHUg(v@gOf!f}~y%@U1p3EV|cm_=(wAfBG2qAXxgCs@>pgA4-F12-{ z3jC~O{jgY!@$4X&h=T3l?QWIVYsT1he=jZDz0&lS z>*x8_#R0*xXGFgwt9B`~4j4c8q6+Y?ZU$O5w5yc3;@V+9!r79iY`rQLOqsM|yM{IG zLk-Y-DIrk~hS^&ot8?lb?wQ~Vv88C&3!TMS-n-kp`X~Kwaz>(q& zfOJnSwg84RVgp;41{G;pArU!p+oR*23oZmljXlz=i96P-zG-QH*gRtsH5yyf7uIt@ z4fGUnNl-l(IiWsv73I%-jgMTlE&sUjsU5o58Mr?m!Ish9lhy5?vU(HuM6fk}&W5Le z`clT53V?r=P7(3E(1g4z_Es7QaR2m#;~{r|`pu5a_fZ_5_z^BNp$M{m%JlKDKY$ic z=f&3o^!XP+pfCXOoI_MOrEo8$LS)dQNCfyZjd^j%SrvpaUojtJI{)P5l3=#Xrbd$H zn_ao-zORV8Vs~*kijVvQz8iE~E5Sp=yCV&o@AuOR0o^uVBf|~&QeoSWc4i-?N<@-S z0C@w)tU_%BgwNPQUV+N}cna%cpr{0M<8Ifei!G~E#o;R$H|uxXs2zqaj!b?Bhm5gyM%oh=(}Zli?g#Py^$}w<#xWchazD`9hPafj5~2FZ4jdV z{~Wz(uVv?XrnlyK+H22es8chmSQIHzlw{db+nsg?ouq@H6C_{qA-^YoBM8tRf=)W0 zf(Fu^q+!`=TM|i8;!v#NRGo3pd#`z3xsG8#fMuF2p0oE_@B2LWeO*aXNcYys_Z()` z`~Uc`vC0*{y>xac?5^Iu)6KnG}@%CFs<(Ck8&a%QuH1pw+CZI{38}4 zSw5|dmk0GYIxAm<`gz&hZfk=>iclcr=u$4BKi>;b% z=-!aUCIG+D>;r{G=rRYbTc2NC?B2y!Z?A=yyZ!Py-YbjY_}%sO@(^FX?>)Ob(PzM< z=yCjGu3GEZM?e?keLN!sjX_Aw1DQ=_m0t8?{ImvO`(s%Dd>C;@=|i3of^k@xgYn+$ zw|?umwDZ_+%RMu;x?!W%aaNd$q&}&IksT=fWug*~&+i*Sw}YGR?(VkmqP%daWU11v ze*W4@UD29hi8)+0*N2TvJz{6=G4XYg^oqKBe?w>Wz}aq{D7$rBkDd$h-anY`_StoZu_NiSTs`gbr_58@p& z=L@Y6AL9BjyVkEyBve|k*pw64%ts`v#;5|p`ulp}8}br(I3G7t0Ur=x@N-e)^g4?t z5=6WX{h0ajNEeRoU81Zo=B?+u#RQP`c<#A8rNZCwvi#&{o%`ZK8w^G#@r`@?O_(@5 z;ry|w9m2n({PO6>g7m=~(+k7rHMp+t?G*k>?rYh(Dt}Mr;=xh7mQ@23UR+;S?|!$x z)iE0gY)pJL>-M$ziCmR_5(wgYwO^M1kn@JwvJ-DU5;tS>H&B$y;RjNBeX9hA7wwa; z($(H#g;H6M5t2%O3zA>9ey-GC8}k>*Gx3veyYH!#1-(_BP6na=>g^<1d0qWNQzs z7ygqUV5O?APEYhRFl|~oC*Kx)K6Ey2@VWa`nlT&;tSP9%@Y83p9NNNjksk!Fp8Nf4Sj1uZlsM(uHC&`Zy(6!QH-8%Pey3M~uTlst{Bj@?Usg!%OVQH6bs+!6X*H83X8ux~i)^sX}N$KO*jd3H8DJ!aovS;ykBaI&0< zhBlXc7o^+Ke?-Rj@xK&=7pUhy((ZR%sD3@%(3g+y&!tfk{$K8u_ThhH*iRIBGKXH? z4yEtZlDq5miO(6#{8Q2PN1st=fw64^7Q6J`zT-tm02+rxHJXNq6B4h6_u_wu9B%=UM^^S~l} z^?euxuKU5gz`Fm)CubCXbmmS!KRJ6G1V7b>*6I4b4m9cW*;%6cLyYp{lb@=%mu8P= z1GU+;@>+L~mEmyeu-p#R?9cQ^&jGC#{x38h5eS#Y`UgVWhMK}Ehi$zwD`W^d%snxj zF^eW=HFZYh5|E+eHjKjqH$g*JAlY>)k4*@vC_V)_7ZO*<)*7QOg)d3YyTWkl(Dgu4 z)|JNjHNC%dFCiy9n9}g1S|4hRRYTX11|u<8gu3MJwD)ZyefD45lB*5fkv=u&a(K;X z*7d(1S=O}meqUeqkN*d&9lelt4=p;_ZSW24UQ7Kw1bkEse^h%{eJoJX25D^@KmcqO zs-h}?OV;MGB47Hka^Su7IAP+bjJv7%pu5Y#$|_;FxjeoeIa4zaIkIRh9>6KyyT4^X z84UX=h?nE3VLu$dcsv~j-jx3g2i%3rlP9ymJ^AE_#`pb+@pI*qA5Fq4(0?^>29u>z z-E*H2LmD0F%7HGU_LFM2=WFML4Yo%Id&C9oulN?%Xj_uQ+z+n)_sJ~FclquVD~ll03b4)N&T#% zEi`neDsuqQdOU>SJ`A7Q!LdB)udOMrP`7Mf=nvH1x@f!SPIK^`S^atVBZkSS3Y|l# zPRmFA38Aldn)rcI@5Hrt_^bMv>>gxahfmmt#TZ**F774qVJ+Plt9bkK-2kW85Px5P z-R2Dc4;$3>@sjsi7GEmKh@oDTx)Cm-d{2kH6ZY$4d$G1w@cHhhX@vAB3T*Cv9k}$o z)+Zkn<}$)|S%AOyWGqBWK2A&m{JK;Ol%Hn;7HEsz?B z6?a6gW!p&Tu*&1w%HGKPbg)ljX(Kltfk3+xUD5=Detu0ZGta2CG(lmV1Dey1DrLxL zg>@jQ$w!e|vXI;}9PSV9wVX0)vHF#)6+xMsPulstG;@0CqJ{8}kWumpW~jy55@SnR zwIlW9S!2Q#eVNf^G}B>K#ZuTtzw-;%IDE++O~vZ4+ZPM=*W6yt=q(bOUi~(?-51U8 zBwXf<}OpXpB88IQJ@68MsNdV{M z?{YHG3+exf_RW4!@A*Wq5b2XZt~Tik8P01gf@PxoyZwHr;ps8DeR*JMU{Si^C)Xu^ zvoFM>>-;s@rE<1jOXY1@T<6s^osS}dx#GVO7UF3^>~E7VVAHl|GL52)DDtGHJV0Au-(MK!GL(^wD(jjs^#ASNc(#oJ#k^ z-ivm!QWENgFa*f|b=&N)D%}G9)-t)d6R-;XY6C%Qv~cSE?E(KQLh?rnceguM+h8}J z2`glN)oB(=d+G~gl7py+kRuUt*KE3O4q;Ho{~=#0?M|^utBe zw2@lhFtsh}En~hlpSJGK`PbJNew4Ci_pc^5&>}f0z-TM{czNKIpZ3Y-s#5JGB}5HV zVSgx-J^g4Z*1X{PD+wh~r|dAGp|r34DuJFYc2X2%6RezoY^544`rU`V#5@I9#l-0- zvPLuSOm(i4b(M#4U1PH@;>QM;z$s7QMa|WzqbcEpcjh=fK48e?-_THK#o>a3n=k-M zE$jrYi2zg%J5uiGNI8eF4-itfYG;(3P1}l9((YD@nZzO+3;2|?3vp`XKE6W9(Z%+e zTV%Q*|Mo5P79XJ`lpWryx<0}eH?*5$bm>q!JpRdemybh@4hi2K<&4?XJ6iD){n4xH z)~yPjxsj77)lS;AYAmgH*?KGcENzoq-rdndMQ1@g@PTX`6oeIt=H09ESzTI>=ia~u z{v9$@;AH7DtJa1CnM0mK{>h~p&wq0&TXVT_1_U`FEYp@BQw*MpTH%tn*XlbAIY5qq z&%UDf1g5)CV@ko*Te!>IdF(x#6w-f%CRP>RCU~+=#Q?;YiE1Z89l$+r>jCPU`G6dB zIW9^IFL8hq%J2dWZx#Dr=?GlJkiaOjB^yz+ua3Yhj}C(D`?BIT-if1Xu3wLookcw- z7>ohBf#UQ7srF;?Qld4nMoOY{3{7FQ*v`8;%O`TjrzuQRDwO6LbMnxoBb58GCj%ZH{gmtepPBUiz6Am0IN{pPNP zSDZcWgz^IbIyK%pO7ZlrWqpAQ(&fXio|nVFPFdjT0x&B`tre z3IC+s-G3;(V(Z?`v)Nbe_k`8&tP1zZVOqa-s()3qpP!cBjCfQ&O`M95ks66X>GI0rLpmBWZO;*V>L6 zF&9?3y=c@%mtD`n5Ra2VKk)xP$(y}$kF-Z$>zDn2*Fj32anMdpJ=_?e1#+j&X5F(h z;_iGK95@+>gZzz>bWuD7;luooGKKfkri6B6V295ERV}4`jX{W0g1qQ{KuO$tLm$=`^zf*YkRkxG)EghGyk>tyJFuh8>#WP z(XX@bMaf<+?(<5cXMNc%$0%U5xOmAl=D6Bj-X%Giuzi#zb-VGq)8c0ZM;<}iHM?@i zwxcQ$>y?KSt~=_sjgEv^7}Bpa;gx9G@KmQn=dwsn@4`lS*d5XUC^ zVo%x!tL07tRo$)*dCB`h-M64x`VTW`UfVY)Bjfg<-bgGK((aJJ#b-_V${PL!nC&rn zNTW{GBKW?%;_eK;jSWe)(ck95N2>JDuJ>v`gu7(@DS4GNo=FGh!(RGIcsipI=&sA{j|yNl_8m!c{S|y|7~vQNX$7VBepx5c^=5}zezE&zx#`O5?ao-!l+W0aOYXGXVQIeIyvy5tE}{W6qH=eg z?;9cB+~S00<{dZOsQ@JA_WSPkPQsCis~X8R?GunK`vo@LZMuWzv%eO<>Q`Rx&ouFk zY=(&~m|x1T%#H{WU9*{Z>HNV8KO4#)z#mY>8I)S_kNO|XU}{L9o^;{Xd1a~(6zzGa z+&bP_8FV(yOeVyyG{@ZE6AvgYU{q&-b5q}BlQgq4!~?p z)-yd&cnFDuz3{d8O1u%;$+0YdFX?lAGSrr47Wl&hsPp^f;H#roq5fp*J)YU;%FM&u z6Mk>JJ7Vn}j;f=^`$2qXxsM0-RPkbS%==5xzL>p*2KJT(y&G6J=q8T+IcZ8P#Yeg3 zYvT*I(+1%N|3+>*Sr|%_XCj*=TG)y~cPv}Wz}d~nuv!w*hED0`SP1*$$+hYodSRUJ ziERL=yepzwjI~y{aW$#(hJRq>rHpKm+u&VYPa0%L47+@iX#+=^JLVc_JLKg#mNBSM zwH)eqt_>;A5_KqXXDfKib2F}QDfYz4 zGKyPnq#FjkMxe1?(Dch9*1|UbPoqY--OwJa)WsGN2>*l3Mw7#rdY?h|h z*T1#L;mjX|YpXvQ`seU`iotLwuE*?)(V*#zV?Uo6C&9MwrZ8&o^H#oDLW%>?<5j`X zE4xZylXKG9{5&)`Cb-BQ?MMwhypy&$bWCE|PxRrPdqcuf5tz|vhngbe& zv*bEx#Q+S5fLu|1Q|0`E2c|9#G3ySR@3UAz&&jDIK;!#7h`0@cs}8iC?cAuQ_oRfXldb zcbUo+JYDSaNY42(9Hgrh!3ZM8^KPGRWgSty1RjDQLZ(JrY2Hc)5{Z(AZqYNTRN?L3 zF>zUTl)uOeVi+W8m`Bns-IdE08kfCIza#6Cy+^tG5@LDJ@7zCvhlLX5rb_I=ZuEsy zj!edKj1;zRVCzR*Tbi`@!$7O0Y5)1pgEI3lQYj`T(` z4ut`3dl1TsLL1eyLITLBi~0Ibgh43^hR)&LZe1eq;Rv{z+i(npXyAMg=3+2wrER8K zX1j-*d3bA-y3uTj2_U3;3Byc7A-Vj?))+KW<2|xxKZWP0W;dixFrkxd zW%S!iRwIvUNfn=l$7l8U0R;vB4Ie2H+(3O=feDF(7U^~q3ngQ^1{aWG_3+I_g>+|HYyue5jf?WaRG z*sAH0aV}iLw4;7-)3pn|Io}=DOD6{W9Jb8CgyLqUv$5>8J3UUYD;i0(PmkUl!;2>n&2f ziwLik)iO#^k9t)Ygrq!0u6Dom4`{p3%)5Cg0$1^jcd>%*% zD7@mRePQ3_9g?q%zM{o2-8(|>F(H~*s)0An)*n1(-5e#a_6P0Al82hg2NPaU-^Wa} z`+NQKd#Q3KTi?KF%CWke#7Frxn~hv=B_q(MGg{_2q>5g@^H#M1va`sUuy>K9<6>_3 zBZw@Fy#UyS(MFXVUZOOuVh0zq?38FD3 z26vM#{_iBubB0(%MWMNAs3??(%MtHH_A02giUMhEqQ_PNhb!r|jnHr48tQ1w0;FgP z*m=hEVZr=N^s;cY)m@zl>$iCg3OovnWRaM=2&qD{ z*>q`m7<;hwSMYPMHQCvJen)e%nr+GCzt&WSbH2W>X(3V$!JieK;F{>&luC5eX8$Os z?tRi;4GSiPGCQHO3V2(|ZzG|csaN(koN>)hQb-ut(WYhd>D8M(Kl_80X<9llY)c$) z4L6g*fUlaBzCJ!7RX2gs?-a7GWg%Gv56`k zRP$`f&UlE*j07vPCo!i>6LutFc|D`#DZSy*?v4}!(o zAU9HbeP^<*U<$!qHI|BD9UvPA@tF59MG(bN$ZNK345^uaFJlS2Ma&k6EY%%uMQ~9h z6iK-*eax1eIz~%Vvb5RkY)TSQ;Ou;$ha-;>IcOt*8mA-?-J%SS$6;DLb(?!qJsKUVV zNg+AB+VOO8aHRDB-%TNM1x<6zqJDo=EJwqQd(ta+MEPM|9rd9zZPcK~qsGkvLDR?` zH={D>QAA<^2!y#mlY+pU+nzAG(T%M@C2pQ$&T(eW_`Q9r+ss0Banl+d$>bvf+bd6~ zK4|#Br}3>F5v$l9ou<=7FF^}Fem3wuryq}WPoG&K7#0M9?!D*?D4R8IJ z8qKLB$CYjlTz&?++7Ha2b_mhhy@H2QuiUVQ^w^N#Z&;Cfj1oP*_ad@*ve!ec^c-!I zD23qV89Com>{S7x$mu!$x8 zm7<-El^wx#b!?q|scyi8c0tzCs5^A)dhn5uoN4v`WbM||_|re>g}pOYjp6*F(ONq; zB|_=H;NUgd2J(mQpKl^2(4bpon2R*V*1aH_^1~GV6z8X(HlO7Z z?Nh=b0TF}gK%SKoCn!;sK4%oFJOT!T)H>{X!h1@?b&=hKG$8P;AAOWmv$5?A$>5Mo zT1Y9^=PIy3Cp$&8>Or`rQ$H;y*@TCo{qNgtX1FoB%*Um&YhUIS$;jgYK5W2+1NGjw z1+?S%+T6(>kg8t47v!H;@#C3%30-zO-+%OX`Ko4Mf?VKPoL}$WMe=`6(yzBLQ&HgXk^c%N5?mv}&{AGGeGUq*4rXQQ!A>XLhi7NgD zpn91B#y=JR@}hc2Lv)!N#(iF1&JLcvDt+V&3{V5}QT-y%3$c@lGL+8-pb3ahyF6pV zAmCm`l-%zi#!KSuz!3n)=RNCdk1kV77B$LbBPXZ~YCp~BRL{_nvR7iS>Zrg&^$vk3 zkwH~t{-u<3hVDXm7N`(iY;#+iapevgD6&4^0GY4$OmTqEQV2qOH;Y^)9q`y3MBoq< zn^|c(Rg0|>i!MZ!DY#~63Z>jlt~A2ECe4xFwX&^NHR=@V`>_Ob&aX!0gmWOc4HPN$ zqlTc+*3q9y{ouIT+ORJ}(SKcEu+-YroU#W%tNY;SkO4h;uQLmZ!VZ8KFa^?%BYim(tVPDwy^gyE8p7FpEL7gb2>d!hA-5f@cd9c)1J`u z_ti;e8QBRtsQjQ|BB(pAypV3}k-;2G^pfU=*@(I86Cwj_qi=Xp^y>Rg!pUqVoDY^O zF1mVqSkq5Qt2$yd4%2D{cV1SCDNmjqWkjVkFQJ@SQN+Sb6@3&yMd@+vyDJNF@13>> zW(Y*RRWY2?{a2A^itV;b_zfAds01d%k+q%kmLE$>?e{}%-VF9ULYNNtbgRc2}aOlfdx-b))2Uf)q?nv;H(eLX6bo8*N!|Aju`dP|R zR{S(>C#r`uJ#&9UN0e>=tg=&pt<+(UjMt_=(&3Zl$2hC(ugU0i$ zu^#aFnsJUw1x(N$g@a)W6`EJ zQA!mwe!sN4c3+>fQ>fhb*UM@hb%nW&8N~s)5%rt%W?;SD zT_n;BZN0Lq6Ua*aMn?ZEv$)naVAGw^Aa4Rn6x5gmDH!;$%v(d}`49!=lfigeOFIMU zgAdfx*$%<{60r14f6E}1izwDX=~8j(kvZ44;o9UnVEC!X{@+MO>=eD|ez0^$2_V@! zL7D3hvayq1;&!E9S=aOa5BI#KWxo=Z=FOK8hs+c>gEDs71~!KIm1WLzy=i*)kQV9} zch409c})EV?TPwHKc?!yjO8Iy6jiD!LmmsQe^k;G)cmn`kG4L`XUn_?sNLCV>;B|1 z;^g^I7CM(m?i5!wuXG=NCi3InR2PF&#X^Nk-P-ksJx3eRN6FCiy@4>+4eh1i1ij6& zj+83lfrLS~vfz}pu&W!V&AV%W9>i81(xDs1H5Qd~0a&Wq?&+^Mdw*LPI^q*(=+>_GG3W%kpouw zFAQnQ;K|edrI!tc%Jv9|x=8|-8gOxxUOLhtba#%~gKD&0f-Z2oGT3=WP$=K2a$@+V zNcSgF`n@rOgg0^ZZlMf*Za?s(TeYJMddii=?2L=k!OYjik9w`nh4!g(kCC9E3buQa z1^I}%&a}M;{C)^eFj1lN@~=;MYAJa`(TPatF;oh?z8*?w(nIXkq^HTXE`utxrHcWd z*Ix2WZ3lujQ;`3WX*2mdRMJp{X0It#f9oJRsR@l@BVzeZ44gCF=D?p1TxqpWH%Ll-0d#OossV-jkL>ofYubG5Xc-1X&;f>UYq}))m!eZF5B1Q0Z~c9o^TZwfhWIi zRYxobzj1CQ=XuvY;Tpi(gRXe>Yi;F^mG4|5|FjJLPxt+)^Q4hKo~iE#>Z#@^;@^ZD z*}wn8TuzTC!>_IHr^ZJbMWey{k$LJpHp4F`7$r|$nPAZ=tW_9#CEbi3%6I>Kzm;hy zgV%SPp6RC||JV)N?nbhsDMjy5Y?+EQbmnN?c>QwR@;~qI`Nl0l3_($?apw1T^VlJb z*yoyFxSZ$oQy?*5y$0qK;gLPTXX=}_?F~!ErmZ&(1a!;1pNHguAkBD{ddLrgf!ND2 zNC<{a=``-B=V(b9r_p>ynexsvQjlPEM&KvQ?wCn}&f3SRE2!==;1wR|i;A(1MumkI zHF9(1ZaTnJgRNtsY+T@y*jpG9-oja3)-4AO{k_m=si8HuK;XzVvTShr`en0$@s69B z%55p38ukmetD3E>NGyC&%QJ6CY0aI-N<0mA7@TXVB@W%}b(9T9qYs6L&@e)&zK8M%i4aSniFKd*ao{yo-_D$18`#908t5%mPVyJ-wOt60p8wH?qJC%R#c^1SmONjW3AO%8QD?{w_B9d zwA**%iZJ^oU%t_la*|WE=P%Z{rD&;AeJ>i^E`>ES>Kj3e&pi+WG^AC<1m?_8@auxJ z=|t+(7K%ln-^|J%oP00Ogvm%wF~_~(=>aiOL5HjHY|PH=&5*C~v+f=WAV<{qfIb;h zxPhaGIHCGM2Yo8Rx_vzF&saV%DXIm}3IeB|2k49h3Zjk1$U~S($0};Sre`%nKt;Z5 zh;fmZP|_q6TDuGhSEn<=t9_VS6m$WQiV|%v!DC8EK7d|^#XPJowbY#Xcv8scT|ezseVTs7e{tD7oX2Oqj0wu3N$|=zhdvp#Dm#cAW3l%6beY^J( z8LbuTiRJR$?z-OY(+XnazCT1{7#GdqRn%^m)uxK*3qsA>K?gv-Nm4uAN1HEeG+>{MCg@%j5&;@_cg;@&wh(p8rGeRjjb`XCW8h_~yR`M!VkZDB;pn#fz_g5K+I8f~4%iwsv(79DPympj&;#Si<; zdd}#oyB9atpS}u?_DE+JUU361IFT~cK3U!jk->b_*R2J(M!gd-R=?Z2` zvMaB6{uFsB*EhJaz+3|iiJ9fZ@eSc-lp*VQgRnxW*J%U-a}#w!ve+k`(ch%$?PA}O zoJ^9kiI{v9-qm5P7pa^qm@4qH2icD<1mz{vsj72BxzcmQ|P@3@CTpTQ%_!u2pY9TlB zS?{*eP_>64UogsCBQ}M^dUZKuU&x3Vz`3O{#%r*0j$4w*v8<*!ELVvD1C21j@S57h ze#vo_lK!3Q$}@(V)`W6Fu@Qg*d=p{dm2>Oyj5-yka|`|yra1N`6LXkA9(IQA!1CSj z2-Vz38VZumdnIBd6`C%8)4-lu#B+w4k$KXQp+}lN9&=RivrttE`1pxreh`d|4@RapwV#x%v@H@w6T$2Qe1(QHGW$H?vRvcFwlzolC)Ie4U&W)tk4yj<4fs7r{G_Ie30G2Toe!Vqawfa z%{=ieYK8bVFi;9rh;7<&XHqVBwE%eFa%|A>=y*5ZXal<80MZf{Th69Tv9t^iD$%zp2?ncnV88wQ#GRrZsWr`%|Ip56= zQ=Gl)jYoD>O|#mT*vM-XN`%%RlBCo~pCpUF%RFOrCPW%`yKy#TQ-wReg`IeWTBus3 z;xAcW(mYT;uS!Bn&b4PZpEUk5kgVB9cKxHWbVlqmJ`(=h+TPWsxdG4qaXHG% zY4_;QLhqlu@|+K-I2IqD4%{K@83MDP65XpKJZV4(FvV$!Jm^!a;?!^ z&!gfR)^Wyl4caSifsGh7k(zAkcD1a?)_29K+FI&?{OwB;aCc%bJC4a2Th5Bmh!;5* z+N~gleXoOPboUhF(^8Ii5eQ=?XX_}M8V~?iFU$|s1@A+?lC+K#BjYs{(E`io{keFh z6NCM@dnvjUDJe1(OKvA*UsLp-543N}ueGX(9|^zCYTS_hgPR1wPPQVs(rk8$`kl6| z_&FUHU(-5R@y*{B-$+??(e2ua(61%R_Ro8SE$Ia$c2WTkQeI9?ACqPsziV&z5SPVB zK6}s6%pB3PnWpwqL4K_4`-nj|&Ac;OqL1tPtak1dd9^PDnD0!c>f$)}w>CvvPaFSd zd2}z;J|?uP?eKWD!$(z{O>>KHhil66e4dF9KUJg`Cl|xY6Pr$)0o3 z+UpVf7-k`4D`Id|RXw1nD~y|_c&Jr0mb(Khe!N(1c?-YaCU2sP+6}R`?X130Md$|H zh6>)ihq|Wi?{i)jt@XRcTtC(>cA7YvnBgO8E-Kl9J3veFW19}#+un^o@V{%~z41_l zRB%TgT}1^)bLnZd6PA=F+8^QcQ(e++>V8~ z8o}2g-xCPh}yar zOp&sVhG#E=pLib}yU(o0?lbSc`p7TMK6C348*9sdc=7U46ZF-Cbe`(4Yg(3bmctl(yHRkky^RCEe{P1Kvc z2EEIQOq`Ebe-~A&t#N?Q1$o1qfF|RpNeKtwy<3H8@-pK`Wb}!}&_9zuDo@FOf*%9^ zSbgAm!z3fOF~|Uz>F&e+_`^EP={u8e9cb-8YxdTrVF>@p(JnEx(LJ3-vf_B4paBB~ z^^0V`10dHf&x}2wuriM{Z(m~O*|Cf_2=$SbQK%a#ILL^XbqxHh&FYzl|ZiRcv9B0!^0}5y6+Te zlc+<$m*C6ONAWa0v?u&aN3Q%~`>Zd2FGu^!_7OcQE=Kzwp)swSGhoy!Nehh!LieSV z?I=4-b}8TV8>^ox5pH`;Iu2r_M+S3{c1N!ah`=c_G#!%j&}a`ax3rZ=KZ!?31?e%vDw_biB6Z> z{ozm5cW1jWTf>GCjMx0Ax|7Vva~Di`SQL8xhwLI~j$jmk#TDdDVU$y^lbX50UAwUF zVHWmT=NZz`J@f{ix@A=?=7uW&)~;{PR%NA&5Zign`%@@n zFhQHJ7^2vV3Uhg*5SQh4&OzDAx~9z>*y%r*i@{>Ee0{zv7pp2>GBQ}_7iCr~w%vHO zF8|&-btHYf2PnFDSsI+qG9cl~zkQ{jc{@R1TBXUVPF_6U~3H zptpDEjwTO7Qe_Y4d4IanZC?RH^!T25f5!Qt>l+pjlPpl_!blBQ8BHNjPBvNxeNM2l zme;-h0Og)S51HVZ+*u~*8Jfx9xEQ;G!`OGB?p3llU$wJL6DbKE4)hv2-ix+Kl&DgC zFkSiJ)0fhRrS@4J=}~Q^pmd(A0Qg01$0GmO12t1vGa;}r>#qJVP6n+De}tox%gTx`dKMtsAGvZ1oo!O`;1I05ZWoehOIghMQen?>-==xwZ@5k3#mHZ2gcD zb}=^Xj%GF|P_g_JmdiqkKBc?0xG{KgX9-CG%Iri*@2(X0GpN0#@*uclX=QU?(2@-n z>mDnR(CD4;yb@E_5>93$%IP8aw(S>V1l4%Q=O^0fY#vT|s;O8c2V6l(VGTM|Ag0OP z(o034@@0r|s5p-GBG_Aue|oCd5)O2FEP#gWp;3#0pSfz_PmaW1wY8^HA5~%>fO6vk z`9iLRNufYS;LnJ!W?MfVnU7>=9N&6`S4NIH?;3Mf8iIQg(hZUAA+2k^IO4DUSh7f7 zP+En-iPYLT?RASddVp^?Q>zWuVjH3v=LFdw@I?_*kzmGfD|?=F>dYU}GB8A)X;5a{ zk5B=M3s>1VgIgeKtRK5MO~OIvc^sfZ=W~9s*%f5~#~>kd+hO>9s7-i-J{{PpbsGMc z9Mv!mIkKf|dI%}f82ktmhpzonQgY2LK654m_$_7^PDriGMD6?^Po_vHe&tLB!GbRB zkUyHBU7|bciNVZPhps(P^CfI^aN z%3Uf(jKENE->5X_3@+HHO%emV1}An)=vlgtkf#ihN_if2zOh}}3=t&v@$tYHrn(=7 z^j0a8S(0t_&Dg04MVaEMGJW1kfHcAr_BB?0Ivky8`arSpRBp!XF`ePOcgwWb7&Hb{ zIu-tIz42Zqu3r*JR4Gfk2ydxUYC03lYG}FC^e%9blU$0%W6LJY+(9^}Hrp`7{8>8# zd3b|mkPHO3327wq5XW;38O$3=`Y-(e>u){gI4O(hjskugJxnlIAg%kUcbx|JdcdUj1mORK$257-!*NqMiB1(W&eN;{o)J;czsO z&+MUk0C()z4gddxKh>fDkO*-wlP_fiVSB z8_eWxGb_drw#hY$bHYAV`3JlfEFPcKlVYdmxk$%a?P&9{O~yveE<}v=#1KE{iU4L! z+yT<9D%^y49&)=ZcHl+vJJx^J+D1tXuqjFzwF1ovWh`ps6+soV_K}{nd~5byu*|%H z?6jQgM3AYz8$9znE3i>(@Wo_Ltw>~q?)WNDhD{7flV_%x!tc~Ix&|$Iiq7>7Mgu`} z%A|X2yPt|f1YIaTkHQlRPlGJp2S8$klflUt45abEA3%s?>-|_7jYp)#dPi3VV-?H# zFi__qrYgV)9zr0OssAkCNvzH!yH*roGz%R@z#0_FcBtFcP_k!2E6xziz%3h55R!}$ zrzQH&rPA};2q{6*LzE=?j4gXlOv|n8sC2%zYVzt5NzMAIZQjJY*SqEZdV9TECx=}} z6gyr^hu8ay_qXe4wR>0A*W1h6Onmcxaj|=~ysql&L!n%4&c9e*zI}bWO!_}u6aB2{ z-rZjBF0rkwRGVwi`t7c~xmh(?wvN*tZrGu(mmI&7%RMCz{IHk#{^GR&x^s`GZ8MB4 z5-=pYinpMGT~*2#2lf2TrYVvy+zaO|!~aTJI;_o$mH9FSGh8txy16RiJa5;=lBPJ> zVToMjyUKpkAs69No-7zwtM9a>awRbt?&)Im;#Dv0oN~)>aMee<-bA3h?5}yk2n^Wu zl{4)nQaolZMygY!g-e$JA&Xe2D7YxN>%u-+OWKetaAUKNfapkaOfdpj*nAxjG}=K( zILLI}(XbZ+*(fQPDzt}8ZdU*gcs}3BnLu9IYqw}G zuJ)i0iWvMO*w@7@oQQDeG$X=g|u0Rs3GzQL=seu#ch`jI7 zl|MxLF##SVR7(Q%VjyOhS8R?J0+R=La0F7fab@nedD=)XZ&3}>t=lyYvxL02LNrJXna`d*wpMc;DZVyad=d#m@IfalIyKUtw~RF zQ1Qg^v%s(^w!q&5H{I5*ubv2xReqrc0a{eQJTaxyDjW%j*U=fU@w2>;S1`nw+NY;v zQ-Cvz;jvD0HmPff!mOS+R>e6x2ZMoz$O+8mCq+owh>;y*7`HX#QL2IJiQzTcGTXdw zxx(u z-cv(0O{5xdNABn%Sk|e=ED2mwt;%sU0DIiF$wJ<15`=g;pVVCuEQO?u9T|2B2yVeH zMzOv#YYT~cVr2DJ*?3Ke5)R)#ovgX9S zHRHe*4n(S6)mXq9`_8(RnGP(Zxl<9nCn9MA%;U3XY7Vnqr?AAVDe+q0VBLd4HJD8uf_Gvgc@&{uBJmsw=il81^ttKg> z*c0#JeR2#1i@I_c`N^=OiCyw-FxB@41H~iGJ-yH8nHml`&!!0UhrA5OT}{MF3!0hy z=qa5tuQR9fUSh>jgph`O-ySd#?cgmXwcK_aIj1FMEgkt&){s_BetqmpD+xA%FN z3Y~e-8@+~3%vN6vr~xU#r;%|dTeLDe-ZqDo6!)=_C_VK{=QX7l>$A9@6$SY_m{yGI zy6g_uMOE#rajqMwwoc>ZvqRs@=3EIKmQ7YoIEw-m>6j)@+-9uVr+T9(1TCQkT!`2% zr7ed(>Vx%N_s3-ma@QwKwdB$h77BTNwk&;ZaBUYI|A=_eNz^}+V0P^-ENvP>LYesl z_n6!swj*qoMn$-ef$V#f)z-K-D~}CWO6{>eVWFQ7QORhkqPbsrmnN!NML2?9>Gbnh$7OcPnOT`9f0k$5PhJdgnF0`sCzi`UwPlRnS`U92};R*_nG>XOg%~g(cZL?jM)D35*z>$P*sTRHSATz|WXSjeT*{AJ&l_{_{ zPHJ@NNw-z&T}$crn)2#VNPg4D!O1|+!0mEP{r1Bbws3_-q#=I-vOTWIxWF!Tna9!5=hT?y)a z-G#^9E$|7%R=CtcB53+2LGN}dzfDMfNB(#;Guqcauta!DvOPE*K7TrPyse3k#sxpRl3qPQ@{|E_}jg*+yIUSOZ>jRc_U<{62Gm^<0Z`O{(6_C6k#uS?~N+m zy*sa@_g9CPdzp$`@2(f?bzGevsA?530_)ON;#jpdmYP~62Agc%XEl#jiy{+27X8g0 zdO|_WQeeR=XGir^PkAk5{ZVU(DE2|4->Xi&UzbXPbfjiTXk`zRMj_9n)R}_vPfj&>wX6Vgh~m zE>B?~#QrX`R*c4qDs`bZohkU-T9beAOE|8=VStoNxUhn(RP$z}r80gn|$ia7OE zn{K<6;rCgjjF#}5AR^I-uJ-JZdj`hRA1#18N@{99^w{z4<#TcWCWF|gwh+vrRs3cj zWduRS*0~WavLpFSOx~^qc@1hw%z2^wHjmQ%-hNxWt5(&*x)Ai`KkTE6;&#n1gS-cd zvy!(3Eae)ghOWygk}=rQb&g%@x@LL?m>F_F6BJ2YiHuN$bfdqgE8dAgDJUrb1_1)Zz>VwauIlRYb$t5V zxxLp)-VsEjtNNVGy}$2$pJy#FHxLQxGr17jdNb@x4NB~$-Y^(=NIcNSM}@?`U-d>_;UYnq;XS;EwaK$0(oHCnbT4}r!> zhEQ+^H>?txFq$|rlr3onttssTF##~Y0NmsyLl7?RhuSe=!Vxs7G)Ke-P#!erYvV+h zUblD!{iY~np!=ei57aJs&cF5Zbn~aed2;ptz+%oV;Swd)-TwA*=Iy)upKPQ0eYJVM zpJzA!N70FIquxsqBAd8*c#wD7yRUDm?2VM2;IG>MH4(0R`Q#FE>D%JBE)a(_eTqI+ zyx+?n4`Cb==~e3=%xbsF4LQdT6Iuzy?o$8AGnS@{Y_FAiPxt{zc18`<11)G8lbr@% zRy$_xdVH4aB%f-JrBV&=!Sbwb(`VvsdHK1P^jci*;3IccnW;{zXS zryiq4uwg^OK7FHo>SFg5qikPnuEeE}kcH2Qwq$B8otqD1bwQ2bO#>ak>a@ju61M(l zv<);$P|(q#TT?K>ZpzEW&_~8W=cR%u4OvD&=T+5+{L5bRxG=OR(4Q9+A{DfzBgps1 zg)+Tf1Mx}YBgSS$_$R)LjFj3?s85cG%cL`ysFNuEdB@1i)_+v62D{PK!A^QmlMXFa zE}Ik=)PG@U#mdasA2rTf(;QqoliPuV0r;)y4~)L@fT~1H?@M+RFJ&aQ!`5Ru=6m}s z9~Z{-Q!YJSohU{}Q8AMyac%6Id3#?i7qsA8cPN`;yp`@e4imGqJI%yF;Yv-diB~d; zTP5%{5qbDqF><8yKzigF^a%rHYp9Fi8uZ*j63n0wFOQ&npvzCzBI{9CRW0jI-KlDy zFm^T(n_F_B8r9|(99KR0MFS!EPUg(geWY7B0^_5`P)nq8)Ov|zpEr}RQJf-8Ya^4{GJJ;~=H7^oy<{lypHF zjUP;f|6m`;;xnqcY}8tYX6LP3dd6dE0*QR&%HHfw28T9P*aG$umU-$!oo;~V!6)}0 zq0yZUeCUL|N7{T|p7s4&xHz#N`kq$NvxMyOfCRIPEKoF+nXR~~>e<2+6A){HAh0l` z7Zi8^Yj~O?+i={E4Pm~+2>8U)y?(B{V+$AT0$n@BEsnK_(KknH=(0LSI zt-3!k2ig#gJ7|Sdu5Kpja;6y!rVo7%xTN0(0}o8T3NYGn2BRSGhc;QkKKmQJvnRtj z#Ts>3EABuC)-z@dK@RuSF__u*3VzS0mTNK=R0cvmC)zDi3$syrQHJIGwRZX^k`haq ziLowLHSTc&=PdqP+xDCYBo7pqfe6ohh0Th`4Y#BJ$^kbux`!kNXN8=UI+0kw&3kl; znq&^Ev%X${1T|Cc0Pq(DMguqtyDs;Vj^zTWJP#-^`#%AgS}#>*y5(6~F}ELy5_bg0 z^G_aGy@7S2fQ8f5c2LYYrI0tVP2KVdBhqQi`hrGB)up~o#F&sKNwt=~99?$L9FUSS zBqH!7R&{|vE3N?e*g!9vg!eyH2bW=+rvjO;J4le!r{LK%c4|2cTY%#@9@z?+?oqC6 z$r-Y|JEY9?OA`m6LGhHL3$wB|BfMLSu)@+jWh8j4L&$qfK=yth9ZG5$%;Iqn&9My0 z6_X6)87Y^lwhtMTsVtk|32iHx5zGu8i6r2Ac{a>Hwy zOoiQ3z=5;|SED>3EoYPs_^iYk7QBe7g|IKVt#5Yij;=x`VJWFr7EIC(37o9eCQqYxhf;-Es3;CHNF@A~EvFSCr zpdDDg+X`L(GU3ZiMaSg3G{SrTVL}d`^t^ zf5ty}!dnrDN!jn4pP7i~uH^gh!z!EhpSiM#2`}QxF5?7Vu`fhWN@CbdxRj3~Au35V zqZ+6ZJ31nK+|`_Nh(mh5+?BiAn*FW-yaP=SFfY^Pm?9cD?72b)uGu^Ox{xgNk(=`f z9I`fT%D&}6ECu3+f#`@>wCu`(fl{%LXv;d6NK(i6pE#~_lI@PlpdFh{M`pT0iG<*r zg3r&hkYuv1m!cWd9jn5$+Ak_)Cmbqh1*iOE z6BxamL^Qpz)cS5|qr@%u3=4!){;J5^Jw9BT)3(HLuX28fig;eG1)V;kV`I`pH%U@V zd_>O0{Y}?6M2^kw+orMFlkzL>F0K$eKp-cup504jRqMq}G+$$|sfN}0-gw6`IfjD7 zJlk;IRUt*tSyR2QDmQVQ;h}p;iy`$(2R2*Bq`PfyW}=$2~5a z`x3bqAvZkfw_T?#4LQng+P%=wJoXitu>;!-ja_Lwpgh=k1uG9i9jE|^R&c6=huvC; zROoR4#`0qAC>DTcb1<#QsDoH(2;8c`b9M#eW>t~;x>+0bScWQ~X5@{*sWa(=BZ4G) z&%R+q6>@)Y>&X5b614at_R7QI-KWiD0|xw4yO?!TIZfi2Tf;J0Wlzx2mfhxWw)15a z%KP};6LC_7?ScLSn9P^GGi(1r65YQGPw!l~zHT(p9o1H0q zBS#!@?&0TBSW68a;i5(wE{|M%21F+A%bP3~ziIHzJIZ#y;6Y$)`Zdl4Y77U!1s}3< zaeK8RqTcSdaonwMwzq+Bmy%4a^jI>%%5M&9aLMDUsXVi{_f(fhy6Xx+vf2^vKc8RXE(3pnN6#W7*C~Fv_-NM5x zo{0Se0H(|QX-cs!+-HEmXcG0opM4AI=<@vj%XyUDy=E3ntVjOAR$^x@MBho5L{oT< zCXicVdFxbj9TD3go^Wla{{DRxy1EhfdO#|%)ZKtTR!VxesVLkZLu%{lW1^ei^I%5# zju|0crnrM#P#b7JQIQ)tLccm|3Vdie3rnEjBsJskdd>0>clo$p?!pbV9KmIFZ%n8! zMF%@)jYGT9NhtT7Qp6=(Wou<13lEYL6GbStc@q3tTeJ!}{R$M1Obd>84d8?+qwI#K zBns3LWiecIUcgLGd57$qY<*%RWgLeCLK4!|E&~cqf~oIzb~s4Ygu}{tE=*SSq}B)F zX0@q=ZM97ORU@u;>m7BgT<(I&UnS$Xn=dQ%=E^7$KR?=;HkP@UnlnS+HB6Xm}v5+2kaATo2))`aRvd?cZJ*YW!6}f1Z z>Fb@F2M-uk1sMnues^FOi(F{CHwwZ&MSR01A~~mPd{m?D6u^jnSArm9kbs5IAXUFj zq(Nnz?IcN!C#9&);NF9?2kO@h%4|WjUDP7`{Cz>q`vK^*nMq==@#y<@-m?EnpXv}9 zefhgeQ>=;JA36VYZua=knl@~D28Ui?c@MQ@?e%nnz+ybbK2rDH;sf!FO$}eh?7XkE zV_B>ous_Hfx_u32r>jn*G}nDDRi-DhM3bvm;6^@vIN5ed+PhB1_Op9$+;rhKlSgV4 zqs2|*T3BPID`f&M+^&>W{5g$kR7>k_gFi-Y^AW37VV$m3#Jsr>w%wtQ;prC93KW6F zgkD&<1+6{AST7U)K!y+$p zpd*K^_%W%%?K<8~lDk*53-#@*_0{UOL#N%`ecG>N?{c@?72(y}C|Xx=Wl(fF>(L_) zbk*mp9TM$ZX5;-Zew$~vc}x*hB<*P!Ts+MGaIe`(WhP7=UhnCwA4~S7)>Sa z>_&K%r!DKKG>;4OIi#}_6I6Fyvs8?!9g6ZL*A7q2vEqqcS-B`Cww#E8{rO$NOM?fS z)IyG5Yk!DuZgpNoWtis)ekazts{%};-mnX#WO|)Nc!#lB-qr~p-PXh(TIO=rBs56F z?69iRJwZm48KAmSy=Z!5Q6io<)VA5n6D=z{#p_7~3}_c&={DfTX|e?e^%Af!)(`H; z%EH2oorVZs?}TGPq`*&WzR~F~?6#4b-@b`?D&;>YZ|a+ID97uav80Y)mlqqkdHrko z{!_AkcbQ#nfPg<<>-U?qT^IGcWqC@^`}Wsm^2Xpb8GQoW9R8d8?moQQ#+Pxq+)d-4 z`2DM!jwCuJ>kJlj?|->}h|f@1P6{ zMGrS45ct}QrfGy;xyrJ=H7N7Fx;JA;Pk37wB~m1m!Lt_wm*p$v-w zpLtvFy&$FwDSbRdHY3edc(31mj#kxLj#DBK_!U!~Q`j36yKE6$hAj+(in zao06vlSUj9B2^zgYBK#mlyB$_Yfu>#Il%-iY}<@-1)j8WQT#@|<0A^$_=et@w${U& z?p zJ|wT##oa1ypI-4FAKg4HF2(TW)-LzW?obR@++!8#ZL7qm_t=iMk<3k%ZEi+gGHg@= zN)G@hFpVI^1Wp<@dlJS`m~~bfAg0 zPNi7F!Q$79{MXs0EJbfC^Gf&R8Cz-zs1Cyf=)Vfa)jY*)zoe18lQ?j2LkG>&VQ#3;_Gw?wd8z@&lRYGnLn%r)D)-rW+ss041>YYxXQKR5=7(4S>pg3tw> zb~qHNEi*@xgk1&kszv488L`JTM#<=G?)Ei5aEw-gut4S2zskfn& zvHPLNo$ztLP1{D@hS6k`Yt(D1L-!%xNg$;zDc^1)>4PN1aA4y@7kPTeVNER5B_7S> ztph1h6oGI_J@K0{Bj!JiH5PIP-c zZkI)m2p~fwQB#&fflIzs0pJsqpvZm4rArntony(yum0X~x}AW3qsp7(aej%_NeZ*8 zdRy(O(p5JZuz#M!LK^Qj^`(}C`2n)Zx?XYsfLOfB69CoirntP~mUb)2d=c|vyMjvJC@*wDF0FWLK)|>T`1cnEnWa#EY zF*AYxy2sv68=SKYsl2*q2W7vpPF#N?&S8&YWrx@_FTGhW@ZAaPk)8ql{cPxuXkX6G z96!+YzGU)mQXX2SeqpLuZJ5bwo=+gl(#Lu+Kjl|Kn{uFIwI6Ge@?dzPkEo9lW-g_% zBSSjkV{Sv6oIT(Tt_=nw&7ywm$^t5L-PVY?vB2^D+EY#0lgFSzgn`!4Uapwox~9*# zs0KpR3ueNg_6CB9{}8rD1K7FBk&+JKy_AqU)PX0v)hy~Y6xTVFA_>9}A_|Y2+bUl2 z&CXK-b&3!*xDz57Co%%)k-a}_7LX@%$&2Y+S9HoNtUkAd$9keoHZpXRd+fpcg9^xi zEMd3~)h1c+TNnA^S4wIo+{PJ!*eR2@2qZKoFwWB=jAoS-5gkL0hSY1!nl=(&KDZek z?EYLi+QU09+84gzwa{W=!s4G-HSYO1U@SW7IH_Eo=V~VAsG)6rXp@HI(^<*^eO8-vVlEWOZqxCla`Wrb)Cbo73jQsx@j@kY7@uTDUc9kEAhk< z+{3!aC$2kkUE#%+{9&pptESPf%^o8jA*J@}l4Rq(RNLif%Mrlncr1%O-un*xLc29m zca+OPTksyO7=Xxv716UsMnL-}PXw<4s>>0;NcQ}pDQqM_3ZQB{UJIeh883G?0Gc(G zSu>NyF<7!RSImgCoEUGQb~nnt?6m8Z!iYf?K3F?d6GkAoSa1Ot@c|tm9t!rm+8SGr z3@ic`BAD<;cTY77&-Oy=xAMoZV~=O_}0gq!_(5KI=BCWMZmUVB=xEt1VS zR3bw0uxjyD_eZ=jkbJt7ym3|&K$t%Ir?PhD4mz5=jD3%(Ox>9^Cz?4q0*oK4U;Wb7 zDd;@%jR})&E`0#?`Yrl_teDlpL+?iu^0Q&}kUYMNL%FZ_U83!ME{vKP$|pP=xN}Px z;$X;?vRWJhJ(9y3>O8e~-BcP_Y5rQ455+TfR&>Lt)DHP^Hgd`RLOUCxn}UJ>F2|VwLShitZbcm za+`0XXX1qZ`+ZbC&L|r4@gAk;)&7ugNP;)wIvtBu2?@D{Ik5#s)L}q5jrd9s?^R5( z5@%JPs1s`d+wWrn$NAl#mZ;mUPQS`_kb01&*UF+^nQWV|4PCb7UDsWQ`$esP-2Xv* zhjDNpRhQd!Rov&-RkDk3ws*@9acoZ4<+b&4@DbSlbg8`Jw^7Y}<3?T+g-USgk-5*E z55wC#%SUnl$r1UQ2J&5?8Z%?tqCuN!7iXc7{otRRdh)e)GSHr!Km3T&bRvyZ=CKcF zkA}RAUhDlFz^FFTrp{bSgYn7fx$2Ll|7Om=&R*D4SOfpxsQ*||e`miL{+9tVA=twD ziT!s9sHcCk=1ma)mpuN3u=*}|UHerL_J< z`Adp0gSF_qELFe!5}rUU{%XB@pl&ziUu3^K)8^~;US@0k!`(VvJVUE@A6?(vYq$5W z*T3KYFsUCbFidw`}$?$c;kP#;iPe@zu_hSrZ+tFb+ti|HN7Zy?+1elV_*y18Y9qsDaaX51*VUZk9eWe)p9vn$~*M z>peIj#L=%-gMRZ@W9^?PHW2yI@<03%wwdxDM|a&f|MU7(h;I@cr}t&~C->I+!}sR; z&p?~(+P`Zr7t#NAW5>n!(&fJVRNtQCyMO(E-_~yutm)!+p?S6X`p(}jR`u1V@|#2Y z)uy+~-|d%w8?Dn#`j^qC)yo$*@~XUZ?}YsN?$X|>yX~vZ_M7|9=Cb^ueRp{^zwz(l zckXp$?cZ^zV{`ENPDy`ty}Qm=`6^y@5mmBU+J za6ZiB-3!o>+Isdxy?D-Z%x_+s9J9RYMa`57P0Pz??X~N_K6_w3dan0zvHg&A`mHZL z-w9FT_Uo7b+T1GlH&E5&ABVwGy<6dmi>1S9*n}UiS+6MDSBGk)^%ve(*YRDxNS7P) zu3OB+%kT&OH#aN!Z?Lf__Qsi48&mV3%Rt!P>3O zp0w+~{^R=AsIG>{Js70QdU;JX^=VsPHqY8Y#rCZxU4B&sUV+mK(gT2l-astk-vIp;=_b+ieJMEp;z8$ZK*V!5k<@d2*i{Qj7ofJ$L$Z6-hM$RQtSU@nMoQnRb?=~#%>{+)uk`>ra1%;|?XFUq9oZ8WZWpC|(v*jxbjB=NquYG42< zdF8~o@4Cjaf6v-)54eMtUG_k&Ru4;U5N#MUa#P&xH|=+wtiM1kEdC(YQyBF6;X_+L zji>T+>}K1&0Nu_`s{KItTrSB_#&d0f_<>%_iP|pkOVj*o1Sq=FhaBTXb9XAg@yh#> zZ@<@o&W$gd5YH1_iqGx+jhr)7|H%9%@}+@$xGor$HK}>t?#@-DE&MlL+SF{{Ry|vNk(|`cr%D;3^6SJif4mh`Z*(TcNCKz*6<|ST zr)X0_k}e=4XFk zhq<<361e(!w~6mBujq=!=@03f#jDTJ>yMacxUVlG(XWstl{`U&_ZkwNA*W~g znwnV4_3ONq<`CK1QR@<8H>3iYfg?Hwz_|;feYV`_Zv+$Vs&rFnd26Y*RY{lP-pnrxHD=PB9@x(&+t-Wl-rrs>4>y(o$W*wj zluPjk>7dWj?R8WKw?z`JYH&U}ke`a1kQ;qAwn!VNZF(gedfn90`|1ar(ZJ|T#fiuA z2jy-MVS*&3YM&l(e7s4o$yYkalc%C&S+CX42dx=379vw$`>Hr`%uo2dtkkUZGyOvQ z=;}>oI&%6@u`m#qF2_fIY&eR5o!ZdC3o?U{3(kn-;iDBb@mJ9L(E|b%^Xy1 zBA@nT9NgQ3H?4YVkJ&>Y&^PjY@!$+lKng{br>d&}-O(%xY689UA zaP(qmmxm`kl3VS`I(8=>1y77ARX4ERu>|(e$!yP}P)^!g=udmH$c$hT_a@%XCJ1Qv zk`?osjrV#fe#H8ND1qe>6*)vL&(~OFTz}7AUL(W-Qrb zN>B40?+r4v>|j`&Zz_`7auV}6)LKJ>@YC9P(xn7Y9_TPUBTp(O95En$QH`RkLOO&I z6cn23-&$=Qe&fnNSV9)pKw$7o|Br%;ORAX8<}-_A*LP~~4X3{f!B$}#7lSFKw;#i{ zSo1P&r+E8VEf+*3^rC-n$NFg6_stiU*4*o3%|BOlKOmD1?|b5S_r_&AVYJwO1S)*H$gO{Yw z$&Ftp+^Ri{G4#)zn1up{6&J0f5ak0CzHpDPl^7pg^oU7uQUVl`R+SLP*?uF}+cHdf zIEbRWL$nSdH!H<*vju;3xTE}_|6yaQyu3^)-nRKxOIc!94Ra0#RvCXN0;Wz-Ip?eL z-i%i526Lrhmim3ut@FxI&8w8%u7zUg7!8Q671FQ9qCk?QYk+0CbPIDRVP z3eYDA!9Ju1APEVFm!b))-04kVXjFG&Evj!ln7u~#AnR>)O%g2r=1--0aKB5Lb0O*jTr zIc@VXP892yHPu=t#?1gPlCc#6qZXi`TpGEhh%{16chk73f;Eel8mo0a)S!EFBKC$# zZhq|OO;Psh96FINa)l0{xRI2yV9Pi77vzFbKOP%wib-3-%%2(@%R^F(@`~i9H!0AJ z3LDq1ZlgE?1%?tLEVA`53-4}{ygpfla=uxDWlI*H_q*{y?yl}3qFdYL<+jcvdoN^R zdbRwVgX4io4_A&V@hX~P*NVk*G>)5!TI_A2K5>z*@L%Sr#*`Ckk*4+u14rAOhEJC4LJ7XqHmsO{gG-|LUq}c@ zGn&3>2+f?YQzNoO#E2nPcZ@c3HJnPF535$@UD~9yJUVNOg@k0mvYtRf?ndm-lum|6 zMmAKnDs4oTRM6%*>A+(2z=%%O|9dwz0=Ap4h@6 zse)7tMXEQgwQDpXyCHVTBa0k*@y$B`eWN_FYJ#4#I?ds?C!kn^4ee*(g51BcZrq zO$V?b=P^6pE-9Hq2nWfw>(U1Ny4yqMMEPE6!x#{+L zJg!db_=?WSTqfBOf>2EOB{r8H+JS0+pWyon#L8T6dJVgL9H5gmPlWBNsgsS877VdI z(?z7?aoC^_a7b7a%GDFzSu)qGOnAxHTqO$Jeq)03qimboS762X0_KyWdf>Nu2x!&g z{2O_i{j@jyt?-&Kbl%FzQ%ZB@dqchGwE3{O?J_?c3$u^v6(?B^HYOF3lt;qJ1Qn)E z_?;9I5YN=GJeD1!fwV8Fz^M83Cw8&(l~eu^)UqMu_nyOKLs9d}Z(ISQApC7PJ}Gsu zraGLEL@Ev}aIBc%QhHj=27ox5Ze|2+^M~-A8cBe0VL~9@jGKCv4TC6T2OQ)b4`p@v zSUa`0cx1EuLlbREpEVOBlIz1Dgx9hxcBtd113WWNG!k&tvkG>Yu@Mam?>q^SQPav+Z7p>+VvUn4N zfF#e`-Z%fCeJ3Unm%vxNL=xGhQoJ?ls5y3_gZGh~YH(`(wOe`~vf#JkLU!v7 zTYCwOud{YoC5gSC32*JLDTbVv$Fk!bIY}9Y+ zY92n9>rcA(k8AmYgQxpOzWTTM!$i2eAd&N5^UOJ%Hk<2C`t`j9b0rmj-M#*?b3$v!13_r+d*mHzGAeY6qwb9xXjp)^LSl-vsKYQ-E)J*aQ1^4K*75&l7_ z%VT7{>oExouwVbC)dPuEOyaG;xJr>Gjny(XU-{Rm(1(%ttJa?23lQEYADN7(M6&r* zXTx`Ts-5&tzi@va@MRu*XLtU_aC&Rg&CgC0b@EEre&UV4_#@}$#52cJ?c{!RV2>aw zJzJhb1_*uo5k{0pgM2)M!__}aNZcFlExXg(1bZnE0>iUk&CG+{TvvLfJ(5h{N?%e| zd{xM}*H+hm-EaOgr_O!-XY!4-{a2};7FWytx_y~%{;AqUfB3&@`9E02+lBal!q%_< z^v2tSZ+9SNZp-)t4e_f#iUUA93Q6o9WIyz(yM<)+0H*~|^Ic;gnet7OG;X|Dg;?QT8!ceT6s+-&|oRV&CEtZ;OqpJzm& zn=MdjJ-B!2fN(i@tgD8-pCc|tluTkvmir^Z?^fR?Yi&p}J1L0~GcPMA)hg}}eX5FV zn=i<-qs5`Uu+3T zDE9h(NlE(L{()DhY7LNDdE$v5Y@Y|qGoc>2lPS~=B@ln>p?Wn(aieC_ru=8IjEZp$5Ku1mnYBpQpN3_%?}hKvO%}db{q*E+n=G%g)ge_DX&wK=_M0T-c69q6 z%Wb$jU;K0szP~4scY9Y&?^b*7_tHl~31V9P-J!T_r`g3%DtKqR@2*$HbB?>g2lqBb zTyOh-8TTChU&@cqrI3{ALY0i!xp|^~^d#YQlwLTu7V)%)-B;)0QarU|pbtg~evAYC z$V!h_qH#l*t(ARNA(#Yk$L^NyGRuvVl2s5eqDm|iwmuTDqzVUbVw4oP8#t`Tj(1lW zk&`GuG0$B`@tZ4T_d`RS8f2=*UAMTfCp{{HjyW2LL0}7rebJ&jVCbq1Be(mX2KQ}q zId*CvuNIV%kEYcw!Jtt8${MBq%Tw-k+wW=I=u?J9N%>8b)>mz%UqM98o8skzvQlne zcJ@*~TR;lie7mp8AFuC(D{YYvHqy_mMOEyT+tcLH>9X7ApXffw(D;Z~ zpderUX!oUiwOoX&)$X>NWve{YFmRtNhL_kLNmpReosb{+@4t>>@MgwnyNf# z+N#K`TvPq7-BPGCqhl~ZJ&A_7MD-4wysP=xC#YJ}t<$S4Sm8}2%%fpU^7_cc|Pa2SlQbL(N6>@!x)K;`6}CSr4oOX!(SKX zghbvN$s_TB*xeao82dvcPtx__@~6$Ls#h0Vt9z+!z5tr_?zgd-z}Ng(CF(ojwUY20 zSbw=c0By@AEHtj}RQmz6z)$vRGjA>)yUVmTpDtsns|VUnj%aqux$bWYe}-3l(nu?< zfRPDoRaa9c2^plZsY;}zoidIY1--ni$9(~PIX$8r)R}3RAgj6NA? zGZWS(Z5H0X*b_}H5M&k<$M;TFB*9TmT5sKKiZ2@d)~M0zarNALEbsymqz!L>=xsCl z5p*pC``pat{Gc_Csg2^ox0(())!D=nyBcO4yBg&KaQ!*F09W$en#4pNm@}MRvE+unE6?Re7q2SEc)l(+T5{gH&SAyy*=2tn2 zlzse4Y$hK(idO-EL6;=H8n;Ai-hypU_xc1w2sIZNRtQu(u z?O5NJs)rG;K+VFHVI;5NOfCW?Q#@hUmtYs-ZR_K#?_`WCK$t7m?}TqGr`I%~`v*2w z58GyP;(L)ZalxTigP8D+?3oZaayy_gU}0ora~T8NJ);6eb95ZgH&^-2*p;Rq*S@MT zpwWxt+!QB0_`5@S;DS2TCPv$9B9B9t;e75J?$lN_q(z1kob~$ip=F|(oh*Dm_D<(t za>}JFtT!ho=0uUE-jD+A*gJ9Lk(bljX%Dw)krn%Od@bD7)nb+AgBln)M%6B__pcNY zo!V0EVs5g|AOZy++nZ9^9kqsFV7^P#&8}>~*#pKQUnWbk$cF@rImiuUZ?WAg_ULOV z`ZK&4@}ocwW5M7{scuhI<{0ObNT2HhoqtmtVe1{KZJ^g9O3nH>II+jlvmt_G@N-hH zn`mbqXOEy?dbS=1J&|)|ihq1SyHnE{{Wc@={~N=wghO}J8wfQ)N*l41%PK~q%-SiIc-6&$Os=h6gicL7Hv;{L-L&RBws+t9yUlm0_ibosCy8YZnUu@2B_PsCPb67 zjhZE0pX%d&yQ}XCAj$0tPe@f)_e#|?;jx&6dWtADl_Q?=i$Qzao+#Yp1rOa@I~SX} zJn9S%=;f6r)W52>Ep5NP6R;H(wJ#jsk-QVNuWRG7)4Tp-1ki>9f>?IVxfVxZjR5k%@$kGcBIY+8=*Glke>dt;*vO|;qs@SKjQj}7 z9w2Llx4I~5?ieqFtXJ6Xxb9%;3{K9c7PtW-%jRs*JM~V=8DxP`MmAbK8JVMt zp3Qt#r)JOu)||~x&!TQluo3e%s=(M2rkPiWg4a5{bV__)2JF5JXG=}V@z97Vs}7#d z`iv`SOdF2eWe0_>la5*h2`+7r;w1{ev&KFzN(@PzA!w|~b)F|OL-$E8P>4bWrzKg9 z>|@Hw!?iOr52ct=uVc7!L*%oQz=HQ-+6fXI46x@?!c#q`ck3K8lj`2xRcs$vGE$mM z`FK(FpsAosLgB`gzM68`?|G#$;QuxB1sckLSVOPZV~EBGm=9j=^1p3n^O*8M!J5T%nk_{*t^^T!XQHLb zF1PZA)Ej~?E3Ua?7Xr!&TX6(X!H6cf2S=FZ!kWAgsE-{ug&50d5F4lOPKP>YEI zB1c!P_>fp5mHx6mV221Dn2>`?7n6g;s5Cs#BC;(88rW{V8%k4ffwtTiO*LWGx-qSJ zX-o%Rei8V##1*(hmZz4EN*dM^nx!^+QA)@+JLU%lk-A6N`phfZx{_@H5X><8*IOFftd{bzHX z1erF19WxUA_RJL=&B*{ReEl=9cDivEIKzPwfFhV_hFfaWq#S6EnR_y61?$*Oq*J25 zYEBy5H3`A{ATaqHv= z15=l@V#tq;=W<3w%PL@11k%Xw10v^EQ*yFs2ENnN_#l&e@P47kE^a0&6VOk42syEl zPW|44{!I}4vo`Qg^bJHy^UHe1`MoiH~j8C_1a`) zmCQb{j>pD7qpfSnREm@CMEMe1HTkbQMQ@%I>IabI#vdu^pu)x&#m$3yz_6TZXQZaZ zAZcaFooZd_OuYg5_x{P$>Dlwqv}HZR_se98f6iJ|ahs#~ zO%F;j4*InD4=pNgzm9P*tXnHq35Za8rBhxAQDsP6q&P%23@cKg>pEX$!S;#bJ8X3) z`0P@$t1OR+tHO{)oPqn-)pO|`{!+RF;8L+!tJ>l+}1aFs9ZUR{Ni=?|2ApsKi%xUM)-;q z?jsP6-66>rhg%7q#Y*}07Jv9`Q_epixCw{L?0$EN<|(YNnnRaec7L%4Gx}uH4PWJ_ z3|gYQ^b*7$e^&sdN9hKxg(5usYdx?!~@_I zrpx)YUO%l~e9SOB({KhHz>lzvv z^SaAe17(ol^^K91J_ZZ*;K;tuj6EP( zsC$0D+c(1po%-MdT>R#X)wk*L@ADmOvA&^Hw{dbyvk{7;+1(++$(!9L@`PM!mZ>3R z*2`s8pP?2TxEaozR2q8 zOg?i3e6<9{G^1emX6!MlZpiBuzv)p-_m}D7_@xlz$UcBi+=lBA1@D&^NYFZSFt?PH6wo|zl5|8I*0{+ zwGL^qTtqq*cZ#I5vJRsUVSH9o47eNSvGF-Aepb#7t8ZK3HyDEnVoRTP-@IT-5^W!5 zV*B6Y{e!&PetIj^zlk8is-Lp&@BjY6O2znl2K(?=_ggv4mT$jZhQE2g+kH~su3rjo zzP!&EW{>Y~o6k2J{}3nFSE~@k=5m`|lPFscTU4Tn8+Ik#^@Rb-C5{fr#JYyA{4Pnx zMVjyc=Q@)}wYa=H5Z~P$JZ^hcvbmz5UEQpUIH8Bb_`)<}eY0;$^UgjraDKTD=6T1h zR_62Ek42|kJ7Mc$L&D(W_jL!=2d^~dMkbOv)quX-1t%;oMj{~Vp*7SeJJw{w?lU|W zFP;CM^w#`YU81vQxu?sRqvDa}4ZPndCb38zX&sjBp3GE9C)KLA7O_TzUD|Drqa(!^ z33L$9K&Z_Ff~kVi8DG{%wRMvast^xPh%4Rx)|~1sPl&=`F0B6xhMd9Xl(KPgmV8|$ z_UZ@SeKT#p??jM^Lj0BOWUBQdb+Bw^f1EG%`4TjN;@h07ul0n3+0yBMFV#z9pDi{0gY4+1rVwix zhq84|ACJ>gcSzIrfcMbZ-1Cd55f#B2Cy2qZt1ue&+hj;&Gihs{z6O!0sC6pIO}vq`Qm57ZwT+!5H-vOaB+B_ZopH59Jyi<5_-kn#e_}9j zd4^iL$?U1+|FmM|yKS-ihJx^Q(o62yLw%C1eN}xJAqJk69IIe7hzh{P(Vf9`Ea5P(&T%=m{+k1jzR!{`{O1E<7kee)o+A38lv6ra%H;H z^YZbD{pZpUkkq zJQq&k8~E~MGY3P|xplIL&=qay!&RL~0jsr?{XGt62tu6X`PSJUwc=T8=Y-r!wgm>0BtnFBYn?au)xdrQoaoESIlaJzhkMl1|vq z@x>iJKiM?u---J_-InY3e=a0{u)_O=^iKFBeDm{ty_c@Ph@niX`A<=O-+u0fZA^t7 z%v>3X!y<*1aDJbfZhH57f9NOvg9LLz>@H+`Pw~+ zEwT+GZ1$P2OPy1B777hzteGRVo||CMnL>N=_Jm41`O=PAt%dqqC$q|JCPAOPlcBc^o$pk5CZ$0dOBuQ^TWt7e65*!^*ssZ~)rGmNN!40?b zzFhnUx5Itl-IC+N1@Z;y5#|eGs=PPDfX&F}qe;oqE%zL(_S)N1wFT4Urdd%-vB9uq z^Oocjcvy7T#u9%!gA-rj_QBB_(q7@PH`nSl8oJ|1(l{LW`8a4V;Fom05dXaYrKk_2 z{`tw!>P1?6EBn}Flc|eZL|xj(JIk1BOy zCU$A<#SGT&TV_K1P=D~#p{nzDftBNd361PwW2@J|!EYCA`UY?4Wfd@lq z%h<~LX*ALhmjgVKb9>|rhr|8|78L#4Q9n3wkF;#)j6JhbK=_dU!AWYHD7(^{#PrF) zc!U#70kL-F6o+GpM$|`R0?O8c)CNY&b{grl>sWbKIR{>uF$7GUe%1etO3z-B<;P(3 zUF+Oh6JEA(iaMVyMe`2kg0iioH=B{j;=oc|0lb~NtG&@up`>FC#_diq!Ikp6RC*41 z15lAk-07w1H#XP{fH=fdWUd-UEgr?$rfnhtQ9ylH`Zb3>`IWH|HT%%>-(^~2UWd!5 z{RD`FDGUQ1Flo2x733AlL@&G4!s@dAnB14!bl3pcvKObtT8r>R@LK=8MP87=ZlEZ& z=PicP+R46>6vL83QI8RQR#sDC!r%|Dq;n1(ClYaFga3UJmIep&)h+vIQoVM-}Ci2K2DW0PZ2#9Juh*Tv1$n6n3@o+cS`aWqR zTxyKz1ce-;#>0M@MF%Fsxs1Xvg@?;owqXFi8BoaOs3hNF6#_6$zulsy8iBw|ihE_P zpD%J@BMp;56tvYggN}!z1%ebiG*MyfRqMyrpO{jO(}NPumj_^#1(+xxS^o{$ElIQK{8!vhHYb4DfA#& zN?gXp1)I2oL)`?-XXK`uOD7C*VHVLtbqZ=qs+q)0PQhE&97EJol(I-F*a&acBQ`5m zJtI0kDg$!^kBv}lAG94jSJb)97NBe<8PIHYeUSO6GeCf$tPwO??4S2GW+gscDoKki zl(Zc=Dxh#j@voh1(ZG>CTee}yI5w7!c&zXaKYQ|JR;x)g*aGFfjm8PtEwGbu!Eop-jW^QD^X5o z%?#8hoiFhb#d;NOn`sV>A-%YHpcByc-6#Al#lFl`IY>uGK(TGPJ!ufYQW(WR)V5 zeo9PM^iI7WpFOr*#qv(l{>c9SIeM>WNz(K_FTKyK%<^??yXl^popo4XNf?O%Q8)Sr zdBqD|=uV7~LJ^cG5+q21i{)Y$ST{R6Gd*pOD_`lo(Q_05Twr4{(|t}==J&nt@Ao{{ z0q#M(G_U3_|7`lgn$CZ0eDciqo=L0c6a}vICzp#auB+**)nfJ2A6^5w{+Ge$lev1` zdDE9)TzuX%FV8-oY3DD0@@%Dl|IBnVRX0)zHew1C zB5wr2!^N2n&B)>wNNT`=2Q0R>gT#y-01QL&hk!@p+%+q@h$3Z?c7)kdhI>AO#gPD1 zKBZjd=^t@e<(NrloQk6ai`dkt)xipLI#eT{m5)hAVSFAaK?z<$9Gg?~)1^a#UT3XH zOWHOdkOK1PhJ^(bG(*`U@&y!JZo6fT3$;@2s_D|DyOO?YLmq0m?eU2cY7($%kJ{Li^CqR%e$uNKkH~!(Wmsvj6!!8%7Uz{1=1VY>{a#IZ zwvSRHs=JAM-Cv!=N4}m01>-XZIby&3{L|^=i?fC6tzLQ0W|zmQtgfy{7mN0<&z`T& zpI!bh|I&T>gQw$X=aXyyuNHr$U(8?5UOoE^VW;_nV05wi!Jj^L&z_w9#l zq6x9D6Xmg~3CJuxBK>8jEfJ5R$_Rb+(YaJpB*6U$n3)EfZisdlX<3_`L2G4DY75O& zVA4%dl`s_qf5XjtkY)kqUVOEg!2!#FJP_r#DHKdYIy5=41D<*u5_@XEcS_0!Pfb}7iH=az1{BVROSS^D-UpUV$TNnG&1>bwq zF(xcR4A(5roMC0Lt({MP{8L{6+x5xVSfRLG;%Q-`%xRbpoo>`$_&@k-LQV_wbDwkW zhk!1;ChB7qpHl@LSHCQu|D_N;k(%!-=2+Tw;nbL0h0ppPbso_s-SLUoaL9M+YMhhn zv@iv6S}RP$hk|5JSD>rixnip_i&V)KCbLJDv;=Ja(&0&MLps^(Zsu2X!m(n7@N2r@*P>x8NY{NtHd%gU#;5+R6SIgBPRPE?4U7* zDOy~)`OwMscBX%8rjl~0jOKisRVVgvltO8-TLjYvkVP+K%RQPkGagm+w6;7L#7u|H zP_7&P?OGe!te5ChpoM>Ba3G0pm&$g>=gey8c+bt)3`w zW=rK4=D0G_Ov%ewnSn^Zo4W;xDV}A^DHS-;VTvu*;^&)t~R| zU&eo4{t#ZlZ~jpI&v{e`|GV&?F7#)ncp8Sd|L>ylkUndlPZM$dT6wasEcxFLzaG>v zCYPzytG8P*63z@sFZDRL&Ue-#`nma0&>WsJT1|1lXdBQuZU#XtAI9{PB%-!sZ8nj8 z{tU&wERqwiVM?ixN=~3A+;yL{^g1FA0ugl)IBAD!JIgnzo^RlIc6&x~^8VDOJ0PNZ zTD|9PcMJEdrL2g>fp(6jg2d9>ZBtvA)$2me_o3WwryBF*%%l$f;;|`Qf7$0%WrOJO zGR}AD378m>Jh(aC^Q`HL-NzmXG)hc96#0(D1gAw1)G6R@AZ~=JgRrvh<{cPysXutW zf9UhZTkYTIUx_9L{(tN%q>iJ9K~CY1@L_$am3f^Rf4K zV&nc&emCi^X+xTMp0USl7c*mSm^@{=Sv!j+Eid0-r1Evf!X>oexJc$uH0spA42rPc zNAXDS2ttX?T>V(2%C4kE7TG21AR2#*N0%y7tSrv&EA`ui7^dMriWy=-N{^r^pW5% zX4C3#j=`(rPj|tC*#Ez-z4C;g75}FG4=;+Vp}!+gS^j5n|KhMbeEA>Z@ZVAr`=A-`u@h zR?^+?|L@cBzkL00_lNG+@o$sAdHPY?uiw1fX6i4(u!Quo{cp$Y55J4W`}CXeLvs(L zGu=Ko_0Eto6kD@izFkYh0U5Y$`hu=b4KV-UN4VrNBTr1u6g?Bhxj@kkgpVTQ`xq>s z2mM2sg0Lskak{+|4prEGz5gnCFW)x+v+lSim2vzeTI}{8ODI|oPJG7%HXfcINAY1V z-W;hI?9b}wN%0FdUir~K)(6rICgzLoxQ`A6)gFF%LEJnP?c!b6ZOzfq3`ye|xWprJ zl9PS28A-^$kJiNvF-d(<`}*_gcLvY^Ja4w-U<0Wt=av45EOX1np5&k z`tADn#@&&m&a|Re8y~*6d$E51vE((DIbX)%`r}>le8a>xeDYzPCq?}~WuKHE|E3Ub zOPXiH2g}{6Kghjf^=`i2m)R+QS)XOYZC1QXa;)z$-7@DzC2fj5&!WNDD(F7-`|n6V z9CO-dVm-1}S8Odu`J1p*2G^PyBlb=nwNxOLCP;E`@fYf79FRVwK<(B*Ux0;sNi$Mq zu_&d;8eS2x;Zv&g8gn#uogG63l>4;$62!WB`hg9;#=!vs`#^US;WjNuKf zWWgh6Lou5&a_V!{1xaS)79*q?$vqYlrBEzt-SBTY)c1pW&iO+giZMVzGG!!yIB526 zKDUwTwYcIL(5wi z&V+R4NwLF9Y+(CZ-FU8C3h?&?VN?wiED{xGk0 zWc5PrEudFs3)h`w|3Q_Xn76?S z0Eg*R1?!2hojHVS%r)6?-SROqO@Q#nLxFBB89NXDhl+6U+D}B>=;h!7k=n^S;lPJ@((a8D6 znO=PBTnyGUP-cgf!hAq}ZUqB9I;wD{zPBgb>jrfe%-8B|J(?OLfvrFtd-izAyds-w zRnIJb;TZS+?X>ru8Gcv8PRC;goiZ&Wf)HRCm9o3F?@OWsVl(lm`IBapU6+5M!C>Hu zWa=cIZ~*e>vhFZ+;WK(@Y!U>bgO!7y_PpCkEix_uHoe=Wflfnq=*Q!}`H`&23lY1X z>m_Uu{PD)$Y6>s+ zoNCrfhl0~g=V6ovnxtGjZe)BcCERiGfco7WGNQ3==a!9cNONBri$KfC2GP3Ieg4Wb z)o}f2ItSNcg>ra4yYiO(Vs5feFt`4KzlCaFkVxvNj~(1^NzpNcWh%xscK9vVZ%BmV zA_T%AsiUL3du(uE?B(b#3G(ZKsju3`Q&|{w?buvfDf3E7yx7fEDkSe|?upI7?hQIo z4c5#wBY1eK|!w z*gO(8nT4Ym61B%|K$F@XM`iFzZM&rih6TN@HPP(*b_gP?v3jQA0L8?%ql2%wONoVeiOZc^?sE=fCY z9EyTIbg{W@*K=F5_~=8c4ekDZJn#-uXMA*e!x|5gdynFWl*9z@X2QI>s@uLxF^fQz zQHnb0Id{-b z!z4ZL8x6k(X0=eMMhsaO zOT3c2UhQ%8sw{Hpq%fmE7AOkxd^8u%%JaT-W(H0)TfCfF;Hj=4$B{87oj7sbK%S1v z$@SN341dCHO5&_9pn6xxAp`$&0_v+1wMhoW20-< zilj6flA$-~EbvtEXqKQu8w~(x;fD@VkoBB#%x-n&u^7Jg6klH%eI~&|!Z~3Lz{r|P z_EOxGe7$UbR+g#hmkJ;yQlOe;O}Y$qo@HLwxB;Y6k}H7s>SSbknU2S7;Y^LfF|GpE zc{~Xv-&F`pG2KT)AqSozFJJM=Z)HoFIj%WW&cxN1CQ|pof!SdP>`2uN?r!NBwZ)f= zT(4=W7Ci!vZez1(b^a8sViq#%eVU()6hPJ^R^mLzQ3k-pj7}Y{rOqEQ-lqRR8C-m7 zTcE&uG8ww%z=S201Hs#u{nkMZ=1|ck;)}s_hD&;~91H5qbYx4`kpb%%Oth(M5b`$N zrHN~2sa$qK@It%lr-3`0Wq1l&Az(*Z3am{aXnV8PPU;?d@zARAI{_T-5DMy~N6Di%-OB^n^LDTsQrqG{EA%CQ$7Ya!S; zoi-+dD~Z`?JrF77q@z_4|GLIO?JLN9-C8%s4eM(yAL}xKtbSrZ>uE5xRb`m7Ns{U& z;YZ4dnl3vK5RF_KJR`HykT1phv_wspNk9cO%2PeWl|GS+HexPSi!S48avzjij%hY- zU9$cvn~SAJJQ(e#isV}F7134o&KJon*Q{V1l_RKbNS?w~k?IfqH;Ca-lW~Kcx+m!; z=USER^Xv0C>>@Qc^9um6J5S^;rMw%?bFhj-bfbWx-;hsmKM{FAgzv#-wHxzI`&l>D zIG5+?0v3BSN`vP`&_wN~Js6{q?H;a9y9f5pdaOK3VywN25fEhWsM~%LHE)ef1M8nX z=W$NzW4KnnKd0FSJ3OtlYpK&rCKr-jEWURwZ-Kl(XMZDB_^qv1e?gxbJUzM5>U(PWm0#gNityS%ZW>NSLXjgHqh3rz)xP zK^-1gc)^xZ_2H3$4;o)idwkgay>&{8*x@(wKt%7@8s%+)WQI%?!cJx{Jy)v4v(qeM z7z(ULXPF%56ZgRDDsSF z92bj%Hn_yE3~YP_pH)eL-4}UWYL$sZ(RII{nYK?Y?vRWquOaS=sB zd6PYqICc03v};DhFgv#8T?{`Y#Cf!rACzLYb|!}hi2re)O3?#!Im86pbziUJYIkCl z2n8oR9MZ#UBwIwt*s`I76L}d}J%*e5ayTbE-CLtvG@4UwjY+a94#D+HwH|>iubFMe z36_HKOcZwHgihIEel3QXz;`OE_M6RjIUCtEGLX7i=Lg}~7bj&~KWur5Y^#qSZw_T0 zmUq>#sdMcRM#YJNY~BcO@}xO>JGc-PKkv9|liR|GiwFMv?Y`-rzRL={8aEA_3N2#Q0f$hmg~u)qFvGWO(Y0$mCbu`^zcH3vo^b*5(OWa` zye8et+sCA==9x@oXy2#VztLtL4Etk_58m0tc@`+aF18o3BNyLvLrg{ zr-t^P>qPql<%O)oYCHN8>iB|A=rOA@;t=QjF@>X*u9R0E)_OtByOTaK&<%m%K;!*A zH47VYx${q-Aq@j`vA}w=fL^41)bZDIv+5ZkotJJ!dnZJ^?F*{7^@*MeWIY_UP?m{*{=cp>iGzYrTj}3x$Qn$BU@xs#l>1)Xht&2F4 zce_~vp7ETqdyqq)P*`EN;wQ2AqKC$py2fdok0oymuHi1Q&&?rQ{$<@97KBzuxw}*E zp{i)|*6%sxTH)OK$NJuNx@$>!jdY5c`{)<(S9(VdJ?D8ryX2Q`d1lyCdDz(vw$#}F z2j_RREeT&%3l@>Z;jsoO{k3VGMy*|5lz;kKU#kU?q#UMtr<5e+ADL>_#M)>ZfSbHVlMQh7l3g(LukmA?D=wrE_B5a zBN(4MBWu3oPh5EAFpw#L@e^3$w4G>moJ^2Ose*bfPW`(H7b9u1ut6wJ@Lk0F=^;}@ ztjGGo8Zt=0#$W}0;$@k8L0U$YmMK-FfOYg@@Itrn0Y1C09vB~^8MYz+j;TyJn!17_ zY(;^R;k%iL<5TEOyOR-!VGM79F9qt>9s}~_-3X=slaeG&A zpN^gbqUE@KBqL}A;16`W8_lMYJ-2DC`<}%9y9WXMFbN7{M)z~R90;h4=(38VX1+Z0 zp9_xTF`OSO3Q(>IOX6lc&N`PD4L=}X56rR6-AA$E<3eU*(_nO}8_c0L2xgA2mZ z8*|fWRb(-Mqzh|26&2oM zY;c01{-U2P)b3UjU+GS0-AS+g;04M+O&Bvy73ckv*k>{lQ(v`5yZ&RgH5u=z{RQ+Q zoOJTShCcNOmsFRSL-8cLEALvdNwBu+GeZ`Zmk1Qh(Tq%`YCaXF`jdr$l+obof}LWj zj=6*~D$hZ#GI5(DYJzIL@PZ`piYoW_z^&xH)@>y&%n0y0!ge`(op{ZCccNNHbFTSJ zz{hwH8r;8UA~qP)of(MNTADbApXOyQ*7cMGujwf&w*w^q5*lTo>+r>iO zvfOGEx^TRRK*JUj7d%P*!1!&Kkbf+b+=#>1O%{&jO|;H-5qGX*7~x~n?zK>;vNhMw zw9XM24Qb1zfC*Z9`nG%^@S_|>`H|b2obncE-vR8EEC{ku6mQsLBRovNQR<19-8>qD zfht#>Eq0w_cWY*lI||_mCAhv$K87hO-mmaoJwy!d%xspZvWQZQ_B&5JrdQ`f>ytd5l&J?6pkdG>hG zIaR57%#D#)OycSkR*VeuVhf%*Y&a$Fwv5MYF;WN6o!ypya+82eWOKhccAG3{*!dSi zmU8!s+AuuSYSL=yK?$pjm0sg=D#xpN62wWnM|mkJ%rMYLEBSy~VbDi}aZ)QgHau?> zn-E7Op&ha;`m|ymlOL!PmHV?sUCui6hd-W*1JJyEv_nnaBVUG~CChaNF1f>onBOFEe4jyw&5{R^+g;vf)!|`C-t9POR^jP%D3heYkhgunN=2hBCUWuy zf%ijL;1G=O_q(d3IRoK(Bm5x?+w^UEj8FIPao7y{yY@E!ifQI?^PYQ`bsz5i(?50J zZiuhE-+mKC$1>bLly`^rW_?`0ld`zU+AzDq;3-G8@Fs?%{_@5`I*gP1+sXw3;} zWM1S^t|$j>Pb&?IaRF+OZf3XNaV}=@R~^9!DahXWu$ITL+UAE72xCZ_L!E7<;+P%Q z1YHRQsszCIL(w&uRB{T~w^gTQL!Kz*gC#s!oIjlEZj!3xiAYsPG(MELtwx zCHga$M?PHTo_QkQuhgpA1}ccyRcT@}Yr=dnRM<2M?7M_sd#eCs*IO;|L4-n}v%3yR zO*IrYb6v(EkJJKz7q95E19PREN1s7`7G{D)7;ZEy&|%k(G?`DV6y!jMh)`xA%lo3a28yvf0)@%iIHTIsA(x%@W%CsvjOC)_M-iD85MCi7ITs0{> z8}izCYDq~06M@+0DBQc!%EPs%8zm`y$SvixcW5eBBPdE3KkJEWJoo3mHVH0Yn5@g4 zr2->QQ(aH>XToG?W|J#NoVvoLY?uqvd3>uemtW9eo-O9C>^C!G822n!r9xY1DhM(5 zBQPPr_gVEwnL-B8TmusD4CpRszwsvv@8x`SWq90XY-6P@)rG4T`Sg6I!nz8^&#!`W z4*Tr)*q}j7n_NuJfdSK3xHxyO%!_B|<5`2RXEYzXKnZY$@`-#r`Uo@X_#lO9r{?fO zW6D%P!NWN2(8dPjHv>1+WlMOWE!0s2Bh;zjsI{^y-)MCLzuHm$sHYa_xz_JO*$46g z@_|INx?`+rGb=PUM9@HmP#Yc6#{vrD*(g86chFKc?Rd}AL{c{dtEVU%ju{PBJFRO- zB`PWUlca}<+-eeA=V?{)xQmcQw3R_J#uJ;D`sh_*67JMh2nryv;xGZ=$(B0c73Id4_|*L=M zBPN<|^}0p~&kKPTRHm%8lD2^3h+xRLoC}_e8$wC;bt1^e>?AP9%JM7-^PPS=ZoB<3 ze&qiR4=J8I^SBL9%4XjTUfw?%mX)kF2vnp)zdeCwvar^-V1NPm(DCC$&F%yA&p^(Z zZ*odgF3eX_0G_n$dB|nhZzIDhf}U44&4hO_de=G#r|NLmmD48vE+%``Zi+2G+&roG z$Ggqm4nr1cM8Ax?Fxfra-s2+^fcKrR=?o-H{T9!nhlO)wVZy zf2*OuVA(}Bu@h;ZfH&%e14hEK?f_zApWg`jys0M$+Eg~lwP>uBwTcyCq?W`fBW7i; znl~gXYCWadp~?>-9~6c2iySrSCeL@Bm2%U~s_t-r@LF$$gLuep=>g>tBKqAf+-JAO zCInC;rYTGQ2hx}iw+|;ZJnrHm89u(j?z)e@+w1C%fW3o=JF>In)G@Y!S$Y}-vOSC< zizZ9hTlzHh)P#nMLGU20PaSlx1`Gw27Je=zQ{0N^btUu;>S?Wx_Rdwa-{6ClHy@gt z-3MY)VP1$;1X8x@@ArIH?>_8bQ}});-hO?v!}+j3kV-mWt2@0-q3UruwQfTWv@Zk|C1+(x`Mud;fY&n;rlNuRmsu!ZCs7JV z;;}k)VptOy!sRQ4^l$ray6fUyKCRn$CP9yiWq-Ff^H>y)r6e$qb`iNiRnlC|_Z>-T zEVmNsO-6+0kz1{VEK;#GwFEp`^OU9JhG37^`@SYM)>pKuq`ad+yVsAznK@`$Wh~jZ zUGDKU6rW}y!Srfin))&1PP1v`gfBF_rC6`_yhkBFbbWFfx+q4r6TfZYQDiaImZmug zQhiFj#W!+MQ3yIB5miG1DQ6M$3&gLa01!l-|LE8GqOez_iHckK2tnCJSw z-XA*K{HJ-d@vqU693Dud%!2Rp#QRvtArw1p(aUT7B65UebaQ#Po%Acu+FvRX9uBzv zc{ew9zq$03^XN|hjq{citZZz*@kl_SXi5qoAQD$afW+%YTZpuvYJf?*d<*kZX~m;> zIJS_>E1uYGO`05b5ohBYX|M1it0~V#nKGU;lHJ9GYqS}{^Q!jMf)g5i4=^836l+?K zovCcI0$&*RXvz44(hq6$R!<_fUxHGjMO7R9A?8p`N2C z&M4u?Aqg_lOJd9OG0#dJOne#|r?RPzaIjFLVeb@p9jJMdOQh;x1&9i9hBVA+T46_y zattFXIf}Q5PPVL*mk&H$a-lCYOw5YT$x&0S>Fw})d#ug3$@B-mRn6QuH&z2)!wEh_ zw;J)>n|wL{vG&SMN5`Z3Jt|dZyvn}sy|fH@GgqYh%H5byravDizW@LbD8E^KR7$rr zvF!Z)T*k1B*r%$?0Q4Q;bRY0iJXF#yt@_hz4GAUobYVSUii?qZZ+RfZO(SyDM&MK) zi_9~+PRsi2W74g~S9VK2{KDBkg9KYTKD{+HFqR?>B65cF`__?EVm??cE;eyT-Wjti!7>;WSq(I^%g7Flex*!=RiQraXtb)N4ePt{TA{rO+MKq_H z(i(|vNrCiCbS|p-BrvZC68Yjp9-qy%nOk_~VAhPSjm{>J)72jAGKR587QM;Hfy36OIu!*%#=fl&@} zouq-?^D#M5zv9Ni0g9)TOgEF&kyaB!z`7-4)DlCrV;HzEq!HH(cVuR@hCdB9>)f~y zb9qgVtm}x=yG=^kwjl8lgD4_kQDJ{bhHrk}Gt0}qJT$0_6=h92rBUXEZiWTTl&{9S zTQtF$^k)C~P!RMe_|9I06}~$Mm(mH(=?5XYYYs9}64+nABLou;5jB_e z9|=tt~LoM%>qLFV;@BTp2`@3Wp@f>(PY=)uO9{G;*Jl5hl&)V*` zGm}hR7glG*V(J+I{)gvua3$Y38v=^CoD76{H34ix_Kr4zw5k4vYhI zm=V1ar6i_mXgv6&((}#+W&kMBohuXUr(TN0Of8{OM;Gv!80UGa8gL%51e>;K4`0!? z#>7jYW!D3Eo?%u+ z@QxmNKY?pW0?!C#@N1UOtzV7yS|hyI^~XU7>$twSB(!bpJq8|+mM^v5fe8EM&;|K^ zs8dn=jS&$)xoa(Sqd5&n+piKw6 zp9ur`Z4cXfXN_}#Jk%_(_2Jy-M(@p6HnAjU5GINS0NkaAHfHfDvY=#jV!`Vrq}KV|LKg76OKDg?+1vI)Ect8e0uO(#Jsr)pXgPd!tF&5=I4i=&}^kiOT|^ zC!^R{CAv7#qAn=wjO#R)ha4a@Lzi4b35a$T%GTi%2w20{g|Q}%>v22t#yxIG5SX=KSs9@{fR){QMd4Na=F#7Fe|asNzt zMA-1=C$TPD*k{FC{&2`+mj^W8P4uTlsW2N8FM;3jSRcZi?U7Qq%B!O%Efso204)6No|?IFZuWy*qIxAOJaSX7u1cu>$5s^xV6E z$8oJ?0ogW*wCC9p8i6db2`(Jgj8NMqK{e`qZL#1Vf})l=+dvqTPXQ4M%Aj0oR10(2 z4PF(Y9XIU89n6;CKj)&B@05}%yol1HTyQe)IGvROxqOmV z3e|a=R3OC@5iFd6{Br1tI*QPydDkc0{5tfjNa6Z%5qWwegnfn*O>G;%%?tyWEEZyr z0e33e96EO&=`CyyY`}4z>KW%E4j!N_k;>W5%99y2X%l8j`a^(^Y`LV8z>w>j>^PY{#@teP{LNg+b0#R(^hE;sZ^`$TP`K&J zi3)d!LoyHzbKH0dkO)JW+kDJToW-@(j0~J=S{Jww4067G7IJlC0UB|_Wz3+KiYgZ9 zb)~tc(vaS2STt84k2KJ2oLD4C_Clu8#Bc=WdL7Z^p{AR{%S_8_#&wTCQ_BZt&T`Sz zo$f*%avNSM&o=%Vu1-!nXjHbo1Y)dV7zkN>)_lCuAiQrzpUo&=hwFS zbo}(`lgX=~{d9ijUtYfmmhF@0=cDI~?y<6N`)3pLg0%et67hKD&nMG!Wj=dmpMP4t z@~6#mVg^95XnqvF{QSw-o1ZwWgr2s8 z$=2Z%rYRG1s~(N6VvjCf^yD~s2NUcxIc&HCJqeA8aa}QCMhG|JjzcVRY!XqCG-p`> z$1yJafzE2cvRU?Yr|PREz&(&`CYj=uWm_}3>PacsV`Y5F$WHMBQE3ul^W35IDV^lS znByJx#m0E5YAKml6i9FcoBCPhT&iP9mHJt2>1R@~G@s#p74_11sVr)9+Ro2^ChvI3s1fAh%)8EJS2<#0L37b(k)j z;+P57BfY5~G`k`MUDL2>W3}+h9t;MSOx}1rSE90Nl!LUvF&2~cExfZ51MtQkqIPL8 ze0#XM-NB4T}pN)M;*i%k6I_&yR zoajk3Z&S4E>=@mvqt}IHi=J0IvJ2sEZAS=AW9q6K{@9frH&wLH!lVp1;R;=G!1ZC4 zX~x~Pn3!iIP8b#?Wadji}e$z1mGm4N|OIWjH zWF=o@@5$r;Qj;_NWbaU^iB;Lm4}3<5N@YULWu%Ie*Se%+J-4ZQCI({I@}6gJPa!+A ziLj1ndYP;x-4zb3y+Y2v|^GkG4J32tQEt=IuDF%MjSRI=99RbbJmhw{~&<` zM$0)a`3g-k4W#+l!qi6)-M6*pl>al=rUD?8#3^Q=Yqw95eXjw(%l^K46Q{eYLj8N%iyZl!%|M+NY4#FlJzS2)s znUDAC*JxeyHCF2Qo8&0k(xKfSn`4v52acNEOKrgg9ZtfH+jubqzZ@xk66PU2CQ_+e)0O{Ap}8Fx~6 zNtlcGa#%SAMrk`Y|LJ{gUaq^tYvVF^pv`MI22_o~cs;4lC~RyCVBpThSBk_9-0@Fx zj2rVMQPDT5@c&-j4Z9L+vp2Gmzf!zR^k50Ic#s{}bU_H%3>F z;d!4J*z@4(${lqRdrno&kSE^4f5!h_jm4&sP9ay_oF!;nE2=Y`pdS>Uq#Wceeh1=c zo1Ln2xOGut*+7{=3eeI#ldsE@NNi93mT^+%H&4d}rYYPcanzr}584A)!m`sdYjX(o zdX$Ens@i^)sadhlzRe@RKdiWeO;JY4!#KX!-!R+K-W~N1t@vn<4i#gSopIJ|k0-m`Xzvlj8{8GC7%xmY*yze98a5*_n#AmWRoN)~;x*$IBc^z% zXHu?z22K0Pzm%^5T21TX#4AByktd*|`!#TWW4G#lYx0)DeYXAuTV##hJ(u zy$JyDpgjX5+y+w#Qu&{FL-GUypPT}yul%TmD_NOlkEbB)zLFub9)dvqMn;*JBI`cB zmPjLUT89Ev>0g;0aqoZ>3Ln#=P3>a0C8~W(&5lQ2VjV;}D%vDxqflw7sA?vaF0N=I z(=_I1$`td1Xq?eAZ?qL1v5_nCKfxI?>KY$3!TZ?)8?d83u|_ny0{U^DZ;f9NDI6v( z5Nmk+ke9hd=;p-du=vDniprYd0f^`6(rP*K%wm2|CIV0R`-8y1O-J4vzvO3Fy@>ys5Y3^*8QAmx|0qwg-S~i`(_p8b%UfwMhk8-=YuEb0Eb1><0n@xIM(e+8zkKvsJAO%R=oXWleCa;S z26aCkhH%{%KRbO3fGr27&DMGU|K|tH>avu0dQ9Vw(%}XiTcx{dW*XExs<{rnx;Mp^ zN|8qtDH~n27k#Q52Ph?acJ)f?u3wmP+2+oMZ8Bfg@=8;=~sRuuut&!)L z_Q-Gp`ugq!sfRJIpH6Ql?;^)X+<2n%5DcSqI_^2w3K` zPtV*YSlVaYPR|9b-_6LrwB&29&6RsGT8u7~AUm_qr^`kCfUwC^dY3|Go41i zio6dK0%@IZ6$XwMpkg|f?S|i(_v+rO7uAX|Ev?|5VsPM6@ZSys5ptyvqk+%l6B5sM zH;FqAcB=J31F5HQV1IJ01zKiY;N1eTz7e*p1X71egMvlYPANEsa z6M$~eJwv=OuHdq(r4X)%E!SbBVgZSi#GX(6YarNtE-loeL#y6!c^BT%TKpxR56h=el+> zQ*pgcixbf;so1v%c^T!q^N-gLejyXLP`F&{p3tEf3bXb{?(s)FzxQC*~=dn)s^_9$d7IPTfUo}`mOO+xSfIIBm-;r z^a0!+JlnCn0Pxl9LX@W_W@CWC@`lW^IVtajp59z^Re&cveSq=<7*PK3;K8cJDcy7 zNK>p?_Lr)k-jIL&_>J_R_=Y!=BK!6a$yJ+uYZsHnAz2J$E6HR&F zDyyR3PM_=Et8P352S&a0(!`erF;3JK?LzD&nLMsH$I)%rxg+oe?u=(7^*507j)Meh za);ZiUep%c6=0Vo?Wj@EjEmDGCx$5FM$z_Q8z9w$Gdm5~`$8M*-`Z zg@fH9DU3@s(XikYVo1n`QITZ0sYLK=<0N%@#AeS2<7%_!PN#WDhdHy_O@NQ&P8RhZ z@uj5hb1!egffZWxz^kn#I7XcCEi+{}?{BhjF$$?sMV^-C`)c zd>D385?^*FaQlU{2tU2r4kVMxu;;UXAQeE)7}FswXa%sBYsol^75$;opPNO> zX}5>Aj(O~;;TTi%BGJ=NWo$-ZRa7t;Yz?eqY9y6WByIYLBll}?UIWi5=>Ytn2G~G|)QlUXU3Sc3A=cbMNDF)!gbYN)1t;-7;$W2? zOLJIrZA;suvB~OTo8-5Vd?S!jNqWwgTk`qoE!^-G4aV-uAEe>#VvxzJI%aIJ_oXx_gs6RGS>P07u2R>))+65BbCPW<#~^yTkgP z*8ctWU7m!Shg2ZM`CYS1WV|nSj3IXMhqmAEX=fv}KAGgvj9C%xTWI`487!K@6fG|}yemLzGs#C?#B5pCn2A4S2-@qVMxCDau>D9FVc$r382+fMi49w$w!xHH z6JWFvgo~~YRuq`FJm7P;v`S+fBN9pj0Z8_7(Bbs78WmFkJ5O1_TIKO=l|Uh4aEuJ4 zNpMl(ksW0`sIJr$S+V>6n>4IxHY-;8NeOx znbYuhJC5>owm)cGx|70Z{QtT=4E?D*5HUGzLg98elpl8Mx?JbUcM#VRvK#W}XCwZ+nX5^6yCZg*Zcxks(sb-Q$iT07b{GtYW`O zvz;!S%ygWWdwS1ml&b4Tww20XSOaN?HG@ay!)XtA=y5%7iPSEY9MHKq;gcjZ%T^!6 zG14~-Y6yW@euG>F0u{aMq&>FS|Azn8 z`}GG|KM)IL$yT^z_;n|P3!}Fti4x(z_mgnzJV~dm{iXCe9WF2%Ih8JbBy4G2H|kgJ zn6&2PfeqlT_B8@4K++4?0pG$D9-cokQ|;G=|16s}`qutxMt);5d_E}VeIu^w1xzo^ zyaPGpA)~reK7NnLim7~B_SK=1Ie4XnF#w6=*N?1)FN?P@JJK#bQ#AHZNzLhZ$F{rx z;T!rw?uVGymJ}Slqt>`pd_on;vX&Gy%@pbJ)}`f+!$!|FbJdX3D|?A@9+El-YOtPj zWB`Ug)`9+5%+{@F(JE?W@E=_AJ%e}-p_W271d%D@W)2O3n)<)kDUN6uAC4w7T%tB` zapwGT$g}zEvtvE};Oi&1ODKQ3I%*Ti8tDMc)B?iUdD|Kv{++{s+({^xQ>p8j8w-#h zSw^&4^$NsV@_&N(sziqX6ky`g8^qqJxcgM)eDs{ZZvUTc@!M|RX*eeL!qHUcU#g=Of1FE?9_a?8ZXf~J{@btPOO)8fMCy8_m-!$BZ(5h{laIp zsh;aj&L)s$x6L+@9;cqxGa`kS;!X8J-lXnR+#U^%pvZ<+~ouz1A)#MhOklf+e^jn+aqHm zhV?Bh$^Va|H|?<`OYi$m?EBp^Z!VR!byY7j!6luUTELhMhzx4<37w~7&8v%w5 z8}K_pGGrK#s3ARMa~Af@ba!=CWmfKa_lP(VCzcc8-x&cE2h*&s%zGowd7l4@Ns87% zKBi-_lqgS_sr!dd$I~hn*NWhc>2b11X7Q1?rQi%JXc81z{&Ak&oM$E6k3Vrw&nI*3 zhKkI$38730@5d7_>Io{KL7czDei2}6Map59Gy1zdZQb6+-MfF0kof#?abdrBfrrIw zet=v#XX8rxq+h49{IkVoi8}GWJNe0*_7vFoo6M*wjwRkiWY_!?D><@u%ZW!^8$BQC zbxMH^sQ=`Z$S~Mem2(uTcFaR-remV*cqY}NMZh*`i7}cp#?R>maSm}fnVmuskwM%} zl^AF%oA?AOq@ddAvG?QS=kz_N&q9#hTFoPrc;M`@Q{tyioxAzQf694XP~N$?IR}&s z2%^}Xyh173tsE+vAxmoSu(e^*aljv)dRVy=(#2nEN(v^^jAe6g>k zZYM#8o)vUdj|~Plq0+kZOCA_kfmKtWg${u0gn~vksyww zTCk7k4zpaBeKB)vxLMC52O$1(f;YIEzimIe=+9ZcV3TM|PF}UtDgPW~<%_|8x!WDR zLX1QsEFP(v*t@VU`fKMyDh~dwxEY^+A|-0I<&IDfJ@*GO9n|IR2Rg3HotOMC|CO4Q<&-uanv04 zPjoI*;;`-a?dH)UWHb@XRF78$+2oX{0lSgzPT}kRn5H6z%OP&?+=P#is`GVrjfi9# z(S@b=2%QMCC%u_nO;3n+sRN#>B#++w+?eusu=p`(s005X2sWqHXSwp=6W)UB&m?v2bPzv{7Z$*5x~J;&r!{#QTPq2VTF+dXD#~ zN-G^a+!dR{yVd>ujy&Jtfs1qaRN=KgE%oGf&r|BMgJrG{I?76ZG01?f2o5JjPC@e zInv?p@IL|C%rtob`f+#=i=RaG3#u(MBDxkb_(Qes`gl8!!;^A=5v)%Bd}fU=ORcO%*K+$VK1YwK%bjQZJO zO};sfo>_BV`?uv)yld`BXh3ZIkHZI2tK=j8!`sAIv=5ur;bXaP-v_H`jVQXiq2u0| zMT#d+Y~@Y<@Ss=D-u*qDulT6mjRoFO3v+o%e|GC^21^}k6|`BU0H;E;(?aVtV^GitdBQxVf_ zCiE?I34{FC`1-AjnTnrtdWgPH(b5W(%I+;bnsGr0WJ~1gSf(!rb_E*nsG%jnuCZ>z z(xhBws25=G+{sCI;3D=GoiW%?VoDz({|Gq^f^$M_oL7Clqr^95mckU1L`R>9B#w1- zW$;J8>@u?4CLQ~%H!70vo%%yaJi?&Y-rlKfYjg1QhC55+y}BWxtn~gFghD2PP)+Ih zaaD&=JI!tV=(GlkN7@d=& zS>B5a;wvYUW2AUUDUTO3G+eOF1u8gUWiS27D2Q^3pUoRPv;_?=4nbe>WMLos6ucZ0 z%Q{;)9jUCSk7OS)s@vp-HmIV9h{Up?r}B+aCv7VB3ks7lgb2A0Xuss#qjkzmc{HX2 zR3YJojA%@UW<8$O9XXo#;*Rk2Ad_g&9AY^pxI4jm96;3yZz|!iQ`=U9n{nKB4vmOO zNaul>1km9Nf{+B*DVL{eHeoy!zS^ZtD3Yv;Lz}(=(O=-dC zfD*TdZY+-uNcBM~+|oga;!v zW-DrA#sGh1Q*xAJD%5rE3bBjz!KI&cJho)m#p$|n<@1_Ahyr7zS36r$vzxu&-1!y( z>+a$Hsp(GlW4#U+oN_(|37sOgL*R5YPQE}+n)JjbI^j?r_7pfFXbjV$9}_-b`p*K6 zhZJ1^K)9aKHPUsb(Gg0-jD{~)WT_o;Y5Nf#2XYDs9ToGbwrJa2s93}!$J4a&34lfE zGrR!U#x#-w%uS97d2uJnk=T=ow$(Cv+v`cl(yRHf z*ifg$WpjCAwRU21YrR+P3^=!)qe8&?1r*VCa9K=hd>Aiv&t}aoRsi%N(h}Zox);Wc zD6RRjex!3aJ*7ddEYY^CPpNM!VnKfj(WBMbOa^lt<90PHn6Bx5bZHD6BCq3PB8uZP z%N1x={nrVi>kV53sSlAA^i7x3>t;>gj?rq`o>#G622!BXsO-JsV^=nUTbc2@R~B`cdX($Z<+ zEIB55mI~7ei1B7dhAD}qo<~8JO{A!zAPOh`sj}Qf;-3VmYYK**OTo8GDIzQW@yTg0 ze=$y-bu^vZ69rmXR$n=&Zkf58E}(&wD@~9zV2gz&{sN5X@PhbBYh7ge`1u~|!rsJZ zzJ`u3u5>vC8VbHhD-@1n{+VbBxhp*k@fd^yf{2r{|~9EPI2Hiko9^08AR8 zxcj_QqCyD5h$*cE(+)H9zGJ~|oNzK79Ub_Xy^y41u&Dv5?U<>CMhNT_aS~$KhdrW_ zF2OgKE#fqLt|1PQeY5z0=wZP1YRF#f$W)|vrqFDX9RVf9%G2u}=>#Rip11n~O=`VubbaBmOSZ?`B)Ke0FZW4~6z)dy=slI&x=`?k4VcB=T<@LwlI zxj$MTAD5Rf6yK|xF6hg}`0v)=yzy?t+ui@l(Aj*c-mEVF>u!DhU3)2yi+9(>|FORL zYTJByy8Ykk$Hm<*4uAb0p8nrv_xSgBkM&oZhhMG!t@Fn>Tlqg)!++X$CpRxQ|LWh{ z|G_T2`-gq-lg;MW`v0ExFYNZOLjPAu_Str!|MJ)R@8iH{x&pJB-1K?8c-7eds;p+d zeZD{HKHvEJfSia{4aX`u1lUF6GNhUBEUuRHK*Z#=*6srOR1aNxyKfcdiFQ`!b5Vmi zi9^;(V5Hiuz!_|mBTM?EmM0`K7ssDCJ==u4nsytakdaqkIL>0Cnjef=vvcHQ(xMoTpBz-?1+2&+)G7YsPoF z%pIRs6Nfw1k5xGKA8Rx$Bp`0Y?Y^g*yMY`~RrULHbzIKQYIWTvFS^8k_R0EGD}s4@ z^_oPT_HX0+ES-Gi2mhqKlj34}{JY6Nr}N{6As^gj8~mn?Pth-(AN}@hICB|lzRtcC zuJ;jf|C#0dumZJs=CnVf{`Gj16)7EI7UyKJ9yCdrUAaH)JI5N&a!>*hSPw*y;?gQ& zlAneYH&M&shh6dXn&;j5ys%5>Wp{)t#V0$)iuz~6`RTKHOD1)~uXak;T#_A8r1<$y zkFqvAz!#iW;lLK-`(n1ool_yDbII8$CXP~%#4#m12tE<6_W)|$E-!F5jPOrrgwYQou%xn#zjj^|sqPl<4D zk8bwIXH64!AG5>h+3DioSII6C?r$bw|BW@B{}$01$l|QXJ}%OFXW?Nu^4<2D>};zI zzntANxkg7;MzRL$(~W>jSWJ6CVmadVm(+k$km-j0$$3Fp0Wf?ttk?hq(+mF1$n>J4 zmHt#b9F-Y&$$2N7`4djI=WUnM`MA+1WAufr*}B6E#943p5U!?gpDSdBn7bt$icA8H(Q+vE>sL1GZo-kbPfh*UaQR0AXWiPGt$8^EVd#=fbDEKL?8 zeb(O2>$c*h=N`Q5Y%|WbbN~WGVtS3pEC6p!>1R2K&lXko{HvOp%9A&Agr60Q`dg3;&70+sZ3nNRgr)~ty@{OiMiBFwv^(e#zrP#L6;Xd+ z4DR`}Gg6zJ5IsJ#-bB9Yk^&dG>tP>Z| zAhAw*dK_pGdIBQ~Pf)soB*sxx#L&fNdV|yN-M$f){ot!M^vqeW(XfV8BW}a*QPd^*OL@dX% zXZ{PYmlrm?VAwrtz94&~5BGU;?r?#~JN2nr2#yeQyDyyQLo_G(|0mIr10;|v z=nrv&3+8#@pOd>9dg_RgE_^jZT%sa;&%T&s&lb_Z%Fe26mEWK-yALK})`~}cJKALu z$USlrfcZz4R+Wbl=OlT_o@*U1+_Q1wItf8(U0WtDpTP6y>4YN4H{6)B#Uotg7A-qqiZgg8JJkimYl z&pI^F(S~j7zFMlt+CJ>B<|qwzBOT%@HzgNm{><5;0C4A^c#3Gf`E;T7$t1Gj@cZrZ zbO9i8;u9g(kqy|-sta%`_K_qFJ1J(*$(#sdlPJks=AU7>I;AN5Z24m5I%o4UB3aM3 z>FgB^O%v_0@*;*wG)KsO7N-*W{2{Vp9*8ANZhWK2%vv+&3I zjNTZ#>~RUq>R!zL3>|S2(+7cW9FNBr(K#XX&XxUBWnnRb$va-8{XCg^QdZ8T^Qz%> zb?r+9yNDu+(7_HXle1;xQg_qe5JG|yH!SbeGkedhI2oq=DqiqMK_E}v{}<1K2q24m z!-!cHBAw4p_IPU#-(ccWI^4NJ->>Xp9T4+KJ(?Ggq{3A)eDukgUgB@H8fUZc`Xh%3 zq0OXlMashMgLW%MqxN(A_y8Q>6GB;`^s9@qd>JmAe!rlYS@VDml+y$9$Su%tTf2oM z772j(KxnJuaS?>$^kLVVfoiF61$S^bmMW{q=0B^+;YYu~&)oE1PTG90WCPgc zxZfxLJHyb~U#iO46vrO_XhpE12@q=j9xOv##sAm(!(Kky*OLMFgUk`f?H|?mUB3BG zy-d=z{I&C4esj00Kg;*m57k7@?F}j14fe1nNJ0jvdG}36fAy*J)n9CS zf`-1K1$sIo|A7FDC8)z^Ehb^Dzp`Ka1tC>*C>-kcERf5j&IZ-edZ%_c4BIc%kN&!E z5R~=1Dh5F~E%D_7$CFaXRcxAE;}@dcS1!d@3K>^Ro!NTZl5S?2HOTbu`%_I)!fn5HpR?4`x1!!E7HXv=4qk ze#fw}gPklYtZ()DK+O-d2boKk+tp6bH#vHfTW&)_!R?RYiTt|DPK2*n(rURS*}{4a zqT1Bw2oaA9c{qTv_fkGD6~3DZ@uvN=aaiZ$>*5Ps#C;7NbT3PHI_qiqjqR^Q6}|?! z^Je~M#g~hfuViwKI_~vkeCz9^c*AkMunL6Q;cIdJ%p#+5jA5V8LTF#?b z>s9;mE2s*K)`;SV0 za@&T|hmQ~6JZxm%?yvF+nD)WlU9VSH#L3=Qqh1f&{gX9ro3h%ea$RiMiSXprs><38 zezOXCmT*b@vr4oTVKZ$G@I+$oCat&dnYjul`#JUXRY~griC<~GJZ+YmvW<8ph!8W3 zSoA!($B7&J6`Y7hy4>fF!MZv`K$I2-bJNxv-2J@scYRcl#z_z_&1F5@oGwYHGBdv% zHniFjcT>=8qFWi#0yCoDX&ev3V-cXXIkVFeAF5@I>Yem#W z1w2nHAz7pWbaM;27A%RsvZPA2Nf7Fiwli$~%Bj#4r5Uh)?@KpFFvVu1#&E|rueA;ey@py%v`;poTd zoR0PK2+w81wu;HmFgf?YE%U zlwWI#3O$4Uv}CT+uM_i)`_X|b4bMKJwV>jsE7?I8fxtZ;_2=S2po^;fa29IXV ziZIOP31ZQaU81Y#`~-j`oyRm1*xm!NNE-?=^6`rKsU*~}W5JgD5;Msbk9Ip4RRy)^ z#Sf^6=pe1K+G)Fw{rsZIkI{*C)oAr@|3m-29UD~T?w5Ag9p7m|AJpFrRxId4d?SCP z5mgsShJ5aL<^zV|p6RT&Q&6p=eVookfDzJ4|X6gx(sKC|*UJ(tS{;TS<6 zWP%d>(hhTLRfTh1c8d|m!IQ(a4oKW+8Aq8~?g`6!0D-*QJ9&u-Jtz^TDol2i!>tPJ zVJ?9-3+!lw%636>io}C1yV3FBfl52&4$qq@s(pf8yD{FYY!ZO1lmW@AL|1XhmSh63 z?3>;L68lCAPZ7})Ab2r_62#MWgmPr)R=UW%=MM3xy6GGkQi5P=DsnM0Jmf48wp{m* z2WP#e@VlY^gO?gliCVWS?|@)itgZV|wvM!J`VZeVrj_Pq*vWZR5uZsdLZg=t`NqLv zN6PbevI z`VfXrI(0;(Foq1(OEOr+cqux}gjBpHQ53%F=RO(S_z&F0j*@qH!w<}X&f^cbrL4(* zns`qQ5PU#7S6k`|pL^HKvLt;{5Dxo*EV;kiL86qSFAFW!5LR1U;;SR>Lx9$np!1E> zqsk`BZ;GaqjNGC19j=@(qlO~2Jk;MrdKk%{-3_EuOI$Bmi zrPMk4=H$k%+G^G#cW5}CMKlf3(Xo-Bz4zKWEj}GbmN-_(RJU#T#AVH+B);cV9g1s| zo03j8_`}Ot<6#P^NfYGchYM?JhH4NfY@dPY)-5*;W$fn+?g#w+_B?!=Lgg&=#YPwH zKxl%hw};J;cfz#})q$pleDhQwwQotnqI){fV!K9E66MU@<;{4Q?J9=s{V>}i{VCoJ zyO7SAD;g6U!`Rb|Xx)>thvKR8_w{aFVLhQDq*^FzpTmDOK8jD*uY5cToH(Dr)X2KN z#kPjGC@6~H0>L2xVA;&NkiC0FcH4ky0<&q(qtPP$EvaltOiBzF@&0=?^s`YsG#|uA z0t`Ce*^)z%B9FjvVH*%tm&;ze)4Tbe;-!=G=s@c^ZHKQ*LAbWR8LjTsbVOs)w|Ys` zeFIe;Ef?|22f8ioSUFY)Y;&C6u}2AOc;m08z1@f6=!f{w5T*l{-!kIzwQpPkxxI3& z;;mX~`N4YRQ5$tka^}vVAZ|5OJsrvGr>3YuECO(gjxgMgM{ssbsZr-z*vBxtIU7M* zF*S4j9x0}aO#|3=x5Y^Pq}tMnS2y7)aRrZvI^$uTs^|bxCy4{s{z1I7?u6YO#{jRv(Z4Y;3FJmD?n1i$m$gC9!rO(Z!=Y6#Tor;aV2Z(YwMP4wvXL zj_>SS>wfyXud%2!)(<@{4L?pXPQlCmp_LM;@$u*chl7)>kF4)P6fx(?MQ{L&s_vt} z4^D=YxSDJf@9AglJ5Y<07wOruu}E%QL8!TG-Xp$yvRtgU;uF%(@Jr(P=9?^@QJ;iy zK8$HVO;AX>;o@-;lgpOYACW<(l!Q782U=-8r;x;hXTnd7$wNv4Kc;kwv0eEKN>Hry z5PwE&Q4*bCp&}4Oh>`|Y(KVn|FpR+AA3w(gi>xuK9*3m1jM^JYFg1^ zU7+5DU6Zae>=2TS?XF51Y|1DsL#rwuxLSy1@d!x6Qe%-Z1vYif)U;7hZNny~k&X3B z$YTBYaM(QEm%5{I=@7P8?bpA2tieNW!3COx{7T}R9dY@zag)XH=d|T*D3M#e^saPO zWix#|rNi8{@azN^jykt_w`FGSPZHUqbot6Zr>!xX(q%VVCnK89HLo3t*_r=dV-@kI z)5f?4&p#Mf+AyKh6h$zFWyk1LmGpaJII9N!C+9_Q6m~0B1kauN3@YBD(UFN>4ovyG zYqxC9cVt+9q|{<;j)e725zp(DCwIGzUJLF6227$~?(-tp+?4+PcSO@_cjb)_pQsqT zBLqb~b&u=o?cEle`E~W~u9J$jX5GHOuh&n+eYKnVsk_xrcdgSt>6`V+AJJGgiWli{ z-Jt%YQwI$ej0WYa(b83A(~cX;NGgaQQe;|tH4q9ykv5^1)iqSMya-8FYj zez$qLqjTu+E#hlmy{k7$c88l)v0k?XXxxc!^7>)l)%OqmgHpFENjF5;sr94!^}}Vd z2=?owsH?u#^b_9i2yuFmy&!{_M3whtt6taE>g@N3ajVJOH~x1v2<~Sn3;lQFNw^J& z2r9F}`N5B1oTszp<`@+;>8Ag2xFUc4k3`>f0V2p7v7a)Fo=%^Rd7SW+z4NxE8Doj& z_iI=Ex+_JuJ`(kBg2HY2;U2_2QI$`$?_PBKp!)*>X^JZdjH4insYxDptZMvn*wF|j zE-2bPX$XWG+OSZ2t133_ZNG;KprGz{v+F+UV%yxxPx+@kV?@wo1^si6<;QiNber~C(LZuFiU23(&v^}6}6Q9rDIy(^rDAHG$qPrdxj{jVRt-EMz>zkT}cb-`-Wbht*a2?&`xvmOrc?oWDBk-Yx!ax|6%fS9$qQGW%lxT)q8A z_r~d$3{?87A^ZdRqr*?;vo9~snY*5+7uM(h&$Gw)+3T;D7sTm>PxiNB{_`lDzl^Tl z;KNDX?3dXmolbrk%p`?5EB%4|zCgQ2-os2%bV_tGIf!9>$po0SNY03qUV z=N^wyxMQ65HmGloiJ4c#7Sa=AW&WBS!E*9>uPaM9>}k0t z_{dhbQ=Sw!=#dT@-E*TDA17GC#Q6Z_eB?c8m~CF`*1D8 z4XH&Gjc9sJf*q}?)~?$S7S40DV>%`a(cln7Way6rTm20>Rk^-xi*(mtm*1}L%Dazx zr&efbFZ2D)>Yq2oe0_KO{<2tIt>lOMo9i7{;`K+lOJ@81hutqX_avYMe|Z0^?RN45 zXY=zy6S$ex^HK{Mh9A_Z^H0v&{lD(Uta|)ypiAgmi$6q{DXgaH2-gX|LlwS z>18)NemlPWL%g+u)4!XAynpHC_`&sFA`bh^-(L94q3-c*vCq=*yXn|2x~9BK%%{g1IP&1&`tVwmhNW7sHtE zfdk63eefih(KdIjB_f2?)|K20Yh2A>R3%pLvafGHZFjp5)Y{mlh2S6D%}S9(D8Hw1 zX4^kNVt!}pT)AL)`>girus&c7$qUXZ0+omzFE$m!5G~X@ngl^O<^ge79w2)|$|1*- zzq1vx7rT8&Pvh-nwM28j8}g>x9LCGdr}x|M9ya?jdZ<4g+ z|Md82dy}so?u*(wEpERpKQ$PsVaMBlzOB_h-})cB%XL2duHNex>-vXk?Urv3x_;^W z&Ke6FAwwiKG)w&FX6^onEYkR9T)p+|;H`DPXm;`6=zn?QDEb*MH7%wN*uX=*uahW$ z)qf0m#6M4$FY1lX>>7IRXrW$A#`M5dpB)e?byXYVd2*Y|>t+kgLX zXdZQ^$NdM(AW_mC{J2&-5`(5s0S^1r^?VRFK%!WBhaUe)j*g6!d&j3jMtgQwIuXsB zt_2x;1%}!nj3?^SElK-l-}0$qLfH-Iz?sIYSbF8bsvnsMFhf$=l;hBOq`J4?KJ7e< zxz`W3tA=ne!SBb;P)Z6JMP3~qM+E!C$bt@jm)`*giN|d@-ijxbV;H9CUZ|~qgbDZE zwaV8ItEGGQyVLbeUw+!f?WDc$`>p!_9-BZ9K=WaBbHh1FX==T>3zqfU7d%py`Y+|i zUvPyGqEl~X-ZgH}r*7^3+`0JqkT{FtyQXyx6aU1*3X)8-y9t?FVKIH>_$Nf+%#)&Z z26rh=DUc_}GEUBkcnBRJgy`7A^AdVX5fXNB)_h98y7a^f-!azcnW4M{Q$~4yen9QKAA&UiVSLRLRVF|{}#~*fk{5qAt z%WJXcwXmX)0@{IBWxq>8i@9RSb$`ikl3pU&d(~_*s?UCW(~a&}>VK!P=rE zt82G)xnj58li5a%mZY<0dF1}An9#wkX8$SdoAgs=EQFx3_)kWx)Vo7{N5`#>(EfEE#W=2;O zfkPwt@O29Sfa+oyOV=*E|4QmymqSok9E80Vu(nGq~czCZM9K3)-esI6l6rWbdg`8 zbLO68g&hV+pJpV3VE`GWQUMf(d^IcK(Ktd_2IRvO>ZrqS95BAbLQ6%<2TlhIC}W*?utRj>pbiIUtR+ zjZ-X~OVWq(079YRD?rXf!2rGGj^BC-)!aEhNi~vwM8z&;Mx&1%jy5b%V!D;MBnCW( zVFe;WIeY+b>xX0$0227PQ7r(iLDJ?C0Ee?tqG1olBI&%4DhrrT97A}}N#5-$M1!Q7 z0u#aubu{^qtPdsvbVh~<9%&2ZLjw>^!g$zv68A5JJN6qp3EBSb&?PdyZe=>Qlsnlx z#Q2D6Ux8R4IkVuS2I?0j!g~~_5usoF-}(GiK9d9q^Q!VXKkW$2lWFA+fgq#-w|)a3 z0oWf52xc+Qj<~Jq+Z`K%Of;vD#2{%wN$_EtfUZ`AW$V$`U_+5AKy(R8M5&ZkJy2Lf z#Y07q1~nk$TSIr*`PeEWP>6*^;DoXIyU=wz{DQS#Lja*wJ8BP0inN9ere zz`q2h^&De??EN9E@p{^R8?cg*K1Ia`n#@`#avdr}!6XE>oFnL=yMRTV7yx9J9SS@N ze8RWq@&n*U9@%1%r?(-i4c8N)L%M67o^WSg8pP!=JAvTB=fdb{{6O>6`K~mUFs~%9 zhb9u6m282_oqNx79RqnTBU7_ySk*UL`Fq zvoT2|9c)8lOU2a&0B(5z7Omu|hEFH}WjMGvUVmL`VE{i94#y9H9C{>kh3BeqYk~EMU~QY{x@k+yP2}vGyuyxz4v!ae zjEWI5wHl+ylcA1900aqT@6<&D;}1Yay;{R=Nm>iKJKh*LXL>RsH&p|f)zokeYII;} zDEjL`0(r`+m|{(cK4L2fLBOPguL(%RQWkp2-W)>>H7F#Om`?Y|0YWez7|3CTYL4TO z+O38#FonvY3S)xJA)p-ko_T#}<4B26Oc;WRUb65|OT5Hfb(Q1_Ncfs7m*b0gsIrqYpNIQNG#Lb*;TJLxc*h$8|YBFW9?D;M&)=Qcwm zsFjE-dvgZ+&wW352qMAFX6{!g??s{AF7!nW`@`1tLARU!%h<6A@i#9Af zPdlgw4~|GkVCTJ0=*XkFgcz8CfXkSBo1indDhC0)@1c+*PuS5|a`^B;cIg3bE0-rx zk;8(+o4`cPb!0S$#1ccg;`FbO+M^7u+>ZSES^{N51=AY|55y>h--CqF#^hjNZSuI{ zMhsylMTC#vMOa2Ks345r2J(!A$ACgyR>a~>)jed(AQR%{u}(9YFoj^)h&|q5q96*= z3o6bjMjgy7&}5w|StCqOCa!Js{PP~8Jm5TFHK$c^0L(|6P&bmg+Pai^45H$oN-9E} zTQ$}m0)Pzy!_O5ERqv3MVsW4#Y#~ouYPeuZu3~%+z?D3i4aXo?5xOtVoG^*gDv30$ znnV+!WsixC=Z}M{ccwR>vFOy+NyvG`yk^COWjmz(KpeC-#4~ga86-B$8U~MGkmS`6 zF3L^|Akr{-Ff>pEFwnNa6+fb0z@`@yC{Ei%<>KNcf4oU-T~Q?w_-R}=rgKnQoQIWL zkw~jhZyrkx@|KuQ3C~5Tm^Eu*TJmCHWMn4)CcW z;w6^WpQ>`ImPn^i(nN=cvz089D4l5uV5XHNl`HXxjR=jab~rO6Mss#4v^J7K)5_`KuJnAzGJ6Mu!Nx0MX9Bbn=+VC{K8!!7>?Dhjo^ z%wmdIT@v(adRAObRFL+3QegO@S|@5DvL&JDvP*acAfQpM!vRZTu|Ni?#^@MU0A6W; zuaPpv9`-qb1B=ND!$LUlhw-4d>{Eh1GNnS@37@ilR5=DM{EfR&^2O2hcch{@f=Nc%dNERY}%UA0ii` zu7k`Q+}=%48>Ebk*O1Z%DiB6Dr$&&wijNO6fHsJTw=}5Zk`b7IHA;J3yf69 zHD{2C(F#!4q5l|VjS`63EG``M*BnA*Vk`E4YKD1*JfauOgHIqDkc0WSJGxWC1bd6A z*+y;CVe}KI#<)QEAy@`;E=j`2qJTz2(&w}w7zsxU=LY9u&B#Z0fMATI;KsAyTS!Fb zaYC`olL;TlZb&d9A-O(vI@}U`a%9S+HgQ!HshqPntr0=c4 zw#)s@?oL1imnv&@Tyn{Gl)*N<#B}!9*cg#y4%9a?Y`_iUw_!AhxPMr&xN#NJ4eYii z+&r>ZL-q1>Q-HNSdKoS4}*>Qm}4no@^NPMb`{vCc#t|lb2SWo(UIcDVro-ri@~AAwv5+< zdx87jC(>O6nq)QObL6ikVaX!z5&+98#aM9nI5go|0ZPPxx!GnF0vvHmD%{y`FwanF zp716qR5>vdSONvvvocZ~-{WU18{V*n9{>>^OBgR--AmHturXE81oR_dA0J86C6BP`VvZu-6T&_? zPKaddsePq89r=Vq;3z6?2jpWI**1IvN~oIj!579V8q5O92!)=O@GUkB=D$XAOY?Sx zwe};gCI*i8$_`1I0egVAv;hhm9&*@TT8Q-Mahuf^Cp%^tNh23#!7^g(?&1CM6So9Z z5{tudVt61w0Tv_ZfWugj2-fgNsF$%LZafYN-RBdGj=O0{@H{K|sj{Y-KO$ zAn@#l;h7H{6e3}QjtCdfblVX|iyB6Gq|!Hhc?_;NBf0I(Hy$yK0Z+IQEGws9<Dj!g!T6L?{upaKm=#kT{pNK;XZ zI)F8V6eO}}8T`w#w|M{Zf}_CU?`!C`z>pqxen5~JFa&i>z-EJ8^Q-nF0KUT$PW%%< zfw>|W*~sZd=%-Ti34!iWBgwy-=?j6n!XOHCNpTz2x7wD(X_*;|U9MqDXWhqP2AcpB zVE&Mfq*Wz2;=zTGZ2L$kX`nWXwRwj<58YwNL)!{jQTL;`>M<#|lDBQJQhh=7^lN?#)aw2*yIhMCFrc1@Jah9A9Rh)TJMg z;V`CgOHL|nG5A5~U(@I;f{~0*o^O=p!sdSHvVsS2VE06n3Tgz&N@+aX*1*XpN$yTL zF?j*;UPgt5(hswbgCl_S!2^#u0Y%hD(nDaBzdlGKszPvn7;(i5#4hB8IqgX-b8Iij zYb7NZ4Cqb4+RvryL2u_Fo|(oxKP6!&B`4v)X~d^sbb0;u5VV{P7Wp=W2eDxSEDH!h+(t4k^fQC2gz=%s&F-IF9 zf~;%R0$RBxhN!`OoXqO3lUL>+^=J?o@S3sIhmb}!CQEvRx$;p#$7rvpv}&*?3_VwU zr8`PX8uUdf;ii}LRRgR1;tgG`GO8Zds2{*OL@km1knt=1B*gP0SSJCnvK4RXbWVLR;V()1`Lmw zfv~To&*tvu?C}J}@Lvb)jVVK{gQXoFu;s4y@NC$1h2+i88Q+mGBaG&zZUJf$0D(^P z7Z~h0H&GX8hmCy-nK6Dd540%ZDq>MU1dcGBj#C35nw^1y&5oglm~IZ9&a<3!1m6f6 zAD=HXKTwEB^08)bieVXv}3>v3OTPa^YQXU^pO&T z!nMut#RHoYo=W&0Wtbz2cE$eypCDrEOAKB7rF93o&muR_nC$fE-GN$>G*yx*z6e=X zL3LW5e^(Ts&eZC)tX;HXmKoEh!0#*{F5vs;k>FD5w;K$>)OJZ@q!PDC}Ro`sfG~&vl^m| zs_!w;kos(rnK016ub|6~a#(98gTfTfg=nqP*19$pfG6&JmE z!-ku1SB?TLu4-!tW@u*A{s9v_naTrWl>^H}>pSuiBZptX!?~3W*&fL+>_)i z+ar$}_$W#>PHH|#K#k1Hy(v>LxMfQIIDD2mh=64ja*v|}RKUsX9DsN>k8sE1E8uS|)-Yg3HZn9; z!2c*q8=x~4H4n@fVv*!MUH}-m0yiUHKS6H?S+Vf?^yYG6ld2OI%t16a+jZVSAmNphMBNfN zWtS`}22JCbcP3mIK1ZoZ2_hJox0XB*AF)3A1ny0MZ9^4-%0M(4)xSq)1v6dZ_AL>w zd~89C#IUG2BjA4|0oWiyd_6fleM{3KI5*xJ3=be!AR!GuU|bP;YS>X&Z9D;pt%p%F z&2)|#L2I(PctWXZwh}ffh6&vedPy1@pS4T!4?t|Fd=^>UCWQR3B=c;+?GdYqtD~=Z zH@uiLsfE_!?x9hYttbNQvO(5OXgBx-3j78-10I$pOpZm+7#4Dt7#cu5B*<8hF{6R;T?hs)7Teqd~iikg(I-zxZtl4fF!MhA!>&&iDcfcbS+--A;F=X6QLF$m*G zId9vs5r`@1T-OE-o-~L@b`CJI5k8I6k3qTRmovU6$Z6pSE)**ZDb8V-qiIng`X$&S zZlP+(q(uNQAaK+Cv$X)Y%+@y!R*_r6<1tn=VV7K$4mI@+^+k}vVfk+jdX z$&M8x%T7E%s+?X~c0F57VF6Hf+W1VuZbB4pJ4v{QxjqRv;=PA5CKhO*K!Q1mubWx` zsMVp#Fr9HI5+(rJPF+Lbu4X*?C0}>y&H$cjywu820_3+C+FDvYSC2A)OZ#e)eN=}P2iodJDpUVyj1r1LC z4;fiLhTX`Vi7jt=kB^W&lT2GlH6t`Cisb>!0iFjE5=>Pvo(Eo^wQkZGPY={T>j1GP zD18{K8M{+GPI$)g-B9k0-GfbC^Bj|p*Wos$h>8x79(G_vPEQCFpbr9L)&e*zDng9) zngvM#n?x9pS+QC;V=zYc8S>u*gk(+1$N_aPzb`xnFJbKIvd&-)xLoMjb)}CfPfrLm z0}`=>Z>6AVe^#tb|$-&`6C#mvD&BnXFL4M|}X;Etm| zO{@)fC~{=a)(M$j5hyif%tpWCLLrwNRDOf zM!=;#gPrVb$)pY`0IuK@T|sVT4e7)Pp8F|N2CQ!uGOv3a=wLE%7jR9$Q66gPhLVFe z!rH_f0?as&9>wPl%*MN&Mm~5fp|nAiv2m8Y4H$y*x&S_kp!eaxV~hmMXzV5eS97b8 z|A;Q-rgkdArz*4THbfUOj*>f$oWlGDEX_#@Xoj$XoIfxK6ZbY~1lMS3682fJIRh0^ z`-UKgE8Jxz1ZZPhh6W~V`TcM!KS{YqM6OLj{v2 zZiaz6=Lu903Uq?{e56$etOvdW)dsPH#Ha$ap`ORdG&x`)|B0&8sz%_`GU#w(vhWBh zHOw6bfy4>L)sM;rtPI=&h=A}BenzldEcBp|0}l^N4XO&CVl$p#f=xYSg8nzG4#FQ$GlU&v4>B#na8X6gM9D#H zGKk1QWjkk=hEWMoDpvgGnmLiEIfN`VLzK&x0bWXnJ*z(~AT%1`7hOeDFN`)r8=ov1 z2*NlN8o~_J0rD$FhJ2uKzwHVI@^+y^X#5FgO-aYG{TpO_vvGFq=VSrD(YYr{u2 zy-x}>tW6HufY1yso=w#F6?t_byNP+{=w`shRY`eZWvA3XcOb(9P%ykO=NeiCW@D#E zu0sWh8@wW-H_pvau8bHiMjDe?z_9+Js{Lmo+#BEam7`M#p zVava5K%gif6OamfsMuKW33jClkqscWEjS=xy$nv?+*ITMb}a+V2vY09iGm6axDml~ zyGfGRaSGapNLDekBAx?~r)OZa4id*8LpCm1U@TBpKmjyLFqQOHIwT%2Cv{Yf5Rd7^ zKDaB$GghbuHWRGSqih|L-72sJd%WBgesO-&6n34-u#>#w9$gnxei@Y#`Q3B9lA?;0 zkCBfln?OU>V|r?;g!`XcV?=AFpw}BFp&}g{H)Hnz>&!($-!D)!USKK(h}I-exM2jB zHu==(yZF5$O%N2~MjvXB5gjqfgJaS)HEd+ zIWdScI|Ifq+6d6Xv274CQH4T9ggY^868D4ppXlKd*(2{X2^;+PNsrb76%W@hB2S} zPfarFNIJ-vsw0~Zz~eX%2_S&yG_xIoUKAW0U?HjJ3^9<#Y@60tSIhxiwG=an{k$r2Tny6c2Y2lH8 zfU5}{C-fA;khy{MA~+SwO&J?_1&MOy5Qj1F`lvL{VAF4n#z`lD7KKG{xp^dvnw6=E zFk)m?fH?#grVfHl-Ux;!2ar5xrB#NEg9MZT_+yc`H9kKMlbo-$3gDm+pMnatZlRg? zM3hGvdKXyefRBVP87P*hlz{j~wtn_-B4hdRncYxlD<*QNG$tRgVo(p4qs`&WGw}gr zLn1w)Q=zW_3;93*^h^vA;{b^(l#dv+habe#IdX6|Kt6pPx0?828?~qdl_3qM#Inrj zNK^q+CX#eVW8{s)rojfvRSW4riv^8XcuTlqsRe90CTrAS%?Ni1BFS-p_|Q{;|0sTX zR&J}Nu?{(naJVI*VhaLb5Fe5-Y#1m4y%GALa^&QbENH-j<~ZePKre|NwV+qa2#`WR zv{Xcw5Qj>D%bIu<=#LR;G?ykDKXhWrzcV%BdjYX*MsCB}V#g=#100%44GuZ7bXi*9 zyK<^nk@W|7EKlS(*u|gRP+ZDBdu%_ zU|{Z9oiRKJOfEc0%4{-U0o4IoabW5<{%raS<}kkUQTvX7w_=K!W)}>5Mt6_su7XB!=Y{ zkdyOHz?;=Vk6ku|g!S?f)9(S9!d05Uzb=tZ4^zaI>r6;uOY4t$Elx`0eO0IVR-0a_ZD z8GFpyjP@Lx`Wixvcys)SzhlCsRYB{w2H)$AAH`sF=6?_)L!;7I>!gsbShh$fcLI(` zZY&2WJ3kgX7V8UlsKuIvbQ`h~St6E0urlSic$kp6abVCx2Tn{3NLa=>s3?@X;-D=8 zq`RCsJPdS#Q7<1tGeqO0r!X3wC@FS`;>d{y)@n%0KupFxvc;ew}kqa{kj)%HzrV%YNW6i-xRk2@9@tGeSC? zj8%?pgcS9p??5*oe^Uk*m@ZbpAw$oC>{|sP%-zI@FhpPzC4>4fGq$aYOBM23mV_PxUEyzrb>Xbk zY!3{w1v@|Ym*acfm&m#4!a#UhRS3KpL@@$6$m+ol8P$*j3)6{As1%Yb+$~)rsV!mG zh8`pssT$cmK}G;Bxu7{03oIu*x@45bk1PFz@eJz=U) zX&RxnM9kz+0ge36bkZ@=WZ{I^-K@gphFaE2Gx8XC&4lX`wZ*D{0u&kxTL-Q-&S>H? zQMQ{&2cEP}V&tFLe~8y*fpC}w`1pAB931CVB%22fkz&Zt&U(k#21Enu6)E!>Star) z&jCZlB&53B5Y`5*Pa@7`igKYp(6Ca*OXv@a7HEHn`y@1cAgw#NW%wO&7f}S_F_BZ6 zVstGAg=IzK5auNXpt540h9!1fK6u5emwGs}I?!04Q3eSWaYu#r2%8UX$kxXK!<>u! z7@ibZspuH1(D-nGvfnY+bNrB?gt!F8zb`8zv?|d}fk?2@fXEw9zyKG^y}(e>pjHHn zf#&7RY>_>3H20nh(B)?l01X9jfGK0`fT=;AnlF`bLTBRBW@Zw}fXK2So4~V0z`%gv zBOj_jo|Yof5K%Ab>xz)%&n!%wZ}s!g8lzDul&B2M38O zp#Az7y`aShhL{|QQ4w%bq2wY8fSuU`>_U?1Lk`e302l}2>#)R7f~Dw&C)tOH!OF|{ zUeK1?17NHMO2B+Wi^P~ywv5g?th|yqAzdUeCPc3dtVe|rY*w&NzK&zG;dEu-^yKp9 zYVS}<*FjbE*x_n+NG^A*jh>(T@Q1Az1G-WPQz4#xa2=1X+{{0AOIT1hD0}7Rd?ysSA}->@NoBV$rD)3 zbhUL=*1Zw#-}k=Ha}MyGJ^4GcC6P)t2}HKaO^U=7oWla}J>}%GPoYBa-jGo#aS;~^ zQZJmDVVS@f8AZmJ6lx0<9&Uh; zNyre0tO^;=f;C_}%LAFkB>8@P6+IE=9^(&xl{zsYM42xD)+l;XobY&*S6l>W(kn;g z>yX1KYZ6VMMZiy%L&AZ*KQpxxC9Y=C#SM`~8{vzLTpnvo+@AaqU@CKL=LSTpg%9|F zWj3pQSSPUJDdHZSz0&aXq@=*Zj^jO#z?R+()mnZhSnp23jaKIP2c_R&0Mdh9Z9xHX zOy}20tjVOedYx@lnP^4Q`4F z&Z?7F9xrj4huno7vupVd(OrVd)9{am!Nyt>yk&*t;lCzuStN0fAs?D^ac2|Wp9+F} z{!Z#bo@iVrkAO{y31g_+6Gb*CZZo#xr^i$PfIZQV{9qa!saP!N(EaHO5a!_G&9Iok zT&ZYeN$CPXQYI}z+N>i_!PfpXn?Dt$xpWgy&j?PleK5HAQu#|+UNK;0^_`03vhcld z#yQfGJYDvg0hFXcAo);GK2>a}-lCe4DSfkLp!9fJ+~PWrah2k{vNoX4nE0*ukbutT(v4@H@1{+@ivBd)4#sqZ z#3@pefT6I=S)a>29S&|8r&NM%+6oau(4)qYyl_Pi7%OWFM^OUpYgmL-*~0+NJFREi zp4Ta>BGOTOqJUY{3dsu+Xxa9Ojccbr0kUK4O7Xs1ii%8*@PkB7Z_N>Du?Mapz+kh< zQP}*@c|@xm7+qah95gV}J`;FL$Atzy+!>eRZqGg*R4H$lIwk@dA(6c@%s(P{8#oXAoTLONGD$F*mx8Qo`Z~MgsNO zqZgj>GAiq+HC)PGa_iYr5SEcwjiEDRS`~#E!xp~2M3+TBVcYEsBimyM#Abm5AL&)@ z{}FFuh2Oe7FoQAMXuGKVQ;`QECwE~A96XKm&S92Zvn4NVLd+2G-4FO8V^3vZLg|7B z6E_otXk^JKgB$r#+;L)OtH`kyuwZxa4s7U{c+x?Le6t)m$45rrf=!4}<_MQg@wrg! zWwZka^@O(&wluoO8pwdOHaH~k&dR7sa8O;g#pWp^{s(^rt{av4Mob2KHg<;xPIg@j zDm(3;P=y$rAw#xJWJyT3RqATl?<5U8Fh||P{bsvIc5io&DK|Q_Qw&2N4$Iz*vq$k$ z{E^M!XwlOht73|kB*>~_yJ?$z0C*!`YuQsFdCh*u5-|?b0U#A}0W`iC_2P`!gmKe* zlijI@?>fE}fVm*K8FO?USoHF&eyE!PB_DHSyR9A}TA(pkM-kWiKs1~w59U5bo;We| zl${!KxDLl3QWVv1yqU)*Hle8jH3UnCqS`J;K9brFe%}GcQw5X7#?~ioAho^|@e(yn z((b_({ASq|U-DsA?CF_4(XSLgR9w0jqv+%W?tF~q&QS8Qu@iay&*}>>l$z_H7#cAM z?Il0+WWEHvRbNtK_?ts=*6b};;Mku6I}yF~c#|;Idz-$yRk!^`^Mive<=OVqNZ!@? z241Ot+wFGQf66ysZL8_c;U7nvwENrrUu`!Zj&i)=Y5%$ulky*>`dRUGrKP`hpX|+F zZU0-?+WgWUmB+)2Mp?Drw?g}rex^Vo(XZ!q}c6v3hlrNVsBN1IriM$g>sLYQkEFD9MF~TVd@sG5eP`~7+ z_IRXuIOP1%ODYG9xoJIqyw?_kby(gHc zWDhxpUknB>Cs$Ut8Mvd*CZ;+IMx(Rn%JD{;9%vJ?Rr>ROX713B7GJ_K>ALYm8@>`g zmqKERq{?jfWi#!JXL?)xJ#N=7HRt+gV7z&W#uc4KB|q=Ww0Pk(#Xn@rsJs^ZrNt zr1lC}E-$bxVC9V#CqN(|tG+a6g2!ZXICaB%5Lx!fnv0R>__sX15u#tWF9k?hTua@t z($V`4jC1KZc1`#{U=FH_I%IFcvGd9rtsEXsmf_1bjM0cO`+AuDLm_7e-_y1)wGD(7 zIClEQA>PDWFOREOYJR4@RaQJN8Df2(S^FNePzN7RtF4Dj53_s6{!R0aq0)SId|yGJ z45h0@`^N%~(T0#P&E5Q?-UdQ98Ie`0u;XOW6UhN?+j1Y`=kes@c)ePsPw-ZT(SCp(9QQ^ zb@}vJbNdJNFDD!cOB4f&(fU4VgF@$pnO7MgT#iS^cNH;M8)$vQ6TDsuZk`2khK#uo zo*2X|H@o|F9P?OPZvT+4j$OW7smn*@-4p5qx@%0l`*d4B!T#W?cYCU=HC{kMl@nvw zx;X3|(GHvuR3B&p6Y%jY5#Nf_3~V-gi;HHE6sv&CD^o{ud1`e}8uSNqx`iP{)sUV( z8wjuO<(=2g`s?Pj$JLh#Q<9vV-vb#SgvQub2rRTlVEfIs@x{lE-^m0HUcwE~_uDVD z5lc(e8tM#jF=3W7RrVq;?GKMZtpx66Ffq1Octr+e^2{iI7R+}0>aqWt z73?R)5SKH$R<5zq9{Gm*(W*=9}6b&}RhG*Sf8V(0u_e%Wb!=#q< z=~M|Me5{cYI#E;`7>feY9r=v=w8?;r%yVuh^bfAlyAG$E3V1WSh#)>H<)!c9q4iI;51epB>~cuEFq<4&w$j5^cWT=|gtSpUP7YRsLpa4woRm!Hc& z0~$O#dvWFeeEj^cU_1zi%ZY9ee{pruFKm4%oZI10yx5N1km+0hlkj`X_a<`ml{>NT zTxG7^b^|AHlG6RkX#DPv?o(9%iU#~GmmV;+UN8a;-+#eeY1Y{1!`|<`!DKKQUy+se z8`LU*b5hBgTimKJ|3s#R%Zj8(2+_)QO1Z?JYg@<+ycTCBP;k05jZdbx^L2ZneoegM z5}B{I5GGuG6-KkW5mh32KZpe5N&OG@(LVb^(#9mST!vzmr+f@$4$FU)%Mj$9Vpgx6ivM6=}QvDZg9bUFu`Zx;QokO;vQ&@1SpOwm;c+y+J<Cy~KW{H!X^ILDoSG|us-yYho ztbL|EA8KQF+M2+M*LF*ue5al)!maQL@G zi9iSxnIFR-=d?;>vs&Ri$hb%;Nh7*a{e;#EcL0}gVRb^Tw(`48dh`O+>APJ{&Ckm#sbr0gFGA397K=*p@D!&_&_!$d z{`+GhG7V++B?j<7h=*_mCKF2EjDSm&5<`!5XfxXr;5!kwX&z@5DM1hvrM#&7)lN|C zBqnKnQX%a-uVDxfCz?>6SfyS3KoTRP2s^HeH*p~*(XmrUMN%#RGHuBgHA$ZRSx5x! zQTr1yco+<_$F03#B<>N#V?5PWZ?Zj6Me)xKJjToa85*m(IXIe{v(J893n}* zt61Xk=@R0+l=f~h>XSMy<9~nLc2_hj(-j+a`hlLhfH|BElbh%Sbddg!hFPeZjgYz& zG&ByE^t{!DW+mtD@o}B;np{(<#c{oqwpOvBd%aWnflFl|@1F>*lB>wq@`HYStT!y` z_Q&-Dp7F$5_Cm327C=3yrdQc6&ZPBYw>LjNz5(NzAbmt>l0X-Qcine~AykYqUK6J} zBmfMyJ^|sl7gq=j_T-CtliUIr7{X{m#DHFM%g&)(dK4XGYdiig0f#i9@<ufg9;Y0&Mh*=_u0|=2BnyW?G)U+P!wC7n`L@FbE8Q2Q?l7%PHntBD&MBRQT9&H%E z=oN-ATL`zYX*v~H_|A~OX2n6kt~n6CuL<6h&ZiN=G#lUN{-`o5SIntL`T&*cxD=V8t{ zXW%{`U9|GWv<*CgH-8vhTtJ~z&d)plTb#1cAQc|5nNkgLOZMdGokf}c;lv(bq6&X zg&qUum<2Si6+J0n)+#}_Ma5}jngAiB7(+@*F7HdKg{+S3bBOv<;OR{;^-Put;z*g< z6DZ;IWMFa}6wB*e&+0-cB=^Fh+kwdz0$H=Up8(_QHmva9fun%;TB{!j@#-MftNI7h z2W!iPzSAH0$iiJo>zL4JTq!FayL_nm>qI`lbrAMtKXP!H)|av~J!+=EYCwi&KdVy1H+pZ2ivB9;uwMkxt78_c&^pz$M5;=BedN}NI zzM?tvOxi`G3XFw|L!3n~;cC6u_v*V$HpIQY67PW!NO=s}sw6e2;4U-B0LJ)bmyWV~ zTE~9My4{8%#zu(ej{^aK(9<`%hh0LrlkQcKXSZkU1Pv>p!V#CoVq-iw{z69cd3-Q~ zp_%gw!{{MdYCx{KV7L{xRgL(kN50Z}R^$^Zr(g+ayb4byl;c2o3L)@Ge)*1wI%5g+ zESK;jD09dfgI>;^5lgch=K}PKDn+1bgiv(A(+~i5iMk*<(j@oN`y%a)fc+5aD}o)0 zTf!fUG9d4)Z8B-3PAF*-dQSpH)NM#0*p@<28l)ziv}EXDNc3nZ8+iz?G2ym+gh*Bq z93JaijKYBYn#mDvGx3eI?e6>2lv7pqh=#B|&@H1)zL)FtiTXv)JfE#KDJWHcPw)us z9GkLM-=ihdiF&b8t%`B($Xi4B9ZZ%JTFmCRs_O*Z7~kEC(nosTPE(cQ*YVjJq3oyn zExE{wsHI^r2x=Di#npA4@BcS3+6&V5vHTbknNGEq=!n~&P-DLFO{0vyO|JIdh>ysM zlfI_}Dm%H}4AHr3Hq5kU%hgC3`m5mGP8|uDVS*vLY|+*R-ub+!`*ZPD4dqA*w}ln@ zN;C{dnGCrRD8_(9%!>8}XmLt`>m#oQG&JP2;MqKQ?J+QlpSky-)YpQP_k#f3O| zNUKGG&qCf*we(o7*}AB0yj?3FS2_N=c9Q)HchSjx}Cvbe0rTUSa z`CzzN=0e-Bv`gi~j!k<(Uz7NWa}fXWw8V+lvig`f1P4l8Yz8qQ_k0QMDlPQi?k#ad zG^_lvy2d1-aN8I7q91q0CuiuBjYlojPQhC(O7xaj(E`U60 z!F+&}ebs-RjP_&E|EsB|K9Xu8i^XmEuoVz(L8N@IeDk0%pR=BIuDS<-0-*GKRAn4U zvBkOt;K%R5eQfQBJYkfhWYDYm4I;zx7~rNN!BM^;Q9}NvgFM`Hj~p6t!{u=T>h~dQ z;#CDwH%WFM*IThk-+Xx56;I!O$esH#ecWYF-IIdL5}eSM&|59#_ zhaI(rq?M9QrDHNF`-g^uSy{wnvg$rAmL(#nj-wyb+7nQfj0fAOL!t&-Dx~d3=e$8) zs23873^K&rrrQFG-lMcf4^;2ngY9ikNnEp_XY7&-a@zGHF4X;|jdA4RYjTNpN?Y>N zb>tH!^&D)NP!TI%=Zvjkx@-AbWDeLv|A(}aNPWj}F28y}8i+sjy*U@MF z-6ij4V?1jjVXKbq5eM)lPs9e9En_98GV(RsQY$G<4Md zYG6yhIVDVgb(~#x*`MnAR}PMWKNkOICElJK9U>mK`X5Ha&c2^>u>*3R{Od3VNorR zzAze~U@q+exiDl!jHhOc&RjG!e@Qr5c*&4t(1%-V^-G|Uvry|6k`}y!4`2u8?d0{f zeP&udG|<95jvxJtnfM=#N%#XVcv+2{tNwEI%AK6)*LMB~1d{GA#koE_{8YOansx8~ zd;9-w!r6fM#o18%&m1#0*Sk^J@4gppY--<*e=`4zQ$^e=66#=&Qs=DL)26%ZzhqlQ zT>P&4jreuC=<0X}t3h}YV{Ne7JoiG zy?OWW=S}&|a<#n6Hp|84k*$8QU!?2o`{a*b-+!`~%}-gD#mE8j;{$iLJ>3fU`T^Vl zhm;IDH|{qi(GU3PRtczH0BZ~3(@nnK4+KW!Sq6H9+hojQI98PwuETl`j)x%*3972hF&r8o9UyE*He(DVhqfz8%?Xq;&HzO$a_ z0-$Hp*|?m!<3Mb`rvCC53oOt07=c~?GizH{{OEsj@1O0#0_?UCsXAMI%|zvqlw3BB zabvB0TUO7K1AMO{$w81ECfc74-@K`xesZOM*HqsF$WiW+H*vNmFOJ&h=m>x6fBdB5 zgf0K9)@#xo;?v>BEa|K?r7D2O>Qnvhp5lL--1YIIpi1O!;(A4P^>mWm_h4hvl(KNr zZ<-w)F`29hFTi@sef5Yx*6Rjr_aaLiI>bYDEkb7QIx4AR&Dy)r#t(;6ga_6GRTaQU z(&4dvBp}i{d$6xZKh2fZzNldctiha7GCn4(`nCRSuZmA4T*+fQu=aUOq>5H&)1#6o zchtmmA!!zS%0V)Kqs{U@-smeHuWhk3*PNHS#^x#bJ7v<<|wM;>Kl&eK0&{$Lqdt2 zeO?{N$yEHt{zSj;@A<+wCU=KF02qt|%y(XTs&KBos`g@uv*v5x$1c4(_mybtv4Q!CvvSz*SNPy!j4C81XI|^0$n(bb(6Sj22%a=n zJ%6NYBM#iEIB1w{8DSJbcvK;`d#*l=LiK7GTuACHQp^OBj5Qbx@kq>qU~iF~3v}(O z54rY_g)}UAj1QgYBtXX zNwhca6<@~V8iHWCK05&Gad|T#!!3@Z)GR14(;6oa$O~VO9B@N zimWeb>Z3bNcoL8sdwN`L_R`14Cz31014_kxn+V+H`33EXH&>44kr?Wj?r91#3;`an z3jz(O8cDRyd;;d$lL^x}OanEji_BhfsmWs+;IxeibyZGtgjPGH9R;D|Uaa+SP?y$oOyj3}mBfKQ=y$Yy)oO10z(s^8Zwmeic zLcGGj7PiIJ6kuA{U%~e{SW~VxT#t?1s~8Ink3&z1My3Z4jrP~NZ37>nLsUUwgtG2_hcWEP-t8!1*skgql&+; zF%BnI%lo?v&ZdrHnt>Sdww+%OMwd!(E?E=?REDMoBOG&nrcXKZsX_0Ir=i=PdulM2 z2IJ0W4y+DB<6?R?2<^~lE}n&&r_N>BmaQ4Rf@@_kwQbiAuWvmbLxbCyi^1x`8!--y zqE0MT6OzwjaJ7-+h=6*WRNTIWXhl*M0(DDTl zdJsGV_?kkus|uz?D6JV>dCVPgrJBarn>iVCZ_&C6aKlFke0f`Oj~02LkA%^5Hiy3< zhpzhi{0vgXr9YNN!N3`fhZlk;+(zcm=MQ5eb$3p!bzQJaOy` zF*={b2*KpkNDZAB_>fS3UJe>1@(h;^Bz5-@Esk9llH?@|Br9(`D5y&Bf_i+f z4d!Eruy4C>GRuQ;P|xK4v9P6;QeBNWS5kT$i-nhVOPW?KSQ4^n_Y6XC4fj&oy(xA^ zU!bk;Vt;Gx_GPx)iF3OATxC2u*e-^zLmt%=Wy08$Q8qY!sG~}4Mn|{dbnJP~J{?It z`s2a089;6#_CfP0J>@>q&eh0Kk%KpKetRxXRvI3_CdH@b0^qjV?HZIQLJTUsF>1Fk z?IoJMi7g-HSHY=!cphk$Cr!O^`1y#XY26m`W5PRNBX^GpVOO*$dA7^Z?uS0 zqI*bD+mpS5_|UDg8jOr8kXM-NK9J1-5n;IIetQXW^TI%E^RChYJ) z)B1m&KR22!(+2xLF=cNq_QP1L{+*P* zGLt`A_wvK9%lTS-N03Z=j6ptqvA4D{OOM^vVZW4-Se$JJZM)rSygpavPy1Kffw|i8 zBL5k){!&;sXZb97+}<-O@w3BslAcHYYCB5GOF14Sxoi&8aJ6pN{hfA*6TXKaAvcop zLAuxzg-_vx^vym|?KlNUoY?t<{@fl}W*yR}W*Ww~gbYsqtPJcT&1nXAp39tyk2K#t z7U`k`U$3-g;OGNNU-WFDNHihw0b~(1&MbdRlU)=M7(WS#zCpFwtD6l#)UsJaXO8z2 z!Lrp}O50VM2pR6tK1;F>JHDTb<%i^*^rl^H-!-c>r?1-CeT7I1OHaET?n?2)pcvll zUdplIWI#T)hphT++k7mO`(1O9)_12i+ZWmt{4l_b`k$IA`ZO%)8{B;@KDyfBN8wZd z?&mvgU9YTiWj<8NS-;NjACFnGzbh8~=IQ;@-PKdNUVn(<_lFmH8s@*P-ap0C&-~=a z)VO(?EvKK-KNPVRW^q6D>+5WN2tGfyuY5Ev+QnV>p#N_Ft+3H2C!Vf+h--}>S6a=t z_47nB-)}x;vEl9?%~v3R(UT?SbAVV~J9;WFTK|etL_ZS7H2yw^nEb>$!u!&kwJ9fF z{rbQah;igVyEYo{HNl+NZ{`EvXPb4U$nN~Kg=6w-O+Cdre@$=7BzWhkl%%k}%`khP zjlsyY_P~gGwzDJ7tu=E%cH@V%XYvJNfL~Vz&YCKH(rkn@E{*jj6Wz49-zAQ6pRM=- z#oIL5;S{0Y*sXllaMw|_*1FXUocn#rT^$C|D)DmU?929;iqK*A`R?t0#8-4(JZiDJS>hWy^YF?8#)sU&gh16YMX{Pr{FDG5Y(s-7bQEelm5w z4*|@FpHm~B&XpVUNB8biXIvTD_j~_2r_K6*J^LoK$1nTKLvy7+SIqjFS9$1aBP;N# zH~EMEI}(jP`laT=S~)&fpL5;^rO}nVWpexX+PjV9gV1;ej6&k(uH4Y9rKh*ZZ%^xk zWf9LugD%%@Xnj%x9y1ha98Z0+-4I`yDh7ozzG#Bb%^WSH7G}<1kkR!PwXy7YPT*T( zPHuBDmfWFco;rA84(I1Hur=eesdSwLoiMr?YD0e-^_zePk*+?lIf z=)NR{4MoH+J_u0EyvaLk0s63dFYkWH7w|iN%}(=LRN~QoKsNF0fBFQq%KL{Vmb%}u zf$t`N=S1z_`+@!{e+>!r+26MpyY-j;3igi^diL_rgzK>*p`E{OqIm?t4V1qWIhkOjhH6Eq+l{ zbdfiLMfW{tUT{COUUId04dNB)>1Wngy$|t~lH*M3D=_f8v3`#1;!BMdJ#J9t^EME< zMlPLaYtSJ{-dxX%2O7ws_sll9EEUYDHMdx zjef(xK@%hS!Z;f|cl~UV7At_A>mEP%E?%h{IQ*Gq_d!NamrWjv=B)6+T8fsB-*;b( zP^bWS?P|KdcofHZ`wctH$tVr4))}#bi+oaE5DA8HVPWl^46U`E4{u*v!(Vm{i_TxA zk?&+4nm!CVg(L79)pS&n+_`!3(ba`WBk7UT85{h|qZQSvXV*N3x@e2!Nxd;iGdctns=aRi zy1YsUzM?z``fKdu=6!km%$Tw3|0^g8c$A(imz#3m=!vYHC8Uv_ie+GXsg-|$e~OZL zr$q%VVabSFhh#dPO~DRbrOqw^E5WFmD(BXjEnP6mm={AiB1k1(dn829&jvPY&SMg? zD(%zh>R9gLK{m*BUj+br5+{Id-XN#a0~EPUkqp)nc@u1nf?gm&=woZDD1RQP9=H4+ zYMb5p7_%I*v-oT{0yfo)KKyZH52k->2=GeDn_UP)eM&lc=FLBhEb~^r{C$|JFaH-a z9DY7ft`*yQ6@H#yx%%1UpXQ-9lwZ7s3gG_ts;ggxv$@a@uFghAFbK5ycNcUlg5h@D zjM_Zx#4Ar3wEJiNxSck-A9Zhx=p;G}r6>w(-M{y^ytxl&psKzy#xfXt+f&h3U0OHt zgj@&_sId)ajsw!qyK~rl(DaLqSY73?F<34B*k)%3?IRDGlwa5(+g*_?jKw{9N_k(% z37x*jE{oqNH;H&%DCTHzT}|i<0E^4 z*l}1pMKn4CXReGBfk^}*BfpEGL0NiPaEbZS~hrBW^BR+#6-1^QpLc_IjXgBQpwxD#W32atyWkf|sZQnwg}b_T25L0h#KS zP?jx(r)Ep`6XC1<7^i!kFJrlWB)uSaE89JuJSj=O-oxO@+}+Z!!yW>2w`aJuhdI>fBUxpI4Zd0cveP>oaSt9!){j!Oc)rA_i~w{-1%N5gK16$~1{r{h!0Zfx1dO1au^PZHTZ zxEtW{>ME9YqQyc zZgu=1z?6)60^E-e*GKOpST6hoF^#a> z;i*gC7)z#dGQ8nGOxOITQ$v z_a7fNTubxqGFd!Gt7N&&#NFnwxlflnJ$t(Uu=teMvHpJXvg^r`C9h7MN)ja?;gY)cPQ&G5@Xql z9%b{iKW@xAUqdn`)U=e*tV#Q)AB%RsAZ^7TlwT*bb0qcVAu&HxJB&o#_Hk7;$w_Q0 zuJ`JLmT!ffswEpt(fscBWxPyTw3QBIr4Nt&dY^!gVM~x%O}>9>glhR=R~boLrNq_E zShSL?TNAw6K*GbhX{9ExT$RixoNPFn;sH5H$5$Aci4EuFL_caXobcq)V5CC^XCSR$ zb2OFhde`j51(a!);k=2+9jw!Y+gjCZV{mfWA;we2P-2}gJ}}Qocg=_VVW05;KW?+T z>TrlD@b2z^SRbsoFg`-}P4kb0*4L}pE*J7$dd~+Y`|uZ~s&<`t-^E;oK1S$gC}1sO zh7Jk*hUDW9Ks0eJud6EFRZkYim1L_YU6q*&x1Gy}?^IFRWV;2p5)k@RQ8~uOa05o{ z#1jjd5TL7;Iw0b56CH*@#j*@)hOB-9KEl{XcrRxg07RvPI;}ell&LDOVUpT>jd!t? zf*&Ypl)Jp>iL#Edt7K`s?>1T%AGQfU)h14OdU4H80f;pk-|lQrTH}CY@IK==iF_4w ztgr*g5P3}H9{npYnUYVM04}+e2he@kHQ&whfyGc2RiXemIJ>ujdWdQ&n8u2r#8Ig4A z86acuIq-bN0DJ@pfqJT5@(rQc48)=45q8Z6l!=RQ=9^nt_1MDtd!?uNY=XT8z#a7m z*L&u)W0x9%Ak%J?8p`8QPbzfOhWUc247%2Ey=|~U) zECZLyB+{m%0V+6$yDrBoVvsMzF+}Z|sC>y+4%?6?`?@&jqvMq4ay^!3N;`OS7&4)- z-tFvW7T8mr-L@@H;NY@>{v{0MM{){>Uj`2&O{2~q`r@!3m##Bld29Tgn)azN_M3m9 zzxTR!GWDY|wrNl|7FfqY|BOt@(*`EQs3RfLPcF6bWeiCct6kknWu-tI!OI7BW&@VF?Q;!;1?V`jDZHQRPi0A=(};qFnm5R-VHrR zk0S5=U>i+?;n>LMq3>#`JpVaMb1yVJFYv5Jzl(aHRkxnh{et+00;j*N&i)mQYRUUj zo%j9@;IyrUrbD#V@J$BOzB3!a-_kF>vK`abuPrycxOH{OnO(gYPp+pggR|a~yc6}dH#h^7x&8r^5XxTUeWw$zrb3zv_88#&o9?e^?XK68zItw@iswwC zXlNfpLZf3EqoAz*M-;msSFRQRLQhCU4yOZ$#H~Cqu6Y8VIoiJ*qxjtVjt~v+27c>a zI#bTvkeugoXsNFG84s?*4*kt|z+@@c#*yZjYz=EA#INTW`i#F5E zy^s1&oYBs@@tXhsvzOFW(23F#u$@m2+2zBSQ%Qk7H4bzPNd#lB~jx3wfq?i4Yl_Svfk9 zKWv?bqsx*nDYY#oW)M)6=gj_muu3|t)YcvWMvvPF)Yi!uN1NFWKqiX}g9nx4s%Ksn za_YC1zaHk6Ux#!5RwEaWP0|8)soj~mhwr+gJ(?+=D z^@gh)vL|xeeakvp)cgC0ztpwSwoi19j6%#USHv%LxFbv(Dy?P=EGmGeRZ-k*f-_Xw zkvX@)q*HlJPj1hnO*f=-;i@5-br4~(823A*SJA!V1guzGg7)QTi`hn5!l)4}x@!dPY1J0RU) zno%=t)w7`d{wvFNjm4Bt%wRv1;Od~oWHvu;*T?T1b@|(|{zl(^FB2jimWN%v-PWt) zbEA4Qu0GbuMA;IxW=b{^;LaM5&4ylZ6zc`HmA363}U0=+|kK!;nZddX)-t|iC8)i z3O(+sdgXJ<5D~`LThMu`)q5pdS6m0e?s$xegP;kAJdd&nIunj;V6~92GCV+RfH@ep zZW$t~;u;0bjj%Uldr*bDwrrl!lEZRP$bp~_T(1b{`ng<2aNUSU_OUbTW?0Onl{Yj` zqFL?q*0-1slC(mOt9572wMXp6&|lElLRSt!(eG>jhOdtcyzn@#$6w@o&yZdX4s^u| zDH5J{J4@)$SAb0}?Na@!DIUXoZYHV9xj^drBv}%^6k~Vml+Et#H&*szy?a#BANCMs zLBgYL0KVQ1qwXAA*@r*Z0oLvv#|Xad-gEk0`OYJN+6~&zynhyo?<%hyMPr41|G*yp z>%ka4%?sfFjpP5qenE#y4Odck)!Kz?nX`Y<-5^AKO_4v9?JJjXdg5A-74TYPH89*{ z4ls;-9qOV~jw@@|ZHly8a7w82G=%opXMpApI}`-O1>Is-DNI-K39bkCM6LmM6-@c> zAs~}`LR&!ar|q@}jbO`x+-e--GOtev%z=5UlWJtX6qjW{sZiFRDzLmyKPV5 z9F$Sc#74BZPy>UpBf7mBE}7{E_(06UeBb-^8A?}NCqp5FrF+~VErhqH`L0TL6kycm z;%Do_MJ>N18L{8(x`p1yxd~Sh${}vLEV0jp)SFPXRH!hglWd3hGO5X%uOw1YYn8@> z0Jw7DYII)dbG0FH1R>_EY$C_2r1$;1mB+-89z5w6b1;Uvc zhRm%Te|T2TK?y5RBm$$m^+!a$DnFPa>QEfO2!rQvo%C|(cpMId-t1jfa$O$5C`ny0 zD5q;UGi3jIrWmL+sIz+<@yS7vIfuaD*Oc8s=r2S5istbJTGe)VGG3*#R7z2J(BO#I z<%TBwx^5>JoajJ8d?cW-&&48H?l(YCHQJGOl*xI zx9Ykh{7bF4ow*K;f3IXa>+p3_pciX>(L52Ij$R=sRCA!)CbbDjF-xol`%uiMN%Lu2 z$TSVAXA%&|#^36({5C#pp!%WSdEOru!ke_e+;#H^gG(3fhKK8?e$CV@A!#?#;fH30 zJX0kjJno}5IE4Krid2!VKSHMANsH529$&I^GA}0vx3OmoN-|N&Nc&tW(n?-d$8(9{ z=$`G$P##vFV{APtY+I_surR(s>OdqXo?u^5_MS-Xai6pZOTKLkH7M;Lt1X*pxtwZJ zVIw^C+WuVv@l^h;O7S`g|6cFX3|Q~8%C(%n0Z$@GH`3kK_3&nzCrJwGp|8`U99>!Z_beKV_{`lsGTz%A7E znvbBJ!dmZ~x?#oNXjY~j7P4KP!!4Er-3mgaG^(c@!Po3V&af%!nt|4h(U|J!S^In? z#F7ghkKy3FaJmPj8u*PitR73oD1xc4G@6D%nL5y%=*Wqs@1naH8_N-DxS^=Vwy1HI zz%2F(7X_y8>FdC~QcHEHM|6~ooFn7GGmoC}S!*WNUeqVK^4ib=A`ST}UMH|I3sy6& z;>p#=g4?5OGvej!lZ};;sNQw=7AzwXL&;J5de2Xf8`?Fa{z@pupo?UTsXw1~x14;U8$vsu0ZeDOLP;-pZ-G{bq&IauAcG5HMzcb*0-R(Mb2+Xl6UZjRV2Y$IW}X_BMv zzd7}%m&m4VnYA!PK(MZrnPRgrg-)0U?va_wUbZ070l6lhy4R49 zseR$OfjP?d2QSkt5LsERm%8zlt1?`m&qb_rh!zkf7% zbP=y2qS!(4)YTy}4!!5qa7-}#c}HRFQ=-#PQ7aw00fX)n&SWm-1ySyC0QX-qx+rX# z0q~;sksW9UWS=Tc<|1^DK$ts{W`hqWA1fR89{C9bB%QoYq&V|Xnm3qli7A76t`8kt z4nCR(yc{^`4m3G%NA5G~}ln_9xTies*uwtz0 z@Tt>?R^_B>%L52X@bfL=N^pFz0>N>U`$vIE{y8g=J~A=!%Ah|;&*v0(CXCBflh1@4Ay)QHFaiptDYhtmO^=fpAX7WGxou+g>p}<;+y+>*pTK?| zrPWDoAZW{uXMM~>s`0vgiW)uy?~yi^2%m;9PGnvk~Wf{RuCU;X9SkFW>j;k(;Zv0d?Ia*FV7JPu_!8+;}a(r|Ht0b2I|pA z!7fmw#TycDoUk<<*J%qwRJ^@-cox(sT!+S$@AM;&7_6zCG01?d@9?mNLda`SntAAM zWoZzEspF89zwS+L$dqHC{uAOBC&Cx6DDQOYS2%5erZX_SW{Uw7nCBGS7P}iFRHo?d zV#jh0m2Ec;|0QXgjK4b%efZmKa{U@$5ik&>r(Fb1|4!XrtiR6*9wM~?=OvGuOg=~OO^Jj^(sVcIwfbvBl z;*j4xxUSViTV}}GK;qC?AVWda$(savS{K%jnA>`fLIh_b?rEycAsTbkam~t^@9X9t zRipc8N)J;XKTf679u>@It!#fc7cY5YDtF$Lc%rj7Yqj^$dzliK9i59x@y0yPiCgfA zSExb`YWaQmr2J4tZ8&fu)3d%+2=YMO2>kYq(_g9Thw5AVHx9)Aw)YWIe^YLSL_0v{ zTgCfSQd_EZ$|s)z@P^+)XWc^>Z=g@B>tj?B+%ySfn{u2;PqATrIPSgJDXdmEpt zIb?UUeRXA3W>uQVu*aXXz291AZW>@0yQ(tcoV~yAeV=D7t&u?dIydgL>A&HbcuQ!L z)a6cSPo-ho*kE=F5dg0KVm8FFA>CFdJWs9L!Gj^65K6H~LXI zHS7=J_R@VeogO{&1NEATn*OIV`Iob!UnlN)dXk)dH+}PB@P+PopL@gXTXXht_%k-Q zGvWX7%};gv?quWr;<@<38j4Q_w(@G^56deQHY4R1BbW`^Yf8v=VQD{zii zuWY2px}y=L>GwZV9PkA9X9x@gT6R^&>>`Vb)l9xR-IrMFIg!I_&8wA+6#$?I%@ zl+1-Rj54Bg4J+Kpx89{ZJxZIaI|g1*;&$e;8F-2>@r=iEYCd|G&hfaBr*rwjuuk*2 zL$M7+*uY`VzS2*whXcd`uD5$Ln7Fpg`JEP@f1G4#fWq)N}*21Hk{=HDUeg6k>uRneYoT3l{r7?a5j!o0*oY3%pu#;*Z z|J-}Xzk9OM*UJ2nAKll$DVutieBWfhXA82DzLDNbU!QPr?rt8?%gu47mLz9xb!SDp z1nPbD0SUWSr&bLM>R?hsIqS=k>+n12U8fOX1?{GNV_Pk?E6^E+vKh)@i({Ozj~394 zl5(P!p4gRR-Xoqup=WgBB%7bfy%!eZuAUb@qDrgA5QWlVXFaIG$f1Odu0B(0yJk4q zX=y}4pqcLEZ~8}ba;yZ?if3ehTwy@HSN5hwYPt|7vioZwN5h{e!BkjUA6G6-WJ8D@m~Dyx~_iiP*slpD9(33Jijk?`zU%ODAF%0@jiP0QWgHVq+hl9 zMaDSk(`ZW)_ZAJ9vQG-K+7CaVDk`ei>3)sR$~)T?V(e9u{#-Y{(i6s*5gciF8QUhSM=i7 zqG~+Xl}BmejGj5Jf7+I@Td6-v+jM(24+H8AC7dMe!iV57VH72dy|D2y~x}8zi z!gum|s^9hZcbWD|N=X!aAHn4PVwpx3Ih{yH)e*$+)mQsOerSqs3-#B9S~e%QTS2^T z7%*77?NIuKc6}%8mx}g>b^fM(8jUXR=e@RBAweYsFNxokyOsFB2l^LaEyRoF$Ik9s z)C)Hq>fxq;Y~~AbC(YaU`Hi-^IXuktI1^U$m)J_vjEZsH9Uacs4rl6v@PfHOy+==& z`D9vif`}wW!BlWa#!S7da`lm{byIcsYTEfxaS5bsNxxzJakj{s1+w}ca5V9`$GFP} z_2MhBoqvO&=I&plw}9iEQTFU<>*8~Mw^~)xZ2#FxU-IW^=f{-57fb7>`ImoEGgI8m z+lVQMY_DheW3pLM3Ia2o%P0NmUv}OCFFGl#vT-cRxx#5FO!{E9BsqR?qRnh zJd-9)pKYrL4(rOMTbFgl5b?Ny4xcUd8@$SuW-ck57aAprSL9mcS#tFZf=iJXtE8fv zWLR&S6@ptj?JxW4QF^97k@`)lifgnUpKHxV{aQ+supbVMpPRMi{|n;_gH%Lqyi}t$ zAm&;9ir>?4nTNvltXzmsT0nEJ`_}qBN@$|q5A)yOFAL=rH;zB*Z|9E(|MYj?tv<}Z zt>064r+hOP;K=IY$dh!!O`6{Ah};Meo{3Qx%1DpJ*ejyW))tjLhfcf9`#Hl#daWo@ zvY)M^-MeK`-v#Y$(%zFKNv#Fg#z#4N%n0NC>r#mS>1|Q}db(S!$ksRe z+XEY2{KZ_&e*0^w{zfj>-*<1!r`6T}8cpx^tKs{{>{}uJZxK*@|DkTaw|2#2_70xa z{(o4u56hb)^w>_Z8LdajH!J*n!fyLvhloB=N6X}4vmR!T2Gv%ET|_%6wLc=>>ccPa}%@@A1vjGQ}Mt!BoKj^=6n)6zGD)q0tUL8E` zzkIac;qZNhY2>Oa-nGA_e-rLL8~MK#vNP|pe0m@MFc!miC~1&uM9LrF6p}`p)i(ns zCOlj2rQaG|vp~&jaHzZcKD&D?ZUU|NMOQCrDH+Axo6XJrsxEn539{v-I1{u0{cH$3 zjk3K(-4f4+*x8+DO*qNLBC{RuV?1|&RLiD-J5fqiXw%O6+nQ+g+S`>L!%Qz>mNGY z<<jJu5e zO8Eh^?(Z=iw43reR~1@mMC-y%?w~ z2TP}YY&$B6jYDP!uLF_sM)Co8IN?D=R8to&mZAI;0kmtVM)6GX0vTSrjm)Dl?e++v zYfF_548#sGXS&3agW}`^Ig+&a!sjbH5 zR3%BW^wfq4bA?La(Ym=GOZrgxXb@&OaY;?loj_rjV`|cF^@Gs8 zsdC0|ojHhIT@)^yckUnm-rSER?IHk9v2uS&SY#rU&I_`FW;v1eM*I)%dZ^Iau58f} zt^<08M@@f3G+`i2O0Urt!!qog6$ij^?|lFdhaD*oF;o+F7<41noTN~OD{dIZh^CUG z>tpg8my94m7+OR2Y`yNmH>|Z|O76*IY@f9p z*WwNuSM3~D1&CChIbyL6%`195@toIS;#{}Lykfwqi1D)YN9?WynW1N#Q|F<$RHN!h+V`?>% zYV3MvjyIh&;n)m5869a8?O69O>A{@XC&)b})_}?A)h9|w?cgWYSf37q(O^oQCa6wq z8Ir`4@brB8r;{Q7pPyM1)g5`1urJR}o~q*kqkxaJ>Dk$n;mE%{^RMLQgo(K&9@%62 zxJ+qb+2auB@kcW=bhO~9A@RmF7|9CHZKuFwbBs)o=L>Ko7go>nYF~FNtj$_=WCZzO z(+-h1OJ!?3!R5QHE;obT?cH5x4FVk)wW{y9%~SMhT@y|r8uk;@rwyU>C!SBGhpm~Q znBGhcT#ru&1POF-05jPC7p}-`hVckEhe-hTv28~v$to<@GJ`1au03i)RrO#SFkwdI z$3WdOm~Z0dGBpyq4N_V~5D&)KwH# zRGYiSK3|l~AW`N5yTYe6&j}ZbY?)F_1GVl<_x#mfJ%uEz`_`e9Jls^)V=FSoRw`V zue;>|lT+S`n+4n02NepN&@xty+H{Y+?oFO_G!LS8)$+q!WQeoU4cZsIJ?7S-mRww&)bmBU6X%fTvB@22Qi$D3t&ldM4%so8$_CKnl08Py5<9l;TYm>7HB*dCCR-XIOa zqz@2)&M2~!I+mi0OHqo=`HJhjR!l+MSh%~gSWK92;Wrft$(AD6M8dEX@{Kr}OA69= zq%MU~?ZmxIWC2}LS)^xdAS(@A(OK5SE=sx+>tMoT7|I}+I%v?pxg+B8rfb$5mJfxq zoCZMKgBV+~_w;F}Gg(cmvalEw;s@u+j--sp7V(MzXE&P!TVIxW!D8o3 zW)x}<)eDJmmHE^^F?vUg7{7ncnW=N|C;)t~bhA2{B8=fUr}X_m1_W`A*J%fuTCmG1 z8tVNd^n_7SuXYnf$TF+KT*zki-Myyy!ME z!*J7Mf(Ywl{O9QfQFy2skYkcjBX_s2sTz)fRjNV|w$J}7dD@6+TGrx7mt1nA3+73M zooo>=7RUYQPbC>Ca>sn|X>AcEIv6x6YfOR~L-S9?fAvX94juG#f@2IyF+SH7-(*W! z>C|&jO`PEAMvjNZ4+*%4UmO2jOb3Cq#~Xk#68lt|SlH9maUGReoov?oJyOoajy(2I zJ3UHTqD;GVTctU_$$JfzaoTO72K6&^oxB%`SvWPAGLz_DSP@3q>&~`NcD1=# z5Dl~>IpdLkVPEhN?hK0eZ%;CMQI=y@sdZnz;%RfX-RpUQaU zx~WzPXI3&WQIIoOS4@T}z5^=#4981F87%ANkMY6^00{}O%z7))2WIu6|Izxu=OATj zWk>7)i`PhX6wN&YB}XI0&W5)(17`XNL4S@!(R|hPA>6qjTSztsMB`#5&kxo`&cNqF zod#dGGB$>v$i+2%$!OX>S%@EOl38R`JOQQTJN8~AM`G*IvQC@f7O-sWLCt{116I8& zRU&KnvjxlE@N`oMPjawhGtE^^o_fdXdH59cfqmh9GCCcd5<2u1^3O*uESFlgPnD}m zsRK5X-H&=s@3vr`H_t@H4Mql<@al!~A~#>jX|l^deaJUbWvxDM!#e6F9FyL6<)ZmD<-M&jN!B}gYUR+zM!epdKQ2-v!L*4%K4ks!S{*6#B!J^6xD*tvObo%t9494w_k&4RAF)cptZci@%n z{wqt^%K5Q$CS3fj{7vIZ^P!4`K>0w(${pzC1e`RQSYpHCx5{mh>Tg;zCoi*jsPdu6 zGK#rbw@(o|@oFIGdVh!cRbMP$HalK?ag{F<*qE$&Qh4duce`usDDF{U4Y<~LZm62t z%s(-Q`~o^{=1RlkF`NG<<>$sw9~BO2<9cAYqRidUF@q$lukblNMBGGYni)s&`q$+P zDj0R5ro)5jQ9CX(VZp>y_*`*$o!h@GuCNGke)tafHZ15Lkr-;${aiRgq_Xk`|5^Xh zLOI?3kY5w21y*_`nBBt%X`!D}gN~e|-&sdOGZj8m3oG_E#z<^3vb)ij`Y(<%<6z-#5P}MI=x2L>254~x{0M6pDo+R zomOqv_`f-XwQF(Nl~OTH0F3M=(fwUi)1q3e%(SiAWHlEO>G8WwD94+{jT7S8LUp*= z3c9w~GzwpEZ92eI?S?RMG_al28%G4*)Pu)`lAr8xuGi-yO}Vk$_GmMU+YFS}3FX42lM8Mg)Q?}%Vb zVW+&7kBS%MbN=PuwSQVER|0$L%%OG{jL@VfrIA8D100gfl5Ub}lX9bEt)QZL2YlMT z>tgf}eKeMvb(T$GcEd;B%(e%FokZ~O#FZ_DAUMlj24PAq^mdRACpacFnk0L3JW|FZ z4cj=rB9C__ADmK(N-AxT9`z{D=6txpyo&5P<8r;ww2(>#^1i3mxcVT?wd z%>n>fmx)W5yv;tXb{8~sDmgvr@`#EcvQc%zP9D}+4dC4>xzYHD) z3Y_6eO$y*0GHI|{lTKBjBm)i6YDam~;U>ZloRd1rG3AoljL-hl*0~Nr-DxQ~3f5Q% zcu*i+o*I)=O>Re8J+x0qMA&=%%yk@QrfW|RC@azbV};1$@>B~Uplhjg*(!dq5j%>Z zB>lo#FzB~wyOE@y#`fes`>KFk1)SyxCDER-8*uIgDvdLt-art{mU#>8|%C}OZ3O}y-doP79(t&Qx%t^PuQzZWIdg@yx2BWD7PLS)M zu1#vHj8nP&x5-HFqXt3K5Rm!qd}0Ke2{pUr&rXg2YO9(l%* z{y6j|k{cR_Th$Q_sXnDI~mPM82Kk&fM7{+;95RqkSs(Qk`(DjGn_)^E#giABkhHmcz#H0()74!4Z^9dGF6*9ad6Yg9q zpN1Nn8qs{~K%;!#pA1}KZkXqYhk%2Yj(<#jx||s0##E#7Dw0kE=tz=p!EM?o=@Vd# zJuC%Xuh;QLCr>4#*Nl38P)?Qc`!38 zd+u644xXR{?j7kuO7R4ZLZ5~a_{%fHS))c$$L%R14}wfnHY(lLUL#gLOnSJs?x=v1 zWzhF-T1OgCNrgjGkwIHd%4x)yT|IB}%xiq-O+aH~`S_d#KsLwMRTfRgJ? z)_052S&3L*6S$T|wlhSgd}XTKYQAD@L_u0aE;8eY76iEaj^P{;j^jKB;j3vQPDh}f zTl{_j=5WGuow~&=tO(6*E?9n8if~I!7hg&wOD7dZ?rJS*7zW!%aRLQZF?}8IAiT+< zuC5H~;&kf^nLDXO2VIy-#kLWLp_02>zIBR8B0tBGs_ZI~;Ow#3I`0k`_=tToP8?aR zHtilbKW<+{D36e3>i@ zHx4W9)6K8sYv;h+>>1Z35A3|0Cs}hLbiHHYgGq#MIlY1y?XbXdnqwz3|AKFfy^_nw`6pY_#{^0(ITn>iGKS%hwP^)!AG z_OYa;cbVC6pF#>AwH{qCIc0K@=f{PE+=5?5IFb6a!mMc|rG!DQPw|o`tuTZTi)lb;28^$Aodb_F3|Wb5J#8;3v+Cn| zmc_;cpLk)26(lG%%u02!fCq5IoTWjN?&M>9W~0$o-RJ?wb3GSzdP?3IT_YB?go;a> zY(-aE>X0wYN{k<+on~=Dm-}%l+*SvHMkYL8BIKcaC`!u8LqsGqtA>lOeG4iUW1;<& zbY7ov^hWI(Qhd}ShSFn6S(fNJabkb0vKREuIC)_L%Ueg}GSvpLBsm2=3AvdO_9CX$ zO}i1HcD7j`dZ=`GjrcU@BexlkDubA26PQCDH>!@cK+4ZGZOD_<)R|pEWgu6n62j9# z43itA+`%JI(UNSwE+V(u#;q1)qtx-yTNVyrBY?1Qv{7FhbVakcsiGivGpuf%N?2`6 z_yA4jj;6ImwT(}d>`AfQx^PRmF7w)=lWO(@?9gpdXnJa7I46#DYurtt;Nn|{+JRPZ z;E(7vMI-$R6p%4I8iJD590N>EHXJCCdFqA41MrO*$NJPeJ@p62mI8%`DYI4BfkT(C45?1I?J^LojIdPv`iU?JQ| zDgZVmArtw!E?7#bt57#vD=~cPJz%{KED1;B0SEqo7oJ8rt4Ww_3E*4kP_hnCce*K5 z1Wh%lr6gcmX6GD_(VueDr3A{*%`jB1Rc=j^lWB&k8_YCKE*B>LRo0r7A!&l|(rA+a z3XRww;QDr)V#V*cRwkH%||?VrKMGovD1g(Rdq{-#U$!CCDFN+p6s`!T$JjX*Q^+KffhTfqG^%2IE3`_ zS%I}q7DOIlXtgXk+8M}-xmkDIvnv2+htE=$6TjQlovta%ta;#K1;D-d5I@L*DHN8p zMW_W2qZLx=73I>ToZc`(kNf)!b5v}k+nAObY!54UN4>GPR42hkSrH%e_<)%f`(uj| zOm`wZA0nYUe6=*Sk%XB64GhUn$k{Tt`r6)|Ucsqcw-8i!~TRcP_b!vBzj~I4e1a&xOKJ5sP1`)|pkcr6nG&6L2Sm8f3P; z&!j2CzEU+bfiE})hML1cpkq*50_X~wVB?7%evXs@hb9^O_dfP0|X?J)PA}1_t z&~8;SM2JA0p7^ZYW%H@vbosUXZLgX+r!rON@6oE+^E~(jTvA+rY`bpsQg|cLY&tw$ zi)vF)Y4Gz%R{jvmh z3q=BjphSdp#yVN)_z@t`lA<`m1IK4IY6<8_DIW|eDu5*s(5>R?-R48O zQ4*oM;mg0@=ko=OjUTpqfEx=|NQCo#S$=1grBrTzvEp!5r14wvd$QF$3Q9`cTj4jx zYm$T{l~KPZEOEyBz?82=E^VC-~QMAM|E3F%p&l&HMIw#-j5dt^YSrp5|t9DR}D7QB*1CjT&d>dYxUSfHnSI^AEOqAym=} zrh||0>Me>jttxHqKp0tp_O|OHA5kDLWcC1P#7*9}Wb3?m)Cn^7X2A<)jHnhUU1MMZ)6q)_g^DVR)ST}~STI-5e;^8tGoa3tWSMX-!h+F&=>N5I z+q6M=Bz+6~UCev;gHPV9Ez&kU@|(o{&R!H)jGy}dQSm1IlkkXZ5Fz$eq}#Tx4drhw zs0C{Gx$?W=(6kIq{?6Mf<3TZorZv(|rFqv3M&iRWX=Uhhs~7PENIbdbg01hA8Y6L2 zEc49=4T-3Tn@Fu*tfe-3SlV0RWw{tuN1ONmVK4t5?^|&${Gt3o{NaDu2aC<4@-8d? zeZKgJ{MOt5UFiQecBGH(e^P%_{NulQ@M6Fz5ZwQ2lU`IWR`-8Z7XQ}|Rj|DIb@^B2 z|M}>Q5dYNXRQn{Wi@p=`~v1M<>kz=oewidGHPnbQTWp) zy%?F?L*Qym9@^V5^ROXt*ecPmi}h6WeK?32O4*m(j0QCs_ZXnwvCBR^C2uLe56#h3kuda19f>E@n?6xu|f!4UwQgnl=DRjVEM z+hDVP87hLl-4@7-^lqr`6N)yPeZz_}kdhCDyxMKnqzsGJwT_Alt|xEvgnNfx3}|Hj zjjHT=*G1<5-9UX(J|!*mJ&D%g&_D6VwfRS@WQ{r&T+$9S!^*L2Ig47z=5{%)k8DNq z#GI8>Ps(eVcPG}YHlslx%dcGXd3M>Is=fWFInV5}H@;17jwO$w*NBSleJOlNDk{5+ z+V87G+QczL-kXrXzLYveHYD1!XsNddt zfWOK=D9KI`@-|p6_Q{T152fwYYnQ_956XI*wBIbY50Be;g|8X5fcnVZ5{hfOtTrz* zMmx)!hbS%{ceP#I#yM5nR4V7&X)bt4_7LcgYi}ooMJFh}Zo)>M!D%9mz2PNd)ovMc zmABz8Ne=eE4v)sVin@1<2!xz}Yooj7O4^p!&APk0l{cFT3Ef^tvq2qkSMJu^JD|^1 zyV~6MvDQI2TPkZF0Ltz{9wZ-r5$~_zZ$)O*8lC#t-q`b|nB$=p%QN{x+yBt@ubOBO zX)Bok#HBRAooF?Q^Sw*$_mgf2;pq>pc%_@Te4Fd5_#71i5zLfkx?hb8{{$6Y&j`1w zmAUe0Y=&aJwqX~a6!OqvnEc2dn=2)=$v9{yKIxZ+Y8@4rf|A{wUYDY)mb&6C&7HwG z)cWBoCb?e2Mc2NA3eV)ZmS4*Ra17Hc>)W)_=QKykzB2T;n2$NdSp7p;j76x2gqs_N z{GbQXF!K+>71S_%VPIoHS}i@*D};1dMZJucNDt5S*?<79^IuTlhd($cK7{u+=%3Qa zsx9f3YL79C{(ibII^054tyUE-BEVjG+-S9>%RA1)nq9~BY6laW=8{ioHRFlr)}fFn zz)-PaFcGs>LL_1XZxlbK;LL6+IxcR$MNH?_!kn@W535g7CMeQmWhHB&JLxW$;*H+? z;jW=R_fAa3?s+wAx9cG9gm1HcDoxt1SkBDw1T+9 zO#%ds3CXTNO~v+@_EN3y18HC?)MjAX!&Uw^N430ZMlxHe2m?G@k+R?NAbQnp&oN#I&xg zjKGb$UJ^^OauYMj%t@bdksYYgPAO>=G2K*bEaXFF3P#X%+@fZ+(OXDrhDGC_58y?Z zlWIY^Go44+8o}e2$m;oX?$)Aw2R~q*sbZmVk^_B2vLRKJ0$6$Tu-~g$DMeYHt5&ql zMJ?pfV`N)33L66ZIW*dSfTKR=<;kPD-AfJqpI zr^VEIxwp3(nZj8?f1T|qN4&l5+b5wf)t!gx-E+0v8=u)JG@;SJ8~Um5cB~izM-^1t z2~R_+UF`oJ&AjA3-9^ieixmG|3}+;f_+%18YTu^U%+9&lx6<3Bo3~3ecsrC&WxH#* ze5F}&D;8swWITt3>VC1<;C&*fLwY4nCP-J(41!UXoNgm}pObQ=@Y^Za6$?tl>baaT zRmfLGeXbI%ZqI6d+=yg4%f*qX?j2#qSxx*t6C7r(0^5nK-z^R<98g+xJLSyN;nqvK zu_;VruO-rJ<^6YUf(T@i)@-@^$li%mr`tBebU_UX{yHCMdaI!(nR%5F4K{l`Z9<;7 zlB@I7ls1Ff;@(6a(T&v=YOI69nQs&i4BMWSGbOJWn(Fy%N^`M%oXE#7IrnU}4ha zIN|?*-GKI2X_AaV5+TV}DA9fss_l})0-_UK)j!Ii`GBV!SG{Fa^uq&3v4M0~VgVhf zMh3!#&F|4*Eb#GSIw!zEi5-S(tAn-UPa~r`QL;#XWID-igGp5$YpBgt_V4`v^Ngz~ zm|j?014@|d!fv{wwn@h`O4J>cywu#aBiLCld zE4R}j#1G5jo%{lUQz4GU11@lQE_&wacvere3(e8XeEh7{kDTY1S8Z`M2!rfEtDOsj4@g|CG|huv6Dp;xozztCks<7W*z)O*Q_}xJ zY3!06;%tZwYneYiob@6mi4CGwYqEO7A6Tu|2g&=YBe$0n6jekU&M&>?ZM}#X&VULs zn9?(#BHE*n$g6V>>CBZx#2b4(81_0ny+#SOr_va^^^^R>MogpGEn@>_Vtza1=>WZH z8d@es>j8C4%4m#9iH9)g)U41v4n5bK>Em!L4kyEz%DTtYLz?a9RI|O~64|g9%p7qV zYM4yOS0_wRhf+BC$r^M*M*+Kx`o=lIA#{KzOHdej0=O~xwGht6{ z;v!QnX4*MYL4PvY9S?Z9J8R`*ZRVUnMU@e{1=E40*7m9B4fgzlo*v=B`ZMj=oDBvR zoI$SJXQ6L6pTN^}k56HhvGMgMrgP?XPmSQx^iH9FcEK0pz;LaBTugwJd*S?DIDpgO za3Cgwmu}5*FfepKVDH_??uVX96W?6{l-&+u?!%m9rem3*owH#vtc@`*HHOLJ27-{* zdivha(YG6r@VIZyMCK%d(m##`=xA(vppI23#Q!snbHiA*lZC+SP8}8C)H0^=RFf&} zh|EqIqq8#rSRrgv{7%@R#h!~1*QZ!_C2Zyr5jzgp$S@pcJJOEd7p-m{vTReWPH)t- zw6SqDa-->-y};wpnqh3f`)?3XkRg04?{FerIBdBR>1=}iZ?DbwDf;xLID!+G_17Rt z2cx*z%#3~OyZiV9b|0pbiOO9OkhA%M z^-e8KuG^28GlaL{_h$+`gOLLhkOxGgs^fk-GLCI&i2Mlz30QFyhE{L;YH4c+N_nxT zpYIL2fzR4~xB>_Ra!Z})peB2r@LY1MYd_T9Xb455vG-T)dDz=KB8E%dwacBl`o>mn zrS?WtQtu=j#K<;Xjzz6GSw`%Yc03PdOB zUg$U3nf>HZf8PW6Aw6mrav3kmJkA=Q5xJjILl6o@WaR-&lBl%U-sbGX$;7LWv0F0E zTp{@T;L}~gC#C7L7U58Hh^TH3iA}3!)=G#vbo|&iG^x^-$&vCSviHWj{j(u2`vrTe zvPt6%a;s9T;y1}fekI=*v;UZ~0(Cc=_HC{xWLA2GJ$KoC6S>9NV5NqC+kWg6gY@yw%t@E&?83&c01QgW#H# zsJ8Z1g%?a+gbQK4YSzsp&ov0^8@$_mw~Ez% zwRkOOigPc#)*sf(H6_NI`UWFcN#v#6qX*mHwqz2iGZM`>;xG3y%sJgi!#$V7HEPQy zfbXj%H@lH|@$pVWEpa}x=sHMbUOo6Ce0pVNVf|w_5$%W;w-O1LQ9(Sx$#|I+QL}2KuSBSJYUZ(W~GJq8>7GnrGEe zt|0X_r`_!HErGP+OcGrK!Zd`Q%<#{tb4(O#kIQcMFNO5%q`6S_CuBef*_-@gPyIZf zX+*b_Zt_V{eT0rQ2hH5?Sckyy4B6%DG){C}7b7h#o*^xoJ@(X;gU;eJj`@S$t$L9r-5 z+&r$pID5P5are$x+Sg(FdbNF*rw{kJ7{|-Lh!(ZfOUo1#jsRXB0T64kbVuo`tNPnm z5Cn@{w+m%8VJ%X5csr?tZwMNeFbJbz@$_mhyIwZ6at|3>MtDYV3b=ySfIE6ZL~ugz zwqZd9@`7D~Xi+q1s*22@FP-fSN!NO2x%-@WA%T^KGYnm8ZZ(p9mK<9HeuBAbbJHum zS$zuqQzXL_Uf?sRhxKWz2OJUQ+18w-21=cLyE|5M`{X$@`{EN|EK8b-6n&cEP@J5Y zbLsW{F$|W;k1cX$oK3r~KOVa#^|nA7o{00};fLe6H%6B-*K@Ix0cu=^447pdQOpxe zPV;|OsbzuCXh`EyNm@HeB3d&JuJ&89k7_2eWJ5pB&e zi;La@l8(P?N_6uKLf05%()1x-cIc5beAP+HbBG+dwR_uNGqvA#^}3dqC10^>yV*!( zzKCJSC#;OK4eJ7)MU*xKj?Y2oVD>&_hO8CvKpkBkD%~n{N9>WAJ|{(!=Ncs(`hlYG zq}%te5338!fmTBJyDXKKcr{Wr{`g1o$7Nc)c~rE!K={6P?$t&wpg=*%Bui}SI5IyIyTlHc^}Wv8ULL9-opt8-0ARs_I5R!o(#RK)1cf; z0o!mIS-Mi(>7+qb`R(ZY-#Vi+dHng)C)QjVYUPvqg+Eexqm#@ZyaW_&& zs!GE1u2-NE3VX`ar=mO#Z>*bN<7QJaH)-`_$K-e_9vem%XXPvqCGEBR!^^}l`QO@n zAtUpRa@yC)qQzSLsD7*&4HqnPPyV??tE+@HeAP0F~qCZg)^TaBnf0%uMlPe<%4)>ihD%s)v zkoIOAaA!&-3)UoOaJ$VCGGc{~sH$mh;;>neX~I(tPPf&>M3OY%Odx1u!(Gjm|D^ld z(eSPhSSU(`tG7V324LyjGwbX~4Ygl+rY{aFZ8n^!FkW2K@xv?H2;D5`N2k;2<4hs} z^^9a+SQ23lI9pGK?qz%J6PWqToSlg62VJ@vkM{n?c_nZq9I491v|0vyc`0hJFJGV) zSF<9_h3yA!r$!zVV!mMj+(u2-rrV|2?x7uXF%hid zWTV9IHFh>7ZBU!EW~sUxVI%6*UC+>~>uy=E<)c=LTuy2E_Awg`WapupnxMr#Xs)>@ z0C{B#gV5->^p>pQIy1~UuSSe!gTd5OkMLHEm^rZn>Oe&qaj`EQz>sbfaromKFF=HV zNgHf6$>BS=LlT7c(yAZTnAn5Z5kE-Xh^M4f5A0;L(y{|?thKfSC)2esD@}G1ql%X2 zklVpoI*xA05uwFP2EH3kjs9pbnVpr&xa_?1&D0y)C34S}yQZhu>8u#Kr{RG5j~i!h$pU{>h3-1wLA{DW7&^e7 zI?4*LDytPSa5BuYBcv1F$W5fgrVKMC^mZDg=@>&qKRfuP7yGiW8?RjD(j!%}29vID za#89B$E<&K7of1Nb957B(rqM9T$5BhwjW0@1EzWmy_M0D(JwkwVkcmb?Jj7S8XZ8{ z5%G5^Eii=UI;v@LgQzw7#`Gw8%NDUEYOS^!-W5F(3H2EtK^*%po1E_~WRXhKz2+fG@Tx*k8P#&pW$fkq+RC39Ej zZ);{-gmSp>kW)9qBjND*Qku@v(S+GfKAi0*mRQ5%61g0jM|@K!On6udd^)tHBjVvq z2i2B=lV%1elb9&G){xe9cM|HY0-e%ZXz1q`<;S5(=thd5qao&uz`$ACDbI~Vfm%QTogGat z;VvA-TA)D~ll#z@KOKzB3a>?m^P5$RFb+#=IBF*HM|x0Kem@x!#bSh2V!CKNx}&nD zF@tDzuXBacQ_dL&^!CtR49L4UeHoBC6UoZO7br$a%q_}#%XNv;PiD|)&s06#ksC;Q z;sb(TwQE%%&=bQNh%NpU2xge_NvO*1Jx0UC|JbqCM!Z5{AyNMm*-KC|h?R5)!Y{Aw z0LN!`zu(8$ersuG^5)QYHj?OVxq|Ok4@$2U?evAzKP8jc`yB zDamB55wt_@PwP25XNUJoC)+uT2k4XLVV7XgQT2G(J6~#C=ne4#01V4t}&@soS zgxZ{ejC4c^V{GK7V+|0UJ;i4&U?nL7e&o{`Q!%oHcujVFMV>8BVP+TXbeG(*p{`)K z6*+iyTg-8!2P;N@ggcj15Ez$An@nEw3n7GDceFD_IZofPv{iPy{X@Ni3^+L?w6pTG zukzhW5NtH`o!p^Mq7o}mnwq6G=`ndAv#Hpz7 zg6aX_mi^LtyQt_0zS&22^W_6T$8~wVdAHop zS2n_#ZH@I;pLe8WTP~;`JZ$+;hj+Vl zPf!0qw1{`woql_BCmZk5IaFMA7!MGr(X-ht?`zq>kHS%|OGvDXTFqp^FGVXr0Fr0K z+i{pDF1t52?x7_~SF5Sx)8nJHNA0_pzRQ?m$>RGDa(|sjtH)f-zA0Xhxft+7s3LWpW*r8%$2a_t zR$aJ|>DRFXX$I;+|&-mqajf<} zqIgd~9t1%3jnWw$9Y61*$~rPjA!jHsQ2B|Iu+hG{@Ef{4fD6F9L3cBG(KO zb~Piz(iaBabwjPeA?PZQEfsGN2{jGOXMG8%I*aJDs?M-*l-baO?c{PknK5AXi03PR z=9P1jRg~)>#_=y7oGI9J4HE_{q31#Tw5Zmene63rJ`Jsry8mPKykz=MkF>MVD4sUu z9|dwz3YPagFO=lZ09Lc@)O6q*^Z;g-8ka=Cd!z(grzU|2;$J>`Y-_Y&m(|ZAJLQx6%Bv8;qlF>_A(Q`|DkSM^ z#5>5;UBwkn2aao;a5+${^K;Yj{F#4hGq1lGdQ9$55Zw;GG`=|GJ8j`JWg?!8EX$RS z%uo%XWSf<5+h3?|zl(f7eWqBY?GIJeej*%e0rmS(vs~+^-LViwK~Nn_u4p==q3K_# zC$8lU4P9*&`_KF{zgft-{ zBBKVHcywU;f%K^{=qg?-d96>95k|yb`%CcgNF|B6VE9t%Q`O#7#)s?fDB(7dW)EMu z$DFf|$P~cXk*LuRAlCH@gFQ;sd@ZeQZ&cP))&W}rp%sF1__Xs+R>pInN!@#O3w=9R z+$j;A5v@eF+aadspDjeIoPN>YX6daaU`7cFqbyM1G}f51!o-6VlU;r$ZH;B^6M)f= zeVk*K=?u??lh!?k#BUnM@RD#K9iNS6PoFu8PI2$Z9!|y%9YA;dO!NJz?DNYwRVTKD zN2c1=`f`VAA$}RoU z{YbAKBqv2oq;{47e)`XWi_7Ixcc{M{SU<8(>Omw97NRtB)JT36ygSuB*~>p3h#Upm zr`@^XJv90bkT$(`^ObW)j=Rpw6Ug2Wfd|$}BP~=;k=7TLekN~m*aWl2l_xwy)wE~@ za9e_-j~5(`tK;e$;g+T%>Dl9;t6xDR5q)8Vu33T-NmWXJ-`)!3@lpI5w))ocbmzD_ zKBrEz_djlgsr=G-t7@l+G*}@r;nk;SSMC$rda4=bX?3o79iN@?)$H`*%o;0})6p-5 zkf!+F%yEJI*yzVPiFM_KUsigfDaXnY{%k2-Yc0v*#oX)ibn4V9V%tzM@;DNl9; z);HFlK*A>Ju)I{SIGm|i3#GPp>z}DdpzPhI`by(;zVZ8y%O_gjk5t2W?D#Q5%zX5_ zq%tN_wJ~xvyGo8|Tqu2P=ag;qpPBB5X0R@WkI*OOlyXk`W7&_6*;&G+7}XHCR;nZ8 zSK%r_F_R%Ttdjh^BIsY51A!(JO4U`?O(`E$*9O0*6TQkt5b?floC5@%>qfI_<7rji z7|ZI`(Y%UI78S0yu@Y@Aui>Tj)heAG)T&>n_s`pr(yz_3F?%pUvyafmR!?vqILjAL z_+;d=@jT5Q+)P^bocOn|Ch8m z=@4aqng3XP*w8+|Ej8a!SAiVs9zlB#saHAO2nH#!J$kM<3svs z%M&S9Zhx|WLB5I_BEzX<8YAYoX1*0erqe2e;^yb|89;gm6)r4uPx%bOv4lP{@inN9 zv|GMx2Go5tx?YW8oqM0dM=rpmHy4o)QrB_6s0YLzo^tWx$uZWRqdsB;UBQFmDh@5@ zh!&M;@H?XXufHfD_>>T&%6>|q%iH$zFs3LZeZukizAc|fcC(>Bk*;a}OUC2(@#4#F zFwb^>#sywthrpxWjk5nnny*J6I#={TYRx9~k%>k}>RUHw93^>Qn$O`S#^mTJg7*BzE@x1l6-Q&qJ%A+beLbUt#??v??DUx;e zo{24Y5-PwVH%?Vzti%U}&Uaw%HJ9L+B_{oOhS#hgWZ(waIE~I2T1q2kvR*fEd2s2c zW7q1#Go{ivm`?p;I3Yf%39KC~@s2DP&YJF72m|wa+?}gWeI*@?Mc?joaA`WETyY`{ z+%t1h=zcPZsmLUzh}ww;-k5j)*#y?9sUHE3#Jhe)B$W^=QzT&^>i+-F(R=kumY!*L z+j|@K#BrHQaCpKo=T}(TvpH>?WHd6Ce;CY&SworG` z!xdA#OnE#Pf@A!Tv7OG7@UewIv1@LGizBpk?W@?);|GcW#j=?ilTwp&=Us=3lEW3tl&g<$?%la5JrYUyGFP$qH=5=L`~z3cW1`W>ep>yTIGZ4xxk045O&{VJnL6 zHd0y=_E9q`On$E@>WH_!6{|^nVmeDn5q15=j^0eQhfCia9wNd0=2)h(x%&S2 z&1-4C6ol&{@2DsF>ar^HeWz`Cm{rC;72-|tKzDgcdfAfOrrs+#P)SRo%g)ci(a>yaqez)N$|+Q}4K!O*OF7KkX6!FUzE5>RN^Q$8W|CTy$;iU(u*y_!s7{e}*S(%BkW=rei z#Po_)WV-3DT^Ukwws*QhwUg(8@ZW?~?LU{txFu^$;y8D_dJaU~~&2e5)MFiRi;wNn!sAE{Py|59U0 zJ~)`9LKno1oRJwdglh)ZV^lvpip4W7xdx6V-X&we`l=a*#?>297-)O`8I1OuJ}RtdayhfQXaq)p zspyg*W^Iac&*Z)=j!Xtzc|KC*xzP;vhql~d)kbcj1E1D>s_s0U4@e?cR2BIBF@eYe6|CA8&}kB z8q%bMx4hH^DI*plZTVI;Ce3AFdV_1;tAvvbctAeU#+R;Q94E>RU6Ou6Bw7vysd=1n zy^=@h+*F|x$NJGZA7D-}E^Ko=xENd<0)EN;Y(GUTJ)G*E>Dp6&=J=%FU2QP2tm$Pp zu}10WVr)#qsXlSW98B#2f*q0l@`RhCXpnfTpG;Nq?(S7NDqgaI8TfH!80xeSfe z3r!x+F3&&-c(}AI|7@)LPkbdfALv6Z072#eLc8#1BW*Mq4+h-9L;V@w$HC0F=r~HpGDbn`vT9C&PoOzqUe_u($QRFI3l(tp3Z&6 z6joF-<%$i?K(Pu_<)5XUh7-nw|CMvHFoh!LA~1Cfl|<>dOp19Wo zRh}7SOXbT6xQ4*jD&0cKX#@j{T>+&nx{GXbHKjZ;tYkpr=F28nD>!gUGIiGTq zhd-5=pl+>mSqTQ+#P=4GKZlhODFaI!NdPMvkIVe^{(rDZndKp-WH=$DliaxEgSe4pJhu!)k&d{K=i zjW@AbjuTMy!rHJZHwed$z*&r{W-BuMZly3h3lyIEBfAxM6S?nvmz5Q%WH>REBNP)@ zM|{3M(ThW2*5uPI@ zq7vUE$AOmoeU4tVCT8Dvj_3s@^m-k8BYmNoA4PEr2Wy&W!^Nc2VBt$=FVka(V*gbV zgT{?rJK&<2@eobnu0(Leck84P!?X4|0347$?<`17*NIga150FGeTS1H#PBlj% z_zKEyoauwUxohMB_ID}O4Y#-0HZs60mf5LDcjC+!kA5-88RM>{bfBDeOYDhR7osj0 zv8d{`-xWs>V!!$*k{>#8vW|y+0(`#N8izEG>P5XS((R_&^chyil<|48(pS~K+#wN2 zcIo4xf;I546w=0D=l9v>uvlivYWuiG3Y15=aJ!Dz$*t1gwG!*_#o|NxXlYsUVNWrx z*`&sIw~J*=MwHj_-q@PmJrX*P2j6Lf;ha9F8YDH}2C2m!<+NJFbOA$&&a?@Q(mYl&z>S;!eq-_mE&)lMOTG5fAiyzdwT4G6`<^wiHXQr!5)Ob)G&g z>?!Fgflo$5gbksa-$bwq(N~&`3raB5PnjFZvLX6}*LZK8`|@K~9X9s3bdDauI-=)`TKd^GnO|IUB)k#lJYa0VOmb9B~h$MZLB{RiM}DbnWefe-$FoBo70fGR%I})DAH?hnU4EEXS^tH) zYmY21@Ko%@eEZ!e*+@~t+QpGdP}JbE}QRrpm-Im!nx&w&@nTy z(PK>?^P080@s`jj_4($iI)2cL?V~^BXKU+f$u5##x*a#lAs`w2!fn44)y1(n+tei4 z4C%V&31y5lA}79XsXq&+4}!3Jm470H!zK>iJ=2~QZ8Jkh{x}$nwNKByg)w>jO1=aW zHrWpDKQ?~I3-+^0EnZD+-ZT^Y>rmKbL*4-9G?Ko&_5*Ed52cxOoQY4t%MdHK{{mc0 zmO;#@x96}5b(v>r9?8bQ*vlVaWV|x;Z=wJ42AW$085>c@ANoCpcJc4jhjm$hXSu&M znnx%irB=S`y2VC|Kuz{e_Q&;VC*HPQ{>HA8)uC>~%{R;Pjs>Dl^6*Xem-R!EzBT6S z*U2_nw5Uv1kB8-(KQHe|%^4TksK4=a@GWPTu2P^N_XiZTO*#kQh=$4y4sSAb0f?;| zSUTwJMaS2PhZAjXdda#F&IRp`K`U-%0vli+6`NqAAyV6bXhcwfGWUaXa->ho3Sfd< zJtH^L#2}s(tT$Qv3(H>Ca{ZNZLs61`&WB0f)!Ps~ZCKtaEp5%NqzMHH}riZ@9E}0yK^)PitW2+9PciN5R42Iiq z5%~j?>WY4z*0%dp(tIZ8T}d@zz`wI$Dw0*|BmL#n6mL&ml{bS(5~Z)EqkGe+$!nG0 zNbdrTLO|Ff;~fci!>u|i_r5)sjg3LxYF@wB7=CMJ(LlnBHca=754#us!IKs(mW9X1 z+oWBCg<|56y?+0jyYF82x8jHGpX)>V{&)`)^{d7A>3#CX8c+QvvV_qdUrs0#y3@e34GtGjHBqZ1ZPMKS^jg6_K~y zg4)ab^@H#}^Lz!)83dyqz?yd*y?jwP^@hn~jwqz7Wv;E5ow@?fqKdwrk*d>iv?`&WcgNA(&1XU zOUp(0&+7UH9jmf@vh0=t>4^25_wF`FB)CcMy5eP#{NO`Y$bK$R6 z#UoWbJ+Hj~<%_y2)1N+0)t5f>57ZnrAme)QipF@zQw?vj<9Guq9NJKEDK$u)Ma5dY zw^L(cNuAHb(bF3dDtF?NoMh8XpOm@DkW|p9hdrsKQ0e>uCmda-lDF&S>M8qGXD=Q^ z)4WjiqYwz~-;6%%j5`+7j6kq(%Zd3HV46T4g298McH!9mNb258t`N&+)|iu~j5pHt z5QBtM-KzTm1mXhRE?VJvIj#hjML9UJM(KAC1_(byltw#QAV+u~r zXipP=9+OBeIi;HR4=MmNNM%16{%~b30{Lu1{4dMJyMzb(Gh?GpRNBex%T(qp%ul@4 zltTQ#dQa7QFAW|mq8VTrX=o|oZIwmY*N43|1pYFKm=(&y>0~sw)q(7Vp=a*{25OpD z4n^1T4%7$3p*$K^l_z)@RQWYoqY-n~mY~!*zl!XMs6PClT1}m$p_kwnIoR#kUI?j? z-!Q7&ot63SDGpxP)WSBHrg+s^=?m=3k1un%URb^QKI9|QEv4~#`bih8LD;WKpfeqv znEhi0^6-IwW_nWOYCoX`Nr_jAa~CK^a+M_Mq7@c-KUZZUilS5ax^sXzW1)FXq?8))rUfwW{GnR76F>dc@$C6ZV$8MVtXo0r)9sxEBoKW{3cHY{cc7%`4d z+s6~sz}xKCpM&KiVf4Da?cPP(MtEGmhBCHRP|^}VSzseu8{8_K&ewcBW|Erl%W2rc zj{MrwSsoT0r6L~01jz>OAhJ5PBE2;lpDvJN0ZE+VB&uO4dbI16U_RHyC5q?Ub%T`at#gDE^m!%9kXhH*0wz zzP$sZ`Iyb;g}I&=akq&#yX^bB500>%M|C9a-mOZ1soX^yz#d1N^byL6M}AvXZVlk5 zR@7Vs%1qS0X^T_iVhd?Z4~Xf*@MF#Z3T%`dZ%yGQZDuiB_sPQA@L5_Aj`%nP64l~C zrvb*Pt42v*($oJaHmTO{2{`82W1MUEy#WjE@R;8kRV<2;ubMWrD-S6+A*7-^&@ML1 z-7pt(I}VY!w%Awd(;R@tE~2*w@sPvIUM7RsSs9xq zmpvE%iBpQtd4mL7b!+h|wSn0geV$8?^l712Ft(w3g2}G)JGEd3pozOuzipBS0y0&z z!Lj?zuDV^XI)DIh)DB$u9-@V?ycO@8)&5K13v^RH)a&(TEhYZ0dAlpiD0+z2oA35_ zWx8Hj9i$A%C%aohX6wffsOO91!RU@}7mx7~`V>E{Sc%f;NUS8uSTCC!v2@fek*T~` zb0skO)>OhWH8_%=3AF0=|&gwi^zz&_SCbPLNs(l37 zLiWuOLb zJ!9~6k^L7DqEK$%R3*Mjgy_gOa zbx6gMtmYxq;Zr6%PZxWESk!5~g4#7AQCr;i&ht z!}k^J#p0BcWFi0)wyO=E#iV|Q0#Q~kJmZ(+Nv1t>-0FNHe;nY@68%pG?riwUguIV` zZVu)+sjh~j&K-y03-{_mRX%=-r*1g)C&TLtd*E6Z`q{{}?5pY1&#s5R_~~fs>Awh` z_-9=>nYhCr`?G3l2ZAy+W}i$iKfCrNL;N8&7G-}*aDrEY5IGXwGIXo8H508}S>FJ#{ko97IWhj~c+%rdDmP;;1M=BRPu(HfIfGDG&K zgpZ_haux`uC!aUeC$!Z)0pcvfL%0*Cvt3{eTHQgoDC;mG@ntEUR<>>>!y#3C4Zmus*MO=xj-JBjumM5jbM@j$EfyW_bMo#YAzPXF9=;I4PD$Vq zm8mF-atUM~!ndG8d)?$TWEi+hV^<^#jx$G<&pcCaz2^cbb#}Cq(KHaomFHfL$ErFa zSH&V%96EHb>0gVMt_0p0xg*E)M}_3g=%r5v1cM|F_?ja1xUQ&^bVFy@ct`wrg8S4o z>0Lu4GdTnapn$;}%43^}tY8g9b9i>;?1>_wI~%HDJ{;=T9EVIe9y%!IYuxeffEKt@ zk2BgL8mkeL1j$t&biDtkHv=ll0#c$E;m78=GL}L4hxS0bar8kjlBQ!jxI7P>v3C_b zznD2^HbsH4MQ|%L&dz8o*kL&NfkiCt0`{Kk7;^E6@#Xf*CaoM|h0pc4Hcmy`E&g94gLED;F zkTmLes%d@%78leOO+soYGM?!Ioe{fyVVzkX`EV;I%99-+t}yx}z}asyGduq!9SCYC zuADZ9EIBksD*+W|0#qduC7Cxj9ZIH3ZyXfwEGQ|~D%!z=hGu9{uIW#nQef!XXS&MF zW9Z7%gfzhA5*TuCPiElqtgEmE-r!gm^%E$|B>n9r4flfmx&jSYB;VPd4kZi?1il?@ z$1seOzAE!)6n+?l4OT5t^g}}{bOAdYy>wl$`69?Me@$|=BI!|LdL-Nt%L9P}RATi$ zE!dI*85v%|habX<)ovi;7rgW5XzfD+_4VUX9+gd;2}mVLl}~BA$%~%lld3hL1)i!5c;)h3%T@CoyLeqU>Yma(@>!Us+EKx6>BY|7hU7x>J8I`B$9n04a-eDT%EA#{PJh zciZo!|BkPD_P5D@8X$la+`tcn-yxzm{#AM&2=14?@^3ie2!AX5Zyg#Aikn<9zTk3@ zKCwjx*38H*E9wNl>i@p3&N2zQIhmqE9&N5qMcwEP23=dYll~CB60#}9-h{_yTtNeU zDr*!=cbm$-?Rsr3XF~Ke6G0&${4z9Z7sMT?T`9#RF=<{3|GWJL&+KcqsUq>%#HJ#N?cyfjuoscG=yl z4mch7k93K=eRf`q##DuK?FAL`YM(8|W}?8_;W)fFx*Kq0PYBdz58Y3Fl%C%iuP>{R zrlsLK>DLMSnV;up?=$7MkJ3+$g!kSTfBLchQjtp#KI&h%MdUw^RLogl$MP>X$5{G@ z^tV4&Uvev*NL~A7dQ|J5sMex6{{39NS|DcnR{#A^L2PLCD2|19kjpopp3|| z`O*J5{{6>CFhgw!YH0xs3|&CEiiOQa2$s-Zam(mXGOA*f9MHVsoL7`hr&g^DIo9Mo z(^wG6VDUjgvWpU%9MREUNh{df*@pifOCVNLR(kZy)TKim+^S6>_`%lWm*Y!~-3uCN z9{5F^Fqpep_`A>}yQA)oG%GGI`LW*M^ehbSANU8g4`#{uGrSbO)FiE+Xw!F1$%+R0 zLe88n5Z`wj15?LK>u5S)*bMt!bywj>vSG!IwWsmIB<)fqH}YXDC`w(QGS2*w0JyWx zIevDmkI@Qcx(7I$L@=IqDdU~eGEMChd-pT&+{#}#z@0cY)N3}`BTv^ussFP$6W^M} zb^WPOepA{jAgLucu*c@RPkH>c(eq|C$#q@`ReC2R0PN)0aJ-Tvp|+VDtED-3~2)AR@pi*DRdlS1M?&bQ|t z84iYmoNY8Xa_t^q0rgpCDm>@h3aJ~5b`EoWgO=z}s6KqegW3)?wyocmYP&1+PEy)k zyFBs%(@yaz^HnGP$UHCA$A%9@2jPEXJg9G86qkm*`l!gWTRA31s%^hZjJKfgpc3UP z?YndCbw>74TRAIRoSLyrcHjBl8NQR`jWjp+Lsm-&cyv#_8`c=1lr%PjFCF^o!JE-8 ze3*^RMvRP5;MN#04~Z3KJ}9Vtr328+_^YPIz&D8vj>LjP&|CtRENm=b0ORQ(2qd=) zv+s3|dk55+0q`!Y86o37T~+)Ov0NFs<^!RGj->*Lu!MG3PW76*sU}DvG$6aLmwZ^% z6b&m5hHXV`#g$cgH}nM?$YJB_uPw{2o@ukeF|1u7t)8m&$d^WAp9LXtUTVj6`#2P6 zO71-vGxG`WSNCo4UH_WedK`7rvSb4euVJ7L?mO@7n`5x-o-XAmXajN`@~CpEHDBWL zyuHAj!(Hhmpd&BV7d&j4TwW?L#5V>-^!Oxe4>j8Y zhSTko5Ga5H9aHgyuoH)=*`RG|dOogF?-Hi4(l*4BGAga9DEpeRL}|c!w>JarAn22llxjRiDU{1aKkB@ z_UeufZf`hewV%t=&dkq&%NbtNHQ{AWYRz<&Dm86!M&CKVtlO3C5*|3pp*{`D&QU$S zmn~_JohIbrmIXlE4`@ak>@yZL0O=Rv&eBrhmM1XUPVNs)<79*;4COyk18ba>DW;Q5 zx})%DeJt_Ds~c|OOm^J+8g?M7i<9`*{hXdzt2OqtlmvX_?A(V;7TwyobG?$E*g8q| z&gK)!aa!P*#D#ImBfVGO)hH?yeY4Xs^L3q!h)s!3#cnFjps>Ie0!(jp^sr3%+wA;g zs*8QW?FPiJHpillS;^#?o;|`vpkvEgdKD8g7h*qfqJzGSG@ML4#EEvO& zh#LX#C#gWmsn9JU82~k__N=OUvXj1%Kwwo2fj^T2nqsEOj#>entxT^ApV}l8&rA@^ zxbAGQ2@E#it@FqpaAu^&Wo7ho`AFtQ=f`~)7v*?lnS+UAkBOuBwereggk#2xkHSiy z8);-;OVK$kKEE2kYm^sKObmO`wNO)qKOlx}x?FVjf(_tBp2K`{#X>N%vJ+%Y`2bE~G}?=c=iTgAvj&Do|Z-JUrq zUKY}Lkcs~bqO_9;d~iJhII79Sv*c5B5qq1513_=;<(4;vG&!TmOWuPn>*Dw58dV$}*J0QAE=UtryN%hsex zli!MOnrc?`=YA);tVP8{WN8Y7?>9-FTx_aa`LSBrwsIX*E2C8L(edTmiD~x#?Mq(3 zaSU_+k<`khO71(+*3LS1Kt54L6iMA?qC{Q4Q!i0s*KF6PiP*!_*m!uVnmDb%0 z8vqVut}>#s3UIb#3r1Pn$3VO)O{Z@sAlT9cXVc^jXBA!hWH;s zY**do8N_hSb;oZ1*@)r5;Zps`yg}!qsA~LQUP!E*J5P}&^7E-v+UdD_<2}uAQusp4 z`}+rKdj;wMT_CB}D+TJ`WYAv?07in8HqQ+Bp1ePm5CE1nQ#r60;?p5=Ux#yDFm^fd zQ(UoYZiD0#>=VD#hdl#W#0rw|QsJk}P$$f+8Tmdfc2CMa+`=OKX04)FfdS3LPX*3F zM_NOhL#CdgvS{PxN5-1AQ$~;xe(b5P+^`gpQX~K#M0pN@RSlI!)kPT5r+W;DxE;5t z9{jnCE2@Km+tM=|<5c2h?wpaorf)EkCT8GIyKdN0%gaKq#qt|~6{rPow&uh=YJHoU zhcmIroF+$b;Ks4t^fs-0D;>8YX4V15A={7ZQD`p9s+Rc5*QbELm~8fOxjzsRCPleB zu#9@xf^AS>sO{3Xr5d-}FO>UT&VM*+?%o<{)jZC>dk~@zWww}qbI5nu`-6O-3h(5b z<%jK?UQ6%p0XiR}MV)>)MkM7kUaQ?>I^R;6$%S?o!-l{+$4GF+|6{}CMKk?YN&7XW zV5VYLd618Am<94c|3!s z;{nPVWaI}i%uO|3AgI3vvKq1L>?)n^y2c@f3t7VlRa1cR8Pb`(LOkC=ey(NMHfe;0 z58Acbd6sD18+#+`%)4a^tQ^)4E7aBTK}_PRP6pYr-&&i#JsjSB&yzUDb0&8W-|pTz z*^b@ca2wle<-K0-Hy@Up!x~x@5x@Kp?M6yox23Ypa+(8LmgaYxgBYFj)QtLsDWV4S zxMFe#7OfpowaGzHQ!YPlId#cw;}}`53VJF9Pr!*ikX z5MfCtBWiN3ct$pFJYzw+7|G|xxlDgqeiitt&3Su1yhp)7A?;afRG))*acuWtr7M51 zl^u06`-A%jof?%;YLIqc8=a=EvpY`ZugvsMjz;(sV@GS+b`Yx6E76=*hjO zymy;5C7wK_!-vL)B=TsxP17}W4j`ia;gRcOGmXzRfLBxr)7Hk0trf8H_^yyvopV^E zA=}8*R8h-kH4iRv+>a{u8=W`O9gCwR8#US00^18J=vGEB4WHr@quM@V(-YWZ)%4B> zBPWEafK|)q8vl|q9l9r+PbHlE)4#@^Y`%>*OwMx9*S1C@Hg0iwP!#dr;rwL#vl zLz1<{kvvoj!|^ysc>a0ibIfUb=rR*s-=L`lO7Ew7Ub}?>_=J3Fb-0s+WnKatOqu@4 zV<2Sgo}((W0b|K^lQ05pKk#hsmM&||i7Y!_wKO8~mG*6|sn`h3+Xd3&b{qCykB?Ig zq7TFY)upn*UsFX&_pl617f}7sQ?A$zxye5|NH<5a8Ac&8|8C(uw4$~d0|wHn^&F>xsMt%Elz*AH}8 zi+#S^<@Ld8w=H(GtovHxUt-m83O3U%?uG2o@4C1-;tD<8SzbRXi>%+;qleeqW~nH5 zcZoUxewyAbBTvx5a!g|HR$a$A|gv<5m09cinH1;#TL| z`bUzuVxcem%kp2ds3yqs>$XiVrS7ZtttXA@@`dB>EC#qQ{m-`Ap=_0}B+g5fut!&= zJyVXo08TWa_fv{%D22W7eb~af%Qr_bmE8$)Q!{ju3nvK$Vg+e-OZQV+ht>T9|D>mDmUZj-$kIcZBTZn5iX?ygSQNCFl z!Xm){0ADl6i=`x_0iu#A%;7rs=1ST3j2%wl!<|r^k{819>5uo($GQ9hek$wF4kOkv zs~n8m(UBGE-J|?JCo4;BO#5MQKY#znf4iBN$(%nTo4rY2)&K7C&GXIn`5~RFOYiM$ zGyCoG>sv|&9~Sjbj=OK0zteXYmHxA1vDtUC{3iVwM5Q=xlJ1yMdd!7al6{@p|5c4) z!MbLf^v_q_BYvC}ZVE{a>SLpZ1h^50i07wP?ve3U%(SVoyEa?I+g;M6oHUuURL81@ z#akzbJI;~YEOzAk?sXmKAg)XG&GKnGcE=7i81v8e*drk-j!hF=N8kfS!B7V?C{IawpQ2GGyubt_ORD=Lb~>y& z(6&W0PNO9=`!k9q(c4n)%5}3$-Y}&>ASF-;R`TN4dvo*T{IMPX@BtV4{`S3KT+U$K`R;`v2=D`fFe42F*pWDChrs zb}OXF0~2*pZr_U^Ec+M7><3t6WZ650S@3W34VQZp9?*}mFLTg z-SuCD(_?zh1!1%?zR{TzjLe2Thd3};1UEN_Y){H#2Q4wGt2d=~pd5!5uN#?sKXQp$ zIbF8no`1+L-!4|^Hb>^PtG0B8mg(o^ADaz8a(0-xE*@5!Zmukrsp61-J+|T9{-M=( z`3c*)<{AeVVRYnXz0*x5JCPzK?8RI$)?xUG7(cT5k_vPhl$k$GD4*3U6g-Rt<6QD! z3iVsH+rP~V_ZT&Y{LZY7(K4GKiu`!cc4?yDm(iQ%c56=Cb^XmUQnGr#+OF<}*QZ+M zA_nZ)e17=A1+r`}{}9DdKH2dpzBRt@3l76MbJ6af%8;jgA& zGO)}EB%f!)?-}9-|EAS1o;LSa_8HTd;s4XU!pU+RRQ-91)9=?}_}@FttaOioIAkIt z{9n!22;Ev2lt9)lxyHWiHK1I(*sSFJL4|6bXL9$yZ4OQ|9;mxm}9Y=t3r1>`oN7xOH;5JMW4 zG)!BrQ)G_MT>x|iz%fGLVJfQ}`RIAGvgV=$BLqHH57|Ib*F>OoM)@|M=ZJsMSC?^YX4`)V^oiY+20G>EOobiQGF-Ap_PZo-TJI_ z|H1yVr~m72@_Z+L>-3~oL+f+t-Pkei_{3f*_MP|-1LvoIGX$?>udP3 zOFt}T=2%l+3F>8N4mM0G9~jBcHu`^dzc%`R zl@&J+DJ#S$yVmSpS0B)yEy}vT*{Q!8EM4hmvi)4mBaa2(54?-HkM~M=H4*d|nm)I- zhBb3achb}&({O(hz7+c=9I9`pcsU1@jRj#a8jJFCA(?i?K(~NT3Dyv$nNz5y>p|c* zO(2g`qYweLin{g$0!L|YMJHc6=F@Ces+rWhh6>$^U$jSqleNy_2vCG|(6vuNmT-CL zUezM!y}z)Y>29={P$!c_wGy>`!Nj}+&37<>vO6#xvg$Gk)w248;in$uW0g~Jboc=v z(SD<`>Ps7wzM^3Myk^?tjGq}#bs}8jc5Hndp12f4m}`^Pv@f)C__rW|IuLj^!wG=} z9#-d=1t+zr2N9%;RyKH%=|^?&+;fF#i8FlU<`W21lN24Xr86y4Cl1J!c=Z|63MQ%RQEyAiWapyf2Sf zXd9yV2Ss2xl75b?l?fTTHWiGm)m$mhETZ|I^B;Id)gj+?iQ{n49M1ZH>40)6nj?GK z*wrgA=P(W~YNvrVs`LXw73$7`NjGNDZx?SGr)>l6n)e_Uoo2&|F*6gK>+Y1;a{#ic zNH3@DZ9u?&V{Q)LA!pH7` zi@Q~sDG6tCl|sSAcrTZN*|P#={+lpQ7ZRi&G))nt9uMShIVCRc^NoTpH!@?;E}0EP z;~>%ID|+7kd?Aof$ zq~|mZphH@VjU`RgdKlv8DN*(!cTzpKm$&@1xSryNpWrmNhY9l~qcJa=3*Ivbnd06p zHeEBJZ{7PR04d=>f3FZVw>1dC0uvaj>0(g99R~I(7a6l{{ti?O`4z@Xg6wSAbpn)( z*(etw`ik(-v(e&<#(M{xhRt15w&*7fAhW`!7~yNjq+UzVE0fA8G1-BgVOUN_+Y=q$ z;wnqlu2XW51})2r8O>^3X*e(WV3Tvk1Ig1z3dK#99HjGIt z1*0=j4|st%(o?-1OdumO(VDrnKQTraQ{afmxUYhthrz81a03w(ZU8_qM^h*8@JhNM zBGWn63pB|KpUy9sP_JpEIsIrshsslcXMhjEYe=X%a>Ok&DZZFW2j-wrOIWu02|_QL zOGH2P!!Ad`jCLwP>H4#YqE2tdPhO17$rT}9XQn+d&ZW`dT)jF$0kzO=n&IF)7?3BM zK%5|{9G?7M25TyJ%wHXbol~6n`D;FJvproX!Mp~H)0mU>o|j zOVmqXBAPHJ$d3eN#t7LD6&1d25JS4JBusz_A=k~rZVfkRU+(SG){>5GB5zQ~1{jLEGF23m0%*EjT^x;h%CjsJO%gkB zd$~qj*C5(kV}u5sv5m-VA(!4;&x=uDFhq8qx;rwewc|JeIq}xXV-#jr#g|2tNua`oCU!wo?g?pEknx?394(mYsw5Uk%z$};Wm$EjBh$*BbT zUf^kF0h0NiZ6CB=y*e@rhc+)qhX+Ai!(wi^+HbR4_|!?Iue&!SLenay?R!9|+3g!M z{i7^U=t24+wvqHB;@1?G8Zl(_Zr-MV7YI4!LH0LC&F4z6FSx`+CJ- zXw5c4_S-VflT=eT>4@lru!LCewYA)I=^9GuAv(TB{vtSp+l-C^w#mpf|R4ix6M z@jq4UIJHF^{d)hgOq@B|?JnYJS0z!jHFm4!^W&3^l|E*}KgU!0Mw{Jk@x1n8#GMUc z?N`Y+*(8>x4_oO^$`uf8S>R>n1rANS8U+G%lP5UJH9$A|00x*IZN8gA4d~oKR#`>4fP%-L)*m zRHU^~0YN{=@IIdn*wU%;o@a$MZoFjMZ={-+AKEP`r!=ak#bc4}R1vJ}BO>tck8fAy zQvJ61Oh7czE=CZiguA2{FdHi zK6(49{L_-bODg=BX#2e+7muT4Ha?dAJo!FDE&v+!{;RZ2ac?0=$Qum`M;Vr;7 zS|ZliK8Ke8)WYm2KmE|?u2Sh-%3j8cc7NC3YqmR+WQMxk9*AcOukObW%!xm#JO75pQ#6Z^WhXj_7zo0R<3kKSJS(o9y62Rqt^BB@>lbt z9!1BOHW2PQzM$>E<4tv=gT6I{dUH&-dp=r+ml4+qrqf2;WZR=UT}rG4?A;iCzs}RS z8ON$Vs*v0r&D5>iXCPTC$EwHa^M@2Lysr|z{76!F)y7pZ4Zk39E(&MnN6KflxoB%z zWVQV_s$^dn*Y;R&uGwX2gTEU63-u@D9m44u5YxiFdj8UwIv@Q60?5ZRFuw*-W~;Xd z!(7ZRMtwb%2R&tEk%nw8B`5S1m2ALdT!^N+rpZn=akg$h^89hoQjeaHIVg7u6aCWI zk@)TGZNIj{j{#kI!ds!{gsqTFTubOC@Sqr>TS*7o73LcG`IO0tlWZ%Ib#yl93XV-l+QV-wuz+rV~IpJ zrscws1f-mt`9avYm05UyEx+UvY8Qi_2F8uBm5%n=XSx+q>9I{rHp(yc7gPVH8n}NA zN$X0Pcv|q2vnfaJfE23a4cbtmQ^oJMY2=XeHTRiy$&v(%H&Y z&4X+ht`)Dn)`yz_i{CX=fl!@~CV@IpF3V8%2Tn2#YBC539VFpeFJ@O3#08`A)LZlY+p|Y1APB1HmX*b$6%(0L%l5RA^X;CAUaHI^&TiSV6uiDFdaAoX^yN z?6@j(`Lu{PL3Y45d!7__#(UVp?@Nr0oKP-a7L%t+GgO3+y3AFN8Mzj%L|%(by{Iy< z-|?w}PbMKK>!f`Uww_Gb5V?wJ)?*a_U_*$<(pfuU$Dp{rcbr;nwlJumU?GL!VFK|~)OL_Zvb_Qz#(L0n$b9;f zruQ6Eenf+QL;Yctk7PJ}=JRptEB@@M_R)0YlYw|3-i?@ClTo2I{xl-YT=FZ@&g+3C zoq_u3J^i~8|D<7PeL40XRHD`J7ycan97l&4oLC z;S8FWp4QLy)g z1rGIhz>+m#?Wo`3t&qKk@OAjTsL~ARpGh*BVDl%;?>Z7e2RGyB z#oD*q(dBI`$VakS7DRZ=IO!GQZ@q8*5msH-&|9Oz8|j=>~s0iUPIw7(oMDn zwE(MPUy+W3NWNXrz0%{oQQakavf?mb+d`^Esl#iNBX!B0jw}v5*8r{?E)l@CBg8RE z6{$Ji;tJIyFk;@feZwD6mlQL39>Vd%2VD{Kq|=sg5$kuJDw81P!=w|2Ku){?Dr;0` zOBGZsGI=>a(jomm0A@IZV_>pPD$+w$TvS{n@9g~ls2Elj|43h}4XR5QYJ>w2#HDQD zNY0nC^0#kkheqFtP!iabiTdueA|h(zktgqeCnSIWd7>@F|JQkIyl1a*w4*Z=#;EEA z;C0CtW%|We>|xUTY}tKTgPf}*x3J7_>Sk)u+RxSI8eaaUyfquB3Ser(55 zmm7pqrF_esG$$ zX#HiJ?>g);BpM_;Vui4O-weKzk_yQn)zk@?|}w)DaF@6#o@;QLHU zvgI0N#A}Xt8$u|+4hgc zhxPtp{>SE<`1pNRy)L(F^KQFomw%4_^!~#l`Fj4LZa4Q)_WI#*p3V=OGVT}mkX|05 z&9Cb6{?FI`Pe$B`U{lSo4rVjJzy1KS*MqIB$l8&q=! z5Jxq14LNlx<*eNr6Bloeqh2$6O%F_QCGoJrh)a+LblNUQRLV75FPq-g+59G}MhlV7 z*mOFH3-O(irYgp<9A}NLU0N>vrE7)mD5zCSGOr6Ge>!-2KHk&CyBWCGlYDaiVlus& zicc#mJmWOfPCxnoIeO0~$@1$??|SdjXO^#a)6+AU;gA5hB$vw|V;NlWg(9TSDutw2 zDP&dx0m8ePLEGxC?y5?kdA+}SF5VD9%%Hm}^WMKX=XaiG{I$D(;_6pVhTn{GV=#L$ zdO8tLju(%gqPi)i3;inCk8|f-n|*bR_^?HB&!v}`z^+E1GhukajW8!&OFpedFUSZf9?lE9(LAvR(!;!q01_QO zY>{zMZYk6?YQg>UI-^%4;Y7F4Ib+8IHl!hAsYxJ^^4;anqP}eagg`Y<-lpXEkxz zJ6RY=kF7**kGKkDBn<<3`%?1X9hCOLuZBB6*NszZ!US$ab-)T@(Jigy9Si=0We-C? zH>W3p1jKEU9oSH-Ihr2RyW==i5xV#TwL!&Khw*^)&0Ew52YL^r%tKwA3la216v-8m zGbU!xt8s#3sA`kwW_Tok0|ZA?>>|QMwc7w^th4qG{|x+%X1U%FX}Mxj##0KiEJ5dl|g>k$D|Z(pQK1 zzw<ke_xAF!6Ht9So~K`UCOgumW=Fwa@$2(yw?6G|7Oyi zQ`F^t)%`YYAZ-$4Q|n)1a4ox^Hb1G}GXI%^TQcI3V)dJBN3rX^xmzu(e7zJt3C1Lg z%1s5mQZpm%`8Sl24cwSM>^(m=LA90<@whwA-CWtOA4D*q8IkF5nD<9ESI52f_*^aT;DWOpx znYM7R&ET~rDSuQhLaS6;P}>YLss^M;`A%pm@v(aLN|kV6{TRuzf>h(VG*e8^_8K{{ zv><;`BhC`V*Wza-hlj)9;fF0Sk>~7=nsPq)hkE*3OZZuCKChei*2CcTuZ&Og>RfmZb(0~tba_MJ26*2 ze34vPS~rkf>%oRs{w(WaDg3F#*n{z)-*#`mkWWbwSY51q$fUGlMD5r%|DIY!oj#<$ zi$4XBoRnQ03C`>7ZMLnp{9`7;w)-Y;tKU?yxL=3i120!9WHCr9Y$2h9r}^U%3$B7+ zIZmN|)M84z5$N*460`(qefi+h@TBN60)bTKN1hO3NY~!PpADs+ne-TfcQ0}Edls_D zf2Wq7GibhUCqw4(cPgkWOm$H6(|IH_bfo0FLwyjwNN2FoqIcpYtqkR;9G)UY%x#9i z%Is*x(pUBPbts5`Fvg^c2q7O%X&7>=rwP6Xzgm4|+QygB~7`F7d{5u{4u z=?^gBHAC5jTKBso5|YCQ@i*l!sJ8D8s6LT#!#<(9gzMQZ>G5Vv|G(VdGP_V6w|$SZ zGRv`+d)*rNSp}#suxk-luCu}c>gtthQvz?X#(G!;Ma~B{%Z0(vUCB+`-CNGSi}i3O z4K9S^VZo_gl~Ae57k&Q>F!iwBck-F|w0tC|AyJcOMY#br#r=!aEDY}4lu!)hkEwzZ zl3VY{T|^aH)G@*ABO`xGQ&HD17g4t^bNBu3sYDJrY*J5gq4!xvW89MXi+<1rj5uod zyG6w%<0ilPtep~FoECT>giI^`syQLXc=akeBT1;i&pR>3l4M?ms5EkGX8)*jK4gRD zo%$pi>&d6;Pn|YIE%Xi2kxz#BRQSwn9<=Ic3eOFO@BS#ie#*=1RzJw{^kpucq>Uo- zL%lQ1FjZcvxA~uZY%W@3F@#1TTf%VNQL?z_|EB7PWO-bx`wr!`Ss$y{tn7_*Adbp* zPp_=l;J`@(ZNBd+I}>d$JeHs{Vc+zAKrl~z{pn)A{&VW3J1GlVaUJ$7iA_?#UeK z2ZCJqf$Y*=}mXS%B8hCZQ

    wXJK7{SM`rqj2QuZAK7^6{}T6cZd^6 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

    RTT&W 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
    !xj0+?+sm2bJ!l*KdSFUZ| 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
    C-@UhvG*)%A{6>+)>c5h>X3sdMaic54X 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
    Km{WoZ=&tX#3BwN&%F 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 Date: Mon, 27 Apr 2020 16:13:37 +0800 Subject: [PATCH 096/117] re-arch code generator refactoring --- .../backend/utensor/_graph_lower/_op_lower.py | 4 + .../code_generator/rearch/_code_generator.py | 78 +++++---- .../code_generator/rearch/_operators.py | 154 ------------------ .../rearch/_operators/__init__.py | 2 + .../code_generator/rearch/_operators/_base.py | 98 +++++++++++ .../rearch/_operators/_impls.py | 59 +++++++ .../utensor/snippets/rearch/_snippets.py | 139 ++++++++++------ .../templates/containers/rearch/simple.cpp | 18 +- .../templates/snippets/rearch/declare_op.cpp | 4 +- .../snippets/rearch/declare_ram_tensor.cpp | 9 + .../snippets/rearch/declare_rom_tensor.cpp | 6 +- .../templates/snippets/rearch/eval_op.cpp | 9 +- utensor_cgen/frontend/tflite.py | 18 +- utensor_cgen/transformer/base.py | 20 +++ utensor_cgen/transformer/conv_pool.py | 1 + utensor_cgen/transformer/graph_viz.py | 3 +- utensor_cgen/transformer/linear_reoder.py | 3 +- utensor_cgen/transformer/ns_transformer.py | 9 +- utensor_cgen/transformer/optimizer.py | 4 +- utensor_cgen/transformer/quantize.py | 1 + 20 files changed, 382 insertions(+), 257 deletions(-) delete mode 100644 utensor_cgen/backend/utensor/code_generator/rearch/_operators.py create mode 100644 utensor_cgen/backend/utensor/code_generator/rearch/_operators/__init__.py create mode 100644 utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py create mode 100644 utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py create mode 100644 utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_ram_tensor.cpp diff --git a/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py b/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py index 613a69cc..3c523099 100644 --- a/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py +++ b/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py @@ -44,6 +44,10 @@ class OptypeRenameManager(object): @classmethod def get_new_optype(cls, op_type): return cls.NAME_MAP.get(op_type, op_type) + + @classmethod + def add_name_map(cls, generic_name, target_specific_name): + cls.OptypeRenameManager.NAME_MAP[generic_name] = target_specific_name def handle_tensorflow(self, ugraph): for op_info in ugraph.ops_info.values(): diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py index 4949add9..a4b3f7a7 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py @@ -1,5 +1,3 @@ -import os -import pickle import re from itertools import chain from pathlib import Path @@ -8,9 +6,9 @@ from utensor_cgen.backend.utensor.snippets.composer import Composer from utensor_cgen.backend.utensor.snippets.legacy import ( ContextGlobalArrayContainer, WeightSnippet) -from utensor_cgen.backend.utensor.snippets.rearch import SimpleContainer +from utensor_cgen.backend.utensor.snippets.rearch import ( + DeclareRamTensorSnippet, DeclareRomTensorSnippet, SimpleContainer) from utensor_cgen.backend.utensor.snippets.template_env import env -from utensor_cgen.transformer.pipeline import TransformerPipeline from utensor_cgen.utils import Configuration, class_property from ._operators import OperatorFactory @@ -40,25 +38,27 @@ def apply(self, ugraph): src_fname = '{}.cpp'.format(ugraph.name) # find all required ops and the variable names for the tensors in the generate files ( - ops, # Set[OperationInfo] - placeholders, # Set[OperationInfo] + ops, # Set[Operator], no Placeholder or Inline ops + placeholders, # Set[String], variable names of planceholder tensors tensor_var_map, # dict, tensor name -> var name ) = self._find_required_ops(ugraph) ( - ops_map, # dict, op_info -> variable name of op in the output files - declare_snippets, # list of Snippet objects, which will render code snippets for tensor declaration - weight_snippets, # snippets for generating weights header file - ) = self._get_declare_snippets(ugraph, ops, tensor_var_map) + ops_map, # dict, op_info -> variable name of op in the output files + declare_global_snippets, # list of Snippet objects, which will rendered in global scop + declare_local_snippets, # list of Snippet objects, which will rendered in local function scope + weight_snippets, # snippets for generating weights header file + ) = self._get_declare_snippets(ugraph, ops, tensor_var_map) # eval_snippets: List of snippet objects, which will render code snippets for tensor evaluation eval_snippets = self._get_evaluation_snippets(ugraph, ops_map, tensor_var_map) # generate files self._generate_files( ugraph, - placeholders, - tensor_var_map, - weight_snippets, - declare_snippets, - eval_snippets + placeholders=placeholders, + tensor_var_map=tensor_var_map, + weight_snippets=weight_snippets, + declare_global_snippets=declare_global_snippets, + declare_local_snippets=declare_local_snippets, + eval_snippets=eval_snippets ) def _find_required_ops(self, ugraph): @@ -80,32 +80,40 @@ def _find_required_ops(self, ugraph): def _get_declare_snippets(self, ugraph, ops, tensor_var_map): # get ops/tensors declaration snippets - declare_snippets = [] + declare_global_snippets = [] + declare_local_snippets = [] ops_map = {} # op -> op variable name weight_snippets = [] for i, op in enumerate(ops): op_var_name = 'op_{:03d}'.format(i) ops_map[op] = op_var_name - declare_snippets.append(op.get_declare_snippet(op_var_name)) + declare_local_snippets.append(op.get_declare_snippet(op_var_name, tensor_var_map)) + for op_info in filter(lambda op_info: op_info.op_type not in ["Inline", "Placeholder"], ugraph.ops_info.values()): + for out_tensor in op_info.output_tensors: + declare_local_snippets.append( + DeclareRamTensorSnippet(out_tensor, tensor_var_map[out_tensor.name]) + ) for op_info in filter(lambda op_info: op_info.op_type == 'Inline', ugraph.ops_info.values()): - tensor = op_info.output_tensors[0] - buffer_name = 'data_{}'.format(tensor.name.replace(':', '_').replace('/', '_')) + tensor_info = op_info.output_tensors[0] + tensor_var = tensor_var_map[tensor_info.name] + buffer_name = 'data_{}'.format(tensor_info.name.replace(':', '_').replace('/', '_')) weight_snippets.append( WeightSnippet( buffer_name, - tensor.dtype, - tensor.shape, + tensor_info.dtype, + tensor_info.shape, op_info.op_attr['value'].value.np_array.ravel() ) ) - declare_snippets.append( - OperatorFactory.get_opertor(op_info).get_declare_snippet( - tensor_var_name=tensor_var_map[tensor.name], - buffer_var_name=buffer_name, - tensor=tensor + declare_global_snippets.append( + DeclareRomTensorSnippet( + tensor_info=tensor_info, + tensor_var=tensor_var, + buffer_var=buffer_name, + static=True, ) ) - return ops_map, declare_snippets, weight_snippets + return ops_map, declare_global_snippets, declare_local_snippets, weight_snippets def _get_evaluation_snippets(self, ugraph, ops_map, tensor_var_map): eval_snippets = [] @@ -116,11 +124,15 @@ def _get_evaluation_snippets(self, ugraph, ops_map, tensor_var_map): op = OperatorFactory.get_opertor(op_info) op_name = ops_map[op] eval_snippets.append( - op.get_eval_snippet(op_info, op_name, tensor_var_map) + op.get_eval_snippet(op_name, op_info, tensor_var_map) ) return eval_snippets - def _generate_files(self, ugraph, placeholders, tensor_var_map, weight_snippets, declare_snippets, eval_snippets): + def _generate_files( + self, ugraph, placeholders, tensor_var_map, + weight_snippets, declare_global_snippets, declare_local_snippets, + eval_snippets + ): template_vars = {} template_vars['model_name'] = ugraph.name template_vars['meta_data_pool_size'] = self._compute_meta_data_size(ugraph) @@ -146,10 +158,10 @@ def _generate_files(self, ugraph, placeholders, tensor_var_map, weight_snippets, # generate the compute function model_file_dir = Path(self.model_dir) header_fname = self.header_fname == 'None' and '{}.hpp'.format(ugraph.name) or self.header_fname - container_snippet = SimpleContainer( - declare_snippets=declare_snippets, - eval_snippests=eval_snippets - ) + container_snippet = SimpleContainer() + container_snippet.add_declare_global_snippets(*declare_global_snippets) + container_snippet.add_declare_local_snippets(*declare_local_snippets) + container_snippet.add_eval_snippets(*eval_snippets) container_snippet.template_vars.update(template_vars) (model_file_dir / ugraph.name).mkdir(parents=True, exist_ok=True) with (model_file_dir / ugraph.name / header_fname).open('w') as fid: diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py deleted file mode 100644 index 3d3d8456..00000000 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py +++ /dev/null @@ -1,154 +0,0 @@ -from copy import deepcopy -from typing import Hashable - -from six import with_metaclass - -from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP -from utensor_cgen.backend.utensor.snippets.rearch import (AddOpEvalSnippet, - DeclareOpSnippet, - RomTensorSnippet) -from utensor_cgen.utils import must_return_type - -__all__ = ['OperatorFactory', 'OpNotSupportedError'] - - -class OpNotSupportedError(Exception): pass - - -class OperatorFactory(object): - - _operators = {} - - @classmethod - def get_opertor(cls, op_info): - op_type = op_info.op_type - op_cls = cls._operators.get(op_type) - if op_cls is None: - raise OpNotSupportedError( - '{} not supported in utensor_cgen'.format(op_type) - ) - return op_cls(op_info) - - @classmethod - def register(cls, op_cls): - cls._operators[op_cls.op_type] = op_cls - return op_cls - - @classmethod - def support_op_types(cls): - """Return the set of all supported ops - """ - return set(cls._operators.keys()) - - @classmethod - def is_supported(cls, op_type): - if op_type != 'Placeholder' and op_type not in cls._operators: - return False - return True - - -class _OperatorMeta(type): - - def __new__(mcls, name, bases, attrib): - attrib['_cache'] = {} - for key in ['get_type_signature', 'get_constructor_signature']: - func = attrib.get(key) - if func is None: - continue - if not must_return_type.return_type_is_ensured(func): - attrib[key] = must_return_type(Hashable)(func) - elif not issubclass(must_return_type.get_expect_type(func), Hashable): - raise RuntimeError('{}.{} must be ensured to return {}'.format(name, key, Hashable)) - cls = type.__new__(mcls, name, bases, attrib) - return cls - - -class _Operator(with_metaclass(_OperatorMeta), object): - - def __new__(cls, op_info): - type_signature = cls.get_type_signature(op_info) - construct_signature = cls.get_constructor_signature(op_info) - full_signature = (type_signature, construct_signature) - in_dtypes, out_dtypes = type_signature - if full_signature not in cls._cache: - self = object.__new__(cls) - self.in_dtypes = in_dtypes - self.out_dtypes = out_dtypes - self.construct_params = construct_signature - self.attributes = deepcopy(op_info.op_attr) - cls._cache[full_signature] = self - return cls._cache[full_signature] - - @classmethod - @must_return_type(Hashable) - def get_type_signature(cls, op_info): - in_dtypes = tuple(t.dtype for t in op_info.input_tensors) - out_dtypes = tuple(t.dtype for t in op_info.output_tensors) - return (in_dtypes, out_dtypes) - - @classmethod - @must_return_type(Hashable) - def get_constructor_signature(cls, op_info): - return tuple() - - def get_declare_snippet(self, op_var_name, **kwargs): - raise NotImplementedError( - 'base get_declare_snippet invoked: {}'.format(type(self)) - ) - - def get_eval_snippet(self, op_info, op_name, tensor_var_map, **kwargs): - raise NotImplementedError( - 'base get_eval_snippet invoked: {}'.format(type(self)) - ) - - -@OperatorFactory.register -class _AddOperator(_Operator): - - op_type = 'AddOperator' - - def get_declare_snippet(self, op_var_name): - snippet = DeclareOpSnippet( - op_type=self.op_type, - dtypes=[NP_TYPES_MAP[self.in_dtypes[0]].tensor_type_str], - op_var_name=op_var_name, - ) - return snippet - - def get_eval_snippet(self, op_info, op_name, tensor_var_map): - snippet = AddOpEvalSnippet( - op_info=op_info, - op_name=op_name, - tensor_var_map=tensor_var_map, - dtypes=[op_info.input_tensors[0].dtype] - ) - return snippet - - -@OperatorFactory.register -class _MatmulOperator(_Operator): - - op_type = 'MatrixMultOperator' - - -@OperatorFactory.register -class _ConvOperator(_Operator): - - op_type = 'ConvOperator' - - -@OperatorFactory.register -class _InlineOperator(_Operator): - - op_type = 'Inline' - - def __init__(self, op_info): - self._tensor = op_info.output_tensors[0] - - def get_declare_snippet(self, tensor_var_name, buffer_var_name, tensor): - snippet = RomTensorSnippet( - tensor_var_name=tensor_var_name, - buffer_var_name=buffer_var_name, - tensor=tensor - ) - return snippet diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/__init__.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/__init__.py new file mode 100644 index 00000000..d5f883eb --- /dev/null +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/__init__.py @@ -0,0 +1,2 @@ +from . import _impls as _ +from ._base import OperatorFactory, OpNotSupportedError diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py new file mode 100644 index 00000000..954c4a5a --- /dev/null +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py @@ -0,0 +1,98 @@ +from copy import deepcopy +from typing import Hashable + +from six import with_metaclass + +from utensor_cgen.utils import must_return_type + +__all__ = ["OperatorFactory", "OpNotSupportedError"] + + +class OpNotSupportedError(Exception): + pass + + +class OperatorFactory(object): + + _operators = {} + + @classmethod + def get_opertor(cls, op_info): + op_type = op_info.op_type + op_cls = cls._operators.get(op_type) + if op_cls is None: + raise OpNotSupportedError( + "{} not supported in utensor_cgen".format(op_type) + ) + return op_cls(op_info) + + @classmethod + def register(cls, op_cls): + cls._operators[op_cls.op_type] = op_cls + return op_cls + + @classmethod + def support_op_types(cls): + """Return the set of all supported ops + """ + return set(cls._operators.keys()) + + @classmethod + def is_supported(cls, op_type): + if op_type != "Placeholder" and op_type not in cls._operators: + return False + return True + + +class _OperatorMeta(type): + def __new__(mcls, name, bases, attrib): + attrib["_cache"] = {} + for key in ["get_type_signature", "get_constructor_signature"]: + func = attrib.get(key) + if func is None: + continue + if not must_return_type.return_type_is_ensured(func): + attrib[key] = must_return_type(Hashable)(func) + elif not issubclass(must_return_type.get_expect_type(func), Hashable): + raise RuntimeError( + "{}.{} must be ensured to return {}".format(name, key, Hashable) + ) + cls = type.__new__(mcls, name, bases, attrib) + return cls + + +class _Operator(with_metaclass(_OperatorMeta), object): + def __new__(cls, op_info): + type_signature = cls.get_type_signature(op_info) + construct_signature = cls.get_constructor_signature(op_info) + full_signature = (type_signature, construct_signature) + in_dtypes, out_dtypes = type_signature + if full_signature not in cls._cache: + self = object.__new__(cls) + self.in_dtypes = in_dtypes + self.out_dtypes = out_dtypes + self.construct_params = construct_signature + self.op_info = op_info + cls._cache[full_signature] = self + return cls._cache[full_signature] + + @classmethod + @must_return_type(Hashable) + def get_type_signature(cls, op_info): + in_dtypes = tuple(t.dtype for t in op_info.input_tensors) + out_dtypes = tuple(t.dtype for t in op_info.output_tensors) + return (in_dtypes, out_dtypes) + + @classmethod + @must_return_type(Hashable) + def get_constructor_signature(cls, op_info): + return tuple() + + def get_declare_snippet(self, op_var_name, tensor_var_map, **kwargs): + raise NotImplementedError( + "base get_declare_snippet invoked: {}".format(type(self)) + ) + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map, **kwargs): + raise NotImplementedError( + "base get_eval_snippet invoked: {}".format(type(self)) + ) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py new file mode 100644 index 00000000..80296657 --- /dev/null +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py @@ -0,0 +1,59 @@ +from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP +from utensor_cgen.backend.utensor.snippets.rearch import ( + AddOpEvalSnippet, DeclareOpSnippet, DeclareRamTensorSnippet, + DeclareRomTensorSnippet) + +from ._base import OperatorFactory, _Operator + + +@OperatorFactory.register +class _AddOperator(_Operator): + + op_type = 'AddOperator' + + def get_declare_snippet(self, op_var_name, tensor_var_map): + snippet = DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + return snippet + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + snippet = AddOpEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + return snippet + + +@OperatorFactory.register +class _MatmulOperator(_Operator): + + op_type = 'MatrixMultOperator' + + +@OperatorFactory.register +class _ConvOperator(_Operator): + + op_type = 'ConvOperator' + + +# @OperatorFactory.register +# class _InlineOperator(_Operator): + +# op_type = 'Inline' + +# def __init__(self, op_info): +# self._tensor = op_info.output_tensors[0] + +# def get_declare_snippet(self, op_var_name, tensor_var_map, buffer_var_name): +# tensor_var_name = tensor_var_map[self._tensor.name] +# snippet = DeclareRomTensorSnippet( +# tensor_info=self._tensor, +# tensor_var=tensor_var_name, +# buffer_var=buffer_var_name, +# ) +# return snippet diff --git a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py index 552469a6..be7dc55e 100644 --- a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py +++ b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py @@ -1,33 +1,75 @@ -from utensor_cgen.backend.utensor.snippets._types import UTENSOR_TYPES_MAP, NP_TYPES_MAP -from utensor_cgen.backend.utensor.snippets._base import Snippet, SnippetBase +import numpy as np -__all__ = ['RomTensorSnippet', 'DeclareOpSnippet', 'AddOpEvalSnippet', 'SimpleContainer'] +from utensor_cgen.backend.utensor.snippets._base import Snippet, SnippetBase +from utensor_cgen.backend.utensor.snippets._types import (NP_TYPES_MAP, + UTENSOR_TYPES_MAP) + +__all__ = [ + "DeclareRomTensorSnippet", + "DeclareRamTensorSnippet", + "DeclareOpSnippet", + "OpEvalSnippet", + "AddOpEvalSnippet", + "SimpleContainer" +] class _SnippetBase(Snippet): __headers__ = set(['"uTensor/uTensor.hpp"']) - -class RomTensorSnippet(_SnippetBase): + @staticmethod + def get_quant_param(tensor_info): + quant_params = {} + if 'quantization_zeros' in tensor_info.attributes: + zeros = tensor_info.attributes['quantization_zeros'] + scales = tensor_info.attributes["quantization_scales"] + quant_params['zero_point'] = { + 'value': zeros[0], + 'type_str': ['uint8_t', 'int8_t'][zeros.dtype == np.dtype('int8')] + } + quant_params['scale'] = { + 'value': scales[0], + 'type_str': 'float' + } + return quant_params + + +class DeclareRomTensorSnippet(_SnippetBase): __template_name__ = 'snippets/rearch/declare_rom_tensor.cpp' - def __init__(self, tensor_var_name, buffer_var_name, tensor): - Snippet.__init__(self) - shape = tensor.shape or [1] - self.template_vars = { - 'tensor_var_name': tensor_var_name, - 'shape': shape, - 'buffer_var_name': buffer_var_name, - 'utensor_dtype': UTENSOR_TYPES_MAP[tensor.dtype] - } + def __init__(self, tensor_info, tensor_var, buffer_var, static=False): + _SnippetBase.__init__(self) + self.template_vars['tensor_var'] = tensor_var + self.template_vars['shape'] = tensor_info.shape or [1] + self.template_vars['buffer_var'] = buffer_var + self.template_vars['static'] = static + self.template_vars['utensor_dtype'] = UTENSOR_TYPES_MAP[tensor_info.dtype] + self.template_vars['quantize_params'] = self.get_quant_param(tensor_info) + + +class DeclareRamTensorSnippet(_SnippetBase): + __template_name__ = 'snippets/rearch/declare_ram_tensor.cpp' + + def __init__(self, tensor_info, tensor_var): + _SnippetBase.__init__(self) + self.template_vars['tensor_var'] = tensor_var + self.template_vars['shape'] = tensor_info.shape or [1] + self.template_vars['utensor_dtype'] = UTENSOR_TYPES_MAP[tensor_info.dtype] + self.template_vars['quantize_params'] = self.get_quant_param(tensor_info) class DeclareOpSnippet(_SnippetBase): __template_name__ = 'snippets/rearch/declare_op.cpp' - def __init__(self, op_type, dtypes, op_var_name): - Snippet.__init__(self) + def __init__(self, op, templ_dtypes, op_var_name): + _SnippetBase.__init__(self) + op_info = op.op_info + if templ_dtypes: + templ_params = ', '.join([NP_TYPES_MAP[dtype].tensor_type_str for dtype in templ_dtypes]) + op_type = '{}<{}>'.format(op_info.op_type, templ_params) + else: + op_type = op_info.op_type self.template_vars['op_type'] = op_type - self.template_vars['dtypes'] = dtypes + self.template_vars['construct_params'] = op.construct_params self.template_vars['op_var_name'] = op_var_name @@ -35,9 +77,8 @@ class OpEvalSnippet(_SnippetBase): __template_name__ = 'snippets/rearch/eval_op.cpp' __inputs__ = [] __outputs__ = [] - - def __init__(self, op_info, op_name, tensor_var_map, dtypes): + def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map): Snippet.__init__(self) input_map = { name: tensor_var_map[tensor.name] @@ -47,25 +88,22 @@ def __init__(self, op_info, op_name, tensor_var_map, dtypes): name: tensor_var_map[tensor.name] for name, tensor in zip(self.__outputs__, op_info.output_tensors) } - out_shapes_map = { - tensor_var_map[tensor.name]: tensor.shape or [1] - for tensor in op_info.output_tensors - } - out_dtypes_map = { - tensor_var_map[tensor.name]: UTENSOR_TYPES_MAP[tensor.dtype] - for tensor in op_info.output_tensors - } - utensor_dtypes = [NP_TYPES_MAP[dtype].tensor_type_str for dtype in dtypes] - if utensor_dtypes: - op_type = '{}<{}>'.format(op_info.op_type, ', '.join(utensor_dtypes)) + quantize_params_map = {} + for tensor_info in op_info.output_tensors: + quant_param = self.get_quant_param(tensor_info) + if quant_param: + tensor_var = tensor_var_map[tensor_info.name] + quantize_params_map[tensor_var] = quant_param + if templ_dtypes: + templ_params = ', '.join([NP_TYPES_MAP[dtype].tensor_type_str for dtype in templ_dtypes]) + op_type = '{}<{}>'.format(op_info.op_type, templ_params) else: op_type = op_info.op_type self.template_vars['op_type'] = op_type self.template_vars['op_name'] = op_name self.template_vars['input_map'] = input_map self.template_vars['output_map'] = output_map - self.template_vars['out_shapes_map'] = out_shapes_map - self.template_vars['out_dtypes_map'] = out_dtypes_map + self.template_vars['quantize_params_map'] = quantize_params_map class AddOpEvalSnippet(OpEvalSnippet): @@ -77,26 +115,26 @@ class SimpleContainer(SnippetBase): __headers__ = set(['"uTensor/uTensor.hpp"', ""]) __template_name__ = 'containers/rearch/simple.cpp' - def __init__(self, declare_snippets=None, eval_snippests=None): - if declare_snippets is None: - declare_snippets = [] - if eval_snippests is None: - eval_snippests = [] + def __init__(self): SnippetBase.__init__(self) - self._declare_snippets = [] + self._declare_local_snippets = [] + self._declare_global_snippets = [] self._eval_snippests = [] - for snp in declare_snippets: - self.add_declare_snippet(snp) - for snp in eval_snippests: - self.add_eval_snippet(snp) - - def add_declare_snippet(self, snippet): - self.__headers__.update(snippet.headers) - self._declare_snippets.append(snippet) + + def add_declare_global_snippets(self, *snippets): + for snippet in snippets: + self.__headers__.update(snippet.headers) + self._declare_global_snippets.append(snippet) - def add_eval_snippet(self, snippet): - self.__headers__.update(snippet.headers) - self._eval_snippests.append(snippet) + def add_declare_local_snippets(self, *snippets): + for snippet in snippets: + self.__headers__.update(snippet.headers) + self._declare_local_snippets.append(snippet) + + def add_eval_snippets(self, *snippets): + for snippet in snippets: + self.__headers__.update(snippet.headers) + self._eval_snippests.append(snippet) def add_header(self, header, *headers): self._add_header(header) @@ -111,7 +149,8 @@ def _add_header(self, header): def render(self): return self.template.render( - declare_snippets=self._declare_snippets, + declare_global_snippets=self._declare_global_snippets, + declare_local_snippets=self._declare_local_snippets, eval_snippets=self._eval_snippests, **self.template_vars ) diff --git a/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp b/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp index 76571151..0b395fd6 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp @@ -1,16 +1,24 @@ using namespace uTensor; -// start rendering declare snippets -{%for snippet in declare_snippets%} +static localCircularArenaAllocator<{{meta_data_pool_size}}> meta_allocator; +static localCircularArenaAllocator<{{ram_data_pool_size}}> ram_allocator; + +{#ex: rom tensors, ops..etc#} +// start rendering global declare snippets +{%for snippet in declare_global_snippets%} {{snippet.render()}} {%endfor%} -// end of rendering declare snippets -localCircularArenaAllocator<{{meta_data_pool_size}}> meta_allocator; -localCircularArenaAllocator<{{ram_data_pool_size}}> ram_allocator; +// end of rendering global declare snippets void compute_{{model_name}}({%for pl in placeholders%}Tensor& {{pl}}, {%endfor%}std::vector& outputs){ Context::get_default_context()->set_metadata_allocator(&meta_allocator); Context::get_default_context()->set_ram_data_allocator(&ram_allocator); + {#ex: ram tensors#} + // start rendering local declare snippets + {%for snippet in declare_local_snippets%} + {{snippet.render()}} + {%endfor%} + // end of rendering local declare snippets // start rendering eval snippets {%for snippet in eval_snippets%} {{snippet.render()}} diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_op.cpp index 4fc8112d..2145e7ff 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_op.cpp @@ -1,5 +1,5 @@ -{%if dtypes %} -{{op_type}}<{%for t in dtypes[:-1]%}{{t}},{%endfor%}{{dtypes[-1]}}> {{op_var_name}}; +{%if construct_params%} +{{op_type}} {{op_var_name}}({%for param in construct_params%}{{construct_params}}{%if not loop.last%}, {%endif%}{%endfor%}); {%else%} {{op_type}} {{op_var_name}}; {%endif%} \ No newline at end of file diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_ram_tensor.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_ram_tensor.cpp new file mode 100644 index 00000000..90570e56 --- /dev/null +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_ram_tensor.cpp @@ -0,0 +1,9 @@ +{%if shape%} +Tensor {{tensor_var}} = new RamTensor({ {%for s in shape%}{{s}}{%if not loop.last%}, {%endif%}{%endfor%} }, {{utensor_dtype}}); +{%else%} +Tensor {{tensor_var}} = new RamTensor({{utensor_dtype}}); +{%endif%} +{%if quantize_params%} +{{quantize_params["zero_point"]["type_str"]}} {{tensor_var_name}}_zp; +{{quantize_params["scale"]["type_str"]}} {{tensor_var_name}}_scale; +{%endif%} \ No newline at end of file diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_rom_tensor.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_rom_tensor.cpp index 7aea2018..6b8c06ad 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_rom_tensor.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_rom_tensor.cpp @@ -1 +1,5 @@ -Tensor {{tensor_var_name}} = new RomTensor({ {%for s in shape[:-1]%}{{s}}, {%endfor%}{{shape[-1]}} }, {{utensor_dtype}}, {{buffer_var_name}}); \ No newline at end of file +{%if static %}static {%endif%}Tensor {{tensor_var}} = new RomTensor({ {%for s in shape%}{{s}}{%if not loop.last%}, {%endif%}{%endfor%} }, {{utensor_dtype}}, {{buffer_var}}); +{%if quantize_params%} +{{quantize_params["zero_point"]["type_str"]}} {{tensor_var_name}}_zp; +{{quantize_params["scale"]["type_str"]}} {{tensor_var_name}}_scale; +{%endif%} \ No newline at end of file diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_op.cpp index 6915a007..71d5666a 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_op.cpp @@ -1,6 +1,11 @@ -{%for tensor_var, shape in out_shapes_map.items()%} -Tensor {{tensor_var}} = new RamTensor({ {%for s in shape[:-1]%}{{s}}, {%endfor%}{{shape[-1]}} }, {{out_dtypes_map[tensor_var]}}); +{%if quantize_params_map%} +{%for tensor_var in output_map.values()%} +{%if tensor_var in quantize_params_map%} +{{tensor_var}}_zp = {{quantize_params_map[tensor_var]["zero_point"]["value"]}}; +{{tensor_var}}_scale = {{quantize_params_map[tensor_var]["scale"]["value"]}}; +{%endif%} {%endfor%} +{%endif%} {{op_name}} .set_inputs({ {%for name, tensor_var in input_map.items()%} diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 8d679176..2a6c4226 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -240,10 +240,15 @@ def _build_tensor_map(self, fb_model, ugraph): dtype = self._TENSOR_NP_TYPE[tensor.Type()] attributes = dict() - quantParam = tensor.Quantization() - if quantParam is not None: - attributes["quantizationZeros"] = list([quantParam.ZeroPointAsNumpy()]) - attributes["quantizationScales"] = list([quantParam.ScaleAsNumpy()]) + quant_params = tensor.Quantization() + if quant_params is not None: + zp = quant_params.ZeroPointAsNumpy() + if zp.dtype == np.dtype(' Date: Tue, 28 Apr 2020 15:40:54 +0800 Subject: [PATCH 097/117] clean up code --- .../rearch/_operators/_impls.py | 23 ++----------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py index 80296657..5d860426 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py @@ -1,7 +1,6 @@ from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP -from utensor_cgen.backend.utensor.snippets.rearch import ( - AddOpEvalSnippet, DeclareOpSnippet, DeclareRamTensorSnippet, - DeclareRomTensorSnippet) +from utensor_cgen.backend.utensor.snippets.rearch import (AddOpEvalSnippet, + DeclareOpSnippet) from ._base import OperatorFactory, _Operator @@ -39,21 +38,3 @@ class _MatmulOperator(_Operator): class _ConvOperator(_Operator): op_type = 'ConvOperator' - - -# @OperatorFactory.register -# class _InlineOperator(_Operator): - -# op_type = 'Inline' - -# def __init__(self, op_info): -# self._tensor = op_info.output_tensors[0] - -# def get_declare_snippet(self, op_var_name, tensor_var_map, buffer_var_name): -# tensor_var_name = tensor_var_map[self._tensor.name] -# snippet = DeclareRomTensorSnippet( -# tensor_info=self._tensor, -# tensor_var=tensor_var_name, -# buffer_var=buffer_var_name, -# ) -# return snippet From 131e978d3a4f204b99ade6259f3df43fba37a226 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 28 Apr 2020 21:47:26 +0800 Subject: [PATCH 098/117] adding ops for code generator --- .../rearch/_operators/_impls.py | 276 +++++++++++++++++- .../utensor/snippets/rearch/_snippets.py | 68 ++++- 2 files changed, 335 insertions(+), 9 deletions(-) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py index 5d860426..05ec2412 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py @@ -1,38 +1,298 @@ +from typing import Hashable + from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP -from utensor_cgen.backend.utensor.snippets.rearch import (AddOpEvalSnippet, - DeclareOpSnippet) +from utensor_cgen.backend.utensor.snippets.rearch import * +from utensor_cgen.utils import must_return_type from ._base import OperatorFactory, _Operator @OperatorFactory.register class _AddOperator(_Operator): - op_type = 'AddOperator' def get_declare_snippet(self, op_var_name, tensor_var_map): - snippet = DeclareOpSnippet( + return DeclareOpSnippet( op=self, templ_dtypes=[self.in_dtypes[0]], op_var_name=op_var_name, ) - return snippet def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): - snippet = AddOpEvalSnippet( + return AddOpEvalSnippet( op_info=op_info, templ_dtypes=[self.in_dtypes[0]], op_name=op_var_name, tensor_var_map=tensor_var_map, ) - return snippet @OperatorFactory.register -class _MatmulOperator(_Operator): +class _ReshapeOperator(_Operator): + op_type = "ReshapeOperator" + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return ReshahpeEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + +@OperatorFactory.register +class _MatmulOperator(_Operator): op_type = 'MatrixMultOperator' + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return MatrixMultEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + + +@OperatorFactory.register +class _ArgMinOperator(_Operator): + op_type = "ArgMinOperator" + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return ArgMinEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + + +@OperatorFactory.register +class _ArgMaxOperator(_Operator): + op_type = "ArgMaxOperator" + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return ArgMaxEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + + +@OperatorFactory.register +class _QuantizeOperator(_Operator): + op_type = "QuantizeOperator" + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.out_dtypes[0], self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return QuantizeEvalSnippet( + op_info=op_info, + templ_dtypes=[self.out_dtypes[0], self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + + +@OperatorFactory.register +class _DequantizeOperator(_Operator): + op_type = "DequantizeOperator" + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.out_dtypes[0], self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return DequantizeEvalSnippet( + op_info=op_info, + templ_dtypes=[self.out_dtypes[0], self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + + +@OperatorFactory.register +class _ReLUOperator(_Operator): + op_type = "ReLUOperator" + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return ReLUEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + + +@OperatorFactory.register +class _ReLU6Operator(_Operator): + op_type = "ReLU6Operator" + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return ReLU6EvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + + +@OperatorFactory.register +class _MinOperator(_Operator): + op_type = 'MinOperator' + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return MinEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + + +@OperatorFactory.register +class _MaxOperator(_Operator): + op_type = 'MaxOperator' + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return MaxEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + +class _PoolingOperatorMixin(object): + + @classmethod + @must_return_type(Hashable) + def get_constructor_signature(cls, op_info): + if op_info.ugraph.lib_name == "tensorflow": + strides = op_info.op_attr['strides'].value.ints_value + ksize = op_info.op_attr['ksize'].value.ints_value[1:3] + padding = op_info.op_attr['padding'].value.decode('utf8') + elif op_info.ugraph.lib_name == 'tflite': + strides = [ + 1, + op_info.op_attr['StrideW'], + op_info.op_attr['StrideH'], + 1, + ] + ksize = [ + op_info.op_attr['FilterWidth'], + op_info.op_attr['FilterHeight'], + ] + padding = op_info.op_attr['Padding'] == 1 and "VALID" or "SAME" + else: + raise RuntimeError("dont know to to get constructor signature") + stride_str = "{{ {} }}".format(", ".join(map(str, strides))) + ksize_str = "{{ {} }}".format(", ".join(map(str, ksize))) + return (stride_str, ksize_str, padding) + + +@OperatorFactory.register +class _MaxPoolOperator(_Operator, _PoolingOperatorMixin): + op_type = 'MaxPoolOperator' + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return MaxPoolEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + + +@OperatorFactory.register +class _MinPoolOperator(_Operator, _PoolingOperatorMixin): + op_type = 'MinPoolOperator' + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.in_dtypes[0]], + op_var_name=op_var_name, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return MinPoolEvalSnippet( + op_info=op_info, + templ_dtypes=[self.in_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + ) + @OperatorFactory.register class _ConvOperator(_Operator): diff --git a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py index be7dc55e..773757d2 100644 --- a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py +++ b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py @@ -10,7 +10,13 @@ "DeclareOpSnippet", "OpEvalSnippet", "AddOpEvalSnippet", - "SimpleContainer" + "ReshahpeEvalSnippet", + "MatrixMultEvalSnippet", + "ArgMaxEvalSnippet", + "ArgMinEvalSnippet", + "QuantizeEvalSnippet", + "DequantizeEvalSnippet", + "SimpleContainer", ] class _SnippetBase(Snippet): @@ -111,6 +117,66 @@ class AddOpEvalSnippet(OpEvalSnippet): __outputs__ = ['c'] +class ReshahpeEvalSnippet(OpEvalSnippet): + __inputs__ = ["input"] + __outputs__ = ["output"] + + +class QuantizeEvalSnippet(OpEvalSnippet): + __inputs__ = ["input"] + __outputs__ = ["output"] + + +class MatrixMultEvalSnippet(OpEvalSnippet): + __inputs__ = ["a", "b"] + __outputs__ = ["c"] + + +class ArgMaxEvalSnippet(OpEvalSnippet): + __inputs__ = ["input"] + __outputs__ = ["output"] + + +class ArgMinEvalSnippet(OpEvalSnippet): + __inputs__ = ["input"] + __outputs__ = ["output"] + + +class DequantizeEvalSnippet(OpEvalSnippet): + __inputs__ = ["a"] + __outputs__ = ["b"] + + +class ReLUEvalSnippet(OpEvalSnippet): + __inputs__ = ["in"] + __outputs__ = ["out"] + + +class ReLU6EvalSnippet(OpEvalSnippet): + __inputs__ = ["in"] + __outputs__ = ["out"] + + +class MinEvalSnippet(OpEvalSnippet): + __inputs__ = ["in"] + __outputs__ = ["out"] + + +class MaxEvalSnippet(OpEvalSnippet): + __inputs__ = ["in"] + __outputs__ = ["out"] + + +class MaxPoolEvalSnippet(OpEvalSnippet): + __inputs__ = ["in"] + __outputs__ = ["out"] + + +class MinPoolEvalSnippet(OpEvalSnippet): + __inputs__ = ["in"] + __outputs__ = ["out"] + + class SimpleContainer(SnippetBase): __headers__ = set(['"uTensor/uTensor.hpp"', ""]) __template_name__ = 'containers/rearch/simple.cpp' From cff49408d685fc588b2c0eaf402b475a905bc562 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 29 Apr 2020 22:27:50 +0800 Subject: [PATCH 099/117] minor fix: utils.prune_graph --- .../utensor/snippets/rearch/_snippets.py | 43 ++++++++++++++++++- .../snippets/rearch/declare_dws_conv_op.cpp | 6 +++ .../snippets/rearch/eval_dws_conv_op.cpp | 28 ++++++++++++ utensor_cgen/utils.py | 17 +++++--- 4 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_dws_conv_op.cpp create mode 100644 utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp diff --git a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py index 773757d2..7d8ac321 100644 --- a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py +++ b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py @@ -1,3 +1,5 @@ +import re + import numpy as np from utensor_cgen.backend.utensor.snippets._base import Snippet, SnippetBase @@ -79,6 +81,10 @@ def __init__(self, op, templ_dtypes, op_var_name): self.template_vars['op_var_name'] = op_var_name +class DepthwiseSeperateConvOpDeclareSnippet(DeclareOpSnippet): + __template_name__ = "snippets/rearch/declare_dws_conv_op.cpp" + + class OpEvalSnippet(_SnippetBase): __template_name__ = 'snippets/rearch/eval_op.cpp' __inputs__ = [] @@ -106,12 +112,47 @@ def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map): else: op_type = op_info.op_type self.template_vars['op_type'] = op_type - self.template_vars['op_name'] = op_name + self.template_vars['op_var_name'] = op_name self.template_vars['input_map'] = input_map self.template_vars['output_map'] = output_map self.template_vars['quantize_params_map'] = quantize_params_map +class DepthwiseSeperateConvOpEvalSnippet(OpEvalSnippet): + __template_name__ = 'snippets/rearch/eval_dws_conv_op.cpp' + __inputs__ = ["in", "depthwise_filter", "pointwise_filter"] + __outputs__ = ["out"] + + _PADDING_MAP = { + 0: "TFLM::TfLitePadding::kTfLitePaddingUnknown", + 1: "TFLM::TfLitePadding::kTfLitePaddingSame", + 2: "TFLM::TfLitePadding::kTfLitePaddingValid" + } + _ACTIVATION_MAP = { + 0: 'kTfLiteActNone', + 1: 'kTfLiteActRelu', + 2: 'kTfLiteActRelu1', + 3: 'kTfLiteActRelu6', + 4: 'kTfLiteActTanh', + 5: 'kTfLiteActSignBit', + 6: 'kTfLiteActSigmoid', + } + _ACTIVATION_STR_PATTERN = re.compile(r'^(\d+) \(\w+\)$') + + def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map): + OpEvalSnippet.__init__(self, op_info, templ_dtypes, op_name, tensor_var_map) + cls = type(self) + self.template_vars['padding'] = cls._PADDING_MAP[op_info.op_attr['Padding']] + self.template_vars['stride_width'] = op_info.op_attr['StrideW'] + self.template_vars['stride+height'] = op_info.op_attr['StrideH'] + self.template_vars['depth_multiplier'] = op_info.op_attr['DepthMultiplier'] + activation_idx = cls._ACTIVATION_STR_PATTERN.match( + op_info.op_attr['FusedActivationFunction'] + ).group(1) + self.template_vars['activation'] = cls._ACTIVATION_MAP[activation_idx] + self.template_vars['dilation_width_factor'] = op_info.op_attr['DilationWFactor'] + self.template_vars['dilation_height_factor'] = op_info.op_attr['DilationHFactor'] + class AddOpEvalSnippet(OpEvalSnippet): __inputs__ = ['a', 'b'] __outputs__ = ['c'] diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_dws_conv_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_dws_conv_op.cpp new file mode 100644 index 00000000..04ee01fb --- /dev/null +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_dws_conv_op.cpp @@ -0,0 +1,6 @@ +{%if construct_params%} +{{op_type}} {{op_var_name}}({%for param in construct_params%}{{construct_params}}{%if not loop.last%}, {%endif%}{%endfor%}); +{%else%} +{{op_type}} {{op_var_name}}; +{%endif%} +TFLM::TfLiteDepthwiseConvParams {{op_var_name}}_params; \ No newline at end of file diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp new file mode 100644 index 00000000..6b4c420b --- /dev/null +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp @@ -0,0 +1,28 @@ +{%if quantize_params_map%} +{%for tensor_var in output_map.values()%} +{%if tensor_var in quantize_params_map%} +{{tensor_var}}_zp = {{quantize_params_map[tensor_var]["zero_point"]["value"]}}; +{{tensor_var}}_scale = {{quantize_params_map[tensor_var]["scale"]["value"]}}; +{%endif%} +{%endfor%} +{%endif%} + + {{op_var_name}}_params.padding = {{padding}}; + {{op_var_name}}_params.stride_width = {{stride_width}}; + {{op_var_name}}_params.stride_height = {{stride_height}}; + {{op_var_name}}_params.depth_multiplier = {{depth_multiplier}}; + {{op_var_name}}_params.activation = {{activation}}; + {{op_var_name}}_params.dilation_width_factor = {{dilation_width_factor}}; + {{op_var_name}}_params.dilation_height_factor = {{dilation_height_factor}}; + {{op_var_name}} + .set_inputs({ +{%for name, tensor_var in input_map.items()%} + { {{op_type}}::{{name}}, {{tensor_var}} }, +{%endfor%} + }) + .set_outputs({ +{%for name, tensor_var in output_map.items()%} + { {{op_type}}::{{name}}, {{tensor_var}}} +{%endfor%} + }) + .eval(); \ No newline at end of file diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index 13c0bb58..0c6c73ad 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -12,11 +12,11 @@ from time import time import attr +import idx2numpy as idx2np +import numpy as np from click.types import ParamType from toml import loads as _parse -import idx2numpy as idx2np -import numpy as np from utensor_cgen.logger import logger __all__ = ["save_idx", "save_consts", "save_graph", "log_graph", @@ -395,7 +395,7 @@ def ops_bfs_queue(ugraph, init_nodes=None): bfs_deck.append(op) return bfs_deck -def prune_graph(ugraph): +def prune_graph(ugraph, output_nodes=None): """ Remove nodes that is no longer needed *in-place* @@ -405,11 +405,17 @@ def prune_graph(ugraph): :param ugraph: the graph to be pruned :type ugraph: :class:`.uTensorGraph` + :param output_nodes: the output nodes + :type output_nodes: List[String] """ new_ugraph = deepcopy(ugraph) + if output_nodes is None: + output_nodes = ugraph.output_nodes[:] + else: + new_ugraph.output_nodes = output_nodes[:] # BFS to find all ops you need - ops_in_need = set(ugraph.output_nodes) - queue = [name for name in ugraph.output_nodes] + ops_in_need = set(output_nodes) + queue = [name for name in output_nodes] visited = set([]) while queue: op_name = queue.pop(0) @@ -436,6 +442,7 @@ def prune_graph(ugraph): ops_to_remove.add(op_name) for op_name in ops_to_remove: new_ugraph.ops_info.pop(op_name) + topologic_order_graph(new_ugraph) return new_ugraph def random_str(length=8): From 5dda2b96f22d1f9d215db16a06925cc8514a86f1 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 29 Apr 2020 22:28:02 +0800 Subject: [PATCH 100/117] rearch code generator beta --- .../code_generator/rearch/_operators/_base.py | 146 +++++++++--------- .../rearch/_operators/_impls.py | 27 ++++ .../utensor/snippets/rearch/_snippets.py | 51 +++--- .../snippets/rearch/declare_dws_conv_op.cpp | 6 - .../snippets/rearch/eval_dws_conv_op.cpp | 31 ++-- .../templates/snippets/rearch/eval_op.cpp | 24 +-- utensor_cgen/frontend/tflite.py | 20 ++- 7 files changed, 179 insertions(+), 126 deletions(-) delete mode 100644 utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_dws_conv_op.cpp diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py index 954c4a5a..e3cfae7e 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py @@ -9,90 +9,90 @@ class OpNotSupportedError(Exception): - pass + pass class OperatorFactory(object): - _operators = {} + _operators = {} - @classmethod - def get_opertor(cls, op_info): - op_type = op_info.op_type - op_cls = cls._operators.get(op_type) - if op_cls is None: - raise OpNotSupportedError( - "{} not supported in utensor_cgen".format(op_type) - ) - return op_cls(op_info) + @classmethod + def get_opertor(cls, op_info): + op_type = op_info.op_type + op_cls = cls._operators.get(op_type) + if op_cls is None: + raise OpNotSupportedError( + "{} not supported in utensor_cgen".format(op_type) + ) + return op_cls(op_info) - @classmethod - def register(cls, op_cls): - cls._operators[op_cls.op_type] = op_cls - return op_cls + @classmethod + def register(cls, op_cls): + cls._operators[op_cls.op_type] = op_cls + return op_cls - @classmethod - def support_op_types(cls): - """Return the set of all supported ops - """ - return set(cls._operators.keys()) + @classmethod + def support_op_types(cls): + """Return the set of all supported ops + """ + return set(cls._operators.keys()) - @classmethod - def is_supported(cls, op_type): - if op_type != "Placeholder" and op_type not in cls._operators: - return False - return True + @classmethod + def is_supported(cls, op_type): + if op_type != "Placeholder" and op_type not in cls._operators: + return False + return True class _OperatorMeta(type): - def __new__(mcls, name, bases, attrib): - attrib["_cache"] = {} - for key in ["get_type_signature", "get_constructor_signature"]: - func = attrib.get(key) - if func is None: - continue - if not must_return_type.return_type_is_ensured(func): - attrib[key] = must_return_type(Hashable)(func) - elif not issubclass(must_return_type.get_expect_type(func), Hashable): - raise RuntimeError( - "{}.{} must be ensured to return {}".format(name, key, Hashable) - ) - cls = type.__new__(mcls, name, bases, attrib) - return cls + def __new__(mcls, name, bases, attrib): + attrib["_cache"] = {} + for key in ["get_type_signature", "get_constructor_signature"]: + func = attrib.get(key) + if func is None: + continue + if not must_return_type.return_type_is_ensured(func): + attrib[key] = must_return_type(Hashable)(func) + elif not issubclass(must_return_type.get_expect_type(func), Hashable): + raise RuntimeError( + "{}.{} must be ensured to return {}".format(name, key, Hashable) + ) + cls = type.__new__(mcls, name, bases, attrib) + return cls class _Operator(with_metaclass(_OperatorMeta), object): - def __new__(cls, op_info): - type_signature = cls.get_type_signature(op_info) - construct_signature = cls.get_constructor_signature(op_info) - full_signature = (type_signature, construct_signature) - in_dtypes, out_dtypes = type_signature - if full_signature not in cls._cache: - self = object.__new__(cls) - self.in_dtypes = in_dtypes - self.out_dtypes = out_dtypes - self.construct_params = construct_signature - self.op_info = op_info - cls._cache[full_signature] = self - return cls._cache[full_signature] - - @classmethod - @must_return_type(Hashable) - def get_type_signature(cls, op_info): - in_dtypes = tuple(t.dtype for t in op_info.input_tensors) - out_dtypes = tuple(t.dtype for t in op_info.output_tensors) - return (in_dtypes, out_dtypes) - - @classmethod - @must_return_type(Hashable) - def get_constructor_signature(cls, op_info): - return tuple() - - def get_declare_snippet(self, op_var_name, tensor_var_map, **kwargs): - raise NotImplementedError( - "base get_declare_snippet invoked: {}".format(type(self)) - ) - def get_eval_snippet(self, op_var_name, op_info, tensor_var_map, **kwargs): - raise NotImplementedError( - "base get_eval_snippet invoked: {}".format(type(self)) - ) + def __new__(cls, op_info): + type_signature = cls.get_type_signature(op_info) + construct_signature = cls.get_constructor_signature(op_info) + full_signature = (type_signature, construct_signature) + in_dtypes, out_dtypes = type_signature + if full_signature not in cls._cache: + self = object.__new__(cls) + self.in_dtypes = in_dtypes + self.out_dtypes = out_dtypes + self.construct_params = construct_signature + self.op_info = op_info + cls._cache[full_signature] = self + return cls._cache[full_signature] + + @classmethod + @must_return_type(Hashable) + def get_type_signature(cls, op_info): + in_dtypes = tuple(t.dtype for t in op_info.input_tensors) + out_dtypes = tuple(t.dtype for t in op_info.output_tensors) + return (in_dtypes, out_dtypes) + + @classmethod + @must_return_type(Hashable) + def get_constructor_signature(cls, op_info): + return tuple() + + def get_declare_snippet(self, op_var_name, tensor_var_map, **kwargs): + raise NotImplementedError( + "base get_declare_snippet invoked: {}".format(type(self)) + ) + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map, **kwargs): + raise NotImplementedError( + "base get_eval_snippet invoked: {}".format(type(self)) + ) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py index 05ec2412..53f89759 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py @@ -116,6 +116,7 @@ def get_declare_snippet(self, op_var_name, tensor_var_map): op=self, templ_dtypes=[self.out_dtypes[0], self.in_dtypes[0]], op_var_name=op_var_name, + nested_namespaces=['TFLM'], ) def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): @@ -124,6 +125,7 @@ def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): templ_dtypes=[self.out_dtypes[0], self.in_dtypes[0]], op_name=op_var_name, tensor_var_map=tensor_var_map, + nested_namespaces=['TFLM'], ) @@ -136,6 +138,7 @@ def get_declare_snippet(self, op_var_name, tensor_var_map): op=self, templ_dtypes=[self.out_dtypes[0], self.in_dtypes[0]], op_var_name=op_var_name, + nested_namespaces=['TFLM'], ) def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): @@ -144,6 +147,7 @@ def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): templ_dtypes=[self.out_dtypes[0], self.in_dtypes[0]], op_name=op_var_name, tensor_var_map=tensor_var_map, + nested_namespaces=['TFLM'], ) @@ -226,6 +230,7 @@ def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): tensor_var_map=tensor_var_map, ) + class _PoolingOperatorMixin(object): @classmethod @@ -294,6 +299,28 @@ def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): ) +@OperatorFactory.register +class _DWSConvOperator(_Operator): + op_type = "DepthwiseSeparableConvOperator" + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.out_dtypes[0]], + op_var_name=op_var_name, + nested_namespaces=['TFLM'], + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return DepthwiseSeperateConvOpEvalSnippet( + op_info=op_info, + templ_dtypes=[self.out_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + nested_namespaces=['TFLM'], + ) + + @OperatorFactory.register class _ConvOperator(_Operator): diff --git a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py index 7d8ac321..f8d3dbcc 100644 --- a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py +++ b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py @@ -10,14 +10,20 @@ "DeclareRomTensorSnippet", "DeclareRamTensorSnippet", "DeclareOpSnippet", - "OpEvalSnippet", + "DepthwiseSeperateConvOpEvalSnippet", "AddOpEvalSnippet", "ReshahpeEvalSnippet", + "QuantizeEvalSnippet", "MatrixMultEvalSnippet", "ArgMaxEvalSnippet", "ArgMinEvalSnippet", - "QuantizeEvalSnippet", "DequantizeEvalSnippet", + "ReLUEvalSnippet", + "ReLU6EvalSnippet", + "MinEvalSnippet", + "MaxEvalSnippet", + "MinPoolEvalSnippet", + "MaxPoolEvalSnippet", "SimpleContainer", ] @@ -68,30 +74,32 @@ def __init__(self, tensor_info, tensor_var): class DeclareOpSnippet(_SnippetBase): __template_name__ = 'snippets/rearch/declare_op.cpp' - def __init__(self, op, templ_dtypes, op_var_name): + def __init__(self, op, templ_dtypes, op_var_name, nested_namespaces=None): _SnippetBase.__init__(self) + if nested_namespaces is None: + nested_namespaces = [] op_info = op.op_info if templ_dtypes: templ_params = ', '.join([NP_TYPES_MAP[dtype].tensor_type_str for dtype in templ_dtypes]) op_type = '{}<{}>'.format(op_info.op_type, templ_params) else: op_type = op_info.op_type + if nested_namespaces: + op_type = "::".join(nested_namespaces + [op_type]) self.template_vars['op_type'] = op_type self.template_vars['construct_params'] = op.construct_params self.template_vars['op_var_name'] = op_var_name -class DepthwiseSeperateConvOpDeclareSnippet(DeclareOpSnippet): - __template_name__ = "snippets/rearch/declare_dws_conv_op.cpp" - - class OpEvalSnippet(_SnippetBase): __template_name__ = 'snippets/rearch/eval_op.cpp' __inputs__ = [] __outputs__ = [] - def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map): + def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map, nested_namespaces=None): Snippet.__init__(self) + if nested_namespaces is None: + nested_namespaces = [] input_map = { name: tensor_var_map[tensor.name] for name, tensor in zip(self.__inputs__, op_info.input_tensors) @@ -111,6 +119,8 @@ def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map): op_type = '{}<{}>'.format(op_info.op_type, templ_params) else: op_type = op_info.op_type + if nested_namespaces: + op_type = "::".join(nested_namespaces + [op_type]) self.template_vars['op_type'] = op_type self.template_vars['op_var_name'] = op_name self.template_vars['input_map'] = input_map @@ -129,22 +139,22 @@ class DepthwiseSeperateConvOpEvalSnippet(OpEvalSnippet): 2: "TFLM::TfLitePadding::kTfLitePaddingValid" } _ACTIVATION_MAP = { - 0: 'kTfLiteActNone', - 1: 'kTfLiteActRelu', - 2: 'kTfLiteActRelu1', - 3: 'kTfLiteActRelu6', - 4: 'kTfLiteActTanh', - 5: 'kTfLiteActSignBit', - 6: 'kTfLiteActSigmoid', + '0': 'kTfLiteActNone', + '1': 'kTfLiteActRelu', + '2': 'kTfLiteActRelu1', + '3': 'kTfLiteActRelu6', + '4': 'kTfLiteActTanh', + '5': 'kTfLiteActSignBit', + '6': 'kTfLiteActSigmoid', } _ACTIVATION_STR_PATTERN = re.compile(r'^(\d+) \(\w+\)$') - def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map): - OpEvalSnippet.__init__(self, op_info, templ_dtypes, op_name, tensor_var_map) + def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map, nested_namespaces=None): + OpEvalSnippet.__init__(self, op_info, templ_dtypes, op_name, tensor_var_map, nested_namespaces) cls = type(self) self.template_vars['padding'] = cls._PADDING_MAP[op_info.op_attr['Padding']] self.template_vars['stride_width'] = op_info.op_attr['StrideW'] - self.template_vars['stride+height'] = op_info.op_attr['StrideH'] + self.template_vars['stride_height'] = op_info.op_attr['StrideH'] self.template_vars['depth_multiplier'] = op_info.op_attr['DepthMultiplier'] activation_idx = cls._ACTIVATION_STR_PATTERN.match( op_info.op_attr['FusedActivationFunction'] @@ -153,6 +163,7 @@ def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map): self.template_vars['dilation_width_factor'] = op_info.op_attr['DilationWFactor'] self.template_vars['dilation_height_factor'] = op_info.op_attr['DilationHFactor'] + class AddOpEvalSnippet(OpEvalSnippet): __inputs__ = ['a', 'b'] __outputs__ = ['c'] @@ -208,12 +219,12 @@ class MaxEvalSnippet(OpEvalSnippet): __outputs__ = ["out"] -class MaxPoolEvalSnippet(OpEvalSnippet): +class MinPoolEvalSnippet(OpEvalSnippet): __inputs__ = ["in"] __outputs__ = ["out"] -class MinPoolEvalSnippet(OpEvalSnippet): +class MaxPoolEvalSnippet(OpEvalSnippet): __inputs__ = ["in"] __outputs__ = ["out"] diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_dws_conv_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_dws_conv_op.cpp deleted file mode 100644 index 04ee01fb..00000000 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_dws_conv_op.cpp +++ /dev/null @@ -1,6 +0,0 @@ -{%if construct_params%} -{{op_type}} {{op_var_name}}({%for param in construct_params%}{{construct_params}}{%if not loop.last%}, {%endif%}{%endfor%}); -{%else%} -{{op_type}} {{op_var_name}}; -{%endif%} -TFLM::TfLiteDepthwiseConvParams {{op_var_name}}_params; \ No newline at end of file diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp index 6b4c420b..1cd47738 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp @@ -7,22 +7,25 @@ {%endfor%} {%endif%} - {{op_var_name}}_params.padding = {{padding}}; - {{op_var_name}}_params.stride_width = {{stride_width}}; - {{op_var_name}}_params.stride_height = {{stride_height}}; - {{op_var_name}}_params.depth_multiplier = {{depth_multiplier}}; - {{op_var_name}}_params.activation = {{activation}}; - {{op_var_name}}_params.dilation_width_factor = {{dilation_width_factor}}; - {{op_var_name}}_params.dilation_height_factor = {{dilation_height_factor}}; + { + dws_params.padding = {{padding}}; + dws_params.stride_width = {{stride_width}}; + dws_params.stride_height = {{stride_height}}; + dws_params.depth_multiplier = {{depth_multiplier}}; + dws_params.activation = {{activation}}; + dws_params.dilation_width_factor = {{dilation_width_factor}}; + dws_params.dilation_height_factor = {{dilation_height_factor}}; + {{op_var_name}}.set_params(dws_params); + } {{op_var_name}} - .set_inputs({ + ].set_inputs({ {%for name, tensor_var in input_map.items()%} - { {{op_type}}::{{name}}, {{tensor_var}} }, + { {{op_type}}::{{name}}, {{tensor_var}} }, {%endfor%} - }) - .set_outputs({ + }) + .set_outputs({ {%for name, tensor_var in output_map.items()%} - { {{op_type}}::{{name}}, {{tensor_var}}} + { {{op_type}}::{{name}}, {{tensor_var}}} {%endfor%} - }) - .eval(); \ No newline at end of file + }) + .eval(); diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_op.cpp index 71d5666a..556b56e8 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_op.cpp @@ -6,15 +6,15 @@ {%endif%} {%endfor%} {%endif%} - {{op_name}} - .set_inputs({ -{%for name, tensor_var in input_map.items()%} - { {{op_type}}::{{name}}, {{tensor_var}} }, -{%endfor%} - }) - .set_outputs({ -{%for name, tensor_var in output_map.items()%} - { {{op_type}}::{{name}}, {{tensor_var}}} -{%endfor%} - }) - .eval(); +{{op_var_name}} + .set_inputs({ + {%for name, tensor_var in input_map.items()%} + { {{op_type}}::{{name}}, {{tensor_var}} }, + {%endfor%} + }) + .set_outputs({ + {%for name, tensor_var in output_map.items()%} + { {{op_type}}::{{name}}, {{tensor_var}}} + {%endfor%} + }) + .eval(); diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 2a6c4226..f293338c 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -2,6 +2,7 @@ import re import numpy as np + from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser from utensor_cgen.ir.base import OperationInfo, TensorInfo, uTensorGraph @@ -201,7 +202,7 @@ def parse(self, tflite_file, output_nodes=None): ops_info={}, ) self._build_graph(fb_model, ugraph) - + _OpRenaming.apply(ugraph) return ugraph def _build_graph(self, fb_model, ugraph): @@ -387,3 +388,20 @@ def _format_tensor_name(self, name, node_name, offset): def _format_op_type(self, op_type): return ''.join(map(lambda s: s.capitalize(), op_type.split('_'))) + + +class _OpRenaming(object): + _OP_NAMES_MAP = { + "Quantize": "QuantizeOperator", + "DepthwiseConv2d": "DepthwiseSeparableConvOperator", + "MaxPool2d": "MaxPoolOperator", + "Dequantize": "DequantizeOperator", + "FullyConnected": "FullyConnectedOperator" + } + + @classmethod + def apply(cls, ugraph): + for op_info in ugraph.ops_info.values(): + op_info.op_type = cls._OP_NAMES_MAP.get( + op_info.op_type, op_info.op_type + ) From 090cd31a670a67d9f5fe4a6e392829eff6551774 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Thu, 30 Apr 2020 15:44:48 +0800 Subject: [PATCH 101/117] fix templates and type str --- .../code_generator/rearch/_code_generator.py | 4 +- .../backend/utensor/snippets/_types.py | 56 ++++++++++++------- .../templates/containers/rearch/simple.cpp | 5 +- .../snippets/rearch/eval_dws_conv_op.cpp | 13 ++--- 4 files changed, 48 insertions(+), 30 deletions(-) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py index a4b3f7a7..205d973b 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py @@ -105,12 +105,12 @@ def _get_declare_snippets(self, ugraph, ops, tensor_var_map): op_info.op_attr['value'].value.np_array.ravel() ) ) - declare_global_snippets.append( + declare_local_snippets.append( DeclareRomTensorSnippet( tensor_info=tensor_info, tensor_var=tensor_var, buffer_var=buffer_name, - static=True, + # static=True, ) ) return ops_map, declare_global_snippets, declare_local_snippets, weight_snippets diff --git a/utensor_cgen/backend/utensor/snippets/_types.py b/utensor_cgen/backend/utensor/snippets/_types.py index c3e72d2c..d65f720e 100644 --- a/utensor_cgen/backend/utensor/snippets/_types.py +++ b/utensor_cgen/backend/utensor/snippets/_types.py @@ -39,24 +39,42 @@ def _init(cls): if not cls._inited: _TYPE_MAP_VALUE = namedtuple("_TYPE_MAP_VALUE", ["importer_type_str", "tensor_type_str"]) cls._NP_TYPES_MAP = { - np.dtype(tf.float32.as_numpy_dtype): _TYPE_MAP_VALUE(importer_type_str="float", - tensor_type_str="float"), - np.dtype(tf.qint8.as_numpy_dtype): _TYPE_MAP_VALUE(importer_type_str="byte", - tensor_type_str="uint8_t"), - np.dtype(tf.int32.as_numpy_dtype): _TYPE_MAP_VALUE(importer_type_str="int", - tensor_type_str="int"), - np.dtype(tf.int64.as_numpy_dtype): _TYPE_MAP_VALUE(importer_type_str="int", - tensor_type_str="int"), - np.dtype(tf.quint8.as_numpy_dtype): _TYPE_MAP_VALUE(importer_type_str="ubyte", - tensor_type_str="uint8_t"), - np.dtype(tf.qint32.as_numpy_dtype): _TYPE_MAP_VALUE(importer_type_str="int", - tensor_type_str="int"), - np.dtype('uint16'): _TYPE_MAP_VALUE(importer_type_str="ushort", - tensor_type_str="uint16_t"), - np.dtype('int8'): _TYPE_MAP_VALUE(importer_type_str="int8", - tensor_type_str="q7_t"), - np.dtype('uint8'): _TYPE_MAP_VALUE(importer_type_str="uint8", - tensor_type_str="uint8_t"), + np.dtype(tf.float32.as_numpy_dtype): _TYPE_MAP_VALUE( + importer_type_str="float", + tensor_type_str="float" + ), + np.dtype(tf.qint8.as_numpy_dtype): _TYPE_MAP_VALUE( + importer_type_str="byte", + tensor_type_str="uint8_t" + ), + np.dtype(tf.int32.as_numpy_dtype): _TYPE_MAP_VALUE( + importer_type_str="int", + tensor_type_str="int" + ), + np.dtype(tf.int64.as_numpy_dtype): _TYPE_MAP_VALUE( + importer_type_str="int", + tensor_type_str="int" + ), + np.dtype(tf.quint8.as_numpy_dtype): _TYPE_MAP_VALUE( + importer_type_str="ubyte", + tensor_type_str="uint8_t" + ), + np.dtype(tf.qint32.as_numpy_dtype): _TYPE_MAP_VALUE( + importer_type_str="int", + tensor_type_str="int" + ), + np.dtype('uint16'): _TYPE_MAP_VALUE( + importer_type_str="ushort", + tensor_type_str="uint16_t" + ), + np.dtype('int8'): _TYPE_MAP_VALUE( + importer_type_str="int8", + tensor_type_str="int8_t" #"q7_t" + ), + np.dtype('uint8'): _TYPE_MAP_VALUE( + importer_type_str="uint8", + tensor_type_str="uint8_t" + ), } cls._inited = True @@ -96,4 +114,4 @@ def _init(cls): } cls._inited = True -UTENSOR_TYPES_MAP = Numpy2uTensorTypesMap() \ No newline at end of file +UTENSOR_TYPES_MAP = Numpy2uTensorTypesMap() diff --git a/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp b/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp index 0b395fd6..28e2f197 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp @@ -1,7 +1,7 @@ using namespace uTensor; -static localCircularArenaAllocator<{{meta_data_pool_size}}> meta_allocator; -static localCircularArenaAllocator<{{ram_data_pool_size}}> ram_allocator; +static const localCircularArenaAllocator<{{meta_data_pool_size}}> meta_allocator; +static const localCircularArenaAllocator<{{ram_data_pool_size}}> ram_allocator; {#ex: rom tensors, ops..etc#} // start rendering global declare snippets @@ -22,6 +22,7 @@ void compute_{{model_name}}({%for pl in placeholders%}Tensor& {{pl}}, {%endfor%} // start rendering eval snippets {%for snippet in eval_snippets%} {{snippet.render()}} + {%endfor%} // end of rendering eval snippets {%for out_var in out_tensor_var_names%} diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp index 1cd47738..91da93d8 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp @@ -6,8 +6,7 @@ {%endif%} {%endfor%} {%endif%} - - { +{ dws_params.padding = {{padding}}; dws_params.stride_width = {{stride_width}}; dws_params.stride_height = {{stride_height}}; @@ -18,14 +17,14 @@ {{op_var_name}}.set_params(dws_params); } {{op_var_name}} - ].set_inputs({ -{%for name, tensor_var in input_map.items()%} + .set_inputs({ + {%for name, tensor_var in input_map.items()%} { {{op_type}}::{{name}}, {{tensor_var}} }, -{%endfor%} + {%endfor%} }) .set_outputs({ -{%for name, tensor_var in output_map.items()%} + {%for name, tensor_var in output_map.items()%} { {{op_type}}::{{name}}, {{tensor_var}}} -{%endfor%} + {%endfor%} }) .eval(); From b4469a71513feb6cd97f1340d31f8325093758e9 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 1 May 2020 15:00:16 +0800 Subject: [PATCH 102/117] namespaces support (same optype, different namespaces) --- .../backend/utensor/_graph_lower/_op_lower.py | 21 +++++++++- .../code_generator/rearch/_code_generator.py | 3 ++ .../code_generator/rearch/_operators/_base.py | 19 +++++++--- .../rearch/_operators/_impls.py | 38 ++++++++++++++++++- .../utensor/snippets/rearch/_snippets.py | 12 +++++- .../templates/snippets/rearch/declare_op.cpp | 2 +- ...conv_op.cpp => eval_quant_dws_conv_op.cpp} | 0 utensor_cgen/ir/base.py | 29 ++++++-------- 8 files changed, 95 insertions(+), 29 deletions(-) rename utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/{eval_dws_conv_op.cpp => eval_quant_dws_conv_op.cpp} (100%) diff --git a/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py b/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py index 3c523099..7d0ed1e2 100644 --- a/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py +++ b/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py @@ -2,7 +2,7 @@ from utensor_cgen.backend.base import BackendPart from utensor_cgen.logger import logger -from utensor_cgen.utils import class_property +from utensor_cgen.utils import Configuration, class_property class uTensorGraphLowerBase(BackendPart): @@ -34,6 +34,10 @@ def default_config(cls): class uTensorRearchGraphLower(uTensorGraphLowerBase): PART = 'rearch_graph_lower' + def __init__(self, config): + final_config = Configuration(self.default_config, config) + self.tflite_use_quant_dws_conv = final_config['tflite_use_quant_dws_conv'] + class OptypeRenameManager(object): NAME_MAP = { 'Add': 'AddOperator', @@ -45,6 +49,13 @@ class OptypeRenameManager(object): def get_new_optype(cls, op_type): return cls.NAME_MAP.get(op_type, op_type) + class AddCodegenAttributes(object): + + @classmethod + def add_attributes(cls, ugraph): + for op_info in ugraph.get_ops_by_type('DepthwiseSeparableConvOperator'): + op_info.code_gen_attributes['namespaces'] = ('TFLM',) + @classmethod def add_name_map(cls, generic_name, target_specific_name): cls.OptypeRenameManager.NAME_MAP[generic_name] = target_specific_name @@ -52,7 +63,13 @@ def add_name_map(cls, generic_name, target_specific_name): def handle_tensorflow(self, ugraph): for op_info in ugraph.ops_info.values(): op_info.op_type = self.OptypeRenameManager.get_new_optype(op_info.op_type) + + def handle_tflite(self, ugraph): + if self.tflite_use_quant_dws_conv: + self.AddCodegenAttributes.add_attributes(ugraph) @class_property def default_config(cls): - return {} + return { + 'tflite_use_quant_dws_conv': True, + } diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py index 205d973b..3a122d7d 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py @@ -149,6 +149,7 @@ def _generate_files( weight_header_fname = None if weight_snippets: with (params_dir / 'params_{}.hpp'.format(ugraph.name)).open('w') as fid: + fid.write("/* Auto-generated by utensor cli */\n") weight_container = ContextGlobalArrayContainer( snippets=weight_snippets ) @@ -165,6 +166,7 @@ def _generate_files( container_snippet.template_vars.update(template_vars) (model_file_dir / ugraph.name).mkdir(parents=True, exist_ok=True) with (model_file_dir / ugraph.name / header_fname).open('w') as fid: + fid.write("/* Auto-generated by utensor cli */\n") template = env.get_template('snippets/rearch/simple.hpp') fid.write(template.render(**template_vars)) container_snippet.add_header(fid.name) @@ -173,6 +175,7 @@ def _generate_files( composer = Composer(snippets=[container_snippet]) src_fname = self.src_fname == 'None' and '{}.cpp'.format(ugraph.name) or self.src_fname with (model_file_dir / ugraph.name / src_fname ).open('w') as fid: + fid.write("/* Auto-generated by utensor cli */\n") fid.write(composer.compose()) @class_property diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py index e3cfae7e..6e1eb68d 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py @@ -3,7 +3,7 @@ from six import with_metaclass -from utensor_cgen.utils import must_return_type +from utensor_cgen.utils import MUST_OVERWRITE, must_return_type __all__ = ["OperatorFactory", "OpNotSupportedError"] @@ -19,16 +19,19 @@ class OperatorFactory(object): @classmethod def get_opertor(cls, op_info): op_type = op_info.op_type - op_cls = cls._operators.get(op_type) + namespaces = op_info.code_gen_attributes.get('namespaces', tuple()) + op_cls = cls._operators.get((namespaces, op_type)) if op_cls is None: raise OpNotSupportedError( - "{} not supported in utensor_cgen".format(op_type) + "{}::{} not supported in utensor_cgen".format("::".join(namespaces), op_type) ) return op_cls(op_info) @classmethod def register(cls, op_cls): - cls._operators[op_cls.op_type] = op_cls + cls._operators[ + (op_cls.namespaces, op_cls.op_type) + ] = op_cls return op_cls @classmethod @@ -62,10 +65,16 @@ def __new__(mcls, name, bases, attrib): class _Operator(with_metaclass(_OperatorMeta), object): + namespaces = tuple() + op_type = MUST_OVERWRITE + def __new__(cls, op_info): + if cls.op_type is MUST_OVERWRITE: + raise ValueError('op_type must be overwritten: {}'.format(cls)) + type_signature = cls.get_type_signature(op_info) construct_signature = cls.get_constructor_signature(op_info) - full_signature = (type_signature, construct_signature) + full_signature = (cls.namespaces, type_signature, construct_signature) in_dtypes, out_dtypes = type_signature if full_signature not in cls._cache: self = object.__new__(cls) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py index 53f89759..72219579 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py @@ -299,16 +299,51 @@ def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): ) +@OperatorFactory.register +class _QuantDWSConvOperator(_Operator): + namespaces = ('TFLM',) + op_type = "DepthwiseSeparableConvOperator" + + def get_declare_snippet(self, op_var_name, tensor_var_map): + return DeclareOpSnippet( + op=self, + templ_dtypes=[self.out_dtypes[0]], + op_var_name=op_var_name, + nested_namespaces=self.namespaces, + ) + + def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): + return QuantDepthwiseSeperateConvOpEvalSnippet( + op_info=op_info, + templ_dtypes=[self.out_dtypes[0]], + op_name=op_var_name, + tensor_var_map=tensor_var_map, + nested_namespaces=self.namespaces, + ) + + @OperatorFactory.register class _DWSConvOperator(_Operator): op_type = "DepthwiseSeparableConvOperator" + @classmethod + @must_return_type(Hashable) + def get_constructor_signature(cls, op_info): + strides = [ + 1, + op_info.op_attr['StrideW'], + op_info.op_attr['StrideH'], + 1, + ] + padding = op_info.op_attr['Padding'] == 1 and "VALID" or "SAME" + strides_str = ','.join(map(str, strides)) + return ("{{ {} }}".format(strides_str), padding) + def get_declare_snippet(self, op_var_name, tensor_var_map): return DeclareOpSnippet( op=self, templ_dtypes=[self.out_dtypes[0]], op_var_name=op_var_name, - nested_namespaces=['TFLM'], ) def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): @@ -317,7 +352,6 @@ def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): templ_dtypes=[self.out_dtypes[0]], op_name=op_var_name, tensor_var_map=tensor_var_map, - nested_namespaces=['TFLM'], ) diff --git a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py index f8d3dbcc..17cca3c4 100644 --- a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py +++ b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py @@ -11,6 +11,7 @@ "DeclareRamTensorSnippet", "DeclareOpSnippet", "DepthwiseSeperateConvOpEvalSnippet", + "QuantDepthwiseSeperateConvOpEvalSnippet", "AddOpEvalSnippet", "ReshahpeEvalSnippet", "QuantizeEvalSnippet", @@ -78,6 +79,8 @@ def __init__(self, op, templ_dtypes, op_var_name, nested_namespaces=None): _SnippetBase.__init__(self) if nested_namespaces is None: nested_namespaces = [] + else: + nested_namespaces = list(nested_namespaces) op_info = op.op_info if templ_dtypes: templ_params = ', '.join([NP_TYPES_MAP[dtype].tensor_type_str for dtype in templ_dtypes]) @@ -100,6 +103,8 @@ def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map, nested_namesp Snippet.__init__(self) if nested_namespaces is None: nested_namespaces = [] + else: + nested_namespaces = list(nested_namespaces) input_map = { name: tensor_var_map[tensor.name] for name, tensor in zip(self.__inputs__, op_info.input_tensors) @@ -129,10 +134,15 @@ def __init__(self, op_info, templ_dtypes, op_name, tensor_var_map, nested_namesp class DepthwiseSeperateConvOpEvalSnippet(OpEvalSnippet): - __template_name__ = 'snippets/rearch/eval_dws_conv_op.cpp' __inputs__ = ["in", "depthwise_filter", "pointwise_filter"] __outputs__ = ["out"] + +class QuantDepthwiseSeperateConvOpEvalSnippet(OpEvalSnippet): + __template_name__ = 'snippets/rearch/eval_quant_dws_conv_op.cpp' + __inputs__ = ["in", "filter", "bias"] + __outputs__ = ["out"] + _PADDING_MAP = { 0: "TFLM::TfLitePadding::kTfLitePaddingUnknown", 1: "TFLM::TfLitePadding::kTfLitePaddingSame", diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_op.cpp index 2145e7ff..0236957e 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/declare_op.cpp @@ -1,5 +1,5 @@ {%if construct_params%} -{{op_type}} {{op_var_name}}({%for param in construct_params%}{{construct_params}}{%if not loop.last%}, {%endif%}{%endfor%}); +{{op_type}} {{op_var_name}}({%for param in construct_params%}{{param}}{%if not loop.last%}, {%endif%}{%endfor%}); {%else%} {{op_type}} {{op_var_name}}; {%endif%} \ No newline at end of file diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp similarity index 100% rename from utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_dws_conv_op.cpp rename to utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp diff --git a/utensor_cgen/ir/base.py b/utensor_cgen/ir/base.py index 5dd70922..b2719c80 100644 --- a/utensor_cgen/ir/base.py +++ b/utensor_cgen/ir/base.py @@ -4,11 +4,10 @@ from functools import reduce import attr -import six -from attr.validators import instance_of - import numpy as np +import six import tensorflow as tf +from attr.validators import instance_of from tensorflow.core.framework.attr_value_pb2 import AttrValue as _AttrValue from tensorflow.core.framework.attr_value_pb2 import \ NameAttrList as _NameAttrList @@ -16,6 +15,7 @@ from tensorflow.core.framework.tensor_shape_pb2 import \ TensorShapeProto as _TensorShapeProto from tensorflow.core.framework.types_pb2 import DataType as _DataType + from utensor_cgen.logger import logger from utensor_cgen.utils import random_str, topologic_order_graph @@ -271,6 +271,9 @@ def check(self, attribute, value): op_attr = attr.ib(factory=dict, converter=dict) + # any codegen specific attributes goes to here + code_gen_attributes = attr.ib(factory=dict) + n_inputs = attr.ib() @n_inputs.default def default_n_inputs(self): @@ -474,7 +477,6 @@ class uTensorGraph(IRBase, _NoShallowCopyMixin, uTensorGraphBuilderMixin): ops_info = attr.ib(factory=dict) # non-init topo_order = attr.ib(factory=list, init=False) - _type_to_op_map = attr.ib(factory=dict, init=False, repr=False) attributes = attr.ib(factory=dict, init=False, repr=False) def __attrs_post_init__(self): @@ -496,17 +498,11 @@ def get_ops_by_type(self, given_op_type): :rtype: List[:class:`.OperationInfo`] """ - if not self._type_to_op_map: - for op_info in self.ops_info.values(): - op_type = op_info.op_type - ops = self._type_to_op_map.get( - op_type, - [] - ) + [op_info] - self._type_to_op_map.update( - [(op_type, ops),] - ) - return self._type_to_op_map.get(given_op_type, []) + ops = [] + for op_info in self.ops_info.values(): + if op_info.op_type == given_op_type: + ops.append(op_info) + return ops @property def output_ops(self): @@ -664,9 +660,6 @@ def unsafe_merge_into(self, other_ugraph): """ for op in self.ops_info.values(): op.move_into(other_ugraph) - if op.op_type not in self._type_to_op_map: - self._type_to_op_map[op.op_type] = [] - self._type_to_op_map[op.op_type].append(op) def __deepcopy__(self, memo): new_graph = uTensorGraph( From 5851a491fea80cb55e31e7c0a6900d4688cfce3b Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 1 May 2020 15:46:22 +0800 Subject: [PATCH 103/117] Fix bug and minor refactor (removing misleading op_info attributes for _Operator) --- .../utensor/code_generator/rearch/_operators/_base.py | 2 +- utensor_cgen/backend/utensor/snippets/rearch/_snippets.py | 6 ++---- .../templates/snippets/rearch/eval_quant_dws_conv_op.cpp | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py index 6e1eb68d..d749a6a7 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py @@ -81,7 +81,7 @@ def __new__(cls, op_info): self.in_dtypes = in_dtypes self.out_dtypes = out_dtypes self.construct_params = construct_signature - self.op_info = op_info + self.op_type = op_info.op_type cls._cache[full_signature] = self return cls._cache[full_signature] diff --git a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py index 17cca3c4..c5adc713 100644 --- a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py +++ b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py @@ -81,12 +81,10 @@ def __init__(self, op, templ_dtypes, op_var_name, nested_namespaces=None): nested_namespaces = [] else: nested_namespaces = list(nested_namespaces) - op_info = op.op_info + op_type = op.op_type if templ_dtypes: templ_params = ', '.join([NP_TYPES_MAP[dtype].tensor_type_str for dtype in templ_dtypes]) - op_type = '{}<{}>'.format(op_info.op_type, templ_params) - else: - op_type = op_info.op_type + op_type = '{}<{}>'.format(op_type, templ_params) if nested_namespaces: op_type = "::".join(nested_namespaces + [op_type]) self.template_vars['op_type'] = op_type diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp index 91da93d8..336eae0e 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp @@ -7,6 +7,7 @@ {%endfor%} {%endif%} { + TFLM::TfLiteDepthwiseConvParams dws_params; dws_params.padding = {{padding}}; dws_params.stride_width = {{stride_width}}; dws_params.stride_height = {{stride_height}}; From 5a0909472ff05fa18fcbfece2dc1848fa928d95f Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 1 May 2020 16:26:12 +0800 Subject: [PATCH 104/117] Fix templates and snippets bug --- .../utensor/code_generator/rearch/_operators/_impls.py | 4 ++-- utensor_cgen/backend/utensor/snippets/rearch/_snippets.py | 2 +- .../templates/snippets/rearch/eval_quant_dws_conv_op.cpp | 2 +- .../utensor/snippets/templates/snippets/rearch/simple.hpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py index 72219579..c02b6ff6 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py @@ -260,7 +260,7 @@ def get_constructor_signature(cls, op_info): @OperatorFactory.register -class _MaxPoolOperator(_Operator, _PoolingOperatorMixin): +class _MaxPoolOperator(_PoolingOperatorMixin, _Operator): op_type = 'MaxPoolOperator' def get_declare_snippet(self, op_var_name, tensor_var_map): @@ -280,7 +280,7 @@ def get_eval_snippet(self, op_var_name, op_info, tensor_var_map): @OperatorFactory.register -class _MinPoolOperator(_Operator, _PoolingOperatorMixin): +class _MinPoolOperator(_PoolingOperatorMixin, _Operator): op_type = 'MinPoolOperator' def get_declare_snippet(self, op_var_name, tensor_var_map): diff --git a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py index c5adc713..4fd295ab 100644 --- a/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py +++ b/utensor_cgen/backend/utensor/snippets/rearch/_snippets.py @@ -29,7 +29,7 @@ ] class _SnippetBase(Snippet): - __headers__ = set(['"uTensor/uTensor.hpp"']) + __headers__ = set(['"uTensor/uTensor.h"']) @staticmethod def get_quant_param(tensor_info): diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp index 336eae0e..3a7d3ea3 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/eval_quant_dws_conv_op.cpp @@ -12,7 +12,7 @@ dws_params.stride_width = {{stride_width}}; dws_params.stride_height = {{stride_height}}; dws_params.depth_multiplier = {{depth_multiplier}}; - dws_params.activation = {{activation}}; + dws_params.activation = TFLM::{{activation}}; dws_params.dilation_width_factor = {{dilation_width_factor}}; dws_params.dilation_height_factor = {{dilation_height_factor}}; {{op_var_name}}.set_params(dws_params); diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/simple.hpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/simple.hpp index 90e379a8..cc24e474 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/simple.hpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/rearch/simple.hpp @@ -4,6 +4,6 @@ #include #include "uTensor/core/tensor.hpp" -void compute_{{model_name}}({%for pl in placeholders%}utensor::Tensor& {{pl}}, {%endfor%}std::vector& outputs); +void compute_{{model_name}}({%for pl in placeholders%}uTensor::Tensor& {{pl}}, {%endfor%}std::vector& outputs); #endif // __{{model_name.upper()}}_H \ No newline at end of file From fa6c7f445f758ac5026a102d82785b873a70506c Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 3 May 2020 11:29:43 +0800 Subject: [PATCH 105/117] method renaming to prevent misunderstanding --- .../utensor/code_generator/rearch/_operators/_base.py | 10 +++++----- .../utensor/code_generator/rearch/_operators/_impls.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py index d749a6a7..daf4c694 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_base.py @@ -50,7 +50,7 @@ def is_supported(cls, op_type): class _OperatorMeta(type): def __new__(mcls, name, bases, attrib): attrib["_cache"] = {} - for key in ["get_type_signature", "get_constructor_signature"]: + for key in ["get_type_signature", "get_constructor_parameters"]: func = attrib.get(key) if func is None: continue @@ -73,14 +73,14 @@ def __new__(cls, op_info): raise ValueError('op_type must be overwritten: {}'.format(cls)) type_signature = cls.get_type_signature(op_info) - construct_signature = cls.get_constructor_signature(op_info) - full_signature = (cls.namespaces, type_signature, construct_signature) + construct_params = cls.get_constructor_parameters(op_info) + full_signature = (cls.namespaces, type_signature, construct_params) in_dtypes, out_dtypes = type_signature if full_signature not in cls._cache: self = object.__new__(cls) self.in_dtypes = in_dtypes self.out_dtypes = out_dtypes - self.construct_params = construct_signature + self.construct_params = construct_params self.op_type = op_info.op_type cls._cache[full_signature] = self return cls._cache[full_signature] @@ -94,7 +94,7 @@ def get_type_signature(cls, op_info): @classmethod @must_return_type(Hashable) - def get_constructor_signature(cls, op_info): + def get_constructor_parameters(cls, op_info): return tuple() def get_declare_snippet(self, op_var_name, tensor_var_map, **kwargs): diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py index c02b6ff6..60105ea8 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators/_impls.py @@ -235,7 +235,7 @@ class _PoolingOperatorMixin(object): @classmethod @must_return_type(Hashable) - def get_constructor_signature(cls, op_info): + def get_constructor_parameters(cls, op_info): if op_info.ugraph.lib_name == "tensorflow": strides = op_info.op_attr['strides'].value.ints_value ksize = op_info.op_attr['ksize'].value.ints_value[1:3] @@ -328,7 +328,7 @@ class _DWSConvOperator(_Operator): @classmethod @must_return_type(Hashable) - def get_constructor_signature(cls, op_info): + def get_constructor_parameters(cls, op_info): strides = [ 1, op_info.op_attr['StrideW'], From 249a11c124daa5b19c6a5ee2ffdd9674e13adde7 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Mon, 4 May 2020 16:07:21 +0800 Subject: [PATCH 106/117] Fix TF2.0 imports and bugs (v1 and v2 behavior inconsistent) --- utensor_cgen/__init__.py | 11 +++++++-- utensor_cgen/api.py | 18 ++++++++++++++ utensor_cgen/backend/transformer.py | 5 ++-- utensor_cgen/frontend/tensorflow.py | 7 +++--- utensor_cgen/ir/base.py | 14 +++++------ utensor_cgen/ir/converter.py | 28 +++++++++++++--------- utensor_cgen/legalizer/tensorflow.py | 12 ++++++++++ utensor_cgen/transformer/linear_reoder.py | 3 ++- utensor_cgen/transformer/ns_transformer.py | 3 ++- utensor_cgen/transformer/quantize.py | 13 +++++++++- utensor_cgen/utils.py | 4 +++- 11 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 utensor_cgen/api.py diff --git a/utensor_cgen/__init__.py b/utensor_cgen/__init__.py index 87b59bd1..47c08995 100644 --- a/utensor_cgen/__init__.py +++ b/utensor_cgen/__init__.py @@ -4,8 +4,13 @@ # https://github.com/google/or-tools/issues/1830 # we need to import ortools before tensorflow -from ortools.sat.python import cp_model as _ -from utensor_cgen._extensions import _ExtensionsLoader +from ortools.sat.python import cp_model as _ # isort:skip +import tensorflow.compat.v1 as _tf # isort:skip + +_tf.disable_v2_behavior() # isort:skip +_tf.disable_v2_tensorshape() # isort:skip + +from utensor_cgen._extensions import _ExtensionsLoader # isort:skip __version__ = ( pkg_resources @@ -13,3 +18,5 @@ .version ) sys.modules['utensor_cgen.extensions'] = _ExtensionsLoader() + +del _tf diff --git a/utensor_cgen/api.py b/utensor_cgen/api.py new file mode 100644 index 00000000..e8625e05 --- /dev/null +++ b/utensor_cgen/api.py @@ -0,0 +1,18 @@ +import tensorflow as tf + + +def keras_export(model_or_path, converter_kwargs): + if isinstance(model_or_path, str): + converter = tf.lite.TFLiteConverter.from_saved_model( + model_or_path, **converter_kwargs + ) + elif isinstance(model_or_path, tf.keras.Model): + converter = tf.lite.TFLiteConverter.from_keras_model( + model_or_path, **converter_kwargs + ) + else: + raise RuntimeError( + "expecting a keras model or a path to saved model, get {}".format( + model_or_path + ) + ) diff --git a/utensor_cgen/backend/transformer.py b/utensor_cgen/backend/transformer.py index e77fdd31..92ae47f1 100644 --- a/utensor_cgen/backend/transformer.py +++ b/utensor_cgen/backend/transformer.py @@ -63,8 +63,9 @@ def default_config(cls): 'transform_methods': [ "dropout(name_pattern=r'(dropout[_\w\d]*)/.*')", "linear_reorder", - "quantize", - "conv_pool", + # these methods are deprecated + # "quantize", + # "conv_pool", "inline", "biasAdd", "remove_id_op", diff --git a/utensor_cgen/frontend/tensorflow.py b/utensor_cgen/frontend/tensorflow.py index bbb43bd2..27e7f749 100644 --- a/utensor_cgen/frontend/tensorflow.py +++ b/utensor_cgen/frontend/tensorflow.py @@ -2,11 +2,11 @@ import os -import six - import numpy as np -import tensorflow as tf +import six +import tensorflow.compat.v1 as tf from google.protobuf import text_format + from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser from utensor_cgen.ir.base import OperationInfo, TensorInfo, uTensorGraph @@ -17,6 +17,7 @@ @FrontendSelector.register(target_exts=[".pb", ".pbtxt"]) class GraphDefParser(Parser): + def parse(self, pb_file, output_nodes=None): graph_def, graph_name = self._load_graph_def(pb_file) if not self._is_freeze_graph(graph_def): diff --git a/utensor_cgen/ir/base.py b/utensor_cgen/ir/base.py index b2719c80..4a2a8981 100644 --- a/utensor_cgen/ir/base.py +++ b/utensor_cgen/ir/base.py @@ -6,15 +6,15 @@ import attr import numpy as np import six -import tensorflow as tf +import tensorflow.compat.v1 as tf from attr.validators import instance_of -from tensorflow.core.framework.attr_value_pb2 import AttrValue as _AttrValue -from tensorflow.core.framework.attr_value_pb2 import \ - NameAttrList as _NameAttrList -from tensorflow.core.framework.tensor_pb2 import TensorProto as _TensorProto -from tensorflow.core.framework.tensor_shape_pb2 import \ +from tensorflow.compat.v1 import AttrValue as _AttrValue +from tensorflow.compat.v1 import NameAttrList as _NameAttrList +from tensorflow_core.core.framework.tensor_pb2 import \ + TensorProto as _TensorProto +from tensorflow_core.core.framework.tensor_shape_pb2 import \ TensorShapeProto as _TensorShapeProto -from tensorflow.core.framework.types_pb2 import DataType as _DataType +from tensorflow_core.core.framework.types_pb2 import DataType as _DataType from utensor_cgen.logger import logger from utensor_cgen.utils import random_str, topologic_order_graph diff --git a/utensor_cgen/ir/converter.py b/utensor_cgen/ir/converter.py index c916cba5..302872f0 100644 --- a/utensor_cgen/ir/converter.py +++ b/utensor_cgen/ir/converter.py @@ -17,7 +17,7 @@ from tensorflow.core.framework.tensor_shape_pb2 import \ TensorShapeProto as _TensorShapeProto from tensorflow.core.framework.types_pb2 import DataType as _DataType -from tensorflow.python.framework import tensor_shape +from tensorflow_core.python.framework import tensor_shape from .utils import is_list_of @@ -70,17 +70,17 @@ def get_tf_value(cls, generic): raise ValueError('__utensor_generic_type__ cannot be None: %s' % converter_cls) if converter_cls.__tfproto_type__ is None: raise ValueError('__tfproto_type__ cannot be None: %s' % converter_cls) - cls._TF2GENERIC_MAP[converter_cls.__tfproto_type__] = converter_cls - cls._GENERIC2TF_MAP[converter_cls.__utensor_generic_type__] = converter_cls + cls._TF2GENERIC_MAP[converter_cls.__tfproto_type__.__name__] = converter_cls + cls._GENERIC2TF_MAP[converter_cls.__utensor_generic_type__.__qualname__] = converter_cls return converter_cls @classmethod def get_generic_value(cls, tf_value): value_type = type(tf_value) - if value_type in cls._GENERIC2TF_MAP: + if value_type.__qualname__ in cls._GENERIC2TF_MAP: # already generic type return tf_value - cvt = cls._TF2GENERIC_MAP.get(value_type, None) + cvt = cls._TF2GENERIC_MAP.get(value_type.__name__, None) if not cvt: raise ValueError('Unknown tf value type: %s' % value_type) return cvt.get_generic_value(tf_value) @@ -88,10 +88,10 @@ def get_generic_value(cls, tf_value): @classmethod def get_tf_value(cls, generic): value_type = type(generic) - if value_type in cls._TF2GENERIC_MAP: + if value_type.__name__ in cls._TF2GENERIC_MAP: # already tf type return generic - cvt = cls._GENERIC2TF_MAP.get(value_type, None) + cvt = cls._GENERIC2TF_MAP.get(value_type.__qualname__, None) if not cvt: raise ValueError('Unknown generic type: %s' % value_type) return cvt.get_tf_value(generic) @@ -114,7 +114,7 @@ def all_generic_types(cls): def TF2GENERIC_MAP(cls): type_map = {} for converter in cls._TF2GENERIC_MAP.values(): - type_map[converter.__tfproto_type__] = converter.__utensor_generic_type__ + type_map[converter.__tfproto_type__.__name__] = converter.__utensor_generic_type__ return type_map @@ -218,8 +218,9 @@ def check(self, attrib, a_list): def _check_tf_type(conv_func): @wraps(conv_func) def wrap(cls, value): - assert isinstance(value, cls.__tfproto_type__), \ - "Expecting %s, get %s" % (cls.__tfproto_type__, type(value)) + value_type = type(value) + assert value_type.__name__ == cls.__tfproto_type__.__name__, \ + "Expecting %s, get %s" % (cls.__tfproto_type__, value_type) return conv_func(cls, value) return wrap @@ -249,7 +250,7 @@ def get_generic_value(cls, value): def get_tf_value(cls, value): return value -ConverterDispatcher._BUILTIN_MAP = dict((t, BuiltinConverter) for t in BuiltinConverter.__tfproto_type__) +ConverterDispatcher._BUILTIN_MAP = dict((t.__name__, BuiltinConverter) for t in BuiltinConverter.__tfproto_type__) ConverterDispatcher._GENERIC2TF_MAP.update(ConverterDispatcher._BUILTIN_MAP) ConverterDispatcher._TF2GENERIC_MAP.update(ConverterDispatcher._BUILTIN_MAP) @@ -327,6 +328,11 @@ def get_tf_value(cls, value): @_check_tf_type def get_generic_value(cls, value): try: + value_type = type(value) + if value_type.__name__ == cls.__tfproto_type__.__name__: + value = [ + value.dim[i].size if value.dim[i].size > 0 else None for i in range(len(value.dim)) + ] list_view = tensor_shape.TensorShape(value).as_list() except ValueError: # unknown shape diff --git a/utensor_cgen/legalizer/tensorflow.py b/utensor_cgen/legalizer/tensorflow.py index e2850c68..08f2a28f 100644 --- a/utensor_cgen/legalizer/tensorflow.py +++ b/utensor_cgen/legalizer/tensorflow.py @@ -4,6 +4,17 @@ class GraphDefLegalizer(LegalizerBase): TARGET = 'tensorflow' + class _OpTypeRenamePostProcessing(object): + _RENAME_MAP = { + 'BatchMatMulV2': 'MatMul' + } + + @classmethod + def apply(cls, ugraph): + for op_type, new_op_type in cls._RENAME_MAP.items(): + for op_info in ugraph.get_ops_by_type(op_type): + op_info.op_type = new_op_type + def legalize_ops(self, ugraph): '''Legalize ops to generic ops in given graph ''' @@ -11,6 +22,7 @@ def legalize_ops(self, ugraph): raise ValueError( 'expecting tensorflow graph, get {}'.format(ugraph.lib_name) ) + self._OpTypeRenamePostProcessing.apply(ugraph) return ugraph def legalize_dtype(self, ugraph): diff --git a/utensor_cgen/transformer/linear_reoder.py b/utensor_cgen/transformer/linear_reoder.py index 4af59b29..032f2b5a 100644 --- a/utensor_cgen/transformer/linear_reoder.py +++ b/utensor_cgen/transformer/linear_reoder.py @@ -4,7 +4,8 @@ Linear Operation Legalizations """ -import tensorflow as tf +import tensorflow.compat.v1 as tf + # FIXME: remove uTensorOpEqualityDelegate import after we have generic ops from utensor_cgen.backend.utensor.code_generator.legacy._operators import \ uTensorOpEqualityDelegate diff --git a/utensor_cgen/transformer/ns_transformer.py b/utensor_cgen/transformer/ns_transformer.py index 23a1690d..3463bafb 100644 --- a/utensor_cgen/transformer/ns_transformer.py +++ b/utensor_cgen/transformer/ns_transformer.py @@ -9,7 +9,8 @@ from copy import deepcopy import numpy as np -import tensorflow as tf +import tensorflow.compat.v1 as tf + # FIXME: remove uTensorOpEqualityDelegate import after we have generic ops from utensor_cgen.backend.utensor.code_generator.legacy._operators import \ uTensorOpEqualityDelegate diff --git a/utensor_cgen/transformer/quantize.py b/utensor_cgen/transformer/quantize.py index 3560c2c0..d2a91536 100644 --- a/utensor_cgen/transformer/quantize.py +++ b/utensor_cgen/transformer/quantize.py @@ -1,9 +1,18 @@ -from tensorflow.tools.graph_transforms import TransformGraph +"""Legacy, DON'T USE +""" from utensor_cgen.frontend.tensorflow import GraphDefParser +from utensor_cgen.logger import logger from .base import Transformer from .pipeline import TransformerPipeline +try: + from tensorflow.tools.graph_transforms import TransformGraph +except ImportError: + logger.warning("trying to import deprecated quantization transformer") + TransformGraph = None + + __all__ = ['QuantizeTransformer'] @TransformerPipeline.register_transformer @@ -16,6 +25,8 @@ def transform(self, ugraph): if ugraph.lib_name != 'tensorflow': raise ValueError('only support tensorflow graph') graph_def = ugraph.graph_def + if TransformGraph is None: + raise RuntimeError("quantization is temporary not supported") quant_graph_def = TransformGraph(input_graph_def=graph_def, inputs=[], outputs=ugraph.output_nodes, diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index 0c6c73ad..d4f2a666 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -66,7 +66,9 @@ def attrib(self): def log_graph(graph_or_graph_def, logdir): - if isinstance(graph_or_graph_def, tf.GraphDef): + from tensorflow.compat.v1 import GraphDef + + if isinstance(graph_or_graph_def, GraphDef): graph = tf.Graph() with graph.as_default(): tf.import_graph_def(graph_or_graph_def, name='') From 79491c34868a21dea6760581cf878ded85370965 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Mon, 4 May 2020 17:04:10 +0800 Subject: [PATCH 107/117] update tests and fix onnx parser --- .circleci/config.yml | 2 +- Pipfile.lock | 535 +++++++++++------- setup.py | 4 +- tests/test_frontend/test_selector.py | 9 +- tests/test_frontend/test_tensor_flow.py | 53 -- .../test_ops/conftest.py | 5 - .../test_ops/test_op_add.py | 3 +- .../test_ops/test_op_argmax.py | 3 +- .../test_ops/test_op_const.py | 3 +- .../test_ops/test_op_conv2d.py | 3 +- .../test_ops/test_op_matmul.py | 3 +- .../test_ops/test_op_max.py | 3 +- .../test_ops/test_op_maxpool.py | 3 +- .../test_ops/test_op_min.py | 3 +- .../test_ops/test_op_relu.py | 3 +- tests/test_ir/__init__.py | 3 + .../test_AttrValueConverter/conftest.py | 2 +- .../test_converter.py | 2 +- .../test_matcher/test_permutation/conftest.py | 2 +- tests/test_matcher/test_replace/conftest.py | 2 +- .../test_matcher/test_replace/test_replace.py | 3 +- tests/test_transformer/__init__.py | 3 + .../test_convpool/conftest.py | 2 +- .../test_convpool/test_vgg.py | 3 + .../test_transformer/test_dropout/conftest.py | 8 +- .../test_dropout/test_dropout_transormer.py | 3 +- .../test_linear_reorder/conftest.py | 2 +- .../test_pipeline/conftest.py | 3 +- utensor_cgen/frontend/onnx.py | 41 +- 29 files changed, 410 insertions(+), 304 deletions(-) delete mode 100644 tests/test_frontend/test_tensor_flow.py diff --git a/.circleci/config.yml b/.circleci/config.yml index 96c9de36..286fcda4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ jobs: - run: pip3 install . - run: name: Test - command: LC_ALL=C.UTF-8 LANG=C.UTF-8 pytest -vv tests -m 'not slow_test' + command: LC_ALL=C.UTF-8 LANG=C.UTF-8 pytest -vv tests -m 'not slow_test and not deprecated' #- run: genhtml main_coverage.info --output-directory /tmp/coverage #- store_test_results: # path: /tmp/test_results diff --git a/Pipfile.lock b/Pipfile.lock index 86a93d24..1f0fe3a4 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -34,12 +34,33 @@ ], "version": "==19.3.0" }, + "cachetools": { + "hashes": [ + "sha256:1d057645db16ca7fe1f3bd953558897603d6f0b9c51ed9d11eb4d071ec4e2aab", + "sha256:de5d88f87781602201cde465d3afe837546663b168e8b39df67411b0bf10cefc" + ], + "version": "==4.1.0" + }, + "certifi": { + "hashes": [ + "sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304", + "sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519" + ], + "version": "==2020.4.5.1" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, "click": { "hashes": [ - "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc", - "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a" + "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", + "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" ], - "version": "==7.1.1" + "version": "==7.1.2" }, "cycler": { "hashes": [ @@ -59,19 +80,46 @@ ], "version": "==1.12" }, + "future": { + "hashes": [ + "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d" + ], + "version": "==0.18.2" + }, "gast": { "hashes": [ - "sha256:8f46f5be57ae6889a4e16e2ca113b1703ef17f2b0abceb83793eaba9e1351a45", - "sha256:b881ef288a49aa81440d2c5eb8aeefd4c2bb8993d5f50edae7413a85bfdb3b57" + "sha256:fe939df4583692f0512161ec1c880e0a10e71e6a232da045ab8edd3756fbadf0" ], - "version": "==0.3.3" + "version": "==0.2.2" + }, + "google-auth": { + "hashes": [ + "sha256:0c41a453b9a8e77975bfa436b8daedac00aed1c545d84410daff8272fff40fbb", + "sha256:e63b2210e03c4ed829063b72c4af0c4b867c2788efb3210b6b9439b488bd3afd" + ], + "version": "==1.14.1" + }, + "google-auth-oauthlib": { + "hashes": [ + "sha256:88d2cd115e3391eb85e1243ac6902e76e77c5fe438b7276b297fbe68015458dd", + "sha256:a92a0f6f41a0fb6138454fbc02674e64f89d82a244ea32f98471733c8ef0e0e1" + ], + "version": "==0.4.1" + }, + "google-pasta": { + "hashes": [ + "sha256:4612951da876b1a10fe3960d7226f0c7682cf901e16ac06e473b267a5afa8954", + "sha256:b32482794a366b5366a32c92a9a9201b107821889935a02b3e51f6b432ea84ed", + "sha256:c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e" + ], + "version": "==0.2.0" }, "graphviz": { "hashes": [ - "sha256:241fb099e32b8e8c2acca747211c8237e40c0b89f24b1622860075d59f4c4b25", - "sha256:60acbeee346e8c14555821eab57dbf68a169e6c10bce40e83c1bf44f63a62a01" + "sha256:cb0e878f90378489f17aab140b68e64e44b79e4cb59a530c8863d84bf2e2e5f5", + "sha256:e104ba036c8aef84320ec80560e544cd3cad68c9f90394b4e2b87bc44ab09791" ], - "version": "==0.13.2" + "version": "==0.14" }, "grpcio": { "hashes": [ @@ -143,6 +191,13 @@ ], "version": "==2.10.0" }, + "idna": { + "hashes": [ + "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb", + "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa" + ], + "version": "==2.9" + }, "idx2numpy": { "hashes": [ "sha256:c609d5b260e6e7b538d458ba266c55b5b478e43e581d24d7017351813e67fcae" @@ -244,38 +299,38 @@ ], "version": "==3.2.1" }, - "mock": { - "hashes": [ - "sha256:3f9b2c0196c60d21838f307f5825a7b86b678cedc58ab9e50a8988187b4d81e0", - "sha256:dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72" - ], - "version": "==4.0.2" - }, "numpy": { "hashes": [ - "sha256:0aa2b318cf81eb1693fcfcbb8007e95e231d7e1aa24288137f3b19905736c3ee", - "sha256:163c78c04f47f26ca1b21068cea25ed7c5ecafe5f5ab2ea4895656a750582b56", - "sha256:1e37626bcb8895c4b3873fcfd54e9bfc5ffec8d0f525651d6985fcc5c6b6003c", - "sha256:264fd15590b3f02a1fbc095e7e1f37cdac698ff3829e12ffdcffdce3772f9d44", - "sha256:3d9e1554cd9b5999070c467b18e5ae3ebd7369f02706a8850816f576a954295f", - "sha256:40c24960cd5cec55222963f255858a1c47c6fa50a65a5b03fd7de75e3700eaaa", - "sha256:46f404314dbec78cb342904f9596f25f9b16e7cf304030f1339e553c8e77f51c", - "sha256:4847f0c993298b82fad809ea2916d857d0073dc17b0510fbbced663b3265929d", - "sha256:48e15612a8357393d176638c8f68a19273676877caea983f8baf188bad430379", - "sha256:6725d2797c65598778409aba8cd67077bb089d5b7d3d87c2719b206dc84ec05e", - "sha256:99f0ba97e369f02a21bb95faa3a0de55991fd5f0ece2e30a9e2eaebeac238921", - "sha256:a41f303b3f9157a31ce7203e3ca757a0c40c96669e72d9b6ee1bce8507638970", - "sha256:a4305564e93f5c4584f6758149fd446df39fd1e0a8c89ca0deb3cce56106a027", - "sha256:a551d8cc267c634774830086da42e4ba157fa41dd3b93982bc9501b284b0c689", - "sha256:a6bc9432c2640b008d5f29bad737714eb3e14bb8854878eacf3d7955c4e91c36", - "sha256:c60175d011a2e551a2f74c84e21e7c982489b96b6a5e4b030ecdeacf2914da68", - "sha256:e46e2384209c91996d5ec16744234d1c906ab79a701ce1a26155c9ec890b8dc8", - "sha256:e607b8cdc2ae5d5a63cd1bec30a15b5ed583ac6a39f04b7ba0f03fcfbf29c05b", - "sha256:e94a39d5c40fffe7696009dbd11bc14a349b377e03a384ed011e03d698787dd3", - "sha256:eb2286249ebfe8fcb5b425e5ec77e4736d53ee56d3ad296f8947f67150f495e3", - "sha256:fdee7540d12519865b423af411bd60ddb513d2eb2cd921149b732854995bbf8b" - ], - "version": "==1.18.3" + "sha256:00d7b54c025601e28f468953d065b9b121ddca7fff30bed7be082d3656dd798d", + "sha256:02ec9582808c4e48be4e93cd629c855e644882faf704bc2bd6bbf58c08a2a897", + "sha256:0e6f72f7bb08f2f350ed4408bb7acdc0daba637e73bce9f5ea2b207039f3af88", + "sha256:1be2e96314a66f5f1ce7764274327fd4fb9da58584eaff00b5a5221edefee7d6", + "sha256:2466fbcf23711ebc5daa61d28ced319a6159b260a18839993d871096d66b93f7", + "sha256:2b573fcf6f9863ce746e4ad00ac18a948978bb3781cffa4305134d31801f3e26", + "sha256:3f0dae97e1126f529ebb66f3c63514a0f72a177b90d56e4bce8a0b5def34627a", + "sha256:50fb72bcbc2cf11e066579cb53c4ca8ac0227abb512b6cbc1faa02d1595a2a5d", + "sha256:57aea170fb23b1fd54fa537359d90d383d9bf5937ee54ae8045a723caa5e0961", + "sha256:709c2999b6bd36cdaf85cf888d8512da7433529f14a3689d6e37ab5242e7add5", + "sha256:7d59f21e43bbfd9a10953a7e26b35b6849d888fc5a331fa84a2d9c37bd9fe2a2", + "sha256:904b513ab8fbcbdb062bed1ce2f794ab20208a1b01ce9bd90776c6c7e7257032", + "sha256:96dd36f5cdde152fd6977d1bbc0f0561bccffecfde63cd397c8e6033eb66baba", + "sha256:9933b81fecbe935e6a7dc89cbd2b99fea1bf362f2790daf9422a7bb1dc3c3085", + "sha256:bbcc85aaf4cd84ba057decaead058f43191cc0e30d6bc5d44fe336dc3d3f4509", + "sha256:dccd380d8e025c867ddcb2f84b439722cf1f23f3a319381eac45fd077dee7170", + "sha256:e22cd0f72fc931d6abc69dc7764484ee20c6a60b0d0fee9ce0426029b1c1bdae", + "sha256:ed722aefb0ebffd10b32e67f48e8ac4c5c4cf5d3a785024fdf0e9eb17529cd9d", + "sha256:efb7ac5572c9a57159cf92c508aad9f856f1cb8e8302d7fdb99061dbe52d712c", + "sha256:efdba339fffb0e80fcc19524e4fdbda2e2b5772ea46720c44eaac28096d60720", + "sha256:f22273dd6a403ed870207b853a856ff6327d5cbce7a835dfa0645b3fc00273ec" + ], + "version": "==1.18.4" + }, + "oauthlib": { + "hashes": [ + "sha256:bee41cc35fcca6e988463cacc3bcb8a96224f470ca547e697b604cc697b2f889", + "sha256:df884cd6cbe20e32633f1db1072e9356f53638e4361bef4e8b03c9127c9328ea" + ], + "version": "==3.1.0" }, "onnx": { "hashes": [ @@ -309,47 +364,54 @@ ], "version": "==1.2.1" }, + "opt-einsum": { + "hashes": [ + "sha256:83b76a98d18ae6a5cc7a0d88955a7f74881f0e567a0f4c949d24c942753eb998", + "sha256:96f819d46da2f937eaf326336a114aaeccbcbdb9de460d42e8b5f480a69adca7" + ], + "version": "==3.2.1" + }, "ortools": { "hashes": [ - "sha256:026e6556f3138be64fffd56cffe2ee8fabbd5d269ebee3fa24b92ce7fbabddd2", - "sha256:056f01e9b147610d88fb0f80dccd3aa8a0f9ce73a35a7e1c3e2a85c791054d86", - "sha256:121ad9f122c4ea78ff2e61fc8c371f927eb8dbd92519e0af2f1fedcc73d2375e", - "sha256:2ba6b95beae46e7fb27583a75065b38657096de1a968ab24fd57bf66d396f217", - "sha256:502f6e724847424fff088b6d3647a4e8f8b909f15a9218fb361edac9bfdfb0c8", - "sha256:512863472f620eac8eaebb4d3fa76834c4c1c8fcf13a5c07987a0a527114e0b5", - "sha256:96d85e75e0276182ee82c4352121706379facf8c1e4448fc0feccc0fc1f6ed8f", - "sha256:c57f25e7052071a8707cdb44f8bf2e7e9ea026ec75ef8486ca18dccbf48381e3", - "sha256:db54ad4fa4c8a33214ab2edf8b08fbb280f4c792de4498c9b46e8377b03fe625", - "sha256:decd6b220d750c057e5a89cdfb9fc0cf6aeae84b2985bbb3ca6b07fe5f384cbc" + "sha256:05273768c38b603e4605ef5ee2beb80f877f0b7a2cc59639a2d4c5d877c659db", + "sha256:200eea97fd5ca524cbcb2a54cacde3da0df47061a0e048ab4f34ccdb9633aef5", + "sha256:271ab0cad19c598f83877ea8b37484a3f87aacc741ac0cf56ad9900965c9f041", + "sha256:2a1f0095989b8e4dfe40e0c806b4a7f51e5a42806fdac1b2750aecb2d424626e", + "sha256:2dc97b706f618c019997c4441ad47a3fca99f8cb76af25e169bfdda5dd767695", + "sha256:4ad95879c30863f9a753c8bf6388a316d92e0ba4b6c73dbad1d81f37c011b2ac", + "sha256:8984b89437effb070ac030335f3ffa300da5a403c92c09454759739a0252aa86", + "sha256:be2969390a8d13a13fc3e6aedfc90e19df344f916e4db050200df3c489fdb05b", + "sha256:c6c99da57d1921eb248bc4f188be724e6783ee05a2cc37b04d4658d5643f7ae6", + "sha256:d26d0bb5ab1427b7b95278a82ca951798bcb12abd44128e2f9de3640b5e26c0f" ], - "version": "==7.5.7466" + "version": "==7.6.7691" }, "pillow": { "hashes": [ - "sha256:04a10558320eba9137d6a78ca6fc8f4a5801f1b971152938851dc4629d903579", - "sha256:0f89ddc77cf421b8cd34ae852309501458942bf370831b4a9b406156b599a14e", - "sha256:251e5618125ec12ac800265d7048f5857a8f8f1979db9ea3e11382e159d17f68", - "sha256:291bad7097b06d648222b769bbfcd61e40d0abdfe10df686d20ede36eb8162b6", - "sha256:2f0b52a08d175f10c8ea36685115681a484c55d24d0933f9fd911e4111c04144", - "sha256:3713386d1e9e79cea1c5e6aaac042841d7eef838cc577a3ca153c8bedf570287", - "sha256:433bbc2469a2351bea53666d97bb1eb30f0d56461735be02ea6b27654569f80f", - "sha256:4510c6b33277970b1af83c987277f9a08ec2b02cc20ac0f9234e4026136bb137", - "sha256:50a10b048f4dd81c092adad99fa5f7ba941edaf2f9590510109ac2a15e706695", - "sha256:670e58d3643971f4afd79191abd21623761c2ebe61db1c2cb4797d817c4ba1a7", - "sha256:6c1924ed7dbc6ad0636907693bbbdd3fdae1d73072963e71f5644b864bb10b4d", - "sha256:721c04d3c77c38086f1f95d1cd8df87f2f9a505a780acf8575912b3206479da1", - "sha256:8d5799243050c2833c2662b824dfb16aa98e408d2092805edea4300a408490e7", - "sha256:90cd441a1638ae176eab4d8b6b94ab4ec24b212ed4c3fbee2a6e74672481d4f8", - "sha256:a5dc9f28c0239ec2742d4273bd85b2aa84655be2564db7ad1eb8f64b1efcdc4c", - "sha256:b2f3e8cc52ecd259b94ca880fea0d15f4ebc6da2cd3db515389bb878d800270f", - "sha256:b7453750cf911785009423789d2e4e5393aae9cbb8b3f471dab854b85a26cb89", - "sha256:b99b2607b6cd58396f363b448cbe71d3c35e28f03e442ab00806463439629c2c", - "sha256:cd47793f7bc9285a88c2b5551d3f16a2ddd005789614a34c5f4a598c2a162383", - "sha256:d6bf085f6f9ec6a1724c187083b37b58a8048f86036d42d21802ed5d1fae4853", - "sha256:da737ab273f4d60ae552f82ad83f7cbd0e173ca30ca20b160f708c92742ee212", - "sha256:eb84e7e5b07ff3725ab05977ac56d5eeb0c510795aeb48e8b691491be3c5745b" - ], - "version": "==7.1.1" + "sha256:04766c4930c174b46fd72d450674612ab44cca977ebbcc2dde722c6933290107", + "sha256:0e2a3bceb0fd4e0cb17192ae506d5f082b309ffe5fc370a5667959c9b2f85fa3", + "sha256:0f01e63c34f0e1e2580cc0b24e86a5ccbbfa8830909a52ee17624c4193224cd9", + "sha256:12e4bad6bddd8546a2f9771485c7e3d2b546b458ae8ff79621214119ac244523", + "sha256:1f694e28c169655c50bb89a3fa07f3b854d71eb47f50783621de813979ba87f3", + "sha256:3d25dd8d688f7318dca6d8cd4f962a360ee40346c15893ae3b95c061cdbc4079", + "sha256:4b02b9c27fad2054932e89f39703646d0c543f21d3cc5b8e05434215121c28cd", + "sha256:9744350687459234867cbebfe9df8f35ef9e1538f3e729adbd8fde0761adb705", + "sha256:a0b49960110bc6ff5fead46013bcb8825d101026d466f3a4de3476defe0fb0dd", + "sha256:ae2b270f9a0b8822b98655cb3a59cdb1bd54a34807c6c56b76dd2e786c3b7db3", + "sha256:b37bb3bd35edf53125b0ff257822afa6962649995cbdfde2791ddb62b239f891", + "sha256:b532bcc2f008e96fd9241177ec580829dee817b090532f43e54074ecffdcd97f", + "sha256:b67a6c47ed963c709ed24566daa3f95a18f07d3831334da570c71da53d97d088", + "sha256:b943e71c2065ade6fef223358e56c167fc6ce31c50bc7a02dd5c17ee4338e8ac", + "sha256:ccc9ad2460eb5bee5642eaf75a0438d7f8887d484490d5117b98edd7f33118b7", + "sha256:d23e2aa9b969cf9c26edfb4b56307792b8b374202810bd949effd1c6e11ebd6d", + "sha256:eaa83729eab9c60884f362ada982d3a06beaa6cc8b084cf9f76cae7739481dfa", + "sha256:ee94fce8d003ac9fd206496f2707efe9eadcb278d94c271f129ab36aa7181344", + "sha256:f455efb7a98557412dc6f8e463c1faf1f1911ec2432059fa3e582b6000fc90e2", + "sha256:f46e0e024346e1474083c729d50de909974237c72daca05393ee32389dabe457", + "sha256:f54be399340aa602066adb63a86a6a5d4f395adfdd9da2b9a0162ea808c7b276", + "sha256:f784aad988f12c80aacfa5b381ec21fd3f38f851720f652b9f33facc5101cf4d" + ], + "version": "==7.1.2" }, "protobuf": { "hashes": [ @@ -374,6 +436,20 @@ ], "version": "==3.11.3" }, + "pyasn1": { + "hashes": [ + "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba" + ], + "version": "==0.4.8" + }, + "pyasn1-modules": { + "hashes": [ + "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", + "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74" + ], + "version": "==0.2.8" + }, "pyparsing": { "hashes": [ "sha256:67199f0c41a9c702154efb0e7a8cc08accf830eb003b4d9fa42c4059002e2492", @@ -404,6 +480,54 @@ ], "version": "==5.3.1" }, + "requests": { + "hashes": [ + "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee", + "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6" + ], + "version": "==2.23.0" + }, + "requests-oauthlib": { + "hashes": [ + "sha256:7f71572defaecd16372f9006f33c2ec8c077c3cfa6f5911a9a90202beb513f3d", + "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a" + ], + "version": "==1.3.0" + }, + "rsa": { + "hashes": [ + "sha256:14ba45700ff1ec9eeb206a2ce76b32814958a98e372006c8fb76ba820211be66", + "sha256:1a836406405730121ae9823e19c6e806c62bbad73f890574fff50efa4122c487" + ], + "version": "==4.0" + }, + "scipy": { + "hashes": [ + "sha256:00af72998a46c25bdb5824d2b729e7dabec0c765f9deb0b504f928591f5ff9d4", + "sha256:0902a620a381f101e184a958459b36d3ee50f5effd186db76e131cbefcbb96f7", + "sha256:1e3190466d669d658233e8a583b854f6386dd62d655539b77b3fa25bfb2abb70", + "sha256:2cce3f9847a1a51019e8c5b47620da93950e58ebc611f13e0d11f4980ca5fecb", + "sha256:3092857f36b690a321a662fe5496cb816a7f4eecd875e1d36793d92d3f884073", + "sha256:386086e2972ed2db17cebf88610aab7d7f6e2c0ca30042dc9a89cf18dcc363fa", + "sha256:71eb180f22c49066f25d6df16f8709f215723317cc951d99e54dc88020ea57be", + "sha256:770254a280d741dd3436919d47e35712fb081a6ff8bafc0f319382b954b77802", + "sha256:787cc50cab3020a865640aba3485e9fbd161d4d3b0d03a967df1a2881320512d", + "sha256:8a07760d5c7f3a92e440ad3aedcc98891e915ce857664282ae3c0220f3301eb6", + "sha256:8d3bc3993b8e4be7eade6dcc6fd59a412d96d3a33fa42b0fa45dc9e24495ede9", + "sha256:9508a7c628a165c2c835f2497837bf6ac80eb25291055f56c129df3c943cbaf8", + "sha256:a144811318853a23d32a07bc7fd5561ff0cac5da643d96ed94a4ffe967d89672", + "sha256:a1aae70d52d0b074d8121333bc807a485f9f1e6a69742010b33780df2e60cfe0", + "sha256:a2d6df9eb074af7f08866598e4ef068a2b310d98f87dc23bd1b90ec7bdcec802", + "sha256:bb517872058a1f087c4528e7429b4a44533a902644987e7b2fe35ecc223bc408", + "sha256:c5cac0c0387272ee0e789e94a570ac51deb01c796b37fb2aad1fb13f85e2f97d", + "sha256:cc971a82ea1170e677443108703a2ec9ff0f70752258d0e9f5433d00dda01f59", + "sha256:dba8306f6da99e37ea08c08fef6e274b5bf8567bb094d1dbe86a20e532aca088", + "sha256:dc60bb302f48acf6da8ca4444cfa17d52c63c5415302a9ee77b3b21618090521", + "sha256:dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59" + ], + "markers": "python_version >= '3'", + "version": "==1.4.1" + }, "six": { "hashes": [ "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", @@ -413,36 +537,31 @@ }, "tensorboard": { "hashes": [ - "sha256:53d8f40589c903dae65f39a799c2bc49defae3703754984d90613d26ebd714a4", - "sha256:b664fe7772be5670d8b04200342e681af7795a12cd752709aed565c06c0cc196" + "sha256:3a36da59d4e13fb140d04636aaf544f1a38364a7e3609a15cdaf01a5d3073b37" ], - "version": "==1.13.1" + "version": "==2.1.1" }, "tensorflow": { "hashes": [ - "sha256:0de5887495c20e1130ae4d9bcfaf80cec87f579a9c27a84141a588a46e5aa853", - "sha256:0f305f3c461ed2ce5e0b65fccc7b7452f483c7935dd8a52a466d622e642fdea8", - "sha256:4325f20b5a703b80a5f7a8807f07ad8735025bd2a947093ffff1c26fbdc7980b", - "sha256:4c86be0e476b64cedf4ffa059d71b764e75b895effb697345687e3057929a7b5", - "sha256:6b0a0a413390302ce7c22c98695983d6fb8406861cfb418b25536f57a96c0b89", - "sha256:77eec2351d0a9b5312ea01ee4c78c13996f249cf1bead2e68256a65e533f45ef", - "sha256:87bf719a564f11d63e4f614e933e5a612dd4e67c88266b774236e0982f5fcf69", - "sha256:ba29e66331cd2a8f824e0fa937ce44bd624bc37739f2f083694e473051d89ace", - "sha256:bc374f5a662b6e164cd1c4da61ccc752ec208a44893d2f9dcf47d2a0a2cef311", - "sha256:bcf86966b7554e407bb7d73341f2e108df62a910d40b4cd2a914867f2a5de51c", - "sha256:c3abffd51c168cfd62a557243c47a29ab48deb52a64465e6818060f20755ddb4", - "sha256:c41862c65628261229db22e33f9e570d845eeb5cea66dcbaebe404405edaa69b", - "sha256:d7341617aedd73c2c847755e87697e9c19eb625c73da26d6cd669220c5565119", - "sha256:de0425b58cb34006e4500565239b4c3a3055b95bff132f097fa46c87d8e463c9", - "sha256:f21fb65c8e874f40c654bc9b3ff3db3ec26f98f03fe64a541bc768f6f5c52ac2" - ], - "version": "==1.13.1" + "sha256:1cf129ccda0aea616b122f34b0c4bc39da959d34c4a4d8c23ed944555c5e47ab", + "sha256:2e8fc9764b7ea87687a4c80c2fbde69aeeb459a536eb5a591938d7931ab004c2", + "sha256:33e4b16e8f8905ee088bf8f413dcce2820b777fdf7f799009b3a47f354ebb23f", + "sha256:513d48dd751e0076d1b1e5e498e3522891305bedd2840f3cb4b1c57ffcb7d97d", + "sha256:5cfa729fc71f6f2dca0ea77ebe768ea293e723e22ecb086a0b3ab26cc1776e37", + "sha256:7bad8ea686a1f33d9dac13eb578c4597346789d4f826980c8bbcfbd08e7dc921", + "sha256:8c0fae0f9f772ed7e3370f1b286f88c27debbcf09468e5036670ea2c67e239ec", + "sha256:92c4f1c939de438fbe484d011e5eebe059fc8e5244cfe32a81c6891b3357d109", + "sha256:c420e70d4127c2ac00054aece54cf04a1a43d5d4f25de90267f247873f1bd5a8", + "sha256:e631f55cf30054fee3230c89a7f998fd08748aa3045651a5a760cec2c5b9f9d6", + "sha256:e877fbf373d5be42fb118269df1670b8d3c0df9be223904a2584a8f8ed23b082" + ], + "version": "==2.1.0" }, "tensorflow-estimator": { "hashes": [ - "sha256:7cfdaa3e83e3532f31713713feb98be7ea9f3065722be4267e49b6c301271419" + "sha256:e5c5f648a636f18d1be4cf7ed46132b108a2f0f3fd9f1c850eba924263dc6972" ], - "version": "==1.13.0" + "version": "==2.1.0" }, "termcolor": { "hashes": [ @@ -459,39 +578,30 @@ }, "torch": { "hashes": [ - "sha256:271d4d1e44df6ed57c530f8849b028447c62b8a19b8e8740dd9baa56e7f682c1", - "sha256:30ce089475b287a37d6fbb8d71853e672edaf66699e3dd2eb19be6ce6296732a", - "sha256:405b9eb40e44037d2525b3ddb5bc4c66b519cd742bff249d4207d23f83e88ea5", - "sha256:504915c6bc6051ba6a4c2a43c446463dff04411e352f1e26fe13debeae431778", - "sha256:54d06a0e8ee85e5a437c24f4af9f4196c819294c23ffb5914e177756f55f1829", - "sha256:6f2fd9eb8c7eaf38a982ab266dbbfba0f29fb643bc74e677d045d6f2595e4692", - "sha256:8856f334aa9ecb742c1504bd2563d0ffb8dceb97149c8d72a04afa357f667dbc", - "sha256:8fff03bf7b474c16e4b50da65ea14200cc64553b67b9b2307f9dc7e8c69b9d28", - "sha256:9a1b1db73d8dcfd94b2eee24b939368742aa85f1217c55b8f5681e76c581e99a", - "sha256:bb1e87063661414e1149bef2e3a2499ce0b5060290799d7e26bc5578037075ba", - "sha256:d7b34a78f021935ad727a3bede56a8a8d4fda0b0272314a04c5f6890bbe7bb29" + "sha256:3cc72d36eaeda96488e3a29373f739b887338952417b3e1620871063bf5d14d2", + "sha256:402951484443bb49b5bc2129414ac6c644c07b8378e79922cf3645fd08cbfdc9", + "sha256:6fcfe5deaf0788bbe8639869d3c752ff5fe1bdedce11c7ed2d44379b1fbe6d6c", + "sha256:7f3d6af2d7e2576b9640aa684f0c18a773efffe8b37f9056272287345c1dcba5", + "sha256:865d4bec21542647e0822e8b753e05d67eee874974a3937273f710edd99a7516", + "sha256:931b79aed9aba50bf314214be6efaaf7972ea9539a3d63f82622bc5860a1fd81", + "sha256:cb4412c6b00117ab5e014d07dac45b87f1e918e31fbb849e7e39f1f9140fff59", + "sha256:dfaac4c5d27ac80705956743c34fb1ab5fb37e1646a6c8e45f05f7e739f6ea7c", + "sha256:ecdc2ea4011e3ec04937b6b9e803ab671c3ac04e81b1df20354e01453e508b2f" ], - "version": "==1.4.0" + "version": "==1.5.0" }, "torchvision": { "hashes": [ - "sha256:0ca9cae9ddf1784737493e201aa9411abe62a4479b2e67d1d51b4b7acf16f6eb", - "sha256:1a68d3d98e074d995f3d42a492cca716b0d94605a6fadddf0ce9665425968669", - "sha256:1af6d7b0a515d2a83fe9b6e7969b57ba94ba87a3333e7ed707324a5be1ef5f60", - "sha256:2bf1dc1e16c73c5810d96e4ea463e61129e890100740cd57724413a84d301e41", - "sha256:323500d349d8d91ce2662de41212e8eb1845c68dbf5d4f215ca1e94c7f20723b", - "sha256:358967343eaba74fd748a87f40ea75ca23757e947dbef9a11cd53414d707f793", - "sha256:35e9483858cf8a38debc647c74741605c5c12448d314aa96961082380aadf7e5", - "sha256:4dd05cbc497210928ae3d4d6194561985263c879c3554e9f1823a0fa43d35746", - "sha256:517425af7d41b64caae0f5d9e6b14eeb48d6e62d45f302b73a11a9ec5ee3b6c8", - "sha256:78d455a1da7d10bd38f2e2a0d2ac285e4845c9e7e28aafdf068472cc96bd156b", - "sha256:9e85ba17ff93a0cf6afd39b9a0ad56ca7321db4f1eb90d2034d3b0ecd79be47b", - "sha256:a696ec5009eb52356508eb9b23ddb977043fb82ff7b204459e4c81aca1e5affe", - "sha256:aa4354d339de2c5ea2633a6c94294c68bae3e42a4b099624299e2a50c9e97a85", - "sha256:ec7e4cd54f5ff3a889b90f24b33da1fa9fe3f78d17348965678d9503de1e4a49", - "sha256:fea3d431bf639c0719afff5972eb568ebe143eba447c1c8bb491c7dfb0025ed6" - ], - "version": "==0.5.0" + "sha256:0ea04a7e0f64599c158d36da01afd0cb3bc49033d2a145be4eb80c17c4c0482b", + "sha256:0fa9e4a8381e5e04d0da0acd93f1429347053497ec343fe6d625b1b7fb2ce36e", + "sha256:691d68f3726b7392fe37db7184aef8a6b6f7cf6ff38fae769b287b3d6e1eb69a", + "sha256:6eb4e0d7dc61030447b98d412162f222a95d848b3b0e484a81282c057af6dd25", + "sha256:8992f10a7860e0991766a788b546d5f11e3e7465e87a72eb9c78675dd2616400", + "sha256:a9b08435fdadd89520a78f5a54d196c05878d1a15e37f760d43f72f10bae308f", + "sha256:ea39bed9e9497a67c5f66e37d3d5a663a0284868ae8616de81f65c66d9ad802b", + "sha256:f43dae3b348afa5778439913ba1f3f176362ffc9e684ef01dc54dae7cf1b82e4" + ], + "version": "==0.6.0" }, "typing-extensions": { "hashes": [ @@ -501,6 +611,13 @@ ], "version": "==3.7.4.2" }, + "urllib3": { + "hashes": [ + "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527", + "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115" + ], + "version": "==1.25.9" + }, "werkzeug": { "hashes": [ "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43", @@ -515,6 +632,12 @@ ], "markers": "python_version >= '3'", "version": "==0.34.2" + }, + "wrapt": { + "hashes": [ + "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7" + ], + "version": "==1.12.1" } }, "develop": { @@ -527,11 +650,11 @@ }, "astroid": { "hashes": [ - "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a", - "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42" + "sha256:29fa5d46a2404d01c834fcb802a3943685f1fc538eb2a02a161349f5505ac196", + "sha256:2fecea42b20abb1922ed65c7b5be27edfba97211b04b2b6abc6a43549a024ea6" ], "markers": "python_version >= '3'", - "version": "==2.3.3" + "version": "==2.4.0" }, "attrs": { "hashes": [ @@ -575,27 +698,20 @@ ], "version": "==0.16" }, - "entrypoints": { - "hashes": [ - "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", - "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" - ], - "version": "==0.3" - }, "flake8": { "hashes": [ - "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb", - "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca" + "sha256:c09e7e4ea0d91fa36f7b8439ca158e592be56524f0b67c39ab0ea2b85ed8f9a4", + "sha256:f33c5320eaa459cdee6367016a4bf4ba2a9b81499ce56e6a32abbf0b8d3a2eb4" ], "index": "pypi", - "version": "==3.7.9" + "version": "==3.8.0a2" }, "graphviz": { "hashes": [ - "sha256:241fb099e32b8e8c2acca747211c8237e40c0b89f24b1622860075d59f4c4b25", - "sha256:60acbeee346e8c14555821eab57dbf68a169e6c10bce40e83c1bf44f63a62a01" + "sha256:cb0e878f90378489f17aab140b68e64e44b79e4cb59a530c8863d84bf2e2e5f5", + "sha256:e104ba036c8aef84320ec80560e544cd3cad68c9f90394b4e2b87bc44ab09791" ], - "version": "==0.13.2" + "version": "==0.14" }, "idna": { "hashes": [ @@ -742,29 +858,29 @@ }, "numpy": { "hashes": [ - "sha256:0aa2b318cf81eb1693fcfcbb8007e95e231d7e1aa24288137f3b19905736c3ee", - "sha256:163c78c04f47f26ca1b21068cea25ed7c5ecafe5f5ab2ea4895656a750582b56", - "sha256:1e37626bcb8895c4b3873fcfd54e9bfc5ffec8d0f525651d6985fcc5c6b6003c", - "sha256:264fd15590b3f02a1fbc095e7e1f37cdac698ff3829e12ffdcffdce3772f9d44", - "sha256:3d9e1554cd9b5999070c467b18e5ae3ebd7369f02706a8850816f576a954295f", - "sha256:40c24960cd5cec55222963f255858a1c47c6fa50a65a5b03fd7de75e3700eaaa", - "sha256:46f404314dbec78cb342904f9596f25f9b16e7cf304030f1339e553c8e77f51c", - "sha256:4847f0c993298b82fad809ea2916d857d0073dc17b0510fbbced663b3265929d", - "sha256:48e15612a8357393d176638c8f68a19273676877caea983f8baf188bad430379", - "sha256:6725d2797c65598778409aba8cd67077bb089d5b7d3d87c2719b206dc84ec05e", - "sha256:99f0ba97e369f02a21bb95faa3a0de55991fd5f0ece2e30a9e2eaebeac238921", - "sha256:a41f303b3f9157a31ce7203e3ca757a0c40c96669e72d9b6ee1bce8507638970", - "sha256:a4305564e93f5c4584f6758149fd446df39fd1e0a8c89ca0deb3cce56106a027", - "sha256:a551d8cc267c634774830086da42e4ba157fa41dd3b93982bc9501b284b0c689", - "sha256:a6bc9432c2640b008d5f29bad737714eb3e14bb8854878eacf3d7955c4e91c36", - "sha256:c60175d011a2e551a2f74c84e21e7c982489b96b6a5e4b030ecdeacf2914da68", - "sha256:e46e2384209c91996d5ec16744234d1c906ab79a701ce1a26155c9ec890b8dc8", - "sha256:e607b8cdc2ae5d5a63cd1bec30a15b5ed583ac6a39f04b7ba0f03fcfbf29c05b", - "sha256:e94a39d5c40fffe7696009dbd11bc14a349b377e03a384ed011e03d698787dd3", - "sha256:eb2286249ebfe8fcb5b425e5ec77e4736d53ee56d3ad296f8947f67150f495e3", - "sha256:fdee7540d12519865b423af411bd60ddb513d2eb2cd921149b732854995bbf8b" - ], - "version": "==1.18.3" + "sha256:00d7b54c025601e28f468953d065b9b121ddca7fff30bed7be082d3656dd798d", + "sha256:02ec9582808c4e48be4e93cd629c855e644882faf704bc2bd6bbf58c08a2a897", + "sha256:0e6f72f7bb08f2f350ed4408bb7acdc0daba637e73bce9f5ea2b207039f3af88", + "sha256:1be2e96314a66f5f1ce7764274327fd4fb9da58584eaff00b5a5221edefee7d6", + "sha256:2466fbcf23711ebc5daa61d28ced319a6159b260a18839993d871096d66b93f7", + "sha256:2b573fcf6f9863ce746e4ad00ac18a948978bb3781cffa4305134d31801f3e26", + "sha256:3f0dae97e1126f529ebb66f3c63514a0f72a177b90d56e4bce8a0b5def34627a", + "sha256:50fb72bcbc2cf11e066579cb53c4ca8ac0227abb512b6cbc1faa02d1595a2a5d", + "sha256:57aea170fb23b1fd54fa537359d90d383d9bf5937ee54ae8045a723caa5e0961", + "sha256:709c2999b6bd36cdaf85cf888d8512da7433529f14a3689d6e37ab5242e7add5", + "sha256:7d59f21e43bbfd9a10953a7e26b35b6849d888fc5a331fa84a2d9c37bd9fe2a2", + "sha256:904b513ab8fbcbdb062bed1ce2f794ab20208a1b01ce9bd90776c6c7e7257032", + "sha256:96dd36f5cdde152fd6977d1bbc0f0561bccffecfde63cd397c8e6033eb66baba", + "sha256:9933b81fecbe935e6a7dc89cbd2b99fea1bf362f2790daf9422a7bb1dc3c3085", + "sha256:bbcc85aaf4cd84ba057decaead058f43191cc0e30d6bc5d44fe336dc3d3f4509", + "sha256:dccd380d8e025c867ddcb2f84b439722cf1f23f3a319381eac45fd077dee7170", + "sha256:e22cd0f72fc931d6abc69dc7764484ee20c6a60b0d0fee9ce0426029b1c1bdae", + "sha256:ed722aefb0ebffd10b32e67f48e8ac4c5c4cf5d3a785024fdf0e9eb17529cd9d", + "sha256:efb7ac5572c9a57159cf92c508aad9f856f1cb8e8302d7fdb99061dbe52d712c", + "sha256:efdba339fffb0e80fcc19524e4fdbda2e2b5772ea46720c44eaac28096d60720", + "sha256:f22273dd6a403ed870207b853a856ff6327d5cbce7a835dfa0645b3fc00273ec" + ], + "version": "==1.18.4" }, "packaging": { "hashes": [ @@ -775,30 +891,30 @@ }, "pillow": { "hashes": [ - "sha256:04a10558320eba9137d6a78ca6fc8f4a5801f1b971152938851dc4629d903579", - "sha256:0f89ddc77cf421b8cd34ae852309501458942bf370831b4a9b406156b599a14e", - "sha256:251e5618125ec12ac800265d7048f5857a8f8f1979db9ea3e11382e159d17f68", - "sha256:291bad7097b06d648222b769bbfcd61e40d0abdfe10df686d20ede36eb8162b6", - "sha256:2f0b52a08d175f10c8ea36685115681a484c55d24d0933f9fd911e4111c04144", - "sha256:3713386d1e9e79cea1c5e6aaac042841d7eef838cc577a3ca153c8bedf570287", - "sha256:433bbc2469a2351bea53666d97bb1eb30f0d56461735be02ea6b27654569f80f", - "sha256:4510c6b33277970b1af83c987277f9a08ec2b02cc20ac0f9234e4026136bb137", - "sha256:50a10b048f4dd81c092adad99fa5f7ba941edaf2f9590510109ac2a15e706695", - "sha256:670e58d3643971f4afd79191abd21623761c2ebe61db1c2cb4797d817c4ba1a7", - "sha256:6c1924ed7dbc6ad0636907693bbbdd3fdae1d73072963e71f5644b864bb10b4d", - "sha256:721c04d3c77c38086f1f95d1cd8df87f2f9a505a780acf8575912b3206479da1", - "sha256:8d5799243050c2833c2662b824dfb16aa98e408d2092805edea4300a408490e7", - "sha256:90cd441a1638ae176eab4d8b6b94ab4ec24b212ed4c3fbee2a6e74672481d4f8", - "sha256:a5dc9f28c0239ec2742d4273bd85b2aa84655be2564db7ad1eb8f64b1efcdc4c", - "sha256:b2f3e8cc52ecd259b94ca880fea0d15f4ebc6da2cd3db515389bb878d800270f", - "sha256:b7453750cf911785009423789d2e4e5393aae9cbb8b3f471dab854b85a26cb89", - "sha256:b99b2607b6cd58396f363b448cbe71d3c35e28f03e442ab00806463439629c2c", - "sha256:cd47793f7bc9285a88c2b5551d3f16a2ddd005789614a34c5f4a598c2a162383", - "sha256:d6bf085f6f9ec6a1724c187083b37b58a8048f86036d42d21802ed5d1fae4853", - "sha256:da737ab273f4d60ae552f82ad83f7cbd0e173ca30ca20b160f708c92742ee212", - "sha256:eb84e7e5b07ff3725ab05977ac56d5eeb0c510795aeb48e8b691491be3c5745b" - ], - "version": "==7.1.1" + "sha256:04766c4930c174b46fd72d450674612ab44cca977ebbcc2dde722c6933290107", + "sha256:0e2a3bceb0fd4e0cb17192ae506d5f082b309ffe5fc370a5667959c9b2f85fa3", + "sha256:0f01e63c34f0e1e2580cc0b24e86a5ccbbfa8830909a52ee17624c4193224cd9", + "sha256:12e4bad6bddd8546a2f9771485c7e3d2b546b458ae8ff79621214119ac244523", + "sha256:1f694e28c169655c50bb89a3fa07f3b854d71eb47f50783621de813979ba87f3", + "sha256:3d25dd8d688f7318dca6d8cd4f962a360ee40346c15893ae3b95c061cdbc4079", + "sha256:4b02b9c27fad2054932e89f39703646d0c543f21d3cc5b8e05434215121c28cd", + "sha256:9744350687459234867cbebfe9df8f35ef9e1538f3e729adbd8fde0761adb705", + "sha256:a0b49960110bc6ff5fead46013bcb8825d101026d466f3a4de3476defe0fb0dd", + "sha256:ae2b270f9a0b8822b98655cb3a59cdb1bd54a34807c6c56b76dd2e786c3b7db3", + "sha256:b37bb3bd35edf53125b0ff257822afa6962649995cbdfde2791ddb62b239f891", + "sha256:b532bcc2f008e96fd9241177ec580829dee817b090532f43e54074ecffdcd97f", + "sha256:b67a6c47ed963c709ed24566daa3f95a18f07d3831334da570c71da53d97d088", + "sha256:b943e71c2065ade6fef223358e56c167fc6ce31c50bc7a02dd5c17ee4338e8ac", + "sha256:ccc9ad2460eb5bee5642eaf75a0438d7f8887d484490d5117b98edd7f33118b7", + "sha256:d23e2aa9b969cf9c26edfb4b56307792b8b374202810bd949effd1c6e11ebd6d", + "sha256:eaa83729eab9c60884f362ada982d3a06beaa6cc8b084cf9f76cae7739481dfa", + "sha256:ee94fce8d003ac9fd206496f2707efe9eadcb278d94c271f129ab36aa7181344", + "sha256:f455efb7a98557412dc6f8e463c1faf1f1911ec2432059fa3e582b6000fc90e2", + "sha256:f46e0e024346e1474083c729d50de909974237c72daca05393ee32389dabe457", + "sha256:f54be399340aa602066adb63a86a6a5d4f395adfdd9da2b9a0162ea808c7b276", + "sha256:f784aad988f12c80aacfa5b381ec21fd3f38f851720f652b9f33facc5101cf4d" + ], + "version": "==7.1.2" }, "pluggy": { "hashes": [ @@ -816,17 +932,17 @@ }, "pycodestyle": { "hashes": [ - "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", - "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" + "sha256:933bfe8d45355fbb35f9017d81fc51df8cb7ce58b82aca2568b870bf7bea1611", + "sha256:c1362bf675a7c0171fa5f795917c570c2e405a97e5dc473b51f3656075d73acc" ], - "version": "==2.5.0" + "version": "==2.6.0a1" }, "pyflakes": { "hashes": [ - "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", - "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" + "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92", + "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8" ], - "version": "==2.1.1" + "version": "==2.2.0" }, "pygments": { "hashes": [ @@ -837,11 +953,11 @@ }, "pylint": { "hashes": [ - "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd", - "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4" + "sha256:588e114e3f9a1630428c35b7dd1c82c1c93e1b0e78ee312ae4724c5e1a1e0245", + "sha256:bd556ba95a4cf55a1fc0004c00cf4560b1e70598a54a74c6904d933c8f3bd5a8" ], "index": "pypi", - "version": "==2.4.4" + "version": "==2.5.0" }, "pyparsing": { "hashes": [ @@ -867,10 +983,10 @@ }, "pytz": { "hashes": [ - "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d", - "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be" + "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed", + "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048" ], - "version": "==2019.3" + "version": "==2020.1" }, "pyyaml": { "hashes": [ @@ -928,7 +1044,7 @@ "sha256:dc60bb302f48acf6da8ca4444cfa17d52c63c5415302a9ee77b3b21618090521", "sha256:dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59" ], - "index": "pypi", + "markers": "python_version >= '3'", "version": "==1.4.1" }, "six": { @@ -947,11 +1063,11 @@ }, "sphinx": { "hashes": [ - "sha256:3145d87d0962366d4c5264c39094eae3f5788d01d4b1a12294051bfe4271d91b", - "sha256:d7c6e72c6aa229caf96af82f60a0d286a1521d42496c226fe37f5a75dcfe2941" + "sha256:62edfd92d955b868d6c124c0942eba966d54b5f3dcb4ded39e65f74abac3f572", + "sha256:f5505d74cf9592f3b997380f9bdb2d2d0320ed74dd69691e3ee0644b956b8d83" ], "index": "pypi", - "version": "==3.0.2" + "version": "==3.0.3" }, "sphinx-autoapi": { "hashes": [ @@ -1003,6 +1119,13 @@ ], "version": "==1.1.4" }, + "toml": { + "hashes": [ + "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", + "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e" + ], + "version": "==0.10.0" + }, "typed-ast": { "hashes": [ "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355", @@ -1053,9 +1176,9 @@ }, "wrapt": { "hashes": [ - "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" + "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7" ], - "version": "==1.11.2" + "version": "==1.12.1" }, "zipp": { "hashes": [ diff --git a/setup.py b/setup.py index 1dac063d..a11f4f21 100644 --- a/setup.py +++ b/setup.py @@ -51,13 +51,13 @@ class _Develop(_CompileFlatbuffMixin, _develop): pass ]}, install_requires=[ 'Jinja2', - 'tensorflow==1.13.1', + 'tensorflow==2.1.0', + 'onnx', 'idx2numpy', 'attrs', 'click', 'torch', 'torchvision', - 'onnx-tf==1.2.1', 'graphviz', 'matplotlib', 'toml', diff --git a/tests/test_frontend/test_selector.py b/tests/test_frontend/test_selector.py index 5fa0f418..e070b365 100644 --- a/tests/test_frontend/test_selector.py +++ b/tests/test_frontend/test_selector.py @@ -1,8 +1,13 @@ -from utensor_cgen.frontend import FrontendSelector, Parser as _Parser +import pytest +from utensor_cgen.frontend import FrontendSelector +from utensor_cgen.frontend import Parser as _Parser -def test_select_parser(): + +def test_select_pb_parser(): FrontendSelector.select_parser('.pb') + +def test_select_onnx_parser(): FrontendSelector.select_parser('.onnx') def test_register(): diff --git a/tests/test_frontend/test_tensor_flow.py b/tests/test_frontend/test_tensor_flow.py deleted file mode 100644 index 5d4979db..00000000 --- a/tests/test_frontend/test_tensor_flow.py +++ /dev/null @@ -1,53 +0,0 @@ -import numpy as np -import tensorflow as tf - - -def test_scalar_shape(): - from utensor_cgen.frontend.tensorflow import GraphDefParser - - graph = tf.Graph() - with graph.as_default(): - tf.constant(1, dtype=tf.float32, name='x') - parser = GraphDefParser({}) - ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) - # shape of scalar tensor should be empty list - out_tensor = ugraph.ops_info['x'].output_tensors[0] - assert out_tensor.shape == [] - assert out_tensor.dtype is np.dtype('float32') - -def test_placeholder_shape(): - from utensor_cgen.frontend.tensorflow import GraphDefParser - - graph = tf.Graph() - with graph.as_default(): - tf.placeholder(dtype=tf.float32, name='x') - parser = GraphDefParser({}) - ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) - # nondeterministic shape, can be any shape - out_tensor = ugraph.ops_info['x'].output_tensors[0] - assert out_tensor.shape is None - assert out_tensor.dtype is np.dtype('float32') - - graph = tf.Graph() - with graph.as_default(): - tf.placeholder(dtype=tf.float32, name='x', shape=[None, 5]) - parser = GraphDefParser({}) - ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) - # nondeterministic dimension - out_tensor = ugraph.ops_info['x'].output_tensors[0] - assert out_tensor.shape == [None, 5] - assert out_tensor.dtype is np.dtype('float32') - -def test_normal_tensor_shape(): - from utensor_cgen.frontend.tensorflow import GraphDefParser - shape = np.random.randint(1, 10, size=(10,)).tolist() - - graph = tf.Graph() - with graph.as_default(): - tf.constant(np.random.rand(*shape), dtype=tf.float32, name='x') - parser = GraphDefParser({}) - ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) - # deterministic shape - out_tensor = ugraph.ops_info['x'].output_tensors[0] - assert out_tensor.shape == shape, 'expecting {}, get {}'.format(shape, out_tensor.shape) - assert out_tensor.dtype is np.dtype('float32') diff --git a/tests/test_graph_constructor/test_ops/conftest.py b/tests/test_graph_constructor/test_ops/conftest.py index 10ca60c4..0d5eead0 100644 --- a/tests/test_graph_constructor/test_ops/conftest.py +++ b/tests/test_graph_constructor/test_ops/conftest.py @@ -5,8 +5,3 @@ def _ugraph(): from utensor_cgen.ir import uTensorGraph return uTensorGraph(output_nodes=[]) - -@fixture(name='quant_trans') -def _quant_trans(): - from utensor_cgen.transformer.quantize import QuantizeTransformer - return QuantizeTransformer() diff --git a/tests/test_graph_constructor/test_ops/test_op_add.py b/tests/test_graph_constructor/test_ops/test_op_add.py index 970d0fe1..f69a29df 100644 --- a/tests/test_graph_constructor/test_ops/test_op_add.py +++ b/tests/test_graph_constructor/test_ops/test_op_add.py @@ -1,7 +1,7 @@ import numpy as np -def test_op_add(ugraph, quant_trans): +def test_op_add(ugraph): with ugraph.begin_construction(): tensor_x, = ugraph.add_op( op_type='Const', @@ -22,4 +22,3 @@ def test_op_add(ugraph, quant_trans): ) assert tensor_z.shape == [1, 3, 5] - quant_trans.transform(ugraph) diff --git a/tests/test_graph_constructor/test_ops/test_op_argmax.py b/tests/test_graph_constructor/test_ops/test_op_argmax.py index d31f4ad1..375b1895 100644 --- a/tests/test_graph_constructor/test_ops/test_op_argmax.py +++ b/tests/test_graph_constructor/test_ops/test_op_argmax.py @@ -1,7 +1,7 @@ import numpy as np -def test_op_argmax(ugraph, quant_trans): +def test_op_argmax(ugraph): with ugraph.begin_construction(): tensor_logits, = ugraph.add_op( np.random.rand(3, 5, 7).astype('float32'), @@ -28,4 +28,3 @@ def test_op_argmax(ugraph, quant_trans): assert tensor_out1.dtype == np.dtype('int32') assert tensor_out2.shape == [3, 5] assert tensor_out2.dtype == np.dtype('int64') - quant_trans.transform(ugraph) diff --git a/tests/test_graph_constructor/test_ops/test_op_const.py b/tests/test_graph_constructor/test_ops/test_op_const.py index 33499c93..4b1cab18 100644 --- a/tests/test_graph_constructor/test_ops/test_op_const.py +++ b/tests/test_graph_constructor/test_ops/test_op_const.py @@ -1,7 +1,7 @@ import numpy as np -def test_op_const(ugraph, quant_trans): +def test_op_const(ugraph): with ugraph.begin_construction(): out_tensor, = ugraph.add_op( op_type='Const', @@ -11,4 +11,3 @@ def test_op_const(ugraph, quant_trans): ) assert out_tensor.shape == [3, 3] - quant_trans.transform(ugraph) diff --git a/tests/test_graph_constructor/test_ops/test_op_conv2d.py b/tests/test_graph_constructor/test_ops/test_op_conv2d.py index 7af35bfd..b2ddd99b 100644 --- a/tests/test_graph_constructor/test_ops/test_op_conv2d.py +++ b/tests/test_graph_constructor/test_ops/test_op_conv2d.py @@ -1,7 +1,7 @@ import numpy as np -def test_op_conv2d(ugraph, quant_trans): +def test_op_conv2d(ugraph): with ugraph.begin_construction(): tensor_x, = ugraph.add_op( np.random.rand(10, 512, 512, 5), @@ -24,4 +24,3 @@ def test_op_conv2d(ugraph, quant_trans): is_output=True ) assert out.shape == [10, 256, 256, 10] - quant_trans.transform(ugraph) diff --git a/tests/test_graph_constructor/test_ops/test_op_matmul.py b/tests/test_graph_constructor/test_ops/test_op_matmul.py index bc309828..bfd5d442 100644 --- a/tests/test_graph_constructor/test_ops/test_op_matmul.py +++ b/tests/test_graph_constructor/test_ops/test_op_matmul.py @@ -1,7 +1,7 @@ import numpy as np -def test_op_matmul(ugraph, quant_trans): +def test_op_matmul(ugraph): with ugraph.begin_construction(): tensor_x, = ugraph.add_op( op_type='Const', @@ -21,4 +21,3 @@ def test_op_matmul(ugraph, quant_trans): ) assert tensor_z.shape == [3, 4] - quant_trans.transform(ugraph) diff --git a/tests/test_graph_constructor/test_ops/test_op_max.py b/tests/test_graph_constructor/test_ops/test_op_max.py index 4f6d562b..2311ae1c 100644 --- a/tests/test_graph_constructor/test_ops/test_op_max.py +++ b/tests/test_graph_constructor/test_ops/test_op_max.py @@ -1,7 +1,7 @@ import numpy as np -def test_op_max(ugraph, quant_trans): +def test_op_max(ugraph): with ugraph.begin_construction(): tensor_x, = ugraph.add_op( np.random.rand(3, 5, 9, 2).astype('float32'), @@ -35,4 +35,3 @@ def test_op_max(ugraph, quant_trans): assert tensor_out1.shape == [1, 5, 9, 2] assert tensor_out2.shape == [3, 1, 9, 2] assert tensor_out3.shape == [3, 5, 9] - quant_trans.transform(ugraph) diff --git a/tests/test_graph_constructor/test_ops/test_op_maxpool.py b/tests/test_graph_constructor/test_ops/test_op_maxpool.py index 10593ceb..0bf3964e 100644 --- a/tests/test_graph_constructor/test_ops/test_op_maxpool.py +++ b/tests/test_graph_constructor/test_ops/test_op_maxpool.py @@ -1,7 +1,7 @@ import numpy as np -def test_op_maxpool(ugraph, quant_trans): +def test_op_maxpool(ugraph): with ugraph.begin_construction(): tensor_x, = ugraph.add_op( np.random.rand(10, 256, 256, 5), @@ -20,4 +20,3 @@ def test_op_maxpool(ugraph, quant_trans): is_output=True ) assert tensor_out.shape == [10, 128, 128, 5] - quant_trans.transform(ugraph) diff --git a/tests/test_graph_constructor/test_ops/test_op_min.py b/tests/test_graph_constructor/test_ops/test_op_min.py index 82c47038..2b148d23 100644 --- a/tests/test_graph_constructor/test_ops/test_op_min.py +++ b/tests/test_graph_constructor/test_ops/test_op_min.py @@ -1,7 +1,7 @@ import numpy as np -def test_op_min(ugraph, quant_trans): +def test_op_min(ugraph): with ugraph.begin_construction(): tensor_x, = ugraph.add_op( np.random.rand(3, 5, 9, 2).astype('float32'), @@ -35,4 +35,3 @@ def test_op_min(ugraph, quant_trans): assert tensor_out1.shape == [1, 5, 9, 2] assert tensor_out2.shape == [3, 1, 9, 2] assert tensor_out3.shape == [3, 5, 9] - quant_trans.transform(ugraph) diff --git a/tests/test_graph_constructor/test_ops/test_op_relu.py b/tests/test_graph_constructor/test_ops/test_op_relu.py index 878cf758..8b838d5a 100644 --- a/tests/test_graph_constructor/test_ops/test_op_relu.py +++ b/tests/test_graph_constructor/test_ops/test_op_relu.py @@ -1,7 +1,7 @@ import numpy as np -def test_op_relu(ugraph, quant_trans): +def test_op_relu(ugraph): with ugraph.begin_construction(): tensor_x, = ugraph.add_op( op_type='Const', @@ -15,4 +15,3 @@ def test_op_relu(ugraph, quant_trans): is_output=True ) assert out.shape == [3, 5] - quant_trans.transform(ugraph) diff --git a/tests/test_ir/__init__.py b/tests/test_ir/__init__.py index 5b059508..b05419d3 100644 --- a/tests/test_ir/__init__.py +++ b/tests/test_ir/__init__.py @@ -1 +1,4 @@ import ortools.sat.python.cp_model as _ +import tensorflow.compat.v1 as _tf + +_tf.disable_v2_behavior() diff --git a/tests/test_ir/test_AttrValueConverter/conftest.py b/tests/test_ir/test_AttrValueConverter/conftest.py index ba22cf7c..c6cd7171 100644 --- a/tests/test_ir/test_AttrValueConverter/conftest.py +++ b/tests/test_ir/test_AttrValueConverter/conftest.py @@ -1,5 +1,5 @@ import pytest -from tensorflow import AttrValue, NameAttrList +from tensorflow.compat.v1 import AttrValue, NameAttrList @pytest.fixture(scope='session') diff --git a/tests/test_ir/test_TensorProtoConverter/test_converter.py b/tests/test_ir/test_TensorProtoConverter/test_converter.py index 867f61b6..49966646 100644 --- a/tests/test_ir/test_TensorProtoConverter/test_converter.py +++ b/tests/test_ir/test_TensorProtoConverter/test_converter.py @@ -5,7 +5,7 @@ def test_generic_array(generic_array): tf_value = TensorProtoConverter.get_tf_value(generic_array) - assert isinstance(tf_value, TensorProtoConverter.__tfproto_type__) + assert type(tf_value).__name__ == TensorProtoConverter.__tfproto_type__.__name__ generic = TensorProtoConverter.get_generic_value(tf_value) assert isinstance(generic, type(generic_array)) assert (generic.np_array == generic_array.np_array).all() diff --git a/tests/test_matcher/test_permutation/conftest.py b/tests/test_matcher/test_permutation/conftest.py index 71cb1713..51a89666 100644 --- a/tests/test_matcher/test_permutation/conftest.py +++ b/tests/test_matcher/test_permutation/conftest.py @@ -1,5 +1,5 @@ import pytest -import tensorflow as tf +import tensorflow.compat.v1 as tf from utensor_cgen.frontend.tensorflow import GraphDefParser diff --git a/tests/test_matcher/test_replace/conftest.py b/tests/test_matcher/test_replace/conftest.py index e212a332..4a510978 100644 --- a/tests/test_matcher/test_replace/conftest.py +++ b/tests/test_matcher/test_replace/conftest.py @@ -1,5 +1,5 @@ import numpy as np -import tensorflow as tf +import tensorflow.compat.v1 as tf from pytest import fixture from utensor_cgen.frontend.tensorflow import GraphDefParser diff --git a/tests/test_matcher/test_replace/test_replace.py b/tests/test_matcher/test_replace/test_replace.py index 4ca546d3..59410708 100644 --- a/tests/test_matcher/test_replace/test_replace.py +++ b/tests/test_matcher/test_replace/test_replace.py @@ -1,4 +1,5 @@ -import tensorflow as tf +import tensorflow.compat.v1 as tf + # FIXME: remove uTensorOpEqualityDelegate import after we have generic op_eq_deleate from utensor_cgen.backend.utensor.code_generator.legacy._operators import \ uTensorOpEqualityDelegate diff --git a/tests/test_transformer/__init__.py b/tests/test_transformer/__init__.py index 5b059508..b05419d3 100644 --- a/tests/test_transformer/__init__.py +++ b/tests/test_transformer/__init__.py @@ -1 +1,4 @@ import ortools.sat.python.cp_model as _ +import tensorflow.compat.v1 as _tf + +_tf.disable_v2_behavior() diff --git a/tests/test_transformer/test_convpool/conftest.py b/tests/test_transformer/test_convpool/conftest.py index dd3d7d68..0d18a7d3 100644 --- a/tests/test_transformer/test_convpool/conftest.py +++ b/tests/test_transformer/test_convpool/conftest.py @@ -1,7 +1,7 @@ from random import sample import numpy as np -import tensorflow as tf +import tensorflow.compat.v1 as tf from pytest import fixture from utensor_cgen.frontend.tensorflow import GraphDefParser diff --git a/tests/test_transformer/test_convpool/test_vgg.py b/tests/test_transformer/test_convpool/test_vgg.py index f9af19c1..9efecd63 100644 --- a/tests/test_transformer/test_convpool/test_vgg.py +++ b/tests/test_transformer/test_convpool/test_vgg.py @@ -1,7 +1,10 @@ +import pytest + from utensor_cgen.transformer.pipeline import TransformerPipeline def factory(): + @pytest.mark.deprecated def test(vgg_ugraph): trans = TransformerPipeline([ 'linear_reorder', diff --git a/tests/test_transformer/test_dropout/conftest.py b/tests/test_transformer/test_dropout/conftest.py index a0c685c7..32f5851f 100644 --- a/tests/test_transformer/test_dropout/conftest.py +++ b/tests/test_transformer/test_dropout/conftest.py @@ -2,10 +2,12 @@ import numpy as np import pytest -import tensorflow as tf -from utensor_cgen.frontend.tensorflow import GraphDefParser -from utensor_cgen.utils import random_str +import tensorflow.compat.v1 as tf # isort:skip +tf.disable_v2_behavior() # isort:skip + +from utensor_cgen.frontend.tensorflow import GraphDefParser # isort:skip +from utensor_cgen.utils import random_str # isort:skip @pytest.fixture(scope='session', name='droput_graph_tuple') diff --git a/tests/test_transformer/test_dropout/test_dropout_transormer.py b/tests/test_transformer/test_dropout/test_dropout_transormer.py index 3e9d554a..9601ee44 100644 --- a/tests/test_transformer/test_dropout/test_dropout_transormer.py +++ b/tests/test_transformer/test_dropout/test_dropout_transormer.py @@ -1,4 +1,5 @@ -import tensorflow as tf +import tensorflow.compat.v1 as tf + from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.transformer.ns_transformer import (DropoutTransformer, DropoutTransformerV2) diff --git a/tests/test_transformer/test_linear_reorder/conftest.py b/tests/test_transformer/test_linear_reorder/conftest.py index 7209afbe..bcdaae6f 100644 --- a/tests/test_transformer/test_linear_reorder/conftest.py +++ b/tests/test_transformer/test_linear_reorder/conftest.py @@ -1,4 +1,4 @@ -import tensorflow as tf +import tensorflow.compat.v1 as tf from pytest import fixture from utensor_cgen.frontend.tensorflow import GraphDefParser diff --git a/tests/test_transformer/test_pipeline/conftest.py b/tests/test_transformer/test_pipeline/conftest.py index a71cf887..1b3795e0 100644 --- a/tests/test_transformer/test_pipeline/conftest.py +++ b/tests/test_transformer/test_pipeline/conftest.py @@ -3,7 +3,7 @@ import pytest from utensor_cgen.transformer import (BatchNormTransformer, DropoutTransformer, - QuantizeTransformer, RefCntOptimizer) + RefCntOptimizer) @pytest.fixture(scope='function', name='methods') @@ -11,7 +11,6 @@ def pipeline_methods(): all_methods = [ BatchNormTransformer.METHOD_NAME, DropoutTransformer.METHOD_NAME, - QuantizeTransformer.METHOD_NAME, RefCntOptimizer.METHOD_NAME, ] shuffle(all_methods) diff --git a/utensor_cgen/frontend/onnx.py b/utensor_cgen/frontend/onnx.py index 92e735c7..c2691e50 100644 --- a/utensor_cgen/frontend/onnx.py +++ b/utensor_cgen/frontend/onnx.py @@ -1,12 +1,14 @@ import os import re from collections import Counter +from numbers import Number import numpy as np import onnx -import tensorflow as tf +import tensorflow.compat.v1 as tf +from onnx import mapping, numpy_helper from onnx.onnx_pb import TensorProto -from onnx_tf.backend import TensorflowBackend, prepare + from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser from utensor_cgen.ir import OperationInfo, TensorInfo, uTensorGraph @@ -26,7 +28,38 @@ def _convert_op_attribute(attrib_pb): elif attrib_pb.HasField('s'): return attrib_pb.s else: - raise ValueError('Unknown attribute value: {}'.format(attrib_pb)) + raise ValueError('Unknown attribute value: {}'.format(attrib_pb)) + +# I stole these code snippets from [onnx-tf](https://github.com/onnx/onnx-tensorflow) +# I have to do so since TF2.0 fuck up onnx-tf's backend +def _onnx_dtype(dtype): + if isinstance(dtype, Number): + onnx_dype = dtype + elif isinstance(dtype, str): + onnx_dype = TensorProto.DataType.Value(dtype) + else: + raise RuntimeError("dtype should be number or str.") + return onnx_dype + +def onnx2tf(dtype): + return tf.as_dtype(mapping.TENSOR_TYPE_TO_NP_TYPE[_onnx_dtype(dtype)]) + +def _onnx_initializer_to_input_dict_items(initializer): + """ Convert ONNX graph initializer to input dict items. + + :param initializer: ONNX graph initializer, list of TensorProto. + :return: List of input dict items. + """ + def tensor2list(onnx_tensor): + # Use the onnx.numpy_helper because the data may be raw + return numpy_helper.to_array(onnx_tensor).flatten().tolist() + + return [(init.name, + tf.constant( + tensor2list(init), + shape=init.dims, + dtype=onnx2tf(init.data_type))) + for init in initializer] @FrontendSelector.register(target_exts=['.onnx']) @@ -81,7 +114,7 @@ def _build_param_ops(self, onnx_graph, ugraph, op_types_cnt, tensor_names_map): # find Const ops params_dict = {} # FIXME: avoid using internal api of other library - dict_items = TensorflowBackend._onnx_initializer_to_input_dict_items(onnx_graph.initializer) + dict_items = _onnx_initializer_to_input_dict_items(onnx_graph.initializer) for name, tf_tensor in dict_items: params_dict[name] = AttrValueConverter.GenericType( value_name='value', From 1d6e3c76150811be011dd90ba526224631b7afbb Mon Sep 17 00:00:00 2001 From: dboyliao Date: Mon, 4 May 2020 17:13:00 +0800 Subject: [PATCH 108/117] add tests --- tests/test_frontend/conftest.py | 9 ++++ tests/test_frontend/model_files/model.onnx | Bin 0 -> 1876050 bytes tests/test_frontend/test_onnx.py | 11 +++++ tests/test_frontend/test_tensorflow.py | 53 +++++++++++++++++++++ 4 files changed, 73 insertions(+) create mode 100644 tests/test_frontend/model_files/model.onnx create mode 100644 tests/test_frontend/test_onnx.py create mode 100644 tests/test_frontend/test_tensorflow.py diff --git a/tests/test_frontend/conftest.py b/tests/test_frontend/conftest.py index 909f17c1..840f530c 100644 --- a/tests/test_frontend/conftest.py +++ b/tests/test_frontend/conftest.py @@ -11,3 +11,12 @@ def tflm_mnist_path(): 'quant_mnist_cnn.tflite' ) return model_path + +@pytest.fixture(name='onnx_model_path', scope='session') +def onnx_model_path(): + model_path = os.path.join( + os.path.dirname(__file__), + 'model_files', + 'model.onnx' + ) + return model_path diff --git a/tests/test_frontend/model_files/model.onnx b/tests/test_frontend/model_files/model.onnx new file mode 100644 index 0000000000000000000000000000000000000000..c449cf1dde4b8739ee8766d51896543ffdb341ef GIT binary patch literal 1876050 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�QIUUeFg9W$_)`^40kGz0uIQHJ@I#cZ2xPgCNT9vn1-lH&Lxw z3H<(7mD{oYA?Q|?;F4`GSucRy2yo|IIv7cPa2O7gR7K@e`S_ zDFx+)M@E@7EJDvzBDh1<%}sXh^d?X zrFthMIm_}>#Hs9e+k-W-Iw)n?3RO`83|$)qj>r7S_^@~Mt)(0%e1C>WXQWFuR>*Ss z14+b!V{=|m6D=mBImM~fjDZu(n6haiU9loI>)gb!=OaNV@uD4zJJHl*zG#+V669sGbI*A<5#(M# z%@ZP=)%Y2dZTe`*O)t9RJL|?1iBLz_0m30y33R?h)3P_BI_Z9}JnaKzdUCv`(I3!v zI426h_t>_f32$HTfmRYsiJ~$;Gm?3WykA4nx>sQ3?1^PVWH6!M16^2l!TVD>==C4K zQR$}$7%O(K_TCqp@8IE_&qe=}z*6*kbVIOQD?A>XoF`I%>7n^7a$%?by5RSU>VN&tg5wZwc$GL3rBB#Kd&LEZD^=r`0GRuu~PlpCq& z@=$~hzsI7k@m_R19SOi$rDHW$7i}#1UyEHk0 z`jbq1$t3VeFN1_Js@Sz;76y%Ex{U1v?78NGYxqt$*rkp+{VkxdH59!}bhzPWmoZ{W z4J{hnh|lsBdGpW`bPqlcy}h@f#+GFl;@_Z<&C+#~?a7;`H&LCt5AKY|Qgb^S1-*&;EcN`|Y+O5FEDRuK41mCM(d1^u?yu6MC3<0V8ycZ z#c`4j48wQ_Gw|?ctiJgp$>raBK_Fjc+@Ep~{UbH_)3&jg{&O#=54nn4Zxw^yg=dVH zC&R109*#@@c!J?!vcg%G?s>BiY1KD!N%k zFn+57h||1?kgFysk!#4beazQCWGwwWO^bV%)d15$ix-=vVabk*B-FGIrp7a`r*Ryt zJ$4R#TQpea9ySs17eVtpN7ux)h0Z%y50V^pzE*%(_je2UlrSxAZ2-0&cuKn0Gf#lRbC$2kMwb=WvB@-# z+L-5J)zy<|G~OR>r?o;9=YTkK6R2lbg8Isj7Vp?^Km%1O-?~K`xUJ7^ROtq z(i>Zis-Wq?Sr8bG&9qW`hZc_MU~oJLLdq4m)S>m@>t9OB?vBRJxjb>3Qh_zW@m5so`pC~QW?LwnBMQq>8Jkf&{Nb8rU?v}dgCk~J*+Ss2k*ci=E$FgRenmG;n5dxavt+fs+!O!w_Z{2 zBp$X?b?)w7P0l(y4;Pon@oc=8Lcz%t44>72zIU#YuYKy=;)TJWSKN(`2Xer= znt72H`GQ=08!Cv)aLBW8G`FWOskUl)uvE-&#T;~wX=9%s9cH^lMd4>DURnDNkqGM&t9(RJ4ZdS}lwj8Ym) zRkVd%@{$PfmGPxT%Eb`z&p9k!$9f^XJ7DNQAIrV0MW++5SYP=9V#~jw#urCnu4)XL z+?3-AW0GNsrvx93kU&Dr0UTT00eVM&;kw@gbOPgNg&x!7?bIHj)c*>ON=$^2^(wrC z?Y{;8YG7y18|a$51KlkHLEw}k=}cb?b(MBBzepEKye`1&l}-4}O@h}0&=^VyKXm1yO*N1jT_awas;(%8Ry$eMTBU=U zTkfHRYXF__HE3<_NFBSc5@Q7qtV0s3ij1*F`Vq(Q>Lcc3p3T^83x$ zd42?~*tH0rhbwTlmSNbmE0?Z4@&&u^DewU+rl9hkU~0Y9jkt_7MZ3kviPMnln5$5T z9vj!AxtRq-^j`yAHdlntI}f@?-ayGE3ddM)tE=uMJZfJD5xz(rUhv>wl7_q06u1(; z0u`6D^G8JseeH^gPyYZ2TIUU=9ySCKxQZEYl6(-eB1e|8TCe)dE z8*G&FL14ZQriBflzrrJ!VwDI5rNb~{D?8t3Btp%_An>0RimvlK>C5|yyydP|bnLoJ z=57c^7nW_5E-hjm&H-dVtsL|2A4VsWbi6!j5$FX+g5UJ#klZ{8GgdSG`LQA~*s8z> z@8!^{9`MlIGJJPei+4Wn1AD5~IF}r6bU*$8v%>%4>4IDM$w!7OcV_%#t5)#z(&7zc z<1l2B3?Epj!WYc;XEWSuy!Bp-s~M(+QtPAGsNRgPm4cY}bTWv05>1R^R+5hij5)mc zHW@pp0hIr;^LEe6%vm`sk5|IFkt@dHG5Hww&Ra%b&5-2_#qnUM(1iVSjX^gxkeD*2 zU+3qGV6k*6=2wjevj{bQkVgl8=VkeE-E}CPHbPYOayS|sZzO^(oswrB@r+e#fUX#b zwj=zon%CsoC$p|3#uHjEtU|{}?}9$CJBlPX`A<0}zgRN>zZ z*5dtFe@5Gj19W#^2We9s$%5wdiCZe@THRKsIK}O9m6o&;9>{EuC znp%3>;uFMHYw&fk6QKJ^6#DA>k*=)`Ad)14I4|7f*Cl^65>JI=`Zo|gb=z-Mg3!3$SFSJB>Kxfl)h>B%?AeqPvjsb*G($eL?cP`uS&2v{WCx z6WU?;FvitgeqFNZS_oFBuq^Yjv1CUtR--v>2*OB1*n=r48Y1QF( za7R%y=x>=rM4#9mV;194d;g1qFwVvqkMy8RcRWY%jiy}Jb9mL>Gu zn}-{+gTdQ&0OmZffp=e%(8YKTmMpjphF|+}O2r#6vfo1kju+vOp{%Ry{cH65{RhTx zE2TSBa-sFkD7d^-kMZp_sZ+u|&^K#BgP;_!^YkP(SqbE$YYpU|x&<~GwisKj#9v;5Xo-fpQ#*)n92v59-oT%sZjUcLxZ0aWoLwLs>9FpK%G<&n+ zPLckLVHs(#VOlvnH`e6zx}T%lfIV(nQilKUiXFRF0^j$_@unl*VL%kYSz1cid9RRq zsy&3xllwtjm54p(pX1|Cryp+0S|t9sa2TN9jvEB4|hRx-{bbUptsT z{EKt*GjV|B_Dj;LNy)i0EL&yI{DUv>oUAtQzxf8(amRU!1=Z^Od>l3|KW4vdfP zrQ-Jz#)N$iHNspJq`GH{udSEVkCo%BLPub)Zy`Eg%Ld`*TbME0k6QfD!186<+_K@H z!Opo90=_HryBc3$^vMqx^?m|sztQ9j*R`?v?;b?OP9hnnUD5Q6pUB_uDvq1_9``R- z!@RdJ5E_EeWq~er9%%Ks5F4D6Ku#qC4g17++Uh%YZs?_! zYZI}5b0H3{`49B!9)pj~VyqgQNbXELjT4v_B0juAbcZxz*dlqprg=Ij^or5`#zU(8 z;}`QJJj1#}D2hp&0)wLzm|nA-T2In}E`P@7EK)`53DHot>J^xOegqMf`|<35KA3ap z6PRyFB0cqyr1li+Cwp6u`G;15qfaK}{u7R)R9=Dfz9m?aEJ*%ki_zM(SbOgy9Ewrk zqUTT}Ps|_- zX0|{|>K#(@#e?W~eUwaOUXNp+f-q#qUyLY7rTzK{G4h;SPs#eLUuMi{Y+sJ0%h6BVkR+$$LIMdl1 zyjd5G6Y0n)MfbyX@Jv~jt6cgBGQuxH&9=>;|M)n){D1ybR2lr|!SaN1OTlL54RX|? z32xu12DkNv#ILRnr`=QHgT5J%{3Rl=jVh|3Q%mtWC zz<$pe?0rx`&V_4o5!p`IwMq%S&i|jukxcX%>r9Mislm1L)cnhJGIY#!SRJd*MUN`R z!&j$+V3eUq>B9}=H*0b!Ywd~cp=L~4U53Wr=VIsRtE3@`arHJa#&&%cx?N1B8CExl z#q|65W0@MCs@V^7^%ythcNgP2{6Wd=R;(Tna-AEi$U(~x$p3Mh?IWXMC>I8G(UGw0 zP6?XZe8J!{BXk;m7X|Ml@ZlhNKEqiDKCIB<8g_TVqFZgK7gvS4{U=b6?{2Iw!`|^f zQBW{kP_abF+Ae+(iGPkw?=!Fw=byAORYGwSg<6guWyfdJ=UjN2iE33b}sr?*O+ z>GgC`$I~#DTX2AwkxF1~?m%*~n!%`HIk7o-40_r$&}`L56dziL>2c@5`BfY9MjXqy zUCKPU%$HU?U4?Vq7eNiR7i03mpHMXA2U_UP#_7|PdFk$LB0I(i6hxWg!0b0D*f7#W zalSbk%<~}ylt+snP55Yh5=533gH>xImQ3`fX7;{lexZTrizxr-#e?tG zqEWvcfdxun;T(kGPED$R`5=8eUV*dgk%yTMOov`-0qyZ$7>DO3y7D{dkkRa6?j$=2cL5E@;NK>Dq#rspJ`8f@@uDgz5 z<^Ck&YY*DRPDJU5R64_4le@Z<@inKget7v_GI4GqlqCH}J8R0|qrN@DzZ;=s$zsxJ zsN`C5ATI_ZXq;3>j{2bl?VFr@?aD> z6s&vK5otpy8XQa@Xzl?S)fMFRx;}K%>LT_9^8Bd3c^Gk$r&i;};7{l4@JPbG8&A(b zK1rpCx;jAUIJknPs#M zv(>+0iQQ-7Q$G$>54U5yU=2)X+1w6;NDNrgj;@nSa9RFcST_F^xc0=;NZ&;GIk6sG zNg+u{8;x}@OC?c3Pv&-3gNbk(~93x<>L zf%SnZVlaX2T~=CWm6co%+IufYeuPXW>Q zK$v#mHpQQkm2{7@BG-QV0mwx(Ft(vJIxM$FBl$cse(Xb< z-n;?C^Fv74A?A4Ea~653+DR^ImMf|VB!!(KEFJRq|M92+QX3mmcA%n z|2lKzAr)RQ*_PI5?7-P!H5eiPfabF90{;UKP%x^B)~@LU>z(?#s>ptU|wMd3PyT&kDpHW}%FVzgF2D|BTcr#F)8y{XsyL+CasY$=ccmD}6#@kTR z$oe`xk3(ln6kUDr6RuU2=ge2iLvgAa7sH+l9LxMqhVJLJ7D z3|*kn!r*UOyhrRq7+)+0et*X?_ThOj{rr;NalDC!txGXIkj-Dr1HmLX+%@e35@Quk z_VhbQd!)`d1y>+qX%`+GnFwtvJb2%J4|i<*(Y4xwq}u1P{oG&4!zLe`x`LgnNypJ5 zeJ(0&zKUVft>Am1G9NU48GRQJ36kp{aN5{QsA|l(84=2St#>c$@P0>Af(A&_ux2`F zmK^8pegmup8CbK9p{+-U!lWQgzH#hl%+YU$b*jqXaBwXKU*C&aM;kDB<6n5Ut{rXn zYhuOHWAH1Q>DX-!1WIGUdRGVWW`3`Y)8x1-i9To}yBB-ZI5b_GOX?DJiP52GTyaR7 z%d)->X=I z=Q`MVvk7&FOP4|;{UqGniO8nQfVzT=Ws4J$Tc|U%F)wcpLhd(6cj3+!}nw8$rWoYoV40St3 zOlI|Db>$ICp^IeZ3i+*@^ zM4NNm$8?=2M@iQa#;nnpJgv=pe)$S%%(ItpCJ-uo zjxgri6p{QDImVeCON$(&xS*&FEk+42c>?Qzaf*eyU8QK+^@kLmya->|-GAK9=h)XM z$GK)^(WmF_y4gx(q0d+Yv6C_Wr3w_aQFLY*uLb@A z_^7B5{N!V?PIWN}2xc9Lt&d1+jWVxT-3FfD9zaqm4?ng4!0W$WIO};fsDEZ&`?JNk zGo58z517L;Q+pH~?V|F7lz7F_D_9QP9&VK?a#nxpfq%wwSMs++vyWcJJ1pz}dhbBw0rWao z;o2qMI6xCIYNZDm{xTMwHdVtjdoO%Cf-(DL?-Fs*G-_$f*rPKSOHzB~d5^!rj6ty& z+zc)f)$i-^p}ZIKj(3SRvL2=d0TnE-&A6K^t0nc&6`5;PliP28L-d^IXur%IUf&RK zDch5YJ-cf*f9l0roitoIU%-j-Sa(yN95JuCO75&mLf4`@8g zM3A|ksGd^9+^dm4k&9eHbvA?P{aUh)rEOiT6qeC@VoXo!ca5y%!k!W@7TR3uu_I z1WgBRMwg^atTju=OXrlhC6LbgCoS22VhlAh%*Dh1Sb_QC$*^Xp8lRPLACQm4%R8jh z;QM{B%QL}VonPRa&G@!XM&R)37vvR1Gta|M%s6F?Pv0+M*;H$?cY%;IRT<5gy1Ot$ zTZUhH$q0-rrc%M45umRxmW-{G=iR>DMNvRK#0nQgQD>zVf5hDUT{0oP8P9D9$CxeMK0OfoT4R!foSvaL+16A5+%DymUUE$=M0+ z?73X>PJvTtRpr`M8_;0M8VG*#5%fE)iQ$bb$Z-n>{WBLOd0y5SZuN%k2Iqm39J@E1 zye6q-zvrCiR$w+rhF{{U!3{mo4aRk4q|E&#^uN4{)*YI}@F@k)L?OS4b+shiV?L@y zwYa9a6Xez&*MuZ2` zGe$?iu6Y5taq*DxGzSGTEhcv3SoT_2M ziX;%-$cDqJj8Enw{M?Pc~}s1?7oQHf9b^^SO@(RimLTdkyB7O=Dc> z8L;+21(x(UkjB0N6n^su`>u5m$8=vkgHqH#`HM{R^?~>do@~|DJG8&{yr+yG}S?9jvAC}1}A81FtL5N4E#X(TH z0B-3iaO=l};o3Q>oYjOhlrBWHS({4wFI58mT>!q@ext9W6zo1^fHyx4#`#vm3*uNmA8`4w5C6x} znfS%jzJGkQPWzPX@eD$eBwOZOCu4mQl0E53_H0SEkW8zj5-LeD(k4k-nC8AtCM8Ld z3Q00Z5|U_<++K(DU*aD$5o#jx;;es_ZN{yzIoFSjwS!o{whZ17Qv2RK)9_0CPnQ{`Bz&KiU^3 z8JR)W91iisdR+c%18&}I3P+B;g4H?cpa{^Hj}hO-(d%{D`!}VyuizqfJqg9Qcm8-k z{S}ss+=yi_oY8By4r<+?`@eh>v|(z}$$_X?L^ZJ>F6ehltei32X5!}OiMA?DZ%SkR)wx#;C#Rp&w+`-1lNT|wle z37<{e_!{cR)BAD$CHNq@k8VMmiH^G_n@-oO>dNyt)Upi+JX2v8oRC9wQ7ihcy9JI9 zeln8$x_sWB9I$K^V;#u%Nw8pII|{q_%>HgC zaFul8$DIP!MVsb8g<4U)Y!>AtyUffzG#U1}(3u*a>fp?-iWJIna?kxL2(%^=&lR~O z_Wfrxd-s_sPcBEXVGYXCM5was6Y$L5Ym1&|*^s1pCvvrf?Etav>k8 zW3Hf%yB4=Nl4fcPuERO16Pix*G&2JuvG|1!7n4slA5{0-?C#GDO^gBAZ5__a*%*{f zYZ>hoaWLAx9<3}^Ldf!F(kiEXSH~KdeN~&ya#_o`9=bsp>kKFdITMouzo;dp0q1?;Him&3W>su;b`<=DeuQ+ZIZE`)I90 z>$bfyq$T+}uGx8s?zyS|wlac5ZQKD4d52NEfpQfRM-Zz{6JnK=fbLdx5PxGcR6h`K z-7j~+hz-RUS!vE_52AWV+vPJ&%#Bd!zlkYJe2$J;a&*`6BSG8qut~NF69(5|@Hg5w zo-@zy&M88n?71j-);pLStHOGyMMA-Rs-4&!2ig-WXy)wD{0}1|(KY!lZrI$9RR}6c z_%1%T!cLp38l}#e+h*XFaj!6reL!;zD$uR_mPk4IseF3CBgmYp%JsTMqIRMm2m?kj zQRBzM;0CHo=QiWjUvg}7E5@V=%fNAr7P0F8nB1H91VUv3tY1+Dbz>5-IqM-PKP_XN zto6a~zi%k0tVh@L*I*K=bFO0&=w}-*pIQhYY>pJodwQ6%I9K2Y?g?h!wZq@rbXi%g zfQ$4y%Lq&5BEhqR4BRxs=DVMnM%61sI)4=owwr_X)--b^@EVMTHb~0|C!Up&*qWAs zrrjgK?)6D1P5lqhSDX7zx-eqpC#XNEjo!i};z{fIhO6!W* z7BeeHor3y^e=s@xC;Hsbhk#B#o0@bU7565}?E)z~V#ZyO{;$t?Zu27q|2g%qkVI9X6Gi_xCzZ&$O+S)J?N8|h*`6ik(0Lstjtjb6#EM0wKoP(o^~^%SRKNwGdJMe*6EY1cNORoX^(UK zDT}4c93>yb^1)ph5VdAL@ct_mCEo6%8M04dRqA)#&|knRKaRt7hDMw=^;(EuBTBv= zCJE!Oqv=T%9991dY~5Qx*Dn+-XWql}reWB2%9Pn$n@TiIG+AEqYW%mH`VLt?BGNen zRVOmxh{t)vi;J+r`ZR>h_y=^Syv7P?94P8)@Jy)zYnxYylHr?3+s@0t+i1`1GA{!s zk0m%MO2E4Ny<^mmC!*?;YLxU}DGI2K#X04_q5e}W4ERiS7hAos`{D+0n=zgd?A#0C zCn@8b_IygF44qvAp;>z;C}-EB{_O_r_1^`FEw8}p6`wP)O~ZFleb9|_Fd}*Z_V#h` z%(x9hUkcDI(hw?dzhKg9WnfkB3!+Dr(Cz$-@RQpaLAVgy9Ex%7Y&u7J?MUmUD(r3> zMW4^#L?Ro?jO|&0`)1SHu4_G0MR|=1!2pov1)#XLmdPqm1B;>kIIEYhiH)C(*}p;; z^atkP%9mD9Y_7=-6j8?cZbL5eQah9RelLnV9^i<*9PC)*M4#=|aNDpQ6k`A&P8vs^$udwsdo^ZS|ALT>k4Q*(GZ9kVM{UbZX6H2(&Z;Plk^WF4#cxl- znrm8I_qd_BEB*|cEi7iD_CF;uG{^4!!{OXl>T?l&vq|tfg;l+@7jyE3XERIevWQ_sqmZ6kOe-0;=Cm&<<$Si#RlNOqzG$d|4zO|>Pgt#?_%ePH2V7-3vD1UYs zNf?-fmI00^k?f|K5wW=DE6q#RR#5)MMQq+!f*QX%X|0!q?ll}t6MjdN(IP0mMOl%W z^FcY#is5hm$~eACfaWhEs5yO~cz$YN+^)AX(vPWF{U#2jLuR7(&vKewG+tzRFqv`@ z#iCs=Rp_jH17zX|+;=4k_ZSJ-{^4!tUAhq61{$L{`+%tTR{&015RZpW2BX9DHrSzd z4d*+D(%Hf@tkrGDs*)TidzXVZAL(%J4duuS9fOWbCX)@Lf8hd$UD(&f=VWJTO;t2l zH1~=DYhrl>T+XaVmln$LbIym6aeP(`J#w!(G_P<_E-e1fkdt)Hgt6{pXs^8)&7NEa z=TUi7FE>2D-bfDw_urxSi|dT>wT~nd>AbCNEj-`&6e7o-gYg0#cGdB2%p7qaeY8tx zPU$v~NL1y|t=fT~`kGXh`7l;%&k9^rtbjQ^A`c77vQj?^*J(de8DR$>YxG#8 zT>i*rIYx$VAc9W~sQ8`5nAq__Fk%C#dSi;QsT_9bBChP0NFurIq%v|gQ#t+|+NYO* z?#X2AJVEn$9w||KsyUvG>c{n`ykLj+7o1NuX~=2pY6bJR`%utw6l7CqT{XQO0)FJ-(xn=#Q{q8T>IH-G_C2u9Q=LtI9Dv`6 zCM(+V1CFnyTm{ccFtQqfi98i;4&kTK^k0t%*QwCuRRR8>h^#kh2=rVoQ zW|9zat*uekK{;v@IKn^;4RH^YzE{JF`*E~mSZ%rzhkYG+P-k3q-Hag2Y`cZhtN z2_d_-Lu|AQXxnW?bGvoud2cz%`A)g3=KW!G`3o#fO2rh1E?@UXU4magr9@}{C3lX1U<)w#unbOe@m`s6yi#T)^WpmwN z{)9f1yfv2RHtq&fvxN|)?+x9Kd@eaL25X1uW8d-wFwrYTmnUWr0Xp2R%NlH@%|#}? zX)^jsl3>2uH5|6bfD?oofHGtODLdpzyXQJj1Ls1XR~dx9!a`TNci(on1lcs9K00=VwL__yHCcP zn6A(E{t;uD$9i;oqKz#?ijL{$;HRn)SXr^m)gyJ(KUoiv+OJ?$a~PV~r@@y+SJ11m z7M$)=|3vxy{B(yv4EdwP5mR%i&sQA^Y%XK-n`9K;bcA4q0)AHOL)z*^u<=p?Ojn^S zJG*UgQ`Lxdxc(YqqExwr_1DmMUOw<#!kL378{kojI#*NnmMB-~bDc$RVC>xl@R>Lm ztafe#%>q@{V$?lcZ`+SM+m!_)7pb$#tvaN6+<6EYw-5&C`QhwQ>TFyK)fU@-K;3Jf zkU!`h8dpY<$nSwnd(0bpuFfGQMRTC>MhQ_)zbSW#|APBA^kZ$W#9`dW1Z>q3;k?J@ z5U=u*>~CBIZY`Qz^FN=MM)d;nuH`9MR$c`;zYQg`s7IJnk>{zXQoVyQ7Foq(sdo+( z22!sJJwx7a*W!4=>&b zy!t_k}e`83YE5CL^h z?!yk-uUM1NLR@yngX8^Ltd%^bn#M^Cf8Jw8EIWWccIqI`@&fN!UChcl3ox1=1E#II zIPF##+Ls>3>ML~rQ2mt|-LAsg z44RpPO3et-vgLd>C3!jJ)7&E+p>4QzVGZ;J{=he54cVkkharT{o0@kA5XGv$gy$$k z{?oIxH@1geXNoYyrUR*<9xAQg;+`Fvoc_X2`c9rkZ|$EXz=Ow1r=5a|g>Rrl(*p(l z29g~g{@{X@mm%$>2W-YEP@&Zc#g9zE=F1rD+|&uK8)(+{hgEc^mYL665+~0JKgHzz zRpk^1GDy|uO8Drm$Avt(3Mo0WaC4!A?qtr-3^U3`Wuz)G^D+WaWf%5$i^32cQ-D5N z({5bIND3&g=ii%5=lK$-q=k42eM5cnYQxvRF66h19yyrK>ulw zIX(eG4%>kEs$9Oh^cx&ma~p+@4@JBU@|lA02h5R0(exdgO1%)l#BrAz-M7;3bb$){ zq2@7Glng|Np2xWOLK@8%sb*x>AUh4;*+mvMR#S4tS?j!X3pw9~Ogp9{G>ZKof5-0c?vQDYv zk+0E{anvZ*Ma1q4Ey}&tf^-xCnL{pOV*r5@BAbEKr){hyDwS%rP`Yl6zJU-YEqIn+jhz9pVA!t5I%rJC$^G@&vIZ&L zlV^iXSUy_q^I;m?sb*+)8s-YEVfRNvwkc#E#?_vqTAoUD6Vt4v%@1(Ul5h-K-H&a% zJq=ptgrn!RL5$+LuBhYHbyU#V5wEvgWN%ppTmQB~^(5+fxqlKfuHQuuvya%dT7%8{ zvzh5la>OA@6}BKE7v^g{$6aO*amtf(m{qC*zMu1JzW<4o1)niSvDS64hJ@Dz~XZ z#@!Tfx^$Onzz-60F^5*0hBF%{-Uo9ZC5nd89KKO1@KQ4}n#gZdCaYlkBJNnaSgqKN_0kV?> zYtlXV-Uo2|VIxG`S%9JsbcW~_CZ9g=4}|Vb1-HC2^4qij!sN0ZI$zj{O1PadOb$d7h%9(_yfbw8M5iq-hxEhcCag^Up@uG+u8E_WocO5lZukHmc((yc(}CEfZO-aOZ?d(fw7KXJ3ex2M7kae@FdFsx4orE2_9C#CT(xhc#sa45kcs)%%95%g78ec$xxm zdkA_btK*>uR3n$7kXy)8p?3ZS=HxiazY82r`=JKLeo8Aezes0vldpggI~@7xGR8Y~ z3MhPou{e~n-#?^54nGpD@B%by(f)PpN!X{Y!k&At$4YFIXF5L8V0aEGqUlraKzF}A z@bq;Xj?|_z`eRqA9#6&$KEDm;rk+Ori!LVeiw`{eCk88WEzo$=R%jkx%EZ}7&~zv@ zx!UvDv!6f0&=DW7H6)B?zw5H~+H_X-9x$@Yhjh1bZM>_MMqO9(x!ii3RASZPQv6FE5@f=L(HFE0dlgVCVVLm6aF zPeeyigT2H0(|nAz%xEaV(GjQ6VqO&%^{BG$n=6=7ziQ(6g4U>37idmF4AlBAMgE(| z81?ZJ@wVxr3@m4;5S>TqztO1p_oV1}PCs^qemvIqEx>iugJ3jt2NwMP4h7R2U~2Rv zxMvUrB3i2}h_~FQGZ=P7)EX9MEN^^@!u{(P84|= zeSN-y$?kMw?D~%E-C)Q@jb8&<32TVd;Ut|lWnkedJyzPCC35mK!Gz*`=r>Bhnl%;E zy^T65rq7TsIIE;JeHw9DI}W7_zBBWVo`TZ6L^9Ms0$U^PaAo-_%1TUSjCq^j7(MG+ z{yhs-ZC%itqyZ+GTAbu^VSYsCQ>aHjI5V;vJ+9LE{HR~>Ih)UAF_)OO%`=E@GG)uB z>$4U5^e&m~0&Rmlm=@PVIAUHSm`mS-V3|K$^E70S?9IcF5;?KS$s(J=Xx`C>uTVNT zgFK&o6C!r!oSFe#TG9H)XK=Qmy1z}ph&^tKyk^sV@|7ff_(F?KO;cmr8uu}g zZ=4yQSsCEwB?7+xagZ1;WqORdX&#sj^+u)Pkj#GUeZ3O=_*|QF-u4VC*PkNJTeP|0 zfP1j;kUkq(QqDBSCU58Uf}j^CS)fRKvwE9Mn9kztzJ%N zlqGs7YnDRgEW}oUMrou0$kKwC_ytxt@Kyq>4OU}AI~d$RwTQmyLC}AB4&`*yXGHH6G-VIQ z=l`m3HkI|H%1MllE*;FCMpdpOC<<-5Wz2{vjg(ETDi7J7kMB0sf>%*6R93Gh+6{Cs zc~t=!bGy)JY&ewO7zN`#3fR9iPv%fSJjyG2p}awdTQiX6XbjilvZTX_EqzXXvuK<;)Em4<-m3_7U3VFCJ#}Go$3-%rRg)`7lF&T4n<$KqM(|z> zJG%Ik?Ky_Xc6AcXKY{2lRfsOGu^^aq1@9gF0ktLlVKv=b7)Mu;6F$-CQS67c&I+te zR4_@JlsyE?Kz38g6py0J{C@^x=8e}NSrGue4S&$-;Wa4xnT^IH)U zU~X76Uh(9yuE(f`cxeS`>vSbH&Z?ji^bvgW&*F$Z7tl1)95(*f3b=kDra=nC@0o#> z?+(I=f!eIwVJGm}sfw$Nm3a0~D13QFb4+#z5tZjZpr)&vB>uVp0WZ?gVq`l0qCO?Ki9(;{t)B>Dj;5md+{8GNU(Uq190#RK_0zCjsq24YrZy&1;~laS6J~ljLc1 zH`m zg{N;q-LOVfL{u=I8sR9MK<7g5W`fJ=9Du6>K@zhG7qrBK=fwMDgy&<3d|6A`C+|h} z0_vHX^$3lAZ9{?l5K**F!>NoV%udo`h35Srn6h$RR)<2ytqZtXw-0*5Z9(}lP`+uf z1{?UFKAgGMj)I57$nr^=xaAnFoyI-Hc*#xD7uSkP(K@iyGs54dhFrx>6{=kigONm! zb#v@sy4!TnQM?CyHub~JxrwB5mVyy5x}1H~9aL-Ag3^0*PPehi=6aweH&rPHt3+MK zb^k9I$3KSyJakz7BNxH{AO{PoCScXeKa|N<47R^dg46C9fOo{`EY;yW2lQha|M^QC ztFK_l;(F{Y4TSi~p_o<_4bdmg%WzkzK980-s8{>#{vOZ)Ddw`*B z7Fhdp3_jR)8F6+W_NMoPzT8O4<9&h6EeaT9ZNN@_G8Hl|ccAj=7E+0xq|I(U@thrk zb%s$;em@7@8t%jRwL0wjh<_G8S9S^rqFU5a!?$yLXaC{GR%Cxyu zQ(ZRTRy69GrK8=j3dX2g6*cZP!G{Td@xU@ZE5DY6@}GHFKIaBxjebuY?}tJ{$Rz-~ zR}f`#kF=#wuijF+4|fldx2acP$eb@I{hBX#@}}8`hs(*GnwnSG?&MT>jTj(W*jr$`UTotmjXW^2&P}ogT}fB;x_LqW0Y%+ zv5Bgj-U)S9n5xbAGKnbhTSe~Eyx6&#Jvep70xI%IM&yFO4%-;b!iS}$sQlwEay35*Hq$3znk<|Qu5CuAjCpu&;9Z*6#%G($*T6R~ zy0?~hAg_(&XJ@?x@eXbH+hxe|yz}zUS%+hG+X%`{GRlwWpF(?`7x?_Yn^ZF|hB4H$ z-xVPun$#;%RLzu-PvDVX2u%}@p|Wr*aauJNR#^sK0=EuM1{0qY(&p|->`ye}ZXX`^;BFX>*jj{c{Tt=; ztbAeAoL7D$koBeS8ddZ9R#xd-#-}q6;0_`IxkF zD7^I3VK1FB0~oJWjv=E6?SXU$USs z`W!AERtcUqdf-8sW?nN2LElB4^R_xioGY_&UvCgPUfc=}F4X2&^9hX0zY~f31xB*7 z0*s2|!6>N(V)u=K6tllDX|5{kDplp07k*_d%O2y8!c^q>|7GUi=)mAtPr={xD>QFC z21(PcAuT5y*6!!AK59nX*uRwVzM)wD^hzfln$6>k^-W=2AMLTy=x%Du9FWxPWq5BX zGm6eqgcp^};B{vi^KZeRa;gLBAM}TYEj{2Ndk-SYM!fE4z{;CbP*LNDIaC`eyK;uf z+TOx^8QX=Yt?6Co5D9$WbYgG16RnzZiT}k+5Yrv&s9oKVl11}-4knQg4qa%`l#j3O z(!Kod;rUKAcY(imA4CtMdiXPCVAfOt?u(4U>DUT%7??^}~6XgS2W94A{%(`X`)3>BM+ZY~uw`_liQX_Yk>wK4sWH)J5Hsnc(x_y#TKThQ$oAC)sYM8RE$(N;GQr|g7ubB*t?keEb{76wKW4XspqkJd56oHkjd*foAg_U@GayzFQg%`W=yA ztveWx=$yo|G&+-gwmsj|ZaU*V_cQY9bU5CPwN(FQ2@4uFW4uKO6y;>2bnI)C`+Y@? zPiMhSNf`z;yTR!()gv9Jz1_h=xwm;L(|x*{aXVy%zT-U zrRmg{^a4yxUXy8y==@*edAr?s4q886jY^e8XcHX+VJ>u~?f05Mp zBGpD5hE>!1aWVA-daSCT(kX=5dfptByIHJveMMp%n&6YI8f#?4K}^^OD0AD2Leo2P z&pXGNxa#-N`%V?k+|y#q1pT<4g?Aw^$A|hqhM@ZcRjy@cHz?Lj1EKR8V%jkdWcfcZ zaJMQad7a6ae?A9Ewx|A2zb`sx`iHWwT*;Jse^BN_`=hc-BDGh8t*6eyli~X8HlOpD zVzCEAlo%ab( zQ%@0p-c0y`vFLH*GNc@R2W2)o+^Be(d3o&x!`nE73B6m5U=oebJo547T$(webfuY# zAM*>$?!nbrg%~kPpYy5NjNUef!R6;MJ!#>#$@vd&d}gn;o#~&q9pVp;_G8 zFQB!q4ppXqfyHA^!_B3dtl#NQ^!XfzA+`!~+thLsvm=&pJfvD@&TX})s^2K{5iHctOeg#Q+cDy)jJ?)F#QJSc&< zm3YFu+C@Zpo0sRfwlAk{y$^RQUHlEKKxodEFx87s&YE$PpQufRc%7pYCNchVogdJ$WY2K!qoYfn# z&#fCH3!j76@{1s;*h8~RFM?ybH@S9tG)>N1CWH5v4B52*ZZVCDp)_kk z4~?~G?#QEP%F|B3fX%PbJ&DI1 zzbRmi1miH{X*sAp+z1gqXE5(V3C(n9q&vDP#8jq+X|r^>vb`6ew&*x`?_UC|cKBoW ziwndpe>t)KXn;wkF2K8^NmB0b$Dbe7x%OQPP;9R*_oY2zkasS6%Dyq_LtmrUATKmJ zQVfG_9-~mM#aUE5#iET(Sm1RN)m6TrhqVnJHPC0l%6E!&5dIgL)kPa@}RVYt}>f{gXhkKz(aPB9qKfYN~e}|)7 z9!vG-yT5}{HUnIx97vN-pkne<#!)kzm_$^;gYi7Jck>}QTEb&(=g}-QKFY_8ibF}? z4CV;?2bBSvFguby^VCmp@|Y@{7EnRwkQF5D^d-jX*syA>rX4$jtr%76+)Vt}KM^w^~6z<`hPc^T+w?(y%0n_GR}E%`_h% z#vGS=%=lD;wl>XBJ-iCD&i)6}H|TLvjSf-o;3e2S_zmT%WQywgD8n;*AS3x`Ef*$g zV|jZZ_RH5}d2eDxcQgaA&3_5hO!+~aHVnkJA$4ShC>h&W9s1s^0=tT9Oxt%_KWLcG zR2X_=TYrDDzjGWog-?cO$7E>j)dtfl)Y#0f(-{0{9G)*$W1aR+#?p;%7~cb`Tzcjo z7)|$c3eC^*t1EtDYPuHtHjFZW>F4xa8;?_dRG`3R97(C6zCJHLmfZgi+2=AL>HZP0 z`F9KU*;9RYzY8eqL~xt-iRtdECrN7!Ir+ecpsw;4Gs6Z@f77p-u`S<_?clT0I}3>U zm#f&(-iim-sj)Mzo<&GKkMT|xX!X2^xKEl6iHmh8oqk-xt=AN03)V=^vYkk(ZH4Hv0($+)8FXr69ZPa;}eQk z*#Nc=f|X=2L{bLZzWZTF2i`Dt;|j!MK_D9}Wm-~7p!uI0kd}BF_)m~X3qzp(@H0B+ zb%%teQ;H zW!*=Noa4x(9V!6h6=fv8XB8Hhp8}&PE0FoD%b7-Xkn7d`*q?8XK(Z(0={!6l-)CBb z0){Xic?F=ocL6$joPfJ4sSeO+7Yf%7zzmufm;LezL@3&@O#L@(vHXp;1)o94n?^z! zJwd6Whaqb&k^MvcAzs5Bt=iTxu_q)<9$QYc2A`q#1wtf;0!gN8Crq0lVDH$euyNu7 z2(6&LVB>?>_4f=Kp3q?(wzq&RD-XK=N+Eiu1Z7e2BvTO#v)eS-#64kfwj~{cuEn9x zwR>>z0L^hqJ|)sWQ-j(Q)VRH`dr*u=KzkYG@jHYurt5UMp|MxNc19HB7&hZb=Qd0X z4FEO0IncZB2hIL-1D^+*QK1+DPfV#k_k#zxC-tGd=sp}c6^c4XRoK20ls~j?6-KNw z!-~Rg@ZJhgvo?y1y;=(*?;r3Vt##bqNksgQt{{H3TJE*nkn*r|`6HyCl>6F4X? zg3|3YQ$ukNn{0KtHReX#eqWk>x>pXBMuxE5AG z=IMi;iI<^O{tGZgElq|ILG_@vY9jQlsKp}B_gFrIK7;#OL;{gDBX$m#OH@Si z(7n|2v-KdT=7(d_D_@vaLbH%*Z5!rx8KWQGz=M?IYQHfTm){$Nw$^HtM_7o`8xAO` zJc;Q(x!~}a>U*6QK%VDUl+_esQ^gPXd1NgJS1v$-^8v=h65glZ ztMTGBu)Jz5n#9&%eAqk8-uDD}53kNN>j|Pc0Q#^c;04~hk_NGl@58&DN|1zVkq>3< zXq&jnZ6Y1(f#*a(_-5y`{MnTi)m z(fXtG?p@vq30ot;K*qS9M(M|wa{UGuOuqdcMRdk|W{D-s>`8BiG} zVSI``A>yA>tV~?O_%t}c)hNnh`bP7V9xuh>Ez7`a(o!%9{7Tv^Et%Xe6G3=oBsli2 zh3t(jG|$)rk3XRKx6O6HE>vf=-2$OpR*izUd=eqOjt4}P@tV=anEW}2jp{#%_7Z}g z-`?SuniRC4dFCNP4-ib0WBi(DARE_8s;cSiw^fMR;i=$MPqk$W)QQi1f3WG`gW~KS z(4J4dyWdyAy$5|DFbt)dBts~tayjqSDa6q+6V$Ir&}M-u=NTJMoOhoCvuHJLCuLi- z84n^hlv$+km?;vme%NAk6KdB?!?{Ig@JWCkYd}4eFO{0KcT_{E{v6_9WR8}md8jX* zhCi?Gfyj~9m;m~l-Xy9l|J@VjOU*~Tf2|X(ZIobkV+t&H?f~EX_aNR$x4+h}&noj>TNxfhp5ETUSYDp)zSoMbMf_dxM0#vywEIy6?mJD=O& zTHgfDPOnjHcMf;X)Zjt}6XdU=c|FBZa-r8lm=>zb)n|*~eQX}(`iw(2QUJV2Q#r3f zNUpm6LCKVk{2sr4oEgnDnODriA#b(VQrj2AA%>*^mrF6CcO5PWRf6}lFj7&J32rw^ zMH?*ntcUG2tUq7_LDZM_q?~GSyu;9GoFQh6y9Pm5deOfA0TdMHQ@$`yRLQ<$BA1R} z1`fRq9g)Qt;Shi?6b76)^#qf7Ckk6HeTDLMi6E^=qxnyA5PP_wM{p|oXimed?90S# z;2x-&t;y}7ERGSjpFwx$1GraDGp7Dj5MFN5Ob6qmI5#IAXN=O~gewa~CF3YxgZBfK z9o>oPJ=)`FwQ5;8ApUaaIP#w`)n`ng1YG z9!{iBw1J;T5kE`fz=q~0;PTB7!nL4mMJS`TKo2)kf2Z4r4NU#^I3&k3*oU2lY*yC@ zV&|_*vnaQK)%$CVWuX#6G#^1lb}yQKjV5n{n$S~k2Xo+;KI{2Y!Ymc`W3x&fh|#^h zm~r6=Xn0ev=zbeeB$rSBapl$FSRXGu{YjrwQazckXFjG!d!du6HVBT! zFl7s#g6y{mn0}&MiIq!4x=&=_#g{^xeKFxnim`QUDwu{I2JfgIvb-+}N?$}Wl9w|W z-&d8`_V*LjzWs&j^QxRxmy|SbxXnDvl_5{@YesR;Cdf=Q#p9ImelDjCO{v#DLziZS zY&(rUw0CG;n$3*dM{|zGe1nc>f6<+12H9g@0PomEBF3lkc?0G{hC>qC>gR$->KFV( z{f!E*i%hT9LaM9z49%5t#xckN?(03LnJQ{>FX1ov;#!QS>b2ODlpkerC><>NUL*Ky z0b%TRNPJQbxl|9oV^ukrpB;|cl61Iqm->opyK(EgYmjm211b-fGkt&6IORoCVwpb+ zug)=GdmMfOe|RpFxULe^XFtcZ+@ zg~%HeoZq^<7b=6MkR2Dl!5TXQmgkWLFr)(c*0VrjTR8KnuL|o(HE^Y+bVpGiLl%VO z0G6nL1L*+UXQx4Twj8tda$)e;+jwIF&8aPGf^zOENDsN9W5sgPklTzSB=2F_WgT`C z?;R>+Bjwh8lo8wE1-+MFVcV*cRNr|4=4OSVn^wBWCVn{HGtU9z1~E9QWHXMky~OJ4 zAL{vCOvKZN$W1Q|g$TD_P}4F5EbBXlfdK7L z+~F08%kLm;RxX5CI{R;n+Qwuw#ew_Am0(qZ?bd%u)_K8XtpM-e}13=iG z4TBN|Y;sLFKL7d|7EhLApCTNLesqHVgl4dh{SPDGyArY4cy#9cP;#tsX6VM-F!#0| zJ2sGdP&YnDL2)E@RfJ-r(OGDzErj=X>Zot}EsDQ4$bTAp0>-{UA)ODM7*1!Y`Atx7 zdmOtnY+>yPO}01xC0JC)p|JcSn4b;?jQgN3?-JCn`HogsGSQxD ziK~9l+;M&%%>@ZZyQV_i>^ly+{}_Wk^;KbRIXuX?jGVRsXI|bx`?d`rDIbH8W>oWO z6$9$s7tkTS3G8*x!`VD{bS?Y^?z5JF-H9NQa`QIum&=I5T*@jl{EMaR3y8Q_h$v;YUi{<{)*H;<7R zrzWVq$wLzzUFhD{!TgV+Gmnb#egF8hYEx5|PvVpLkR&A8YVPaFSRx78`x3^UB*~T} zLrOx@LXu3R5|X54?&~2+k|arzBo(ESB&j67`}e1FoQ^Z5=eh6edcR+pp8praF86{){|+o3 zSPO#JKW*l1(&1#@|KHR3jh;Izh~XxGavSlbs5M)v|R*+hXsC&S1!Cmy4vU%++64RB)K`e_$+xtx&O z;Ldu2F1v4m)(Lk^{lz%(=?RF2%ivs7AN;wX#0l@eB%V`ukk(BaQlOsf1tK8boU zS=0;yhYhqUHvs~lM8jG|E9kU_f^6*f>|U!F&>d!hQct!+nS3QXweCD~IvEj##eL>c z_{jKCQ)!#&En1NJig;eK1WAWFyUYH+3+)WV?NsBs-uysI(M&ih4u!3}E?0AAH`uN| z15P!Y!KM5R=Khu88xXkB zj*Jhb$IEjTq4ez%uvF8dy}AAH*&!jn!s$CK+3JQ}(?)`0N;#VCoC41x)%YZzF3iwS z;Zq){VPT^KcBx#YmKXNXoa^>tzs#S^!NQ}_)Yl*#Jdcb!#~6?=lF&uA4RW>}RTPz9 zgs8QQ<>$@Z!l5m&y<49z&2+)WPyd3bpBpK0SWB-wYlEc{S;%VqzIcjKx6OBuq^p&R`U-j@awRk5*nZYI^ zyR-pfRGP8JCI~}ToyCk@(Ga4W0lH_*aQV?vd}9)T-oAH0+Oi+Nu>6JdyjSSpdl7Rk z*(-i#UB=)uw;(I4gw`wz#L!(EsZ8r5`c(E}ne$&-+wg(8y$`WoUjX*)x{5>o)8Mjf zFEW0>E|l+|LTV#E!??&Vc;}E3XIc6LoEO?)*VZD;QOFdo>pl>f4v_wLb@{#t{wQo) z27XieplE#+E_8W=H6eqDVD`K0(D_1Izi%2uv3>1`gkX@IxF|N9e2<7bFJspITeNH9 zd;IAifRqKnki_yhcRCeT?k~VJAR3Gh90kj`VlJNdq65`m+i>n9Z9e*73FGHJ5R0sS zC}_=YjY{Fb;gT4uZSy zK~Z}bt}r_X*8fI=rTRN+9}!F9CVgQ&qiJG$E{ilS*X7?|(Be`ulOUSStWLJ7@?D+L zfW7}-Rrla%_)GX4oCgvOQ|1>vff44{Y0QZ_>Zkr5n{W(PhV|m!(jOQz z^*@w+%TolNFvpJed8`W=fvPG)p?QlopVN0qF-Wh4@h6ht+XOAX;NLXjv*$e|JYrnC zgzsR!aXY%$IYE)A9$hTMP`b*5<>_TaD*CG^8u=4DyFbB|WX8r>_LRSL=2svE`CNw5|=M9%{eY zxyp%JjrtEgaU&^n35A+aHL}dw54`=QAfNCMMqc`W`x3*UV*FGr_;CgrtI~<3yE&;i z@ESLUcc5#(@en|+VOYm&usnO6Uj5L9ISWk1GT}tldt$y+?PDa~U0GRK{s9qRaX(hoH&F;njvBoE>!r-~i*)a0XnBVj2-CMT(mi zy#c@1T@b^4!>*M=@C=wjG;A#3yrCv1mz-Dle-1*cAbXtToPlQT5gh0Fz9_5=kJhh=O3(&El<2*8oTZUnj&tF+oNDeei%J7tO{v!ht#p~t&L zPQ{_$l(}n+zt;9~D>YW>g|#=IK$wRrZ}z?pd&vm=r&o<@a_R!X%|$3&e-!@tSCeyK zZuO?%ZCDW(4u7hZx&4_syh4fX>hhnGicJ>qPdsA>vpMv@O;vQ!dM!@m>&`kRMwy;( zG{N=AUU(m=!?o3hlY-AaknozhDYlF!H=_a}IHevVn^SNJv_QVR5(Hniq2TRD8@W^& zg#Z2^v!0wqXQNSIt=mDpeh$Kjpg&aiU^9eNpG1-68cckq#;QmNg7 z%LPZVck2OA49-O9*6WIrw?~K=UZU`2CBzDUfavc#Ma*nuXMp3N+{*6onpdGVJqnaA zD|4-{dP{r<2uPfy^tBmc`2h64}Eu&!4wZE9EKZfe2Uq&bM zQ}o6*El!Y}0&c7)pgXz}CNW0GwUhVI_Nyj;KRXhWbT1K$$;VOJJ^Pz*a73RB0mGvCKJczRyI-Q2=<&^a6N z$GuDpoc=HNem#si_8iDG8?&pnyu}`i82H)s9S39;;y{u>v!>_LuBtv_Uvd*1ox^Zg ztKm1J|J@@cotwcP*p}trsl>Lv=N*8U9A$@Vf_n4@E;+cN(qf zK1@QF6JmP50AwF-5vf(2cgc~mY|q?qAP#xxSfI8oh0KS5-11bg>{gA1D_S>9a+H6Ihj zK6=$)f64`3s48(H96~$}p8`)li&lKr=VxwJ;@^hqbCo)8q30FLFBt^mrh0d%ldE#M zjs6&=){UbRnNzj896Rr(gSl5Y2!8j^-uy+2i^0vu@^z-P%#=CYKLALGxm z?{Fdc#5^k+Y0p6Tx1F%Y2{fB1an{m#c*W@xNS)@x%c)u%&Rv8Rp~oQkc@D~jmleL@ zKXAK&Ciif!HYW`z!@W_DFq|-cV&iDAoP3q29@fTi$D_FP8k=8ePlC^nSbmQ?0fpt? zK{|gMP5p2SHznx$6){%H%XNxdfAskg)(v11JszCBrhsJlA*iY_hJ_bzVAL#gon6SArQ0}4x7&+=boVm{Fft0%E~-Z44jcC-G- z(JV!ZC7bV^uf%1Mk+gjOCvf_fM5MEiVa)9~8tDHXHvVDf9}O#*bLc;eFUqEdeF9uM z?l~?r9gSXjEK_|w5MySs+~>MWgv2pVm#Gs(MdhIl+lg4GMZ&-h#!!`5O>LidLm%tU z;`}K{$IN{8-&^C z0DOcfXl_%q9ezQB4(7s=unxHE@c^^zE%0TD9yf^baKgG6;lQ2!`|kRPb;jPsEbaf{ z;>FBQt6f5(D#Rd46VM84bzXjK8u=-DglkhGA$ev9M#&4os*PnGbw9Inb_Gn)W!|eQ zC7d{2o3jkPL}Wya%bLf4bb7YJ-(H&w=VQ_DMgrW-VY8ApFXG8uYgK2jFa`)>OBP6fbo^WfaCI>C-Eb`BKG^_uBW`Vh2o~_B7T)0gwhutBTdkesR$}=)W z@(O>gQ|6{FF9pGcw?t`bE2@4v0@0;!Ve));5Jm2ylCjG$Nk0|tcJSEsSPs_n=R?Z4 z&#Vs=9Zw_irZ+N`i}H8bb);FOGQv$ z7TM>h$9FSUPE&gd3T8bKyCfKZE9*-fU8BnzHD{y9+KlnOhheCG23B*;aQq$njD7`^ zph}hr-1vsbdwa!Z`!)EQvBOD8P&{}Wye2szzr<}XN7Bww&p>A#k2d2~xZQD)=*-`P zM8?KgsC^H@wU1)O?fqbF_W*6776u;vNezdv@4}4P7^Rar!ILa)5xrhGH-q1+s`&kVJOS(aPx*L)-ej%fMfb6geaU7fr zw1@RB?z=-)WG2m9uK_Xf8!;-MlB-sXc_TN*F1Zku?^c7n-kvlTl%e_Hp;#v5$ygj`YNqsdDoiB(@1o`(|9xE7g|SMBP-4&v7Y96oOqg@2i{N0UVfn%8^?#k z+WimM?EXKn)YT(Lsyoq)WzuAM#>D7iA10`KBlB-?mJ2r$gAn$7HP#bvTEUp~c~j7; zb~Y9pN25weBAPQ^ctlYE^9a-;u%4`;egY)*Heto-OcHV6Gd2GkflDGsVJrJ?Z?Rf} z$tw#W{F4qZy75pvg56={qCBWr@CMFn`QxCuP3ZpOFUwl~0ol`O=)V0CCa+=p1f}1^ z&OZ^elwGmJTZa~S&IXONdr;S{&W&4Nf*a4oqoiD4{Ck)Z_hXtG_cJXL|Ls)bf~LQu z_xF7Vu{G;C6+Ho)P62l$@i(@Q+Kr`AYUuLy5DG^Wk%QAzxjWE^lMY?S*T?VRvk^+1 zVD~_3wvf#~yq+`ONdN@ve*@{I;j9yW0~LYUkbl`3qn?k27&~9IAnd*Ly_9%Y48=D) zn450@5fHAkrd<;r6K{5p3pu382j0$uqN{;8P{8KY++pgzEEZDYZBh8_U%JVnht`x2 zLF>WySoeMqO*ZI-8g~?jMvkDq^Z$pngW5pxgWabNG>}yt$8bh*BNnTC1dWbcB*U!% z_6ym3W59T^z&bBmqvHXMm>vKHYn#dWz%VRgJO>y%4b*@C2Kk0sT)X)%bd8jeRgvuw zm|hR{*_qUS%O~ce74nUhYrwPWGVwi91h=oKaOT-cyoAjhPGx7nreJkG;8iN7a9<($ z$$SjmSBCm~`f&-TKSN6RIS|Ydiw`v_@o5bzj1|c4tuv!YsNgl}8vC7e)GdPC(VZwN zRweUlS*DvXm-7iF@cL5&>*Lv;^hp7ZxPKDX#y!A=-yG4b(-TUMOhJbrRpx2Z5tJ*^*O#OeucQs2ciyi;?3iX z26W*DdZ#VLsC%V2VY)UypPk=Vt;&byp&ESV`v6=!O^L76%m%Be^-!boKw*C|hYai1 zgL*sWy(|faIbC1jf416OTUQ*B4b7pW`XaFOLO(2?dJwGx=YnfM1$M2wLo3pbv0Z2l zv3I)zW_uo!r2Lnp%jY7Q!#X~DmltEsq_5(r^@f=I{4ScE9|-kJ_QH~N{@}gan`IXN zQsbj7fFV)P4vpZ&b`nj~|Dc3k*$p=8=8RT%rhX^=uJ+{W$!NI;rPu)hwmv$fZyYVTv@RctPiY%NiXxU?fFdb zGG%uh^SNgj~iAaWXH1oJBvy+%~q$7H=j=MULPr*uuK0ap3gz z6iK=2gYq$V#qCQ6U_!8vAN;HnMzD8_-a?j()Voaf{2UL`NweUeWv5v--U{lyW`R`u z9TCOUljU~<(R*<|joNSk+Wd9tLi_%_bxl56PR${*i+70DaMlN{Rv{*NhTzh42S-%@ z0l{46d^%|lp)UrK;LKZSwo$_NdsUcYti=Cwi@76%7~}qivbaY2ldQ>Mor^D?u+mS7 ztMRVGv_*Fz_EiM9%U^*-xGxU6cnOa_P~r0pRCr983-$xEphSBD9b_lqHubwmy9V5Y zh(E5NKJ60>`Yzz27oUZ+no!318BMh0eptz-RcnV;!{x);d{veKI+ZJdw`3SNl(u2p zHBI`8^>M8&zf;4z%tw)QUcAA9VW`iud(r%Q#oheNIFjvVy-U++{Plnv+-_^ax_!W>cB;R<_09V^CPE%rZ~M z$qJ<;m~#3sNa+pctSqL-X6o~c?r3w9=gor!LLIJYlQLf-uRxtyRk$T$1%@sC18Miy zqqJ-R7%ELi$&6-de)bQhvb?R}+sW+U?-Q7l<_|r;+8<|~yNtg7^ThC@{kY7NM{!{O zRyfYwkdDuL(K_)5oAvhx`;cmC?|7T-&c?&dfIQ3!zd~x(O+=ih4c7NMh_OvIMhRNc zt27o)Nhs=SGj2z8DUoxUe8-wcAApnOU{@urjljpQX!x*7DLa~k*0|b_-IouWcim-dEYH@Rjv;Re;N`qqo>4m z<`hWX4uSY;2E-rNYZ9u#gBXxS_HEU{z#B~xGEOxoNu#= zd6x#4)qwrdK583x0pW@WYAhxZqr3GWoOFy-+H3N*Y)E3E@0P0bMzEWB~}L25OH-CG{zO7d|8Cz3DxIjnty?|>R52n zOGo3;+I;2&ea@Dh^~`?UXFl@>U_I&<_55{*?3F3;!keea?%&y1Jhv6(l4a!VTrJK? zIh$k!u0So76_`F?8RR{&g`|-W;Gbj4{FC-e_^E|CC8GwT&#DjTlg*yVo!u0+En#=E zWM~+y%Hbqq=zUX;`L>M^{Qft*nj&QR>s#o|cn-<(RK|B}#)H=C+&RWCOx3zTuL`1A zKGO+P@699{^AX)Lgy@_m#qFP1Zd>Ic#QbPr{M#~Uy*UGaFHqxN>qlWoIbup@ErwoP z$L7s5K)S+*E^Ax^_xyk1QftP_Yf#4~uMpgO_6&ybrQlZ7i5B6v&~)z?5Zc!hv)pUY zGqV+9S_s4}$ibB6Vr(&EOv1m6uRPs_%w%3E(WhPH$@eQbJXwXe?J9xlzAMmGZ~zO& zJR)WR4JZx20WTO|u5YvoZ$0odNG5Gjc>HCap(!CC{4fEA?o#31KOVtAwRPxLdIGgP zi_mG78O>4;r6S2TSY{hfot3m9#_uTBKkkS3Sy$>xU;%jN1XIt`FUj5RQy5j7LV`mo z*iOCyx*WYh=??34zw@H<$~@H3|AgKSg`~jcHl0bkpfw~Cj+ssb!?@RAFylG%{r(om zmiFWQSYD*w>jO1EqsAHIrHHyoo$5&d}>UWIKl z;)w6wP;?r-97=*jbpIA1FSufF69dZ7vh*6pYwQEhulwn^3#UOazD!)|ZjQE&IUsvx zK#QjMLy6vfDE_tt?`0I?59XS0T6zXkn5VH=HxJ#pRgeRF zb^c<=re7fRy+dm3niaOMiqKxzLu$glkvYwYP#n^QS=6D2Rc^m-JZ>3t5Ot4*LQqEx^Z!f(QFpUA=cFxky!vW0dQ{hEL z*TpHW>{(Hrjov$q&~m(#Oi@W^499nvb0ifWsw;D%!uMjyvR<+E%W)_eKMfiWJp=}!D-kZU2p7k#Ln74GQJqX@1j=s+kMaWhg%vn-QoV7=SM%5(Xwu;|3hDmm!$+`x0!#YlVcsR0-YQ+-mUrzc)r$!2+fc5k-Q3OIA@ec%%d@G!60h=NQPB+({kS= z(Cw}T&vR?2w^#?wR$RlL(Fx$96OI<{w^82ogJd1P0~vlV!2RC~P|%PHmK}E>bUgv_ zk6aL?R+0%NY_IRPRXlUvV_1@3$vRgTiBzvwara>Yj?&TNJriRgrgJd}q84X43zebQ zG#-+475LKdFAntiNHsDuNKLPp1{pl3Tk?N_WYt9G1^%V@ul*C|e61nT$>s3XNr|@& zZ3l_^cd_t}53TopNkgKU4`cX#jH7?CEB_{ulret6AqjJaUIM|R3KH@~j8AW?a{{p! zG0#1X<6;9?Kl(NCU3nHgPsP%b*8Zfvej0Qy)8`yA9)M%qQG8+?z`SKDa6wOxtHRGiw-Nz7-DLlOJGmFVw8tyk*Uw<#XC zt`Ee)(|RHPg#dzvB!KB!#)M&eis(no?dNz4C%K$Ptq{hj?&*So(h9m(rxlzFj#0B; z5#ZT$-50p~Dn1`3Am zM)z^|;h%{tpXcQu)>0Rs)k`HjWu?Olb8Rw}!puVf1@FZ9Q*Z=WqKE=F0WyEwR@8)OlmNQr%aGU>=0j5wmgx9op|rv@gX(~nHz(DMz9O^a~g)g{mt zngt`zmSV_M9gKZ_6C7suKyhh4NH)w?gm#L-?W8ekc`)9)@nu;0rx_Vx5k@h_r_+uU z+i^qIuk=N=Ahp9}Hs99S+hr7^f2Jjxzn%;_PF-&e1w zh`mMxKaMJrmjMahs5v^ZhdO z{Je&sXdyrQ$S&5K49}LWZM4~vyAlmE*t6vHd+2RGg+>>TGe2XFSboO>XMX(6IQmZ@ zspK9RW^RX)oeOb&*eBFld>ul64WU*_`be_Wc>jTOY_9Wc zCS7s-9XO?&K@T@&UO2@Vp6wBGR~9nH+@#C6YVdckyl@55*BtxJj>ohnFhv z9&s8?RA)lY*BxTRi9^BMPluNa&Oo=dG6#%PdoAK3R?d9OSQKw)uO7>Ru8@FV^#y1$ zxCg&}usoq*D|(N=NwbwTIMX%1VAO<5C=fPM@8M(7xq{vOH$-CvduL3pn!|VnVbJ%c z6SQvaN12lm4b@x2e6~}ea6QFm&-J;`)$Zg|WiyKM9H^Mh!Jow{aVITxIBx?E#Q!@9 z#&&10-0L=oUe5vf!EjvqFJ-;Rzcl!*67L(Q%3HTwq|mY#pu7IWpF{Xz5Hc?34(HG4FBySrLkU?4U7hZVqOQ zt6(*aKHVhXCRYYSZ-fVYH)J!d?}a3P8*`YP_7h8$7Nf^YHWQL3lNd2`RI$9KL zW@p5v9vas22rM(F5P{KZ;_*y`tJJQ7ZsI9Ot8Ic0>bm^vnX!0UB;X{8YZR$7_E9x& zZ9Z$(UNH5_fU1%;_=RPGBu(>iI;YG{*HPk4E;rK6VX=7SfBkr`C8{_oIRmpCz7o5; zH_+o?EpFxzGcwP!Zu1Io-du&L$A6HD#r?tC}XWh7EGy=LyVOn%TsO_uUMWBn++Iy@$6$V zxTP9g2IPR`oIqUDWQBrV`$(B^G?)%fhQ^a$h{w%6coS}8a(ypMJEq64EMU)$47S%f zRY-%XZqS{MYMhGyIsEFY&8K!16QiK(5H)HGcq~jom6B^H&wd2IEmgR`EjnDTUL^*w z9I3H@3Km zRYSXR&-E1$sndm{y~408Jdt{wIECH|*xjpQpEzgYW01@+M!SWKop`(w%ynjK}Ce9zrY+U8cD<>G-&S)3sd~GWIjH-mZcYzetQ_JFO8j zK0@H@R1h8CLl@R|K}29K4PF`nGEp@t7uZ=dOqs-){=qAcK0}Q-3mS(WBlNr) z=N!Ho+eRmY?8toL$?o9$Vhh08Lj=FZu=^J~XUfjKC!PtTK;ZTe2U|S{*{1~<^LQ-Y z9IF7sC+wbJKZ7bheZg~6OX1+ZI-F%vG-G`y!tP8Z&e%5=XKiN;%KuI?Ps1|^^&SS+ zhwtHKXFb0C`4^a0(T^)O`46*>o53`F4Q}!gfEvevsP*Lm$}J5@4R1{sW+tJz%1bot zuZ`Y4CFFAnV=EnA4!*PO(QWN_3_c!$r%$px>2XJ3Y%XfaO`#)43%H-`+!8pd8G70K z(zyeP#;z^wIjqWi%6HO~1tCx}d=HV&8$m^`Iz(`KEM0$3l`B?1g7xg@7qsQ$?5)1w zM23NU%@8uUyAf=28sYpb#;MwTOzc~}07d&-#ohB%xny>xe^aZ^v!V?u)v9qO@n7gD zy$9&|>Jl*uW9QA9HsZT&2WSb$;p_IlxctUB^k}t2%OEki^hSegl2~Ea=abZ_^) z%Y{_4xv%F1c;b8ouk1Yuw`==zY@7?qvCIM8Sj8N8>8RDy4yng{KzBzSO6@~nMuj%F zw(}DRH+m7*gI?fyuLvsc9wD(wf1zp1A(VK0ROH#R`}ovbwEZgEgHFywvR0S*;~3B1 z<2f`w4ke<1JLoyGlX&NuVb7MguyHewW@8gzW8WwAN*s$$2aJfX+cXq7_lJZ+U4GGQ zHBRzls5pPX70@+FWSk8fF!*hSRwH5|eeXQzpQpv;v?Wq`JBRiDN~m&$by+HYpz-&1 zFnq8RlV-jKebs(k>q}*9`!I)8N>1bJ++HmC&zX+!W&0fjtOPcz06+fH(t?U&uYsPW?{<8=>xWm8oeiRYqjf+?HfWobPjt6lqZ zG1oU?adtlZkLAsD3Zp@M=opqLNnw+5K25i`0r@N=)(sJ(#i|2nnr?=I>g&|Jt_gC? zyrI0Z0+uIyM^VIiaYm?w7}3 zQMX;6Fv$2X5jD&N`$5k!<@su?xpqZ7H7*Na)p^Ld@?KG8d4uZz(Bx7tb(1+mzCfd5 z6i8n@6g#Xb!-RVlIP9M}m}9mR1-(DBy=)lcsdN+?7Vg6t_5!Z*?rU6X@)O-o0gjMA z0k@QI5Xx_js%K_?X@P(eNyYgd*BB;j@8tWOS z$m0=c4OZu6+cl`Y@HnkXW_$Ey4UFU1j~AHk#MIFbNm-5vdOn^(!5=r$_x?H>8@Hop z_;4DK$vXYHnV57cin%^Ff#AUo8dbOoTZBEBJnAimPTEUaZ!=EAlw-tYm>NIAw1fQ} zC3Jl14}#t2#WnHakbn3onC6y)%uSUx-Uy=8eqKiH4i&B{K?zs(SK*|K9x8m!AA_1S zUyPX{z>=guRKCyxBZkH?;qL&5x%%VVwR8k^P8mVNNLUNp=9_VJzlr122vt!g7E4KZ1deqcFoh`Dsp&` z(0by!QUc4LMx%JvHK?0)n`K0#G+E;}3OxL?Ouso`NLnu3xB3o}CKbM~H6QIFm3hIS z$6`6RmOPJD;cB|$&~?@_kjPgsKb1Emk2?;nXV}k+XoH)rJgUb(fH~>zSQqjIRo@K( zc)l7OJlV4?Egq$*-QoeO)cA#`pTcpg3%EBf7<&)cq3p^}Qsa3Nx@P3!IOanYY&wdP znJ2`C5JH^7n#rsaY~OqLlJro^&o?%+=8&Q?=W&9<73Qx z$npx6q^r0C-FF|sntx4+eSj*I>W6~Py(6&s(m5RUhIv{$EofBI4HEPC4ldl>3-a=} z3PC?JsJKyw2_^^7Iq3*>9QO>W-i`r*{kO~?=Q_|dY%%-&OuzwOt{`YyqRj7UwyeU4 z9(VA^cE53G8`cc>uIuymtH*%)%M!>=)ZPSDP`WP;#${i^f6Z8y zBPtrxT5Qo}(=}>w_#}kDwG%Xw*!|!i0hsK)LkA_va0$yp6;ESXho)S#SfYuqzSrR8%6?q6 z&tu4#(h4}L2IaOJ!SjtjRJ(Ly_~mqTUwW1K*>v$+9h=t#+9_PWr=lQ43AA>$Vqx$J zNP9dDb1ZMtn7H%M=~l<)gKF8!u5JR^VohRf^$T2X?ZtP-N?fu@6IeIAByHnwk}2J4 zypvfZF3f)o+uAg^uMe0L;_G(UlotxYCKuSVcQBbWw;yjmGaGB3-Bv7oJs6#`e-V#6 zcOax}AdAgNV1m6aXC-QbgW0-##Pahr>ya|=S|i|l*NG7a`5;8{*ipM1W{r)(s+A!y z?34i(eq_!Wy&`x#^D7P;F$lcYYT$NLCGM=T9%mr<3f5yelx3vbSoHTrhZo*BI5ZWc zv|4e_{U=C6ooVIRbg-PA2(QjE-vqzJ&ugF}E}aBi(dMkP z8i=3_P~d(WtUc?|Cn^->>6S$6cNA0z1DN+uk!|(u1>^Ulq8dQP4tlwEVGy>m9||rp|g* zvCPqM{yBAimP};QWT;X#MXk`q=<+)VJblj*r)7r3d?be@&%20`bsy$AXz)>Agy?H4 z0;ibc)MeNfTz23o#fIe&Gr}KSUrYoQ=QK>-o($n$LT(^qneMLWMWJs323TdG!+Cu^ zSo1mrOZ-7H!V3#3)9J=`UB1=h2#9>%lcbaHNr?Odq+RxvrTm#DC^^lbK3uD|3u*qpF)((3DbLX;*#&}=q(|sD3FfWQ|@ob#7 zMw^Q%WIpU|n~D08F4$^)1U)0yLj5+D^|`1`!<>7-eEc22{SwA9Qo>>8Cm~efkH(4= z@DustzW=2#e#1|3*3oLJA^J;GO8#JjLXVfe3s9t5xzdt-71-YL1MK@(5fd*v@HHhU zXv|j(Eb?IQz6)Ub>KnA3W!=@D>BQ-m4a-=bpzf@1?PHaJUY1?($@w$34k!`P0;*n4LE3M{*{3sTKh_+G8 zdta%gFo#YgR>!OHQxA1Q%@rMf)xa)@%}>K63#-6&(nz@0_7oj!)9}Ph9j>a!9E0;~ z&^4`&cxEc|7L!>Qb6GIS$=;>7S#=a^M(&`Ys;pDt7(&#Axy;3M1x2B9u?N+}yK5Pv z{8gL6`mP##A8BKj-7i}6iS2@)t|Nk;9b)0@lccTk8{OQ(JQZ`#qW!}OP&#xQI)~f= zi{@&yw7A3OD+jWTwC-T;RF<~D*7%_OO&4*=Y!hn@3+`~Y1 zE-#hEx9=ZE7_AN7TJ^-`V?HKp{YISFpY3a!PNUr=^43{B;{=UH^{u zUwPWKw3%jQjKXBb1k8%Ffny)spk&@rtp4=}lNyoN~Swd$Epr&oc9c1k}1gF)+uT%`V@P%usq+m8z5!xt;TdA zydBN@RV!{_iVKBdx2tJ{;Rh<%s$?T~Uysj%m6%IZm6y2_a4cp_ki{PC8Pkt98Tdbt zSpT5+J07A_yDJ^I@&*;WEzXY8K1)1XQ%TH{B#eJ!4$fB>!{;yg;AnFVMTa(0-5>8k z5=x0gabH|B(SSB?!=FQ9buRO)qN+U zt4`zI!2bLI9SyGL>kEi@q0P4{UxbCl7a+O13Z|}02kE#)#K3+LTCnfqsyn^VcenvG zQU`$l9yuE99gB}oUcs863c@~Pyk`CaucW3!PSkTnn8s|Bc^BH$jbRRG^G-;q2!eu* z=fSsK8@m2uJJHOsGSi<_Pj1lSehyE?oKM#kM(d8?rhsxfgYn_3zWk-Fg^qZk zPlMCgas@*AGI804mvoc6Ixm@$Nu<|4GFICNYl+$iabCGCc)L!+$uC(3;&TLXy?vf| z&F%pI6De4DBnh&PpN10sN*Gc8oH|O&VMx)s~&=_tPXz)gP73kxh1tGKvs}3uH zZ6Nb-Z)AS4BO}2jI29xl28dl;TtVt#gugmN@qXTW=6_=Qpv8TlxOE#(9X*EO^Qv*U z1G}f4&!N&6zHIjW5C#gTgImEm%t`yA$e9}|w#u`?!)#73oud$UwAe$!JSl33lCaVu z1OHYEIoY~F3h6>Cx+U>GbV+jP;R+otV#Z1^b!-H8?=HC(Ma@AA(xto%8=dpOI=zz&yYz>4D*b{2Rh}HnRL7h@YoM`?^+kS^{Vy*r*%QzFq~t z^B?iUX-(cRPlcbf^%8n!s8U(+5J>H^r@~KK#Pj`NNP0XHx@t4X@}wl3W!#K8Y_1hF zfX#SvrlV)94TR{&=vMI-5n>2WJ>oMbt~ zZZu=(z?#%th2Od?Fq-fJqf}Sn$UuG0MWujFHF*k(iN6_JA%hz4XoA?dO3WS3?$(uK z$vANwlytlyve{N*QRqOD^gES#P$rVds&JgFVF!Y49h(9xHCVD_Dc-#D0`LD53o>I} zD&1xPo+V#sdEfc}qv%ZIYFgVkyqkCPVCp1^h!c`bwV!*j4JR2-MU_KC6$mQNlJrM-sk=5L%*%oUTZz~{r_JVNH<@GPzm#nF8L30 z`b<&mrY^E7Yr(?X`6is(n*`&3+rX^t5^(3muz=0HtVR{nIcydtZu&xA#n;lC?42-r zq#N`&w`0z_-?%4vFoarufSCQ)!R19Pj9jb8hrf&k*;4||KWk9(_a~yrtzqW|1Ch>O zjB%~UcJ`{3sN=VUq|F?K?*HD$szGMB%=ZoYuae_L4%ZmB%b%{X6mnkTXJ}e-1Z_7& z5lvMs&aga-etDzA&2VXj6|TnY+$Z4D`YBfLt_EZ0yHW>}^C+IQ25|m#Oh0=T!&YX2 z=N(|SfyCdj;QL_-)K6tTd8@A| zw7EoL58uNQcK&Z2%6I_05VHrx;NTe!u#zzr#NKrzBw75mD4HEncwMKUdNaKrJ2FEb041D$aODG7B5A*fWj#X8(hQIa+8Y zp8=Tq2H&^oaN+rXVcmuf5FXNi`Ttr%eB(rLf6f{+!k5I{D-&eePNIqWPoc5j9xY|{ zp!22xQ}$}}#u8_`F-MzAboIrspLu8xEGPRY8PDzgfyI+2g1$;6Y@d-1TFrNH1k0t* zYC8k2KWjJuOWWOCt}LFf|6lz)+<(?0D+krt)DUyb)rp()wwR> z)x+36MokztlI3(`lz6cWX^Fxd?2%)8UCU$8e2lq&?QJk9=?J>+=#^?61{8ib0a^Pj zT&gJK^UBnCgZI5~J&5i9C;uT<(iAxLB#QYaT!>F~7HmGR#Fsz1g#p^8&}CK%GW#(i z*R{@MO!G(xci)27vm4o7-x;H?X<*siKrET_2bNsrAuU0OqZ!*l+{4@%4L8B4TZR*T zzOdOs5DnkF0n zZcTDElzr7;&LAavJdANu_z%`ryBpDGZX=zw?lJ5xEyDB9qH*4rPQ3d}lXGSq9Px$? zAbr?@ohR;NaFiVHGCUfVP18na@oI>?BF`Idvm<(s)}el>Cyd{=6E>P$#);3v;Nu3w zwdrbn?5D3dsacL!Y|;bCy02t!ZZZCIS&RR8ot+6cgo(Tsl`vQLdUUT;02?w4Ws+4m zJXo9S8`OqHwj;6k(MeQXsK76GD1&rv3n|~ML(1Q3vOQcsnv#6xsf)t&eO=__UABum zI~iylxN|Ema<#`k%WCYo{E7CAWBK-AI|yS<`J5y2 zys6+Kq?Hsx9n09gVi^iUyLpf|w+%Y8uj0YyJ+Mbv5rU)h(eOYl>N+ZNy{aj2ZdEBR z<9|c>g0oQm)Prs=E5d<_Gmx+G0Rn>)vAy~N<9jhbSL;(0E=r=KzrO}=ttzmKlB1Hs z(a@7yOYCm%1!0>W_|Fbz?n*gM{I8p6rBW}HNQa?cOdGVdyrwr>Gf?%TJokEDEQ<7X z_^>M{sGWxmxo0Q@(}h17w`Krvrw-)Y-H3fB?4W$M8a2N0FIjU%$m=wICKIdKt~e(f z+xJ&N?>cqfgq=4X#<31xdk2Ysc2251iTNxd)}RJ>Azrt7Y3uB4)OmM+RGF@T!N;<}>a9Gp?5 zY>qJ!1kE+0hZVhh>88qFf?N z87u8usSY2i)7j2OnRjMBmuqH#fJeAwQw~%`*7ALl{5sp2S4mhF{kO*#V|8J{Ys)GjrR7Qo)LP@?_9$l>CEH@bWNNT5Drk&_nbbGk~(c?uz1LwJ3XW#>BHb*&aR;2eEvJ_`?Lz)VKkZ z=yxn~c|EcM5&gzGutf>VCcSq7!54ve=L?x7mJ|uA$9rrQiEs?hnq8zZ?#Fc9NVV(1jepK9H3e{cD@gCc==x52}_8;ut zKQ9BKWA5NT7o*t>!wKqf4u+RDg5ZP}z5BfluenbGlPRs(ICmU!|0;25wPVrsi7mtq zoq$${-qFfaXBijn0h@X6%?(bT3?|IUzU8Zs^Z4%+Jn>D(=E+}R&31OK)3FEl-b9RV zV6YkYKe)N827S+Zqe0gj)SB4=VK=W3pVLAxW7)HR?loha#vgp`@)I?`EAfN#XG7F_ z9p3y>Eu^n_P40!Qgu}cR-!peLipy6@g)NP=?(!)Zo&6YWj->(cu8?f-n*>gO$v7&# z*0t%XT%XxEw$uKIV4=Vp=SxLnZ{%SI+avD2nuKYx%kU+Y^>go}p$7XukN)uljE)q* znxE?2{szXw&ktf*3x6CP(h1>j`apkR61%7FfO@$NVC7cEp1IrUXzyBhb+3n>+@iq6 zE}W0Wf>iSL24leJ+>rL1zCw-C*jcepM7##Qp<5!NP;jVNBtC8pXEfzG5B&kqUoU`~ ziu+Wi)h*T8V$RG)S)xLBTjrx%4L-`>XjVrZh?g?w%bU;edVwluxQ=yv?%Zaa%ye2j zV-JXmBp`6@$g!IIndslrV@|7a5N~u%YE;+`joUPNo6>&pIiUvbx)m#m^*PUx3{&QJoukcHRq`k}noe9(^@vU23>-N61^WDL!PfdD zoz8e`(q*|2wlWvZ(pw-alzGNZUWW+R@A$Gd2;;}tL$GKwh*BsF`%i*x2JO`StAH=Y zGz_duMcKz$Xth^_Uczy-;zA+BqaAg<-Y8nM=m;t@Mu)6MThuF#M7xvAs4zqid}`yt zHY=6!b*EzNxxrYxU=iFh%*Kv%KTHptKzx!{vMy^i)C^(QgvUfE{&|Jg&&`Bodk(Vi zsF!F=4RhqaO+vv7d8yxbwnLt;$Gd#H1UK_cQFi@0wJ%S?_+e*7w(=qfUZBU9m%k%+ zHHI{BUN-6l4aHjrpMlJ)jL!0H1WS_vaQ$>#y6HXJYi9okUUN5)3NzLpD?66s5!S%+ zUf*!{fvae%{gNyzeS(7VQN&1J$X8XDpsyDDotC}L@kwlcLV1m1VweuH{mH-R2Raad;!;6_mE|g#Uj~1ouY`+?|3|j zJsWsE+WNf&92EkoB>E+mk=-b9vzGSx>45RsBn&e@3}U8_->Ah{vptL%?#W!1yTl;t zXS9JY_i6=inlOo%3u+QQ%5DEg(Olqz@4OcX< zedO7j#B$Ra7|_Xsij^Ipb14kW%PujN;uDeE{h8>Se*(nU)I{E|enY{=YnW`_iA@TO z-?Xlk7<{{cX_*7yIKC5KX}_SE6TY*opgdXxao{oIAv(q#C*w@81%YG7YZypEi0`ngKsKmKVRJ#K+_) z@Fp%P_*+@X*T#t)x1qo>pU$R@^I*F}B?doJ1<|Ib5bf~|gSR|{=6UQ4rBDT2j4EgT zC6D#)9udjLT5J0eUvX3B29Q)fN99GMu7pS|=-o-QPt^dz(tcuJeI!jrW?vFM$Tm50POa=CQQG(nGb*`$6an0>Laafxw zZ!`N4ipHElKc{jqOq~v&7Iom@KjXp9U&iLy?40oN4TKJl7X}iSil^0vIRq>%A=ZK z#v+z6Xk8By-5Z#0$aZy^*D<;FGr4e@u^~*|vHiw($P@g*E~7SZ*9wQ&fZNoYWp@7A z{t|mSTG06FULs05iOus7%+Gzs#ox5~_|-BkyYfx(bi9Ow3 z_%Zi3#<85j_JiRtab6Q1Jfg}6@4ZAE{xDC;NjH)Hzez+e_>9Q!{ZrU4)Z!Aq9>8{y zDc0ApOht%3`ZFeo>ryRD57+<$xxdkEgcCZyc}iVNuR(=&6DS&Lq7i#{F3xcW@!46@ z>j&RsUE+PPYfl6V#pw{6WcdHHCbT_iCAPL-vF>Lev@lj^x}1q+;B$F4*^91t`2ahm(sGxay8*tUvXOIIL!W-*+KY@0ma7+zE#2BjIpKSCva> zQs6A-+y_BngSE^kgHGGygU%27>F71A8x(MvhW`By>$cXh38RpIZllY6I3EaJW8TmU zd*rwwYg(|@RhQ41(}BAO3;H9~kY=5i7*BMZ3D0)S^A2HV614SMc zuCr{-339zX38%&hxEU%@u=J+}?de0Z!e-0iW!TxkZR1m zjTQm^P@mT-jo5GwuNqy2=2_~PZJ@>lJ6xby>wbV?Q$Nj^wGxeKIP?a0L5UvYxoioO zrr8WfQ`1Bcj(bh-Ifp`md=twx=D~u-SUge|fdwnI_^<=d87ndsb8SF&*3#RI4{+ci}|b*e=h@)=bAC*PxDu z2et6-BS%hEf?&fRs}=3O&~i5vy!}-8CENaB>pu2###=(%A=ZbTqs}|te20dGIkfDp z2No&ULGOoX&`tk}^=~GlZAl?rp6?HdY(}xs`wmvSr-6RQdH6L~jeAHnd96l&j4~`? zJr)D7TO|hv_x7T}gAd@l_7o~sG0x{P1;(&b!R6bR;+WGTVebq9=dph>`pI1d_v#Q@ zl=T=KQ~!n|$ok*z2^ccH3e6_C;!oi&h^`+EO&(b!TJWtQ&iQHsbIUd3lqb!2P45a-yOVt%{*fkS>JPH!d6ruc{Mi8En!m^%hoECM4 zF&>MsP{RR+K4D#GOKaFvHUfH-zLO69a4b910TGSLbTwaQXdBI%*ARpqevKCgiA`Z;8?O8Cwa4( zWtM|6nfpqXr@jL%WWLL`Q^ahJ7H&AjgV*N_>OO2D>~quPlOH`LbAx`uhCIdz8*2#l z2Y9LBqjBhJc$9?9y^ddb0r%X!nR)&$VZx7#DCuA>-|2D?DoAJS_xb2sy%!_`YtlVT zp7YwXl6XyIyTJ0{^z6oOcq=y*6Zaj&C(Spo_4gIjR~p1-+APDOc$)3n&WMaIy+vc& zzlc%&cNk>cj<2qnL;B=y5}$4X9nN>KFGmLPX%|6$t|tHD*(_{VnZZ12Mv#6#pUldu zL^&mO?&Y;Q^xi)JZkrvkXZcA|@}(B_H_pKL%pPgm>ZjDQ;Rozrqr^XE?%k`)?}P7z zY4BtO>(OovlnN%N=7x+bg`RJ>h@b0M$Qtn(EPm}E;@b6KYlvO70^)xP@P%Unv~Ns= zO<8B5EbbMA-}Q(1Wh!J7nF_XBiivn>AYM&qfX!#vz5{DT2i>cg7s?Pebl-wvNg6Sl z*ok&e$BSGY?A3$y% zxB*Lcoj|AP2e@J4N3abKqFRd9=&-aAV_PWhVRO<>SpquYZ%BWWP6Y3Vf#8E8S}CjW zzORR2Tp{BLgfTCI=o=)T8wK*Ft*me3jaEDMWAx6^5PRtuNRm==KObN_spp9-+xZm- zI^!_Nb3eLYRD~f`PcZuCTy)lb4)W}Kwfx@(SoT~UJ&mtI_3F>)Z~PKn|C|=Nu$ris z^c8K(tsp}qQeZ-vGQT{}64m@aL$-^MkKrn@>Ut9Pgfj1VIGa<|TxHpXNVIo~!x=N= z_`tL*488?WBz+GS)=K<@Tbf+4c`NlUU5O1TnKZBc9;9t=Vx5kSI5(>guKyK*vv(O;zVHWhn|g{PEyc0Uz=`2JRl9nBAt%>Abav zwxvZlX^kpZv-~;cHFsh0!P}(l;Ug4$e=4f6pN8g_eu2y`fTr*9AYlPIcH3TP~=Rv$KiV8diTMLf9w-!FSOCKF$4xmi}zO_`$ za=Sx_S^7(`Z}`qU%oWh+_XmPZ;viD^k-NxU|bT* zJ>1Mk15xPV9_gT?D+}pwg|FO1#s>}DVE(wG@SDbjmuv9#a_``fNl$3U9tZ zQO*F`vDw^vHb;&B86{eGT#*aaI*p53zo4DQ6{5mA)SlBD(CyWFG_mOq<44A9$ zFPJv?KPX~3cIT%bao&#@wAjcNy?=#3MNkTi?{CAwB@>`8GY;Z@H$ga?lX=_FT-#hrAEPLz+*)*2)6G* zSy3#g?Qq1f$#Gz3b(wVAtMfhDTIhRM2aW%E09(4x;-`o}bX@rvXL&P!xWXhb9kz<` z@f7%p>c`PFUO-|t#oz+AUv+rSvOi~n zh7fat>(Du`40=}W#La~_Q91bvIG4T0-a%(^NuLs*=H3f}2gTAd-!7N`FUd z^G<&Kc*ThAG?+ihFGz>Cm~o4}Bi)9YVRF2gWdaIHXF{)vM z59mA{MRXLN!J@sH&}_xB>91uX3+Bd9V>1%3ql;*4un%;7de3H~_n{)H6;9T&vyxX; zw$r%;Xx*F7a+UVjnWDkP@463tqm3cVbqujQlL=wxmHFsu4L-L1AcUUOX6%Qc8664N z(f3Y1##~5-(X5x3_{3P>XF+oJbFSd4nCy6` zz(0GS%5OXzg1RB!@L^Om`l!DqV!B+qAeFI3yxpWONi86r_!xm?LG;^kjPdM=wkOX* z@zgjV?=`rR$9Ew*TLo+{1w+S;3)rIFgKC;9F?zlnh8wayr_)+A9vmR@Fd2q>5|)9} zh0EY__BK99Y{o%0r!h#M!=9D7^zO_Ds8hXw7&;vWZQ+Yk5M{TFX)`~cs8NSLMe3-QHa#=aX*YW#YrMCfO|=*A56{Llm*Q!k+5 znk`tIDi4wj7Yr@_240x4q#$j{D~rQ&hb{FAoFw=h+`zGXDnl8Bc^Wt6A^< z4`V2v{2Qv~6`;jVN0>Zbnb*qjhpU&Ei)d3AS|rY*eZ~qn!0zEg5@N8sJr;!@3*n!U zRVZlqKm{N6Sv!6nf{(`Q@I|LZSawGlEhAVjBt8%9FUxR)ogerHYk~P86O{Cg6xB3M z2dxO!gBl(na{gWc!qY3EbIdsm{yUAl)RLiO?`CQkIt349YH&MODRM8Ss^YTF`V~zz2+Xg6tg%eAAW;H2%Gq#(qkn$-jcB>+mDwR(T4FcR5LG7OX(n{1!wGQDD{RGXBFI$gaPP zX@{3#@Z0%doLP&Gi;K|VMhsp%I1c@Bo8N=M*vgui=jrezIR>b}cn*@I_h_%67K45- zL5-CGnEW~sy5_$CYogkLe(Wom2;&kiqvX4V$WUDi zwPP9Eca#Ej9c%)%@1IznWgnWqWzU$l{V-6Rjb6W_X~JtY&Sb5SGjUPlLLag-v$u?S zxRrRJO&yIH%vhRdZSik8MeZ`&B?y%FT6=zP#8JlDj9(i;90al0kQ)l-i*JJAl{e5@ z+l_|FkKtd&HCuFG2DW{h1r{TdN%7J&=-r=*eRK+1&2+=+@)(F>Ugi29pQI&8{vdRJ zNDXt6q5Q`nkoPJF^UP*UHyHwrnGSeR#=0QmI?&VN6883%;LzLhyr?aaaj5Jtvz+y} zQ(aJ;qa?M}`$%(qTF8>ek8$p%cF;;N$K|Swmt^#d;g#DND{dxSA617s50lxm-7h!s zZWm+-`e9oCT+r!PBLCbhVL6}Q*z;csT7|1)=Bie78GV)cDknoRn;ZEDX>qR8!@%Z= z6~>|+bM5|ir&}ZKVDx3Xh)zhO^;9~f^|;0Ws!Ms^nxxYe&Z<3o74o7{ycJXToUt0d=NcRc!RIU z>hQKh8Rv9Lr>HbaoeTZyhMU|?pgOV(gF{-$vm1=pW-);brxHsis~UHGKo1s46|hORv?rCw*N zh*<6f3T3R5IkguIzI{W*@jIZ8Yi1qp6dcF8rubt5NGg1&a@PxJ-kXQJ!rIVhS1hSd zTSi3;sx8S-0s0k}+bfjJH?OMO=_14GX=gt>C~!fpt< z9(qC2|6HKkMk#SMlW(Ex_w88U+$(kc>jDWsLg!F7B)kAi^(L?a;?!?N$7&-d%Jx&06hUfM_% zc0WQZ4XsPW)L4J>@>GUpe9ab$`APDwq3;}IQJ%f`R)vkUY-XzW$I|7_a4GjgjDH)1|Kn=IUqE6n7}+^ zjcIS8YnwX%C^H<*e_q0aAvdr}Eg3B{I>CFd2incLjUl%w&dk%`3#J}JWBXjG&L>5d z_d5oC+2i5r9_A*{x53XtBu+mu#Xld>H$w)})+ zj8pIW@B!@IU5*9O*U_-xHW)wHM}6lV$M*Aopzn}BG{wDT*{^?S{iOn_Y=1hs50d9! zW<_GoJppc)>&C=$lhN!FI~&hT6^$R-OWH%Og6kk>(l$PvWSnh+J4aQx7dFA*`euL> z8<<1Q8W$`-jzsMBFX&Y6AU$IbVU{m=U1$}dg!LQBi7f00Ecc#)$Mtl0udX@JyIY3B<|owsUgJ#lZFm|{s zavXY|n0}vx-<#CA>efKiV}6V#<#MP)qw=Ui#VwQ%DumFTZy|O~DD!Q9mabo~$xVsv!@2(5a4 zxvv@`rx}9Jw`wvygk}1wZo$}bAJC!b5k`+&fazURsBz&HY5Dm*;8Lf+r+;`(JbDJB zpr-&rxNB_Zz6$R5t8(FuCYU#O04#Sl!|Qty7`)CKR>^zt{18TT26*vI2`k_xZb z%t!EP5eXgh7(M@6#P-eKsUWXNYIFV*;D?CtyT> z3p!gy!PKcuST|gmm+x2Q1GEmpiyz3iFnV0{TxIn0Vw{HB7)XnI4EbknfDU77s6`~< zrlq|!xRi&S#WV0@O9b8wy#fEf-`D3|mnKg_;=Fz(1l|7zZFY4;=w3_5>yL%%Djp^5 zzV@N&H*>h_aKq-Sa873$n9D>TT}w9M4ikA!RB;=I-0Q>*pWC3Zryi68?Qw>HF@r7) zXPvze2oF+3k9x*w%CZ8nBpyTS#^Ax%At*fdipmm|&{I#758jbahTg4bJ4}|dD2N9A znl#LCI|Gd(dyGLpRC^MMII7MzE&C$&=N4z_#g7oi}~+`4|BHZS-*pGth)$iW}|XnyS*eE9kY zO4qP`la@1$Sr?9eD`aeTI~oOzyvWH(nRnXBquR%bcxx2%XL+WuF2`C?@|OZE`Y`}C z?gm)>C6YJjtjLVd{xk-%dw9XvCSw#Q0At6(T*DPI7Sr!VkUdL$GN z3m}S5M?=o;tr+{{9(}Q`AKGd*5%oGbu5DWi8b;~zG8S4YNxu#P{fk(BKnj*1W=>Vc z6a9AsKEK?B1M@<`(PS4Sru4CFkQVR4*bCW*G`Q;)-Dv*)CK|prbD)8}t1pWa@J$O|K!j!<4qd~zZ@(Qx=9~AS z=WuoYc%dd2`iSwr!xoBsv_7HBol1;<7zTD@#uHhdn#l8DG#G0f!!1J@%P%_<%N`VB z@ak3+Uh;=ohHbE_pXFZ#%=tMwj(V8&gKbeIH9J}eTdyl}#)eO%;`V;gJJvasa63i% zsvoLJrfY89L94~ zWmtA2jh@Y|stTaPu2o1Qc`L&xf|AXhNIhI1?K+Zr;FS+;FZP22%aN zxMMLLzw;2JWwOjgMje!|yM<;e_G7Z|Hu!kn4-Ht1$7`%A>`GGR?tE^>sq?DQc*8Ip z_l|LQMjVH7F`Gqhg)S&F|oN4EVy23+ZwuN@E(MeN0F=GhArc&rkaDpH z(V13?uJ<-j^O;Yfc@twb^ZxV^iNM6=NAO_d01Q)#WUkU8YU_HQZkl8OvOCc-M6OZi3H2%QU z!{tL+ZgD=PUcmum(X5j=-HFGAu^L>3*-xl7?NOcrzZxXpCdBcC*eOQyIf|6JEI9aC78RyT$785Pry)Ohj{)<2-<7=z~ zt4s7pSYzAmJ=Fd2OXz3J9RbU}^bBdk^zRWQUa?UW?BoD`pI*bwU8^wT{22&#O{0#B zPLiLYYJAA9U@&%SC$2_sz_AkXV7foc`K(8Y%9~sr&1wivZ6($tHMpkwNam$1!jfGd zV9G>x9i6<453aYP<%|$$ZhMZdx&NW-ge+0c-w9MQ3Pkm~HV`1E1%G-qxSZ2piOE$Z z_DemAk{L?0YT8+noZ5l)9^Tfw3b%P*HKzT&0_(n3Vr;fNXdQnC{`Jb7`-KyLnoIG;>L{?h zG6csRQD9D%?X-rMqT>wOeb$2Bu?x{*-etyQQ-dj4-B`Ci7!5b;fW@cB zM9)B;?|t3@i`FGUYO^Zu%8RK?^ODFhFMtS7><15npSbK`3+%J1gplJ+sI0LT-M3Yd zw}X^<`zgANY2wAWqNOyrtDp8coQEA}Rk=E!k62%%O5Bgi^R7wnr8(8k&~Rc2Ow*YT zJFDcm;`2JZ)ucWWx^OTK=vG05jUxAHVGXtxNb#dzGRAETf{vs4_|Zq1k6ku2lhhT|GHrD4{fiD3%oP0iG!l|(Qif24}M7F}*%$uNA zaF@BO&Y@ZVV{rR&2)z!Cg6yw~T%^fx5I#Fa<6Y*{*f~>SS#lM`uUZ8bGv%nq-j)24gKS zR^6*_xHs@FdZ&-Xo_$YIC%}!|>)r&0=E*d4+&AVVucQ{mLilw`moxhn00~{+(QD~C z(stIA`X)M|?A~)&bo>)UGOx7psaHfs=HcRt%+dE}A381+fkZKt=ss)4O;wiQ=C}@< zHipC4E_E(`FU8^c%x7`Km3qEq@85hkxQq3!M+XqYYiH)Mev4d=c~qMs4dsm-Q8x;GT}dg#s?<(pQMez5^z| z&N61`V=2E|$j_Zu%{cAPz$-o)?DXf5tE=BboV^6yEWNOaFCtS7SRT!e`SngjqFSK{ zYo4)g_X!OWYutp6%G$8X?kZ+Id;`nI^BAHjLstV8k}t~vwa2LtsPY)a>E>*YdoQ=+ zh7y0pOo!XSY4EN~q~LJ-CMwvqVQ6dv<1k!=SEv3^v114{{mvl}kpaf%3*eHe4p*cl z!f_!%sPnd-#H@;A{4QPeKl~AIj9{~b`Vzc%M+F8Skmu_qH6jCH2ZmZ|qPns=A3Lay zmLHr$ANcp6am^C!eIJG~b3WrX<`|7&&(OSpU!Y&8ijOyHb6Hcgc+s~+sF|@Gw?B=7 zMU?GDzkGq8N^1PP{2(-JEyM=f{Sf~`iKX5Nw7EZl_{#Tak*vk%thz!&PbS0m@=|a< z5stxq^`t9@aqq^3Q04woz!T50%xn)n7Umoz6VRXAq7jGBL6)NEqVgJzLVvsZyv<#dy)8h zk0w{9;ZPqL z1Ifo)7}Mi2)D&&NM#jK!oxpPL!xw;$>QRi|T8iV1qJa?N8{%y@~)~8Qj@Va zv30*6V_aSmm6$r?C925Bbm{P8dfI98!+Ok0cmz8Jv^dB7a1yP}+#Oftz@}aX>6woq zFE<$V-A&lM!3Dogk>?sdje+5M%A7eni^o5Xg4k(aQ8w{AEm?UJix)2hoh^r$sB$Xw zT33K^V>OX|x=ydnmgnmn3$U487tWDNY?fgTONL)Sneq()LQZh7R5b-Lnnls5p!KzXbjL~+gPZo)#R`LzJ+2J zJ!t_^;XJ#$nFDaE$dI`ug(poQW=9{0cOw~k?mi@Yw4iSf>kXg?kDR!HpDwZr@~&GX zd@tji)-C`m^Eg_tBM;lWPEo6Gg&^?XP0O9s>HTwT=1?iYu+qE4F-aAc+5CiZmaC6R zX$JQr58>v7K9)`XgfZ49(Q5{KPqz+%C3@lbm2t50DoP;uvH2# zg!bG3_U^g&KaS2kF2?Tt+vL0mXahzrIMjV zk|agVx$d+}NGOtIXptm|5|ZEf{{HvJc+GU*=Umt4^M2zIRaL(KK^aCc#%w|2I;o@O zHLz3s5BKoD&~3aDSK!?wmCRa&=QIvL!KGq)JgyVnx3*JRg9|v6x#QNg%W&(SajY*< zjN50Zah@CQ;fEfU4LUI&R@JoP{c;`FU5*kxS{jA*lb1kM#89wUYYF+@jj%aNhby{# z4BTZx#>6+LPD?IhXWKkt<*-%Mx+;&%4ETg%gEBO#Ed+2s2p6`q{Z-)_5S#A7-fOk& z%q!pxCN`t^@M&^%c>@NwH)7lV4;VIgA;ykZX+c`~m^ zPl6WL7vlZJ?Ehq@4)aS|L6C1Fa;S9!L4*)IroAQyOdA>Z+5l}&{(=#w8ROXYJZ($* zhT=mBq)qb>ihmf37HU0d2|91P1x{-hVugAFTKpUZ zvxN6RUGEo;+SCoQYdVZ`9*62S%p+N&2XiL=f{+c@G1Ewmeq;XJFKq9TmNXC>pCw@Y z{X%^ChULL`*D&_@LP%c~gENwM!04lD+(?OlYtR0Ln%lxK-|j4Q94moAJ|XC$T`2PH ze?>AjUBMLty3pcH9u*v)L4+A2sN|g=M7_-e@u5+md87gTf}eq3DsxC>Rx)1~d#~i= zLD<)~P(G*;CBrG6yXX#Myq)0c^3$j=_zl{61Y*o<#xSUJfDE?|G&`Gw!M-1EgMmaQlsqxXa8k{)Bg(_$YxRw#lDD%&d_7=V(ebXi~J|Pfq<#T9; zOECY$bu>Gb05*>=(CS`&=?kVaH@Hp zd1rr=fmrF8W&Ds#sv#3{25*0&)jbW7_Lc#>IGpYHYNt?>P60HJ8o+mEBAsR~gHB_{ z!^tm$B!x#bsdNYo)GI=zbXER9dIIEc_zi(`^Pq|LQh~5B_mRSBXnj@-<0IubLwUx( zSo0M6rbgq|+b+1`yDBG;rm`8t9$L!_8UHp9`d9x1JKHR2QBNKtuO@Gn;n|Y`jUISj=_Mnn`754YHK*Tpw3?F6!RqUK)e!Q0Inz`Yp zivrGf{}tG`n9Xw!G$O8igOVWT%{UoG!oP`WyrhPPXRHGkgDLDh7>RuglQF(?0;o2v zfTwk>n3&sv_Fq-#oU4olK9PgEGwk=CZAl!`Orb`l5mS%k;vY>#{z8d7m$y`zo6#7^ zdaF-S?CmC6bCumc#>RoC>kmkpdI02}3AutXk4aI>W6*4R46-%T!1(uPQO45%EOxw# z)6$B;DtLvoD1yEJf1g63_BE`qFht{F*;0#-*Qk?v09xoygO{bsOoR)dZt?^DPE19Y zH#^WpaS@2`v|HA*J4mL|Du|OR^E1lVLHT=mKIX9r2#4!|;n;fWBIp&_TigXfc$($= zWkq0gh27s;WcaAR2pvXkfP!;z(5@1Wwr-VJVS5+nY!Acg5&L1zx+fq}oD3lo#^EfL zA0W8q4=LJhkhbIkSST5x_}Dxe>^_7&ug_rWcRQ$!-U#Mb6p8VuT#@^s>(o1dBmI-E zGK}(G^o|hG2|X%Y=j53nNC}4S*{ZytHfpxuyD1jSH=}h(2M7)3k!jl};IcpW!G=7f z`lHsvvynS6xjPCC{*f|IAnRJ&&637%cY-qe_h8&uhdzUU!e05eSkU^^%6X_ym*A$~ioE_VG8{gsK%S9tpQ2MaB5t70%ktWLZ>N)xZX>SyH&?BB3dV*R&ov0ds?9P;xU*Q zsK$wX1F$0TFUT?u!J(p*o`Mp ztP!4P<>dzPT_>Rb#aURk>pbMmVXi(Wbs}EN?nedlV87QLw12pmY?0i@H3!$i}8l9muX*2dSrrf^5ANwP9TQU(rSAxLyp78?RwtYZ=6z2}2LX z2vQl?4ZcAeu)|J>x~sl|zu!&9JBwxP!FnGdM1>*aNS|9E*af{r zarr!vTY(0@CFC`VzwafFQXycsmtq=De(3)*n+7YG+Ep)PmVpxF#H zH04xz#R3hmNlqi*QiD-wt4|AVIf9XMIv8Hi0WWuoGP#ZD(vTz#74%|Q-Wc>ro66>} zcgcpaioDgWZsKA!0Mm;epr+?JTsnyPluy@S#MjZd>hBx;b5w&cHZ1A8vf2 z%uVrUE{tbv9~0XE?O|{j(uy%cPbirESK2cBE1bx^3#rd@AnD6> zYR~3ynX8Nm+J43@NuRL%Ks)sm6`(~;6aHZDLjBRcIM$XqC|SQnFwu%REkD!5g>iU) zw>oEY8kCZ>IgDrk25C03^q zs2mdoW(9!tr*BZxu>lac`7zjUV$6;Ci^2Y)G9Sxd#(}e1P!KURZ`t~vxHkF;yfRbf zYT|$6(YsGEV`U>A4Lpg4g{BzsMhk6My@k^8FVVOwK;+-{4LehJQs2AzM7uj13k;WF zFJs+$=Pm>MlmZ@IZ;1P}J5+z@WSExI0cJ0lrw3JP}q8Cl*IDNZaIVXff&tBz63t8U>1c{zbrZgGuK;CkosjvW5S4#?1yNo!;|Oc<2dvq={!=VjZ=}UJl=tG%F{wCqUOf)? zQ{=1^4oI^Cj)A$-ev&KsgjSm^(N1Q~5LRB;oUg-&M@op;UYRycbA&mGrD(G53UmI- zk>l4{uKL$%QqJDJwcUBpqNmKuWE*hMifZ(b-w63%vtjN8B~E_9H`ZaUCcOn0;nW%> zUR+m4qWT#BYrK$;R~-)Xb7SGe>fxBX_z&rvp~fq)E>VYd5XL?b^6Pf78T7poWK~iS zX3aFm_wQPuZBi#Tw^U%g-%E6vI*eF6{z5Z<|4ZtZWJBim!9?|50lMvB+1dU%pt^;5 zs#Xbk;o{@$KKTLqu5Cl(M>|39jXZB~rWV7(PlEY>Doh)*16vp0!+90TT)y5*w40KH z9jo;)H8KT0T~gr|ZZl_YpbrpH5(~MTI_aGj>h+wV-osf8+B zBV(|6izdSNgVUiZ-wm{#nRo1jDI^xkbG^%Xh`8DS=`CMzDf2~!2LwUOQE!|R#FznJ zE}_8G)bd&}V@wMv1n1o(z7_+~rX!v9K79dgvDdISr;UvB$%g3|gr&lFcywC;w#}Q% z?y`2Ide0d)ciapvw*P>5uQ$3>Cb4dII4TaG0d`MXFh^61AA6FW@0AT9e%~?(SN0-K zr+(m}8$oFF`W=jm@k9^nC&cS-IT+NOV!P>YEGKoBq+T?S#p;+&Ap2@bF9Jh zdLfuC_hcQDr$n-5EUh=uA_ zL!U!Byu+?@U=J_ImmU?~c)t$u62+nEw>;RWD&SSiMF2xId9UwJ82|bm+Av1?FjqOQ zaRr-o|LOv>#~m1N^BaYk3ef9e3p2C~!6YvOdlu$`mEr?Y=W*uoJhTVgi)*PY@~LzX z%X!NVJ|w=EJaJ3HdGu0CL+{6Kv|c}riudfG`ia+|bM8Z0w>t}}1~*{BizoQ4It7h; zrlM2bC=mR0v-~!X@!}E#Xy=tFq{*MBKNc%+VT_Ge{;xJ~u`dlB&EH^wwI-i(I}3b@ z)p4M>1jScdsYP`#nckwwjjkHNe^~Sp!FdWN6+!4RTN4A!+sP;4?`Jdw#I}yy7<;q+fz7Yjn~2 z&k8hpbqrT^^kT1rgeu$x; zb&&LsgO2J1l*H%boc>Cb3{!wyjj5Qixe3LIgQdM8t!yS~j?xWMlu}jRknM#ncAlbw zTD&W0y$QK$C20Q7b9yv407VP#K8aZ!uAI-ZK(mhkuxpnOM+u?l+v;WHT8LTJ!AzO`C-}o5%pEl#O;#G{L{D*iB z`~YL-eWvCr#o(NG5;7)5gNtPah|fBMRZF|5?aDXsgip-7vW4VMeM+r1u3#Oj0L$|c$lULoAw${a4PRAO-%Vk&N-z#yAQC35^LHq%Sn<%-j1Wa4$^n7tID!NrC? z!Cwz@;m~@Y|QfO1wTOKs>mBQTSJ56cj(=<2&T&`avqwQ*kJSv zR2<@&4<7LPP95HB>ouJ7GasEEs-P??5~{T0iPuUwzOhJyx9CVGF$Ydj?=^mq<@^^G zH5Q=LMCO@^%Oe6KImS$v=PNrBF@1MF^#4tUK+5Jb`*bi#T@f_ZSoU`AK4R3Y%(qT> zg_*DKVzSj0?Lv=RT&Jd$Rbq}`9y#~GN4@rwvH1m$wqik8Y^!epaD6EPG`_<<`u>T|$w1+}- zpCUKy@+2%2G^1UCD(ldwQVVA`f9ZTq?ut+0^D|B8Qa*wT|C>zoV<+H$*Oa+MX1~z6 zvmVrkccRe+)}x-*PvVyrF^6$A%UNwh9|sLyU;hMzPtGJUlQM}vo5$Di;W&dac79kX zaW+>Kz`wK<);O`xQ1d}rrJ)J}>nf4)fEVV&_aUa% z429$Z1}$Lw(jv~%cF0SZpZ)`4$De{OmetY;?8G#$Az0POXs6qvv7WyLNv|7eOK=O+ z?(v6jnhC5+WQ+?+l$h_%*%k$R z)1?a?_koqdCX9bE3Jn*?fuPKtf{H5oX&y(%O>e=k>WArE8rd;nNpowkKMPt@qN9Es~(>_Xu#{ z1IemWchUcKGh}@bq2KJ=SQ#siSKNcaWW_m{n4!saOuB~NDO1VUZC&`RpbiZ4)WH1q z3nG5>h&p~OWAA``;(I}WXPCn}O=|#JGe($M)IE%1jBHKQG;})Xh21Y1%YONGaA6Fd z!2dEKV|Xf9zxoJ*F((;6)*I7r2ctvMV?6ilB@JeCNp$VQo5?!d3BztMp0l2K@5rOQ z`()V6{4kY#3=VFi(3@WbbxA!Cd{9Obx*ma@k}I~2N<*~V2#F1Om?dE|^!IKe{WnGA zd6Nd$Z`%&#*9}4GZ4G8hU8t^>0P79aVBUoiiP;U@gw&jS~O6 zSec){o6T-soM(>P2~Ppgk zApoiyq_jZ3RTObR40BnQ(P~vN46cwEMMvbyV`NuRNPu4Ul6?r&KB8^PlD z0ywf!jlaK>d2z09p=RQfSXDF;1U2rKC8>u&|4lY{l-+?$K92h6KY-X<6^MOzaLlnk z)Z9y*Z?%pjm7dCc!}j;MLqUTpE@yp|Tc@CLjvN=fH=1}&4aM3o$4IB}GcmCF!gf4q zV0_mZlnWn&!*2&LUsXZ`VIidGaWm)+60@9dJ2akCraM&B0jAA|`g@GX$0Z+XJ{w2W0> z;)hkLudq*hIS3t0sJ+i%GJEw=H1Ljrl+>-5@IP_3!;+K!%>iWoW@@i!@QhseL(9ES0SM(8HR^y@-m}v^k1aQXS@!Cs<9_w z87T05%N$Xh!ij>vzrcLpvG;TUI1CJeQwLRf)y4H_Rh=X?8AKs#$~*SE3dD!U7>8iU zXjJu2p!%m%$>k3}@jxhroKv^4@9lKRl`MzwCBvcQcMyDXRN%F{B5=nbIli>G1WiI} z@ah>&E{wTfg?tXPSO$Bb9 zKLm~8BKn4ZA*CbO4(-iyn04qpq~4hd`r;tcXF3xWsNTbTt-qj>8^!K7?$F(-$xG`J z!Tn(s6*^Xf%vC^Z{kMV2vdidfE5_ah7U=!)1r8d_zQd)=TiP2zOgc57y#E!Fa(VvX z+LP#eMThwf%Ltelz>7IgLDpA~B};9DDKrA-VAkup`HIANyu;}l^=PKm z3P#87LVnx@%yRw(O5)EL{`Lu!r?ZaRggkg=T?X8EUGAHo3TO0Nn=dXv^jb0%=fniU zYKv-m&0c{EIv$Q0NlUOkrxZhspCaCDz?F*HJcdQVAa+iwcezAUW?Ny~R9_Sy+zB@8 zSngiA5S0F?bBCT7g}HRl-Dz#Hwi?;{3} zLLl?zBWg8&u_$D~3DirAr|Ngp;Cw|e)+bEBu2u!U`xBe3sHUU1!d{yG`6#L{jK{%0 zpF!(^EK-}}0p}eD@D^u#h+U92Ul6oiB>vHB`MqZ|%$k1}A_MMYf^IkC*yc-D+H&X; zxEbruYC^gw<{2Dgt*eO>>*N#%=UG_f^2_8^U;frS6zg56lI2fYE zWHx`=@L9UE?c@MRF#xtXKMM zG-f>N?$bFKqqG9`Mwx(Nf-6@2Y9yW}zPR<}bgYrFuBY8AP!}s>x7kPB8<&DsOR}i( zGYxu0^ahN7FrWRK9{gCO$c@WthhD=!X!ZSqNOA9UP-X1GZAq8VF)9UZMg$Gs*mMzn*fY9)>Fmq3KW zPuN+>a;;Kb=CzK+rmq6NMkS1~zE+`2;d1=`asXd;@&o9bRl;o@dCoiu*8>t91rplQZt1dGwn zU;qTSdVtNFO!AQJ;Lquf0b%MQYW(*Onns4A-hYFbZ}c95+f7(Mnw>i>n(3HpVKBJr z0#uKIbd^gQ_NYKI1#~sFt!lg`*QsV`}nhcBj(B0+*X~e8pw7+5U}s zUH4~Q@QOU+iN8g;5?#<=971DmGRK;50i?`$!JLM%mM*z&Y@akiWO$Z!@YaW-%kW2- z^HRup{d$FUE3+XuH5Uvc*W=1rS0QVUK3b7K(#l?zM`p9{S8?onSZad*W9ir=q_F4j zOo;IxjCFU}GeX&cB$E4RCmfC8-8zi3eF1CJ%pl{*cYNVc5B6n-kRogb_?L0hVq|z_ zi4^(*qhXBO59Yi}q#;MfV8+iO=xoYn5Yg(q(>rZmQl2Gk^?8Z*l?O@Y&Oo9U&_jLR zufu_vJQnQvMk+>xLCemexcbRPND~%fYkn`$ux2i;$2nkpa6FC7kmK@$&%?B#yG%RUZk1y!8Wd~u2c|II zui|*N6FE&%pG)EASWV7kW(%<@{6(ub>p||hJ6QH>5W2ZN#k7gv(6y)u_B~YRbq8g# zd-4F@O6Q|!+O_fQ?s<=-^t3Xj*<>)A@DR(5g#40JB~EyEE{R+hgo5EMmOV2+L(0LQ zaAzL#5?u;`2Fo1m-7BWoeCbeiUMBRQR;NFRI!9*{ zpHg?MiR;EuLv{Eo1K&WOUoN`4exic)LSm|N8|^ypqV~)-6rMJuFHV=U9fl%4yA=+d zNoz>!h)QyPUo5UGWA|?6LC)Pel4Ug+OKiIvG+t@N{Y`Of?)1;a)Ht zr3N8aEiiM}G2%Xc7l_@*LuQi+5tgl@UW2mHuvP;z-aLiO2WN?y+dMR1!T1bU1F3lC zGPwFih4GRySdX%jPWvt7)fuDPJAD`_o}F>GJp#<V1YG!j~)h1Mpe{moL94K%R|DNE zCV}V5aM15~$7akmXlsxHvxZ)RW6UQ}ul*P0(<-6wQV|FjPb6kLO7NWf4JyA)gI^+3 z;ChEUfGl|y-4Yvsjny^ya;S<0@TS^_mUtw1_!9>${X!s=?`)+LoyRGXG_pL|I!t)sWx&&2& zUt`}$MVv0}K;2Lqe4fT;>T1`>erpA8AIlPyZu^e4vCpxi;05|M{0A1TwqTX5j{?I= z(To!_K@yM&B@V|xwe~Er*VJI#78&*0$Ie?cf}9%0&Vo_#wB4@`p`{SyZ^nXPWiqYZ z6$1L%+cCIz8RL}6gTGoF`kb}Gk+0bP!Oj82+!2!LvD1`<8^~cjx6qWw=|lp!cc_thOwt#z{WVVekbHeGf*-k`eHyUy-wT-$xo&RKPg83xV|y z+Vg85cI<0R{x=9GP0zyo`vqs$d_WKF#mpb$M$HDbf>ZY)u;^NasRIg$ZJP;R*&qe6 zRWZze5WsjelOTznr|$oFLhZp^2y|juo*Q;}sE5Z!l|mf9E*xd|UW#NR4ukAltCS%O z!L|Jq2)=Bx>;u;MTFk?_)VZK-9t5^a=b~ZmKJe}u0~H6^KH^y%4X#lF?N-;xhdX<6VhS5Hy13 z06TB|-b>BjU!m&pIZ!t3Gc@Hsqu*Ah;F5ert|2D{pFdOO9KU2>eeP<;FdhS;v1cJ% zFq`xR_@d132>m)onRA}cd;l$h)cZmm8b?H-xh-QMR#*|2MX#li(-?~;`6cWftHv2C zJp|=j)zJJwiSu030I7pR2}~G?&S?@<(q``4`N3!-YeuX5!BUr(>`#mJQtaC|ljrJ; zDN@LUB)-RK zr-ox%tm?-Ko6Rm{gAemr$U(jZZt0_Ayz&HqVP`_p|SoXwp`DKDk#8CSvs+jR7ict{Y92c zMknF{d)eoV4`FUBw<_$re;#vIl;9l0Ul1i`T&WTFK&Ci{PEJ;9&CPj28FnO8^RME8yZDMLsa`9z-5I#f;ZOH$1t{s z9#}mb3dir1v##tZNZoyuc06G7KC3}cd{B{#UZTP)*Nw#bes(W5ctw26!$|4nhbS=8 zfMqZH@QJoEHz%$UMDa(V+ch4GZhU}q#Xe9S^PUFJyN+99Cg5}Yi?xRD(t=q9+7e-ahEJx!;liSd%525<6D3Hpk(kardGFI-uEXZT&#yE=(8_W#2&?3c0k zcrwcy{0IHYCo!y7faYuNW7hufu-5-GNDLN%3AbJEsB?aDQR~_{qa~^K9S()eR_txZwK$gf%v=1+VUUJW~#!Am!G%n?ViuvD#IZA%|V=g={P2hW6p28GdMhc0B3l8KUjQhp_YtE zmb){OhHGaK!~b;H@A54Al{^Lyvv8=e^2d1AP3cVBL}M29qW_%Jn6Nk<6ccvA^MR*u zTD}thg)za$ZM)5U#EgY1lm7qibM*)T@3V3v_Ikgf!7+bm%FijdF7PaR_s%4OT{f2D zPx7?Yb2B`@*oBsIs$9YF~ zpU*2WYwmW8x#-N8IBg&qohO=BUI*^MW-zHd7o1`V1mEKz$E1#R4OFS{`BrM*P=n=L zKVwgE8(2jz7CB8~&RtEG9Zx+##qW+F*l2*OUnRttsN>Y;K6JdJ#5+vU1DV}W(z!Yo zd+pUQwY8rtTdK?t5Nhz|4aRi3(l4wx{X?~9KE#qA%VA}yH8xcp2hoaNBnueV#Wz)| zd+{B3hQ)xD?pNvZ=>q=Ihg&Rz?tbLr;9SL;8~w$>|?X7;DOo1-C+etOkL3U z1M>@7jgyw@Jwuym_h?t|5|oK{P_Ye?L2c2PqP`5BKIYKZ%5t2rQi<<;I);wD8jLF$ z*RHN39|eI2rGD)9!7eG_Z4pGoCS`ei!m%C9}=yJ zfnOt_BjXhN_f15QGu86F0rS9|Z9?ODazr7Ou~K)GQ`>th*zTnox14K68MlNM&%BET z69S~k%?kXc79pQn91F$Wn*9EoKT+^8%hEj107Uwq(J;Xp3hG)&@RocU74#OY(wB>b zcb`L5@f~n^TqpWokQ7HwsW0nE}gJkfiqvl(}OySeEej_E8nsW8d`GL-AA70 zTT2*c<~_8eJOr_yH+7ghA6r8nkg8A9XxD^7SUlz;j!zQuGoGsP=G;6O8}|S&XDD*A z?Wqu}TZxV~uhBYXHO5PR(l7qXT-~i2uy}KlJfEe(Idu55GejmmbcF387r2vJ8#fe$ z94B`szkorfg#0@H$CMJo*Yf2+@G^XPI4VTehFM;jo+R&@60IG*?g~lH|*82uv zZd@B}J&_CUpYGFi|2q&G+>6S_`!L2Pfk?&{liGw~c$*JFfmBIkH0LdPF1`%Pih9~1D>+8WlCOp+Ev>=KRA?g#JvUub8JFRd5Z zgS&?=>~mcXlH&U)8>R@77bhTX%`?!~e8jp!9`Ir{o13o7fKky6aHoi!uN_*U@4^`7 z`*k1!$#7AE_%Y1*xSgqKG}+zs7+Co=O4SClIqFS9UAs%cKFEzE9asukNpImt^>MVj z^#IhlcM!7l9KdvYd>;P;7iA}+js8qf{>x^yZ*LOW+%jqEFki4<^A{rAWMJ-im->!7 zPffI>#A<{I*o2IPTnh=KI%nVD1+S;RUy zCyC@(j7W0xsz|AM09W6|V`qmQ?Rt0}GRH=uZY}f1gxnLQSQwy@@Ev>~d;oKeFMx|* z0a$tZOLzaL!exHEKqcQENE?-uIG>F&*z3@a9#yGm)t>#9{OI|xm=URd>sPbN9Eyz3UhLWC1dY6Uo0aXD~M3v7ID+)pgA7(geE@ik)fI;HY*T z#Md;WgYCaSNH$~PML&Re2MP_M_ZVfT!Fv{dhf&CSrZ;Zl=z}~S3*8OoEgjV2SSamT z)B`=c1$=BkFHH7gXZd?KsCa`bHOcEEW`&Gt^koqq4NpaRu~G+=+%eHOE@JpCTkbzO*Y8wYR=?TI*}i9qo8b5RrNVDnJl#YPaHaT)ugUW3H{BxFvVO?xNbq|v*z zx!i`&M0|1`cz!$&cOI2Pn)OB04!8wHde0!VIur(7WL?(JtI=wv5qQS!M2B!K95Y6T z_noPYPR}%WE5ldRDj{DQ@ctWCH93OPt|*51=!JMSf3%8A742o&mShhBXXZN>Z($$W z7anH(^5VQ(_q4f|Drc4-kcaZ5%QWe#fM1~4g$47pMg5as!6UZ>Oi<{6^E-Z{@U|{o zoubNX-+F*PGa1usj|;4(jIULDUAoaug}-5_#HrgphSie~qv-ET&>k5E-*Qzr)o(4d zV5Y9rG%63R6d3RHsU>ylIE1-fZN&8R2M~;x=7qKUqwP*-lo%Z*D`P)`!&n87w5p@i zfMh7Rc8bb+bcuMVj%bjUJYPR$1myl@#2U>iRNuwCh})+^rehhYa;hQ96Sm{1w&$R* z`ZcAO_^2$A6zE+Dj-ug*os1^-|b}t~H zOPLEf?Tlt~uj0XJV)l;u02RZ}f!oj?TsieS7|~pecGeLlL5rh_#$@DBpBmq37N7YczOLI z%N!g-$0PChVV692=tv~=X9R*Iznj<=reM+0FYLXi3ZvORQP6)%q`UArlE+rF+~#>Ww$=+w)Bk`h z6!@^*0v6)y!Q}`bJ*O5d9;3IC1TaIP*`M> ziQ1ieP{7H9>ET3_@u%^H@D~KXZ>8S39#r_qi&{OH1HqC!Oq|2=AM6ZJTYm(zN7_Mw zOBwt7Hb%=6THFq6<~1E^h-p!~(BtxLbU?-k>vjd|Ajehs#e$t@Cpv8mMSJcm=?d)! z#g^Ida&ZFNmDr%ziNgMI8l3;UUJP}QV6)5{&~~|*?U0tjB9@V|ehdiXx>@GbLt1s= z4dY}KW6=?o{q~#A_~ezKTQ(7EVosq=e>!Fgc0;yi1T0{zk6)x5_+(|?$^Se^uU~`E zUD@ce|00ZeHVO{LNl^JqI|Tmo0dkYv!1~=2Fg+fFm1!@~q?_$i$IKx?ElT{MYL-tP z5s`Q1A8p=ZPdQ4~)DVIAnq~U)E<8Uq8k4=5TS0|o0&^VK^SWbB{XBFc`XRin43@>y!lEL=68_~k; zDjD)wldB&%3CbEIAhN#dkKQ%8c|BX zC$Qr6QC-Ow)fcGn-oqK6_AASb&5t03-`U(m?-j0;Ek<+o6w)dQAug(SMD{;}$e0pE zjOmCbx!cZ?-ngZp>Lw3$jStwFT9I{yUBSPj06O(fP`}@dbzR$xM%P23?tT!=yqtg* zPJfBTt%2aV#S42%p2M@Z$6?U^FxE3Jma0a*pn;d(!O^+j@ymOb5BdHdbTPi$r$jl< z=J!+LaC!rDUalurr-Q-W=@K!jL9Jotw6UjLrA_(6neaY^dwJmwLm46Pq8K+KG zsLk8dCxZ5)d+4Yd4f*%NA(_qC`s+%-v!@b3vI8@(Mo?LoHb3AWb#Ai{%j{~N#ne#} za2C~~g-0gcU;POMqc5QUC+5lF2GegRexl6}SLRf>OB%WYAi%#Jjrq?ar_IHnxwsB| zZFb_zglM#Tb{s1ATmkJV53&E$4SW{a$hh*nW&4d1(9T+l0)-gj>u?+L7e#_cYz-+5 zRN_MC$Kob6IbQvW4^|c>V8|^Etl#5+uD`B8{_1yZ&b1jOm0S&&0H2^SArm~RFw2r z2LzXmEQ8uKIN9J~WVFg_RG#w&y3&SYh2ul`cbf(`^8;f}viIGa;W}KsWiQ3JTO$pXe|4x+0zUPVE4OkTL612GDgfdzL1 zKC!M{S^FmTO#eoorzWA@!^db)6o7)HGnU4m#uL9IQ<0l2fPs(;1KR6Nl>zPNCC=TQqgtL6|mD59?!+sANSvI#c(L zx?W<_e3=oAT1$O`r@@f!W-ZK=iQ$wwFwT&Lik9!pp-F$C!6TUrM$z5c*BUa~Z3rYU zwK&mKP0n=aDyW|9Mv|h%8mpX!*TMJE14Mj}Z{soO#b4asF2knLS*wgP{v_vXplRwz zn9On@Zmq}H*BWq5?iFb21*oh=dOCSP{ z=G`EE9NPb@;qci|zr}q2t^sOmvtw^cPbG7S*P^ zW>ZzzCl-oA$Z(54D!F7!KI1j_~UZ<*JmiPZnpGYu33Z1V%mw7sLego zqZ!Mq8Q{Djmb}077DYDu2(NrGG22~5do8Yjr1v=r6{ixDjeU$sZyX5uSJ7ywLoB!= zB9oU)!ojr&7D*;V5Z1y3`_WwVxo{#nH;+`_lS4s81Th&NOrQHJpkI5A5pMNm!ssqR z*+PN=dWaSSi8Q0B%x*a+M#m^A6a3W>EW9Q{`=~&C@}L+SEE~|B`q}m$re}08eU`+h z@O7sQ+gJ4qd7Zshol5ty{3`)LQAPej&vb~*3nVRTn_%76WVp~V3Z;T!OvNitV$kM~ zhNdx8o91KQtJP57m5CM)Xy&yp2e8~0RpTQ-#axc{>U)G%8Lw%VP`8!%S2kJ+mGDvR z5NdBu1Lai@u&Lw^;RQU%E2;lWGLn8!kN!r=g;HSjtCE<+Bd>sWc6WXQ?Y~HEs0NSC zIby%cdsyF2??_@@BGtajpPi@8x#fjHGi9;Hjje+?-f6VBQO*o|9ECTR(EF*BbbTX6_q`w~|K&50<2#`1=Qbh`tpefiZoc9p4itG;KyUW~82$Yx zI<@mLCPs*%Z5P32xEB%~6;9tWm^4BGMz*z3zWjdh`9t&3vroa}@83Z8;~X@4sliy; z-vEm?Bf>L?g!+vYaHC&?)w5IQ0^TO0S%*Bg;%*Gh`}Kh9KI#+ME6La2c!Qb$Qkx6N z)qw<^K=5#p@?S?PuoFw}p!2>oBG7GT5(GcN=k7lw=+O&otBD4$=Ldmlm1V>FlBv&Z z1jN}=pIA;94(#7cy~}~5TP9C5cTRL<8#rDbR~_W-J8kz{*;YSe)SLSFd()yW<;l?4%rF+pu5x=l+$7smYd{5r1{6XI(VbHte z5>B3!2Mvy?Bs?+;Y)#Y9Y+W99p8N~KmQ=pQ$8?O%-Gxqlry%)-F$Phujr(T}j{Xhc zSacaAHR?3`Lpz}*^xj6jcao_l{Bq+>Sh0LINvCJ=qyogQ!9R>~nk>#-sm2L?e4zRU z)ouDuK-aL{#3t4R^e>(y%C~mH;wd!e_xFp~^S392e-8m^$aYxU`W*YN)?PWtsCIXx6K(8jRRP z{yK66epoAV138r_*o5d@lS(Af6U72Dl?2$zgIvscloklYeiJ%Ts%F7ly!#9tsGlwM z^Ij}@aFeldoq=AwNGPWrF6n1Kfaxd7jLI~l`^~fHr~iQ{=jAi1p265%@d&_YFId47 z!izb=EPtrLx=wn8=4b0MbQtZ|jeSRd{sff1lVS2K7ekKRb10X0!~=cW;9PG6m+5>v zaO?yI1ns4M#V%5}$`LlqrO! zbgwNx(F+>>+YfnieYow{S`-SeVPKgur>!>{ORDxh^G}(PR4l_+UG0J5-eC%pQ zukbwP_0U@sW+d@Ne?Jr1Pnuj@^3?Ewy#%0zpcBLkFsrwfB8@AbSA}8UvtOBFCCWYhZE)L1O4uckgm~# zMkvO~-hTM&{6{F&-is{ldwUbJ<<{4y*D(WjfB$E1_QtBGJGFJcPmTz8jxVI-UyK&S=GuC7AgRTZGj zxJEY2`rDWnv znR}?I5s#vQ1x)0I?=WkV23NJLkTkeYMWZ9}AdN&_Hqf8mj;!--uZ(9qu zg*t52-rdk(dL1*yKY_ZC0e?57zW#}glM@`ANEH%Nmsc#%drKbfLy zWD)qP^00pGV_0`Dg=T5DLxmNOqY5L&ex-ami(GIx(@Aqi%50EXFFIMKLv3Iz;sk9R z)*ObjvnW3!>jwJK3_*gzFDO;X06%FdBfGW_UOkmzmnz>t+00r9u-$_G!H>XmX$0_< z<+z0t)HvD7x9}%WlT9PHpzE_p16AN_@jX5b>Y5 zU|$a)a}44q?L^IaHaKBx2$<|ZG|&1B+1eMdy>K^*HXgqhb6$Az@_ z`FIE;J%N~UGzHS{eSxQ%v_EjsM`CPo0wf>jflYb>4y<~IlS7W+qjnwk!A{D!(`yD_ zlR@D1earW7T*IVoxC;UCn}IhX6QzkYOrG8>;Fay+`^o)>(v5~tv1$?HUQFkSqRn{f zhz!^JO`C0c(MGyq8H%P+-fD3sro4>+*n17RJuwA_#QWIn>=bF!R?LnYXTsc}vfWBi4buW)n%_%uyn;;(7K7uu=0i%^Zy zBZP5OO#;RFZ=jJU$A-J+L+(RWZiYI|bjOEcz{RmJhU$#*Co`aU*fMk*HxoQ3*O6%V zG%{eI1!>t5u-F_3m23V&;o`^C2Xve1ZZtw(dKyWhc{1g!r_7RIx@@SX3^Uy!T$3it z4St~gMvu=jJdJbweL{NX-JJ$0BZbV)@ERBp4dQY4HxR!;8Dn)kDEn7~vs4{VeMdt$ zV0jBXE{z0>Ek_x=eiEET+aX*!8>Qi`OoI>Yx<60%$8*nuBh$&0w+7N3!zpk%T>uxE zO6;3wg$~P4<6i@9?pvQGXQVO??P`6&-K_%ryRuQ%=sRq?S_17mCt!l%HS|^d4t+)6 znfR>pSkhw%e}XjF4(jFcJNy9F&W%TDsvOALodSN|XS7rO#YEDw;y8N$m%dfw48l#I zZ+bL?=ln7DX(2Wh*nm-Hi`aib7CQBp&{0rF!ksiu&P`JtDOf?xx*7C&3}k)N7IR2#sj8%cLoS|T<42=UW4G%Wa!YU z!?kYd=%A8>D>wewf9~57lDpts1exQ5{NdtfGE|#|$~mW4m_TAc6^d;9rjV z@&8?cDTe8=drvU5w|qgtvR$;_tU@ff@Pvp4)L`Q62N=I1mFPb?j;0SXL4OD3X4~~( z-tP>wKhp&~*~C22;_r;VI^A8}7E-4BGZfAoPui_6!E^fFcDp_j;KT#;+ISax6cGcT z7r?FDj~K;c7(K=R;P(qn*6|$yvpZ!Nd!-w-$A>Vw_V3}){B}6HhsR03C!*xQ6Jk0_ znX{iHixr=~GSluWvhl4VX!>;$lKSRA-f@5AIeidYp&m+k4`8vIJT4sf1{$`}nfFN^ zBg%0m_L_RwX{3+o^@*_1?JEr2n+OYLDY8y#o6yE?13%>n_1J9SzV2*NxxI;I4X z8Ut{W_Ra7PcQHSYR^dGFzc7055V+_ElFh|$q5tMN%!qG?_8KWh&(h#v1|Mgw*#c%) zpW}pwZ$ad@m+0@);of~vVT-S~LRW)3k*`(YJV#w6JzO4M9DGK3Ui3Xs8VMnC5g47H zL3aKegyOd!;HRAy+m-ADtE;;(?9DtlL38KcG!q_sbvwE)r+c2WFHzS-1l~H|(O^m~ zG1$2oH<)Q~(lhiSR9YSc1;y7 z?6Eh*@SCt{wK|uvQwDi!zgRooJ_`+hoFI$#N%sxCKpZIxU2ilQ#~YrE+0rC5|67fN ziwnTTiDtBV|3E4~gPcg89H#5EwO} zRqcO(tR-5kkAbeUJxs_k9d`4M+Yo5c1oML5LTax8MyYB(oYNL$>0o<{;pyT*>FXUkE$DDRXOQr(n%}9j?w?!1%~6BfQPk;=bq0 zz|H6uQGb$wsk`n|>;+L+dIx9PhN0w|v$!lZ9kzX-xkB}55XDe+QdtSL-OfQ>;w#wR$YT>$(z~(y zsQkQ#6-3y74rXTSuob-v$w%4?J4sQ2mDD^DdpN6MQz6yrX5G%KDttt`#;P)Q^Loe( zuOGN1PMO;^S&p5oJ`3kv5N&QB$q|07`tD^UlSR99Oqkh8stFM7~Qo;w0diuwfV7W&J&8$wwT$-Qth@Z!- zQ<9upZn`rc!Q+4j6pAg078WU{PO60v;M*NF-(Os8*s`cp6&W)P&tH5-@2? z2Z>&OlUxa;{wXv;?H$vpF0Lwu`3l^kdG~PJSvM4om8X5WcOiwB%CrZ3gYva;X!=_h zqeEkfzh)!Ge53D?Ph;^ZW#uLdZ-bHlMs%EHM5L<=!AjN_794EBb6-{1idnOnLvlX= z;#E2GX+5+H?hcmQ`~}r{gQz`D9=bdO$v@PW*%vVx>svGE9%?QM2ebLgW2-^#t|Hs4 zEzfq3`3jp`o53PjfiZpQiZ>5G!0-HTcwn(N?XQo4@}@BK80Sno5Oy$jGB2?5GtECb zj>0YJ-%)OO3%;Iu7cZuXFw|-YTABtS?2Id9kFUk)339BHqW~)9DxgT#9;~SE(B^_0 z42&+sZO^(P{_q;?39UnIUBci&3#bpSMM+)>-~8V>=<)a{@XQrJB1aj2MK|z@i8k96 zECSQiJD?;l$4RtbFc#G2DhaR_uQ`4an+C*0u(>gR0V=cGhIfHfaXE>f^9Y3ZwD1&V z>aVwuXM5Vu;E=xt`_oo{&Kt&qx>+2W^LOLAnRNGlCmbc(uW_252CM8&dHeH*P$N^5 zi;9e9K<5soG?l=)<2=^s*$)tY&|?&|i_pNn1efKhv&s*%@zC3kkQqsNuh)Rg(Ap8%d#1GbMb97wyh=sN_4h7 zf17X6d7F%H_<{~OA0Wh5ioBk6F#5?!6!4$JtdT)*V3s#@*}f(Ib*&(&-6)o*1w&>Y z-OnnA!p>()F+BJ>7;Wnpe;ZO~E0=oWrEgudyQvVA&zyx7kHf*oz7S2PA3(3(Zzz;4 zXX@s8;hY)-oAP*KGG`sl(&@pMS|u*-Z6Fxk-w7$|i{M6*3M+E2M=dWkuD`4tWBa$^ z&@WZirsxWkSqsti<#pN>u?9!KdxcKZ(_wSseTd#V9Q4eLL1PlVe@^Xyr0+*T-+=lF zWuHUdM-32NqWYHw4~*4zgO&DQ4BalIxvKY!sb>Z4|I!6r^9|I;eT8gkc#H3=K7(NQ zMtJ8XTa! z)nYHq-Gjob)+oP=vPMRBl7NyN)N7NcKGlC=*uh+k`lLi6HUv>Ncrf&7xnT1Wnq9qd z6r?mW*S(?=Ebc|%VI6JGBYqaC9!kOH{|eAZh9L##1*p%ALxatKN%39U5gz;-j=#AN zOCHTb2o0y&#TsmlM?Cng&^}phMkvH0H%Z6Q7MjQ7bh8`V1fgwcyJQh@-9Q?_$*)&=sTV{ z34We0(PI7rMnbg)-b94>yH(f|E5{0)b@=0{p13oQ`lj`aF(Yw5PCQwGABXi}_cLwu zd%PP`c2o9oh$@=&7U1sZpRnuZ0j86Bt)(WD$kKIZP&e`&1k1{Ew+3joR3nWaV6Tcn zKVPH&QtEe2E@$RF>4DK(qaoqg4;XD$3n8tYxO;m(re42pN9^;l>vYHf;1GGz!h<$0bv5=Xgi(D(pn3RRgeQ&qsXoFYQkI zCmViL%5am9PDjtFi@~CwdgYsJ@vW^q`?x$7yc;#?eqs?^^t*>Ple@(!$&R2|bRC=) zS5rn6%>i5t;N zC>wqaHX_Z>#vZpasGfm2XTCs0ry3{7*vptb{*Kzl$C%t1x?IHuc_LlBpLDel3|qyc zyWeqQn;rtvxo^d%M^T@reJb=tN+{300VM7L;xf+?}7%}!S|iWvz?(TbcQ>7l!=PAt?7L5ox=V`Cu07fdrJU2O~) zO}>VCmX(Z6zXKePq_g<5)zE!q2x#aHLfz@Rf<)l!kTeYJN`nfyXlBirP~5*Q2Yn8% zW8(X7LyAi>9L^J>X00}tzMbymdh;+z<0>)IqBD+MFQh!9T=3tY$fr&oSI5s_ZU<8@ z+`s_3KW~8Kt(BCW-okj&{gq^`C45?W7LpckfbR?1DN8$-^x6DiEQQW!KXyGfe*J<4 zia8LMC85l&m;BhfA2F^Y4EpHhVk%+}}sLLTL9xLOaCM zp4rLQd0c^^A{QeLM%8M{0p9omTYUDSVnr_P2gzqT*IdV_my^Kf)EXwr>KaPi-$E&G z7N#x(%)8ylguYLQ=S6aya%nx$jQEQss~d=&(J$gqo(b#kT*cEv)X&mWCH`|rg>wwr zPSmc-vaOA0QIb(1K3@4A@)Bz>_U=;%Xr$VO?r*+hBjqK{YQeZ~A&~Sm5*myfDcbrD z%K9sEgK!c@A5-Dho#=;_Y!{sWQ;n_QRxwRFp9#t85-Tm=Oq>T!LQ4KEChvokiT`$Ic%|h4pGZ%7~j_-plKr5yilGSI3Pu% zVmD^H1CK5HQ;q2Z=Yc2f;3s_iif3Xdi-X=BfBc{tz>+@r@QmEw<0x0d2Mzh?|QG(EZ2|#A{{}A#WB`dQU>1EAtqeJ9EUEh4!eu%O4_7^u70HY?{|Qe1Q_#v&1ZRp=*@gd5KV+9b zG+h}DBI*U?Z5D{_Qew$H+N<+^Tozm~cEPyuloh1@0RK_aVTaQWbWH;X`q}U2!@(z5 z8bo;p>>Su%qrpy*#G;ytDm&@67zgJ)!|q?b(5n}Rp)<6&277-HtfsqRmtvHErwNkr zGx@wFUf@q2g532~%-Glgl-H-@++;J%_}l+Nqocl(*s zzGrzz&+^0GNwS>6(q}l+Jc)X}Xb+EZH0CU%@1MKNyd?qryAw57 z^{J;&uo-A)MlC7*{0s%hjiGO29!X!*0=M@@;T$?6h-dYKaLsqVhl>v$zjO^eHdug7 zYakg#I|i(RPJrWrB9Jnfe4}s$?yE?LQ~rAfEaWaR-E23Qx;_DyBR?>}WD6Q?`iC(v z-GXgL3Yk~A@@%E&T#U#mq#lw-;7U${^vZwC;EDzaNH#^IrI-26!zs&dVm0MZsAPjoY13G&-+BuzJ@UZfVix1Udw?+|kvM&sJcs*yQB=5{h-8Z3 z^7UxcEY64Bbnk35b0yPFz345ztIbN5Ze3a1(-K7Smhw?4+j zPw2CMBpV7mUjrz6(BA0rq+xChI^7zH#-24~-rY2?HKw`veddhvi)8#eM}ZaCe$Fr7 zL%$Pa=pG@?66b_hLEHoxZkx3VXEz|ifho06k$Mb1x@xmRFMUQLdww#1Sm0Ym9pM=AIhtV#~1k`-;j51a(QFi%xj9R*Y;rZ?$ znsImG+b=m*mF8l4>#pG7R5`Byvjlo{8qvb{FvDBaB+i+e3i^+>VVCVlVy-=ej%{j; z%zZ6ZFDji>1SB#6$~rhvP=Ws6{-XNuV7N!QVqu{dNc^4Q&|Q}W9%);c3d1t=$=Bk% zoVu{*bw8H(#i9E1P?-3R!+@46aALd~>uuVH8xGJs&-jNh>9;ngtJnc%Ci#%L`YU== zf50yN2aJf`4<_zYVN@!tCNU|ft#ypyTi4^of-`vhV-;pN zJcg)etDxe&HyIkI$$AM}(CRyfi-YFDg^@E*y7ju)=+QQ2c2N`xyfwj4z6kU7WRN!1 zG?4xgi0!wB!sM48IFL9Ex{-EuyZ*rUBg1iGEzN99wZ;^MWQ_Nlf%Cm&*r=?Xq`9{Q zZHEX-*RCX*)#ssj=OVO{JcS>e6KD=D!_KY&;P$I=fguk-(YO`fZd77J#?lPc_sjIV zvIr!D%lSTa{iI@C3*%MO##oK_grptu#G`}q`jZUd(>@M%`sP5u+>vM^`wllq=)e0Y z7FDhNQC+CWndpoLu<*y|g8AS!bf1`SE5(wR7Z_ohH4`IwhekhCn5a!jOvOvY^fA{^ zKR}tQII)Nsp~=B7jb;!XevLSDIv7j+AX>JPR18jI!e(f5o&39yz!rmxsXInp4??3w zo6v2!EqcE^gfkr)=uGazJdM<1d4}$kVRDs`W@r$-EtTZ>=C4q0;fb2fpV9E=9c;}! zhaF4GP#lp%vFJj4dsB&>C*KRg;gky~nFNyRB)(g-Aw-9pQhV(!u}#4ZBAi`|8)6mN zxZofRTRsn#NM_S~9rYEvCPGQgdtCsnyRtp&8l^g1+-ynx2L!=Z9`14QdqkiDqGb{DB}C7GmtxBK9Dv($U~%aYg#B^=qs3bw^6CXx@llC8+(fmM_6mNa zvH+wbhJo453{0k-L)#@nob%snD7a9IU;mTi8itFos=JX)|3iKGkPc1m2Vtgq8;02q zhgzdxEHqVTr5P)k9lI4-$u+|FYZpPlqtlS=)(n-VW#Ff$gtwkPqvz&Gki7ZBETtaI zSe+u&(>@GsX6I@ARh9jEM2S=V-HO7XT3q9%#2R%kBwcO~i6HG%zLUBl$E*EjZS!YP zjObx(0!~OTogWFcxD;e1Rvs8H17ia)(eb!dmFmqZ}>fr`e1gvVQ$`~8LH{a`9`I5 zZt3h6e{ZGQ#j|USu<#1*qk6z1YXw#+wS&ry1F$6MGPqDL>Fz?>&%FIIU*cMes)?IW z@_ITf3cH8qFOOkpfFm|V*g(dT+2|#q|7H}A?wt-;8I0n<(a!`HbGvDN@dWO!ZNb1z zUm)w;5eOd}gf7Et!L9!g2ugRsQsF5qd7jJ&!jF@>kwL^NK9XE+NkmBV2i5oYVAzdf z>o^uR1P9DUa%fwuS$BRyqJOjcTgDE~AFN1VlqaZMN-A53@+ z&Q_5lg<$v04i4~@LA>k^R$f|(wF{`utW_e`P1401T0c>{b~IQ`JOneJ$+PiS>xdxy zWd7A4C3a0{9L}CXa9{yqL%av&CH#Y``a99(%`KGon+&c=87S#~hjD4NkBB*sH;+

    RWNHpgRqn?A8FzLMt=QVW&v=5_uljU>s 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%0A4k`A$!o9EM>17bM!h5G*&x68GIt2n3FX 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

    !2b0 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

    Kg1N>tjzGYH-O^8 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�ZYA1T}=MGO7U5U4%|^5+diqcci; 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

    xmy?WP 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%0All3q!+$MmT*d7|k{|OCV-A^8v2`qI2>ebXCCQ{o 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

    adaj9_PZE|#Tm6U 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 D$YHEs literal 0 HcmV?d00001 diff --git a/tests/test_frontend/test_onnx.py b/tests/test_frontend/test_onnx.py new file mode 100644 index 00000000..2efa454d --- /dev/null +++ b/tests/test_frontend/test_onnx.py @@ -0,0 +1,11 @@ +from utensor_cgen.frontend.onnx import OnnxParser + + +def test_onnx_parser(onnx_model_path): + parser = OnnxParser({}) + ugraph = parser.parse(onnx_model_path) + + assert ugraph.lib_name == 'onnx' + assert ugraph.output_nodes + assert ugraph.topo_order + assert ugraph.ops_info diff --git a/tests/test_frontend/test_tensorflow.py b/tests/test_frontend/test_tensorflow.py new file mode 100644 index 00000000..4e61541c --- /dev/null +++ b/tests/test_frontend/test_tensorflow.py @@ -0,0 +1,53 @@ +import numpy as np +import tensorflow.compat.v1 as tf + + +def test_scalar_shape(): + from utensor_cgen.frontend.tensorflow import GraphDefParser + + graph = tf.Graph() + with graph.as_default(): + tf.constant(1, dtype=tf.float32, name='x') + parser = GraphDefParser({}) + ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) + # shape of scalar tensor should be empty list + out_tensor = ugraph.ops_info['x'].output_tensors[0] + assert out_tensor.shape == [] + assert out_tensor.dtype is np.dtype('float32') + +def test_placeholder_shape(): + from utensor_cgen.frontend.tensorflow import GraphDefParser + + graph = tf.Graph() + with graph.as_default(): + tf.placeholder(dtype=tf.float32, name='x') + parser = GraphDefParser({}) + ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) + # nondeterministic shape, can be any shape + out_tensor = ugraph.ops_info['x'].output_tensors[0] + assert out_tensor.shape is None + assert out_tensor.dtype is np.dtype('float32') + + graph = tf.Graph() + with graph.as_default(): + tf.placeholder(dtype=tf.float32, name='x', shape=[None, 5]) + parser = GraphDefParser({}) + ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) + # nondeterministic dimension + out_tensor = ugraph.ops_info['x'].output_tensors[0] + assert out_tensor.shape == [None, 5] + assert out_tensor.dtype is np.dtype('float32') + +def test_normal_tensor_shape(): + from utensor_cgen.frontend.tensorflow import GraphDefParser + shape = np.random.randint(1, 10, size=(10,)).tolist() + + graph = tf.Graph() + with graph.as_default(): + tf.constant(np.random.rand(*shape), dtype=tf.float32, name='x') + parser = GraphDefParser({}) + ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) + # deterministic shape + out_tensor = ugraph.ops_info['x'].output_tensors[0] + assert out_tensor.shape == shape, 'expecting {}, get {}'.format(shape, out_tensor.shape) + assert out_tensor.dtype is np.dtype('float32') From d6352a329291221efafa9c838cbc7209b9b1c412 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 5 May 2020 00:01:21 +0800 Subject: [PATCH 109/117] TF 2.0 support - Fix bugs (dropout transformer) --- .../test_transformer/test_dropout/conftest.py | 7 +- .../test_dropout/test_dropout_transormer.py | 12 ++- utensor_cgen/transformer/ns_transformer.py | 100 ++++++------------ 3 files changed, 46 insertions(+), 73 deletions(-) diff --git a/tests/test_transformer/test_dropout/conftest.py b/tests/test_transformer/test_dropout/conftest.py index 32f5851f..dfe7a9bf 100644 --- a/tests/test_transformer/test_dropout/conftest.py +++ b/tests/test_transformer/test_dropout/conftest.py @@ -16,13 +16,12 @@ def dropout_graph_tuple(): with graph.as_default(): x = tf.constant(np.ones((5, 5)), name='x', dtype=tf.float32) - keep_prob = tf.placeholder(dtype=tf.float32, - name='keep_prob') - dropout_x = tf.nn.dropout(x, rate=1-keep_prob, name='dropout_x') + rate = tf.placeholder(dtype=tf.float32, name='rate') + dropout_x = tf.nn.dropout(x, rate=rate, name='dropout_x') bias = tf.constant(0.5, name='bias', dtype=tf.float32) y = tf.add(dropout_x, bias, name='y') return (graph.as_graph_def(), - [keep_prob.name, dropout_x.name], + [rate.name, dropout_x.name], [y.op.name]) @pytest.fixture(name='dropout_graph_tuple2') diff --git a/tests/test_transformer/test_dropout/test_dropout_transormer.py b/tests/test_transformer/test_dropout/test_dropout_transormer.py index 9601ee44..400e1b25 100644 --- a/tests/test_transformer/test_dropout/test_dropout_transormer.py +++ b/tests/test_transformer/test_dropout/test_dropout_transormer.py @@ -1,3 +1,4 @@ +import pytest import tensorflow.compat.v1 as tf from utensor_cgen.frontend.tensorflow import GraphDefParser @@ -7,7 +8,7 @@ def test_dropout_trans_1_1(droput_graph_tuple): (graph_def, - (keep_prob_name, dropout_output_name), + (rate_name, dropout_output_name), output_nodes) = droput_graph_tuple ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = DropoutTransformer() @@ -25,19 +26,20 @@ def test_dropout_trans_1_1(droput_graph_tuple): with graph_2.as_default(): tf.import_graph_def(new_ugraph.graph_def, name='') with tf.Session(graph=graph_1): - keep_prob = graph_1.get_tensor_by_name(keep_prob_name) + rate = graph_1.get_tensor_by_name(rate_name) dropout_output = graph_1.get_tensor_by_name(dropout_output_name) output = graph_1.get_tensor_by_name(output_nodes[0]+":0") # test the dropout ops are gone - assert keep_prob.op.name not in new_ugraph.ops_info + assert rate.op.name not in new_ugraph.ops_info assert dropout_output.op.name not in new_ugraph.ops_info - output_1 = output.eval({keep_prob:1.0}) + output_1 = output.eval({rate: 0.0}) with tf.Session(graph=graph_2): output = graph_2.get_tensor_by_name(output_nodes[0]+":0") output_2 = output.eval() # expecting the same outputs with keep_prob == 1.0 assert (output_1 == output_2).all() +@pytest.mark.deprecated def test_dropout_trans_1_2(droput_graph_tuple): (graph_def, (keep_prob_name, dropout_output_name), @@ -71,6 +73,7 @@ def test_dropout_trans_1_2(droput_graph_tuple): # expecting the same outputs with keep_prob == 1.0 assert (output_1 == output_2).all() +@pytest.mark.deprecated def test_dropout_trans_2(dropout_graph_tuple2): graph_def, output_nodes = dropout_graph_tuple2 ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) @@ -79,6 +82,7 @@ def test_dropout_trans_2(dropout_graph_tuple2): assert len(new_ugraph.ops_info) == 1 assert 'x' in new_ugraph.ops_info +@pytest.mark.deprecated def test_dropout_vgg(vgg_ugraph): trans = DropoutTransformerV2() new_ugraph = trans.transform(vgg_ugraph) diff --git a/utensor_cgen/transformer/ns_transformer.py b/utensor_cgen/transformer/ns_transformer.py index 3463bafb..e6c4cb07 100644 --- a/utensor_cgen/transformer/ns_transformer.py +++ b/utensor_cgen/transformer/ns_transformer.py @@ -92,75 +92,45 @@ def __init__(self, name_pattern=r'(dropout[_\w\d]*)/.*'): self._op_name_pattern = re.compile(name_pattern) def transform(self, ugraph): - new_graph = uTensorGraph(name=ugraph.name, output_nodes=ugraph.output_nodes) - dropout_input_map = self._find_input(ugraph) - new_ops_info = {} - for node_name in ugraph.ops_info: - match = self._op_name_pattern.match(node_name) - if match: - # ignore all dropout nodes - continue - # replace inputs with dropout inputs - op_info = ugraph.ops_info[node_name] - in_t_infos = [deepcopy(t_info, {'ugraph': new_graph}) - for t_info in op_info.input_tensors] - out_t_infos = [deepcopy(t_info, {'ugraph': new_graph}) - for t_info in op_info.output_tensors] - op_attr = deepcopy(op_info.op_attr) - for i, t_info in enumerate(in_t_infos): - op_name = parse_tensor_name(t_info.name)[0] - match = self._op_name_pattern.match(op_name) - if match: - name_scope = match.group(1) - # assume there should be only on input except keep_prob - dropout_in_tensor = dropout_input_map[name_scope] - in_t_infos.pop(i) - in_t_infos.insert(i, dropout_in_tensor) - new_op_info = OperationInfo(name=op_info.name, - input_tensors=in_t_infos, - n_inputs=len(in_t_infos), - output_tensors=out_t_infos, - n_outputs=len(out_t_infos), - op_type=op_info.op_type, - lib_name=op_info.lib_name, - op_attr=op_attr, - ugraph=new_graph) - new_ops_info[node_name] = new_op_info - new_graph.ops_info = new_ops_info - new_graph._lib_name = ugraph._lib_name - return new_graph + new_ugraph = deepcopy(ugraph) + ( + dropout_input_map, + dropout_output_map, + clusters + ) = self._find_dropout_clusters(ugraph) + for name_scope, cluster in clusters.items(): + input_tensor = list(dropout_input_map[name_scope])[0].output_tensors[0] + output_tensor = list(dropout_output_map[name_scope])[0].output_tensors[0] + for node in output_tensor.op.output_nodes: + new_input = new_ugraph.ops_info[input_tensor.op.name].output_tensors[0] + new_node = new_ugraph.ops_info[node.name] + for i, tensor in enumerate(new_node.input_tensors): + if tensor.name == output_tensor.name: + new_node.input_tensors[i] = new_input + for op_info in cluster: + if op_info.name in new_ugraph.ops_info: + del new_ugraph.ops_info[op_info.name] + return new_ugraph def _find_dropout_clusters(self, ugraph): - clusters = defaultdict(lambda: []) - for node_name in ugraph.topo_order: - match = self._op_name_pattern.match(node_name) - if match: - name_scope = match.group(1) - clusters[name_scope].append(node_name) - return dict(clusters) - - def _find_input(self, ugraph): - """dropout_name --> input_tensor_info - - input_tensor_info := the tensor info of a tensor which is not generated - in the dropout namescope but is consumed by ops in - dropout namescope with name not starts with 'keep_prob' - """ - clusters = self._find_dropout_clusters(ugraph) - input_map = {} - for node_name in ugraph.topo_order: - match = self._op_name_pattern.match(node_name) + clusters = defaultdict(set) + for op_info in ugraph.ops_info.values(): + match = self._op_name_pattern.match(op_info.name) if match: name_scope = match.group(1) - cluster = clusters[name_scope] - op_info = ugraph.ops_info[node_name] - for in_tensor_info in op_info.input_tensors: - in_op_name = in_tensor_info.op.name - if in_op_name not in cluster and not in_op_name.startswith('keep_prob'): - input_map[name_scope] = in_tensor_info - # assuming there is only one input for dropout - break - return input_map + clusters[name_scope].add(op_info) + clusters = dict(clusters) + input_map = defaultdict(set) + output_map = defaultdict(set) + for name_scope, cluster in clusters.items(): + for op_info in cluster: + for tensor in op_info.input_tensors: + if not re.match(r"^(rate|keep_prob).*", tensor.op.name) and tensor.op not in cluster: + input_map[name_scope].add(tensor.op) + for out_node in op_info.output_nodes: + if out_node not in cluster: + output_map[name_scope].add(op_info) + return dict(input_map), dict(output_map), clusters @TransformerPipeline.register_transformer From 139a890dba87588e909d983a0cd85d813c370b5e Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 5 May 2020 00:20:23 +0800 Subject: [PATCH 110/117] update requirements.txt --- requirements.txt | 193 +++++++++++++++++++++++++++-------------------- 1 file changed, 113 insertions(+), 80 deletions(-) diff --git a/requirements.txt b/requirements.txt index 77ff5802..d695ee6b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,102 +1,135 @@ -absl-py==0.7.1 +absl-py==0.9.0 alabaster==0.7.12 +appdirs==1.4.3 appnope==0.1.0 -astor==0.7.1 -astroid==2.2.5 -atomicwrites==1.3.0 -attrs==19.1.0 -Babel==2.7.0 +astor==0.8.1 +astroid==2.3.3 +attrs==19.3.0 +Babel==2.8.0 backcall==0.1.0 -certifi==2019.3.9 +better-setuptools-git-version==1.0.5 +black==19.10b0 +bleach==3.1.1 +cachetools==4.1.0 +certifi==2019.11.28 chardet==3.0.4 -Click==7.0 -decorator==4.4.0 -doc8==0.8.0 -docutils==0.14 +click==7.1.1 +cycler==0.10.0 +decorator==4.4.2 +defusedxml==0.6.0 +docutils==0.16 entrypoints==0.3 -flake8==3.7.7 +flake8==3.7.9 +flatbuffers==1.12 gast==0.2.2 -graphviz==0.11 -grpcio==1.19.0 -h5py==2.9.0 -idna==2.8 +google-auth==1.14.1 +google-auth-oauthlib==0.4.1 +google-pasta==0.2.0 +graphviz==0.13.2 +grpcio==1.28.1 +h5py==2.10.0 +idna==2.9 idx2numpy==1.2.2 -imagesize==1.1.0 -importlib-metadata==0.17 -ipdb==0.12 -ipykernel==5.1.0 -ipython==7.4.0 +imagesize==1.2.0 +importlib-metadata==1.5.0 +ipykernel==5.1.4 +ipython==7.13.0 ipython-genutils==0.2.0 -isort==4.3.15 -jedi==0.13.3 -Jinja2==2.10 -jupyter-client==5.2.4 -jupyter-core==4.4.0 -Keras-Applications==1.0.7 -Keras-Preprocessing==1.0.9 -lazy-object-proxy==1.3.1 -Markdown==3.0.1 -MarkupSafe==1.1.1 +ipywidgets==7.5.1 +isort==4.3.21 +jedi==0.16.0 +Jinja2==3.0.0a1 +jsonschema==3.2.0 +jupyter==1.0.0 +jupyter-client==6.0.0 +jupyter-console==6.1.0 +jupyter-contrib-core==0.3.3 +jupyter-core==4.6.3 +jupyter-nbextensions-configurator==0.4.1 +Keras-Applications==1.0.8 +Keras-Preprocessing==1.1.0 +kiwisolver==1.2.0 +lazy-object-proxy==1.4.3 +Markdown==3.2.1 +MarkupSafe==2.0.0a1 +matplotlib==3.2.1 mccabe==0.6.1 -mock==2.0.0 -more-itertools==6.0.0 -numpy==1.16.2 -onnx==1.4.1 +mistune==0.8.4 +mock==4.0.2 +more-itertools==8.2.0 +nbconvert==5.6.1 +nbformat==5.0.4 +notebook==6.0.3 +numpy==1.18.3 +oauthlib==3.1.0 +onnx==1.6.0 onnx-tf==1.2.1 -packaging==19.0 -parso==0.3.4 -pbr==5.1.3 -pexpect==4.6.0 +opt-einsum==3.2.1 +ortools==7.5.7466 +packaging==20.1 +pandocfilters==1.4.2 +parso==0.6.2 +pathspec==0.7.0 +pexpect==4.8.0 pickleshare==0.7.5 -Pillow==6.0.0 -pluggy==0.12.0 -prompt-toolkit==2.0.9 -protobuf==3.7.0 +Pillow==7.1.1 +pluggy==0.13.1 +prometheus-client==0.7.1 +prompt-toolkit==3.0.3 +protobuf==3.11.3 ptyprocess==0.6.0 -py==1.8.0 +py==1.8.1 +pyasn1==0.4.8 +pyasn1-modules==0.2.8 pycodestyle==2.5.0 pyflakes==2.1.1 -Pygments==2.3.1 -pylint==2.3.1 -pyparsing==2.4.0 -pytest==5.0.1 -python-dateutil==2.8.0 -pytz==2019.1 -PyYAML==5.1 -pyzmq==18.0.1 -requests==2.22.0 -restructuredtext-lint==1.3.0 -rope==0.14.0 -scipy==1.3.0 -six==1.12.0 -snowballstemmer==1.2.1 -Sphinx==2.1.2 -sphinx-autoapi==1.1.0 +Pygments==2.5.2 +pylint==2.4.4 +pyparsing==3.0.0a1 +pyrsistent==0.15.7 +pytest==5.4.1 +python-dateutil==2.8.1 +pytz==2019.3 +PyYAML==5.3.1 +pyzmq==19.0.0 +qtconsole==4.6.0 +regex==2020.2.20 +requests==2.23.0 +requests-oauthlib==1.3.0 +rope==0.16.0 +rsa==4.0 +rstcheck==3.3.1 +scipy==1.4.1 +Send2Trash==1.5.0 +six==1.14.0 +snowballstemmer==2.0.0 +Sphinx==2.4.3 +sphinx-autoapi==1.2.1 sphinxcontrib-applehelp==1.0.1 sphinxcontrib-devhelp==1.0.1 -sphinxcontrib-dotnetdomain==0.4 -sphinxcontrib-golangdomain==0.2.0.dev0 -sphinxcontrib-htmlhelp==1.0.2 +sphinxcontrib-htmlhelp==1.0.3 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.2 sphinxcontrib-serializinghtml==1.1.3 -stevedore==1.30.1 -tensorboard==1.13.1 -tensorflow==1.13.1 -tensorflow-estimator==1.13.0 +tensorboard==2.1.1 +tensorflow==2.1.0 +tensorflow-estimator==2.1.0 termcolor==1.1.0 +terminado==0.8.3 +testpath==0.4.4 toml==0.10.0 -torch==1.0.1.post2 -torchvision==0.2.1 -tornado==6.0.2 -traitlets==4.3.2 -typed-ast==1.3.1 -typing==3.6.6 -typing-extensions==3.7.2 +torch==1.4.0 +torchvision==0.5.0 +tornado==6.0.3 +traitlets==4.3.3 +typed-ast==1.4.1 +typing-extensions==3.7.4.2 Unidecode==1.1.1 -urllib3==1.25.3 --e git+https://github.com/uTensor/utensor_cgen.git@4cc432ad08900e453bbc3c0512e45950874dc02d#egg=utensor_cgen -wcwidth==0.1.7 -Werkzeug==0.14.1 -wrapt==1.11.1 -zipp==0.5.1 +urllib3==1.25.8 +-e git+https://dboyliao@github.com/uTensor/utensor_cgen.git@d6352a329291221efafa9c838cbc7209b9b1c412#egg=utensor_cgen +wcwidth==0.1.8 +webencodings==0.5.1 +Werkzeug==1.0.1 +widgetsnbextension==3.5.1 +wrapt==1.11.2 +zipp==3.0.0 From 2f84e090cc27a8ead77359ff2959f997eac7b552 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 5 May 2020 00:42:51 +0800 Subject: [PATCH 111/117] speed up loading time --- utensor_cgen/__init__.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/utensor_cgen/__init__.py b/utensor_cgen/__init__.py index 47c08995..b5eb3ef1 100644 --- a/utensor_cgen/__init__.py +++ b/utensor_cgen/__init__.py @@ -5,10 +5,6 @@ # https://github.com/google/or-tools/issues/1830 # we need to import ortools before tensorflow from ortools.sat.python import cp_model as _ # isort:skip -import tensorflow.compat.v1 as _tf # isort:skip - -_tf.disable_v2_behavior() # isort:skip -_tf.disable_v2_tensorshape() # isort:skip from utensor_cgen._extensions import _ExtensionsLoader # isort:skip @@ -18,5 +14,3 @@ .version ) sys.modules['utensor_cgen.extensions'] = _ExtensionsLoader() - -del _tf From 8418cc2c2818ad8cb20658911a53f935bc99ec6d Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 5 May 2020 00:52:37 +0800 Subject: [PATCH 112/117] prettify printing --- utensor_cgen/cli.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utensor_cgen/cli.py b/utensor_cgen/cli.py index e0a18ca2..34dfb2f2 100644 --- a/utensor_cgen/cli.py +++ b/utensor_cgen/cli.py @@ -111,6 +111,7 @@ def convert_graph(model_file, output_nodes, config, target): @click.option('--verbose', is_flag=True) def list_trans_methods(verbose): from utensor_cgen.transformer import TransformerPipeline + from pprint import pformat if verbose: for name, trans_cls in TransformerPipeline.TRANSFORMER_MAP.items(): @@ -118,7 +119,7 @@ def list_trans_methods(verbose): click.secho(trans_cls.__doc__, fg='yellow', bold=True) else: click.secho( - str(TransformerPipeline.all_transform_methods()), + pformat(TransformerPipeline.all_transform_methods()), fg='white', bold=True ) return 0 From 32f78cd78f5efe3355891ad5c486d69ca8e5f950 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 5 May 2020 21:53:12 +0800 Subject: [PATCH 113/117] cli refactoring and exporting high-level api --- utensor_cgen/api.py | 18 -- utensor_cgen/api/__init__.py | 0 utensor_cgen/api/backend.py | 29 +++ utensor_cgen/api/convert.py | 23 ++ utensor_cgen/api/export.py | 39 +++ utensor_cgen/api/utils.py | 59 +++++ utensor_cgen/backend/utensor/_backend_impl.py | 2 +- utensor_cgen/cli.py | 223 ------------------ utensor_cgen/cli/__init__.py | 4 + utensor_cgen/cli/backend.py | 52 ++++ utensor_cgen/cli/convert.py | 37 +++ utensor_cgen/cli/main.py | 36 +++ utensor_cgen/cli/utils.py | 49 ++++ utensor_cgen/frontend/__init__.py | 4 +- utensor_cgen/frontend/base.py | 2 +- utensor_cgen/frontend/onnx.py | 9 +- utensor_cgen/frontend/tensorflow.py | 4 +- utensor_cgen/frontend/tflite.py | 9 +- utensor_cgen/frontend/utensor.py | 4 +- 19 files changed, 352 insertions(+), 251 deletions(-) delete mode 100644 utensor_cgen/api.py create mode 100644 utensor_cgen/api/__init__.py create mode 100644 utensor_cgen/api/backend.py create mode 100644 utensor_cgen/api/convert.py create mode 100644 utensor_cgen/api/export.py create mode 100644 utensor_cgen/api/utils.py delete mode 100644 utensor_cgen/cli.py create mode 100644 utensor_cgen/cli/__init__.py create mode 100644 utensor_cgen/cli/backend.py create mode 100644 utensor_cgen/cli/convert.py create mode 100644 utensor_cgen/cli/main.py create mode 100644 utensor_cgen/cli/utils.py diff --git a/utensor_cgen/api.py b/utensor_cgen/api.py deleted file mode 100644 index e8625e05..00000000 --- a/utensor_cgen/api.py +++ /dev/null @@ -1,18 +0,0 @@ -import tensorflow as tf - - -def keras_export(model_or_path, converter_kwargs): - if isinstance(model_or_path, str): - converter = tf.lite.TFLiteConverter.from_saved_model( - model_or_path, **converter_kwargs - ) - elif isinstance(model_or_path, tf.keras.Model): - converter = tf.lite.TFLiteConverter.from_keras_model( - model_or_path, **converter_kwargs - ) - else: - raise RuntimeError( - "expecting a keras model or a path to saved model, get {}".format( - model_or_path - ) - ) diff --git a/utensor_cgen/api/__init__.py b/utensor_cgen/api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/utensor_cgen/api/backend.py b/utensor_cgen/api/backend.py new file mode 100644 index 00000000..72b79949 --- /dev/null +++ b/utensor_cgen/api/backend.py @@ -0,0 +1,29 @@ +from toml import dumps + +from utensor_cgen import __version__ +from utensor_cgen.backend.api import BackendManager + + +def get_backends(): + return BackendManager.backends + +def get_trans_methods(): + from utensor_cgen.transformer import TransformerPipeline + + return TransformerPipeline.TRANSFORMER_MAP + +def generate_config(target, output='utensor_cli.toml'): + backend_cls = BackendManager.get_backend(target) + config = backend_cls.default_config + + with open(output, 'w') as fid: + fid.write( + '# utensor-cli version {}\n'.format(__version__) + \ + '# https://github.com/toml-lang/toml\n' + \ + '# ..\n' + ) + fid.write( + '# we use string \'None\' to represent python None value\n' + '# you should convert the string to None if you try to write extension for utensor_cgen\n' + ) + fid.write(dumps(config)) diff --git a/utensor_cgen/api/convert.py b/utensor_cgen/api/convert.py new file mode 100644 index 00000000..38742c26 --- /dev/null +++ b/utensor_cgen/api/convert.py @@ -0,0 +1,23 @@ +import os + +from toml import loads + +from utensor_cgen.backend.api import BackendManager + + +def convert_graph(model_file, output_nodes=None, config='utensor_cli.toml', target='utensor', model_name=None): + from utensor_cgen.frontend import FrontendSelector + + if os.path.exists(config): + with open(config) as fid: + config = loads(fid.read()) + else: + config = {} + ugraph = FrontendSelector.parse( + model_file, output_nodes, + config=config, + model_name=model_name + ) + backend = BackendManager.get_backend(target)(config) + backend.apply(ugraph) + return ugraph diff --git a/utensor_cgen/api/export.py b/utensor_cgen/api/export.py new file mode 100644 index 00000000..2cef5831 --- /dev/null +++ b/utensor_cgen/api/export.py @@ -0,0 +1,39 @@ +import tempfile +from pathlib import Path + +import tensorflow as tf + +from .convert import convert_graph + + +def tflm_keras_export( + model_or_path, + representive_dataset, + model_name=None, + optimizations=None, + config_file='utensor_cli.toml' +): + with tempfile.TemporaryDirectory(prefix='utensor_') as tmp_dir: + dir_path = Path(tmp_dir) + if isinstance(model_or_path, str): + converter = tf.lite.TFLiteConverter.from_saved_model(model_or_path) + elif isinstance(model_or_path, tf.keras.Model): + model_path = str(dir_path / 'saved_model') + model_or_path.save(model_path) + converter = tf.lite.TFLiteConverter.from_saved_model(model_path) + else: + raise RuntimeError( + "expecting a keras model or a path to saved model, get {}".format( + model_or_path + ) + ) + if optimizations is None: + optimizations = [tf.lite.Optimize.DEFAULT] + converter.representative_dataset = representive_dataset + converter.optimizations = optimizations + tflm_model_content = converter.convert() + + with (dir_path / 'tflm_model.tflite').open('wb') as fid: + fid.write(tflm_model_content) + fid.flush() + convert_graph(fid.name, config=config_file, model_name=model_name) diff --git a/utensor_cgen/api/utils.py b/utensor_cgen/api/utils.py new file mode 100644 index 00000000..d90e7322 --- /dev/null +++ b/utensor_cgen/api/utils.py @@ -0,0 +1,59 @@ +import textwrap + +import click + + +def show_ugraph(ugraph, oneline=False, ignore_unknown_op=False): + from utensor_cgen.backend.utensor.code_generator.legacy._operators import OperatorFactory + + unknown_ops = set([]) + if oneline: + tmpl = click.style("{op_name} ", fg='yellow', bold=True) + \ + "op_type: {op_type}, inputs: {inputs}, outputs: {outputs}" + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + msg = tmpl.format(op_name=op_name, op_type=op_info.op_type, + inputs=[tensor.name for tensor in op_info.input_tensors], + outputs=[tensor.name for tensor in op_info.output_tensors]) + click.echo(msg) + if not OperatorFactory.is_supported(op_info.op_type): + unknown_ops.add(op_info) + else: + tmpl = click.style('op_name: {op_name}\n', fg='yellow', bold=True) + \ + '''\ + op_type: {op_type} + input(s): + {inputs} + {input_shapes} + ouptut(s): + {outputs} + {output_shapes} + ''' + tmpl = textwrap.dedent(tmpl) + paragraphs = [] + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] + op_str = tmpl.format( + op_name=op_name, + op_type=op_info.op_type, + inputs=op_info.input_tensors, + outputs=op_info.output_tensors, + input_shapes=[tensor.shape for tensor in op_info.input_tensors], + output_shapes=[tensor.shape for tensor in op_info.output_tensors]) + paragraphs.append(op_str) + if not OperatorFactory.is_supported(op_info.op_type): + unknown_ops.add(op_info) + click.echo('\n'.join(paragraphs)) + click.secho( + 'topological ordered ops: {}'.format(ugraph.topo_order), + fg='white', bold=True, + ) + if unknown_ops and not ignore_unknown_op: + click.echo( + click.style('Unknown Ops Detected', fg='red', bold=True) + ) + for op_info in unknown_ops: + click.echo( + click.style(' {}: {}'.format(op_info.name, op_info.op_type), fg='red') + ) + return 0 diff --git a/utensor_cgen/backend/utensor/_backend_impl.py b/utensor_cgen/backend/utensor/_backend_impl.py index 790a5815..c37784e7 100644 --- a/utensor_cgen/backend/utensor/_backend_impl.py +++ b/utensor_cgen/backend/utensor/_backend_impl.py @@ -47,7 +47,7 @@ def default_config(cls): config = {} config[cls.TARGET] = {} config[cls.TARGET][cls.COMPONENT] = {} - config[cls.TARGET][cls.COMPONENT]['legacy-api'] = True + config[cls.TARGET][cls.COMPONENT]['legacy-api'] = False config[cls.TARGET][cls.COMPONENT][TensorAllocationPlanner.PART] = TensorAllocationPlanner.default_config config[cls.TARGET][cls.COMPONENT][uTensorLegacyCodeGenerator.PART] = uTensorLegacyCodeGenerator.default_config config[cls.TARGET][cls.COMPONENT][uTensorLegacyGraphLower.PART] = uTensorLegacyGraphLower.default_config diff --git a/utensor_cgen/cli.py b/utensor_cgen/cli.py deleted file mode 100644 index 34dfb2f2..00000000 --- a/utensor_cgen/cli.py +++ /dev/null @@ -1,223 +0,0 @@ -#-*- coding:utf8 -*- -import importlib -import os -import re -import sys -from pathlib import Path - -import click -from toml import dumps, loads - -from utensor_cgen import __version__ -from utensor_cgen.backend.api import BackendManager -from utensor_cgen.utils import NArgsParam - - -def _get_pb_model_name(path): - return os.path.basename(os.path.splitext(path)[0]) - -def _load_plugin(path): - path = Path(path) - if not path.exists(): - raise RuntimeError('{} does not exists'.format(path)) - sys.path.insert(0, str(path.parent)) - mod_name = re.sub(r'.py$', '', path.name.split()[0]) - importlib.import_module(mod_name) - sys.path.pop(0) - -@click.group(name='utensor-cli') -@click.help_option('-h', '--help') -@click.version_option( - __version__, - '-V', '--version' -) -@click.option( - "-p", - "--plugin", - multiple=True, - help="path of the python module which will be loaded as plugin (multiple)", - metavar="MODULE", -) -def cli(plugin): - for module_path in plugin: - _load_plugin(module_path) - -@cli.command(name='list-backends', help='list all available backends') -@click.help_option('-h', '--help') -def list_backends(): - click.secho('Available backends:', fg='green', bold=True) - for backend in BackendManager.backends: - click.secho( - ' - {}'.format(backend), fg='green' - ) - -@cli.command(name='generate-config', help='generate config toml file') -@click.help_option('-h', '--help') -@click.option('--target', required=True, help='target framework/platform') -@click.option('-o', '--output', default='utensor_cli.toml', metavar='CONFIG.toml', help='the output config file name') -def generate_config(target, output): - backend_cls = BackendManager.get_backend(target) - config = backend_cls.default_config - click.secho( - 'generating config file: {}'.format(output), - fg='white', - bold=True, - ) - with open(output, 'w') as fid: - fid.write( - '# utensor-cli version {}\n'.format(__version__) + \ - '# https://github.com/toml-lang/toml\n' + \ - '# ..\n' - ) - fid.write( - '# we use string \'None\' to represent python None value\n' - '# you should convert the string to None if you try to write extension for utensor_cgen\n' - ) - fid.write(dumps(config)) - -@cli.command(name='convert', help='convert graph to cpp/hpp files') -@click.help_option('-h', '--help') -@click.argument( - 'model_file', - required=True, - metavar='MODEL_FILE.{pb,onnx,pkl}', -) -@click.option( - '--output-nodes', - type=NArgsParam(), - metavar="NODE_NAME,NODE_NAME,...", - help="list of output nodes" -) -@click.option('--config', default='utensor_cli.toml', show_default=True, metavar='CONFIG.toml') -@click.option('--target', - default='utensor', - show_default=True, - help='target framework/platform' -) -def convert_graph(model_file, output_nodes, config, target): - from utensor_cgen.frontend import FrontendSelector - - if os.path.exists(config): - with open(config) as fid: - config = loads(fid.read()) - else: - config = {} - ugraph = FrontendSelector.parse(model_file, output_nodes, config) - backend = BackendManager.get_backend(target)(config) - backend.apply(ugraph) - -@cli.command(name='list-trans-methods', help='list all available graph transformation') -@click.help_option('-h', '--help') -@click.option('--verbose', is_flag=True) -def list_trans_methods(verbose): - from utensor_cgen.transformer import TransformerPipeline - from pprint import pformat - - if verbose: - for name, trans_cls in TransformerPipeline.TRANSFORMER_MAP.items(): - click.secho(name, fg='white', bold=True) - click.secho(trans_cls.__doc__, fg='yellow', bold=True) - else: - click.secho( - pformat(TransformerPipeline.all_transform_methods()), - fg='white', bold=True - ) - return 0 - -@cli.command(name='show', help='show node names in the pb file') -@click.help_option('-h', '--help') -@click.option('--oneline', is_flag=True, - help='show in oneline format (no detail information)') -@click.option('--ignore-unknown-op', is_flag=True, - help='ignore unknown/unsupported ops') -@click.option("--output-nodes", - type=NArgsParam(), - metavar="NODE_NAME,NODE_NAME,...", - help="list of output nodes") -@click.option('--config', default='utensor_cli.toml', show_default=True, metavar='CONFIG.toml') -@click.argument('model_file', required=True, metavar='MODEL.{pb,pkl}') -def show_graph(model_file, config, **kwargs): - import pickle - from utensor_cgen.frontend import FrontendSelector - - _, ext = os.path.splitext(model_file) - output_nodes = kwargs.pop('output_nodes') - - if ext == '.pkl': - with open(model_file, 'rb') as fid: - ugraph = pickle.load(fid) - _show_ugraph(ugraph, **kwargs) - return 0 - - if os.path.exists(config): - with open(config) as fid: - config = loads(fid.read()) - else: - config = {} - try: - ugraph = FrontendSelector.parse(model_file, output_nodes, config) - _show_ugraph(ugraph, **kwargs) - return 0 - except RuntimeError as err: - msg = err.args[0] - click.secho(msg, fg='red', bold=True) - return 1 - -def _show_ugraph(ugraph, oneline=False, ignore_unknown_op=False): - import textwrap - from utensor_cgen.backend.utensor.code_generator.legacy._operators import OperatorFactory - - unknown_ops = set([]) - if oneline: - tmpl = click.style("{op_name} ", fg='yellow', bold=True) + \ - "op_type: {op_type}, inputs: {inputs}, outputs: {outputs}" - for op_name in ugraph.topo_order: - op_info = ugraph.ops_info[op_name] - msg = tmpl.format(op_name=op_name, op_type=op_info.op_type, - inputs=[tensor.name for tensor in op_info.input_tensors], - outputs=[tensor.name for tensor in op_info.output_tensors]) - click.echo(msg) - if not OperatorFactory.is_supported(op_info.op_type): - unknown_ops.add(op_info) - else: - tmpl = click.style('op_name: {op_name}\n', fg='yellow', bold=True) + \ - '''\ - op_type: {op_type} - input(s): - {inputs} - {input_shapes} - ouptut(s): - {outputs} - {output_shapes} - ''' - tmpl = textwrap.dedent(tmpl) - paragraphs = [] - for op_name in ugraph.topo_order: - op_info = ugraph.ops_info[op_name] - op_str = tmpl.format( - op_name=op_name, - op_type=op_info.op_type, - inputs=op_info.input_tensors, - outputs=op_info.output_tensors, - input_shapes=[tensor.shape for tensor in op_info.input_tensors], - output_shapes=[tensor.shape for tensor in op_info.output_tensors]) - paragraphs.append(op_str) - if not OperatorFactory.is_supported(op_info.op_type): - unknown_ops.add(op_info) - click.echo('\n'.join(paragraphs)) - click.secho( - 'topological ordered ops: {}'.format(ugraph.topo_order), - fg='white', bold=True, - ) - if unknown_ops and not ignore_unknown_op: - click.echo( - click.style('Unknown Ops Detected', fg='red', bold=True) - ) - for op_info in unknown_ops: - click.echo( - click.style(' {}: {}'.format(op_info.name, op_info.op_type), fg='red') - ) - return 0 - -if __name__ == '__main__': - cli() diff --git a/utensor_cgen/cli/__init__.py b/utensor_cgen/cli/__init__.py new file mode 100644 index 00000000..f91c785f --- /dev/null +++ b/utensor_cgen/cli/__init__.py @@ -0,0 +1,4 @@ +from . import backend as _ +from . import convert as _ +from . import utils as _ +from .main import cli diff --git a/utensor_cgen/cli/backend.py b/utensor_cgen/cli/backend.py new file mode 100644 index 00000000..9f965dd5 --- /dev/null +++ b/utensor_cgen/cli/backend.py @@ -0,0 +1,52 @@ +import click + +from utensor_cgen import __version__ +from utensor_cgen.api.backend import generate_config as _generate_config +from utensor_cgen.api.backend import get_backends, get_trans_methods +from utensor_cgen.backend.api import BackendManager + +from .main import cli + + +@cli.command(name='list-backends', help='list all available backends') +@click.help_option('-h', '--help') +def list_backends(): + backends = get_backends() + click.secho('Available backends:', fg='green', bold=True) + for backend in backends: + click.secho( + ' - {}'.format(backend), fg='green' + ) + return 0 + +@cli.command(name='list-trans-methods', help='list all available graph transformation') +@click.help_option('-h', '--help') +@click.option('--verbose', is_flag=True) +def list_trans_methods(verbose): + from pprint import pformat + + trans_methods = get_trans_methods() + + if verbose: + for name, trans_cls in trans_methods.items(): + click.secho(name, fg='white', bold=True) + click.secho(trans_cls.__doc__, fg='yellow', bold=True) + else: + click.secho( + pformat(list(trans_methods.keys())), + fg='white', bold=True + ) + return 0 + +@cli.command(name='generate-config', help='generate config toml file') +@click.help_option('-h', '--help') +@click.option('--target', required=True, help='target framework/platform') +@click.option('-o', '--output', default='utensor_cli.toml', metavar='CONFIG.toml', help='the output config file name') +def generate_config(target, output): + _generate_config(target, output) + click.secho( + 'config file generated: {}'.format(output), + fg='white', + bold=True, + ) + return 0 diff --git a/utensor_cgen/cli/convert.py b/utensor_cgen/cli/convert.py new file mode 100644 index 00000000..7a00ec9c --- /dev/null +++ b/utensor_cgen/cli/convert.py @@ -0,0 +1,37 @@ +import os + +import click + +from utensor_cgen.api.convert import convert_graph as _convert_graph +from utensor_cgen.utils import NArgsParam + +from .main import cli + + +@cli.command(name='convert', help='convert graph to cpp/hpp files') +@click.help_option('-h', '--help') +@click.argument( + 'model_file', + required=True, + metavar='MODEL_FILE.{pb,onnx,pkl}', +) +@click.option( + '--output-nodes', + type=NArgsParam(), + metavar="NODE_NAME,NODE_NAME,...", + help="list of output nodes" +) +@click.option('--config', default='utensor_cli.toml', show_default=True, metavar='CONFIG.toml') +@click.option('--target', + default='utensor', + show_default=True, + help='target framework/platform' +) +def convert_graph(model_file, output_nodes, config, target): + _convert_graph( + model_file=model_file, + output_nodes=output_nodes, + config=config, + target=target + ) + return 0 diff --git a/utensor_cgen/cli/main.py b/utensor_cgen/cli/main.py new file mode 100644 index 00000000..9d27f342 --- /dev/null +++ b/utensor_cgen/cli/main.py @@ -0,0 +1,36 @@ +#-*- coding:utf8 -*- +import importlib +import re +import sys +from pathlib import Path + +import click + +from utensor_cgen import __version__ + + +def _load_plugin(path): + path = Path(path) + if not path.exists(): + raise RuntimeError('{} does not exists'.format(path)) + sys.path.insert(0, str(path.parent)) + mod_name = re.sub(r'.py$', '', path.name.split()[0]) + importlib.import_module(mod_name) + sys.path.pop(0) + +@click.group(name='utensor-cli') +@click.help_option('-h', '--help') +@click.version_option( + __version__, + '-V', '--version' +) +@click.option( + "-p", + "--plugin", + multiple=True, + help="path of the python module which will be loaded as plugin (multiple)", + metavar="MODULE", +) +def cli(plugin): + for module_path in plugin: + _load_plugin(module_path) diff --git a/utensor_cgen/cli/utils.py b/utensor_cgen/cli/utils.py new file mode 100644 index 00000000..d5aa78db --- /dev/null +++ b/utensor_cgen/cli/utils.py @@ -0,0 +1,49 @@ +import os + +import click +from toml import loads + +from utensor_cgen.api.utils import show_ugraph as _show_ugraph +from utensor_cgen.utils import NArgsParam + +from .main import cli + + +@cli.command(name='show', help='show node names in the pb file') +@click.help_option('-h', '--help') +@click.option('--oneline', is_flag=True, + help='show in oneline format (no detail information)') +@click.option('--ignore-unknown-op', is_flag=True, + help='ignore unknown/unsupported ops') +@click.option("--output-nodes", + type=NArgsParam(), + metavar="NODE_NAME,NODE_NAME,...", + help="list of output nodes") +@click.option('--config', default='utensor_cli.toml', show_default=True, metavar='CONFIG.toml') +@click.argument('model_file', required=True, metavar='MODEL.{pb,pkl}') +def show_graph(model_file, config, **kwargs): + import pickle + from utensor_cgen.frontend import FrontendSelector + + _, ext = os.path.splitext(model_file) + output_nodes = kwargs.pop('output_nodes') + + if ext == '.pkl': + with open(model_file, 'rb') as fid: + ugraph = pickle.load(fid) + _show_ugraph(ugraph, **kwargs) + return 0 + + if os.path.exists(config): + with open(config) as fid: + config = loads(fid.read()) + else: + config = {} + try: + ugraph = FrontendSelector.parse(model_file, output_nodes, config) + _show_ugraph(ugraph, **kwargs) + return 0 + except RuntimeError as err: + msg = err.args[0] + click.secho(msg, fg='red', bold=True) + return 1 diff --git a/utensor_cgen/frontend/__init__.py b/utensor_cgen/frontend/__init__.py index 32b82590..e11076ce 100644 --- a/utensor_cgen/frontend/__init__.py +++ b/utensor_cgen/frontend/__init__.py @@ -22,12 +22,12 @@ def _register(parser_cls): return _register @classmethod - def parse(cls, model_file, output_nodes=None, config=None): + def parse(cls, model_file, output_nodes=None, config=None, model_name=None): if config is None: config = {} _, ext = os.path.splitext(model_file) parser = cls.select_parser(ext)(config) - return parser.parse(model_file, output_nodes) + return parser.parse(model_file, output_nodes, model_name=model_name) @classmethod def select_parser(cls, file_ext): diff --git a/utensor_cgen/frontend/base.py b/utensor_cgen/frontend/base.py index e80792f7..52eb9a8f 100644 --- a/utensor_cgen/frontend/base.py +++ b/utensor_cgen/frontend/base.py @@ -17,5 +17,5 @@ def config(self): @classmethod @abstractmethod - def parse(cls, fname, outupt_nodes): + def parse(cls, fname, outupt_nodes, model_name=None): raise RuntimeError('abstract parse method involded') diff --git a/utensor_cgen/frontend/onnx.py b/utensor_cgen/frontend/onnx.py index c2691e50..b9e91da4 100644 --- a/utensor_cgen/frontend/onnx.py +++ b/utensor_cgen/frontend/onnx.py @@ -67,8 +67,13 @@ class OnnxParser(Parser): # https://github.com/onnx/onnx/blob/master/onnx/onnx.proto # https://pytorch.org/docs/stable/onnx.html - def parse(self, onnx_file, output_nodes=None): - graph_name, _ = os.path.splitext(onnx_file) + def parse(self, onnx_file, output_nodes=None, model_name=None): + if model_name: + graph_name = model_name + else: + graph_name, _ = os.path.splitext( + os.path.basename(onnx_file) + ) tf.reset_default_graph() model = onnx.load(onnx_file) onnx_graph = model.graph diff --git a/utensor_cgen/frontend/tensorflow.py b/utensor_cgen/frontend/tensorflow.py index 27e7f749..9082a333 100644 --- a/utensor_cgen/frontend/tensorflow.py +++ b/utensor_cgen/frontend/tensorflow.py @@ -18,8 +18,10 @@ @FrontendSelector.register(target_exts=[".pb", ".pbtxt"]) class GraphDefParser(Parser): - def parse(self, pb_file, output_nodes=None): + def parse(self, pb_file, output_nodes=None, model_name=None): graph_def, graph_name = self._load_graph_def(pb_file) + if model_name: + graph_name = model_name if not self._is_freeze_graph(graph_def): raise ValueError("Given graph_def is not freezed") if output_nodes is None: diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index f293338c..fc474f96 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -187,10 +187,15 @@ class TFLiteParser(Parser): } _BUILTIN_OPS = {v: k for k, v in BuiltinOperator.__dict__.items()} - def parse(self, tflite_file, output_nodes=None): + def parse(self, tflite_file, output_nodes=None, model_name=None): if output_nodes is None: output_nodes = [] - graph_name, _ = os.path.splitext(tflite_file) + if model_name: + graph_name = model_name + else: + graph_name, _ = os.path.splitext( + os.path.basename(tflite_file) + ) with open(tflite_file, "rb") as fid: buf = bytearray(fid.read()) fb_model = Model.GetRootAsModel(buf, 0) diff --git a/utensor_cgen/frontend/utensor.py b/utensor_cgen/frontend/utensor.py index 6c467b1c..5a5e0e6c 100644 --- a/utensor_cgen/frontend/utensor.py +++ b/utensor_cgen/frontend/utensor.py @@ -10,11 +10,13 @@ class PickleParser(Parser): @classmethod - def parse(cls, pkl_file, output_nodes=None): + def parse(cls, pkl_file, output_nodes=None, model_name=None): with open(pkl_file, 'rb') as fid: ugraph = pickle.load(fid) if not isinstance(ugraph, uTensorGraph): raise ValueError('expecting uTensorGraph object, get %s' % type(ugraph)) + if model_name: + ugraph.name = model_name if output_nodes is not None: ugraph.output_nodes = output_nodes topologic_order_graph(ugraph) From 357a212a2ed43de363cdd2639de080cfd15b4cf2 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 6 May 2020 00:46:38 +0800 Subject: [PATCH 114/117] Add isort:skip_file --- utensor_cgen/__init__.py | 7 +++++-- utensor_cgen/_extensions.py | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/utensor_cgen/__init__.py b/utensor_cgen/__init__.py index b5eb3ef1..bb0f8db3 100644 --- a/utensor_cgen/__init__.py +++ b/utensor_cgen/__init__.py @@ -1,12 +1,15 @@ +""" + isort:skip_file +""" import sys import pkg_resources # https://github.com/google/or-tools/issues/1830 # we need to import ortools before tensorflow -from ortools.sat.python import cp_model as _ # isort:skip +from ortools.sat.python import cp_model as _ -from utensor_cgen._extensions import _ExtensionsLoader # isort:skip +from utensor_cgen._extensions import _ExtensionsLoader __version__ = ( pkg_resources diff --git a/utensor_cgen/_extensions.py b/utensor_cgen/_extensions.py index 5a748c3b..c2db87bc 100644 --- a/utensor_cgen/_extensions.py +++ b/utensor_cgen/_extensions.py @@ -1,8 +1,11 @@ -import sys -import re +"""Experimental, DON'T USE +""" import importlib +import re +import sys from types import ModuleType + class _ExtensionsLoader(ModuleType): _ext_cache = {} _dunder_pattern = re.compile(r'__[A-Za-z0-9_]+__') From 18a396a11ae1a5f9e8129a1b1d252d48c18ae544 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 6 May 2020 10:51:37 +0800 Subject: [PATCH 115/117] Add target kwargs to api --- utensor_cgen/api/export.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/utensor_cgen/api/export.py b/utensor_cgen/api/export.py index 2cef5831..7d29f995 100644 --- a/utensor_cgen/api/export.py +++ b/utensor_cgen/api/export.py @@ -11,7 +11,8 @@ def tflm_keras_export( representive_dataset, model_name=None, optimizations=None, - config_file='utensor_cli.toml' + config_file='utensor_cli.toml', + target='utensor', ): with tempfile.TemporaryDirectory(prefix='utensor_') as tmp_dir: dir_path = Path(tmp_dir) @@ -36,4 +37,4 @@ def tflm_keras_export( with (dir_path / 'tflm_model.tflite').open('wb') as fid: fid.write(tflm_model_content) fid.flush() - convert_graph(fid.name, config=config_file, model_name=model_name) + convert_graph(fid.name, config=config_file, model_name=model_name, target=target) From cae78062ce567c051752833076cab0569f09f3a8 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 6 May 2020 16:31:20 +0800 Subject: [PATCH 116/117] remove frontend.tflite_flatbuffer module and update imports --- utensor_cgen/frontend/tflite.py | 29 ++-- .../frontend/tflite_flatbuffer/AbsOptions.py | 22 --- .../ActivationFunctionType.py | 12 -- .../frontend/tflite_flatbuffer/AddNOptions.py | 22 --- .../frontend/tflite_flatbuffer/AddOptions.py | 30 ---- .../tflite_flatbuffer/ArgMaxOptions.py | 30 ---- .../tflite_flatbuffer/ArgMinOptions.py | 30 ---- .../BatchToSpaceNDOptions.py | 22 --- .../BidirectionalSequenceLSTMOptions.py | 62 ------- .../BidirectionalSequenceRNNOptions.py | 46 ------ .../frontend/tflite_flatbuffer/Buffer.py | 46 ------ .../tflite_flatbuffer/BuiltinOperator.py | 121 -------------- .../tflite_flatbuffer/BuiltinOptions.py | 97 ----------- .../frontend/tflite_flatbuffer/CallOptions.py | 30 ---- .../frontend/tflite_flatbuffer/CastOptions.py | 38 ----- .../tflite_flatbuffer/CombinerType.py | 9 -- .../ConcatEmbeddingsOptions.py | 78 --------- .../tflite_flatbuffer/ConcatenationOptions.py | 38 ----- .../tflite_flatbuffer/Conv2DOptions.py | 70 -------- .../frontend/tflite_flatbuffer/CosOptions.py | 22 --- .../tflite_flatbuffer/CustomOptionsFormat.py | 7 - .../tflite_flatbuffer/CustomQuantization.py | 46 ------ .../DepthwiseConv2DOptions.py | 78 --------- .../tflite_flatbuffer/DequantizeOptions.py | 22 --- .../frontend/tflite_flatbuffer/DivOptions.py | 30 ---- .../EmbeddingLookupSparseOptions.py | 30 ---- .../tflite_flatbuffer/EqualOptions.py | 22 --- .../frontend/tflite_flatbuffer/ExpOptions.py | 22 --- .../tflite_flatbuffer/ExpandDimsOptions.py | 22 --- .../tflite_flatbuffer/FakeQuantOptions.py | 54 ------- .../frontend/tflite_flatbuffer/FillOptions.py | 22 --- .../tflite_flatbuffer/FloorDivOptions.py | 22 --- .../tflite_flatbuffer/FloorModOptions.py | 22 --- .../FullyConnectedOptions.py | 38 ----- .../FullyConnectedOptionsWeightsFormat.py | 8 - .../tflite_flatbuffer/GatherNdOptions.py | 22 --- .../tflite_flatbuffer/GatherOptions.py | 30 ---- .../tflite_flatbuffer/GreaterEqualOptions.py | 22 --- .../tflite_flatbuffer/GreaterOptions.py | 22 --- .../tflite_flatbuffer/L2NormOptions.py | 30 ---- .../tflite_flatbuffer/LSHProjectionOptions.py | 30 ---- .../tflite_flatbuffer/LSHProjectionType.py | 9 -- .../tflite_flatbuffer/LSTMKernelType.py | 8 - .../frontend/tflite_flatbuffer/LSTMOptions.py | 54 ------- .../tflite_flatbuffer/LeakyReluOptions.py | 30 ---- .../tflite_flatbuffer/LessEqualOptions.py | 22 --- .../frontend/tflite_flatbuffer/LessOptions.py | 22 --- .../LocalResponseNormalizationOptions.py | 54 ------- .../tflite_flatbuffer/LogSoftmaxOptions.py | 22 --- .../tflite_flatbuffer/LogicalAndOptions.py | 22 --- .../tflite_flatbuffer/LogicalNotOptions.py | 22 --- .../tflite_flatbuffer/LogicalOrOptions.py | 22 --- .../tflite_flatbuffer/MatrixDiagOptions.py | 22 --- .../tflite_flatbuffer/MatrixSetDiagOptions.py | 22 --- .../MaximumMinimumOptions.py | 22 --- .../tflite_flatbuffer/MirrorPadMode.py | 8 - .../tflite_flatbuffer/MirrorPadOptions.py | 30 ---- .../frontend/tflite_flatbuffer/Model.py | 128 --------------- .../frontend/tflite_flatbuffer/MulOptions.py | 30 ---- .../frontend/tflite_flatbuffer/NegOptions.py | 22 --- .../tflite_flatbuffer/NotEqualOptions.py | 22 --- .../tflite_flatbuffer/OneHotOptions.py | 30 ---- .../frontend/tflite_flatbuffer/Operator.py | 153 ------------------ .../tflite_flatbuffer/OperatorCode.py | 46 ------ .../frontend/tflite_flatbuffer/PackOptions.py | 38 ----- .../frontend/tflite_flatbuffer/PadOptions.py | 22 --- .../tflite_flatbuffer/PadV2Options.py | 22 --- .../frontend/tflite_flatbuffer/Padding.py | 8 - .../tflite_flatbuffer/Pool2DOptions.py | 70 -------- .../frontend/tflite_flatbuffer/PowOptions.py | 22 --- .../tflite_flatbuffer/QuantizationDetails.py | 8 - .../QuantizationParameters.py | 145 ----------------- .../tflite_flatbuffer/QuantizeOptions.py | 22 --- .../frontend/tflite_flatbuffer/RNNOptions.py | 30 ---- .../tflite_flatbuffer/RangeOptions.py | 22 --- .../frontend/tflite_flatbuffer/RankOptions.py | 22 --- .../tflite_flatbuffer/ReducerOptions.py | 30 ---- .../tflite_flatbuffer/ReshapeOptions.py | 46 ------ .../ResizeBilinearOptions.py | 30 ---- .../ResizeNearestNeighborOptions.py | 30 ---- .../ReverseSequenceOptions.py | 38 ----- .../tflite_flatbuffer/ReverseV2Options.py | 22 --- .../frontend/tflite_flatbuffer/SVDFOptions.py | 38 ----- .../tflite_flatbuffer/SelectOptions.py | 22 --- .../tflite_flatbuffer/SequenceRNNOptions.py | 38 ----- .../tflite_flatbuffer/ShapeOptions.py | 30 ---- .../tflite_flatbuffer/SkipGramOptions.py | 46 ------ .../tflite_flatbuffer/SliceOptions.py | 22 --- .../tflite_flatbuffer/SoftmaxOptions.py | 30 ---- .../SpaceToBatchNDOptions.py | 22 --- .../tflite_flatbuffer/SpaceToDepthOptions.py | 30 ---- .../tflite_flatbuffer/SparseToDenseOptions.py | 30 ---- .../tflite_flatbuffer/SplitOptions.py | 30 ---- .../tflite_flatbuffer/SplitVOptions.py | 30 ---- .../tflite_flatbuffer/SquareOptions.py | 22 --- .../SquaredDifferenceOptions.py | 22 --- .../tflite_flatbuffer/SqueezeOptions.py | 46 ------ .../tflite_flatbuffer/StridedSliceOptions.py | 62 ------- .../frontend/tflite_flatbuffer/SubGraph.py | 122 -------------- .../frontend/tflite_flatbuffer/SubOptions.py | 30 ---- .../frontend/tflite_flatbuffer/Tensor.py | 90 ----------- .../frontend/tflite_flatbuffer/TensorType.py | 16 -- .../frontend/tflite_flatbuffer/TileOptions.py | 22 --- .../tflite_flatbuffer/TopKV2Options.py | 22 --- .../tflite_flatbuffer/TransposeConvOptions.py | 46 ------ .../tflite_flatbuffer/TransposeOptions.py | 22 --- .../UnidirectionalSequenceLSTMOptions.py | 54 ------- .../tflite_flatbuffer/UniqueOptions.py | 30 ---- .../tflite_flatbuffer/UnpackOptions.py | 38 ----- .../tflite_flatbuffer/WhereOptions.py | 22 --- .../tflite_flatbuffer/ZerosLikeOptions.py | 22 --- .../__init__.py | 0 112 files changed, 15 insertions(+), 3945 deletions(-) delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/AbsOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ActivationFunctionType.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/AddNOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/AddOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ArgMaxOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ArgMinOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BatchToSpaceNDOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceLSTMOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceRNNOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Buffer.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BuiltinOperator.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/BuiltinOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CallOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CastOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CombinerType.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ConcatEmbeddingsOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ConcatenationOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Conv2DOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CosOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CustomOptionsFormat.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/CustomQuantization.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/DepthwiseConv2DOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/DequantizeOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/DivOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/EmbeddingLookupSparseOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/EqualOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ExpOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ExpandDimsOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FakeQuantOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FillOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FloorDivOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FloorModOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptionsWeightsFormat.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/GatherNdOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/GatherOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/GreaterEqualOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/GreaterOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/L2NormOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionType.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LSTMKernelType.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LSTMOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LeakyReluOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LessEqualOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LessOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LocalResponseNormalizationOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LogSoftmaxOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LogicalAndOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LogicalNotOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/LogicalOrOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MatrixDiagOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MatrixSetDiagOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MaximumMinimumOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MirrorPadMode.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MirrorPadOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Model.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/MulOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/NegOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/NotEqualOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/OneHotOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Operator.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/OperatorCode.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/PackOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/PadOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/PadV2Options.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Padding.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Pool2DOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/PowOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/QuantizationDetails.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/QuantizationParameters.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/QuantizeOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/RNNOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/RangeOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/RankOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ReducerOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ReshapeOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ResizeBilinearOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ResizeNearestNeighborOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ReverseSequenceOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ReverseV2Options.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SVDFOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SelectOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SequenceRNNOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ShapeOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SkipGramOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SliceOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SoftmaxOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SpaceToBatchNDOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SpaceToDepthOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SparseToDenseOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SplitOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SplitVOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SquareOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SquaredDifferenceOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SqueezeOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/StridedSliceOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SubGraph.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/SubOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/Tensor.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TensorType.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TileOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TopKV2Options.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TransposeConvOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/TransposeOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/UnidirectionalSequenceLSTMOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/UniqueOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/UnpackOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/WhereOptions.py delete mode 100644 utensor_cgen/frontend/tflite_flatbuffer/ZerosLikeOptions.py rename utensor_cgen/{frontend/tflite_flatbuffer => third_party}/__init__.py (100%) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index fc474f96..cf169a1e 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -8,14 +8,15 @@ from utensor_cgen.ir.base import OperationInfo, TensorInfo, uTensorGraph from utensor_cgen.ir.converter import (AttrValueConverter, GenericTensorConverterMixin) -from utensor_cgen.utils import topologic_order_graph - -from .tflite_flatbuffer.ActivationFunctionType import ActivationFunctionType -from .tflite_flatbuffer.BuiltinOperator import BuiltinOperator -from .tflite_flatbuffer.CustomOptionsFormat import CustomOptionsFormat -from .tflite_flatbuffer.FullyConnectedOptionsWeightsFormat import \ +from utensor_cgen.third_party.tflite.ActivationFunctionType import \ + ActivationFunctionType +from utensor_cgen.third_party.tflite.BuiltinOperator import BuiltinOperator +from utensor_cgen.third_party.tflite.CustomOptionsFormat import \ + CustomOptionsFormat +from utensor_cgen.third_party.tflite.FullyConnectedOptionsWeightsFormat import \ FullyConnectedOptionsWeightsFormat -from .tflite_flatbuffer.Model import Model +from utensor_cgen.third_party.tflite.Model import Model +from utensor_cgen.utils import topologic_order_graph _CUSTOM_OPTION_FORMAT_MAP = {v: k for k, v in CustomOptionsFormat.__dict__.items()} @@ -27,7 +28,7 @@ def class_option2str(obj, idx): def fully_connected_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.FullyConnectedOptions import FullyConnectedOptions + from utensor_cgen.third_party.tflite.FullyConnectedOptions import FullyConnectedOptions option = FullyConnectedOptions() builtin_data = op.BuiltinOptions() @@ -47,7 +48,7 @@ def fully_connected_op_data(op): def depthwise_conv2d_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.DepthwiseConv2DOptions import DepthwiseConv2DOptions + from utensor_cgen.third_party.tflite.DepthwiseConv2DOptions import DepthwiseConv2DOptions option = DepthwiseConv2DOptions() builtin_data = op.BuiltinOptions() @@ -72,7 +73,7 @@ def depthwise_conv2d_op_data(op): def reshape_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.ReshapeOptions import ReshapeOptions + from utensor_cgen.third_party.tflite.ReshapeOptions import ReshapeOptions option = ReshapeOptions() builtin_data = op.BuiltinOptions() @@ -88,7 +89,7 @@ def reshape_op_data(op): def dequantize_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.DequantizeOptions import DequantizeOptions + from utensor_cgen.third_party.tflite.DequantizeOptions import DequantizeOptions option = DequantizeOptions() builtin_data = op.BuiltinOptions() @@ -106,7 +107,7 @@ def dequantize_op_data(op): def quantize_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.QuantizeOptions import QuantizeOptions + from utensor_cgen.third_party.tflite.QuantizeOptions import QuantizeOptions option = QuantizeOptions() builtin_data = op.BuiltinOptions() @@ -124,7 +125,7 @@ def quantize_op_data(op): def pool2d_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.Pool2DOptions import Pool2DOptions + from utensor_cgen.third_party.tflite.Pool2DOptions import Pool2DOptions option = Pool2DOptions() builtin_data = op.BuiltinOptions() @@ -147,7 +148,7 @@ def pool2d_op_data(op): def argmax_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.ArgMaxOptions import ArgMaxOptions + from utensor_cgen.third_party.tflite.ArgMaxOptions import ArgMaxOptions option = ArgMaxOptions() builtin_data = op.BuiltinOptions() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/AbsOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/AbsOptions.py deleted file mode 100644 index 0cbfb8c0..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/AbsOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class AbsOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsAbsOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = AbsOptions() - x.Init(buf, n + offset) - return x - - # AbsOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def AbsOptionsStart(builder): builder.StartObject(0) -def AbsOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ActivationFunctionType.py b/utensor_cgen/frontend/tflite_flatbuffer/ActivationFunctionType.py deleted file mode 100644 index dc177dee..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ActivationFunctionType.py +++ /dev/null @@ -1,12 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class ActivationFunctionType(object): - NONE = 0 - RELU = 1 - RELU_N1_TO_1 = 2 - RELU6 = 3 - TANH = 4 - SIGN_BIT = 5 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/AddNOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/AddNOptions.py deleted file mode 100644 index b5c2ddb7..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/AddNOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class AddNOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsAddNOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = AddNOptions() - x.Init(buf, n + offset) - return x - - # AddNOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def AddNOptionsStart(builder): builder.StartObject(0) -def AddNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/AddOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/AddOptions.py deleted file mode 100644 index d6cbfcf5..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/AddOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class AddOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsAddOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = AddOptions() - x.Init(buf, n + offset) - return x - - # AddOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # AddOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def AddOptionsStart(builder): builder.StartObject(1) -def AddOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def AddOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ArgMaxOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ArgMaxOptions.py deleted file mode 100644 index fbf1415e..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ArgMaxOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ArgMaxOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsArgMaxOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ArgMaxOptions() - x.Init(buf, n + offset) - return x - - # ArgMaxOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ArgMaxOptions - def OutputType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def ArgMaxOptionsStart(builder): builder.StartObject(1) -def ArgMaxOptionsAddOutputType(builder, outputType): builder.PrependInt8Slot(0, outputType, 0) -def ArgMaxOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ArgMinOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ArgMinOptions.py deleted file mode 100644 index 120fdca2..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ArgMinOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ArgMinOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsArgMinOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ArgMinOptions() - x.Init(buf, n + offset) - return x - - # ArgMinOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ArgMinOptions - def OutputType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def ArgMinOptionsStart(builder): builder.StartObject(1) -def ArgMinOptionsAddOutputType(builder, outputType): builder.PrependInt8Slot(0, outputType, 0) -def ArgMinOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BatchToSpaceNDOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/BatchToSpaceNDOptions.py deleted file mode 100644 index 3ddcfd3f..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/BatchToSpaceNDOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class BatchToSpaceNDOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsBatchToSpaceNDOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = BatchToSpaceNDOptions() - x.Init(buf, n + offset) - return x - - # BatchToSpaceNDOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def BatchToSpaceNDOptionsStart(builder): builder.StartObject(0) -def BatchToSpaceNDOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceLSTMOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceLSTMOptions.py deleted file mode 100644 index 8d8b7bea..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceLSTMOptions.py +++ /dev/null @@ -1,62 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class BidirectionalSequenceLSTMOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsBidirectionalSequenceLSTMOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = BidirectionalSequenceLSTMOptions() - x.Init(buf, n + offset) - return x - - # BidirectionalSequenceLSTMOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # BidirectionalSequenceLSTMOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # BidirectionalSequenceLSTMOptions - def CellClip(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # BidirectionalSequenceLSTMOptions - def ProjClip(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # BidirectionalSequenceLSTMOptions - def MergeOutputs(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - - # BidirectionalSequenceLSTMOptions - def TimeMajor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return True - -def BidirectionalSequenceLSTMOptionsStart(builder): builder.StartObject(5) -def BidirectionalSequenceLSTMOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def BidirectionalSequenceLSTMOptionsAddCellClip(builder, cellClip): builder.PrependFloat32Slot(1, cellClip, 0.0) -def BidirectionalSequenceLSTMOptionsAddProjClip(builder, projClip): builder.PrependFloat32Slot(2, projClip, 0.0) -def BidirectionalSequenceLSTMOptionsAddMergeOutputs(builder, mergeOutputs): builder.PrependBoolSlot(3, mergeOutputs, 0) -def BidirectionalSequenceLSTMOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(4, timeMajor, 1) -def BidirectionalSequenceLSTMOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceRNNOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceRNNOptions.py deleted file mode 100644 index 673af6b9..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/BidirectionalSequenceRNNOptions.py +++ /dev/null @@ -1,46 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class BidirectionalSequenceRNNOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsBidirectionalSequenceRNNOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = BidirectionalSequenceRNNOptions() - x.Init(buf, n + offset) - return x - - # BidirectionalSequenceRNNOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # BidirectionalSequenceRNNOptions - def TimeMajor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - - # BidirectionalSequenceRNNOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # BidirectionalSequenceRNNOptions - def MergeOutputs(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - -def BidirectionalSequenceRNNOptionsStart(builder): builder.StartObject(3) -def BidirectionalSequenceRNNOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(0, timeMajor, 0) -def BidirectionalSequenceRNNOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) -def BidirectionalSequenceRNNOptionsAddMergeOutputs(builder, mergeOutputs): builder.PrependBoolSlot(2, mergeOutputs, 0) -def BidirectionalSequenceRNNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Buffer.py b/utensor_cgen/frontend/tflite_flatbuffer/Buffer.py deleted file mode 100644 index 754dee3b..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/Buffer.py +++ /dev/null @@ -1,46 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class Buffer(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsBuffer(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Buffer() - x.Init(buf, n + offset) - return x - - # Buffer - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # Buffer - def Data(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) - return 0 - - # Buffer - def DataAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) - return 0 - - # Buffer - def DataLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - -def BufferStart(builder): builder.StartObject(1) -def BufferAddData(builder, data): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(data), 0) -def BufferStartDataVector(builder, numElems): return builder.StartVector(1, numElems, 1) -def BufferEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOperator.py b/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOperator.py deleted file mode 100644 index 229e1270..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOperator.py +++ /dev/null @@ -1,121 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class BuiltinOperator(object): - ADD = 0 - AVERAGE_POOL_2D = 1 - CONCATENATION = 2 - CONV_2D = 3 - DEPTHWISE_CONV_2D = 4 - DEQUANTIZE = 6 - EMBEDDING_LOOKUP = 7 - FLOOR = 8 - FULLY_CONNECTED = 9 - HASHTABLE_LOOKUP = 10 - L2_NORMALIZATION = 11 - L2_POOL_2D = 12 - LOCAL_RESPONSE_NORMALIZATION = 13 - LOGISTIC = 14 - LSH_PROJECTION = 15 - LSTM = 16 - MAX_POOL_2D = 17 - MUL = 18 - RELU = 19 - RELU_N1_TO_1 = 20 - RELU6 = 21 - RESHAPE = 22 - RESIZE_BILINEAR = 23 - RNN = 24 - SOFTMAX = 25 - SPACE_TO_DEPTH = 26 - SVDF = 27 - TANH = 28 - CONCAT_EMBEDDINGS = 29 - SKIP_GRAM = 30 - CALL = 31 - CUSTOM = 32 - EMBEDDING_LOOKUP_SPARSE = 33 - PAD = 34 - UNIDIRECTIONAL_SEQUENCE_RNN = 35 - GATHER = 36 - BATCH_TO_SPACE_ND = 37 - SPACE_TO_BATCH_ND = 38 - TRANSPOSE = 39 - MEAN = 40 - SUB = 41 - DIV = 42 - SQUEEZE = 43 - UNIDIRECTIONAL_SEQUENCE_LSTM = 44 - STRIDED_SLICE = 45 - BIDIRECTIONAL_SEQUENCE_RNN = 46 - EXP = 47 - TOPK_V2 = 48 - SPLIT = 49 - LOG_SOFTMAX = 50 - DELEGATE = 51 - BIDIRECTIONAL_SEQUENCE_LSTM = 52 - CAST = 53 - PRELU = 54 - MAXIMUM = 55 - ARG_MAX = 56 - MINIMUM = 57 - LESS = 58 - NEG = 59 - PADV2 = 60 - GREATER = 61 - GREATER_EQUAL = 62 - LESS_EQUAL = 63 - SELECT = 64 - SLICE = 65 - SIN = 66 - TRANSPOSE_CONV = 67 - SPARSE_TO_DENSE = 68 - TILE = 69 - EXPAND_DIMS = 70 - EQUAL = 71 - NOT_EQUAL = 72 - LOG = 73 - SUM = 74 - SQRT = 75 - RSQRT = 76 - SHAPE = 77 - POW = 78 - ARG_MIN = 79 - FAKE_QUANT = 80 - REDUCE_PROD = 81 - REDUCE_MAX = 82 - PACK = 83 - LOGICAL_OR = 84 - ONE_HOT = 85 - LOGICAL_AND = 86 - LOGICAL_NOT = 87 - UNPACK = 88 - REDUCE_MIN = 89 - FLOOR_DIV = 90 - REDUCE_ANY = 91 - SQUARE = 92 - ZEROS_LIKE = 93 - FILL = 94 - FLOOR_MOD = 95 - RANGE = 96 - RESIZE_NEAREST_NEIGHBOR = 97 - LEAKY_RELU = 98 - SQUARED_DIFFERENCE = 99 - MIRROR_PAD = 100 - ABS = 101 - SPLIT_V = 102 - UNIQUE = 103 - CEIL = 104 - REVERSE_V2 = 105 - ADD_N = 106 - GATHER_ND = 107 - COS = 108 - WHERE = 109 - RANK = 110 - ELU = 111 - REVERSE_SEQUENCE = 112 - MATRIX_DIAG = 113 - QUANTIZE = 114 - MATRIX_SET_DIAG = 115 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOptions.py deleted file mode 100644 index 9830f648..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/BuiltinOptions.py +++ /dev/null @@ -1,97 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class BuiltinOptions(object): - NONE = 0 - Conv2DOptions = 1 - DepthwiseConv2DOptions = 2 - ConcatEmbeddingsOptions = 3 - LSHProjectionOptions = 4 - Pool2DOptions = 5 - SVDFOptions = 6 - RNNOptions = 7 - FullyConnectedOptions = 8 - SoftmaxOptions = 9 - ConcatenationOptions = 10 - AddOptions = 11 - L2NormOptions = 12 - LocalResponseNormalizationOptions = 13 - LSTMOptions = 14 - ResizeBilinearOptions = 15 - CallOptions = 16 - ReshapeOptions = 17 - SkipGramOptions = 18 - SpaceToDepthOptions = 19 - EmbeddingLookupSparseOptions = 20 - MulOptions = 21 - PadOptions = 22 - GatherOptions = 23 - BatchToSpaceNDOptions = 24 - SpaceToBatchNDOptions = 25 - TransposeOptions = 26 - ReducerOptions = 27 - SubOptions = 28 - DivOptions = 29 - SqueezeOptions = 30 - SequenceRNNOptions = 31 - StridedSliceOptions = 32 - ExpOptions = 33 - TopKV2Options = 34 - SplitOptions = 35 - LogSoftmaxOptions = 36 - CastOptions = 37 - DequantizeOptions = 38 - MaximumMinimumOptions = 39 - ArgMaxOptions = 40 - LessOptions = 41 - NegOptions = 42 - PadV2Options = 43 - GreaterOptions = 44 - GreaterEqualOptions = 45 - LessEqualOptions = 46 - SelectOptions = 47 - SliceOptions = 48 - TransposeConvOptions = 49 - SparseToDenseOptions = 50 - TileOptions = 51 - ExpandDimsOptions = 52 - EqualOptions = 53 - NotEqualOptions = 54 - ShapeOptions = 55 - PowOptions = 56 - ArgMinOptions = 57 - FakeQuantOptions = 58 - PackOptions = 59 - LogicalOrOptions = 60 - OneHotOptions = 61 - LogicalAndOptions = 62 - LogicalNotOptions = 63 - UnpackOptions = 64 - FloorDivOptions = 65 - SquareOptions = 66 - ZerosLikeOptions = 67 - FillOptions = 68 - BidirectionalSequenceLSTMOptions = 69 - BidirectionalSequenceRNNOptions = 70 - UnidirectionalSequenceLSTMOptions = 71 - FloorModOptions = 72 - RangeOptions = 73 - ResizeNearestNeighborOptions = 74 - LeakyReluOptions = 75 - SquaredDifferenceOptions = 76 - MirrorPadOptions = 77 - AbsOptions = 78 - SplitVOptions = 79 - UniqueOptions = 80 - ReverseV2Options = 81 - AddNOptions = 82 - GatherNdOptions = 83 - CosOptions = 84 - WhereOptions = 85 - RankOptions = 86 - ReverseSequenceOptions = 87 - MatrixDiagOptions = 88 - QuantizeOptions = 89 - MatrixSetDiagOptions = 90 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CallOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/CallOptions.py deleted file mode 100644 index 5ae2eeae..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/CallOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class CallOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsCallOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = CallOptions() - x.Init(buf, n + offset) - return x - - # CallOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # CallOptions - def Subgraph(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - -def CallOptionsStart(builder): builder.StartObject(1) -def CallOptionsAddSubgraph(builder, subgraph): builder.PrependUint32Slot(0, subgraph, 0) -def CallOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CastOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/CastOptions.py deleted file mode 100644 index 70ae2e37..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/CastOptions.py +++ /dev/null @@ -1,38 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class CastOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsCastOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = CastOptions() - x.Init(buf, n + offset) - return x - - # CastOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # CastOptions - def InDataType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # CastOptions - def OutDataType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def CastOptionsStart(builder): builder.StartObject(2) -def CastOptionsAddInDataType(builder, inDataType): builder.PrependInt8Slot(0, inDataType, 0) -def CastOptionsAddOutDataType(builder, outDataType): builder.PrependInt8Slot(1, outDataType, 0) -def CastOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CombinerType.py b/utensor_cgen/frontend/tflite_flatbuffer/CombinerType.py deleted file mode 100644 index 17d91510..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/CombinerType.py +++ /dev/null @@ -1,9 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class CombinerType(object): - SUM = 0 - MEAN = 1 - SQRTN = 2 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ConcatEmbeddingsOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ConcatEmbeddingsOptions.py deleted file mode 100644 index 9d26c510..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ConcatEmbeddingsOptions.py +++ /dev/null @@ -1,78 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ConcatEmbeddingsOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsConcatEmbeddingsOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ConcatEmbeddingsOptions() - x.Init(buf, n + offset) - return x - - # ConcatEmbeddingsOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ConcatEmbeddingsOptions - def NumChannels(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # ConcatEmbeddingsOptions - def NumColumnsPerChannel(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # ConcatEmbeddingsOptions - def NumColumnsPerChannelAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # ConcatEmbeddingsOptions - def NumColumnsPerChannelLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # ConcatEmbeddingsOptions - def EmbeddingDimPerChannel(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # ConcatEmbeddingsOptions - def EmbeddingDimPerChannelAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # ConcatEmbeddingsOptions - def EmbeddingDimPerChannelLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - -def ConcatEmbeddingsOptionsStart(builder): builder.StartObject(3) -def ConcatEmbeddingsOptionsAddNumChannels(builder, numChannels): builder.PrependInt32Slot(0, numChannels, 0) -def ConcatEmbeddingsOptionsAddNumColumnsPerChannel(builder, numColumnsPerChannel): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(numColumnsPerChannel), 0) -def ConcatEmbeddingsOptionsStartNumColumnsPerChannelVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def ConcatEmbeddingsOptionsAddEmbeddingDimPerChannel(builder, embeddingDimPerChannel): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(embeddingDimPerChannel), 0) -def ConcatEmbeddingsOptionsStartEmbeddingDimPerChannelVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def ConcatEmbeddingsOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ConcatenationOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ConcatenationOptions.py deleted file mode 100644 index c8e0b6ab..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ConcatenationOptions.py +++ /dev/null @@ -1,38 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ConcatenationOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsConcatenationOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ConcatenationOptions() - x.Init(buf, n + offset) - return x - - # ConcatenationOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ConcatenationOptions - def Axis(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # ConcatenationOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def ConcatenationOptionsStart(builder): builder.StartObject(2) -def ConcatenationOptionsAddAxis(builder, axis): builder.PrependInt32Slot(0, axis, 0) -def ConcatenationOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) -def ConcatenationOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Conv2DOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/Conv2DOptions.py deleted file mode 100644 index ef49f751..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/Conv2DOptions.py +++ /dev/null @@ -1,70 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class Conv2DOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsConv2DOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Conv2DOptions() - x.Init(buf, n + offset) - return x - - # Conv2DOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # Conv2DOptions - def Padding(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # Conv2DOptions - def StrideW(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # Conv2DOptions - def StrideH(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # Conv2DOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # Conv2DOptions - def DilationWFactor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 1 - - # Conv2DOptions - def DilationHFactor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 1 - -def Conv2DOptionsStart(builder): builder.StartObject(6) -def Conv2DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) -def Conv2DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) -def Conv2DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) -def Conv2DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(3, fusedActivationFunction, 0) -def Conv2DOptionsAddDilationWFactor(builder, dilationWFactor): builder.PrependInt32Slot(4, dilationWFactor, 1) -def Conv2DOptionsAddDilationHFactor(builder, dilationHFactor): builder.PrependInt32Slot(5, dilationHFactor, 1) -def Conv2DOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CosOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/CosOptions.py deleted file mode 100644 index 7fbf8487..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/CosOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class CosOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsCosOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = CosOptions() - x.Init(buf, n + offset) - return x - - # CosOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def CosOptionsStart(builder): builder.StartObject(0) -def CosOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CustomOptionsFormat.py b/utensor_cgen/frontend/tflite_flatbuffer/CustomOptionsFormat.py deleted file mode 100644 index bef384cf..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/CustomOptionsFormat.py +++ /dev/null @@ -1,7 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class CustomOptionsFormat(object): - FLEXBUFFERS = 0 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/CustomQuantization.py b/utensor_cgen/frontend/tflite_flatbuffer/CustomQuantization.py deleted file mode 100644 index 21ec0da4..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/CustomQuantization.py +++ /dev/null @@ -1,46 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class CustomQuantization(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsCustomQuantization(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = CustomQuantization() - x.Init(buf, n + offset) - return x - - # CustomQuantization - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # CustomQuantization - def Custom(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) - return 0 - - # CustomQuantization - def CustomAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) - return 0 - - # CustomQuantization - def CustomLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - -def CustomQuantizationStart(builder): builder.StartObject(1) -def CustomQuantizationAddCustom(builder, custom): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(custom), 0) -def CustomQuantizationStartCustomVector(builder, numElems): return builder.StartVector(1, numElems, 1) -def CustomQuantizationEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/DepthwiseConv2DOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/DepthwiseConv2DOptions.py deleted file mode 100644 index 9689383b..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/DepthwiseConv2DOptions.py +++ /dev/null @@ -1,78 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class DepthwiseConv2DOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsDepthwiseConv2DOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = DepthwiseConv2DOptions() - x.Init(buf, n + offset) - return x - - # DepthwiseConv2DOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # DepthwiseConv2DOptions - def Padding(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # DepthwiseConv2DOptions - def StrideW(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # DepthwiseConv2DOptions - def StrideH(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # DepthwiseConv2DOptions - def DepthMultiplier(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # DepthwiseConv2DOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # DepthwiseConv2DOptions - def DilationWFactor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 1 - - # DepthwiseConv2DOptions - def DilationHFactor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 1 - -def DepthwiseConv2DOptionsStart(builder): builder.StartObject(7) -def DepthwiseConv2DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) -def DepthwiseConv2DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) -def DepthwiseConv2DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) -def DepthwiseConv2DOptionsAddDepthMultiplier(builder, depthMultiplier): builder.PrependInt32Slot(3, depthMultiplier, 0) -def DepthwiseConv2DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(4, fusedActivationFunction, 0) -def DepthwiseConv2DOptionsAddDilationWFactor(builder, dilationWFactor): builder.PrependInt32Slot(5, dilationWFactor, 1) -def DepthwiseConv2DOptionsAddDilationHFactor(builder, dilationHFactor): builder.PrependInt32Slot(6, dilationHFactor, 1) -def DepthwiseConv2DOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/DequantizeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/DequantizeOptions.py deleted file mode 100644 index 5ef8b8dd..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/DequantizeOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class DequantizeOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsDequantizeOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = DequantizeOptions() - x.Init(buf, n + offset) - return x - - # DequantizeOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def DequantizeOptionsStart(builder): builder.StartObject(0) -def DequantizeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/DivOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/DivOptions.py deleted file mode 100644 index 905a3be0..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/DivOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class DivOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsDivOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = DivOptions() - x.Init(buf, n + offset) - return x - - # DivOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # DivOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def DivOptionsStart(builder): builder.StartObject(1) -def DivOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def DivOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/EmbeddingLookupSparseOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/EmbeddingLookupSparseOptions.py deleted file mode 100644 index 7d9c1442..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/EmbeddingLookupSparseOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class EmbeddingLookupSparseOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsEmbeddingLookupSparseOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = EmbeddingLookupSparseOptions() - x.Init(buf, n + offset) - return x - - # EmbeddingLookupSparseOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # EmbeddingLookupSparseOptions - def Combiner(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def EmbeddingLookupSparseOptionsStart(builder): builder.StartObject(1) -def EmbeddingLookupSparseOptionsAddCombiner(builder, combiner): builder.PrependInt8Slot(0, combiner, 0) -def EmbeddingLookupSparseOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/EqualOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/EqualOptions.py deleted file mode 100644 index f787ef85..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/EqualOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class EqualOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsEqualOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = EqualOptions() - x.Init(buf, n + offset) - return x - - # EqualOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def EqualOptionsStart(builder): builder.StartObject(0) -def EqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ExpOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ExpOptions.py deleted file mode 100644 index eac1456e..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ExpOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ExpOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsExpOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ExpOptions() - x.Init(buf, n + offset) - return x - - # ExpOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def ExpOptionsStart(builder): builder.StartObject(0) -def ExpOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ExpandDimsOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ExpandDimsOptions.py deleted file mode 100644 index 69d63665..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ExpandDimsOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ExpandDimsOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsExpandDimsOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ExpandDimsOptions() - x.Init(buf, n + offset) - return x - - # ExpandDimsOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def ExpandDimsOptionsStart(builder): builder.StartObject(0) -def ExpandDimsOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FakeQuantOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FakeQuantOptions.py deleted file mode 100644 index 46c371c3..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/FakeQuantOptions.py +++ /dev/null @@ -1,54 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class FakeQuantOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsFakeQuantOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = FakeQuantOptions() - x.Init(buf, n + offset) - return x - - # FakeQuantOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # FakeQuantOptions - def Min(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # FakeQuantOptions - def Max(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # FakeQuantOptions - def NumBits(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # FakeQuantOptions - def NarrowRange(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - -def FakeQuantOptionsStart(builder): builder.StartObject(4) -def FakeQuantOptionsAddMin(builder, min): builder.PrependFloat32Slot(0, min, 0.0) -def FakeQuantOptionsAddMax(builder, max): builder.PrependFloat32Slot(1, max, 0.0) -def FakeQuantOptionsAddNumBits(builder, numBits): builder.PrependInt32Slot(2, numBits, 0) -def FakeQuantOptionsAddNarrowRange(builder, narrowRange): builder.PrependBoolSlot(3, narrowRange, 0) -def FakeQuantOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FillOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FillOptions.py deleted file mode 100644 index 5a1e651a..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/FillOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class FillOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsFillOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = FillOptions() - x.Init(buf, n + offset) - return x - - # FillOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def FillOptionsStart(builder): builder.StartObject(0) -def FillOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FloorDivOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FloorDivOptions.py deleted file mode 100644 index 64b474fb..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/FloorDivOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class FloorDivOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsFloorDivOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = FloorDivOptions() - x.Init(buf, n + offset) - return x - - # FloorDivOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def FloorDivOptionsStart(builder): builder.StartObject(0) -def FloorDivOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FloorModOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FloorModOptions.py deleted file mode 100644 index 37c8e5a5..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/FloorModOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class FloorModOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsFloorModOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = FloorModOptions() - x.Init(buf, n + offset) - return x - - # FloorModOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def FloorModOptionsStart(builder): builder.StartObject(0) -def FloorModOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptions.py deleted file mode 100644 index fb7ebc28..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptions.py +++ /dev/null @@ -1,38 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class FullyConnectedOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsFullyConnectedOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = FullyConnectedOptions() - x.Init(buf, n + offset) - return x - - # FullyConnectedOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # FullyConnectedOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # FullyConnectedOptions - def WeightsFormat(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def FullyConnectedOptionsStart(builder): builder.StartObject(2) -def FullyConnectedOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def FullyConnectedOptionsAddWeightsFormat(builder, weightsFormat): builder.PrependInt8Slot(1, weightsFormat, 0) -def FullyConnectedOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptionsWeightsFormat.py b/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptionsWeightsFormat.py deleted file mode 100644 index 6d81eca1..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/FullyConnectedOptionsWeightsFormat.py +++ /dev/null @@ -1,8 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class FullyConnectedOptionsWeightsFormat(object): - DEFAULT = 0 - SHUFFLED4x16INT8 = 1 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/GatherNdOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/GatherNdOptions.py deleted file mode 100644 index f515eb5c..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/GatherNdOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class GatherNdOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsGatherNdOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = GatherNdOptions() - x.Init(buf, n + offset) - return x - - # GatherNdOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def GatherNdOptionsStart(builder): builder.StartObject(0) -def GatherNdOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/GatherOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/GatherOptions.py deleted file mode 100644 index 9fbc3e40..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/GatherOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class GatherOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsGatherOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = GatherOptions() - x.Init(buf, n + offset) - return x - - # GatherOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # GatherOptions - def Axis(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def GatherOptionsStart(builder): builder.StartObject(1) -def GatherOptionsAddAxis(builder, axis): builder.PrependInt32Slot(0, axis, 0) -def GatherOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/GreaterEqualOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/GreaterEqualOptions.py deleted file mode 100644 index a29e200a..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/GreaterEqualOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class GreaterEqualOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsGreaterEqualOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = GreaterEqualOptions() - x.Init(buf, n + offset) - return x - - # GreaterEqualOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def GreaterEqualOptionsStart(builder): builder.StartObject(0) -def GreaterEqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/GreaterOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/GreaterOptions.py deleted file mode 100644 index 59d63501..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/GreaterOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class GreaterOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsGreaterOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = GreaterOptions() - x.Init(buf, n + offset) - return x - - # GreaterOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def GreaterOptionsStart(builder): builder.StartObject(0) -def GreaterOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/L2NormOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/L2NormOptions.py deleted file mode 100644 index 38bdf573..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/L2NormOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class L2NormOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsL2NormOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = L2NormOptions() - x.Init(buf, n + offset) - return x - - # L2NormOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # L2NormOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def L2NormOptionsStart(builder): builder.StartObject(1) -def L2NormOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def L2NormOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionOptions.py deleted file mode 100644 index ad550be2..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LSHProjectionOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLSHProjectionOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LSHProjectionOptions() - x.Init(buf, n + offset) - return x - - # LSHProjectionOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # LSHProjectionOptions - def Type(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def LSHProjectionOptionsStart(builder): builder.StartObject(1) -def LSHProjectionOptionsAddType(builder, type): builder.PrependInt8Slot(0, type, 0) -def LSHProjectionOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionType.py b/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionType.py deleted file mode 100644 index d6a136e8..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LSHProjectionType.py +++ /dev/null @@ -1,9 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class LSHProjectionType(object): - UNKNOWN = 0 - SPARSE = 1 - DENSE = 2 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LSTMKernelType.py b/utensor_cgen/frontend/tflite_flatbuffer/LSTMKernelType.py deleted file mode 100644 index 1ca4df0a..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LSTMKernelType.py +++ /dev/null @@ -1,8 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class LSTMKernelType(object): - FULL = 0 - BASIC = 1 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LSTMOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LSTMOptions.py deleted file mode 100644 index 93a83093..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LSTMOptions.py +++ /dev/null @@ -1,54 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LSTMOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLSTMOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LSTMOptions() - x.Init(buf, n + offset) - return x - - # LSTMOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # LSTMOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # LSTMOptions - def CellClip(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # LSTMOptions - def ProjClip(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # LSTMOptions - def KernelType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def LSTMOptionsStart(builder): builder.StartObject(4) -def LSTMOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def LSTMOptionsAddCellClip(builder, cellClip): builder.PrependFloat32Slot(1, cellClip, 0.0) -def LSTMOptionsAddProjClip(builder, projClip): builder.PrependFloat32Slot(2, projClip, 0.0) -def LSTMOptionsAddKernelType(builder, kernelType): builder.PrependInt8Slot(3, kernelType, 0) -def LSTMOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LeakyReluOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LeakyReluOptions.py deleted file mode 100644 index b61b21d5..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LeakyReluOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LeakyReluOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLeakyReluOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LeakyReluOptions() - x.Init(buf, n + offset) - return x - - # LeakyReluOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # LeakyReluOptions - def Alpha(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - -def LeakyReluOptionsStart(builder): builder.StartObject(1) -def LeakyReluOptionsAddAlpha(builder, alpha): builder.PrependFloat32Slot(0, alpha, 0.0) -def LeakyReluOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LessEqualOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LessEqualOptions.py deleted file mode 100644 index d49b7289..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LessEqualOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LessEqualOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLessEqualOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LessEqualOptions() - x.Init(buf, n + offset) - return x - - # LessEqualOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def LessEqualOptionsStart(builder): builder.StartObject(0) -def LessEqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LessOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LessOptions.py deleted file mode 100644 index 469cb0b0..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LessOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LessOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLessOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LessOptions() - x.Init(buf, n + offset) - return x - - # LessOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def LessOptionsStart(builder): builder.StartObject(0) -def LessOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LocalResponseNormalizationOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LocalResponseNormalizationOptions.py deleted file mode 100644 index db875603..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LocalResponseNormalizationOptions.py +++ /dev/null @@ -1,54 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LocalResponseNormalizationOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLocalResponseNormalizationOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LocalResponseNormalizationOptions() - x.Init(buf, n + offset) - return x - - # LocalResponseNormalizationOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # LocalResponseNormalizationOptions - def Radius(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # LocalResponseNormalizationOptions - def Bias(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # LocalResponseNormalizationOptions - def Alpha(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # LocalResponseNormalizationOptions - def Beta(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - -def LocalResponseNormalizationOptionsStart(builder): builder.StartObject(4) -def LocalResponseNormalizationOptionsAddRadius(builder, radius): builder.PrependInt32Slot(0, radius, 0) -def LocalResponseNormalizationOptionsAddBias(builder, bias): builder.PrependFloat32Slot(1, bias, 0.0) -def LocalResponseNormalizationOptionsAddAlpha(builder, alpha): builder.PrependFloat32Slot(2, alpha, 0.0) -def LocalResponseNormalizationOptionsAddBeta(builder, beta): builder.PrependFloat32Slot(3, beta, 0.0) -def LocalResponseNormalizationOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LogSoftmaxOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LogSoftmaxOptions.py deleted file mode 100644 index 47893855..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LogSoftmaxOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LogSoftmaxOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLogSoftmaxOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LogSoftmaxOptions() - x.Init(buf, n + offset) - return x - - # LogSoftmaxOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def LogSoftmaxOptionsStart(builder): builder.StartObject(0) -def LogSoftmaxOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LogicalAndOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LogicalAndOptions.py deleted file mode 100644 index cee1cdb4..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LogicalAndOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LogicalAndOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLogicalAndOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LogicalAndOptions() - x.Init(buf, n + offset) - return x - - # LogicalAndOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def LogicalAndOptionsStart(builder): builder.StartObject(0) -def LogicalAndOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LogicalNotOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LogicalNotOptions.py deleted file mode 100644 index 9971450c..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LogicalNotOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LogicalNotOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLogicalNotOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LogicalNotOptions() - x.Init(buf, n + offset) - return x - - # LogicalNotOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def LogicalNotOptionsStart(builder): builder.StartObject(0) -def LogicalNotOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/LogicalOrOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/LogicalOrOptions.py deleted file mode 100644 index e94a5dec..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/LogicalOrOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class LogicalOrOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsLogicalOrOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = LogicalOrOptions() - x.Init(buf, n + offset) - return x - - # LogicalOrOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def LogicalOrOptionsStart(builder): builder.StartObject(0) -def LogicalOrOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MatrixDiagOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MatrixDiagOptions.py deleted file mode 100644 index 0f64e657..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/MatrixDiagOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class MatrixDiagOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsMatrixDiagOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = MatrixDiagOptions() - x.Init(buf, n + offset) - return x - - # MatrixDiagOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def MatrixDiagOptionsStart(builder): builder.StartObject(0) -def MatrixDiagOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MatrixSetDiagOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MatrixSetDiagOptions.py deleted file mode 100644 index 14178cf8..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/MatrixSetDiagOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class MatrixSetDiagOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsMatrixSetDiagOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = MatrixSetDiagOptions() - x.Init(buf, n + offset) - return x - - # MatrixSetDiagOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def MatrixSetDiagOptionsStart(builder): builder.StartObject(0) -def MatrixSetDiagOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MaximumMinimumOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MaximumMinimumOptions.py deleted file mode 100644 index f0806e2d..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/MaximumMinimumOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class MaximumMinimumOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsMaximumMinimumOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = MaximumMinimumOptions() - x.Init(buf, n + offset) - return x - - # MaximumMinimumOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def MaximumMinimumOptionsStart(builder): builder.StartObject(0) -def MaximumMinimumOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadMode.py b/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadMode.py deleted file mode 100644 index ce7579d2..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadMode.py +++ /dev/null @@ -1,8 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class MirrorPadMode(object): - REFLECT = 0 - SYMMETRIC = 1 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadOptions.py deleted file mode 100644 index 254ae217..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/MirrorPadOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class MirrorPadOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsMirrorPadOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = MirrorPadOptions() - x.Init(buf, n + offset) - return x - - # MirrorPadOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # MirrorPadOptions - def Mode(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def MirrorPadOptionsStart(builder): builder.StartObject(1) -def MirrorPadOptionsAddMode(builder, mode): builder.PrependInt8Slot(0, mode, 0) -def MirrorPadOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Model.py b/utensor_cgen/frontend/tflite_flatbuffer/Model.py deleted file mode 100644 index aab841ab..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/Model.py +++ /dev/null @@ -1,128 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class Model(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsModel(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Model() - x.Init(buf, n + offset) - return x - - # Model - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # Model - def Version(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - # Model - def OperatorCodes(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - from .OperatorCode import OperatorCode - obj = OperatorCode() - obj.Init(self._tab.Bytes, x) - return obj - return None - - # Model - def OperatorCodesLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # Model - def Subgraphs(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - from .SubGraph import SubGraph - obj = SubGraph() - obj.Init(self._tab.Bytes, x) - return obj - return None - - # Model - def SubgraphsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # Model - def Description(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - return None - - # Model - def Buffers(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - from .Buffer import Buffer - obj = Buffer() - obj.Init(self._tab.Bytes, x) - return obj - return None - - # Model - def BuffersLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # Model - def MetadataBuffer(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # Model - def MetadataBufferAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # Model - def MetadataBufferLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - -def ModelStart(builder): builder.StartObject(6) -def ModelAddVersion(builder, version): builder.PrependUint32Slot(0, version, 0) -def ModelAddOperatorCodes(builder, operatorCodes): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(operatorCodes), 0) -def ModelStartOperatorCodesVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def ModelAddSubgraphs(builder, subgraphs): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(subgraphs), 0) -def ModelStartSubgraphsVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def ModelAddDescription(builder, description): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(description), 0) -def ModelAddBuffers(builder, buffers): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(buffers), 0) -def ModelStartBuffersVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def ModelAddMetadataBuffer(builder, metadataBuffer): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(metadataBuffer), 0) -def ModelStartMetadataBufferVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def ModelEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/MulOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/MulOptions.py deleted file mode 100644 index 55b9506f..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/MulOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class MulOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsMulOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = MulOptions() - x.Init(buf, n + offset) - return x - - # MulOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # MulOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def MulOptionsStart(builder): builder.StartObject(1) -def MulOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def MulOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/NegOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/NegOptions.py deleted file mode 100644 index 05d55c26..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/NegOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class NegOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsNegOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = NegOptions() - x.Init(buf, n + offset) - return x - - # NegOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def NegOptionsStart(builder): builder.StartObject(0) -def NegOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/NotEqualOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/NotEqualOptions.py deleted file mode 100644 index 4c511e93..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/NotEqualOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class NotEqualOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsNotEqualOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = NotEqualOptions() - x.Init(buf, n + offset) - return x - - # NotEqualOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def NotEqualOptionsStart(builder): builder.StartObject(0) -def NotEqualOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/OneHotOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/OneHotOptions.py deleted file mode 100644 index 793a3e75..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/OneHotOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class OneHotOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsOneHotOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = OneHotOptions() - x.Init(buf, n + offset) - return x - - # OneHotOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # OneHotOptions - def Axis(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def OneHotOptionsStart(builder): builder.StartObject(1) -def OneHotOptionsAddAxis(builder, axis): builder.PrependInt32Slot(0, axis, 0) -def OneHotOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Operator.py b/utensor_cgen/frontend/tflite_flatbuffer/Operator.py deleted file mode 100644 index fd237845..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/Operator.py +++ /dev/null @@ -1,153 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class Operator(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsOperator(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Operator() - x.Init(buf, n + offset) - return x - - # Operator - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # Operator - def OpcodeIndex(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - # Operator - def Inputs(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # Operator - def InputsAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # Operator - def InputsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # Operator - def Outputs(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # Operator - def OutputsAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # Operator - def OutputsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # Operator - def BuiltinOptionsType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) - return 0 - - # Operator - def BuiltinOptions(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - from flatbuffers.table import Table - obj = Table(bytearray(), 0) - self._tab.Union(obj, o) - return obj - return None - - # Operator - def CustomOptions(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) - return 0 - - # Operator - def CustomOptionsAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o) - return 0 - - # Operator - def CustomOptionsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # Operator - def CustomOptionsFormat(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # Operator - def MutatingVariableInputs(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.BoolFlags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1)) - return 0 - - # Operator - def MutatingVariableInputsAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.BoolFlags, o) - return 0 - - # Operator - def MutatingVariableInputsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - -def OperatorStart(builder): builder.StartObject(8) -def OperatorAddOpcodeIndex(builder, opcodeIndex): builder.PrependUint32Slot(0, opcodeIndex, 0) -def OperatorAddInputs(builder, inputs): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(inputs), 0) -def OperatorStartInputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def OperatorAddOutputs(builder, outputs): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(outputs), 0) -def OperatorStartOutputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def OperatorAddBuiltinOptionsType(builder, builtinOptionsType): builder.PrependUint8Slot(3, builtinOptionsType, 0) -def OperatorAddBuiltinOptions(builder, builtinOptions): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(builtinOptions), 0) -def OperatorAddCustomOptions(builder, customOptions): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(customOptions), 0) -def OperatorStartCustomOptionsVector(builder, numElems): return builder.StartVector(1, numElems, 1) -def OperatorAddCustomOptionsFormat(builder, customOptionsFormat): builder.PrependInt8Slot(6, customOptionsFormat, 0) -def OperatorAddMutatingVariableInputs(builder, mutatingVariableInputs): builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(mutatingVariableInputs), 0) -def OperatorStartMutatingVariableInputsVector(builder, numElems): return builder.StartVector(1, numElems, 1) -def OperatorEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/OperatorCode.py b/utensor_cgen/frontend/tflite_flatbuffer/OperatorCode.py deleted file mode 100644 index dd525f53..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/OperatorCode.py +++ /dev/null @@ -1,46 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class OperatorCode(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsOperatorCode(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = OperatorCode() - x.Init(buf, n + offset) - return x - - # OperatorCode - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # OperatorCode - def BuiltinCode(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # OperatorCode - def CustomCode(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - return None - - # OperatorCode - def Version(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 1 - -def OperatorCodeStart(builder): builder.StartObject(3) -def OperatorCodeAddBuiltinCode(builder, builtinCode): builder.PrependInt8Slot(0, builtinCode, 0) -def OperatorCodeAddCustomCode(builder, customCode): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(customCode), 0) -def OperatorCodeAddVersion(builder, version): builder.PrependInt32Slot(2, version, 1) -def OperatorCodeEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/PackOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/PackOptions.py deleted file mode 100644 index 6a8ee2bb..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/PackOptions.py +++ /dev/null @@ -1,38 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class PackOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsPackOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = PackOptions() - x.Init(buf, n + offset) - return x - - # PackOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # PackOptions - def ValuesCount(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # PackOptions - def Axis(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def PackOptionsStart(builder): builder.StartObject(2) -def PackOptionsAddValuesCount(builder, valuesCount): builder.PrependInt32Slot(0, valuesCount, 0) -def PackOptionsAddAxis(builder, axis): builder.PrependInt32Slot(1, axis, 0) -def PackOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/PadOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/PadOptions.py deleted file mode 100644 index d0833c68..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/PadOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class PadOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsPadOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = PadOptions() - x.Init(buf, n + offset) - return x - - # PadOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def PadOptionsStart(builder): builder.StartObject(0) -def PadOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/PadV2Options.py b/utensor_cgen/frontend/tflite_flatbuffer/PadV2Options.py deleted file mode 100644 index 5ea0d70c..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/PadV2Options.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class PadV2Options(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsPadV2Options(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = PadV2Options() - x.Init(buf, n + offset) - return x - - # PadV2Options - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def PadV2OptionsStart(builder): builder.StartObject(0) -def PadV2OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Padding.py b/utensor_cgen/frontend/tflite_flatbuffer/Padding.py deleted file mode 100644 index 6027f4b5..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/Padding.py +++ /dev/null @@ -1,8 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class Padding(object): - SAME = 0 - VALID = 1 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Pool2DOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/Pool2DOptions.py deleted file mode 100644 index b8b9f178..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/Pool2DOptions.py +++ /dev/null @@ -1,70 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class Pool2DOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsPool2DOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Pool2DOptions() - x.Init(buf, n + offset) - return x - - # Pool2DOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # Pool2DOptions - def Padding(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # Pool2DOptions - def StrideW(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # Pool2DOptions - def StrideH(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # Pool2DOptions - def FilterWidth(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # Pool2DOptions - def FilterHeight(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # Pool2DOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def Pool2DOptionsStart(builder): builder.StartObject(6) -def Pool2DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) -def Pool2DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) -def Pool2DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) -def Pool2DOptionsAddFilterWidth(builder, filterWidth): builder.PrependInt32Slot(3, filterWidth, 0) -def Pool2DOptionsAddFilterHeight(builder, filterHeight): builder.PrependInt32Slot(4, filterHeight, 0) -def Pool2DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(5, fusedActivationFunction, 0) -def Pool2DOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/PowOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/PowOptions.py deleted file mode 100644 index 666ca488..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/PowOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class PowOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsPowOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = PowOptions() - x.Init(buf, n + offset) - return x - - # PowOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def PowOptionsStart(builder): builder.StartObject(0) -def PowOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/QuantizationDetails.py b/utensor_cgen/frontend/tflite_flatbuffer/QuantizationDetails.py deleted file mode 100644 index 7159efbd..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/QuantizationDetails.py +++ /dev/null @@ -1,8 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class QuantizationDetails(object): - NONE = 0 - CustomQuantization = 1 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/QuantizationParameters.py b/utensor_cgen/frontend/tflite_flatbuffer/QuantizationParameters.py deleted file mode 100644 index fcd686cf..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/QuantizationParameters.py +++ /dev/null @@ -1,145 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class QuantizationParameters(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsQuantizationParameters(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = QuantizationParameters() - x.Init(buf, n + offset) - return x - - # QuantizationParameters - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # QuantizationParameters - def Min(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # QuantizationParameters - def MinAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Float32Flags, o) - return 0 - - # QuantizationParameters - def MinLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # QuantizationParameters - def Max(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # QuantizationParameters - def MaxAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Float32Flags, o) - return 0 - - # QuantizationParameters - def MaxLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # QuantizationParameters - def Scale(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Float32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # QuantizationParameters - def ScaleAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Float32Flags, o) - return 0 - - # QuantizationParameters - def ScaleLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # QuantizationParameters - def ZeroPoint(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int64Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 8)) - return 0 - - # QuantizationParameters - def ZeroPointAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int64Flags, o) - return 0 - - # QuantizationParameters - def ZeroPointLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # QuantizationParameters - def DetailsType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos) - return 0 - - # QuantizationParameters - def Details(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - from flatbuffers.table import Table - obj = Table(bytearray(), 0) - self._tab.Union(obj, o) - return obj - return None - - # QuantizationParameters - def QuantizedDimension(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def QuantizationParametersStart(builder): builder.StartObject(7) -def QuantizationParametersAddMin(builder, min): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(min), 0) -def QuantizationParametersStartMinVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def QuantizationParametersAddMax(builder, max): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(max), 0) -def QuantizationParametersStartMaxVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def QuantizationParametersAddScale(builder, scale): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(scale), 0) -def QuantizationParametersStartScaleVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def QuantizationParametersAddZeroPoint(builder, zeroPoint): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(zeroPoint), 0) -def QuantizationParametersStartZeroPointVector(builder, numElems): return builder.StartVector(8, numElems, 8) -def QuantizationParametersAddDetailsType(builder, detailsType): builder.PrependUint8Slot(4, detailsType, 0) -def QuantizationParametersAddDetails(builder, details): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(details), 0) -def QuantizationParametersAddQuantizedDimension(builder, quantizedDimension): builder.PrependInt32Slot(6, quantizedDimension, 0) -def QuantizationParametersEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/QuantizeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/QuantizeOptions.py deleted file mode 100644 index 28af8cc9..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/QuantizeOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class QuantizeOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsQuantizeOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = QuantizeOptions() - x.Init(buf, n + offset) - return x - - # QuantizeOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def QuantizeOptionsStart(builder): builder.StartObject(0) -def QuantizeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/RNNOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/RNNOptions.py deleted file mode 100644 index 3cfdb6af..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/RNNOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class RNNOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsRNNOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = RNNOptions() - x.Init(buf, n + offset) - return x - - # RNNOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # RNNOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def RNNOptionsStart(builder): builder.StartObject(1) -def RNNOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def RNNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/RangeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/RangeOptions.py deleted file mode 100644 index cb705b57..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/RangeOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class RangeOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsRangeOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = RangeOptions() - x.Init(buf, n + offset) - return x - - # RangeOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def RangeOptionsStart(builder): builder.StartObject(0) -def RangeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/RankOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/RankOptions.py deleted file mode 100644 index 4e4a5ecd..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/RankOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class RankOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsRankOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = RankOptions() - x.Init(buf, n + offset) - return x - - # RankOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def RankOptionsStart(builder): builder.StartObject(0) -def RankOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ReducerOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ReducerOptions.py deleted file mode 100644 index 93bbde17..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ReducerOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ReducerOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsReducerOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ReducerOptions() - x.Init(buf, n + offset) - return x - - # ReducerOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ReducerOptions - def KeepDims(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - -def ReducerOptionsStart(builder): builder.StartObject(1) -def ReducerOptionsAddKeepDims(builder, keepDims): builder.PrependBoolSlot(0, keepDims, 0) -def ReducerOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ReshapeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ReshapeOptions.py deleted file mode 100644 index 157d45d9..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ReshapeOptions.py +++ /dev/null @@ -1,46 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ReshapeOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsReshapeOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ReshapeOptions() - x.Init(buf, n + offset) - return x - - # ReshapeOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ReshapeOptions - def NewShape(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # ReshapeOptions - def NewShapeAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # ReshapeOptions - def NewShapeLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - -def ReshapeOptionsStart(builder): builder.StartObject(1) -def ReshapeOptionsAddNewShape(builder, newShape): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(newShape), 0) -def ReshapeOptionsStartNewShapeVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def ReshapeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ResizeBilinearOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ResizeBilinearOptions.py deleted file mode 100644 index 0d1f9624..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ResizeBilinearOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ResizeBilinearOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsResizeBilinearOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ResizeBilinearOptions() - x.Init(buf, n + offset) - return x - - # ResizeBilinearOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ResizeBilinearOptions - def AlignCorners(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - -def ResizeBilinearOptionsStart(builder): builder.StartObject(3) -def ResizeBilinearOptionsAddAlignCorners(builder, alignCorners): builder.PrependBoolSlot(2, alignCorners, 0) -def ResizeBilinearOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ResizeNearestNeighborOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ResizeNearestNeighborOptions.py deleted file mode 100644 index 4b166e95..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ResizeNearestNeighborOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ResizeNearestNeighborOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsResizeNearestNeighborOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ResizeNearestNeighborOptions() - x.Init(buf, n + offset) - return x - - # ResizeNearestNeighborOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ResizeNearestNeighborOptions - def AlignCorners(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - -def ResizeNearestNeighborOptionsStart(builder): builder.StartObject(1) -def ResizeNearestNeighborOptionsAddAlignCorners(builder, alignCorners): builder.PrependBoolSlot(0, alignCorners, 0) -def ResizeNearestNeighborOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ReverseSequenceOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ReverseSequenceOptions.py deleted file mode 100644 index cbaf96db..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ReverseSequenceOptions.py +++ /dev/null @@ -1,38 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ReverseSequenceOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsReverseSequenceOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ReverseSequenceOptions() - x.Init(buf, n + offset) - return x - - # ReverseSequenceOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ReverseSequenceOptions - def SeqDim(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # ReverseSequenceOptions - def BatchDim(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def ReverseSequenceOptionsStart(builder): builder.StartObject(2) -def ReverseSequenceOptionsAddSeqDim(builder, seqDim): builder.PrependInt32Slot(0, seqDim, 0) -def ReverseSequenceOptionsAddBatchDim(builder, batchDim): builder.PrependInt32Slot(1, batchDim, 0) -def ReverseSequenceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ReverseV2Options.py b/utensor_cgen/frontend/tflite_flatbuffer/ReverseV2Options.py deleted file mode 100644 index dbac9362..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ReverseV2Options.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ReverseV2Options(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsReverseV2Options(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ReverseV2Options() - x.Init(buf, n + offset) - return x - - # ReverseV2Options - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def ReverseV2OptionsStart(builder): builder.StartObject(0) -def ReverseV2OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SVDFOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SVDFOptions.py deleted file mode 100644 index 6f391db1..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SVDFOptions.py +++ /dev/null @@ -1,38 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SVDFOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSVDFOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SVDFOptions() - x.Init(buf, n + offset) - return x - - # SVDFOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SVDFOptions - def Rank(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # SVDFOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def SVDFOptionsStart(builder): builder.StartObject(2) -def SVDFOptionsAddRank(builder, rank): builder.PrependInt32Slot(0, rank, 0) -def SVDFOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) -def SVDFOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SelectOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SelectOptions.py deleted file mode 100644 index d67daf36..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SelectOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SelectOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSelectOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SelectOptions() - x.Init(buf, n + offset) - return x - - # SelectOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def SelectOptionsStart(builder): builder.StartObject(0) -def SelectOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SequenceRNNOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SequenceRNNOptions.py deleted file mode 100644 index 74a4954a..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SequenceRNNOptions.py +++ /dev/null @@ -1,38 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SequenceRNNOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSequenceRNNOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SequenceRNNOptions() - x.Init(buf, n + offset) - return x - - # SequenceRNNOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SequenceRNNOptions - def TimeMajor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - - # SequenceRNNOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def SequenceRNNOptionsStart(builder): builder.StartObject(2) -def SequenceRNNOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(0, timeMajor, 0) -def SequenceRNNOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(1, fusedActivationFunction, 0) -def SequenceRNNOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ShapeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ShapeOptions.py deleted file mode 100644 index 2d24c05f..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ShapeOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ShapeOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsShapeOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ShapeOptions() - x.Init(buf, n + offset) - return x - - # ShapeOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # ShapeOptions - def OutType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def ShapeOptionsStart(builder): builder.StartObject(1) -def ShapeOptionsAddOutType(builder, outType): builder.PrependInt8Slot(0, outType, 0) -def ShapeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SkipGramOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SkipGramOptions.py deleted file mode 100644 index 0e8bdc1d..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SkipGramOptions.py +++ /dev/null @@ -1,46 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SkipGramOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSkipGramOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SkipGramOptions() - x.Init(buf, n + offset) - return x - - # SkipGramOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SkipGramOptions - def NgramSize(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # SkipGramOptions - def MaxSkipSize(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # SkipGramOptions - def IncludeAllNgrams(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - -def SkipGramOptionsStart(builder): builder.StartObject(3) -def SkipGramOptionsAddNgramSize(builder, ngramSize): builder.PrependInt32Slot(0, ngramSize, 0) -def SkipGramOptionsAddMaxSkipSize(builder, maxSkipSize): builder.PrependInt32Slot(1, maxSkipSize, 0) -def SkipGramOptionsAddIncludeAllNgrams(builder, includeAllNgrams): builder.PrependBoolSlot(2, includeAllNgrams, 0) -def SkipGramOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SliceOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SliceOptions.py deleted file mode 100644 index 4b41568d..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SliceOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SliceOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSliceOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SliceOptions() - x.Init(buf, n + offset) - return x - - # SliceOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def SliceOptionsStart(builder): builder.StartObject(0) -def SliceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SoftmaxOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SoftmaxOptions.py deleted file mode 100644 index a7168534..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SoftmaxOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SoftmaxOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSoftmaxOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SoftmaxOptions() - x.Init(buf, n + offset) - return x - - # SoftmaxOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SoftmaxOptions - def Beta(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - -def SoftmaxOptionsStart(builder): builder.StartObject(1) -def SoftmaxOptionsAddBeta(builder, beta): builder.PrependFloat32Slot(0, beta, 0.0) -def SoftmaxOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SpaceToBatchNDOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SpaceToBatchNDOptions.py deleted file mode 100644 index b61ef96f..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SpaceToBatchNDOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SpaceToBatchNDOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSpaceToBatchNDOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SpaceToBatchNDOptions() - x.Init(buf, n + offset) - return x - - # SpaceToBatchNDOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def SpaceToBatchNDOptionsStart(builder): builder.StartObject(0) -def SpaceToBatchNDOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SpaceToDepthOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SpaceToDepthOptions.py deleted file mode 100644 index d571174a..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SpaceToDepthOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SpaceToDepthOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSpaceToDepthOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SpaceToDepthOptions() - x.Init(buf, n + offset) - return x - - # SpaceToDepthOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SpaceToDepthOptions - def BlockSize(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def SpaceToDepthOptionsStart(builder): builder.StartObject(1) -def SpaceToDepthOptionsAddBlockSize(builder, blockSize): builder.PrependInt32Slot(0, blockSize, 0) -def SpaceToDepthOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SparseToDenseOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SparseToDenseOptions.py deleted file mode 100644 index 826eee08..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SparseToDenseOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SparseToDenseOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSparseToDenseOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SparseToDenseOptions() - x.Init(buf, n + offset) - return x - - # SparseToDenseOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SparseToDenseOptions - def ValidateIndices(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - -def SparseToDenseOptionsStart(builder): builder.StartObject(1) -def SparseToDenseOptionsAddValidateIndices(builder, validateIndices): builder.PrependBoolSlot(0, validateIndices, 0) -def SparseToDenseOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SplitOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SplitOptions.py deleted file mode 100644 index 3207525b..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SplitOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SplitOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSplitOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SplitOptions() - x.Init(buf, n + offset) - return x - - # SplitOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SplitOptions - def NumSplits(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def SplitOptionsStart(builder): builder.StartObject(1) -def SplitOptionsAddNumSplits(builder, numSplits): builder.PrependInt32Slot(0, numSplits, 0) -def SplitOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SplitVOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SplitVOptions.py deleted file mode 100644 index 418959de..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SplitVOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SplitVOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSplitVOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SplitVOptions() - x.Init(buf, n + offset) - return x - - # SplitVOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SplitVOptions - def NumSplits(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def SplitVOptionsStart(builder): builder.StartObject(1) -def SplitVOptionsAddNumSplits(builder, numSplits): builder.PrependInt32Slot(0, numSplits, 0) -def SplitVOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SquareOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SquareOptions.py deleted file mode 100644 index 56633f6a..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SquareOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SquareOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSquareOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SquareOptions() - x.Init(buf, n + offset) - return x - - # SquareOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def SquareOptionsStart(builder): builder.StartObject(0) -def SquareOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SquaredDifferenceOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SquaredDifferenceOptions.py deleted file mode 100644 index 906855d1..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SquaredDifferenceOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SquaredDifferenceOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSquaredDifferenceOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SquaredDifferenceOptions() - x.Init(buf, n + offset) - return x - - # SquaredDifferenceOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def SquaredDifferenceOptionsStart(builder): builder.StartObject(0) -def SquaredDifferenceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SqueezeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SqueezeOptions.py deleted file mode 100644 index 25b294dc..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SqueezeOptions.py +++ /dev/null @@ -1,46 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SqueezeOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSqueezeOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SqueezeOptions() - x.Init(buf, n + offset) - return x - - # SqueezeOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SqueezeOptions - def SqueezeDims(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # SqueezeOptions - def SqueezeDimsAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # SqueezeOptions - def SqueezeDimsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - -def SqueezeOptionsStart(builder): builder.StartObject(1) -def SqueezeOptionsAddSqueezeDims(builder, squeezeDims): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(squeezeDims), 0) -def SqueezeOptionsStartSqueezeDimsVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def SqueezeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/StridedSliceOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/StridedSliceOptions.py deleted file mode 100644 index 3bbb36b8..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/StridedSliceOptions.py +++ /dev/null @@ -1,62 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class StridedSliceOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsStridedSliceOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = StridedSliceOptions() - x.Init(buf, n + offset) - return x - - # StridedSliceOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # StridedSliceOptions - def BeginMask(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # StridedSliceOptions - def EndMask(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # StridedSliceOptions - def EllipsisMask(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # StridedSliceOptions - def NewAxisMask(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # StridedSliceOptions - def ShrinkAxisMask(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def StridedSliceOptionsStart(builder): builder.StartObject(5) -def StridedSliceOptionsAddBeginMask(builder, beginMask): builder.PrependInt32Slot(0, beginMask, 0) -def StridedSliceOptionsAddEndMask(builder, endMask): builder.PrependInt32Slot(1, endMask, 0) -def StridedSliceOptionsAddEllipsisMask(builder, ellipsisMask): builder.PrependInt32Slot(2, ellipsisMask, 0) -def StridedSliceOptionsAddNewAxisMask(builder, newAxisMask): builder.PrependInt32Slot(3, newAxisMask, 0) -def StridedSliceOptionsAddShrinkAxisMask(builder, shrinkAxisMask): builder.PrependInt32Slot(4, shrinkAxisMask, 0) -def StridedSliceOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SubGraph.py b/utensor_cgen/frontend/tflite_flatbuffer/SubGraph.py deleted file mode 100644 index eaa42fac..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SubGraph.py +++ /dev/null @@ -1,122 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SubGraph(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSubGraph(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SubGraph() - x.Init(buf, n + offset) - return x - - # SubGraph - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SubGraph - def Tensors(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - from .Tensor import Tensor - obj = Tensor() - obj.Init(self._tab.Bytes, x) - return obj - return None - - # SubGraph - def TensorsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # SubGraph - def Inputs(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # SubGraph - def InputsAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # SubGraph - def InputsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # SubGraph - def Outputs(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # SubGraph - def OutputsAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # SubGraph - def OutputsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # SubGraph - def Operators(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - x = self._tab.Vector(o) - x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 - x = self._tab.Indirect(x) - from .Operator import Operator - obj = Operator() - obj.Init(self._tab.Bytes, x) - return obj - return None - - # SubGraph - def OperatorsLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # SubGraph - def Name(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - return None - -def SubGraphStart(builder): builder.StartObject(5) -def SubGraphAddTensors(builder, tensors): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(tensors), 0) -def SubGraphStartTensorsVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def SubGraphAddInputs(builder, inputs): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(inputs), 0) -def SubGraphStartInputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def SubGraphAddOutputs(builder, outputs): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(outputs), 0) -def SubGraphStartOutputsVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def SubGraphAddOperators(builder, operators): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(operators), 0) -def SubGraphStartOperatorsVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def SubGraphAddName(builder, name): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) -def SubGraphEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/SubOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/SubOptions.py deleted file mode 100644 index eccd7aba..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/SubOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class SubOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsSubOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = SubOptions() - x.Init(buf, n + offset) - return x - - # SubOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # SubOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - -def SubOptionsStart(builder): builder.StartObject(1) -def SubOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def SubOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/Tensor.py b/utensor_cgen/frontend/tflite_flatbuffer/Tensor.py deleted file mode 100644 index 9b5b8f87..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/Tensor.py +++ /dev/null @@ -1,90 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class Tensor(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsTensor(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = Tensor() - x.Init(buf, n + offset) - return x - - # Tensor - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # Tensor - def Shape(self, j): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - a = self._tab.Vector(o) - return self._tab.Get(flatbuffers.number_types.Int32Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4)) - return 0 - - # Tensor - def ShapeAsNumpy(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Int32Flags, o) - return 0 - - # Tensor - def ShapeLength(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.VectorLen(o) - return 0 - - # Tensor - def Type(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # Tensor - def Buffer(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos) - return 0 - - # Tensor - def Name(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return self._tab.String(o + self._tab.Pos) - return None - - # Tensor - def Quantization(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12)) - if o != 0: - x = self._tab.Indirect(o + self._tab.Pos) - from .QuantizationParameters import QuantizationParameters - obj = QuantizationParameters() - obj.Init(self._tab.Bytes, x) - return obj - return None - - # Tensor - def IsVariable(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - -def TensorStart(builder): builder.StartObject(6) -def TensorAddShape(builder, shape): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(shape), 0) -def TensorStartShapeVector(builder, numElems): return builder.StartVector(4, numElems, 4) -def TensorAddType(builder, type): builder.PrependInt8Slot(1, type, 0) -def TensorAddBuffer(builder, buffer): builder.PrependUint32Slot(2, buffer, 0) -def TensorAddName(builder, name): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0) -def TensorAddQuantization(builder, quantization): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(quantization), 0) -def TensorAddIsVariable(builder, isVariable): builder.PrependBoolSlot(5, isVariable, 0) -def TensorEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TensorType.py b/utensor_cgen/frontend/tflite_flatbuffer/TensorType.py deleted file mode 100644 index 2455835a..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/TensorType.py +++ /dev/null @@ -1,16 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -class TensorType(object): - FLOAT32 = 0 - FLOAT16 = 1 - INT32 = 2 - UINT8 = 3 - INT64 = 4 - STRING = 5 - BOOL = 6 - INT16 = 7 - COMPLEX64 = 8 - INT8 = 9 - diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TileOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/TileOptions.py deleted file mode 100644 index ec8396dc..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/TileOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class TileOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsTileOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = TileOptions() - x.Init(buf, n + offset) - return x - - # TileOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def TileOptionsStart(builder): builder.StartObject(0) -def TileOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TopKV2Options.py b/utensor_cgen/frontend/tflite_flatbuffer/TopKV2Options.py deleted file mode 100644 index ccd51033..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/TopKV2Options.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class TopKV2Options(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsTopKV2Options(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = TopKV2Options() - x.Init(buf, n + offset) - return x - - # TopKV2Options - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def TopKV2OptionsStart(builder): builder.StartObject(0) -def TopKV2OptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TransposeConvOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/TransposeConvOptions.py deleted file mode 100644 index 423571c8..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/TransposeConvOptions.py +++ /dev/null @@ -1,46 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class TransposeConvOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsTransposeConvOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = TransposeConvOptions() - x.Init(buf, n + offset) - return x - - # TransposeConvOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # TransposeConvOptions - def Padding(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # TransposeConvOptions - def StrideW(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # TransposeConvOptions - def StrideH(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def TransposeConvOptionsStart(builder): builder.StartObject(3) -def TransposeConvOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0) -def TransposeConvOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(1, strideW, 0) -def TransposeConvOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(2, strideH, 0) -def TransposeConvOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/TransposeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/TransposeOptions.py deleted file mode 100644 index 42c596d9..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/TransposeOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class TransposeOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsTransposeOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = TransposeOptions() - x.Init(buf, n + offset) - return x - - # TransposeOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def TransposeOptionsStart(builder): builder.StartObject(0) -def TransposeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/UnidirectionalSequenceLSTMOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/UnidirectionalSequenceLSTMOptions.py deleted file mode 100644 index 1b0c112c..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/UnidirectionalSequenceLSTMOptions.py +++ /dev/null @@ -1,54 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class UnidirectionalSequenceLSTMOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsUnidirectionalSequenceLSTMOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = UnidirectionalSequenceLSTMOptions() - x.Init(buf, n + offset) - return x - - # UnidirectionalSequenceLSTMOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # UnidirectionalSequenceLSTMOptions - def FusedActivationFunction(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 0 - - # UnidirectionalSequenceLSTMOptions - def CellClip(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # UnidirectionalSequenceLSTMOptions - def ProjClip(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos) - return 0.0 - - # UnidirectionalSequenceLSTMOptions - def TimeMajor(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10)) - if o != 0: - return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos)) - return False - -def UnidirectionalSequenceLSTMOptionsStart(builder): builder.StartObject(4) -def UnidirectionalSequenceLSTMOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(0, fusedActivationFunction, 0) -def UnidirectionalSequenceLSTMOptionsAddCellClip(builder, cellClip): builder.PrependFloat32Slot(1, cellClip, 0.0) -def UnidirectionalSequenceLSTMOptionsAddProjClip(builder, projClip): builder.PrependFloat32Slot(2, projClip, 0.0) -def UnidirectionalSequenceLSTMOptionsAddTimeMajor(builder, timeMajor): builder.PrependBoolSlot(3, timeMajor, 0) -def UnidirectionalSequenceLSTMOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/UniqueOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/UniqueOptions.py deleted file mode 100644 index 841c6977..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/UniqueOptions.py +++ /dev/null @@ -1,30 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class UniqueOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsUniqueOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = UniqueOptions() - x.Init(buf, n + offset) - return x - - # UniqueOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # UniqueOptions - def IdxOutType(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int8Flags, o + self._tab.Pos) - return 2 - -def UniqueOptionsStart(builder): builder.StartObject(1) -def UniqueOptionsAddIdxOutType(builder, idxOutType): builder.PrependInt8Slot(0, idxOutType, 2) -def UniqueOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/UnpackOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/UnpackOptions.py deleted file mode 100644 index eed40193..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/UnpackOptions.py +++ /dev/null @@ -1,38 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class UnpackOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsUnpackOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = UnpackOptions() - x.Init(buf, n + offset) - return x - - # UnpackOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - - # UnpackOptions - def Num(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - - # UnpackOptions - def Axis(self): - o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6)) - if o != 0: - return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos) - return 0 - -def UnpackOptionsStart(builder): builder.StartObject(2) -def UnpackOptionsAddNum(builder, num): builder.PrependInt32Slot(0, num, 0) -def UnpackOptionsAddAxis(builder, axis): builder.PrependInt32Slot(1, axis, 0) -def UnpackOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/WhereOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/WhereOptions.py deleted file mode 100644 index ab69f6aa..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/WhereOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class WhereOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsWhereOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = WhereOptions() - x.Init(buf, n + offset) - return x - - # WhereOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def WhereOptionsStart(builder): builder.StartObject(0) -def WhereOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/ZerosLikeOptions.py b/utensor_cgen/frontend/tflite_flatbuffer/ZerosLikeOptions.py deleted file mode 100644 index e6aa9639..00000000 --- a/utensor_cgen/frontend/tflite_flatbuffer/ZerosLikeOptions.py +++ /dev/null @@ -1,22 +0,0 @@ -# automatically generated by the FlatBuffers compiler, do not modify - -# namespace: tflite - -import flatbuffers - -class ZerosLikeOptions(object): - __slots__ = ['_tab'] - - @classmethod - def GetRootAsZerosLikeOptions(cls, buf, offset): - n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) - x = ZerosLikeOptions() - x.Init(buf, n + offset) - return x - - # ZerosLikeOptions - def Init(self, buf, pos): - self._tab = flatbuffers.table.Table(buf, pos) - -def ZerosLikeOptionsStart(builder): builder.StartObject(0) -def ZerosLikeOptionsEnd(builder): return builder.EndObject() diff --git a/utensor_cgen/frontend/tflite_flatbuffer/__init__.py b/utensor_cgen/third_party/__init__.py similarity index 100% rename from utensor_cgen/frontend/tflite_flatbuffer/__init__.py rename to utensor_cgen/third_party/__init__.py From 31b9f50b6d7eda4e8fd8f71a5c795e0d0c82de79 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 6 May 2020 16:43:01 +0800 Subject: [PATCH 117/117] update tests --- .../test_tflm/test_export}/__init__.py | 0 .../test_tflm/test_export}/conftest.py | 17 +++++++---------- .../test_tflm/test_export}/test_write.py | 0 3 files changed, 7 insertions(+), 10 deletions(-) rename tests/{tflm/tflite_export => test_transformer/test_tflm/test_export}/__init__.py (100%) rename tests/{tflm/tflite_export => test_transformer/test_tflm/test_export}/conftest.py (87%) rename tests/{tflm/tflite_export => test_transformer/test_tflm/test_export}/test_write.py (100%) diff --git a/tests/tflm/tflite_export/__init__.py b/tests/test_transformer/test_tflm/test_export/__init__.py similarity index 100% rename from tests/tflm/tflite_export/__init__.py rename to tests/test_transformer/test_tflm/test_export/__init__.py diff --git a/tests/tflm/tflite_export/conftest.py b/tests/test_transformer/test_tflm/test_export/conftest.py similarity index 87% rename from tests/tflm/tflite_export/conftest.py rename to tests/test_transformer/test_tflm/test_export/conftest.py index dd5bc005..54b11e71 100644 --- a/tests/tflm/tflite_export/conftest.py +++ b/tests/test_transformer/test_tflm/test_export/conftest.py @@ -1,17 +1,14 @@ import numpy as np from pytest import fixture -import tensorflow as tf -from utensor_cgen.ir import TensorInfo, OperationInfo, uTensorGraph -from utensor_cgen.ir.converter import (AttrValueConverter, DataTypeConverter, - GenericTensorConverterMixin) -from utensor_cgen.utils import prune_graph, topologic_order_graph -from utensor_cgen.backend.operators import OperatorFactory, _Operator -from utensor_cgen.matcher import OpEqualityDelegate, _morphism +from utensor_cgen.backend.utensor.code_generator.legacy._operators import ( + OperatorFactory, _Operator, uTensorOpEqualityDelegate) +from utensor_cgen.ir import OperationInfo, TensorInfo, uTensorGraph +from utensor_cgen.ir.converter import AttrValueConverter, DataTypeConverter @OperatorFactory.register -@OpEqualityDelegate.is_associative( +@uTensorOpEqualityDelegate.is_associative( permutations=((0, 1), (1, 0)) ) class _TFLM_AddOperator(_Operator): @@ -51,7 +48,7 @@ def build_op_info(cls, ugraph, name, tensor_x, tensor_y, **kwargs): ) }, ugraph=ugraph, - backend=kwargs.get('backend', 'TFLM') + lib_name=kwargs.get('lib_name', 'tflite') ) @@ -93,7 +90,7 @@ def build_op_info(cls, ugraph, name, tensor_x, tensor_w, tensor_b, **kwargs): ) }, ugraph=ugraph, - backend=kwargs.get('backend', 'TFLM') + lib_name=kwargs.get('lib_name', 'tflite') ) @fixture(name='hybrid_quant_output') diff --git a/tests/tflm/tflite_export/test_write.py b/tests/test_transformer/test_tflm/test_export/test_write.py similarity index 100% rename from tests/tflm/tflite_export/test_write.py rename to tests/test_transformer/test_tflm/test_export/test_write.py

    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 z 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�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Ⓢ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

    QAkd-v|R^i070XshPJ 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 b_>>J(Y?Gv46~kh}U@-T|?Ty?0^V$CeN$zf7 literal 0 HcmV?d00001 diff --git a/doc/source/_images/mlp_alloc_graph.png b/doc/source/_images/mlp_alloc_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f6b0df8c8dbdd8c2551be1ca730f737c1090102c GIT binary patch literal 178181 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 literal 0 HcmV?d00001 diff --git a/doc/source/images.rst b/doc/source/images.rst index 68fb8d90..4c9edcdf 100644 --- a/doc/source/images.rst +++ b/doc/source/images.rst @@ -8,3 +8,9 @@ :height: 300 .. |convert-example| image:: /_images/convert_example.png :alt: convert-example +.. |mlp-alloc| image:: /_images/mlp_alloc.png + :alt: mlp-alloc +.. |mlp-alloc-graph| image:: /_images/mlp_alloc_graph.png + :alt: mlp-alloc-graph + :width: 300 + :height: 450 diff --git a/tests/deep_cnn/.gitignore b/tests/deep_cnn/.gitignore index 1269488f..9b64c748 100644 --- a/tests/deep_cnn/.gitignore +++ b/tests/deep_cnn/.gitignore @@ -1 +1,2 @@ data +*.toml \ No newline at end of file From 9fb54f74d7254c0b70a4789ee7c2ff56c73fbdef Mon Sep 17 00:00:00 2001 From: kazami Date: Wed, 19 Feb 2020 16:54:01 +0800 Subject: [PATCH 043/117] use backendpart to refactor the offline memory planner --- tests/test_backend/test_utensor.py | 11 + utensor_cgen/backend/utensor/__init__.py | 1 + utensor_cgen/backend/utensor/_graph_lower.py | 212 ++++++++++++++++++- 3 files changed, 222 insertions(+), 2 deletions(-) diff --git a/tests/test_backend/test_utensor.py b/tests/test_backend/test_utensor.py index aa41b5d8..7510a8bc 100644 --- a/tests/test_backend/test_utensor.py +++ b/tests/test_backend/test_utensor.py @@ -17,3 +17,14 @@ def test_legacy_utensor(mlp_ugraph): }, } }).apply(mlp_ugraph) + + +def test_offlinememory(mlp_ugraph): + from utensor_cgen.backend.utensor import uTensorOfflineMemoryPlanner + + uTensorOfflineMemoryPlanner(config={ + 'size_float': 4, + 'size_int': 4, + 'size_uint8_t': 1 + } + ).apply(mlp_ugraph) \ No newline at end of file diff --git a/utensor_cgen/backend/utensor/__init__.py b/utensor_cgen/backend/utensor/__init__.py index ed85033c..12a91fb5 100644 --- a/utensor_cgen/backend/utensor/__init__.py +++ b/utensor_cgen/backend/utensor/__init__.py @@ -1 +1,2 @@ from ._backend_impl import uTensorBackend +from ._graph_lower import uTensorOfflineMemoryPlanner diff --git a/utensor_cgen/backend/utensor/_graph_lower.py b/utensor_cgen/backend/utensor/_graph_lower.py index 95f51b4e..57a90b92 100644 --- a/utensor_cgen/backend/utensor/_graph_lower.py +++ b/utensor_cgen/backend/utensor/_graph_lower.py @@ -1,10 +1,10 @@ -import logging from copy import deepcopy from utensor_cgen.backend.base import BackendPart +from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP +from utensor_cgen.logger import logger from utensor_cgen.utils import class_property -logger = logging.getLogger(__name__) class uTensorGraphLowerBase(BackendPart): TARGET = 'utensor' @@ -55,3 +55,211 @@ def handle_tensorflow(self, ugraph): @class_property def default_config(cls): return {} + + +class uTensorOfflineMemoryPlanner(BackendPart): + + TARGET = 'utensor' + PART = 'offlinememory' + + + def __init__( + self, + buff_size=100000, #1k bytes + unit_size=4, + config + ): + self.buff_size = buff_size + self.unit_size = unit_size + final_config = Configuration(self.default_config, config) + self._type = {} + self._type[np.dtype(tf.float32.as_numpy_dtype)] = final_config['size_float'] + self._type[np.dtype(tf.int32.as_numpy_dtype)] = final_config['size_int'] + self._type[np.dtype(tf.quint8.as_numpy_dtype)] = final_config['size_uint8_t'] + self._type[np.dtype(tf.qint8.as_numpy_dtype)] = final_config['size_uint8_t'] + self._type[np.dtype(tf.qint32.as_numpy_dtype)] = final_config['size_int'] + + def apply(self, ugraph): + new_ugraph = deepcopy(ugraph) + new_ugraph.setup_data_manager({self.DATA_NAME: " "}) + # use_def_table: dict, tensor_name -> {'start': op_idx, 'end': op_idx} + use_def_table = self._create_resource_table(new_ugraph) + allocate_table = dict() + allocate_success = self.allocate_graph(new_ugraph, allocate_table, use_def_table, self.buff_size, self.unit_size) + + if allocate_success: + for node_name in new_ugraph.topo_order: + in_t_infos = new_ugraph.ops_info[node_name].input_tensors + for in_o in in_t_infos: + if in_o.name in allocate_table: + new_ugraph.data_manager.address = (in_o.name, allocate_table[in_o.name]['offsetstart']) + out_t_infos = new_ugraph.ops_info[node_name].output_tensors + for out_o in out_t_infos: + if out_o.name in allocate_table: + new_ugraph.data_manager.address = (out_o.name, allocate_table[out_o.name]['offsetstart']) + return new_ugraph + return ugraph + + def _query_offset_fromallocate_table(self, allocate_table, start, end): + new_start = start + new_end = end + for key in allocate_table: + if allocate_table[key]['offsetstart'] >= start and allocate_table[key]['offsetend'] <= end: + continue + elif allocate_table[key]['offsetstart'] <= start and allocate_table[key]['offsetend'] >= start: + new_start = allocate_table[key]['offsetstart'] + if allocate_table[key]['offsetend'] >= end: + new_end = max(new_end, allocate_table[key]['offsetend']) + else: + new_end = max(end, new_end) + elif allocate_table[key]['offsetstart'] >= start and allocate_table[key]['offsetend'] >= start: + if allocate_table[key]['offsetend'] >= end: + new_end = max(new_end, allocate_table[key]['offsetend']) + else: + new_end = max(end, new_end) + return new_start, new_end + + def _query_time_fromallocate_table(self, allocate_table, start, end): + time_start = start + time_end = end + for key in allocate_table: + if allocate_table[key]['start'] >= start and allocate_table[key]['end'] <= end: + continue + elif allocate_table[key]['start'] <= start and allocate_table[key]['end'] >= start: + if allocate_table[key]['end'] >= end: + time_end = max(time_end, allocate_table[key]['end']) + else: + time_end = max(end, time_end) + elif allocate_table[key]['start'] >= start and allocate_table[key]['end'] >= start: + if allocate_table[key]['end'] >= end: + time_end = max(time_end, allocate_table[key]['end']) + else: + time_end = max(end, time_end) + return time_start, time_end + + def _query_result(self, allocate_table, offset, length, timestart, timeend): + for key in allocate_table: + mem_occupied = ( + (allocate_table[key]['offsetstart'] >= offset and allocate_table[key]['offsetstart'] <= offset + length) or + (allocate_table[key]['offsetstart'] <= offset and allocate_table[key]['offsetend'] >= offset) + ) + life_span_occupied = ( + (allocate_table[key]['start'] >= timestart and allocate_table[key]['start'] <= timeend) or + (allocate_table[key]['start'] <= timestart and allocate_table[key]['end'] >= timestart) + ) + if mem_occupied and life_span_occupied: + return True + return False + + def allocate_tensor(self, tensors, tensor_index, allocate_table, use_def_table, buffer_size, unit_size): + if tensor_index == len(tensors): + return True + if tensors[tensor_index].name in allocate_table: + return self.allocate_tensor(tensors, tensor_index + 1, allocate_table, use_def_table, buffer_size, unit_size) + + tensor = tensors[tensor_index] + candidates = self._get_candidates(allocate_table, use_def_table, buffer_size, unit_size, tensor) + if not candidates: + return False + success = False + for candidate in candidates: + self._update_allocation_table(allocate_table, use_def_table, tensor, candidate, candidate + tensor.size) + success = self.allocate_tensor(tensors, tensor_index + 1, allocate_table, use_def_table, buffer_size, unit_size) + if success: + break + else: + self._remove_allocate_table(allocate_table, tensor) + return success + + def allocate_graph(self, ugraph, allocate_table, use_def_table, buffer_size, unit_size): + tensors = [] + + for node_name in ugraph.topo_order: + in_t_infos = [ + tensor + for tensor in ugraph.ops_info[node_name].input_tensors + if tensor.op.op_type != 'Inline' + ] + out_t_infos = [ + tensor + for tensor in ugraph.ops_info[node_name].output_tensors + if tensor.op.op_type != 'Inline' + ] + tensors.extend(in_t_infos) + tensors.extend(out_t_infos) + + succ = self.allocate_tensor(tensors, 0, allocate_table, use_def_table, buffer_size, unit_size) + return succ + + def _check(self, allocate_table, use_def_table, tensor, tensor_offset_start, tensor_offset_end): + valid = False + timestart = use_def_table[tensor.name]['start'] + timeend = use_def_table[tensor.name]['end'] + offset, length = self._query_offset_fromallocate_table(allocate_table, tensor_offset_start, tensor_offset_end) + timestart, timeend = self._query_time_fromallocate_table(allocate_table, timestart, timeend) + occupied = self._query_result(allocate_table, offset, length, timestart, timeend) + if not occupied: + valid = True + return valid + + def _get_candidates(self, allocate_table, use_def_table, buffer_size, unit_size, in_o): + ret = [] + for i in range(0, buffer_size, unit_size): + if self._check(allocate_table, use_def_table, in_o, i, i + in_o.size * self._type[in_o.dtype]): + ret.append(i) + return ret + + def _update_allocation_table( + self, + allocate_table, + use_def_table, + tensor, + offset_start, + offset_end + ): + time_start = use_def_table[tensor.name]['start'] + time_end = use_def_table[tensor.name]['end'] + attribute = dict() + attribute['start'] = time_start + attribute['end'] = time_end + attribute['offsetstart'] = offset_start + attribute['offsetend'] = offset_end + allocate_table[tensor.name] = attribute + return allocate_table + + def _remove_allocate_table(self, allocate_table, tensor): + del allocate_table[tensor.name] + + def _create_resource_table(self, ugraph): + resource_table = dict() + len_map = { + op_name: idx + for idx, op_name in enumerate(ugraph.topo_order) + } + for node_name in ugraph.topo_order: + for tensor_info in ugraph.ops_info[node_name].input_tensors: + if tensor_info.name not in resource_table: + lifetime = dict() + lifetime['start'] = len_map[node_name] + lifetime['end'] = len_map[node_name] + resource_table[tensor_info.name] = lifetime + resource_table[tensor_info.name]['end']= len_map[node_name] + + for outtensor in ugraph.ops_info[node_name].output_tensors: + if outtensor.name not in resource_table: + lifetime = dict() + lifetime['start'] = len_map[node_name] + lifetime['end'] = len_map[node_name] + resource_table[outtensor.name] = lifetime + + return resource_table + + + @class_property + def default_config(cls): + config = {} + config['size_float'] = 4 + config['size_int'] = 4 + config['size_uint8_t'] = 1 + + return config From 416f21aec279e649c57ecc8dd077a5f0b5caa69a Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 4 Mar 2020 22:37:41 +0800 Subject: [PATCH 044/117] fix bugs and update tests (exclude slow test) --- .circleci/config.yml | 2 +- tests/test_backend/test_utensor.py | 6 +- utensor_cgen/backend/base.py | 8 +-- utensor_cgen/backend/utensor/_graph_lower.py | 26 ++++----- utensor_cgen/ir/base.py | 5 ++ utensor_cgen/ir/instr.py | 59 ++++++++++++++++++++ 6 files changed, 86 insertions(+), 20 deletions(-) create mode 100644 utensor_cgen/ir/instr.py diff --git a/.circleci/config.yml b/.circleci/config.yml index dcb2f03f..db736b73 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ jobs: - run: pip3 install . - run: name: Test - command: pytest -vv tests + command: pytest -vv tests -m 'not slow_test' #- run: genhtml main_coverage.info --output-directory /tmp/coverage #- store_test_results: # path: /tmp/test_results diff --git a/tests/test_backend/test_utensor.py b/tests/test_backend/test_utensor.py index 7510a8bc..d9d0bcc1 100644 --- a/tests/test_backend/test_utensor.py +++ b/tests/test_backend/test_utensor.py @@ -1,5 +1,8 @@ import os +import pytest + + def test_legacy_utensor(mlp_ugraph): from utensor_cgen.backend.utensor import uTensorBackend @@ -19,6 +22,7 @@ def test_legacy_utensor(mlp_ugraph): }).apply(mlp_ugraph) +@pytest.mark.slow_test def test_offlinememory(mlp_ugraph): from utensor_cgen.backend.utensor import uTensorOfflineMemoryPlanner @@ -27,4 +31,4 @@ def test_offlinememory(mlp_ugraph): 'size_int': 4, 'size_uint8_t': 1 } - ).apply(mlp_ugraph) \ No newline at end of file + ).apply(mlp_ugraph) diff --git a/utensor_cgen/backend/base.py b/utensor_cgen/backend/base.py index ed74618a..cf5ac0ce 100644 --- a/utensor_cgen/backend/base.py +++ b/utensor_cgen/backend/base.py @@ -1,7 +1,5 @@ -from utensor_cgen.utils import ( - MUST_OVERWRITEN, class_property, - parse_toml, Configuration, -) +from utensor_cgen.utils import (MUST_OVERWRITEN, Configuration, class_property, + parse_toml) class _BackendBase(object): @@ -24,7 +22,7 @@ def apply(self, ugraph): @class_property def default_config(cls): - return NotImplementedError('All backends should overwrite default config') + raise NotImplementedError('All backends should overwrite default config') def __call__(self, *args, **kwargs): return self.apply(*args, **kwargs) diff --git a/utensor_cgen/backend/utensor/_graph_lower.py b/utensor_cgen/backend/utensor/_graph_lower.py index 57a90b92..1447c59a 100644 --- a/utensor_cgen/backend/utensor/_graph_lower.py +++ b/utensor_cgen/backend/utensor/_graph_lower.py @@ -1,9 +1,11 @@ from copy import deepcopy +import numpy as np +import tensorflow as tf from utensor_cgen.backend.base import BackendPart from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP from utensor_cgen.logger import logger -from utensor_cgen.utils import class_property +from utensor_cgen.utils import Configuration, class_property class uTensorGraphLowerBase(BackendPart): @@ -58,16 +60,15 @@ def default_config(cls): class uTensorOfflineMemoryPlanner(BackendPart): - TARGET = 'utensor' PART = 'offlinememory' - + DATA_NAME = 'address' def __init__( self, + config, buff_size=100000, #1k bytes unit_size=4, - config ): self.buff_size = buff_size self.unit_size = unit_size @@ -254,12 +255,11 @@ def _create_resource_table(self, ugraph): return resource_table - - @class_property - def default_config(cls): - config = {} - config['size_float'] = 4 - config['size_int'] = 4 - config['size_uint8_t'] = 1 - - return config + @class_property + def default_config(cls): + config = {} + config['size_float'] = 4 + config['size_int'] = 4 + config['size_uint8_t'] = 1 + + return config diff --git a/utensor_cgen/ir/base.py b/utensor_cgen/ir/base.py index 1c674de0..638f0328 100644 --- a/utensor_cgen/ir/base.py +++ b/utensor_cgen/ir/base.py @@ -21,6 +21,7 @@ from .converter import AttrValueConverter, ConverterDispatcher from .graph_builder import uTensorGraphBuilderMixin +from .instr import DataManager __all__ = [ 'TensorInfo', 'OperationInfo', @@ -616,6 +617,10 @@ def ops(self): topologic_order_graph(self) return [self.ops_info[name] for name in self.topo_order] + def setup_data_manager(self, datas): + manager = DataManager(datas) + self.data_manager = manager + def unsafe_merge_into(self, other_ugraph): """ Merge this graph with other given graph (unsafe) diff --git a/utensor_cgen/ir/instr.py b/utensor_cgen/ir/instr.py new file mode 100644 index 00000000..b452cd4c --- /dev/null +++ b/utensor_cgen/ir/instr.py @@ -0,0 +1,59 @@ +class MemoryAllocation(object): + _store_name = "address" + + def __init__(self): + self._address_map = {} + + def __setattr__(self, attr, value): + if attr == '_address_map': + return super(MemoryAllocation, self).__setattr__(attr, value) + self._address_map[attr] = value + + def __getattr__(self, att): + return self._address_map[att] + + def __deepcopy__(self, memo): + new_obj = MemoryAllocation() + new_obj._address_map = {k: v for k, v in self._address_map.items()} + return new_obj + +class DataManager(object): + + InfoCenterMap = { + MemoryAllocation._store_name: MemoryAllocation + } + + def __init__(self, datas): + self.StorageCenter = {} + for data_name in datas: + data_cls = self.InfoCenterMap.get(data_name, None) + if data_cls is None: + raise ValueError("Unknown transformation method: {}".format(data_name)) + datastorage = data_cls() + self.StorageCenter.update({data_name: datastorage}) + + @classmethod + def register_datamap(cls, data_cls, overwrite=False): + cls.InfoCenterMap[data_cls.name] = data_cls + + def __getattr__(self, attr): + if attr == 'StorageCenter': + raise AttributeError('StorageCenter') + elif attr.startswith('__'): + return super(DataManager, self).__getattr__(attr) + cls_instance = self.StorageCenter[attr] + return cls_instance + + def __setattr__(self, attr, value): + if attr == 'StorageCenter': + return super(DataManager, self).__setattr__(attr, value) + cls_instance = self.StorageCenter[attr] + k, v = value + cls_instance.__setattr__(k, v) + + def group(self, tensor): + ret = {} + for cls_object in self.StorageCenter.values(): + ans = cls_object.__getattr__(tensor) + ret.update({cls_object._store_name: ans}) + return ret From b0ecd725027dd579c6b9bab20acb5f93712c6ae2 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Thu, 5 Mar 2020 14:45:18 +0800 Subject: [PATCH 045/117] make graph_lower a submodule --- .../backend/utensor/_graph_lower/__init__.py | 2 + .../_mem_alloc.py} | 51 ----------------- .../backend/utensor/_graph_lower/_op_lower.py | 56 +++++++++++++++++++ 3 files changed, 58 insertions(+), 51 deletions(-) create mode 100644 utensor_cgen/backend/utensor/_graph_lower/__init__.py rename utensor_cgen/backend/utensor/{_graph_lower.py => _graph_lower/_mem_alloc.py} (86%) create mode 100644 utensor_cgen/backend/utensor/_graph_lower/_op_lower.py diff --git a/utensor_cgen/backend/utensor/_graph_lower/__init__.py b/utensor_cgen/backend/utensor/_graph_lower/__init__.py new file mode 100644 index 00000000..47767c38 --- /dev/null +++ b/utensor_cgen/backend/utensor/_graph_lower/__init__.py @@ -0,0 +1,2 @@ +from ._mem_alloc import uTensorOfflineMemoryPlanner +from ._op_lower import uTensorLegacyGraphLower, uTensorRearchGraphLower diff --git a/utensor_cgen/backend/utensor/_graph_lower.py b/utensor_cgen/backend/utensor/_graph_lower/_mem_alloc.py similarity index 86% rename from utensor_cgen/backend/utensor/_graph_lower.py rename to utensor_cgen/backend/utensor/_graph_lower/_mem_alloc.py index 1447c59a..ba99431c 100644 --- a/utensor_cgen/backend/utensor/_graph_lower.py +++ b/utensor_cgen/backend/utensor/_graph_lower/_mem_alloc.py @@ -8,57 +8,6 @@ from utensor_cgen.utils import Configuration, class_property -class uTensorGraphLowerBase(BackendPart): - TARGET = 'utensor' - - def handle_default(self, ugraph): - logger.warning('fall back to default graph lowering (do nothing)') - return ugraph - - def get_handler(self, ugraph): - handler = getattr(self, 'handle_{}'.format(ugraph.lib_name), self.handle_default) - return handler - - def apply(self, ugraph): - handler = self.get_handler(ugraph) - return handler(ugraph) - -class uTensorLegacyGraphLower(uTensorGraphLowerBase): - PART = 'legacy_graph_lower' - - def handle_tensorflow(self, ugraph): - return ugraph - - @class_property - def default_config(cls): - return {} - - -class uTensorRearchGraphLower(uTensorGraphLowerBase): - PART = 'rearch_graph_lower' - - class OptypeRenameManager(object): - NAME_MAP = { - 'Add': 'AddOperator', - 'Conv2D': 'ConvOperator', - 'MatMul': 'MatrixMultOperator' - } - - @classmethod - def get_new_optype(cls, op_type): - return cls.NAME_MAP.get(op_type, op_type) - - def handle_tensorflow(self, ugraph): - new_ugraph = deepcopy(ugraph) - for op_info in new_ugraph.ops_info.values(): - op_info.op_type = self.OptypeRenameManager.get_new_optype(op_info.op_type) - return new_ugraph - - @class_property - def default_config(cls): - return {} - - class uTensorOfflineMemoryPlanner(BackendPart): TARGET = 'utensor' PART = 'offlinememory' diff --git a/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py b/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py new file mode 100644 index 00000000..54ef5e2d --- /dev/null +++ b/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py @@ -0,0 +1,56 @@ +from copy import deepcopy + +from utensor_cgen.backend.base import BackendPart +from utensor_cgen.logger import logger +from utensor_cgen.utils import class_property + + +class uTensorGraphLowerBase(BackendPart): + TARGET = 'utensor' + + def handle_default(self, ugraph): + logger.warning('fall back to default graph lowering (do nothing)') + return ugraph + + def get_handler(self, ugraph): + handler = getattr(self, 'handle_{}'.format(ugraph.lib_name), self.handle_default) + return handler + + def apply(self, ugraph): + handler = self.get_handler(ugraph) + return handler(ugraph) + +class uTensorLegacyGraphLower(uTensorGraphLowerBase): + PART = 'legacy_graph_lower' + + def handle_tensorflow(self, ugraph): + return ugraph + + @class_property + def default_config(cls): + return {} + + +class uTensorRearchGraphLower(uTensorGraphLowerBase): + PART = 'rearch_graph_lower' + + class OptypeRenameManager(object): + NAME_MAP = { + 'Add': 'AddOperator', + 'Conv2D': 'ConvOperator', + 'MatMul': 'MatrixMultOperator' + } + + @classmethod + def get_new_optype(cls, op_type): + return cls.NAME_MAP.get(op_type, op_type) + + def handle_tensorflow(self, ugraph): + new_ugraph = deepcopy(ugraph) + for op_info in new_ugraph.ops_info.values(): + op_info.op_type = self.OptypeRenameManager.get_new_optype(op_info.op_type) + return new_ugraph + + @class_property + def default_config(cls): + return {} From facaa5d12605b75bc23695c7ecdfd90e3978e75a Mon Sep 17 00:00:00 2001 From: dboyliao Date: Thu, 5 Mar 2020 15:07:45 +0800 Subject: [PATCH 046/117] Decouple graph transformation and code generator Offline memalloc planner backend part --- utensor_cgen/backend/base.py | 20 +- utensor_cgen/backend/graph_lower/__init__.py | 1 + .../backend/graph_lower/alloc_plan.py | 112 +++++ .../graph_lower/generic_graph_lower.py | 456 ++++++++++++++++++ utensor_cgen/backend/transformer.py | 74 +++ utensor_cgen/backend/utensor/__init__.py | 1 - utensor_cgen/backend/utensor/_backend_impl.py | 50 +- .../backend/utensor/_graph_lower/__init__.py | 1 - .../utensor/_graph_lower/_mem_alloc.py | 214 -------- .../code_generator/legacy/_code_generator.py | 77 +-- .../code_generator/legacy/_operators.py | 46 +- .../code_generator/rearch/_code_generator.py | 35 +- .../backend/utensor/snippets/_base.py | 4 + utensor_cgen/ir/misc/graph_viz.py | 57 +-- utensor_cgen/transformer/__init__.py | 1 - utensor_cgen/transformer/mem_alloc.py | 156 ------ utensor_cgen/utils.py | 13 +- 17 files changed, 764 insertions(+), 554 deletions(-) create mode 100644 utensor_cgen/backend/graph_lower/__init__.py create mode 100644 utensor_cgen/backend/graph_lower/alloc_plan.py create mode 100644 utensor_cgen/backend/graph_lower/generic_graph_lower.py create mode 100644 utensor_cgen/backend/transformer.py delete mode 100644 utensor_cgen/backend/utensor/_graph_lower/_mem_alloc.py delete mode 100644 utensor_cgen/transformer/mem_alloc.py diff --git a/utensor_cgen/backend/base.py b/utensor_cgen/backend/base.py index cf5ac0ce..cd764f6b 100644 --- a/utensor_cgen/backend/base.py +++ b/utensor_cgen/backend/base.py @@ -14,11 +14,27 @@ def __new__(cls, config, *args, **kwargs): validator(config, *args, **kwargs) if isinstance(config, dict): config = Configuration(cls.default_config, config) + elif config is None: + config = Configuration(cls.default_config, {}) self._config = config return self def apply(self, ugraph): - raise NotImplementedError('all backend object must overwrite apply method') + """Applying side-effect to ugraph + + Any backend part that implement apply method can create side-effect on given graph, + such as adding attribute or creating files. + """ + raise NotImplementedError('base apply method invoked: %s' % self) + + def transform(self, ugraph): + """Transform Graph + + transform should not create side-effect on the given graph and should + return a new ugraph that is the result of transformation applied to the + given ugraph. + """ + raise NotImplementedError('base transform method invoked: %s' % self) @class_property def default_config(cls): @@ -32,7 +48,7 @@ def config(self): return self._config def _validate_config(self, config): - assert isinstance(config, (dict, Configuration)), \ + assert isinstance(config, (dict, Configuration, type(None))), \ 'expecting {}, get {}'.format(dict, type(config)) diff --git a/utensor_cgen/backend/graph_lower/__init__.py b/utensor_cgen/backend/graph_lower/__init__.py new file mode 100644 index 00000000..47024bed --- /dev/null +++ b/utensor_cgen/backend/graph_lower/__init__.py @@ -0,0 +1 @@ +from .generic_graph_lower import TensorAllocationPlanner diff --git a/utensor_cgen/backend/graph_lower/alloc_plan.py b/utensor_cgen/backend/graph_lower/alloc_plan.py new file mode 100644 index 00000000..1f597ba1 --- /dev/null +++ b/utensor_cgen/backend/graph_lower/alloc_plan.py @@ -0,0 +1,112 @@ +import attr +import six +from attr.validators import instance_of + +from utensor_cgen.logger import logger + +__all__ = ['TimeslotAllocation', 'SpaceAllocation', 'TimeSpaceAllocation', 'AllocationPlan'] + +@attr.s +class TimeslotAllocation(object): + time_slot_start = attr.ib(validator=instance_of(int)) + # if time_slot_end is None, it's a time sapn with no end + time_slot_end = attr.ib(validator=instance_of((int, type(None)))) + + def __attrs_post_init__(self): + assert self.time_slot_start >= 0, \ + 'invalid time_slot_start: %s' % self.time_slot_start + if self.time_slot_end is not None: + assert self.time_slot_end >= self.time_slot_start, \ + 'invalid time_slot_end: %s ~ %s' % (self.time_slot_start, self.time_slot_end) + + def __contains__(self, slot): + assert isinstance(slot, int), 'incorrect slot type: %s' % type(slot) + is_in = self.time_slot_start <= slot + if self.time_slot_end is not None: + is_in = is_in and slot <= self.time_slot_end + return is_in + + +@attr.s +class SpaceAllocation(object): + offset_start = attr.ib(validator=instance_of(int)) + size = attr.ib(validator=instance_of(int)) + offset_end = attr.ib(init=False) + + def __attrs_post_init__(self): + assert self.offset_start >= 0, \ + 'invalid offset_start: %s' % self.offset_start + assert self.size > 0, \ + 'invalid size: %s' % self.size + self.offset_end = self.offset_start + self.size - 1 + + def __contains__(self, offset): + return self.offset_start <= offset <= self.offset_end + + +@attr.s +class TimeSpaceAllocation(object): + entity_name = attr.ib(validator=instance_of(six.string_types)) + _time_alloc = attr.ib(validator=instance_of(TimeslotAllocation), repr=False) + _space_alloc = attr.ib(validator=instance_of(SpaceAllocation), repr=False) + time_slot_start = attr.ib(init=False) + time_slot_end = attr.ib(init=False) + offset_start = attr.ib(init=False) + offset_end = attr.ib(init=False) + size = attr.ib(init=False) + + def __attrs_post_init__(self): + self.time_slot_start = self._time_alloc.time_slot_start + self.time_slot_end = self._time_alloc.time_slot_end + self.offset_start = self._space_alloc.offset_start + self.offset_end = self._space_alloc.offset_end + self.size = self._space_alloc.size + + @classmethod + def init(cls, entity_name, time_slot_start, time_slot_end, offset_start, size): + time_alloc = TimeslotAllocation(time_slot_start, time_slot_end) + space_alloc = SpaceAllocation(offset_start, size) + return cls( + entity_name=entity_name, + time_alloc=time_alloc, + space_alloc=space_alloc + ) + + def is_alive_in_timeslot(self, time_slot): + return time_slot in self._time_alloc + + def is_occupied(self, offset): + return offset in self._space_alloc + + +class AllocationPlan(object): + + def __init__(self, allocs, total_size): + for alloc in allocs: + if not isinstance(alloc, TimeSpaceAllocation): + raise ValueError( + 'expecting value of {} of type {}, get {}'.format(k, TimeSpaceAllocation, type(v)) + ) + self.plan = {alloc.entity_name: alloc for alloc in allocs} + self.total_size = total_size + + def __setitem__(self, entity_name, alloc): + if not isinstance(alloc, TimeSpaceAllocation): + raise ValueError( + 'the value should be of type {}, get {}'.format(TimeSpaceAllocation, type(alloc)) + ) + if entity_name in self._plan: + logger.warning( + 'duplicate entity_name detected: {}'.format(entity_name) + ) + self._plan[entity_name] = alloc + + def __getitem__(self, entity_name): + if entity_name not in self._plan: + raise KeyError('%s not found' % entity_name) + + def __delitem__(self, entity_name): + del self._plan[entity_name] + + def __getattr__(self, attr_name): + return getattr(self._plan, attr_name) diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py new file mode 100644 index 00000000..b8c00172 --- /dev/null +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -0,0 +1,456 @@ +r"""Generic Graph Lowering + +All graph lower in this module should be generic. +That is, it should be able to apply to any graph (i.e target independent) +""" +import os +import pickle +from collections import Counter, defaultdict, namedtuple +from copy import deepcopy +from itertools import chain, combinations, product +from math import ceil, log10 + +import numpy as np +import tensorflow as tf +from ortools.sat.python import cp_model +from utensor_cgen.backend.base import BackendPart +from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP +from utensor_cgen.logger import logger +from utensor_cgen.utils import Configuration, class_property, timed + +from .alloc_plan import (AllocationPlan, SpaceAllocation, TimeslotAllocation, + TimeSpaceAllocation) + +__all__ = ['TensorAllocationPlanner', 'BrutalForceMemoryPlanner'] + +_VarMemorySpan = namedtuple('_VarMemorySpan', ['start', 'end', 'size']) + +class TopoOrderTensorTimeslotPlanner(BackendPart): + TARGET = 'generic' + PART = 'tensor_timeslot_planner' + KWARGS_NAMESCOPE = '_tensor_timeslot' + + @timed + def apply(self, ugraph): + ref_cnts = Counter() + life_span = defaultdict(lambda: [None, None]) + for op_info in ugraph.ops_info.values(): + for tensor in op_info.input_tensors: + ref_cnts[tensor.name] += 1 + for time_slot, op_name in enumerate(ugraph.topo_order): + op_info = ugraph.ops_info[op_name] + for tensor in op_info.output_tensors: + life_span[tensor.name][0] = time_slot + for tensor in op_info.input_tensors: + ref_cnts[tensor.name] -= 1 + if ref_cnts[tensor.name] == 0: + life_span[tensor.name][1] = time_slot + time_alloc_plan = {} + for tensor_name, (start, end) in life_span.items(): + time_alloc = TimeslotAllocation( + time_slot_start=start, + time_slot_end=end + ) + time_alloc_plan[tensor_name] = time_alloc + logger.info('topo ordered tensor life span analysis done') + ugraph.attributes[self.KWARGS_NAMESCOPE] = time_alloc_plan + + @class_property + def default_config(cls): + return {} + + +class TensorAllocationPlanner(BackendPart): + """ + Offline Tensor Allocation Optimizer + + analyse tensor lifetime and find the optimal allocation offset in the managed memory pool + + :param max_pool_size: the size of the memory pool (default: 1 KB) + :type max_pool_size: int + + :param include_inputs: include the input tensors (Placeholder) in the allocation plan + :type include_inputs: bool + + :param out_fname: the file name of memory allocation visualization (will NOT generate if not given) + :type out_fname: str + + :param aesthetic_kwargs: the keyword arguments controlling the aesthetic of the visualization of allocation plan + :type aesthetic_kwargs: dict + """ + TARGET = 'generic' + PART = 'tensor_alloc_planner' + KWARGS_NAMESCOPE = "_tensor_alloc" + + def __init__(self, config): + self.max_pool_size = self.config['max_pool_size'] + self.include_inputs = self.config['include_inputs'] + self.out_fname = self.config['out_fname'] + if self.out_fname == 'None': + self.out_fname = None + aesthetic_kwargs = self.config['aesthetic_kwargs'] + if aesthetic_kwargs['figsize'] == 'None': + aesthetic_kwargs['figsize'] = None + self.aesthetic_kwargs = aesthetic_kwargs.to_dict() + self.dtype_size_map = self._parse_dtype_size_map(self.config) + + def apply(self, ugraph): + time_alloc_plan = ugraph.attributes.get( + TopoOrderTensorTimeslotPlanner.KWARGS_NAMESCOPE + ) + if time_alloc_plan is None: + TopoOrderTensorTimeslotPlanner(config={}).apply(ugraph) + time_alloc_plan = ugraph.attributes[TopoOrderTensorTimeslotPlanner.KWARGS_NAMESCOPE] + tensors_to_ignore = set( + chain(*[ + op.output_tensors + for op in ugraph.get_ops_by_type('Inline') + ]) + ) + if not self.include_inputs: + tensors_to_ignore.update( + chain(*[ + op.output_tensors + for op in ugraph.get_ops_by_type('Placeholder') + ]) + ) + tensors_to_schedule = set() + nonoverlap_map = defaultdict(set) + for time_slot, op_name in enumerate(ugraph.topo_order): + op_info = ugraph.ops_info[op_name] + # ignore inline ops + if op_info.op_type == 'Inline': + continue + # ignore placeholders if not included + if not self.include_inputs and op_info.op_type == 'Placeholder': + continue + # all output tensor should not overlap with tensors that's still alive + for out_tensor, known_tensor in product(op_info.output_tensors, tensors_to_schedule): + time_alloc = time_alloc_plan[known_tensor.name] + if time_slot in time_alloc: + nonoverlap_map[out_tensor].add(known_tensor) + # all output tensors should not overlap with each other + for out_tensor1, out_tensor2 in combinations(op_info.output_tensors, 2): + nonoverlap_map[out_tensor1].add(out_tensor2) + # update tensors to be scheduled + tensors_to_schedule.update(op_info.output_tensors) + space_alloc_plan, opt_mempool_size = self._solve_space_alloc(tensors_to_schedule, nonoverlap_map) + time_space_allocs = [] + if space_alloc_plan: + for tensor_name in space_alloc_plan: + space_alloc = space_alloc_plan[tensor_name] + time_alloc = time_alloc_plan[tensor_name] + time_space_allocs.append( + TimeSpaceAllocation( + tensor_name, + time_alloc=time_alloc, + space_alloc=space_alloc + ) + ) + ugraph.attributes[self.KWARGS_NAMESCOPE] = AllocationPlan( + allocs=time_space_allocs, + total_size=opt_mempool_size + ) + if self.out_fname: + figs = viz_memalloc(ugraph=ugraph, **self.aesthetic_kwargs) + if len(figs) == 1: + logger.info('saving tensor mem allocation to %s', self.out_fname) + figs[0].savefig(self.out_fname) + else: + num_digits = ceil(log10(len(figs))) + file_format = '{{}}_{{:0{}d}}{{}}'.format(num_digits) + for i, fig in enumerate(figs, 1): + fname, ext = os.path.splitext(self.out_fname) + fname = file_format.format(fname, i, ext) + logger.info('saving tensor mem allocation to %s', fname) + fig.savefig(fname) + with open('{}.pkl'.format(self.out_fname), 'wb') as fid: + pickle.dump(figs, fid) + logger.info('matplotlib figure object dumped (pickle): %s', fid.name) + + @timed + def _solve_space_alloc(self, tensors_to_schedule, nonoverlap_map): + model = cp_model.CpModel() + inter_vars = {} + tensor_allocs = {} + for tensor in tensors_to_schedule: + var_start = model.NewIntVar(0, self.max_pool_size, '{}_start'.format(tensor.name)) + var_end = model.NewIntVar(0, self.max_pool_size, '{}_end'.format(tensor.name)) + size = self._compute_tensor_bytes_size(tensor) + intv_var = model.NewIntervalVar(var_start, size, var_end, '{}_alloc'.format(tensor.name)) + inter_vars[tensor.name] = intv_var + tensor_allocs[tensor.name] = _VarMemorySpan(var_start, var_end, size) + for tensor in tensors_to_schedule: + inter_var = inter_vars[tensor.name] + nonoverlap_vars = [inter_vars[t.name] for t in nonoverlap_map[tensor]] + for other in nonoverlap_vars: + model.AddNoOverlap([inter_var, other]) + var_mempool_size = model.NewIntVar(0, self.max_pool_size, 'mempool_size') + model.AddMaxEquality(var_mempool_size, [alloc.end for alloc in tensor_allocs.values()]) + model.Minimize(var_mempool_size) + + solver = cp_model.CpSolver() + status = solver.Solve(model) + alloc_plan = {} + opt_mempool_size = None + if solver.StatusName(status) == 'OPTIMAL': + opt_mempool_size = solver.Value(var_mempool_size) + for name, alloc in tensor_allocs.items(): + alloc_plan[name] = SpaceAllocation( + offset_start=solver.Value(alloc.start), + size=alloc.size + ) + logger.info('optimal tensor allocation plan solved, memory span: %i bytes', opt_mempool_size) + else: + logger.info('tensor allocation plan not found, status: %s', solver.StatusName(status)) + return alloc_plan, opt_mempool_size + + def _compute_tensor_bytes_size(self, tensor_info): + size = tensor_info.size + elem_size = self.dtype_size_map.get(tensor_info.dtype, tensor_info.dtype.itemsize) + return elem_size * size + + @classmethod + def _parse_dtype_size_map(cls, config): + dtype_size_map = {} + for dtype_str, size in config['dtype_size_map'].items(): + if dtype_str == 'float': + dtype_size_map[np.dtype('float32')] = size + elif dtype_str == 'uint8_t': + dtype_size_map[np.dtype('uint8')] = size + else: + # TODO: user-defined data types + # https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html + dtype_size_map[np.dtype(dtype_str)] = size + return dtype_size_map + + @class_property + def default_config(cls): + return { + 'max_pool_size': 1024*1024, # 1k bytes + 'include_inputs': False, + 'out_fname': 'None', + 'aesthetic_kwargs': { + 'split_on_large_graph': True, + 'num_tensors_per_split': 20, + 'figsize': 'None', + 'fontsize': 12, + 'lw': 12, + 'rand_seed': 1111 + }, + 'dtype_size_map': { + 'float': 4, + 'double': 8, + 'uint8': 1, + 'int': 4, + 'long': 8, + }, + } + +class BrutalForceMemoryPlanner(BackendPart): + TARGET = 'utensor' + PART = 'offlinememory' + DATA_NAME = 'address' + + def __init__( + self, + config, + buff_size=100000, #1k bytes + unit_size=4, + ): + self.buff_size = buff_size + self.unit_size = unit_size + final_config = Configuration(self.default_config, config) + self._type = {} + self._type[np.dtype(tf.float32.as_numpy_dtype)] = final_config['size_float'] + self._type[np.dtype(tf.int32.as_numpy_dtype)] = final_config['size_int'] + self._type[np.dtype(tf.quint8.as_numpy_dtype)] = final_config['size_uint8_t'] + self._type[np.dtype(tf.qint8.as_numpy_dtype)] = final_config['size_uint8_t'] + self._type[np.dtype(tf.qint32.as_numpy_dtype)] = final_config['size_int'] + + def apply(self, ugraph): + new_ugraph = deepcopy(ugraph) + new_ugraph.setup_data_manager({self.DATA_NAME: " "}) + # use_def_table: dict, tensor_name -> {'start': op_idx, 'end': op_idx} + use_def_table = self._create_resource_table(new_ugraph) + allocate_table = dict() + allocate_success = self.allocate_graph(new_ugraph, allocate_table, use_def_table, self.buff_size, self.unit_size) + + if allocate_success: + for node_name in new_ugraph.topo_order: + in_t_infos = new_ugraph.ops_info[node_name].input_tensors + for in_o in in_t_infos: + if in_o.name in allocate_table: + new_ugraph.data_manager.address = (in_o.name, allocate_table[in_o.name]['offsetstart']) + out_t_infos = new_ugraph.ops_info[node_name].output_tensors + for out_o in out_t_infos: + if out_o.name in allocate_table: + new_ugraph.data_manager.address = (out_o.name, allocate_table[out_o.name]['offsetstart']) + return new_ugraph + return ugraph + + def _query_offset_fromallocate_table(self, allocate_table, start, end): + new_start = start + new_end = end + for key in allocate_table: + if allocate_table[key]['offsetstart'] >= start and allocate_table[key]['offsetend'] <= end: + continue + elif allocate_table[key]['offsetstart'] <= start and allocate_table[key]['offsetend'] >= start: + new_start = allocate_table[key]['offsetstart'] + if allocate_table[key]['offsetend'] >= end: + new_end = max(new_end, allocate_table[key]['offsetend']) + else: + new_end = max(end, new_end) + elif allocate_table[key]['offsetstart'] >= start and allocate_table[key]['offsetend'] >= start: + if allocate_table[key]['offsetend'] >= end: + new_end = max(new_end, allocate_table[key]['offsetend']) + else: + new_end = max(end, new_end) + return new_start, new_end + + def _query_time_fromallocate_table(self, allocate_table, start, end): + time_start = start + time_end = end + for key in allocate_table: + if allocate_table[key]['start'] >= start and allocate_table[key]['end'] <= end: + continue + elif allocate_table[key]['start'] <= start and allocate_table[key]['end'] >= start: + if allocate_table[key]['end'] >= end: + time_end = max(time_end, allocate_table[key]['end']) + else: + time_end = max(end, time_end) + elif allocate_table[key]['start'] >= start and allocate_table[key]['end'] >= start: + if allocate_table[key]['end'] >= end: + time_end = max(time_end, allocate_table[key]['end']) + else: + time_end = max(end, time_end) + return time_start, time_end + + def _query_result(self, allocate_table, offset, length, timestart, timeend): + for key in allocate_table: + mem_occupied = ( + (allocate_table[key]['offsetstart'] >= offset and allocate_table[key]['offsetstart'] <= offset + length) or + (allocate_table[key]['offsetstart'] <= offset and allocate_table[key]['offsetend'] >= offset) + ) + life_span_occupied = ( + (allocate_table[key]['start'] >= timestart and allocate_table[key]['start'] <= timeend) or + (allocate_table[key]['start'] <= timestart and allocate_table[key]['end'] >= timestart) + ) + if mem_occupied and life_span_occupied: + return True + return False + + def allocate_tensor(self, tensors, tensor_index, allocate_table, use_def_table, buffer_size, unit_size): + if tensor_index == len(tensors): + return True + if tensors[tensor_index].name in allocate_table: + return self.allocate_tensor(tensors, tensor_index + 1, allocate_table, use_def_table, buffer_size, unit_size) + + tensor = tensors[tensor_index] + candidates = self._get_candidates(allocate_table, use_def_table, buffer_size, unit_size, tensor) + if not candidates: + return False + success = False + for candidate in candidates: + self._update_allocation_table(allocate_table, use_def_table, tensor, candidate, candidate + tensor.size) + success = self.allocate_tensor(tensors, tensor_index + 1, allocate_table, use_def_table, buffer_size, unit_size) + if success: + break + else: + self._remove_allocate_table(allocate_table, tensor) + return success + + def allocate_graph(self, ugraph, allocate_table, use_def_table, buffer_size, unit_size): + tensors = [] + + for node_name in ugraph.topo_order: + in_t_infos = [ + tensor + for tensor in ugraph.ops_info[node_name].input_tensors + if tensor.op.op_type != 'Inline' + ] + out_t_infos = [ + tensor + for tensor in ugraph.ops_info[node_name].output_tensors + if tensor.op.op_type != 'Inline' + ] + tensors.extend(in_t_infos) + tensors.extend(out_t_infos) + + succ = self.allocate_tensor(tensors, 0, allocate_table, use_def_table, buffer_size, unit_size) + return succ + + def _check(self, allocate_table, use_def_table, tensor, tensor_offset_start, tensor_offset_end): + valid = False + timestart = use_def_table[tensor.name]['start'] + timeend = use_def_table[tensor.name]['end'] + offset, length = self._query_offset_fromallocate_table(allocate_table, tensor_offset_start, tensor_offset_end) + timestart, timeend = self._query_time_fromallocate_table(allocate_table, timestart, timeend) + occupied = self._query_result(allocate_table, offset, length, timestart, timeend) + if not occupied: + valid = True + return valid + + def _get_candidates(self, allocate_table, use_def_table, buffer_size, unit_size, in_o): + ret = [] + for i in range(0, buffer_size, unit_size): + if self._check(allocate_table, use_def_table, in_o, i, i + in_o.size * self._type[in_o.dtype]): + ret.append(i) + return ret + + def _update_allocation_table( + self, + allocate_table, + use_def_table, + tensor, + offset_start, + offset_end + ): + time_start = use_def_table[tensor.name]['start'] + time_end = use_def_table[tensor.name]['end'] + attribute = dict() + attribute['start'] = time_start + attribute['end'] = time_end + attribute['offsetstart'] = offset_start + attribute['offsetend'] = offset_end + allocate_table[tensor.name] = attribute + return allocate_table + + def _remove_allocate_table(self, allocate_table, tensor): + del allocate_table[tensor.name] + + def _create_resource_table(self, ugraph): + resource_table = dict() + len_map = { + op_name: idx + for idx, op_name in enumerate(ugraph.topo_order) + } + for node_name in ugraph.topo_order: + for tensor_info in ugraph.ops_info[node_name].input_tensors: + if tensor_info.name not in resource_table: + lifetime = dict() + lifetime['start'] = len_map[node_name] + lifetime['end'] = len_map[node_name] + resource_table[tensor_info.name] = lifetime + resource_table[tensor_info.name]['end']= len_map[node_name] + + for outtensor in ugraph.ops_info[node_name].output_tensors: + if outtensor.name not in resource_table: + lifetime = dict() + lifetime['start'] = len_map[node_name] + lifetime['end'] = len_map[node_name] + resource_table[outtensor.name] = lifetime + + return resource_table + + @class_property + def default_config(cls): + config = {} + config['size_float'] = 4 + config['size_int'] = 4 + config['size_uint8_t'] = 1 + + return config + +# FIXME: cyclic import +from utensor_cgen.ir.misc.graph_viz import viz_memalloc # isort:skip diff --git a/utensor_cgen/backend/transformer.py b/utensor_cgen/backend/transformer.py new file mode 100644 index 00000000..e77fdd31 --- /dev/null +++ b/utensor_cgen/backend/transformer.py @@ -0,0 +1,74 @@ +import pickle + +from utensor_cgen.logger import logger +from utensor_cgen.transformer.pipeline import TransformerPipeline +from utensor_cgen.utils import class_property + +from .base import BackendPart + +__all__ = ['PipelineTransformer'] + +class PipelineTransformer(BackendPart): + TARGET = 'generic' + PART = 'pipeline_transformer' + + def __init__(self, config): + self.transformer = TransformerPipeline( + methods=self.config['transform_methods'] + ) + self.trans_methods = self.config['transform_methods'] + self.save_graph = self.config['save_graph'] + + def transform(self, ugraph): + logger.info("Transforming graph: %s", ugraph.name) + logger.info("Transform pipeline: %s", ' -> '.join(self.trans_methods)) + self._check_non_quantized(ugraph) + new_ugraph = self.transformer.transform(ugraph) + new_ugraph.name = ugraph.name + logger.info('Graph transormation done') + if self.save_graph: + logger.info('Saving transformed graph') + pkl_fname = "{}_transformed.pkl".format(ugraph.name) + with open(pkl_fname, 'wb') as fid: + pickle.dump(new_ugraph, fid) + logger.info('{} saved'.format(pkl_fname)) + return new_ugraph + + @classmethod + def _check_non_quantized(cls, ugraph): + is_quantized = False + quant_ops = set([ + "Dequantize", "QuantizedMaxPool", + "QuantizeV2", "QuantizedMatMul", + "QuantizedRelu", "QuantizedAdd", + "RequantizationRange", + "Requantize", + "QuantizedReshape", + "QuantizedConv2D" + ]) + for op_info in ugraph.ops_info.values(): + if op_info.op_type in quant_ops: + is_quantized = True + break + if is_quantized: + logger.warning(( + "Expecting non-quantized graph, " + "graph transformation/optimization might not work properly" + )) + + @class_property + def default_config(cls): + return { + 'save_graph': False, + 'transform_methods': [ + "dropout(name_pattern=r'(dropout[_\w\d]*)/.*')", + "linear_reorder", + "quantize", + "conv_pool", + "inline", + "biasAdd", + "remove_id_op", + "fake_gather_v2", + "refcnt", + ] + } diff --git a/utensor_cgen/backend/utensor/__init__.py b/utensor_cgen/backend/utensor/__init__.py index 12a91fb5..ed85033c 100644 --- a/utensor_cgen/backend/utensor/__init__.py +++ b/utensor_cgen/backend/utensor/__init__.py @@ -1,2 +1 @@ from ._backend_impl import uTensorBackend -from ._graph_lower import uTensorOfflineMemoryPlanner diff --git a/utensor_cgen/backend/utensor/_backend_impl.py b/utensor_cgen/backend/utensor/_backend_impl.py index cc5db5b7..2f40d734 100644 --- a/utensor_cgen/backend/utensor/_backend_impl.py +++ b/utensor_cgen/backend/utensor/_backend_impl.py @@ -1,24 +1,31 @@ from utensor_cgen.backend.base import Backend -from utensor_cgen.utils import ( - class_property, parse_toml, - LazyLoader, LazyAttrib, - Configuration, -) +from utensor_cgen.utils import (Configuration, LazyAttrib, LazyLoader, + class_property, parse_toml) code_generator = LazyLoader(submod_name='backend.utensor.code_generator') -_graph_lower = LazyLoader(submod_name='backend.utensor._graph_lower') +transformer = LazyLoader(submod_name='backend.transformer') +_op_lower = LazyLoader(submod_name='backend.utensor._graph_lower._op_lower') +generic_graph_lower = LazyLoader(submod_name='backend.graph_lower') uTensorLegacyCodeGenerator = LazyAttrib(code_generator, 'uTensorLegacyCodeGenerator') uTensorRearchCodeGenerator = LazyAttrib(code_generator, 'uTensorRearchCodeGenerator') -uTensorLegacyGraphLower = LazyAttrib(_graph_lower, 'uTensorLegacyGraphLower') -uTensorRearchGraphLower = LazyAttrib(_graph_lower, 'uTensorRearchGraphLower') +uTensorLegacyGraphLower = LazyAttrib(_op_lower, 'uTensorLegacyGraphLower') +uTensorRearchGraphLower = LazyAttrib(_op_lower, 'uTensorRearchGraphLower') +TensorAllocationPlanner = LazyAttrib(generic_graph_lower, 'TensorAllocationPlanner') +PipelineTransformer = LazyAttrib(transformer, 'PipelineTransformer') -del code_generator, _graph_lower +del code_generator, _op_lower, generic_graph_lower class uTensorBackend(Backend): TARGET = 'utensor' - def __init__(self, config, code_generator=None, graph_lower=None): + def __init__(self, + config, + code_generator=None, + graph_transformer=None, + graph_op_lower=None, + graph_alloc_lower=None, + ): default_config = self.default_config[self.TARGET][self.COMPONENT] config = Configuration(default_config, config.get( self.TARGET, @@ -29,11 +36,16 @@ def __init__(self, config, code_generator=None, graph_lower=None): ) if config['legacy-api']: code_generator = code_generator or uTensorLegacyCodeGenerator(config=config[uTensorLegacyCodeGenerator.PART]) - graph_lower = graph_lower or uTensorLegacyGraphLower(config=config[uTensorLegacyGraphLower.PART]) + graph_op_lower = graph_op_lower or uTensorLegacyGraphLower(config=config[uTensorLegacyGraphLower.PART]) + graph_alloc_lower = graph_alloc_lower or TensorAllocationPlanner(config=config[TensorAllocationPlanner.PART]) else: code_generator = code_generator or uTensorRearchCodeGenerator(config=config[uTensorRearchCodeGenerator.PART]) - graph_lower = graph_lower or uTensorRearchGraphLower(config=config[uTensorRearchGraphLower.PART]) - self._graph_lower = graph_lower + graph_op_lower = graph_op_lower or uTensorRearchGraphLower(config=config[uTensorRearchGraphLower.PART]) + graph_alloc_lower = TensorAllocationPlanner(config=config[TensorAllocationPlanner.PART]) + graph_transformer = graph_transformer or PipelineTransformer(config=config[PipelineTransformer.PART]) + self._graph_op_lower = graph_op_lower + self._graph_transformer = graph_transformer + self._graph_alloc_lower = graph_alloc_lower self._code_generator = code_generator @class_property @@ -42,16 +54,20 @@ def default_config(cls): config[cls.TARGET] = {} config[cls.TARGET][cls.COMPONENT] = {} config[cls.TARGET][cls.COMPONENT]['legacy-api'] = True + config[cls.TARGET][cls.COMPONENT][TensorAllocationPlanner.PART] = TensorAllocationPlanner.default_config config[cls.TARGET][cls.COMPONENT][uTensorLegacyCodeGenerator.PART] = uTensorLegacyCodeGenerator.default_config - config[cls.TARGET][cls.COMPONENT][uTensorRearchCodeGenerator.PART] = uTensorRearchCodeGenerator.default_config config[cls.TARGET][cls.COMPONENT][uTensorLegacyGraphLower.PART] = uTensorLegacyGraphLower.default_config + config[cls.TARGET][cls.COMPONENT][uTensorRearchCodeGenerator.PART] = uTensorRearchCodeGenerator.default_config config[cls.TARGET][cls.COMPONENT][uTensorRearchGraphLower.PART] = uTensorRearchGraphLower.default_config + config[cls.TARGET][cls.COMPONENT][PipelineTransformer.PART] = PipelineTransformer.default_config return config def apply(self, ugraph): - lower_ugraph = self._graph_lower.apply(ugraph) - self._code_generator.apply(lower_ugraph) - return lower_ugraph + self._graph_op_lower.apply(ugraph) + new_ugraph = self._graph_transformer.transform(ugraph) + self._graph_alloc_lower.apply(new_ugraph) + self._code_generator.apply(new_ugraph) + return new_ugraph def __call__(self, ugraph): return self.apply(ugraph) diff --git a/utensor_cgen/backend/utensor/_graph_lower/__init__.py b/utensor_cgen/backend/utensor/_graph_lower/__init__.py index 47767c38..84bb477d 100644 --- a/utensor_cgen/backend/utensor/_graph_lower/__init__.py +++ b/utensor_cgen/backend/utensor/_graph_lower/__init__.py @@ -1,2 +1 @@ -from ._mem_alloc import uTensorOfflineMemoryPlanner from ._op_lower import uTensorLegacyGraphLower, uTensorRearchGraphLower diff --git a/utensor_cgen/backend/utensor/_graph_lower/_mem_alloc.py b/utensor_cgen/backend/utensor/_graph_lower/_mem_alloc.py deleted file mode 100644 index ba99431c..00000000 --- a/utensor_cgen/backend/utensor/_graph_lower/_mem_alloc.py +++ /dev/null @@ -1,214 +0,0 @@ -from copy import deepcopy - -import numpy as np -import tensorflow as tf -from utensor_cgen.backend.base import BackendPart -from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP -from utensor_cgen.logger import logger -from utensor_cgen.utils import Configuration, class_property - - -class uTensorOfflineMemoryPlanner(BackendPart): - TARGET = 'utensor' - PART = 'offlinememory' - DATA_NAME = 'address' - - def __init__( - self, - config, - buff_size=100000, #1k bytes - unit_size=4, - ): - self.buff_size = buff_size - self.unit_size = unit_size - final_config = Configuration(self.default_config, config) - self._type = {} - self._type[np.dtype(tf.float32.as_numpy_dtype)] = final_config['size_float'] - self._type[np.dtype(tf.int32.as_numpy_dtype)] = final_config['size_int'] - self._type[np.dtype(tf.quint8.as_numpy_dtype)] = final_config['size_uint8_t'] - self._type[np.dtype(tf.qint8.as_numpy_dtype)] = final_config['size_uint8_t'] - self._type[np.dtype(tf.qint32.as_numpy_dtype)] = final_config['size_int'] - - def apply(self, ugraph): - new_ugraph = deepcopy(ugraph) - new_ugraph.setup_data_manager({self.DATA_NAME: " "}) - # use_def_table: dict, tensor_name -> {'start': op_idx, 'end': op_idx} - use_def_table = self._create_resource_table(new_ugraph) - allocate_table = dict() - allocate_success = self.allocate_graph(new_ugraph, allocate_table, use_def_table, self.buff_size, self.unit_size) - - if allocate_success: - for node_name in new_ugraph.topo_order: - in_t_infos = new_ugraph.ops_info[node_name].input_tensors - for in_o in in_t_infos: - if in_o.name in allocate_table: - new_ugraph.data_manager.address = (in_o.name, allocate_table[in_o.name]['offsetstart']) - out_t_infos = new_ugraph.ops_info[node_name].output_tensors - for out_o in out_t_infos: - if out_o.name in allocate_table: - new_ugraph.data_manager.address = (out_o.name, allocate_table[out_o.name]['offsetstart']) - return new_ugraph - return ugraph - - def _query_offset_fromallocate_table(self, allocate_table, start, end): - new_start = start - new_end = end - for key in allocate_table: - if allocate_table[key]['offsetstart'] >= start and allocate_table[key]['offsetend'] <= end: - continue - elif allocate_table[key]['offsetstart'] <= start and allocate_table[key]['offsetend'] >= start: - new_start = allocate_table[key]['offsetstart'] - if allocate_table[key]['offsetend'] >= end: - new_end = max(new_end, allocate_table[key]['offsetend']) - else: - new_end = max(end, new_end) - elif allocate_table[key]['offsetstart'] >= start and allocate_table[key]['offsetend'] >= start: - if allocate_table[key]['offsetend'] >= end: - new_end = max(new_end, allocate_table[key]['offsetend']) - else: - new_end = max(end, new_end) - return new_start, new_end - - def _query_time_fromallocate_table(self, allocate_table, start, end): - time_start = start - time_end = end - for key in allocate_table: - if allocate_table[key]['start'] >= start and allocate_table[key]['end'] <= end: - continue - elif allocate_table[key]['start'] <= start and allocate_table[key]['end'] >= start: - if allocate_table[key]['end'] >= end: - time_end = max(time_end, allocate_table[key]['end']) - else: - time_end = max(end, time_end) - elif allocate_table[key]['start'] >= start and allocate_table[key]['end'] >= start: - if allocate_table[key]['end'] >= end: - time_end = max(time_end, allocate_table[key]['end']) - else: - time_end = max(end, time_end) - return time_start, time_end - - def _query_result(self, allocate_table, offset, length, timestart, timeend): - for key in allocate_table: - mem_occupied = ( - (allocate_table[key]['offsetstart'] >= offset and allocate_table[key]['offsetstart'] <= offset + length) or - (allocate_table[key]['offsetstart'] <= offset and allocate_table[key]['offsetend'] >= offset) - ) - life_span_occupied = ( - (allocate_table[key]['start'] >= timestart and allocate_table[key]['start'] <= timeend) or - (allocate_table[key]['start'] <= timestart and allocate_table[key]['end'] >= timestart) - ) - if mem_occupied and life_span_occupied: - return True - return False - - def allocate_tensor(self, tensors, tensor_index, allocate_table, use_def_table, buffer_size, unit_size): - if tensor_index == len(tensors): - return True - if tensors[tensor_index].name in allocate_table: - return self.allocate_tensor(tensors, tensor_index + 1, allocate_table, use_def_table, buffer_size, unit_size) - - tensor = tensors[tensor_index] - candidates = self._get_candidates(allocate_table, use_def_table, buffer_size, unit_size, tensor) - if not candidates: - return False - success = False - for candidate in candidates: - self._update_allocation_table(allocate_table, use_def_table, tensor, candidate, candidate + tensor.size) - success = self.allocate_tensor(tensors, tensor_index + 1, allocate_table, use_def_table, buffer_size, unit_size) - if success: - break - else: - self._remove_allocate_table(allocate_table, tensor) - return success - - def allocate_graph(self, ugraph, allocate_table, use_def_table, buffer_size, unit_size): - tensors = [] - - for node_name in ugraph.topo_order: - in_t_infos = [ - tensor - for tensor in ugraph.ops_info[node_name].input_tensors - if tensor.op.op_type != 'Inline' - ] - out_t_infos = [ - tensor - for tensor in ugraph.ops_info[node_name].output_tensors - if tensor.op.op_type != 'Inline' - ] - tensors.extend(in_t_infos) - tensors.extend(out_t_infos) - - succ = self.allocate_tensor(tensors, 0, allocate_table, use_def_table, buffer_size, unit_size) - return succ - - def _check(self, allocate_table, use_def_table, tensor, tensor_offset_start, tensor_offset_end): - valid = False - timestart = use_def_table[tensor.name]['start'] - timeend = use_def_table[tensor.name]['end'] - offset, length = self._query_offset_fromallocate_table(allocate_table, tensor_offset_start, tensor_offset_end) - timestart, timeend = self._query_time_fromallocate_table(allocate_table, timestart, timeend) - occupied = self._query_result(allocate_table, offset, length, timestart, timeend) - if not occupied: - valid = True - return valid - - def _get_candidates(self, allocate_table, use_def_table, buffer_size, unit_size, in_o): - ret = [] - for i in range(0, buffer_size, unit_size): - if self._check(allocate_table, use_def_table, in_o, i, i + in_o.size * self._type[in_o.dtype]): - ret.append(i) - return ret - - def _update_allocation_table( - self, - allocate_table, - use_def_table, - tensor, - offset_start, - offset_end - ): - time_start = use_def_table[tensor.name]['start'] - time_end = use_def_table[tensor.name]['end'] - attribute = dict() - attribute['start'] = time_start - attribute['end'] = time_end - attribute['offsetstart'] = offset_start - attribute['offsetend'] = offset_end - allocate_table[tensor.name] = attribute - return allocate_table - - def _remove_allocate_table(self, allocate_table, tensor): - del allocate_table[tensor.name] - - def _create_resource_table(self, ugraph): - resource_table = dict() - len_map = { - op_name: idx - for idx, op_name in enumerate(ugraph.topo_order) - } - for node_name in ugraph.topo_order: - for tensor_info in ugraph.ops_info[node_name].input_tensors: - if tensor_info.name not in resource_table: - lifetime = dict() - lifetime['start'] = len_map[node_name] - lifetime['end'] = len_map[node_name] - resource_table[tensor_info.name] = lifetime - resource_table[tensor_info.name]['end']= len_map[node_name] - - for outtensor in ugraph.ops_info[node_name].output_tensors: - if outtensor.name not in resource_table: - lifetime = dict() - lifetime['start'] = len_map[node_name] - lifetime['end'] = len_map[node_name] - resource_table[outtensor.name] = lifetime - - return resource_table - - @class_property - def default_config(cls): - config = {} - config['size_float'] = 4 - config['size_int'] = 4 - config['size_uint8_t'] = 1 - - return config diff --git a/utensor_cgen/backend/utensor/code_generator/legacy/_code_generator.py b/utensor_cgen/backend/utensor/code_generator/legacy/_code_generator.py index 84892809..80650c36 100644 --- a/utensor_cgen/backend/utensor/code_generator/legacy/_code_generator.py +++ b/utensor_cgen/backend/utensor/code_generator/legacy/_code_generator.py @@ -1,23 +1,15 @@ # -*- coding:utf8 -*- import logging import os -import pickle -from tempfile import NamedTemporaryFile -import numpy as np from utensor_cgen.backend.base import BackendPart from utensor_cgen.backend.utensor.snippets.composer import Composer from utensor_cgen.backend.utensor.snippets.legacy import ( CommentSnippet, ContextGlobalArrayContainer, ContextHeaderSnippet, - ContextSnippetsContainer, CreateTensorBinarySnippet, - CreateTensorIdxSnippet) -from utensor_cgen.frontend import FrontendSelector -from utensor_cgen.ir import uTensorGraph + ContextSnippetsContainer) from utensor_cgen.transformer.optimizer import RefCntOptimizer -from utensor_cgen.transformer.pipeline import TransformerPipeline from utensor_cgen.utils import (Configuration, LazyLoader, - NamescopedKWArgsParser, class_property, - parse_toml) + NamescopedKWArgsParser, class_property) from ._operators import OperatorFactory @@ -25,7 +17,7 @@ _logger = logging.getLogger('utensor-cli') tf = LazyLoader('tensorflow') -class uTensorLegacyCodeGenerator(BackendPart, object): +class uTensorLegacyCodeGenerator(BackendPart): TARGET = 'utensor' PART = 'legacy_code_generator' @@ -38,8 +30,6 @@ def __init__(self, config): os.makedirs(self.params_dir) self.embed_data_dir = final_config['embed_params_dir'].rstrip('/') self.model_dir = final_config['model_dir'].rstrip('/') - self.trans_methods = final_config['transform_methods'] - self.save_graph = final_config['save_graph'] self.debug_cmt = final_config['debug_cmt'] @classmethod @@ -64,24 +54,10 @@ def apply(self, ugraph): opFactory = OperatorFactory() - self._check_non_quantized(ugraph) - _logger.info("Transforming graph: %s", ugraph.name) - _logger.info("Transform pipeline: %s", ' -> '.join(self.trans_methods)) - quant_ugraph = self._transform_graph(ugraph, - self.trans_methods) - _logger.info('Graph transormation done') - - if self.save_graph: - _logger.info('Saving transformed graph') - pkl_fname = "quant_{}.pkl".format(ugraph.name) - with open(pkl_fname, 'wb') as fid: - pickle.dump(quant_ugraph, fid) - _logger.info('{} saved'.format(pkl_fname)) - if not os.path.exists(os.path.join(self.params_dir, ugraph.name)): os.makedirs(os.path.join(self.params_dir, ugraph.name)) - for op_id, op_name in enumerate(quant_ugraph.topo_order): - op_info = quant_ugraph.ops_info[op_name] + for op_id, op_name in enumerate(ugraph.topo_order): + op_info = ugraph.ops_info[op_name] op_type = op_info.op_type # TODO: better abstraction for snippet if op_type == "Placeholder": @@ -113,7 +89,7 @@ def apply(self, ugraph): # generate cpp/hpp files if not os.path.exists(self.model_dir): os.makedirs(self.model_dir) - if any([method == 'inline' for method in self.trans_methods]): + if weight_container.snippets: _logger.info("Generate weight file: %s", weight_header_fname) with open(os.path.join(self.model_dir, weight_header_fname), "w") as wf: wf.write('// Auto generated by utensor-cli\n\n') @@ -137,46 +113,5 @@ def default_config(cls): config['params_dir'] = 'data' config['embed_params_dir'] = '/fs/data' config['model_dir'] = 'models' - config['transform_methods'] = [ - "dropout(name_pattern=r'(dropout[_\w\d]*)/.*')", - "linear_reorder", - "quantize", - "conv_pool", - "inline", - "biasAdd", - "remove_id_op", - "fake_gather_v2", - "refcnt", - ] - config['save_graph'] = False config['debug_cmt'] = False return config - - @classmethod - def _check_non_quantized(cls, ugraph): - is_quantized = False - for op_info in ugraph.ops_info.values(): - if op_info.op_type in [ - "Dequantize", "QuantizedMaxPool", - "QuantizeV2", "QuantizedMatMul", - "QuantizedRelu", "QuantizedAdd", - "RequantizationRange", - "Requantize", - "QuantizedReshape", - "QuantizedConv2D" - ]: - is_quantized = True - break - if is_quantized: - _logger.warning(("Expecting non-quantized graph, " - "graph transformation/optimization might not work properly")) - - def _transform_graph(self, ugraph, methods): - pipeline = TransformerPipeline(methods) - return pipeline.transform(ugraph) - - def _tf_load_graph_def(self, pb_fname): - with tf.gfile.FastGFile(pb_fname, 'rb') as fid: - graph_def = tf.GraphDef() - graph_def.ParseFromString(fid.read()) - return graph_def diff --git a/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py b/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py index 3a31791f..e43980e6 100644 --- a/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py +++ b/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py @@ -6,13 +6,13 @@ import idx2numpy as idx2np import numpy as np +from utensor_cgen.backend.graph_lower import TensorAllocationPlanner from utensor_cgen.backend.utensor.snippets.legacy import * # pylint: disable=W0401,W0614 from utensor_cgen.ir import OperationInfo, TensorInfo from utensor_cgen.ir.converter import (AttrValueConverter, DataTypeConverter, GenericTensorConverterMixin) from utensor_cgen.logger import logger from utensor_cgen.matcher import OpEqualityDelegate, _morphism -from utensor_cgen.transformer.mem_alloc import TensorAllocationTransformer from utensor_cgen.transformer.optimizer import RefCntOptimizer from utensor_cgen.utils import LazyLoader, NamescopedKWArgsParser @@ -223,10 +223,10 @@ def __init__(self, op_info, **kwargs): ) ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] @@ -290,10 +290,10 @@ def __init__(self, op_info, **kwargs): ) ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] @@ -321,10 +321,10 @@ def __init__(self, op_info, **kwargs): ) ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] @@ -543,10 +543,10 @@ def __init__(self, op_info, **kwargs): ) ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] @@ -609,10 +609,10 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] @@ -702,10 +702,10 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] @@ -779,10 +779,10 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] @@ -809,10 +809,10 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] @@ -856,9 +856,9 @@ def __init__(self, op_info, **kwargs): op_info.op_attr) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: - address = [alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors] + address = [alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors] else: address = [] self._snippet = RequantizationRangeOpSnippet(inputs, outputs, out_dtype, @@ -881,10 +881,10 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] @@ -909,10 +909,10 @@ def __init__(self, op_info, **kwargs): ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) dtype = op_info.input_tensors[0].dtype - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationTransformer.KWARGS_NAMESCOPE) + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) if alloc_plan is not None: address = [ - alloc_plan.plan[tensor.name].start for tensor in op_info.output_tensors + alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors ] else: address = [] diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py index 65c53e1d..90469b8a 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py @@ -26,26 +26,19 @@ def __init__(self, config): self.src_fname = final_config['src_fname'] self.header_fname = final_config['header_fname'] self.params_dir = final_config['params_dir'].rstrip('/') - self.trans_methods = final_config['transform_methods'] self.meta_data_pool_size = final_config['meta_data_pool_size'] self.ram_data_pool_size = final_config['ram_data_pool_size'] self.model_dir = final_config['model_dir'].rstrip('/') - self.save_graph = final_config['save_graph'] def apply(self, ugraph): src_fname = self.src_fname if src_fname == 'None': src_fname = '{}.cpp'.format(ugraph.name) - pipeline = TransformerPipeline(self.trans_methods) - new_ugraph = pipeline.transform(ugraph) - if self.save_graph: - with open('transformed_{}.pkl'.format(ugraph.name), 'wb') as fid: - pickle.dump(new_ugraph, fid) # 1. find all ops required ops = set() placeholders = set() tensor_var_map = {} # tensor name -> var name - for op_info in new_ugraph.ops_info.values(): + for op_info in ugraph.ops_info.values(): for tensor in op_info.output_tensors: tensor_var_name = re.sub(r'[:/]', '', tensor.name) tensor_var_map[tensor.name] = tensor_var_name @@ -63,7 +56,7 @@ def apply(self, ugraph): ops_map[op] = op_var_name declare_snippets.append(op.get_declare_snippet(op_var_name)) weight_snippets = [] - for op_info in filter(lambda op_info: op_info.op_type == 'Inline', new_ugraph.ops_info.values()): + for op_info in filter(lambda op_info: op_info.op_type == 'Inline', ugraph.ops_info.values()): tensor = op_info.output_tensors[0] buffer_name = 'data_{}'.format(tensor.name.replace(':', '_').replace('/', '_')) weight_snippets.append( @@ -83,8 +76,8 @@ def apply(self, ugraph): ) # 3. evaluation snippets eval_snippets = [] - for op_name in new_ugraph.topo_order: - op_info = new_ugraph.ops_info[op_name] + for op_name in ugraph.topo_order: + op_info = ugraph.ops_info[op_name] if op_info.op_type in ['Placeholder', 'Inline']: continue op = OperatorFactory.get_opertor(op_info) @@ -94,13 +87,13 @@ def apply(self, ugraph): ) template_vars = {} template_vars['model_name'] = ugraph.name - template_vars['meta_data_pool_size'] = self._compute_meta_data_size(new_ugraph) - template_vars['ram_data_pool_size'] = self._compute_ram_data_size(new_ugraph) + template_vars['meta_data_pool_size'] = self._compute_meta_data_size(ugraph) + template_vars['ram_data_pool_size'] = self._compute_ram_data_size(ugraph) template_vars['placeholders'] = placeholders template_vars['out_tensor_var_names'] = [ tensor_var_map[tensor.name] for tensor in chain(*[ - new_ugraph.ops_info[op_name].output_tensors - for op_name in new_ugraph.output_nodes + ugraph.ops_info[op_name].output_tensors + for op_name in ugraph.output_nodes ]) ] # 4. write files @@ -137,20 +130,8 @@ def default_config(cls): config['header_fname'] = 'None' config['params_dir'] = 'data' config['model_dir'] = 'models' - config['transform_methods'] = [ - 'dropout(name_pattern=r"(dropout[_\w\d]*)/.*")', - # 'linear_reorder', - # 'quantize', - # 'conv_pool', - 'inline', - 'biasAdd', - 'remove_id_op', - 'fake_gather_v2', - # 'refcnt' - ] config['meta_data_pool_size'] = 'auto' config['ram_data_pool_size'] = 'auto' - config['save_graph'] = False return config def _compute_meta_data_size(self, ugraph): diff --git a/utensor_cgen/backend/utensor/snippets/_base.py b/utensor_cgen/backend/utensor/snippets/_base.py index 0d03add4..c21cb721 100644 --- a/utensor_cgen/backend/utensor/snippets/_base.py +++ b/utensor_cgen/backend/utensor/snippets/_base.py @@ -62,6 +62,10 @@ def __init__(self, snippets=None): self._snippets = snippets for snp in self._snippets: self.__headers__.update(snp.headers) + + @property + def snippets(self): + return self._snippets def add_snippet(self, snippet): """Add snippet into containers diff --git a/utensor_cgen/ir/misc/graph_viz.py b/utensor_cgen/ir/misc/graph_viz.py index f4f7efc5..7b18578f 100644 --- a/utensor_cgen/ir/misc/graph_viz.py +++ b/utensor_cgen/ir/misc/graph_viz.py @@ -1,5 +1,3 @@ -import os -from math import ceil, log10 from random import random, seed import matplotlib.pyplot as plt @@ -80,53 +78,32 @@ class _MemallcVisualizer(object): def viz_memalloc( cls, ugraph, - out_fname=None, split_on_large_graph=True, num_tensors_per_split=20, - figsize=None, + figsize=None, fontsize=12, - lw=15, + lw=12, cmap=_cm.BrBG_r, rand_seed=1111 ): seed(rand_seed) - if TensorAllocationTransformer.KWARGS_NAMESCOPE not in ugraph.attributes: + if TensorAllocationPlanner.KWARGS_NAMESCOPE not in ugraph.attributes: logger.info('No tensor allocation plan to visualize: %s', ugraph.name) return plt.Figure() - alloc_plan = ugraph.attributes[TensorAllocationTransformer.KWARGS_NAMESCOPE] - topo_tensors = [] - visited_tensors = set() - for op_name in ugraph.topo_order: - op_info = ugraph.ops_info[op_name] - for tensor in op_info.input_tensors: - if tensor.name in alloc_plan.plan and tensor not in visited_tensors: - topo_tensors.append(tensor) - visited_tensors.add(tensor) - for tensor in ugraph.output_tensors: - if tensor.name in alloc_plan.plan and tensor not in visited_tensors: - topo_tensors.append(tensor) - visited_tensors.add(tensor) - if out_fname: - figs = cls._draw_figs(topo_tensors, alloc_plan, cmap, figsize, fontsize, lw, split_on_large_graph, num_tensors_per_split) - if len(figs) == 1: - logger.info('saving tensor mem allocation to %s', out_fname) - figs[0].savefig(out_fname) - else: - num_digits = ceil(log10(len(figs))) - file_format = '{{}}_{{:0{}d}}{{}}'.format(num_digits) - for i, fig in enumerate(figs, 1): - fname, ext = os.path.splitext(out_fname) - fname = file_format.format(fname, i, ext) - logger.info('saving tensor mem allocation to %s', fname) - fig.savefig(fname) + alloc_plan = ugraph.attributes[TensorAllocationPlanner.KWARGS_NAMESCOPE] + topo_tensors = sorted( + [tensor_name for tensor_name in alloc_plan.plan], + key=lambda tensor_name: alloc_plan.plan[tensor_name].time_slot_start + ) + return cls._draw_figs(topo_tensors, alloc_plan, cmap, figsize, fontsize, lw, split_on_large_graph, num_tensors_per_split) @classmethod def _draw_figs(cls, topo_tensors, alloc_plan, cmap, figsize, fontsize, lw, split_on_large_graph, num_tensors_per_split): - xmins = [alloc_plan.plan[tensor.name].start for tensor in topo_tensors] - xmaxs = [alloc_plan.plan[tensor.name].end for tensor in topo_tensors] + xmins = [alloc_plan.plan[tensor_name].offset_start for tensor_name in topo_tensors] + xmaxs = [alloc_plan.plan[tensor_name].offset_end for tensor_name in topo_tensors] colors = [cmap(random()) for _ in alloc_plan.plan] - labels = [tensor.name for tensor in topo_tensors] - sizes = [alloc_plan.plan[tensor.name].size for tensor in topo_tensors] + labels = topo_tensors[:] + sizes = [alloc_plan.plan[tensor_name].size for tensor_name in topo_tensors] if split_on_large_graph: xmin_chunks = [xmins[i:i+num_tensors_per_split] for i in range(0, len(xmins), num_tensors_per_split)] xmax_chunks = [xmaxs[i:i+num_tensors_per_split] for i in range(0, len(xmaxs), num_tensors_per_split)] @@ -137,15 +114,15 @@ def _draw_figs(cls, topo_tensors, alloc_plan, cmap, figsize, fontsize, lw, split xmin_chunks = [xmins] xmax_chunks = [xmaxs] color_chunks = [colors] - label_chunks = [labe] + label_chunks = [labels] size_chunks = [sizes] figs = [] - for i, (xmins, xmaxs, colors, sizes) in enumerate(zip(xmin_chunks, xmax_chunks, color_chunks, size_chunks)): + for i, (xmins, xmaxs, colors, labels, sizes) in enumerate(zip(xmin_chunks, xmax_chunks, color_chunks, label_chunks, size_chunks)): fig, _ = plt.subplots(1, 1) ys = [len(xmins)-i for i in range(len(xmins))] for y, xmin, xmax, color, size in zip(ys, xmins, xmaxs, colors, sizes): plt.hlines(y, xmin, xmax, lw=lw, colors=color) - plt.text(xmax+lw*5, y-0.2*lw/3, '{} bytes'.format(size), fontdict={'fontsize': fontsize}) + plt.text(xmax+lw*10, y-0.01*lw, '{} bytes'.format(size), fontdict={'fontsize': fontsize}) plt.xlabel('Offset (bytes)', fontdict={'fontsize': fontsize}) plt.yticks(ys, labels, fontsize=fontsize) plt.xticks(fontsize=fontsize) @@ -171,4 +148,4 @@ def _draw_figs(cls, topo_tensors, alloc_plan, cmap, figsize, fontsize, lw, split viz_memalloc = _MemallcVisualizer.viz_memalloc # FIXME: cyclic import -from utensor_cgen.transformer.mem_alloc import TensorAllocationTransformer # isort:skip +from utensor_cgen.backend.graph_lower.generic_graph_lower import TensorAllocationPlanner # isort:skip diff --git a/utensor_cgen/transformer/__init__.py b/utensor_cgen/transformer/__init__.py index 74f846c6..1e683fd6 100644 --- a/utensor_cgen/transformer/__init__.py +++ b/utensor_cgen/transformer/__init__.py @@ -4,7 +4,6 @@ from .conv_pool import * from .graph_viz import * from .linear_reoder import * -from .mem_alloc import * from .ns_transformer import * from .optimizer import * from .quantize import * diff --git a/utensor_cgen/transformer/mem_alloc.py b/utensor_cgen/transformer/mem_alloc.py deleted file mode 100644 index 1e5bb8d3..00000000 --- a/utensor_cgen/transformer/mem_alloc.py +++ /dev/null @@ -1,156 +0,0 @@ -import pickle -from collections import Counter, defaultdict, namedtuple -from itertools import chain, combinations, product - -from ortools.sat.python import cp_model -from utensor_cgen.logger import logger -from utensor_cgen.utils import timed - -from .base import Transformer -from .pipeline import TransformerPipeline - -__all__ = ['TensorAllocationTransformer'] - -MemorySpan = namedtuple('MemorySpan', ['start', 'end', 'size']) -AllocationPlan = namedtuple('AllocationPlan', ['plan', 'total_size']) - -@TransformerPipeline.register_transformer -class TensorAllocationTransformer(Transformer): - """ - Offline Tensor Allocation Optimizer - - analyse tensor lifetime and find the optimal allocation offset in the managed memory pool - - :param max_pool_size: the size of the memory pool (default: 1 KB) - :type max_pool_size: int - - :param include_inputs: include the input tensors (Placeholder) in the allocation plan - :type include_inputs: bool - - :param out_fname: the file name of memory allocation visualization (will NOT generate if not given) - :type out_fname: str - - :param aesthetic_kwargs: the keyword arguments controlling the aesthetic of the visualization of allocation plan - :type aesthetic_kwargs: dict - """ - METHOD_NAME = "tensor_alloc" - KWARGS_NAMESCOPE = "_tensor_alloc" - - def __init__( - self, - prune_graph=False, - max_pool_size=1024*1024, # 1k bytes - include_inputs=False, - out_fname=None, - **aesthetic_kwargs - ): - super(TensorAllocationTransformer, self).__init__(prune_graph=prune_graph) - self.max_pool_size = max_pool_size - self.include_inputs = include_inputs - self.out_fname = out_fname - self.aesthetic_kwargs = aesthetic_kwargs - - def transform(self, ugraph): - ref_cnts = Counter() - for op_name in ugraph.topo_order: - op_info = ugraph.ops_info[op_name] - for tensor in op_info.input_tensors: - ref_cnts[tensor.name] += 1 - tensors_to_schedule = set() - tensors_to_ignore = set( - chain(*[ - op.output_tensors - for op in ugraph.get_ops_by_type('Inline') - ]) - ) - if not self.include_inputs: - tensors_to_ignore.update( - chain(*[ - op.output_tensors - for op in ugraph.get_ops_by_type('Placeholder') - ]) - ) - nonoverlap_map = defaultdict(set) - for op_name in ugraph.topo_order: - op_info = ugraph.ops_info[op_name] - # ignore inline ops - if op_info.op_type == 'Inline': - continue - # ignore placeholders if not included - if not self.include_inputs and op_info.op_type == 'Placeholder': - continue - # no overlapping between input/output tensors - for in_tensor, out_tensor in product(op_info.input_tensors, op_info.output_tensors): - if not in_tensor in tensors_to_ignore: - nonoverlap_map[out_tensor].add(in_tensor) - tensors_to_schedule.add(in_tensor) - # no overlapping among input tensors - for in_tensor1, in_tensor2 in combinations( - filter(lambda tensor: tensor not in tensors_to_ignore, op_info.input_tensors), - 2 - ): - nonoverlap_map[in_tensor1].add(in_tensor2) - # no overlapping between output tensors and all evaluated tensors - for known_tensor, out_tensor in product(tensors_to_schedule, op_info.output_tensors): - if ref_cnts[known_tensor.name] > 0: - nonoverlap_map[out_tensor].add(known_tensor) - tensors_to_schedule.update(op_info.output_tensors) - for in_tensor in op_info.input_tensors: - ref_cnts[in_tensor.name] -= 1 - for out_tensor1, out_tensor2 in combinations(ugraph.output_tensors, 2): - nonoverlap_map[out_tensor1].add(out_tensor2) - tensors_to_schedule.update(ugraph.output_tensors) - alloc_plan = self._solve_opt_plan(tensors_to_schedule, nonoverlap_map) - if alloc_plan is not None: - ugraph.attributes[self.KWARGS_NAMESCOPE] = alloc_plan - if self.out_fname: - fig = viz_memalloc(ugraph=ugraph, out_fname=self.out_fname, **self.aesthetic_kwargs) - with open('{}.pkl'.format(self.out_fname), 'wb') as fid: - pickle.dump(fig, fid) - logger.info('matplotlib figure object dumped (pickle): %s', fid.name) - return ugraph - - @timed - def _solve_opt_plan(self, tensors_to_schedule, nonoverlap_map): - model = cp_model.CpModel() - inter_vars = {} - tensor_allocs = {} - for tensor in tensors_to_schedule: - var_start = model.NewIntVar(0, self.max_pool_size, '{}_start'.format(tensor.name)) - var_end = model.NewIntVar(0, self.max_pool_size, '{}_end'.format(tensor.name)) - size = tensor.size * tensor.dtype.itemsize - intv_var = model.NewIntervalVar(var_start, size, var_end, '{}_alloc'.format(tensor.name)) - inter_vars[tensor.name] = intv_var - tensor_allocs[tensor.name] = MemorySpan(var_start, var_end, size) - for tensor in tensors_to_schedule: - inter_var = inter_vars[tensor.name] - nonoverlap_vars = [inter_vars[t.name] for t in nonoverlap_map[tensor]] - for other in nonoverlap_vars: - model.AddNoOverlap([inter_var, other]) - var_mempool_size = model.NewIntVar(0, self.max_pool_size, 'mempool_size') - model.AddMaxEquality(var_mempool_size, [alloc.end for alloc in tensor_allocs.values()]) - model.Minimize(var_mempool_size) - - solver = cp_model.CpSolver() - status = solver.Solve(model) - alloc_plan = None - if solver.StatusName(status) == 'OPTIMAL': - opt_mempool_size = solver.Value(var_mempool_size) - plan = {} - for name, alloc in tensor_allocs.items(): - plan[name] = MemorySpan( - start=solver.Value(alloc.start), - end=solver.Value(alloc.end), - size=alloc.size - ) - logger.info('optimal tensor allocation plan solved, memory span: %i bytes', opt_mempool_size) - alloc_plan = AllocationPlan( - plan=plan, - total_size=opt_mempool_size - ) - else: - logger.info('tensor allocation plan not found, status: %s', solver.StatusName(status)) - return alloc_plan - -# FIXME: cyclic import -from utensor_cgen.ir.misc.graph_viz import viz_memalloc # isort:skip diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index 095c53c0..e612be1b 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -509,7 +509,18 @@ def get(self, key, default=None): elif key in self._defaults: value = self._defaults[key] return value - + + def items(self): + config = self.to_dict() + return config.items() + + def to_dict(self): + config = deepcopy(self._defaults) + config.update(self._user_config) + return config + + def __setitem__(self, key, value): + self._user_config[key] = value def __getitem__(self, key): if key not in self: From 444ddbe04a5aeeef248c7f04298e4629d5e68fb1 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sat, 7 Mar 2020 15:02:33 +0800 Subject: [PATCH 047/117] update tests --- tests/test_backend/test_utensor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_backend/test_utensor.py b/tests/test_backend/test_utensor.py index d9d0bcc1..f6ef81e5 100644 --- a/tests/test_backend/test_utensor.py +++ b/tests/test_backend/test_utensor.py @@ -24,9 +24,9 @@ def test_legacy_utensor(mlp_ugraph): @pytest.mark.slow_test def test_offlinememory(mlp_ugraph): - from utensor_cgen.backend.utensor import uTensorOfflineMemoryPlanner + from utensor_cgen.backend.graph_lower.generic_graph_lower import BrutalForceMemoryPlanner - uTensorOfflineMemoryPlanner(config={ + BrutalForceMemoryPlanner(config={ 'size_float': 4, 'size_int': 4, 'size_uint8_t': 1 From 11bc08bbcc6cb08b884b62118558aa9b25e1d7d9 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sat, 7 Mar 2020 16:28:53 +0800 Subject: [PATCH 048/117] Add test for cli speed --- tests/test_cli.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tests/test_cli.py diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 00000000..95f3007d --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,14 @@ +import time + + +def test_cli_load_speed(): + from utensor_cgen.cli import cli + + durations = [] + for _ in range(1000): + start_time = time.time() + cli.main(args=['-h'], standalone_mode=False, ) + end_time = time.time() + durations.append(end_time - start_time) + mean_duration = sum(durations) / len(durations) + assert mean_duration <= 0.005, 'cli is too slow: {:0.5f}'.format(mean_duration) From fd749f4e0b85205be8f9ab6f2e605610fbb31034 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sat, 7 Mar 2020 16:35:08 +0800 Subject: [PATCH 049/117] circle-ci: utf8 local --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index db736b73..96c9de36 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ jobs: - run: pip3 install . - run: name: Test - command: pytest -vv tests -m 'not slow_test' + command: LC_ALL=C.UTF-8 LANG=C.UTF-8 pytest -vv tests -m 'not slow_test' #- run: genhtml main_coverage.info --output-directory /tmp/coverage #- store_test_results: # path: /tmp/test_results From 1ccc721854e62a6e8437dce45ea0b34f6a006cda Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 8 Mar 2020 13:37:20 +0800 Subject: [PATCH 050/117] making tensor alloc lowering optional --- utensor_cgen/backend/graph_lower/generic_graph_lower.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index b8c00172..7939fe8f 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -13,6 +13,7 @@ import numpy as np import tensorflow as tf from ortools.sat.python import cp_model + from utensor_cgen.backend.base import BackendPart from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP from utensor_cgen.logger import logger @@ -92,9 +93,13 @@ def __init__(self, config): if aesthetic_kwargs['figsize'] == 'None': aesthetic_kwargs['figsize'] = None self.aesthetic_kwargs = aesthetic_kwargs.to_dict() + self.enabled = self.config['enabled'] self.dtype_size_map = self._parse_dtype_size_map(self.config) def apply(self, ugraph): + if not self.enabled: + # not enabled, do nothing + return time_alloc_plan = ugraph.attributes.get( TopoOrderTensorTimeslotPlanner.KWARGS_NAMESCOPE ) @@ -238,6 +243,7 @@ def default_config(cls): 'lw': 12, 'rand_seed': 1111 }, + 'enabled': True, 'dtype_size_map': { 'float': 4, 'double': 8, From d8a17cfd41a9e954f4a0734d58a24e08282079dc Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 8 Mar 2020 15:21:58 +0800 Subject: [PATCH 051/117] update tests and add comments/docstrings --- tests/test_utils/conftest.py | 37 +++++++++++++++++++ tests/test_utils/test_config.py | 8 ++++ utensor_cgen/backend/graph_lower/__init__.py | 5 +++ utensor_cgen/backend/utensor/_backend_impl.py | 16 +++----- utensor_cgen/utils.py | 6 +++ 5 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 tests/test_utils/test_config.py diff --git a/tests/test_utils/conftest.py b/tests/test_utils/conftest.py index e69de29b..15b15f0d 100644 --- a/tests/test_utils/conftest.py +++ b/tests/test_utils/conftest.py @@ -0,0 +1,37 @@ +import pytest + + +@pytest.fixture(name='config_user_values') +def config_user_values(): + from utensor_cgen.utils import Configuration + + return Configuration( + defaults={ + 'x': 1, + 'y': 2 + }, + user_config={ + 'x': 2 + } + ) + +@pytest.fixture(name='config_nested') +def config_nested(): + from utensor_cgen.utils import Configuration + + return Configuration( + defaults={ + 'dict1': { + 'inner': { + 'x': 3 + } + } + }, + user_config={ + 'dict1': { + 'inner': { + 'x': 2 + } + } + } + ) diff --git a/tests/test_utils/test_config.py b/tests/test_utils/test_config.py new file mode 100644 index 00000000..1b2de543 --- /dev/null +++ b/tests/test_utils/test_config.py @@ -0,0 +1,8 @@ +def test_user_values(config_user_values): + assert config_user_values['x'] == 2 + assert config_user_values['y'] == 2 + +def test_config_nested(config_nested): + assert isinstance(config_nested['dict1'], type(config_nested)) + assert isinstance(config_nested['dict1']['inner'], type(config_nested)) + assert config_nested['dict1']['inner']['x'] == 2 diff --git a/utensor_cgen/backend/graph_lower/__init__.py b/utensor_cgen/backend/graph_lower/__init__.py index 47024bed..403c0958 100644 --- a/utensor_cgen/backend/graph_lower/__init__.py +++ b/utensor_cgen/backend/graph_lower/__init__.py @@ -1 +1,6 @@ +r"""Generic Graph Lowering + +Any graph lower exported within this module should be generic. +That is, it should work with any uTensorGraph for any backend. +""" from .generic_graph_lower import TensorAllocationPlanner diff --git a/utensor_cgen/backend/utensor/_backend_impl.py b/utensor_cgen/backend/utensor/_backend_impl.py index 2f40d734..129d831a 100644 --- a/utensor_cgen/backend/utensor/_backend_impl.py +++ b/utensor_cgen/backend/utensor/_backend_impl.py @@ -1,6 +1,6 @@ from utensor_cgen.backend.base import Backend -from utensor_cgen.utils import (Configuration, LazyAttrib, LazyLoader, - class_property, parse_toml) +from utensor_cgen.utils import (LazyAttrib, LazyLoader, class_property, + parse_toml) code_generator = LazyLoader(submod_name='backend.utensor.code_generator') transformer = LazyLoader(submod_name='backend.transformer') @@ -19,21 +19,15 @@ class uTensorBackend(Backend): TARGET = 'utensor' - def __init__(self, + def __init__( + self, config, code_generator=None, graph_transformer=None, graph_op_lower=None, graph_alloc_lower=None, ): - default_config = self.default_config[self.TARGET][self.COMPONENT] - config = Configuration(default_config, config.get( - self.TARGET, - {self.COMPONENT: {}} - ).get( - self.COMPONENT, {} - ) - ) + config = self.config[self.TARGET][self.COMPONENT] if config['legacy-api']: code_generator = code_generator or uTensorLegacyCodeGenerator(config=config[uTensorLegacyCodeGenerator.PART]) graph_op_lower = graph_op_lower or uTensorLegacyGraphLower(config=config[uTensorLegacyGraphLower.PART]) diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index e612be1b..b6c12178 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -509,7 +509,13 @@ def get(self, key, default=None): elif key in self._defaults: value = self._defaults[key] return value + + def keys(self): + return self.to_dict().keys() + def values(self): + return self.to_dict().values() + def items(self): config = self.to_dict() return config.items() From af52ec841227ee3d8d1e994a6ae95d211e226239 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 8 Mar 2020 15:59:59 +0800 Subject: [PATCH 052/117] fix bug and update tests --- tests/test_backend/test_utensor.py | 8 ++++---- tests/test_utils/conftest.py | 5 +++-- tests/test_utils/test_config.py | 1 + .../backend/graph_lower/generic_graph_lower.py | 2 +- utensor_cgen/backend/utensor/_backend_impl.py | 14 +++++++------- utensor_cgen/utils.py | 10 ++++++++-- 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/tests/test_backend/test_utensor.py b/tests/test_backend/test_utensor.py index f6ef81e5..89770c22 100644 --- a/tests/test_backend/test_utensor.py +++ b/tests/test_backend/test_utensor.py @@ -8,18 +8,18 @@ def test_legacy_utensor(mlp_ugraph): this_dir = os.path.dirname(__file__) - uTensorBackend(config={ + backend = uTensorBackend(config={ 'utensor': { 'backend': { 'legacy-api': True, - 'code_generator': { + 'legacy_code_generator': { 'model_dir': os.path.join(this_dir, 'models'), 'params_dir': os.path.join(this_dir, 'data'), }, - 'graph_lower': {} }, } - }).apply(mlp_ugraph) + }) + backend.apply(mlp_ugraph) @pytest.mark.slow_test diff --git a/tests/test_utils/conftest.py b/tests/test_utils/conftest.py index 15b15f0d..a310b8f1 100644 --- a/tests/test_utils/conftest.py +++ b/tests/test_utils/conftest.py @@ -23,14 +23,15 @@ def config_nested(): defaults={ 'dict1': { 'inner': { - 'x': 3 + 'x': 3, + 'y': 4 } } }, user_config={ 'dict1': { 'inner': { - 'x': 2 + 'x': 2, } } } diff --git a/tests/test_utils/test_config.py b/tests/test_utils/test_config.py index 1b2de543..1a054fa7 100644 --- a/tests/test_utils/test_config.py +++ b/tests/test_utils/test_config.py @@ -6,3 +6,4 @@ def test_config_nested(config_nested): assert isinstance(config_nested['dict1'], type(config_nested)) assert isinstance(config_nested['dict1']['inner'], type(config_nested)) assert config_nested['dict1']['inner']['x'] == 2 + assert config_nested['dict1']['inner']['y'] == 4 diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index 7939fe8f..1c359fd4 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -13,7 +13,6 @@ import numpy as np import tensorflow as tf from ortools.sat.python import cp_model - from utensor_cgen.backend.base import BackendPart from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP from utensor_cgen.logger import logger @@ -253,6 +252,7 @@ def default_config(cls): }, } + class BrutalForceMemoryPlanner(BackendPart): TARGET = 'utensor' PART = 'offlinememory' diff --git a/utensor_cgen/backend/utensor/_backend_impl.py b/utensor_cgen/backend/utensor/_backend_impl.py index 129d831a..ee0ac712 100644 --- a/utensor_cgen/backend/utensor/_backend_impl.py +++ b/utensor_cgen/backend/utensor/_backend_impl.py @@ -29,14 +29,14 @@ def __init__( ): config = self.config[self.TARGET][self.COMPONENT] if config['legacy-api']: - code_generator = code_generator or uTensorLegacyCodeGenerator(config=config[uTensorLegacyCodeGenerator.PART]) - graph_op_lower = graph_op_lower or uTensorLegacyGraphLower(config=config[uTensorLegacyGraphLower.PART]) - graph_alloc_lower = graph_alloc_lower or TensorAllocationPlanner(config=config[TensorAllocationPlanner.PART]) + code_generator = code_generator or uTensorLegacyCodeGenerator(config=config[uTensorLegacyCodeGenerator.PART].to_dict()) + graph_op_lower = graph_op_lower or uTensorLegacyGraphLower(config=config[uTensorLegacyGraphLower.PART].to_dict()) + graph_alloc_lower = graph_alloc_lower or TensorAllocationPlanner(config=config[TensorAllocationPlanner.PART].to_dict()) else: - code_generator = code_generator or uTensorRearchCodeGenerator(config=config[uTensorRearchCodeGenerator.PART]) - graph_op_lower = graph_op_lower or uTensorRearchGraphLower(config=config[uTensorRearchGraphLower.PART]) - graph_alloc_lower = TensorAllocationPlanner(config=config[TensorAllocationPlanner.PART]) - graph_transformer = graph_transformer or PipelineTransformer(config=config[PipelineTransformer.PART]) + code_generator = code_generator or uTensorRearchCodeGenerator(config=config[uTensorRearchCodeGenerator.PART].to_dict()) + graph_op_lower = graph_op_lower or uTensorRearchGraphLower(config=config[uTensorRearchGraphLower.PART].to_dict()) + graph_alloc_lower = TensorAllocationPlanner(config=config[TensorAllocationPlanner.PART].to_dict()) + graph_transformer = graph_transformer or PipelineTransformer(config=config[PipelineTransformer.PART].to_dict()) self._graph_op_lower = graph_op_lower self._graph_transformer = graph_transformer self._graph_alloc_lower = graph_alloc_lower diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index b6c12178..2a85bd52 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -487,6 +487,12 @@ def parse_toml(file_or_path): class Configuration(object): def __init__(self, defaults=None, user_config=None): + """ + Note + ---- + - any value that is in user_config should be in defaults + - any value that is not in defaults should not be in user_config + """ if defaults is None: defaults = {} if user_config is None: @@ -533,9 +539,9 @@ def __getitem__(self, key): raise KeyError('invalid key: {}'.format(key)) value = self._user_config.get( key, self._defaults[key] - ) + ) if isinstance(value, dict): - value = type(self)(value, {}) + value = type(self)(self._defaults[key], value) return value def __contains__(self, key): From a3f036855fbc1d91d333cdb553bcd2a852b27cc6 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 8 Mar 2020 16:03:08 +0800 Subject: [PATCH 053/117] make Configuration nearly unmutable object --- utensor_cgen/backend/graph_lower/generic_graph_lower.py | 7 +++---- utensor_cgen/utils.py | 4 +--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index 1c359fd4..482955a1 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -88,10 +88,9 @@ def __init__(self, config): self.out_fname = self.config['out_fname'] if self.out_fname == 'None': self.out_fname = None - aesthetic_kwargs = self.config['aesthetic_kwargs'] - if aesthetic_kwargs['figsize'] == 'None': - aesthetic_kwargs['figsize'] = None - self.aesthetic_kwargs = aesthetic_kwargs.to_dict() + self.aesthetic_kwargs = self.config['aesthetic_kwargs'].to_dict() + if self.aesthetic_kwargs['figsize'] == 'None': + self.aesthetic_kwargs['figsize'] = None self.enabled = self.config['enabled'] self.dtype_size_map = self._parse_dtype_size_map(self.config) diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index 2a85bd52..dbd9f74c 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -493,6 +493,7 @@ def __init__(self, defaults=None, user_config=None): - any value that is in user_config should be in defaults - any value that is not in defaults should not be in user_config """ + # TODO: write a check on the inputs? if defaults is None: defaults = {} if user_config is None: @@ -531,9 +532,6 @@ def to_dict(self): config.update(self._user_config) return config - def __setitem__(self, key, value): - self._user_config[key] = value - def __getitem__(self, key): if key not in self: raise KeyError('invalid key: {}'.format(key)) From f07f5dda6df89d02506ccad22a5afd5fee53d102 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 8 Mar 2020 17:06:39 +0800 Subject: [PATCH 054/117] Add notes to generated config file Update example_config.toml --- example_config.toml | 41 +++++++++++++++++++++++++++++++++--- utensor_cgen/backend/base.py | 1 + utensor_cgen/cli.py | 4 ++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/example_config.toml b/example_config.toml index 6cc4500a..e3262077 100644 --- a/example_config.toml +++ b/example_config.toml @@ -1,15 +1,50 @@ # https://github.com/toml-lang/toml # .. +# we use string 'None' to represent python None value +# you should convert the string to None if you try to write extension for utensor_cgen [utensor.backend] legacy-api = true +[utensor.backend.tensor_alloc_planner] +max_pool_size = 1048576 +include_inputs = false +out_fname = "None" +enabled = true + [utensor.backend.legacy_code_generator] src_fname = "None" params_dir = "data" embed_params_dir = "/fs/data" model_dir = "models" -transform_methods = [ "dropout(name_pattern=r\"(dropout[_\\w\\d]*)/.*\")", "linear_reorder", "quantize", "conv_pool", "inline", "biasAdd", "remove_id_op", "fake_gather_v2", "refcnt",] -save_graph = false debug_cmt = false -[utensor.backend.graph_lower] +[utensor.backend.legacy_graph_lower] + +[utensor.backend.rearch_code_generator] +src_fname = "None" +header_fname = "None" +params_dir = "data" +model_dir = "models" +meta_data_pool_size = "auto" +ram_data_pool_size = "auto" + +[utensor.backend.rearch_graph_lower] + +[utensor.backend.pipeline_transformer] +save_graph = false +transform_methods = [ "dropout(name_pattern=r'(dropout[_\\w\\d]*)/.*')", "linear_reorder", "quantize", "conv_pool", "inline", "biasAdd", "remove_id_op", "fake_gather_v2", "refcnt",] + +[utensor.backend.tensor_alloc_planner.aesthetic_kwargs] +split_on_large_graph = true +num_tensors_per_split = 20 +figsize = "None" +fontsize = 12 +lw = 12 +rand_seed = 1111 + +[utensor.backend.tensor_alloc_planner.dtype_size_map] +float = 4 +double = 8 +uint8 = 1 +int = 4 +long = 8 diff --git a/utensor_cgen/backend/base.py b/utensor_cgen/backend/base.py index cd764f6b..82eb7a0f 100644 --- a/utensor_cgen/backend/base.py +++ b/utensor_cgen/backend/base.py @@ -72,6 +72,7 @@ def from_file(cls, file_or_path, *args, **kwargs): def from_config(cls, config, *args, **kwargs): return cls(config, *args, **kwargs) + class BackendPart(Backend): PART = MUST_OVERWRITEN diff --git a/utensor_cgen/cli.py b/utensor_cgen/cli.py index e7ed0394..3c89bd4d 100644 --- a/utensor_cgen/cli.py +++ b/utensor_cgen/cli.py @@ -68,6 +68,10 @@ def generate_config(target, output): '# https://github.com/toml-lang/toml\n' '# ..\n' ) + fid.write( + '# we use string \'None\' to represent python None value\n' + '# you should convert the string to None if you try to write extension for utensor_cgen\n' + ) fid.write(dumps(config)) @cli.command(name='convert', help='convert graph to cpp/hpp files') From aa7a2fed6b86b4811baaeda88417a39e437cbe3f Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 8 Mar 2020 22:47:34 +0800 Subject: [PATCH 055/117] Fix transformer bug and update tests --- plugins/dummy_backend/__init__.py | 3 ++- .../test_dropout/test_dropout_transormer.py | 3 ++- .../test_id_remove/test_transformer.py | 4 ++++ .../test_inline/test_inline_optimizer.py | 1 + .../test_linear_reorder/test_transformer.py | 1 + .../test_refcnt/test_refcnt_optimizer.py | 3 ++- utensor_cgen/backend/utensor/_backend_impl.py | 1 - utensor_cgen/cli.py | 6 +++--- utensor_cgen/transformer/__init__.py | 3 ++- utensor_cgen/transformer/base.py | 15 ++++----------- utensor_cgen/transformer/graph_viz.py | 2 +- utensor_cgen/transformer/linear_reoder.py | 3 +-- utensor_cgen/transformer/ns_transformer.py | 4 ++++ utensor_cgen/transformer/optimizer.py | 7 ++----- utensor_cgen/transformer/quantize.py | 1 - 15 files changed, 29 insertions(+), 28 deletions(-) diff --git a/plugins/dummy_backend/__init__.py b/plugins/dummy_backend/__init__.py index 2e422f1e..7424b1a5 100644 --- a/plugins/dummy_backend/__init__.py +++ b/plugins/dummy_backend/__init__.py @@ -1,9 +1,10 @@ from textwrap import wrap -from utensor_cgen.backend.base import Backend from utensor_cgen.backend import BackendManager +from utensor_cgen.backend.base import Backend from utensor_cgen.utils import class_property + @BackendManager.register class DummyBackend(Backend): TARGET = 'dummy-backend' diff --git a/tests/test_transformer/test_dropout/test_dropout_transormer.py b/tests/test_transformer/test_dropout/test_dropout_transormer.py index a6085879..3e9d554a 100644 --- a/tests/test_transformer/test_dropout/test_dropout_transormer.py +++ b/tests/test_transformer/test_dropout/test_dropout_transormer.py @@ -1,5 +1,4 @@ import tensorflow as tf - from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.transformer.ns_transformer import (DropoutTransformer, DropoutTransformerV2) @@ -11,6 +10,7 @@ def test_dropout_trans_1_1(droput_graph_tuple): output_nodes) = droput_graph_tuple ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = DropoutTransformer() + assert transformer.prune_graph new_ugraph = transformer.transform(ugraph) for op in new_ugraph.ops_info.values(): assert op.ugraph @@ -43,6 +43,7 @@ def test_dropout_trans_1_2(droput_graph_tuple): output_nodes) = droput_graph_tuple ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = DropoutTransformerV2() + assert transformer.prune_graph new_ugraph = transformer.transform(ugraph) for op in new_ugraph.ops_info.values(): assert op.ugraph diff --git a/tests/test_transformer/test_id_remove/test_transformer.py b/tests/test_transformer/test_id_remove/test_transformer.py index edd1b440..2726a65a 100644 --- a/tests/test_transformer/test_id_remove/test_transformer.py +++ b/tests/test_transformer/test_id_remove/test_transformer.py @@ -2,6 +2,10 @@ from utensor_cgen.transformer.optimizer import IdOpRemoveOptimizer +def test_id_rm_prune_graph(): + optimizer = IdOpRemoveOptimizer() + assert optimizer.prune_graph + def test_id_rm_transform_1(id_graph_def_1): ugraph = GraphDefParser(config={}).parse(id_graph_def_1, output_nodes=['z']) optimizer = IdOpRemoveOptimizer() diff --git a/tests/test_transformer/test_inline/test_inline_optimizer.py b/tests/test_transformer/test_inline/test_inline_optimizer.py index f416d9b3..79a449d0 100644 --- a/tests/test_transformer/test_inline/test_inline_optimizer.py +++ b/tests/test_transformer/test_inline/test_inline_optimizer.py @@ -6,6 +6,7 @@ def test_inline_optimizer(inlinegraph_tuple): (graph_def, inline_ans, output_nodes)= inlinegraph_tuple ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes) transformer = InlineTransformer() + assert not transformer.prune_graph ugraph = transformer.transform(ugraph) for node_name in ugraph.topo_order: if node_name in inline_ans: diff --git a/tests/test_transformer/test_linear_reorder/test_transformer.py b/tests/test_transformer/test_linear_reorder/test_transformer.py index 405b3c94..4ec42347 100644 --- a/tests/test_transformer/test_linear_reorder/test_transformer.py +++ b/tests/test_transformer/test_linear_reorder/test_transformer.py @@ -2,6 +2,7 @@ def test_linear_reorder_1(subj_ugraph_1): from utensor_cgen.transformer.linear_reoder import LinearReorderTransformerV2 transformer = LinearReorderTransformerV2() + assert not transformer.prune_graph new_ugraph = transformer.transform(subj_ugraph_1) for op in new_ugraph['output'].input_nodes: assert op.op_type == 'Relu', 'expecting Relu, get {}'.format(op.op_type) diff --git a/tests/test_transformer/test_refcnt/test_refcnt_optimizer.py b/tests/test_transformer/test_refcnt/test_refcnt_optimizer.py index ea696d7a..47244a80 100644 --- a/tests/test_transformer/test_refcnt/test_refcnt_optimizer.py +++ b/tests/test_transformer/test_refcnt/test_refcnt_optimizer.py @@ -3,9 +3,10 @@ def test_refcnt_optimizer(refgraph_tuple): - (graph_def, refcnt_ans, output_nodes)= refgraph_tuple + (graph_def, refcnt_ans, output_nodes) = refgraph_tuple ugraph = GraphDefParser(config={}).parse(graph_def, output_nodes=output_nodes) transformer = RefCntOptimizer() + assert not transformer.prune_graph ugraph = transformer.transform(ugraph) for node_name in ugraph.topo_order: if node_name in refcnt_ans: diff --git a/utensor_cgen/backend/utensor/_backend_impl.py b/utensor_cgen/backend/utensor/_backend_impl.py index ee0ac712..03b918a7 100644 --- a/utensor_cgen/backend/utensor/_backend_impl.py +++ b/utensor_cgen/backend/utensor/_backend_impl.py @@ -61,7 +61,6 @@ def apply(self, ugraph): new_ugraph = self._graph_transformer.transform(ugraph) self._graph_alloc_lower.apply(new_ugraph) self._code_generator.apply(new_ugraph) - return new_ugraph def __call__(self, ugraph): return self.apply(ugraph) diff --git a/utensor_cgen/cli.py b/utensor_cgen/cli.py index 3c89bd4d..47dc149b 100644 --- a/utensor_cgen/cli.py +++ b/utensor_cgen/cli.py @@ -35,12 +35,12 @@ def _load_plugin(path): "-p", "--plugin", multiple=True, - help="path of the python module which will be loaded as plugin", + help="path of the python module which will be loaded as plugin (multiple)", metavar="MODULE", ) def cli(plugin): - for module in plugin: - _load_plugin(module) + for module_path in plugin: + _load_plugin(module_path) @cli.command(name='list-backends', help='list all available backends') @click.help_option('-h', '--help') diff --git a/utensor_cgen/transformer/__init__.py b/utensor_cgen/transformer/__init__.py index 1e683fd6..9c64a9e9 100644 --- a/utensor_cgen/transformer/__init__.py +++ b/utensor_cgen/transformer/__init__.py @@ -1,5 +1,4 @@ # -*- coding:utf8 -*- -from .pipeline import TransformerPipeline # isort:skip from .base import Transformer from .conv_pool import * from .graph_viz import * @@ -7,3 +6,5 @@ from .ns_transformer import * from .optimizer import * from .quantize import * + +from .pipeline import TransformerPipeline # isort:skip diff --git a/utensor_cgen/transformer/base.py b/utensor_cgen/transformer/base.py index 145a2fb0..30613528 100644 --- a/utensor_cgen/transformer/base.py +++ b/utensor_cgen/transformer/base.py @@ -7,21 +7,19 @@ class Transformer(object): """ - Any subclass of Transformer should follow the + Any subclass of Transformer should follow the signature of __new__ and __init__ defined here - if the overwrite these two methods in order to + if the overwrite these two methods in order to work properly """ __metaclass__ = ABCMeta KWARGS_NAMESCOPE = None METHOD_NAME = None - def __new__(cls, - prune_graph=True, - **kwargs): + def __init__(self, prune_graph=True, **kwargs): + cls = type(self) if cls.KWARGS_NAMESCOPE is None: raise ValueError('kwargs namescope not found for %s' % cls) - self = object.__new__(cls) self.prune_graph = prune_graph ori_transform = self.transform @@ -34,11 +32,6 @@ def transform(ugraph): return new_ugraph self.transform = transform - return self - - def __init__(self, prune_graph=True, **kwargs): - # just for defining the __init__ signature - pass @abstractmethod def transform(self, ugraph): diff --git a/utensor_cgen/transformer/graph_viz.py b/utensor_cgen/transformer/graph_viz.py index c646a15f..43208318 100644 --- a/utensor_cgen/transformer/graph_viz.py +++ b/utensor_cgen/transformer/graph_viz.py @@ -17,9 +17,9 @@ class GraphVizTransformer(Transformer): KWARGS_NAMESCOPE = '_utensor_graph_viz' def __init__(self, out_fname="graph.gv", view=False, cleanup=True): + super(GraphVizTransformer, self).__init__(prune_graph=False) self.out_fname = out_fname self.view = view - self.prune_graph = False self.cleanup = cleanup def transform(self, ugraph): diff --git a/utensor_cgen/transformer/linear_reoder.py b/utensor_cgen/transformer/linear_reoder.py index 491f9f11..68f8a204 100644 --- a/utensor_cgen/transformer/linear_reoder.py +++ b/utensor_cgen/transformer/linear_reoder.py @@ -5,7 +5,6 @@ """ import tensorflow as tf - from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.matcher import uTensorGraphMatcher from utensor_cgen.utils import prune_graph, topologic_order_graph @@ -22,7 +21,7 @@ class LinearReorderTransformerV2(Transformer): KWARGS_NAMESCOPE = '_linear_reorder' def __init__(self): - self.prune_graph = False + super(LinearReorderTransformerV2, self).__init__(prune_graph=False) @property def pattern_ugraph(self): diff --git a/utensor_cgen/transformer/ns_transformer.py b/utensor_cgen/transformer/ns_transformer.py index 31acd247..d8e6bc19 100644 --- a/utensor_cgen/transformer/ns_transformer.py +++ b/utensor_cgen/transformer/ns_transformer.py @@ -49,6 +49,9 @@ class InlineTransformer(Transformer): METHOD_NAME = 'inline' KWARGS_NAMESCOPE = '_utensor_inline' + def __init__(self): + super(InlineTransformer, self).__init__(prune_graph=False) + def transform(self, ugraph): for node_name in ugraph.topo_order: op_type = ugraph.ops_info[node_name].op_type @@ -79,6 +82,7 @@ class DropoutTransformer(Transformer): TARGET_NODENAME_PATTERN = re.compile(r'(dropout[_\w\d]*)/.*') def __init__(self, name_pattern=r'(dropout[_\w\d]*)/.*'): + super(DropoutTransformer, self).__init__(prune_graph=True) self._op_name_pattern = re.compile(name_pattern) def transform(self, ugraph): diff --git a/utensor_cgen/transformer/optimizer.py b/utensor_cgen/transformer/optimizer.py index f10c9cfc..f3c9b873 100644 --- a/utensor_cgen/transformer/optimizer.py +++ b/utensor_cgen/transformer/optimizer.py @@ -13,8 +13,8 @@ class RefCntOptimizer(Transformer): METHOD_NAME = 'refcnt' KWARGS_NAMESCOPE = '_utensor_refcnt' - def __init__(self, **kwargs): - self.prune_graph = False + def __init__(self): + super(RefCntOptimizer, self).__init__(prune_graph=False) def transform(self, ugraph): """Optimization with reference count @@ -50,9 +50,6 @@ class IdOpRemoveOptimizer(Transformer): METHOD_NAME = 'remove_id_op' KWARGS_NAMESCOPE = '_utensor_remove_id_op' - def __init__(self, **kwargs): - self.prune_graph = True - def transform(self, ugraph): return self._transform(ugraph) diff --git a/utensor_cgen/transformer/quantize.py b/utensor_cgen/transformer/quantize.py index 8f030565..86778e39 100644 --- a/utensor_cgen/transformer/quantize.py +++ b/utensor_cgen/transformer/quantize.py @@ -8,7 +8,6 @@ @TransformerPipeline.register_transformer class QuantizeTransformer(Transformer): - METHOD_NAME = 'quantize' KWARGS_NAMESCOPE = '_quantize' From e11cc0d71f880a9d6b554d01e269bbdeaa63cb0c Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sun, 8 Mar 2020 23:04:13 +0800 Subject: [PATCH 056/117] update plugin example --- plugins/dummy_backend/__init__.py | 42 +++++++++---------- .../graph_lower/generic_graph_lower.py | 4 +- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/plugins/dummy_backend/__init__.py b/plugins/dummy_backend/__init__.py index 7424b1a5..e03300ae 100644 --- a/plugins/dummy_backend/__init__.py +++ b/plugins/dummy_backend/__init__.py @@ -7,29 +7,27 @@ @BackendManager.register class DummyBackend(Backend): - TARGET = 'dummy-backend' + TARGET = 'dummy-backend' - def __init__(self, config): - if not config: - config = self.default_config - self.output_file = config[self.TARGET][self.COMPONENT]['output-file'] + def __init__(self, config): + self.output_file = self.config[self.TARGET][self.COMPONENT]['output-file'] - def apply(self, ugraph): - with open(self.output_file, 'w') as fid: - fid.write('#include \n\n') - fid.write('int main(int argc, char* argv[]) {\n') - fid.write(' printf("graph name: {}\\n");\n'.format(ugraph.name)) - fid.write(' printf("ops in topological sorted order:\\n");\n') - for op_name in ugraph.topo_order: - fid.write(' printf(" {}\\n");\n'.format(op_name)) - fid.write(' return 0;\n}') + def apply(self, ugraph): + with open(self.output_file, 'w') as fid: + fid.write('#include \n\n') + fid.write('int main(int argc, char* argv[]) {\n') + fid.write(' printf("graph name: {}\\n");\n'.format(ugraph.name)) + fid.write(' printf("ops in topological sorted order:\\n");\n') + for op_name in ugraph.topo_order: + fid.write(' printf(" {}\\n");\n'.format(op_name)) + fid.write(' return 0;\n}') - @class_property - def default_config(cls): - return { - cls.TARGET: { - cls.COMPONENT: { - 'output-file': 'list_op.c' - } - } + @class_property + def default_config(cls): + return { + cls.TARGET: { + cls.COMPONENT: { + 'output-file': 'list_op.c' } + } + } diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index 482955a1..a2eb5fa7 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -254,8 +254,8 @@ def default_config(cls): class BrutalForceMemoryPlanner(BackendPart): TARGET = 'utensor' - PART = 'offlinememory' - DATA_NAME = 'address' + PART = 'brutal_force_mem_alloc' + DATA_NAME = '_brutal_force_mem_alloc' def __init__( self, From 2ad07b9666fd841447f0559c9a12ec8bd82f6d09 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Mon, 9 Mar 2020 12:43:53 +0800 Subject: [PATCH 057/117] unify alloc plan format --- .../graph_lower/generic_graph_lower.py | 57 +++++++++++++++---- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index a2eb5fa7..eb735789 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -255,7 +255,7 @@ def default_config(cls): class BrutalForceMemoryPlanner(BackendPart): TARGET = 'utensor' PART = 'brutal_force_mem_alloc' - DATA_NAME = '_brutal_force_mem_alloc' + KWARGS_NAMESCOPE = '_brutal_force_mem_alloc' def __init__( self, @@ -274,25 +274,58 @@ def __init__( self._type[np.dtype(tf.qint32.as_numpy_dtype)] = final_config['size_int'] def apply(self, ugraph): - new_ugraph = deepcopy(ugraph) - new_ugraph.setup_data_manager({self.DATA_NAME: " "}) + # ugraph.setup_data_manager(self.KWARGS_NAMESCOPE, {}) # use_def_table: dict, tensor_name -> {'start': op_idx, 'end': op_idx} - use_def_table = self._create_resource_table(new_ugraph) + use_def_table = self._create_resource_table(ugraph) allocate_table = dict() - allocate_success = self.allocate_graph(new_ugraph, allocate_table, use_def_table, self.buff_size, self.unit_size) - + allocate_success = self.allocate_graph(ugraph, allocate_table, use_def_table, self.buff_size, self.unit_size) if allocate_success: - for node_name in new_ugraph.topo_order: - in_t_infos = new_ugraph.ops_info[node_name].input_tensors + allocs = [] + max_offset_end = 0 + for node_name in ugraph.topo_order: + in_t_infos = ugraph.ops_info[node_name].input_tensors for in_o in in_t_infos: if in_o.name in allocate_table: - new_ugraph.data_manager.address = (in_o.name, allocate_table[in_o.name]['offsetstart']) + time_alloc = TimeslotAllocation( + time_slot_start=use_def_table[in_o.name]['start'], + time_slot_end=use_def_table[in_o.name]['end'] + ) + space_alloc = SpaceAllocation( + offset_start=allocate_table[in_o.name]['offsetstart'], + offset_end=allocate_table[in_o.name]['offsetend'], + ) + if allocate_table[in_o.name]['offsetend'] >= max_offset_end: + max_offset_end = allocate_table[in_o.name]['offsetend'] + allocs.append( + TimeSpaceAllocation( + entity_name=in_o.name, + time_alloc=time_alloc, + space_alloc=space_alloc, + ) + ) + # new_ugraph.data_manager.address = (in_o.name, allocate_table[in_o.name]['offsetstart']) out_t_infos = new_ugraph.ops_info[node_name].output_tensors for out_o in out_t_infos: if out_o.name in allocate_table: - new_ugraph.data_manager.address = (out_o.name, allocate_table[out_o.name]['offsetstart']) - return new_ugraph - return ugraph + time_alloc = TimeslotAllocation( + time_slot_start=use_def_table[out_o.name]['start'], + time_slot_end=use_def_table[out_o.name]['end'] + ) + space_alloc = SpaceAllocation( + offset_start=allocate_table[out_o.name]['offsetstart'], + offset_end=allocate_table[out_o.name]['offsetend'], + ) + if allocate_table[out_o.name]['offsetend'] >= max_offset_end: + max_offset_end = allocate_table[out_o.name]['offsetend'] + allocs.append( + TimeSpaceAllocation( + entity_name=out_o.name, + time_alloc=time_alloc, + space_alloc=space_alloc, + ) + ) + # new_ugraph.data_manager.address = (out_o.name, allocate_table[out_o.name]['offsetstart']) + ugraph.attributes[self.KWARGS_NAMESCOPE] = AllocationPlan(allocs=allocs, total_size=max_offset_end) def _query_offset_fromallocate_table(self, allocate_table, start, end): new_start = start From 1154aec3e709ee55e8b8d7b802d30be060e52592 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Mon, 9 Mar 2020 12:53:00 +0800 Subject: [PATCH 058/117] Fix init signature and add comments --- utensor_cgen/backend/base.py | 7 ++++++ .../graph_lower/generic_graph_lower.py | 24 ++++++++----------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/utensor_cgen/backend/base.py b/utensor_cgen/backend/base.py index 82eb7a0f..075fbedf 100644 --- a/utensor_cgen/backend/base.py +++ b/utensor_cgen/backend/base.py @@ -53,6 +53,13 @@ def _validate_config(self, config): class Backend(_BackendBase): + """ + - Constrcutor signature must be ``__init__(self, config, *args, **kwargs)`` + - ``config`` should be a dictionay + - It will run through various check in ``__new__``, so it's better to access the value + of config via ``self.config``, which is an instance of ``Configuration`` + - It will make sure if users do not provide the value required, default one will be used + """ TARGET = MUST_OVERWRITEN diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index eb735789..05f12d4b 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -257,21 +257,15 @@ class BrutalForceMemoryPlanner(BackendPart): PART = 'brutal_force_mem_alloc' KWARGS_NAMESCOPE = '_brutal_force_mem_alloc' - def __init__( - self, - config, - buff_size=100000, #1k bytes - unit_size=4, - ): - self.buff_size = buff_size - self.unit_size = unit_size - final_config = Configuration(self.default_config, config) + def __init__(self, config): + self.buff_size = self.config['buff_size'] + self.unit_size = self.config['unit_size'] self._type = {} - self._type[np.dtype(tf.float32.as_numpy_dtype)] = final_config['size_float'] - self._type[np.dtype(tf.int32.as_numpy_dtype)] = final_config['size_int'] - self._type[np.dtype(tf.quint8.as_numpy_dtype)] = final_config['size_uint8_t'] - self._type[np.dtype(tf.qint8.as_numpy_dtype)] = final_config['size_uint8_t'] - self._type[np.dtype(tf.qint32.as_numpy_dtype)] = final_config['size_int'] + self._type[np.dtype(tf.float32.as_numpy_dtype)] = self.config['size_float'] + self._type[np.dtype(tf.int32.as_numpy_dtype)] = self.config['size_int'] + self._type[np.dtype(tf.quint8.as_numpy_dtype)] = self.config['size_uint8_t'] + self._type[np.dtype(tf.qint8.as_numpy_dtype)] = self.config['size_uint8_t'] + self._type[np.dtype(tf.qint32.as_numpy_dtype)] = self.config['size_int'] def apply(self, ugraph): # ugraph.setup_data_manager(self.KWARGS_NAMESCOPE, {}) @@ -487,6 +481,8 @@ def default_config(cls): config['size_float'] = 4 config['size_int'] = 4 config['size_uint8_t'] = 1 + config['buff_size'] = 100000 #1k bytes + config['unit_size'] = 4 return config From f8a81d623d183186580ae3e95a6aebb52fa1f8d1 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 10 Mar 2020 11:07:38 +0800 Subject: [PATCH 059/117] Fix indentation --- utensor_cgen/frontend/tensorflow.py | 166 ++++++++++++++-------------- 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/utensor_cgen/frontend/tensorflow.py b/utensor_cgen/frontend/tensorflow.py index 64a42b8b..1a5be404 100644 --- a/utensor_cgen/frontend/tensorflow.py +++ b/utensor_cgen/frontend/tensorflow.py @@ -2,11 +2,11 @@ import os -import numpy as np import six + +import numpy as np import tensorflow as tf from google.protobuf import text_format - from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser from utensor_cgen.ir.base import OperationInfo, TensorInfo, uTensorGraph @@ -17,89 +17,89 @@ @FrontendSelector.register(target_exts=[".pb", ".pbtxt"]) class GraphDefParser(Parser): - def parse(self, pb_file, output_nodes=None): - graph_def, graph_name = self._load_graph_def(pb_file) - if not self._is_freeze_graph(graph_def): - raise ValueError("Given graph_def is not freezed") - if output_nodes is None: - output_nodes = [node.name for node in graph_def.node] - logger.warning( - 'output_nodes is not given, use all nodes instead (may cause unexpected behaviour)' - ) + def parse(self, pb_file, output_nodes=None): + graph_def, graph_name = self._load_graph_def(pb_file) + if not self._is_freeze_graph(graph_def): + raise ValueError("Given graph_def is not freezed") + if output_nodes is None: + output_nodes = [node.name for node in graph_def.node] + logger.warning( + 'output_nodes is not given, use all nodes instead (may cause unexpected behaviour)' + ) - graph = tf.Graph() - with graph.as_default(): - tf.import_graph_def(graph_def, name="") - ugraph = uTensorGraph( - name=graph_name, output_nodes=output_nodes, lib_name="tensorflow", + graph = tf.Graph() + with graph.as_default(): + tf.import_graph_def(graph_def, name="") + ugraph = uTensorGraph( + name=graph_name, output_nodes=output_nodes, lib_name="tensorflow", + ) + for node in graph_def.node: + op = graph.get_operation_by_name(node.name) + in_tensors = [ + TensorInfo( + name=tensor.name, + ugraph=ugraph, + op_name=tensor.op.name, + dtype=np.dtype(tensor.dtype.as_numpy_dtype), + shape=self._tf_parse_tshape(tensor.shape), + ) + for tensor in op.inputs + ] + out_tensors = [ + TensorInfo( + name=tensor.name, + ugraph=ugraph, + op_name=op.name, + dtype=np.dtype(tensor.dtype.as_numpy_dtype), + shape=self._tf_parse_tshape(tensor.shape), ) - for node in graph_def.node: - op = graph.get_operation_by_name(node.name) - in_tensors = [ - TensorInfo( - name=tensor.name, - ugraph=ugraph, - op_name=tensor.op.name, - dtype=np.dtype(tensor.dtype.as_numpy_dtype), - shape=self._tf_parse_tshape(tensor.shape), - ) - for tensor in op.inputs - ] - out_tensors = [ - TensorInfo( - name=tensor.name, - ugraph=ugraph, - op_name=op.name, - dtype=np.dtype(tensor.dtype.as_numpy_dtype), - shape=self._tf_parse_tshape(tensor.shape), - ) - for tensor in op.outputs - ] - op_type = node.op - op_attr = node.attr - op_info = OperationInfo( - name=node.name, - input_tensors=in_tensors, - n_inputs=len(in_tensors), - output_tensors=out_tensors, - n_outputs=len(out_tensors), - op_type=op_type, - lib_name="tensorflow", - op_attr=op_attr, - ugraph=ugraph, - ) - op_info.op_attr["tensorflow__device"] = node.device - ugraph.ops_info[node.name] = op_info - topologic_order_graph(ugraph) - ugraph = Legalizer.legalize(ugraph, {}) - return ugraph + for tensor in op.outputs + ] + op_type = node.op + op_attr = node.attr + op_info = OperationInfo( + name=node.name, + input_tensors=in_tensors, + n_inputs=len(in_tensors), + output_tensors=out_tensors, + n_outputs=len(out_tensors), + op_type=op_type, + lib_name="tensorflow", + op_attr=op_attr, + ugraph=ugraph, + ) + op_info.op_attr["tensorflow__device"] = node.device + ugraph.ops_info[node.name] = op_info + topologic_order_graph(ugraph) + ugraph = Legalizer.legalize(ugraph, {}) + return ugraph - @staticmethod - def _load_graph_def(pb_file): - if isinstance(pb_file, tf.GraphDef): - return pb_file, "tf_graph_{}".format(random_str(6)) - assert isinstance(pb_file, six.string_types) - graph_name, _ = os.path.splitext(os.path.basename(pb_file)) - graph_def = tf.GraphDef() - if pb_file[-3:] == ".pb": - with open(pb_file, "rb") as fid: - graph_def.ParseFromString(fid.read()) - elif pb_file[-6:] == ".pbtxt": - with open(pb_file, "r") as fid: - text_format.Parse(fid.read(), graph_def) - else: - raise ValueError("unknown file format: %s" % pb_file) - return graph_def, graph_name + @staticmethod + def _load_graph_def(pb_file): + if isinstance(pb_file, tf.GraphDef): + return pb_file, "tf_graph_{}".format(random_str(6)) + assert isinstance(pb_file, six.string_types) + graph_name, _ = os.path.splitext(os.path.basename(pb_file)) + graph_def = tf.GraphDef() + if pb_file[-3:] == ".pb": + with open(pb_file, "rb") as fid: + graph_def.ParseFromString(fid.read()) + elif pb_file[-6:] == ".pbtxt": + with open(pb_file, "r") as fid: + text_format.Parse(fid.read(), graph_def) + else: + raise ValueError("unknown file format: %s" % pb_file) + return graph_def, graph_name - @staticmethod - def _tf_parse_tshape(t_shape): - try: - shape = t_shape.as_list() - except ValueError: - shape = None - return shape + @staticmethod + def _tf_parse_tshape(t_shape): + try: + shape = t_shape.as_list() + except ValueError: + shape = None + return shape - @staticmethod - def _is_freeze_graph(graph_def): - is_frozen = all(node.op not in ["VariableV2"] for node in graph_def.node) - return is_frozen + @staticmethod + def _is_freeze_graph(graph_def): + is_frozen = all(node.op not in ["VariableV2"] for node in graph_def.node) + return is_frozen From 78e967859107f26327a6fc363236c91d421e46be Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 10 Mar 2020 14:16:24 +0800 Subject: [PATCH 060/117] making bakend part apply and transform abstract and put checks on them --- utensor_cgen/backend/base.py | 17 +++++++++--- utensor_cgen/utils.py | 50 +++++++++++++++++------------------- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/utensor_cgen/backend/base.py b/utensor_cgen/backend/base.py index 075fbedf..a316b05b 100644 --- a/utensor_cgen/backend/base.py +++ b/utensor_cgen/backend/base.py @@ -1,5 +1,7 @@ +from abc import abstractmethod + from utensor_cgen.utils import (MUST_OVERWRITEN, Configuration, class_property, - parse_toml) + is_abstract, parse_toml) class _BackendBase(object): @@ -19,6 +21,7 @@ def __new__(cls, config, *args, **kwargs): self._config = config return self + @abstractmethod def apply(self, ugraph): """Applying side-effect to ugraph @@ -26,7 +29,8 @@ def apply(self, ugraph): such as adding attribute or creating files. """ raise NotImplementedError('base apply method invoked: %s' % self) - + + @abstractmethod def transform(self, ugraph): """Transform Graph @@ -47,10 +51,14 @@ def __call__(self, *args, **kwargs): def config(self): return self._config - def _validate_config(self, config): + def _validate_config(self, config, *args, **kwargs): assert isinstance(config, (dict, Configuration, type(None))), \ 'expecting {}, get {}'.format(dict, type(config)) + def _validate_abstracts(self, config, *args, **kwargs): + if is_abstract(self.apply) and is_abstract(self.transform): + raise ValueError('must overwrite at least one of apply or transorm: %s' % self) + class Backend(_BackendBase): """ @@ -59,6 +67,9 @@ class Backend(_BackendBase): - It will run through various check in ``__new__``, so it's better to access the value of config via ``self.config``, which is an instance of ``Configuration`` - It will make sure if users do not provide the value required, default one will be used + - You must at least implement one of ``apply`` or ``transform`` method + - ``apply`` will introduce side-effect on given ugraph **in place** and return nothing + - ``transform`` will create a new ugraph, applying side-effect on new ugraph and return it """ TARGET = MUST_OVERWRITEN diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index dbd9f74c..b51790b5 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -329,7 +329,6 @@ def topologic_order_graph(ugraph): """ ugraph.topo_order = get_topologic_order(ugraph, ugraph.output_nodes)[::-1] - def get_topologic_order(ugraph, init_nodes=None): """ return list of op names in topological order @@ -376,7 +375,6 @@ def visit(node_name): visit(node_name) return ops_torder - def ops_bfs_queue(ugraph, init_nodes=None): if init_nodes is None: init_nodes = [ @@ -397,7 +395,6 @@ def ops_bfs_queue(ugraph, init_nodes=None): bfs_deck.append(op) return bfs_deck - def prune_graph(ugraph): """ Remove nodes that is no longer needed *in-place* @@ -441,12 +438,35 @@ def prune_graph(ugraph): new_ugraph.ops_info.pop(op_name) return new_ugraph - def random_str(length=8): letters = ascii_letters+digits chars = [choice(letters) for _ in range(length)] return ''.join(chars) +def parse_toml(file_or_path): + if isinstance(file_or_path, str): + fid = open(file_or_path, 'r') + doc = _parse(fid.read()) + fid.close() + return doc + +def timed(func): + + @wraps(func) + def wrapped(*args, **kwargs): + start_time = time() + ret = func(*args, **kwargs) + end_time = time() + logger.info('collapsed time of calling %s: %0.4f seconds', func.__name__, end_time - start_time) + return ret + + return wrapped + +def is_abstract(func): + if isinstance(func, types.MethodType): + func = func.__func__ + return getattr(func, '__isabstractmethod__', False) + class class_property(object): @@ -476,15 +496,6 @@ def __getitem__(self, slice_obj): cls = type(self) return cls(funcs=self._funcs[slice_obj]) - -def parse_toml(file_or_path): - if isinstance(file_or_path, str): - fid = open(file_or_path, 'r') - doc = _parse(fid.read()) - fid.close() - return doc - - class Configuration(object): def __init__(self, defaults=None, user_config=None): """ @@ -552,16 +563,3 @@ def __repr__(self): ' user_config={} \n' ')' ).format(self._defaults, self._user_config) - - -def timed(func): - - @wraps(func) - def wrapped(*args, **kwargs): - start_time = time() - ret = func(*args, **kwargs) - end_time = time() - logger.info('collapsed time of calling %s: %0.4f seconds', func.__name__, end_time - start_time) - return ret - - return wrapped From ef50c059824432ee9cca63f79fe985e9e37a0cf2 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 10 Mar 2020 15:00:48 +0800 Subject: [PATCH 061/117] update templates - old mem alloc scheme is deprecated - update template files in favor of rearch --- .../snippets/templates/snippets/legacy/argmax_op.cpp | 4 ++-- .../templates/snippets/legacy/dequantize_op.cpp | 4 ++-- .../snippets/templates/snippets/legacy/max_op.cpp | 4 ++-- .../snippets/templates/snippets/legacy/min_op.cpp | 4 ++-- .../snippets/templates/snippets/legacy/qadd_op.cpp | 12 ++++++------ .../templates/snippets/legacy/qmatmul_op.cpp | 12 ++++++------ .../snippets/templates/snippets/legacy/qrelu_op.cpp | 12 ++++++------ .../templates/snippets/legacy/quantV2_op.cpp | 12 ++++++------ .../templates/snippets/legacy/requant_op.cpp | 12 ++++++------ .../templates/snippets/legacy/requant_range_op.cpp | 8 ++++---- .../templates/snippets/legacy/reshape_op.cpp | 4 ++-- 11 files changed, 44 insertions(+), 44 deletions(-) diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/argmax_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/argmax_op.cpp index 07073749..0e4ebe0f 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/argmax_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/argmax_op.cpp @@ -3,9 +3,9 @@ S_TENSOR {{sptr_name}}; {% endif %} { {% if ref_count %} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{output}}", {{ref_count}}); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{output}}", {{ref_count}}); {% else %} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{output}}"); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{output}}"); {% endif %} ctx.push(new ArgMaxOp<{{in_dtype}}, {{out_dtype}}>(), { {% for tname in inputs[:-1]%}"{{tname}}", {%endfor%}"{{inputs[-1]}}" }, diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/dequantize_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/dequantize_op.cpp index 9ee9f8e4..58882518 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/dequantize_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/dequantize_op.cpp @@ -3,9 +3,9 @@ S_TENSOR {{sptr_name}}; {% endif %} { {% if ref_count %} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{output}}", {{ref_count}}); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{output}}", {{ref_count}}); {% else %} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{output}}"); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{output}}"); {% endif %} ctx.push(new DequantizeOp(), { {% for tname in inputs[:-1]%}"{{tname}}", {%endfor%}"{{inputs[-1]}}" }, diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/max_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/max_op.cpp index 5ebb3fd0..356a25cd 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/max_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/max_op.cpp @@ -4,9 +4,9 @@ S_TENSOR {{sptr_name}}; { RamTensor<{{out_dtype}}>* out_tensor; {%if out_shape %} - out_tensor = new RamTensor<{{out_dtype}}>({ {%for dim in out_shape[:-1]%}{{dim}}, {%endfor%}{{out_shape[-1]}} }{%if address %}, {{address[0]}}{%endif%}); + out_tensor = new RamTensor<{{out_dtype}}>({ {%for dim in out_shape[:-1]%}{{dim}}, {%endfor%}{{out_shape[-1]}} }); {%else%} - out_tensor = new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}); + out_tensor = new RamTensor<{{out_dtype}}>(); {%endif%} {%if ref_count %} ctx.add(out_tensor, "{{output}}", {{ref_count}}); diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/min_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/min_op.cpp index c6272255..4bc2aab4 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/min_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/min_op.cpp @@ -4,9 +4,9 @@ S_TENSOR {{sptr_name}}; { RamTensor<{{out_dtype}}>* out_tensor; {% if out_shape %} - out_tensor = new RamTensor<{{out_dtype}}>({ {%for shape in out_shape[:-1]%}{{shape}}, {%endfor%}{{out_shape[-1]}} }{%if address %}, {{address[0]}}{%endif%}); + out_tensor = new RamTensor<{{out_dtype}}>({ {%for shape in out_shape[:-1]%}{{shape}}, {%endfor%}{{out_shape[-1]}} }); {% else %} - out_tensor = new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}); + out_tensor = new RamTensor<{{out_dtype}}>(); {% endif %} {% if ref_count%} ctx.add(out_tensor, "{{output}}", {{ref_count}}); diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qadd_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qadd_op.cpp index 47a3aadc..9a33c897 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qadd_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qadd_op.cpp @@ -3,13 +3,13 @@ S_TENSOR {%for sptr_name in sptr_names[:-1]%}{{sptr_name}}, {%endfor%} {{sptr_na {% endif %} { {% if ref_counts %} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}", {{ref_counts[0]}}); - ctx.add(new RamTensor({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}", {{ref_counts[1]}}); - ctx.add(new RamTensor({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}", {{ref_counts[2]}}); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{outputs[0]}}", {{ref_counts[0]}}); + ctx.add(new RamTensor({1}), "{{outputs[1]}}", {{ref_counts[1]}}); + ctx.add(new RamTensor({1}), "{{outputs[2]}}", {{ref_counts[2]}}); {% else %} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}"); - ctx.add(new RamTensor({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}"); - ctx.add(new RamTensor({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}"); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{outputs[0]}}"); + ctx.add(new RamTensor({1}), "{{outputs[1]}}"); + ctx.add(new RamTensor({1}), "{{outputs[2]}}"); {% endif %} ctx.push(new QuantizedAddOp<{{x_dtype}}, {{w_dtype}}, {{out_dtype}}>(), { {%for tname in inputs[:-1] %}"{{tname}}", {% endfor %} "{{inputs[-1]}}" }, diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qmatmul_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qmatmul_op.cpp index b09788cb..bf8320d1 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qmatmul_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qmatmul_op.cpp @@ -3,13 +3,13 @@ S_TENSOR {%for sptr_name in sptr_names[:-1]%}{{sptr_name}}, {%endfor%} {{sptr_na {% endif %} { {% if ref_counts %} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}", {{ref_counts[0]}}); - ctx.add(new RamTensor({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}", {{ref_counts[1]}}); - ctx.add(new RamTensor({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}", {{ref_counts[2]}}); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{outputs[0]}}", {{ref_counts[0]}}); + ctx.add(new RamTensor({1}), "{{outputs[1]}}", {{ref_counts[1]}}); + ctx.add(new RamTensor({1}), "{{outputs[2]}}", {{ref_counts[2]}}); {% else %} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}"); - ctx.add(new RamTensor({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}"); - ctx.add(new RamTensor({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}"); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{outputs[0]}}"); + ctx.add(new RamTensor({1}), "{{outputs[1]}}"); + ctx.add(new RamTensor({1}), "{{outputs[2]}}"); {% endif %} ctx.push(new QntMatMulOp<{{x_dtype}}, {{w_dtype}}, {{out_dtype}}>(), { {%for tname in inputs[:-1] %}"{{tname}}", {% endfor %} "{{inputs[-1]}}" }, diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qrelu_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qrelu_op.cpp index b4516e43..cac38f62 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qrelu_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/qrelu_op.cpp @@ -3,13 +3,13 @@ S_TENSOR {%for sptr_name in sptr_names[:-1]%}{{sptr_name}}, {%endfor%} {{sptr_na {% endif %} { {%if ref_counts%} - ctx.add(new RamTensor<{{qout_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}", {{ref_counts[0]}}); - ctx.add(new RamTensor<{{out_dtypes[0]}}>({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}", {{ref_counts[1]}}); - ctx.add(new RamTensor<{{out_dtypes[1]}}>({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}", {{ref_counts[2]}}); + ctx.add(new RamTensor<{{qout_dtype}}>(), "{{outputs[0]}}", {{ref_counts[0]}}); + ctx.add(new RamTensor<{{out_dtypes[0]}}>({1}), "{{outputs[1]}}", {{ref_counts[1]}}); + ctx.add(new RamTensor<{{out_dtypes[1]}}>({1}), "{{outputs[2]}}", {{ref_counts[2]}}); {%else%} - ctx.add(new RamTensor<{{qout_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}"); - ctx.add(new RamTensor<{{out_dtypes[0]}}>({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}"); - ctx.add(new RamTensor<{{out_dtypes[1]}}>({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}"); + ctx.add(new RamTensor<{{qout_dtype}}>(), "{{outputs[0]}}"); + ctx.add(new RamTensor<{{out_dtypes[0]}}>({1}), "{{outputs[1]}}"); + ctx.add(new RamTensor<{{out_dtypes[1]}}>({1}), "{{outputs[2]}}"); {%endif%} ctx.push(new QuantizedReluOp<{{in_dtype}}, {{out_dtypes[0]}}, {{qout_dtype}}>(), { {% for tname in inputs[:-1]%}"{{tname}}", {% endfor %}"{{inputs[-1]}}" }, diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/quantV2_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/quantV2_op.cpp index e5ca1067..6f55c1a4 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/quantV2_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/quantV2_op.cpp @@ -3,13 +3,13 @@ S_TENSOR {%for sptr_name in sptr_names[:-1]%}{{sptr_name}}, {%endfor%} {{sptr_na {% endif %} { {% if ref_counts%} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}", {{ref_counts[0]}}); - ctx.add(new RamTensor({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}", {{ref_counts[1]}}); - ctx.add(new RamTensor({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}", {{ref_counts[2]}}); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{outputs[0]}}", {{ref_counts[0]}}); + ctx.add(new RamTensor({1}), "{{outputs[1]}}", {{ref_counts[1]}}); + ctx.add(new RamTensor({1}), "{{outputs[2]}}", {{ref_counts[2]}}); {% else %} - ctx.add(new RamTensor<{{out_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}"); - ctx.add(new RamTensor({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}"); - ctx.add(new RamTensor({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}"); + ctx.add(new RamTensor<{{out_dtype}}>(), "{{outputs[0]}}"); + ctx.add(new RamTensor({1}), "{{outputs[1]}}"); + ctx.add(new RamTensor({1}), "{{outputs[2]}}"); {% endif %} ctx.push(new QuantizeV2Op(), { {% for tname in inputs[:-1]%} "{{tname}}", {% endfor %}"{{inputs[-1]}}" }, diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/requant_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/requant_op.cpp index e2072e93..4bac1905 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/requant_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/requant_op.cpp @@ -3,13 +3,13 @@ S_TENSOR {%for sptr_name in sptr_names[:-1]%}{{sptr_name}}, {%endfor%} {{sptr_na {% endif %} { {%if ref_counts%} - ctx.add(new RamTensor<{{qout_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}", {{ref_counts[0]}}); - ctx.add(new RamTensor<{{range_dtype}}>({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}", {{ref_counts[1]}}); - ctx.add(new RamTensor<{{range_dtype}}>({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}", {{ref_counts[2]}}); + ctx.add(new RamTensor<{{qout_dtype}}>(), "{{outputs[0]}}", {{ref_counts[0]}}); + ctx.add(new RamTensor<{{range_dtype}}>({1}), "{{outputs[1]}}", {{ref_counts[1]}}); + ctx.add(new RamTensor<{{range_dtype}}>({1}), "{{outputs[2]}}", {{ref_counts[2]}}); {%else%} - ctx.add(new RamTensor<{{qout_dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{outputs[0]}}"); - ctx.add(new RamTensor<{{range_dtype}}>({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}"); - ctx.add(new RamTensor<{{range_dtype}}>({1}{%if address %}, {{address[2]}}{%endif%}), "{{outputs[2]}}"); + ctx.add(new RamTensor<{{qout_dtype}}>(), "{{outputs[0]}}"); + ctx.add(new RamTensor<{{range_dtype}}>({1}), "{{outputs[1]}}"); + ctx.add(new RamTensor<{{range_dtype}}>({1}), "{{outputs[2]}}"); {%endif%} ctx.push(new RequantizeOp(), { {% for tname in inputs[:-1]%}"{{tname}}", {% endfor %}"{{inputs[-1]}}" }, diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/requant_range_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/requant_range_op.cpp index 422a59ad..97e126cf 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/requant_range_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/requant_range_op.cpp @@ -3,11 +3,11 @@ S_TENSOR {%for sptr_name in sptr_names[:-1]%}{{sptr_name}}, {%endfor%} {{sptr_na {% endif %} { {%if ref_counts%} - ctx.add(new RamTensor<{{out_dtype}}>({1}{%if address %}, {{address[0]}}{%endif%}), "{{outputs[0]}}", {{ref_counts[0]}}); - ctx.add(new RamTensor<{{out_dtype}}>({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}", {{ref_counts[1]}}); + ctx.add(new RamTensor<{{out_dtype}}>({1}), "{{outputs[0]}}", {{ref_counts[0]}}); + ctx.add(new RamTensor<{{out_dtype}}>({1}), "{{outputs[1]}}", {{ref_counts[1]}}); {%else%} - ctx.add(new RamTensor<{{out_dtype}}>({1}{%if address %}, {{address[0]}}{%endif%}), "{{outputs[0]}}"); - ctx.add(new RamTensor<{{out_dtype}}>({1}{%if address %}, {{address[1]}}{%endif%}), "{{outputs[1]}}"); + ctx.add(new RamTensor<{{out_dtype}}>({1}), "{{outputs[0]}}"); + ctx.add(new RamTensor<{{out_dtype}}>({1}), "{{outputs[1]}}"); {%endif%} ctx.push(new Requantization_RangeOp(), { {%for tname in inputs[:-1]%}"{{tname}}", {% endfor %}"{{inputs[-1]}}" }, diff --git a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/reshape_op.cpp b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/reshape_op.cpp index 3cf06fd9..092a5f3e 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/reshape_op.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/snippets/legacy/reshape_op.cpp @@ -3,9 +3,9 @@ S_TENSOR {{sptr_name}}; {% endif %} { {% if ref_count %} - ctx.add(new RamTensor<{{dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{output}}", {{ref_count}}); + ctx.add(new RamTensor<{{dtype}}>(), "{{output}}", {{ref_count}}); {% else %} - ctx.add(new RamTensor<{{dtype}}>({%if address %}{{address[0]}}{%endif%}), "{{output}}"); + ctx.add(new RamTensor<{{dtype}}>(), "{{output}}"); {% endif %} ctx.push(new ReshapeOp(), { {% for tname in inputs[:-1]%}"{{tname}}", {%endfor%}"{{inputs[-1]}}" }, From 7670a0a27422c9dad70b9d1a17530d75ec21c6b7 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 11 Mar 2020 15:32:55 +0800 Subject: [PATCH 062/117] add tests --- tests/test_frontend/test_tensor_flow.py | 53 +++++++++++++++++++++++++ utensor_cgen/frontend/base.py | 4 ++ 2 files changed, 57 insertions(+) create mode 100644 tests/test_frontend/test_tensor_flow.py diff --git a/tests/test_frontend/test_tensor_flow.py b/tests/test_frontend/test_tensor_flow.py new file mode 100644 index 00000000..5d4979db --- /dev/null +++ b/tests/test_frontend/test_tensor_flow.py @@ -0,0 +1,53 @@ +import numpy as np +import tensorflow as tf + + +def test_scalar_shape(): + from utensor_cgen.frontend.tensorflow import GraphDefParser + + graph = tf.Graph() + with graph.as_default(): + tf.constant(1, dtype=tf.float32, name='x') + parser = GraphDefParser({}) + ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) + # shape of scalar tensor should be empty list + out_tensor = ugraph.ops_info['x'].output_tensors[0] + assert out_tensor.shape == [] + assert out_tensor.dtype is np.dtype('float32') + +def test_placeholder_shape(): + from utensor_cgen.frontend.tensorflow import GraphDefParser + + graph = tf.Graph() + with graph.as_default(): + tf.placeholder(dtype=tf.float32, name='x') + parser = GraphDefParser({}) + ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) + # nondeterministic shape, can be any shape + out_tensor = ugraph.ops_info['x'].output_tensors[0] + assert out_tensor.shape is None + assert out_tensor.dtype is np.dtype('float32') + + graph = tf.Graph() + with graph.as_default(): + tf.placeholder(dtype=tf.float32, name='x', shape=[None, 5]) + parser = GraphDefParser({}) + ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) + # nondeterministic dimension + out_tensor = ugraph.ops_info['x'].output_tensors[0] + assert out_tensor.shape == [None, 5] + assert out_tensor.dtype is np.dtype('float32') + +def test_normal_tensor_shape(): + from utensor_cgen.frontend.tensorflow import GraphDefParser + shape = np.random.randint(1, 10, size=(10,)).tolist() + + graph = tf.Graph() + with graph.as_default(): + tf.constant(np.random.rand(*shape), dtype=tf.float32, name='x') + parser = GraphDefParser({}) + ugraph = parser.parse(graph.as_graph_def(), output_nodes=['x']) + # deterministic shape + out_tensor = ugraph.ops_info['x'].output_tensors[0] + assert out_tensor.shape == shape, 'expecting {}, get {}'.format(shape, out_tensor.shape) + assert out_tensor.dtype is np.dtype('float32') diff --git a/utensor_cgen/frontend/base.py b/utensor_cgen/frontend/base.py index 86131f65..e80792f7 100644 --- a/utensor_cgen/frontend/base.py +++ b/utensor_cgen/frontend/base.py @@ -11,6 +11,10 @@ def __new__(cls, config): self._config = config return self + @property + def config(self): + return self._config + @classmethod @abstractmethod def parse(cls, fname, outupt_nodes): From d17e873745bdcc453d6a9b95e96f33cfb6a57007 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 11 Mar 2020 16:03:12 +0800 Subject: [PATCH 063/117] Extensible OpEqualityDelegate - OpEqualityDelegate is designed to isolate the logic of "what is the equivalent operations of given op", which is the core of the isomorphic subgraph matching - Before this commit, such delegate is not extensible, which means it's exclusive to utensor backend (target dependent) - In this commit, I defines a base op eqality deleate class, OpEqualityDelegateBase, so that users can define target dependent delegate by subclassing this base class. --- .../test_permutation/test_match_patrn1.py | 11 +++-- .../test_matcher/test_replace/test_replace.py | 7 +-- .../code_generator/legacy/_operators.py | 10 ++-- utensor_cgen/matcher/__init__.py | 2 +- utensor_cgen/matcher/_matcher_impl.py | 47 ++++++++++++++----- utensor_cgen/transformer/conv_pool.py | 9 +++- utensor_cgen/transformer/linear_reoder.py | 9 +++- utensor_cgen/transformer/ns_transformer.py | 9 +++- 8 files changed, 76 insertions(+), 28 deletions(-) diff --git a/tests/test_matcher/test_permutation/test_match_patrn1.py b/tests/test_matcher/test_permutation/test_match_patrn1.py index 9c2664b4..d4c65b07 100644 --- a/tests/test_matcher/test_permutation/test_match_patrn1.py +++ b/tests/test_matcher/test_permutation/test_match_patrn1.py @@ -1,8 +1,11 @@ +# FIXME: remove uTensorOpEqualityDelegate import after we have generic op_eq_deleate +from utensor_cgen.backend.utensor.code_generator.legacy._operators import \ + uTensorOpEqualityDelegate from utensor_cgen.matcher import uTensorGraphMatcher def test_id_match(patrn_ugraph): - matcher = uTensorGraphMatcher(patrn_ugraph) + matcher = uTensorGraphMatcher(patrn_ugraph, op_equality_delegate=uTensorOpEqualityDelegate) matches = matcher.match(patrn_ugraph) assert matches, 'expecting matches, get {} matches'.format(len(matches)) match = matches[0] @@ -27,7 +30,7 @@ def test_id_match(patrn_ugraph): '{} is missing'.format(tensor.name) def test_match_sub1(patrn_ugraph, subject_ugraph1): - matcher = uTensorGraphMatcher(patrn_ugraph) + matcher = uTensorGraphMatcher(patrn_ugraph, op_equality_delegate=uTensorOpEqualityDelegate) matches = matcher.match_all(subject_ugraph1) assert matches, 'expecting matches, get {} matches'.format(len(matches)) match = matches[0] @@ -39,7 +42,7 @@ def test_match_sub1(patrn_ugraph, subject_ugraph1): assert match.patrn2subj_op_map['output'].name == 'sub_add1', match def test_match_sub1_1(patrn_ugraph, subject_ugraph1_1): - matcher = uTensorGraphMatcher(patrn_ugraph) + matcher = uTensorGraphMatcher(patrn_ugraph, op_equality_delegate=uTensorOpEqualityDelegate) matches = matcher.match(subject_ugraph1_1) assert matches, 'expecting matches, get {} matches'.format(len(matches)) match = matches[0] @@ -49,7 +52,7 @@ def test_match_sub1_1(patrn_ugraph, subject_ugraph1_1): assert match.patrn2subj_op_map['output'].name == 'sub_add1' def test_match_sub1_2(patrn_ugraph, subject_ugraph1_2): - matcher = uTensorGraphMatcher(patrn_ugraph) + matcher = uTensorGraphMatcher(patrn_ugraph, op_equality_delegate=uTensorOpEqualityDelegate) matches = matcher.match(subject_ugraph1_2) assert matches, 'expecting matches, get {} matches'.format(len(matches)) match = matches[0] diff --git a/tests/test_matcher/test_replace/test_replace.py b/tests/test_matcher/test_replace/test_replace.py index 0bfb96d4..4ca546d3 100644 --- a/tests/test_matcher/test_replace/test_replace.py +++ b/tests/test_matcher/test_replace/test_replace.py @@ -1,6 +1,7 @@ -import numpy as np import tensorflow as tf - +# FIXME: remove uTensorOpEqualityDelegate import after we have generic op_eq_deleate +from utensor_cgen.backend.utensor.code_generator.legacy._operators import \ + uTensorOpEqualityDelegate from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.matcher import uTensorGraphMatcher from utensor_cgen.utils import prune_graph, topologic_order_graph @@ -28,7 +29,7 @@ def callback(match): patrn_ugraph.ops_info['r_prime'].output_tensors[0]: ugraph.ops_info['fused_node'].output_tensors[0] } return ugraph, input_map, output_map - matcher = uTensorGraphMatcher(patrn_fc_1) + matcher = uTensorGraphMatcher(patrn_fc_1, op_equality_delegate=uTensorOpEqualityDelegate) matches = matcher.match(subj_graph_1) assert matches, 'no match found' match = matches[0] diff --git a/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py b/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py index e43980e6..fd1d9ac3 100644 --- a/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py +++ b/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py @@ -12,13 +12,15 @@ from utensor_cgen.ir.converter import (AttrValueConverter, DataTypeConverter, GenericTensorConverterMixin) from utensor_cgen.logger import logger -from utensor_cgen.matcher import OpEqualityDelegate, _morphism +from utensor_cgen.matcher import OpEqualityDelegateBase, _morphism from utensor_cgen.transformer.optimizer import RefCntOptimizer from utensor_cgen.utils import LazyLoader, NamescopedKWArgsParser __all__ = ['OperatorFactory', 'OpNotSupportedError'] tf = LazyLoader('tensorflow') +class uTensorOpEqualityDelegate(OpEqualityDelegateBase): pass + class OpNotSupportedError(Exception): pass @@ -86,7 +88,7 @@ def build_op_info(cls, ugraph, name, *args, **kwargs): @OperatorFactory.register -@OpEqualityDelegate.is_compatible_with("Inline", _morphism.Const2InlineMorphism) +@uTensorOpEqualityDelegate.is_compatible_with("Inline", _morphism.Const2InlineMorphism) class _ConstOperator(_Operator): op_type = "Const" @@ -157,7 +159,7 @@ def _tf_save_data(self, path, value): @OperatorFactory.register -@OpEqualityDelegate.is_associative( +@uTensorOpEqualityDelegate.is_associative( permutations=((0, 1), (1, 0)) ) class _AddOperator(_Operator): @@ -1137,7 +1139,7 @@ def __init__(self, op_info, **kwargs): @OperatorFactory.register -@OpEqualityDelegate.is_compatible_with("Const", _morphism.Inline2ConstMorphism) +@uTensorOpEqualityDelegate.is_compatible_with("Const", _morphism.Inline2ConstMorphism) class _InlineOperator(_Operator): op_type = "Inline" diff --git a/utensor_cgen/matcher/__init__.py b/utensor_cgen/matcher/__init__.py index 2522277b..58e0737b 100644 --- a/utensor_cgen/matcher/__init__.py +++ b/utensor_cgen/matcher/__init__.py @@ -1,2 +1,2 @@ -from ._matcher_impl import (OpEqualityDelegate, uTensorGraphMatch, +from ._matcher_impl import (OpEqualityDelegateBase, uTensorGraphMatch, uTensorGraphMatcher) diff --git a/utensor_cgen/matcher/_matcher_impl.py b/utensor_cgen/matcher/_matcher_impl.py index 4eca39e8..dc37f27c 100644 --- a/utensor_cgen/matcher/_matcher_impl.py +++ b/utensor_cgen/matcher/_matcher_impl.py @@ -5,6 +5,7 @@ import attr from attr.validators import instance_of from click import style +from six import with_metaclass from utensor_cgen.ir import (MetaOperationInfo, OperationInfo, uTensorGraph, uTensorGraphView) @@ -15,16 +16,30 @@ __all__ = ["uTensorGraphMatcher", "uTensorGraphMatch"] +class _OpEqualityDelegateMeta(type): + def __new__(mcls, name, bases, attribs): + if name != 'OpEqualityDelegateBase': + # op_type -> list[tuple] (permutations) + attribs['_association_map'] = {} + # op_type -> dict[op_type] -> morphism + attribs['_compatibility_map'] = {} + + cls = type.__new__(mcls, name, bases, attribs) + return cls + @attr.s(frozen=True, slots=True) -class OpEqualityDelegate(object): +class OpEqualityDelegateBase(with_metaclass(_OpEqualityDelegateMeta)): - # op_type -> list[tuple] (permutations) - _association_map = {} - # op_type -> dict[op_type] -> morphism - _compatibility_map = {} + def __new__(cls, *args, **kwargs): + if cls is OpEqualityDelegateBase: + raise RuntimeError('OpEqualityDelegateBase is abstract base class and should not be instantiated') + self = object.__new__(cls) + return self @classmethod def is_associative(cls, permutations): + if cls is OpEqualityDelegateBase: + raise RuntimeError('You should use OpEqualityDelegateBase directly, please create a subclass') def deco(op): if op.op_type in cls._association_map: raise ValueError( @@ -40,6 +55,8 @@ def deco(op): @classmethod def is_compatible_with(cls, other_op_type, morphism_type, **kwargs): + if cls is OpEqualityDelegateBase: + raise RuntimeError('You should use OpEqualityDelegateBase directly, please create a subclass') if not issubclass(morphism_type, Morphism): raise ValueError( 'expecting Morphism for `morphism`, get {}'.format(morphism_type) @@ -73,7 +90,8 @@ def query(cls, sub_op, patrn_op): equivalent_ops : List[OperationInfo] a list of equivalent ops derieved from `sub_op` """ - cls._setup() + if cls is OpEqualityDelegateBase: + raise RuntimeError('You should use OpEqualityDelegateBase directly, please create a subclass') is_eq = False equivalent_ops = [] if sub_op is None or patrn_op is None: @@ -105,11 +123,6 @@ def query(cls, sub_op, patrn_op): equivalent_ops = [MetaOperationInfo(op_info=sub_op, morphism=morphism)] return is_eq, equivalent_ops - - @classmethod - def _setup(cls): - # to activate all configurations - import utensor_cgen.backend.utensor.code_generator.legacy._operators @attr.s class uTensorGraphMatcher(object): @@ -126,7 +139,10 @@ class uTensorGraphMatcher(object): patrn_ugraph = ... # load the pattern uTensorGraph # create a matcher - matcher = uTensorGraphMatcher(pattern_ugraph=patrn_ugraph) + matcher = uTensorGraphMatcher( + pattern_ugraph=patrn_ugraph, + op_equality_delegate=delegate, # a subclass of :py:class:`OpEqualityDelegateBase` + ) # define a callback def callback(match): @@ -152,6 +168,11 @@ def callback(match): """ pattern_ugraph = attr.ib(validator=instance_of(uTensorGraph)) + _op_equality_delegate = attr.ib() + + def __attrs_post_init__(self): + assert issubclass(self._op_equality_delegate, OpEqualityDelegateBase), \ + 'expecting subclass of %s, get %s' % (OpEqualityDelegateBase, self._op_equality_delegate) def _match(self, other_ugraph): outputs_pool = [] @@ -227,7 +248,7 @@ def _visit(self, states): match = state.match sub_op = state.sub_bfs_queue.popleft() patrn_op = state.patrn_bfs_queue.popleft() - is_eq, eq_ops = OpEqualityDelegate.query(sub_op, patrn_op) + is_eq, eq_ops = self._op_equality_delegate.query(sub_op, patrn_op) if is_eq: for eq_op in eq_ops: new_sub_bfs_queue = deque(state.sub_bfs_queue) diff --git a/utensor_cgen/transformer/conv_pool.py b/utensor_cgen/transformer/conv_pool.py index d3de708a..4bae5ae5 100644 --- a/utensor_cgen/transformer/conv_pool.py +++ b/utensor_cgen/transformer/conv_pool.py @@ -7,6 +7,9 @@ from copy import deepcopy import tensorflow as tf +# FIXME: remove uTensorOpEqualityDelegate import after we have generic ops +from utensor_cgen.backend.utensor.code_generator.legacy._operators import \ + uTensorOpEqualityDelegate from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.ir import OperationInfo, TensorInfo, uTensorGraph from utensor_cgen.matcher import uTensorGraphMatcher @@ -49,7 +52,11 @@ def pattern_ugraph(self): def transform(self, ugraph): if ugraph.lib_name != 'tensorflow': raise ValueError('only support tensorflow graph') - matcher = uTensorGraphMatcher(pattern_ugraph=self.pattern_ugraph) + # FIXME: should use a generic op_equality_delegate + matcher = uTensorGraphMatcher( + pattern_ugraph=self.pattern_ugraph, + op_equality_delegate=uTensorOpEqualityDelegate + ) matches = matcher.match(ugraph, n=1) while matches: match = matches[0] diff --git a/utensor_cgen/transformer/linear_reoder.py b/utensor_cgen/transformer/linear_reoder.py index 68f8a204..2d421e3c 100644 --- a/utensor_cgen/transformer/linear_reoder.py +++ b/utensor_cgen/transformer/linear_reoder.py @@ -5,6 +5,9 @@ """ import tensorflow as tf +# FIXME: remove uTensorOpEqualityDelegate import after we have generic ops +from utensor_cgen.backend.utensor.code_generator.legacy._operators import \ + uTensorOpEqualityDelegate from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.matcher import uTensorGraphMatcher from utensor_cgen.utils import prune_graph, topologic_order_graph @@ -37,7 +40,11 @@ def pattern_ugraph(self): return pattern_ugraph def transform(self, ugraph): - matcher = uTensorGraphMatcher(pattern_ugraph=self.pattern_ugraph) + # FIXME: should use a generic op_equality_delegate + matcher = uTensorGraphMatcher( + pattern_ugraph=self.pattern_ugraph, + op_equality_delegate=uTensorOpEqualityDelegate + ) matches = matcher.match(ugraph, 1) while matches: match = matches[0] diff --git a/utensor_cgen/transformer/ns_transformer.py b/utensor_cgen/transformer/ns_transformer.py index d8e6bc19..d3e68a32 100644 --- a/utensor_cgen/transformer/ns_transformer.py +++ b/utensor_cgen/transformer/ns_transformer.py @@ -10,6 +10,9 @@ import numpy as np import tensorflow as tf +# FIXME: remove uTensorOpEqualityDelegate import after we have generic ops +from utensor_cgen.backend.utensor.code_generator.legacy._operators import \ + uTensorOpEqualityDelegate from utensor_cgen.frontend.tensorflow import GraphDefParser from utensor_cgen.ir import OperationInfo, uTensorGraph from utensor_cgen.logger import logger @@ -206,7 +209,11 @@ def transform(self, ugraph): return new_ugraph def _transform_tf(self, ugraph): - matcher = uTensorGraphMatcher(pattern_ugraph=self.pattern_ugraph) + # FIXME: should use a generic op_equality_delegate + matcher = uTensorGraphMatcher( + pattern_ugraph=self.pattern_ugraph, + op_equality_delegate=uTensorOpEqualityDelegate + ) matches = matcher.match(ugraph, n=1) while matches: match = matches[0] From 6feccbef345f920e06cbf3092952b6d85428c7a1 Mon Sep 17 00:00:00 2001 From: kazami Date: Wed, 11 Mar 2020 18:38:49 +0800 Subject: [PATCH 064/117] modify for brutal force version of memory planner --- utensor_cgen/backend/graph_lower/__init__.py | 1 + utensor_cgen/backend/graph_lower/generic_graph_lower.py | 8 +++++--- utensor_cgen/backend/utensor/_backend_impl.py | 5 +++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/utensor_cgen/backend/graph_lower/__init__.py b/utensor_cgen/backend/graph_lower/__init__.py index 403c0958..7e9dcad6 100644 --- a/utensor_cgen/backend/graph_lower/__init__.py +++ b/utensor_cgen/backend/graph_lower/__init__.py @@ -4,3 +4,4 @@ That is, it should work with any uTensorGraph for any backend. """ from .generic_graph_lower import TensorAllocationPlanner +from .generic_graph_lower import BrutalForceMemoryPlanner diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index 05f12d4b..d2f1bdc7 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -9,6 +9,7 @@ from copy import deepcopy from itertools import chain, combinations, product from math import ceil, log10 +import pdb import numpy as np import tensorflow as tf @@ -266,6 +267,7 @@ def __init__(self, config): self._type[np.dtype(tf.quint8.as_numpy_dtype)] = self.config['size_uint8_t'] self._type[np.dtype(tf.qint8.as_numpy_dtype)] = self.config['size_uint8_t'] self._type[np.dtype(tf.qint32.as_numpy_dtype)] = self.config['size_int'] + self._type[np.dtype(tf.int64.as_numpy_dtype)] = self.config['size_int'] def apply(self, ugraph): # ugraph.setup_data_manager(self.KWARGS_NAMESCOPE, {}) @@ -286,7 +288,7 @@ def apply(self, ugraph): ) space_alloc = SpaceAllocation( offset_start=allocate_table[in_o.name]['offsetstart'], - offset_end=allocate_table[in_o.name]['offsetend'], + size=allocate_table[in_o.name]['offsetend'] - allocate_table[in_o.name]['offsetstart'], ) if allocate_table[in_o.name]['offsetend'] >= max_offset_end: max_offset_end = allocate_table[in_o.name]['offsetend'] @@ -298,7 +300,7 @@ def apply(self, ugraph): ) ) # new_ugraph.data_manager.address = (in_o.name, allocate_table[in_o.name]['offsetstart']) - out_t_infos = new_ugraph.ops_info[node_name].output_tensors + out_t_infos = ugraph.ops_info[node_name].output_tensors for out_o in out_t_infos: if out_o.name in allocate_table: time_alloc = TimeslotAllocation( @@ -307,7 +309,7 @@ def apply(self, ugraph): ) space_alloc = SpaceAllocation( offset_start=allocate_table[out_o.name]['offsetstart'], - offset_end=allocate_table[out_o.name]['offsetend'], + size=allocate_table[out_o.name]['offsetend'] - allocate_table[out_o.name]['offsetstart'], ) if allocate_table[out_o.name]['offsetend'] >= max_offset_end: max_offset_end = allocate_table[out_o.name]['offsetend'] diff --git a/utensor_cgen/backend/utensor/_backend_impl.py b/utensor_cgen/backend/utensor/_backend_impl.py index 03b918a7..f245c60e 100644 --- a/utensor_cgen/backend/utensor/_backend_impl.py +++ b/utensor_cgen/backend/utensor/_backend_impl.py @@ -11,6 +11,7 @@ uTensorLegacyGraphLower = LazyAttrib(_op_lower, 'uTensorLegacyGraphLower') uTensorRearchGraphLower = LazyAttrib(_op_lower, 'uTensorRearchGraphLower') TensorAllocationPlanner = LazyAttrib(generic_graph_lower, 'TensorAllocationPlanner') +BrutalForceMemoryPlanner = LazyAttrib(generic_graph_lower, 'BrutalForceMemoryPlanner') PipelineTransformer = LazyAttrib(transformer, 'PipelineTransformer') del code_generator, _op_lower, generic_graph_lower @@ -31,7 +32,7 @@ def __init__( if config['legacy-api']: code_generator = code_generator or uTensorLegacyCodeGenerator(config=config[uTensorLegacyCodeGenerator.PART].to_dict()) graph_op_lower = graph_op_lower or uTensorLegacyGraphLower(config=config[uTensorLegacyGraphLower.PART].to_dict()) - graph_alloc_lower = graph_alloc_lower or TensorAllocationPlanner(config=config[TensorAllocationPlanner.PART].to_dict()) + graph_alloc_lower = graph_alloc_lower or BrutalForceMemoryPlanner(config=config[BrutalForceMemoryPlanner.PART].to_dict()) else: code_generator = code_generator or uTensorRearchCodeGenerator(config=config[uTensorRearchCodeGenerator.PART].to_dict()) graph_op_lower = graph_op_lower or uTensorRearchGraphLower(config=config[uTensorRearchGraphLower.PART].to_dict()) @@ -48,7 +49,7 @@ def default_config(cls): config[cls.TARGET] = {} config[cls.TARGET][cls.COMPONENT] = {} config[cls.TARGET][cls.COMPONENT]['legacy-api'] = True - config[cls.TARGET][cls.COMPONENT][TensorAllocationPlanner.PART] = TensorAllocationPlanner.default_config + config[cls.TARGET][cls.COMPONENT][BrutalForceMemoryPlanner.PART] = BrutalForceMemoryPlanner.default_config config[cls.TARGET][cls.COMPONENT][uTensorLegacyCodeGenerator.PART] = uTensorLegacyCodeGenerator.default_config config[cls.TARGET][cls.COMPONENT][uTensorLegacyGraphLower.PART] = uTensorLegacyGraphLower.default_config config[cls.TARGET][cls.COMPONENT][uTensorRearchCodeGenerator.PART] = uTensorRearchCodeGenerator.default_config From 4b5f8fd36d4192082ea3c8287e0f882da9a1dbe9 Mon Sep 17 00:00:00 2001 From: kazami Date: Wed, 11 Mar 2020 18:40:57 +0800 Subject: [PATCH 065/117] remove the unnecssary lib --- utensor_cgen/backend/graph_lower/generic_graph_lower.py | 1 - 1 file changed, 1 deletion(-) diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index d2f1bdc7..864c7f41 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -9,7 +9,6 @@ from copy import deepcopy from itertools import chain, combinations, product from math import ceil, log10 -import pdb import numpy as np import tensorflow as tf From 3dc3f031300fe0cef144839f620ece499f8a7b51 Mon Sep 17 00:00:00 2001 From: kazami Date: Wed, 11 Mar 2020 18:53:33 +0800 Subject: [PATCH 066/117] change the default setting of memory planner --- utensor_cgen/backend/utensor/_backend_impl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utensor_cgen/backend/utensor/_backend_impl.py b/utensor_cgen/backend/utensor/_backend_impl.py index f245c60e..826c1b4e 100644 --- a/utensor_cgen/backend/utensor/_backend_impl.py +++ b/utensor_cgen/backend/utensor/_backend_impl.py @@ -32,7 +32,7 @@ def __init__( if config['legacy-api']: code_generator = code_generator or uTensorLegacyCodeGenerator(config=config[uTensorLegacyCodeGenerator.PART].to_dict()) graph_op_lower = graph_op_lower or uTensorLegacyGraphLower(config=config[uTensorLegacyGraphLower.PART].to_dict()) - graph_alloc_lower = graph_alloc_lower or BrutalForceMemoryPlanner(config=config[BrutalForceMemoryPlanner.PART].to_dict()) + graph_alloc_lower = graph_alloc_lower or TensorAllocationPlanner(config=config[TensorAllocationPlanner.PART].to_dict()) else: code_generator = code_generator or uTensorRearchCodeGenerator(config=config[uTensorRearchCodeGenerator.PART].to_dict()) graph_op_lower = graph_op_lower or uTensorRearchGraphLower(config=config[uTensorRearchGraphLower.PART].to_dict()) @@ -49,7 +49,7 @@ def default_config(cls): config[cls.TARGET] = {} config[cls.TARGET][cls.COMPONENT] = {} config[cls.TARGET][cls.COMPONENT]['legacy-api'] = True - config[cls.TARGET][cls.COMPONENT][BrutalForceMemoryPlanner.PART] = BrutalForceMemoryPlanner.default_config + config[cls.TARGET][cls.COMPONENT][TensorAllocationPlanner.PART] = TensorAllocationPlanner.default_config config[cls.TARGET][cls.COMPONENT][uTensorLegacyCodeGenerator.PART] = uTensorLegacyCodeGenerator.default_config config[cls.TARGET][cls.COMPONENT][uTensorLegacyGraphLower.PART] = uTensorLegacyGraphLower.default_config config[cls.TARGET][cls.COMPONENT][uTensorRearchCodeGenerator.PART] = uTensorRearchCodeGenerator.default_config From 26e38f6a3e79837b8e1ab782b38e486f248ea115 Mon Sep 17 00:00:00 2001 From: kazami Date: Wed, 11 Mar 2020 18:54:47 +0800 Subject: [PATCH 067/117] remove the brutal force memory planner --- utensor_cgen/backend/utensor/_backend_impl.py | 1 - 1 file changed, 1 deletion(-) diff --git a/utensor_cgen/backend/utensor/_backend_impl.py b/utensor_cgen/backend/utensor/_backend_impl.py index 826c1b4e..03b918a7 100644 --- a/utensor_cgen/backend/utensor/_backend_impl.py +++ b/utensor_cgen/backend/utensor/_backend_impl.py @@ -11,7 +11,6 @@ uTensorLegacyGraphLower = LazyAttrib(_op_lower, 'uTensorLegacyGraphLower') uTensorRearchGraphLower = LazyAttrib(_op_lower, 'uTensorRearchGraphLower') TensorAllocationPlanner = LazyAttrib(generic_graph_lower, 'TensorAllocationPlanner') -BrutalForceMemoryPlanner = LazyAttrib(generic_graph_lower, 'BrutalForceMemoryPlanner') PipelineTransformer = LazyAttrib(transformer, 'PipelineTransformer') del code_generator, _op_lower, generic_graph_lower From ac08440b0f7cbabaa68dd01459c6cbfe13820d1a Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 13 Mar 2020 13:56:20 +0800 Subject: [PATCH 068/117] resolve review issues - making data alignment for offline memory planner configurable - fix typos (REAME.rst and code base) --- README.rst | 7 +++---- utensor_cgen/backend/base.py | 10 +++++----- .../backend/graph_lower/generic_graph_lower.py | 12 ++++++++++-- utensor_cgen/backend/utensor/snippets/_base.py | 10 +++++----- utensor_cgen/legalizer/base.py | 6 +++--- utensor_cgen/matcher/_morphism.py | 6 +++--- utensor_cgen/utils.py | 4 ++-- 7 files changed, 31 insertions(+), 24 deletions(-) diff --git a/README.rst b/README.rst index 000be69e..5cabcb70 100644 --- a/README.rst +++ b/README.rst @@ -241,14 +241,13 @@ Considering following simple multi layers perceptron (`simple_mnist.pb`_): \ |mlp-alloc-graph| -Once enabled the optimization transformer, ``tensor_alloc``, -which is an offline tensor memory allocation planner, +Once enabled the optimization transformer, ``tensor_alloc``, an offline tensor memory allocation planner, ``utensor-cli`` will generate ``uTensor`` runtime codes that use following optimized allocation plan: \ |mlp-alloc| -- On the y-axis, these are tensor names ordered by topological sorting -- On the x-axis, these are the memory span occupied by each tensor +- y-axis: tensor names ordered by topological sorting +- x-axis: these are the memory span occupied by each tensor .. offline-tensor-alloc-end diff --git a/utensor_cgen/backend/base.py b/utensor_cgen/backend/base.py index a316b05b..7b586937 100644 --- a/utensor_cgen/backend/base.py +++ b/utensor_cgen/backend/base.py @@ -1,6 +1,6 @@ from abc import abstractmethod -from utensor_cgen.utils import (MUST_OVERWRITEN, Configuration, class_property, +from utensor_cgen.utils import (MUST_OVERWRITE, Configuration, class_property, is_abstract, parse_toml) @@ -72,11 +72,11 @@ class Backend(_BackendBase): - ``transform`` will create a new ugraph, applying side-effect on new ugraph and return it """ - TARGET = MUST_OVERWRITEN + TARGET = MUST_OVERWRITE @classmethod def _validate_target(cls, config, *args, **kwargs): - if cls.TARGET is MUST_OVERWRITEN: + if cls.TARGET is MUST_OVERWRITE: raise ValueError( 'Every Backend must overwrite TARGET attribute: {}'.format(cls) ) @@ -93,11 +93,11 @@ def from_config(cls, config, *args, **kwargs): class BackendPart(Backend): - PART = MUST_OVERWRITEN + PART = MUST_OVERWRITE @classmethod def _validate_part(cls, config, *args, **kwargs): - if cls.PART is MUST_OVERWRITEN: + if cls.PART is MUST_OVERWRITE: raise ValueError( 'Every BackendPart must overwrite PART attribute: {}'.format(cls) ) diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index 864c7f41..6c20b773 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -92,6 +92,7 @@ def __init__(self, config): if self.aesthetic_kwargs['figsize'] == 'None': self.aesthetic_kwargs['figsize'] = None self.enabled = self.config['enabled'] + self.data_alignment = self.config['data_alignment'] self.dtype_size_map = self._parse_dtype_size_map(self.config) def apply(self, ugraph): @@ -209,9 +210,15 @@ def _solve_space_alloc(self, tensors_to_schedule, nonoverlap_map): return alloc_plan, opt_mempool_size def _compute_tensor_bytes_size(self, tensor_info): + """ + compute aligned memory size (in bytes) + """ size = tensor_info.size elem_size = self.dtype_size_map.get(tensor_info.dtype, tensor_info.dtype.itemsize) - return elem_size * size + total_size = elem_size * size + if total_size % self.data_alignment: + total_size = ceil(total_size / self.data_alignment) * self.data_alignment + return total_size @classmethod def _parse_dtype_size_map(cls, config): @@ -230,7 +237,7 @@ def _parse_dtype_size_map(cls, config): @class_property def default_config(cls): return { - 'max_pool_size': 1024*1024, # 1k bytes + 'max_pool_size': 1024*1024, # 1G bytes 'include_inputs': False, 'out_fname': 'None', 'aesthetic_kwargs': { @@ -242,6 +249,7 @@ def default_config(cls): 'rand_seed': 1111 }, 'enabled': True, + 'data_alignment': 2, # 2-bytes alignment 'dtype_size_map': { 'float': 4, 'double': 8, diff --git a/utensor_cgen/backend/utensor/snippets/_base.py b/utensor_cgen/backend/utensor/snippets/_base.py index c21cb721..49daf799 100644 --- a/utensor_cgen/backend/utensor/snippets/_base.py +++ b/utensor_cgen/backend/utensor/snippets/_base.py @@ -2,7 +2,7 @@ from abc import ABCMeta from copy import deepcopy -from utensor_cgen.utils import MUST_OVERWRITEN +from utensor_cgen.utils import MUST_OVERWRITE from .template_env import env as _env @@ -11,13 +11,13 @@ class SnippetBase(object): __metaclass__ = ABCMeta - __template_name__ = MUST_OVERWRITEN - __headers__ = MUST_OVERWRITEN + __template_name__ = MUST_OVERWRITE + __headers__ = MUST_OVERWRITE def __init__(self): - if self.__template_name__ is MUST_OVERWRITEN: + if self.__template_name__ is MUST_OVERWRITE: raise ValueError('must overwrite {}.__template_name__'.format(type(self))) - if self.__headers__ is MUST_OVERWRITEN: + if self.__headers__ is MUST_OVERWRITE: raise ValueError('must overwrite {}.__headers__'.format(type(self))) if not isinstance(self.__headers__, set): raise ValueError('__headers__ should be of type set, get {}'.format(type(self.__headers__))) diff --git a/utensor_cgen/legalizer/base.py b/utensor_cgen/legalizer/base.py index e401eb8b..10903ed3 100644 --- a/utensor_cgen/legalizer/base.py +++ b/utensor_cgen/legalizer/base.py @@ -1,9 +1,9 @@ -from utensor_cgen.utils import MUST_OVERWRITEN +from utensor_cgen.utils import MUST_OVERWRITE class LegalizerBase(object): - TARGET = MUST_OVERWRITEN + TARGET = MUST_OVERWRITE COMPONET = 'legalizer' def __new__(cls, config): @@ -11,7 +11,7 @@ def __new__(cls, config): raise TypeError( 'expecting dict as config, get {}'.format(type(config)) ) - if cls.TARGET is MUST_OVERWRITEN: + if cls.TARGET is MUST_OVERWRITE: raise ValueError('cls.TARGET must be overwriten') self = object.__new__(cls) self._config = config diff --git a/utensor_cgen/matcher/_morphism.py b/utensor_cgen/matcher/_morphism.py index 4013e7f1..9b537fcc 100644 --- a/utensor_cgen/matcher/_morphism.py +++ b/utensor_cgen/matcher/_morphism.py @@ -3,7 +3,7 @@ import attr -from utensor_cgen.utils import MUST_OVERWRITEN +from utensor_cgen.utils import MUST_OVERWRITE class Morphism(object): @@ -16,10 +16,10 @@ def apply(self, from_op): @attr.s class TypedMorphism(Morphism): - from_op_type = MUST_OVERWRITEN + from_op_type = MUST_OVERWRITE def __attrs_post_init__(self): - if self.from_op_type is MUST_OVERWRITEN: + if self.from_op_type is MUST_OVERWRITE: raise ValueError( "must overwrite {}.from_op_type".format(type(self).__name__) ) diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index b51790b5..3f47219f 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -20,7 +20,7 @@ from utensor_cgen.logger import logger __all__ = ["save_idx", "save_consts", "save_graph", "log_graph", - "NamescopedKWArgsParser", "NArgsParam", "MUST_OVERWRITEN"] + "NamescopedKWArgsParser", "NArgsParam", "MUST_OVERWRITE"] class LazyLoader(types.ModuleType): @@ -315,7 +315,7 @@ def __new__(cls, *args, **kwargs): return cls._obj -MUST_OVERWRITEN = _MustOverwrite() +MUST_OVERWRITE = _MustOverwrite() def topologic_order_graph(ugraph): From ef4f1cb404babcb88b4302fc9dfbe79612edf467 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 13 Mar 2020 14:08:47 +0800 Subject: [PATCH 069/117] Add data alignment attribute for SpaceAllocation --- utensor_cgen/backend/graph_lower/alloc_plan.py | 7 +++++++ utensor_cgen/backend/graph_lower/generic_graph_lower.py | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/utensor_cgen/backend/graph_lower/alloc_plan.py b/utensor_cgen/backend/graph_lower/alloc_plan.py index 1f597ba1..e6416ee3 100644 --- a/utensor_cgen/backend/graph_lower/alloc_plan.py +++ b/utensor_cgen/backend/graph_lower/alloc_plan.py @@ -31,6 +31,7 @@ def __contains__(self, slot): class SpaceAllocation(object): offset_start = attr.ib(validator=instance_of(int)) size = attr.ib(validator=instance_of(int)) + data_alignment = attr.ib(validator=instance_of(int)) offset_end = attr.ib(init=False) def __attrs_post_init__(self): @@ -38,6 +39,12 @@ def __attrs_post_init__(self): 'invalid offset_start: %s' % self.offset_start assert self.size > 0, \ 'invalid size: %s' % self.size + errmsg = ( self.data_alignment > 1 and + 'the memory offset is not aligned: %s (not %ss aligned)' or + 'the memory offset is not aligned: %s (not %s aligned)' + ) + assert self.size % self.data_alignment == 0, \ + errmsg % (self.size, self.data_alignment) self.offset_end = self.offset_start + self.size - 1 def __contains__(self, offset): diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index 6c20b773..bf3a6048 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -202,7 +202,8 @@ def _solve_space_alloc(self, tensors_to_schedule, nonoverlap_map): for name, alloc in tensor_allocs.items(): alloc_plan[name] = SpaceAllocation( offset_start=solver.Value(alloc.start), - size=alloc.size + size=alloc.size, + data_alignment=self.data_alignment, ) logger.info('optimal tensor allocation plan solved, memory span: %i bytes', opt_mempool_size) else: From 2c2c9e6ac07a07d556a4edec18f979b95436f7de Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 13 Mar 2020 14:35:28 +0800 Subject: [PATCH 070/117] better logging messages --- .../backend/graph_lower/generic_graph_lower.py | 8 ++++++-- utensor_cgen/ir/base.py | 16 ++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index bf3a6048..22fbc484 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -197,7 +197,7 @@ def _solve_space_alloc(self, tensors_to_schedule, nonoverlap_map): status = solver.Solve(model) alloc_plan = {} opt_mempool_size = None - if solver.StatusName(status) == 'OPTIMAL': + if status == cp_model.OPTIMAL: opt_mempool_size = solver.Value(var_mempool_size) for name, alloc in tensor_allocs.items(): alloc_plan[name] = SpaceAllocation( @@ -205,9 +205,13 @@ def _solve_space_alloc(self, tensors_to_schedule, nonoverlap_map): size=alloc.size, data_alignment=self.data_alignment, ) - logger.info('optimal tensor allocation plan solved, memory span: %i bytes', opt_mempool_size) + logger.info('optimal tensor allocation plan solved, total memory required: %i bytes', opt_mempool_size) else: logger.info('tensor allocation plan not found, status: %s', solver.StatusName(status)) + if status == cp_model.INFEASIBLE: + logger.info( + 'the optimal plan is infeasible, please set `max_pool_size` a larger value: %s' % self.max_pool_size + ) return alloc_plan, opt_mempool_size def _compute_tensor_bytes_size(self, tensor_info): diff --git a/utensor_cgen/ir/base.py b/utensor_cgen/ir/base.py index 638f0328..6b336878 100644 --- a/utensor_cgen/ir/base.py +++ b/utensor_cgen/ir/base.py @@ -174,20 +174,24 @@ def is_null_tensor(self): @property def size(self): + if self.shape is None: + raise RuntimeError('nondeterministic shape has no size') if None in self.shape: logger.warning( - 'nondeterministic shape, implicit converting None to 1: %s, %s', + 'nondeterministic dimension detected, implicitly converting None to 1: %s, %s', self.name, self.shape, ) return reduce(lambda i, j: i*(j is None and 1 or j), self.shape, 1) def __deepcopy__(self, memo): - new_tensor = TensorInfo(name=self.name, - ugraph=memo['ugraph'], - op_name=self.op_name, - dtype=self.dtype, - shape=deepcopy(self.shape, memo)) + new_tensor = TensorInfo( + name=self.name, + ugraph=memo['ugraph'], + op_name=self.op_name, + dtype=self.dtype, + shape=deepcopy(self.shape, memo) + ) return new_tensor def __hash__(self): From 7d9d6eaeb9e380d233580612cb173e2ea7085e77 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sat, 14 Mar 2020 14:44:23 +0800 Subject: [PATCH 071/117] add comments --- utensor_cgen/backend/graph_lower/generic_graph_lower.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index 22fbc484..5d87f9f6 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -219,9 +219,12 @@ def _compute_tensor_bytes_size(self, tensor_info): compute aligned memory size (in bytes) """ size = tensor_info.size + # use user-defined element size or fall back to numpy size elem_size = self.dtype_size_map.get(tensor_info.dtype, tensor_info.dtype.itemsize) total_size = elem_size * size - if total_size % self.data_alignment: + if total_size % self.data_alignment != 0: + # if not aligned, compute the smallest aligned size + # TODO: do we need to take care how data is zero-padded? total_size = ceil(total_size / self.data_alignment) * self.data_alignment return total_size From 6796df585004a548adef711a1235b433d5fd83c7 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 18 Mar 2020 17:21:23 +0800 Subject: [PATCH 072/117] resolve code review issues, including renaming and minor code refactoring. --- .../code_generator/rearch/_code_generator.py | 32 +++++-- utensor_cgen/frontend/onnx.py | 95 ++++++++++--------- utensor_cgen/legalizer/onnx.py | 4 +- 3 files changed, 77 insertions(+), 54 deletions(-) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py index 90469b8a..3770f730 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py @@ -29,12 +29,9 @@ def __init__(self, config): self.meta_data_pool_size = final_config['meta_data_pool_size'] self.ram_data_pool_size = final_config['ram_data_pool_size'] self.model_dir = final_config['model_dir'].rstrip('/') - - def apply(self, ugraph): - src_fname = self.src_fname - if src_fname == 'None': - src_fname = '{}.cpp'.format(ugraph.name) - # 1. find all ops required + + def _find_required_ops(self, ugraph): + # find all ops required ops = set() placeholders = set() tensor_var_map = {} # tensor name -> var name @@ -48,7 +45,10 @@ def apply(self, ugraph): ops.add( OperatorFactory.get_opertor(op_info) ) - # 2. ops/tensors declaration + return ops, placeholders, tensor_var_map + + def _get_declare_snippets(self, ugraph, ops, tensor_var_map): + # get ops/tensors declaration snippets declare_snippets = [] ops_map = {} # op -> op variable name for i, op in enumerate(ops): @@ -74,6 +74,18 @@ def apply(self, ugraph): tensor=tensor ) ) + return ops_map, declare_snippets + + def apply(self, ugraph): + src_fname = self.src_fname + if src_fname == 'None': + src_fname = '{}.cpp'.format(ugraph.name) + ( + ops, # Set[OperationInfo] + placeholders, # Set[OperationInfo] + tensor_var_map, # dict, tensor name -> var name + ) = self._find_required_ops(ugraph) + ops_map, declare_snippets = self._get_declare_snippets(ugraph, ops, tensor_var_map) # 3. evaluation snippets eval_snippets = [] for op_name in ugraph.topo_order: @@ -134,7 +146,8 @@ def default_config(cls): config['ram_data_pool_size'] = 'auto' return config - def _compute_meta_data_size(self, ugraph): + def _compute_meta_data_size(self, ugraph, mem_optimizer=None): + # TODO: if mem_optimizer is None, use a default mem optimizer if self.meta_data_pool_size == 'auto': # TODO: compute actual meta data size with ugraph size = 256 @@ -142,7 +155,8 @@ def _compute_meta_data_size(self, ugraph): size = self.meta_data_pool_size return size - def _compute_ram_data_size(self, ugraph): + def _compute_ram_data_size(self, ugraph, mem_optimizer=None): + # TODO: if mem_optimizer is None, use a default mem optimizer if self.ram_data_pool_size == 'auto': # TODO: compute actual ram data size with ugraph size = 256 diff --git a/utensor_cgen/frontend/onnx.py b/utensor_cgen/frontend/onnx.py index c7767eda..92e735c7 100644 --- a/utensor_cgen/frontend/onnx.py +++ b/utensor_cgen/frontend/onnx.py @@ -7,7 +7,6 @@ import tensorflow as tf from onnx.onnx_pb import TensorProto from onnx_tf.backend import TensorflowBackend, prepare - from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser from utensor_cgen.ir import OperationInfo, TensorInfo, uTensorGraph @@ -50,12 +49,47 @@ def parse(self, onnx_file, output_nodes=None): ugraph = Legalizer.legalize(ugraph) tf.reset_default_graph() return ugraph - + def _build_graph(self, onnx_graph, ugraph): - op_types_cnt = Counter() - tensor_names_map = {} - # add const ops - params_dict = self._get_params_dict(onnx_graph) + op_types_cnt = Counter() # op_type (str) -> count (int) + tensor_names_map = {} # tensor_name (str) -> tensor_info (TensorInfo) + # these methods will update inputs **inplace** + self._build_param_ops( + onnx_graph, ugraph, op_types_cnt, tensor_names_map + ) + self._build_input_ops( + onnx_graph, ugraph, op_types_cnt, tensor_names_map + ) + self._build_intermediate_ops( + onnx_graph, ugraph, op_types_cnt, tensor_names_map, + ) + # find outupt nodes + distinct_out_ops = set() + graph_output = set([v.name for v in onnx_graph.output]) + for name, tensor_info in tensor_names_map.items(): + if name in graph_output: + distinct_out_ops.add(tensor_info.op_name) + ugraph.output_nodes = list(distinct_out_ops) + topologic_order_graph(ugraph) + _PostProcessing.post_process(ugraph) + + def _build_param_ops(self, onnx_graph, ugraph, op_types_cnt, tensor_names_map): + """Find all tensors in initialization list in onnx_graph, normally constants + + Note that this method will update op_types_cnt and tensor_names_map **inplace** + """ + # find Const ops + params_dict = {} + # FIXME: avoid using internal api of other library + dict_items = TensorflowBackend._onnx_initializer_to_input_dict_items(onnx_graph.initializer) + for name, tf_tensor in dict_items: + params_dict[name] = AttrValueConverter.GenericType( + value_name='value', + value=TensorProtoConverter.get_generic_value( + tf_tensor.op.get_attr('value') + ) + ) + # build Const ops for tensor_name, tensor_value in params_dict.items(): cnt = op_types_cnt['Const'] node_name = self._format_node_name(tensor_name, 'Const', cnt) @@ -78,6 +112,13 @@ def _build_graph(self, onnx_graph, ugraph): 'value': tensor_value } ) + + def _build_input_ops(self, onnx_graph, ugraph, op_types_cnt, tensor_names_map): + """Find placeholders + That is, those ops in the input list but not in initialization list + + Note this method will update inputs **inplace** + """ # placeholders for value in onnx_graph.input: # value: ValueInfoProto @@ -113,18 +154,10 @@ def _build_graph(self, onnx_graph, ugraph): lib_name='onnx', op_attr={} ) - for node in onnx_graph.node: - cnt = op_types_cnt[node.op_type] - node_name = self._format_node_name(node.name, node.op_type, cnt) - for i, tensor_name in enumerate(node.output): - tensor_names_map[tensor_name] = TensorInfo( - name=self._format_tensor_name(tensor_name, node_name, i), - op_name=node_name, - dtype=None, - shape=None, - ugraph=ugraph, - ) - node_names_map = {} + + def _build_intermediate_ops(self, onnx_graph, ugraph, op_types_cnt, tensor_names_map): + """Build all intermediate nodes, the nodes that is not in neither initialization list nor input list + """ # create all outupt tensors for node in onnx_graph.node: cnt = op_types_cnt[node.op_type] @@ -138,8 +171,6 @@ def _build_graph(self, onnx_graph, ugraph): shape=None, ugraph=ugraph ) - if node.name: - node_names_map[node.name] = node_name # create ops for node in onnx_graph.node: input_tensors = [ @@ -148,7 +179,6 @@ def _build_graph(self, onnx_graph, ugraph): output_tensors = [ tensor_names_map[name] for name in node.output ] - op_attr = { attrib_pb.name: _convert_op_attribute(attrib_pb) for attrib_pb in node.attribute @@ -163,16 +193,7 @@ def _build_graph(self, onnx_graph, ugraph): ugraph=ugraph, op_attr=op_attr ) - # find outupt nodes - distinct_out_tensors = set() - graph_output = set([v.name for v in onnx_graph.output]) - for name, tensor_info in tensor_names_map.items(): - if name in graph_output: - distinct_out_tensors.add(tensor_info.op_name) - ugraph.output_nodes = list(distinct_out_tensors) - topologic_order_graph(ugraph) - _PostProcessing.post_process(ugraph) - + def _format_node_name(self, node_name, op_type, op_cnt): if node_name == '': node_name = '{}_{}'.format(op_type, op_cnt) @@ -183,18 +204,6 @@ def _format_tensor_name(self, name, node_name, offset): return name return '{}:{}'.format(node_name, offset) - def _get_params_dict(self, onnx_graph): - dict_items = TensorflowBackend._onnx_initializer_to_input_dict_items(onnx_graph.initializer) - params_dict = {} - for name, tf_tensor in dict_items: - params_dict[name] = AttrValueConverter.GenericType( - value_name='value', - value=TensorProtoConverter.get_generic_value( - tf_tensor.op.get_attr('value') - ) - ) - return params_dict - class _PostProcessing(object): diff --git a/utensor_cgen/legalizer/onnx.py b/utensor_cgen/legalizer/onnx.py index 2a8fceba..d9459252 100644 --- a/utensor_cgen/legalizer/onnx.py +++ b/utensor_cgen/legalizer/onnx.py @@ -8,10 +8,10 @@ class OnnxLegalizer(LegalizerBase): TARGET = 'onnx' def legalize(self, ugraph): - self._visit(ugraph) + self._visit_all(ugraph) return ugraph - def _visit(self, ugraph): + def _visit_all(self, ugraph): for op_info in list(ugraph.ops_info.values()): visitor = getattr( self, From 319f6356c4b1857d0a00f27f986a43b4fe0cb9e8 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 20 Mar 2020 22:20:47 +0800 Subject: [PATCH 073/117] add new cnn pb file --- tests/deep_cnn/buggy.pb | Bin 0 -> 243447 bytes tests/deep_cnn/cifar10_cnn.pb | Bin 243254 -> 241272 bytes utensor_cgen/frontend/tensorflow.py | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 tests/deep_cnn/buggy.pb diff --git a/tests/deep_cnn/buggy.pb b/tests/deep_cnn/buggy.pb new file mode 100644 index 0000000000000000000000000000000000000000..9d723332e18522bb284f7a7c6168181c11ef9f95 GIT binary patch literal 243447 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∋`{m}-X|2iMHuBs9TS1RLp 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 F`5!rD1tb6f delta 3693 zcmbtXPi)gx7|-)dD19aAuv!RCNhpPmWdpZqG69>)3KM^X`bUMKT}I~CF16;ymE)9x z#N265U~Ls9?Ya25VRR66(O6Bt zpqf=4j>)p{9KAEANM_AY$_vt>&`Iyis8ZE_5+A%boXDT-&Uc}NY+fQ%xFLYPu-_Wb z?hIlH-Hk=%VMgQL&GCc48by>GxgSi)yRpHf6pX|*(&jr5I7<@^qpfbNG;69$lBwzy zK0d8zHAgiA_LsZ|P{+8mJf-UzpYeVP8)5Jj6AaC6c zgF!e73rwMXbG#q#OLP11R|Ys_|GNI*WlwIQh1`O;QEq|CwSV||&?fmmDg1I3KfVsO zgAsdpy*KBS&ckvmJkmPCp)!c$^KXBI^s~T1B1HjRkQ* zt+dM>i-mKCfvgac^h_$MXio&CY0B^ohajH}UHUp3HMbN`A`H=NTvQcBF7RABmPaVw zxM=)FGm(X0m5i*Ev@A3|vw~&xr~srzCRwOyJRGlS!c%E)PRFtlt~8rPr^k7;t#u`x z$=Af0fexh?o3!Kd$Mz!6)dK;5Bjs*pEJj zx;;UrQB!1fiSL+JB<*!|DZI%nIw^e=uP(GKulTfC*_(0wcA|WI3Rh64J6+4eJe!S- zE&*)B;@xTP0KRO3e0|LXQ@g-t_{nvU&G>8GaaIhDv&;4SH^8Xx8pRf~tJq?86(eR> zF=}>sz`m@9D;#nLd`YY?V{mE()d6yhs??aq1CE0PAzcY2CIM&D+}qp9sOpqejlO{@ zzZq>3;(&bW@20si4vgZj1+Mpui`+s?DMCysN=(VE53Dkq9a{w=frGNge!Ch}@iwy7Dhl{QaRD=>+THmTT*d&)YrNg5iX zmWa{ES-aO@FaCB74g}{h#DA>8onz=ciZ2@E#I|Y7xIk=pV*-bjkZMGUvbvyDs^l*d N6M?7h!W_rP{sRdZbO- Date: Fri, 20 Mar 2020 23:18:57 +0800 Subject: [PATCH 074/117] update README.rst --- README.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 5cabcb70..eff75d7b 100644 --- a/README.rst +++ b/README.rst @@ -247,7 +247,8 @@ Once enabled the optimization transformer, ``tensor_alloc``, an offline tensor m \ |mlp-alloc| - y-axis: tensor names ordered by topological sorting -- x-axis: these are the memory span occupied by each tensor +- x-axis: these are the memory span occupied by each tensor, that is, the memory address offset and +the size of the tensor .. offline-tensor-alloc-end From 982bffd6450bb1e5ad6d8aea0cd507c6ae69a07b Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sat, 21 Mar 2020 21:54:38 +0800 Subject: [PATCH 075/117] resolve review issue: subroutines for rearch code generator and tests --- tests/simple_graph.pb | Bin 0 -> 198 bytes tests/test_backend/conftest.py | 14 ++++ .../data/simple_graph/params_simple_graph.hpp | 5 ++ tests/test_backend/test_utensor.py | 21 ++++++ .../backend/utensor/_graph_lower/_op_lower.py | 4 +- .../code_generator/rearch/_code_generator.py | 64 +++++++++++++----- .../templates/containers/rearch/simple.cpp | 6 +- 7 files changed, 91 insertions(+), 23 deletions(-) create mode 100644 tests/simple_graph.pb create mode 100644 tests/test_backend/data/simple_graph/params_simple_graph.hpp diff --git a/tests/simple_graph.pb b/tests/simple_graph.pb new file mode 100644 index 0000000000000000000000000000000000000000..895b9d7f8093298d61a28c46cfd2bf52fb4708a2 GIT binary patch literal 198 zcmd + +const float data_x_0 [ 1 ] = { 1.0, }; +const float data_y_0 [ 1 ] = { 2.0, }; +const float data_w_0 [ 1 ] = { 3.0, }; diff --git a/tests/test_backend/test_utensor.py b/tests/test_backend/test_utensor.py index 89770c22..20597a10 100644 --- a/tests/test_backend/test_utensor.py +++ b/tests/test_backend/test_utensor.py @@ -21,6 +21,27 @@ def test_legacy_utensor(mlp_ugraph): }) backend.apply(mlp_ugraph) +def test_rearch_utensor(simple_ugraph): + from utensor_cgen.backend.utensor import uTensorBackend + + this_dir = os.path.dirname(__file__) + + backend = uTensorBackend(config={ + 'utensor': { + 'backend': { + 'legacy-api': False, + 'rearch_code_generator': { + 'model_dir': os.path.join(this_dir, 'models'), + 'params_dir': os.path.join(this_dir, 'data'), + }, + 'pipeline_transformer': { + 'transform_methods': ['inline'] + } + }, + } + }) + backend.apply(simple_ugraph) + @pytest.mark.slow_test def test_offlinememory(mlp_ugraph): diff --git a/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py b/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py index 54ef5e2d..613a69cc 100644 --- a/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py +++ b/utensor_cgen/backend/utensor/_graph_lower/_op_lower.py @@ -46,10 +46,8 @@ def get_new_optype(cls, op_type): return cls.NAME_MAP.get(op_type, op_type) def handle_tensorflow(self, ugraph): - new_ugraph = deepcopy(ugraph) - for op_info in new_ugraph.ops_info.values(): + for op_info in ugraph.ops_info.values(): op_info.op_type = self.OptypeRenameManager.get_new_optype(op_info.op_type) - return new_ugraph @class_property def default_config(cls): diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py index 3770f730..4949add9 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_code_generator.py @@ -29,7 +29,38 @@ def __init__(self, config): self.meta_data_pool_size = final_config['meta_data_pool_size'] self.ram_data_pool_size = final_config['ram_data_pool_size'] self.model_dir = final_config['model_dir'].rstrip('/') - + + def apply(self, ugraph): + # take a look of template file "simple.cpp", which is under templates/container/rearch/ directory + # in submodule utensor_cgen.backend.utensor.snippets + # you will see how declare_snippets and eval_snippets works and have better understanding of + # the rearch code generator + src_fname = self.src_fname + if src_fname == 'None': + src_fname = '{}.cpp'.format(ugraph.name) + # find all required ops and the variable names for the tensors in the generate files + ( + ops, # Set[OperationInfo] + placeholders, # Set[OperationInfo] + tensor_var_map, # dict, tensor name -> var name + ) = self._find_required_ops(ugraph) + ( + ops_map, # dict, op_info -> variable name of op in the output files + declare_snippets, # list of Snippet objects, which will render code snippets for tensor declaration + weight_snippets, # snippets for generating weights header file + ) = self._get_declare_snippets(ugraph, ops, tensor_var_map) + # eval_snippets: List of snippet objects, which will render code snippets for tensor evaluation + eval_snippets = self._get_evaluation_snippets(ugraph, ops_map, tensor_var_map) + # generate files + self._generate_files( + ugraph, + placeholders, + tensor_var_map, + weight_snippets, + declare_snippets, + eval_snippets + ) + def _find_required_ops(self, ugraph): # find all ops required ops = set() @@ -51,11 +82,11 @@ def _get_declare_snippets(self, ugraph, ops, tensor_var_map): # get ops/tensors declaration snippets declare_snippets = [] ops_map = {} # op -> op variable name + weight_snippets = [] for i, op in enumerate(ops): op_var_name = 'op_{:03d}'.format(i) ops_map[op] = op_var_name declare_snippets.append(op.get_declare_snippet(op_var_name)) - weight_snippets = [] for op_info in filter(lambda op_info: op_info.op_type == 'Inline', ugraph.ops_info.values()): tensor = op_info.output_tensors[0] buffer_name = 'data_{}'.format(tensor.name.replace(':', '_').replace('/', '_')) @@ -74,19 +105,9 @@ def _get_declare_snippets(self, ugraph, ops, tensor_var_map): tensor=tensor ) ) - return ops_map, declare_snippets + return ops_map, declare_snippets, weight_snippets - def apply(self, ugraph): - src_fname = self.src_fname - if src_fname == 'None': - src_fname = '{}.cpp'.format(ugraph.name) - ( - ops, # Set[OperationInfo] - placeholders, # Set[OperationInfo] - tensor_var_map, # dict, tensor name -> var name - ) = self._find_required_ops(ugraph) - ops_map, declare_snippets = self._get_declare_snippets(ugraph, ops, tensor_var_map) - # 3. evaluation snippets + def _get_evaluation_snippets(self, ugraph, ops_map, tensor_var_map): eval_snippets = [] for op_name in ugraph.topo_order: op_info = ugraph.ops_info[op_name] @@ -97,6 +118,9 @@ def apply(self, ugraph): eval_snippets.append( op.get_eval_snippet(op_info, op_name, tensor_var_map) ) + return eval_snippets + + def _generate_files(self, ugraph, placeholders, tensor_var_map, weight_snippets, declare_snippets, eval_snippets): template_vars = {} template_vars['model_name'] = ugraph.name template_vars['meta_data_pool_size'] = self._compute_meta_data_size(ugraph) @@ -108,20 +132,24 @@ def apply(self, ugraph): for op_name in ugraph.output_nodes ]) ] - # 4. write files params_dir = Path(self.params_dir) / ugraph.name params_dir.mkdir(parents=True, exist_ok=True) weight_header_fname = None if weight_snippets: with (params_dir / 'params_{}.hpp'.format(ugraph.name)).open('w') as fid: - weight_container = ContextGlobalArrayContainer(snippets=weight_snippets) + weight_container = ContextGlobalArrayContainer( + snippets=weight_snippets + ) fid.write(weight_container.render()) weight_header_fname = fid.name - # # generate the computation function + # generate the compute function model_file_dir = Path(self.model_dir) header_fname = self.header_fname == 'None' and '{}.hpp'.format(ugraph.name) or self.header_fname - container_snippet = SimpleContainer(declare_snippets=declare_snippets, eval_snippests=eval_snippets) + container_snippet = SimpleContainer( + declare_snippets=declare_snippets, + eval_snippests=eval_snippets + ) container_snippet.template_vars.update(template_vars) (model_file_dir / ugraph.name).mkdir(parents=True, exist_ok=True) with (model_file_dir / ugraph.name / header_fname).open('w') as fid: diff --git a/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp b/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp index fb1c60c3..76571151 100644 --- a/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp +++ b/utensor_cgen/backend/utensor/snippets/templates/containers/rearch/simple.cpp @@ -1,19 +1,21 @@ using namespace uTensor; +// start rendering declare snippets {%for snippet in declare_snippets%} {{snippet.render()}} {%endfor%} +// end of rendering declare snippets localCircularArenaAllocator<{{meta_data_pool_size}}> meta_allocator; localCircularArenaAllocator<{{ram_data_pool_size}}> ram_allocator; void compute_{{model_name}}({%for pl in placeholders%}Tensor& {{pl}}, {%endfor%}std::vector& outputs){ Context::get_default_context()->set_metadata_allocator(&meta_allocator); Context::get_default_context()->set_ram_data_allocator(&ram_allocator); - + // start rendering eval snippets {%for snippet in eval_snippets%} {{snippet.render()}} - {%endfor%} + // end of rendering eval snippets {%for out_var in out_tensor_var_names%} outputs.push_back({{out_var}}); {%endfor%} From f31f012d231a848ca284c1c2fc22def6f371e0d4 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sat, 21 Mar 2020 21:57:48 +0800 Subject: [PATCH 076/117] minor update for tests --- tests/test_backend/conftest.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/test_backend/conftest.py b/tests/test_backend/conftest.py index b799f221..f33815f2 100644 --- a/tests/test_backend/conftest.py +++ b/tests/test_backend/conftest.py @@ -2,16 +2,19 @@ from pytest import fixture +test_dir = os.path.abspath( + os.path.join( + os.path.dirname(__file__), + '..' + ) +) @fixture(scope='session', name='mlp_ugraph') def mlp_ugraph(): from utensor_cgen.frontend import FrontendSelector model_file = os.path.join( - os.path.abspath( - os.path.join( - os.path.dirname(__file__), '..') - ), - 'deep_mlp/simple_mnist.pb' + test_dir, + 'deep_mlp/simple_mnist.pb' ) return FrontendSelector.parse(model_file, output_nodes=['y_pred']) @@ -19,10 +22,7 @@ def mlp_ugraph(): def simple_ugraph(): from utensor_cgen.frontend import FrontendSelector model_file = os.path.join( - os.path.abspath( - os.path.join( - os.path.dirname(__file__), '..') - ), - 'simple_graph.pb' + test_dir, + 'simple_graph.pb' ) return FrontendSelector.parse(model_file, output_nodes=['u']) From 97efefdbdc9698b57c553b850b201fd4997fcfe5 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 24 Mar 2020 00:49:55 +0800 Subject: [PATCH 077/117] Add attributes to _Operator (rearch) --- tests/test_backend/data/simple_graph/params_simple_graph.hpp | 5 ----- .../backend/utensor/code_generator/rearch/_operators.py | 3 +++ 2 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 tests/test_backend/data/simple_graph/params_simple_graph.hpp diff --git a/tests/test_backend/data/simple_graph/params_simple_graph.hpp b/tests/test_backend/data/simple_graph/params_simple_graph.hpp deleted file mode 100644 index 37a60559..00000000 --- a/tests/test_backend/data/simple_graph/params_simple_graph.hpp +++ /dev/null @@ -1,5 +0,0 @@ -#include - -const float data_x_0 [ 1 ] = { 1.0, }; -const float data_y_0 [ 1 ] = { 2.0, }; -const float data_w_0 [ 1 ] = { 3.0, }; diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py index 9f34857a..e07c1f52 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py @@ -1,3 +1,5 @@ +from copy import deepcopy + from six import with_metaclass from utensor_cgen.backend.utensor.snippets._types import NP_TYPES_MAP @@ -61,6 +63,7 @@ def __new__(cls, op_info): self = object.__new__(cls) self.in_dtypes = in_dtypes self.out_dtypes = out_dtypes + self.attributes = deepcopy(op_info.op_attr) cls._cache[type_signature] = self return cls._cache[type_signature] From 1166e914b9ccc7998f84d3281624db2bf83768aa Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 1 Apr 2020 16:23:08 +0800 Subject: [PATCH 078/117] modify backend apply procedure utensor backend will be applied as following: 1. graph optimization 2. lowering to target specific graph 3. apply memory allocation planning 4. generate target files --- utensor_cgen/backend/utensor/_backend_impl.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/utensor_cgen/backend/utensor/_backend_impl.py b/utensor_cgen/backend/utensor/_backend_impl.py index 03b918a7..790a5815 100644 --- a/utensor_cgen/backend/utensor/_backend_impl.py +++ b/utensor_cgen/backend/utensor/_backend_impl.py @@ -57,10 +57,14 @@ def default_config(cls): return config def apply(self, ugraph): - self._graph_op_lower.apply(ugraph) - new_ugraph = self._graph_transformer.transform(ugraph) - self._graph_alloc_lower.apply(new_ugraph) - self._code_generator.apply(new_ugraph) + # 1. graph optimization + opt_ugraph = self._graph_transformer.transform(ugraph) + # 2. lowering to target specific graph + self._graph_op_lower.apply(opt_ugraph) + # 3. apply memory allocation planner + self._graph_alloc_lower.apply(opt_ugraph) + # 4. generate target files + self._code_generator.apply(opt_ugraph) def __call__(self, ugraph): return self.apply(ugraph) From c4bd90f502b2a4f8495ab95a693dae7c12ccd2d3 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Wed, 1 Apr 2020 18:43:44 +0800 Subject: [PATCH 079/117] nightly --- utensor_cgen/frontend/tflite.py | 268 +++++++++++++++++++++----------- 1 file changed, 175 insertions(+), 93 deletions(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index be005694..d552d2c3 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -1,6 +1,7 @@ from __future__ import absolute_import import os import six +import re import numpy as np @@ -12,104 +13,185 @@ import flatbuffers from .tflite_flatbuffer.Model import Model +tensor_np_type = dict() +tensor_np_type[0] = np.float32 +tensor_np_type[1] = np.float16 +tensor_np_type[2] = np.int32 +tensor_np_type[3] = np.uint8 +tensor_np_type[4] = np.uint64 +tensor_np_type[5] = np.ubyte #FIXME: supposed to be string +tensor_np_type[6] = np.bool +tensor_np_type[7] = np.int16 +tensor_np_type[8] = np.cdouble +tensor_np_type[9] = np.int8 + +builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} + @FrontendSelector.register(target_exts=['.tflite']) class TFLiteParser(Parser): @classmethod - def parse(self, pb_file, output_nodes=None): - print("TF Lite Parser") - exit() -# buf = open(pb_file, 'rb').read() -# buf = bytearray(buf) -# model = Model.GetRootAsModel(buf, 0) -# #TODO: version check -# #print(model.Version()) - -# assert model.SubgraphsLength() == 1 -# subgraph = model.Subgraphs(0) - -# #table to convert opcode to op-class -# opcode_to_class= [] -# for i in range(0, model.OperatorCodesLength()): -# op_code = model.OperatorCodes(i) -# opcode_to_class.append(op_code) - -# #construct lookup objects for builtin ops -# from tflite.BuiltinOperator import BuiltinOperator -# from tflite.BuiltinOptions import BuiltinOptions - -# builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} -# op_options = {v: k for k, v in BuiltinOptions.__dict__.items()} -# builtin_option_class = self.get_builtin_option_class() - -# ugraph = uTensorGraph(output_nodes=output_nodes, -# backend="tensorflow") #FIXME: with the proper backend - -# #assuming this is the equivalent to ugraph's topological order -# for i in range(0, subgraph.OperatorsLength()): -# op = subgraph.Operators(i) -# opIndex = op.OpcodeIndex() -# op_class = opcode_to_class[opIndex] -# builtin_code = op_class.BuiltinCode() -# op_type = builtin_ops[builtin_code] #op's type in string - -# node_name = op_type + "_" + i - -# op_attr = dict() - -# if(op.CustomOptionsLength() < 1): -# option = builtin_option_class[op_type] -# builtin_data = op.BuiltinOptions() -# option.Init(builtin_data.Bytes, builtin_data.Pos) -# op_attr['option'] = option - -# if(op_type == 'FULLY_CONNECTED'): -# from tflite_flatbuffer.FullyConnectedOptionsWeightsFormat import FullyConnectedOptionsWeightsFormat -# w_formats = {v: k for k, v in FullyConnectedOptionsWeightsFormat.__dict__.items()} -# op_attr['weights_format'] = w_formats -# else: -# op_attr['custom_option'] = op.CustomOptionsAsNumpy() - -# fb_input_tensors = [subgraph.Tensors(input_idx) for input_idx in op.InputsAsNumpy()] -# in_tensors = [TensorInfo(name=tensor.Name(), -# ugraph=ugraph, -# op_name=tensor.op.name, #FIXME: who the fuck knows -# dtype=self.tensor_type_lookup(tensor.Type()), -# shape=tensor.ShapeAsNumpy()) -# for tensor in fb_input_tensors] - -# fb_output_tensors = [subgraph.Tensors(output_idx) for output_idx in op.OutputsAsNumpy()] -# out_tensors = [TensorInfo(name=tensor.Name(), -# ugraph=ugraph, -# op_name=tensor.op.name, #FIXME: who the fuck knows -# dtype=self.tensor_type_lookup(tensor.Type()), -# shape=tensor.ShapeAsNumpy()) -# for tensor in fb_output_tensors] - -# op_info = OperationInfo(name=node_name, -# input_tensors=in_tensors, -# output_tensors=out_tensors, -# op_type=op_type, -# backend='tensorflow', #FIXME: what should this be? -# op_attr=op_attr, -# ugraph=ugraph) - -# ugraph.ops_info[node_name] = op_info - -# topologic_order_graph(ugraph) -# return ugraph + def parse(self, tflite_file, output_nodes=None): + graph_name, _ = os.path.splitext(tflite_file) + buf = open(tflite_file, 'rb').read() + buf = bytearray(buf) + fb_model = Model.GetRootAsModel(buf, 0) + + ugraph = uTensorGraph( + name=graph_name, + output_nodes=[], + lib_name='tflite', + ops_info={}, + ) + + #print("TF Lite Parser") + + self._build_graph(fb_model, ugraph) + return ugraph + + def _build_graph(self, fb_model, ugraph): + self.tensor_names_map = {} #addresseed by indexi + self._build_tensor_map(fb_model, ugraph) + + self._build_param_ops(fb_model, ugraph) + #find and set input nodes + self._build_input_ops(fb_model, ugraph) + self._build_intermediate_ops(fb_model, ugraph) + #TODO: set output nodes + topologic_order_graph(ugraph) + + def _build_tensor_map(self, fb_model, ugraph): + subgraph = self._get_tflm_get_subgraph(fb_model) + for idx in range(0, subgraph.TensorsLength()): + tensor = subgraph.Tensors(idx) + + tensor_name = tensor.Name() + if tensor_name is '' or None: + tensor_name = 'tensor_' + str(idx) + + dtype=tensor_np_type[tensor.Type()] + + self.tensor_names_map[idx] = TensorInfo( + name=self._format_tensor_name('', tensor_name, 0), + op_name="", + dtype=dtype, + shape=tensor.ShapeAsNumpy(), + ugraph=ugraph + ) + + # 0 if intermediate + #buffer_index = tensor.Buffer() + #buffer_content = model.Buffers(buffer_index).DataAsNumpy().astype(dtype) + + #tensor.Type() + + # quantization missing + + def _build_param_ops(self, fb_model, ugraph): + """Find all tensors in initialization list in onnx_graph, normally constants + Note that this method will update op_types_cnt and tensor_names_map **inplace** + """ + subgraph = self._get_tflm_get_subgraph(fb_model) + + for idx in range(0, subgraph.TensorsLength()): + tensor = subgraph.Tensors(idx) + buffer_index = tensor.Buffer() + + if buffer_index == 0: + continue + + # TODO: quantization conversion + + node_name = self.tensor_names_map[idx].name + "_Const" + dtype = self.tensor_names_map[idx].dtype + + buffer_content = fb_model.Buffers(buffer_index).DataAsNumpy().astype(dtype) + + OperationInfo( + name=node_name, + input_tensors=[], + output_tensors=[self.tensor_names_map[idx]], + op_type='Const', + lib_name='tflm', + ugraph=ugraph, + op_attr={ + 'value': buffer_content + } + ) + + self._set_tensor_node(idx, node_name) + + + def _build_input_ops(self, fb_model, ugraph): + """Find placeholders + Attach placeholders to input tensors + Note this method will update inputs **inplace** + """ + subgraph_inputs_indexi = fb_model.InputsAsNumpy() + for index in subgraph_inputs_indexi: + node_name = self.tensor_names_map[index].name + "_Placeholder" + self._set_tensor_node(index, node_name) + OperationInfo( + name=node_name, + input_tensors=[], + output_tensors=[self.tensor_names_map[index]], + op_type='Placeholder', + ugraph=ugraph, + lib_name='tflm', + op_attr={} + ) + + def _build_intermediate_ops(self, fb_model, ugraph): + """Build all intermediate nodes, the nodes that is not in neither initialization list nor input list + """ + subgraphs_len = fb_model.SubgraphsLength() + assert subgraphs_len == 1, "only 1 subgraph is supported" + subgraph = fb_model.Subgraphs(0) + for i in range(0, subgraph.OperatorsLength()): + #topological order, op-index defined by schema + #BuiltinOperator: https://github.com/tensorflow/tensorflow/blob/031804922d8f4d18b61e3ad077f9f1b69273ff21/tensorflow/lite/schema/schema_v3.fbs#L71 + op = subgraph.Operators(i) + local_op_code = op.OpcodeIndex() + global_op_code = fb_model.OperatorCodes(local_op_code) + builtinOperator_code = global_op_code.BuiltinCode() + op_type = builtin_ops[builtinOperator_code] + + node_name = str(i) + "_" + op_type + + input_tensor_names = [self.tensor_names_map[input_index].name for input_index in op.InputsAsNumpy()] + output_tensor_names = [self.tensor_names_map[output_index].name for output_index in op.OutputsAsNumpy()] + + OperationInfo( + name=node_name, + input_tensors=input_tensor_names, + output_tensors=output_tensor_names, + op_type=op_type, + ugraph=ugraph, + lib_name='tflm', + op_attr={} + ) -# def get_builtin_option_class(self): -# from tflite_flatbuffer.FullyConnectedOptions import FullyConnectedOptions -# from tflite_flatbuffer.ArgMaxOptions import ArgMaxOptions + for tensor_index in op.OutputsAsNumpy(): + self._set_tensor_node(tensor_index, node_name) -# table = dict() -# table['FULLY_CONNECTED'] = FullyConnectedOptions() -# table['ARG_MAX'] = ArgMaxOptions() + def _get_tflm_get_subgraph(self, fb_model): + subgraphs_len = fb_model.SubgraphsLength() + assert subgraphs_len == 1, "only 1 subgraph is supported" + subgraph = fb_model.Subgraphs(0) -# return table - -# def tensor_type_lookup(self, int_type): -# #see TensorType.py -# return -1 + return subgraph + + def _set_tensor_node(self, idx, name): + assert self.tensor_names_map[idx].op_name != "" + self.tensor_names_map[idx].op_name = name + + def _format_node_name(self, node_name, op_type, op_cnt): + if node_name == '': + node_name = '{}_{}'.format(op_type, op_cnt) + return re.sub(r'[\.:/]', '_', node_name) + + def _format_tensor_name(self, name, node_name, offset): + if re.match(r'[a-zA-Z][a-zA-Z0-9]*:[0-9]+', name): + return name + return '{}:{}'.format(node_name, offset) From 95a1c50d7a0a4ec15c516698b337c2996f0aedaf Mon Sep 17 00:00:00 2001 From: dboyliao Date: Tue, 7 Apr 2020 14:47:41 +0800 Subject: [PATCH 080/117] memory planner: make output tensors optionally included in the planning --- .../backend/graph_lower/alloc_plan.py | 10 +- .../graph_lower/generic_graph_lower.py | 28 +++--- .../code_generator/legacy/_operators.py | 97 ++++--------------- utensor_cgen/cli.py | 3 +- 4 files changed, 43 insertions(+), 95 deletions(-) diff --git a/utensor_cgen/backend/graph_lower/alloc_plan.py b/utensor_cgen/backend/graph_lower/alloc_plan.py index e6416ee3..6e76c792 100644 --- a/utensor_cgen/backend/graph_lower/alloc_plan.py +++ b/utensor_cgen/backend/graph_lower/alloc_plan.py @@ -109,11 +109,15 @@ def __setitem__(self, entity_name, alloc): self._plan[entity_name] = alloc def __getitem__(self, entity_name): - if entity_name not in self._plan: + if entity_name not in self.plan: raise KeyError('%s not found' % entity_name) + return self.plan[entity_name] + + def __contains__(self, entity_name): + return entity_name in self.plan def __delitem__(self, entity_name): - del self._plan[entity_name] + del self.plan[entity_name] def __getattr__(self, attr_name): - return getattr(self._plan, attr_name) + return getattr(self.plan, attr_name) diff --git a/utensor_cgen/backend/graph_lower/generic_graph_lower.py b/utensor_cgen/backend/graph_lower/generic_graph_lower.py index 5d87f9f6..01f94dc3 100644 --- a/utensor_cgen/backend/graph_lower/generic_graph_lower.py +++ b/utensor_cgen/backend/graph_lower/generic_graph_lower.py @@ -11,6 +11,7 @@ from math import ceil, log10 import numpy as np + import tensorflow as tf from ortools.sat.python import cp_model from utensor_cgen.backend.base import BackendPart @@ -85,6 +86,7 @@ class TensorAllocationPlanner(BackendPart): def __init__(self, config): self.max_pool_size = self.config['max_pool_size'] self.include_inputs = self.config['include_inputs'] + self.include_outputs = self.config['include_outputs'] self.out_fname = self.config['out_fname'] if self.out_fname == 'None': self.out_fname = None @@ -105,28 +107,22 @@ def apply(self, ugraph): if time_alloc_plan is None: TopoOrderTensorTimeslotPlanner(config={}).apply(ugraph) time_alloc_plan = ugraph.attributes[TopoOrderTensorTimeslotPlanner.KWARGS_NAMESCOPE] - tensors_to_ignore = set( - chain(*[ - op.output_tensors - for op in ugraph.get_ops_by_type('Inline') - ]) + ops_to_ignore = set( + ugraph.get_ops_by_type('Inline') ) if not self.include_inputs: - tensors_to_ignore.update( - chain(*[ - op.output_tensors - for op in ugraph.get_ops_by_type('Placeholder') - ]) + ops_to_ignore.update( + ugraph.get_ops_by_type('Placeholder') + ) + if not self.include_outputs: + ops_to_ignore.update( + ugraph.output_ops ) tensors_to_schedule = set() nonoverlap_map = defaultdict(set) for time_slot, op_name in enumerate(ugraph.topo_order): op_info = ugraph.ops_info[op_name] - # ignore inline ops - if op_info.op_type == 'Inline': - continue - # ignore placeholders if not included - if not self.include_inputs and op_info.op_type == 'Placeholder': + if op_info in ops_to_ignore: continue # all output tensor should not overlap with tensors that's still alive for out_tensor, known_tensor in product(op_info.output_tensors, tensors_to_schedule): @@ -206,6 +202,7 @@ def _solve_space_alloc(self, tensors_to_schedule, nonoverlap_map): data_alignment=self.data_alignment, ) logger.info('optimal tensor allocation plan solved, total memory required: %i bytes', opt_mempool_size) + logger.info('number of tensors allocated: %i' % len(alloc_plan)) else: logger.info('tensor allocation plan not found, status: %s', solver.StatusName(status)) if status == cp_model.INFEASIBLE: @@ -247,6 +244,7 @@ def default_config(cls): return { 'max_pool_size': 1024*1024, # 1G bytes 'include_inputs': False, + 'include_outputs': True, # for RNN, this may be False 'out_fname': 'None', 'aesthetic_kwargs': { 'split_on_large_graph': True, diff --git a/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py b/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py index fd1d9ac3..2ec7a58d 100644 --- a/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py +++ b/utensor_cgen/backend/utensor/code_generator/legacy/_operators.py @@ -4,8 +4,9 @@ ''' import os -import idx2numpy as idx2np import numpy as np + +import idx2numpy as idx2np from utensor_cgen.backend.graph_lower import TensorAllocationPlanner from utensor_cgen.backend.utensor.snippets.legacy import * # pylint: disable=W0401,W0614 from utensor_cgen.ir import OperationInfo, TensorInfo @@ -86,6 +87,14 @@ def snippet(self): def build_op_info(cls, ugraph, name, *args, **kwargs): raise NotImplementedError('%s does not have build_op_info method' % cls) + def get_mem_address(self, op_info): + alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) + address = [] + if alloc_plan: + for tensor in op_info.output_tensors: + if tensor.name in alloc_plan: + address.append(alloc_plan[tensor.name].offset_start) + return address @OperatorFactory.register @uTensorOpEqualityDelegate.is_compatible_with("Inline", _morphism.Const2InlineMorphism) @@ -225,13 +234,7 @@ def __init__(self, op_info, **kwargs): ) ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = ArgMaxOpSnippet(inputs, output, in_dtype, out_dtype, ref_count, to_eval, address) @classmethod @@ -292,13 +295,7 @@ def __init__(self, op_info, **kwargs): ) ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = DequantizeOpSnippet(inputs, output, out_dtype, ref_count, to_eval, address) @@ -323,13 +320,7 @@ def __init__(self, op_info, **kwargs): ) ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = MaxOpSnippet(inputs, output, out_dtype, out_shape, ref_count, to_eval, address) @classmethod @@ -545,13 +536,7 @@ def __init__(self, op_info, **kwargs): ) ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = MinOpSnippet(inputs, output, out_dtype, out_shape, ref_count, to_eval, address) @classmethod @@ -611,13 +596,7 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = QuantizeV2OpSnippet(inputs, outputs, out_dtype, ref_counts, to_eval, address) @@ -704,13 +683,7 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = QuantizedMatMulOpSnippet(inputs, outputs, x_dtype, w_dtype, out_dtype, ref_counts, to_eval, address) @@ -781,13 +754,7 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = QuantizedReluOpSnippet(inputs, outputs, in_dtype, out_dtypes, qout_dtype, ref_counts, to_eval, address) @@ -811,13 +778,7 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = QuantizedAddOpSnippet(inputs, outputs, x_dtype, w_dtype, out_dtype, ref_counts, to_eval, address) @@ -858,11 +819,7 @@ def __init__(self, op_info, **kwargs): op_info.op_attr) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = RequantizationRangeOpSnippet(inputs, outputs, out_dtype, ref_counts, to_eval, address) @@ -883,13 +840,7 @@ def __init__(self, op_info, **kwargs): ) ref_counts = parser.get('ref_counts', []) to_eval = parser.get('to_eval', False) - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = RequantizeOpSnippet(inputs, outputs, qout_dtype, range_dtype, ref_counts, to_eval, address) @@ -911,13 +862,7 @@ def __init__(self, op_info, **kwargs): ref_count = parser.get('ref_counts', [0])[0] to_eval = parser.get('to_eval', False) dtype = op_info.input_tensors[0].dtype - alloc_plan = op_info.ugraph.attributes.get(TensorAllocationPlanner.KWARGS_NAMESCOPE) - if alloc_plan is not None: - address = [ - alloc_plan.plan[tensor.name].offset_start for tensor in op_info.output_tensors - ] - else: - address = [] + address = self.get_mem_address(op_info) self._snippet = ReshapeOpSnippet(inputs, output, dtype, ref_count, to_eval, address) diff --git a/utensor_cgen/cli.py b/utensor_cgen/cli.py index 47dc149b..e0a18ca2 100644 --- a/utensor_cgen/cli.py +++ b/utensor_cgen/cli.py @@ -65,7 +65,8 @@ def generate_config(target, output): ) with open(output, 'w') as fid: fid.write( - '# https://github.com/toml-lang/toml\n' + '# utensor-cli version {}\n'.format(__version__) + \ + '# https://github.com/toml-lang/toml\n' + \ '# ..\n' ) fid.write( From e23a17bedddd1b2e2ff418ef724d6fa1dc0ab23e Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Tue, 7 Apr 2020 23:29:50 +0800 Subject: [PATCH 081/117] before testing --- utensor_cgen/frontend/tflite.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index d552d2c3..82bb4e2d 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -25,12 +25,12 @@ tensor_np_type[8] = np.cdouble tensor_np_type[9] = np.int8 +from .tflite_flatbuffer.BuiltinOperator import BuiltinOperator builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} @FrontendSelector.register(target_exts=['.tflite']) class TFLiteParser(Parser): - @classmethod def parse(self, tflite_file, output_nodes=None): graph_name, _ = os.path.splitext(tflite_file) buf = open(tflite_file, 'rb').read() @@ -47,6 +47,7 @@ def parse(self, tflite_file, output_nodes=None): #print("TF Lite Parser") self._build_graph(fb_model, ugraph) + return ugraph def _build_graph(self, fb_model, ugraph): @@ -57,9 +58,22 @@ def _build_graph(self, fb_model, ugraph): #find and set input nodes self._build_input_ops(fb_model, ugraph) self._build_intermediate_ops(fb_model, ugraph) - #TODO: set output nodes + self._set_output_ops(fb_model, ugraph) + topologic_order_graph(ugraph) - + + def _set_output_ops(self, fb_model, ugraph): + """identfy output nodes in fb_mdel + sets output_nodes in ugraph + Note this method will update ugraph **inplace** + """ + subgraph_outputs_indexi = fb_model.OutputsAsNumpy() #tensor indexi + output_node_names = set() + for index in subgraph_outputs_indexi: + output_node_names.add(self.tensor_names_map[index].op_name) + + ugraph.output_nodes = list(output_node_names) + def _build_tensor_map(self, fb_model, ugraph): subgraph = self._get_tflm_get_subgraph(fb_model) @@ -72,11 +86,15 @@ def _build_tensor_map(self, fb_model, ugraph): dtype=tensor_np_type[tensor.Type()] + attributes = dict() + attributes['quantizationParam'] = tensor.Quantization() + self.tensor_names_map[idx] = TensorInfo( name=self._format_tensor_name('', tensor_name, 0), op_name="", dtype=dtype, shape=tensor.ShapeAsNumpy(), + attributes=attributes, ugraph=ugraph ) @@ -86,8 +104,6 @@ def _build_tensor_map(self, fb_model, ugraph): #tensor.Type() - # quantization missing - def _build_param_ops(self, fb_model, ugraph): """Find all tensors in initialization list in onnx_graph, normally constants Note that this method will update op_types_cnt and tensor_names_map **inplace** @@ -101,8 +117,6 @@ def _build_param_ops(self, fb_model, ugraph): if buffer_index == 0: continue - # TODO: quantization conversion - node_name = self.tensor_names_map[idx].name + "_Const" dtype = self.tensor_names_map[idx].dtype @@ -122,7 +136,6 @@ def _build_param_ops(self, fb_model, ugraph): self._set_tensor_node(idx, node_name) - def _build_input_ops(self, fb_model, ugraph): """Find placeholders Attach placeholders to input tensors From 373bbc574e31ec10635a69e1862e0e4cd1122670 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Thu, 9 Apr 2020 14:17:39 +0800 Subject: [PATCH 082/117] seems to work on the first glance, expecting devils in the detail --- utensor_cgen/frontend/tflite.py | 46 +++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 82bb4e2d..9c4a9d87 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -9,21 +9,22 @@ from utensor_cgen.frontend import FrontendSelector from utensor_cgen.ir.base import TensorInfo, OperationInfo, uTensorGraph from utensor_cgen.utils import topologic_order_graph +from utensor_cgen.ir.converter import GenericTensorConverterMixin import flatbuffers from .tflite_flatbuffer.Model import Model tensor_np_type = dict() -tensor_np_type[0] = np.float32 -tensor_np_type[1] = np.float16 -tensor_np_type[2] = np.int32 -tensor_np_type[3] = np.uint8 -tensor_np_type[4] = np.uint64 -tensor_np_type[5] = np.ubyte #FIXME: supposed to be string -tensor_np_type[6] = np.bool -tensor_np_type[7] = np.int16 -tensor_np_type[8] = np.cdouble -tensor_np_type[9] = np.int8 +tensor_np_type[0] = np.dtype('float32') +tensor_np_type[1] = np.dtype('float16') +tensor_np_type[2] = np.dtype('int32') +tensor_np_type[3] = np.dtype('uint8') +tensor_np_type[4] = np.dtype('uint64') +tensor_np_type[5] = np.dtype('ubyte') #FIXME: supposed to be string +tensor_np_type[6] = np.dtype('bool') +tensor_np_type[7] = np.dtype('int16') +tensor_np_type[8] = np.dtype('cdouble') +tensor_np_type[9] = np.dtype('int8') from .tflite_flatbuffer.BuiltinOperator import BuiltinOperator builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} @@ -67,7 +68,8 @@ def _set_output_ops(self, fb_model, ugraph): sets output_nodes in ugraph Note this method will update ugraph **inplace** """ - subgraph_outputs_indexi = fb_model.OutputsAsNumpy() #tensor indexi + subgraph = self._get_tflm_get_subgraph(fb_model) + subgraph_outputs_indexi = subgraph.OutputsAsNumpy() #tensor indexi output_node_names = set() for index in subgraph_outputs_indexi: output_node_names.add(self.tensor_names_map[index].op_name) @@ -89,11 +91,17 @@ def _build_tensor_map(self, fb_model, ugraph): attributes = dict() attributes['quantizationParam'] = tensor.Quantization() + + if type(tensor.ShapeAsNumpy()) == np.ndarray: + shape = tensor.ShapeAsNumpy().tolist() + else: + shape = [d for d in fb_model.Buffers(12).DataAsNumpy().shape] + self.tensor_names_map[idx] = TensorInfo( name=self._format_tensor_name('', tensor_name, 0), op_name="", dtype=dtype, - shape=tensor.ShapeAsNumpy(), + shape=shape, attributes=attributes, ugraph=ugraph ) @@ -120,6 +128,9 @@ def _build_param_ops(self, fb_model, ugraph): node_name = self.tensor_names_map[idx].name + "_Const" dtype = self.tensor_names_map[idx].dtype + buffer_array = fb_model.Buffers(buffer_index).DataAsNumpy() + if type(buffer_array) == int: + continue #somehow, sometimes, the buffer contains no data buffer_content = fb_model.Buffers(buffer_index).DataAsNumpy().astype(dtype) OperationInfo( @@ -130,7 +141,7 @@ def _build_param_ops(self, fb_model, ugraph): lib_name='tflm', ugraph=ugraph, op_attr={ - 'value': buffer_content + 'value': GenericTensorConverterMixin.GenericType(np_array=buffer_content) } ) @@ -141,7 +152,8 @@ def _build_input_ops(self, fb_model, ugraph): Attach placeholders to input tensors Note this method will update inputs **inplace** """ - subgraph_inputs_indexi = fb_model.InputsAsNumpy() + subgraph = self._get_tflm_get_subgraph(fb_model) + subgraph_inputs_indexi = subgraph.InputsAsNumpy() for index in subgraph_inputs_indexi: node_name = self.tensor_names_map[index].name + "_Placeholder" self._set_tensor_node(index, node_name) @@ -172,8 +184,8 @@ def _build_intermediate_ops(self, fb_model, ugraph): node_name = str(i) + "_" + op_type - input_tensor_names = [self.tensor_names_map[input_index].name for input_index in op.InputsAsNumpy()] - output_tensor_names = [self.tensor_names_map[output_index].name for output_index in op.OutputsAsNumpy()] + input_tensor_names = [self.tensor_names_map[input_index] for input_index in op.InputsAsNumpy()] + output_tensor_names = [self.tensor_names_map[output_index] for output_index in op.OutputsAsNumpy()] OperationInfo( name=node_name, @@ -196,7 +208,7 @@ def _get_tflm_get_subgraph(self, fb_model): return subgraph def _set_tensor_node(self, idx, name): - assert self.tensor_names_map[idx].op_name != "" + assert self.tensor_names_map[idx].op_name == "" self.tensor_names_map[idx].op_name = name def _format_node_name(self, node_name, op_type, op_cnt): From 142d7520cb987b390f628bfb443214c22bf71730 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Sun, 12 Apr 2020 18:25:54 +0800 Subject: [PATCH 083/117] checkpoint before reworking the quantization info --- .gitignore | 5 +- .../backend/utensor/snippets/_types.py | 2 + utensor_cgen/frontend/tflite.py | 146 ++++++++++++++++-- 3 files changed, 142 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index f65ce068..1817ee1a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +#system files +__pycache__ +.DS_Store # virtual env .venv venv @@ -20,4 +23,4 @@ tests/deep_mlp/data .vscode # docs doc/build -doc/source/_build +doc/source/_build \ No newline at end of file diff --git a/utensor_cgen/backend/utensor/snippets/_types.py b/utensor_cgen/backend/utensor/snippets/_types.py index 24f875ef..c3e72d2c 100644 --- a/utensor_cgen/backend/utensor/snippets/_types.py +++ b/utensor_cgen/backend/utensor/snippets/_types.py @@ -55,6 +55,8 @@ def _init(cls): tensor_type_str="uint16_t"), np.dtype('int8'): _TYPE_MAP_VALUE(importer_type_str="int8", tensor_type_str="q7_t"), + np.dtype('uint8'): _TYPE_MAP_VALUE(importer_type_str="uint8", + tensor_type_str="uint8_t"), } cls._inited = True diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 9c4a9d87..1295894c 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -9,7 +9,7 @@ from utensor_cgen.frontend import FrontendSelector from utensor_cgen.ir.base import TensorInfo, OperationInfo, uTensorGraph from utensor_cgen.utils import topologic_order_graph -from utensor_cgen.ir.converter import GenericTensorConverterMixin +from utensor_cgen.ir.converter import GenericTensorConverterMixin, AttrValueConverter import flatbuffers from .tflite_flatbuffer.Model import Model @@ -29,6 +29,131 @@ from .tflite_flatbuffer.BuiltinOperator import BuiltinOperator builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} +from .tflite_flatbuffer.ActivationFunctionType import ActivationFunctionType +from .tflite_flatbuffer.FullyConnectedOptionsWeightsFormat import FullyConnectedOptionsWeightsFormat +from .tflite_flatbuffer.CustomOptionsFormat import CustomOptionsFormat + +def class_option2str(obj, idx): + names_lookup = {v: k for k, v in obj.__dict__.items()} + name = names_lookup[idx] + return str(idx) + " (" + name + ")" + +customOptionFormat_lookup = {v: k for k, v in CustomOptionsFormat.__dict__.items()} + +def fully_connected_op_data(op): + option_dict = {} + if(op.CustomOptionsLength() < 1): + from .tflite_flatbuffer.FullyConnectedOptions import FullyConnectedOptions + option = FullyConnectedOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["FusedActivationFunction"] = class_option2str(ActivationFunctionType, option.FusedActivationFunction()) + option_dict["w_formats"] = class_option2str(FullyConnectedOptionsWeightsFormat, option.WeightsFormat()) + else: + option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() + return option_dict + +def depthwise_conv2d_op_data(op): + option_dict = {} + if(op.CustomOptionsLength() < 1): + from .tflite_flatbuffer.DepthwiseConv2DOptions import DepthwiseConv2DOptions + option = DepthwiseConv2DOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["Padding"] = option.Padding() + option_dict["StrideW"] = option.StrideW() + option_dict["StrideH"] = option.StrideH() + option_dict["DepthMultiplier"] = option.DepthMultiplier() + option_dict["FusedActivationFunction"] = class_option2str(ActivationFunctionType, option.FusedActivationFunction()) + option_dict["DilationWFactor"] = option.DilationWFactor() + option_dict["DilationHFactor"] = option.DilationHFactor() + + else: + option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() + + return option_dict + +def reshape_op_data(op): + option_dict = {} + if(op.CustomOptionsLength() < 1): + from .tflite_flatbuffer.ReshapeOptions import ReshapeOptions + option = ReshapeOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["NewShape"] = option.NewShapeAsNumpy() + else: + option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() + + return option_dict + +def dequantize_op_data(op): + if(op.CustomOptionsLength() < 1): + from .tflite_flatbuffer.DequantizeOptions import DequantizeOptions + option = DequantizeOptions() + builtin_data = op.BuiltinOptions() + if builtin_data is None: + return builtin_data + option.Init(builtin_data.Bytes, builtin_data.Pos) + return [option] + else: + custom_option = op.CustomOptionsAsNumpy() + return [custom_option] + #print("custom option format: ", op.CustomOptionsFormat()) + +def quantize_op_data(op): + if(op.CustomOptionsLength() < 1): + from .tflite_flatbuffer.QuantizeOptions import QuantizeOptions + option = QuantizeOptions() + builtin_data = op.BuiltinOptions() + if builtin_data is None: + return builtin_data + option.Init(builtin_data.Bytes, builtin_data.Pos) + return [option] + else: + custom_option = op.CustomOptionsAsNumpy() + return [custom_option] + #print("custom option format: ", op.CustomOptionsFormat()) + +def pool2d_op_data(op): + option_dict = {} + if(op.CustomOptionsLength() < 1): + from .tflite_flatbuffer.Pool2DOptions import Pool2DOptions + option = Pool2DOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["Padding"] = option.Padding() + option_dict["StrideW"] = option.StrideW() + option_dict["StrideH"] = option.StrideH() + option_dict["FilterWidth"] = option.FilterWidth() + option_dict["FilterHeight"] = option.FilterHeight() + option_dict["FusedActivationFunction"] = class_option2str(ActivationFunctionType, option.FusedActivationFunction()) + else: + option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() + + return option_dict + +def argmax_op_data(op): + option_dict = {} + if(op.CustomOptionsLength() < 1): + from .tflite_flatbuffer.ArgMaxOptions import ArgMaxOptions + option = ArgMaxOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["OutputType"] = option.OutputType() + else: + option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() + + return option_dict + +op_data_func = dict() +op_data_func["QUANTIZE"] = quantize_op_data +op_data_func["DEPTHWISE_CONV_2D"] = depthwise_conv2d_op_data +op_data_func["MAX_POOL_2D"] = pool2d_op_data +op_data_func["RESHAPE"] = reshape_op_data +op_data_func["FULLY_CONNECTED"] = fully_connected_op_data +op_data_func["DEQUANTIZE"] = dequantize_op_data +op_data_func["ARG_MAX"] = argmax_op_data + @FrontendSelector.register(target_exts=['.tflite']) class TFLiteParser(Parser): @@ -106,12 +231,6 @@ def _build_tensor_map(self, fb_model, ugraph): ugraph=ugraph ) - # 0 if intermediate - #buffer_index = tensor.Buffer() - #buffer_content = model.Buffers(buffer_index).DataAsNumpy().astype(dtype) - - #tensor.Type() - def _build_param_ops(self, fb_model, ugraph): """Find all tensors in initialization list in onnx_graph, normally constants Note that this method will update op_types_cnt and tensor_names_map **inplace** @@ -122,6 +241,7 @@ def _build_param_ops(self, fb_model, ugraph): tensor = subgraph.Tensors(idx) buffer_index = tensor.Buffer() + # buffer_index == 0 if intermediate if buffer_index == 0: continue @@ -130,7 +250,7 @@ def _build_param_ops(self, fb_model, ugraph): buffer_array = fb_model.Buffers(buffer_index).DataAsNumpy() if type(buffer_array) == int: - continue #somehow, sometimes, the buffer contains no data + continue #somehow, sometimes, the buffer contains no data, likely to be an intermediate tensor buffer_content = fb_model.Buffers(buffer_index).DataAsNumpy().astype(dtype) OperationInfo( @@ -141,7 +261,10 @@ def _build_param_ops(self, fb_model, ugraph): lib_name='tflm', ugraph=ugraph, op_attr={ - 'value': GenericTensorConverterMixin.GenericType(np_array=buffer_content) + 'value': AttrValueConverter.GenericType( + value_name="tensor", + value=GenericTensorConverterMixin.GenericType(np_array=buffer_content) + ) } ) @@ -187,6 +310,9 @@ def _build_intermediate_ops(self, fb_model, ugraph): input_tensor_names = [self.tensor_names_map[input_index] for input_index in op.InputsAsNumpy()] output_tensor_names = [self.tensor_names_map[output_index] for output_index in op.OutputsAsNumpy()] + op_attr = dict() + op_attr = op_data_func[op_type](op) + OperationInfo( name=node_name, input_tensors=input_tensor_names, @@ -194,7 +320,7 @@ def _build_intermediate_ops(self, fb_model, ugraph): op_type=op_type, ugraph=ugraph, lib_name='tflm', - op_attr={} + op_attr=op_attr ) for tensor_index in op.OutputsAsNumpy(): From 598f8243124dc0afd1edf42323e1b47b80718235 Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Sun, 12 Apr 2020 18:42:51 +0800 Subject: [PATCH 084/117] quantization param in generic type --- utensor_cgen/frontend/tflite.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 1295894c..32a9f384 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -214,7 +214,11 @@ def _build_tensor_map(self, fb_model, ugraph): dtype=tensor_np_type[tensor.Type()] attributes = dict() - attributes['quantizationParam'] = tensor.Quantization() + + quantParam = tensor.Quantization() + if quantParam != None: + attributes['quantizationZeros'] = list([quantParam.ZeroPointAsNumpy()]) + attributes['quantizationScales'] = list([quantParam.ScaleAsNumpy()]) if type(tensor.ShapeAsNumpy()) == np.ndarray: From a4f21ec6e96910d2603ee7ea01b54ea86653bc5c Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Sun, 12 Apr 2020 18:54:27 +0800 Subject: [PATCH 085/117] minor cleanup --- utensor_cgen/frontend/tflite.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 32a9f384..f413f932 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -98,7 +98,6 @@ def dequantize_op_data(op): else: custom_option = op.CustomOptionsAsNumpy() return [custom_option] - #print("custom option format: ", op.CustomOptionsFormat()) def quantize_op_data(op): if(op.CustomOptionsLength() < 1): @@ -112,7 +111,6 @@ def quantize_op_data(op): else: custom_option = op.CustomOptionsAsNumpy() return [custom_option] - #print("custom option format: ", op.CustomOptionsFormat()) def pool2d_op_data(op): option_dict = {} @@ -170,8 +168,6 @@ def parse(self, tflite_file, output_nodes=None): ops_info={}, ) - #print("TF Lite Parser") - self._build_graph(fb_model, ugraph) return ugraph @@ -236,8 +232,7 @@ def _build_tensor_map(self, fb_model, ugraph): ) def _build_param_ops(self, fb_model, ugraph): - """Find all tensors in initialization list in onnx_graph, normally constants - Note that this method will update op_types_cnt and tensor_names_map **inplace** + """Const tensors are identified by buffer_index == 0. These tensors are converted to Const Op and added to ugraph """ subgraph = self._get_tflm_get_subgraph(fb_model) @@ -295,7 +290,7 @@ def _build_input_ops(self, fb_model, ugraph): ) def _build_intermediate_ops(self, fb_model, ugraph): - """Build all intermediate nodes, the nodes that is not in neither initialization list nor input list + """Build all intermediate nodes """ subgraphs_len = fb_model.SubgraphsLength() assert subgraphs_len == 1, "only 1 subgraph is supported" From d7fe924b550397aacb008501e5e1abfffb620068 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Thu, 16 Apr 2020 02:05:23 +0800 Subject: [PATCH 086/117] Add constructor signature for op factory --- .../code_generator/rearch/_operators.py | 36 +++++++++++++++--- utensor_cgen/utils.py | 37 +++++++++++++++++++ 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py b/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py index e07c1f52..3d3d8456 100644 --- a/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py +++ b/utensor_cgen/backend/utensor/code_generator/rearch/_operators.py @@ -1,4 +1,5 @@ from copy import deepcopy +from typing import Hashable from six import with_metaclass @@ -6,6 +7,7 @@ from utensor_cgen.backend.utensor.snippets.rearch import (AddOpEvalSnippet, DeclareOpSnippet, RomTensorSnippet) +from utensor_cgen.utils import must_return_type __all__ = ['OperatorFactory', 'OpNotSupportedError'] @@ -49,6 +51,14 @@ class _OperatorMeta(type): def __new__(mcls, name, bases, attrib): attrib['_cache'] = {} + for key in ['get_type_signature', 'get_constructor_signature']: + func = attrib.get(key) + if func is None: + continue + if not must_return_type.return_type_is_ensured(func): + attrib[key] = must_return_type(Hashable)(func) + elif not issubclass(must_return_type.get_expect_type(func), Hashable): + raise RuntimeError('{}.{} must be ensured to return {}'.format(name, key, Hashable)) cls = type.__new__(mcls, name, bases, attrib) return cls @@ -56,16 +66,30 @@ def __new__(mcls, name, bases, attrib): class _Operator(with_metaclass(_OperatorMeta), object): def __new__(cls, op_info): - in_dtypes = tuple(t.dtype for t in op_info.input_tensors) - out_dtypes = tuple(t.dtype for t in op_info.output_tensors) - type_signature = (in_dtypes, out_dtypes) - if type_signature not in cls._cache: + type_signature = cls.get_type_signature(op_info) + construct_signature = cls.get_constructor_signature(op_info) + full_signature = (type_signature, construct_signature) + in_dtypes, out_dtypes = type_signature + if full_signature not in cls._cache: self = object.__new__(cls) self.in_dtypes = in_dtypes self.out_dtypes = out_dtypes + self.construct_params = construct_signature self.attributes = deepcopy(op_info.op_attr) - cls._cache[type_signature] = self - return cls._cache[type_signature] + cls._cache[full_signature] = self + return cls._cache[full_signature] + + @classmethod + @must_return_type(Hashable) + def get_type_signature(cls, op_info): + in_dtypes = tuple(t.dtype for t in op_info.input_tensors) + out_dtypes = tuple(t.dtype for t in op_info.output_tensors) + return (in_dtypes, out_dtypes) + + @classmethod + @must_return_type(Hashable) + def get_constructor_signature(cls, op_info): + return tuple() def get_declare_snippet(self, op_var_name, **kwargs): raise NotImplementedError( diff --git a/utensor_cgen/utils.py b/utensor_cgen/utils.py index 3f47219f..13c0bb58 100644 --- a/utensor_cgen/utils.py +++ b/utensor_cgen/utils.py @@ -496,6 +496,7 @@ def __getitem__(self, slice_obj): cls = type(self) return cls(funcs=self._funcs[slice_obj]) + class Configuration(object): def __init__(self, defaults=None, user_config=None): """ @@ -563,3 +564,39 @@ def __repr__(self): ' user_config={} \n' ')' ).format(self._defaults, self._user_config) + + +class must_return_type(object): + + def __init__(self, type_): + self._expected_type = type_ + + def __call__(self, func): + @wraps(func) + def wrapped(*args, **kwargs): + ret = func(*args, **kwargs) + ret_cls = type(ret) + if not issubclass(ret_cls, self._expected_type): + raise TypeError( + "expecting {} to return value of type {}, get {}".format( + func, + self._expected_type, + ret_cls + ) + ) + return ret + wrapped._has_return_type_check = True + wrapped._expecting = self._expected_type + return wrapped + + @staticmethod + def get_expect_type(wrapped): + if isinstance(wrapped, classmethod): + wrapped = wrapped.__func__ + return wrapped._expecting + + @staticmethod + def return_type_is_ensured(wrapped): + if isinstance(wrapped, classmethod): + wrapped = wrapped.__func__ + return getattr(wrapped, '_has_return_type_check', False) From 154d8ab6d60368149c4afd578c095fa62baf392b Mon Sep 17 00:00:00 2001 From: dboyliao Date: Sat, 18 Apr 2020 10:43:19 +0800 Subject: [PATCH 087/117] Resolve review issues --- utensor_cgen/legalizer/onnx.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/utensor_cgen/legalizer/onnx.py b/utensor_cgen/legalizer/onnx.py index d9459252..170ad828 100644 --- a/utensor_cgen/legalizer/onnx.py +++ b/utensor_cgen/legalizer/onnx.py @@ -21,7 +21,11 @@ def _visit_all(self, ugraph): visitor(op_info) topologic_order_graph(ugraph) + # _visit_ methods will be invoked when an op_info of + # type is encountered during graph traversal + # ex: _visit_gemm -> will be invoked with an op_info with type Gemm def _visit_gemm(self, op_info): + # op_info.op_type == "Gemm" ugraph = op_info.ugraph op_info.op_type = 'MatMul' tensor_a, tensor_w, tensor_bias = op_info.input_tensors @@ -53,5 +57,5 @@ def _visit_gemm(self, op_info): op_info.output_tensors[0].op_name = add_op.name def _visit_id(self, op_info): - # identity op should have op_type == 'Identity' + # identity op should be op_info.op_type == 'Identity' return op_info From df943832f1d28a87cbe112939cff0405862514fa Mon Sep 17 00:00:00 2001 From: dboyliao Date: Mon, 20 Apr 2020 18:25:02 +0800 Subject: [PATCH 088/117] Formatting files --- utensor_cgen/frontend/tflite.py | 488 +++++++++++++++++--------------- 1 file changed, 265 insertions(+), 223 deletions(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index f413f932..89be991f 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -1,62 +1,77 @@ from __future__ import absolute_import + import os -import six import re -import numpy as np +import six -from utensor_cgen.frontend.base import Parser +import flatbuffers +import numpy as np from utensor_cgen.frontend import FrontendSelector -from utensor_cgen.ir.base import TensorInfo, OperationInfo, uTensorGraph +from utensor_cgen.frontend.base import Parser +from utensor_cgen.ir.base import OperationInfo, TensorInfo, uTensorGraph +from utensor_cgen.ir.converter import (AttrValueConverter, + GenericTensorConverterMixin) from utensor_cgen.utils import topologic_order_graph -from utensor_cgen.ir.converter import GenericTensorConverterMixin, AttrValueConverter -import flatbuffers +from .tflite_flatbuffer.ActivationFunctionType import ActivationFunctionType +from .tflite_flatbuffer.BuiltinOperator import BuiltinOperator +from .tflite_flatbuffer.CustomOptionsFormat import CustomOptionsFormat +from .tflite_flatbuffer.FullyConnectedOptionsWeightsFormat import \ + FullyConnectedOptionsWeightsFormat from .tflite_flatbuffer.Model import Model tensor_np_type = dict() -tensor_np_type[0] = np.dtype('float32') -tensor_np_type[1] = np.dtype('float16') -tensor_np_type[2] = np.dtype('int32') -tensor_np_type[3] = np.dtype('uint8') -tensor_np_type[4] = np.dtype('uint64') -tensor_np_type[5] = np.dtype('ubyte') #FIXME: supposed to be string -tensor_np_type[6] = np.dtype('bool') -tensor_np_type[7] = np.dtype('int16') -tensor_np_type[8] = np.dtype('cdouble') -tensor_np_type[9] = np.dtype('int8') +tensor_np_type[0] = np.dtype("float32") +tensor_np_type[1] = np.dtype("float16") +tensor_np_type[2] = np.dtype("int32") +tensor_np_type[3] = np.dtype("uint8") +tensor_np_type[4] = np.dtype("uint64") +tensor_np_type[5] = np.dtype("ubyte") # FIXME: supposed to be string +tensor_np_type[6] = np.dtype("bool") +tensor_np_type[7] = np.dtype("int16") +tensor_np_type[8] = np.dtype("cdouble") +tensor_np_type[9] = np.dtype("int8") + -from .tflite_flatbuffer.BuiltinOperator import BuiltinOperator builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} -from .tflite_flatbuffer.ActivationFunctionType import ActivationFunctionType -from .tflite_flatbuffer.FullyConnectedOptionsWeightsFormat import FullyConnectedOptionsWeightsFormat -from .tflite_flatbuffer.CustomOptionsFormat import CustomOptionsFormat def class_option2str(obj, idx): names_lookup = {v: k for k, v in obj.__dict__.items()} name = names_lookup[idx] return str(idx) + " (" + name + ")" + customOptionFormat_lookup = {v: k for k, v in CustomOptionsFormat.__dict__.items()} + def fully_connected_op_data(op): option_dict = {} - if(op.CustomOptionsLength() < 1): + if op.CustomOptionsLength() < 1: from .tflite_flatbuffer.FullyConnectedOptions import FullyConnectedOptions + option = FullyConnectedOptions() builtin_data = op.BuiltinOptions() option.Init(builtin_data.Bytes, builtin_data.Pos) - option_dict["FusedActivationFunction"] = class_option2str(ActivationFunctionType, option.FusedActivationFunction()) - option_dict["w_formats"] = class_option2str(FullyConnectedOptionsWeightsFormat, option.WeightsFormat()) + option_dict["FusedActivationFunction"] = class_option2str( + ActivationFunctionType, option.FusedActivationFunction() + ) + option_dict["w_formats"] = class_option2str( + FullyConnectedOptionsWeightsFormat, option.WeightsFormat() + ) else: - option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() return option_dict - + + def depthwise_conv2d_op_data(op): option_dict = {} - if(op.CustomOptionsLength() < 1): + if op.CustomOptionsLength() < 1: from .tflite_flatbuffer.DepthwiseConv2DOptions import DepthwiseConv2DOptions + option = DepthwiseConv2DOptions() builtin_data = op.BuiltinOptions() option.Init(builtin_data.Bytes, builtin_data.Pos) @@ -64,31 +79,41 @@ def depthwise_conv2d_op_data(op): option_dict["StrideW"] = option.StrideW() option_dict["StrideH"] = option.StrideH() option_dict["DepthMultiplier"] = option.DepthMultiplier() - option_dict["FusedActivationFunction"] = class_option2str(ActivationFunctionType, option.FusedActivationFunction()) + option_dict["FusedActivationFunction"] = class_option2str( + ActivationFunctionType, option.FusedActivationFunction() + ) option_dict["DilationWFactor"] = option.DilationWFactor() option_dict["DilationHFactor"] = option.DilationHFactor() - + else: - option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() - + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() + return option_dict - + + def reshape_op_data(op): option_dict = {} - if(op.CustomOptionsLength() < 1): + if op.CustomOptionsLength() < 1: from .tflite_flatbuffer.ReshapeOptions import ReshapeOptions + option = ReshapeOptions() builtin_data = op.BuiltinOptions() option.Init(builtin_data.Bytes, builtin_data.Pos) option_dict["NewShape"] = option.NewShapeAsNumpy() else: - option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() - + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() + return option_dict - + + def dequantize_op_data(op): - if(op.CustomOptionsLength() < 1): + if op.CustomOptionsLength() < 1: from .tflite_flatbuffer.DequantizeOptions import DequantizeOptions + option = DequantizeOptions() builtin_data = op.BuiltinOptions() if builtin_data is None: @@ -98,10 +123,12 @@ def dequantize_op_data(op): else: custom_option = op.CustomOptionsAsNumpy() return [custom_option] - + + def quantize_op_data(op): - if(op.CustomOptionsLength() < 1): + if op.CustomOptionsLength() < 1: from .tflite_flatbuffer.QuantizeOptions import QuantizeOptions + option = QuantizeOptions() builtin_data = op.BuiltinOptions() if builtin_data is None: @@ -111,11 +138,13 @@ def quantize_op_data(op): else: custom_option = op.CustomOptionsAsNumpy() return [custom_option] - + + def pool2d_op_data(op): option_dict = {} - if(op.CustomOptionsLength() < 1): + if op.CustomOptionsLength() < 1: from .tflite_flatbuffer.Pool2DOptions import Pool2DOptions + option = Pool2DOptions() builtin_data = op.BuiltinOptions() option.Init(builtin_data.Bytes, builtin_data.Pos) @@ -124,25 +153,34 @@ def pool2d_op_data(op): option_dict["StrideH"] = option.StrideH() option_dict["FilterWidth"] = option.FilterWidth() option_dict["FilterHeight"] = option.FilterHeight() - option_dict["FusedActivationFunction"] = class_option2str(ActivationFunctionType, option.FusedActivationFunction()) + option_dict["FusedActivationFunction"] = class_option2str( + ActivationFunctionType, option.FusedActivationFunction() + ) else: - option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() - + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() + return option_dict + def argmax_op_data(op): option_dict = {} - if(op.CustomOptionsLength() < 1): + if op.CustomOptionsLength() < 1: from .tflite_flatbuffer.ArgMaxOptions import ArgMaxOptions + option = ArgMaxOptions() builtin_data = op.BuiltinOptions() option.Init(builtin_data.Bytes, builtin_data.Pos) option_dict["OutputType"] = option.OutputType() else: - option_dict[customOptionFormat_lookup[op.CustomOptionsFormat()]] = op.CustomOptionsAsNumpy() - + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() + return option_dict + op_data_func = dict() op_data_func["QUANTIZE"] = quantize_op_data op_data_func["DEPTHWISE_CONV_2D"] = depthwise_conv2d_op_data @@ -152,196 +190,200 @@ def argmax_op_data(op): op_data_func["DEQUANTIZE"] = dequantize_op_data op_data_func["ARG_MAX"] = argmax_op_data -@FrontendSelector.register(target_exts=['.tflite']) -class TFLiteParser(Parser): - def parse(self, tflite_file, output_nodes=None): - graph_name, _ = os.path.splitext(tflite_file) - buf = open(tflite_file, 'rb').read() - buf = bytearray(buf) - fb_model = Model.GetRootAsModel(buf, 0) +@FrontendSelector.register(target_exts=[".tflite"]) +class TFLiteParser(Parser): + def parse(self, tflite_file, output_nodes=None): + graph_name, _ = os.path.splitext(tflite_file) + buf = open(tflite_file, "rb").read() + buf = bytearray(buf) + fb_model = Model.GetRootAsModel(buf, 0) - ugraph = uTensorGraph( - name=graph_name, - output_nodes=[], - lib_name='tflite', - ops_info={}, - ) + ugraph = uTensorGraph( + name=graph_name, output_nodes=[], lib_name="tflite", ops_info={}, + ) - self._build_graph(fb_model, ugraph) + self._build_graph(fb_model, ugraph) - return ugraph + return ugraph - def _build_graph(self, fb_model, ugraph): - self.tensor_names_map = {} #addresseed by indexi - self._build_tensor_map(fb_model, ugraph) + def _build_graph(self, fb_model, ugraph): + self.tensor_names_map = {} # addresseed by indexi + self._build_tensor_map(fb_model, ugraph) - self._build_param_ops(fb_model, ugraph) - #find and set input nodes - self._build_input_ops(fb_model, ugraph) - self._build_intermediate_ops(fb_model, ugraph) - self._set_output_ops(fb_model, ugraph) + self._build_param_ops(fb_model, ugraph) + # find and set input nodes + self._build_input_ops(fb_model, ugraph) + self._build_intermediate_ops(fb_model, ugraph) + self._set_output_ops(fb_model, ugraph) - topologic_order_graph(ugraph) + topologic_order_graph(ugraph) - def _set_output_ops(self, fb_model, ugraph): - """identfy output nodes in fb_mdel + def _set_output_ops(self, fb_model, ugraph): + """identfy output nodes in fb_mdel sets output_nodes in ugraph Note this method will update ugraph **inplace** """ - subgraph = self._get_tflm_get_subgraph(fb_model) - subgraph_outputs_indexi = subgraph.OutputsAsNumpy() #tensor indexi - output_node_names = set() - for index in subgraph_outputs_indexi: - output_node_names.add(self.tensor_names_map[index].op_name) - - ugraph.output_nodes = list(output_node_names) - - def _build_tensor_map(self, fb_model, ugraph): - subgraph = self._get_tflm_get_subgraph(fb_model) - - for idx in range(0, subgraph.TensorsLength()): - tensor = subgraph.Tensors(idx) - - tensor_name = tensor.Name() - if tensor_name is '' or None: - tensor_name = 'tensor_' + str(idx) - - dtype=tensor_np_type[tensor.Type()] - - attributes = dict() - - quantParam = tensor.Quantization() - if quantParam != None: - attributes['quantizationZeros'] = list([quantParam.ZeroPointAsNumpy()]) - attributes['quantizationScales'] = list([quantParam.ScaleAsNumpy()]) - - - if type(tensor.ShapeAsNumpy()) == np.ndarray: - shape = tensor.ShapeAsNumpy().tolist() - else: - shape = [d for d in fb_model.Buffers(12).DataAsNumpy().shape] - - self.tensor_names_map[idx] = TensorInfo( - name=self._format_tensor_name('', tensor_name, 0), - op_name="", - dtype=dtype, - shape=shape, - attributes=attributes, - ugraph=ugraph - ) - - def _build_param_ops(self, fb_model, ugraph): - """Const tensors are identified by buffer_index == 0. These tensors are converted to Const Op and added to ugraph + subgraph = self._get_tflm_get_subgraph(fb_model) + subgraph_outputs_indexi = subgraph.OutputsAsNumpy() # tensor indexi + output_node_names = set() + for index in subgraph_outputs_indexi: + output_node_names.add(self.tensor_names_map[index].op_name) + + ugraph.output_nodes = list(output_node_names) + + def _build_tensor_map(self, fb_model, ugraph): + subgraph = self._get_tflm_get_subgraph(fb_model) + + for idx in range(0, subgraph.TensorsLength()): + tensor = subgraph.Tensors(idx) + + tensor_name = tensor.Name() + if tensor_name is "" or None: + tensor_name = "tensor_" + str(idx) + + dtype = tensor_np_type[tensor.Type()] + + attributes = dict() + + quantParam = tensor.Quantization() + if quantParam != None: + attributes["quantizationZeros"] = list([quantParam.ZeroPointAsNumpy()]) + attributes["quantizationScales"] = list([quantParam.ScaleAsNumpy()]) + + if type(tensor.ShapeAsNumpy()) == np.ndarray: + shape = tensor.ShapeAsNumpy().tolist() + else: + shape = [d for d in fb_model.Buffers(12).DataAsNumpy().shape] + + self.tensor_names_map[idx] = TensorInfo( + name=self._format_tensor_name("", tensor_name, 0), + op_name="", + dtype=dtype, + shape=shape, + attributes=attributes, + ugraph=ugraph, + ) + + def _build_param_ops(self, fb_model, ugraph): + """Const tensors are identified by buffer_index == 0. These tensors are converted to Const Op and added to ugraph """ - subgraph = self._get_tflm_get_subgraph(fb_model) - - for idx in range(0, subgraph.TensorsLength()): - tensor = subgraph.Tensors(idx) - buffer_index = tensor.Buffer() - - # buffer_index == 0 if intermediate - if buffer_index == 0: - continue - - node_name = self.tensor_names_map[idx].name + "_Const" - dtype = self.tensor_names_map[idx].dtype - - buffer_array = fb_model.Buffers(buffer_index).DataAsNumpy() - if type(buffer_array) == int: - continue #somehow, sometimes, the buffer contains no data, likely to be an intermediate tensor - buffer_content = fb_model.Buffers(buffer_index).DataAsNumpy().astype(dtype) - - OperationInfo( - name=node_name, - input_tensors=[], - output_tensors=[self.tensor_names_map[idx]], - op_type='Const', - lib_name='tflm', - ugraph=ugraph, - op_attr={ - 'value': AttrValueConverter.GenericType( - value_name="tensor", - value=GenericTensorConverterMixin.GenericType(np_array=buffer_content) - ) - } - ) - - self._set_tensor_node(idx, node_name) - - def _build_input_ops(self, fb_model, ugraph): - """Find placeholders + subgraph = self._get_tflm_get_subgraph(fb_model) + + for idx in range(0, subgraph.TensorsLength()): + tensor = subgraph.Tensors(idx) + buffer_index = tensor.Buffer() + + # buffer_index == 0 if intermediate + if buffer_index == 0: + continue + + node_name = self.tensor_names_map[idx].name + "_Const" + dtype = self.tensor_names_map[idx].dtype + + buffer_array = fb_model.Buffers(buffer_index).DataAsNumpy() + if type(buffer_array) == int: + + continue # somehow, sometimes, the buffer contains no data, likely to be an intermediate tensor + buffer_content = fb_model.Buffers(buffer_index).DataAsNumpy().astype(dtype) + + OperationInfo( + name=node_name, + input_tensors=[], + output_tensors=[self.tensor_names_map[idx]], + op_type="Const", + lib_name="tflm", + ugraph=ugraph, + op_attr={ + "value": AttrValueConverter.GenericType( + value_name="tensor", + value=GenericTensorConverterMixin.GenericType( + np_array=buffer_content + ), + ) + }, + ) + + self._set_tensor_node(idx, node_name) + + def _build_input_ops(self, fb_model, ugraph): + """Find placeholders Attach placeholders to input tensors Note this method will update inputs **inplace** """ - subgraph = self._get_tflm_get_subgraph(fb_model) - subgraph_inputs_indexi = subgraph.InputsAsNumpy() - for index in subgraph_inputs_indexi: - node_name = self.tensor_names_map[index].name + "_Placeholder" - self._set_tensor_node(index, node_name) - OperationInfo( - name=node_name, - input_tensors=[], - output_tensors=[self.tensor_names_map[index]], - op_type='Placeholder', - ugraph=ugraph, - lib_name='tflm', - op_attr={} - ) - - def _build_intermediate_ops(self, fb_model, ugraph): - """Build all intermediate nodes + subgraph = self._get_tflm_get_subgraph(fb_model) + subgraph_inputs_indexi = subgraph.InputsAsNumpy() + for index in subgraph_inputs_indexi: + node_name = self.tensor_names_map[index].name + "_Placeholder" + self._set_tensor_node(index, node_name) + OperationInfo( + name=node_name, + input_tensors=[], + output_tensors=[self.tensor_names_map[index]], + op_type="Placeholder", + ugraph=ugraph, + lib_name="tflm", + op_attr={}, + ) + + def _build_intermediate_ops(self, fb_model, ugraph): + """Build all intermediate nodes """ - subgraphs_len = fb_model.SubgraphsLength() - assert subgraphs_len == 1, "only 1 subgraph is supported" - subgraph = fb_model.Subgraphs(0) - for i in range(0, subgraph.OperatorsLength()): - #topological order, op-index defined by schema - #BuiltinOperator: https://github.com/tensorflow/tensorflow/blob/031804922d8f4d18b61e3ad077f9f1b69273ff21/tensorflow/lite/schema/schema_v3.fbs#L71 - op = subgraph.Operators(i) - local_op_code = op.OpcodeIndex() - global_op_code = fb_model.OperatorCodes(local_op_code) - builtinOperator_code = global_op_code.BuiltinCode() - op_type = builtin_ops[builtinOperator_code] - - node_name = str(i) + "_" + op_type - - input_tensor_names = [self.tensor_names_map[input_index] for input_index in op.InputsAsNumpy()] - output_tensor_names = [self.tensor_names_map[output_index] for output_index in op.OutputsAsNumpy()] - - op_attr = dict() - op_attr = op_data_func[op_type](op) - - OperationInfo( - name=node_name, - input_tensors=input_tensor_names, - output_tensors=output_tensor_names, - op_type=op_type, - ugraph=ugraph, - lib_name='tflm', - op_attr=op_attr - ) - - for tensor_index in op.OutputsAsNumpy(): - self._set_tensor_node(tensor_index, node_name) - - def _get_tflm_get_subgraph(self, fb_model): - subgraphs_len = fb_model.SubgraphsLength() - assert subgraphs_len == 1, "only 1 subgraph is supported" - subgraph = fb_model.Subgraphs(0) - - return subgraph - - def _set_tensor_node(self, idx, name): - assert self.tensor_names_map[idx].op_name == "" - self.tensor_names_map[idx].op_name = name - - def _format_node_name(self, node_name, op_type, op_cnt): - if node_name == '': - node_name = '{}_{}'.format(op_type, op_cnt) - return re.sub(r'[\.:/]', '_', node_name) - - def _format_tensor_name(self, name, node_name, offset): - if re.match(r'[a-zA-Z][a-zA-Z0-9]*:[0-9]+', name): - return name - return '{}:{}'.format(node_name, offset) + subgraphs_len = fb_model.SubgraphsLength() + assert subgraphs_len == 1, "only 1 subgraph is supported" + subgraph = fb_model.Subgraphs(0) + for i in range(0, subgraph.OperatorsLength()): + # topological order, op-index defined by schema + # BuiltinOperator: https://github.com/tensorflow/tensorflow/blob/031804922d8f4d18b61e3ad077f9f1b69273ff21/tensorflow/lite/schema/schema_v3.fbs#L71 + op = subgraph.Operators(i) + local_op_code = op.OpcodeIndex() + global_op_code = fb_model.OperatorCodes(local_op_code) + builtinOperator_code = global_op_code.BuiltinCode() + op_type = builtin_ops[builtinOperator_code] + + node_name = str(i) + "_" + op_type + + input_tensor_names = [ + self.tensor_names_map[input_index] for input_index in op.InputsAsNumpy() + ] + output_tensor_names = [ + self.tensor_names_map[output_index] + for output_index in op.OutputsAsNumpy() + ] + + op_attr = dict() + op_attr = op_data_func[op_type](op) + + OperationInfo( + name=node_name, + input_tensors=input_tensor_names, + output_tensors=output_tensor_names, + op_type=op_type, + ugraph=ugraph, + lib_name="tflm", + op_attr=op_attr, + ) + + for tensor_index in op.OutputsAsNumpy(): + self._set_tensor_node(tensor_index, node_name) + + def _get_tflm_get_subgraph(self, fb_model): + subgraphs_len = fb_model.SubgraphsLength() + assert subgraphs_len == 1, "only 1 subgraph is supported" + subgraph = fb_model.Subgraphs(0) + + return subgraph + + def _set_tensor_node(self, idx, name): + assert self.tensor_names_map[idx].op_name == "" + self.tensor_names_map[idx].op_name = name + + def _format_node_name(self, node_name, op_type, op_cnt): + if node_name == "": + node_name = "{}_{}".format(op_type, op_cnt) + return re.sub(r"[\.:/]", "_", node_name) + + def _format_tensor_name(self, name, node_name, offset): + if re.match(r"[a-zA-Z][a-zA-Z0-9]*:[0-9]+", name): + return name + return "{}:{}".format(node_name, offset) From 4577bf8afe917ed9d0df9c8f62f6436370cd0670 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Mon, 20 Apr 2020 23:34:09 +0800 Subject: [PATCH 089/117] update lockfile --- Pipfile.lock | 688 ++++++++++++++++++++++++++------------------------- 1 file changed, 356 insertions(+), 332 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 0c7b4cd7..86a93d24 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -36,15 +36,29 @@ }, "click": { "hashes": [ - "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", - "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" + "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc", + "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a" ], - "version": "==7.0" + "version": "==7.1.1" + }, + "cycler": { + "hashes": [ + "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d", + "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8" + ], + "version": "==0.10.0" }, "e1839a8": { "editable": true, "path": "." }, + "flatbuffers": { + "hashes": [ + "sha256:63bb9a722d5e373701913e226135b28a6f6ac200d5cc7b4d919fa38d73b44610", + "sha256:9e9ef47fa92625c4721036e7c4124182668dc6021d9e7c73704edd395648deb9" + ], + "version": "==1.12" + }, "gast": { "hashes": [ "sha256:8f46f5be57ae6889a4e16e2ca113b1703ef17f2b0abceb83793eaba9e1351a45", @@ -61,39 +75,39 @@ }, "grpcio": { "hashes": [ - "sha256:109d3a9aa4728f2a30b34bfd12d1d9bd5f5430cb51c983955309de2ab938f0b5", - "sha256:183c4bfeac07d2ffd7e462fc98f6bbb25718e80d252162ff80abc5249730f16b", - "sha256:374cf9033c42dc36084d0d20a9f92d792f0f44f6fc44c01e9d3a6d65d15c252f", - "sha256:3a2016a51c8668e87fd40af1e02d42e9fad90fdf7c5ba65e0a7d9b76f566513a", - "sha256:3fb35b3428ee877fa8236982d97fa539bb937faa3d15f1651fbb8b1df111467e", - "sha256:40772044359b744ab0357db7918307f26bd9336b8ca1ec1e0691112f8d70bb89", - "sha256:50f01cdb337f8020b20afd304f5b361156fcb5a74226fbb6f02076544213c0d8", - "sha256:6fa4fdd8c1668848e3decd6f3765edbfd028972720be399763e360ce267cb657", - "sha256:7c2fe5a631ee42e6e65d5e7698fa102f2097dcebc77f3516f572f7d865c23894", - "sha256:8de53c6320ebd54868713250ab9a6b117552e7f77d33d669aa39bd799a9aad57", - "sha256:979ae7b022a0a352df5d3625f3549eaeae525698460c7dd15f4a1d8902ee5b2f", - "sha256:a0fbb6fc41e9dbe3831cc97c64077d1e05cb71ba57eddcbf7f2e5a3bf0251bcf", - "sha256:aaf99d0db5f2ea57303d735d3ace68aa941c4de8048cb61dd50e4b8b76bcfe74", - "sha256:bae2d171b43bafb44d3c459e9e6f9573b26517f67cad5330c9a9a1000a598e8c", - "sha256:bda2ed8c6bab7749f0d8fae5c2e2fa50ad1901caea6de76b2159f44550642950", - "sha256:bdf61c33536b03c7f4f5268fe3811a238063418294698d118cb04ebb9b3fb793", - "sha256:c6d79360a7cfed9531f08d92dbc9d1ae9aff401d767f3bc610558617adf895b0", - "sha256:c88d5c76dcbb01cd466cd16144797fbba3c31c2bb8972f3b8cfb392ffbec727a", - "sha256:c905fa65356903424f3942872f0635bbb62bf017c54cd645498efd7b0c871c9f", - "sha256:d24acfb3b15a22c69a5558009f0f107daf11fb9954886b6fea8d2b20388b34ff", - "sha256:d50966b58109f726820a23d029fed25762ae9055c9f77ba715e6bd007968d480", - "sha256:dbc5a413bb9d530f6ef3c265476f351fc80ea5510b4ccdabf7571032161f11c4", - "sha256:ddb922c15c8769db146b759209fd6de20cca313ee200a026fff96a43f1699522", - "sha256:ea1c6caaa67262caddb2eea03c9f47a2021ac70a005b388fc33cbbd1e6809262", - "sha256:ea681b433728f690f8519e8d3e2c5d77c3b6b691fb2e017eb79b0a8497885f30", - "sha256:eb7cb6f4b681f30d0b3accb87eae4fc2a4ca2116ea5b83fd98b6869ba64fbb24", - "sha256:ef902a609be05e69e63126cd8ba6c4e8a28a6435c1b759169bd7162fb09fec1b", - "sha256:f0200ad9556eaa0b14549b2292227a658c6963e576d4ac0cb3a3ecc7fd56629c", - "sha256:f59ee620e4de94f307c6860bc37255a3c9f35c672d13939c2497120102cd69c2", - "sha256:f7403d8f8322612a9e9b7d37c5da770781e473e72735c01cad886568a7461f53", - "sha256:fa33a7c99059c2cd35016db66777b8349a0d83f07a3fcc62fd451c3dbae7c3fd" - ], - "version": "==1.28.0rc1" + "sha256:085bbf7fd0070b8d65e84aa32979f17cfe624d27b5ce23955ef770c19d2d9623", + "sha256:0ae207a47ec0ad66eb1f53a27d566674d13a236c62ced409891335318ea9b8c5", + "sha256:0c130204ff5de0b9f041bf3126db0d29369d69883592e4b0d3c19868ba0ced7e", + "sha256:0ef6b380a588c2c6b29c6cfa0ba7f5d367beb33d5504bcc68658fa241ad498d2", + "sha256:16e1edb367763ea08d0994d4635ec05f4f8db9db59c39304b061097e3b93df43", + "sha256:16f5523dacae5aaeda4cf900da7e980747f663298c38c18eb4e5317704aa007a", + "sha256:181b5078cf568f37915b8a118afcef5fc9f3128c59c38998ed93e7dd793e3928", + "sha256:245564713cb4ac7bccb0f11be63781beb62299a44d8ab69031c859dbd9461728", + "sha256:271abbe28eb99fa5c70b3f272c0c66b67dab7bb11e1d29d8e616b4e0e099d29a", + "sha256:2e1b01cba26988c811c7fb91a0bca19c9afb776cc3d228993f08d324bdd0510a", + "sha256:3366bd6412c1e73acb1ee27d7f0c7d7dbee118ad8d98c957c8173691b2effeec", + "sha256:3893b39a0a17d857dc3a42fdb02a26aa53a59bfce49987187bcc0261647f1f55", + "sha256:3c7864d5ae63b787001b01b376f6315aef1a015aa9c809535235ed0ead907919", + "sha256:42c6716adf3ec1f608b2b56e885f26dd86e80d2fc1617f51fc92d1b0b649e28e", + "sha256:4bef0756b9e0df78e8d67a5b1e0e89b7daf41525d575f74e1f14a993c55b680d", + "sha256:4fe081862e58b8fbef0e479aefc9a64f8f17f53074df1085d8c1fe825a6e5df4", + "sha256:505a8d1b4ac571a51f10c4c995d5d4714f03c886604dc3c097ef5fd57bcfcf0b", + "sha256:5c2e81b6ab9768c43f2ca1c9a4c925823aad79ae95efb351007df4b92ebce592", + "sha256:70ff2df0c1795c5cf585a72d95bb458838b40bad5653c314b9067ba819e918f9", + "sha256:97b5612fc5d4bbf0490a2d80bed5eab5b59112ef1640440c1a9ac824bafa6968", + "sha256:a35f8f4a0334ed8b05db90383aecef8e49923ab430689a4360a74052f3a89cf4", + "sha256:aafe85a8210dfa1da3c46831b7f00c3735240b7b028eeba339eaea6ffdb593fb", + "sha256:c2e53eb253840f05278a8410628419ba7060815f86d48c9d83b6047de21c9956", + "sha256:c3645887db3309fc87c3db740b977d403fb265ebab292f1f6a926c4661231fd5", + "sha256:c6565cc92853af13237b2233f331efdad07339d27fe1f5f74256bfde7dc2f587", + "sha256:cbc322c5d5615e67c2a15be631f64e6c2bab8c12505bc7c150948abdaa0bdbac", + "sha256:df749ee982ec35ab76d37a1e637b10a92b4573e2b4e1f86a5fa8a1273c40a850", + "sha256:e9439d7b801c86df13c6cbb4c5a7e181c058f3c119d5e119a94a5f3090a8f060", + "sha256:f493ac4754717f25ace3614a51dd408a32b8bff3c9c0c85e9356e7e0a120a8c8", + "sha256:f80d10bdf1a306f7063046321fd4efc7732a606acdd4e6259b8a37349079b704", + "sha256:f83b0c91796eb42865451a20e82246011078ba067ea0744f7301e12a94ae2e1b" + ], + "version": "==1.28.1" }, "h5py": { "hashes": [ @@ -156,6 +170,27 @@ ], "version": "==1.1.0" }, + "kiwisolver": { + "hashes": [ + "sha256:03662cbd3e6729f341a97dd2690b271e51a67a68322affab12a5b011344b973c", + "sha256:18d749f3e56c0480dccd1714230da0f328e6e4accf188dd4e6884bdd06bf02dd", + "sha256:247800260cd38160c362d211dcaf4ed0f7816afb5efe56544748b21d6ad6d17f", + "sha256:443c2320520eda0a5b930b2725b26f6175ca4453c61f739fef7a5847bd262f74", + "sha256:4eadb361baf3069f278b055e3bb53fa189cea2fd02cb2c353b7a99ebb4477ef1", + "sha256:556da0a5f60f6486ec4969abbc1dd83cf9b5c2deadc8288508e55c0f5f87d29c", + "sha256:603162139684ee56bcd57acc74035fceed7dd8d732f38c0959c8bd157f913fec", + "sha256:60a78858580761fe611d22127868f3dc9f98871e6fdf0a15cc4203ed9ba6179b", + "sha256:7cc095a4661bdd8a5742aaf7c10ea9fac142d76ff1770a0f84394038126d8fc7", + "sha256:c31bc3c8e903d60a1ea31a754c72559398d91b5929fcb329b1c3a3d3f6e72113", + "sha256:c955791d80e464da3b471ab41eb65cf5a40c15ce9b001fdc5bbc241170de58ec", + "sha256:d069ef4b20b1e6b19f790d00097a5d5d2c50871b66d10075dab78938dc2ee2cf", + "sha256:d52b989dc23cdaa92582ceb4af8d5bcc94d74b2c3e64cd6785558ec6a879793e", + "sha256:e586b28354d7b6584d8973656a7954b1c69c93f708c0c07b77884f91640b7657", + "sha256:efcf3397ae1e3c3a4a0a0636542bcad5adad3b1dd3e8e629d0b6e201347176c8", + "sha256:fccefc0d36a38c57b7bd233a9b485e2f1eb71903ca7ad7adacad6c28a56d62d2" + ], + "version": "==1.2.0" + }, "markdown": { "hashes": [ "sha256:90fee683eeabe1a92e149f7ba74e5ccdc81cd397bd6c516d93a8da0ef90b6902", @@ -165,74 +200,82 @@ }, "markupsafe": { "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", - "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" + "sha256:06358015a4dee8ee23ae426bf885616ab3963622defd829eb45b44e3dee3515f", + "sha256:0b0c4fc852c5f02c6277ef3b33d23fcbe89b1b227460423e3335374da046b6db", + "sha256:267677fc42afed5094fc5ea1c4236bbe4b6a00fe4b08e93451e65ae9048139c7", + "sha256:303cb70893e2c345588fb5d5b86e0ca369f9bb56942f03064c5e3e75fa7a238a", + "sha256:3c9b624a0d9ed5a5093ac4edc4e823e6b125441e60ef35d36e6f4a6fdacd5054", + "sha256:42033e14cae1f6c86fc0c3e90d04d08ce73ac8e46ba420a0d22d545c2abd4977", + "sha256:4e4a99b6af7bdc0856b50020c095848ec050356a001e1f751510aef6ab14d0e0", + "sha256:4eb07faad54bb07427d848f31030a65a49ebb0cec0b30674f91cf1ddd456bfe4", + "sha256:63a7161cd8c2bc563feeda45df62f42c860dd0675e2b8da2667f25bb3c95eaba", + "sha256:68e0fd039b68d2945b4beb947d4023ca7f8e95b708031c345762efba214ea761", + "sha256:8092a63397025c2f655acd42784b2a1528339b90b987beb9253f22e8cdbb36c3", + "sha256:841218860683c0f2223e24756843d84cc49cccdae6765e04962607754a52d3e0", + "sha256:94076b2314bd2f6cfae508ad65b4d493e3a58a50112b7a2cbb6287bdbc404ae8", + "sha256:9d22aff1c5322e402adfb3ce40839a5056c353e711c033798cf4f02eb9f5124d", + "sha256:b0e4584f62b3e5f5c1a7bcefd2b52f236505e6ef032cc508caa4f4c8dc8d3af1", + "sha256:b1163ffc1384d242964426a8164da12dbcdbc0de18ea36e2c34b898ed38c3b45", + "sha256:beac28ed60c8e838301226a7a85841d0af2068eba2dcb1a58c2d32d6c05e440e", + "sha256:c29f096ce79c03054a1101d6e5fe6bf04b0bb489165d5e0e9653fb4fe8048ee1", + "sha256:c58779966d53e5f14ba393d64e2402a7926601d1ac8adeb4e83893def79d0428", + "sha256:cfe14b37908eaf7d5506302987228bff69e1b8e7071ccd4e70fd0283b1b47f0b", + "sha256:e834249c45aa9837d0753351cdca61a4b8b383cc9ad0ff2325c97ff7b69e72a6", + "sha256:eed1b234c4499811ee85bcefa22ef5e466e75d132502226ed29740d593316c1f" + ], + "version": "==2.0.0a1" + }, + "matplotlib": { + "hashes": [ + "sha256:2466d4dddeb0f5666fd1e6736cc5287a4f9f7ae6c1a9e0779deff798b28e1d35", + "sha256:282b3fc8023c4365bad924d1bb442ddc565c2d1635f210b700722776da466ca3", + "sha256:4bb50ee4755271a2017b070984bcb788d483a8ce3132fab68393d1555b62d4ba", + "sha256:56d3147714da5c7ac4bc452d041e70e0e0b07c763f604110bd4e2527f320b86d", + "sha256:7a9baefad265907c6f0b037c8c35a10cf437f7708c27415a5513cf09ac6d6ddd", + "sha256:aae7d107dc37b4bb72dcc45f70394e6df2e5e92ac4079761aacd0e2ad1d3b1f7", + "sha256:af14e77829c5b5d5be11858d042d6f2459878f8e296228c7ea13ec1fd308eb68", + "sha256:c1cf735970b7cd424502719b44288b21089863aaaab099f55e0283a721aaf781", + "sha256:ce378047902b7a05546b6485b14df77b2ff207a0054e60c10b5680132090c8ee", + "sha256:d35891a86a4388b6965c2d527b9a9f9e657d9e110b0575ca8a24ba0d4e34b8fc", + "sha256:e06304686209331f99640642dee08781a9d55c6e32abb45ed54f021f46ccae47", + "sha256:e20ba7fb37d4647ac38f3c6d8672dd8b62451ee16173a0711b37ba0ce42bf37d", + "sha256:f4412241e32d0f8d3713b68d3ca6430190a5e8a7c070f1c07d7833d8c5264398", + "sha256:ffe2f9cdcea1086fc414e82f42271ecf1976700b8edd16ca9d376189c6d93aee" ], - "version": "==1.1.1" + "version": "==3.2.1" }, "mock": { "hashes": [ - "sha256:2a572b715f09dd2f0a583d8aeb5bb67d7ed7a8fd31d193cf1227a99c16a67bc3", - "sha256:5e48d216809f6f393987ed56920305d8f3c647e6ed35407c1ff2ecb88a9e1151" + "sha256:3f9b2c0196c60d21838f307f5825a7b86b678cedc58ab9e50a8988187b4d81e0", + "sha256:dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72" ], - "version": "==4.0.1" + "version": "==4.0.2" }, "numpy": { "hashes": [ - "sha256:1786a08236f2c92ae0e70423c45e1e62788ed33028f94ca99c4df03f5be6b3c6", - "sha256:17aa7a81fe7599a10f2b7d95856dc5cf84a4eefa45bc96123cbbc3ebc568994e", - "sha256:20b26aaa5b3da029942cdcce719b363dbe58696ad182aff0e5dcb1687ec946dc", - "sha256:2d75908ab3ced4223ccba595b48e538afa5ecc37405923d1fea6906d7c3a50bc", - "sha256:39d2c685af15d3ce682c99ce5925cc66efc824652e10990d2462dfe9b8918c6a", - "sha256:56bc8ded6fcd9adea90f65377438f9fea8c05fcf7c5ba766bef258d0da1554aa", - "sha256:590355aeade1a2eaba17617c19edccb7db8d78760175256e3cf94590a1a964f3", - "sha256:70a840a26f4e61defa7bdf811d7498a284ced303dfbc35acb7be12a39b2aa121", - "sha256:77c3bfe65d8560487052ad55c6998a04b654c2fbc36d546aef2b2e511e760971", - "sha256:9537eecf179f566fd1c160a2e912ca0b8e02d773af0a7a1120ad4f7507cd0d26", - "sha256:9acdf933c1fd263c513a2df3dceecea6f3ff4419d80bf238510976bf9bcb26cd", - "sha256:ae0975f42ab1f28364dcda3dde3cf6c1ddab3e1d4b2909da0cb0191fa9ca0480", - "sha256:b3af02ecc999c8003e538e60c89a2b37646b39b688d4e44d7373e11c2debabec", - "sha256:b6ff59cee96b454516e47e7721098e6ceebef435e3e21ac2d6c3b8b02628eb77", - "sha256:b765ed3930b92812aa698a455847141869ef755a87e099fddd4ccf9d81fffb57", - "sha256:c98c5ffd7d41611407a1103ae11c8b634ad6a43606eca3e2a5a269e5d6e8eb07", - "sha256:cf7eb6b1025d3e169989416b1adcd676624c2dbed9e3bcb7137f51bfc8cc2572", - "sha256:d92350c22b150c1cae7ebb0ee8b5670cc84848f6359cf6b5d8f86617098a9b73", - "sha256:e422c3152921cece8b6a2fb6b0b4d73b6579bd20ae075e7d15143e711f3ca2ca", - "sha256:e840f552a509e3380b0f0ec977e8124d0dc34dc0e68289ca28f4d7c1d0d79474", - "sha256:f3d0a94ad151870978fb93538e95411c83899c9dc63e6fb65542f769568ecfa5" - ], - "version": "==1.18.1" + "sha256:0aa2b318cf81eb1693fcfcbb8007e95e231d7e1aa24288137f3b19905736c3ee", + "sha256:163c78c04f47f26ca1b21068cea25ed7c5ecafe5f5ab2ea4895656a750582b56", + "sha256:1e37626bcb8895c4b3873fcfd54e9bfc5ffec8d0f525651d6985fcc5c6b6003c", + "sha256:264fd15590b3f02a1fbc095e7e1f37cdac698ff3829e12ffdcffdce3772f9d44", + "sha256:3d9e1554cd9b5999070c467b18e5ae3ebd7369f02706a8850816f576a954295f", + "sha256:40c24960cd5cec55222963f255858a1c47c6fa50a65a5b03fd7de75e3700eaaa", + "sha256:46f404314dbec78cb342904f9596f25f9b16e7cf304030f1339e553c8e77f51c", + "sha256:4847f0c993298b82fad809ea2916d857d0073dc17b0510fbbced663b3265929d", + "sha256:48e15612a8357393d176638c8f68a19273676877caea983f8baf188bad430379", + "sha256:6725d2797c65598778409aba8cd67077bb089d5b7d3d87c2719b206dc84ec05e", + "sha256:99f0ba97e369f02a21bb95faa3a0de55991fd5f0ece2e30a9e2eaebeac238921", + "sha256:a41f303b3f9157a31ce7203e3ca757a0c40c96669e72d9b6ee1bce8507638970", + "sha256:a4305564e93f5c4584f6758149fd446df39fd1e0a8c89ca0deb3cce56106a027", + "sha256:a551d8cc267c634774830086da42e4ba157fa41dd3b93982bc9501b284b0c689", + "sha256:a6bc9432c2640b008d5f29bad737714eb3e14bb8854878eacf3d7955c4e91c36", + "sha256:c60175d011a2e551a2f74c84e21e7c982489b96b6a5e4b030ecdeacf2914da68", + "sha256:e46e2384209c91996d5ec16744234d1c906ab79a701ce1a26155c9ec890b8dc8", + "sha256:e607b8cdc2ae5d5a63cd1bec30a15b5ed583ac6a39f04b7ba0f03fcfbf29c05b", + "sha256:e94a39d5c40fffe7696009dbd11bc14a349b377e03a384ed011e03d698787dd3", + "sha256:eb2286249ebfe8fcb5b425e5ec77e4736d53ee56d3ad296f8947f67150f495e3", + "sha256:fdee7540d12519865b423af411bd60ddb513d2eb2cd921149b732854995bbf8b" + ], + "version": "==1.18.3" }, "onnx": { "hashes": [ @@ -283,30 +326,30 @@ }, "pillow": { "hashes": [ - "sha256:0a628977ac2e01ca96aaae247ec2bd38e729631ddf2221b4b715446fd45505be", - "sha256:54ebae163e8412aff0b9df1e88adab65788f5f5b58e625dc5c7f51eaf14a6837", - "sha256:5bfef0b1cdde9f33881c913af14e43db69815c7e8df429ceda4c70a5e529210f", - "sha256:5f3546ceb08089cedb9e8ff7e3f6a7042bb5b37c2a95d392fb027c3e53a2da00", - "sha256:5f7ae9126d16194f114435ebb79cc536b5682002a4fa57fa7bb2cbcde65f2f4d", - "sha256:62a889aeb0a79e50ecf5af272e9e3c164148f4bd9636cc6bcfa182a52c8b0533", - "sha256:7406f5a9b2fd966e79e6abdaf700585a4522e98d6559ce37fc52e5c955fade0a", - "sha256:8453f914f4e5a3d828281a6628cf517832abfa13ff50679a4848926dac7c0358", - "sha256:87269cc6ce1e3dee11f23fa515e4249ae678dbbe2704598a51cee76c52e19cda", - "sha256:875358310ed7abd5320f21dd97351d62de4929b0426cdb1eaa904b64ac36b435", - "sha256:8ac6ce7ff3892e5deaab7abaec763538ffd011f74dc1801d93d3c5fc541feee2", - "sha256:91b710e3353aea6fc758cdb7136d9bbdcb26b53cefe43e2cba953ac3ee1d3313", - "sha256:9d2ba4ed13af381233e2d810ff3bab84ef9f18430a9b336ab69eaf3cd24299ff", - "sha256:a28aca76fac5b5e04ce42122e5407e111bd5f56dfb881d2ee07b617b020003e3", - "sha256:a62ec5e13e227399be73303ff301f2865bf68657d15ea50b038d25fc41097317", - "sha256:ab76e5580b0ed647a8d8d2d2daee170e8e9f8aad225ede314f684e297e3643c2", - "sha256:bf4003aa538af3f4205c5fac56eacaa67a6dd81e454ffd9e9f055fff9f1bc614", - "sha256:bf598d2e37cf8edb1a2f26ed3fb255191f5232badea4003c16301cb94ac5bdd0", - "sha256:c18f70dc27cc5d236f10e7834236aff60aadc71346a5bc1f4f83a4b3abee6386", - "sha256:c5ed816632204a2fc9486d784d8e0d0ae754347aba99c811458d69fcdfd2a2f9", - "sha256:dc058b7833184970d1248135b8b0ab702e6daa833be14035179f2acb78ff5636", - "sha256:ff3797f2f16bf9d17d53257612da84dd0758db33935777149b3334c01ff68865" - ], - "version": "==7.0.0" + "sha256:04a10558320eba9137d6a78ca6fc8f4a5801f1b971152938851dc4629d903579", + "sha256:0f89ddc77cf421b8cd34ae852309501458942bf370831b4a9b406156b599a14e", + "sha256:251e5618125ec12ac800265d7048f5857a8f8f1979db9ea3e11382e159d17f68", + "sha256:291bad7097b06d648222b769bbfcd61e40d0abdfe10df686d20ede36eb8162b6", + "sha256:2f0b52a08d175f10c8ea36685115681a484c55d24d0933f9fd911e4111c04144", + "sha256:3713386d1e9e79cea1c5e6aaac042841d7eef838cc577a3ca153c8bedf570287", + "sha256:433bbc2469a2351bea53666d97bb1eb30f0d56461735be02ea6b27654569f80f", + "sha256:4510c6b33277970b1af83c987277f9a08ec2b02cc20ac0f9234e4026136bb137", + "sha256:50a10b048f4dd81c092adad99fa5f7ba941edaf2f9590510109ac2a15e706695", + "sha256:670e58d3643971f4afd79191abd21623761c2ebe61db1c2cb4797d817c4ba1a7", + "sha256:6c1924ed7dbc6ad0636907693bbbdd3fdae1d73072963e71f5644b864bb10b4d", + "sha256:721c04d3c77c38086f1f95d1cd8df87f2f9a505a780acf8575912b3206479da1", + "sha256:8d5799243050c2833c2662b824dfb16aa98e408d2092805edea4300a408490e7", + "sha256:90cd441a1638ae176eab4d8b6b94ab4ec24b212ed4c3fbee2a6e74672481d4f8", + "sha256:a5dc9f28c0239ec2742d4273bd85b2aa84655be2564db7ad1eb8f64b1efcdc4c", + "sha256:b2f3e8cc52ecd259b94ca880fea0d15f4ebc6da2cd3db515389bb878d800270f", + "sha256:b7453750cf911785009423789d2e4e5393aae9cbb8b3f471dab854b85a26cb89", + "sha256:b99b2607b6cd58396f363b448cbe71d3c35e28f03e442ab00806463439629c2c", + "sha256:cd47793f7bc9285a88c2b5551d3f16a2ddd005789614a34c5f4a598c2a162383", + "sha256:d6bf085f6f9ec6a1724c187083b37b58a8048f86036d42d21802ed5d1fae4853", + "sha256:da737ab273f4d60ae552f82ad83f7cbd0e173ca30ca20b160f708c92742ee212", + "sha256:eb84e7e5b07ff3725ab05977ac56d5eeb0c510795aeb48e8b691491be3c5745b" + ], + "version": "==7.1.1" }, "protobuf": { "hashes": [ @@ -331,21 +374,35 @@ ], "version": "==3.11.3" }, + "pyparsing": { + "hashes": [ + "sha256:67199f0c41a9c702154efb0e7a8cc08accf830eb003b4d9fa42c4059002e2492", + "sha256:700d17888d441604b0bd51535908dcb297561b040819cccde647a92439db5a2a" + ], + "version": "==3.0.0a1" + }, + "python-dateutil": { + "hashes": [ + "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", + "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a" + ], + "version": "==2.8.1" + }, "pyyaml": { "hashes": [ - "sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6", - "sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf", - "sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5", - "sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e", - "sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811", - "sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e", - "sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d", - "sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20", - "sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689", - "sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994", - "sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615" + "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", + "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", + "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", + "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", + "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", + "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", + "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", + "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", + "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", + "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", + "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" ], - "version": "==5.3" + "version": "==5.3.1" }, "six": { "hashes": [ @@ -438,18 +495,18 @@ }, "typing-extensions": { "hashes": [ - "sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2", - "sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d", - "sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575" + "sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5", + "sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae", + "sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392" ], - "version": "==3.7.4.1" + "version": "==3.7.4.2" }, "werkzeug": { "hashes": [ - "sha256:169ba8a33788476292d04186ab33b01d6add475033dfc07215e6d219cc077096", - "sha256:6dc65cf9091cf750012f56f2cad759fa9e879f511b5ff8685e456b4e3bf90d16" + "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43", + "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c" ], - "version": "==1.0.0" + "version": "==1.0.1" }, "wheel": { "hashes": [ @@ -492,10 +549,10 @@ }, "certifi": { "hashes": [ - "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", - "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" + "sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304", + "sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519" ], - "version": "==2019.11.28" + "version": "==2020.4.5.1" }, "chardet": { "hashes": [ @@ -556,11 +613,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302", - "sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b" + "sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f", + "sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e" ], "markers": "python_version < '3.8'", - "version": "==1.5.0" + "version": "==1.6.0" }, "isort": { "hashes": [ @@ -578,45 +635,24 @@ }, "kiwisolver": { "hashes": [ - "sha256:05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f", - "sha256:210d8c39d01758d76c2b9a693567e1657ec661229bc32eac30761fa79b2474b0", - "sha256:26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7", - "sha256:3b15d56a9cd40c52d7ab763ff0bc700edbb4e1a298dc43715ecccd605002cf11", - "sha256:3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe", - "sha256:400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c", - "sha256:47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5", - "sha256:53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75", - "sha256:58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187", - "sha256:5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641", - "sha256:5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883", - "sha256:682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5", - "sha256:76275ee077772c8dde04fb6c5bc24b91af1bb3e7f4816fd1852f1495a64dad93", - "sha256:79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2", - "sha256:7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3", - "sha256:8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389", - "sha256:8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897", - "sha256:9105ce82dcc32c73eb53a04c869b6a4bc756b43e4385f76ea7943e827f529e4d", - "sha256:933df612c453928f1c6faa9236161a1d999a26cd40abf1dc5d7ebbc6dbfb8fca", - "sha256:939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a", - "sha256:9491578147849b93e70d7c1d23cb1229458f71fc79c51d52dce0809b2ca44eea", - "sha256:9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c", - "sha256:a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326", - "sha256:a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0", - "sha256:aa716b9122307c50686356cfb47bfbc66541868078d0c801341df31dca1232a9", - "sha256:acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e", - "sha256:b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544", - "sha256:d22702cadb86b6fcba0e6b907d9f84a312db9cd6934ee728144ce3018e715ee1", - "sha256:d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995", - "sha256:d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f", - "sha256:db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee", - "sha256:e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004", - "sha256:e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2", - "sha256:f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9", - "sha256:f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a", - "sha256:f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f", - "sha256:fe51b79da0062f8e9d49ed0182a626a7dc7a0cbca0328f612c6ee5e4711c81e4" + "sha256:03662cbd3e6729f341a97dd2690b271e51a67a68322affab12a5b011344b973c", + "sha256:18d749f3e56c0480dccd1714230da0f328e6e4accf188dd4e6884bdd06bf02dd", + "sha256:247800260cd38160c362d211dcaf4ed0f7816afb5efe56544748b21d6ad6d17f", + "sha256:443c2320520eda0a5b930b2725b26f6175ca4453c61f739fef7a5847bd262f74", + "sha256:4eadb361baf3069f278b055e3bb53fa189cea2fd02cb2c353b7a99ebb4477ef1", + "sha256:556da0a5f60f6486ec4969abbc1dd83cf9b5c2deadc8288508e55c0f5f87d29c", + "sha256:603162139684ee56bcd57acc74035fceed7dd8d732f38c0959c8bd157f913fec", + "sha256:60a78858580761fe611d22127868f3dc9f98871e6fdf0a15cc4203ed9ba6179b", + "sha256:7cc095a4661bdd8a5742aaf7c10ea9fac142d76ff1770a0f84394038126d8fc7", + "sha256:c31bc3c8e903d60a1ea31a754c72559398d91b5929fcb329b1c3a3d3f6e72113", + "sha256:c955791d80e464da3b471ab41eb65cf5a40c15ce9b001fdc5bbc241170de58ec", + "sha256:d069ef4b20b1e6b19f790d00097a5d5d2c50871b66d10075dab78938dc2ee2cf", + "sha256:d52b989dc23cdaa92582ceb4af8d5bcc94d74b2c3e64cd6785558ec6a879793e", + "sha256:e586b28354d7b6584d8973656a7954b1c69c93f708c0c07b77884f91640b7657", + "sha256:efcf3397ae1e3c3a4a0a0636542bcad5adad3b1dd3e8e629d0b6e201347176c8", + "sha256:fccefc0d36a38c57b7bd233a9b485e2f1eb71903ca7ad7adacad6c28a56d62d2" ], - "version": "==1.1.0" + "version": "==1.2.0" }, "lazy-object-proxy": { "hashes": [ @@ -646,61 +682,49 @@ }, "markupsafe": { "hashes": [ - "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", - "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", - "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", - "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", - "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", - "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", - "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", - "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", - "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", - "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", - "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", - "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", - "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", - "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", - "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", - "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", - "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", - "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", - "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", - "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", - "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", - "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", - "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", - "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", - "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", - "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", - "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", - "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", - "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", - "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", - "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", - "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", - "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" - ], - "version": "==1.1.1" + "sha256:06358015a4dee8ee23ae426bf885616ab3963622defd829eb45b44e3dee3515f", + "sha256:0b0c4fc852c5f02c6277ef3b33d23fcbe89b1b227460423e3335374da046b6db", + "sha256:267677fc42afed5094fc5ea1c4236bbe4b6a00fe4b08e93451e65ae9048139c7", + "sha256:303cb70893e2c345588fb5d5b86e0ca369f9bb56942f03064c5e3e75fa7a238a", + "sha256:3c9b624a0d9ed5a5093ac4edc4e823e6b125441e60ef35d36e6f4a6fdacd5054", + "sha256:42033e14cae1f6c86fc0c3e90d04d08ce73ac8e46ba420a0d22d545c2abd4977", + "sha256:4e4a99b6af7bdc0856b50020c095848ec050356a001e1f751510aef6ab14d0e0", + "sha256:4eb07faad54bb07427d848f31030a65a49ebb0cec0b30674f91cf1ddd456bfe4", + "sha256:63a7161cd8c2bc563feeda45df62f42c860dd0675e2b8da2667f25bb3c95eaba", + "sha256:68e0fd039b68d2945b4beb947d4023ca7f8e95b708031c345762efba214ea761", + "sha256:8092a63397025c2f655acd42784b2a1528339b90b987beb9253f22e8cdbb36c3", + "sha256:841218860683c0f2223e24756843d84cc49cccdae6765e04962607754a52d3e0", + "sha256:94076b2314bd2f6cfae508ad65b4d493e3a58a50112b7a2cbb6287bdbc404ae8", + "sha256:9d22aff1c5322e402adfb3ce40839a5056c353e711c033798cf4f02eb9f5124d", + "sha256:b0e4584f62b3e5f5c1a7bcefd2b52f236505e6ef032cc508caa4f4c8dc8d3af1", + "sha256:b1163ffc1384d242964426a8164da12dbcdbc0de18ea36e2c34b898ed38c3b45", + "sha256:beac28ed60c8e838301226a7a85841d0af2068eba2dcb1a58c2d32d6c05e440e", + "sha256:c29f096ce79c03054a1101d6e5fe6bf04b0bb489165d5e0e9653fb4fe8048ee1", + "sha256:c58779966d53e5f14ba393d64e2402a7926601d1ac8adeb4e83893def79d0428", + "sha256:cfe14b37908eaf7d5506302987228bff69e1b8e7071ccd4e70fd0283b1b47f0b", + "sha256:e834249c45aa9837d0753351cdca61a4b8b383cc9ad0ff2325c97ff7b69e72a6", + "sha256:eed1b234c4499811ee85bcefa22ef5e466e75d132502226ed29740d593316c1f" + ], + "version": "==2.0.0a1" }, "matplotlib": { "hashes": [ - "sha256:019db591268b51dd30de5f3a8bbbf69589207e2d461de91c3aa425db6f135d3d", - "sha256:14d8b073d5a23094b84e0fda7a4460215e98cc18917e8a71bb143fd18930660b", - "sha256:23c186a5c521670f831bbd1f076ef1658e07a8cce3c7e8be1da0c828e86e08db", - "sha256:2bbd55057ae22283bccca6251259dfeb6b5eaf0d7d2ce1cc963c2fb03174b50d", - "sha256:42904319a69afcf36d27acfe9dc605cad2f19175d1e7e1a51a1e6f1c6515ba2a", - "sha256:4a78312908e92f453ea554fb32290b51e4df799f4c31ec99f04c87dbb3553b18", - "sha256:647a457c42ba4bd3a989384e1961a1f8766617a6519c4e53d6d3b215fad96756", - "sha256:797cb1c5eed0f09bc7f16ae01b6cafc90e0768fd4809b7716e806ae693b10f89", - "sha256:7b59131aaa13edcbe96a0d7d2d7d3a83a39749a39e97cc701f7355c2060f9945", - "sha256:a396ea75cd64e0f730ef2a397dabcc894db702f496f2d9c3cb978daa6588220c", - "sha256:a7d917bbe3f6de06c42d25df32003a527424ff367726e7a55e8daad53d6189d4", - "sha256:b54cf89cb6400f1a8753a7b6479b6bf75fdfedff5fdb4ccc4458fadf245ae5ff", - "sha256:c40a6d3455dcd37f3726e8e289b85f9df0125afb12cc3aeb781104c6390cae58", - "sha256:d9be08267fc44f1eee2f13f603633726f6752780a72e0f0973c6ade5b35e98fe" + "sha256:2466d4dddeb0f5666fd1e6736cc5287a4f9f7ae6c1a9e0779deff798b28e1d35", + "sha256:282b3fc8023c4365bad924d1bb442ddc565c2d1635f210b700722776da466ca3", + "sha256:4bb50ee4755271a2017b070984bcb788d483a8ce3132fab68393d1555b62d4ba", + "sha256:56d3147714da5c7ac4bc452d041e70e0e0b07c763f604110bd4e2527f320b86d", + "sha256:7a9baefad265907c6f0b037c8c35a10cf437f7708c27415a5513cf09ac6d6ddd", + "sha256:aae7d107dc37b4bb72dcc45f70394e6df2e5e92ac4079761aacd0e2ad1d3b1f7", + "sha256:af14e77829c5b5d5be11858d042d6f2459878f8e296228c7ea13ec1fd308eb68", + "sha256:c1cf735970b7cd424502719b44288b21089863aaaab099f55e0283a721aaf781", + "sha256:ce378047902b7a05546b6485b14df77b2ff207a0054e60c10b5680132090c8ee", + "sha256:d35891a86a4388b6965c2d527b9a9f9e657d9e110b0575ca8a24ba0d4e34b8fc", + "sha256:e06304686209331f99640642dee08781a9d55c6e32abb45ed54f021f46ccae47", + "sha256:e20ba7fb37d4647ac38f3c6d8672dd8b62451ee16173a0711b37ba0ce42bf37d", + "sha256:f4412241e32d0f8d3713b68d3ca6430190a5e8a7c070f1c07d7833d8c5264398", + "sha256:ffe2f9cdcea1086fc414e82f42271ecf1976700b8edd16ca9d376189c6d93aee" ], - "index": "pypi", - "version": "==3.2.0rc3" + "version": "==3.2.1" }, "mccabe": { "hashes": [ @@ -718,63 +742,63 @@ }, "numpy": { "hashes": [ - "sha256:1786a08236f2c92ae0e70423c45e1e62788ed33028f94ca99c4df03f5be6b3c6", - "sha256:17aa7a81fe7599a10f2b7d95856dc5cf84a4eefa45bc96123cbbc3ebc568994e", - "sha256:20b26aaa5b3da029942cdcce719b363dbe58696ad182aff0e5dcb1687ec946dc", - "sha256:2d75908ab3ced4223ccba595b48e538afa5ecc37405923d1fea6906d7c3a50bc", - "sha256:39d2c685af15d3ce682c99ce5925cc66efc824652e10990d2462dfe9b8918c6a", - "sha256:56bc8ded6fcd9adea90f65377438f9fea8c05fcf7c5ba766bef258d0da1554aa", - "sha256:590355aeade1a2eaba17617c19edccb7db8d78760175256e3cf94590a1a964f3", - "sha256:70a840a26f4e61defa7bdf811d7498a284ced303dfbc35acb7be12a39b2aa121", - "sha256:77c3bfe65d8560487052ad55c6998a04b654c2fbc36d546aef2b2e511e760971", - "sha256:9537eecf179f566fd1c160a2e912ca0b8e02d773af0a7a1120ad4f7507cd0d26", - "sha256:9acdf933c1fd263c513a2df3dceecea6f3ff4419d80bf238510976bf9bcb26cd", - "sha256:ae0975f42ab1f28364dcda3dde3cf6c1ddab3e1d4b2909da0cb0191fa9ca0480", - "sha256:b3af02ecc999c8003e538e60c89a2b37646b39b688d4e44d7373e11c2debabec", - "sha256:b6ff59cee96b454516e47e7721098e6ceebef435e3e21ac2d6c3b8b02628eb77", - "sha256:b765ed3930b92812aa698a455847141869ef755a87e099fddd4ccf9d81fffb57", - "sha256:c98c5ffd7d41611407a1103ae11c8b634ad6a43606eca3e2a5a269e5d6e8eb07", - "sha256:cf7eb6b1025d3e169989416b1adcd676624c2dbed9e3bcb7137f51bfc8cc2572", - "sha256:d92350c22b150c1cae7ebb0ee8b5670cc84848f6359cf6b5d8f86617098a9b73", - "sha256:e422c3152921cece8b6a2fb6b0b4d73b6579bd20ae075e7d15143e711f3ca2ca", - "sha256:e840f552a509e3380b0f0ec977e8124d0dc34dc0e68289ca28f4d7c1d0d79474", - "sha256:f3d0a94ad151870978fb93538e95411c83899c9dc63e6fb65542f769568ecfa5" - ], - "version": "==1.18.1" + "sha256:0aa2b318cf81eb1693fcfcbb8007e95e231d7e1aa24288137f3b19905736c3ee", + "sha256:163c78c04f47f26ca1b21068cea25ed7c5ecafe5f5ab2ea4895656a750582b56", + "sha256:1e37626bcb8895c4b3873fcfd54e9bfc5ffec8d0f525651d6985fcc5c6b6003c", + "sha256:264fd15590b3f02a1fbc095e7e1f37cdac698ff3829e12ffdcffdce3772f9d44", + "sha256:3d9e1554cd9b5999070c467b18e5ae3ebd7369f02706a8850816f576a954295f", + "sha256:40c24960cd5cec55222963f255858a1c47c6fa50a65a5b03fd7de75e3700eaaa", + "sha256:46f404314dbec78cb342904f9596f25f9b16e7cf304030f1339e553c8e77f51c", + "sha256:4847f0c993298b82fad809ea2916d857d0073dc17b0510fbbced663b3265929d", + "sha256:48e15612a8357393d176638c8f68a19273676877caea983f8baf188bad430379", + "sha256:6725d2797c65598778409aba8cd67077bb089d5b7d3d87c2719b206dc84ec05e", + "sha256:99f0ba97e369f02a21bb95faa3a0de55991fd5f0ece2e30a9e2eaebeac238921", + "sha256:a41f303b3f9157a31ce7203e3ca757a0c40c96669e72d9b6ee1bce8507638970", + "sha256:a4305564e93f5c4584f6758149fd446df39fd1e0a8c89ca0deb3cce56106a027", + "sha256:a551d8cc267c634774830086da42e4ba157fa41dd3b93982bc9501b284b0c689", + "sha256:a6bc9432c2640b008d5f29bad737714eb3e14bb8854878eacf3d7955c4e91c36", + "sha256:c60175d011a2e551a2f74c84e21e7c982489b96b6a5e4b030ecdeacf2914da68", + "sha256:e46e2384209c91996d5ec16744234d1c906ab79a701ce1a26155c9ec890b8dc8", + "sha256:e607b8cdc2ae5d5a63cd1bec30a15b5ed583ac6a39f04b7ba0f03fcfbf29c05b", + "sha256:e94a39d5c40fffe7696009dbd11bc14a349b377e03a384ed011e03d698787dd3", + "sha256:eb2286249ebfe8fcb5b425e5ec77e4736d53ee56d3ad296f8947f67150f495e3", + "sha256:fdee7540d12519865b423af411bd60ddb513d2eb2cd921149b732854995bbf8b" + ], + "version": "==1.18.3" }, "packaging": { "hashes": [ - "sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73", - "sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334" + "sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3", + "sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752" ], - "version": "==20.1" + "version": "==20.3" }, "pillow": { "hashes": [ - "sha256:0a628977ac2e01ca96aaae247ec2bd38e729631ddf2221b4b715446fd45505be", - "sha256:54ebae163e8412aff0b9df1e88adab65788f5f5b58e625dc5c7f51eaf14a6837", - "sha256:5bfef0b1cdde9f33881c913af14e43db69815c7e8df429ceda4c70a5e529210f", - "sha256:5f3546ceb08089cedb9e8ff7e3f6a7042bb5b37c2a95d392fb027c3e53a2da00", - "sha256:5f7ae9126d16194f114435ebb79cc536b5682002a4fa57fa7bb2cbcde65f2f4d", - "sha256:62a889aeb0a79e50ecf5af272e9e3c164148f4bd9636cc6bcfa182a52c8b0533", - "sha256:7406f5a9b2fd966e79e6abdaf700585a4522e98d6559ce37fc52e5c955fade0a", - "sha256:8453f914f4e5a3d828281a6628cf517832abfa13ff50679a4848926dac7c0358", - "sha256:87269cc6ce1e3dee11f23fa515e4249ae678dbbe2704598a51cee76c52e19cda", - "sha256:875358310ed7abd5320f21dd97351d62de4929b0426cdb1eaa904b64ac36b435", - "sha256:8ac6ce7ff3892e5deaab7abaec763538ffd011f74dc1801d93d3c5fc541feee2", - "sha256:91b710e3353aea6fc758cdb7136d9bbdcb26b53cefe43e2cba953ac3ee1d3313", - "sha256:9d2ba4ed13af381233e2d810ff3bab84ef9f18430a9b336ab69eaf3cd24299ff", - "sha256:a28aca76fac5b5e04ce42122e5407e111bd5f56dfb881d2ee07b617b020003e3", - "sha256:a62ec5e13e227399be73303ff301f2865bf68657d15ea50b038d25fc41097317", - "sha256:ab76e5580b0ed647a8d8d2d2daee170e8e9f8aad225ede314f684e297e3643c2", - "sha256:bf4003aa538af3f4205c5fac56eacaa67a6dd81e454ffd9e9f055fff9f1bc614", - "sha256:bf598d2e37cf8edb1a2f26ed3fb255191f5232badea4003c16301cb94ac5bdd0", - "sha256:c18f70dc27cc5d236f10e7834236aff60aadc71346a5bc1f4f83a4b3abee6386", - "sha256:c5ed816632204a2fc9486d784d8e0d0ae754347aba99c811458d69fcdfd2a2f9", - "sha256:dc058b7833184970d1248135b8b0ab702e6daa833be14035179f2acb78ff5636", - "sha256:ff3797f2f16bf9d17d53257612da84dd0758db33935777149b3334c01ff68865" - ], - "version": "==7.0.0" + "sha256:04a10558320eba9137d6a78ca6fc8f4a5801f1b971152938851dc4629d903579", + "sha256:0f89ddc77cf421b8cd34ae852309501458942bf370831b4a9b406156b599a14e", + "sha256:251e5618125ec12ac800265d7048f5857a8f8f1979db9ea3e11382e159d17f68", + "sha256:291bad7097b06d648222b769bbfcd61e40d0abdfe10df686d20ede36eb8162b6", + "sha256:2f0b52a08d175f10c8ea36685115681a484c55d24d0933f9fd911e4111c04144", + "sha256:3713386d1e9e79cea1c5e6aaac042841d7eef838cc577a3ca153c8bedf570287", + "sha256:433bbc2469a2351bea53666d97bb1eb30f0d56461735be02ea6b27654569f80f", + "sha256:4510c6b33277970b1af83c987277f9a08ec2b02cc20ac0f9234e4026136bb137", + "sha256:50a10b048f4dd81c092adad99fa5f7ba941edaf2f9590510109ac2a15e706695", + "sha256:670e58d3643971f4afd79191abd21623761c2ebe61db1c2cb4797d817c4ba1a7", + "sha256:6c1924ed7dbc6ad0636907693bbbdd3fdae1d73072963e71f5644b864bb10b4d", + "sha256:721c04d3c77c38086f1f95d1cd8df87f2f9a505a780acf8575912b3206479da1", + "sha256:8d5799243050c2833c2662b824dfb16aa98e408d2092805edea4300a408490e7", + "sha256:90cd441a1638ae176eab4d8b6b94ab4ec24b212ed4c3fbee2a6e74672481d4f8", + "sha256:a5dc9f28c0239ec2742d4273bd85b2aa84655be2564db7ad1eb8f64b1efcdc4c", + "sha256:b2f3e8cc52ecd259b94ca880fea0d15f4ebc6da2cd3db515389bb878d800270f", + "sha256:b7453750cf911785009423789d2e4e5393aae9cbb8b3f471dab854b85a26cb89", + "sha256:b99b2607b6cd58396f363b448cbe71d3c35e28f03e442ab00806463439629c2c", + "sha256:cd47793f7bc9285a88c2b5551d3f16a2ddd005789614a34c5f4a598c2a162383", + "sha256:d6bf085f6f9ec6a1724c187083b37b58a8048f86036d42d21802ed5d1fae4853", + "sha256:da737ab273f4d60ae552f82ad83f7cbd0e173ca30ca20b160f708c92742ee212", + "sha256:eb84e7e5b07ff3725ab05977ac56d5eeb0c510795aeb48e8b691491be3c5745b" + ], + "version": "==7.1.1" }, "pluggy": { "hashes": [ @@ -806,10 +830,10 @@ }, "pygments": { "hashes": [ - "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b", - "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe" + "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44", + "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324" ], - "version": "==2.5.2" + "version": "==2.6.1" }, "pylint": { "hashes": [ @@ -821,18 +845,18 @@ }, "pyparsing": { "hashes": [ - "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f", - "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec" + "sha256:67199f0c41a9c702154efb0e7a8cc08accf830eb003b4d9fa42c4059002e2492", + "sha256:700d17888d441604b0bd51535908dcb297561b040819cccde647a92439db5a2a" ], - "version": "==2.4.6" + "version": "==3.0.0a1" }, "pytest": { "hashes": [ - "sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d", - "sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6" + "sha256:0e5b30f5cb04e887b91b1ee519fa3d89049595f428c1db76e73bd7f17b09b172", + "sha256:84dde37075b8805f3d1f392cc47e38a0e59518fb46a431cfdaf7cf1ce805f970" ], "index": "pypi", - "version": "==5.3.5" + "version": "==5.4.1" }, "python-dateutil": { "hashes": [ @@ -850,19 +874,19 @@ }, "pyyaml": { "hashes": [ - "sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6", - "sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf", - "sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5", - "sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e", - "sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811", - "sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e", - "sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d", - "sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20", - "sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689", - "sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994", - "sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615" + "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", + "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", + "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", + "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", + "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", + "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", + "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", + "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", + "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", + "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", + "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" ], - "version": "==5.3" + "version": "==5.3.1" }, "requests": { "hashes": [ @@ -923,33 +947,33 @@ }, "sphinx": { "hashes": [ - "sha256:776ff8333181138fae52df65be733127539623bb46cc692e7fa0fcfc80d7aa88", - "sha256:ca762da97c3b5107cbf0ab9e11d3ec7ab8d3c31377266fd613b962ed971df709" + "sha256:3145d87d0962366d4c5264c39094eae3f5788d01d4b1a12294051bfe4271d91b", + "sha256:d7c6e72c6aa229caf96af82f60a0d286a1521d42496c226fe37f5a75dcfe2941" ], "index": "pypi", - "version": "==2.4.3" + "version": "==3.0.2" }, "sphinx-autoapi": { "hashes": [ - "sha256:623646ed1be7127486cab5f4e3ffc17a9327c2d2f3fce18effc39d73975a2973", - "sha256:b6b5f008edc174768a4d1fa87bc8ba1287744c9a9ff82e49064783da7a2ad03e" + "sha256:90ee5e312edaa204d7c0ce5312a8e56898d34620616662e1aec26e33ea84f758", + "sha256:abba752d7de5fea52ebc79198e4a3798ce76b42cfd89e2b0a41b6068885704a6" ], "index": "pypi", - "version": "==1.2.1" + "version": "==1.3.0" }, "sphinxcontrib-applehelp": { "hashes": [ - "sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897", - "sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d" + "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a", + "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58" ], - "version": "==1.0.1" + "version": "==1.0.2" }, "sphinxcontrib-devhelp": { "hashes": [ - "sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34", - "sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981" + "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e", + "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" ], - "version": "==1.0.1" + "version": "==1.0.2" }, "sphinxcontrib-htmlhelp": { "hashes": [ @@ -967,17 +991,17 @@ }, "sphinxcontrib-qthelp": { "hashes": [ - "sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20", - "sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f" + "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72", + "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6" ], - "version": "==1.0.2" + "version": "==1.0.3" }, "sphinxcontrib-serializinghtml": { "hashes": [ - "sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227", - "sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768" + "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc", + "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a" ], - "version": "==1.1.3" + "version": "==1.1.4" }, "typed-ast": { "hashes": [ @@ -1015,17 +1039,17 @@ }, "urllib3": { "hashes": [ - "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc", - "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc" + "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527", + "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115" ], - "version": "==1.25.8" + "version": "==1.25.9" }, "wcwidth": { "hashes": [ - "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603", - "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8" + "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1", + "sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1" ], - "version": "==0.1.8" + "version": "==0.1.9" }, "wrapt": { "hashes": [ @@ -1035,10 +1059,10 @@ }, "zipp": { "hashes": [ - "sha256:12248a63bbdf7548f89cb4c7cda4681e537031eda29c02ea29674bc6854460c2", - "sha256:7c0f8e91abc0dc07a5068f315c52cb30c66bfbc581e5b50704c8a2f6ebae794a" + "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b", + "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96" ], - "version": "==3.0.0" + "version": "==3.1.0" } } } From 1cc82c5256330f0b4dae9564a7492f605114ed31 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Wed, 22 Apr 2020 00:41:36 +0800 Subject: [PATCH 090/117] reformat file and add configuration to pylint --- utensor_cgen/frontend/tflite.py | 560 ++++++++++++++++---------------- 1 file changed, 280 insertions(+), 280 deletions(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 89be991f..4f7f1dc3 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -38,147 +38,147 @@ def class_option2str(obj, idx): - names_lookup = {v: k for k, v in obj.__dict__.items()} - name = names_lookup[idx] - return str(idx) + " (" + name + ")" + names_lookup = {v: k for k, v in obj.__dict__.items()} + name = names_lookup[idx] + return str(idx) + " (" + name + ")" customOptionFormat_lookup = {v: k for k, v in CustomOptionsFormat.__dict__.items()} def fully_connected_op_data(op): - option_dict = {} - if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.FullyConnectedOptions import FullyConnectedOptions - - option = FullyConnectedOptions() - builtin_data = op.BuiltinOptions() - option.Init(builtin_data.Bytes, builtin_data.Pos) - option_dict["FusedActivationFunction"] = class_option2str( - ActivationFunctionType, option.FusedActivationFunction() - ) - option_dict["w_formats"] = class_option2str( - FullyConnectedOptionsWeightsFormat, option.WeightsFormat() - ) - else: - option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] - ] = op.CustomOptionsAsNumpy() - return option_dict + option_dict = {} + if op.CustomOptionsLength() < 1: + from .tflite_flatbuffer.FullyConnectedOptions import FullyConnectedOptions + + option = FullyConnectedOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["FusedActivationFunction"] = class_option2str( + ActivationFunctionType, option.FusedActivationFunction() + ) + option_dict["w_formats"] = class_option2str( + FullyConnectedOptionsWeightsFormat, option.WeightsFormat() + ) + else: + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() + return option_dict def depthwise_conv2d_op_data(op): - option_dict = {} - if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.DepthwiseConv2DOptions import DepthwiseConv2DOptions - - option = DepthwiseConv2DOptions() - builtin_data = op.BuiltinOptions() - option.Init(builtin_data.Bytes, builtin_data.Pos) - option_dict["Padding"] = option.Padding() - option_dict["StrideW"] = option.StrideW() - option_dict["StrideH"] = option.StrideH() - option_dict["DepthMultiplier"] = option.DepthMultiplier() - option_dict["FusedActivationFunction"] = class_option2str( - ActivationFunctionType, option.FusedActivationFunction() - ) - option_dict["DilationWFactor"] = option.DilationWFactor() - option_dict["DilationHFactor"] = option.DilationHFactor() - - else: - option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] - ] = op.CustomOptionsAsNumpy() - - return option_dict + option_dict = {} + if op.CustomOptionsLength() < 1: + from .tflite_flatbuffer.DepthwiseConv2DOptions import DepthwiseConv2DOptions + + option = DepthwiseConv2DOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["Padding"] = option.Padding() + option_dict["StrideW"] = option.StrideW() + option_dict["StrideH"] = option.StrideH() + option_dict["DepthMultiplier"] = option.DepthMultiplier() + option_dict["FusedActivationFunction"] = class_option2str( + ActivationFunctionType, option.FusedActivationFunction() + ) + option_dict["DilationWFactor"] = option.DilationWFactor() + option_dict["DilationHFactor"] = option.DilationHFactor() + + else: + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() + + return option_dict def reshape_op_data(op): - option_dict = {} - if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.ReshapeOptions import ReshapeOptions + option_dict = {} + if op.CustomOptionsLength() < 1: + from .tflite_flatbuffer.ReshapeOptions import ReshapeOptions - option = ReshapeOptions() - builtin_data = op.BuiltinOptions() - option.Init(builtin_data.Bytes, builtin_data.Pos) - option_dict["NewShape"] = option.NewShapeAsNumpy() - else: - option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] - ] = op.CustomOptionsAsNumpy() + option = ReshapeOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["NewShape"] = option.NewShapeAsNumpy() + else: + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() - return option_dict + return option_dict def dequantize_op_data(op): - if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.DequantizeOptions import DequantizeOptions + if op.CustomOptionsLength() < 1: + from .tflite_flatbuffer.DequantizeOptions import DequantizeOptions - option = DequantizeOptions() - builtin_data = op.BuiltinOptions() - if builtin_data is None: - return builtin_data - option.Init(builtin_data.Bytes, builtin_data.Pos) - return [option] - else: - custom_option = op.CustomOptionsAsNumpy() - return [custom_option] + option = DequantizeOptions() + builtin_data = op.BuiltinOptions() + if builtin_data is None: + return builtin_data + option.Init(builtin_data.Bytes, builtin_data.Pos) + return [option] + else: + custom_option = op.CustomOptionsAsNumpy() + return [custom_option] def quantize_op_data(op): - if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.QuantizeOptions import QuantizeOptions + if op.CustomOptionsLength() < 1: + from .tflite_flatbuffer.QuantizeOptions import QuantizeOptions - option = QuantizeOptions() - builtin_data = op.BuiltinOptions() - if builtin_data is None: - return builtin_data - option.Init(builtin_data.Bytes, builtin_data.Pos) - return [option] - else: - custom_option = op.CustomOptionsAsNumpy() - return [custom_option] + option = QuantizeOptions() + builtin_data = op.BuiltinOptions() + if builtin_data is None: + return builtin_data + option.Init(builtin_data.Bytes, builtin_data.Pos) + return [option] + else: + custom_option = op.CustomOptionsAsNumpy() + return [custom_option] def pool2d_op_data(op): - option_dict = {} - if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.Pool2DOptions import Pool2DOptions - - option = Pool2DOptions() - builtin_data = op.BuiltinOptions() - option.Init(builtin_data.Bytes, builtin_data.Pos) - option_dict["Padding"] = option.Padding() - option_dict["StrideW"] = option.StrideW() - option_dict["StrideH"] = option.StrideH() - option_dict["FilterWidth"] = option.FilterWidth() - option_dict["FilterHeight"] = option.FilterHeight() - option_dict["FusedActivationFunction"] = class_option2str( - ActivationFunctionType, option.FusedActivationFunction() - ) - else: - option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] - ] = op.CustomOptionsAsNumpy() - - return option_dict + option_dict = {} + if op.CustomOptionsLength() < 1: + from .tflite_flatbuffer.Pool2DOptions import Pool2DOptions + + option = Pool2DOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["Padding"] = option.Padding() + option_dict["StrideW"] = option.StrideW() + option_dict["StrideH"] = option.StrideH() + option_dict["FilterWidth"] = option.FilterWidth() + option_dict["FilterHeight"] = option.FilterHeight() + option_dict["FusedActivationFunction"] = class_option2str( + ActivationFunctionType, option.FusedActivationFunction() + ) + else: + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() + + return option_dict def argmax_op_data(op): - option_dict = {} - if op.CustomOptionsLength() < 1: - from .tflite_flatbuffer.ArgMaxOptions import ArgMaxOptions + option_dict = {} + if op.CustomOptionsLength() < 1: + from .tflite_flatbuffer.ArgMaxOptions import ArgMaxOptions - option = ArgMaxOptions() - builtin_data = op.BuiltinOptions() - option.Init(builtin_data.Bytes, builtin_data.Pos) - option_dict["OutputType"] = option.OutputType() - else: - option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] - ] = op.CustomOptionsAsNumpy() + option = ArgMaxOptions() + builtin_data = op.BuiltinOptions() + option.Init(builtin_data.Bytes, builtin_data.Pos) + option_dict["OutputType"] = option.OutputType() + else: + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() - return option_dict + return option_dict op_data_func = dict() @@ -193,197 +193,197 @@ def argmax_op_data(op): @FrontendSelector.register(target_exts=[".tflite"]) class TFLiteParser(Parser): - def parse(self, tflite_file, output_nodes=None): - graph_name, _ = os.path.splitext(tflite_file) - buf = open(tflite_file, "rb").read() - buf = bytearray(buf) - fb_model = Model.GetRootAsModel(buf, 0) + def parse(self, tflite_file, output_nodes=None): + graph_name, _ = os.path.splitext(tflite_file) + buf = open(tflite_file, "rb").read() + buf = bytearray(buf) + fb_model = Model.GetRootAsModel(buf, 0) - ugraph = uTensorGraph( - name=graph_name, output_nodes=[], lib_name="tflite", ops_info={}, - ) + ugraph = uTensorGraph( + name=graph_name, output_nodes=[], lib_name="tflite", ops_info={}, + ) - self._build_graph(fb_model, ugraph) + self._build_graph(fb_model, ugraph) - return ugraph + return ugraph - def _build_graph(self, fb_model, ugraph): - self.tensor_names_map = {} # addresseed by indexi - self._build_tensor_map(fb_model, ugraph) + def _build_graph(self, fb_model, ugraph): + self.tensor_names_map = {} # addresseed by indexi + self._build_tensor_map(fb_model, ugraph) - self._build_param_ops(fb_model, ugraph) - # find and set input nodes - self._build_input_ops(fb_model, ugraph) - self._build_intermediate_ops(fb_model, ugraph) - self._set_output_ops(fb_model, ugraph) + self._build_param_ops(fb_model, ugraph) + # find and set input nodes + self._build_input_ops(fb_model, ugraph) + self._build_intermediate_ops(fb_model, ugraph) + self._set_output_ops(fb_model, ugraph) - topologic_order_graph(ugraph) + topologic_order_graph(ugraph) - def _set_output_ops(self, fb_model, ugraph): - """identfy output nodes in fb_mdel + def _set_output_ops(self, fb_model, ugraph): + """identfy output nodes in fb_mdel sets output_nodes in ugraph Note this method will update ugraph **inplace** """ - subgraph = self._get_tflm_get_subgraph(fb_model) - subgraph_outputs_indexi = subgraph.OutputsAsNumpy() # tensor indexi - output_node_names = set() - for index in subgraph_outputs_indexi: - output_node_names.add(self.tensor_names_map[index].op_name) + subgraph = self._get_tflm_get_subgraph(fb_model) + subgraph_outputs_indexi = subgraph.OutputsAsNumpy() # tensor indexi + output_node_names = set() + for index in subgraph_outputs_indexi: + output_node_names.add(self.tensor_names_map[index].op_name) - ugraph.output_nodes = list(output_node_names) + ugraph.output_nodes = list(output_node_names) - def _build_tensor_map(self, fb_model, ugraph): - subgraph = self._get_tflm_get_subgraph(fb_model) + def _build_tensor_map(self, fb_model, ugraph): + subgraph = self._get_tflm_get_subgraph(fb_model) - for idx in range(0, subgraph.TensorsLength()): - tensor = subgraph.Tensors(idx) + for idx in range(0, subgraph.TensorsLength()): + tensor = subgraph.Tensors(idx) - tensor_name = tensor.Name() - if tensor_name is "" or None: - tensor_name = "tensor_" + str(idx) + tensor_name = tensor.Name() + if tensor_name is "" or None: + tensor_name = "tensor_" + str(idx) - dtype = tensor_np_type[tensor.Type()] + dtype = tensor_np_type[tensor.Type()] - attributes = dict() + attributes = dict() - quantParam = tensor.Quantization() - if quantParam != None: - attributes["quantizationZeros"] = list([quantParam.ZeroPointAsNumpy()]) - attributes["quantizationScales"] = list([quantParam.ScaleAsNumpy()]) + quantParam = tensor.Quantization() + if quantParam != None: + attributes["quantizationZeros"] = list([quantParam.ZeroPointAsNumpy()]) + attributes["quantizationScales"] = list([quantParam.ScaleAsNumpy()]) - if type(tensor.ShapeAsNumpy()) == np.ndarray: - shape = tensor.ShapeAsNumpy().tolist() - else: - shape = [d for d in fb_model.Buffers(12).DataAsNumpy().shape] + if type(tensor.ShapeAsNumpy()) == np.ndarray: + shape = tensor.ShapeAsNumpy().tolist() + else: + shape = [d for d in fb_model.Buffers(12).DataAsNumpy().shape] - self.tensor_names_map[idx] = TensorInfo( - name=self._format_tensor_name("", tensor_name, 0), - op_name="", - dtype=dtype, - shape=shape, - attributes=attributes, - ugraph=ugraph, - ) + self.tensor_names_map[idx] = TensorInfo( + name=self._format_tensor_name("", tensor_name, 0), + op_name="", + dtype=dtype, + shape=shape, + attributes=attributes, + ugraph=ugraph, + ) - def _build_param_ops(self, fb_model, ugraph): - """Const tensors are identified by buffer_index == 0. These tensors are converted to Const Op and added to ugraph + def _build_param_ops(self, fb_model, ugraph): + """Const tensors are identified by buffer_index == 0. These tensors are converted to Const Op and added to ugraph """ - subgraph = self._get_tflm_get_subgraph(fb_model) - - for idx in range(0, subgraph.TensorsLength()): - tensor = subgraph.Tensors(idx) - buffer_index = tensor.Buffer() - - # buffer_index == 0 if intermediate - if buffer_index == 0: - continue - - node_name = self.tensor_names_map[idx].name + "_Const" - dtype = self.tensor_names_map[idx].dtype - - buffer_array = fb_model.Buffers(buffer_index).DataAsNumpy() - if type(buffer_array) == int: - - continue # somehow, sometimes, the buffer contains no data, likely to be an intermediate tensor - buffer_content = fb_model.Buffers(buffer_index).DataAsNumpy().astype(dtype) - - OperationInfo( - name=node_name, - input_tensors=[], - output_tensors=[self.tensor_names_map[idx]], - op_type="Const", - lib_name="tflm", - ugraph=ugraph, - op_attr={ - "value": AttrValueConverter.GenericType( - value_name="tensor", - value=GenericTensorConverterMixin.GenericType( - np_array=buffer_content - ), - ) - }, - ) - - self._set_tensor_node(idx, node_name) - - def _build_input_ops(self, fb_model, ugraph): - """Find placeholders + subgraph = self._get_tflm_get_subgraph(fb_model) + + for idx in range(0, subgraph.TensorsLength()): + tensor = subgraph.Tensors(idx) + buffer_index = tensor.Buffer() + + # buffer_index == 0 if intermediate + if buffer_index == 0: + continue + + node_name = self.tensor_names_map[idx].name + "_Const" + dtype = self.tensor_names_map[idx].dtype + + buffer_array = fb_model.Buffers(buffer_index).DataAsNumpy() + if type(buffer_array) == int: + + continue # somehow, sometimes, the buffer contains no data, likely to be an intermediate tensor + buffer_content = fb_model.Buffers(buffer_index).DataAsNumpy().astype(dtype) + + OperationInfo( + name=node_name, + input_tensors=[], + output_tensors=[self.tensor_names_map[idx]], + op_type="Const", + lib_name="tflm", + ugraph=ugraph, + op_attr={ + "value": AttrValueConverter.GenericType( + value_name="tensor", + value=GenericTensorConverterMixin.GenericType( + np_array=buffer_content + ), + ) + }, + ) + + self._set_tensor_node(idx, node_name) + + def _build_input_ops(self, fb_model, ugraph): + """Find placeholders Attach placeholders to input tensors Note this method will update inputs **inplace** """ - subgraph = self._get_tflm_get_subgraph(fb_model) - subgraph_inputs_indexi = subgraph.InputsAsNumpy() - for index in subgraph_inputs_indexi: - node_name = self.tensor_names_map[index].name + "_Placeholder" - self._set_tensor_node(index, node_name) - OperationInfo( - name=node_name, - input_tensors=[], - output_tensors=[self.tensor_names_map[index]], - op_type="Placeholder", - ugraph=ugraph, - lib_name="tflm", - op_attr={}, - ) - - def _build_intermediate_ops(self, fb_model, ugraph): - """Build all intermediate nodes + subgraph = self._get_tflm_get_subgraph(fb_model) + subgraph_inputs_indexi = subgraph.InputsAsNumpy() + for index in subgraph_inputs_indexi: + node_name = self.tensor_names_map[index].name + "_Placeholder" + self._set_tensor_node(index, node_name) + OperationInfo( + name=node_name, + input_tensors=[], + output_tensors=[self.tensor_names_map[index]], + op_type="Placeholder", + ugraph=ugraph, + lib_name="tflm", + op_attr={}, + ) + + def _build_intermediate_ops(self, fb_model, ugraph): + """Build all intermediate nodes """ - subgraphs_len = fb_model.SubgraphsLength() - assert subgraphs_len == 1, "only 1 subgraph is supported" - subgraph = fb_model.Subgraphs(0) - for i in range(0, subgraph.OperatorsLength()): - # topological order, op-index defined by schema - # BuiltinOperator: https://github.com/tensorflow/tensorflow/blob/031804922d8f4d18b61e3ad077f9f1b69273ff21/tensorflow/lite/schema/schema_v3.fbs#L71 - op = subgraph.Operators(i) - local_op_code = op.OpcodeIndex() - global_op_code = fb_model.OperatorCodes(local_op_code) - builtinOperator_code = global_op_code.BuiltinCode() - op_type = builtin_ops[builtinOperator_code] - - node_name = str(i) + "_" + op_type - - input_tensor_names = [ - self.tensor_names_map[input_index] for input_index in op.InputsAsNumpy() - ] - output_tensor_names = [ - self.tensor_names_map[output_index] - for output_index in op.OutputsAsNumpy() - ] - - op_attr = dict() - op_attr = op_data_func[op_type](op) - - OperationInfo( - name=node_name, - input_tensors=input_tensor_names, - output_tensors=output_tensor_names, - op_type=op_type, - ugraph=ugraph, - lib_name="tflm", - op_attr=op_attr, - ) - - for tensor_index in op.OutputsAsNumpy(): - self._set_tensor_node(tensor_index, node_name) - - def _get_tflm_get_subgraph(self, fb_model): - subgraphs_len = fb_model.SubgraphsLength() - assert subgraphs_len == 1, "only 1 subgraph is supported" - subgraph = fb_model.Subgraphs(0) - - return subgraph - - def _set_tensor_node(self, idx, name): - assert self.tensor_names_map[idx].op_name == "" - self.tensor_names_map[idx].op_name = name - - def _format_node_name(self, node_name, op_type, op_cnt): - if node_name == "": - node_name = "{}_{}".format(op_type, op_cnt) - return re.sub(r"[\.:/]", "_", node_name) - - def _format_tensor_name(self, name, node_name, offset): - if re.match(r"[a-zA-Z][a-zA-Z0-9]*:[0-9]+", name): - return name - return "{}:{}".format(node_name, offset) + subgraphs_len = fb_model.SubgraphsLength() + assert subgraphs_len == 1, "only 1 subgraph is supported" + subgraph = fb_model.Subgraphs(0) + for i in range(0, subgraph.OperatorsLength()): + # topological order, op-index defined by schema + # BuiltinOperator: https://github.com/tensorflow/tensorflow/blob/031804922d8f4d18b61e3ad077f9f1b69273ff21/tensorflow/lite/schema/schema_v3.fbs#L71 + op = subgraph.Operators(i) + local_op_code = op.OpcodeIndex() + global_op_code = fb_model.OperatorCodes(local_op_code) + builtinOperator_code = global_op_code.BuiltinCode() + op_type = builtin_ops[builtinOperator_code] + + node_name = str(i) + "_" + op_type + + input_tensor_names = [ + self.tensor_names_map[input_index] for input_index in op.InputsAsNumpy() + ] + output_tensor_names = [ + self.tensor_names_map[output_index] + for output_index in op.OutputsAsNumpy() + ] + + op_attr = dict() + op_attr = op_data_func[op_type](op) + + OperationInfo( + name=node_name, + input_tensors=input_tensor_names, + output_tensors=output_tensor_names, + op_type=op_type, + ugraph=ugraph, + lib_name="tflm", + op_attr=op_attr, + ) + + for tensor_index in op.OutputsAsNumpy(): + self._set_tensor_node(tensor_index, node_name) + + def _get_tflm_get_subgraph(self, fb_model): + subgraphs_len = fb_model.SubgraphsLength() + assert subgraphs_len == 1, "only 1 subgraph is supported" + subgraph = fb_model.Subgraphs(0) + + return subgraph + + def _set_tensor_node(self, idx, name): + assert self.tensor_names_map[idx].op_name == "" + self.tensor_names_map[idx].op_name = name + + def _format_node_name(self, node_name, op_type, op_cnt): + if node_name == "": + node_name = "{}_{}".format(op_type, op_cnt) + return re.sub(r"[\.:/]", "_", node_name) + + def _format_tensor_name(self, name, node_name, offset): + if re.match(r"[a-zA-Z][a-zA-Z0-9]*:[0-9]+", name): + return name + return "{}:{}".format(node_name, offset) From 56066939fa12408a60ffee1defa33b2008891e60 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Thu, 23 Apr 2020 15:34:02 +0800 Subject: [PATCH 091/117] Fix "b"-prefix in the tensor names (with decoding to utf8) --- utensor_cgen/frontend/tflite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 4f7f1dc3..13b48e24 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -238,7 +238,7 @@ def _build_tensor_map(self, fb_model, ugraph): for idx in range(0, subgraph.TensorsLength()): tensor = subgraph.Tensors(idx) - tensor_name = tensor.Name() + tensor_name = tensor.Name().decode('utf8') if tensor_name is "" or None: tensor_name = "tensor_" + str(idx) From 21da98c77701b9fcbe5103f627167a3baba7f3cb Mon Sep 17 00:00:00 2001 From: Neil Tan Date: Fri, 24 Apr 2020 12:35:31 +0800 Subject: [PATCH 092/117] addressing issues mentioned in the PR107 comments --- utensor_cgen/frontend/tflite.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 13b48e24..4544fc22 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -3,9 +3,6 @@ import os import re -import six - -import flatbuffers import numpy as np from utensor_cgen.frontend import FrontendSelector from utensor_cgen.frontend.base import Parser @@ -27,7 +24,7 @@ tensor_np_type[2] = np.dtype("int32") tensor_np_type[3] = np.dtype("uint8") tensor_np_type[4] = np.dtype("uint64") -tensor_np_type[5] = np.dtype("ubyte") # FIXME: supposed to be string +tensor_np_type[5] = np.dtype("str") tensor_np_type[6] = np.dtype("bool") tensor_np_type[7] = np.dtype("int16") tensor_np_type[8] = np.dtype("cdouble") @@ -111,34 +108,40 @@ def reshape_op_data(op): def dequantize_op_data(op): + option_dict = {} if op.CustomOptionsLength() < 1: from .tflite_flatbuffer.DequantizeOptions import DequantizeOptions option = DequantizeOptions() builtin_data = op.BuiltinOptions() if builtin_data is None: - return builtin_data + return option_dict option.Init(builtin_data.Bytes, builtin_data.Pos) - return [option] + option_dict['builtin'] = option else: - custom_option = op.CustomOptionsAsNumpy() - return [custom_option] + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() + return option_dict def quantize_op_data(op): + option_dict = {} if op.CustomOptionsLength() < 1: from .tflite_flatbuffer.QuantizeOptions import QuantizeOptions option = QuantizeOptions() builtin_data = op.BuiltinOptions() if builtin_data is None: - return builtin_data + return option_dict option.Init(builtin_data.Bytes, builtin_data.Pos) - return [option] + option_dict['builtin'] = option else: - custom_option = op.CustomOptionsAsNumpy() - return [custom_option] + option_dict[ + customOptionFormat_lookup[op.CustomOptionsFormat()] + ] = op.CustomOptionsAsNumpy() + return option_dict def pool2d_op_data(op): option_dict = {} @@ -351,7 +354,6 @@ def _build_intermediate_ops(self, fb_model, ugraph): for output_index in op.OutputsAsNumpy() ] - op_attr = dict() op_attr = op_data_func[op_type](op) OperationInfo( From bda37bb17058305d9c85aeff86a34dae59c9c931 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 24 Apr 2020 14:56:31 +0800 Subject: [PATCH 093/117] fix node_name --- utensor_cgen/frontend/tflite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 4544fc22..0c880a56 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -281,7 +281,7 @@ def _build_param_ops(self, fb_model, ugraph): if buffer_index == 0: continue - node_name = self.tensor_names_map[idx].name + "_Const" + node_name = re.sub(r':\d+', '', self.tensor_names_map[idx].name) + "_Const" dtype = self.tensor_names_map[idx].dtype buffer_array = fb_model.Buffers(buffer_index).DataAsNumpy() From 3903dfe3c239de06ff0b311852f5cef4d84d6175 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 24 Apr 2020 15:17:09 +0800 Subject: [PATCH 094/117] Fix linting issues --- utensor_cgen/frontend/tflite.py | 96 +++++++++++++++------------------ 1 file changed, 43 insertions(+), 53 deletions(-) diff --git a/utensor_cgen/frontend/tflite.py b/utensor_cgen/frontend/tflite.py index 0c880a56..07fc4330 100644 --- a/utensor_cgen/frontend/tflite.py +++ b/utensor_cgen/frontend/tflite.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - import os import re @@ -18,31 +16,13 @@ FullyConnectedOptionsWeightsFormat from .tflite_flatbuffer.Model import Model -tensor_np_type = dict() -tensor_np_type[0] = np.dtype("float32") -tensor_np_type[1] = np.dtype("float16") -tensor_np_type[2] = np.dtype("int32") -tensor_np_type[3] = np.dtype("uint8") -tensor_np_type[4] = np.dtype("uint64") -tensor_np_type[5] = np.dtype("str") -tensor_np_type[6] = np.dtype("bool") -tensor_np_type[7] = np.dtype("int16") -tensor_np_type[8] = np.dtype("cdouble") -tensor_np_type[9] = np.dtype("int8") - - -builtin_ops = {v: k for k, v in BuiltinOperator.__dict__.items()} - +_CUSTOM_OPTION_FORMAT_MAP = {v: k for k, v in CustomOptionsFormat.__dict__.items()} def class_option2str(obj, idx): names_lookup = {v: k for k, v in obj.__dict__.items()} name = names_lookup[idx] return str(idx) + " (" + name + ")" - -customOptionFormat_lookup = {v: k for k, v in CustomOptionsFormat.__dict__.items()} - - def fully_connected_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: @@ -59,11 +39,10 @@ def fully_connected_op_data(op): ) else: option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] + _CUSTOM_OPTION_FORMAT_MAP[op.CustomOptionsFormat()] ] = op.CustomOptionsAsNumpy() return option_dict - def depthwise_conv2d_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: @@ -84,12 +63,11 @@ def depthwise_conv2d_op_data(op): else: option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] + _CUSTOM_OPTION_FORMAT_MAP[op.CustomOptionsFormat()] ] = op.CustomOptionsAsNumpy() return option_dict - def reshape_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: @@ -101,12 +79,11 @@ def reshape_op_data(op): option_dict["NewShape"] = option.NewShapeAsNumpy() else: option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] + _CUSTOM_OPTION_FORMAT_MAP[op.CustomOptionsFormat()] ] = op.CustomOptionsAsNumpy() return option_dict - def dequantize_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: @@ -120,7 +97,7 @@ def dequantize_op_data(op): option_dict['builtin'] = option else: option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] + _CUSTOM_OPTION_FORMAT_MAP[op.CustomOptionsFormat()] ] = op.CustomOptionsAsNumpy() return option_dict @@ -138,7 +115,7 @@ def quantize_op_data(op): option_dict['builtin'] = option else: option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] + _CUSTOM_OPTION_FORMAT_MAP[op.CustomOptionsFormat()] ] = op.CustomOptionsAsNumpy() return option_dict @@ -161,12 +138,11 @@ def pool2d_op_data(op): ) else: option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] + _CUSTOM_OPTION_FORMAT_MAP[op.CustomOptionsFormat()] ] = op.CustomOptionsAsNumpy() return option_dict - def argmax_op_data(op): option_dict = {} if op.CustomOptionsLength() < 1: @@ -178,34 +154,52 @@ def argmax_op_data(op): option_dict["OutputType"] = option.OutputType() else: option_dict[ - customOptionFormat_lookup[op.CustomOptionsFormat()] + _CUSTOM_OPTION_FORMAT_MAP[op.CustomOptionsFormat()] ] = op.CustomOptionsAsNumpy() return option_dict -op_data_func = dict() -op_data_func["QUANTIZE"] = quantize_op_data -op_data_func["DEPTHWISE_CONV_2D"] = depthwise_conv2d_op_data -op_data_func["MAX_POOL_2D"] = pool2d_op_data -op_data_func["RESHAPE"] = reshape_op_data -op_data_func["FULLY_CONNECTED"] = fully_connected_op_data -op_data_func["DEQUANTIZE"] = dequantize_op_data -op_data_func["ARG_MAX"] = argmax_op_data +_OP_DATA_FUNC_MAP = dict() +_OP_DATA_FUNC_MAP["QUANTIZE"] = quantize_op_data +_OP_DATA_FUNC_MAP["DEPTHWISE_CONV_2D"] = depthwise_conv2d_op_data +_OP_DATA_FUNC_MAP["MAX_POOL_2D"] = pool2d_op_data +_OP_DATA_FUNC_MAP["RESHAPE"] = reshape_op_data +_OP_DATA_FUNC_MAP["FULLY_CONNECTED"] = fully_connected_op_data +_OP_DATA_FUNC_MAP["DEQUANTIZE"] = dequantize_op_data +_OP_DATA_FUNC_MAP["ARG_MAX"] = argmax_op_data @FrontendSelector.register(target_exts=[".tflite"]) class TFLiteParser(Parser): + _TENSOR_NP_TYPE = { + 0:np.dtype("float32"), + 1: np.dtype("float16"), + 2: np.dtype("int32"), + 3: np.dtype("uint8"), + 4: np.dtype("uint64"), + 5: np.dtype("str"), + 6: np.dtype("bool"), + 7: np.dtype("int16"), + 8: np.dtype("cdouble"), + 9: np.dtype("int8"), + } + _BUILTIN_OPS = {v: k for k, v in BuiltinOperator.__dict__.items()} + def parse(self, tflite_file, output_nodes=None): + if output_nodes is None: + output_nodes = [] graph_name, _ = os.path.splitext(tflite_file) buf = open(tflite_file, "rb").read() buf = bytearray(buf) fb_model = Model.GetRootAsModel(buf, 0) ugraph = uTensorGraph( - name=graph_name, output_nodes=[], lib_name="tflite", ops_info={}, + name=graph_name, + output_nodes=output_nodes, + lib_name="tflite", + ops_info={}, ) - self._build_graph(fb_model, ugraph) return ugraph @@ -240,24 +234,21 @@ def _build_tensor_map(self, fb_model, ugraph): for idx in range(0, subgraph.TensorsLength()): tensor = subgraph.Tensors(idx) - tensor_name = tensor.Name().decode('utf8') if tensor_name is "" or None: tensor_name = "tensor_" + str(idx) - dtype = tensor_np_type[tensor.Type()] - + dtype = self._TENSOR_NP_TYPE[tensor.Type()] attributes = dict() - quantParam = tensor.Quantization() - if quantParam != None: + if quantParam is not None: attributes["quantizationZeros"] = list([quantParam.ZeroPointAsNumpy()]) attributes["quantizationScales"] = list([quantParam.ScaleAsNumpy()]) - if type(tensor.ShapeAsNumpy()) == np.ndarray: + if isinstance(tensor.ShapeAsNumpy(), np.ndarray): shape = tensor.ShapeAsNumpy().tolist() else: - shape = [d for d in fb_model.Buffers(12).DataAsNumpy().shape] + shape = list(fb_model.Buffers(12).DataAsNumpy().shape) self.tensor_names_map[idx] = TensorInfo( name=self._format_tensor_name("", tensor_name, 0), @@ -285,8 +276,7 @@ def _build_param_ops(self, fb_model, ugraph): dtype = self.tensor_names_map[idx].dtype buffer_array = fb_model.Buffers(buffer_index).DataAsNumpy() - if type(buffer_array) == int: - + if isinstance(buffer_array, int): continue # somehow, sometimes, the buffer contains no data, likely to be an intermediate tensor buffer_content = fb_model.Buffers(buffer_index).DataAsNumpy().astype(dtype) @@ -342,7 +332,7 @@ def _build_intermediate_ops(self, fb_model, ugraph): local_op_code = op.OpcodeIndex() global_op_code = fb_model.OperatorCodes(local_op_code) builtinOperator_code = global_op_code.BuiltinCode() - op_type = builtin_ops[builtinOperator_code] + op_type = self._BUILTIN_OPS[builtinOperator_code] node_name = str(i) + "_" + op_type @@ -354,7 +344,7 @@ def _build_intermediate_ops(self, fb_model, ugraph): for output_index in op.OutputsAsNumpy() ] - op_attr = op_data_func[op_type](op) + op_attr = _OP_DATA_FUNC_MAP[op_type](op) OperationInfo( name=node_name, From a8c904effe59f3f85eaa07f4233b4baef76a7a95 Mon Sep 17 00:00:00 2001 From: dboyliao Date: Fri, 24 Apr 2020 15:36:36 +0800 Subject: [PATCH 095/117] fix minor issues and add test for tflite parser --- tests/test_frontend/conftest.py | 13 +++++++++++++ .../model_files/quant_mnist_cnn.tflite | Bin 0 -> 698160 bytes tests/test_frontend/test_tflite.py | 11 +++++++++++ utensor_cgen/frontend/tflite.py | 4 ++-- 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 tests/test_frontend/conftest.py create mode 100644 tests/test_frontend/model_files/quant_mnist_cnn.tflite create mode 100644 tests/test_frontend/test_tflite.py diff --git a/tests/test_frontend/conftest.py b/tests/test_frontend/conftest.py new file mode 100644 index 00000000..909f17c1 --- /dev/null +++ b/tests/test_frontend/conftest.py @@ -0,0 +1,13 @@ +import os + +import pytest + + +@pytest.fixture(name='tflm_mnist_path', scope='session') +def tflm_mnist_path(): + model_path = os.path.join( + os.path.dirname(__file__), + 'model_files', + 'quant_mnist_cnn.tflite' + ) + return model_path diff --git a/tests/test_frontend/model_files/quant_mnist_cnn.tflite b/tests/test_frontend/model_files/quant_mnist_cnn.tflite new file mode 100644 index 0000000000000000000000000000000000000000..4c50ff0de4c26fddf9dade2fa3b4de9139693686 GIT binary patch literal 698160 zcmXWDd9W=>dLNWom6^5I+3$Ye)~~x?Pxs8UW|hVxOO}KKumr*(g2mb*kT4Qq*&&1p z{$Y3!A;88C+x%f6aEQQ`B5+_JgfSA9>=Cj;8fo_KnciN%fA zcl+IY>QrWa-*5Zsgb?y0fA$AINywO-5Jr3wlOdVns|WZBAueA34e*M9Jzp_7!*XIBKZ~r;I_Q(HZ)_(l|vi3KB+uHx8v-UsxN7n8eYrp4zwf6h* zYuj7v`~z!$xVBc|&!2i??UP@%_8;N*i{G;L`@UrDcS~#kmH)xozrVEh^uMz9H}L1D zc=NZuZ0$eB_x*)mw)T_%o3+tDv-a1uwf`KyM)0^!}7oV z&d>ee&;6@E^^rRV|NG$ckH3EU^FQ(U{^Nh=KmDmM{MvUu{I2hP{5K9B|M_43?Vn8l z@els(cmKk_`;Gt3e|-J?hd%wLP4>M%`(ydp)8G6;@<+e? znc?Su=@$?G_3wN9k@wDi=`X(YXNEt%@9qE0=nL<>`~Bbi=i~4G-n)8_7DHgW9RV~9{<2!eQEXA<@f*XzY_jW-|_gb{e!p1e>wf7-}rO3IXk@m z`@8@0-oZ z8;}3ium9|y+$-|8LgH)3L{d6fs9p=x1$86a)@y26^`zx~M{P|4mxoovJiqHg$#mIO zZqWOEOFhbs!<;rUVW+vHLlv5?4x^rSoXU^|rlPubOKZ5>`XPykj$2#ec|F=oWAC@sfl)Mt$jj!H?lr!{Ic;YQ}LS8SQg4DYMhgvxNW7Ks9@G5MW7s~ z?%c=}BXD?3M5eb>64F%d4+x29<8QnA>@ zwM*hq;#1QpM+>)&Lx&35^$szWS94sA_MMta&$+#N(ML3(UBjpiT3^PdGlmk^Xi0iM zR=TIPCq3759U^Ms5>GMRIk+`_9fVbARG>l`wQc39t|lclv^7;!_PT9NPi!M;NEwrr z?!3mg9jS!Nj4;OQR1-(Np-!zj$8$oeDyI$nu&EiAhkH@kQC)HES6#yi-riBdb1Q`< zueyNOI%GW+RUm>;_hB>BdTulQ@4*jV@e|_`L327II>x6NUKT0?Q_GiJD2D^?BDC?4W}Aju5&Htmkt< zsLSJ;)+H}JN3({Ss;v6f?JHA;rgsY3*s}IW<@BBPxh{Rb>5EQ~uCG)}9DyR^h>8m7 zc}iG z#rIUo;_jNb5rJc+7g7;Mb>ju5V|8s*S^7~O1ij{-@TF@SD|s&~A3ImnDyTh6sH|I; z*hr~}H@pd$YFf|nYvYTcXH6BDx^LUYghYleabwez(iWumcu!j&2cj%-%M5n{x5H+$ z(v-@vTvenb0c(v7O6_ara2+~@46!rIHWaGzE!Ia;2bbnzU3;mj);7JV1Dra1PEQjN zbZ&{?D^EF6lZwz%H^vrH_PW6_^4dmA+o>SurYan#Vh%odXuPTw(MA1`pk-ey1oi6{+h1*Kqykz%yIlM zU=eO{K)Z89`-cC4<=3|Y`}eA;g~5O2Q%_LL8~aB zD4NFaNEo}m8#q3eMG0T4q%G$A^YAaiYSmv%OyVyb1X*-U}>KNZ^`jWJj zXOy&kZ@a3&{_m;Qo!|M6#1G4{bvnh2SCk&kJiEPwiW64Lx@r9ahr|$kZq=X+F}Lt= zUcDL{O5v_jn$rSx!Z1l|BYKBbPAIvASQJ z7%d9N`Vl@HtC-CjufwOtH~1X;D&Uj|%{=8<8+yHODYjFuswQ+@>`fEacmw5imJ3v} zn3&KNJ+?X_4zX<%^p%V{loru;K0%Lg9Z&f!r4r@Bm6q00MkXq;VO7j=kOJP}@1xwC z&ewSRsBNOkb;{ajlDDpMTh+z3>so30Fls^+t_t@V{eoA_RW{Tjrh!&r?_BHXW>sCSQ7K#d82NmA1?;6}RhZM#yee2pv z1Qj|8Hc~;`y6Qa?Gp}}8O+8lmTvml!*Ok|kx@fx45aFuR7nCRc+9~0I@aR9A6Vlwr`zR?#MOaDlk++H2g3bi{1}z$oCODpnR-EM$Ur zfM)2p)c1mb^g%^Xrg+4;=XJiUJ0f~il(>}^8%!`_G`~GZ3VXkiW#4(GmLBKIMpzNo zL#2!z5^{>eXqpZSKjK{LHD#ZI%>pfFT|-YsEV4hP^cpu@6oy_M{bE7 zgG!}a*W%2G$aF1fxNP03N44Z61_o_Nr*0cnhz(f-xd+nZT+))cJx(!-lytlzuX8LH znuFu!6*DcVv83V_6W<~}?0ANQ?`u`^Fh?WjUDwCFL>;I+76d5kIwBHHo#r*(!K?5$ zfr#5EM&khzc7Rz7_6Q3qG)D?h1>k~v6auk2k;g>jD;{W+ZW|iMBdv~T-PWdU0H{PL zjj~eJ3ZT!1y?0xuEns|$-QpE>(-Q*}98g^bw?~)+g|9qQO0;+hEbTiU_XEc3fIB&Q zOIV}Cwmk)JqMh%uKJX$g{FZ?1-olNDG&OZaRXURc>39iW0Th)(#E;ijD7Rui!uv65w3p0C_HBL^G;TG73xlN>nj0zguH>(2f*f z1&&t((ej3%P7&F4L}5?5)RtX?&#Al4lecVu0ZMR`s<`&C8@cI0Q=m_TqD493zJvek ztDue~ZXxP2^V^z}fCgyURB}(dUhN66!vLG#YKJnk;3nV^>T!jtukjN*zhK}lew7PN zE$wm3xz$CZaL_bVijo^3Aj@ro4g{bXXcR3lv8FRt0en)|vFM_jGoYHF>q^?-qQL=+ zz(pa*Z&wlrUAZV5tq5!EZg8%)YH}91F=y-+AIFlE0E>osPSfC$TI}V5mbBAF)q-0B z*8|cJzb~vsacvwE7*n;i-!k6DAffUq+mZ+$#G-<;vSYX@=s6V_yzdf@YsF4PsV^z@jA%@0%7B;#2e?GP z3u*}>F92|RlN+OfWCd0mg-Dflh2DSX;02Fg^Iy-)idI}JY+ z2uFhZph$;>#y1D1P?hx0IP^H{(h?;b z(UfQfCh)cNJ=A9qP9XyDR#Ep}iI(f&feGK_{D z8mL!8{s;mPhdux(!g==aAq0+A1Mmu3hC0jIlIa3%2;?pT;vl7@=$~kr&F!M�zY9 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