reps & time graphs

This commit is contained in:
Damien Elmes 2011-03-25 14:56:05 +09:00
parent 60ef1ec49f
commit 6ec2500eb8
2 changed files with 47 additions and 28 deletions

View file

@ -12,7 +12,8 @@ dueCumulC = "#ff8080"
reviewNewC = "#80ccff" reviewNewC = "#80ccff"
reviewYoungC = "#3377ff" reviewYoungC = "#3377ff"
reviewMatureC = "#0000ff" reviewMatureC = "#0000ff"
reviewTimeC = "#0fcaff" lrnTimeC = "#0fcaff"
revTimeC = "#ffcaff"
easesNewC = "#80b3ff" easesNewC = "#80b3ff"
easesYoungC = "#5555ff" easesYoungC = "#5555ff"
easesMatureC = "#0f5aff" easesMatureC = "#0f5aff"
@ -73,32 +74,52 @@ group by due order by due""" % self._limit(),
# Reps and time spent # Reps and time spent
###################################################################### ######################################################################
def _done(self): def repsGraph(self):
return self._calcStats()
dayReps = self._getDayReps() lrn = []
# fixme: change 0 to correct offset yng = []
todaydt = datetime.datetime.utcfromtimestamp( mtr = []
time.time() - 0).date() for row in self._stats['done']:
for dest, source in [("dayRepsNew", 0), lrn.append((row[0], row[1]))
("dayRepsYoung", 3), yng.append((row[0], row[2]))
("dayRepsMature", 2)]: mtr.append((row[0], row[3]))
self.stats[dest] = dict( txt = self._graph(id="due", data=[
map(lambda dr: (-(todaydt - datetime.date( dict(data=lrn, bars=dict(show=True, barWidth=0.8, align="center"),
*(int(x)for x in dr[1].split("-")))).days, dr[source]), dayReps)) color=reviewNewC, label=_("Learning")),
self.stats['dayTimes'] = dict( dict(data=yng, bars=dict(show=True, barWidth=0.8, align="center"),
map(lambda dr: (-(todaydt - datetime.date( color=reviewYoungC, label=_("Young")),
*(int(x)for x in dr[1].split("-")))).days, dr[4]/60.0), dayReps)) dict(data=mtr, bars=dict(show=True, barWidth=0.8, align="center"),
color=reviewMatureC, label=_("Mature")),
])
return txt
def _getDayReps(self): def timeGraph(self):
self._calcStats()
lrn = []
rev = []
for row in self._stats['done']:
lrn.append((row[0], row[4]))
rev.append((row[0], row[5]))
txt = self._graph(id="due", data=[
dict(data=lrn, bars=dict(show=True, barWidth=0.8, align="center"),
color=lrnTimeC, label=_("Learning")),
dict(data=rev, bars=dict(show=True, barWidth=0.8, align="center"),
color=revTimeC, label=_("Reviews")),
])
self.save(txt)
return txt
def _done(self):
# without selective for now
return self.deck.db.all(""" return self.deck.db.all("""
select select
count() as combinedNewReps, cast((time/1000 - :cut) / 86400.0 as int)+1 as day,
date(time/1000-:off, "unixepoch") as day, sum(case when type = 0 then 1 else 0 end), -- lrn count
sum(case when lastIvl > 21 then 1 else 0 end) as matureReps, sum(case when type = 1 and lastIvl < 21 then 1 else 0 end), -- yng count
count() - sum(case when rep = 1 then 1 else 0 end) as combinedYoungReps, sum(case when type = 1 and lastIvl >= 21 then 1 else 0 end), -- mtr count
sum(taken/1000) as reviewTime from revlog sum(case when type = 0 then taken/1000 else 0 end)/3600.0, -- lrn time
group by day order by day sum(case when type = 1 then taken/1000 else 0 end)/3600.0 -- rev time
""", off=0) from revlog group by day order by day""", cut=self.deck.sched.dayCutoff)
# Intervals # Intervals
###################################################################### ######################################################################

View file

@ -30,11 +30,9 @@ def test_graphs():
assert g.cumDueGraph() assert g.cumDueGraph()
assert g.ivlGraph() assert g.ivlGraph()
assert g.easeGraph() assert g.easeGraph()
assert g.repsGraph()
assert g.timeGraph()
return return
g.nextDue()
g.workDone() g.workDone()
g.timeSpent() g.timeSpent()
g.cumulativeDue()
g.ivlPeriod()
g.addedRecently() g.addedRecently()
g.easeBars()