U
    e»{j!  ã                   @   sÀ   d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZmZmZmZ G dd„ deƒZG dd	„ d	ƒZG d
d„ dƒZG dd„ deƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)ÚOrderedDict)Úfits)Úmetadata)ÚMergeConflictErrorÚMetaDataÚcommon_dtypeÚenable_merge_strategiesÚmergec                   @   s   e Zd ZdS )ÚOrderedDictSubclassN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/utils/tests/test_metadata.pyr
      s   r
   c                   @   sÂ   e Zd ZejZdd„ Zej 	de
dgƒedgƒedgƒg¡dd„ ƒZej 	dddd	d
dgg¡dd„ ƒZej 	de
dgƒedgƒedgƒg¡dd„ ƒZej 	dddd	d
dgg¡dd„ ƒZdd„ ZdS )ÚMetaBaseTestc                 C   s2   | j | jŽ }t|jtƒst‚t|jƒdks.t‚d S )Nr   )Ú
test_classÚargsÚ
isinstanceÚmetar   ÚAssertionErrorÚlen)ÚselfÚdr   r   r   Ú	test_none   s    zMetaBaseTest.test_noner   )Úaé   c                 C   s>   | j | jd|iŽ}t|jƒt|ƒks(t‚|jd dks:t‚d S ©Nr   r   r   ©r   r   Útyper   r   ©r   r   r   r   r   r   Útest_mapping_init   s    zMetaBaseTest.test_mapping_initzceci n'est pas un metag333333ó?r   é   é   c              	   C   s,   t  t¡� | j| jd|iŽ W 5 Q R X d S ©Nr   ©ÚpytestÚraisesÚ	TypeErrorr   r   ©r   r   r   r   r   Útest_non_mapping_init'   s    z"MetaBaseTest.test_non_mapping_initc                 C   s>   | j | jd|iŽ}t|jƒt|ƒks(t‚|jd dks:t‚d S r   r   r   r   r   r   Útest_mapping_set,   s    zMetaBaseTest.test_mapping_setc              	   C   s,   t  t¡� | j| jd|iŽ}W 5 Q R X d S r#   r$   r   r   r   r   Útest_non_mapping_set5   s    z!MetaBaseTest.test_non_mapping_setc                 C   sJ   t j ¡ }| dd¡ | dd¡ | j| jd|iŽ}|jd dksFt‚d S )NZobserverzEdwin HubbleZexptimeZ3600r   ZOBSERVER)r   ÚheaderÚHeaderÚsetr   r   r   r   )r   r,   r   r   r   r   Útest_meta_fits_header:   s
    
z"MetaBaseTest.test_meta_fits_headerN)r   r   r   ÚabcÚABCMetaZ__metaclass__r   r%   ÚmarkZparametrizeÚdictr   r
   r    r)   r*   r+   r/   r   r   r   r   r      s"   þ

þ

r   c                   @   s   e Zd Zeƒ Zddd„ZdS )ÚExampleDataNc                 C   s
   || _ d S ©N)r   r(   r   r   r   Ú__init__G   s    zExampleData.__init__)N)r   r   r   r   r   r6   r   r   r   r   r4   D   s   r4   c                   @   s   e Zd ZeZdZdS )ÚTestMetaExampleDatar   N)r   r   r   r4   r   r   r   r   r   r   r7   K   s   r7   c               	   C   sX   t ƒ } t ƒ }dddœ| jd< dddœ|jd< t t¡� t| j|jdd� W 5 Q R X dS )z¢Regression test for issue #3294.

    Ensure that an exception is raised when a metadata conflict exists
    and ``metadata_conflicts='error'`` has been set.
    r   )ÚxÚyZsomekeyiç  Úerror©Zmetadata_conflictsN)r4   r   r%   r&   r   r	   )Zdata1Zdata2r   r   r   Ú(test_metadata_merging_conflict_exceptionP   s    r<   c               	   C   sþ  ddgddœdddœ} ddgiddd	œ}t | |d
d�}|ddddgdœddddœksXt‚dt ddg¡i} dt dg¡i}t | |d
d�}t |d t dddg¡k¡sªt‚dddgi} dt dg¡i}t |d t dddg¡k¡sèt‚ddi} ddi}t t¡� t | |d
d� W 5 Q R X dt ddg¡i} dt dgg¡i}t t¡� t | |d
d� W 5 Q R X dt ddg¡i} dt dg¡i}t t¡� t | |d
d� W 5 Q R X dt ddg¡i} dt dg¡i}t | |dd�}t |d t dg¡k¡�sút‚d S )Nr   r!   ©Úk1Úk2)r   r!   )r>   r?   Úk4r>   r"   )r"   )r>   Úk3r@   r:   r;   )r?   r>   )r   r!   r"   )r>   r?   rA   r@   Ú3Zsilent)r	   r   ÚnpÚarrayÚallr%   r&   r   )Úmeta1Úmeta2Úoutr   r   r   Útest_metadata_merging^   sT    þú	ýþù""rI   c               	   C   sX  t tjƒ} G dd„ dtjƒ}G dd„ dtjƒ}dddœ}dd	dœ}t||ƒ�( |jsXt‚|jsbt‚t||d
d�}W 5 Q R X |d ddgksŽt‚|d dksžt‚|jr¨t‚|jr²t‚t	 
t¡� t||d
d� W 5 Q R X ttjƒ�( |jsìt‚|jsöt‚t||d
d�}W 5 Q R X |d ddgk�s$t‚|d dk�s6t‚|j�rBt‚|j�rNt‚| t_d S )Nc                   @   s,   e Zd ZdZeefeeffZedd„ ƒZdS )z>test_metadata_merging_new_strategy.<locals>.MergeNumbersAsListzB
        Scalar float or int values are joined in a list.
        c                 S   s   ||gS r5   r   )ÚclsÚleftÚrightr   r   r   r	   ¦   s    zDtest_metadata_merging_new_strategy.<locals>.MergeNumbersAsList.mergeN)	r   r   r   Ú__doc__ÚintÚfloatÚtypesÚclassmethodr	   r   r   r   r   ÚMergeNumbersAsListŸ   s   rR   c                   @   s   e Zd ZdZeefZdZdS )z>test_metadata_merging_new_strategy.<locals>.MergeConcatStringsz7
        Scalar string values are concatenated
        FN)r   r   r   rM   ÚstrrP   Úenabledr   r   r   r   ÚMergeConcatStringsª   s   rU   r   r   r=   r!   Úbr:   r;   r>   r?   Úab)Úlistr   ZMERGE_STRATEGIESZMergeStrategyZ	MergePlusr   rT   r   r	   r%   r&   r   )Zoriginal_merge_strategiesrR   rU   rF   rG   rH   r   r   r   Ú"test_metadata_merging_new_strategyœ   s0    
	







rY   c                  C   sv   t  dg¡} t  dg¡}t  dg¡}t  dg¡}t| |gƒ d¡sFt‚t||gƒ d¡s\t‚t||gƒ d¡srt‚d S )NÚ123Ú1234s   123s   12345ZU4ZU5ZS5)rC   rD   r   Úendswithr   )Úu3Zu4Zb3Zb5r   r   r   Útest_common_dtype_stringÑ   s    r^   c               	   C   s|   t jdt jd�} t jdt jd�}t  d¡}t t¡� t| |gƒ W 5 Q R X t| | gƒ d¡sbt	‚t| |gƒ d¡sxt	‚d S )Nr   )ZdtyperZ   Úi8Úf8)
rC   rD   Zint64Zfloat64r%   r&   r   r   r\   r   )r_   r`   r]   r   r   r   Útest_common_dtype_basicÛ   s    
ra   )r0   Úcollectionsr   ÚnumpyrC   r%   Z
astropy.ior   Zastropy.utilsr   Zastropy.utils.metadatar   r   r   r   r	   r
   r   r4   r7   r<   rI   rY   r^   ra   r   r   r   r   Ú<module>   s   	.>5
