
    %j              	          d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZmZ e j(                  dedej,                  ej.                  ddf   fd       Zd	 Zi Zd
 Zd Zd Zd Z G d de      Z deee!e"f   defdZ#d Z$de%defdZ&	 d$dddee%e%e%e%f   deeef   de'fdZ(dejR                  fdZ*dedede+fdZ,d  Z-d!ej                  d"efd#Z.y)%    N)IterableListTupleUnion)Image)	Direction)SessionBrokenErrorUiObjectNotFoundErrorfilenamereturnc              #     K   	 ddl m}m}  |d      | z  } ||      5 }|j                         r| 	 ddd       y	 ddd       t        j                  t        j                  d         }|| z  j                         r|| z   yt        j                  j                         | z  j                         r$t        j                  j                         | z   yt        d|  d      # t        $ r ddlm}m} Y w xY w# 1 sw Y   xY ww)z
    Context manager to access a package asset file using importlib.resources.
    
    Args:
        filename (str): The name of the file to locate.
    
    Yields:
        str: The full path to the located file.
    r   )as_filefilesuiautomator2Nz	Resource z# not found in uiautomator2 package.)importlib.resourcesr   r   ImportErrorimportlib_resourcesexistspathlibPathsysargvcwdFileNotFoundError)r   r   r   anchorfbinary_paths         V/var/www/oz-panel.ru/ozpay-pub/venv/lib/python3.12/site-packages/uiautomator2/utils.pywith_package_resourcer      s     76 >"X-F	 A88:G  ,,sxx{+Kh&&(H$$ 	X%--/ll 8++
iz1TU
VV)  7667 sC   DC* DD	DB+D*C>;D=C>>DD
Dc                 B     t        j                          fd       }|S )Nc                 f    | j                         st        | j                         | g|i |S N)runningr	   	_pkg_nameselfargskwargsfns      r   innerzcheck_alive.<locals>.inner:   s0    ||~$T^^44$((((    	functoolswrapsr)   r*   s   ` r   check_aliver0   9   s%    __R) )
 Lr+   c                 B     t        j                          fd       }|S )Nc                      | t        |j                               f}t        j                  |      }||S  | i |xt        |<   }|S r"   )	frozensetitems_cached_valuesget)r'   r(   keyvalueretr)   s        r   r*   zcache_return.<locals>.innerG   sS    46<<>23""3'L$&$7$77sc
r+   r,   r/   s   ` r   cache_returnr:   F   s%    __R  Lr+   c                 B     t        j                          fd       }|S )Nc                     j                   j                  d      }| j                  j                  d|||d         | g|i |}| j                  j                  d||||       y )N_beforeafter)__name__lstripserverhooks_apply)r&   r'   r(   namer9   r)   s        r   r*   zhooks_wrap.<locals>.innerU   s_    {{!!#&$fdC'''tVSAr+   r,   r/   s   ` r   
hooks_wraprE   T   s'    __RB B Lr+   c                 B     t        j                          fd       }|S )Nc                     |j                  d| j                        }| j                  |      s&t        d| j                  j                         d       | g|i |S )NtimeoutrH   i)codemessage)popwait_timeoutwaitr
   selector__str__)r&   r'   r(   rH   r)   s       r   r*   zwrap_wait_exists.<locals>.innera   sc    **Y(9(9:yyy)'==002)   $((((r+   r,   r/   s   ` r   wrap_wait_existsrQ   `   s%    __R) ) Lr+   c                     | d   |d   kD  r| d   n|d   }| d   |d   k  r| d   n|d   }| d   |d   kD  r| d   n|d   }| d   |d   k  r| d   n|d   }||||fS )Ntopbottomleftright )rect1rect2rS   rT   rU   rV   s         r   	intersectrZ   n   s    ,u5%,5<C %h%/ AU8_uHF!&ME&M95=uV}D#GnuW~=E'N5DEeV##r+   c                   0    e Zd ZdZd Zd Zd ZddZd Zy)	Existsz!Exists object with magic methods.c                     || _         y r"   )uiobject)r&   r^   s     r   __init__zExists.__init__z   s	     r+   c                 t    | j                   j                  j                  | j                   j                        S )z$Magic method for bool(self) python2 )r^   jsonrpcexistrO   r&   s    r   __nonzero__zExists.__nonzero__}   s'    }}$$**4==+A+ABBr+   c                 "    | j                         S )z% Magic method for bool(self) python3 )rd   rc   s    r   __bool__zExists.__bool__   s    !!r+   c                 T    |r| j                   j                  |      S t        |       S )zcMagic method for self(args).

        Args:
            timeout (float): exists in seconds
        rI   )r^   rN   bool)r&   rH   s     r   __call__zExists.__call__   s)     ==%%g%66Dzr+   c                 *    t        t        |             S r"   )strrh   rc   s    r   __repr__zExists.__repr__   s    4:r+   N)r   )	r@   
__module____qualname____doc__r_   rd   rf   ri   rl   rW   r+   r   r\   r\   x   s    +!C"r+   r\   r'   c                     t        | t              r| S dj                  t        t	        t
        j                  |                   S )N )
isinstancerk   joinlistmapshlexquote)r'   s    r   list2cmdlinerx      s0    $88DU[[$/011r+   c                 4   t        |       sJ d       t        j                  |       }|j                  j	                         D ci c]  }||v r|||    }} |j
                  |i |}|j                           | |j                  i |j                  S c c}w )z
    Call function without known all the arguments

    Args:
        fn: function
        args: arguments
        kwargs: key-values
    
    Returns:
        as the fn returns
    zfirst argument must be callable)	callableinspect	signature
parameterskeysbindapply_defaultsr'   r(   )r)   r'   r(   str7   	fn_kwargsbas          r   inject_callr      s     B<:::<			2	B ==%%'3&= 	VC[I  
$	$)	$Brww$"))$$s   Bsizec                     d}d}d}| |k\  rdj                  | |z        S | |k\  rdj                  | |z        S dj                  | |z        S )Ni   i   i   @z	{:.1f} GBz	{:.1f} MBz	{:.1f} KB)format)r   _KB_MB_GBs       r   
natualsizer      s^    
C
C
Cs{!!$*--	!!$*--!!$*--r+   dzuiautomator2.Devicebounds	directionscalec                 (     fd}d|cxk  rdk  sJ  J t        |      dk(  sJ |\  }}}}||z
  ||z
  }
}	t        |	d|z
  z        dz  }t        |
d|z
  z        dz  }||z   ||
dz  z   f}||	dz  z   ||z   f}||z
  ||
dz  z   f}||	dz  z   ||z
  f}|t        j                  k(  r
 |||       y|t        j                  k(  r
 |||       y|t        j
                  k(  r
 |||       y|t        j                  k(  r
 |||       yt        d|      )	z
    Args:
        d: Device object
        bounds: list of [lx, ly, rx, ry]
        direction: one of ["left", "right", "up", "down"]
        scale: percent of swipe, range (0, 1.0)
    
    Raises:
        AssertionError, ValueError
    c                 F    j                  | d   | d   |d   |d          y )Nr      )swipe)_from_tor   s     r   _swipezswipe_in_bounds.<locals>._swipe   s%    	a%(CFCF3r+   r   g      ?   r      zUnknown direction:N)lenintr   LEFTRIGHTUPDOWN
ValueError)r   r   r   r   r   lxlyrxrywidthheighth_offsetv_offsetrU   uprV   rT   s   `                r   swipe_in_boundsr      sC   4 uv;!NBBGR"W6E5AI&'1,H6QY'(A-H="v{**D	eqj"x-	'BM2!++E%1*_b8m+FINN"ud	ioo	%tU	ill	"vr	inn	$r6-y99r+   r)   c                 B     t        j                          fd       }|S )Nc                     t        | d      st        j                         | _        | j                  5   | g|i |cd d d        S # 1 sw Y   y xY w)N_lock)hasattr	threadingLockr   r%   s      r   r*   z"thread_safe_wrapper.<locals>.inner   sI    tW%")DJZZ 	-d,T,V,	- 	- 	-s   A		Ar,   r/   s   ` r   thread_safe_wrapperr      s%    __R- - Lr+   expect_versionactual_versionc                     dt         fd} ||       } ||      }t        |      t        |      cxk(  rdk(  sJ d        J d       |d   |d   k(  r"|d   |d   k  ry|d   |d   k(  r|d   |d   k  S y	)
z
    Check if the actual version is compatiable with the expect version

    Args:
        expect_version: expect version, e.g. 1.0.0
        actual_version: actual version, e.g. 1.0.0

    Returns:
        bool: True if compatiable, otherwise False
    versionc                 R    t        t        t        | j                  d                  S )N.)tupleru   r   split)r   s    r   _parse_versionz.is_version_compatiable.<locals>._parse_version  s    SgmmC0122r+      zversion format errorr   r   Tr   F)rk   r   )r   r   r   evsavss        r   is_version_compatiabler      s    3 3 
(C

(Cs8s3x$1$<&<<$<&<<$
1vQq6CF?q6SVq6SV##r+   c                       fd}|S )Nc                 F     t        j                          fd       }|S )Nc                  l    t        j                  dj                   d t        d        | i |S )Nz
Function 'z' is deprecated: r   )
stacklevel)warningswarnr@   DeprecationWarning)r'   r(   funcreasons     r   wrapperz.deprecated.<locals>.decorator.<locals>.wrapper  s7    MMJt}}o5FvhOQcpqr(((r+   r,   )r   r   r   s   ` r   	decoratorzdeprecated.<locals>.decorator  s%    			) 
	) r+   rW   )r   r   s   ` r   
deprecatedr     s     r+   imr   c                    |dk(  r| S |dk(  rE	 dd l }dd l}| j                  d      } |j                  |j	                  |       |j
                        S t        d|      # t        $ r t        j                  d        w xY w)Npillowopencvr   RGBzmissing lib: cv2 or numpyzUnsupported format:)
cv2numpyconvertcvtColorarrayCOLOR_RGB2BGRr   r   r   r   )r   r   r   nps       r   image_convertr     s    		E"B<<c.?.?@@ *F
33  	MM56	s   AA  A>)g333333?)/
contextlibr-   r{   r   rv   r   r   typingr   r   r   r   r   PILr   uiautomator2._protor   uiautomator2.exceptionsr	   r
   contextmanagerrk   	Generatorr   r   r0   r5   r:   rE   rQ   rZ   objectr\   rt   r   rx   r   r   r   floatr   Callabler   rh   r   r   r   rW   r+   r   <module>r      sb        
    / /  ) M  WC  WF,<,<W\\4QU=U,V  W  WF $V 62uS$-. 23 2%0
.S 
.S 
.  $'(:, (:!#sC"45(:$Y^4(: !(:V	FOO 	3   24ekk 43 4r+   