One festival, two zodiacs
A festival is a moon-day inside a solar month. Measured against the fixed stars (nirayana) its date creeps later a day every 72 years; against the equinox (sayan) it stays put.
Loading 4,000 years of dates…
nirayana sidereal
sayan tropical
Deepavali
A festival's month always holds its masa's sankranti, but the sankranti can fall anywhere in those ~30 days — so a festival follows it about tithi ÷ 30 of the time. Faint lines are the neighbouring sankrantis.
Ujjain, from the shipped rules. Stops at 4000 AD: past that the engine's Earth-rotation correction is extrapolated.