+
     °³jG  ã                   ó¨   € ^ RI t ^ RIHt ^ RIt^ RIHtHt ^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHt ^RIHt RR	 R
 llt ! R R]P"                  4      tR# )é    N)ÚOptional)ÚnnÚTensor)Úinit)Ú_pair)Ú	Parameter)Ú_assert_has_ops)Ú_log_api_usage_oncec                ó  € V ^8„  d   QhR\         R\         R\         R\        \         ,          R\        \        \        3,          R\        \        \        3,          R\        \        \        3,          R\        \         ,          R	\         /	# )
é   ÚinputÚoffsetÚweightÚbiasÚstrideÚpaddingÚdilationÚmaskÚreturn)r   r   ÚtupleÚint)Úformats   "Ú\/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchvision/ops/deform_conv.pyÚ__annotate__r      s�   € ÷ ]ñ ]Üð]äð]ô ð]ô ”6Õ
ð	]ô
 ”#”s�(�Oð]ô ”3œ�8�_ð]ô ”Cœ�H�oð]ô ”6Õ
ð]ô ñ]ó    c                óÌ  € \         P                  P                  4       '       g4   \         P                  P                  4       '       g   \	        \
        4       \        4        VP                  ^ ,          pVRJp	VfA   \         P                  ! V P                  ^ ,          ^3V P                  V P                  R7      pVf-   \         P                  ! W€P                  V P                  R7      p\        V4      w  r«\        V4      w  rÍ\        V4      w  rïVP                  RR w  ppV P                  w  pp pVP                  ^,          ^V,          V,          ,          pVVP                  ^,          ,          pV^ 8X  d1   \        RVP                  ^,           R^V,          V,           24      h\         P                  P                  P                  V VVVVV
VVVVVVVV	4      # )a³  
Performs Deformable Convolution v2, described in
`Deformable ConvNets v2: More Deformable, Better Results
<https://arxiv.org/abs/1811.11168>`__ if :attr:`mask` is not ``None`` and
Performs Deformable Convolution, described in
`Deformable Convolutional Networks
<https://arxiv.org/abs/1703.06211>`__ if :attr:`mask` is ``None``.

Args:
    input (Tensor[batch_size, in_channels, in_height, in_width]): input tensor
    offset (Tensor[batch_size, 2 * offset_groups * kernel_height * kernel_width, out_height, out_width]):
        offsets to be applied for each position in the convolution kernel.
    weight (Tensor[out_channels, in_channels // groups, kernel_height, kernel_width]): convolution weights,
        split into groups of size (in_channels // groups)
    bias (Tensor[out_channels]): optional bias of shape (out_channels,). Default: None
    stride (int or Tuple[int, int]): distance between convolution centers. Default: 1
    padding (int or Tuple[int, int]): height/width of padding of zeroes around
        each image. Default: 0
    dilation (int or Tuple[int, int]): the spacing between kernel elements. Default: 1
    mask (Tensor[batch_size, offset_groups * kernel_height * kernel_width, out_height, out_width]):
        masks to be applied for each position in the convolution kernel. Default: None

Returns:
    Tensor[batch_sz, out_channels, out_h, out_w]: result of convolution

Examples::
    >>> input = torch.rand(4, 3, 10, 10)
    >>> kh, kw = 3, 3
    >>> weight = torch.rand(5, 3, kh, kw)
    >>> # offset and mask should have the same spatial size as the output
    >>> # of the convolution. In this case, for an input of 10, stride of 1
    >>> # and kernel size of 3, without padding, the output size is 8
    >>> offset = torch.rand(4, 2 * kh * kw, 8, 8)
    >>> mask = torch.rand(4, kh * kw, 8, 8)
    >>> out = deform_conv2d(input, offset, weight, mask=mask)
    >>> print(out.shape)
    >>> # returns
    >>>  torch.Size([4, 5, 8, 8])
N)ÚdeviceÚdtypez�the shape of the offset tensor at dimension 1 is not valid. It should be a multiple of 2 * weight.size[2] * weight.size[3].
Got offset.shape[1]=z,, while 2 * weight.size[2] * weight.size[3]=éþÿÿÿ)ÚtorchÚjitÚis_scriptingÚ
is_tracingr
   Údeform_conv2dr	   ÚshapeÚzerosr   r   r   ÚRuntimeErrorÚopsÚtorchvision)r   r   r   r   r   r   r   r   Úout_channelsÚuse_maskÚstride_hÚstride_wÚpad_hÚpad_wÚdil_hÚdil_wÚ	weights_hÚ	weights_wÚ_Ún_in_channelsÚn_offset_grpsÚn_weight_grpss   &&&&&&&&              r   r$   r$      sš  € ôb �9‰9×!Ñ!×#Ò#¬E¯I©I×,@Ñ,@×,BÒ,BÜœMÔ*ÜÔØ—<‘< •?€Là˜4Ð€Hà‚|Ü�{Š{˜EŸK™K¨�N¨AÐ.°u·|±|È5Ï;É;ÔWˆà‚|Ü�{Š{˜<·±ÀEÇKÁKÔPˆä˜v›Ñ€HÜ˜“>�L€EÜ˜“?�L€EØ!Ÿ<™<¨¨Ð,Ñ€IˆyØ"Ÿ[™[Ñ€A€}�a˜à—L‘L •O¨¨I­¸	Õ(AÕB€MØ! V§\¡\°!¥_Õ4€Mà˜ÔÜð#à#)§<¡<°¥?Ð"3Ð3_Ð`aÐdmÕ`mÐpyÕ`yÐ_zð|ó
ð 	
ô �9‰9× Ñ ×.Ñ.ØØØØØØØØØØØØØØóð r   c                   ó€   a a€ ] tR t^nt oRtRV3R lV 3R llltV3R lR ltRV3R lR lltV3R lR	 ltR
t	Vt
V ;t# )ÚDeformConv2dz
See :func:`deform_conv2d`.
c                óJ   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[ RS[ RS[ RS[/# )	r   Úin_channelsr*   Úkernel_sizer   r   r   Úgroupsr   )r   Úbool)r   Ú__classdict__s   "€r   r   ÚDeformConv2d.__annotate__s   s[   ø€ ÷ $ ñ $ áð$ ñ ð$ ñ ð	$ ñ
 ð$ ñ ð$ ñ ð$ ñ ð$ ñ ñ$ r   c	           	     óz  <€ \         S	V `  4        \        V 4       W,          ^ 8w  d   \        R4      hW',          ^ 8w  d   \        R4      hWn        W n        \        V4      V n        \        V4      V n        \        V4      V n	        \        V4      V n
        Wpn        \        \        P                  ! W!V,          V P                  ^ ,          V P                  ^,          4      4      V n        V'       d&   \        \        P                  ! V4      4      V n        MV P#                  RR4       V P%                  4        R# )r   z'in_channels must be divisible by groupsz(out_channels must be divisible by groupsr   N)ÚsuperÚ__init__r
   Ú
ValueErrorr;   r*   r   r<   r   r   r   r=   r   r    Úemptyr   r   Úregister_parameterÚreset_parameters)
Úselfr;   r*   r<   r   r   r   r=   r   Ú	__class__s
   &&&&&&&&&€r   rC   ÚDeformConv2d.__init__s   sô   ø€ ô 	‰ÑÔÜ˜DÔ!àÕ 1Ô$ÜÐFÓGÐGØÕ  AÔ%ÜÐGÓHÐHà&ÔØ(ÔÜ  Ó-ˆÔÜ˜F“mˆŒÜ˜W“~ˆŒÜ˜h›ˆŒØŒäÜ�KŠK˜°VÕ&;¸T×=MÑ=MÈaÕ=PÐRV×RbÑRbÐcdÕReÓfó
ˆŒ÷ Ü!¤%§+¢+¨lÓ";Ó<ˆD�Ià×#Ñ# F¨DÔ1à×ÑÖr   c                ó   <€ V ^8„  d   QhRR/# )r   r   N© )r   r?   s   "€r   r   r@   ™   s   ø€ ÷ 4ñ 4 $ñ 4r   c                óV  € \         P                  ! V P                  \        P                  ! ^4      R7       V P
                  ee   \         P                  ! V P                  4      w  r^\        P                  ! V4      ,          p\         P                  ! V P
                  V) V4       R# R# )é   )ÚaN)r   Úkaiming_uniform_r   ÚmathÚsqrtr   Ú_calculate_fan_in_and_fan_outÚuniform_)rH   Úfan_inr4   Úbounds   &   r   rG   ÚDeformConv2d.reset_parameters™   sl   € Ü×Ò˜dŸk™k¬T¯YªY°q«\Õ:à�9‰9Ò Ü×:Ò:¸4¿;¹;ÓG‰IˆFØœŸ	š	 &Ó)Õ)ˆEÜ�MŠM˜$Ÿ)™) e V¨UÖ3ñ !r   c                óB   <€ V ^8„  d   QhRS[ RS[ RS[S[ ,          RS[ /# )r   r   r   r   r   )r   r   )r   r?   s   "€r   r   r@   ¡   s/   ø€ ÷ 
ñ 
™Vð 
©Vð 
¹8ÁFÕ;Kð 
ÑW]ñ 
r   c                óŒ   € \        VVV P                  V P                  V P                  V P                  V P
                  VR7      # )a¸  
Args:
    input (Tensor[batch_size, in_channels, in_height, in_width]): input tensor
    offset (Tensor[batch_size, 2 * offset_groups * kernel_height * kernel_width, out_height, out_width]):
        offsets to be applied for each position in the convolution kernel.
    mask (Tensor[batch_size, offset_groups * kernel_height * kernel_width, out_height, out_width]):
        masks to be applied for each position in the convolution kernel.
)r   r   r   r   )r$   r   r   r   r   r   )rH   r   r   r   s   &&&&r   ÚforwardÚDeformConv2d.forward¡   s=   € ô ØØØ�K‰KØ�I‰IØ—;‘;Ø—L‘LØ—]‘]Øô	
ð 		
r   c                ó    <€ V ^8„  d   QhRS[ /# )r   r   )Ústr)r   r?   s   "€r   r   r@   µ   s   ø€ ÷ ñ ™#ñ r   c           	     óÐ  € V P                   P                   R V P                   RV P                   RV P                   RV P
                   2	pYP                  R
8w  d   RV P                   2MR,          pYP                  R8w  d   RV P                   2MR,          pYP                  ^8w  d   RV P                   2MR,          pYP                  f   RMR,          pVR	,          pV# )Ú(z, z, kernel_size=z	, stride=z
, padding=Ú z, dilation=z	, groups=z, bias=FalseÚ)©r   r   ©é   rd   )
rI   Ú__name__r;   r*   r<   r   r   r   r=   r   )rH   Úss   & r   Ú__repr__ÚDeformConv2d.__repr__µ   sÔ   € à�~‰~×&Ñ&Ð' qØ×ÑÐ Ø�×"Ñ"Ð#Ø˜T×-Ñ-Ð.Ø˜Ÿ™�}ð	&ð 	
ð 	
¯L©L¸FÔ,Bˆz˜$Ÿ,™,˜Ñ(ÈÕJˆØ	¯m©m¸vÔ.Eˆ{˜4Ÿ=™=˜/Ñ*È2ÕMˆØ	¯+©+¸Ô*:ˆy˜Ÿ™˜Ñ&ÀÕBˆØ	Ÿy™yÒ0‰^°bÕ8ˆØ	ˆS�ˆàˆr   )	r   r   r=   r;   r<   r*   r   r   r   )rd   r   rd   rd   T)N)re   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rC   rG   rZ   rg   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)rI   r?   s   @@r   r9   r9   n   s8   ù‡ € ñ÷$ õ $ ÷L4ð 4÷
ò 
÷(÷ ð r   r9   )Nrc   rb   rc   N)rQ   Útypingr   r    r   r   Útorch.nnr   Útorch.nn.modules.utilsr   Útorch.nn.parameterr   Útorchvision.extensionr	   Úutilsr
   r$   ÚModuler9   rL   r   r   Ú<module>rw      s9   ðÛ Ý ã ß Ý Ý (Ý (Ý 1å '÷]ô@U�2—9‘9ö Ur   