
    3j                    L    S SK Jr  S SKJr  S SKr\ " S S5      5       rSS jrg)    )annotations)	dataclassNc                  x    \ rS rSr% SrSrS\S'    SrS\S'    SrS	\S
'    S r	\
SS j5       rSS jrSS jrSrg)SizeRequirements   z7
A set of requirements for the size of an input image.
r   intminimum   multiple_ofFboolsquarec                    U R                   S:  d   S5       eU R                  S:  d   S5       eU R                   U R                  -  S:w  a/  U R                   U R                  -  S-   U R                  -  U l         g g )Nr   zminimum must be >= 0r
   zmultiple_of must be >= 1)r	   r   selfs    U/home/wildlama/miniconda3/lib/python3.13/site-packages/spandrel/__helpers/size_req.py__post_init__SizeRequirements.__post_init__'   sv    ||q 8"88 1$@&@@$<<$***a/ LLD,<,<<q@DDTDTTDL 0    c                |    U R                   S:H  =(       a'    U R                  S:H  =(       a    U R                  (       + $ )zq
Returns True if no size requirements are specified.

If True, then `check` is guaranteed to always return True.
r   r
   )r	   r   r   r   s    r   noneSizeRequirements.none.   s.     ||q NT%5%5%:N4;;Nr   c                *    U R                  X5      S:H  $ )zK
Returns whether the given width and height satisfy the size requirements.
)r   r   )get_padding)r   widthheights      r   checkSizeRequirements.check7   s     .&88r   c                    SS jn[        U R                  U5      n[        U R                  U5      nU" X@R                  5      nU" XPR                  5      nU R                  (       a  [        XE5      =pEXA-
  XR-
  4$ )z
Given an image size, this returns the minimum amount of padding necessary to satisfy the size requirements. The returned padding is in the format `(pad_width, pad_height)` and is guaranteed to be non-negative.
c                *    X-  S:X  a  U $ X-  S-   U-  $ )Nr   r
    )xmods     r   ceil_modulo1SizeRequirements.get_padding.<locals>.ceil_moduloB   s!    w!|HqLC''r   )r!   r   r"   r   returnr   )maxr	   r   r   )r   r   r   r#   whs         r   r   SizeRequirements.get_padding=   sk    
	(
 T\\5)T\\6*++,++,;;IAy!*$$r   )r	   N)r%   r   )r   r   r   r   r%   r   )r   r   r   r   r%   ztuple[int, int])__name__
__module____qualname____firstlineno____doc__r	   __annotations__r   r   r   propertyr   r   r   __static_attributes__r    r   r   r   r      s`     GS K FDU O O9%r   r   c                   U R                   S   nU R                   S   nUR                  X#5      u  pEU(       d  U(       a  [        XBS-
  5      n[        XSS-
  5      n[        R                  R
                  R                  U SUSU4S5      n XF-  nXW-  n[        R                  R
                  R                  U SUSU4S5      n SU 4$ SU 4$ )	Nr
   r   reflect	replicateTF)shaper   mintorchnn
functionalpad)treqr'   r(   pad_wpad_hreflect_pad_wreflect_pad_hs           r   
pad_tensorrC   S   s    	A	A??1(LEEq5)Eq5)HH##A=!]'KYW 	HH##A5!U';[IQwaxr   )r=   ztorch.Tensorr>   r   )
__future__r   dataclassesr   r9   r   rC   r    r   r   <module>rF      s0    " !  G% G% G%Tr   