diff options
Diffstat (limited to 'backend/data/genReducedTreeData.py')
| -rwxr-xr-x | backend/data/genReducedTreeData.py | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/backend/data/genReducedTreeData.py b/backend/data/genReducedTreeData.py index ba223b0..0991f92 100755 --- a/backend/data/genReducedTreeData.py +++ b/backend/data/genReducedTreeData.py @@ -69,27 +69,9 @@ for name in minimalNames: if name == None: rootName = prevName print(f"New node set has {len(nodeMap)} nodes") -# Remove certain 'chain collapsible' nodes -print("Removing 'chain collapsible' nodes") -namesToRemove = set() -for (name, nodeObj) in nodeMap.items(): - if name not in minimalNames and len(nodeObj["children"]) == 1: - parentName = nodeObj["parent"] - childName = nodeObj["children"][0] - # Connect parent and child - nodeMap[parentName]["children"].remove(name) - nodeMap[parentName]["children"].append(childName) - nodeMap[childName]["parent"] = parentName - # Adjust child pSupport - nodeMap[childName]["pSupport"] &= nodeObj["pSupport"] - # Remember for removal - namesToRemove.add(name) -for name in namesToRemove: - del nodeMap[name] -print(f"New node set has {len(nodeMap)} nodes") # Merge-upward compsite-named nodes print("Merging-upward composite-named nodes") -namesToRemove2 = set() +namesToRemove = set() for (name, nodeObj) in nodeMap.items(): parent = nodeObj["parent"] if parent != None and compNameRegex.fullmatch(name) != None: @@ -100,6 +82,27 @@ for (name, nodeObj) in nodeMap.items(): nodeMap[n]["parent"] = parent nodeMap[n]["pSupport"] &= nodeObj["pSupport"] # Remember for removal + namesToRemove.add(name) +for name in namesToRemove: + del nodeMap[name] +print(f"New node set has {len(nodeMap)} nodes") +# Remove certain 'chain collapsible' nodes +print("Removing 'chain collapsible' nodes") +namesToRemove2 = set() +for (name, nodeObj) in nodeMap.items(): + hasOneChild = len(nodeObj["children"]) == 1 + isOnlyChild = nodeObj["parent"] != None and len(nodeMap[nodeObj["parent"]]["children"]) == 1 + if name not in minimalNames and (hasOneChild or isOnlyChild): + parentName = nodeObj["parent"] + children = nodeObj["children"] + # Connect parent and children + nodeMap[parentName]["children"].remove(name) + nodeMap[parentName]["children"].extend(children) + for n in children: + nodeMap[n]["parent"] = parentName + # Adjust child pSupport + nodeMap[n]["pSupport"] &= nodeObj["pSupport"] + # Remember for removal namesToRemove2.add(name) for name in namesToRemove2: del nodeMap[name] @@ -119,7 +122,8 @@ for (name, nodeObj) in nodeMap.items(): children = [row[0] for row in dbCur.execute("SELECT child FROM edges where node = ?", (name,))] newChildren = [n for n in children if not (n in nodeMap or n in namesToRemove) and - dbCur.execute("SELECT name from node_imgs WHERE name = ?", (n,)).fetchone() != None] + (dbCur.execute("SELECT name from node_imgs WHERE name = ?", (n,)).fetchone() != None or + dbCur.execute("SELECT name from linked_imgs WHERE name = ? AND otol_id2 IS NULL", (n,)).fetchone() != None)] newChildNames = newChildren[:max(0, PREF_NUM_CHILDREN - numChildren)] nodeObj["children"].extend(newChildNames) namesToAdd.extend(newChildNames) |
