* add _computeUids internal method + store computed uids in a dedicated dict
* cache override:
* add optional cacheDir parameter on updateInternal method to override graph cache directory
* _buildCmdVars always update member variable '_cmdVars'
* CameraInit: ensure node does not belong to a graph and use updateInternals with temp cache directory
* read: str.decode not available in py3; use io.open (available in py2/3) to specify encoding + errors handling
* write: direclty use json.dump to write viewpoints file
* immediately raise if subprocess returns with an error code (avoid misleading error trying to open non-existing '.sfm' file)
* include error code and command line in the exception's message in such case
* avoid duplicate log message
* node size is an estimation of the number of element to process on a given node, that may be used for parallelization.
* replace the explicit reference to an attribute on a node (Parallelization.inputListParamName)
* size can be:
* dynamic: depends on the size of the node connected to a specific Attribute
* static
* remove non user pertinent parameters
* revamp old updateInternals into buildIntrinsics method:
* works with node's current values + optional new images
* does not update the graph, making it thread safe and does not break undo/redo when used from UI
* returns updated intrinsics and views instead
* 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.