Beispiel #1
0
 def assign_chandra_darshanam(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()
         # Chandra Darshanam
         if self.daily_panchaangas[
                 d].sunrise_day_angas.tithi_at_sunrise.index == 1 or self.daily_panchaangas[
                     d].sunrise_day_angas.tithi_at_sunrise.index == 2:
             tithi_sunset = temporal.tithi.get_tithi(
                 self.daily_panchaangas[d].jd_sunset).index
             tithi_sunset_tmrw = temporal.tithi.get_tithi(
                 self.daily_panchaangas[d + 1].jd_sunset).index
             # if tithi_sunset <= 2 and tithi_sunset_tmrw != 2:
             fest = FestivalInstance(name='candra-darzanam')
             if tithi_sunset <= 2:
                 if tithi_sunset == 1:
                     self.daily_panchaangas[d + 1].festival_id_to_instance[
                         fest.name] = fest
                 else:
                     self.daily_panchaangas[d].festival_id_to_instance[
                         fest.name] = fest
             elif tithi_sunset_tmrw == 2:
                 self.daily_panchaangas[d + 1].festival_id_to_instance[
                     fest.name] = fest
Beispiel #2
0
 def compute_solar_eclipses(self):
     jd = self.panchaanga.jd_start
     while 1:
         next_eclipse_sol = self.panchaanga.city.get_solar_eclipse_time(
             jd_start=jd)
         [y, m, dt, t] = time.jd_to_utc_gregorian(
             next_eclipse_sol[1][0]).to_date_fractional_hour_tuple()
         local_time = tz(self.panchaanga.city.timezone).localize(
             datetime(y, m, dt, 6, 0, 0))
         # checking @ 6am local - can we do any better?
         tz_off = (datetime.utcoffset(local_time).days * 86400 +
                   datetime.utcoffset(local_time).seconds) / 3600.0
         # compute offset from UTC
         jd = next_eclipse_sol[1][0] + (tz_off / 24.0)
         jd_eclipse_solar_start = next_eclipse_sol[1][1] + (tz_off / 24.0)
         jd_eclipse_solar_end = next_eclipse_sol[1][4] + (tz_off / 24.0)
         # -1 is to not miss an eclipse that occurs after sunset on 31-Dec!
         if jd_eclipse_solar_start > self.panchaanga.jd_end + 1:
             break
         else:
             fday = int(
                 floor(jd) -
                 floor(self.daily_panchaangas[0].julian_day_start))
             if (jd <
                 (self.daily_panchaangas[fday].jd_sunrise + tz_off / 24.0)):
                 fday -= 1
             eclipse_solar_start = time.jd_to_utc_gregorian(
                 jd_eclipse_solar_start).get_fractional_hour()
             if (jd_eclipse_solar_start - (tz_off / 24.0)) == 0.0 or \
                 (jd_eclipse_solar_end - (tz_off / 24.0)) == 0.0:
                 # Move towards the next eclipse... at least the next new
                 # moon (>=25 days away)
                 jd += MIN_DAYS_NEXT_ECLIPSE
                 continue
             solar_eclipse_str = 'sUrya-grahaNam'
             if self.daily_panchaangas[fday].date.get_weekday() == 0:
                 solar_eclipse_str = '★cUDAmaNi-' + solar_eclipse_str
             self.daily_panchaangas[fday].festival_id_to_instance[
                 solar_eclipse_str] = (FestivalInstance(
                     name=solar_eclipse_str,
                     interval=Interval(jd_start=jd_eclipse_solar_start,
                                       jd_end=jd_eclipse_solar_end)))
         jd = jd + MIN_DAYS_NEXT_ECLIPSE
Beispiel #3
0
    def assign_bhriguvara_subrahmanya_vratam(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()

            # BHRGUVARA SUBRAHMANYA VRATAM
            if self.daily_panchaangas[
                    d].solar_sidereal_date_sunset.month == 7 and self.daily_panchaangas[
                        d].date.get_weekday() == 5:
                festival_name = 'bhRguvAra-subrahmaNya-vratam'
                if festival_name not in self.panchaanga.festival_id_to_days:
                    # only the first bhRguvAra of tulA mAsa is considered (skAnda purANam)
                    # https://youtu.be/rgXwyo0L3i8?t=222
                    self.festival_id_to_days[festival_name].add(
                        self.daily_panchaangas[d].date)
Beispiel #4
0
 def calc_nakshatra_tyaajya(self, debug=False):
   self.panchaanga.tyajyam_data = [[] for _x in range(self.panchaanga.duration + 1)]
   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()
     jd = self.daily_panchaangas[d].julian_day_start
     t_start = self.daily_panchaangas[d - 1].sunrise_day_angas.nakshatras_with_ends[-1].jd_end
     if t_start is not None:
       nakshatra_span = self.daily_panchaangas[d].sunrise_day_angas.nakshatras_with_ends[0]
       (n, t_end) = (nakshatra_span.name, nakshatra_span.jd_end)
       if t_end is None:
         t_end = self.daily_panchaangas[d + 1].sunrise_day_angas.nakshatras_with_ends[0].jd_end
       tyaajya_start = t_start + (t_end - t_start) / 60 * (TYAJYA_SPANS_REL[n - 1] - 1)
       tyaajya_end = t_start + (t_end - t_start) / 60 * (TYAJYA_SPANS_REL[n - 1] + 3)
       if tyaajya_start < self.daily_panchaangas[d].jd_sunrise:
         self.panchaanga.tyajyam_data[d - 1] += [(tyaajya_start, tyaajya_end)]
         if debug:
           logging.debug('![%3d]%04d-%02d-%02d: %s (>>%s), %s–%s' %
                         (d - 1, y, m, dt - 1, names.NAMES['NAKSHATRA_NAMES']['hk'][n],
                          Hour(24 * (t_end - self.daily_panchaangas[d - 1].julian_day_start)).toString(format='hh:mm*'),
                          Hour(24 * (tyaajya_start - self.daily_panchaangas[d - 1].julian_day_start)).toString(format='hh:mm*'),
                          Hour(24 * (tyaajya_end - self.daily_panchaangas[d - 1].julian_day_start)).toString(format='hh:mm*')))
       else:
         self.panchaanga.tyajyam_data[d] = [(tyaajya_start, tyaajya_end)]
         if debug:
           logging.debug(' [%3d]%04d-%02d-%02d: %s (>>%s), %s–%s' %
                         (d, y, m, dt, names.NAMES['NAKSHATRA_NAMES']['hk'][n],
                          Hour(24 * (t_end - jd)).toString(format='hh:mm*'),
                          Hour(24 * (tyaajya_start - jd)).toString(format='hh:mm*'),
                          Hour(24 * (tyaajya_end - jd)).toString(format='hh:mm*')))
 
     if len(self.daily_panchaangas[d].sunrise_day_angas.nakshatras_with_ends) == 2:
       t_start = t_end
       nakshatra_span = self.daily_panchaangas[d].sunrise_day_angas.nakshatras_with_ends[1]
       (n2, t_end) = (nakshatra_span.name, nakshatra_span.jd_end)
       
       tyaajya_start = t_start + (t_end - t_start) / 60 * (TYAJYA_SPANS_REL[n2 - 1] - 1)
       tyaajya_end = t_start + (t_end - t_start) / 60 * (TYAJYA_SPANS_REL[n2 - 1] + 3)
       self.panchaanga.tyajyam_data[d] += [(tyaajya_start, tyaajya_end)]
       if debug:
         logging.debug(' [%3d]            %s (>>%s), %s–%s' %
                       (d, names.NAMES['NAKSHATRA_NAMES']['hk'][n2],
                        Hour(24 * (t_end - jd)).toString(format='hh:mm*'),
                        Hour(24 * (tyaajya_start - jd)).toString(format='hh:mm*'),
                        Hour(24 * (tyaajya_end - jd)).toString(format='hh:mm*')))
Beispiel #5
0
    def assign_nakshatra_vara_yoga_vratam(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()

            # 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'),
                (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)
Beispiel #6
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.panchaanga.add_festival(
                    fest_id=festival_name, date=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.panchaanga.add_festival(
                    fest_id='bhadrA~saptamI',
                    date=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.panchaanga.add_festival(
                        fest_id='mahAjayA~saptamI',
                        date=self.daily_panchaangas[d].date)
 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)
Beispiel #8
0
def writeDailyText(panchaanga,
                   time_format="hh:mm",
                   script=sanscript.DEVANAGARI,
                   compute_lagnams=True,
                   output_file_stream=sys.stdout):
    """Write out the panchaanga TeX using a specified template
  """
    output_stream = StringIO()
    rules_collection = rules.RulesCollection.get_cached(
        repos_tuple=tuple(panchaanga.computation_system.options.fest_repos))
    fest_details_dict = rules_collection.name_to_rule
    month = {
        1: 'January',
        2: 'February',
        3: 'March',
        4: 'April',
        5: 'May',
        6: 'June',
        7: 'July',
        8: 'August',
        9: 'September',
        10: 'October',
        11: 'November',
        12: 'December'
    }
    WDAY = {
        0: 'Sunday',
        1: 'Monday',
        2: 'Tuesday',
        3: 'Wednesday',
        4: 'Thursday',
        5: 'Friday',
        6: 'Saturday'
    }
    SHULAM = [('pratIcI dik', 12, 'guDam'), ('prAcI dik', 8, 'dadhi'),
              ('udIcI dik', 12, 'kSIram'), ('udIcI dik', 16, 'kSIram'),
              ('dakSiNA dik', 20, 'tailam'), ('pratIcI dik', 12, 'guDam'),
              ('prAcI dik', 8, 'dadhi')]

    samvatsara_id = (panchaanga.year - 1568) % 60 + 1  # distance from prabhava
    samvatsara_names = (
        jyotisha.names.NAMES['SAMVATSARA_NAMES'][script][samvatsara_id],
        jyotisha.names.NAMES['SAMVATSARA_NAMES'][script][(samvatsara_id % 60) +
                                                         1])

    yname_solar = samvatsara_names[0]  # Assign year name until Mesha Sankranti
    yname_lunar = samvatsara_names[0]  # Assign year name until Mesha Sankranti

    # print(' \\sffamily \\fontsize 43  43 \\selectfont  %d–%d\\\\[0.5cm] \n\\hrule\n\\vspace 0.2cm '
    #       % (panchaanga.year + 3100, panchaanga.year + 3101), file=output_stream)
    # print(' \\sffamily \\fontsize 23  23 \\selectfont   %s \\\\[0.2cm] '
    #       % jyotisha.custom_transliteration.print_lat_lon(panchaanga.city.latitude, panchaanga.city.longitude), file=output_stream)
    daily_panchaangas = panchaanga.daily_panchaangas_sorted()
    for d in range(panchaanga.duration_prior_padding,
                   jyotisha.panchaanga.temporal.MAX_SZ - 1):
        daily_panchaanga = daily_panchaangas[d]
        [y, m, dt,
         t] = time.jd_to_utc_gregorian(panchaanga.jd_start + d -
                                       1).to_date_fractional_hour_tuple()

        print('## %02d-%s-%4d' % (dt, month[m], y), file=output_stream)

        jd = daily_panchaanga.julian_day_start

        tithi_data_str = ''
        for tithi_span in daily_panchaanga.sunrise_day_angas.tithis_with_ends:
            (tithi_ID, tithi_end_jd) = (tithi_span.name, tithi_span.jd_end)
            tithi = jyotisha.names.NAMES['TITHI_NAMES'][script][
                tithi_ID].split('-')[-1]
            paksha = jyotisha.custom_transliteration.tr(
                'zuklapakSaH' if tithi_ID <= 15 else 'kRSNapakSaH', script)
            if tithi_end_jd is None:
                tithi_data_str = '%s; %s►%s' % \
                                 (tithi_data_str, tithi,
                                  jyotisha.custom_transliteration.tr('ahOrAtram (tridinaspRk)', script))
            else:
                tithi_data_str = '%s; %s►%s (%s)%s' % \
                                 (tithi_data_str, tithi,
                                  Hour(
                                    24 * (tithi_end_jd - daily_panchaanga.jd_sunrise)).toString(format='gg-pp'),
                                  Hour(24 * (tithi_end_jd - jd)).toString(
                                    format=time_format),
                                  ' ')
                if tithi_ID % 15 == 0:
                    paksha = '%s►%s' % (paksha, Hour(
                        24 * (tithi_end_jd - jd)).toString(format=time_format))
        tithi_data_str = getName('tithiH', script) + '—' + tithi_data_str[2:]
        paksha_data_str = getName('pakSaH', script) + '—' + paksha

        nakshatra_data_str = ''
        for nakshatra_span in daily_panchaanga.sunrise_day_angas.nakshatras_with_ends:
            (nakshatra_ID, nakshatra_end_jd) = (nakshatra_span.name,
                                                nakshatra_span.jd_end)
            nakshatra = jyotisha.names.NAMES['NAKSHATRA_NAMES'][script][
                nakshatra_ID]
            if nakshatra_end_jd is None:
                nakshatra_data_str = '%s; %s►%s' % \
                                      (nakshatra_data_str, nakshatra,
                                       jyotisha.custom_transliteration.tr('ahOrAtram', script))
            else:
                nakshatra_data_str = '%s; %s►%s (%s)' % \
                                      (nakshatra_data_str, nakshatra,
                                       Hour(
                                         24 * (nakshatra_end_jd - daily_panchaanga.jd_sunrise)).toString(format='gg-pp'),
                                       Hour(24 * (nakshatra_end_jd - jd)).toString(
                                         format=time_format),
                                       )
        nakshatra_data_str = getName('nakSatram',
                                     script) + '—' + nakshatra_data_str[2:]

        chandrashtama_rashi_data_str = ''
        for raashi_span in daily_panchaanga.sunrise_day_angas.raashis_with_ends:
            (rashi_ID, rashi_end_jd) = (raashi_span.name, raashi_span.jd_end)
            rashi = jyotisha.names.NAMES['RASHI_SUFFIXED_NAMES'][script][
                rashi_ID]
            if rashi_end_jd is None:
                rashi_data_str = '%s' % (rashi)
                chandrashtama_rashi_data_str = getName(
                    'candrASTama-rAziH', script) + '—%s' % (
                        jyotisha.names.NAMES['RASHI_NAMES'][script][(
                            (rashi_ID - 8) % 12) + 1])
            else:
                rashi_data_str = '%s►%s' % (rashi,
                                            Hour(24 *
                                                 (rashi_end_jd - jd)).toString(
                                                     format=time_format))
                chandrashtama_rashi_data_str = getName(
                    'candrASTama-rAziH', script) + '—%s►%s; %s ➥' % (
                        jyotisha.names.NAMES['RASHI_NAMES'][script][(
                            (rashi_ID - 8) % 12) + 1],
                        Hour(24 *
                             (rashi_end_jd - jd)).toString(format=time_format),
                        jyotisha.names.NAMES['RASHI_NAMES'][script][(
                            (rashi_ID - 7) % 12) + 1])

        if compute_lagnams:
            lagna_data_str = ''
            for lagna_ID, lagna_end_jd in daily_panchaanga.lagna_data:
                lagna = jyotisha.names.NAMES['RASHI_NAMES'][script][lagna_ID]
                lagna_data_str = '%s; %s►%s' % \
                                 (lagna_data_str, lagna,
                                  Hour(24 * (lagna_end_jd - jd)).toString(
                                    format=time_format))
            lagna_data_str = getName('lagnam',
                                     script) + '—' + lagna_data_str[2:]

        yoga_data_str = ''
        for yoga_span in daily_panchaanga.sunrise_day_angas.yogas_with_ends:
            (yoga_ID, yoga_end_jd) = (yoga_span.anga.index, yoga_span.jd_end)
            # if yoga_data_str != '':
            #     yoga_data_str += ' '
            yoga = jyotisha.names.NAMES['YOGA_NAMES'][script][yoga_ID]
            if yoga_end_jd is None:
                yoga_data_str = '%s; %s►%s' % (
                    yoga_data_str, yoga,
                    jyotisha.custom_transliteration.tr('ahOrAtram', script))
            else:
                yoga_data_str = '%s; %s►%s (%s)' % (
                    yoga_data_str, yoga,
                    Hour(24 *
                         (yoga_end_jd - daily_panchaanga.jd_sunrise)).toString(
                             format='gg-pp'),
                    Hour(24 * (yoga_end_jd - jd)).toString(format=time_format))
        if yoga_end_jd is not None:
            yoga_data_str += '; %s ➥' % (
                jyotisha.names.NAMES['YOGA_NAMES'][script][(yoga_ID % 27) + 1])
        yoga_data_str = getName('yOgaH', script) + '—' + yoga_data_str[2:]

        karana_data_str = ''
        for numKaranam, karaNa_span in enumerate(
                daily_panchaanga.sunrise_day_angas.karanas_with_ends):
            (karana_ID, karana_end_jd) = (karaNa_span.anga.index,
                                          karaNa_span.jd_end)
            # if numKaranam == 1:
            #     karana_data_str += ' '
            karana = jyotisha.names.NAMES['KARANA_NAMES'][script][karana_ID]
            if karana_end_jd is None:
                karana_data_str = '%s; %s►%s' % \
                                   (karana_data_str, karana,
                                    jyotisha.custom_transliteration.tr('ahOrAtram', script))
            else:
                karana_data_str = '%s; %s►%s (%s)' % \
                                   (karana_data_str, karana,
                                    Hour(
                                      24 * (karana_end_jd - daily_panchaanga.jd_sunrise)).toString(format='gg-pp'),
                                    Hour(24 * (karana_end_jd - jd)).toString(
                                      format=time_format))
        if karana_end_jd is not None:
            karana_data_str += '; %s ➥' % (jyotisha.names.NAMES['KARANA_NAMES']
                                           [script][(karana_ID % 60) + 1])
        karana_data_str = getName('karaNam',
                                  script) + '—' + karana_data_str[2:]

        sunrise = Hour(24 * (daily_panchaanga.jd_sunrise - jd)).toString(
            format=time_format)
        sunset = Hour(24 * (daily_panchaanga.jd_sunset - jd)).toString(
            format=time_format)
        moonrise = Hour(24 * (daily_panchaanga.jd_moonrise - jd)).toString(
            format=time_format)
        moonset = Hour(24 * (daily_panchaanga.jd_moonset - jd)).toString(
            format=time_format)

        # braahma = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.braahma.jd_start - jd)).toString(format=time_format)
        # praatahsandhya = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.praatas_sandhyaa.jd_start - jd)).toString(format=time_format)
        # praatahsandhya_end = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.praatas_sandhyaa_end.jd_start - jd)).toString(format=time_format)
        # saangava = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.saangava.jd_start - jd)).toString(format=time_format)
        # madhyaahna = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.madhyaahna.jd_start - jd)).toString(format=time_format)
        # madhyahnika_sandhya = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.maadhyaahnika_sandhyaa.jd_start - jd)).toString(format=time_format)
        # madhyahnika_sandhya_end = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.maadhyaahnika_sandhyaa_end.jd_start - jd)).toString(format=time_format)
        aparaahna = Hour(
            24 *
            (daily_panchaanga.day_length_based_periods.aparaahna.jd_start -
             jd)).toString(format=time_format)
        sayahna = Hour(
            24 *
            (daily_panchaanga.day_length_based_periods.saayaahna.jd_start -
             jd)).toString(format=time_format)
        # sayamsandhya = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.saayam_sandhyaa.jd_start - jd)).toString(format=time_format)
        # sayamsandhya_end = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.saayam_sandhyaa_end.jd_start - jd)).toString(format=time_format)
        # ratriyama1 = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.raatri_yaama_1.jd_start - jd)).toString(format=time_format)
        # sayana_time = jyotisha.panchaanga.temporal.Time(24 * (daily_panchaanga.day_length_based_periods.shayana.jd_start - jd)).toString(format=time_format)
        dinaanta = Hour(
            24 * (daily_panchaanga.day_length_based_periods.dinaanta.jd_start -
                  jd)).toString(format=time_format)

        rahu = '%s–%s' % (
            Hour(24 *
                 (daily_panchaanga.day_length_based_periods.raahu.jd_start -
                  jd)).toString(format=time_format),
            Hour(24 * (daily_panchaanga.day_length_based_periods.raahu.jd_end -
                       jd)).toString(format=time_format))
        yama = '%s–%s' % (
            Hour(24 *
                 (daily_panchaanga.day_length_based_periods.yama.jd_start -
                  jd)).toString(format=time_format),
            Hour(24 * (daily_panchaanga.day_length_based_periods.yama.jd_end -
                       jd)).toString(format=time_format))
        gulika = '%s–%s' % (
            Hour(24 *
                 (daily_panchaanga.day_length_based_periods.gulika.jd_start -
                  jd)).toString(format=time_format),
            Hour(24 *
                 (daily_panchaanga.day_length_based_periods.gulika.jd_end -
                  jd)).toString(format=time_format))

        if daily_panchaanga.solar_sidereal_date_sunset.month == 1:
            # Flip the year name for the remaining days
            yname_solar = samvatsara_names[1]
        if daily_panchaanga.lunar_month_sunrise == 1:
            # Flip the year name for the remaining days
            yname_lunar = samvatsara_names[1]

        # Assign samvatsara, ayana, rtu #
        ayanam = jyotisha.names.NAMES['AYANA_NAMES'][script][
            daily_panchaanga.solar_sidereal_date_sunset.month]
        rtu_solar = jyotisha.names.NAMES['RTU_NAMES'][script][
            daily_panchaanga.solar_sidereal_date_sunset.month]
        rtu_lunar = jyotisha.names.NAMES['RTU_NAMES'][script][int(
            ceil(daily_panchaanga.lunar_month_sunrise))]

        if daily_panchaanga.solar_sidereal_date_sunset.month_transition is None:
            month_end_str = ''
        else:
            _m = daily_panchaangas[d - 1].solar_sidereal_date_sunset.month
            if daily_panchaanga.solar_sidereal_date_sunset.month_transition >= daily_panchaangas[
                    d + 1].jd_sunrise:
                month_end_str = '%s►%s' % (
                    jyotisha.names.NAMES['RASHI_NAMES'][script][_m],
                    Hour(24 *
                         (daily_panchaanga.solar_sidereal_date_sunset.
                          month_transition -
                          daily_panchaangas[d + 1].julian_day_start)).toString(
                              format=time_format))
            else:
                month_end_str = '%s►%s' % (
                    jyotisha.names.NAMES['RASHI_NAMES'][script][_m],
                    Hour(24 *
                         (daily_panchaanga.solar_sidereal_date_sunset.
                          month_transition - daily_panchaanga.julian_day_start)
                         ).toString(format=time_format))
        if month_end_str == '':
            month_data = '%s (%s %d)' % (
                jyotisha.names.NAMES['RASHI_NAMES'][script][
                    daily_panchaanga.solar_sidereal_date_sunset.month],
                getName('dinaM', script),
                daily_panchaanga.solar_sidereal_date_sunset.day)
        else:
            month_data = '%s (%s %d); %s' % (
                jyotisha.names.NAMES['RASHI_NAMES'][script][
                    daily_panchaanga.solar_sidereal_date_sunset.month],
                getName('dinaM', script),
                daily_panchaanga.solar_sidereal_date_sunset.day, month_end_str)

        vara = jyotisha.names.NAMES['VARA_NAMES'][script][
            daily_panchaanga.date.get_weekday()]

        if yname_lunar == yname_solar:
            print(getName('saMvatsaraH', script) + '—%s' % yname_lunar,
                  file=output_stream)
            print(getName('ayanam', script) + '—%s' % ayanam,
                  file=output_stream)
        if rtu_lunar == rtu_solar:
            print(getName('RtuH', script) + '—%s' % rtu_lunar,
                  file=output_stream)

        print('°' * 25, file=output_stream)
        print('☀ ' + getName('sauramAnam', script), file=output_stream)
        if yname_lunar != yname_solar:
            print(getName('saMvatsaraH', script) + '—%s' % yname_solar,
                  file=output_stream)
            print(getName('ayanam', script) + '—%s' % ayanam,
                  file=output_stream)
        if rtu_lunar != rtu_solar:
            print(getName('RtuH', script) + '—%s' % rtu_solar,
                  file=output_stream)
        print(getName('mAsaH', script) + '—%s' % month_data,
              file=output_stream)
        print('°' * 25, file=output_stream)

        print('⚪ ' + getName('cAndramAnam', script), file=output_stream)
        if yname_lunar != yname_solar:
            print(getName('saMvatsaraH', script) + '—%s' % yname_lunar,
                  file=output_stream)
            print(getName('ayanam', script) + '—%s' % ayanam,
                  file=output_stream)
        if rtu_lunar != rtu_solar:
            print(getName('RtuH', script) + '—%s' % rtu_lunar,
                  file=output_stream)
        print(getName('mAsaH', script) +
              '—%s' % jyotisha.names.get_chandra_masa(
                  daily_panchaanga.lunar_month_sunrise, jyotisha.names.NAMES,
                  script),
              file=output_stream)
        print('°' * 25, file=output_stream)
        # braahma
        # praatahsandhya, praatahsandhya_end
        # saangava
        # madhyahnika_sandhya, madhyahnika_sandhya_end
        # madhyaahna
        # aparaahna
        # sayahna
        # sayamsandhya, sayamsandhya_end
        # dinaanta
        print('%s' % (paksha_data_str), file=output_stream)
        print('%s' % (tithi_data_str), file=output_stream)
        print('%s—%s' % (getName('vAsaraH', script), vara), file=output_stream)
        print('%s (%s)' % (nakshatra_data_str, rashi_data_str),
              file=output_stream)
        print('%s' % (yoga_data_str), file=output_stream)
        print('%s' % (karana_data_str), file=output_stream)
        print('%s' % (chandrashtama_rashi_data_str), file=output_stream)

        if daily_panchaanga.jd_moonrise > daily_panchaangas[d + 1].jd_sunrise:
            moonrise = '---'
        if daily_panchaanga.jd_moonset > daily_panchaangas[d + 1].jd_sunrise:
            moonset = '---'

        print(
            '### **%s (%s)**' %
            (getName('LOC', script),
             jyotisha.custom_transliteration.tr(panchaanga.city.name, script)),
            file=output_stream)

        if compute_lagnams:
            print('%s' % (lagna_data_str), file=output_stream)

        if daily_panchaanga.jd_moonrise < daily_panchaanga.jd_moonset:
            print('%s—%s; %s—%s' % (getName('sUryOdayaH', script), sunrise,
                                    getName('sUryAstamayaH', script), sunset),
                  file=output_stream)
            print('%s—%s; %s—%s' %
                  (getName('candrOdayaH', script), moonrise,
                   getName('candrAstamayaH', script), moonset),
                  file=output_stream)
        else:
            print('%s—%s; %s—%s' % (getName('sUryOdayaH', script), sunrise,
                                    getName('sUryAstamayaH', script), sunset),
                  file=output_stream)
            print('%s—%s; %s—%s' % (getName('candrAstamayaH', script), moonset,
                                    getName('candrOdayaH', script), moonrise),
                  file=output_stream)

        print('%s—%s►%s' %
              (getName('aparAhNa-kAlaH', script), aparaahna, sayahna),
              file=output_stream)
        print('%s—%s' % (getName('dinAntaH', script), dinaanta),
              file=output_stream)
        print('%s—%s\n%s—%s\n%s—%s' % (getName(
            'rAhukAlaH', script), rahu, getName('yamaghaNTaH', script), yama,
                                       getName('gulikakAlaH', script), gulika),
              file=output_stream)

        shulam_end_jd = daily_panchaanga.jd_sunrise + (
            daily_panchaanga.jd_sunset - daily_panchaanga.jd_sunrise) * (
                SHULAM[daily_panchaanga.date.get_weekday()][1] / 30)
        print(
            '%s—%s (►%s); %s–%s' %
            (getName('zUlam', script),
             getName(SHULAM[daily_panchaanga.date.get_weekday()][0], script),
             Hour(24 * (shulam_end_jd - jd)).toString(format=time_format),
             getName('parihAraH', script),
             getName(SHULAM[daily_panchaanga.date.get_weekday()][2], script)),
            file=output_stream)
        # Using set as an ugly workaround since we may have sometimes assigned the same
        # festival to the same day again!
        fest_list = []
        for f in sorted(daily_panchaanga.festival_id_to_instance.values()):
            fest_name_cleaned = f.get_best_transliterated_name(
                scripts=[script], fest_details_dict=fest_details_dict).replace(
                    '~', ' ').replace('tamil', '')
            fest_name_cleaned = re.sub('[{}]', '', fest_name_cleaned).replace(
                '\\', '').replace('textsf',
                                  '').replace('To',
                                              '►').replace('RIGHTarrow', '►')
            fest_list.append(fest_name_cleaned)

        if len(fest_list):
            print('#### %s\n%s\n' %
                  (getName('dina-vizESAH', script), '; '.join(fest_list)),
                  file=output_stream)
        else:
            print('', file=output_stream)

        output_text = cleanTamilNa(output_stream.getvalue())
        output_text = output_text.replace('\n', '\\\n')
        output_text = output_text.replace('\n\\', '\n')
        output_text = output_text.replace('\\\n\n', '\n\n')
        output_text = output_text.replace('\\\n#', '\n#')
        output_text = re.sub(r'(#.*)\\\n', r'\1\n', output_text)
        # output_text = re.sub(r'^\\', r'', output_text)
        print(output_text, file=output_file_stream)
        output_stream = StringIO()

        if m == 12 and dt == 31:
            break
    def assign_shasthi_vratam(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()
            # # SHASHTHI Vratam
            # Check only for Adhika maasa here...
            festival_name = 'SaSThI-vratam'
            if self.daily_panchaangas[d].lunar_month_sunrise.index == 8:
                festival_name = 'skanda' + festival_name
            elif self.daily_panchaangas[d].lunar_month_sunrise.index == 4:
                festival_name = 'kumAra-' + festival_name
            elif self.daily_panchaangas[d].lunar_month_sunrise.index == 6:
                festival_name = 'SaSThIdEvI-' + festival_name
            elif self.daily_panchaangas[d].lunar_month_sunrise.index == 9:
                festival_name = 'subrahmaNya-' + festival_name

            if self.daily_panchaangas[
                    d].sunrise_day_angas.tithi_at_sunrise.index == 5 or self.daily_panchaangas[
                        d].sunrise_day_angas.tithi_at_sunrise.index == 6:
                (d0_angas, d1_angas) = get_2_day_interval_boundary_angas(
                    kaala="madhyaahna",
                    anga_type=AngaType.TITHI,
                    p0=self.daily_panchaangas[d],
                    p1=self.daily_panchaangas[d + 1])

                if d0_angas.start.index == 6 or d0_angas.end.index == 6:
                    if festival_name in self.panchaanga.festival_id_to_days:
                        # Check if yesterday was assigned already
                        # to this puurvaviddha festival!
                        if self.daily_panchaangas[
                                d -
                                1].date not in self.panchaanga.festival_id_to_days[
                                    festival_name]:
                            self.festival_id_to_days[festival_name].add(
                                self.daily_panchaangas[d].date)
                    else:
                        self.festival_id_to_days[festival_name].add(
                            self.daily_panchaangas[d].date)
                elif d1_angas.start.index == 6 or d1_angas.end.index == 6:
                    self.festival_id_to_days[festival_name].add(
                        self.daily_panchaangas[d + 1].date)
                else:
                    # This means that the correct anga did not
                    # touch the kaala on either day!
                    # sys.stderr.write('Could not assign puurvaviddha day for %s!\
                    # Please check for unusual cases.\n' % festival_name)
                    if d1_angas.start.index == 6 + 1 or d1_angas.end.index == 6 + 1:
                        # Need to assign a day to the festival here
                        # since the anga did not touch kaala on either day
                        # BUT ONLY IF YESTERDAY WASN'T ALREADY ASSIGNED,
                        # THIS BEING PURVAVIDDHA
                        # Perhaps just need better checking of
                        # conditions instead of this fix
                        if festival_name in self.panchaanga.festival_id_to_days:
                            if self.daily_panchaangas[
                                    d -
                                    1].date not in self.panchaanga.festival_id_to_days[
                                        festival_name]:
                                self.festival_id_to_days[festival_name].add(
                                    self.daily_panchaangas[d].date)
                        else:
                            self.festival_id_to_days[festival_name].add(
                                self.daily_panchaangas[d].date)
Beispiel #10
0
def test_jd_to_utc():
    assert time.jd_to_utc_gregorian(
        2458434.083333251).to_date_fractional_hour_tuple() == [
            2018, 11, 11, 13.99999802559611
        ]
Beispiel #11
0
def write_monthly_tex(panchaanga, time_format="hh:mm", languages=None, scripts=None):
  """Write out the panchaanga TeX using a specified template
  """
  if scripts is None:
    scripts = [sanscript.DEVANAGARI]
  day_colours = {0: 'blue', 1: 'blue', 2: 'blue',
                 3: 'blue', 4: 'blue', 5: 'blue', 6: 'blue'}

  if languages is None:
    languages = ["sa"]

  monthly_template_file = open(os.path.join(os.path.dirname(__file__), 'templates/monthly_cal_template.tex'))

  template_lines = monthly_template_file.readlines()
  for i in range(0, len(template_lines) - 3):
    print(template_lines[i][:-1])

  samvatsara_id = (panchaanga.year - 1568) % 60 + 1  # distance from prabhava
  samvatsara_names = '%s–%s' % (names.NAMES['SAMVATSARA_NAMES']['sa'][scripts[0]][samvatsara_id],
                                names.NAMES['SAMVATSARA_NAMES']['sa'][scripts[0]][(samvatsara_id % 60) + 1])

  print('\\mbox{}')
  print('{\\sffamily\\fontsize{60}{25}\\selectfont %d\\\\[0.5cm]}' % panchaanga.year)
  print('\\mbox{\\font\\x="Siddhanta:language=deva" at 48 pt\\x %s}\\\\[0.5cm]' %
        samvatsara_names)
  print('\\mbox{\\font\\x="Siddhanta:language=deva" at 32 pt\\x %s } %%'
        % jyotisha.custom_transliteration.tr('kali', scripts[0]))
  print('{\\sffamily\\fontsize{32}{25}\\selectfont %d–%d\\\\[0.5cm]}'
        % (panchaanga.year + 3100, panchaanga.year + 3101))
  print('{\\sffamily\\fontsize{48}{25}\\selectfont \\uppercase{%s}\\\\[0.2cm]}' %
        panchaanga.city.name)
  print('{\\sffamily\\fontsize{16}{25}\\selectfont {%s}\\\\[0.5cm]}' %
        jyotisha.custom_transliteration.print_lat_lon(panchaanga.city.latitude, panchaanga.city.longitude))
  print('\\hrule')

  print('\\newpage')
  print('\\centering')
  print('\\centerline{\\LARGE {{%s}}}' % jyotisha.custom_transliteration.tr('mAsAntara-vizESAH', scripts[0]))
  print('\\begin{multicols*}{3}')
  print('\\TrickSupertabularIntoMulticols')
  print('\\begin{supertabular}' +
        '{>{\\sffamily}r>{\\sffamily}r>{\\sffamily}c>{\\hangindent=2ex}p{8cm}}')

  mlast = 1
  daily_panchaangas = panchaanga.daily_panchaangas_sorted()
  for d in range(panchaanga.duration_prior_padding, jyotisha.panchaanga.temporal.MAX_SZ - 1):
    [y, m, dt, t] = time.jd_to_utc_gregorian(panchaanga.jd_start + d - 1).to_date_fractional_hour_tuple()
    daily_panchaanga = daily_panchaangas[d]

    rules_collection = rules.RulesCollection.get_cached(
      repos_tuple=tuple(panchaanga.computation_system.festival_options.repos), julian_handling=panchaanga.computation_system.festival_options.julian_handling)
    fest_details_dict = rules_collection.name_to_rule

    if len(daily_panchaanga.festival_id_to_instance) != 0:
      if m != mlast:
        mlast = m
        print('\\\\')

      print('%s & %s & %s & {\\raggedright %s} \\\\' %
            (names.month_map[m], dt, names.weekday_short_map[daily_panchaanga.date.get_weekday()],
             '\\\\'.join([f.tex_code(languages=languages, scripts=scripts, timezone=panchaanga.city.timezone, fest_details_dict=fest_details_dict, reference_date=daily_panchaanga.date)
                          for f in sorted(daily_panchaanga.festival_id_to_instance.values())])))

    if m == 12 and dt == 31:
      break

  print('\\end{supertabular}')
  print('\\end{multicols*}')
  print('\\renewcommand{\\tamil}[1]{%')
  print('{\\fontspec[Scale=0.9,FakeStretch=0.9]{Noto Sans Tamil}\\fontsize{7}{12}\\selectfont #1}}')

  # print('\\clearpage')

  month_text = ''
  W6D1 = W6D2 = ''
  for d in range(panchaanga.duration_prior_padding, jyotisha.panchaanga.temporal.MAX_SZ - 1):
    [y, m, dt, t] = time.jd_to_utc_gregorian(panchaanga.jd_start + d - 1).to_date_fractional_hour_tuple()

    # checking @ 6am local - can we do any better?
    local_time = tz(panchaanga.city.timezone).localize(datetime(y, m, dt, 6, 0, 0))
    # compute offset from UTC in hours
    tz_off = (datetime.utcoffset(local_time).days * 86400 +
              datetime.utcoffset(local_time).seconds) / 3600.0

    # What is the jd at 00:00 local time today?
    jd = daily_panchaanga.julian_day_start

    if dt == 1:
      currWeek = 1
      if m > 1:
        month_text = month_text.replace('W6D1', W6D1)
        month_text = month_text.replace('W6D2', W6D2)
        print(month_text)
        month_text = W6D1 = W6D2 = ''
        if currWeek < 6:
          if daily_panchaanga.date.get_weekday() != 0:  # Space till Sunday
            for i in range(daily_panchaanga.date.get_weekday(), 6):
              print("\\mbox{}  & %% %d" % currWeek)
            print("\\\\ \\hline")
        print('\\end{tabular}')
        print('\n\n')

      # Begin tabular
      print('\\begin{tabular}{|c|c|c|c|c|c|c|}')
      print('\\multicolumn{7}{c}{\\Large \\bfseries \\sffamily %s %s}\\\\[3mm]' % (
        names.month_map[m], y))
      print('\\hline')
      WDAY_NAMES = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
      print(' & '.join(['\\textbf{\\textsf{%s}}' %
                        _day for _day in WDAY_NAMES]) + ' \\\\ \\hline')

      # Blanks for previous weekdays
      for i in range(0, daily_panchaanga.date.get_weekday()):
        if i == 0:
          month_text += '\n' + ("{W6D1}  &")
        elif i == 1:
          month_text += '\n' + ("{W6D2}  &")
        else:
          month_text += '\n' + ("{}  &")

    tithi_data_str = day_details.get_tithi_data_str(daily_panchaanga, scripts, time_format)

    nakshatra_data_str = day_details.get_nakshatra_data_str(daily_panchaanga, scripts, time_format)

    yoga_data_str = day_details.get_yoga_data_str(daily_panchaanga, scripts, time_format)

    karana_data_str = day_details.get_karaNa_data_str(daily_panchaanga, scripts, time_format)


    sunrise = Hour(24 * (daily_panchaanga.jd_sunrise - jd)).to_string(
      format=time_format)
    sunset = Hour(24 * (daily_panchaanga.jd_sunset - jd)).to_string(format=time_format)
    saangava = Hour(24 * (daily_panchaanga.day_length_based_periods.fifteen_fold_division.saangava.jd_start - jd)).to_string(
      format=time_format)
    rahu = '%s--%s' % (
      Hour(24 * (daily_panchaanga.day_length_based_periods.eight_fold_division.raahu.jd_start - jd)).to_string(
        format=time_format),
      Hour(24 * (daily_panchaanga.day_length_based_periods.eight_fold_division.raahu.jd_end - jd)).to_string(
        format=time_format))
    yama = '%s--%s' % (
      Hour(24 * (daily_panchaanga.day_length_based_periods.eight_fold_division.yama.jd_start - jd)).to_string(
        format=time_format),
      Hour(24 * (daily_panchaanga.day_length_based_periods.eight_fold_division.yama.jd_end - jd)).to_string(
        format=time_format))

    if daily_panchaanga.solar_sidereal_date_sunset.month_transition is None:
      month_end_str = ''
    else:
      _m = daily_panchaangas[d - 1].solar_sidereal_date_sunset.month
      if daily_panchaanga.solar_sidereal_date_sunset.month_transition >= daily_panchaangas[d + 1].jd_sunrise:
        month_end_str = '\\mbox{%s{\\tiny\\RIGHTarrow}\\textsf{%s}}' % (
          names.NAMES['RASHI_NAMES']['sa'][scripts[0]][_m], Hour(
            24 * (daily_panchaanga.solar_sidereal_date_sunset.month_transition - daily_panchaangas[d + 1].julian_day_start)).to_string(format=time_format))
      else:
        month_end_str = '\\mbox{%s{\\tiny\\RIGHTarrow}\\textsf{%s}}' % (
          names.NAMES['RASHI_NAMES']['sa'][scripts[0]][_m], Hour(
            24 * (daily_panchaanga.solar_sidereal_date_sunset.month_transition - daily_panchaanga.julian_day_start)).to_string(format=time_format))

    month_data = '\\sunmonth{%s}{%d}{%s}' % (
      names.NAMES['RASHI_NAMES']['sa'][scripts[0]][daily_panchaanga.solar_sidereal_date_sunset.month], daily_panchaanga.solar_sidereal_date_sunset.day,
      month_end_str)

    if currWeek < 6:
      month_text += '\n' + ('\\caldata{\\textcolor{%s}{%s}}{%s{%s}}%%' %
                            (day_colours[daily_panchaanga.date.get_weekday()], dt, month_data,
                             names.get_chandra_masa(daily_panchaanga.lunar_month_sunrise, scripts[0])))
      month_text += '\n' + ('{\\sundata{%s}{%s}{%s}}%%' % (sunrise, sunset, saangava))
      month_text += '\n' + ('{\\tnyk{%s}%%\n{%s}%%\n{%s}%%\n{%s}}%%' % (tithi_data_str, nakshatra_data_str,
                                                                        yoga_data_str, karana_data_str))
      month_text += '\n' + ('{\\rahuyama{%s}{%s}}%%' % (rahu, yama))

      # Using set as an ugly workaround since we may have sometimes assigned the same
      # festival to the same day again!
      month_text += '\n' + ('{%s}' % '\\eventsep '.join(
        [f.tex_code(languages=languages, scripts=scripts, timezone=panchaanga.city.timezone, fest_details_dict=fest_details_dict, reference_date=daily_panchaanga.date) for f in
         sorted(daily_panchaanga.festival_id_to_instance.values())]))
    else:
      if daily_panchaanga.date.get_weekday() == 0:
        W6D1 = '\n' + ('\\caldata{\\textcolor{%s}{%s}}{%s{%s}}%%' %
                       (day_colours[daily_panchaanga.date.get_weekday()], dt, month_data,
                        names.get_chandra_masa(daily_panchaanga.lunar_month_sunrise,scripts[0])))
        W6D1 += '\n' + ('{\\sundata{%s}{%s}{%s}}%%' % (sunrise, sunset, saangava))
        W6D1 += '\n' + ('{\\tnyk{%s}%%\n{%s}%%\n{%s}%%\n{%s}}%%' % (tithi_data_str, nakshatra_data_str,
                                                                    yoga_data_str, karana_data_str))
        W6D1 += '\n' + ('{\\rahuyama{%s}{%s}}%%' % (rahu, yama))

        # Using set as an ugly workaround since we may have sometimes assigned the same
        # festival to the same day again!
        W6D1 += '\n' + ('{%s}' % '\\eventsep '.join(
          [f.tex_code(languages=languages, scripts=scripts, timezone=Timezone(panchaanga.city.timezone), fest_details_dict=fest_details_dict, reference_date=daily_panchaanga.date) for f in sorted(daily_panchaanga.festival_id_to_instance.values())]))
      elif daily_panchaanga.date.get_weekday() == 1:
        W6D2 = '\n' + ('\\caldata{\\textcolor{%s}{%s}}{%s{%s}}%%' %
                       (day_colours[daily_panchaanga.date.get_weekday()], dt, month_data,
                        names.get_chandra_masa(daily_panchaanga.lunar_month_sunrise,scripts[0])))
        W6D2 += '\n' + ('{\\sundata{%s}{%s}{%s}}%%' % (sunrise, sunset, saangava))
        W6D2 += '\n' + ('{\\tnyk{%s}%%\n{%s}%%\n{%s}%%\n{%s}}%%' % (tithi_data_str, nakshatra_data_str,
                                                                    yoga_data_str, karana_data_str))
        W6D2 += '\n' + ('{\\rahuyama{%s}{%s}}%%' % (rahu, yama))

        # Using set as an ugly workaround since we may have sometimes assigned the same
        # festival to the same day again!
        W6D2 += '\n' + ('{%s}' % '\\eventsep '.join(
          [f.tex_code(languages=languages, scripts=scripts, timezone=panchaanga.city.timezone, fest_details_dict=fest_details_dict, reference_date=daily_panchaanga.date) for f in sorted(daily_panchaanga.festival_id_to_instance.values())]))
      else:
        # Cannot be here, since we cannot have more than 2 days in week 6 of any month!
        pass

    if daily_panchaanga.date.get_weekday() == 6:
      month_text += '\n' + ("\\\\ \\hline %%END OF WEEK %d" % (currWeek))
      currWeek += 1
    else:
      if currWeek < 6:
        month_text += '\n' + ("&")

    if m == 12 and dt == 31:
      break

  month_text = month_text.replace('W6D1', W6D1)
  month_text = month_text.replace('W6D2', W6D2)
  print(month_text)

  if currWeek < 6:
    for i in range(daily_panchaanga.date.get_weekday() + 1, 6):
      print("{}  &")
    if daily_panchaanga.date.get_weekday() != 6:
      print("\\\\ \\hline")
  print('\\end{tabular}')
  print('\n\n')

  print(template_lines[-2][:-1])
  print(template_lines[-1][:-1])
Beispiel #12
0
    def assign_shraaddha_tithi(self, debug_shraaddha_tithi=False):
        tithi_days = [{z: [] for z in range(0, 32)} for _x in range(13)]
        lunar_tithi_days = {}
        daily_panchaangas = self.daily_panchaangas

        def _assign(self, fday, tithi):
            if daily_panchaangas[
                    fday].shraaddha_tithi == [] or daily_panchaangas[
                        fday].shraaddha_tithi == [tithi]:
                daily_panchaangas[fday].shraaddha_tithi = [tithi]
            else:
                daily_panchaangas[fday].shraaddha_tithi.append(tithi)
                if daily_panchaangas[fday -
                                     1].shraaddha_tithi.count(tithi) == 1:
                    daily_panchaangas[fday - 1].shraaddha_tithi.remove(tithi)

        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()

            (d0_angas, d1_angas) = get_2_day_interval_boundary_angas(
                kaala="aparaahna",
                anga_type=AngaType.TITHI,
                p0=self.daily_panchaangas[d],
                p1=self.daily_panchaangas[d + 1])
            angam_start = d0_angas.start
            next_anga = angam_start + 1
            nnext_anga = next_anga + 1

            # Calc vyaaptis
            t_start_d, t_end_d = interval.get_interval(
                daily_panchaangas[d].jd_sunrise,
                daily_panchaangas[d].jd_sunset, 3, 5).to_tuple()
            span_1 = t_end_d - t_start_d
            span_2 = 0
            for tithi_span in daily_panchaangas[
                    d].sunrise_day_angas.tithis_with_ends:
                tithi_end = tithi_span.jd_end
                if tithi_end is None:
                    pass
                elif t_start_d < tithi_end < t_end_d:
                    span_1 = tithi_end - t_start_d
                    span_2 = t_end_d - tithi_end

            t_start_d1, t_end_d1 = interval.get_interval(
                daily_panchaangas[d + 1].jd_sunrise,
                daily_panchaangas[d + 1].jd_sunset, 3, 5).to_tuple()
            vyapti_3 = t_end_d1 - t_start_d1
            for tithi_span in daily_panchaangas[
                    d + 1].sunrise_day_angas.tithis_with_ends:
                tithi_end = tithi_span.jd_end
                if tithi_end is None:
                    pass
                elif t_start_d1 < tithi_end < t_end_d1:
                    vyapti_3 = tithi_end - t_start_d1

            # Combinations
            # <a> 1 1 1 1 - d + 1: 1
            # <b> 1 1 2 2 - d: 1
            # <f> 1 1 2 3 - d: 1, d+1: 2
            # <e> 1 1 1 2 - d, or vyApti (just in case next day aparaahna is slightly longer): 1
            # <d> 1 1 3 3 - d: 1, 2
            # <h> 1 2 3 3 - d: 2
            # <c> 1 2 2 2 - d + 1: 2
            # <g> 1 2 2 3 - vyApti: 2
            fday = -1
            reason = '?'
            # if sunrise_day_angas[1] == angam_start:
            #     logging.debug('Pre-emptively assign %2d to %3d, can be removed tomorrow if need be.' % (angam_start, d))
            #     _assign(self, d, angam_start)
            if d1_angas.end == angam_start:  # <a>
                # Full aparaahnas on both days, so second day
                fday = d + 1
                s_tithi = angam_start
                reason = '%2d incident on consecutive days; paraviddhA' % s_tithi.index
            elif (d0_angas.end == angam_start) and (d1_angas.start
                                                    == next_anga):  # <b>/<f>
                fday = d
                s_tithi = d0_angas.start
                reason = '%2d not incident on %3d' % (s_tithi.index, d + 1)
                if d1_angas.end == nnext_anga:  # <f>
                    if debug_shraaddha_tithi:
                        logging.debug('%03d [%4d-%02d-%02d]: %s' % (
                            d, y, m, dt,
                            'Need to assign %2d to %3d as it is present only at start of aparAhna tomorrow!)'
                            % (next_anga.index, d + 1)))
                    _assign(self, d + 1, next_anga)
            elif d1_angas.start == angam_start:  # <e>
                if span_1 > vyapti_3:
                    # Most likely
                    fday = d
                    s_tithi = d1_angas.start
                    reason = '%2d has more vyApti on day %3d (%f ghatikAs; full?) compared to day %3d (%f ghatikAs)' % (
                        s_tithi.index, d, span_1 * 60, d + 1, vyapti_3 * 60)
                else:
                    fday = d + 1
                    s_tithi = d1_angas.start
                    reason = '%2d has more vyApti on day %3d (%f ghatikAs) compared to day %3d (%f ghatikAs) --- unusual!' % (
                        s_tithi.index, d + 1, vyapti_3 * 60, d, span_1 * 60)
            elif d1_angas.start == nnext_anga:  # <d>/<h>
                if d0_angas.end == next_anga:  # <h>
                    fday = d
                    s_tithi = d0_angas.end
                    reason = '%2d has some vyApti on day %3d; not incident on day %3d at all' % (
                        s_tithi.index, d, d + 1)
                else:  # <d>
                    s_tithi = angam_start
                    fday = d
                    reason = '%2d is incident fully at aparAhna today (%3d), and not incident tomorrow (%3d)!' % (
                        s_tithi.index, d, d + 1)
                    # Need to check vyApti of next_anga in sAyaMkAla: if it's nearly entire sAyaMkAla ie 5-59-30 or more!
                    if debug_shraaddha_tithi:
                        logging.debug('%03d [%4d-%02d-%02d]: %s' % (
                            d, y, m, dt,
                            '%2d not incident at aparAhna on either day (%3d/%3d); picking second day %3d!'
                            % (next_anga, d, d + 1, d + 1)))
                    _assign(self, d + 1, next_anga)
                    # logging.debug(reason)
            elif d0_angas.end == d1_angas.start == d1_angas.end == next_anga:  # <c>
                s_tithi = next_anga
                fday = d + 1
                reason = '%2d has more vyApti on %3d (full) compared to %3d (part)' % (
                    s_tithi.index, d + 1, d)
            elif d0_angas.end == d1_angas.start == next_anga:  # <g>
                s_tithi = d1_angas.start
                if span_2 > vyapti_3:
                    # Most likely
                    fday = d
                    reason = '%2d has more vyApti on day %3d (%f ghatikAs) compared to day %3d (%f ghatikAs)' % (
                        s_tithi.index, d, span_2 * 60, d + 1, vyapti_3 * 60)
                else:
                    fday = d + 1
                    reason = '%2d has more vyApti on day %3d (%f ghatikAs) compared to day %3d (%f ghatikAs)' % (
                        s_tithi.index, d + 1, vyapti_3 * 60, d, span_2 * 60
                    )  # Examine for greater vyApti
            else:
                logging.error('Should not reach here ever! %s %s',
                              d0_angas.to_tuple(), d1_angas.to_tuple())
                reason = '?'
            if debug_shraaddha_tithi:
                logging.debug(
                    '%03d [%4d-%02d-%02d]: Assigning tithi %2d to %3d (%s).' %
                    (d, y, m, dt, s_tithi.index, fday, reason))
            _assign(self, fday, s_tithi)

        if debug_shraaddha_tithi:
            logging.debug(self.panchaanga.shraaddha_tithi)

        for z in set([x.lunar_month_sunrise for x in self.daily_panchaangas]):
            lunar_tithi_days[z] = {}
        for d in range(self.panchaanga.duration_prior_padding,
                       self.panchaanga.duration + 1):
            for t in daily_panchaangas[d].shraaddha_tithi:
                lunar_tithi_days[daily_panchaangas[d].lunar_month_sunrise][
                    t.index] = d

        # Following this primary assignment, we must now "clean" for Sankranti, and repetitions
        # If there are two tithis, take second. However, if the second has sankrAnti dushtam, take
        # first. If both have sankrAnti dushtam, take second.
        for d in range(self.panchaanga.duration_prior_padding,
                       self.panchaanga.duration + 1):
            if daily_panchaangas[d].shraaddha_tithi != []:
                if daily_panchaangas[
                        d].solar_sidereal_date_sunset.month_transition is not None:
                    if debug_shraaddha_tithi:
                        logging.debug(
                            (d, daily_panchaangas[d].
                             solar_sidereal_date_sunset.month_transition))
                    aparaahna_start, aparaahna_end = interval.get_interval(
                        daily_panchaangas[d].jd_sunrise,
                        daily_panchaangas[d].jd_sunset, 3, 5).to_tuple()
                    m1 = daily_panchaangas[
                        d -
                        1].solar_sidereal_date_sunset.month  # Previous month
                    m2 = daily_panchaangas[
                        d].solar_sidereal_date_sunset.month  # Current month
                    if aparaahna_start < daily_panchaangas[
                            d].solar_sidereal_date_sunset.month_transition < aparaahna_end:
                        if debug_shraaddha_tithi:
                            logging.debug(
                                'Sankranti in aparaahna! Assigning to both months!'
                            )
                        assert daily_panchaangas[
                            d].solar_sidereal_date_sunset.day == 1
                        for t in daily_panchaangas[d].shraaddha_tithi:
                            # Assigning to both months --- should get eliminated because of a second occurrence
                            tithi_days[m1][t.index].extend([d, '*'])
                            tithi_days[m2][t.index].extend([d, '*'])
                    if daily_panchaangas[
                            d].solar_sidereal_date_sunset.month_transition < aparaahna_start:
                        if debug_shraaddha_tithi:
                            logging.debug('Sankranti before aparaahna!')
                        assert daily_panchaangas[
                            d].solar_sidereal_date_sunset.day == 1
                        for t in daily_panchaangas[d].shraaddha_tithi:
                            tithi_days[m2][t.index].extend([d, '*'])
                    if aparaahna_end < daily_panchaangas[
                            d].solar_sidereal_date_sunset.month_transition:
                        if debug_shraaddha_tithi:
                            logging.debug('Sankranti after aparaahna!')
                        # Depending on whether sankranti is before or after sunset, m2 may or may not be equal to m1
                        # In any case, we wish to assign this tithi to the previous month, where it really occurs.
                        for t in daily_panchaangas[d].shraaddha_tithi:
                            tithi_days[m1][t.index].extend([d, '*'])
                else:
                    for t in daily_panchaangas[d].shraaddha_tithi:
                        tithi_days[daily_panchaangas[d].
                                   solar_sidereal_date_sunset.month][
                                       t.index].append(d)

        # We have now assigned all tithis. Now, remove duplicates based on the above-mentioned rules.
        # TODO: This is not the best way to clean. Need to examine one month at a time.
        for m in range(1, 13):
            for t in range(1, 31):
                if len(tithi_days[m][t]) == 1:
                    continue
                elif len(tithi_days[m][t]) == 2:
                    if tithi_days[m][t][1] == '*':
                        # Only one tithi available!
                        if debug_shraaddha_tithi:
                            logging.debug(
                                'Only one %2d tithi in month %2d, on day %3d, despite sankrAnti dushtam!'
                                % (t, m, tithi_days[m][t][0]))
                        del tithi_days[m][t][1]
                        tithi_days[m][t][0] = '%d::%d' % (tithi_days[m][t][0],
                                                          m)
                        if debug_shraaddha_tithi:
                            logging.debug('Note %s' % str(tithi_days[m][t]))
                    else:
                        daily_panchaangas[
                            tithi_days[m][t][0]].shraaddha_tithi = [
                                Anga.get_cached(
                                    index=0, anga_type_id=AngaType.TITHI.name)
                            ]  # Shunya
                        if debug_shraaddha_tithi:
                            logging.debug('Removed %d' % tithi_days[m][t][0])
                        del tithi_days[m][t][0]
                        if debug_shraaddha_tithi:
                            logging.debug(
                                'Two %2d tithis in month %2d: retaining second on %2d!'
                                % (t, m, tithi_days[m][t][0]))
                elif len(tithi_days[m][t]) == 3:
                    if debug_shraaddha_tithi:
                        logging.debug('Two %2d tithis in month %2d: %s' %
                                      (t, m, str(tithi_days[m][t])))
                    if tithi_days[m][t][1] == '*':
                        daily_panchaangas[
                            tithi_days[m][t][0]].shraaddha_tithi = [
                                Anga.get_cached(
                                    index=0, anga_type_id=AngaType.TITHI.name)
                            ]  # Shunya
                        if debug_shraaddha_tithi:
                            logging.debug('Removed %d' % tithi_days[m][t][0])
                        del tithi_days[m][t][:2]
                    elif tithi_days[m][t][2] == '*':
                        daily_panchaangas[
                            tithi_days[m][t][1]].shraaddha_tithi = [
                                Anga.get_cached(
                                    index=0, anga_type_id=AngaType.TITHI.name)
                            ]  # Shunya
                        if debug_shraaddha_tithi:
                            logging.debug('Removed %d' % tithi_days[m][t][1])
                        del tithi_days[m][t][1:]
                        if debug_shraaddha_tithi:
                            logging.debug('     Retaining non-dushta: %s' %
                                          (str(tithi_days[m][t])))
                elif len(tithi_days[m][t]) == 4:
                    if debug_shraaddha_tithi:
                        logging.debug(
                            'Two dushta %2d tithis in month %2d: %s' %
                            (t, m, str(tithi_days[m][t])))
                    daily_panchaangas[tithi_days[m][t][0]].shraaddha_tithi = [
                        Anga.get_cached(index=0,
                                        anga_type_id=AngaType.TITHI.name)
                    ]  # Shunya
                    if debug_shraaddha_tithi:
                        logging.debug('Removed %d' % tithi_days[m][t][0])
                    tithi_days[m][t][3] = str(m)
                    del tithi_days[m][t][:2]
                    if debug_shraaddha_tithi:
                        logging.debug('                    Retaining: %s' %
                                      (str(tithi_days[m][t])))
                    tithi_days[m][t][0] = '%d::%d' % (tithi_days[m][t][0], m)
                    if debug_shraaddha_tithi:
                        logging.debug('Note %s' % str(tithi_days[m][t]))
                elif len(tithi_days[m][t]) == 0:
                    logging.warning(
                        'Rare issue. No tithi %d in this solar month (%d). Therefore use lunar tithi.'
                        % (t, m))
                    # सौरमासे तिथ्यलाभे चान्द्रमानेन कारयेत्
                    # tithi_days[m][t] = lunar_tithi_days[m][t]
                else:
                    logging.error(
                        'Something weird. len(tithi_days[m][t]) is not in 1:4!! : %s (m=%d, t=%d)',
                        str(tithi_days[m][t]), m, t)

            if debug_shraaddha_tithi:
                logging.debug(tithi_days)
Beispiel #13
0
    def compute_lunar_eclipses(self):
        # Set location
        jd = self.panchaanga.jd_start
        while 1:
            next_eclipse_lun = self.panchaanga.city.get_lunar_eclipse_time(jd)
            [y, m, dt, t] = time.jd_to_utc_gregorian(
                next_eclipse_lun[1][0]).to_date_fractional_hour_tuple()
            local_time = tz(self.panchaanga.city.timezone).localize(
                datetime(y, m, dt, 6, 0, 0))
            # checking @ 6am local - can we do any better? This is crucial,
            # since DST changes before 6 am
            tz_off = (datetime.utcoffset(local_time).days * 86400 +
                      datetime.utcoffset(local_time).seconds) / 3600.0
            # compute offset from UTC
            jd = next_eclipse_lun[1][0] + (tz_off / 24.0)
            jd_eclipse_lunar_start = next_eclipse_lun[1][2] + (tz_off / 24.0)
            jd_eclipse_lunar_end = next_eclipse_lun[1][3] + (tz_off / 24.0)
            # -1 is to not miss an eclipse that occurs after sunset on 31-Dec!
            if jd_eclipse_lunar_start > self.panchaanga.jd_end:
                break
            else:
                if (jd_eclipse_lunar_start - (tz_off / 24.0)) == 0.0 or \
                    (jd_eclipse_lunar_end - (tz_off / 24.0)) == 0.0:
                    # Move towards the next eclipse... at least the next full
                    # moon (>=25 days away)
                    jd += MIN_DAYS_NEXT_ECLIPSE
                    continue
                fday = int(
                    floor(jd_eclipse_lunar_start) -
                    floor(self.panchaanga.jd_start) + 1)
                # print '%%', jd, fday, self.date_str_to_panchaanga[fday].jd_sunrise,
                # self.date_str_to_panchaanga[fday-1].jd_sunrise
                if (jd <
                    (self.daily_panchaangas[fday].jd_sunrise + tz_off / 24.0)):
                    fday -= 1
                # print '%%', jd, fday, self.date_str_to_panchaanga[fday].jd_sunrise,
                # self.date_str_to_panchaanga[fday-1].jd_sunrise, eclipse_lunar_start,
                # eclipse_lunar_end
                jd_moonrise_eclipse_day = self.panchaanga.city.get_rising_time(
                    julian_day_start=self.daily_panchaangas[fday].jd_sunrise,
                    body=Graha.MOON) + (tz_off / 24.0)

                jd_moonset_eclipse_day = self.panchaanga.city.get_rising_time(
                    julian_day_start=jd_moonrise_eclipse_day,
                    body=Graha.MOON) + (tz_off / 24.0)

                if jd_eclipse_lunar_end < jd_moonrise_eclipse_day or \
                    jd_eclipse_lunar_start > jd_moonset_eclipse_day:
                    # Move towards the next eclipse... at least the next full
                    # moon (>=25 days away)
                    jd += MIN_DAYS_NEXT_ECLIPSE
                    continue

                if Graha.singleton(Graha.MOON).get_longitude(
                        jd_eclipse_lunar_end) < Graha.singleton(
                            Graha.SUN).get_longitude(jd_eclipse_lunar_end):
                    grasta = 'rAhugrasta'
                else:
                    grasta = 'kEtugrasta'

                lunar_eclipse_str = 'candra-grahaNam~(' + grasta + ')'
                if self.daily_panchaangas[fday].date.get_weekday() == 1:
                    lunar_eclipse_str = '★cUDAmaNi-' + lunar_eclipse_str

                self.daily_panchaangas[fday].festival_id_to_instance[
                    lunar_eclipse_str] = (FestivalInstance(
                        name=lunar_eclipse_str,
                        interval=Interval(jd_start=jd_eclipse_lunar_start,
                                          jd_end=jd_eclipse_lunar_end)))
            jd += MIN_DAYS_NEXT_ECLIPSE
Beispiel #14
0
    def assign_ekaadashii_vratam(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()

            # checking @ 6am local - can we do any better?
            local_time = tz(self.panchaanga.city.timezone).localize(
                datetime(y, m, dt, 6, 0, 0))
            # compute offset from UTC in hours
            tz_off = (datetime.utcoffset(local_time).days * 86400 +
                      datetime.utcoffset(local_time).seconds) / 3600.0

            # EKADASHI Vratam
            # One of two consecutive tithis must appear @ sunrise!

            if (self.daily_panchaangas[d].sunrise_day_angas.tithi_at_sunrise.
                    index %
                    15) == 10 or (self.daily_panchaangas[d].sunrise_day_angas.
                                  tithi_at_sunrise.index % 15) == 11:
                yati_ekaadashii_fday = smaarta_ekaadashii_fday = vaishnava_ekaadashii_fday = None
                ekaadashii_tithi_days = [
                    x.sunrise_day_angas.tithi_at_sunrise.index % 15
                    for x in self.daily_panchaangas[d:d + 3]
                ]
                if self.daily_panchaangas[
                        d].sunrise_day_angas.tithi_at_sunrise.index > 15:
                    ekaadashii_paksha = 'krishna'
                else:
                    ekaadashii_paksha = 'shukla'
                if ekaadashii_tithi_days in [[11, 11, 12], [10, 12, 12]]:
                    smaarta_ekaadashii_fday = d + 1
                    tithi_arunodayam = tithi.get_tithi(
                        self.daily_panchaangas[d + 1].jd_sunrise - (1 / 15.0) *
                        (self.daily_panchaangas[d + 1].jd_sunrise -
                         self.daily_panchaangas[d].jd_sunrise)).index
                    if tithi_arunodayam % 15 == 10:
                        vaishnava_ekaadashii_fday = d + 2
                    else:
                        vaishnava_ekaadashii_fday = d + 1
                elif ekaadashii_tithi_days in [[10, 12, 13], [11, 12, 13],
                                               [11, 12, 12], [11, 12, 14]]:
                    smaarta_ekaadashii_fday = d
                    tithi_arunodayam = temporal.tithi.get_tithi(
                        self.daily_panchaangas[d].jd_sunrise - (1 / 15.0) *
                        (self.daily_panchaangas[d].jd_sunrise -
                         self.daily_panchaangas[d - 1].jd_sunrise)).index
                    if tithi_arunodayam % 15 == 11 and ekaadashii_tithi_days in [
                        [11, 12, 13], [11, 12, 14]
                    ]:
                        vaishnava_ekaadashii_fday = d
                    else:
                        vaishnava_ekaadashii_fday = d + 1
                elif ekaadashii_tithi_days in [[10, 11, 13], [11, 11, 13]]:
                    smaarta_ekaadashii_fday = d
                    vaishnava_ekaadashii_fday = d + 1
                    yati_ekaadashii_fday = d + 1
                else:
                    pass
                    # These combinations are taken care of, either in the past or future.
                    # if ekaadashii_tithi_days == [10, 11, 12]:
                    #     logging.debug('Not assigning. Maybe tomorrow?')
                    # else:
                    #     logging.debug(('!!', d, ekaadashii_tithi_days))

                if yati_ekaadashii_fday == smaarta_ekaadashii_fday == vaishnava_ekaadashii_fday is None:
                    # Must have already assigned
                    pass
                elif yati_ekaadashii_fday is None:
                    if smaarta_ekaadashii_fday == vaishnava_ekaadashii_fday:
                        # It's sarva ekaadashii
                        self.festival_id_to_days[
                            'sarva-' + names.get_ekaadashii_name(
                                ekaadashii_paksha, self.daily_panchaangas[d].
                                lunar_month_sunrise.index)].add(
                                    self.daily_panchaangas[
                                        smaarta_ekaadashii_fday].date)
                        if ekaadashii_paksha == 'shukla':
                            if self.daily_panchaangas[
                                    d].solar_sidereal_date_sunset.month == 9:
                                self.festival_id_to_days[
                                    'sarva-vaikuNTha-EkAdazI'].add(
                                        self.daily_panchaangas[
                                            smaarta_ekaadashii_fday].date)
                    else:
                        self.festival_id_to_days[
                            'smArta-' + names.get_ekaadashii_name(
                                ekaadashii_paksha, self.daily_panchaangas[d].
                                lunar_month_sunrise.index)].add(
                                    self.daily_panchaangas[
                                        smaarta_ekaadashii_fday].date)
                        self.festival_id_to_days[
                            'vaiSNava-' + names.get_ekaadashii_name(
                                ekaadashii_paksha, self.daily_panchaangas[d].
                                lunar_month_sunrise.index)].add(
                                    self.daily_panchaangas[
                                        vaishnava_ekaadashii_fday].date)
                        if ekaadashii_paksha == 'shukla':
                            if self.daily_panchaangas[
                                    d].solar_sidereal_date_sunset.month == 9:
                                self.festival_id_to_days[
                                    'smArta-vaikuNTha-EkAdazI'].add(
                                        self.daily_panchaangas[
                                            smaarta_ekaadashii_fday].date)
                                self.festival_id_to_days[
                                    'vaiSNava-vaikuNTha-EkAdazI'].add(
                                        self.daily_panchaangas[
                                            vaishnava_ekaadashii_fday].date)
                else:
                    self.festival_id_to_days[
                        'smArta-' + names.get_ekaadashii_name(
                            ekaadashii_paksha, self.daily_panchaangas[d].
                            lunar_month_sunrise.index) +
                        ' (gRhastha)'].add(
                            self.daily_panchaangas[smaarta_ekaadashii_fday].
                            date)
                    self.festival_id_to_days[
                        'smArta-' + names.get_ekaadashii_name(
                            ekaadashii_paksha, self.daily_panchaangas[d].
                            lunar_month_sunrise.index) +
                        ' (sannyastha)'].add(
                            self.daily_panchaangas[yati_ekaadashii_fday].date)
                    self.festival_id_to_days[
                        'vaiSNava-' + names.get_ekaadashii_name(
                            ekaadashii_paksha, self.daily_panchaangas[d].
                            lunar_month_sunrise.index)].add(
                                self.daily_panchaangas[
                                    vaishnava_ekaadashii_fday].date)
                    if self.daily_panchaangas[
                            d].solar_sidereal_date_sunset.month == 9:
                        if ekaadashii_paksha == 'shukla':
                            self.festival_id_to_days[
                                'smArta-vaikuNTha-EkAdazI (gRhastha)'].add(
                                    self.daily_panchaangas[
                                        smaarta_ekaadashii_fday].date)
                            self.festival_id_to_days[
                                'smArta-vaikuNTha-EkAdazI (sannyastha)'].add(
                                    self.daily_panchaangas[
                                        yati_ekaadashii_fday].date)
                            self.festival_id_to_days[
                                'vaiSNava-vaikuNTha-EkAdazI'].add(
                                    self.daily_panchaangas[
                                        vaishnava_ekaadashii_fday].date)

                if yati_ekaadashii_fday == smaarta_ekaadashii_fday == vaishnava_ekaadashii_fday is None:
                    # Must have already assigned
                    pass
                else:
                    if self.daily_panchaangas[
                            d].solar_sidereal_date_sunset.month == 8 and ekaadashii_paksha == 'shukla':
                        # self.add_festival('guruvAyupura-EkAdazI', smaarta_ekaadashii_fday)
                        self.festival_id_to_days['guruvAyupura-EkAdazI'].add(
                            self.daily_panchaangas[vaishnava_ekaadashii_fday].
                            date)
                        self.festival_id_to_days['kaizika-EkAdazI'].add(
                            self.daily_panchaangas[vaishnava_ekaadashii_fday].
                            date)

                    # Harivasara Computation
                    if ekaadashii_paksha == 'shukla':

                        def f(x):
                            tp_float = NakshatraDivision(
                                x, ayanaamsha_id=self.ayanaamsha_id
                            ).get_anga_float(zodiac.AngaType.TITHI_PADA)
                            return tp_float - 45

                        harivasara_end = brentq(
                            f, self.daily_panchaangas[smaarta_ekaadashii_fday].
                            jd_sunrise - 2,
                            self.daily_panchaangas[smaarta_ekaadashii_fday].
                            jd_sunrise + 2)
                    else:

                        def f(x):
                            tp_float = NakshatraDivision(
                                x, ayanaamsha_id=self.ayanaamsha_id
                            ).get_anga_float(zodiac.AngaType.TITHI_PADA)
                            return tp_float - 105

                        harivasara_end = brentq(
                            f, self.daily_panchaangas[smaarta_ekaadashii_fday].
                            jd_sunrise - 2,
                            self.daily_panchaangas[smaarta_ekaadashii_fday].
                            jd_sunrise + 2)
                    _date = time.jd_to_utc_gregorian(harivasara_end +
                                                     (tz_off / 24.0))
                    _date.set_time_to_day_start()
                    fday_hv = time.utc_gregorian_to_jd(
                        _date) - time.utc_gregorian_to_jd(
                            self.daily_panchaangas[0].date)
                    fest = FestivalInstance(name='harivAsaraH',
                                            interval=Interval(
                                                jd_start=None,
                                                jd_end=harivasara_end))
                    self.daily_panchaangas[int(
                        fday_hv)].festival_id_to_instance[fest.name] = fest
Beispiel #15
0
    def assign_chaturthi_vratam(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()

            # SANKATAHARA chaturthi
            if self.daily_panchaangas[
                    d].sunrise_day_angas.tithi_at_sunrise.index == 18 or self.daily_panchaangas[
                        d].sunrise_day_angas.tithi_at_sunrise.index == 19:
                ldiff_moonrise_yest = (
                    Graha.singleton(Graha.MOON).get_longitude(
                        self.daily_panchaangas[d - 1].jd_moonrise) -
                    Graha.singleton(Graha.SUN).get_longitude(
                        self.daily_panchaangas[d - 1].jd_moonrise)) % 360
                ldiff_moonrise = (Graha.singleton(Graha.MOON).get_longitude(
                    self.daily_panchaangas[d].jd_moonrise) - Graha.singleton(
                        Graha.SUN).get_longitude(
                            self.daily_panchaangas[d].jd_moonrise)) % 360
                ldiff_moonrise_tmrw = (
                    Graha.singleton(Graha.MOON).get_longitude(
                        self.daily_panchaangas[d + 1].jd_moonrise) -
                    Graha.singleton(Graha.SUN).get_longitude(
                        self.daily_panchaangas[d + 1].jd_moonrise)) % 360
                tithi_moonrise_yest = int(1 +
                                          floor(ldiff_moonrise_yest / 12.0))
                tithi_moonrise = int(1 + floor(ldiff_moonrise / 12.0))
                tithi_moonrise_tmrw = int(1 +
                                          floor(ldiff_moonrise_tmrw / 12.0))

                _m = self.daily_panchaangas[d].lunar_month_sunrise.index
                if floor(_m) != _m:
                    _m = 13  # Adhika masa
                chaturthi_name = names.NAMES['SANKATAHARA_CHATURTHI_NAMES'][
                    'hk'][_m] + '-mahAgaNapati '

                if tithi_moonrise == 19:
                    # otherwise yesterday would have already been assigned
                    if tithi_moonrise_yest != 19:
                        chaturthi_name = '%s%s' % (
                            'aGgArakI~' if self.daily_panchaangas[d].date.
                            get_weekday() == 2 else '', chaturthi_name)
                        fest = FestivalInstance(name=chaturthi_name +
                                                'saGkaTahara-caturthI-vratam')
                        self.daily_panchaangas[d].festival_id_to_instance[
                            fest.name] = fest
                        # shravana krishna chaturthi
                        if self.daily_panchaangas[
                                d].lunar_month_sunrise.index == 5:
                            chaturthi_name = '%s%s' % (
                                'aGgArakI~' if self.daily_panchaangas[d].date.
                                get_weekday() == 2 else '', chaturthi_name)
                            fest = FestivalInstance(
                                name=chaturthi_name +
                                'mahAsaGkaTahara-caturthI-vratam')
                            self.daily_panchaangas[d].festival_id_to_instance[
                                fest.name] = fest
                elif tithi_moonrise_tmrw == 19:
                    chaturthi_name = '%s%s' % (
                        'aGgArakI~' if self.daily_panchaangas[d + 1].date.
                        get_weekday() == 2 else '', chaturthi_name)
                    fest = FestivalInstance(name=chaturthi_name +
                                            'saGkaTahara-caturthI-vratam')
                    self.daily_panchaangas[d + 1].festival_id_to_instance[
                        fest.name] = fest
                    # self.date_str_to_panchaanga[d].lunar_month_sunrise and[d + 1] are same, so checking [d] is enough
                    if self.daily_panchaangas[
                            d].lunar_month_sunrise.index == 5:
                        chaturthi_name = '%s%s' % (
                            'aGgArakI~' if self.daily_panchaangas[d].date.
                            get_weekday() == 2 else '', chaturthi_name)
                        fest = FestivalInstance(
                            name=chaturthi_name +
                            'mahAsaGkaTahara-caturthI-vratam')
                        self.daily_panchaangas[d + 1].festival_id_to_instance[
                            fest.name] = fest
                else:
                    if tithi_moonrise_yest != 19:
                        if tithi_moonrise == 18 and tithi_moonrise_tmrw == 20:
                            # No vyApti on either day -- pick parA, i.e. next day.
                            chaturthi_name = '%s%s' % (
                                'aGgArakI~' if self.daily_panchaangas[
                                    d + 1].date.get_weekday() == 2 else '',
                                chaturthi_name)
                            fest = FestivalInstance(
                                name=chaturthi_name +
                                'saGkaTahara-caturthI-vratam')
                            self.daily_panchaangas[d +
                                                   1].festival_id_to_instance[
                                                       fest.name] = fest
                            # shravana krishna chaturthi
                            if self.daily_panchaangas[
                                    d].lunar_month_sunrise.index == 5:
                                chaturthi_name = '%s%s' % (
                                    'aGgArakI~' if self.daily_panchaangas[
                                        d + 1].date.get_weekday() == 2 else '',
                                    chaturthi_name)
                                fest = FestivalInstance(
                                    name=chaturthi_name +
                                    'mahAsaGkaTahara-caturthI-vratam')
                                self.daily_panchaangas[
                                    d + 1].festival_id_to_instance[
                                        fest.name] = fest
Beispiel #16
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)
Beispiel #17
0
def write_monthly_tex(panchaanga, template_file, scripts=None, temporal=None):
    """Write out the panchaanga TeX using a specified template
  """
    if scripts is None:
        scripts = [sanscript.DEVANAGARI]
    day_colours = {
        0: 'blue',
        1: 'blue',
        2: 'blue',
        3: 'blue',
        4: 'blue',
        5: 'blue',
        6: 'blue'
    }
    month = {
        1: 'JANUARY',
        2: 'FEBRUARY',
        3: 'MARCH',
        4: 'APRIL',
        5: 'MAY',
        6: 'JUNE',
        7: 'JULY',
        8: 'AUGUST',
        9: 'SEPTEMBER',
        10: 'OCTOBER',
        11: 'NOVEMBER',
        12: 'DECEMBER'
    }
    MON = {
        1: 'January',
        2: 'February',
        3: 'March',
        4: 'April',
        5: 'May',
        6: 'June',
        7: 'July',
        8: 'August',
        9: 'September',
        10: 'October',
        11: 'November',
        12: 'December'
    }
    WDAY = {
        0: 'Sun',
        1: 'Mon',
        2: 'Tue',
        3: 'Wed',
        4: 'Thu',
        5: 'Fri',
        6: 'Sat'
    }

    monthly_template_file = open(
        os.path.join(os.path.dirname(__file__),
                     'templates/monthly_cal_template.tex'))

    template_lines = template_file.readlines()
    for i in range(0, len(template_lines) - 3):
        print(template_lines[i][:-1])

    samvatsara_id = (panchaanga.year - 1568) % 60 + 1  # distance from prabhava
    samvatsara_names = '%s–%s' % (
        jyotisha.names.NAMES['SAMVATSARA_NAMES'][scripts[0]][samvatsara_id],
        jyotisha.names.NAMES['SAMVATSARA_NAMES'][scripts[0]][
            (samvatsara_id % 60) + 1])

    print('\\mbox{}')
    print('{\\sffamily\\fontsize{60}{25}\\selectfont %d\\\\[0.5cm]}' %
          panchaanga.year)
    print(
        '\\mbox{\\font\\x="Siddhanta:script=deva" at 48 pt\\x %s}\\\\[0.5cm]' %
        samvatsara_names)
    print('\\mbox{\\font\\x="Siddhanta:script=deva" at 32 pt\\x %s } %%' %
          jyotisha.custom_transliteration.tr('kali', scripts[0]))
    print('{\\sffamily\\fontsize{32}{25}\\selectfont %d–%d\\\\[0.5cm]}' %
          (panchaanga.year + 3100, panchaanga.year + 3101))
    print(
        '{\\sffamily\\fontsize{48}{25}\\selectfont \\uppercase{%s}\\\\[0.2cm]}'
        % panchaanga.city.name)
    print('{\\sffamily\\fontsize{16}{25}\\selectfont {%s}\\\\[0.5cm]}' %
          jyotisha.custom_transliteration.print_lat_lon(
              panchaanga.city.latitude, panchaanga.city.longitude))
    print('\\hrule')

    print('\\newpage')
    print('\\centering')
    print('\\centerline{\\LARGE {{%s}}}' %
          jyotisha.custom_transliteration.tr('mAsAntara-vizESAH', scripts[0]))
    print('\\begin{multicols*}{3}')
    print('\\TrickSupertabularIntoMulticols')
    print(
        '\\begin{supertabular}' +
        '{>{\\sffamily}r>{\\sffamily}r>{\\sffamily}c>{\\hangindent=2ex}panchaanga{8cm}}'
    )

    mlast = 1
    daily_panchaangas = panchaanga.daily_panchaangas_sorted()
    for d in range(panchaanga.duration_prior_padding,
                   jyotisha.panchaanga.temporal.MAX_SZ - 1):
        [y, m, dt,
         t] = time.jd_to_utc_gregorian(panchaanga.jd_start + d -
                                       1).to_date_fractional_hour_tuple()
        daily_panchaanga = daily_panchaangas[d]

        rules_collection = rules.RulesCollection.get_cached(repos_tuple=tuple(
            panchaanga.computation_system.options.fest_repos))
        fest_details_dict = rules_collection.name_to_rule

        if len(daily_panchaanga.festival_id_to_instance) != 0:
            if m != mlast:
                mlast = m
                print('\\\\')

            print('%s & %s & %s & {\\raggedright %s} \\\\' %
                  (MON[m], dt, WDAY[daily_panchaanga.date.get_weekday()],
                   '\\\\'.join([
                       f.tex_code(scripts=scripts,
                                  timezone=panchaanga.city.timezone,
                                  fest_details_dict=fest_details_dict)
                       for f in sorted(
                           daily_panchaanga.festival_id_to_instance.values())
                   ])))

        if m == 12 and dt == 31:
            break

    print('\\end{supertabular}')
    print('\\end{multicols*}')
    print('\\renewcommand{\\tamil}[1]{%')
    print(
        '{\\fontspec[Scale=0.9,FakeStretch=0.9]{Noto Sans Tamil}\\fontsize{7}{12}\\selectfont #1}}'
    )

    # print('\\clearpage')

    month_text = ''
    W6D1 = W6D2 = ''
    for d in range(panchaanga.duration_prior_padding,
                   jyotisha.panchaanga.temporal.MAX_SZ - 1):
        [y, m, dt,
         t] = time.jd_to_utc_gregorian(panchaanga.jd_start + d -
                                       1).to_date_fractional_hour_tuple()

        # checking @ 6am local - can we do any better?
        local_time = tz(panchaanga.city.timezone).localize(
            datetime(y, m, dt, 6, 0, 0))
        # compute offset from UTC in hours
        tz_off = (datetime.utcoffset(local_time).days * 86400 +
                  datetime.utcoffset(local_time).seconds) / 3600.0

        # What is the jd at 00:00 local time today?
        jd = daily_panchaanga.julian_day_start

        if dt == 1:
            currWeek = 1
            if m > 1:
                month_text = month_text.replace('W6D1', W6D1)
                month_text = month_text.replace('W6D2', W6D2)
                print(month_text)
                month_text = W6D1 = W6D2 = ''
                if currWeek < 6:
                    if daily_panchaanga.date.get_weekday(
                    ) != 0:  # Space till Sunday
                        for i in range(daily_panchaanga.date.get_weekday(), 6):
                            print("\\mbox{}  & %% %d" % currWeek)
                        print("\\\\ \\hline")
                print('\\end{tabular}')
                print('\n\n')

            # Begin tabular
            print('\\begin{tabular}{|c|c|c|c|c|c|c|}')
            print(
                '\\multicolumn{7}{c}{\\Large \\bfseries \\sffamily %s %s}\\\\[3mm]'
                % (month[m], y))
            print('\\hline')
            WDAY_NAMES = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
            print(' & '.join(
                ['\\textbf{\\textsf{%s}}' % _day
                 for _day in WDAY_NAMES]) + ' \\\\ \\hline')

            # Blanks for previous weekdays
            for i in range(0, daily_panchaanga.date.get_weekday()):
                if i == 0:
                    month_text += '\n' + ("{W6D1}  &")
                elif i == 1:
                    month_text += '\n' + ("{W6D2}  &")
                else:
                    month_text += '\n' + ("{}  &")

        tithi_data_str = ''
        for tithi_span in daily_panchaanga.sunrise_day_angas.tithis_with_ends:
            (tithi_ID, tithi_end_jd) = (tithi_span.anga.index,
                                        tithi_span.jd_end)
            # if tithi_data_str != '':
            #     tithi_data_str += '\\hspace{2ex}'
            tithi = '\\moon[scale=0.6]{%d}\\hspace{2pt}' % (tithi_ID) + \
                    jyotisha.names.NAMES['TITHI_NAMES'][scripts[0]][tithi_ID]
            if tithi_end_jd is None:
                tithi_data_str = '%s\\mbox{%s\\To{}%s}' % \
                                 (tithi_data_str, tithi, jyotisha.custom_transliteration.tr('ahOrAtram', scripts[0]))
            else:
                tithi_data_str = '%s\\mbox{%s\\To{}\\textsf{%s%s}}' % \
                                 (tithi_data_str, tithi,
                                  Hour(24 * (tithi_end_jd - jd)).toString(
                                    format=panchaanga.fmt),
                                  '\\hspace{2ex}')

        nakshatra_data_str = ''
        for nakshatra_span in daily_panchaanga.sunrise_day_angas.nakshatras_with_ends:
            (nakshatra_ID, nakshatra_end_jd) = (nakshatra_span.anga.index,
                                                nakshatra_span.jd_end)
            # if nakshatra_data_str != '':
            #     nakshatra_data_str += '\\hspace{2ex}'
            nakshatra = jyotisha.names.NAMES['NAKSHATRA_NAMES'][
                scripts[0]][nakshatra_ID]
            if nakshatra_end_jd is None:
                nakshatra_data_str = '%s\\mbox{%s\\To{}%s}' % \
                                      (nakshatra_data_str, nakshatra,
                                       jyotisha.custom_transliteration.tr('ahOrAtram', scripts[0]))
            else:
                nakshatra_data_str = '%s\\mbox{%s\\To{}\\textsf{%s%s}}' % \
                                      (nakshatra_data_str, nakshatra,
                                       Hour(24 * (nakshatra_end_jd -
                                                                                    jd)).toString(format=panchaanga.fmt),
                                       '\\hspace{2ex}')

        yoga_data_str = ''
        for yoga_span in daily_panchaanga.sunrise_day_angas.yogas_with_ends:
            (yoga_ID, yoga_end_jd) = (yoga_span.anga.index, yoga_span.jd_end)
            # if yoga_data_str != '':
            #     yoga_data_str += '\\hspace{2ex}'
            yoga = jyotisha.names.NAMES['YOGA_NAMES'][scripts[0]][yoga_ID]
            if yoga_end_jd is None:
                yoga_data_str = '%s\\mbox{%s\\To{}%s}' % \
                                (yoga_data_str, yoga, jyotisha.custom_transliteration.tr('ahOrAtram', scripts[0]))
            else:
                yoga_data_str = '%s\\mbox{%s\\To{}\\textsf{%s%s}}' % \
                                (yoga_data_str, yoga,
                                 Hour(24 * (yoga_end_jd - jd)).toString(
                                   format=panchaanga.fmt),
                                 '\\hspace{2ex}')

        karana_data_str = ''
        for numKaranam, karaNa_span in enumerate(
                daily_panchaanga.sunrise_day_angas.karanas_with_ends):
            (karana_ID, karana_end_jd) = (karaNa_span.anga.index,
                                          karaNa_span.jd_end)
            # if numKaranam == 1:
            #     karana_data_str += '\\hspace{2ex}'
            if numKaranam == 2:
                karana_data_str = karana_data_str + '\\\\'
            karana = jyotisha.names.NAMES['KARANA_NAMES'][
                scripts[0]][karana_ID]
            if karana_end_jd is None:
                karana_data_str = '%s\\mbox{%s\\To{}%s}' % \
                                   (karana_data_str, karana,
                                    jyotisha.custom_transliteration.tr('ahOrAtram', scripts[0]))
            else:
                karana_data_str = '%s\\mbox{%s\\To{}\\textsf{%s%s}}' % \
                                   (karana_data_str, karana,
                                    Hour(24 * (karana_end_jd -
                                                                                 jd)).toString(format=panchaanga.fmt),
                                    '\\hspace{2ex}')

        sunrise = Hour(24 * (daily_panchaanga.jd_sunrise - jd)).toString(
            format=panchaanga.fmt)
        sunset = Hour(24 * (daily_panchaanga.jd_sunset - jd)).toString(
            format=panchaanga.fmt)
        saangava = Hour(
            24 * (daily_panchaanga.day_length_based_periods.saangava.jd_start -
                  jd)).toString(format=panchaanga.fmt)
        rahu = '%s--%s' % (
            Hour(24 *
                 (daily_panchaanga.day_length_based_periods.raahu.jd_start -
                  jd)).toString(format=panchaanga.fmt),
            Hour(24 * (daily_panchaanga.day_length_based_periods.raahu.jd_end -
                       jd)).toString(format=panchaanga.fmt))
        yama = '%s--%s' % (
            Hour(24 *
                 (daily_panchaanga.day_length_based_periods.yama.jd_start -
                  jd)).toString(format=panchaanga.fmt),
            Hour(24 * (daily_panchaanga.day_length_based_periods.yama.jd_end -
                       jd)).toString(format=panchaanga.fmt))

        if daily_panchaanga.solar_sidereal_date_sunset.month_transition is None:
            month_end_str = ''
        else:
            _m = daily_panchaangas[d - 1].solar_sidereal_date_sunset.month
            if daily_panchaanga.solar_sidereal_date_sunset.month_transition >= daily_panchaangas[
                    d + 1].jd_sunrise:
                month_end_str = '\\mbox{%s{\\tiny\\RIGHTarrow}\\textsf{%s}}' % (
                    jyotisha.names.NAMES['RASHI_NAMES'][scripts[0]][_m],
                    Hour(24 *
                         (daily_panchaanga.solar_sidereal_date_sunset.
                          month_transition -
                          daily_panchaangas[d + 1].julian_day_start)).toString(
                              format=panchaanga.fmt))
            else:
                month_end_str = '\\mbox{%s{\\tiny\\RIGHTarrow}\\textsf{%s}}' % (
                    jyotisha.names.NAMES['RASHI_NAMES'][scripts[0]][_m],
                    Hour(24 *
                         (daily_panchaanga.solar_sidereal_date_sunset.
                          month_transition - daily_panchaanga.julian_day_start)
                         ).toString(format=panchaanga.fmt))

        month_data = '\\sunmonth{%s}{%d}{%s}' % (
            jyotisha.names.NAMES['RASHI_NAMES'][scripts[0]][
                daily_panchaanga.solar_sidereal_date_sunset.month],
            daily_panchaanga.solar_sidereal_date_sunset.day, month_end_str)

        if currWeek < 6:
            month_text += '\n' + (
                '\\caldata{\\textcolor{%s}{%s}}{%s{%s}}%%' %
                (day_colours[daily_panchaanga.date.get_weekday()], dt,
                 month_data,
                 jyotisha.names.get_chandra_masa(
                     daily_panchaanga.lunar_month_sunrise,
                     jyotisha.names.NAMES, scripts[0])))
            month_text += '\n' + ('{\\sundata{%s}{%s}{%s}}%%' %
                                  (sunrise, sunset, saangava))
            month_text += '\n' + ('{\\tnyk{%s}%%\n{%s}%%\n{%s}%%\n{%s}}%%' %
                                  (tithi_data_str, nakshatra_data_str,
                                   yoga_data_str, karana_data_str))
            month_text += '\n' + ('{\\rahuyama{%s}{%s}}%%' % (rahu, yama))

            # Using set as an ugly workaround since we may have sometimes assigned the same
            # festival to the same day again!
            month_text += '\n' + ('{%s}' % '\\eventsep '.join([
                f.tex_code(scripts=scripts,
                           timezone=panchaanga.city.timezone,
                           fest_details_dict=fest_details_dict) for f in
                sorted(daily_panchaanga.festival_id_to_instance.values())
            ]))
        else:
            if daily_panchaanga.date.get_weekday() == 0:
                W6D1 = '\n' + ('\\caldata{\\textcolor{%s}{%s}}{%s{%s}}%%' %
                               (day_colours[daily_panchaanga.date.get_weekday(
                               )], dt, month_data,
                                jyotisha.names.get_chandra_masa(
                                    daily_panchaanga.lunar_month_sunrise,
                                    jyotisha.names.NAMES, scripts[0])))
                W6D1 += '\n' + ('{\\sundata{%s}{%s}{%s}}%%' %
                                (sunrise, sunset, saangava))
                W6D1 += '\n' + ('{\\tnyk{%s}%%\n{%s}%%\n{%s}%%\n{%s}}%%' %
                                (tithi_data_str, nakshatra_data_str,
                                 yoga_data_str, karana_data_str))
                W6D1 += '\n' + ('{\\rahuyama{%s}{%s}}%%' % (rahu, yama))

                # Using set as an ugly workaround since we may have sometimes assigned the same
                # festival to the same day again!
                W6D1 += '\n' + ('{%s}' % '\\eventsep '.join([
                    f.tex_code(scripts=scripts,
                               timezone=Timezone(panchaanga.city.timezone),
                               fest_details_dict=fest_details_dict) for f in
                    sorted(daily_panchaanga.festival_id_to_instance.values())
                ]))
            elif daily_panchaanga.date.get_weekday() == 1:
                W6D2 = '\n' + ('\\caldata{\\textcolor{%s}{%s}}{%s{%s}}%%' %
                               (day_colours[daily_panchaanga.date.get_weekday(
                               )], dt, month_data,
                                jyotisha.names.get_chandra_masa(
                                    daily_panchaanga.lunar_month_sunrise,
                                    jyotisha.names.NAMES, scripts[0])))
                W6D2 += '\n' + ('{\\sundata{%s}{%s}{%s}}%%' %
                                (sunrise, sunset, saangava))
                W6D2 += '\n' + ('{\\tnyk{%s}%%\n{%s}%%\n{%s}%%\n{%s}}%%' %
                                (tithi_data_str, nakshatra_data_str,
                                 yoga_data_str, karana_data_str))
                W6D2 += '\n' + ('{\\rahuyama{%s}{%s}}%%' % (rahu, yama))

                # Using set as an ugly workaround since we may have sometimes assigned the same
                # festival to the same day again!
                W6D2 += '\n' + ('{%s}' % '\\eventsep '.join([
                    f.tex_code(scripts=scripts,
                               timezone=panchaanga.city.timezone,
                               fest_details_dict=fest_details_dict) for f in
                    sorted(daily_panchaanga.festival_id_to_instance.values())
                ]))
            else:
                # Cannot be here, since we cannot have more than 2 days in week 6 of any month!
                pass

        if daily_panchaanga.date.get_weekday() == 6:
            month_text += '\n' + ("\\\\ \\hline %%END OF WEEK %d" % (currWeek))
            currWeek += 1
        else:
            if currWeek < 6:
                month_text += '\n' + ("&")

        if m == 12 and dt == 31:
            break

    month_text = month_text.replace('W6D1', W6D1)
    month_text = month_text.replace('W6D2', W6D2)
    print(month_text)

    if currWeek < 6:
        for i in range(daily_panchaanga.date.get_weekday() + 1, 6):
            print("{}  &")
        if daily_panchaanga.date.get_weekday() != 6:
            print("\\\\ \\hline")
    print('\\end{tabular}')
    print('\n\n')

    print(template_lines[-2][:-1])
    print(template_lines[-1][:-1])
Beispiel #18
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))