Ë
    Z^(h[  ã                   ó4   — d dl Zd dlmZ dd„Zd„ Zdd„Zd„ Zy)é    Nc                 óÆ   ‡‡‡— ddl mŠ ddlmc mŠ ˆˆˆfd„}t        | t        «      r*| D �cg c]
  } ||«      ‘Œ }}t        j                  |«      S  || «      }|S c c}w )aB  Render matplotlib figure to numpy format.

    Note that this requires the ``matplotlib`` package.

    Args:
        figures (matplotlib.pyplot.figure or list of figures): figure or a list of figures
        close (bool): Flag to automatically close the figure

    Returns:
        numpy.array: image in [CHW] order
    r   Nc                 ó€  •— ‰	j                  | «      }|j                  «        t        j                  |j	                  «       t        j
                  ¬«      }| j                  j                  «       \  }}|j                  ||dg«      d d …d d …dd…f   }t        j                  |dd¬«      }‰r‰j                  | «       |S )N©Údtypeé   r   é   é   )ÚsourceÚdestination)ÚFigureCanvasAggÚdrawÚnpÚ
frombufferÚbuffer_rgbaÚuint8ÚcanvasÚget_width_heightÚreshapeÚmoveaxisÚclose)
Úfigurer   ÚdataÚwÚhÚ	image_hwcÚ	image_chwr   ÚpltÚplt_backend_aggs
          €€€ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/utils/tensorboard/_utils.pyÚrender_to_rgbz&figure_to_image.<locals>.render_to_rgb   s™   ø€ Ø ×0Ñ0°Ó8ˆØ�‰ŒÜŸM™M¨&×*<Ñ*<Ó*>ÄbÇhÁhÔOˆØ�}‰}×-Ñ-Ó/‰ˆˆ1Ø—L‘L ! Q¨ Ó+ªAªq°!°A°#¨IÑ6ˆ	Ü—K‘K 	°!ÀÔCˆ	ÙØ�I‰I�fÔØÐó    )	Úmatplotlib.pyplotÚpyplotÚmatplotlib.backends.backend_aggÚbackendsÚbackend_aggÚ
isinstanceÚlistr   Ústack)Úfiguresr   r    r   ÚimagesÚimager   r   s    `    @@r   Úfigure_to_imager-      sZ   ú€ õ $ß=Ð=ö	ô �'œ4Ô Ø6=Ö>¨F‘- Õ'Ð>ˆÐ>Ü�x‰x˜ÓÐá˜gÓ&ˆØˆùò	 ?s   ®Ac           
      óš  — | j                   \  }}}}}| j                  t        j                  k(  rt        j                  | «      dz  } d„ } || j                   d   «      skt        d| j                   d   j                  «       z  | j                   d   z
  «      }t        j                  | t        j                  |||||f¬«      fd¬«      } d|j                  «       dz
  dz  z  }| j                   d   |z  }	t        j                  | ||	||||f¬«      } t        j                  | d	¬
«      } t        j                  | |||z  |	|z  |f¬«      } | S )aL  
    Convert a 5D tensor into 4D tensor.

    Convesrion is done from [batchsize, time(frame), channel(color), height, width]  (5D tensor)
    to [time(frame), new_width, new_height, channel] (4D tensor).

    A batch of images are spreaded to a grid, which forms a frame.
    e.g. Video with batchsize 16 will have a 4x4 grid.
    g     ào@c                 ó&   — | dk7  xr | | dz
  z  dk(  S )Nr   é   © )Únums    r   Ú	is_power2z!_prepare_video.<locals>.is_power28   s   € Ø�a‰xÒ4˜c S¨1¡W™o°!Ñ3Ð4r!   r   r	   )Úshape)Úaxisr0   )Únewshape)r	   r   r   r0   é   r   )Úaxes)r4   r   r   r   Úfloat32ÚintÚ
bit_lengthÚconcatenateÚzerosr   Ú	transpose)
ÚVÚbÚtÚcr   r   r3   Úlen_additionÚn_rowsÚn_colss
             r   Ú_prepare_videorF   )   s'  € ð —G‘G�M€A€qˆ!ˆQ�à‡w�w”"—(‘(ÒÜ�J‰J�q‹M˜EÑ!ˆò5ñ �Q—W‘W˜Q‘ZÔ Ü˜1 §¡¨¡
× 5Ñ 5Ó 7Ñ7¸!¿'¹'À!¹*ÑDÓEˆÜ�N‰N˜AœrŸx™x¨|¸QÀÀ1ÀaÐ.HÔIÐJÐQRÔSˆà�A—L‘L“N QÑ&¨1Ñ,Ñ-€FØ�W‰W�Q‰Z˜6Ñ!€Fä
�
‰
�1 ¨°°1°a¸Ð;Ô<€AÜ
�‰�QÐ/Ô0€AÜ
�
‰
�1  6¨A¡:¨v¸©z¸1Ð=Ô>€Aà€Hr!   c           	      ó   — t        | t        j                  «      sJ d«       ‚| j                  d   dk(  rt        j                  | | | gd«      } | j
                  dk(  r| j                  d   dk(  sJ ‚| j                  d   }| j                  d   }| j                  d   }t        ||«      }t        t        j                  t        |«      |z  «      «      }t        j                  d||z  ||z  f| j                  ¬«      }d}t        |«      D ]A  }t        |«      D ]1  }	||k\  r Œ| |   |d d …||z  |dz   |z  …|	|z  |	dz   |z  …f<   |dz   }Œ3 ŒC |S )Nz*plugin error, should pass numpy array herer0   r   r   r   r	   r   )r'   r   Úndarrayr4   r<   ÚndimÚminr:   ÚceilÚfloatr=   r   Úrange)
ÚIÚncolsÚnimgÚHÚWÚnrowsr   ÚiÚyÚxs
             r   Ú	make_gridrW   J   sN  € ä�aœŸ™Ô$ÐRÐ&RÓRÐ$Ø‡w�wˆq�z�Q‚Ü�N‰N˜A˜q !˜9 aÓ(ˆØ�6‰6�QŠ;˜1Ÿ7™7 1™:¨š?Ð*Ð*Ø�7‰7�1‰:€DØ	�‰�‰
€AØ	�‰�‰
€AÜ��eÓ€EÜ”—‘œ˜d› eÑ+Ó,Ó-€EÜ�X‰X�q˜!˜e™) Q¨¡YÐ/°q·w±wÔ?€FØ	€AÜ�5‹\ò ˆÜ�u“ò 	ˆAØ�DŠyÙØBCÀAÁ$ˆF’1�a˜!‘e˜q 1™u¨™kÐ)¨1¨q©5°A¸±E¸Q±;Ð+>Ð>Ñ?Ø�A‘‰Añ		ðð €Mr!   c                 ó@  — t        t        |«      «      t        |«      k(  s
J d|› �«       ‚t        | j                  «      t        |«      k(  sJ d| j                  › d|› �«       ‚|j                  «       }t        |«      dk(  rMdD �cg c]  }|j	                  |«      ‘Œ }}| j                  |«      }t        |«      }|j                  ddd«      S t        |«      d	k(  r\d
D �cg c]  }|j	                  |«      ‘Œ }}| j                  |«      }|j                  d   dk(  rt        j                  |||gd«      }|S t        |«      dk(  rJdD �cg c]  }|j	                  |«      ‘Œ }}| j                  |«      } t        j                  | | | gd«      } | S y c c}w c c}w c c}w )NzJYou can not use the same dimension shordhand twice.         input_format: zKsize of input tensor and input format are different.         tensor shape: z, input_format: r   ÚNCHWr0   r	   r   r   ÚHWCÚHW)
ÚlenÚsetr4   ÚupperÚfindr>   rW   r   r<   r)   )ÚtensorÚinput_formatrB   ÚindexÚtensor_NCHWÚ
tensor_CHWÚ
tensor_HWCs          r   Úconvert_to_HWCrf   d   sÄ  € ÜŒs�<Ó Ó!¤SØó&ò ð cà	SÐT`ÐSaÐbócð ô ˆv�|‰|Ó¤Øó!ò ð Dð
Ø—|‘|�nÐ$4°\°NðDóDð ð  ×%Ñ%Ó'€Lä
ˆ<Ó˜AÒØ/5Ö6¨!�×"Ñ" 1Õ%Ð6ˆÐ6Ø×&Ñ& uÓ-ˆÜ˜{Ó+ˆ
Ø×#Ñ# A q¨!Ó,Ð,ä
ˆ<Ó˜AÒØ/4Ö5¨!�×"Ñ" 1Õ%Ð5ˆÐ5Ø×%Ñ% eÓ,ˆ
Ø×Ñ˜AÑ !Ò#ÜŸ™¨°ZÀÐ(LÈaÓPˆJØÐä
ˆ<Ó˜AÒØ/3Ö4¨!�×"Ñ" 1Õ%Ð4ˆÐ4Ø×!Ñ! %Ó(ˆÜ—‘˜6 6¨6Ð2°AÓ6ˆØˆð	 ùò 7ùò 6ùò 5s   ÂFÃ FÅ
F)T)é   )	Únumpyr   Únumpy.typingÚtypingÚnptr-   rF   rW   rf   r1   r!   r   ú<module>rl      s!   ðã Ý óòDóBó4r!   