4012: Improvement for "What's next" report

svn: r15475
This commit is contained in:
Doug Blank 2010-05-25 10:06:53 +00:00
parent 6c01a611d7
commit f72178b4df

View File

@ -52,10 +52,6 @@ class WhatNextGramplet(Gramplet):
# descendants of this ancestor are processed. # descendants of this ancestor are processed.
ANCESTOR_DELAY = 1 ANCESTOR_DELAY = 1
# After a spouse was processed, how many extra rounds to delay until the
# ancestors of this spouse are processed.
SPOUSE_DELAY = 1
# Use COMPLETE marker on a person to indicate that this person has no # Use COMPLETE marker on a person to indicate that this person has no
# further marriages, if COMPLETE marker is not set, warn about this at the # further marriages, if COMPLETE marker is not set, warn about this at the
# time the marriages for the person are processed. # time the marriages for the person are processed.
@ -98,7 +94,6 @@ class WhatNextGramplet(Gramplet):
self.set_text("") self.set_text("")
# List of already processed persons and families, to avoid recursing # List of already processed persons and families, to avoid recursing
# back down to ourselves or meeting the same person through different # back down to ourselves or meeting the same person through different
# paths. # paths.
@ -112,7 +107,8 @@ class WhatNextGramplet(Gramplet):
# parent's other spouses, the ancestors of my grandchildren's spouses, # parent's other spouses, the ancestors of my grandchildren's spouses,
# the ancestors of my sibling's spouses etc. # the ancestors of my sibling's spouses etc.
ancestors = [[default_person]] ancestors = [[default_person]]
ancestors_queue = [[[default_person]]] + [[] for i in range(self.ANCESTOR_DELAY)] ancestors_queue = ([[[default_person]]] +
[[] for in in range(self.ANCESTOR_DELAY)])
# List of lists of families of relatives in currently processed # List of lists of families of relatives in currently processed
# distance. We go up one level of distance in each round. # distance. We go up one level of distance in each round.
@ -137,7 +133,7 @@ class WhatNextGramplet(Gramplet):
# List of spouses to add to ancestors list so we track ancestors of # List of spouses to add to ancestors list so we track ancestors of
# spouses, too, but delayed as defined by the parameter. # spouses, too, but delayed as defined by the parameter.
spouses = [] spouses = []
spouses_queue = [[] for i in range(self.SPOUSE_DELAY)] spouses_queue = []
while (ancestors or families): while (ancestors or families):
# (Other) families of parents # (Other) families of parents
@ -160,12 +156,7 @@ class WhatNextGramplet(Gramplet):
if self.__counter >= self.TODOS_WANTED: if self.__counter >= self.TODOS_WANTED:
break break
# Now add the spouses of last round to the list
spouses_queue.append(spouses)
ancestors += spouses_queue.pop(0)
# Next generation of children # Next generation of children
spouses = []
for down in range(self.DOWNS_PER_UP): for down in range(self.DOWNS_PER_UP):
new_families = [] new_families = []
for family_group in families: for family_group in families:
@ -196,6 +187,8 @@ class WhatNextGramplet(Gramplet):
if self.__counter >= self.TODOS_WANTED: if self.__counter >= self.TODOS_WANTED:
break break
families = new_families families = new_families
spouses_queue.append(spouses)
spouses = []
if self.__counter >= self.TODOS_WANTED: if self.__counter >= self.TODOS_WANTED:
break break
if self.__counter >= self.TODOS_WANTED: if self.__counter >= self.TODOS_WANTED:
@ -231,7 +224,7 @@ class WhatNextGramplet(Gramplet):
new_families.append(new_family_group) new_families.append(new_family_group)
if self.__counter >= self.TODOS_WANTED: if self.__counter >= self.TODOS_WANTED:
break break
ancestors = new_ancestors ancestors = new_ancestors + spouses_queue.pop(0)
ancestors_queue.append(ancestors) ancestors_queue.append(ancestors)
families_queue.append(new_families) families_queue.append(new_families)
families += families_queue.pop(0) families += families_queue.pop(0)