ó
šßÈ[c           @   sE  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l m Z m	 Z	 m
 Z
 m Z d d l m Z d d l m Z 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 d d
 l m Z d d l m Z d d l m  Z  d d l m! Z" y d d l# Z# e$ Z% Wn e& k
 rAe' Z% n Xd d d d d d d d d d d d d d g Z( e j) d k se j* d k r e( j+ d ƒ n  e ƒ  Z, x¨ e( D]  Z- e- d k rÝe j. e' e$ e' g ƒ Z/ n< e- d k re j. d  d! d" g ƒ Z/ n e j0 d d# e- ƒZ/ e	 e/ d$ d% d& d' e- d( i d) d* e- 6ƒZ1 e1 e, e- <q°Wd+ d, g e, j2 d- <d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 g Z3 e j4 j5 d9 ƒ d: „  ƒ Z6 e j4 j5 d9 ƒ d; „  ƒ Z7 e j4 j5 d9 ƒ d< „  ƒ Z8 e j4 j5 d9 ƒ d= „  ƒ Z9 e j4 j5 d9 ƒ d> „  ƒ Z: e j4 j5 d9 ƒ d? „  ƒ Z; e j4 j5 d9 ƒ d@ „  ƒ Z< e j4 j5 d9 ƒ dA „  ƒ Z= e j4 j5 d9 ƒ dB „  ƒ Z> e j4 j5 d9 ƒ dC „  ƒ Z? e$ dD „ Z@ e dE d) d g e" jA dF d d g e" jA dG dH dI g e" jA ƒ ZB e d) d g d d g d$ dJ dK dL dM dN ƒZC eC j ƒ  ZD dO eD _E e dP dQ g dR dS dT dU dV dH dW eB dX ƒZF e eF dR dY ƒZG e eF dW eB ƒZH dZ eH jI jJ d[ <i eF d\ 6eG d] 6eH d^ 6e d) d g e" jK ƒ d_ 6eC d` 6eD da 6e d) d g d d g dH dI g d$ db dK dL dM dN g d ƒdc 6d) d g e" jL dd 6e d) d g e" jM ƒ de 6e d) d g e" jM df dg e" jM ƒdh 6e d) d g e" jM ƒ di 6eB dj 6ZN dk dl dR dT dV dm dn dW g ZO i do g dp 6do g dq 6eO d\ 6eO d] 6eO d^ 6dl dk dR dT g d_ 6dr ds dt du g d` 6dE dF dG dt du g da 6dr ds dv dt du g dc 6dk d$ g dd 6dk d$ df g dh 6dk d$ g de 6dk d$ g di 6dE dF dG dw g dj 6dE dF dG g dx 6ZP e j4 j5 d9 ƒ dy „  ƒ ZQ e j4 j5 d9 ƒ dz „  ƒ ZR e j4 j5 d9 ƒ e j4 jS d{ e e
 f ƒ d| „  ƒ ƒ ZT e j4 j5 d9 ƒ e j4 jS d} eU eN jV ƒ  ƒ ƒ e j4 jS d{ e e
 f ƒ d~ „  ƒ ƒ ƒ ZW d S(€   sˆ   
This module tests some of the methods related to the ``ECSV``
reader/writer.

Requires `pyyaml <http://pyyaml.org/>`_ to be installed.
iÿÿÿÿNi   (   t   Tablet   Columnt   QTablet   NdarrayMixin(   t   simple_table(   t   SkyCoordt   Latitudet	   Longitudet   Anglet   EarthLocation(   t   Timet	   TimeDelta(   t   quantity_allclose(   t   QuantityInfo(   t   StringIOi   (   t
   DELIMITERSi   (   t   ascii(   t   unitst   boolt   int8t   int16t   int32t   int64t   uint8t   uint16t   uint32t   uint64t   float16t   float32t   float64t   float128t   strt   nti    s   ab 0s   ab, 1t   ab2t   dtypet   units   m / st   descriptiont   descr_t   metai   s   meta t   comment1t   comment2t   commentss   # %ECSV 0.9s   # ---s   # datatype:s   # - {name: a, datatype: int64}s    # - {name: b, datatype: float64}s   # - {name: c, datatype: string}s   # schema: astropy-2.0s   a b cs   1 1.0 cs   2 2.0 ds   3 3.0 es   not HAS_YAMLc          C   sG   t  ƒ  }  t ƒ  } |  j | d d ƒ| j ƒ  j ƒ  t k sC t ‚ d S(   s€   
    Write a simple table with common types.  This shows the compact version
    of serialization with one line per column.
    t   formats
   ascii.ecsvN(   R   R   t   writet   getvaluet
   splitlinest   SIMPLE_LINESt   AssertionError(   t   tt   out(    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_write_simpleE   s    		c          C   s¨   t  d# }  d d d d d	 d
 d d d d	 d d d d d	 d d d d d	 d d d d d d d d d d g } t ƒ  } |  j | d  d! ƒ| j ƒ  j ƒ  | k s¤ t ‚ d" S($   sV   
    Write a full-featured table with common types and explicitly checkout output
    R   R   R   R   s   # %ECSV 0.9s   # ---s   # datatype:s   # - name: bools   #   unit: m / ss   #   datatype: bools   #   description: descr_bools   #   meta: {meta bool: 1}s   # - name: int64s   #   datatype: int64s   #   description: descr_int64s   #   meta: {meta int64: 1}s   # - name: float64s   #   datatype: float64s   #   description: descr_float64s   #   meta: {meta float64: 1}s   # - name: strs   #   datatype: strings   #   description: descr_strs   #   meta: {meta str: 1}s   # meta: !!omaps"   # - comments: [comment1, comment2]s   # schema: astropy-2.0s   bool int64 float64 strs   False 0 0.0 "ab 0"s   True 1 1.0 "ab, 1"s   False 2 2.0 ab2R*   s
   ascii.ecsvN(   R   R   R   R   (   t   T_DTYPESR   R+   R,   R-   R/   (   R0   t   linesR1   (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_write_fullR   sD    
		c       
   C   s8  t  }  x+t D]#} t ƒ  } |  j | d d d | ƒt j | j ƒ  d d ƒt j | j ƒ  d d ƒt j | j ƒ  ƒ t j | j ƒ  d d d t ƒt j | j ƒ  d d ƒg } xz | D]r } |  j	 | j	 k sØ t
 ‚ xQ |  j D]F } |  | j | | ƒ st
 ‚ t j |  | | | k ƒ sâ t
 ‚ qâ Wqº Wq Wd S(   s‡   
    Write a full-featured table with all types and see that it round-trips on
    readback.  Use both space and comma delimiters.
    R*   s
   ascii.ecsvt	   delimiterR   t   ecsvt   guessN(   R3   R   R   R+   R    t   readR,   R   t   FalseR&   R/   t   colnamest   attrs_equalt   npt   all(   R0   R6   R1   t   t2st   t2t   name(    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_write_read_roundtrip|   s    	c       
   C   sY   t  ƒ  }  t j t ƒ   } t j |  d d d d ƒWd QXd t | j ƒ k sU t ‚ d S(   sJ   
    Passing a delimiter other than space or comma gives an exception
    R*   s
   ascii.ecsvR6   t   |Ns    only space and comma are allowed(	   R   t   pytestt   raisest
   ValueErrorR3   R+   R   t   valueR/   (   R1   t   err(    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_bad_delimiter“   s    	c       
   C   sX   t  j  t ƒ }  d |  d <t j t j ƒ ' t j d j |  ƒ d d d t	 ƒWd QXd S(   s0   
    Bad header without initial # %ECSV x.x
    s
   # %ECV 0.9i    s   
R*   s
   ascii.ecsvR8   N(
   t   copyR.   RD   RE   R   t   InconsistentTableErrorR    R9   t   joinR:   (   R4   (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_bad_header_startž   s    
c       
   C   sx   t  j  t ƒ }  |  j d d ƒ t j t ƒ ) } t j d j |  ƒ d d d t	 ƒWd QXd t
 | j ƒ k st t ‚ d S(	   s$   
    Illegal delimiter in input
    i   s   # delimiter: |s   
R*   s
   ascii.ecsvR8   Ns    only space and comma are allowed(   RJ   R.   t   insertRD   RE   RF   R    R9   RL   R:   R   RG   R/   (   R4   RH   (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_bad_delimiter_input©   s
    (c          C   s€   t  t j d ƒ j d d ƒ g d d g ƒ}  t ƒ  } t j t ƒ  } |  j | d d ƒWd QXd t	 | j
 ƒ k s| t ‚ d S(	   s+   
    Multi-dimensional column in input
    i   i   t   namest   aR*   s
   ascii.ecsvNs4   ECSV format does not support multidimensional column(   R    R=   t   aranget   reshapeR   RD   RE   RF   R+   R   RG   R/   (   R0   R1   RH   (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_multidim_inputµ   s
    -	c          C   s’   t  d t d d g d d d d g ƒ }  t ƒ  } |  j | d d	 ƒt  j | j ƒ  d d	 ƒ} |  j | j k sv t ‚ t | ƒ d
 k sŽ t ‚ d S(   sL   Test fix in #5010 for issue #5009 (ECSV fails for empty type with bool type)R"   t   it   fRP   RQ   t   bt   cR*   s
   ascii.ecsvi    N(	   R    R   R   R+   R9   R,   R"   R/   t   len(   R0   R1   R@   (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_round_trip_empty_tableÁ   s    '	c          C   so   t  j  t ƒ }  |  j d ƒ } d |  | <t j t ƒ  } t j |  d d ƒWd QXd t | ƒ k sk t	 ‚ d S(   s{   
    Test that mismatch in column names from normal CSV header vs.
    ECSV YAML header raises the expected exception.
    s   a b cs   a b dR*   R7   Ns-   column names from ECSV header ['a', 'b', 'c'](
   RJ   R.   t   indexRD   RE   RF   R   R9   R   R/   (   R4   t   header_indexRH   (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_csv_ecsv_colnames_mismatchÌ   s    
c          C   sŽ   t  ƒ  }  i d t j d 6t j d 6|  _ d g t j |  d <t ƒ  } |  j | d d ƒd | j ƒ  k sr t ‚ d	 | j ƒ  k sŠ t ‚ d
 S(   sF   
    See https://github.com/astropy/astropy/issues/5604 for more.
    i   t   foot   foo2i   t   barR*   s
   ascii.ecsvs   !astropy.units.Units   !astropy.units.QuantityN(	   R    t   ut   kmt   sR&   R   R+   R,   R/   (   R0   R1   (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_regression_5604Ú   s    	!	c   	      C   s  | r! |  j  | j  k s! t ‚ n  d d d d g } xß | | D]Ó } |  } | } xa | j d ƒ D]P } y" t | | ƒ } t | | ƒ } Wq` t k
 r¯ | | } | | } q` Xq` Wt | t j ƒ rö | j j	 d k rö t
 | | d d ƒst ‚ q> t j | | k ƒ s> t ‚ q> Wd  S(	   Ns	   info.names   info.formats	   info.units   info.descriptiont   .RV   t   rtolg»½×Ùß|Û=(   t	   __class__R/   t   splitt   getattrt   AttributeErrort
   isinstanceR=   t   ndarrayR"   t   kindR   R>   (	   t   obj1t   obj2t   attrst   compare_classt
   info_attrst   attrt   a1t   a2t   subattr(    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   assert_objects_equalê   s     
$t   xt   yt   zi   i   s   deg,degt   framet   fk4t   obstimes   J1990.5t	   cartesiang    çè@g    0çè@R*   t   mjdt   scalet   tait	   precisiont   locationi    t   isot   jd1_jd2R7   t   tmt   tm2t   tm3t   dtt   sct   sccs	   deg,deg,mt   scdt   qt   latt
   wrap_angleg     €f@t   lont   angt   elRG   t   shapet	   in_subfmtt
   out_subfmtt   datat   c1t   c2t   rat   dect   representations
   frame.namet   distancet	   ellipsoidt   ndc          C   sÌ   t  d „  t j ƒ  Dƒ ƒ }  t ƒ  } |  j | d d ƒt j | j ƒ  d d ƒ} t | ƒ t	 k sk t
 ‚ t d |  d <t ƒ  } |  j | d d ƒt j | j ƒ  d d ƒ} t | ƒ t  k sÈ t
 ‚ d S(   sz   Ensure that ascii.read(ecsv_file) returns the correct class
    (QTable if any Quantity subclasses, Table otherwise).
    c         S   s1   i  |  ]' \ } } t  | j t ƒ s | | “ q S(    (   Rk   t   infoR   (   t   .0RA   t   col(    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pys
   <dictcomp>7  s   	 	R*   s
   ascii.ecsvR7   R   N(   R   t
   mixin_colst   itemsR   R+   R   R9   R,   t   typeR    R/   (   R0   R1   R@   (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt!   test_ecsv_mixins_ascii_read_class1  s    		c    	      C   s  t  t ƒ }  t g  |  D] } t | ^ q d |  ƒ} t ƒ  } | j | d d ƒt j | j ƒ  d d ƒ} | j | j k s„ t	 ‚ x† | j
 j ƒ  D]u \ } } | | } t | } t } t | j t ƒ rö t | ƒ t k sä t	 ‚ d g } t } n  t | | | | ƒ q” Wd S(   sW   Test writing as QTable and reading as Table.  Ensure correct classes
    come out.
    RP   R*   s
   ascii.ecsvR#   N(   t   sortedR¢   R   R   R+   R    R9   R,   R;   R/   t   columnsR£   t   compare_attrst   TrueRk   RŸ   R   R¤   R   R:   Rw   (	   RP   RA   R0   R1   R@   R¡   t   col2Rp   Rq   (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt    test_ecsv_mixins_qtable_to_tableG  s    )	

		t	   table_clsc         C   s  t  t ƒ } d d d d d d d d d	 d
 d d d d d d d d d d d d d d g } |  g  | D] } t | ^ qd d | ƒ} t ƒ  } | j | d d ƒ|  j | j ƒ  d d ƒ} | j | j k sÒ t ‚ |  j | j ƒ  d d ƒ} | j | k st ‚ d S(   sG   Test write/read all cols at once and validate intermediate column namesR‘   R‰   s   el.xs   el.ys   el.zRŽ   R   R   s   sc.ras   sc.decs   scc.xs   scc.ys   scc.zs   scd.ras   scd.decs   scd.distances   scd.obstimeR†   R‡   s   tm3.jd1s   tm3.jd2s   tm3.location.xs   tm3.location.ys   tm3.location.zRP   R*   s
   ascii.ecsvs   ascii.basicN(   R¦   R¢   R   R+   R9   R,   R;   R/   (   R¬   RP   t   serialized_namesRA   R0   R1   R@   t   t3(    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_ecsv_mixins_as_onec  s,    			)	t   name_colc   	      C   sa  | \ } } d d g } |  | | | g d d | d g ƒ} d | | j  _ | j se t j d ƒ n  t | | t ƒ rˆ t j d ƒ n  t ƒ  } | j	 | d	 d
 ƒ|  j
 | j ƒ  d	 d
 ƒ} | j | j k s× t ‚ x- | j D]" } t | | | | t | ƒ qá W| j d ƒ r]| | j j j t j k s8t ‚ | | j j j t j k s]t ‚ n  d S(   s<   Test write/read one col at a time and do detailed validationg      ð?g       @RP   R—   R˜   R$   s7   column is not a mixin (e.g. Quantity subclass in Table)s   NdarrayMixin not supportedR*   s
   ascii.ecsvR†   N(   RŸ   R$   t   has_mixin_columnsRD   t   skipRk   R   t   xfailR   R+   R9   R,   R;   R/   Rw   R¨   t
   startswitht   _timet   jd1Rg   R=   Rl   t   jd2(	   R¬   R°   RA   R¡   RX   R0   R1   R@   t   colname(    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   test_ecsv_mixins_per_column…  s"    $		 "I       (X   t   __doc__t   osRJ   t   sysRD   t   numpyR=   t   tableR    R   R   R   t   table.table_helpersR   t   coordinatesR   R   R   R   R	   t   timeR
   R   t   tests.helperR   t   units.quantityR   t   extern.six.movesR   R7   R   t    R   R   Ra   t   yamlR©   t   HAS_YAMLt   ImportErrorR:   t   DTYPESRA   t   maxsizet   removeR3   R"   t   arrayR–   RR   RX   R&   R.   t   markt   skipifR2   R5   RB   RI   RM   RO   RT   RZ   R]   Rd   Rw   Rb   R’   RŠ   R‹   R›   R†   R‡   Rˆ   RŸ   t   serialize_methodt   dayt   mt   degR¢   t
   time_attrsR¨   R¥   R«   t   parametrizeR¯   t   listR£   R¹   (    (    (    s?   lib/python2.7/site-packages/astropy/io/ascii/tests/test_ecsv.pyt   <module>   sÔ   "(

			*B$		.-'


'!