package dagro

import 

// longestPath initializes ranks by pushing every node as low as its outgoing
// minlen constraints permit. This is a direct port of lib/rank/util.js.
func longestPath( *Graph) {
	 := make(map[string]bool, .NodeCount())

	var  func(string) float64
	 = func( string) float64 {
		 := asAttrs(.Node())
		if [] {
			return num(, "rank")
		}
		[] = true

		 := math.Inf(1)
		for ,  := range .OutEdges() {
			 := (.W) - num(asAttrs(.Edge()), "minlen")
			if  <  {
				 = 
			}
		}
		if math.IsInf(, 1) {
			 = 0
		}

		["rank"] = 
		return 
	}

	for ,  := range .Sources() {
		()
	}
}

// slack is the difference between an edge's current length and minlen.
func slack( *Graph,  Edge) float64 {
	 := num(asAttrs(.Node(.V)), "rank")
	 := num(asAttrs(.Node(.W)), "rank")
	return  -  - num(asAttrs(.Edge()), "minlen")
}