o
    ۾i                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 ejG dd dejZG dd	 d	ejZed
d Zedd Zeeeddg e
G dd de jZdS )    N)njit)types)	structref)skip_unless_scipyc                   @   s   e Zd Zdd ZdS )MyStructTypec                 C   s   t dd |D S )Nc                 s   s"    | ]\}}|t |fV  qd S N)r   	unliteral).0nametyp r   a/home/ubuntu/.local/lib/python3.10/site-packages/numba/tests/doc_examples/test_structref_usage.py	<genexpr>   s     z1MyStructType.preprocess_fields.<locals>.<genexpr>)tuple)selffieldsr   r   r   preprocess_fields   s   zMyStructType.preprocess_fieldsN)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @   s,   e Zd Zdd Zedd Zedd ZdS )MyStructc                 C   s   t j| ||S r   )r   StructRefProxy__new__)clsr
   vectorr   r   r   r       s   zMyStruct.__new__c                 C      t | S r   )MyStruct_get_namer   r   r   r   r
   ,   s   zMyStruct.namec                 C   r   r   )MyStruct_get_vectorr   r   r   r   r   3   s   zMyStruct.vectorN)r   r   r   r   propertyr
   r   r   r   r   r   r      s    
r   c                 C      | j S r   )r
   r   r   r   r   r   9   s   r   c                 C   r    r   r   r   r   r   r   r   @   s   r   r
   r   c                   @   s   e Zd Zdd Zdd ZdS )TestStructRefUsagec                    s   t jd g   fdd}tdt jdd}tdd }| }||j d	|j  ||j d	|j  td
d }|||| | t d d S )Nr   c                     s     |  d S r   )append)argsbufr   r   printS   s   z6TestStructRefUsage.test_type_definition.<locals>.printAlice   r!   c                  S   s*   t dtdd} d| _tjd| _| S )Nunnamedr)   r!   Bob)r   npzerosr
   randomr   )bobr   r   r   make_bob]   s   z9TestStructRefUsage.test_type_definition.<locals>.make_bobz: c                 S      t j| j|j S r   r,   linalgnormr   )abr   r   r   distancem   s   z9TestStructRefUsage.test_type_definition.<locals>.distance)	r,   r.   seedr   r   r
   r   assertEquallen)r   r'   alicer0   r/   r7   r   r%   r   test_type_definitionN   s   

z'TestStructRefUsage.test_type_definitionc                    sL   ddl m} ddlm  |td fdd}tdd }| | t d S )	Nr   )overload_methodTypingErrorr7   c                    s*   t |ts dt d| dd }|S )Nz*other* must be a z; got c                 S   r1   r   r2   )r   otherr   r   r   impl   s   zJTestStructRefUsage.test_overload_method.<locals>.ol_distance.<locals>.impl)
isinstancer   )r   r@   rA   r>   r   r   ol_distance   s   
z<TestStructRefUsage.test_overload_method.<locals>.ol_distancec                  S   s2   t dtjdd} t dtjdd}| |S )Nr(   r)   r!   r+   )r   r,   r.   r7   )r;   r/   r   r   r   test   s   
z5TestStructRefUsage.test_overload_method.<locals>.test)numba.core.extendingr=   numba.core.errorsr?   r   r   assertIsInstancefloat)r   r=   rC   rD   r   r>   r   test_overload_methodw   s   
z'TestStructRefUsage.test_overload_methodN)r   r   r   r<   rI   r   r   r   r   r"   L   s    )r"   )unittestnumpyr,   numbar   
numba.corer   numba.experimentalr   numba.tests.supportr   register	StructRefr   r   r   r   r   define_proxyTestCaser"   r   r   r   r   <module>   s    

