(serialized_node, target)
| 19959 | return target; |
| 19960 | } |
| 19961 | deserialize_node(serialized_node, target) { |
| 19962 | let fx_node = null; |
| 19963 | if (torch._export.serde.serialize._SYM_OPS.has(target)) { |
| 19964 | const name = serialized_node.outputs[0].value.as_name; |
| 19965 | const args = this.deserialize_sym_op_inputs(serialized_node.inputs); |
| 19966 | fx_node = this.graph.create_node('call_function', target, args, null, name); |
| 19967 | this.deserialize_sym_op_outputs(serialized_node, fx_node); |
| 19968 | } else if (builtins.isinstance(target, torch._ops.HigherOrderOperator)) { |
| 19969 | const [args, kwargs] = this.deserialize_hoo_inputs(serialized_node.inputs); |
| 19970 | const metadata = this.deserialize_metadata(serialized_node.metadata); |
| 19971 | for (const x of [...args, ...kwargs.values()]) { |
| 19972 | if (builtins.isinstance(x, torch.fx.Node) && x.op === 'get_attr') { |
| 19973 | x.meta.update(metadata); |
| 19974 | } |
| 19975 | } |
| 19976 | const name = serialized_node.outputs.length === 1 && |
| 19977 | builtins.hasattr(serialized_node.outputs[0], 'as_tensor') && |
| 19978 | builtins.getattr(serialized_node, 'is_hop_single_tensor_return', true) ? |
| 19979 | serialized_node.outputs[0].as_tensor.name : null; |
| 19980 | fx_node = this.graph.create_node('call_function', target, args, kwargs, name); |
| 19981 | this.deserialize_outputs(serialized_node, fx_node); |
| 19982 | fx_node.meta.update(metadata); |
| 19983 | } else if (builtins.isinstance(target, torch._ops.OpOverload)) { |
| 19984 | const name = this._is_single_tensor_return(target) ? serialized_node.outputs[0].as_tensor.name : null; |
| 19985 | const [args, kwargs] = this.deserialize_inputs(target, serialized_node); |
| 19986 | fx_node = this.graph.create_node('call_function', target, args, kwargs, name); |
| 19987 | this.deserialize_outputs(serialized_node, fx_node); |
| 19988 | } else if (typeof target === 'string') { |
| 19989 | // Handle unresolved operators |
| 19990 | const arg_type = (arg) => { |
| 19991 | switch (arg && arg.type) { |
| 19992 | case 'as_tensor': return 'Tensor'; |
| 19993 | case 'as_tensors': return 'Tensor[]'; |
| 19994 | case 'as_optional_tensors': return 'Tensor?[]'; |
| 19995 | case 'as_nested_tensors': return 'Tensor[][]'; |
| 19996 | case 'as_int': return 'int'; |
| 19997 | case 'as_ints': return 'int[]'; |
| 19998 | case 'as_int_lists': return 'int[][]'; |
| 19999 | case 'as_float': return 'float'; |
| 20000 | case 'as_floats': return 'float[]'; |
| 20001 | case 'as_float_lists': return 'float[][]'; |
| 20002 | case 'as_bool': return 'bool'; |
| 20003 | case 'as_bools': return 'bool[]'; |
| 20004 | case 'as_string': return 'str'; |
| 20005 | case 'as_strings': return 'str[]'; |
| 20006 | case 'as_sym_int': return 'SymInt'; |
| 20007 | case 'as_sym_ints': return 'SymInt[]'; |
| 20008 | case 'as_sym_float': return 'SymFloat'; |
| 20009 | case 'as_sym_floats': return 'SymFloat[]'; |
| 20010 | case 'as_sym_bool': return 'SymBool'; |
| 20011 | case 'as_sym_bools': return 'SymBool[]'; |
| 20012 | case 'as_scalar_type': return 'ScalarType'; |
| 20013 | case 'as_memory_format': return 'MemoryFormat'; |
| 20014 | case 'as_layout': return 'Layout'; |
| 20015 | case 'as_device': return 'Device'; |
| 20016 | case 'as_operator': return 'str'; |
| 20017 | default: return '?'; |
| 20018 | } |
no test coverage detected