Пример #1
0
def train_candidate_model(model: CandidateModel, process: ElectionConstructor,
                          population: NDPopulation, max_steps: int):
    timings = Timings()
    stats = ModelStats()
    first = True
    while model.global_step < max_steps:
        winner, candidates, balance = run_sample_election(
            model, process, population, True)
        for i in range(len(candidates)):
            model.add_sample_from_candidates(candidates[i], candidates[0:i],
                                             winner)

        if model.ready():
            if first:
                print("starting to train")
                first = False

            stats.update(winner, candidates, balance)
            for i in range(5):
                with timings.time_block("model.train"):
                    model.train(128)

            if model.global_step % 1000 == 0:
                stats.print(process.name, model.global_step)
                if model.global_step < max_steps:
                    stats.reset()

    timings.print()
Пример #2
0
 def currentWeekMenu_(self, sender):
     today = Timings.workStartDateTime()
     weekNumber = int(today.strftime("%w"))
     if weekNumber == 0: 
         weekNumber = 7
     d = today - datetime.timedelta(days=weekNumber - 1)
     self.setDate(d)
     self.updateState()
Пример #3
0
 def add(self, task, projectName=None):
     date = Timings.now()
     
     if self.taskType(task) != "work":
         projectName = None
         
     attributes = self.processTask(date, task, projectName)
     DataManager.writeTask(date, task, projectName, firstToday=len(self.tasks) == 1)
     return attributes
Пример #4
0
def check_stats(stats: ModelStats, model: CandidateAgent,
                process: ElectionConstructor, population: NDPopulation):
    results = []
    timings = Timings()
    for i in range(1000):
        winner, candidates, balance = run_sample_election(model,
                                                          process,
                                                          population,
                                                          train=False)
        stats.update(winner, candidates, balance)
Пример #5
0
class Tasks(object):
    
    def __init__(self):
        self.timings = Timings()
        self.tasks = []
        for date, task, projectName in DataManager.getAfterDate(Timings.workStartDateTime()):
            self.processTask(date, task, projectName)
        
    def processTask(self, date, task, projectName):
        spentSeconds = self.timings.count(date, self.taskType(task))
        attributes = (date, task, projectName, spentSeconds, self.taskType(task))
        self.tasks.append(attributes)
        return attributes
        
    def dayStarted(self):
        """Return True if working day started else False"""
        return bool(len(self.tasks))
    
    def add(self, task, projectName=None):
        date = Timings.now()
        
        if self.taskType(task) != "work":
            projectName = None
            
        attributes = self.processTask(date, task, projectName)
        DataManager.writeTask(date, task, projectName, firstToday=len(self.tasks) == 1)
        return attributes
        
    def setCurrentTask(self, task):
        self.timings.setCurrentTaskType(self.taskType(task))
        
    @property
    def taskList(self):
        return self.tasks
    
    @staticmethod        
    def taskType(taskString):
        return None if taskString.strip() == "" or taskString.find("***") != -1 \
                    else "work" if taskString.find("**") == -1 else "slack"
Пример #6
0
 def __init__(self, fromDate, toDate):
     self.timings = Timings()
     self._fromDate = fromDate
     self._toDate = toDate
Пример #7
0
class Statistics(object):
    
    _avgWork = 0
    _avgSlacking = 0
    _maxValue = 0
    
    def __init__(self, fromDate, toDate):
        self.timings = Timings()
        self._fromDate = fromDate
        self._toDate = toDate
        
    def _countAttrib(self, res):
        """Count basic attributes(average work, average slacking and maximum value)"""
        days = (self._toDate - self._fromDate).days
        self._avgWork = int(self.timings.spentSeconds / days)
        self._avgSlacking = int(self.timings.slackingSeconds / days)
        if res:
            self._maxValue = max(res)
        
    def _countObject(self, objType, targetAction):
        """Generic function for calculating projects data or slacking statistics"""
        self._data = DataManager.getByRange(self._fromDate, self._toDate)
        res = {}

        for date, task, projectName in self._data:
            if task == "__start__":
                self.timings.setPrevDate(None)
            objKey = projectName if objType == "project" else task
            
            spentSeconds = self.timings.count(date, Tasks.taskType(task))

            if Tasks.taskType(task) != targetAction:
                self.timings.setPrevDate(date)
                continue

            if spentSeconds:
                if objKey not in res:
                    res[objKey] = spentSeconds
                else:
                    res[objKey] += spentSeconds
                    
        self._countAttrib(res.values())
        if res:
            return sorted(res.iteritems(), key=lambda item:item[1], reverse=True)
        else:
            return []
        
    def countProjects(self):
        """Count project statistics"""
        return self._countObject("project", "work")
            
    def countSlacking(self):
        """Count slacking statistics"""
        return self._countObject("task", "slack")
            
    def countTasks(self):
        """Count tasks statistics divided by projects"""
        self._data = DataManager.getByRange(self._fromDate, self._toDate)
        res = {}
        for date, task, projectName in self._data:
            if task == "__start__":
                self.timings.setPrevDate(None)
            
            spentSeconds = self.timings.count(date, Tasks.taskType(task))
            
            if Tasks.taskType(task) != "work":
                continue
                
            if spentSeconds:
                if projectName not in res:
                    res[projectName] = {}
                    
                if task not in res[projectName]:
                    res[projectName][task] = spentSeconds
                else:
                    res[projectName][task] += spentSeconds
        self._countAttrib([v for k in res for v in res[k].values()])
        if res:
            ret = {}
            for k in res.keys():
                ret[k] = sorted(res[k].iteritems(), key=lambda item:item[1], reverse=True)
            return ret
        else:
            return {}
        
    @property
    def maxValue(self):
        """Maximum value of calculated object (project /task / slackings)"""
        return self._maxValue
    
    @property
    def totalWork(self):
        """Total work done"""
        return self.timings.spentSeconds
        
    @property
    def avgWork(self):
        """Average work per day"""
        return self._avgWork
    
    @property
    def totalSlacking(self):
        """Total slacking"""
        return self.timings.slackingSeconds
    
    @property
    def avgSlacking(self):
        """Average slacking per day"""
        return self._avgSlacking
Пример #8
0
 def yeaterdayMenu_(self, sender):
     self.startDate = Timings.workStartDateTime() - datetime.timedelta(days=1)
     self.endDate = Timings.workStartDateTime() 
     self.updateState()
Пример #9
0
 def todayMenu_(self, sender):
     self.setDate(Timings.workStartDateTime())
     self.updateState()
Пример #10
0
 def setDate(self, date):
     self.startDate = date
     self.endDate = Timings.workStartDateTime() + datetime.timedelta(days=1)
Пример #11
0
 def showCustom_(self, sender):
     self.startDate = Timings.combineDateWithTime(nsDateToDatetime(self.dpkrFrom.dateValue()))
                               
     self.endDate = Timings.combineDateWithTime(nsDateToDatetime(self.dpkrTo.dateValue()) + 
                                                datetime.timedelta(days=1))
     self.generateChart()
Пример #12
0
 def days10_(self, sender):
     self.setDate(Timings.workStartDateTime() - datetime.timedelta(days=10))
     self.updateState()
Пример #13
0
 def currentMonthMenu_(self, sender):
     today = Timings.workStartDateTime()
     d = today - datetime.timedelta(days=int(today.strftime("%d")) - 1)
     self.setDate(d)
     self.updateState()
Пример #14
0
 def __init__(self):
     self.timings = Timings()
     self.tasks = []
     for date, task, projectName in DataManager.getAfterDate(Timings.workStartDateTime()):
         self.processTask(date, task, projectName)