Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/graph rename optimization #896

Conversation

mmarineBlueQuartz
Copy link
Contributor

  • Redesigned the rename functionality for improved performance. Rather than being performed by iterating over the DataContainerArray after each filter preflights to determine what new DataArrayPaths exist and which were renamed, these checks are performed at the filter level during preflight on an opt-in basis. This reduced the rename functionality to a subset of its previous implementation, especially in cases where filters create an arbitrary number of new DataArrayPaths.
  • Redesigned the Data Structure to move towards graph-based from the existing tree-based design. Nodes (DataContainer, AttributeMatrix, and IDataArray) can still only have one parent at the moment and will overwrite their existing parent if a new one is assigned. In addition, nodes now know about their parents and can construct a DataArrayPath to itself and all of its children based on that information.
  • Implemented STL iterator support to Data Structure Nodes. Now all containers can be iterated over using range-based for loops, and DataArrays can be iterated over for component values using STL range-based for loops.
  • Renamed add** methods in Data Structure containers to addOrReplace**. Added IDataStructureContainerNode::insertOrAssign(std::shared_ptr child) to keep functionality consistent and reduce the amount of copy-pasted code. Most add** method calls were replaced with this insertOrAssign. For cases where replacement is not desired, the IDataStructureContainerNode::push_back method will attempt to add without replacement. It returns a boolean value determining if it was successful.
  • IDataStructureContainerNode has [] operators that can return the corresponding child based on either index or name. If the input is invalid, it throws an out_of_range exception.
  • Removed QObject from DataArrayPath inheritance

imikejackson and others added 29 commits February 25, 2019 16:36
Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
All DataStructure classes have been updated in addition to some FilterParameter
changes that allow much faster renaming within the gui and generally faster
execution times.

Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
* ModifiedLambertProjectionArray::resizeTuples needs implementation.
+ Updates API in AttributeMatrix: Add insert_or_assign (based on C++17 std::map semantics)
+ Updates DataArray<T> to have a more STL like interface
+ Updates FloatVec3_t to SIMPLArray<T, unsigned int Dimension> allows more STL like interfaces to be built onto the FloatVec3Type alias.
+ Lots of other replacements to update uses of the old API to the new API

Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
+ Update all occurances of insert_or_assign to insertOrAssign
+ Update DataArray with proper allocation/deallocation schemes when the memory is not owned

Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
 For now there is no "resize(size_type)" method in DataArray until we are sure
 all the filters that used that function have been updated to use resizeTuples()
 instead.

Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
The library is already located by SIMPL and SurfaceMeshing uses a boolean that is
set by SIMPL to determine if the Eigen related filters should be included.

Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
* Converted QString DataContainerNames to DataArrayPaths
* Updated DataContainerName variant to DataArrayPath variant.
* Updated QString paths to DataArrayPaths.
* Renamed the add methods in various data container classes.  Functionality was restored to its previous case where values were not just added but replaced as well.  The only pure add method remaining is IDataStructureContainerNode::push_back
* DataContainerArray::addDataContainer renamed to addOrRelaceDataContainer.
* DataContainer::addAttributeMatrix renamed to addOrReplaceAttributeMatrix.
* AttributeMatrix::addAttributeArray renamed to addOrReplaceArributeArray.
* EbsdToH5Ebsd filter can now convert relative paths to absolute paths in the same way that the GUI does.  This was important for PipelineRunner test or anywhere pipelines are executed outside of the SIMPLView GUI, as pipelines executed in the GUI were not compatible with those run through command line.  There are likely several other places that this conversion needs to be performed in the filter-level.
* Updated input and output file paths for EBSD Reconstruction (02) and (03) to use relative paths instead of absolute paths for a specific user and OS.
* FindMisorientations filter throws an out of range exception when using a negative index to reference a quaternion pointer.
* Updated EbsdToH5Ebsd filter in OrientationAnalysis
Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
+ Test Pipeline updated to also output a .dream3d file (useful for debugging)
+ filter updated to use QMutex and QMutexLocker instead of a QSemaphore
+ Other C++ Modernization updates

Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
…yPath

Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
…r getPrereqDataContainer

This is needed to allow the filter to take part in renaming actions.

Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
# Conflicts:
#	Source/Plugins/OrientationAnalysis/OrientationAnalysisFilters/ReadAngData.cpp
#	Source/Plugins/Statistics/StatisticsFilters/FindNeighborhoods.cpp
#	Source/Plugins/Statistics/StatisticsFilters/FindNeighbors.cpp
#	Source/Plugins/SurfaceMeshing/SurfaceMeshingFilters/FindTriangleGeomNeighbors.cpp
Remove Python binding for method that was removed.

Signed-off-by: Michael Jackson <mike.jackson@bluequartz.net>
@imikejackson
Copy link
Contributor

This whole PR was discussed internally and all systems are building and passing tests.

@imikejackson imikejackson merged commit 7ef992a into BlueQuartzSoftware:develop Apr 1, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants