
    QfG                     R   d Z ddlZddlmZmZmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZmZmZmZ 	 ddlZn# e$ r	 ddlmZ Y nw xY wddlmZmZmZmZ ddlmZmZ dd	l m!Z! dd
l"m#Z#m$Z$m%Z%m&Z& g dZ'dZ(e)Z*e)Z+e)Z,eee)ge)f                  Z-e G d d                      Z.e G d d                      Z/de)de)de)de)de)f
dZ0dee)ej1        f         de2fdZ3de)de,fdZ4de)de,fdZ5de)de,fdZ6de)de,fdZ7de)de,fdZ8de)de,fdZ9de)de,fd Z:de)de,fd!Z;de)defd"Z<d#e)d$e*d%e*d&e)d'ee         dee/e.f         fd(Z=d)ej>        d*efd+Z?dej@        jA        fd*ed,eej>                 d-eeBejC        f         deej                 fd.ZDdej@        jA        fd*ed,eej>                 d-eeBejC        f         deej                 fd/ZE	 d6d*ed0eej                 de*fd1ZF	 d6d*ed0eej                 fd2ZG	 d6d*ed0eej                 fd3ZHd,ej>        de)fd4ZId6d,eej>                 de)fd5ZJdS )7zMoon phase, rise and set times

Right ascension, declination and distance of moon calcaulation
from

LOW-PRECISION FORMULAE FOR PLANETARY POSITIONS
http://articles.adsabs.harvard.edu/pdf/1979ApJS...41..391V
    N)	dataclassfieldreplace)	asinatan2cosdegreesfabspiradianssinsqrt)CallableListOptionalUnion)zoneinfo)AstralBodyPositionObservernowtoday)	juliandayjulianday_2000)lmst)	Table4Rowtable4_utable4_vtable4_w)moonrisemoonsetphaseg@t?c                   2    e Zd ZU  ee          Zeed<   dS )	NoTransitdefault_factoryparallaxN)__name__
__module____qualname__r   floatr&   __annotations__     J/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/astral/moon.pyr#   r#   $   s/         eE222He22222r-   r#   c                       e Zd ZU eed<    eej                  Zej        ed<    ee	          Z
e	ed<    ee	          Ze	ed<   dS )TransitEventeventr$   whenazimuthdistanceN)r'   r(   r)   strr+   r   datetimetimer2   r*   r3   r4   r,   r-   r.   r0   r0   )   sv         JJJ%>>>D(->>>U5111GU111eE222He22222r-   r0   f0f1f2preturnc                 N    || z
  }||z
  |z
  }| |d|z  |d|z  dz
  z  z   z  z   }|S )z3-point interpolation      r,   )r8   r9   r:   r;   abfs          r.   interpolaterC   1   sA    
RA
R!A
Q!a%!q1uqy/)**AHr-   value1c                     t          | t          j                  r|                                 } | dk     rdS | dk    rdS dS )z1Test whether value1 and value2 have the same signr   r?   )
isinstancer6   	timedeltatotal_seconds)rD   s    r.   sgnrJ   9   sI    &(,-- (%%''zzr	!qqr-   jd2000c                 :    dd| z  z   }|t          |          z
  }|S )Ng֥Fg?g9*a?int)rK   _mean_longitudes     r.   moon_mean_longituderP   F   s)    !77O%O(<(<<Or-   c                 :    dd| z  z   }|t          |          z
  }|S )NgO?g12є?rM   )rK   _mean_anomolys     r.   moon_mean_anomolyrS   L   s)    }v55M!C$6$66Mr-   c                 :    dd| z  z   }|t          |          z
  }|S )Ng%j?gH]$ѨТ?rM   )rK   _argument_of_latitudes     r.   moon_argument_of_latituderV   R   ,    $}v'==1C8M4N4NN  r-   c                 :    dd| z  z   }|t          |          z
  }|S )Ng9~߿y?g=/,V?rM   )rK   _mean_elongation_from_suns     r.   moon_mean_elongation_from_sunrZ   X   s4     (=6+A A 9C!= = ! %$r-   c                 D    t          |           t          |           z
  }|S N)rP   rV   )rK   _longitude_lunar_ascending_nodes     r.   longitude_lunar_ascending_noder^   `   s-    &9' '!&))'*# +*r-   c                 :    dd| z  z   }|t          |          z
  }|S )NgV'g(?glDmf?rM   )rK   _sun_mean_longitudes     r.   sun_mean_longitudera   g   s,    "]V%;;-4G0H0HHr-   c                 :    dd| z  z   }|t          |          z
  }|S )Ng^Y-?gࣉmf?rM   )rK   _sun_mean_anomolys     r.   sun_mean_anomolyrd   m   s,     =6#99)C0A,B,BBr-   c                 :    dd| z  z   }|t          |          z
  }|S )Ngf0F$
-?g|;:r?rM   )rK   _venus_mean_longitudes     r.   venus_mean_longituderg   s   rW   r-   c                   	
 t          |           t          |           t          |           t          |           t	          |           dt          |           t          |           dddt          |           g
| dz  dz   	dt          t                   dt          f	
fd} |t                    } |t                    } |t                    }|t          |||z  z
            z  }t          |          
d         pddz  t           z  z   }|t          |          z  }t          |          }d	t          |          z  }t#          |||          S )
zKCalculate right ascension, declination and geocentric distance for the moonN魎  r?   tabler<   c                    d}| D ]}d}|j                                         D ]*\  }}|dk    r
|dz
           }|r||z  }||z  }#t          +|j        r	nd}||j        |z  |                    |dz  t          z            z  z  }|S )N        r   r?   r>   )argument_multiplersitems
ValueErrortcoefficientsincosr   )rj   resultrowrevolutions
arg_number
multiplier	arg_valuevaluet_multiplerTargument_valuess            r.   _calc_valuez"moon_position.<locals>._calc_value   s     	W 	WC!$K*-*A*G*G*I*I ) )&
J?? /
Q ?I  ) )J 6#u,(( #  #u+!!!Kco3cjjqSUAU6V6VVVFFr-   r   r>   gx=\r4N@)rP   rS   rV   rZ   r^   ra   rd   rg   r   r   r*   r   r   r   r   r   r   r   )rK   r}   vuwsright_ascensiondeclinationr4   r{   r|   s            @@r.   moon_positionr   y   s]    	F##&!!!&))%f--&v..6""  V$$1O 	A4	? u       $ 	HAHAHA	DQUOOA1gg!3!8qA = BBO	DGGAq''K$q''!Ho{HEEEr-   hourr   latituder4   windowc                 
   t          |          }g d}t          d          }|d         j        |d         j        k     r#|d         j        dt          z  z   |d         _        ||d         j        z
  | |z  z   |d<   ||d         j        z
  | |z  z   |z   |d<   |d         |d         z   dz  |d<   |d         j        |d         j        z   dz  |d         _        t	          t          |                    }t          t          |                    }	t          t          dt          z   d|z  z
                      }
| dk    r_|t	          |d         j                  z  |	t          |d         j                  z  t          |d                   z  z   |
z
  |d         _        |t	          |d         j                  z  |	t          |d         j                  z  t          |d                   z  z   |
z
  |d         _        t          |d         j                  t          |d         j                  k    rt          |d         j                  S |t	          |d         j                  z  |	t          |d         j                  z  t          |d                   z  z   |
z
  |d         _        d|d         j        z  d|d         j        z  z
  d|d         j        z  z   }d|d         j        z  d	|d         j        z  z
  |d         j        z
  }||z  d|z  |d         j        z  z
  }|dk     rt          |d         j                  S t          |          }| |z   d|z  z  }|dk    s|dk     r| |z
  d|z  z  }| |z   d
z   }t          |          }t          ||z
  dz            }t	          |d         j                  }t          |d         j                  }|d         ||d         |d         z
  z  z   }t	          |          }t          |          }|	|z  ||z  |z  z
  }| |z  }t          t          ||                    }|dk     r|dz  }|dk    r|dz  }t          j        ||d          }|d         j        dk     r.|d         j        dk    rt!          d|||d         j                  S |d         j        dk    r.|d         j        dk     rt!          d|||d         j                  S t          |d         j                  S )a3  Check if the moon transits the horizon within the window.

    Args:
        hour: Hour of the day
        lmst: Local mean sidereal time in degrees
        latitude: Observer latitude
        distance: Distance to the moon
        window: Sliding window of moon positions that covers a part of the day
    )rl   rl   rl   g.@r>   r   r?   Z   gHzD@      g?<   h  riseset)r   r   r   r   r   r   MOON_APPARENT_RADIUSr4   rJ   r#   r   rN   r	   r   r6   r7   r0   )r   r   r   r4   r   mst
hour_anglek1slclzr@   rA   discriminanter7   hmsdcdhour_angle_crossingshchxyaz
event_times                              r.   moon_transit_eventr      s     $--C J	7	8	8Bay 6!9#<<<$*1I$=B$Fq	!&)33tbyAJqM&)33tbyABFJqM]Z]2a7JqM#AY2VAY5JJaOF1I	WX		B	WX		B 	GB--(1BCDDEEAqyyVAY*+++3vay,---JqM0B0BBC 	q	 	S&'''
s6!9())
)C
1,>,>
>	?
	 1I 6!9#fQi&8"9"999+,,, 	S&'''
s6!9())
)C
1,>,>
>	?
	 1I 	
F1IVAY%7!77!fQi>P:PPA	F1IVAY%7!77&):LLAq51q56!9#555La+,,,%%L
l	q1u%A1uuAR,1q5)!8gDD		ATAXOA	VAY"	#	#B	VAY"	#	#B$Q-!z!}z!}/L*MM	 	!	!B	 	!	!B
R"r'B,A	bA	q!		B	Avv
c		Cxx
c	q!Q''JayA&)"4q"8"8FJF1I4FGGGayA&)"4q"8"8E:r6!93EFFFVAY'(((r-   onobserverc           
      p	   t          |           }t          | |j                  }g }t          d          D ],}t	          ||dz  z             }|                    |           -t          dd          D ]D}||         j        ||dz
           j        k    r#||         j        dt          z  z   ||         _        Et          |d                   t                      t                      g}d}d}	t          d          D ]}
|
dz   dz  }t          |d         j        |d         j        |d         j        |          |d         _        t          |d         j        |d         j        |d         j        |          |d         _        t          |
||j        |d         j        |          }t          |t                     r|j        |d         _        nt%          j        | j        | j        | j        |
ddt$          j        j                  }|j        d	k    r'|j        }t%          j        | j        | j        | j        |j        |j        dt$          j        j                  }||}n||z
                                  }||z
                                  }|	|	|z
                                  }nd}t;          |          t;          |          k    ot=          |          t=          |          k    }|t;          |          t;          |          k    o#|	duot;          |          t;          |          k    z  }|r|}n0|j        d
k    r$|j        }t%          j        | j        | j        | j        |j        |j        dt$          j        j                  }|	|}	n|	|z
                                  }||z
                                  }|||z
                                  }nd}t;          |          t;          |          k    ot=          |          t=          |          k    }|t;          |          t;          |          k    o#|duot;          |          t;          |          k    z  }|r|}	|d         j        |d         _        |d         j        |d         _        |d         j        |d         _        ||	fS )zCalculate rise and set timesr   g      ?r?   r>   r   N   )tzinfor   r   )r   r   	longituderanger   appendr   r   r   r   rC   r   r   r   r4   rG   r#   r&   r6   yearmonthdaytimezoneutcr1   r2   r   minuterI   rJ   r
   )r   r   rK   t0r   intervalposmoon_position_window	rise_timeset_timer   phtransit_info
query_timer   r1   rq_diffeq_diffsq_diffupdate_rise_timeupdate_set_times                        r.   risesetr     s   
 BF	

 
B
 #%A!HH  Fhn566	!QKK O OX;&!HqL/*III*+H+*EB*NAhK' 	!6 IH b		 ZL ZLQh"_2=aD aD aD 	3
 3
Q/ /:aDaDaD	/
 /
Q+ *"h'18L
 
 lI.. B	)/;/D #,,!*264Ah>O>S  J !V++).
 )GHFO%#,0   $ %II(:5DDFFG$z1@@BBG+#+j#8"G"G"I"I"#'*7||s7||'C (&I IWI&$ %GG(D ) ,MWW1M$ ( *$)	#u,,).
 )GHFO%#,0   #$HH'*4CCEEG$z1@@BBG ,#,z#9"H"H"J"J"#&)'llc'll&B '&tH HWH&O $s7||s7||'C (!-N#g,,#g,,2NO ' )#(2F3

 	Q/ /C1.E.QQ++?+B+KQ((hr-   dater   c                    t          |t                    rt          j        |          }|t	          |          }n.t          |t
          j                  r|                                }t          ||           }|d         r|d                             |          }|                                }||k    r||k    rt          j	        d          }nt          j	        d          }||z   }t          ||           }|d         r7|d                             |          }|                                }||k    rd}|S t          d          )aK  Calculate the moon rise time

    Args:
        observer: Observer to calculate moonrise for
        date:     Date to calculate for. Default is today's date in the
                  timezone `tzinfo`.
        tzinfo:   Timezone to return times in. Default is UTC.

    Returns:
        Date and time at which moonrise occurs.
    Nr   rF   daysr?   z/Moon never rises on this date, at this locationrG   r5   r   ZoneInfor   r6   r   r   
astimezonerH   ro   )r   r   r   infor   rddeltanew_dates           r.   r   r     s>     &# +"6**|V}}	D(+	,	, yy{{4""DAw LAw!!&))YY[[::Dyy *333 *222e|H8X..DAw  Aw))&11YY[[::DJKKKr-   c                    t          |t                    rt          j        |          }|t	          |          }n.t          |t
          j                  r|                                }t          ||           }|d         r|d                             |          }|                                }||k    r||k    rt          j	        d          }nt          j	        d          }||z   }t          ||           }|d         r7|d                             |          }|                                }||k    rd}|S t          d          )aH  Calculate the moon set time

    Args:
        observer: Observer to calculate moonset for
        date:     Date to calculate for. Default is today's date in the
                  timezone `tzinfo`.
        tzinfo:   Timezone to return times in. Default is UTC.

    Returns:
        Date and time at which moonset occurs.
    Nr?   rF   r   z.Moon never sets on this date, at this locationr   )r   r   r   r   r   r   r   r   s           r.   r    r      s>     &# +"6**|V}}	D(+	,	, yy{{4""DAw K1g  ((XXZZ::Dyy *333 *222e|H8X..DAw 1g((00XXZZ::C
IJJJr-   atc                 4   |t                      }t          |          }t          |          }t          t	          || j                            }||j        z
  }t          |          }t          |          }t          |j	                  }t          |j	                  }	t          t          | j
                            }
t          t          | j
                            }| |	z  |
z  ||z  z   }| |	z  }t          t          ||                    dz  }|S )Nr   )r   r   r   r   r   r   r   r   r   r   r   r	   r   )r   r   rK   positionlst0	hourangler   r   r   r   r   r   r   r   r3   s                  r.   r3   r3     s     
zUUBFV$$HDX%78899D 88I	YB	YB	X!	"	"B	X!	"	"B	WX&''	(	(B	WX&''	(	(B	b2RA	bAeAqkk""S(GNr-   c                 z   |t                      }t          |          }t          |          }t          t	          || j                            }||j        z
  }t          |          }t          |          }t          |j	                  }t          |j	                  }	t          t          | j
                            }
t          t          | j
                            }| |	z  |
z  ||z  z   }| |	z  }||	z  |z  ||
z  z   }t          ||z  ||z  z             }t          t          ||                    }|S r\   )r   r   r   r   r   r   r   r   r   r   r   r   r	   r   )r   r   rK   r   r   r   r   r   r   r   r   r   r   r   r   r	elevations                    r.   r   r     s&    
zUUBFV$$HDX%78899D 88I	YB	YB	X!	"	"B	X!	"	"B	WX&''	(	(B	WX&''	(	(B	b2RA	bA
R"rBwAQUQU]Aa$$Ir-   c                 (    dt          | |          z
  S )Nr   )r   )r   r   s     r.   zenithr      s     	(B''''r-   c                    t          |           }t          |dz
  d          dz  }||z   dz
  dz  }t          |d          }t          |d          }dd|z  z   d	|z  z
  |d
z  z   }t          |dz            }dd|z  z   }t          |dz            }dd|z  z   d|z  z   |dz  z   }t          |dz            }t          |          dt	          |          z  z   }	|	dt	          |          z  z  }	|	dt	          d|z  |z
            z  z  }	|	dt	          d|z            z  z  }	|	dz  }	t          |	          }	|	dz   dz  dz  }
|
S )NiDY$ r>   l    pPg   ,BAri   r   gr@gV-rL-AgQ,Z?iLT g     v@gGzXv@g@gQ`@gh"lx; Ag-m?iC g)\(@g @gRQ?gQ?gQ@r      )r   powr   r	   r   rN   )r   jddtrp   t2t3dr   m1elongmoons              r.   _phase_asfloatr   '  sd   	4B	b7lQ		#3	4B	b9	%A	QB	QB+/"i"n5fEAE	A*q.!AE	A	;?	#y2~	6"u*	EB	e		BAJJB'E	TCFF]E	TCA
OO##E	TCAJJEEMEJJET\S B&DKr-   c                 Z    | t                      } t          |           }|dk    r|dz  }|S )a  Calculates the phase of the moon on the specified date.

    Args:
        date: The date to calculate the phase for. Dates are always in the UTC timezone.
              If not specified then today's date is used.

    Returns:
        A number designating the phase.

        ============  ==============
        0 .. 6.99     New moon
        7 .. 13.99    First quarter
        14 .. 20.99   Full moon
        21 .. 27.99   Last quarter
        ============  ==============
    Ng      <@)r   r   )r   r   s     r.   r!   r!   A  s6    $ |ww$Dt||Kr-   r\   )K__doc__r6   dataclassesr   r   r   mathr   r   r   r	   r
   r   r   r   r   typingr   r   r   r   r   ImportError	backportsastralr   r   r   r   astral.julianr   r   astral.siderealr   astral.table4r   r   r   r   __all__r   r*   DegreesRadiansRevolutionsArgumentFuncr#   r0   rC   rH   rN   rJ   rP   rS   rV   rZ   r^   ra   rd   rg   r   r   r   r   r   r   r5   r   r   r    r3   r   r   r   r!   r,   r-   r.   <module>r      s     1 1 1 1 1 1 1 1 1 1 H H H H H H H H H H H H H H H H H H H H H H 2 2 2 2 2 2 2 2 2 2 2 2#OOOO # # #""""""""# < ; ; ; ; ; ; ; ; ; ; ; 3 3 3 3 3 3 3 3             A A A A A A A A A A A A
*
*
* . 

%%01 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3E u % E e    
eX//0 
S 
 
 
 
 +    e     !e ! ! ! ! !%% %K % % % %+5 +[ + + + +u     U {    ! !; ! ! ! !2F% 2F$6 2F 2F 2F 2Fjb)
b)
b) b) 	b)
 #$b) <"#b) b) b) b)Jzzz z z z~ %)*2*;*?*L *L*L
8=
!*L #x&'*L h 	*L *L *L *L^ %)*2*;*?*K *K*K
8=
!*K #x&'*K h 	*K *K *K *K^ '+ "#    6 '+ "#   > '+( (("#( ( ( ( 5    4 ' 5      s   9 AA