* add 'matchDescription' method on desc.Attribute.
* desc.ListAttribute/desc.GroupAttribute: 'matchDescription' ensure that value perfectly match element/group description. Enable recursive checking for child attributes.
* nodeFactory: detect DescriptionConflicts in pre-process pass by checking that serialized node's attributes perfectly match their descriptions
* CompatibilityNode.attributeDescFromNameAttribute: consider link expressions as valid values
* test_compatibility: more complete description conflicts unit testing
CompatibilityNodes introduce a new notion of computability per node.
An uncomputed (and therefore uncomputable) CompatibilityNode blocks the computation of all its successor.
* update nodes computability on topology change (in addition to min/max depth)
* evaluate leaves computability to determine if the whole graph can be processed
handle this low-level operation engine side
* fix ListAttribute children links duplication
* handle CompatibilityNode duplication
* move corresponding unit test in test_graph.py
* [ui] add DuplicateNodeCommand
Improve node serialization/deserialization to be able to recreate the exact same node in the graph when loading a meshroom project, even if the corresponding node's description has changed or does not exist anymore. This allows to recover already computed data on disk, without being impacted by changed uids. CompatibilityNode also provides an on-demand upgrade system to turn into a Node that meets the current node description (if possible).
* new abstract class BaseNode, base class for Node and CompatibiliyNode
* Node: serialize everything needed to spawn a CompatibilityNode with precomputed outputs: inputs, uids, parallelization settings, unresolved internal folders and outputs
* node_factory: handles node deserialization and compatibility issues to create either a Node or a CompatibilityNode
* add compatibility unit tests
* add 'sfmPipeline', 'mvsPipeline' and 'photogrammetryPipeline' instantiating nodes in an existing graph
* rename main function (creating a new Graph) 'photogrammetry' + create a Publish node if 'output' is specified
* Add chunk notion for parallelization
* Allows Node desc to implement custom updateInternals
* CameraInit node implement a specific updateInternals to update the
input image list
* FeatureExtraction, FeatureMatching, DepthMap, DepthMapFilter:
implement parallelization
Inputs and outputs Attributes are now declared in two separate lists
* no more isOutput field on Attribute description
* guarantee attributes order (was not the case in Python2 with class attributes)
* Attribute's name is now part of its description
Note: for now, input and output Attributes are still stored in a single model inside a Graph.
* ensure that identical graphs have the same UIDs
* ensure that multiview pipeline graphs with different input images have
different UIDs on all output attributes
- flowEdges: Compute a transitive reduction of the graph to provide
node-level minimal dependencies to create an execution workflow for
renderfarm.
- minMaxDepthPerNode: compute the min and max depth per node