chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you 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.
|
||||
"""Tool to upgrade json from historical versions."""
|
||||
|
||||
import json
|
||||
|
||||
|
||||
def get_version(jgraph):
|
||||
"""
|
||||
Get the tvm version from the json graph.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
jgraph : dict
|
||||
The json graph.
|
||||
"""
|
||||
return jgraph["metadata"]["tvm_version"]
|
||||
|
||||
|
||||
def create_updater(node_map, from_ver, to_ver):
|
||||
"""Create an updater to update json loaded data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
node_map : Map[str, Function]
|
||||
Map from type_key to updating function
|
||||
|
||||
from_ver : str
|
||||
Prefix of version that we can accept,
|
||||
|
||||
to_ver : str
|
||||
The target version.
|
||||
|
||||
Returns
|
||||
-------
|
||||
fupdater : function
|
||||
The updater function
|
||||
"""
|
||||
|
||||
def _updater(data):
|
||||
assert get_version(data).startswith(from_ver)
|
||||
nodes = data["nodes"]
|
||||
for idx, item in enumerate(nodes):
|
||||
f = node_map.get(item["type"], None)
|
||||
if isinstance(f, list):
|
||||
for fpass in f:
|
||||
item = fpass(item, nodes)
|
||||
elif f:
|
||||
item = f(item, nodes)
|
||||
nodes[idx] = item
|
||||
data["metadata"]["tvm_version"] = to_ver
|
||||
return data
|
||||
|
||||
return _updater
|
||||
|
||||
|
||||
def upgrade_json(json_str):
|
||||
"""Update json from a historical version.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
json_str : str
|
||||
A historical json file.
|
||||
|
||||
Returns
|
||||
-------
|
||||
updated_json : str
|
||||
The updated version.
|
||||
"""
|
||||
data = json.loads(json_str)
|
||||
if "metadata" not in data and "attrs" in data:
|
||||
raise ValueError("Legacy json graph format detected, we don't support it anymore.")
|
||||
return json.dumps(data, indent=2)
|
||||
Reference in New Issue
Block a user