Move the comment about the default seasons order
[experiments/season_math_test.git] / season_math_test.py
1 #!/usr/bin/env python
2 #
3 # season_math_test.py - convert from month to season and vice versa
4 #
5 # Copyright (C) 2015  Antonio Ospite <ao2@ao2.it>
6 #
7 # This program is free software. It comes without any warranty, to
8 # the extent permitted by applicable law. You can redistribute it
9 # and/or modify it under the terms of the Do What The Fuck You Want
10 # To Public License, Version 2, as published by Sam Hocevar. See
11 # http://sam.zoy.org/wtfpl/COPYING for more details.
12
13 # The code assumes meteorological seasons.
14 # See http://en.wikipedia.org/wiki/Season
15
16 seasons_norhtern = ["Winter", "Spring", "Summer", "Autumn"]
17 seasons_southern = ["Summer", "Autumn", "Winter", "Spring"]
18
19 # Default seasons order is the one for the Northern hemisphere
20 seasons = seasons_norhtern
21
22 months = ["January", "February", "March", "April", "May", "June", "July",
23           "August", "September", "October", "November", "December"]
24
25
26 def season(month):
27     if month < 0 or month > 11:
28         raise ValueError("Invalid month %d" % month)
29
30     # Rotate forward by one month because Winter starts in December,
31     # and group by three months because each season is three months long.
32     return ((month + 1) % 12) // 3
33
34
35 def first_month_of_season(season):
36     if season < 0 or season > 3:
37         raise ValueError("Invalid season %d" % season)
38
39     # Expand by three because a new season starts every 3 months,
40     # and rotate back by one month because December is the first
41     # month of Winter
42     return (season * 3 - 1) % 12
43
44
45 def test(function):
46     try:
47         eval(function)
48     except Exception as e:
49         print e.message
50
51
52 if __name__ == "__main__":
53     test("season(-1)")
54     test("season(12)")
55     test("first_month_of_season(-1)")
56     test("first_month_of_season(4)")
57
58     print
59
60     for i, m in enumerate(months):
61         j = season(i)
62         print "Month: %s. (%d) \tSeason: %s (%d)" % (m[0:3], i, seasons[j], j)
63
64     print
65
66     for i, s in enumerate(seasons):
67         j = first_month_of_season(i)
68         print "Season: %s (%d)\tFirst month: %s (%d)" % (s, i, months[j], j)