Athenian Conciliar Calendars¶
This section will cover prytanies.prytany_calendar()
, the function for
generating specific festival calendars
Athens had a second calendar, called the conciliar calendar, by which public business was dated. Instead of months, this calendar had πρυτανείαι, “prytanies” or “presidencies.” Each of the phulai or “tribes” presided, as the prutaneis or “presidents,” over the council for one prytany each year.
Conciliar calendar functions are in a sub-package
heniautos.prytanies
and the examples below assume you have
imported this package like so:
>>> import heniautos as ha
>>> import heniautos.prytanies as pryt
The prytany_calendar()
is analogous to
heniautos.athenian_festival_calendar()
. The simplest
invocation take a single year
parameter and returns a tuple
of
heniautos.PrytanyDay
objects, which are similar to
heniautos.FestivalDay
objects:
>>> pryt_year = pryt.prytany_calendar(-406)
>>> pryt_year[0]
PrytanyDay(jdn=1572957, prytany_index=1, prytany=<Prytanies.I: 1>, prytany_length=37, day=1, doy=1, year='BCE 407/406', year_length=366, astronomical_year=-406)
The first heniautos.PrytanyDay
object in the above example has the
following properties and values:
Property |
Value |
Meaning |
---|---|---|
jdn |
1572957 |
Corresponding Julian Day Number |
prytany_index |
1 |
Order of prytany in the year |
prytany |
Constant representing the prytany |
|
prytany_length |
37 |
Length of this prytany |
day |
1 |
Day of the prytany |
doy |
1 |
Day of the year |
year |
‘BCE 407/406’ |
Julian year(s) corresponding to the conciliar year |
year_length |
366 |
Length of this conciliar year |
astronomical_year |
-406 |
Astronomical year |
Instead of month constants there are prytany constants,
Prytanies
, and the prytanies are designated by roman
numerals, which you can get from prytany_label()
:
>>> pryt_year = pryt.prytany_calendar(-406)
>>> pryt.prytany_label(pryt_year[0].prytany)
'I'
Or you can simply use the Prytany
object as an int
>>> pryt_year = pryt.prytany_calendar(-406)
>>> int(pryt_year[0].prytany)
1
All the date formatting functions, like heniautos.as_julian()
and as_gregorian()
work just the same on the jdn
property:
>>> pryt_year = pryt.prytany_calendar(-406)
>>> ha.as_julian(pryt_year[0].jdn)
'BCE 0407-Jul-10'
>>> ha.as_gregorian(pryt_year[0].jdn)
'BCE 0407-Jul-05'
Just as the festival calendar functions return a tuple consisting of
one heniautos.FestivalDay
for each day,
prytany_calendar()
returns a tuple of one
heniautos.PrytanyDay
for each day. This can be grouped into
prytanies with by_prytanies()
:
>>> pryt_year = pryt.prytany_calendar(-406)
>>> len(pryt_year)
366
>>> pryts = pryt.by_prytanies(pryt_year)
>>> len(pryts)
10
>>> pryts[0][0].prytany
<Prytanies.I: 1>
>>> pryts[1][0].prytany
<Prytanies.II: 2>
Types of Conciliar Calendars¶
The conciliar calendar changed over time, so the length and the number of prytanies depends on the year and the number of tribes that existed at the time. prytany_calendar()
has a parameter, pryt_type
, to specify this. The default, Prytany.AUTO
will decide based on the year:
Years |
Constant |
Prytanies |
Days |
---|---|---|---|
before 508 |
Raises
|
||
508–376 |
10 |
366 |
|
375-307 |
10 |
354/384 |
|
306–224 |
12 |
354/384 |
|
223–201 |
13 |
354/384 |
|
200–101 |
12 |
354/384 |
|
after 101 |
10 |
354/384 |
Use prytany_type()
to determine the default type of prytanies
for any year:
>>> pryt.prytany_type(-370)
<Prytany.ALIGNED_10: 2>
Since the conciliar year was created to manage the business of the
democratic ouncil and Assembly, it certainly did not exist before the
establishment of democracy in 508 BCE. prytany_calendar()
with Prytany.AUTO
will therefore raise an exception if you
give it a year before then.
It almost certainly was not established that early—the first mentions
of prytanies occur in inscriptions which are probably from the 450s
(IG I³ 7, IG I³ 9, IG I³ 10), but Prytany.AUTO
will treat a
date between 508 and 376 as Prytany.QUASI_SOLAR
. This is
the most complicated kind of prytany, so we will describe it last.
The “aligned” types all mean the the conciliar year began and ended at the same time as the festival year. The length of each prytany depends on the number of prytanies at the time, and whether the year was ordinary (354 days) or intercalary (384) days
Ten Prytanies¶
For Prytany.ALIGNED_10
, there are ten prytanies that must
be distributed over 354 or 384 days. Since these numbers do not divide
evenly by 10, the remainder was distributed over a few prytanies so
that four had 36 days and the other six 35. Aristotle tells us that
the longer prytanies came first, followed by the shorter (AthPol
43.2). This is called the “Rule of Aristotle”:
>>> pryt_year = pryt.prytany_calendar(-347)
>>> pryts = pryt.by_prytanies(pryt_year)
>>> for p in pryts:
... (p[0].prytany, len(p))
...
(<Prytanies.I: 1>, 36)
(<Prytanies.II: 2>, 36)
(<Prytanies.III: 3>, 36)
(<Prytanies.IV: 4>, 36)
(<Prytanies.V: 5>, 35)
(<Prytanies.VI: 6>, 35)
(<Prytanies.VII: 7>, 35)
(<Prytanies.VIII: 8>, 35)
(<Prytanies.IX: 9>, 35)
(<Prytanies.X: 10>, 35)
While an intercalary festival year had thirteen months rather than twelve, the conciliar still had ten prytanies, distributed now over 384 days into four prytanies of 39 days and six of 38:
>>> pryt_year = pryt.prytany_calendar(-348)
>>> pryts = pryt.by_prytanies(pryt_year)
>>> for p in pryts:
... (p[0].prytany, len(p))
...
(<Prytanies.I: 1>, 39)
(<Prytanies.II: 2>, 39)
(<Prytanies.III: 3>, 39)
(<Prytanies.IV: 4>, 39)
(<Prytanies.V: 5>, 38)
(<Prytanies.VI: 6>, 38)
(<Prytanies.VII: 7>, 38)
(<Prytanies.VIII: 8>, 38)
(<Prytanies.IX: 9>, 38)
(<Prytanies.X: 10>, 38)
Twelve Prytanies¶
In 306, two more tribes were added. Under twelve tribes, prytanies had
29 and 30 days in ordinary years (Prytany.ALIGNED_12
), just
like the festival calendar. We generally believe that these prytanies
followed the pattern of hollow and full months exactly. If you were to
compare this conciliar calendar example for the year 300 with the
festival calendar generated for the same year, you would see the 29-
and 30-day months and prytanies were the same:
>>> pryt_year = pryt.prytany_calendar(-299)
>>> pryts = pryt.by_prytanies(pryt_year)
>>> for p in pryts:
... (p[0].prytany, len(p))
...
(<Prytanies.I: 1>, 29)
(<Prytanies.II: 2>, 29)
(<Prytanies.III: 3>, 30)
(<Prytanies.IV: 4>, 29)
(<Prytanies.V: 5>, 30)
(<Prytanies.VI: 6>, 30)
(<Prytanies.VII: 7>, 29)
(<Prytanies.VIII: 8>, 30)
(<Prytanies.IX: 9>, 30)
(<Prytanies.X: 10>, 29)
(<Prytanies.XI: 11>, 30)
(<Prytanies.XII: 12>, 29)
However, there is another possibility. A strict application of the
“Rule of Aristotle” would mean that the 30-day prytanies would all
come at the beginning of the year, even if this meant the months and
prytanies were only slighltly out of sync. This can be forced with
rule_of_aristotle=True
, which makes the conciliar calendar of 300
look like this:
>>> pryt_year = pryt.prytany_calendar(-299, rule_of_aristotle=True)
>>> pryts = pryt.by_prytanies(pryt_year)
>>> for p in pryts:
... (p[0].prytany, len(p))
...
(<Prytanies.I: 1>, 30)
(<Prytanies.II: 2>, 30)
(<Prytanies.III: 3>, 30)
(<Prytanies.IV: 4>, 30)
(<Prytanies.V: 5>, 30)
(<Prytanies.VI: 6>, 30)
(<Prytanies.VII: 7>, 29)
(<Prytanies.VIII: 8>, 29)
(<Prytanies.IX: 9>, 29)
(<Prytanies.X: 10>, 29)
(<Prytanies.XI: 11>, 29)
(<Prytanies.XII: 12>, 29)
In intercalary years, prytanies are uniformly 32-days long:
>>> pryt_year = pryt.prytany_calendar(-300)
>>> pryts = pryt.by_prytanies(pryt_year)
>>> for p in pryts:
... (p[0].prytany, len(p))
...
(<Prytanies.I: 1>, 32)
(<Prytanies.II: 2>, 32)
(<Prytanies.III: 3>, 32)
(<Prytanies.IV: 4>, 32)
(<Prytanies.V: 5>, 32)
(<Prytanies.VI: 6>, 32)
(<Prytanies.VII: 7>, 32)
(<Prytanies.VIII: 8>, 32)
(<Prytanies.IX: 9>, 32)
(<Prytanies.X: 10>, 32)
(<Prytanies.XI: 11>, 32)
(<Prytanies.XII: 12>, 32)
Thirteen Tribes¶
From 223 to 201 there were thirteen tribes
(Prytany.ALIGNED_13
). Prytanies are 28 or 27 days long in
ordinary years and the Rule of Aristotle always applies
>>> pryt_year = pryt.prytany_calendar(-219)
>>> pryts = pryt.by_prytanies(pryt_year)
>>> for p in pryts:
... (p[0].prytany, len(p))
...
(<Prytanies.I: 1>, 28)
(<Prytanies.II: 2>, 28)
(<Prytanies.III: 3>, 28)
(<Prytanies.IV: 4>, 27)
(<Prytanies.V: 5>, 27)
(<Prytanies.VI: 6>, 27)
(<Prytanies.VII: 7>, 27)
(<Prytanies.VIII: 8>, 27)
(<Prytanies.IX: 9>, 27)
(<Prytanies.X: 10>, 27)
(<Prytanies.XI: 11>, 27)
(<Prytanies.XII: 12>, 27)
(<Prytanies.XIII: 13>, 27)
In the intercalary years the thirteen prytanies are 29 and 30 days. By default they follow the festival months:
>>> pryt_year = pryt.prytany_calendar(-218)
>>> pryts = pryt.by_prytanies(pryt_year)
>>> for p in pryts:
... (p[0].prytany, len(p))
...
(<Prytanies.I: 1>, 29)
(<Prytanies.II: 2>, 30)
(<Prytanies.III: 3>, 29)
(<Prytanies.IV: 4>, 30)
(<Prytanies.V: 5>, 29)
(<Prytanies.VI: 6>, 30)
(<Prytanies.VII: 7>, 29)
(<Prytanies.VIII: 8>, 30)
(<Prytanies.IX: 9>, 29)
(<Prytanies.X: 10>, 30)
(<Prytanies.XI: 11>, 30)
(<Prytanies.XII: 12>, 29)
(<Prytanies.XIII: 13>, 30)
But you can choose to apply the Rule of Aristotle:
>>> pryt_year = pryt.prytany_calendar(-218, rule_of_aristotle=True)
>>> pryts = pryt.by_prytanies(pryt_year)
>>> for p in pryts:
... (p[0].prytany, len(p))
...
(<Prytanies.I: 1>, 30)
(<Prytanies.II: 2>, 30)
(<Prytanies.III: 3>, 30)
(<Prytanies.IV: 4>, 30)
(<Prytanies.V: 5>, 30)
(<Prytanies.VI: 6>, 30)
(<Prytanies.VII: 7>, 30)
(<Prytanies.VIII: 8>, 29)
(<Prytanies.IX: 9>, 29)
(<Prytanies.X: 10>, 29)
(<Prytanies.XI: 11>, 29)
(<Prytanies.XII: 12>, 29)
(<Prytanies.XIII: 13>, 29)
The 2nd Century and Beyond¶
In 200 number of prytanies was reduced to 12 again , which lasted for
the rest of the 2nd century (Prytany.ALIGNED_12
).
About the beginning of the first century BCE, the Greek lunisolar
calendar was replaced by the Julian calendar. From 101 BCE on,
Prytany.AUTO
will generate 10-tribe
(Prytany.ALIGNED_10
) prytanies. At this point the Greek
calendars are purely imaginary, and the ten tribe calendar is probably
the most interesting if you want to generate a hypthetical calendar
for, say, the current year.
The Quasi-Solar Conciliar Year¶
In the 5th century BCE the conciliar year was 366 days long: six 37-day prytanies and four 36-day. This is sometimes called “quasi-solar” since it is almost a true solar year (some have theorized that it was truly solar–365 days with an occasional leap day–but all the best evidence indicates 366). We can’t say for certain when Athenians began to use this, or when they changed to the “aligned years” except that the quasi-solar year was probably in use in the 450s when inscriptions first mention prytanies (IG I³ 7, IG I³ 9, IG I³ 10), and when still in use in 407 we have the last inscription with evidence for it (IG I³ 377).
Prytany.AUTO
assigns Prytany:QUASI_SOLAR
to the
year 508 to 376. 508 is the earliest it could have been in use
because democracy was established at Athens that year and the calendar
was created to manage the business of the democratic Assembly. The
Assembly almost certainly did not function yet as it would after the
450s, 508 will do for lack of a better starting year. Since, the last
year that the quasi-solar calendar was in use is 407 and the first
year we have evidence for the “aligned calendar” is 346 (IG XII,6
1.261), 376 is chosen simply as midway between the two. For serious
use then, be very skeptical of concilar calendars generated with
Prytany.AUTO
before about 435 and between 407 and 346.
We also are not certain of the first and/or last day of any particular quasi-solar calendar year. The “aligned years” can be calculated, like the festival years, from solstices and new moons. Instead we need a “calendar equation” that will tell us the same day on the festival and conciliar calendars. The best such equation comes from IG I³ 377 lines 24–25 and tells that in 407 BCE Hekatombaiṓn 20 was also Prytany 1.20 which in turn means that Hek 1 = Prytany 1.1 (this looks the same as the “aligned” calendar but is just a coincidence). Heniautos calculates that Hek 1, 407 was July 10
>>> ha.as_julian(ha.athenian_festival_calendar(-406)[0].jdn)
'BCE 0407-Jul-10'
By default, this is as the date from which all
Prytany.QUASI_SOLAR
calendars are calculated:
>>> ha.as_julian(pryt.prytany_calendar(-406)[0].jdn)
'BCE 0407-Jul-10'
Based in this, the beginning of the next conciliar year would be 366 days later, while the beginning of the next festival year would be 354 days later (and thus they would be out of sync again)
>>> ha.as_julian(pryt.prytany_calendar(-405)[0].jdn)
'BCE 0406-Jul-11'
>>> ha.as_julian(ha.athenian_festival_calendar(-405)[0].jdn)
'BCE 0406-Jun-30'
You can change this reference point by providing a JDN as the
pryt_start parameter of prytany_calendar()
. This JDN will
be treated as Prytany 1.1 in whatever year it occurs, and all other
Prytany.QUASI_SOLAR
conciliar years will begin some
multiple fo 366 days before or after this. The default value is
1572957 (Hek 1, 407 = July 10, 407 BCE)
>>> pryt.prytany_calendar(-406)[0].jdn
1572957
If you wanted to see what the conciliar calendar would look like if it began 10 days earlier that this, you would assign 1572847 to pryt_start:
>>> ha.as_julian(pryt.prytany_calendar(-406, pryt_start=1572947)[0].jdn)
'BCE 0407-Jun-30'
Lunar and Solar Offsets¶
Because a festival calendar must usually be calculated in order to
match a conciliar calendar to it, prytany_calendar()
, and
other prytany functions, have v_off and s_off parameters, like
heniautos.athenian_festival_calendar()
(see
First Day of the Month and Day of the Solstice)
Finding Conciliar Calendar Dates¶
There are functions for finding concilar calendar dates by JDN, Julian, and Gregorian dates, simlar to the festival calendar (see Finding Festival Calendar Dates).
>>> pryt_day = pryt.jdn_to_prytany_day(1575526)
>>> pryt_day
PrytanyDay(jdn=1575526, prytany_index=1, prytany=<Prytanies.I: 1>, prytany_length=37, day=8, doy=8, year='BCE 400/399', year_length=366, astronomical_year=-399)
>>> ha.as_julian(pryt_day)
'BCE 0400-Jul-22'
>>> julian_day = pryt.julian_to_prytany_day(-399, 7, 22)
>>> julian_day
PrytanyDay(jdn=1575526, prytany_index=1, prytany=<Prytanies.I: 1>, prytany_length=37, day=8, doy=8, year='BCE 400/399', year_length=366, astronomical_year=-399)
>>> gregorian_day = pryt.gregorian_to_prytany_day(-399, 7, 22)
>>> gregorian_day
PrytanyDay(jdn=1575531, prytany_index=1, prytany=<Prytanies.I: 1>, prytany_length=37, day=13, doy=13, year='BCE 400/399', year_length=366, astronomical_year=-399)