
    R1i                         d Z ddl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 ddZ ej                  d	       G d
 de
             Zg Z G d de	      Zd ZddlmZ d Zd Z G d de      Zd ZddZy)z"Routines to help draw star charts.    N)HTML)
rc_contextrcParams)FuncAnimationFFMpegWriterwriters   )Starc                 J   g }|j                         \  }}	|j                         \  }
}t        t        |      t        |	      t        |
      t        |            |z  }| |f}|j                  |       |j	                  |       |j                  d       |d   }| }||d   kD     }||d   |k     }|j                  dd      }t        |j                  |j                        }|j                  |      } ||      \  }}||d   z
  |z
  z  }|j                  |j                  ||ddd	|z  z
  d
dd             fd}| }||d   k     }|j                  dd      }t        |j                  |j                        }|j                  |      } ||      \  }}d ||d         }t        j                  |d      }t        j                  |d      }|dddf   dz   j                         }d}d}|j                  |j                  |||dz  |             ||fS )z=Experiment in progress, hence the underscore; expect changes.equalr   	magnitudeF)	ascending)ra_hoursdec_degrees      ?r	   皙?gray_r        )sccmapvminvmaxc                     | z
  z  dz   S )Nr    )mmag1scales    U/home/cursorai/projects/iching/venv/lib/python3.12/site-packages/skyfield/charting.pymag_to_radiusz"_plot_stars.<locals>.mag_to_radius=   s    qE!C''    Tg      ?   N)g      @r   )wk)r$   r#          @)r   r   )get_xlimmaxabsset_xlimset_ylim
set_aspectsort_valuesr
   r   r   observeappendscatternprepeatflatten)catalogobserverprojectaxr   mag2marginartxminxmaxyminymaxlimlimsor   r   sposxyr   r    radiusx2y2radius2c2r   s       `                      @r   _plot_starsrI   	   s     C$ JD$JD$
c$iTCIs4y
9F
BCD#;DKKKKMM'A 	A	!K.4
 A	!K.D
 !A	kU3Aajjamm<A99Q<D4=DAq	+	4$;/AJJrzz	1
cAg+H3S   ( 	A	!K.D
 !A	kT2Aajjamm<A99Q<D4=DAqE1[>*F	1aB	1aBaf~	)224G	B	BJJrzz"bGsNbz9:r!   ffmpeg_smallc                        e Zd Z fdZ xZS )_FFMpegWriterc                 b    t         t        |          }|j                  d      dz   }ddg||| |S )Nh264r	   z-x264-paramszkeyint=99999999:scenecut=0)superrL   _argsindex)selfargsi	__class__s      r   rP   z_FFMpegWriter._argsV   s;    ]D/1JJv"#%ABQq	r!   )__name__
__module____qualname__rP   __classcell__rU   s   @r   rL   rL   T   s     r!   rL   c                   "     e Zd ZdZ fdZ xZS )
_AnimationNc                     d}t         t        |   ||       | j                  0t	        dt
              | _        | j                  j                          y y )NTz4matplotlib.backends.backend_agg.FigureCanvasAgg.draw)rO   r\   _draw_next_framepatcherpatchdraw	__enter__)rR   	framedatablitrU   s      r   r^   z_Animation._draw_next_frameb   sL    j$0DA<<  "459;DLLL""$  r!   )rV   rW   rX   r_   r^   rY   rZ   s   @r   r\   r\   _   s    G% %r!   r\   c                      y Nr   rR   s    r   ra   ra   v   s    r!   )r`   c           	      b   dd l m} |j                        }|j                  |      }|j                        }ddt	        j
                  |j                         j                  |j                         j                  z        z  z    | |      }	 |	|      \  |j                         \  }
|j                  dddddd       j                  dd	       t        |||	d
dd      \  }j                         \  }}j                         \  }}||||z
  dz  z
  dj                  |j                  ||dz
  fdddd            g fd}fd}t!              }j#                  d       t%        |
||d|d      }|j'                          |S )Nr   g(\!g      @bothF)axiswhichbottomlabelbottomleft	labelleftbr   )coloralphag      @g      !@r   g{Gz?z#f7dfaeg~jt?g{Gz?white)clip_on	facecolorc                      t        d       j                  d   	d         } j                  ddd      }| |gd d  | fS )Nzinit()d   )rq    rn   top)hava)printr/   text)

planet_art	date_textr6   itemsrsaturn_colortext_xtext_yrB   rC   s
     r   initz_animate.<locals>.init   sV    hZZ##lZC
GGFFB6eGD		*a1~r!   c                     \  }}|j                  	|    
|    ff       |j                   |          dz  f       |j                  |    j                  d             j	                  d       ||fS )Nr%   z%Y %Bblack)set_offsets	set_sizesset_textutc_strftimeset_facecolor)rT   r~   r   r6   r   magr    r   trB   rC   s      r   updatez_animate.<locals>.update   s     !&
I
 	1qt/mCF3s:<=1Q4,,W56
!1i''r!   r   T   )framesrd   	init_funcinterval)matplotlib.pyplotpyplotatr-   r0   log10distanceausubplotstick_paramsr/   rI   r&   get_ylim	add_patch	Rectanglelenr   r\   closer   validatevalidr   to_html5_videor_   __exit__r   )
projectionr   starsr4   planetpltr@   pp0r5   figr9   x_leftx_righty_bottomy_topr   r   r   animhtmlr6   r   r   r    r   r   r   r   rB   rC   s    `                   @@@@@@@@@@r   _animater   {   s   #
 	AA			&A	1B
#2;;=3C3C!CDD
DCmG1:DAqllnGCOOv e%  1 JJq!3cJ*$UAwCcJC kkmOFGkkmOHeF)T11FL 	S]]	E!"D$ #  	A
 E ( (  VF Wc6&4!#D IIKKr!   c                     t         } |dt        d   d| j                  z        }| j                  ||       | j                  j                          t        dj                  |            S )NrN   zanimation.bitrateg     @@)codecbitratefps)writerzx<video autoplay loop>
  <source type="video/mp4" src="{}">
  Alas! Your browser does not support the video tag.
</video>)rL   r   	_intervalsaver_   r   r   format)r   pathWriterr   s       r   _save_and_displayr      sg    F&$%89.0F 	IId6I"LL  F4L r!   c                   $    e Zd ZddlmZ d Zd Zy)Tr   )timec                 .    | j                         | _        y rf   )r   t0rg   s    r   rb   zT.__enter__   s    ))+r!   c                 V    t        d| j                         | j                  z
  z         y )Nz
<<< %s >>>)r|   r   r   )rR   rS   s     r   r   z
T.__exit__   s    ldiikDGG345r!   N)rV   rW   rX   r   rb   r   r   r!   r   r   r      s    6r!   r   c                 b    t                t        |       D ]  }t        |        t                y rf   )r|   debug)thinglines     r   printoutr      s!    	Ged 	Gr!   c           	   #      K   | j                         rdnd}dj                  d|t        t        |             |t	        |              |dz  }| j                         D ]  }t        ||      E d {     y 7 w)NA-z{:<{}}{} {} {}rx   r"   )get_animatedr   hexidreprget_childrenr   )r   indentachilds       r   r   r      sl     !!#A

!
!"fc"U)nae
MM
aKF##%''' &'s   A.A:0A81A:)g      ?)r   )__doc__numpyr0   IPython.displayr   
matplotlibr   r   matplotlib.animationr   r   r   starlibr
   rI   registerrL   Xr\   ra   unittest.mockr`   r   r   objectr   r   r   r   r!   r   <module>r      s    (    + E E IV .!L  " 
% 
%.	  Zx
6 6(r!   