a
    ߙfb6                     @   s   d dl Z d dl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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 ddlmZ G dd deZG dd deZdd Zdd Z dd Z!dS )    N)Column)FITSDiff
HeaderDiffImageDataDiffTableDataDiffHDUDiff)HDUList
PrimaryHDUImageHDU)NonstandardExtHDU)BinTableHDU)Header)AstropyDeprecationWarning)_NOT_OVERWRITING_MSG_MATCH)fits   )FitsTestCasec                       s*   e Zd Zd fdd	Zedd Z  ZS )DummyNonstandardExtHDUNc                    s4   t  j| g|R i | t| | _d| _d S )Nr   )super__init__npZasarraytobytes_bufferZ_data_offset)selfdataargskwargs	__class__ >lib/python3.9/site-packages/astropy/io/fits/tests/test_diff.pyr      s    zDummyNonstandardExtHDU.__init__c                 C   s
   t | jS N)lenr   )r   r   r   r    size   s    zDummyNonstandardExtHDU.size)N)__name__
__module____qualname__r   propertyr#   __classcell__r   r   r   r    r      s   r   c                   @   sx  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zejdeeegdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Z d2d3 Z!d4d5 Z"d6d7 Z#d8d9 Z$d:d; Z%d<d= Z&d>d? Z'd@dA Z(dBdC Z)dDdE Z*dFdG Z+dHdI Z,dJdK Z-dLdM Z.dNdO Z/dPdQ Z0dRdS Z1dTdU Z2dVdW Z3dXS )YTestDiffc                 C   st   t g d}| }t||js$J t| | js<J tt tdd W d    n1 sf0    Y  d S )NAr   B   C   r   r/   )r   copyr   	identicalZtostringpytestraises	TypeErrorr   hahbr   r   r    test_identical_headers!   s    zTestDiff.test_identical_headersc                 C   s0   t g d}| }d|d< t||jr,J d S )Nr*      r1   )r   r3   r   r4   r8   r   r   r    test_slightly_different_headers*   s    z(TestDiff.test_slightly_different_headersc                 C   s@   t g d}| }d|d< d|d< t||jg dks<J d S )Nr*   r<   r1      CommentDr,   r.   r1   )r   r3   r   common_keywordsr8   r   r   r    test_common_keywords0   s
    zTestDiff.test_common_keywordsc                 C   sR   t g d}| }|d= t||}|jr.J |jdks<J |jddgksNJ d S )Nr*   r.   )r2   r/   r,   r1   )r   r3   r   r4   Zdiff_keyword_countrC   r   r9   r:   diffr   r   r    test_different_keyword_count7   s    

z%TestDiff.test_different_keyword_countc                 C   sd   t g d}| }d|d< d|d< d|d< d|d	< t||}|jrHJ |jdd	gdgfks`J d S )
Nr*   r<   r1   r>   rA   )   r@   E)   r@   F)r   r3   r   r4   Zdiff_keywordsrE   r   r   r    test_different_keywordsB   s    

z TestDiff.test_different_keywordsc                 C   sH   t g d}| }d|d< t||}|jr0J |jddgiksDJ d S )Nr*   r<   r1   )r2   r<   r   r3   r   r4   diff_keyword_valuesrE   r   r   r    test_different_keyword_valuesM   s    

z&TestDiff.test_different_keyword_valuesc                 C   sJ   t g d}| }d|jd< t||}|jr2J |jddgiksFJ d S )N)r+   r-   )r1   r2   	comment 1	comment 2r1   )rP   rQ   )r   r3   commentsr   r4   diff_keyword_commentsrE   r   r   r    test_different_keyword_commentsU   s    


z(TestDiff.test_different_keyword_commentsc                 C   sV   t g d}| }|d |d t||}|jr<J |jdd dgiksRJ d S )Nr*   )r1   r<   )r1   r?   r1   )r<   r?   )r   r3   appendr   r4   rN   rE   r   r   r    ,test_different_keyword_values_with_duplicate^   s    



z5TestDiff.test_different_keyword_values_with_duplicatec                 C   s   t g d}| }|d |d |d |d t||}|jrPJ |ji ks^J |jddddkstJ | }d	|v sJ d S )
Nr*   )r,   r/   rP   )r,   r2   rQ   )r.   r<   z	comment 3)r1   r?   z	comment 4)r2   r   r   r/   rB   zTInconsistent duplicates of keyword 'A'     :
  Occurs 3 time(s) in a, 1 times in (b))r   r3   rU   r   r4   rN   Zdiff_duplicate_keywordsreportr   r9   r:   rF   rX   r   r   r    "test_asymmetric_duplicate_keywordsg   s     






z+TestDiff.test_asymmetric_duplicate_keywordsc                 C   s   t g d}| }d|d< d|d< t||}|jr8J |jdgdgdksPJ t||d	d
}|jrhJ |jddgiks|J t||dd
}|jsJ d S )N)r+   )r.   9b->  @)r1   7  @rZ|
  @r.   zo @r1   )r[   r]   )r\   r^   r.   r1   ư>rtolh㈵>rM   rE   r   r   r    test_floating_point_rtolx   s    


z!TestDiff.test_floating_point_rtolc                 C   s,  t g d}| }d|d< d|d< t||dd}|jr<J |jdgdgd	ksTJ t||d
d}|jrlJ |jddgiksJ t||dd}|jrJ |jddgiksJ t||d
d}|jrJ |jddgiksJ t||d
d
d}|jsJ t||dd}|jsJ t||ddd}|jr(J d S )N)r+   )r.         ?)r1           rZ|
 ?r.   r`   r1   ra   )re   rg   )rf   r`   r_   rc   atolrb   ri   g&|>rM   rE   r   r   r    test_floating_point_atol   s<    




z!TestDiff.test_floating_point_atolc                 C   s   t jdd tg d}| }d|d< |d |d ks@J t||}|jsTJ |ji ksbJ t||dd}|jrzJ |jddgiksJ W d    n1 s0    Y  d S )NZstrip_header_whitespaceF)r+   r-   )r1   A       r,   r1   )Zignore_blanks)rl   r,   )r   ZconfZset_tempr   r3   r   r4   rN   rE   r   r   r    test_ignore_blanks   s    


zTestDiff.test_ignore_blanksdifferc                 C   sT  t g d}t g d}| }|tu r:|  |  n|jdd |jdd |ttfv r~dd |||fD \}}}|j}|tu rdd |||fD \}}}|d j}|||jsJ |||jsJ |||jsJ |||d	d
jrJ |||d	d
jrJ |||d	d
jsJ |tu r.|  n|jdd |||d	d
jrPJ dS )z`Test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/152

        Ignore blank cards.
        r*   )r+    rp   r-   ro   r0   )Zafterc                 s   s   | ]}t td |V  qdS )
   N)r	   r   arange.0hr   r   r    	<genexpr>       z3TestDiff.test_ignore_blank_cards.<locals>.<genexpr>c                 s   s   | ]}t |gV  qd S r!   )r   rt   r   r   r    rw      rx   r   F)Zignore_blank_cardsN)	r   r3   r   rU   Z	add_blankr   r   headerr4   )r   rn   r9   r:   ZhcZ	hc_headerr   r   r    test_ignore_blank_cards   s0    



z TestDiff.test_ignore_blank_cardsc                 C   s  t ddd}| }tg d}t jddgdtfdtfgd}t jd	d
gdtfdtfgd}t|d}t	|dd}t	|dd}t
|dd}	t
|dd}
t|||	g}t|||
g}t||}|jrJ |jd d dksJ t||dgd}|jsJ | t||dgd}|js*J | |d  jd7  _t||dgd}|jrXJ t||ddgd}|js~J | t	|ddd}|| t||ddgd}t|jrJ | t|jsJ | d S )Nd   rr   r*   )re   r   )      @r<   xyZdtype)re   r/   )r|   r?   )ry   SCIr   nameZASDFr   r/   )Zignore_hduszASD*r   r   r   Zver)r   rs   reshaper3   r   arrayfloatintr	   r
   r   r   r   r4   	diff_hdusrX   r   rU   anydiff_hdu_count)r   abr9   ZxaZxbphduZihduaZihdubZbhdu1Zbhdu2hdulahdulbrF   Zihducr   r   r    test_ignore_hdus   s:    



zTestDiff.test_ignore_hdusc                 C   s   t g d}| }d|d< d|d< t||dgd}|js>J t||dgd}|jrXJ |jddgikslJ | }d	|vsJ d
|v sJ t||dgd}|jrJ |jddgiksJ d S )Nr*   r<   r.   r?   r1   *)Zignore_keywords)r2   r?   z%Keyword B        has different valuesz%Keyword C        has different valuesr   )r   r3   r   r4   rN   rX   rY   r   r   r    test_ignore_keyword_values  s    


z#TestDiff.test_ignore_keyword_valuesc                 C   s   t g d}| }d|jd< d|jd< t||dgd}|jsBJ t||dgd}|jr\J |jddgikspJ | }d	|vsJ d
|v sJ t||dgd}|jrJ |jddgiksJ d S )N))r,   r   r,   )r.   r/   r.   )r1   r2   r1   rA   r.   rI   r1   r   )Zignore_comments)r1   rI   z'Keyword B        has different commentsz'Keyword C        has different commentsr   )r   r3   rR   r   r4   rS   rX   rY   r   r   r    test_ignore_keyword_comments   s    




z%TestDiff.test_ignore_keyword_commentsc                 C   sJ   t ddd}t ddd}t||}|js8J |jdksFJ d S )Nr{   rr   r   )r   rs   r   r   r4   
diff_totalr   iaibrF   r   r   r    test_trivial_identical_images4  s
    

z&TestDiff.test_trivial_identical_imagesc                 C   sF   t dd }t dd }t||dd}|js4J |jdksBJ d S )Nrr   rr   rc   h㈵>-C6?ra   r   )r   Zonesr   r4   r   r   r   r   r    (test_identical_within_relative_tolerance;  s
    
z1TestDiff.test_identical_within_relative_tolerancec                 C   sl   t dd }t dd }t||dd}|jr4J |jdksBJ t||dd}|jsZJ |jdkshJ d S )	Nr   rc   r   r   ra   r{   rh   r   r   zerosr   r4   r   r   r   r   r    (test_identical_within_absolute_toleranceB  s    

z1TestDiff.test_identical_within_absolute_tolerancec                 C   sH   t dd }t dd }t||ddd}|js6J |jdksDJ d S )Nr   rc   r   rj   r   r   r   r   r   r    #test_identical_within_rtol_and_atolL  s
    
z,TestDiff.test_identical_within_rtol_and_atolc                 C   sH   t dd }t dd }t||ddd}|jr6J |jdksDJ d S )Nr   rc   r   r`   rj   r{   r   r   r   r   r    'test_not_identical_within_rtol_and_atolS  s
    
z0TestDiff.test_not_identical_within_rtol_and_atolc              	   C   s   t ddd}tj|d}|| d t| dT}t| d$}t||}|j	sfJ W d   n1 sz0    Y  W d   n1 s0    Y  dS )a  Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/189

        For this test we mostly just care that comparing to compressed images
        does not crash, and returns the correct results.  Two compressed images
        will be considered identical if the decompressed data is the same.
        Obviously we test whether or not the same compression was used by
        looking for (or ignoring) header differences.
        g      Y@rr   r   z	test.fitsN)
r   rs   r   r   ZCompImageHDUwritetotempopenr   r4   )r   r   hdur   r   rF   r   r   r    test_identical_comp_image_hdusZ  s    

z'TestDiff.test_identical_comp_image_hdusc                 C   s   t ddd}t dd }t||}|jr4J |jdksBJ |jdksPJ | }d|v sdJ d|v spJ d|v s|J d	sJ d S )
Nr{   rr   r   )r   )r{   r   zData dimensions differz
a: 10 x 10zb: 100%No further data comparison performed.)r   rs   r   r   r4   diff_dimensionsr   rX   )r   r   r   rF   rX   r   r   r    test_different_dimensionsm  s    

z"TestDiff.test_different_dimensionsc                 C   s   t ddd}t ddd}d|d< d|d< t||}|jrHJ |jdksVJ |jdksdJ |jdksrJ |jd	d
gksJ d S )Nr{   rr   r   r      r?   r?   r   r/   g{Gz?)r   )r   rr   )r   )7   r   )	r   rs   r   r   r4   r   r   
diff_ratiodiff_pixelsr   r   r   r    test_different_pixels~  s    

zTestDiff.test_different_pixelsc              
   C   sl  t ddddgd}t dddgd	ggd}t d
ddg dg dgd}t ddddd	gd}t ddddgd}t dddddgd}t dddddgd}t d d
d!d"gd}t d#d$d%d&gd}	t dd'dd	gd(d)ggd}
|||||||||	|
g
}t|}td*d+ |D }t|j|j}|js J t|jd,ks4J |jt	d-ksHJ |j
dksXJ |jdkshJ d S ).Nr,   LTFformatr   r.   Xr   r   r1   4I(2, 2)r   r   r/   r2   r<   r?   rH   rJ   r   Zdimr   rA   J       @r   Zbscaler   rI   A3abcdefrK   mrf   re   r   Zunitr   G皙r   Zbzeror   H              ?       @      @IM      @      @      @      @PI(2)r/   r2   c                 S   s   g | ]}|  qS r   )r3   )ru   cr   r   r    
<listcomp>  rx   z2TestDiff.test_identical_tables.<locals>.<listcomp>rr   Z
abcdefghij)r   r   from_columnsr   r   r4   r"   common_columnscommon_column_namessetr   r   )r   c1c2c3c4c5Zc6Zc7Zc8Zc9Zc10columnstatbrF   r   r   r    test_identical_tables  s*    
zTestDiff.test_identical_tablesc                 C   sZ   t ddd}t ddd}tj||gdd}t|g}t|g}t||}|jsVJ dS )z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/178

        Ensure that diffing tables containing empty data doesn't crash.
        rA   r   )r   rI   r   )ZnrowsN)r   r   r   r   r   r   r4   )r   r   r   Zthdur   r   rF   r   r   r    test_diff_empty_tables  s    
zTestDiff.test_diff_empty_tablesc           	      C   s   t ddddgd}t dddgd	ggd}t d
ddg dg dgd}t ddd	gdggd}t d
ddg dg dgd}t|||g}t|||g}t|j|jdd
gd}|jsJ t|jd	ksJ |jdhksJ |j	dksJ |j
dksJ d S )Nr,   r   TFr   r.   r   r   r   r1   r   r   r   r   r   )r   r/   r2   r<   r?   rH   rJ      )Zignore_fieldsr   )r   r   r   r   r   r4   r"   r   r   r   r   )	r   r   r   r   r   r   r   r   rF   r   r   r    test_ignore_table_fields  s"    
z!TestDiff.test_ignore_table_fieldsc                 C   s   t ddddgd}t ddddgd}t ddddgd}t||g}t||g}t|j|j}|jrjJ t|jdks|J |jd	hksJ |j	dgdgfksJ |j
d
ksJ |jd
ksJ | }d|v sJ d|v sJ d S )Nr,   r   TFr   r.   r1   r   r   r   zExtra column B of format L in azExtra column C of format L in b)r   r   r   r   r   r4   r"   r   r   diff_column_namesr   r   rX   r   ZcacbZccr   r   rF   rX   r   r   r     test_different_table_field_names  s    
z)TestDiff.test_different_table_field_namesc                 C   s   t ddddgd}t ddddgd}t ddddgd}t|g}t|||g}t|j|j}|jrjJ |jdksxJ t|jd	ksJ |j	d
hksJ |j
g ddgfksJ |jdksJ |jdksJ | }d|v sJ d|v sJ dS )zh
        Test tables with some common columns, but different number of columns
        overall.
        r,   r   TFr   r.   r1   r   r2   r   r   r   z) Tables have different number of columns:z  a: 1
  b: 3N)r   r   r   r   r   r4   diff_column_countr"   r   r   r   r   r   rX   r   r   r   r    !test_different_table_field_counts  s     
z*TestDiff.test_different_table_field_countsc           	      C   s   t ddddgd}t ddddgd}t ddg dd}t ddg dd}t||g}t||g}t|j|j}|jr|J |jdksJ t|jd	ksJ |j	d
ksJ |j
g ksJ | }d|v sJ d|v sJ d|v sJ dsJ dS )zh
        Test tables that are otherwise identical but one has more rows than the
        other.
        r,   r   TFr   r.   )TFTr   r/   r/   r2   zTable rows differza: 2zb: 3r   N)r   r   r   r   r   r4   r   r"   r   Z	diff_rowsdiff_valuesrX   )	r   ca1cb1ca2cb2r   r   rF   rX   r   r   r    test_different_table_rows  s"    
z"TestDiff.test_different_table_rowsc                 C   sx  t ddddgd}t dddgd	ggd}t d
ddg dg dgd}t dddddgd}t ddddgd}t dddddgd}t dddddgd}t d d
d!d"gd}t d#d$d%d&gd}	t dd'dd	gd(d)ggd}
t ddddgd}t dddgdggd}t d
ddg dg d*gd}t dddddgd}t dddd+gd}t dddddgd}t ddddd,gd}t d d
d-d"gd}t d#d$d.d&gd}t dd'd	d(gd)d/ggd}t|||||||||	|
g
}t||||||||||g
}t|j|jd0d1}|jrJ |jd2ks
J |jd d3ksJ |jd	 d4d	gdgffks>J |jd( d d5ksVJ |jd( d	 d d/d6gd7d8ggk sJ |jd( d	 d	 d6d7gd8d9ggk sJ |jd) d:ksJ |jd/ d;ksJ |jd6 d<ksJ |jd7 d=ksJ |jd8 d>ksJ |jd9 d?ks&J |jd@ dAks:J |jdB dCksNJ |jdD d dEksfJ |jdD d	 d dd	gk sJ |jdD d	 d	 d	d(gk sJ |jdF d dGksJ |jdF d	 d d(d)gk sJ |jdF d	 d	 d)d/gk sJ |j	dHksJ |j
dIks.J | }dJ|v sDJ dK|v sRJ dL|v s`J |dMd	kstJ dNS )Ozn
        Test diffing table data on columns of several different data formats
        and dimensions.
        r,   r   TFr   r.   r   r   r   r1   r   r   r   r   r   rA   r   r   rf   r   rI   r   r   r   rK   r   re   r   r   r   r   r   r   r   r   r   r   r   r   r/   r2   r   ghir|         ?      ?      @      @r<   r   )Znumdiffsr   ))r,   r   )TF)r.   r   )r1   r   r?   rH   rJ   r   ))rA   r   )r   r   ))rI   r   )r   r   ))rK   r   )rf   re   ))rK   r   re   r   ))r   r   )rf   r   ))r   r   )re   r|   	   ))r   r   )r   r   rr   ))r   r   )r   r      )r   r      )r   r      g?z8Column A data differs in row 0:
    a> True
    b> Falsez:...and at 1 more indices.
 Column D data differs in row 0:z;13 different table data element(s) found (65.00% different)zmore indicesN)r   r   r   r   r   r4   Zdiff_columnsr   allr   r   rX   count)r   r   r   Zca3Zca4Zca5Zca6Zca7Zca8Zca9Zca10r   r   Zcb3Zcb4Zcb5Zcb6Zcb7Zcb8Zcb9Zcb10r   r   rF   rX   r   r   r    test_different_table_data  s     ,,$$$$


z"TestDiff.test_different_table_datac                 C   s   t ddd}t|d}|| d || d t| d| d}|js\J | }d|vspJ d|vs|J d|v sJ t d}t	|d}t
||}|jsJ | }d|v sJ d	S )
z5Test identicality of two simple, extensionless files.r{   rr   r   z
testa.fitsz
testb.fitsPrimary HDUzExtension HDUNo differences found.N)r   rs   r   r	   r   r   r   r4   rX   r
   r   )r   r   r   rF   rX   ehdur   r   r    test_identical_files_basic_  s     





z#TestDiff.test_identical_files_basicc                 C   s   t ddd}t|d}t|d}t||g}t|||g}t||}|jrTJ |jdksbJ |j	g kspJ |
 }d|v sJ d|v sJ d|v sJ dS )	zc
        Test files that have some identical HDUs but a different extension
        count.
        r{   rr   r   r   z'Files contain different numbers of HDUsz
a: 2
 b: 3z(No differences found between common HDUsN)r   rs   r   r	   r
   r   r   r4   r   r   rX   )r   r   r   r   r   r   rF   rX   r   r   r    test_partially_identical_files1v  s    



z(TestDiff.test_partially_identical_files1c                 C   s  t ddd}t|d}t|d}t|d d}t|||g}t|||g}t||}|jrdJ |jdksrJ t	|j
dksJ |j
d d dksJ |j
d d }|jrJ |jdksJ |jdksJ |jdksJ |jjsJ |jdusJ |j}	t|	tsJ |	jrJ |	jdks(J |	jdd	 tdD ksFJ |	jd
ksVJ |	jdksfJ | }
d|
vs|J d|
vsJ d|
v sJ d|
vsJ d|
v sJ tdD ] }d|d  d|
v sJ qd|
v sJ dS )zQ
        Test files that have some identical HDUs but one different HDU.
        r{   rr   r   r   r   r   Nc                 S   s    g | ]}d |f||d ffqS )r   r   r   )ru   r~   r   r   r    r     rx   z<TestDiff.test_partially_identical_files2.<locals>.<listcomp>re   r   zExtension HDU 2zExtension HDU 1zHeaders contain differenceszData contains differenceszData differs at [z, 1]z/100 different pixels found (100.00% different).)r   rs   r   r	   r
   r   r   r4   r   r"   r   diff_extnamesdiff_extversdiff_extension_typesZdiff_headers	diff_data
isinstancer   r   r   ranger   r   rX   )r   r   r   r   Zehdu2r   r   rF   ZhdudiffZdatadiffrX   r~   r   r   r    test_partially_identical_files2  sH    





z(TestDiff.test_partially_identical_files2c                 C   s(  t  }tdd}t||g}tdd}d|jd< d|jd< t||g}t||}|jrZJ |jd d d	kspJ |jd d	 }|jd
ksJ |j	dksJ |j
dksJ |jdksJ | }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v s$J dS )zb
        Test files that have some identical HDUs but a different extension
        name.
        FOO)r   BARr/   ZEXTVERr2   ZEXTLEVELr   r   )ZIMAGEZBINTABLE)r  r  rW   r   zExtension types differza: IMAGE
    b: BINTABLEzExtension names differza: FOO
    b: BARzExtension versions differza: 1
    b: 2zExtension levels differN)r	   r
   r   r   ry   r   r4   r   r  r   r   Zdiff_extlevelsrX   )r   r   r   r   r   rF   Zhdu_diffrX   r   r   r    test_partially_identical_files3  s0    





z(TestDiff.test_partially_identical_files3c                 C   s  t jdt jd}d|dd< t j|dd< | }t jjddt jft jt jfgdd	gd
tj	}| }t
||jszJ t||jsJ d|d d< d|d d< d|d d< d|d d< t
||}|jrJ |jd dksJ |jd d dksJ t |jd d d sJ |jd d d dks0J t||}|jrFJ |jd dksZJ |jd d dksrJ t |jd d d sJ |jd d d dksJ dS )zW
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/204
        r   r   re   Nr?   r   r|   colacolb)namesr   r   r   )r   r   )r?   r   ))r	  r   r   )r
  r   )r   emptyZfloat64nanr3   Zrecr   Zviewr   ZFITS_recr   r4   r   r   Zisnanr   )r   ZarrZarr2tableZtable2rF   r   r   r    test_diff_nans  s8    


zTestDiff.test_diff_nansc                 C   s   |  d}tg d}| }d|d< t||}|j|d | }t| }| |ks^J W d    n1 sr0    Y  d S )Ndiff_output.txtr*   r<   r1   fileobjr   r   r3   r   rX   r   readr   outpathr9   r:   diffobjZreport_as_stringZfoutr   r   r    !test_file_output_from_path_string  s    


z*TestDiff.test_file_output_from_path_stringc                 C   sz   |  d}tg d}| }d|d< t||}|j|d tjttd |j|d W d    n1 sl0    Y  d S )Nr  r*   r<   r1   r  match)	r   r   r3   r   rX   r5   r6   OSErrorr   r   r  r9   r:   r  r   r   r    !test_file_output_overwrite_safety  s    

z*TestDiff.test_file_output_overwrite_safetyc                 C   s   |  d}tg d}| }d|d< t||}|j|d | }|j|dd t|$}| |kspJ dW d    n1 s0    Y  d S )	Nr  r*   r<   r1   r  T)r  Z	overwritez9overwritten output file is not identical to report stringr  r  r   r   r    "test_file_output_overwrite_success  s    


z+TestDiff.test_file_output_overwrite_successc                 C   s|   |  d}tg d}| }d|d< t||}|j|d tjtdd |j|dd	 W d
   n1 sn0    Y  d
S )z%Verify uses of clobber and overwrite.r  r*   r<   r1   r  zq"clobber" was deprecated in version 2\.0 and will be removed in version 5\.1\. Use argument "overwrite" instead\.r  T)r  ZclobberN)r   r   r3   r   rX   r5   Zwarnsr   r  r   r   r    %test_file_output_overwrite_vs_clobber)  s    

z.TestDiff.test_file_output_overwrite_vs_clobberc                 C   s^   t jddddd}| }t|d}t|d}t||}|jsFJ | }d|v sZJ d S )Nr{   uint8r   rr   r   r   )r   rs   r   r3   r   r   r4   rX   r   r   r   hdu_ahdu_brF   rX   r   r   r    test_rawdatadiff_nodiff7  s    



z TestDiff.test_rawdatadiff_nodiffc                 C   s   t jdddd }|d d  }t|d}t|d}t||}|jrJJ | }d|v s^J d|v sjJ d	|v svJ d
|v sJ d S )Nr{   r   r   rr   P   r   zData sizes differ:za: 100 byteszb: 80 bytesr   )r   rs   r3   r   r   r4   rX   r!  r   r   r    test_rawdatadiff_dimsdiffA  s    



z"TestDiff.test_rawdatadiff_dimsdiffc                 C   s   t jdddd }| }ddg}|D ]\}}|||< q&t|d}t|d}t||}|jr`J |jj}	t|t|	ks|J t	|D ](\}
\}}|	|
 ||d |ffksJ q|
 }d|v sJ |D ]\}}d	| d
|v sJ qd|v sJ d S )Nr{   r   r   rr   )      )Y      r   zData contains differences:zData differs at byte :z*2 different bytes found (2.00% different).)r   rs   r3   r   r   r4   r  
diff_bytesr"   	enumeraterX   )r   r   r   Zchangesivr"  r#  rF   r,  jrX   _r   r   r    test_rawdatadiff_bytesdiffN  s$    




z#TestDiff.test_rawdatadiff_bytesdiffN)4r$   r%   r&   r;   r=   rD   rG   rL   rO   rT   rV   rZ   rd   rk   rm   r5   ZmarkZparametrizer   r   r   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r$  r&  r2  r   r   r   r    r)       sX   			
-*
H/"'
r)   c                 C   sx   t | d}t | d}tt ttdddg}|| d|d jd< || t	||}d|
 v stJ d	S )
z?Make sure diff report reports HDU name and ver if same in files
test1.fits
test2.fitsr?   r   r   r   r   zExtension HDU 1 (SCI, 1):Nstrjoinr   r	   r
   r   r   r   r   r   rX   ZtmpdirZpath1Zpath2ZhdulistrF   r   r   r    test_fitsdiff_hdu_nameg  s    


r9  c                 C   sv   t | d}t | d}tt ttddg}|| d|d jd< || t	||}d|
 v srJ dS )	z=Make sure diff report doesn't report HDU name if not in filesr3  r4  r?   r   r   r   Extension HDU 1:Nr5  r8  r   r   r    test_fitsdiff_no_hdu_nameu  s    


r;  c                 C   sv   t | d}t | d}tt ttddddg}|| d|d _|| t	||}d|
 v srJ d	S )
zBMake sure diff report doesn't report HDU name if not same in filesr3  r4  r?   r   r   r   ZERRr:  N)r6  r7  r   r	   r
   r   r   r   r   r   rX   r8  r   r   r    test_fitsdiff_with_names  s    



r<  )"r5   Znumpyr   Zastropy.io.fits.columnr   Zastropy.io.fits.diffr   r   r   r   r   Zastropy.io.fits.hdur   r	   r
   Zastropy.io.fits.hdu.baser   Zastropy.io.fits.hdu.tabler   Zastropy.io.fits.headerr   Zastropy.utils.exceptionsr   Zastropy.utils.miscr   Z
astropy.ior   rp   r   r   r)   r9  r;  r<  r   r   r   r    <module>   s,         M