
    wiN                     h    d dl mZ d dlmZ d dlZd dlZe G d d                      ZdedefdZ	dS )	    )	dataclass)TupleNc                      e Zd ZU dZej        ed<   ej        ed<   ej        ed<   ej        ed<   eed<   eed<   eed<   eed	<   e	e         ed
<   d Z
d Zd Zdej        fdZed             Zdej        dej        fdZdededd fdZdS )DifferentiableProjectiveCamerazE
    Implements a batch, differentiable, standard pinhole camera
    originxyzwidthheightx_fovy_fovshapec                 j   | j         j        d         | j        j        d         cxk    r-| j        j        d         cxk    r| j        j        d         k    sn J | j         j        d         | j        j        d         cxk    r4| j        j        d         cxk    r| j        j        d         cxk    rdk    sn J t          | j         j                  t          | j        j                  cxk    rBt          | j        j                  cxk    r$t          | j        j                  cxk    rdk    sn J d S )Nr            )r   r   r	   r
   r   lenselfs    q/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/diffusers/pipelines/shap_e/camera.py__post_init__z,DifferentiableProjectiveCamera.__post_init__&   s8   v|A$&,q/\\\\TV\!_\\\\HYZ[H\\\\\\\v|A$&,q/aaaaTV\!_aaaaHYZ[H\aaaa`aaaaaaa46<  C$5$5iiiiTV\9J9JiiiicRVR]RcNdNdiiiihiiiiiiiii    c                 ~    t          j        t          j        | j        | j        gt          j                            S N)dtype)torch
from_numpynparrayr   r   float32r   s    r   
resolutionz)DifferentiableProjectiveCamera.resolution+   s-    $*dk)B"* U U UVVVr   c                 ~    t          j        t          j        | j        | j        gt          j                            S r   )r   r   r   r    r   r   r!   r   s    r   fovz"DifferentiableProjectiveCamera.fov.   s-    $*dj)A T T TUUUr   returnc                     t          j        | j        | j        z            }t          j        || j        z  t          j        || j        d          gd          }|S )z>
        :return: coords of shape (width * height, 2)
        trunc)rounding_moder   axis)r   aranger   r   stackdiv)r   pixel_indicescoordss      r   get_image_coordsz/DifferentiableProjectiveCamera.get_image_coords1   sc     T[4:%=>>
*	-7KKK 
 
 
 r   c                 b   | j         ^}}t          t          j        |                    }|                                 }t          j        |                    d          ||z  g|j                   }|                     |          }|	                    ||| j
        z  | j        z  dd          }|S )Nr   r   r   )r   intr   prodr0   r   broadcast_to	unsqueezeget_camera_raysviewr   r   )r   
batch_sizeinner_shapeinner_batch_sizer/   rayss         r   camera_raysz*DifferentiableProjectiveCamera.camera_rays?   s    #': 
[rw{3344&&((#F$4$4Q$7$7*GW:W9gZ`Zf9ghh##F++yy%5%Cdj%PRSUVWWr   r/   c           	      j   |j         ^}}}|dk    sJ || j        j         d         k    sJ |                    |dd          }|                                 }|                                 }|                                |dz
  z  dz  dz
  }|t          j        |dz            z  }|                    |dd          }| j                            |dd          | j	                            |dd          |d d d d d df         z  z   | j
                            |dd          |d d d d dd f         z  z   }	|	|	                    dd          z  }	t          j        t          j        | j                            |dd          ||	j         d         dg          |	gd          }
 |
j        |g|ddR  S )	Nr   r   r   r   T)dimkeepdim)r?   )r   r   r7   r"   r$   floatr   tanr
   r   r	   normr,   r4   )r   r/   r8   r   n_coordsflatresr$   fracs
directionsr;   s              r   r6   z.DifferentiableProjectiveCamera.get_camera_raysL   s   '-|$
UH1}}}}T[.q11111{{:r1--oohhjjq)Q.2	#'***

:r1--FKK
Aq))fkk*a++eAAAqqq"1"Ho=>fkk*a++eAAAqqq!""Ho=> 	
  *//b$/"G"GG
{"4;#3#3J1#E#E
T^TdefTgijGkll 
 
 
 ty2e2Q22222r   c           
          || j         z  || j        z  k    s
J d            t          | j        | j        | j        | j        ||| j        | j                  S )zf
        Creates a new camera for the resized view assuming the aspect ratio does not change.
        z#The aspect ratio should not change.)r   r   r	   r
   r   r   r   r   )	r   r   r   r   r   r	   r
   r   r   )r   r   r   s      r   resize_imagez+DifferentiableProjectiveCamera.resize_imagei   sg     t{"ftz&9999;`999-;fff**	
 	
 	
 		
r   N)__name__
__module____qualname____doc__r   Tensor__annotations__r2   rA   r   r   r"   r$   r0   propertyr<   r6   rJ    r   r   r   r      sC          L|OOO|OOO|OOOJJJKKKLLLLLL:j j j
W W WV V V%,     
 
 X
3el 3u| 3 3 3 3:
# 
s 
7W 
 
 
 
 
 
r   r   sizer%   c                    g }g }g }g }t          j        ddt           j        z  d          D ]}t          j        t          j        |          t          j        |          dg          }|t          j        t          j        |dz                      z  }| dz  }t          j        t          j        |          t          j        |           dg          }t          j        ||          }	|	                    |           |	                    |           |	                    |	           |	                    |           t          t          j        t          j        |d                                                    t          j        t          j        |d                                                    t          j        t          j        |d                                                    t          j        t          j        |d                                                    | | d	d	d
t          |          f	  	        S )Nr   r      )numg         g        r)   gffffff?r   )	r   r   r	   r
   r   r   r   r   r   )r   linspacepir    sincossqrtsumcrossappendr   r   r   r,   rA   r   )
rS   originsxsyszsthetar
   r   r   r	   s
             r   create_pan_camerasre   z   s   G	B	B	BQBE	r222 	 	HbfUmmRVE]]D9::	RWRVAqD\\"""aHbfUmmbfUmm^S9::HQNNv
		!
		!
		!)q 9 9 9::@@BB

28BQ///
0
0
6
6
8
8

28BQ///
0
0
6
6
8
8

28BQ///
0
0
6
6
8
8#b''l
 
 
 
r   )
dataclassesr   typingr   numpyr   r   r   r2   re   rR   r   r   <module>ri      s    " ! ! ! ! !            `
 `
 `
 `
 `
 `
 `
 `
FS %C      r   