
    DhRN                        d dl Z d dlZd dlmZmZmZmZmZmZmZm	Z	m
Z
mZ  e j                  e      ZdZdZdZdZdZdZd	Zd
ZdZ G d de      Zd Z G d dej6                        Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&g dZ'y)    N)
ffivips_libError	_to_bytes
_to_stringGValuetype_maptype_from_namenickname_findat_least_libvips                   @      c                   .    e Zd ZdZdZd Zi Zed        Zy)
IntrospectzBuild introspection data for operations.

    Make an operation, introspect it, and build a structure representing
    everything we know about it.

    )descriptionflagsdetailsrequired_inputoptional_inputrequired_outputoptional_outputdoc_optional_inputdoc_optional_outputmember_xmethod_argsc                    t         j                  |      }|j                         | _        t	        j
                  |j                        | _        g fdt        dd      rt        j                  d      }t        j                  d      }t        j                  d      }t	        j                  |j                  |||      }|dk7  rt        d      |d   }|d   }|d   }t        d|      D ]  } t        ||         ||           nYfd	}	t        j                   d
|	      }
t	        j"                  |j                  |
t        j$                  t        j$                         i | _        D ]7  \  }}|||j)                  |      |j+                  |      d| j&                  |<   9 g | _        g | _        g | _        g | _        g | _        g | _        D ]e  \  }}|t8        z  dk7  rZ|t:        z  dk7  rN|t<        z  dk(  rB| j,                  j?                  |       |t@        z  dk7  r| j0                  j?                  |       |tB        z  dk7  r3|t:        z  dk7  r'|t<        z  dk(  r| j0                  j?                  |       |t8        z  dk7  rN|t:        z  dk(  rB| j.                  j?                  |       |t<        z  dk(  r| j4                  j?                  |       |tB        z  dk7  s|t:        z  dk(  s"| j2                  j?                  |       |t<        z  dk(  sK| j6                  j?                  |       h d | _"        | j,                  D ]0  }| j&                  |   }|d   tF        jH                  k(  s)|| _"         n | jD                  @tK        | j,                        | _&        | jL                  jO                  | jD                         y | j,                  | _&        y )Nc                 j    |t         z  dk7  r&| j                  dd      } j                  | |g       y y )Nr   -_)
_CONSTRUCTreplaceappend)namer   	argumentss     s/var/www/fastuser/data/www/generator.snapmosaic.io/flask_app/venv/lib/python3.12/site-packages/pyvips/voperation.pyadd_argsz%Introspect.__init__.<locals>.add_args-   s9    
"q( ||C-  $/	 )    r      z	char**[1]zint*[1]zint[1]r   z&unable to get arguments from operationc                 p     t        |j                        |j                         t        j                  S N)r   r)   r   r   NULL)selfpspecargument_classargument_instanceabr,   s         r+   add_constructz*Introspect.__init__.<locals>.add_constructC   s%    EJJ/1E1EFxxr-   VipsArgumentMapFn)r)   r   blurbtyper;   )(	Operationnew_from_nameget_descriptionr   r   vips_operation_get_flagspointerr   r   r   newvips_object_get_argsvobjectr   ranger   callbackvips_argument_mapr1   r   	get_blurb
get_typeofr   r   r   r   r   r   _INPUT	_REQUIRED_DEPRECATEDr(   _MODIFY_OUTPUTr    r   
image_typelistr!   remove)r2   operation_nameopp_namesp_flagsp_n_argsresultn_argsir8   cbr)   r   r   r,   r*   s                 @@r+   __init__zIntrospect.__init__$   s   $$^4--/66rzzB
 		0 Aq!ggk*Gggi(Gwwx(H222::3:GXOF{DEEajGajGa[F1f% =GAJ/<= 
 1=AB&&rzz2sxxJ
 $ 	KD%d+d+	"DLL	 ! !! #%#% $ 	:KD%A%Y&1,[(Q.##**40 GO)((//5Q&Y&1,[(Q.$$++D1 A%Y&1,##**40K'A-++2248Q&Y&1,$$++D1K'A-,,33D9;	:@ '' 	Dll4(Gv&"3"33 $		 ==$#D$7$78D##DMM2#22Dr-   c                 l    || j                   vrt        |      | j                   |<   | j                   |   S r0   )_introspect_cacher   )clsrQ   s     r+   getzIntrospect.get   s6    !6!664>~4NC!!.1$$^44r-   N)	__name__
__module____qualname____doc__	__slots__rZ   r\   classmethodr^    r-   r+   r   r      s/    ,Ik3\ 5 5r-   r   c                      | |      r|S t        |t              st        |t              r|D ]  }t        | |      }||c S  y r0   )
isinstancerO   tuple_find_inside)predthingxrV   s       r+   ri   ri      sL    E{%*UE": 	A!$*F!		 r-   c                        e Zd ZdZdZi Z fdZed        Z fdZ	ed        Z
ed        Zed        Zed	        Z xZS )
r<   zUCall libvips operations.

    This class wraps the libvips VipsOperation class.

    re   c                 ,    t         t        |   |       y r0   )superr<   rZ   )r2   r@   	__class__s     r+   rZ   zOperation.__init__   s    i'0r-   c                     t        j                  t        |             }|t        j                  k(  rt        d|        t        |      S )Nzno such operation )r   vips_operation_newr   r   r1   r   r<   )rQ   vops     r+   r=   zOperation.new_from_name   s@    )))N*CD#((?,^,<=>>~r-   c                    |r| j                  |      }|t        j                  j                  k(  r!t        j                  j                  ||      }nJ|t        j                  j                  k(  r-|D cg c]"  }t        j                  j                  ||      $ }}|t        z  dk7  r|j                         j                         }t        t        | 3  ||       y c c}w )Nr   )rH   pyvipsr   rN   Image	_imageizearray_image_typerL   copycopy_memoryro   r<   set)r2   r)   r   match_imagevaluegtyperl   rp   s          r+   r{   zOperation.set   s    
 OOD)E000..{EB&--888"')  //Q? ) ) GO! JJL,,.Ei"4/)s   4'Cc           	      j   t         j                  d|        t        j                  |       }t	        |j
                        t	        |      k7  r0t        |  dt	        |j
                         dt	        |       d      t        j                  |       }|j                  dd      }|j                  |      st        d|        t        d |      }t         j                  d	|       g d
 fd}t        |j
                  |      D ]5  \  }}	t        ||	       |j                  ||j                  |   d   ||	       7 |D ]  }||j                  vr||j                   vrt        |  d|       ||   }	|j                  |   }
|
d   t"        z  dk7  rt         j%                  d| |       t        ||	       |j                  ||
d   ||	        t'        j(                  |j*                        }|t,        j.                  k(  r-t'        j0                  |j2                         t        d|        t        |      }fd}g }|j4                  D ]0  }|j                  |      }	t        ||	       |j7                  |	       2 i }|j                   D ])  }||v s|j                  |      }	t        ||	       |	||<   + t	        |      dkD  r|j7                  |       t'        j0                  |j2                         t	        |      dk(  rd}nt	        |      dk(  r|d   }t         j                  d|       |S )zCall a libvips operation.

        Use this method to call any libvips operation. For example::

            black_image = pyvips.Operation.call('black', 10, 10)

        See the Introduction for notes on how this works.

        z'VipsOperation.call: operation_name = %sz needs z arguments, but z givenstring_options zunable to call c                 6    t        | t        j                        S r0   )rg   ru   rv   )rl   s    r+   <lambda>z Operation.call.<locals>.<lambda>   s    Z6<<-H r-   z$VipsOperation.call: match_image = %sc                 D    | D ]  }t        |      t        |      k(  s y y)NTF)id)arrayrl   ys      r+   containsz Operation.call.<locals>.contains  s(      a5BqE>  r-   c                     t        | t        j                        r,| j                  D ]  } |      rj	                  |        yNF)rg   ru   rv   _referencesr(   )rl   rX   r   
referencess     r+   add_referencez%Operation.call.<locals>.add_reference  sA    !V\\* -A#J2"))!,- r-   r   z$ does not support optional argument r   z%s argument %s is deprecatedc                 p    t        | t        j                        r| j                  j	                         yr   )rg   ru   rv   r   extend)rl   r   s    r+   set_referencez%Operation.call.<locals>.set_reference1  s&    !V\\*$$Z0r-   Nr   zVipsOperation.call: result = %s)loggerdebugr   r^   lenr   r   r<   r=   pop
set_stringri   zipr{   r   r   r   rK   infor   vips_cache_operation_buildr@   r   r1   vips_object_unref_outputsrC   r   r(   )rQ   argskwargsintrorR   r   r|   r   r)   r}   r   rs   r   rV   optsr   r   s                  @@r+   callzOperation.call   s&    	>O ~.u##$D	1>*'#e6J6J2K1L M**-d)F< = = $$^4  $4b9}}^,/.)9:;;
 ##H#') 	;[I 
		 u33T: 	KKD%.FF4t,W5{EJ	K
  	?DE000 5 55~. /((,v/ 0 0 4LEmmD)G ;.14:*D2 .FF4);>	?" 11"**=#((?..rzz:/.)9:;;s^	 )) 	!DFF4LE.MM% 	! )) 	#Dv~t]E2"T
		# t9q=MM$**2::6v;!F[AAYF6?r-   c           	         | t         j                  v rt         j                  |    S t        j                  |       j                  t
        z  dk7  rt        dd|  d      j                  d   j                         j                  dd z   dz   }|dz  }|d	d
j                  j                        z   dz   z  }j                  |j                  dz   | z   dz   z  }n|d| z   dz   z  }g }|j                  z  }|j                  D cg c]-  }|dz   t        j                  j                   |   d         z   / c}z  }|j"                  D cg c]  }|dz   	 c}z  }|d
j                  |      dz   z  }fd}|dz  }j                  D ]  }| ||      z  } |dz  }j                  | |j                        z  }j                  D ]  }| ||      z  } t%        j                        dkD  r!|dz  }j                  D ]  }| ||      z  } t%        j"                        dkD  r!|dz  }j"                  D ]  }| ||      z  } |dz  }|t         j                  | <   |S c c}w c c}w )zYMake a google-style docstring.

        This is used to generate help() output.

        r   No such operator.
operator "" is deprecatedr   N.

	Example:
   ,  = .(pyvips.Image.=r;   =boolz)
c                 z    j                   |    }dj                  | t        j                  |d         |d         S )Nz    {0} ({1}): {2}
r;   r:   )r   formatr   gtype_to_python)r)   r   r   s     r+   argstrz,Operation.generate_docstring.<locals>.argstru  s?    mmD)G+F4!11'&/B"7+-.r-   z

Returns:
z
Args:
z
Keyword args:
z
Other Parameters:
z
Raises:
    :class:`.Error`
)r<   _docstring_cacher   r^   r   _OPERATION_DEPRECATEDr   r   upperjoinr   r    r!   r   r   r   r   r   r   )rQ   rV   r   rl   r   r)   r   s         @r+   generate_docstringzOperation.generate_docstringS  s    Y777--n==~.KK//A5+$^$4ODF F ""1%++-0A0A!"0EEO,%$))E$9$9::UBB>>%enns*^;cAAFo6<<F!!!224 S611%--2B62JKK 4 	4335 W 5 	5$))D/E))	. 	. )) 	#DfTl"F	# 	+>>%fU^^,,F%% 	#DfTl"F	# u''(1,))F00 '&,&' u(()A---F11 '&,&' 	44 6<	"">2M45s   2I-I2c           	         t         j                  |       }|j                  t        z  dk7  rt	        dd|  d      |j
                  d}nd}g }||j                  z  }||j                  D cg c]-  }|dz   t        j                  |j                  |   d	         z   / c}z  }||j                  D cg c]  }|d
z   	 c}z  }|| dz   dj                  |      z   dz   z  }||j                  d   j                         |j                  dd z   dz   z  }|dz  }|dz  }t        |j                         dkD  r!|dj                  |j                         dz   z  }|j
                  ||j
                  dz   | z   dz   z  }n|d| z   dz   z  }g }||j                  z  }||j                  D cg c]-  }|dz   t        j                  |j                  |   d	         z   / c}z  }|dj                  |      z  }|dz  }|j                  |j                  z   D ]B  }|j                  |   }|d| d|d    dz  }|d| dt        j                  |d	          dz  }D |j                  D ]'  }|d| d|j                  |   d    dz  }|d| dz  }) |j                   D cg c]'  }t        j                  |j                  |   d	         ) }}t        |      dk(  r|d   }nddj                  |      z   dz   }t        |j                        dkD  r |dgz  }|ddj                  |      z   dz   z  }|d |z   dz   z  }|d!z  }|S c c}w c c}w c c}w c c}w )"z]Make a sphinx-style docstring.

        This is used to generate the off-line docs.

        r   r   r   r   Nz.. method:: z.. staticmethod:: r   r;   r   r   r   z)

r   r   r   z    r   r   r   z:param z: r:   
z:type z: enable output: z: bool
zlist[]zDict[str, mixed]z	 or list[z:rtype: z:raises Error:
)r   r^   r   r   r   r    r!   r   r   r   r   r   r   r   r   r   r   )	rQ   r   rV   r   rl   r)   r   output_typesoutput_types	            r+   generate_sphinxzOperation.generate_sphinx  s    ~.KK//A5+$^$4ODF F >>%#F)F!!!224 S611%--2B62JKK 4 	4335 W 5 	5.3&487BB%##A&,,.ab!"$+, 	, 	,&u$$%)dii 5 56>>F>>%enns*^;cAAFo6<<F!!!224 S611%--2B62JKK 4 	4$))D/!'%%(@(@@ 	GDmmD)GvR(8'9<<FvR 00AB"F GF	G
 -- 	.D ')).t)<W)E(FbJ KFtfH--F	. %*$9$9;  ..u}}T/B6/JK ; ;|!&q/K!DIIl$;;cAKu(()A-/00L;<)@@3FFK*{*T11$$a45"4;s   -2L<3M'2M,Mc                  (   dg} i | D ]  }t        j                  d|      }||<    g fdt        t        d             j	                          g d}D cg c]	  }||vs| c}t        d       t        d       t        d       t        d       t        d	       D ]  }t        d
|         t                t                D ]7  }t        j                  |      }|j                  dd      }t        d|z          9 yc c}w )ac  Generate sphinx documentation.

        This generates a .rst file for all auto-generated image methods. Use it
        to regenerate the docs with something like::

            $ python -c "import pyvips; pyvips.Operation.generate_sphinx_all()" > x

        And copy-paste the file contents into doc/vimage.rst in the appropriate
        place.

        cropVipsOperationc                     | v r|    }nt        |       }	 t        j                  |       j                  |       t        |        t        j                  S # t        $ r Y 'w xY wr0   )r   r<   r   r(   r   r	   r   r1   )r~   r6   r7   r)   add_namealias_gtypes	all_namess       r+   r   z/Operation.generate_sphinx_all.<locals>.add_name  si    $#E*$U+))$/  & UH%88O  s   &A 	A&%A&)scale
ifthenelsebandjoinbandrankz.. class:: Imagez   :noindex:
z   .. rubric:: Methods
z   .. autosummary::z      :nosignatures:
z      ~r   z
      r   N)	ru   	type_findr	   r
   sortprintr<   r   r'   )	aliasr)   r~   excluderl   docstrr   r   r   s	         @@@r+   generate_sphinx_allzOperation.generate_sphinx_all  s      	'D$$_d;E"&L	'
 		  	0(; B )>1Qg-=Q>	 	 !()#$&' 	$DGD6"#	$ 	 	"D..t4F^^D*5F%&.!	" ?s   !	D+D)r_   r`   ra   rb   rc   r   rZ   staticmethodr=   r{   r   r   r   r   __classcell__)rp   s   @r+   r<   r<      s    
 I 1  0, x xt A AF B BH ?" ?"r-   r<   c                 .    t        j                  |        y)z8Set the maximum number of operations libvips will cache.N)r   vips_cache_set_maxmxs    r+   cache_set_maxr     s    #r-   c                 .    t        j                  |        y)z(Limit the operation cache by memory use.N)r   vips_cache_set_max_memr   s    r+   cache_set_max_memr   $  s    ##B'r-   c                 .    t        j                  |        y)z2Limit the operation cache by number of open files.N)r   vips_cache_set_max_filesr   s    r+   cache_set_max_filesr   )  s    %%b)r-   c                 .    t        j                  |        y)zTurn on libvips cache tracing.N)r   vips_cache_set_trace)traces    r+   cache_set_tracer   .  s    !!%(r-   c                  *    t        j                         S )z8Get the maximum number of operations libvips will cache.)r   vips_cache_get_maxre   r-   r+   cache_get_maxr   3  s    &&((r-   c                  *    t        j                         S )z-Get the current size of the operations cache.)r   vips_cache_get_sizere   r-   r+   cache_get_sizer   8  s    ''))r-   c                  *    t        j                         S )z,Get the operation cache limit by memory use.)r   vips_cache_get_max_memre   r-   r+   cache_get_max_memr   =  s    **,,r-   c                  *    t        j                         S )z6Get the operation cache limit by number of open files.)r   vips_cache_get_max_filesre   r-   r+   cache_get_max_filesr   B  s    ,,..r-   c                 H    t        dd      rt        j                  |        yy)z1Set the block state for all untrusted operations.r      N)r   r   vips_block_untrusted_set)states    r+   block_untrusted_setr   G  s    2))%0 r-   c                 \    t        dd      r t        j                  t        |       |       yy)z*Set the block state for a named operation.r   r   N)r   r   vips_operation_block_setr   )r)   r   s     r+   operation_block_setr   M  s%    2)))D/5A r-   )r   r<   r   r   r   r   r   r   r   r   r   r   )(loggingru   r   r   r   r   r   r   r	   r
   r   r   	getLoggerr_   r   rJ   r&   	_SET_ONCE_SET_ALWAYSrI   rM   rK   rL   r   objectr   ri   
VipsObjectr<   r   r   r   r   r   r   r   r   r   r   __all__re   r-   r+   <module>r      s     > > > 
		8	$ 	
		

  B5 B5Np"!! p"f$
(
*
)
)
*
-
/
1Br-   