
    R1i                     n    d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
mZmZ ddlmZ ddlmZ g d	Zd
 Zy)zSearch for eclipses.    )division)arcsinbyte   )AU_KMC_AUDAYERAD)angle_between	length_of)find_maxima)add_aberration)	PenumbralPartialTotalc                 ^  !"#$ t        d |j                  D              }|d   $|d   "|d   !|d   #!"#$fd}d|_        t        | ||d	      \  }}|j                  |j
                  }}"j                  ||      }	!j                  ||      }
#j                  ||      }$j                  ||      }||	z
  |
z
  }|
|z
  }d
}d}t        dz  t        |      z  }t        dz  t        |      z  }|t        |      z  }t        ||      }t        |t        |      z        }d|z  }||z   |z   }||z   |z
  }|||z   k  }||   }||   }||   }||   }||   }d|z  }||z   |z
  }||z  }||z   |z
  }||z  }|||z   k  }|||z
  k  }|j                  t              }||z  }||||||d} ||| fS )a  Return the lunar eclipses between ``start_time`` and ``end_time``.

    Returns a three-item tuple:

    * A :class:`~skyfield.timelib.Time` giving the dates of each eclipse.
    * An integer array of codes identifying how complete each eclipse is.
    * A dictionary of further supplementary details about each eclipse.

    This routine is adapted from the Explanatory Supplement to the
    Astronomical Almanac 11.2.3.  See `lunar-eclipses` for the details
    of how to call this function.

    c              3   d   K   | ](  }|j                   |j                  f|j                  f * y wN)centertargetspk_segment).0ss     W/home/cursorai/projects/iching/venv/lib/python3.12/site-packages/skyfield/eclipselib.py	<genexpr>z!lunar_eclipses.<locals>.<genexpr>+   s'     M1188QXX&6s   .0)r   
   )r      )r   i  )r   i-  c                 ^   | j                   | j                  }}j                  ||      \  }}j                  ||      }j                  ||      }j                  ||      }||z
  |z
  }||z
  }	|t        z  }|t        z  }t        |      t        z  }
t        |||
       t        ||	      S r   )	wholetdb_fractioncompute_and_differentiatecomputer   r   r   r   r
   )tjdfrbvelocityemr   earth_to_sunearth_to_moonlight_travel_timeearthearth_barycentermoonsuns              r   fzlunar_eclipses.<locals>.f1   s    !..B&@@RH8MM"b!LLR KKB1uqyA 	E%l3g=|X/@A\=99    g      @   )numg    (@%Agfffff$@g     @@g)\(?   )closest_approach_radiansmoon_radius_radianspenumbra_radius_radiansumbra_radius_radiansumbral_magnitudepenumbral_magnitude)dictsegments	step_daysr   r   r   r!   r	   r   r
   r   astyper   )%
start_timeend_timeephsdictr0   r"   yr#   r$   r%   r'   r(   r   r)   moon_to_earthsolar_radius_kmmoon_radius_kmpi_mpi_ss_sclosest_approachmoon_radiuspi_1penumbra_radiusumbra_radius	penumbraltwice_radiusr9   r:   partialtotalcodedetailsr,   r-   r.   r/   s%                                    @@@@r   lunar_eclipsesrU      s7   2 MMME
+CSz%LE<D:, AKz8QA6DAqWWannB  R(Ab"ARABAq519LEMON
 #:	-00D#:	,//D
Il3
3C$\=A)M*BBCK $;DTkC'O$;$L ?[#@@I 	
)A'	2i(K%i0O	*L {?L#k14DD$)K7:JJ<'!;;G|k99E>>$DEMD %5*#2 ,,2G dGr1   N)__doc__
__future__r   numpyr   r   	constantsr   r   r	   	functionsr
   r   	searchlibr   
relativityr   LUNAR_ECLIPSESrU    r1   r   <module>r_      s*       + + / " &tr1   