
    R1i                         d Z ddlZddlmZ ddlmZ ddlmZm	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d Zd Zd Zy)z/Low-level tests of the almanac search routines.    N)assert_raises)load)find_discretefind_maximagh㈵>g|=c                  v    t        j                         } | j                  d      }| j                  d      }||fS )Nr      )r   	timescalett_jd)tst0t1s      h/home/cursorai/projects/iching/venv/lib/python3.12/site-packages/skyfield/tests/test_almanac_searches.pymake_tr      s1    		B	!B	!Br6M    c                        fd}d|_         |S )zCReturn a function that increases by one at each of several `steps`.c                 x    t         j                  j                  | j                        j	                  d      S Nr   )axis)npgreater_equalouterttsum)tstepss    r   fzmake_stairstep_f.<locals>.f   s.    %%addE266A6>>r   333333?	step_days)r   r   s   ` r   make_stairstep_fr       s    ? AKHr   c                 H    t        | |z
        t        k  j                         S )N)absepsilonall)valueexpecteds     r   is_closer'      s      !G+0022r   c                      d } t               \  }}t        t        d      5  t        ||| t               d d d        y # 1 sw Y   y xY w)Nc                      | j                   dkD  S )N        )J)r   s    r   r   z1test_exception_if_step_days_is_missing.<locals>.f   s    ssSyr   zmissing a "step_days" attribute)r   r   AttributeErrorr   r#   )r   r   r   s      r   &test_exception_if_step_days_is_missingr-      s8    XFB	~'H	Ib"a) 
J	I	Is	   =Ac                      t               \  } }t        ddg      }t        | ||t              \  }}t	        |j
                        rJ t	        |      rJ y )Ngg?)r   r    r   r#   lenr   r   r   r   r   ys        r   %test_find_discrete_that_finds_nothingr2   $   sM    XFB$&ARG,DAq144y=1v:vr   c                      t               \  } }t        t        dg      }t        | ||t              \  }}t        |j                  t        df      sJ t        |      ddgk(  sJ y )N      ?r      r   r    bumpr   r#   r'   r   listr0   s        r   !test_find_discrete_near_left_edger9   +   s]    XFB$%ARG,DAqADD4+&&&7q!fr   c                      t               \  } }t        ddt        z
  g      }t        | ||t              \  }}t        |j                  ddt        z
  f      sJ t        |      ddgk(  sJ y Nr4         ?r   r5   r6   r0   s        r   "test_find_discrete_near_right_edger=   2   sg    XFB#sTz*+ARG,DAqADD3d
+,,,7q!fr   c                      t               \  } }t        dddt        z  z   g      }t        | ||t              \  }}t	        |j
                  dddt        z  z   f      sJ t        |      ddgk(  sJ y )Nr4   g@r   r5   r   r    r#   r   r'   r   r8   r0   s        r   =test_find_discrete_with_a_barely_detectable_jag_right_at_zeror@   9   sq    XFB#sS7]234ARG,DAqADD3cGm 345557q!fr   c                      t               \  } }t        dddt        z  z   g      }t        | ||t        d      \  }}t	        |j
                  ddt        z  z   f      sJ t        |      dgk(  sJ y )Nr4   Gz?   r5   r?   r0   s        r   7test_find_discrete_with_a_sub_epsilon_jag_right_at_zerorD   @   sq    XFB#sTG^345A RGR0DAq
 ADD3/12227qc>>r   c                      t               \  } }t        t        dg      }|`d|_        t        | ||t              \  }}t        |j                  t        df      sJ t        |      ddgk(  sJ y r;   )
r   r    r7   r   rough_periodr   r#   r'   r   r8   r0   s        r   test_old_rough_period_attributerG   N   si    XFB$%A	ANRG,DAqADD4+&&&7q!fr   c                        fd}d|_         |S )zCReturn a function with local maxima at each of a series of `peaks`.c                     t        t        j                  j                  | j                              j                  d       S r   )r"   r   subtractr   r   min)r   peakss    r   r   z make_mountain_range_f.<locals>.fY   s4    BKK%%addE2377Q7???r   r   r   )rL   r   s   ` r   make_mountain_range_frM   W   s    @ AKHr   c                      t               \  } }t        t        j                  ddd            }d|_        t        | ||t        d      \  }}t        |      t        |      cxk(  rdk(  sJ  J y )Ng{Gz?rB      gQ?rC   )r   rM   r   linspacer   r   r#   r/   r0   s        r   test_finding_enough_maximarQ   _   sb    XFBbkk$b9:AAKr2q'2.DAqq6SV!r!!!!!r   c                      t               \  } }t        t        dt        z
  g      }t        | ||t        d      \  }}t        |j                  t        dt        z
  f      sJ t        |d      sJ y )Nr<   rC   r*   )r   rM   r7   r   r#   r'   r   r0   s        r   test_finding_maxima_near_edgesrS   g   sc    XFBtS4Z01Ar2q'2.DAqADD4t,---Asr   c                      t               \  } }t        t         dt        z   g      }t        | ||t        d      \  }}t        |j                        g k(  sJ t        |      g k(  sJ y )Nr<   rC   )r   rM   r7   r   r#   r8   r   r0   s        r   4test_finding_no_maxima_at_all_but_having_near_missesrU   n   s^    XFBucDj12Ar2q'2.DAq:7b==r   c                      t               \  } }t        ddg      }t        | ||t        d      \  }}t	        |j
                        g k(  sJ t	        |      g k(  sJ y )Nie   rC   )r   rM   r   r#   r8   r   r0   s        r   1test_finding_no_maxima_at_all_with_no_near_missesrX   u   sW    XFBtSk*Ar2q'2.DAq:7b==r   c                      t               \  } }t        t         dt        z   g      }t        | ||t        d      \  }}t        |j                        dk(  sJ t        |      dk(  sJ y )Nr<   rC   r   )r   rM   r7   r   r#   r/   r   r0   s        r   0test_that_we_ignore_maxima_slightly_beyond_rangerZ   |   s\    XFBucDj12Ar2q'2.DAqqtt9>>q6Q;;r   c                      t               \  } }dt        z  }t        d|z
  d|z   g      }t        | ||t        d      \  }}t	        |j
                        t	        |      cxk(  rdk(  sJ  J y )Ng\(\?r4   rC   r   )r   r#   rM   r   r/   r   )r   r   almostr   r   r1   s         r   0test_we_only_get_one_result_for_a_jagged_maximumr]      sh    XFBG^FsV|S6\:;Ar2q'2.DAqqtt9A#!#####r   c                     t               \  } }dt        z  }t        d|z
  d|z   g      }t        | ||t        d      \  }}t	        t        |j                               t        |j                        t        |      cxk(  rdk(  sJ  J y )Ng)\(?r4   rC   r5   )r   r#   rM   r   printr8   r   r/   )r   r   enoughr   r   r1   s         r   2test_we_get_two_results_for_barely_separate_maximara      sx    XFBG^FsV|S6\:;Ar2q'2.DAq	$qtt*qtt9A#!#####r   )__doc__numpyr   assayr   skyfield.apir   skyfield.searchlibr   r   r7   r#   r   r    r'   r-   r2   r9   r=   r@   rD   rG   rM   rQ   rS   rU   rX   rZ   r]   ra    r   r   <module>rh      sx    5    9
3*"$$r   