
    lj                       d dl mZ g dZd dlmZ d dlZd dlZd dlT d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZ d d	lmZ d d
lmZ erd dlmZ d dlmZmZmZmZ g dZ G d de
          Z G d de          Z G d de          Z dS )    )annotations)OpenGLPMobjectOpenGLPGroupOpenGLPMPoint)TYPE_CHECKINGN)*)OpenGLMobjectinterpolate)BLACKPURE_YELLOWWHITEParsableManimColorcolor_gradientcolor_to_rgba)	_Uniforms)resize_with_interpolation)Self)FloatRGBA_ArrayFloatRGBALike_ArrayPoint3D_ArrayPoint3DLike_Arrayc                       e Zd ZdZdZdej        dfdej        dfgZ e            Z	de
ej        fd+ fdZd,dZd Z	 	 	 d-d.dZd/dZd ZddeefdZd  Zd0d"Zd# Zd$ fd%Zd& Zd' Zd( Zd) Zed*             Z xZ S )1r   true_dotg{Gz?point)   color)   g       @stroke_widthfloatr   render_primitiveintc                    || _          t                      j        d||d| | j         t          j        z  | _        d S )N)r   r!    )r   super__init__r    OPENGL_POINT_RADIUS_SCALE_FACTORpoint_radius)selfr   r   r!   kwargs	__class__s        j/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/mobject/opengl/opengl_point_cloud_mobject.pyr&   zOpenGLPMobject.__init__0   sN     )Ru7GRR6RRR OO 	    returnr   c                j    t          j        d          | _        t          j        d          | _        | S )N)   r   )r   r   )npzerosrgbaspointsr)   s    r,   reset_pointszOpenGLPMobject.reset_points=   s)    &(hv&6&6
%'Xf%5%5r-   c                
    ddgS )Nr4   r3   r$   r5   s    r,   get_array_attrszOpenGLPMobject.get_array_attrsB   s    '""r-   Nr4   r   r3   FloatRGBALike_Array | NoneParsableManimColor | Noneopacityfloat | Nonec                z   |	|t           }|                     |           |C|| j        d         }t          j        t          ||          gt          |          d          }n4||}n/t          |          t          |          k    rt          d          t          j        | j        |d          | _        | S )zzAdd points.

        Points must be a Nx3 numpy array.
        Rgbas must be a Nx4 numpy array if it is not None.
        N)r   r   axisz&points and rgbas must have same length)	r   append_pointsr3   r1   repeatr   len
ValueErrorappend)r)   r4   r3   r   r;   	new_rgbass         r,   
add_pointszOpenGLPMobject.add_pointsE   s     =U]E6"""*U+	=#@#@"A3v;;UVWWWIIIIZZ3v;;&&EFFFYtz91===
r-      c                `   |                                  D ]}|                                }|ffd	}t          |j                  t          |j                  k    r(|                    |j         |                                |                    |j         |                                | S )z.Removes all but every nth point for n = factorc                0    t          j        d|           S Nr   )r1   arange)
num_pointsfactors    r,   	thin_funcz*OpenGLPMobject.thin_out.<locals>.thin_funce   s    yJ777r-   )family_members_with_pointsget_num_pointsrC   r4   r3   set_rgba_array_direct
set_points)r)   rN   mobrM   rO   s    `   r,   thin_outzOpenGLPMobject.thin_out`   s    2244 	4 	4C++--J%/ 8 8 8 8 8 8 3:#ci..00))#)IIKK*@AAANN3:iikk23333r-   c                    t          j        t          t          t          t          g ||                                 R                                | _        | S N)r1   arraylistmapr   r   rQ   r3   )r)   colorss     r,   set_color_by_gradientz$OpenGLPMobject.set_color_by_gradientn   sP    X]N$RF$RD<O<O<Q<Q$R$R$RSSTT
 

 r-   r0   c                  	 t          t          t          ||g                    \  	||                                 }|                                 D ]z}t          j        | j        |z
            }t
          j        	                    |d          |z  }t          j
        t          j
        	fd|D                                 |_        {| S )Nr0   r?   c                2    g | ]}t          |          S r$   r
   ).0alphaend_rgba
start_rgbas     r,   
<listcomp>z@OpenGLPMobject.set_colors_by_radial_gradient.<locals>.<listcomp>   s%    RRR%[Xu==RRRr-   )rY   rZ   r   
get_centerrP   r1   absr4   linalgnormrX   r3   )
r)   centerradiusinner_colorouter_colorrT   	distancesalphasra   rb   s
           @@r,   set_colors_by_radial_gradientz,OpenGLPMobject.set_colors_by_radial_gradientt   s      $C[7Q$R$RSS
H>__&&F2244 	 	Ct{V344IY^^IA^66?FRRRRR6RRR  CII
 r-   c                h    t          |j        |                                           | j        d d <   | S rW   )r   r3   rQ   )r)   pmobjects     r,   match_colorszOpenGLPMobject.match_colors   s.    1(.$BUBUBWBWXX
111r-   Tc                    t          | j        t          |          |          }| j        D ]}|                    |||           |                     |           | S rW   )r   r3   r   submobjectsfade_torR   )r)   r   r`   familyr3   rT   s         r,   rt   zOpenGLPMobject.fade_to   sa    DJe(<(<eDD# 	. 	.CKKuf----""5)))r-   c                    |                                  D ]C}t          j        |d|j                   }|j        D ]}|j        |         |         |j        |<   D| S Nr0   )rP   r1   apply_along_axisr4   data)r)   	conditionrT   to_keepkeys        r,   
filter_outzOpenGLPMobject.filter_out   si    2244 	7 	7C*9aDDDGx 7 7 #g 67r-   c                    | d         S rK   r$   )ps    r,   <lambda>zOpenGLPMobject.<lambda>   s
    QqT r-   c                    |                                  D ]T}t          j        t          j        |d|j                            }|j        D ]}|j        |         |         |j        |<   U| S )z!function is any map from R^3 to Rr0   )rP   r1   argsortrx   r4   ry   )r)   functionrT   indicesr|   s        r,   sort_pointszOpenGLPMobject.sort_points   sp    2244 	7 	7Cj!4Xq#*!M!MNNGx 7 7 #g 67r-   c                    | j         D ]<t          j        fd|                                 D                       | j         <   =| S )Nc                *    g | ]}|j                  S r$   )ry   )r_   smr|   s     r,   rc   z5OpenGLPMobject.ingest_submobjects.<locals>.<listcomp>   s    'Q'Q'Q'Q'Q'Qr-   )ry   r1   vstack
get_family)r)   r|   s    @r,   ingest_submobjectsz!OpenGLPMobject.ingest_submobjects   sQ    9 	S 	SCY'Q'Q'Q'Qt?P?P'Q'Q'QRRDIcNNr-   c                j    ||                                  dz
  z  }| j        t          |                   S rw   )rQ   r4   r"   )r)   r`   indexs      r,   point_from_proportionz$OpenGLPMobject.point_from_proportion   s0    ,,..23{3u::&&r-   c                    t          ||                                z            }t          ||                                z            }| j        D ]}|j        |         ||         | j        |<    | S rW   )r"   rQ   ry   )r)   rp   ablower_indexupper_indexr|   s          r,   pointwise_become_partialz'OpenGLPMobject.pointwise_become_partial   st    !h5577788!h55777889 	I 	IC%]3/K0GHDIcNNr-   c                    t          j        t          | j                  | j                  }|                     |dd           |                     |dd           |S )Ndtyper   r4   r   r3   )r1   r2   rC   r4   shader_dtyperead_data_to_shader)r)   shader_datas     r,   get_shader_datazOpenGLPMobject.get_shader_data   sY    hs4;//t7HIII  gx@@@  gw???r-   c                     t           S rW   )r   r$   r-   r,   get_mobject_type_classz%OpenGLPMobject.get_mobject_type_class   s    r-   )r   r    r   r   r!   r"   )r.   r   )NNN)
r4   r   r3   r9   r   r:   r;   r<   r.   r   )rH   T)!__name__
__module____qualname__shader_folderr'   r1   float32r   r   r(   r   modernglPOINTSr&   r6   r8   rG   rU   r\   r   r   rn   rq   rt   r}   r   r   r   r   r   staticmethodr   __classcell__r+   s   @r,   r   r   %   s       M'+$	"*d#	"*d#L
 9;;L "$/ (	
 
 
 
 
 
 
   
# # # -1+/ $    6         *        $2>      
' ' '       \    r-   r   c                  &     e Zd Z fdZddZ xZS )r   c                    t          d |D                       st          d           t                      j        di |  | j        |  d S )Nc              3  @   K   | ]}t          |t                    V  d S rW   )
isinstancer   )r_   ms     r,   	<genexpr>z(OpenGLPGroup.__init__.<locals>.<genexpr>   s,      @@Q:a00@@@@@@r-   z.All submobjects must be of type OpenglPMObjectr$   )all	Exceptionr%   r&   add)r)   pmobsr*   r+   s      r,   r&   zOpenGLPGroup.__init__   sd    @@%@@@@@ 	NLMMM""6"""%r-   Tc                P    |r!| j         D ]}|                    |||           d S d S rW   )rs   rt   )r)   r   r`   ru   rT   s        r,   rt   zOpenGLPGroup.fade_to   sI     	2' 2 2E5&1111	2 	22 2r-   r   )r   r   r   r&   rt   r   r   s   @r,   r   r      sL            2 2 2 2 2 2 2 2r-   r   c                  *     e Zd Zedf fd	Zd Z xZS )r   g      @c                L    || _          t                      j        dd|i| d S )Nr   r$   )locationr%   r&   )r)   r   r   r*   r+   s       r,   r&   zOpenGLPMPoint.__init__   s2     ==l=f=====r-   c                \    t          j        | j        gt           j                  | _        d S )Nr   )r1   rX   r   r   r4   r5   s    r,   init_pointszOpenGLPMPoint.init_points   s"    hbjAAAr-   )r   r   r   ORIGINr&   r   r   r   s   @r,   r   r      sX         &S > > > > > >B B B B B B Br-   r   )!
__future__r   __all__typingr   r   numpyr1   manim.constants#manim.mobject.opengl.opengl_mobjectr	   manim.utils.bezierr   manim.utils.colorr   r   r   r   r   r   manim.utils.config_opsr   manim.utils.iterablesr   r   manim.typingr   r   r   r   r   r   r   r$   r-   r,   <module>r      s   " " " " " "
=
=
=                      = = = = = = * * * * * *                - , , , , , ; ; ; ; ; ;             >
=
=V V V V V] V V Vr
2 
2 
2 
2 
2> 
2 
2 
2B B B B BN B B B B Br-   