a
    hÝEbƒ  ã                   @   sz   d dl Z d dlZd dlZd dlmZ d dlZddlmZ dd„ Z	G dd„ dej
ƒZG d	d
„ d
ej
ƒZG dd„ dej
ƒZdS )é    N)Úassert_array_equalé   )Úutilc                  G   s   t jjt j t¡f|  Ž S )N)ÚosÚpathÚjoinÚdirnameÚ__file__)Úa© r   ú\/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/numpy/f2py/tests/test_string.pyÚ_path	   s    r   c                   @   s*   e Zd ZedddƒgZejjdd„ ƒZdS )Ú
TestStringÚsrcÚstringzchar.f90c                 C   s^   t jg d¢dd�j}| jj ||jd ¡\}}t||ƒ | ¡ }d|dd d …f< t||ƒ d S )N)ÚabÚcdZefÚc)Zdtyper   ZAAA)	ÚnpÚarrayÚTÚmoduleZ	char_testZchange_stringsÚshaper   Úcopy)ÚselfÚstringsÚinpÚoutÚexpectedr   r   r   Ú	test_char   s    
ÿ
zTestString.test_charN)	Ú__name__Ú
__module__Ú__qualname__r   ÚsourcesÚpytestÚmarkZslowr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚTestDocStringArgumentsz.faÈ  
C FILE: STRING.F
      SUBROUTINE FOO(A,B,C,D)
      CHARACTER*5 A, B
      CHARACTER*(*) C,D
Cf2py intent(in) a,c
Cf2py intent(inout) b,d
      PRINT*, "A=",A
      PRINT*, "B=",B
      PRINT*, "C=",C
      PRINT*, "D=",D
      PRINT*, "CHANGE A,B,C,D"
      A(1:1) = 'A'
      B(1:1) = 'B'
      C(1:1) = 'C'
      D(1:1) = 'D'
      PRINT*, "A=",A
      PRINT*, "B=",B
      PRINT*, "C=",C
      PRINT*, "D=",D
      END
C END OF FILE STRING.F
        c                 C   sˆ   t  d¡}t  d¡}t  d¡}t  d¡}| j ||||¡ | ¡ dksJJ ‚| ¡ dksdJ | ¡ fƒ‚| ¡ dkstJ ‚| ¡ dks„J ‚d S )Ns   123  s   123s   B23  s   D23)r   r   r   ZfooÚtobytes)r   r
   Úbr   Údr   r   r   Útest_example6   s    



z#TestDocStringArguments.test_exampleN)r    r!   r"   ÚsuffixÚcoder*   r   r   r   r   r&      s   r&   c                   @   sB   e Zd ZdZe d¡Zeddd„ƒZddd	„Z	d
d„ Z
dd„ ZdS )ÚTestFixedStringz.f90a   
       function sint(s) result(i)
          implicit none
          character(len=*) :: s
          integer :: j, i
          i = 0
          do j=len(s), 1, -1
           if (.not.((i.eq.0).and.(s(j:j).eq.' '))) then
             i = i + ichar(s(j:j)) * 10 ** (j - 1)
           endif
          end do
          return
        end function sint

        function test_in_bytes4(a) result (i)
          implicit none
          integer :: sint
          character(len=4) :: a
          integer :: i
          i = sint(a)
          a(1:1) = 'A'
          return
        end function test_in_bytes4

        function test_inout_bytes4(a) result (i)
          implicit none
          integer :: sint
          character(len=4), intent(inout) :: a
          integer :: i
          if (a(1:1).ne.' ') then
            a(1:1) = 'E'
          endif
          i = sint(a)
          return
        end function test_inout_bytes4
        r   Nc                 C   s|   t | tjƒr|  ¡ } nt | tƒr(|  ¡ } t | tƒs6J ‚|du rFt| ƒ}d}t|t	|t| ƒƒƒD ]}|| | d|  7 }q^|S )z—Return the content of a string buffer as integer value.

        For example:
          _sint('1234') -> 4321
          _sint('123A') -> 17321
        Nr   é
   )
Ú
isinstancer   Úndarrayr'   ÚstrÚencodeÚbytesÚlenÚrangeÚmin)ÚsÚstartÚendÚiÚjr   r   r   Ú_sintl   s    

zTestFixedString._sintÚinc                 c   sÂ   |dv rJdV  dV  dV  dV  dV  dV  dV  d	V  d
V  dV  dV  t jdt jdd�V  t  d¡V  t  d¡V  t  d¡V  t  d
¡V  t  d	¡V  t  d¡V  t  d¡V  t  d¡V  d S )N)r=   Ú Ú1Ú1234Z12345ó    ó    ó   1ó   s   1 s   1234s   12345r   )Úbuffers   123 )r   r0   Úbytes_r   )r   Úintentr   r   r   Ú
_get_input€   s*    zTestFixedString._get_inputc                 C   s<   |   ¡ D ].}| j |¡}| j|dd�}||ksJ |ƒ‚qd S )Né   ©r9   )rH   r   Ztest_in_bytes4r<   )r   r7   Úrr   r   r   r   Útest_intent_in—   s    zTestFixedString.test_intent_inc                 C   s`   | j dd�D ]N}| j|dd�}| j |¡}| j|dd�}||ksDJ ‚|| j|dd�ksJ ‚qd S )NZinout)rG   rI   )r8   rJ   )rH   r<   r   Ztest_inout_bytes4)r   r7   ÚrestrK   r   r   r   r   Útest_intent_inoutž   s    z!TestFixedString.test_intent_inout)r   N)r=   )r    r!   r"   r+   ÚtextwrapÚdedentr,   Ústaticmethodr<   rH   rL   rN   r   r   r   r   r-   D   s   
%
r-   )r   r$   rO   Znumpy.testingr   Únumpyr   r>   r   r   ZF2PyTestr   r&   r-   r   r   r   r   Ú<module>   s   )