def test_sensor_pair_get_secondary(self): sensor_1 = Sensor('avhrr-m01', Period((2007, 1, 1), (2008, 1, 1))) sensor_2 = Sensor('avhrr-m02', Period((2007, 7, 1), (2008, 7, 1))) sensor_pair = SensorPair(sensor_1, sensor_2) secondary = sensor_pair.get_secondary() self.assertEqual('avhrr-m02', secondary.get_name())
def test_period_greater_than_equal(self): period_1 = Period((2007, 1, 1), (2008, 1, 1)) period_2 = Period((2007, 2, 4), (2007, 5, 17)) period_3 = Period((2007, 1, 1), (2008, 1, 1)) self.assertTrue(period_2 >= period_1) self.assertTrue(period_3 >= period_1) self.assertFalse(period_1 >= period_2)
def plotAccounts(ledger, accountLists, timeframe, xlabel, ylabel, labels, smooth=False, invert=None, totals=False): print(accountLists) if invert is None: invert = [False for _ in accountLists] dates = [ d.start for d in util.subdivideTime(timeframe, Period(config.month)) ] data = [ getQuery(ledger, accountList, timeframe, Period(config.month), invert=invert, totals=totals) for (accountList, invert) in zip(accountLists, invert) ] if smooth: dates = smoothDates(dates, N=smooth) data = [smoothData(d, N=smooth) for d in data] datePlot(dates, data, xlabel=xlabel, ylabel=ylabel, labels=labels)
def test_period_equality(self): period_1 = Period((2007, 1, 1), (2008, 1, 1)) period_2 = Period((2007, 1, 1), (2008, 1, 1)) self.assertTrue(period_1 == period_2) period_3 = Period((2009, 1, 1), (2010, 1, 1)) self.assertFalse(period_1 == period_3)
def test_sensor_pair_equality(self): sensor_1 = Sensor('atsr-en', Period((2007, 1, 1), (2008, 1, 1))) sensor_2 = Sensor('atsr-e2', Period((2007, 7, 1), (2008, 7, 1))) sensor_pair_1 = SensorPair(sensor_1, sensor_2) sensor_pair_2 = SensorPair(sensor_2, sensor_1) self.assertTrue(sensor_pair_1 == sensor_pair_2)
def test_period_inequality(self): period_1 = Period((2007, 1, 1), (2008, 1, 1)) period_2 = Period((2007, 3, 4), (2007, 5, 17)) self.assertTrue(period_1 != period_2) period_3 = Period((2007, 1, 1), (2008, 1, 1)) self.assertFalse(period_1 != period_3)
def test_period_less_than_equal(self): period_1 = Period((2007, 1, 1), (2008, 1, 1)) period_2 = Period((2007, 3, 4), (2007, 5, 17)) period_3 = Period((2007, 1, 1), (2008, 1, 1)) self.assertTrue(period_1 <= period_2) self.assertTrue(period_1 <= period_3) self.assertFalse(period_2 <= period_1)
def test_get_effective_production_period_one_sensor_with_workflow_period( self): w = Workflow('test', 2, 'config', Period((1994, 1, 1), (1994, 12, 31))) w.add_primary_sensor('avhrr.n11', (1988, 11, 8), (1994, 12, 31)) period = w._get_effective_production_period() self.assertEqual(Period((1994, 1, 1), (1994, 12, 31)), period)
def test_sensor_ge(self): sensor_1 = Sensor('atsr-en', Period((2007, 1, 1), (2008, 1, 1))) sensor_2 = Sensor('atsr-e2', Period((2008, 1, 1), (2009, 1, 1))) self.assertTrue(sensor_1 >= sensor_2) sensor_3 = Sensor('atsr-e2', Period((2009, 1, 1), (2010, 1, 1))) self.assertTrue(sensor_2 >= sensor_3) self.assertTrue(sensor_3 >= sensor_2)
def test_period_grow_not_intersecting(self): period_1 = Period((1980, 1, 1), (1980, 5, 31)) period_2 = Period((1980, 6, 1), (1980, 11, 1)) grown = period_1.grow(period_2) self.assertFalse(grown) self.assertEqual(Period((1980, 1, 1), (1980, 5, 31)), period_1)
def test_sensor_pair_construction_with_production_period(self): sensor_1 = Sensor('avhrr-n12', Period((2007, 1, 1), (2008, 1, 1))) sensor_2 = Sensor('avhrr-n13', Period((2007, 7, 1), (2008, 7, 1))) sensor_pair = SensorPair(sensor_1, sensor_2, Period((2007, 8, 1), (2007, 9, 1))) self.assertEqual(Period((2007, 8, 1), (2007, 9, 1)), sensor_pair.get_period())
def test_period_grow_inside(self): period_1 = Period((1980, 1, 1), (1980, 5, 31)) period_2 = Period((1980, 2, 1), (1980, 3, 1)) grown = period_1.grow(period_2) self.assertFalse(grown) self.assertEqual(Period((1980, 1, 1), (1980, 5, 31)), period_1)
def test_get_next_period_overlap_year(self): w = Workflow('test', 7) date = datetime.date(2001, 12, 26) next_period = w._get_next_period(date) self.assertEqual(Period((2001, 12, 27), (2001, 12, 31)), next_period) next_period = w._get_next_period(next_period.get_end_date()) self.assertEqual(Period((2002, 1, 1), (2002, 1, 7)), next_period)
def test_sensor_pair_construction_with_production_period_invalid(self): sensor_1 = Sensor('avhrr-n12', Period((2007, 1, 1), (2008, 1, 1))) sensor_2 = Sensor('avhrr-n13', Period((2007, 7, 1), (2008, 7, 1))) try: SensorPair(sensor_1, sensor_2, Period((2000, 8, 1), (2000, 9, 1))) self.fail("ValueError exoected") except ValueError: pass
def test_get_next_period_cut_at_month_end(self): w = Workflow('test', 10) date = datetime.date(2001, 9, 22) next_period = w._get_next_period(date) self.assertEqual(Period((2001, 9, 23), (2001, 9, 30)), next_period) next_period = w._get_next_period(next_period.get_end_date()) self.assertEqual(Period((2001, 10, 1), (2001, 10, 10)), next_period)
def test_sensor_pair_ge(self): sensor_1 = Sensor('atsr-en', Period((2007, 1, 1), (2008, 1, 1))) sensor_2 = Sensor('atsr-e2', Period((2007, 7, 1), (2008, 7, 1))) sensor_3 = Sensor('atsr-e1', Period((2007, 10, 1), (2008, 10, 1))) sensor_pair_1 = SensorPair(sensor_1, sensor_2) sensor_pair_2 = SensorPair(sensor_2, sensor_3) sensor_pair_3 = SensorPair(sensor_1, sensor_3) self.assertTrue(sensor_pair_1 >= sensor_pair_2) self.assertTrue(sensor_pair_1 >= sensor_pair_3)
def test_period_is_intersecting(self): period_1 = Period((1999, 7, 14), (2000, 2, 21)) period_2 = Period((1998, 3, 4), (1999, 10, 2)) self.assertTrue(period_1.is_intersecting(period_2)) self.assertTrue(period_2.is_intersecting(period_1)) period_3 = Period((1999, 7, 14), (2000, 2, 21)) period_4 = Period((2000, 2, 23), (2001, 1, 12)) self.assertFalse(period_3.is_intersecting(period_4)) self.assertFalse(period_4.is_intersecting(period_3))
def test_add_get_secondary_sensors_multiple(self): w = Workflow('test', 9) w.add_secondary_sensor('atsr-e2', '1996-06-01', '1997-01-01') w.add_secondary_sensor('atsr-e1', '1992-06-01', '1996-01-01') w.add_secondary_sensor('atsr-en', '1997-01-01', '1999-01-01') sensors = w._get_secondary_sensors() self.assertEqual([ Sensor('atsr-en', Period((1997, 1, 1), (1999, 1, 1))), Sensor('atsr-e2', Period((1996, 6, 1), (1997, 1, 1))), Sensor('atsr-e1', Period((1992, 6, 1), (1996, 1, 1))) ], sensors)
def test_add_get_primary_sensors_multiple(self): w = Workflow('test', 5) w.add_primary_sensor('atsr-e2', '1995-06-01', '1996-01-01') w.add_primary_sensor('atsr-e1', '1991-06-01', '1995-01-01') w.add_primary_sensor('atsr-en', '1996-01-01', '1998-01-01') sensors = w._get_primary_sensors() self.assertEqual([ Sensor('atsr-en', Period((1996, 1, 1), (1998, 1, 1))), Sensor('atsr-e2', Period((1995, 6, 1), (1996, 1, 1))), Sensor('atsr-e1', Period((1991, 6, 1), (1995, 1, 1))) ], sensors)
def test_sensor_pair_construction_invalid(self): sensor_1 = Sensor('avhrr-n14', Period((2007, 1, 1), (2008, 1, 1))) sensor_2 = Sensor('avhrr-n15', Period((2008, 1, 1), (2009, 1, 1))) try: SensorPair(sensor_1, sensor_2) self.fail() except exceptions.ValueError: pass try: SensorPair(sensor_2, sensor_1) except exceptions.ValueError: pass
def test_period_ctor(self): a = Period() self.assertEqual(a.start, 1) self.assertEqual(a.end, 1) self.assertEqual(a.rate, 0) b = Period(start=5, end=10, rate=10) self.assertEqual(b.start, 5) self.assertEqual(b.end, 10) self.assertEqual(b.rate, 10) with self.assertRaises(AssertionError): c = Period(start=0, end=10, rate=10) with self.assertRaises(AssertionError): c = Period(start=13, end=10, rate=10) with self.assertRaises(AssertionError): c = Period(start="time", end=10, rate=10) with self.assertRaises(AssertionError): c = Period(start=1, end=0, rate=10) with self.assertRaises(AssertionError): c = Period(start=1, end=13, rate=10) with self.assertRaises(AssertionError): c = Period(start=1, end="time", rate=10)
def parse_html_period_row(tr, crn): ''' Creates a Period from a table row. ''' ptype = get_td_text(tr, 3) if len(ptype) < 3: ptype = "???" # If days are empty, then we do not care about this period. days = list( map(lambda s: DAY_NUMS[s], filter(lambda s: len(s) > 0 and s != " ", get_td_text(tr, 6)))) if len(days) == 0: raise PeriodError("Period days are empty.") course_summary = ''.join(get_td_text(tr, 1).split()[1:]).strip() if len(course_summary) > 0: course_summaries[crn] = course_summary else: course_summary = course_summaries[crn] # 9:00 or 10:00 # Convert from H:MM to HH:MM start_time, end_time = determine_times(get_td_text(tr, 7), get_td_text(tr, 8)) location = tr.xpath('td[10]')[0].text_content().strip() return Period(crn, course_summary, ptype, days, start_time, end_time, location)
def parse(dataset='data/exam_comp_set1.exam'): with open(dataset) as f: indices = {} lines = [] for i, line in enumerate(f): if line.startswith('['): indices[determine_header(line)] = i lines.append(line.strip()) exams = parse_data(lines, indices[EXAMS_HEADER], indices[PERIOD_HEADER], lambda x: Exam(int(x[0]), [int(i) for i in x[1:]])) periods = parse_data( lines, indices[PERIOD_HEADER], indices[ROOM_HEADER], lambda x: Period(x[0], x[1], int(x[2]), int(x[3]))) rooms = parse_data(lines, indices[ROOM_HEADER], indices[PERIOD_CONSTRAINTS_HEADER], lambda x: Room(int(x[0]), int(x[1]))) period_constraints = parse_constraint( lines, indices[PERIOD_CONSTRAINTS_HEADER], indices[ROOM_CONSTRAINTS_HEADER], lambda x: PeriodHardConstraint( PeriodHardEnum.fromstring(x[1]), int(x[0]), int(x[2])), PeriodHardEnum) room_constraints = parse_constraint( lines, indices[ROOM_CONSTRAINTS_HEADER], indices[INSTITUTIONAL_CONSTRAINTS_HEADER], lambda x: RoomHardConstraint(RoomHardEnum.fromstring(x[1]), int(x[0])), RoomHardEnum) institutional_constraints = parse_constraint( lines, indices[INSTITUTIONAL_CONSTRAINTS_HEADER], len(lines), lambda x: InstitutionalConstraint( InstitutionalEnum.fromstring(x[0]), [int(i) for i in x[1:]]), InstitutionalEnum) return exams, periods, rooms, period_constraints, room_constraints, institutional_constraints
def test_sensor_pair_construction(self): sensor_1 = Sensor('avhrr-n12', Period((2007, 1, 1), (2008, 1, 1))) sensor_2 = Sensor('avhrr-n13', Period((2007, 7, 1), (2008, 7, 1))) sensor_3 = Sensor('avhrr-n14', Period((2008, 1, 1), (2009, 1, 1))) sensor_pair = SensorPair(sensor_1, sensor_2) self.assertEqual('avhrr-n12', sensor_pair.get_primary_name()) self.assertEqual('avhrr-n13', sensor_pair.get_secondary_name()) self.assertEqual(Period((2007, 7, 1), (2008, 1, 1)), sensor_pair.get_period()) sensor_pair = SensorPair(sensor_3, sensor_2) self.assertEqual('avhrr-n14', sensor_pair.get_primary_name()) self.assertEqual('avhrr-n13', sensor_pair.get_secondary_name()) self.assertEqual(Period((2008, 1, 1), (2008, 7, 1)), sensor_pair.get_period())
def test_period_construction(self): period_1 = Period((2007, 1, 1), '2008-01-01') self.assertEqual(datetime.date(2007, 1, 1).isoformat(), period_1.get_start_date().isoformat()) self.assertEqual(datetime.date(2008, 1, 1).isoformat(), period_1.get_end_date().isoformat()) period_2 = Period('2007-02-01', (2008, 1, 2)) self.assertEqual(datetime.date(2007, 2, 1).isoformat(), period_2.get_start_date().isoformat()) self.assertEqual(datetime.date(2008, 1, 2).isoformat(), period_2.get_end_date().isoformat()) period_3 = Period((2007, 3, 3), datetime.date(2007, 3, 5)) self.assertEqual(datetime.date(2007, 3, 3).isoformat(), period_3.get_start_date().isoformat()) self.assertEqual(datetime.date(2007, 3, 5).isoformat(), period_3.get_end_date().isoformat()) period_4 = Period(datetime.date(1979, 12, 31), (1980, 2, 14)) self.assertEqual(datetime.date(1979, 12, 31).isoformat(), period_4.get_start_date().isoformat()) self.assertEqual(datetime.date(1980, 2, 14).isoformat(), period_4.get_end_date().isoformat())
def test_add_get_primary_sensors_version(self): w = Workflow('test', 5) w.add_primary_sensor('atsr-e2', '1995-06-01', '1996-01-01', 'version_5') self.assertEqual([ Sensor('atsr-e2', Period((1995, 6, 1), (1996, 1, 1)), 'version_5') ], w._get_primary_sensors())
def parse_periods(f): nr_periods = parse_int_from_header(f.readline()) periods = {} for i in range(nr_periods): vals = f.readline().split((',')) periods[i] = Period(vals[0], vals[1], int(vals[2]), int(vals[3])) return periods
def test_get_effective_production_period_many_sensors(self): w = Workflow('test', 2) w.add_primary_sensor('avhrr.n11', (1988, 11, 8), (1994, 12, 31)) w.add_primary_sensor('avhrr.n12', (1991, 9, 16), (1998, 12, 14)) w.add_secondary_sensor('avhrr.n10', (1986, 11, 17), (1991, 9, 16)) period = w._get_effective_production_period() self.assertEqual(Period((1988, 11, 8), (1991, 9, 16)), period)
def getBudgetDict(budgetFilename: Path) -> Dict: with budgetFilename.open("r") as f: budgetDict = yaml.load(f, Loader=yaml.SafeLoader) assert config.periodIdentifier in budgetDict budgetDict[config.periodIdentifier] = Period(budgetDict[config.periodIdentifier]) assert config.accountsIdentifier in budgetDict for (k, v) in budgetDict[config.accountsIdentifier].items(): budgetDict[config.accountsIdentifier][k] = Amount(v.replace(config.currency, "")) return budgetDict
def add_primary_sensor(self, name, start_date, end_date, version=''): """ :type name: str """ period = Period(start_date, end_date) for sensor in self._get_primary_sensors(): if sensor.get_name() == name and sensor.get_period().is_intersecting(period): raise ValueError("Periods of sensor '" + name + "' must not intersect.") if version == '': self.primary_sensors.add(Sensor(name, period)) else: self.primary_sensors.add(Sensor(name, period, version))