
    9jG                        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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jb                  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                  j                  fd*ed,eej|                     d-eeBej                  f   deej                     fd.ZDdej                  j                  fd*ed,eej|                     d-eeBej                  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ZJy# e$ r
 ddlmZ Y w xY w)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                   *    e Zd ZU  ee      Zeed<   y)	NoTransitdefault_factoryparallaxN)__name__
__module____qualname__r   floatr&   __annotations__     W/var/www/html/eeg-assistent/abrechnung/venv/lib/python3.12/site-packages/astral/moon.pyr#   r#   $   s    E2He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<   y)TransitEventeventr$   whenazimuthdistanceN)r'   r(   r)   strr+   r   datetimetimer2   r*   r3   r4   r,   r-   r.   r0   r0   )   s<    J>D(-->51GU1E2He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                 p    t        | t        j                        r| j                         } | dk  ry| dkD  ryy)z1Test whether value1 and value2 have the same signr   r?   )
isinstancer6   	timedeltatotal_seconds)rD   s    r.   sgnrJ   9   s7    &(,,-%%'z	!r-   jd2000c                 2    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                 2    dd| z  z   }|t        |      z
  }|S )NgO?g12є?rM   )rK   _mean_anomolys     r.   moon_mean_anomolyrS   L   s&    }v55M!C$66Mr-   c                 2    dd| z  z   }|t        |      z
  }|S )Ng%j?gH]$ѨТ?rM   )rK   _argument_of_latitudes     r.   moon_argument_of_latituderV   R   )    $}v'==1C8M4NN  r-   c                 2    dd| z  z   }|t        |      z
  }|S )Ng9~߿y?g=/,V?rM   )rK   _mean_elongation_from_suns     r.   moon_mean_elongation_from_sunrZ   X   s/     (=6+A A 9C!= ! %$r-   c                 4    t        |       t        |       z
  }|S N)rP   rV   )rK   _longitude_lunar_ascending_nodes     r.   longitude_lunar_ascending_noder^   `   s%    &9'!&)'*# +*r-   c                 2    dd| z  z   }|t        |      z
  }|S )NgV'g(?glDmf?rM   )rK   _sun_mean_longitudes     r.   sun_mean_longitudera   g   s)    "]V%;;-4G0HHr-   c                 2    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r-   c                 2    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   xs 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                   j                         D ]%  \  }}|dk7  s
|dz
     }|r||z  }||z  }!t         |j                  r	nd}||j                  |z  |j                  |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C!$K*-*A*A*G*G*I )&
J? /
Q ?I  )J 6#u,(()  #uu!!Kcoo3cjjqSUAU6VVVF	W 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OA1g!3!8qA = BBO	DGAq'K$q'!Ho{H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(  rQ|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kD  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kD  r|dz  }t        j                  ||d      }|d   j                  dk  r-|d   j                  dkD  rt!        d|||d   j                        S |d   j                  dkD  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	8Bay  6!9#<#<<$*1I$=$=B$Fq	!&)333tbyAJqM&)333tbyABFJqM]Z]2a7JqM#AY22VAY5J5JJaOF1I	WX	B	WX	B 	GB--(1BCDEAqyVAY**++3vay,,--JqM0BBC 	q	 	S&&''
s6!9(()
)C
1,>
>	?
	 1I 6!9#fQi&8&8"99++,, 	S&&''
s6!9(()
)C
1,>
>	?
	 1I 	
F1IVAY%7%7!77!fQi>P>P:PPA	F1IVAY%7%7!77&):L:LLAq51q56!9#5#555La++,,%L
l	q1u%A1u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	Av
c		Cx
c	q!Q'JayA&)"4"4q"8FJF1I4F4FGGayA&)"4"4q"8E:r6!93E3EFFVAY''((r-   onobserverc           
      f	   t        |       }t        | |j                        }g }t        d      D ]$  }t	        ||dz  z         }|j                  |       & t        dd      D ]F  }||   j                  ||dz
     j                  k  s&||   j                  dt        z  z   ||   _        H t        |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.                        }|j0                  d	k(  r&|j2                  }t%        j$                  | j&                  | j(                  | j*                  |j4                  |j6                  dt$        j,                  j.                        }||}n||z
  j9                         }||z
  j9                         }|	|	|z
  j9                         }nd}t;        |      t;        |      k(  xr t=        |      t=        |      kD  }|t;        |      t;        |      k7  xr |	duxr t;        |      t;        |      k(  z  }|r6|}n2|j0                  d
k(  r"|j2                  }t%        j$                  | j&                  | j(                  | j*                  |j4                  |j6                  dt$        j,                  j.                        }|	|}	n|	|z
  j9                         }||z
  j9                         }|||z
  j9                         }nd}t;        |      t;        |      k(  xr t=        |      t=        |      kD  }|t;        |      t;        |      k7  xr |duxr 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!H Fhn56	 !QK OX;&&!HqL/*I*II*+H+*E*EB*NAhK'O
 	!6 IH b	 ZLQh"_2=aD  aD  aD  	3
Q/ /:aDaDaD	/
Q+ *"h''18L
 lI./;/D/D #,!**2664Ah>O>O>S>SJ !!V+)..
 ))GGHHFFOO%%#,,00 $ %I(:5DDFG$z1@@BG+#+j#8"G"G"I"#'*7|s7|'C (&IWI&$ %GG(D ) ,MWW1M$ ($)	##u,)..
 ))GGHHFFOO%%#,,00 #$H'*4CCEG$z1@@BG ,#,z#9"H"H"J"#&)'lc'l&B '&tHWH&O $s7|s7|'C (!-N#g,#g,2NO '#(2F3

/ 	Q/ /C1.E.Q.QQ++?+B+K+KQ(uZLx hr-   dater   c                 0   t        |t              rt        j                  |      }|t	        |      }n*t        |t
        j
                        r|j                         }t        ||       }|d   r|d   j                  |      }|j                         }||k7  rs||kD  rt        j                  d      }nt        j                  d      }||z   }t        ||       }|d   r+|d   j                  |      }|j                         }||k7  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Aw!!&)YY[:Dy **3 **2e|H8X.DAwAw))&1YY[:DJKKr-   c                 0   t        |t              rt        j                  |      }|t	        |      }n*t        |t
        j
                        r|j                         }t        ||       }|d   r|d   j                  |      }|j                         }||k7  rs||kD  rt        j                  d      }nt        j                  d      }||z   }t        ||       }|d   r+|d   j                  |      }|j                         }||k7  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1g  (XXZ:Dy **3 **2e|H8X.DAw1g((0XXZ:C
IJJr-   atc                    |
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UBFV$HDX%7%789D 8 88I	YB	YB	X!!	"B	X!!	"B	WX&&'	(B	WX&&'	(B	b2RA	bAeAqk"S(GNr-   c                 6   |
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UBFV$HDX%7%789D 8 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   '  sF   	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AJB'E	TCF]E	TCA
O##E	TCAJEEMEJET\S B&DKr-   c                 H    | 
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
        ============  ==============
    g      <@)r   r   )r   r   s     r.   r!   r!   A  s/    $ |w$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 H H H 2 2# < ; 3   A A
* . 

%%01 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jb)
b)
b) b) 	b)
 #$b) <"#b)Jzzz~ %)*2*;*;*?*?*L*L
8==
!*L #x&'*L h 	*L^ %)*2*;*;*?*?*K*K
8==
!*K #x&'*K h 	*K^ '+""# 6 '+""#> '+((""#( 5 4' 5 a  #""#s   H2 2I I