mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-28 17:57:16 +02:00
`test_multiviewPipeline` relied on the photogrammetry template and its nodes, which are not a part of Meshroom anymore. The test is rewritten to check the same items (serialization, graph equality, etc.) but using dedicated test nodes (which already existed) and template, which is added with this commit. The path of the template is added to `MESHROOM_PIPELINE_TEMPLATES_PATH` when loading the test module.
79 lines
3.2 KiB
Python
79 lines
3.2 KiB
Python
#!/usr/bin/env python
|
|
# coding:utf-8
|
|
import os
|
|
import tempfile
|
|
|
|
import meshroom.multiview
|
|
from meshroom.core.graph import loadGraph
|
|
from meshroom.core.node import Node
|
|
|
|
|
|
def test_pipeline():
|
|
meshroom.core.initNodes()
|
|
meshroom.core.initPipelines()
|
|
|
|
graph1InputFiles = ["/non/existing/file1", "/non/existing/file2"]
|
|
graph1 = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
|
|
graph1.name = "graph1"
|
|
graph1AppendText1 = graph1.node("AppendText_1")
|
|
graph1AppendText1.input.value = graph1InputFiles[0]
|
|
graph1AppendText2 = graph1.node("AppendText_2")
|
|
graph1AppendText2.input.value = graph1InputFiles[1]
|
|
|
|
assert graph1.findNode("AppendFiles").input.value == graph1AppendText1.output.value
|
|
assert graph1.findNode("AppendFiles").input2.value == graph1AppendText2.output.value
|
|
assert graph1.findNode("AppendFiles").input3.value == graph1InputFiles[0]
|
|
assert graph1.findNode("AppendFiles").input4.value == graph1InputFiles[1]
|
|
|
|
assert not graph1AppendText1.input.isDefault
|
|
assert graph1AppendText2.input.getPrimitiveValue() == graph1InputFiles[1]
|
|
|
|
graph2InputFiles = ["/non/existing/file", ""]
|
|
graph2 = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
|
|
graph2.name = "graph2"
|
|
graph2AppendText1 = graph2.node("AppendText_1")
|
|
graph2AppendText1.input.value = graph2InputFiles[0]
|
|
graph2AppendText2 = graph2.node("AppendText_2")
|
|
graph2AppendText2.input.value = graph2InputFiles[1]
|
|
|
|
# Ensure that all output UIDs are different as the input is different:
|
|
# graph1 != graph2
|
|
for node in graph1.nodes:
|
|
otherNode = graph2.node(node.name)
|
|
for key, attr in node.attributes.items():
|
|
if attr.isOutput and attr.enabled:
|
|
otherAttr = otherNode.attribute(key)
|
|
assert attr.uid() != otherAttr.uid()
|
|
|
|
# Test serialization/deserialization on both graphs
|
|
for graph in [graph1, graph2]:
|
|
filename = tempfile.mktemp()
|
|
graph.save(filename)
|
|
loadedGraph = loadGraph(filename)
|
|
os.remove(filename)
|
|
# Check that all nodes have been properly de-serialized
|
|
# - Same node set
|
|
assert sorted([n.name for n in loadedGraph.nodes]) == sorted([n.name for n in graph.nodes])
|
|
# - No compatibility issues
|
|
assert all(isinstance(n, Node) for n in loadedGraph.nodes)
|
|
# - Same UIDs for every node
|
|
assert sorted([n._uid for n in loadedGraph.nodes]) == sorted([n._uid for n in graph.nodes])
|
|
|
|
# Graph 2b, set with identical parameters as graph 2
|
|
graph2b = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
|
|
graph2b.name = "graph2b"
|
|
graph2bAppendText1 = graph2b.node("AppendText_1")
|
|
graph2bAppendText1.input.value = graph2InputFiles[0]
|
|
graph2bAppendText2 = graph2b.node("AppendText_2")
|
|
graph2bAppendText2.input.value = graph2InputFiles[1]
|
|
|
|
# Ensure that graph2 == graph2b
|
|
nodes, edges = graph2.dfsOnFinish()
|
|
for node in nodes:
|
|
otherNode = graph2b.node(node.name)
|
|
for key, attr in node.attributes.items():
|
|
otherAttr = otherNode.attribute(key)
|
|
if attr.isOutput and attr.enabled:
|
|
assert attr.uid() == otherAttr.uid()
|
|
else:
|
|
assert attr.uid() == otherAttr.uid()
|