Example #1
0
 def assign_amaavaasya_vyatiipaata(self):
     if 'vyatIpAta-yOgaH_(alabhyam)' not in self.rules_collection.name_to_rule:
         return
     for d in range(
             self.panchaanga.duration_prior_padding,
             self.panchaanga.duration +
             self.panchaanga.duration_prior_padding):
         day_panchaanga = self.daily_panchaangas[d]
         # AMA-VYATIPATA YOGAH
         # श्रवणाश्विधनिष्ठार्द्रानागदैवतमापतेत् ।
         # रविवारयुतामायां व्यतीपातः स उच्यते ॥
         # व्यतीपाताख्ययोगोऽयं शतार्कग्रहसन्निभः ॥
         # “In Mahabharata, if on a Sunday, Amavasya and one of the stars –
         # Sravanam, Asvini, Avittam, Tiruvadirai or Ayilyam, occurs, then it is called ‘Vyatipatam’.
         # This Vyatipata yoga is equal to a hundred Surya grahanas in merit.”
         tithi_sunset = NakshatraDivision(
             day_panchaanga.jd_sunset,
             ayanaamsha_id=self.ayanaamsha_id).get_anga(
                 zodiac.AngaType.TITHI).index
         if day_panchaanga.date.get_weekday() == 0 and (
                 day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index
                 == 30 or tithi_sunset == 30):
             # AMAVASYA on a Sunday
             if (day_panchaanga.sunrise_day_angas.nakshatra_at_sunrise.index in [1, 6, 9, 22, 23] and day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index == 30) or \
                 (tithi_sunset == 30 and NakshatraDivision(day_panchaanga.jd_sunset,
                                                           ayanaamsha_id=self.ayanaamsha_id).get_anga(
                   zodiac.AngaType.NAKSHATRA).index in [
                    1, 6, 9, 22, 23]):
                 festival_name = 'vyatIpAta-yOgaH (alabhyam)'
                 self.panchaanga.add_festival(fest_id=festival_name,
                                              date=day_panchaanga.date)
Example #2
0
    def assign_ayushman_bava_saumya_yoga(self):
        for d in range(self.panchaanga.duration_prior_padding,
                       self.panchaanga.duration + 1):
            [y, m, dt,
             t] = time.jd_to_utc_gregorian(self.panchaanga.jd_start + d -
                                           1).to_date_fractional_hour_tuple()

            # AYUSHMAN BHAVA SAUMYA
            if self.daily_panchaangas[d].date.get_weekday(
            ) == 3 and NakshatraDivision(
                    self.daily_panchaangas[d].jd_sunrise,
                    ayanaamsha_id=self.ayanaamsha_id).get_anga(
                        zodiac.AngaType.NAKSHATRA).index == 3:
                if NakshatraDivision(
                        self.daily_panchaangas[d].jd_sunrise,
                        ayanaamsha_id=self.ayanaamsha_id).get_anga(
                            zodiac.AngaType.KARANA).index in list(
                                range(2, 52, 7)):
                    self.festival_id_to_days[
                        'AyuSmad-bava-saumya-saMyogaH'].add(
                            self.daily_panchaangas[d].date)
            if self.daily_panchaangas[d].date.get_weekday(
            ) == 3 and NakshatraDivision(
                    self.daily_panchaangas[d].jd_sunset,
                    ayanaamsha_id=self.ayanaamsha_id).get_anga(
                        zodiac.AngaType.NAKSHATRA).index == 3:
                if NakshatraDivision(
                        self.daily_panchaangas[d].jd_sunset,
                        ayanaamsha_id=self.ayanaamsha_id).get_anga(
                            zodiac.AngaType.KARANA).index in list(
                                range(2, 52, 7)):
                    self.festival_id_to_days[
                        'AyuSmad-bava-saumya-saMyogaH'].add(
                            self.daily_panchaangas[d].date)
Example #3
0
    def get_month_sunrise(self, daily_panchaanga):
        """ Assigns Lunar months to days in the period
    
    Implementation note: Works by looking at solar months and new moons (which makes it easy to deduce adhika-mAsa-s.)
    
    :return: 
    """
        # tithi_at_sunrise gives a rough indication of the number of days since last new moon. We now find a more precise interval below.
        anga_finder = zodiac.AngaSpanFinder.get_cached(
            ayanaamsha_id=Ayanamsha.ASHVINI_STARTING_0,
            anga_type=zodiac.AngaType.TITHI)

        last_new_moon = anga_finder.find(
            jd1=daily_panchaanga.jd_sunrise -
            daily_panchaanga.sunrise_day_angas.tithi_at_sunrise.index - 3,
            jd2=daily_panchaanga.jd_sunrise -
            daily_panchaanga.sunrise_day_angas.tithi_at_sunrise.index + 3,
            target_anga_id=30)
        this_new_moon = anga_finder.find(jd1=last_new_moon.jd_start + 24,
                                         jd2=last_new_moon.jd_start + 32,
                                         target_anga_id=30)
        last_new_moon_solar_raashi = NakshatraDivision(
            last_new_moon.jd_end,
            ayanaamsha_id=self.ayanaamsha_id).get_solar_raashi()
        this_new_moon_solar_raashi = NakshatraDivision(
            this_new_moon.jd_end,
            ayanaamsha_id=self.ayanaamsha_id).get_solar_raashi()
        is_adhika = last_new_moon_solar_raashi == this_new_moon_solar_raashi

        if is_adhika:
            return this_new_moon_solar_raashi + .5
        else:
            return this_new_moon_solar_raashi
Example #4
0
    def assign_ayushman_bava_saumya_yoga(self):
        for d in range(self.panchaanga.duration_prior_padding,
                       self.panchaanga.duration + 1):

            # AYUSHMAN BHAVA SAUMYA
            if self.daily_panchaangas[d].date.get_weekday(
            ) == 3 and NakshatraDivision(
                    self.daily_panchaangas[d].jd_sunrise,
                    ayanaamsha_id=self.ayanaamsha_id).get_anga(
                        zodiac.AngaType.YOGA).index == 3:
                if NakshatraDivision(
                        self.daily_panchaangas[d].jd_sunrise,
                        ayanaamsha_id=self.ayanaamsha_id).get_anga(
                            zodiac.AngaType.KARANA).index in list(
                                range(2, 52, 7)):
                    self.panchaanga.add_festival(
                        fest_id='AyuSmad-bava-saumya-saMyOgaH',
                        date=self.daily_panchaangas[d].date)
            if self.daily_panchaangas[d].date.get_weekday(
            ) == 3 and NakshatraDivision(
                    self.daily_panchaangas[d].jd_sunset,
                    ayanaamsha_id=self.ayanaamsha_id).get_anga(
                        zodiac.AngaType.YOGA).index == 3:
                if NakshatraDivision(
                        self.daily_panchaangas[d].jd_sunset,
                        ayanaamsha_id=self.ayanaamsha_id).get_anga(
                            zodiac.AngaType.KARANA).index in list(
                                range(2, 52, 7)):
                    self.panchaanga.add_festival(
                        fest_id='AyuSmad-bava-saumya-saMyOgaH',
                        date=self.daily_panchaangas[d].date)
Example #5
0
 def get(self, body_name, anga_type_str, timezone, year, month, day, hour,
         minute, second):
     jd = Timezone(timezone).local_time_to_julian_day(
         Date(year, month, day, hour, minute, second))
     nd = NakshatraDivision(jd=jd, ayanaamsha_id=Ayanamsha.CHITRA_AT_180)
     body = Graha(body_name=body_name)
     anga_type = AngaType.NAKSHATRA
     if anga_type_str == AngaType.RASHI.name:
         anga_type = AngaType.RASHI
     division = nd.get_fractional_division_for_body(body=body,
                                                    anga_type=anga_type)
     logging.info(division)
     return str(division)
Example #6
0
    def assign_mahodaya_ardhodaya(self):
        for d, daily_panchaanga in enumerate(self.daily_panchaangas):

            # MAHODAYAM
            # Can also refer youtube video https://youtu.be/0DBIwb7iaLE?list=PL_H2LUtMCKPjh63PRk5FA3zdoEhtBjhzj&t=6747
            # 4th pada of vyatipatam, 1st pada of Amavasya, 2nd pada of Shravana, Suryodaya, Bhanuvasara = Ardhodayam
            # 4th pada of vyatipatam, 1st pada of Amavasya, 2nd pada of Shravana, Suryodaya, Somavasara = Mahodayam
            sunrise_zodiac = NakshatraDivision(
                daily_panchaanga.jd_sunrise,
                ayanaamsha_id=self.computation_system.ayanaamsha_id)
            sunset_zodiac = NakshatraDivision(
                daily_panchaanga.jd_sunset,
                ayanaamsha_id=self.computation_system.ayanaamsha_id)
            if daily_panchaanga.lunar_month_sunrise.index in [
                    10, 11
            ] and daily_panchaanga.sunrise_day_angas.tithi_at_sunrise.index == 30 or tithi.get_tithi(
                    daily_panchaanga.jd_sunrise).index == 30:
                if sunrise_zodiac.get_anga(zodiac.AngaType.NAKSHATRA).index == 17 or \
                    sunset_zodiac.get_anga(zodiac.AngaType.NAKSHATRA).index == 17 and \
                    sunrise_zodiac.get_anga(zodiac.AngaType.NAKSHATRA).index == 22 or \
                    sunset_zodiac.get_anga(zodiac.AngaType.NAKSHATRA).index == 22:
                    if daily_panchaanga.date.get_weekday() == 1:
                        festival_name = 'mahOdaya-puNyakAlaH'
                        self.panchaanga.add_festival(
                            fest_id=festival_name,
                            date=self.daily_panchaangas[d].date)
                        # logging.debug('* %d-%02d-%02d> %s!' % (y, m, dt, festival_name))
                    elif daily_panchaanga.date.get_weekday() == 0:
                        festival_name = 'ardhOdaya-puNyakAlaH'
                        self.panchaanga.add_festival(
                            fest_id=festival_name,
                            date=self.daily_panchaangas[d].date)
Example #7
0
    def assign_vishesha_saptami(self):
        for d in range(self.panchaanga.duration_prior_padding,
                       self.panchaanga.duration + 1):
            [y, m, dt,
             t] = time.jd_to_utc_gregorian(self.panchaanga.jd_start + d -
                                           1).to_date_fractional_hour_tuple()

            # SPECIAL SAPTAMIs
            if self.daily_panchaangas[d].date.get_weekday() == 0 and (
                    self.daily_panchaangas[d].sunrise_day_angas.
                    tithi_at_sunrise.index % 15) == 7:
                festival_name = 'bhAnusaptamI'
                if self.daily_panchaangas[
                        d].sunrise_day_angas.tithi_at_sunrise.index == 7:
                    festival_name = 'vijayA' + '~' + festival_name
                if self.daily_panchaangas[
                        d].sunrise_day_angas.nakshatra_at_sunrise.index == 27:
                    # Even more auspicious!
                    festival_name += '★'
                self.festival_id_to_days[festival_name].add(
                    self.daily_panchaangas[d].date)

            if NakshatraDivision(self.daily_panchaangas[d].jd_sunrise, ayanaamsha_id=self.ayanaamsha_id).get_anga(
                zodiac.AngaType.NAKSHATRA_PADA).index == 49 and \
                self.daily_panchaangas[d].sunrise_day_angas.tithi_at_sunrise.index == 7:
                self.festival_id_to_days['bhadrA~saptamI'].add(
                    self.daily_panchaangas[d].date)

            if self.daily_panchaangas[
                    d].solar_sidereal_date_sunset.month_transition is not None:
                # we have a Sankranti!
                if self.daily_panchaangas[
                        d].sunrise_day_angas.tithi_at_sunrise.index == 7:
                    self.festival_id_to_days['mahAjayA~saptamI'].add(
                        self.daily_panchaangas[d].date)
Example #8
0
    def compute_solar_day_sunset(self, previous_day_panchaanga=None):
        """Compute the solar month and day for a given Julian day at sunset.
    """
        # If solar transition happens before the current sunset but after the previous sunset, then that is taken to be solar day 1.
        self.compute_sun_moon_transitions(
            previous_day_panchaanga=previous_day_panchaanga)
        solar_month_sunset = NakshatraDivision(
            jd=self.jd_sunset,
            ayanaamsha_id=self.computation_system.ayanaamsha_id).get_anga(
                anga_type=AngaType.SIDEREAL_MONTH)

        solar_sidereal_month_end_jd = None
        if previous_day_panchaanga is None or previous_day_panchaanga.solar_sidereal_date_sunset.day > 28:
            anga_finder = zodiac.AngaSpanFinder.get_cached(
                ayanaamsha_id=self.computation_system.ayanaamsha_id,
                anga_type=AngaType.SIDEREAL_MONTH)
            solar_month_sunset_span = anga_finder.find(
                jd1=self.jd_sunset - 32,
                jd2=self.jd_sunset + 5,
                target_anga_id=solar_month_sunset)
            solar_sidereal_month_day_sunset = len(
                self.city.get_sunsets_in_period(
                    jd_start=solar_month_sunset_span.jd_start,
                    jd_end=self.jd_sunset + 1 / 48.0))
            if solar_sidereal_month_day_sunset == 1 and solar_month_sunset_span.jd_start > self.jd_sunrise:
                solar_sidereal_month_end_jd = solar_month_sunset_span.jd_start
            elif solar_sidereal_month_day_sunset == 30 and solar_month_sunset_span.jd_end < self.jd_next_sunrise:
                solar_sidereal_month_end_jd = solar_month_sunset_span.jd_end
        else:
            solar_sidereal_month_day_sunset = previous_day_panchaanga.solar_sidereal_date_sunset.day + 1
        from jyotisha.panchaanga.temporal import time
        self.solar_sidereal_date_sunset = time.BasicDateWithTransitions(
            month=solar_month_sunset.index,
            day=solar_sidereal_month_day_sunset,
            month_transition=solar_sidereal_month_end_jd)
Example #9
0
  def assign_month_day_festivals(self):
    for d, daily_panchaanga in enumerate(self.daily_panchaangas):
      y = daily_panchaanga.date.year
      ####################
      # Festival details #
      ####################

      # KARADAIYAN NOMBU
      if daily_panchaanga.solar_sidereal_date_sunset.month == 12 and daily_panchaanga.solar_sidereal_date_sunset.day == 1:
        festival_name = 'kAraDaiyAn2 nOn2bu'
        if NakshatraDivision(daily_panchaanga.jd_sunrise - (1 / 15.0) * (daily_panchaanga.jd_sunrise - self.daily_panchaangas[d - 1].jd_sunrise),
                             ayanaamsha_id=self.ayanaamsha_id).get_solar_raashi().index == 12:
          # If kumbha prevails two ghatikAs before sunrise, nombu can be done in the early morning itself, else, previous night.
          self.panchaanga.festival_id_to_days[festival_name] = {self.daily_panchaangas[d - 1].date}
        else:
          self.panchaanga.festival_id_to_days[festival_name] = {daily_panchaanga.date}

      # KUCHELA DINAM
      if daily_panchaanga.solar_sidereal_date_sunset.month == 9 and daily_panchaanga.solar_sidereal_date_sunset.day <= 7 and daily_panchaanga.date.get_weekday() == 3:
        self.panchaanga.festival_id_to_days['kucEla-dinam'] = {daily_panchaanga.date}

      # MESHA SANKRANTI
      if daily_panchaanga.solar_sidereal_date_sunset.month == 1 and self.daily_panchaangas[d - 1].solar_sidereal_date_sunset.month == 12:
        # distance from prabhava
        samvatsara_id = (y - 1568) % 60 + 1
        new_yr = 'mESa-saGkrAntiH' + '~(' + names.NAMES['SAMVATSARA_NAMES']['hk'][
          (samvatsara_id % 60) + 1] + \
                 '-' + 'saMvatsaraH' + ')'
        # self.panchaanga.festival_id_to_days[new_yr] = [d]
        self.festival_id_to_days[new_yr].add(self.daily_panchaangas[d].date)
        self.festival_id_to_days['paJcAGga-paThanam'].add(self.daily_panchaangas[d].date)
Example #10
0
 def f(x):
     if x is None:
         return None
     else:
         return NakshatraDivision(
             x,
             ayanaamsha_id=ayanaamsha_id).get_anga(anga_type=anga_type)
Example #11
0
 def get(self, timezone, year, month, day, hour, minute, second):
     jd = Timezone(timezone).local_time_to_julian_day(
         Date(year, month, day, hour, minute, second))
     from jyotisha.panchaanga import temporal
     raashi = NakshatraDivision(
         jd, ayanaamsha_id=Ayanamsha.CHITRA_AT_180).get_solar_raashi()
     logging.info(raashi)
     return str(raashi)
Example #12
0
 def assign_vaarunii_trayodashi(self):
     if 'vAruNI~trayOdazI' not in self.rules_collection.name_to_rule:
         return
     for d in range(
             self.panchaanga.duration_prior_padding,
             self.panchaanga.duration +
             self.panchaanga.duration_prior_padding):
         day_panchaanga = self.daily_panchaangas[d]
         # VARUNI TRAYODASHI
         if day_panchaanga.lunar_month_sunrise.index == 12 and day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index == 28:
             if NakshatraDivision(
                     day_panchaanga.jd_sunrise,
                     ayanaamsha_id=self.ayanaamsha_id).get_anga(
                         zodiac.AngaType.NAKSHATRA).index == 24:
                 vtr_name = 'vAruNI~trayOdazI'
                 if day_panchaanga.date.get_weekday() == 6:
                     vtr_name = 'mahA' + vtr_name
                     if NakshatraDivision(
                             day_panchaanga.jd_sunrise,
                             ayanaamsha_id=self.ayanaamsha_id).get_anga(
                                 zodiac.AngaType.NAKSHATRA).index == 23:
                         vtr_name = 'mahA' + vtr_name
                 self.panchaanga.add_festival(fest_id=vtr_name,
                                              date=day_panchaanga.date)
Example #13
0
 def assign_vishesha_trayodashi(self):
     for d in range(self.panchaanga.duration_prior_padding,
                    self.panchaanga.duration + 1):
         [y, m, dt,
          t] = time.jd_to_utc_gregorian(self.panchaanga.jd_start + d -
                                        1).to_date_fractional_hour_tuple()
         # VARUNI TRAYODASHI
         if self.daily_panchaangas[
                 d].lunar_month_sunrise.index == 12 and self.daily_panchaangas[
                     d].sunrise_day_angas.tithi_at_sunrise.index == 28:
             if NakshatraDivision(
                     self.daily_panchaangas[d].jd_sunrise,
                     ayanaamsha_id=self.ayanaamsha_id).get_anga(
                         zodiac.AngaType.NAKSHATRA).index == 24:
                 vtr_name = 'vAruNI~trayOdazI'
                 if self.daily_panchaangas[d].date.get_weekday() == 6:
                     vtr_name = 'mahA' + vtr_name
                     if NakshatraDivision(
                             self.daily_panchaangas[d].jd_sunrise,
                             ayanaamsha_id=self.ayanaamsha_id).get_anga(
                                 zodiac.AngaType.NAKSHATRA).index == 23:
                         vtr_name = 'mahA' + vtr_name
                 self.festival_id_to_days[vtr_name].add(
                     self.daily_panchaangas[d].date)
Example #14
0
def get_tithi(jd):
  """Returns the tithi prevailing at a given moment

  Tithi is computed as the difference in the longitudes of the moon
  and sun at any given point of time. Therefore, even the ayanaamsha
  does not matter, as it gets cancelled out.

  Returns:
    int tithi, where 1 stands for ShuklapakshaPrathama, ..., 15 stands
    for Paurnamasi, ..., 23 stands for KrishnapakshaAshtami, 30 stands
    for Amavasya

  """
  from jyotisha.panchaanga.temporal.zodiac import NakshatraDivision, Ayanamsha
  # VERNAL_EQUINOX_AT_0 does not involve lookups, hence sending it - though ayanAmsha does not matter.
  return NakshatraDivision(jd=jd, ayanaamsha_id=Ayanamsha.VERNAL_EQUINOX_AT_0).get_anga(AngaType.TITHI)
Example #15
0
    def assign_vishesha_saptami(self):
        if 'bhAnusaptamI' in self.rules_collection.name_to_rule:
            for d in range(
                    self.panchaanga.duration_prior_padding,
                    self.panchaanga.duration +
                    self.panchaanga.duration_prior_padding):
                day_panchaanga = self.daily_panchaangas[d]
                # SPECIAL SAPTAMIs
                if day_panchaanga.date.get_weekday() == 0 and (
                        day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index
                        % 15) == 7:
                    festival_name = 'bhAnusaptamI'
                    if day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index == 7:
                        festival_name = 'vijayA' + '~' + festival_name
                    if day_panchaanga.sunrise_day_angas.nakshatra_at_sunrise.index == 27:
                        # Even more auspicious!
                        festival_name += '★'
                    self.panchaanga.add_festival(fest_id=festival_name,
                                                 date=day_panchaanga.date)

        if 'bhadrA~saptamI' in self.rules_collection.name_to_rule:
            for d in range(
                    self.panchaanga.duration_prior_padding,
                    self.panchaanga.duration +
                    self.panchaanga.duration_prior_padding):
                day_panchaanga = self.daily_panchaangas[d]
                if NakshatraDivision(day_panchaanga.jd_sunrise, ayanaamsha_id=self.ayanaamsha_id).get_anga(
                    zodiac.AngaType.NAKSHATRA_PADA).index == 49 and \
                    day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index == 7:
                    self.panchaanga.add_festival(fest_id='bhadrA~saptamI',
                                                 date=day_panchaanga.date)

        if 'mahAjayA~saptamI' in self.rules_collection.name_to_rule:
            for d in range(
                    self.panchaanga.duration_prior_padding,
                    self.panchaanga.duration +
                    self.panchaanga.duration_prior_padding):
                day_panchaanga = self.daily_panchaangas[d]
                if day_panchaanga.solar_sidereal_date_sunset.month_transition is not None:
                    # we have a Sankranti!
                    if day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index == 7:
                        self.panchaanga.add_festival(
                            fest_id='mahAjayA~saptamI',
                            date=day_panchaanga.date)
Example #16
0
    def assign_month_day_kaaradaiyan(self):
        if 'kAraDaiyAn2_nOn2bu' not in self.rules_collection.name_to_rule:
            return
        for d, daily_panchaanga in enumerate(self.daily_panchaangas):
            ####################
            # Festival details #
            ####################

            # KARADAIYAN NOMBU
            if daily_panchaanga.solar_sidereal_date_sunset.month == 12 and daily_panchaanga.solar_sidereal_date_sunset.day == 1:
                festival_name = 'kAraDaiyAn2 nOn2bu'
                if NakshatraDivision(
                        daily_panchaanga.jd_sunrise - (1 / 15.0) *
                    (daily_panchaanga.jd_sunrise -
                     self.daily_panchaangas[d - 1].jd_sunrise),
                        ayanaamsha_id=self.ayanaamsha_id).get_solar_raashi(
                        ).index == 12:
                    # If kumbha prevails two ghatikAs before sunrise, nombu can be done in the early morning itself, else, previous night.
                    self.panchaanga.add_festival(
                        fest_id=festival_name,
                        date=self.daily_panchaangas[d - 1].date)
                else:
                    self.panchaanga.add_festival(fest_id=festival_name,
                                                 date=daily_panchaanga.date)
Example #17
0
def test_get_anga():

  nd = NakshatraDivision(jd=time.ist_timezone.local_time_to_julian_day(Date(2018, 7, 14)), ayanaamsha_id=Ayanamsha.CHITRA_AT_180)
  assert nd.get_anga(
    anga_type=AngaType.TITHI).index == 1

  nd = NakshatraDivision(jd=time.ist_timezone.local_time_to_julian_day(Date(2018, 7, 14, 6, 1)), ayanaamsha_id=Ayanamsha.CHITRA_AT_180)
  assert nd.get_anga(
    anga_type=AngaType.TITHI).index == 2

  nd = NakshatraDivision(jd=time.ist_timezone.local_time_to_julian_day(Date(2018, 7, 13)), ayanaamsha_id=Ayanamsha.CHITRA_AT_180)
  assert nd.get_anga(
    anga_type=AngaType.TITHI).index == 30
  assert nd.get_anga(
    anga_type=AngaType.SIDEREAL_MONTH).index == 3

  # Just before meSha sankrAnti
  assert NakshatraDivision(jd=time.ist_timezone.local_time_to_julian_day(Date(2018, 4, 13)), ayanaamsha_id=Ayanamsha.CHITRA_AT_180).get_anga(
    anga_type=AngaType.SIDEREAL_MONTH).index == 12


  # 5:6:0.00 UT on December 23, 1981
  nd = NakshatraDivision(2444961.7125, ayanaamsha_id=Ayanamsha.CHITRA_AT_180)
  assert nd.get_anga(AngaType.NAKSHATRA).index == 16
  assert nd.get_anga(AngaType.TITHI).index == 28
  assert nd.get_anga(AngaType.YOGA).index == 8
  assert nd.get_anga(AngaType.KARANA).index == 55
  assert nd.get_solar_raashi().index == 9
Example #18
0
    def assign_mahaadvaadashii(self):
        if 'pakSavardhinI~mahAdvAdazI' not in self.rules_collection.name_to_rule:
            return
        for d in range(
                self.panchaanga.duration_prior_padding,
                self.panchaanga.duration +
                self.panchaanga.duration_prior_padding):
            day_panchaanga = self.daily_panchaangas[d]
            # 8 MAHA DWADASHIS
            if (day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15) == 11 and (self.daily_panchaangas[
                        d + 1].sunrise_day_angas.tithi_at_sunrise.index %
                                   15) == 11:
                self.panchaanga.add_festival(fest_id='unmIlanI~mahAdvAdazI',
                                             date=day_panchaanga.date + 1)

            if (day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15) == 12 and (self.daily_panchaangas[
                        d + 1].sunrise_day_angas.tithi_at_sunrise.index %
                                   15) == 12:
                self.panchaanga.add_festival(fest_id='vyaJjulI~mahAdvAdazI',
                                             date=day_panchaanga.date)

            if (day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15) == 11 and (self.daily_panchaangas[
                        d + 1].sunrise_day_angas.tithi_at_sunrise.index %
                                   15) == 13:
                self.panchaanga.add_festival(fest_id='trisparzA~mahAdvAdazI',
                                             date=day_panchaanga.date)

            if (day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15) == 0 and (self.daily_panchaangas[
                        d + 1].sunrise_day_angas.tithi_at_sunrise.index %
                                  15) == 0:
                # Might miss out on those parva days right after Dec 31!
                if (d - 3) > 0:
                    self.panchaanga.add_festival(
                        fest_id='pakSavardhinI~mahAdvAdazI',
                        date=day_panchaanga.date - 3)

            if day_panchaanga.sunrise_day_angas.nakshatra_at_sunrise.index == 4 and (
                    day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15) == 12:
                self.panchaanga.add_festival(fest_id='pApanAzinI~mahAdvAdazI',
                                             date=day_panchaanga.date)

            if day_panchaanga.sunrise_day_angas.nakshatra_at_sunrise.index == 7 and (
                    day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15) == 12:
                self.panchaanga.add_festival(fest_id='jayantI~mahAdvAdazI',
                                             date=day_panchaanga.date)

            if day_panchaanga.sunrise_day_angas.nakshatra_at_sunrise.index == 8 and (
                    day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15) == 12:
                self.panchaanga.add_festival(fest_id='jayA~mahAdvAdazI',
                                             date=day_panchaanga.date)

            if day_panchaanga.sunrise_day_angas.nakshatra_at_sunrise.index == 8 and (
                    day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15
            ) == 12 and day_panchaanga.lunar_month_sunrise.index == 12:
                # Better checking needed (for other than sunrise).
                # Last occurred on 27-02-1961 - pushya nakshatra and phalguna krishna dvadashi (or shukla!?)
                self.panchaanga.add_festival(fest_id='gOvinda~mahAdvAdazI',
                                             date=day_panchaanga.date)

            if (day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15) == 12:
                if day_panchaanga.sunrise_day_angas.nakshatra_at_sunrise.index in [
                        21, 22, 23
                ]:
                    # We have a dvaadashii near shravana, check for Shravana sparsha
                    for td in [
                            x.sunrise_day_angas.tithis_with_ends
                            for x in self.daily_panchaangas[d:d + 2]
                    ]:
                        (t12, t12_end) = (td[0].anga, td[0].jd_end)
                        if t12_end is None:
                            continue
                        if (t12 % 15) == 11:
                            if NakshatraDivision(
                                    t12_end,
                                    ayanaamsha_id=self.ayanaamsha_id).get_anga(
                                        zodiac.AngaType.NAKSHATRA).index == 22:
                                if (day_panchaanga.sunrise_day_angas.
                                        tithi_at_sunrise.index %
                                        15) == 12 and (self.daily_panchaangas[
                                            d + 1].sunrise_day_angas.
                                                       tithi_at_sunrise.index %
                                                       15) == 12:
                                    self.panchaanga.add_festival(
                                        fest_id='vijayA/zravaNa-mahAdvAdazI',
                                        date=day_panchaanga.date)
                                elif (day_panchaanga.sunrise_day_angas.
                                      tithi_at_sunrise.index % 15) == 12:
                                    self.panchaanga.add_festival(
                                        fest_id='vijayA/zravaNa-mahAdvAdazI',
                                        date=day_panchaanga.date)
                                elif (self.daily_panchaangas[d + 1].
                                      sunrise_day_angas.tithi_at_sunrise.index
                                      % 15) == 12:
                                    self.panchaanga.add_festival(
                                        fest_id='vijayA/zravaNa-mahAdvAdazI',
                                        date=day_panchaanga.date + 1)
                        if (t12 % 15) == 12:
                            if NakshatraDivision(
                                    t12_end,
                                    ayanaamsha_id=self.ayanaamsha_id).get_anga(
                                        zodiac.AngaType.NAKSHATRA).index == 22:
                                if (day_panchaanga.sunrise_day_angas.
                                        tithi_at_sunrise.index %
                                        15) == 12 and (self.daily_panchaangas[
                                            d + 1].sunrise_day_angas.
                                                       tithi_at_sunrise.index %
                                                       15) == 12:
                                    self.panchaanga.add_festival(
                                        fest_id='vijayA/zravaNa-mahAdvAdazI',
                                        date=day_panchaanga.date)
                                elif (day_panchaanga.sunrise_day_angas.
                                      tithi_at_sunrise.index % 15) == 12:
                                    self.panchaanga.add_festival(
                                        fest_id='vijayA/zravaNa-mahAdvAdazI',
                                        date=day_panchaanga.date)
                                elif (self.daily_panchaangas[d + 1].
                                      sunrise_day_angas.tithi_at_sunrise.index
                                      % 15) == 12:
                                    self.panchaanga.add_festival(
                                        fest_id='vijayA/zravaNa-mahAdvAdazI',
                                        date=day_panchaanga.date + 1)

            if day_panchaanga.sunrise_day_angas.nakshatra_at_sunrise.index == 22 and (
                    day_panchaanga.sunrise_day_angas.tithi_at_sunrise.index %
                    15) == 12:
                self.panchaanga.add_festival(
                    fest_id='vijayA/zravaNa-mahAdvAdazI',
                    date=day_panchaanga.date)
Example #19
0
 def f(x):
     tp_float = NakshatraDivision(
         x, ayanaamsha_id=self.ayanaamsha_id
     ).get_anga_float(zodiac.AngaType.TITHI_PADA)
     return tp_float - 105
Example #20
0
    def assign_mahaadvaadashii(self):
        for d in range(self.panchaanga.duration_prior_padding,
                       self.panchaanga.duration + 1):
            [y, m, dt,
             t] = time.jd_to_utc_gregorian(self.panchaanga.jd_start + d -
                                           1).to_date_fractional_hour_tuple()
            # 8 MAHA DWADASHIS
            if (self.daily_panchaangas[d].sunrise_day_angas.tithi_at_sunrise.
                    index % 15) == 11 and (self.daily_panchaangas[
                        d + 1].sunrise_day_angas.tithi_at_sunrise.index %
                                           15) == 11:
                self.festival_id_to_days['unmIlanI~mahAdvAdazI'].add(
                    self.daily_panchaangas[d].date + 1)

            if (self.daily_panchaangas[d].sunrise_day_angas.tithi_at_sunrise.
                    index % 15) == 12 and (self.daily_panchaangas[
                        d + 1].sunrise_day_angas.tithi_at_sunrise.index %
                                           15) == 12:
                self.festival_id_to_days['vyaJjulI~mahAdvAdazI'].add(
                    self.daily_panchaangas[d].date)

            if (self.daily_panchaangas[d].sunrise_day_angas.tithi_at_sunrise.
                    index % 15) == 11 and (self.daily_panchaangas[
                        d + 1].sunrise_day_angas.tithi_at_sunrise.index %
                                           15) == 13:
                self.festival_id_to_days['trisparzA~mahAdvAdazI'].add(
                    self.daily_panchaangas[d].date)

            if (self.daily_panchaangas[d].sunrise_day_angas.tithi_at_sunrise.
                    index % 15) == 0 and (self.daily_panchaangas[
                        d + 1].sunrise_day_angas.tithi_at_sunrise.index %
                                          15) == 0:
                # Might miss out on those parva days right after Dec 31!
                if (d - 3) > 0:
                    self.festival_id_to_days['pakSavardhinI~mahAdvAdazI'].add(
                        self.daily_panchaangas[d].date - 3)

            if self.daily_panchaangas[
                    d].sunrise_day_angas.nakshatra_at_sunrise.index == 4 and (
                        self.daily_panchaangas[d].sunrise_day_angas.
                        tithi_at_sunrise.index % 15) == 12:
                self.festival_id_to_days['pApanAzinI~mahAdvAdazI'].add(
                    self.daily_panchaangas[d].date)

            if self.daily_panchaangas[
                    d].sunrise_day_angas.nakshatra_at_sunrise.index == 7 and (
                        self.daily_panchaangas[d].sunrise_day_angas.
                        tithi_at_sunrise.index % 15) == 12:
                self.festival_id_to_days['jayantI~mahAdvAdazI'].add(
                    self.daily_panchaangas[d].date)

            if self.daily_panchaangas[
                    d].sunrise_day_angas.nakshatra_at_sunrise.index == 8 and (
                        self.daily_panchaangas[d].sunrise_day_angas.
                        tithi_at_sunrise.index % 15) == 12:
                self.festival_id_to_days['jayA~mahAdvAdazI'].add(
                    self.daily_panchaangas[d].date)

            if self.daily_panchaangas[
                    d].sunrise_day_angas.nakshatra_at_sunrise.index == 8 and (
                        self.daily_panchaangas[d].sunrise_day_angas.
                        tithi_at_sunrise.index %
                        15) == 12 and self.daily_panchaangas[
                            d].lunar_month_sunrise.index == 12:
                # Better checking needed (for other than sunrise).
                # Last occurred on 27-02-1961 - pushya nakshatra and phalguna krishna dvadashi (or shukla!?)
                self.festival_id_to_days['gOvinda~mahAdvAdazI'].add(
                    self.daily_panchaangas[d].date)

            if (self.daily_panchaangas[d].sunrise_day_angas.tithi_at_sunrise.
                    index % 15) == 12:
                if self.daily_panchaangas[
                        d].sunrise_day_angas.nakshatra_at_sunrise.index in [
                            21, 22, 23
                        ]:
                    # We have a dvaadashii near shravana, check for Shravana sparsha
                    for td in [
                            x.sunrise_day_angas.tithis_with_ends
                            for x in self.daily_panchaangas[d:d + 2]
                    ]:
                        (t12, t12_end) = (td[0].anga, td[0].jd_end)
                        if t12_end is None:
                            continue
                        if (t12 % 15) == 11:
                            if NakshatraDivision(
                                    t12_end,
                                    ayanaamsha_id=self.ayanaamsha_id).get_anga(
                                        zodiac.AngaType.NAKSHATRA).index == 22:
                                if (self.daily_panchaangas[d].sunrise_day_angas
                                        .tithi_at_sunrise.index %
                                        15) == 12 and (self.daily_panchaangas[
                                            d + 1].sunrise_day_angas.
                                                       tithi_at_sunrise.index %
                                                       15) == 12:
                                    self.festival_id_to_days[
                                        'vijayA/zravaNa-mahAdvAdazI'].add(
                                            self.daily_panchaangas[d].date)
                                elif (self.daily_panchaangas[d].
                                      sunrise_day_angas.tithi_at_sunrise.index
                                      % 15) == 12:
                                    self.festival_id_to_days[
                                        'vijayA/zravaNa-mahAdvAdazI'].add(
                                            self.daily_panchaangas[d].date)
                                elif (self.daily_panchaangas[d + 1].
                                      sunrise_day_angas.tithi_at_sunrise.index
                                      % 15) == 12:
                                    self.festival_id_to_days[
                                        'vijayA/zravaNa-mahAdvAdazI'].add(
                                            self.daily_panchaangas[d].date + 1)
                        if (t12 % 15) == 12:
                            if NakshatraDivision(
                                    t12_end,
                                    ayanaamsha_id=self.ayanaamsha_id).get_anga(
                                        zodiac.AngaType.NAKSHATRA).index == 22:
                                if (self.daily_panchaangas[d].sunrise_day_angas
                                        .tithi_at_sunrise.index %
                                        15) == 12 and (self.daily_panchaangas[
                                            d + 1].sunrise_day_angas.
                                                       tithi_at_sunrise.index %
                                                       15) == 12:
                                    self.festival_id_to_days[
                                        'vijayA/zravaNa-mahAdvAdazI'].add(
                                            self.daily_panchaangas[d].date)
                                elif (self.daily_panchaangas[d].
                                      sunrise_day_angas.tithi_at_sunrise.index
                                      % 15) == 12:
                                    self.festival_id_to_days[
                                        'vijayA/zravaNa-mahAdvAdazI'].add(
                                            self.daily_panchaangas[d].date)
                                elif (self.daily_panchaangas[d + 1].
                                      sunrise_day_angas.tithi_at_sunrise.index
                                      % 15) == 12:
                                    self.festival_id_to_days[
                                        'vijayA/zravaNa-mahAdvAdazI'].add(
                                            self.daily_panchaangas[d].date + 1)

            if self.daily_panchaangas[
                    d].sunrise_day_angas.nakshatra_at_sunrise.index == 22 and (
                        self.daily_panchaangas[d].sunrise_day_angas.
                        tithi_at_sunrise.index % 15) == 12:
                self.festival_id_to_days['vijayA/zravaNa-mahAdvAdazI'].add(
                    self.daily_panchaangas[d].date)
Example #21
0
    def assign_nakshatra_vara_yoga_vratam(self):
        if 'Adityahasta-puNyakAlaH' not in self.rules_collection.name_to_rule:
            return
        for d in range(
                self.panchaanga.duration_prior_padding,
                self.panchaanga.duration +
                self.panchaanga.duration_prior_padding):
            # NAKSHATRA-WEEKDAY FESTIVALS
            for (nwd_fest_n, nwd_fest_wd, nwd_fest_name) in (
                (13, 0, 'Adityahasta-puNyakAlaH'),
                (8, 0, 'ravipuSyayOga-puNyakAlaH'),
                (22, 1, 'sOmazrAvaNI-puNyakAlaH'),
                (5, 1, 'sOmamRgazIrSa-puNyakAlaH'),
                (1, 2, 'bhaumAzvinI-puNyakAlaH'),
                    # (6, 2, 'bhaumArdrA-puNyakAlaH'), removed because no pramANam
                (17, 3, 'budhAnurAdhA-puNyakAlaH'),
                (8, 4, 'gurupuSya-puNyakAlaH'),
                (27, 5, 'bhRgurEvatI-puNyakAlaH'),
                (4, 6, 'zanirOhiNI-puNyakAlaH'),
            ):
                n_prev = ((nwd_fest_n - 2) % 27) + 1
                if (self.daily_panchaangas[d].sunrise_day_angas.
                        nakshatra_at_sunrise.index == nwd_fest_n
                        or self.daily_panchaangas[d].sunrise_day_angas.
                        nakshatra_at_sunrise.index == n_prev
                    ) and self.daily_panchaangas[d].date.get_weekday(
                    ) == nwd_fest_wd:
                    # Is it necessarily only at sunrise?
                    d0_angas = self.daily_panchaangas[
                        d].day_length_based_periods.dinamaana.get_boundary_angas(
                            anga_type=AngaType.NAKSHATRA,
                            ayanaamsha_id=self.ayanaamsha_id)

                    # if any(x == nwd_fest_n for x in [self.daily_panchaangas[d].sunrise_day_angas.nakshatra_at_sunrise.index, d0_angas.start.index, d0_angas.end.index]):
                    #   self.panchaanga.add_festival(fest_id=nwd_fest_name, date=self.daily_panchaangas[d].date)

                    nakshatram_praatah = self.daily_panchaangas[
                        d].sunrise_day_angas.nakshatra_at_sunrise.index
                    nakshatram_saayam = NakshatraDivision(
                        jd=self.daily_panchaangas[d].jd_sunset,
                        ayanaamsha_id=self.panchaanga.computation_system.
                        ayanaamsha_id).get_anga(
                            anga_type=AngaType.NAKSHATRA).index

                    if nakshatram_praatah == nakshatram_saayam == n_prev:
                        continue

                    if nwd_fest_n == nakshatram_praatah == nakshatram_saayam:
                        self.panchaanga.add_festival_instance(
                            festival_instance=FestivalInstance(
                                name=nwd_fest_name),
                            date=self.daily_panchaangas[d].date)
                    else:
                        (nakshatra_ID, nakshatra_end_jd) = (
                            self.daily_panchaangas[d].sunrise_day_angas.
                            nakshatras_with_ends[0].anga.index,
                            self.daily_panchaangas[d].sunrise_day_angas.
                            nakshatras_with_ends[0].jd_end)

                        if nwd_fest_n == nakshatram_praatah:
                            # assert nwd_fest_n == nakshatra_ID
                            self.panchaanga.add_festival_instance(
                                festival_instance=FestivalInstance(
                                    name=nwd_fest_name,
                                    interval=Interval(
                                        jd_start=None,
                                        jd_end=nakshatra_end_jd)),
                                date=self.daily_panchaangas[d].date)
                        elif nwd_fest_n == nakshatram_saayam:
                            # assert n_prev == nakshatra_ID
                            self.panchaanga.add_festival_instance(
                                festival_instance=FestivalInstance(
                                    name=nwd_fest_name,
                                    interval=Interval(
                                        jd_start=nakshatra_end_jd,
                                        jd_end=None)),
                                date=self.daily_panchaangas[d].date)
                        else:
                            logging.error('Should never be here!')
Example #22
0
    def assign_amavasya_yoga(self):
        if 'amAvAsyA' not in self.panchaanga.festival_id_to_days:
            logging.error('Must compute amAvAsyA before coming here!')
        else:
            ama_days = self.panchaanga.festival_id_to_days['amAvAsyA']
            for ama_day in ama_days:
                d = int(ama_day - self.daily_panchaangas[0].date)
                # Get Name
                if self.daily_panchaangas[d].lunar_month_sunrise.index == 6:
                    pref = '(%s) mahAlaya ' % (names.get_chandra_masa(
                        self.daily_panchaangas[d].lunar_month_sunrise.index,
                        names.NAMES,
                        'hk',
                        visarga=False))
                elif self.daily_panchaangas[
                        d].solar_sidereal_date_sunset.month == 4:
                    pref = '%s (kaTaka) ' % (names.get_chandra_masa(
                        self.daily_panchaangas[d].lunar_month_sunrise.index,
                        names.NAMES,
                        'hk',
                        visarga=False))
                elif self.daily_panchaangas[
                        d].solar_sidereal_date_sunset.month == 10:
                    pref = 'mauni (%s/makara) ' % (names.get_chandra_masa(
                        self.daily_panchaangas[d].lunar_month_sunrise.index,
                        names.NAMES,
                        'hk',
                        visarga=False))
                else:
                    pref = names.get_chandra_masa(
                        self.daily_panchaangas[d].lunar_month_sunrise.index,
                        names.NAMES,
                        'hk',
                        visarga=False) + '-'

                apraahna_interval = self.daily_panchaangas[
                    d].day_length_based_periods.aparaahna_muhuurta
                ama_nakshatra_today = [
                    y for y in apraahna_interval.get_boundary_angas(
                        anga_type=AngaType.NAKSHATRA,
                        ayanaamsha_id=self.ayanaamsha_id).to_tuple()
                ]
                suff = ''
                # Assign
                if 23 in ama_nakshatra_today and self.daily_panchaangas[
                        d].lunar_month_sunrise.index == 10:
                    suff = ' (alabhyam–zraviSThA)'
                elif 24 in ama_nakshatra_today and self.daily_panchaangas[
                        d].lunar_month_sunrise.index == 10:
                    suff = ' (alabhyam–zatabhiSak)'
                elif ama_nakshatra_today[0] in [
                        15, 16, 17, 6, 7, 8, 23, 24, 25
                ]:
                    suff = ' (alabhyam–%s)' % names.NAMES['NAKSHATRA_NAMES'][
                        'hk'][ama_nakshatra_today[0]]
                elif ama_nakshatra_today[1] in [
                        15, 16, 17, 6, 7, 8, 23, 24, 25
                ]:
                    suff = ' (alabhyam–%s)' % names.NAMES['NAKSHATRA_NAMES'][
                        'hk'][ama_nakshatra_today[1]]
                if self.daily_panchaangas[d].date.get_weekday() in [1, 2, 4]:
                    if suff == '':
                        suff = ' (alabhyam–puSkalA)'
                    else:
                        suff = suff.replace(')', ', puSkalA)')
                self.festival_id_to_days[pref + 'amAvAsyA' + suff].add(
                    self.daily_panchaangas[d].date)

        self.panchaanga.delete_festival(fest_id='amAvAsyA')

        for d in range(self.panchaanga.duration_prior_padding,
                       self.panchaanga.duration + 1):
            [y, m, dt,
             t] = time.jd_to_utc_gregorian(self.panchaanga.jd_start + d -
                                           1).to_date_fractional_hour_tuple()

            # SOMAMAVASYA
            if self.daily_panchaangas[
                    d].sunrise_day_angas.tithi_at_sunrise.index == 30 and self.daily_panchaangas[
                        d].date.get_weekday() == 1:
                self.festival_id_to_days['sOmavatI amAvAsyA'].add(
                    self.daily_panchaangas[d].date)

            # AMA-VYATIPATA YOGAH
            # श्रवणाश्विधनिष्ठार्द्रानागदैवतमापतेत् ।
            # रविवारयुतामायां व्यतीपातः स उच्यते ॥
            # व्यतीपाताख्ययोगोऽयं शतार्कग्रहसन्निभः ॥
            # “In Mahabharata, if on a Sunday, Amavasya and one of the stars –
            # Sravanam, Asvini, Avittam, Tiruvadirai or Ayilyam, occurs, then it is called ‘Vyatipatam’.
            # This Vyatipata yoga is equal to a hundred Surya grahanas in merit.”
            tithi_sunset = NakshatraDivision(
                self.daily_panchaangas[d].jd_sunset,
                ayanaamsha_id=self.ayanaamsha_id).get_anga(
                    zodiac.AngaType.TITHI).index
            if self.daily_panchaangas[d].date.get_weekday() == 0 and (
                    self.daily_panchaangas[d].sunrise_day_angas.
                    tithi_at_sunrise.index == 30 or tithi_sunset == 30):
                # AMAVASYA on a Sunday
                if (self.daily_panchaangas[d].sunrise_day_angas.nakshatra_at_sunrise.index in [1, 6, 9, 22, 23] and self.daily_panchaangas[d].sunrise_day_angas.tithi_at_sunrise.index == 30) or \
                    (tithi_sunset == 30 and NakshatraDivision(self.daily_panchaangas[d].jd_sunset,
                                                              ayanaamsha_id=self.ayanaamsha_id).get_anga(
                      zodiac.AngaType.NAKSHATRA).index in [
                       1, 6, 9, 22, 23]):
                    festival_name = 'vyatIpAta-yOgaH (alabhyam)'
                    self.festival_id_to_days[festival_name].add(
                        self.daily_panchaangas[d].date)
                    logging.debug('* %d-%02d-%02d> %s!' %
                                  (y, m, dt, festival_name))