3
d                 @   s   d Z ddlZddlmZmZmZmZmZ ddlm	Z	m
Z
 G dd dZyeed W n ek
rn   dZY nX d	ZG d
d dZG dd dZG dd deZG dd deZG dd deZG dd dejeZG dd dejeZdS )z#
Tests for the Complex trait type.
    N)BaseComplexComplexEither	HasTraits
TraitError)numpyrequires_numpyc               @   s   e Zd Zdd Zdd ZdS )IntegerLikec             C   s
   || _ d S )N)_value)selfvalue r   ;/tmp/pip-build-7vycvbft/traits/traits/tests/test_complex.py__init__   s    zIntegerLike.__init__c             C   s   | j S )N)r
   )r   r   r   r   	__index__   s    zIntegerLike.__index__N)__name__
__module____qualname__r   r   r   r   r   r   r	      s   r	      FTc               @   s   e Zd Zdd Zdd ZdS )	FloatLikec             C   s
   || _ d S )N)r
   )r   r   r   r   r   r   (   s    zFloatLike.__init__c             C   s   | j S )N)r
   )r   r   r   r   	__float__+   s    zFloatLike.__float__N)r   r   r   r   r   r   r   r   r   r   '   s   r   c               @   s   e Zd Zdd Zdd ZdS )ComplexLikec             C   s
   || _ d S )N)r
   )r   r   r   r   r   r   0   s    zComplexLike.__init__c             C   s   | j S )N)r
   )r   r   r   r   __complex__3   s    zComplexLike.__complex__N)r   r   r   r   r   r   r   r   r   r   /   s   r   c               @   s   e Zd Ze Zede ZdS )HasComplexTraitsN)r   r   r   r   r   r   value_or_noner   r   r   r   r   7   s   r   c               @   s   e Zd Ze Zede ZdS )HasBaseComplexTraitsN)r   r   r   r   r   r   r   r   r   r   r   r   A   s   r   c               @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
jeddd Zdd Zdd Zedd Zdd Zdd ZdS )CommonComplexTestsz+ Common tests for Complex and BaseComplex. c             C   s2   | j  }| jt|jt | j|jtdd d S )Ng        )
test_classassertIstyper   complexassertEqual)r   ar   r   r   test_default_valueJ   s    z%CommonComplexTests.test_default_valuec          	   C   s(   | j  }| jt d|_W d Q R X d S )NZ3j)r   assertRaisesr   r   )r   r"   r   r   r   test_rejects_strO   s    z#CommonComplexTests.test_rejects_strc             C   s8   | j  }d|_| jt|jt | j|jtdd d S )N   g      @g        )r   r   r   r   r    r!   )r   r"   r   r   r   test_accepts_intT   s    z#CommonComplexTests.test_accepts_intc             C   s8   | j  }d|_| jt|jt | j|jtdd d S )Ng      @g        )r   r   r   r   r    r!   )r   r"   r   r   r   test_accepts_floatZ   s    z%CommonComplexTests.test_accepts_floatc             C   s8   | j  }d|_| jt|jt | j|jtdd d S )Ny              @g        g      @)r   r   r   r   r    r!   )r   r"   r   r   r   test_accepts_complex`   s    z'CommonComplexTests.test_accepts_complexc             C   sN   G dd dt }| j }|dd|_| jt|jt  | j|jt dd d S )Nc               @   s   e Zd ZdS )zICommonComplexTests.test_accepts_complex_subclass.<locals>.ComplexSubclassN)r   r   r   r   r   r   r   ComplexSubclassg   s   r*   g      @g      (@)r    r   r   r   r   r!   )r   r*   r"   r   r   r   test_accepts_complex_subclassf   s
    z0CommonComplexTests.test_accepts_complex_subclassz:complex does not support __index__ for this Python versionc             C   s<   | j  }td|_| jt|jt | j|jtdd d S )Nr   g      @g        )r   r	   r   r   r   r    r!   )r   r"   r   r   r   test_accepts_integer_likeo   s    
z,CommonComplexTests.test_accepts_integer_likec             C   s<   | j  }td|_| jt|jt | j|jtdd d S )Ng	@g        )r   r   r   r   r   r    r!   )r   r"   r   r   r   test_accepts_float_likey   s    
z*CommonComplexTests.test_accepts_float_likec             C   s<   | j  }td|_| jt|jt | j|jtdd d S )Ng      @y              @g      @y      @      @)r   r   r   r   r   r    r!   )r   r"   r   r   r   test_accepts_complex_like   s    
z,CommonComplexTests.test_accepts_complex_likec             C   s   t jdt jdt jdt jd	t jd
g}xV|D ]N}| j|d8 | j }||_| j	t
|jt | j|jt| W d Q R X q2W d S )N   g@gffffff@g333333?y        ffffff@g@y        @)r   y333333?ffffffy@@)r   Zint32Zfloat32Zfloat64Z	complex64Z
complex128ZsubTestr   r   r   r   r    r!   )r   Ztest_valuesr   r"   r   r   r   test_accepts_numpy_values   s    
z,CommonComplexTests.test_accepts_numpy_valuesc             C   s8   | j  }d|_| jt|jt | j|jtdd d S )Ng      @y              @g      @y      @      @)r   r   r   r   r    r!   )r   r"   r   r   r   %test_validate_trait_complex_code_path   s    z8CommonComplexTests.test_validate_trait_complex_code_pathc          	      sL   G dd dt  G  fddd}| j }| j  | |_W d Q R X d S )Nc               @   s   e Zd ZdS )zFCommonComplexTests.test_exceptions_propagated.<locals>.CustomExceptionN)r   r   r   r   r   r   r   CustomException   s   r2   c                   s   e Zd Z fddZdS )zECommonComplexTests.test_exceptions_propagated.<locals>.BadComplexLikec                s    dd S )Nzsomething went wrongr   )r   )r2   r   r   r      s    zQCommonComplexTests.test_exceptions_propagated.<locals>.BadComplexLike.__complex__N)r   r   r   r   r   )r2   r   r   BadComplexLike   s   r3   )	Exceptionr   r$   r   )r   r3   r"   r   )r2   r   test_exceptions_propagated   s
    z-CommonComplexTests.test_exceptions_propagatedN)r   r   r   __doc__r#   r%   r'   r(   r)   r+   unittestZ
skipUnlesscomplex_accepts_indexr,   r-   r.   r   r0   r1   r5   r   r   r   r   r   G   s   	r   c               @   s   e Zd Zdd ZdS )TestComplexc             C   s
   t | _d S )N)r   r   )r   r   r   r   setUp   s    zTestComplex.setUpN)r   r   r   r:   r   r   r   r   r9      s   r9   c               @   s   e Zd Zdd ZdS )TestBaseComplexc             C   s
   t | _d S )N)r   r   )r   r   r   r   r:      s    zTestBaseComplex.setUpN)r   r   r   r:   r   r   r   r   r;      s   r;   )r6   r7   Z
traits.apir   r   r   r   r   Z$traits.testing.optional_dependenciesr   r   r	   r    	TypeErrorr8   r   r   r   r   objectr   ZTestCaser9   r;   r   r   r   r   <module>   s    


a