@@ -113,9 +113,9 @@ func wmedian(g *dag.DAG, nodes []*dag.Node, current, fixed []string, useParents
113113 for i , n := range nodes {
114114 var neighbors []string
115115 if useParents {
116- neighbors = g .Parents (n .EffectiveID () )
116+ neighbors = g .Parents (n .ID )
117117 } else {
118- neighbors = g .Children (n .EffectiveID () )
118+ neighbors = g .Children (n .ID )
119119 }
120120
121121 pos := len (current )
@@ -219,22 +219,37 @@ func orderByMinParent(g *dag.DAG, nodes []*dag.Node, parentOrder []string) []str
219219 parentPos := dag .PosMap (parentOrder )
220220
221221 type entry struct {
222- id string
223- pos int
222+ id string
223+ minPos int
224+ avgPos float64
224225 }
225226 entries := make ([]entry , len (nodes ))
226227 for i , n := range nodes {
228+ parents := g .Parents (n .ID )
227229 minPos := len (parentOrder )
228- for _ , parent := range g .Parents (n .EffectiveID ()) {
229- if pos , ok := parentPos [parent ]; ok && pos < minPos {
230- minPos = pos
230+ sumPos := 0
231+ count := 0
232+ for _ , parent := range parents {
233+ if pos , ok := parentPos [parent ]; ok {
234+ if pos < minPos {
235+ minPos = pos
236+ }
237+ sumPos += pos
238+ count ++
231239 }
232240 }
233- entries [i ] = entry {n .ID , minPos }
241+ avgPos := float64 (minPos )
242+ if count > 0 {
243+ avgPos = float64 (sumPos ) / float64 (count )
244+ }
245+ entries [i ] = entry {n .ID , minPos , avgPos }
234246 }
235247
236248 slices .SortStableFunc (entries , func (a , b entry ) int {
237- if c := cmp .Compare (a .pos , b .pos ); c != 0 {
249+ if c := cmp .Compare (a .minPos , b .minPos ); c != 0 {
250+ return c
251+ }
252+ if c := cmp .Compare (a .avgPos , b .avgPos ); c != 0 {
238253 return c
239254 }
240255 return cmp .Compare (a .id , b .id )
0 commit comments