U
    e»{jÈ  ã                   @   s  d dl Zd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ eeee
gZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zej  dddg¡dd„ ƒZ!dd„ Z"ejj#e dd�ej  de¡dd„ ƒƒZ$dd„ Z%dd „ Z&G d!d"„ d"ƒZ'dS )#é    N)Úassert_allcloseÚassert_array_equal)Úunits)ÚDogBoxLSQFitterÚLevMarLSQFitterÚLMLSQFitterÚTRFLSQFitter)Ú
Gaussian1DÚIdentityÚMappingÚ
Rotation2DÚShiftÚUnitsMapping)ÚNumpyRNGContext)Ú	HAS_SCIPYc                  C   sp   t  d¡} t  d¡}tdƒ}|ddƒdks.t‚| dd¡dksBt‚t|| |ƒ|| fƒ t| || ¡| |fƒ d S )N©é   é   ©é   r   r   r   )ç       @ç      ð?©r   r   )ÚnpÚzerosÚonesr   ÚAssertionErrorÚinverser   )ÚxÚyÚmapping© r!   úc/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/modeling/tests/test_mappings.pyÚtest_swap_axes   s    

r#   c                  C   sV   t dƒ} | ddƒdkst‚|  dddd¡dks2t‚| jjdksBt‚| jjdksRt‚d S )N)r   r   r   r   r   r   )r   r   r   r   r   é   )r   r   r   Ún_inputsZ	n_outputs©r    r!   r!   r"   Útest_duplicate_axes'   s
    r'   c                  C   s"   t ddd�} | ddƒdkst‚d S )N©r   r   ©r%   r   r   )r   r   r&   r!   r!   r"   Útest_drop_axes_1/   s    r*   c               	   C   sB   t dƒ} | ddƒdkst‚d}tjt|d�� | j W 5 Q R X d S )N©r   r   r   r   zYMappings such as .* that drop one or more of their inputs are not invertible at this time©Úmatch)r   r   ÚpytestÚraisesÚNotImplementedErrorr   )r    ÚMESSAGEr!   r!   r"   Útest_drop_axes_24   s    ÿr2   c                  C   s>   t ddd�} | jdkst‚tdƒ}|| B }t|ddƒdƒ d S )Nr+   r   r)   é<   r   g?Ø+t=Ûý?)r   r%   r   r   r   )r    ÚrotationÚmodelr!   r!   r"   Útest_drop_axes_3?   s
    r6   ÚnameZ	test_namec              
   C   s‚   t d| d�}| d krd} dd„ tdƒD ƒ}tddƒD ]H}|d	krBq4| › d
|› �}tjt|d�� |j|d |… Ž  W 5 Q R X q4d S )Nr   ©r7   r   c                 S   s   g | ]}t  d ¡| ‘qS )r   )r   r   )Ú.0Úidxr!   r!   r"   Ú
<listcomp>N   s     z#test_bad_inputs.<locals>.<listcomp>é   r   é   r   z expects 2 inputs; got r,   )r   Úranger.   r/   Ú	TypeErrorÚevaluate)r7   r    r   r:   r1   r!   r!   r"   Útest_bad_inputsG   s    rA   c               	   C   s´   t  d¡} t  d¡}tdƒ}tdƒ}tdd�}||@ |B }t|ddƒdƒ || |ƒ\}}t||ft  dddgdddgg¡t  dddgdddgg¡fƒ t| ||¡| |fd	d
� d S )Nr   r   r3   )Zangler   )g€9B.ÜÈ Àg,ºží@gn]ÿèz¶û¿r   g»½×Ùß|Û=©Zatol)	r   r   r   r
   r   r   r   Úarrayr   )r   r   Zident1Úshiftr4   r5   Zres_xZres_yr!   r!   r"   Útest_identityX   s.    


þÿþÿùþrE   zrequires scipy)ÚreasonÚfitterc           	   	   C   sŒ   | ƒ } t dƒtdƒB tdddƒB }t d¡}||ƒ}d}tdƒ� tj d||j¡}W 5 Q R X || }| |||ƒ}||ƒ}t	|||d	� d S )
Nr   r(   r<   r$   é
   g{®Gázt?i‡Ö g        rB   )
r
   r   r	   r   Zaranger   ÚrandomÚnormalÚshaper   )	rG   Úmr   Zy_realZdyÚnZy_noisyZ	new_modelZy_fitr!   r!   r"   Útest_fittable_compoundw   s    

rN   c                  C   s8   t ddd�} t| ƒdkst‚t dƒ} t| ƒdks4t‚d S )Nr   Úfoor8   z<Identity(1, name='foo')>z<Identity(1)>)r
   Úreprr   ©rL   r!   r!   r"   Útest_identity_reprˆ   s    rR   c                  C   s@   t ddgdd�} t| ƒdks t‚t ddgƒ} t| ƒdks<t‚d S )Nr   r   rO   r8   z<Mapping([0, 1], name='foo')>z<Mapping([0, 1])>)r   rP   r   rQ   r!   r!   r"   Útest_mapping_repr�   s    rS   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestUnitsMappingc              	   C   s8  t tjd ffdddd�}|jtjd ffks.t‚|jddiks@t‚|jdksNt‚|jddiks`t‚|jdksnt‚|j	dtjiks‚t‚t tj
d ffƒ}|jtj
d ffks¨t‚|jddiksºt‚|jd ksÈt‚|jddiksÚt‚|jd ksèt‚|j	dtj
iksüt‚d}tjt|d��  t tjd ftjtj
ffƒ W 5 Q R X d S )	NZ	test_eqivTÚtest)Úinput_units_equivalenciesÚinput_units_allow_dimensionlessr7   r   Fz1If one return unit is None, then all must be Noner,   )r   ÚurL   Ú_mappingr   Z_input_units_strictrV   rW   r7   Z_input_unitsÚKr.   r/   Ú
ValueError)Úselfr5   r1   r!   r!   r"   Útest___init__™   s,    
üzTestUnitsMapping.test___init__c                 C   sØ   t tjd ffƒ}|dtj ƒdks&t‚t tjtjffƒ}|dtj ƒdtj ksTt‚t tjd ftjd ffƒ}|dtj dtj ƒdksŠt‚t tjtjftjtjffƒ}|dtj dtj ƒdtj dtj fksÔt‚d S )NrH   é   )rH   r^   )r   rX   rL   r   rZ   ©r\   r5   r!   r!   r"   Útest_evaluate¶   s    ÿÿzTestUnitsMapping.test_evaluatec                 C   sd   t tjd ffdd�}t|ƒdttjƒ› d�ks2t‚t tjd ffƒ}t|ƒdttjƒ› d�ks`t‚d S )NrO   r8   z<UnitsMapping(((z, None),), name='foo')>z, None),))>)r   rX   rL   rP   r   r_   r!   r!   r"   Ú	test_reprÇ   s    zTestUnitsMapping.test_reprN)Ú__name__Ú
__module__Ú__qualname__r]   r`   ra   r!   r!   r!   r"   rT   ˜   s   rT   )(Únumpyr   r.   Znumpy.testingr   r   Zastropyr   rX   Zastropy.modeling.fittingr   r   r   r   Zastropy.modeling.modelsr	   r
   r   r   r   r   Zastropy.utilsr   Z"astropy.utils.compat.optional_depsr   Zfittersr#   r'   r*   r2   r6   ÚmarkZparametrizerA   rE   ZskipifrN   rR   rS   rT   r!   r!   r!   r"   Ú<module>   s,    
