Ë
    ÌÓ^jÓ  ã                   ó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
          €€€úi/var/www/ramen.bs-engineer-server.com/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 )
aJ  
    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 spread 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   )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_videorE   )   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�v˜v q¨!¨Q°Ð2Ó3€AÜ
�‰�QÐ/Ô0€AÜ
�
‰
�1�q˜& 1™* f¨q¡j°!Ð4Ó5€Aà€Hr!   c           	      óº  — t        | t        j                  «      st        d«      ‚| j                  d   dk(  rt        j
                  | | | gd«      } | j                  dk7  s| j                  d   dk7  rt        d«      ‚| 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   z0Input should be a 4D numpy array with 3 channelsr   r	   r   )r'   r   ÚndarrayÚAssertionErrorr4   r;   ÚndimÚminr9   ÚceilÚfloatr<   r   Úrange)
ÚIÚncolsÚnimgÚHÚWÚnrowsr   ÚiÚyÚxs
             r   Ú	make_gridrW   M   sT  € ä�aœŸ™Ô$ÜÐIÓJÐJØ‡w�wˆq�z�Q‚Ü�N‰N˜A˜q !˜9 aÓ(ˆØ‡v�v�‚{�a—g‘g˜a‘j A’oÜÐOÓPÐPØ�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                 óP  — t        t        |«      «      t        |«      k7  rt        d|› �«      ‚t        | j                  «      t        |«      k7  rt        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 )NzNYou can not use the same dimension shorthand 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ÚsetrH   r4   ÚupperÚfindr=   rW   r   r;   r)   )ÚtensorÚinput_formatrA   ÚindexÚtensor_NCHWÚ
tensor_CHWÚ
tensor_HWCs          r   Úconvert_to_HWCrf   i   s³  € Ü
Œ3ˆ|ÓÓ¤ \Ó!2Ò2Üð  Ø'˜.ð*ó +ð 	+ä
ˆ6�<‰<ÓœC Ó-Ò-Üð  Ø—|‘|�nÐ$4°\°NðDó Eð 	Eà×%Ñ%Ó'€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-   rE   rW   rf   r1   r!   r   ú<module>rl      s!   ðã Ý óòD!óHó8r!   