Firdaria (Planetary Periods) #
FirdariaFactory computes the firdaria, a Persian time-lord technique that divides life into a fixed sequence of planetary periods. The sequence depends on the chart’s sect: diurnal charts begin with the Sun (10 years), nocturnal charts begin with the Moon (9 years). The full 75-year cycle runs through the seven classical planets and the two lunar nodes.
Each major period (except the nodes) is subdivided into seven sub-periods, one per classical planet, beginning from the major lord itself and cycling through the Chaldean order.
All date arithmetic runs on Julian Days over the subject’s local wall-clock anchor, so deep-BCE births are fully supported. A firdaria “year” is the Julian year of 365.25 days.
Basic Usage #
from kerykeion import AstrologicalSubjectFactory, FirdariaFactory
subject = AstrologicalSubjectFactory.from_birth_data(
"Jane", 1990, 6, 15, 12, 0,
lng=12.4964, lat=41.9028, tz_str="Europe/Rome", online=False
)
firdaria = FirdariaFactory.from_subject(subject, target_date="2026-06-04")
print(f"Sect: {'Day' if firdaria.is_diurnal else 'Night'}")
if firdaria.current:
print(f"Current lord: {firdaria.current.lord} ({firdaria.current.years} years)")
if firdaria.current_sub:
print(f"Current sub-lord: {firdaria.current_sub.lord}")
Methods #
from_subject(subject, *, target_date=None, life_cap_years=120) #
Build the firdaria timeline for a subject.
| Parameter | Type | Default | Description |
|---|---|---|---|
subject |
AstrologicalSubjectModel |
– | The natal chart. Requires a real sect (is_diurnal must be a boolean). Midpoint composites are rejected. |
target_date |
str (ISO date/datetime) or None | None | Date the current period is resolved against. Astronomical year numbering accepted. When omitted, now in the subject’s timezone. |
life_cap_years |
int | 120 | How far the timeline extends, in years of life. Values below 1 are raised to 1. Periods are emitted whole, so the last one can end past the cap. |
Returns: FirdariaModel
Raises: KerykeionException when the sect is unresolvable, the birth moment is missing, or target_date is unparseable.
Data Models #
FirdariaModel #
| Field | Type | Description |
|---|---|---|
is_diurnal |
bool |
Sect the sequence was chosen from. |
periods |
list[FirdariaPeriodModel] |
Major periods from birth, in order. The sequence is unrolled until the life cap is reached, and the period that reaches it is kept whole: with the default cap of 120 a diurnal timeline ends at age 126. |
current |
FirdariaPeriodModel | None |
The major period containing the target date, if any. |
current_sub |
FirdariaSubPeriodModel | None |
The sub-period containing the target date, if any. |
FirdariaPeriodModel #
| Field | Type | Description |
|---|---|---|
lord |
str |
Ruler of the period (classical planet or North_Node / South_Node). |
years |
int |
Length of the period in firdaria years. |
age_start |
int |
Age at which the period begins. |
age_end |
int |
Age at which the period ends. |
start |
str |
Local ISO datetime (YYYY-MM-DDTHH:MM:SS) the period begins. |
end |
str |
Local ISO datetime the period ends. |
sub_periods |
list[FirdariaSubPeriodModel] |
Seven sub-lord periods (empty for the nodes, which are not subdivided). |
FirdariaSubPeriodModel #
| Field | Type | Description |
|---|---|---|
lord |
ClassicalPlanet |
Planet ruling the sub-period. |
start |
str |
Local ISO datetime the sub-period begins. |
end |
str |
Local ISO datetime the sub-period ends. |
Period Sequences #
| Sect | Sequence (lord, years) |
|---|---|
| Diurnal | Sun 10 → Venus 8 → Mercury 13 → Moon 9 → Saturn 11 → Jupiter 12 → Mars 7 → NN 3 → SN 2 |
| Nocturnal | Moon 9 → Saturn 11 → Jupiter 12 → Mars 7 → Sun 10 → Venus 8 → Mercury 13 → NN 3 → SN 2 |