o
    g                     @   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   Z/home/ubuntu/cloudmapper/venv/lib/python3.10/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cdefc)dtyper   AAA)	nparrayTmodule	char_testchange_stringsshaper   copy)selfstringsinpoutexpectedr   r   r   	test_char   s   

zTestString.test_charN)	__name__
__module____qualname__r   sourcespytestmark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s%J | dks2J | f| dks:J | dksBJ d S )Ns   123  s   123s   B23  s   D23)r   r   r   footobytes)r   r
   br   dr   r   r   test_example6   s   



z#TestDocStringArguments.test_exampleN)r%   r&   r'   suffixcoder1   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sJ |du r#t| }d}t|t	|t| D ]}|| | d|  7 }q/|S )zReturn 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 r&d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rD    1123412345           1   s   1 s   1234s   12345r   )buffers   123 )r   r7   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   r@   )rQ   r   test_in_bytes4rC   )r   r>   rr#   r   r   r   test_intent_in   s
   zTestFixedString.test_intent_inc                 C   s`   | j ddD ]'}| j|dd}| j|}| j|dd}||ks"J || j|ddks-J qd S )Ninout)rP   rR   )r?   rS   )rQ   rC   r   test_inout_bytes4)r   r>   restrU   r#   r   r   r   test_intent_inout   s   z!TestFixedString.test_intent_inout)r   NrE   )r%   r&   r'   r2   textwrapdedentr3   staticmethodrC   rQ   rV   rZ   r   r   r   r   r4   D   s    
%
r4   )r   r)   r[   numpy.testingr   numpyr   rF   r   r   F2PyTestr   r,   r4   r   r   r   r   <module>   s    )