
    ChOl                     <   d Z ddlmZ ddlmZ ddlmZ ddlZ	 edg d      Z
 edg d	      Zd
Ze	j                  e	j                  z   Ze	j                   e	_        e	j$                  e	j&                  e	j(                  e	j*                  e	j,                  e	j.                  e	j0                  e	j2                  e	j"                  e	j4                  e	j6                  gZd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-dfdZ.d Z/d Z0d Z1d  Z2d! Z3d"\  Z4Z5Z6d#Z7 e	jp                  e4e5e6e7      Z9d$Z: e3e9e:      Z;e;r e<d%e;d            e<d&e;d'           d( Z=d) Z>d* Z?d+ Z@d, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFd2 ZGdgd3ZHd4 ZId5 ZJd6 ZKd7 ZLd8 ZMd9 ZNdhd:ZOd; ZPd< ZQd= ZRd> ZSd? ZTd@ ZUdA ZVdB ZWdC ZXdD ZYdE ZZdF Z[dG Z\dH Z]dI Z^dJ Z_e`dKk(  rddlaZa edLdMdN      Zb edOdPdN      Zc edQdRdS      Zd edTdUdN      Ze e, e
dVdWdX            Zf e, e
dYd'dZ            Zg e, e
d[d\d]            Zh e, e
dVd\d^            Zi e, e
d_d`da            Zj e, e
d_d`db            Zk e, e
dcdbda            Zl e, e
dddWde            Zm e< e@elee              e< e@emee             yy)iz9
Use Swiss ephemeris to calculate tithi, nakshatra, etc.
    )division)ceil)
namedtupleNDate)yearmonthdayPlace)latitude	longitudetimezonegpav@c                  L    t        j                  t         j                  dd      S )NgWf=Ar   sweset_sid_mode	SIDM_USER     d:\jyotish\support\panchanga.py<lambda>r   '   s    ((8I1Mr   c                  L    t        j                  t         j                  dd      S )Ng S=Ar   r   r   r   r   r   r   (   s    S--cmm=NPQRr   c                  H    t        j                  t         j                        S N)r   r   SIDM_LAHIRIr   r   r   r   r   *   s    C,,S__=r   c                  H    t        j                  t         j                        S r   )r   r   SIDM_FAGAN_BRADLEYr   r   r   r   r   +   s    c..s/E/EFr   c                 P   t         j                  dt         j                  dt         j                  dt         j                  dt         j
                  dt         j                  dt         j                  dt         j                  dt         j                  d	t         j                  d	i
}||    S )
NSuryaChandraMangalaBudhaGuruShukraShaniRahuKetu)r   SUNMOONMARSMERCURYJUPITERVENUSSATURN	MEAN_NODEKETUPLUTO)planetnamess     r   get_planet_namer3   .   sj    GGWchh	388YKK#++vsyy(JJ&#))U[]% 
vr   c                     | |dz  z   |dz  z   S )N<   i  r   )degsminssecss      r   r   r   5   s    D47NT$Y$>r   c                 l    t        |       }| |z
  dz  }t        |      }t        ||z
  dz  d      }|||gS )Nr5      )intround)degdr7   mss        r   to_dms_precrA   8   sA    	#h!
'R$	$i!TAXOQ!
Qr   c                 <    t        |       \  }}}||t        |      gS r   )rA   r;   )r=   r>   r?   r@   s       r   to_dmsrC   ?   s"    '!Q
QAr   c                     | }t        dt        |             D ]  }||   ||dz
     k  s||xx   dz  cc<     |t        |      k(  sJ |S )zdAdd 360 to those elements in the input list so that
     all elements are sorted in ascending order.   h  )rangelensorted)anglesresultis      r   unwrap_anglesrM   C   sX     &CK aay6!A#;q	S 0	 ! 
6&>	!"	!	-r   c                     | dk\  r| dz
  S | S N   rF   r   angles    r   r   r   N   s    #@5@r   c                     | dz  S NrF   r   rQ   s    r   r   r   Q   s    r   c                     | dz   dz  S rO   r   rahus    r   r   r   U   s    TCZ3&r   c                     t        j                  t         j                  | d       t        j                  d| t         j                  t         j
                  z        d   dz
  }|S )N        Citra)flagr   rP   )r   r   r   
fixstar_ut
FLG_SWIEPHFLG_SIDEREAL)pointfvals     r   functionra   W   sN    S]]E3/ >>'5#BRBR1RSTUVZ]^D Kr   c                 ~    |}|}d}	 ||z   dz  } | |      } | |      }||z  dk\  r|}n|}||z
  |k  rn/||z   dz  S )Ng&.>   r   r   )	funcstartstopleftrightepsilonmiddlemidvalrtvals	            r   bisection_searchrm   e   sn    	$
%'UlaF6lFKE~ed % 	 $,!	r   c                    t        |       t        |      k(  sJ d}t        t        |             D ]L  }d}d}t        t        |             D ]!  }||k7  s	||||   z
  z  }|||   ||   z
  z  }# ||| |   z  |z  z  }N |S )zOGiven two lists x and y, find the value of x = xa when y = ya, i.e., f(xa) = yar   rE   )rH   rG   )xyyatotalrL   numerdenomjs           r   inverse_lagrangerv   w   s    	Q3q6		
%Q=aEE3q6]	
a"qt)!A$1+ 
 
UQqT\E!!E  
,r   c                 n    t        j                  | j                  | j                  | j                  d      S )NrY   )r   juldayr   r   r	   )dates    r   r   r      s    szz$))TZZ3Or   c                 J    t        j                  | t         j                        S r   )r   revjulGREG_CALjds    r   r   r      s    SZZCLL9r   c           	          t        j                  | ||||||      \  }}}	}
}}t        j                  |||	|
|dt         j                        \  }}|S )zConverts local time to JD(UT1)r   )r   utc_time_zone	utc_to_jdr|   )r   r   r	   hourminutessecondsr   rp   r?   r>   hmntr@   jd_etjd_ut1s                  r   local_time_to_jdut1r      sS    ((uc4'S[\!Q1c1--1aCCLLA-%	-r   c                 f    d}d}t        | |z        }| ||z  z
  }t        ||z        }d|z   d|z   gS )zFGives nakshatra (1..27) and paada (1..4) in which given longitude lies竪*@竪
@rE   r;   )r   one_starone_padaquotientreminderpadas         r   nakshatra_padar      sN     ((X%&((X--(	X 	!$
h,D	!!r   c                     t                t        j                  | |t        j                  t        j                  z        \  }}t                t        |d         S )z<Computes nirayana (sidereal) longitude of given planet on jdr   )set_ayanamsa_moder   calc_utr]   r^   reset_ayanamsa_modenorm360)r~   r1   longiflagss       r   sidereal_longituder      sB    R#:J:J)JK,%	q	r   c                 6    t        | t        j                        S r   )r   r   r'   r}   s    r   r   r      s    /CGG<r   c                 6    t        | t        j                        S r   )r   r   r(   r}   s    r   r   r      s    /CHH=r   c           	      d   |\  }}}||df}t         j                  t         j                  z  }t        j                  | |dz  z
  t         j                  ||ddt         j
                        }|d   }|dk\  r,|d   d   }	|	|dz  z   }
d }|
 ||
t        |
      z
  dz        gS t        d|        ddgS )zBSunrise when centre of disc is at horizon for given date and placer      rE         8@c                     t        |       }t        | |z
  dz        }t        | |z
  dz  |z
  dz        }|dd|dd|dS )Nr5   02d:r   )timehoursr   r   s       r   rC   zsunrise.<locals>.to_dms   sX    d)%+,'$,",w6"<='#;a}Agc];
;r   z(Error calculating sunrise. Status code: N)r   	CALC_RISEBIT_DISC_CENTER
rise_transr'   r]   r;   print)r~   placelatlontzgeoposrsmirK   res_coderise
rise_localrC   s               r   sunriser      s    ,#sBa=& 
,,	,$ >>2b5j	gg
	nn& AY(]AYq\d"T'>j< &*s:">"!DEFF 6xjABD\r   )i  
      g33333&@)g?ܵL6@g	cQ@      @zSunrise Julian Day (Local): zSunrise Time (HH:MM:SS): rE   c           
          |\  }}}t        j                  | |dz  z
  t         j                  ||t        t        t         j
                  z               }|d   d   }||dz  z   t        || z
  dz  |z         gS )zASunset when centre of disc is at horizon for given date and placer   r   rE   r   r   )r   r   r'   r;   _rise_flagsCALC_SETrC   r~   r   r   r   r   rK   settings          r   sunsetr      st    ,#sB>>"r"u*cggsCKRUR^R^D^@_`&1IaL'
BsF
FGbLB#6#;<	==r   c           
          |\  }}}t        j                  | |dz  z
  t         j                  ||t        t        t         j
                  z               }|d   d   }t        || z
  dz  |z         S )zCMoonrise when centre of disc is at horizon for given date and placer   r   rE   r   )r   r   r(   r;   r   r   rC   )r~   r   r   r   r   rK   r   s          r   moonriser      sf    ,#sB>>"r"u*chhS[SVS`S`E`Aab&	1$	b 2%	&&r   c           
          |\  }}}t        j                  | |dz  z
  t         j                  ||t        t        t         j
                  z               }|d   d   }t        || z
  dz  |z         S )zBMoonset when centre of disc is at horizon for given date and placer   r   rE   r   )r   r   r(   r;   r   r   rC   r   s          r   moonsetr      sf    ,#sB>>"r"u*chhS[SVS_S_E_A`a&1IaL'	2#b(	))r   c                     |j                   }t        | |      d   |dz  z
  }t        |      }t        |dz        }|dz  |z
  }g d}|D cg c]  }t	        ||z         t	        |      z
  dz  ! }	}|D cg c]  }t        ||z         t        |      z
  dz  ! }
}t        |	|
      D cg c]
  \  }}||z
   }}}|}|}t        |||      }||z   | z
  dz  |z   }t        |      t        |      g}t        |dz         }t        |dz        }||z
  dz  dkD  }|rT|dz   }|dz  |z
  }t        |||      }||z   | z
  dz  |j                   z   }|dk(  rdn|}|t        |      t        |      gz  }|S c c}w c c}w c c}}w )zITithi at sunrise for given date and place. Also returns tithi's end time.r   r            ?      ?      ?      ?rF   rE      )
r   r   lunar_phaser   lunar_longitudesolar_longitudeziprv   r;   rC   )r~   r   r   r   
moon_phasetodaydegrees_leftoffsetstlunar_long_diffsolar_long_diffmoonsunrelative_motionrp   ro   
approx_endendsanswermoon_phase_tmrwtomorrow	isSkipped
leap_tithis                          r   tithir      s   ~~"	U	A	b	($ 4 *
zB
%j(, #'Y`bY`TUtax0?43HHCOY`/bY`bY`TUtax0?43HHCOY`/b474Y[4Y[dCdSj4Y/[ !!1l3*

R
2	%	*$Jt%&  q)//B&'(%2%))J?Z/L!!Q5J:r!R'%..8DrkzJ
s:t--F	-3 cb[s   $E05$E5*E:c                    |\  }}}t        | |      d   |dz  z
  }g d}|D cg c]  }t        ||z          }}t        |d   dz  dz        }	t        |      }
|}t	        ||
|	dz  dz        }|| z
  |z   dz  |z   }t        |	      t        |      g}t        |d   dz  dz        }||	z
  dz  dkD  }|rH|	dz   }t	        |||dz  dz        }|| z
  |z   dz  |z   }|	dk(  rdn|}|t        |      t        |      gz  }|S c c}w )	zYCurrent nakshatra as of julian day (jd)
     1 = Asvini, 2 = Bharani, ..., 27 = Revati
  r   r   )rY   r   r   r   r      rF   r   rE   )r   r   r   rM   rv   r;   rC   )r~   r   r   r   r   r   r   r   
longitudesnakrp   ro   r   r   r   nak_tmrwr   leap_naks                     r   	nakshatrar      sL   
 ,#sB	U	A	c	)$''4;<Gq*G*< 	Z]R#%&# J!!1cCi"n5*
)j
 B	&	+$HfTl#& *R.2%+,(#~#a')QwH!':x#~7JKJ2I
"b(2-D2Iq8H
s8}fTl++F	-/ =s   C>c                 >   |\  }}}t        | |      d   |dz  z
  }t        |      }t        |      }||z   dz  }t        |dz  dz        }	|	dz  |z
  }
g d}|D cg c]  }t        ||z         t        |      z
  dz  ! }}|D cg c]  }t        ||z         t        |      z
  dz  ! }}t	        ||      D cg c]
  \  }}||z    }}}|}|}t        |||
      }||z   | z
  dz  |z   }t        |	      t        |      g}t        |dz         }t        |dz         }||z   dz  }t        |dz  dz        }||	z
  dz  dkD  }|rJ|	dz   }|dz  |z
  }
t        |||
      }||z   | z
  dz  |z   }|	dk(  rdn|}|t        |      t        |      gz  }|S c c}w c c}w c c}}w )	zQYoga at given jd and place.
     1 = Vishkambha, 2 = Priti, ..., 27 = Vaidhrti
  r   r   rF   r   r   r   r   rE   )r   r   r   r   r   rv   r;   rC   )r~   r   r   r   r   r   
lunar_long
solar_longrr   yogr   r   r   r   r   r   r   total_motionrp   ro   r   r   r   lunar_long_tmrwsolar_long_tmrw
total_tmrwr   r   leap_yogs                                r   yogar   C  s   
 ,#sB	U	A	c	)$ t$*t$*
"c
)%URZ## !E), #'Y`bY`TUtax0?43HHCOY`/bY`bY`TUtax0?43HHCOY`/b14_o1VX1V+44#:1V,X !!1l3*

b
 B	&	+$HfTl#& $D1H-/#D1H-//1S8**r/C'((#~#a')QwHx(50L!!Q5J:"b(2-D2Iq8H
s8}fTl++F	-7 cbXs   $F$F:Fc                     t        | |      d   }t        |      }t        |      }||z
  dz  }t        |dz        }|dz  |z
  }t	        |      gS )z9Returns the karana and their ending times. (from 1 to 60)r   rF   r:   )r   r   r   r   r;   )r~   r   r   r   r   r   r   r   s           r   karanar   u  sb     
U	A	$ t$*t$*Z'3.*
zA~
%Z',
e*r   c                 6    t        t        | dz         dz        S )zFWeekday for given Julian day. 0 = Sunday, 1 = Monday,..., 6 = SaturdayrE      )r;   r   r}   s    r   vaarar     s    	T"q&\A	r   c                     t        | |      d   }t        | |      d   }t        ||d      }t        ||d      }t        |      }t        |      }||k(  }|dz   }	|	dkD  r|	dz  }	t	        |	      |gS )zbReturns lunar month and if it is adhika or not.
     1 = Chaitra, 2 = Vaisakha, ..., 12 = Phalgunar   r   rE   r   )r   r   new_moonraasir;   )
r~   r   ticriticallast_new_moonnext_new_moonthis_solar_monthnext_solar_monthis_leap_monthmaasas
             r   masar    s     R"R"(8R,-8R,-=)=)#'77-
Q
%
RZ%"*
e*m	$$r   c                     | dz
  S )Ng    c!Ar   r}   s    r   r   r     s    b8mr   c                 j    t        |       }t        |d|z
  dz  z   t        z        }|dz
  }|dz   }||fS )Nr   r   ik     )aharganar;   sidereal_year)r~   	maasa_numaharkalisakavikramas         r   elapsed_yearr    sD    	"$	da)mr))]:	;$	$3J'	tr   c                     |dk(  r| |z
  }|dk(  r| d|z
  z   }t        d      D cg c]
  }d|dz  z    }}|D cg c]  }t        |z          }}t        |      }t        ||d      }|z   S c c}w c c}w )zReturns JDN, where
     opt = -1:  JDN < jd such that lunar_phase(JDN) = 360 degrees
     opt = +1:  JDN >= jd such that lunar_phase(JDN) = 360 degrees
  r   rE   r      r   rF   )rG   r   rM   rv   )	r~   tithi_optre   offsetro   rL   rp   y0s	            r   r   r     s    
 	BYfBYrF{+$)"I/I&VAXI!/'()q!{519q!)A!1c""		 0)s
   A.A3c                 J    t        |       }t        |       }t        |dz        S )z-Zodiac of given jd. 1 = Mesha, ... 12 = Meenag      >@)r   r   )r~   r@   solar_nirayanas      r   r   r     s&    b!"2&.	ns"	##r   c                 B    t        |       }t        |       }||z
  dz  }|S rT   )r   r   )r~   r   r   r   s       r   r   r     s+    r"*r"*Z'3.*	r   c                 x    t        | |      d   }|dk\  r|dz
  dz  }|dz   t        |dz  dz
  dz        z   dz  }|S )	Nr   i     r5   r      l   iPF  )r  r;   )r~   r  r
  samvats       r   
samvatsarar    sT    	b)	$Q	'$ 
T\dRi2-d2ITCZ#-6772=&	-r   c                     | dz
  dz  S )z0 = Vasanta,...,5 = ShishirarE   rc   r   )masa_nums    r   ritur     s    
Q,1	r   c                 h    t        | |      d   }t        | |      d   }||z
  dz  }|t        |      gS )Nr   r   )r   r   rC   )r~   r   srisessetdiffs        r   day_durationr%    sA    
"e
Q
%	E	1	$
,"	$
t	r   c           
      (   |\  }}}|j                   }t        j                  | |dz  z
  t        j                  ||t	        t
        t        j                  z               d   d   }t        j                  | |dz  z
  t        j                  ||t	        t
        t        j                  z               d   d   }||z
  }g }t        dd      D ].  }	|j                  t        ||	|z  dz  z   | z
  dz  |z                0 t        j                  | dz   |dz  z
  t        j                  ||t	        t
        t        j                  z               d   d   }||z
  }
t        dd      D ].  }	|j                  t        ||	|
z  dz  z   | z
  dz  |z                0 |S )Nr   r   rE   r   	      )r   r   r   r'   r;   r   r   r   rG   appendrC   )r~   r   r   r   r   r"  r#  day_dur	end_timesrL   	night_durs              r   gauri_chogadiyar-    sy   ,#sB~~"
..beSWWc3s;QTQ^Q^C^?_
`ab
cde
f%	RU
CGGS#c+PSP\P\B\>]	^_`	abc	d$E\')A;aVUa'kQ%66;rABFGH  .."q&BrE)377CSWZWdWdIdEe
fgh
ijk
l%t|)A;aVTQ]a$77"<BRGHI  
r   c                    |\  }}}|j                   }t        j                  | |dz  z
  t        j                  ||t        t        j
                  z         d   d   }t        j                  | |dz  z
  t        j                  ||t        t        j                  z         d   d   }||z
  }t        |       }	g dg dg dd}
|||
|   |	   z  z   }|d	|z  z   }|| z
  dz  |z   }|| z
  dz  |z   }t        |      t        |      gS )
Nr   r   rE   r   )g      ?      ?r   r         ?      ?r   )r   r0  r   r1  r   r/  rY   )r   r1  r   r/  rY   r   r0  )rW   gulika	yamagandar/  )	r   r   r   r'   r   r   r   r   rC   )r~   r   optionr   r   r   r"  r#  r*  weekdayr   
start_timeend_times                r   trikalamr8    s   ,#sB~~"
..beSWWc3{S]]?Z
[\]
^_`
a%	RU
CGGS#kCLL>X	YZ[	\]^	_$E\'"I' DCFI' w!999*%'/)( R2%**mr!B&(

fX.	//r   c                     t        | |d      S )NrW   r8  r~   r   s     r   r   r     s    xE6:r   c                     t        | |d      S )Nr3  r:  r;  s     r   r   r     s    HR$Dr   c                     t        | |d      S )Nr2  r:  r;  s     r   r   r     s    "eX!>r   c                 X   |\  }}}|j                   }t        j                  | |dz  z
  t        j                  ||t        t        j
                  z         d   d   }t        j                  | dz   |dz  z
  t        j                  ||t        t        j                  z         d   d   }||z
  }t        j                  | |dz  z
  t        j                  ||t        t        j                  z         d   d   }||z
  }t        |       }	ddgddgd	d
gddgddgd	dgddgg}
||g}||g}|	dk(  r
||d<   ||d<   ddg}ddg}t        dd      D ]]  }|
|	   |   }|dk7  s||   ||   |
|	   |   z  dz  z   ||<   ||   |dz  dz  z   ||<   ||   | z
  dz  |z   ||<   ||   | z
  dz  |z   ||<   _ ||gS )Nr   r   rE   r   g$@rY   g@g!@g333333@g333333@gffffff@g      @g?rc   r   g?)	r   r   r   r'   r   r   r   r   rG   )r~   r   r   r   r   r#  r"  r,  r*  r5  r   durbasestart_timesr+  rL   r  s                    r   durmuhurtamrB    s   ,#sB~~" 
RU
CGGS#kCLL>X	YZ[	\]^	_$
.."q&BrE)377C[SVS`S`E`
abc
def
g%t|) ..beSWWc3{S]]?Z
[\]
^_`
a%E\'"I' C[3Z3Z3Z3Z3Z3Z' 
'#
$\YCF$Q A+!f)A;aWa F}AwQ''*:1*=!=!BBk!n ^gmb&88il $A+r1B6k!nlR'2-2il  y	!!r   c                    |\  }}}|j                   }t        j                  | |dz  z
  t        j                  ||t        t        j
                  z         d   d   }t        j                  | |dz  z
  t        j                  ||t        t        j                  z         d   d   }||z
  }|d|z  z   }|d|z  z   }	|| z
  dz  |z   |	| z
  dz  |z   gS )zhAbhijit muhurta is the 8th muhurta (middle one) of the 15 muhurtas
  during the day_duration (~12 hours)r   r   rE   r   g?g?)r   r   r   r'   r   r   r   )
r~   r   r   r   r   r"  r#  r*  r6  r7  s
             r   abhijit_muhurtarD  )  s     ,#sB~~"
..beSWWc3{S]]?Z
[\]
^_`
a%	RU
CGGS#kCLL>X	YZ[	\]^	_$E\'v''*Vg%%( ?b
 2
%2';b'@	AAr   c           	      >   | |j                   dz  z
  }g }t        D ]  }|t        j                  k7  rt	        ||      }n#t        t	        |t        j                              }t        |dz        }t        |dz        }|j                  |||t        |      g        |S )zComputes instantaneous planetary positions
     (i.e., which celestial object lies in which constellation)

     Also gives the nakshatra-pada division
   r   r   )r   planet_listr   r/   r   ketuRAHUr;   rC   r)  r   )r~   r   jd_ut	positionsr1   nirayana_longconstellationcoordinatess           r   planetary_positionsrN  :  s     u~~#
#%)f(7m-eSXX>?m *+M+,Kfm[.:WXY  
r   c                     |\  }}}| |dz  z
  }t                t        j                  |||d      d   d   }t        |dz        }t	        |dz        }t                ||t        |      gS )z8Lagna (=ascendant) calculation at any given time & placer      PrE   r   r   )r   r   	houses_exr;   rC   r   r   )	r~   r   r   r   r   jd_utcnirayana_lagnarL  rM  s	            r   	ascendantrT  Q  sx    ,#sBc?& ==c48;A>. nr)*-~*++
n^&D	EEr   c                 @    d}d|z  }| |z  }|dz  }t        |dz        S )zgCalculates the navamsa-sign in which given longitude falls
  0 = Aries, 1 = Taurus, ..., 11 = Pisces
  r   r   rE   r   )r   r   one_signsigns_elapsedfraction_lefts        r   navamsa_from_longrY  c  s6     ((](h&-!#-	]R	  r   c                    | |j                   dz  z
  }g }t        D ]a  }|t        j                  k7  rt	        ||      }n#t        t	        |t        j                              }|j                  |t        |      g       c |S )z!Calculates navamsa of all planetsr   )	r   rF  r   r/   r   rG  r.   r)  rY  )r~   r   rR  rJ  r1   rK  s         r   navamsar[  m  ss    $$&)f(8m-fcmmDEmf/>?@  
r   c                     t        t        j                         j                  j                         t        t        t        t                     t        t        t        t                     t        t        t        t              d          t        t        t        t              d          t        t              dk(  sJ t        t        t        t              d          t        t        t              dgk(  sJ y )NrE      r  )r   sys	_getframef_codeco_namer   date2	bangalorer   r   r   r   date4shillongr   helsinkir   r   r   	all_testsrg  }  s    &&'	"#y!"y!!$%ui #$	u		x #$	x	 RD	()	(r   c                     t        t        j                         j                  j                         t        t        ddd            } t        t        ddd            }t        t        ddd            }t        t        ddd            }t        t        ddd	            }t        d
       t        t        t        t                     t        t        t        t                     t        t        t        t                     t        t        t        t                     t        t        |t                     t        t        | t                     t        t        |t                     t        t        |t                     t        t        |t                     t        t        t        t                     t        d       y )N  rc        r   r            ztithi startz	tithi end)r   r^  r_  r`  ra  gregorian_to_jdr   r   date1rc  rb  date3rf  shyambirthdatehonavar)feb3apr24apr19apr20apr21s        r   tithi_testsry    s$   &&'	dAq)	*$
$tQ+
,%
$tQ+
,%
$tQ+
,%
$tQ+
,%eY eY eY eXeY dIeXeXeXng&'r   c                  N   t        t        j                         j                  j                         t        t        t        t                     t        t        t        t                     t        t        t        t                     t        t        t        t                     y r   )r   r^  r_  r`  ra  r   rp  rc  rb  rq  rd  re  r   r   r   nakshatra_testsr{    s[    &&'	%#$	%#$	%#$	%"#r   c                  8   t        t        j                         j                  j                         t        t        ddd            } t        t        t        t                     t        t        t        t                     t        t        | t                     y )Nri  r]     )r   r^  r_  r`  ra  ro  r   r   rq  rc  rb  rf  )may22s    r   
yoga_testsr    s\    &&'
$tQ+
,%UIUIUHr   c                     t        t        j                         j                  j                         t        t        ddd            } t        t        ddd            }t        t        ddd            }t        t        ddd            }t        t        dd	d
            }t        t        dd	d            }t        d       t        t        | t                     t        t        |t                     t        t        |t                     t        t        |t                     t        t        |t                     t        t        |t                     y )Nri  rc   r   i  r(  r     r'  r]  rm  rn  shyam)
r   r^  r_  r`  ra  ro  r   r  rc  rf  )r~   aug17aug18sep19may20may21s         r   
masa_testsr    s    &&'tD!R()"
$tQ+
,%
$tQ+
,%
$tQ+
,%
$tQ+
,%
$tQ+
,%.RUIUIUIUHUHr   c                  6   t        t        j                         j                  j                         t        j                  dddd      } t        | t              dg dddggk(  sJ t        j                  ddd	d
      } t        | t              dg dddggk(  sJ y )N  r'  r   g"""""7@rc   )r   %   r   r]  r      .?P*@r(  )rm        rm  rj  )	r   r^  r_  r`  ra  r   rx   rT  rc  r}   s    r   ascendant_testsr    s    &&'
zz$2{+"	2y	!aq!f%=	=>	=
zz$256"	2y	!aAw%?	?@	?r   c                  
   t        t        j                         j                  j                         t        j                  dddd      } t        | t              }ddgddgd	dgd
d
gdd	gddgdd	gddgddgddgddgg}||k(  sJ y )Nr  r'  r  r  r      rE   r]  r   rc   rj  r   r:   r   r(  )	r   r^  r_  r`  ra  r   rx   r[  rc  )r~   nvexpecteds      r   navamsa_testsr    s    &&'
zz$256"r9""g1v1v1v1v2w!fr2hAB!R:(	xr   __main__gl)@gtfS@r   gl9@gnV@g(\N@g(\8@g       @g镲,@g̜R@i  r      ri  r  i  r:   r'  rn  rk  r   r(  r   i  i  r]  )r   r   r   rY   )r   rV   )n__doc__
__future__r   mathr   collectionsr   structswissephr   r   r
   r  r   BIT_NO_REFRACTIONr   r0   r/   r'   r(   r)   r*   r+   r,   r-   r.   URANUSNEPTUNErF  revati_359_50galc_cent_mid_mular   r   r3   from_dmsrA   rC   rM   norm180r   rG  ra   rm   rv   ro  jd_to_gregorianr   r   r   r   r   r   r   r   r	   hour_valrx   r~   r   	rise_timer   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r  r   r%  r-  r8  
rahu_kalamyamaganda_kalamgulika_kalamrB  rD  rN  rT  rY  r[  rg  ry  r{  r  r  r  r  __name__r^  rc  re  rf  rs  rp  rb  rq  rd  apr_8apr_10rr  deepabirthdater   r   r   <module>r     sS      , f./w=> !!C$9$99 99ww#((CKKyy#**cmmxxS[[3 NR = F  ? A $ '$" P9
" ==(T  eS SZZeS(+B		(1
78	%il^
45>'*&R F/d%  $$&0* ;
D>*"XB".F$! 			*	 A zFFD))664((5&$'('5$''
$tQ+
,%
$tQ+
,%
$tQ*
+%
$tQ+
,%
$tQ*
+%4a,-&"4b!#45."4a#34.
 ng&'ng&'' r   