U
    ?h                     @   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   Z	unliteral).0nametyp r   _/var/www/html/venv/lib/python3.8/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   s   t | S r   )MyStruct_get_namer   r   r   r   r	   ,   s    zMyStruct.namec                 C   s   t | S 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   s   | j S r   )r	   r   r   r   r   r   9   s    r   c                 C   s   | j S 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   npZzerosr	   randomr   )bobr   r   r   make_bob]   s    z9TestStructRefUsage.test_type_definition.<locals>.make_bobz: c                 S   s   t j| j|j S r   r)   ZlinalgZnormr   )abr   r   r   distancem   s    z9TestStructRefUsage.test_type_definition.<locals>.distance)	r)   r*   seedr   r   r	   r   ZassertEquallen)r   r$   alicer,   r+   r0   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TypingErrorr0   c                    s*   t |ts dt d| dd }|S )Nz*other* must be a z; got c                 S   s   t j| j|j S r   r-   )r   otherr   r   r   impl   s    zJTestStructRefUsage.test_overload_method.<locals>.ol_distance.<locals>.impl)
isinstancer   )r   r8   r9   r6   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*   r0   )r3   r+   r   r   r   test   s    z5TestStructRefUsage.test_overload_method.<locals>.test)Znumba.core.extendingr5   Znumba.core.errorsr7   r   r   ZassertIsInstancefloat)r   r5   r;   r<   r   r6   r   test_overload_methodw   s    
z'TestStructRefUsage.test_overload_methodN)r   r   r   r4   r>   r   r   r   r   r   L   s   )r   )Zunittestnumpyr)   Znumbar   Z
numba.corer   Znumba.experimentalr   Znumba.tests.supportr   registerZ	StructRefr   r   r   r   r   Zdefine_proxyZTestCaser   r   r   r   r   <module>   s   

