compas-cem 0.8.4__tar.gz → 0.8.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. {compas_cem-0.8.4 → compas_cem-0.8.5}/CHANGELOG.rst +15 -0
  2. {compas_cem-0.8.4 → compas_cem-0.8.5}/PKG-INFO +1 -1
  3. {compas_cem-0.8.4 → compas_cem-0.8.5}/setup.py +1 -1
  4. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/__init__.py +1 -1
  5. compas_cem-0.8.5/src/compas_cem/diagrams/form.py +117 -0
  6. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ArtistColors.ghuser +0 -0
  7. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ArtistForm.ghuser +0 -0
  8. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ArtistTopology.ghuser +0 -0
  9. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstrainedFormFinding.ghuser +0 -0
  10. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintDeviationEdgeLength.ghuser +0 -0
  11. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintEdgeDirection.ghuser +0 -0
  12. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintNodeLine.ghuser +0 -0
  13. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintNodePlane.ghuser +0 -0
  14. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintNodePoint.ghuser +0 -0
  15. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintNodePolyline.ghuser +0 -0
  16. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintReactionForce.ghuser +0 -0
  17. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintTrailEdgeForce.ghuser +0 -0
  18. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_DisassembleForm.ghuser +0 -0
  19. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_DisassembleTopology.ghuser +0 -0
  20. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_EdgeDeviation.ghuser +0 -0
  21. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_EdgeTrail.ghuser +0 -0
  22. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_FormFinding.ghuser +0 -0
  23. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_Info.ghuser +0 -0
  24. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_JSONExportDiagram.ghuser +0 -0
  25. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_JSONImportForm.ghuser +0 -0
  26. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_JSONImportTopology.ghuser +0 -0
  27. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_NodeLoad.ghuser +0 -0
  28. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_NodeSupport.ghuser +0 -0
  29. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_OriginNodesMove.ghuser +0 -0
  30. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterDeviationEdge.ghuser +0 -0
  31. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeLoadX.ghuser +0 -0
  32. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeLoadY.ghuser +0 -0
  33. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeLoadZ.ghuser +0 -0
  34. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeOriginX.ghuser +0 -0
  35. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeOriginY.ghuser +0 -0
  36. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeOriginZ.ghuser +0 -0
  37. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterTrailEdge.ghuser +0 -0
  38. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_Proxy.ghuser +0 -0
  39. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ResultsEdges.ghuser +0 -0
  40. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_ResultsSupportNodes.ghuser +0 -0
  41. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_SearchEdgeKey.ghuser +0 -0
  42. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_SearchNodeKey.ghuser +0 -0
  43. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_TopologyDiagram.ghuser +0 -0
  44. compas_cem-0.8.5/src/compas_cem/ghpython/components/ghuser/CompasCem_TrailsShift.ghuser +0 -0
  45. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem.egg-info/PKG-INFO +1 -1
  46. compas_cem-0.8.4/src/compas_cem/diagrams/form.py +0 -54
  47. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ArtistColors.ghuser +0 -0
  48. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ArtistForm.ghuser +0 -0
  49. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ArtistTopology.ghuser +0 -0
  50. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstrainedFormFinding.ghuser +0 -0
  51. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintDeviationEdgeLength.ghuser +0 -0
  52. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintEdgeDirection.ghuser +0 -0
  53. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintNodeLine.ghuser +0 -0
  54. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintNodePlane.ghuser +0 -0
  55. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintNodePoint.ghuser +0 -0
  56. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintNodePolyline.ghuser +0 -0
  57. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintReactionForce.ghuser +0 -0
  58. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ConstraintTrailEdgeForce.ghuser +0 -0
  59. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_DisassembleForm.ghuser +0 -0
  60. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_DisassembleTopology.ghuser +0 -0
  61. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_EdgeDeviation.ghuser +0 -0
  62. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_EdgeTrail.ghuser +0 -0
  63. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_FormFinding.ghuser +0 -0
  64. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_Info.ghuser +0 -0
  65. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_JSONExportDiagram.ghuser +0 -0
  66. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_JSONImportForm.ghuser +0 -0
  67. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_JSONImportTopology.ghuser +0 -0
  68. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_NodeLoad.ghuser +0 -0
  69. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_NodeSupport.ghuser +0 -0
  70. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_OriginNodesMove.ghuser +0 -0
  71. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterDeviationEdge.ghuser +0 -0
  72. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeLoadX.ghuser +0 -0
  73. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeLoadY.ghuser +0 -0
  74. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeLoadZ.ghuser +0 -0
  75. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeOriginX.ghuser +0 -0
  76. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeOriginY.ghuser +0 -0
  77. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterNodeOriginZ.ghuser +0 -0
  78. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ParameterTrailEdge.ghuser +0 -0
  79. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_Proxy.ghuser +0 -0
  80. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ResultsEdges.ghuser +0 -0
  81. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_ResultsSupportNodes.ghuser +0 -0
  82. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_SearchEdgeKey.ghuser +0 -0
  83. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_SearchNodeKey.ghuser +0 -0
  84. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_TopologyDiagram.ghuser +0 -0
  85. compas_cem-0.8.4/src/compas_cem/ghpython/components/ghuser/CompasCem_TrailsShift.ghuser +0 -0
  86. {compas_cem-0.8.4 → compas_cem-0.8.5}/AUTHORS.rst +0 -0
  87. {compas_cem-0.8.4 → compas_cem-0.8.5}/LICENSE +0 -0
  88. {compas_cem-0.8.4 → compas_cem-0.8.5}/MANIFEST.in +0 -0
  89. {compas_cem-0.8.4 → compas_cem-0.8.5}/README.rst +0 -0
  90. {compas_cem-0.8.4 → compas_cem-0.8.5}/requirements.txt +0 -0
  91. {compas_cem-0.8.4 → compas_cem-0.8.5}/setup.cfg +0 -0
  92. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/data/__init__.py +0 -0
  93. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/data/data.py +0 -0
  94. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/diagrams/__init__.py +0 -0
  95. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/diagrams/diagram.py +0 -0
  96. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/diagrams/mixins/__init__.py +0 -0
  97. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/diagrams/mixins/edge_mixins.py +0 -0
  98. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/diagrams/mixins/node_mixins.py +0 -0
  99. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/diagrams/topology/__init__.py +0 -0
  100. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/diagrams/topology/mesh_mixins.py +0 -0
  101. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/diagrams/topology/topology.py +0 -0
  102. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/elements/__init__.py +0 -0
  103. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/elements/deviation.py +0 -0
  104. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/elements/edge.py +0 -0
  105. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/elements/node.py +0 -0
  106. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/elements/trail.py +0 -0
  107. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/equilibrium/__init__.py +0 -0
  108. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/equilibrium/force.py +0 -0
  109. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/equilibrium/force_numpy.py +0 -0
  110. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/__init__.py +0 -0
  111. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/artists.py +0 -0
  112. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ArtistColors/code.py +0 -0
  113. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ArtistColors/icon.png +0 -0
  114. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ArtistColors/metadata.json +0 -0
  115. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ArtistForm/code.py +0 -0
  116. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ArtistForm/icon.png +0 -0
  117. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ArtistForm/metadata.json +0 -0
  118. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ArtistTopology/code.py +0 -0
  119. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ArtistTopology/icon.png +0 -0
  120. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ArtistTopology/metadata.json +0 -0
  121. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstrainedFormFinding/code.py +0 -0
  122. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstrainedFormFinding/icon.png +0 -0
  123. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstrainedFormFinding/metadata.json +0 -0
  124. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintDeviationEdgeLength/code.py +0 -0
  125. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintDeviationEdgeLength/icon.png +0 -0
  126. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintDeviationEdgeLength/metadata.json +0 -0
  127. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintEdgeDirection/code.py +0 -0
  128. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintEdgeDirection/icon.png +0 -0
  129. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintEdgeDirection/metadata.json +0 -0
  130. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodeLine/code.py +0 -0
  131. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodeLine/icon.png +0 -0
  132. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodeLine/metadata.json +0 -0
  133. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodePlane/code.py +0 -0
  134. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodePlane/icon.png +0 -0
  135. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodePlane/metadata.json +0 -0
  136. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodePoint/code.py +0 -0
  137. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodePoint/icon.png +0 -0
  138. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodePoint/metadata.json +0 -0
  139. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodePolyline/code.py +0 -0
  140. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodePolyline/icon.png +0 -0
  141. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintNodePolyline/metadata.json +0 -0
  142. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintReactionForce/code.py +0 -0
  143. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintReactionForce/icon.png +0 -0
  144. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintReactionForce/metadata.json +0 -0
  145. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintTrailEdgeForce/code.py +0 -0
  146. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintTrailEdgeForce/icon.png +0 -0
  147. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ConstraintTrailEdgeForce/metadata.json +0 -0
  148. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_DisassembleForm/code.py +0 -0
  149. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_DisassembleForm/icon.png +0 -0
  150. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_DisassembleForm/metadata.json +0 -0
  151. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_DisassembleTopology/code.py +0 -0
  152. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_DisassembleTopology/icon.png +0 -0
  153. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_DisassembleTopology/metadata.json +0 -0
  154. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_EdgeDeviation/code.py +0 -0
  155. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_EdgeDeviation/icon.png +0 -0
  156. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_EdgeDeviation/metadata.json +0 -0
  157. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_EdgeTrail/code.py +0 -0
  158. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_EdgeTrail/icon.png +0 -0
  159. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_EdgeTrail/metadata.json +0 -0
  160. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_FormFinding/code.py +0 -0
  161. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_FormFinding/icon.png +0 -0
  162. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_FormFinding/metadata.json +0 -0
  163. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_Info/code.py +0 -0
  164. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_Info/icon.png +0 -0
  165. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_Info/metadata.json +0 -0
  166. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_JSONExportDiagram/code.py +0 -0
  167. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_JSONExportDiagram/icon.png +0 -0
  168. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_JSONExportDiagram/metadata.json +0 -0
  169. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_JSONImportForm/code.py +0 -0
  170. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_JSONImportForm/icon.png +0 -0
  171. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_JSONImportForm/metadata.json +0 -0
  172. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_JSONImportTopology/code.py +0 -0
  173. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_JSONImportTopology/icon.png +0 -0
  174. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_JSONImportTopology/metadata.json +0 -0
  175. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_NodeLoad/code.py +0 -0
  176. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_NodeLoad/icon.png +0 -0
  177. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_NodeLoad/metadata.json +0 -0
  178. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_NodeSupport/code.py +0 -0
  179. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_NodeSupport/icon.png +0 -0
  180. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_NodeSupport/metadata.json +0 -0
  181. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_OriginNodesMove/code.py +0 -0
  182. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_OriginNodesMove/icon.png +0 -0
  183. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_OriginNodesMove/metadata.json +0 -0
  184. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterDeviationEdge/code.py +0 -0
  185. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterDeviationEdge/icon.png +0 -0
  186. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterDeviationEdge/metadata.json +0 -0
  187. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeLoadX/code.py +0 -0
  188. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeLoadX/icon.png +0 -0
  189. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeLoadX/metadata.json +0 -0
  190. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeLoadY/code.py +0 -0
  191. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeLoadY/icon.png +0 -0
  192. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeLoadY/metadata.json +0 -0
  193. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeLoadZ/code.py +0 -0
  194. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeLoadZ/icon.png +0 -0
  195. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeLoadZ/metadata.json +0 -0
  196. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeOriginX/code.py +0 -0
  197. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeOriginX/icon.png +0 -0
  198. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeOriginX/metadata.json +0 -0
  199. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeOriginY/code.py +0 -0
  200. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeOriginY/icon.png +0 -0
  201. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeOriginY/metadata.json +0 -0
  202. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeOriginZ/code.py +0 -0
  203. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeOriginZ/icon.png +0 -0
  204. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterNodeOriginZ/metadata.json +0 -0
  205. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterTrailEdge/code.py +0 -0
  206. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterTrailEdge/icon.png +0 -0
  207. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ParameterTrailEdge/metadata.json +0 -0
  208. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_Proxy/code.py +0 -0
  209. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_Proxy/icon.png +0 -0
  210. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_Proxy/metadata.json +0 -0
  211. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ResultsEdges/code.py +0 -0
  212. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ResultsEdges/icon.png +0 -0
  213. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ResultsEdges/metadata.json +0 -0
  214. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ResultsSupportNodes/code.py +0 -0
  215. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ResultsSupportNodes/icon.png +0 -0
  216. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_ResultsSupportNodes/metadata.json +0 -0
  217. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_SearchEdgeKey/code.py +0 -0
  218. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_SearchEdgeKey/icon.png +0 -0
  219. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_SearchEdgeKey/metadata.json +0 -0
  220. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_SearchNodeKey/code.py +0 -0
  221. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_SearchNodeKey/icon.png +0 -0
  222. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_SearchNodeKey/metadata.json +0 -0
  223. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_TopologyDiagram/code.py +0 -0
  224. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_TopologyDiagram/icon.png +0 -0
  225. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_TopologyDiagram/metadata.json +0 -0
  226. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_TrailsShift/code.py +0 -0
  227. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_TrailsShift/icon.png +0 -0
  228. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/components/CompasCem_TrailsShift/metadata.json +0 -0
  229. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/install.py +0 -0
  230. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/register.py +0 -0
  231. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/ghpython/uninstall.py +0 -0
  232. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/loads/__init__.py +0 -0
  233. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/loads/node.py +0 -0
  234. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/__init__.py +0 -0
  235. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/__init__.py +0 -0
  236. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/constraint.py +0 -0
  237. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/direction.py +0 -0
  238. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/force.py +0 -0
  239. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/length.py +0 -0
  240. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/line.py +0 -0
  241. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/mesh.py +0 -0
  242. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/plane.py +0 -0
  243. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/point.py +0 -0
  244. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/constraints/polyline.py +0 -0
  245. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/grad.py +0 -0
  246. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/nlopt.py +0 -0
  247. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/objective_func.py +0 -0
  248. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/optimizer.py +0 -0
  249. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/parameters/__init__.py +0 -0
  250. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/parameters/deviation.py +0 -0
  251. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/parameters/edge.py +0 -0
  252. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/parameters/load.py +0 -0
  253. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/parameters/node.py +0 -0
  254. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/parameters/origin.py +0 -0
  255. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/parameters/parameter.py +0 -0
  256. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/parameters/trail.py +0 -0
  257. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/optimization/proxy.py +0 -0
  258. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/plotters/__init__.py +0 -0
  259. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/plotters/formartist.py +0 -0
  260. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/plotters/plotter.py +0 -0
  261. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/plotters/proxy.py +0 -0
  262. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/plotters/register.py +0 -0
  263. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/plotters/topologyartist.py +0 -0
  264. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/supports/__init__.py +0 -0
  265. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/supports/node.py +0 -0
  266. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/viewers/__init__.py +0 -0
  267. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/viewers/diagramobject.py +0 -0
  268. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/viewers/formobject.py +0 -0
  269. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/viewers/register.py +0 -0
  270. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/viewers/topologyobject.py +0 -0
  271. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem/viewers/viewer.py +0 -0
  272. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem.egg-info/SOURCES.txt +0 -0
  273. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem.egg-info/dependency_links.txt +0 -0
  274. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem.egg-info/not-zip-safe +0 -0
  275. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem.egg-info/requires.txt +0 -0
  276. {compas_cem-0.8.4 → compas_cem-0.8.5}/src/compas_cem.egg-info/top_level.txt +0 -0
@@ -6,6 +6,21 @@ All notable changes to this project will be documented in this file.
6
6
  The format is based on `Keep a Changelog <https://keepachangelog.com/en/1.0.0/>`_
7
7
  and this project adheres to `Semantic Versioning <https://semver.org/spec/v2.0.0.html>`_.
8
8
 
9
+ 0.8.5
10
+ ----------
11
+
12
+ **Added**
13
+
14
+ - Implemented `FormDiagram.from_equilibrium_state` constructor for compatibility with `jax_cem`.
15
+
16
+ **Changed**
17
+
18
+ **Fixed**
19
+
20
+ **Deprecated**
21
+
22
+ **Removed**
23
+
9
24
  0.8.4
10
25
  ----------
11
26
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: compas_cem
3
- Version: 0.8.4
3
+ Version: 0.8.5
4
4
  Summary: The Combinatorial Equilibrium Modeling framework for COMPAS
5
5
  Home-page: https://github.com/arpastrana/compas_cem
6
6
  Author: Rafael Pastrana
@@ -28,7 +28,7 @@ optional_requirements = {}
28
28
 
29
29
  setup(
30
30
  name="compas_cem",
31
- version="0.8.4",
31
+ version="0.8.5",
32
32
  description="The Combinatorial Equilibrium Modeling framework for COMPAS",
33
33
  long_description=long_description,
34
34
  long_description_content_type="text/markdown",
@@ -27,7 +27,7 @@ __author__ = ["Rafael Pastrana"]
27
27
  __copyright__ = "Copyright 2020 - Princeton University"
28
28
  __license__ = "MIT License"
29
29
  __email__ = "arpj@princeton.edu"
30
- __version__ = "0.8.4"
30
+ __version__ = "0.8.5"
31
31
 
32
32
 
33
33
  # Directories
@@ -0,0 +1,117 @@
1
+ from compas_cem.elements import Node
2
+ from compas_cem.elements import Edge
3
+
4
+ from compas_cem.diagrams import Diagram
5
+
6
+
7
+ __all__ = ["FormDiagram"]
8
+
9
+ # ==============================================================================
10
+ # Form Diagram
11
+ # ==============================================================================
12
+
13
+
14
+ class FormDiagram(Diagram):
15
+ """
16
+ The heart of life.
17
+
18
+ Parameters
19
+ ----------
20
+ *args : ``list``
21
+ Arguments.
22
+ **kwargs : ``dict``
23
+ Keyword arguments.
24
+
25
+ Returns
26
+ -------
27
+ form : :class:`compas_cem.diagrams.FormDiagram`
28
+ A form diagram.
29
+ """
30
+ def __init__(self, *args, **kwargs):
31
+ super(FormDiagram, self).__init__(*args, **kwargs)
32
+
33
+ # ==============================================================================
34
+ # Constructors
35
+ # ==============================================================================
36
+
37
+ @classmethod
38
+ def from_topology_diagram(cls, topology):
39
+ """
40
+ Construct a form diagram from a topology diagram.
41
+ """
42
+ form = topology.copy(cls=cls)
43
+
44
+ del form.attributes["_trails"]
45
+ del form.attributes["_auxiliary_trails"]
46
+ del form.attributes["_aux_length"]
47
+ del form.attributes["_aux_vector"]
48
+
49
+ return form
50
+
51
+ @classmethod
52
+ def from_equilibrium_state(cls, eq_state, structure):
53
+ """
54
+ Build a form diagram from an equilibrium state.
55
+ """
56
+ return form_from_eqstate(eq_state, structure, cls)
57
+
58
+
59
+ # ==============================================================================
60
+ # Helpers
61
+ # ==============================================================================
62
+
63
+ def form_from_eqstate(eqstate, structure, cls=None):
64
+ """
65
+ Generate a form diagram from an equilibrium state calculated with JAX CEM.
66
+ """
67
+ if cls is None:
68
+ cls = FormDiagram
69
+ form = cls()
70
+
71
+ # Add nodes
72
+ for node in structure.nodes:
73
+ form.add_node(Node(int(node)))
74
+
75
+ # Assign support nodes
76
+ for node in structure.support_nodes:
77
+ form.node_attribute(int(node), "type", "support")
78
+
79
+ # Add edges
80
+ for u, v in structure.edges:
81
+ form.add_edge(Edge(int(u), int(v), {}))
82
+
83
+ # Update form attributes
84
+ form_update(form, eqstate, structure)
85
+
86
+ return form
87
+
88
+
89
+ def form_update(form, eqstate, structure):
90
+ """
91
+ Update in-place the attributes of a form diagram with an equilibrium state.
92
+ """
93
+ xyz = eqstate.xyz.tolist()
94
+ loads = eqstate.loads.tolist()
95
+ reactions = eqstate.reactions.tolist()
96
+ lengths = eqstate.lengths.tolist()
97
+ forces = eqstate.forces.tolist()
98
+
99
+ # Update q values and lengths on edges
100
+ for edge in structure.edges:
101
+ idx = structure.edge_index[tuple(edge)]
102
+ form.edge_attribute(edge, name="force", value=forces[idx].pop())
103
+ form.edge_attribute(edge, name="lengths", value=lengths[idx].pop())
104
+
105
+ # Update residuals on nodes
106
+ for node in structure.nodes:
107
+ form.node_attributes(node, "xyz", xyz[node])
108
+ form.node_attributes(node, ["rx", "ry", "rz"], reactions[node])
109
+ form.node_attributes(node, ["qx", "qy", "qz"], loads[node])
110
+
111
+ # ==============================================================================
112
+ # Main
113
+ # ==============================================================================
114
+
115
+
116
+ if __name__ == "__main__":
117
+ pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: compas-cem
3
- Version: 0.8.4
3
+ Version: 0.8.5
4
4
  Summary: The Combinatorial Equilibrium Modeling framework for COMPAS
5
5
  Home-page: https://github.com/arpastrana/compas_cem
6
6
  Author: Rafael Pastrana
@@ -1,54 +0,0 @@
1
- from compas_cem.diagrams import Diagram
2
-
3
-
4
- __all__ = ["FormDiagram"]
5
-
6
- # ==============================================================================
7
- # Form Diagram
8
- # ==============================================================================
9
-
10
-
11
- class FormDiagram(Diagram):
12
- """
13
- The heart of life.
14
-
15
- Parameters
16
- ----------
17
- *args : ``list``
18
- Arguments.
19
- **kwargs : ``dict``
20
- Keyword arguments.
21
-
22
- Returns
23
- -------
24
- form : :class:`compas_cem.diagrams.FormDiagram`
25
- A form diagram.
26
- """
27
- def __init__(self, *args, **kwargs):
28
- super(FormDiagram, self).__init__(*args, **kwargs)
29
-
30
- # ==============================================================================
31
- # Constructors
32
- # ==============================================================================
33
-
34
- @classmethod
35
- def from_topology_diagram(cls, topology):
36
- """
37
- Construct the base of a form diagram from a topology diagram.
38
- """
39
- form = topology.copy(cls=cls)
40
-
41
- del form.attributes["_trails"]
42
- del form.attributes["_auxiliary_trails"]
43
- del form.attributes["_aux_length"]
44
- del form.attributes["_aux_vector"]
45
-
46
- return form
47
-
48
- # ==============================================================================
49
- # Main
50
- # ==============================================================================
51
-
52
-
53
- if __name__ == "__main__":
54
- pass
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes