Skip to content

Latest commit

 

History

History
137 lines (124 loc) · 10.9 KB

File metadata and controls

137 lines (124 loc) · 10.9 KB

CHANGELOG

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.

0.7.0 (2013-xx-xx)

  • BC break: Merge Cycle into Walk (#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 returned Walk instance is actually a valid Cycle, i.e. the start Vertex is the same as the end Vertex (#61)
  • BC break: Each Algorithm\ShortestPath algorithm 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\ShortestPath algorithm now consistently throws an OutOfBoundsException for 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 right UnderflowException if no cycle was actually found (#62)

0.6.0 (2013-07-11)

  • 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 chainable Graph (#19)
  • BC break: Move Loader\UmlClassDiagram to separate fhaculty/graph-uml repo (#38)
  • BC break: Remove needless Algorithm\MinimumSpanningTree\PrimWithIf (use Algorithm\MinimumSpanningTree\Prim instead) (#45)
  • BC break: Vertex::createEdgeTo() now returns an instance of type Edge\Undirected instead of Edge\UndirectedId (#46)
  • BC break: Edge\Base::setCapacity() now consistently throws an RangeException instead of InvalidArgumentException if the current flow exceeds the new maximum capacity (#53)
  • Feature: New Algorithm\Tree namespace 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):
    • New Algorithm\Weight (#33)
    • New Algorithm\Degree (#29, #49)
    • New Algorithm\Directed (#34)
    • New Algorithm\Symmetric (#41)
    • New Algorithm\Complete (#43)
    • New Algorithm\Flow (#30, #47)
    • New Algorithm\Tree (#44)
    • New Algorithm\Loop (#51)
    • New Algorithm\Parallel (#52)
    • New Algorithm\Property (#54)
  • 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/Edge layout attributes (#32)
  • Fix: Getting multiple parallel edges for undirected edges (#52)

0.5.0 (2013-05-07)

  • First tagged release (See issue #20 for more info on why it starts as v0.5.0)