This file is a manually maintained list of changes for each release. Feel free to add your changes here when sending pull requests. Also send corrections if you spot any mistakes.
- BC break: Merge
CycleintoWalk(#61). As such, its static factory methods had to be renamed. Update your references if applicable:
| Old name | New name |
|---|---|
Cycle::factoryFromPredecessorMap() |
Walk::factoryCycleFromPredecessorMap() |
Cycle::factoryFromVertices() |
Walk::factoryCycleFromVertices() |
Cycle::factoryFromEdges() |
Walk::factoryCycleFromEdges() |
- BC break: Each of the above methods (
Walk::factoryCycleFromPredecessorMap(),Walk::factoryCycleFromVertices(),Walk::factoryCycleFromEdges()) now actually makes sure the returnedWalkinstance is actually a valid Cycle, i.e. the startVertexis the same as the endVertex(#61) - BC break: Each
Algorithm\ShortestPathalgorithm now consistenly does not return a zero weight for the root Vertex and now supports loop edges on the root Vertex (#62) - BC break: Each
Algorithm\ShortestPathalgorithm now consistently throws anOutOfBoundsExceptionfor unreachable vertices (#62) - Feature: Add
Algorithm\ShortestPath::hasVertex(Vertex $vertex)to check whether a path to the given Vertex exists (#62). - Fix: Checking
Walk::isValid()(#61) - Fix: Missing import prevented
Algorithm\ShortestPath\MooreBellmanFord::getCycleNegative()from actually throwing the rightUnderflowExceptionif no cycle was actually found (#62)
- BC break: Move algorithm definitions in base classes to separate algorithm classes (#27). The following methods containing algorithms were now moved to separate algorithm classes. This change encourages code-reuse, simplifies spotting algorithms, helps reducing complexity, improves testablity and avoids tight coupling. Update your references if applicable:
| Old name | New name | Related ticket |
|---|---|---|
Set::getWeight() |
Algorithm\Weight::getWeight() |
#33 |
Set::getWeightFlow() |
Algorithm\Weight::getWeightFlow() |
#33 |
Set::getWeightMin() |
Algorithm\Weight::getWeightMin() |
#33 |
Set::isWeighted() |
Algorithm\Weight::isWeighted() |
#33 |
| - | - | - |
Graph::getDegree() |
Algorithm\Degree::getDegree() |
#29 |
Graph::getDegreeMin() |
Algorithm\Degree::getDegreeMin() |
#29 |
Graph::getDegreeMax() |
Algorithm\Degree::getDegreeMax() |
#29 |
Graph::isRegular() |
Algorithm\Degree::isRegular() |
#29 |
Graph::isBalanced() |
Algorithm\Degree::isBalanced() |
#29 |
Vertex::getDegree() |
Algorithm\Degree:getDegreeVertex() |
#49 |
Vertex::getDegreeIn() |
Algorithm\Degree:getDegreeInVertex() |
#49 |
Vertex::getDegreeOut() |
Algorithm\Degree:getDegreeOutVertex() |
#49 |
Vertex::isSink() |
Algorithm\Degree:isVertexSink() |
#49 |
Vertex::isSource() |
Algorithm\Degree:isVertexSource() |
#49 |
Vertex::isIsolated() |
Algorithm\Degree::isVertexIsolated() |
#49 |
| - | - | - |
Set::isDirected() |
Algorithm\Directed::isDirected() |
#34 |
| - | - | - |
Graph::isSymmetric() |
Algorithm\Symmetric::isSymmetric() |
#41 |
| - | - | - |
Graph::isComplete() |
Algorithm\Complete::isComplete() |
#43 |
| - | - | - |
Set::hasFlow() |
Algorithm\Flow::hasFlow() |
#47 |
Graph::getBalance() |
Algorithm\Flow::getBalance() |
#30, #47 |
Graph::isBalancedFlow() |
Algorithm\Flow::isBalancedFlow() |
#30, #47 |
Vertex::getFlow() |
Algorithm\Flow::getFlowVertex() |
#47 |
| - | - | - |
Vertex::isLeaf() |
Algorithm\Tree\Undirected::isVertexLeaf() |
#44 |
| - | - | - |
Set::hasLoop() |
Algorithm\Loop::hasLoop() |
#51 |
Vertex::hasLoop() |
Algorithm\Loop::hasLoopVertex() |
#51 |
| - | - | - |
Set::hasEdgeParallel() |
Algorithm\Parallel::hasEdgeParallel() |
#52 |
Edge\Base::hasEdgeParallel() |
Algorithm\Parallel::hasEdgeParallelEdge() |
#52 |
Edge\Base::getEdgesParallel() |
Algorithm\Parallel::getEdgeParallelEdge() |
#52 |
| - | - | - |
Graph::isEdgeless() |
Algorithm\Property\GraphProperty::isEdgeless() |
#54 |
Graph::isTrivial() |
Algorithm\Property\GraphProperty::isTrivial() |
#54 |
Walk::isCycle() |
Algorithm\Property\WalkProperty::isCycle() |
#54 |
Walk::isPath() |
Algorithm\Property\WalkProperty::isPath() |
#54 |
Walk::hasCycle() |
Algorithm\Property\WalkProperty::hasCycle() |
#54 |
Walk::isLoop() |
Algorithm\Property\WalkProperty::isLoop() |
#54 |
Walk::isDigon() |
Algorithm\Property\WalkProperty::isDigon() |
#54 |
Walk::isTriangle() |
Algorithm\Property\WalkProperty::isTriangle() |
#54 |
Walk::isSimple() |
Algorithm\Property\WalkProperty::isSimple() |
#54 |
Walk::isHamiltonian() |
Algorithm\Property\WalkProperty::isHamiltonian() |
#54 |
Walk::isEulerian() |
Algorithm\Property\WalkProperty::isEulerian() |
#54 |
- BC break: Remove unneeded algorithm alias definitions (#31, #50). The following alias definitions have been removed, their original/actual name has already existed before and continues to work unchanged. Update your references if applicable:
| Old/removed alias definition | Actual name |
|---|---|
Graph::isConnected() |
Algorithm\ConnectedComponents::isSingle() |
Graph::hasEulerianCycle() |
Algorithm\Eulerian::hasCycle() |
Graph::getNumberOfComponents() |
Algorithm\ConnectedComponents::getNumberOfComponents() |
Graph::getNumberOfGroups() |
Algorithm\Groups::getNumberOfGroups() |
Graph::isBipartit() |
Algorithm\Bipartit::isBipartit() |
Vertex::hasPathTo() |
Algorithm\ShortestPath\BreadthFirst::hasVertex() |
Vertex::hasPathFrom() |
Algorithm\ShortestPath\BreadthFirst::hasVertex() |
Vertex::getVerticesPathTo() |
Algorithm\ShortestPath\BreadthFirst::getVertices() |
Vertex::getVerticesPathFrom() |
Algorithm\ShortestPath\BreadthFirst::getVertices() |
- BC break:
Graph::createVertices()now returns an array of vertices instead of the chainableGraph(#19) - BC break: Move
Loader\UmlClassDiagramto separate fhaculty/graph-uml repo (#38) - BC break: Remove needless
Algorithm\MinimumSpanningTree\PrimWithIf(useAlgorithm\MinimumSpanningTree\Priminstead) (#45) - BC break:
Vertex::createEdgeTo()now returns an instance of typeEdge\Undirectedinstead ofEdge\UndirectedId(#46) - BC break:
Edge\Base::setCapacity()now consistently throws anRangeExceptioninstead ofInvalidArgumentExceptionif the current flow exceeds the new maximum capacity (#53) - Feature: New
Algorithm\Treenamespace with algorithms for undirected and directed, rooted trees (#44) - Feature: According to be above list of moved algorithm methods, the following algorithm classes have been added (#27):
- Feature:
Graph::createVertices()now also accepts an array of vertex IDs (#19) - Feature: Add
Algorithm\Property\WalkProperty::hasLoop()alias definition for completeness (#54) - Feature: Add
Algorithm\Property\WalkProperty::isCircuit()definition to distinguish circuits from cycles (#54) - Fix: Checking hamiltonian cycles always returned false (#54)
- Fix: A Walk with no edges is no longer considered a valid cycle (#54)
- Fix: Various issues with
Vertex/Edgelayout attributes (#32) - Fix: Getting multiple parallel edges for undirected edges (#52)
- First tagged release (See issue #20 for more info on why it starts as v0.5.0)