
    wg                         d dl mZ d dl mZ d dlmZ d dlZ G d dej                        Z G d de	      Z
 G d	 d
e	      Z G d dee
      Z G d dee      ZddZy)    )ir)binding)	datamodelNc                   &    e Zd ZdZeZd Zd Zd Zy)DataModelTesterzE
    Test the implementation of a DataModel for a frontend type.
    c                 z    t        j                         | _        t        j                  | j
                     | _        y N)r   Modulemoduler   default_managerfe_type)selfs    a/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/core/datamodel/testing.pysetUpzDataModelTester.setUp   s%    iik"224<<@    c                 (  
 t        j                  t        j                         g       }t        j                  | j                  |d      }t        j
                         }|j                  |j                                t        j                  | j                  j                         d      }| j                  j                  ||      }| j                  |t        d       t        |t        t         f      rVd
fd	
t         
|d             }t         
| j                  j#                                     }| j%                  ||       n4| j%                  |j&                  | j                  j#                                | j                  j)                  ||      }| j%                  |j&                  | j                  j                                |j+                          t-        j.                  t1        | j                              }	t1        |	       y)	zi
        - Is as_arg() and from_arg() implemented?
        - Are they the inverse of each other?
        test_as_argnameNz(as_argument returned NotImplementedErrorc              3      K   | D ]?  }t        |t        t        f      rt         ||             /|| 6 ||       A y w)Nfunc)
isinstancetuplelist)argsr   argrecur_tuplizes      r   r   z2DataModelTester.test_as_arg.<locals>.recur_tuplize"   sI      ,C!#t}5#M#D$ABB<"%I"&s)O,s   AA	c                     | j                   S r	   )type)xs    r   <lambda>z-DataModelTester.test_as_arg.<locals>.<lambda>,   s
     r   r   r	   )r   FunctionTypeVoidTypeFunctionr   	IRBuilderposition_at_endappend_basic_blockConstantr   get_value_typeas_argumentassertIsNotNotImplementedr   r   r   get_argument_typeassertEqualr    from_argumentret_voidllparse_assemblystr)r   fntyfunctionbuilderundef_valuer   argtypesexptypes	rev_valuematerializedr   s             @r   r   zDataModelTester.test_as_arg   s   
 r{{}b1;;t{{D}E,,. ; ; =>kk$.."?"?"A4H~~))';?~ 0E 	F dUDM*, ]46FGHH]0024 5HXx0TYY!^^==?A NN00$?	)F)F)HI ((T[[)9:Lr   c                 N   t        j                  t        j                         g       }t        j                  | j                  |d      }t        j
                         }|j                  |j                                t        j                  | j                  j                         d      }| j                  j                  ||      }| j                  |t        d       | j                  |j                  | j                  j!                                | j                  j#                  ||      }| j                  |j                  | j                  j                                |j%                          t'        j(                  t+        | j                              }t+        |       y)zo
        - Is as_return() and from_return() implemented?
        - Are they the inverse of each other?
        test_as_returnr   Nz&as_return returned NotImplementedError)r   r#   r$   r%   r   r&   r'   r(   r)   r   r*   	as_returnr,   r-   r/   r    get_return_typefrom_returnr1   r2   r3   r4   )r   r5   r6   r7   r8   retr;   r<   s           r   r>   zDataModelTester.test_as_return=   s(   
 r{{}b1;;t{{D7GH,,. ; ; =>kk$.."?"?"A4Hnn&&w<n /D 	E 	4>>#A#A#CDNN..w<	)F)F)HI ((T[[)9:Lr   N)	__name__
__module____qualname____doc__r-   r   r   r   r>    r   r   r   r      s     GA)Vr   r   c                       e Zd ZdZd Zy)SupportAsDataMixinz#Test as_data() and from_data()
    c                 N   t        j                  t        j                         g       }t        j                  | j                  |d      }t        j
                         }|j                  |j                                t        j                  | j                  j                         d       }| j                  j                  ||      }| j                  |t        d       | j                  |j                  | j                  j!                                | j                  j#                  ||      }| j                  |j                  | j                  j                                |j%                          t'        j(                  t+        | j                              }t+        |       y )Ntest_as_datar   zas_data returned NotImplemented)r   r#   r$   r%   r   r&   r'   r(   r)   r   r*   as_datar,   r-   r/   r    get_data_type	from_datar1   r2   r3   r4   )r   r5   r6   r7   r8   datar;   r<   s           r   rK   zSupportAsDataMixin.test_as_data]   s&   r{{}b1;;t{{D~F,,. ; ; =>kk$.."?"?"A4H~~%%g{;~:	< 	DNN$@$@$BCNN,,Wd;	668	: 	 ((T[[)9:Lr   N)rC   rD   rE   rF   rK   rG   r   r   rI   rI   X   s    r   rI   c                       e Zd ZdZd Zy)NotSupportAsDataMixinz@Ensure as_data() and from_data() raise NotImplementedError.
    c                 r   t        j                  t        j                         g       }t        j                  | j                  |d      }t        j
                         }|j                  |j                                t        j                  | j                  j                         d       }| j                  t              5  | j                  j                  ||      }d d d        | j                  t              5  | j                  j                  ||      }d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)NrK   r   )r   r#   r$   r%   r   r&   r'   r(   r)   r   r*   assertRaisesNotImplementedErrorrL   rN   )r   r5   r6   r7   r8   rO   rev_datas          r   test_as_data_not_supportedz0NotSupportAsDataMixin.test_as_data_not_supportedy   s    r{{}b1;;t{{D~F,,. ; ; =>kk$.."?"?"A4H23 	@>>))';?D	@23 	F~~//EH	F 	F	@ 	@	F 	Fs   D!;D-!D*-D6N)rC   rD   rE   rF   rV   rG   r   r   rQ   rQ   u   s    
Fr   rQ   c                       e Zd Zy)"DataModelTester_SupportAsDataMixinNrC   rD   rE   rG   r   r   rX   rX          r   rX   c                       e Zd Zy)%DataModelTester_NotSupportAsDataMixinNrY   rG   r   r   r\   r\      rZ   r   r\   c                     | rt         S t        S )z;A helper for returning a unittest TestCase for testing
    )rX   r\   )support_as_datas    r   test_factoryr_      s     1144r   )T)llvmliter   r   r2   
numba.corer   unittestTestCaser   objectrI   rQ   rX   r\   r_   rG   r   r   <module>re      sc     "   Mh'' M` :FF F"	);	
	O,A	
5r   