
    W|h'                     L    S r SSKr       SS jr        SS jrSS jrg)	zDeals with making images (np arrays). It provides drawing
methods that are difficult to do with the existing Python libraries.
    Nc	                    U u  p[         R                  " U5      R                  [        5      n[         R                  " U5      R                  [        5      nUS:X  a  Uc;  Uc  [	        S5      e[         R                  " U5      [         R                  " U5      -
  nX3 Vs/ s H  o* PM     sn4 Vs/ s H  n[        U UUSSSUS9PM     snu  p[         R                  " X5      nUR                  S:  a  [         R                  " S	U/-  5      nX-  SU-
  U-  -   $ [         R                  " USSS
2   5      R                  [        5      n[         R                  " [         R                  " [        U	5      [        U
5      5      SSS
2   5      R                  [        5      nUS:X  a  Uc.  Ub   [         R                  " USSS
2   5      U-
  nO'[	        S5      e[         R                  " USSS
2   5      n[         R                  R                  U5      nUUS-  -  nXU-  -   nX-
  R                  U5      SU-
  -  n[         R                  " S[         R                  " SU5      5      nUR                  S:  a  [         R                  " S	U/-  5      nX-  SU-
  U-  -   $ US:X  a  U=(       d    SS:X  a  [         R                  " X45      nOd[         R                   " X-
  S-  R#                  SS95      X-  -
  nUSU-
  U-  -  n[         R                  " S[         R                  " SU5      5      nUR                  S:  a  [         R                  " S	U/-  5      nSU-
  U-  X-  -   $ [	        S5      es  snf s  snf )aM  Draw a linear, bilinear, or radial gradient.

The result is a picture of size ``size``, whose color varies
gradually from color `color_1` in position ``p1`` to color ``color_2``
in position ``p2``.

If it is a RGB picture the result must be transformed into
a 'uint8' array to be displayed normally:

Parameters
----------

size : tuple or list
    Size (width, height) in pixels of the final image array.

p1 : tuple or list
   Position for the first coordinate of the gradient in pixels (x, y).
   The color 'before' ``p1`` is ``color_1`` and it gradually changes in
   the direction of ``p2`` until it is ``color_2`` when it reaches ``p2``.

p2 : tuple or list, optional
   Position for the second coordinate of the gradient in pixels (x, y).
    Coordinates (x, y)  of the limit point for ``color_1``
    and ``color_2``.

vector : tuple or list, optional
    A vector (x, y) in pixels that can be provided instead of ``p2``.
    ``p2`` is then defined as (p1 + vector).

color_1 : tuple or list, optional
    Starting color for the gradient. As default, black. Either floats
    between 0 and 1 (for gradients used in masks) or [R, G, B] arrays
    (for colored gradients).

color_2 : tuple or list, optional
    Color for the second point in the gradient. As default, white. Either
    floats between 0 and 1 (for gradients used in masks) or [R, G, B]
    arrays (for colored gradients).

shape : str, optional
    Shape of the gradient. Can be either ``"linear"``, ``"bilinear"`` or
    ``"circular"``. In a linear gradient the color varies in one direction,
    from point ``p1`` to point ``p2``. In a bilinear gradient it also
    varies symmetrically from ``p1`` in the other direction. In a circular
    gradient it goes from ``color_1`` to ``color_2`` in all directions.

radius : float, optional
    If ``shape="radial"``, the radius of the gradient is defined with the
    parameter ``radius``, in pixels.

offset : float, optional
    Real number between 0 and 1 indicating the fraction of the vector
    at which the gradient actually starts. For instance if ``offset``
    is 0.9 in a gradient going from p1 to p2, then the gradient will
    only occur near p2 (before that everything is of color ``color_1``)
    If the offset is 0.9 in a radial gradient, the gradient will
    occur in the region located between 90% and 100% of the radius,
    this creates a blurry disc of radius ``d(p1, p2)``.

Returns
-------

image
    An Numpy array of dimensions (width, height, n_colors) of type float
    representing the image of the gradient.

Examples
--------

.. code:: python

    color_gradient((10, 1), (0, 0), p2=(10, 0))  # from white to black
    #[[1.  0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1]]
    # from red to green
    color_gradient(
        (10, 1), (0, 0),
        p2=(10, 0),
        color_1=(255, 0, 0),
        color_2=(0, 255, 0)
    )
    # [[[  0.  255.    0. ]
    #   [ 25.5 229.5   0. ]
    #   [ 51.  204.    0. ]
    #   [ 76.5 178.5   0. ]
    #   [102.  153.    0. ]
    #   [127.5 127.5   0. ]
    #   [153.  102.    0. ]
    #   [178.5  76.5   0. ]
    #   [204.   51.    0. ]
    #   [229.5  25.5   0. ]]]
bilinearNz(You must provide either 'p2' or 'vector'      ?        linear)vectorcolor_1color_2shapeoffset         r   radial)axisz@Invalid shape, should be either 'radial', 'linear' or 'bilinear')nparrayastypefloat
ValueErrorcolor_gradientmaximumsizedstackmeshgridrangelinalgnormdotminimumonessqrtsum)r   p1p2r   radiusr	   r
   r   r   whvm1m2arrMr   n_vecs                     U/home/james-whalen/.local/lib/python3.13/site-packages/moviepy/video/tools/drawing.pyr   r      s   N DAhhw&&u-Ghhw&&u-G
>z !KLLXXb\BHHRL0F 626ar623
 4  4
 jj <<!))AI&C}C7222	"TrT(		"	"5	)B
		"++eAha1$B$78??FA>~"TrT(+b0 !KLLXXfTrTl+Fyy~~f%q 6/!vll5!QZ0jjBJJq#./<<!))AI&C}C7222	(	KaA''1&/C77QVM..A.676?JC!f*./C**S"**Q"45C<<!))AI&CC7"S]22
W
XXU 3
s   M11M6c	           	         U(       d  UGc  UGc   Ub.  [         R                  " U5      [         R                  " U5      -
  nOgUb1  [         R                  " SS/5      n[         R                  " US/5      nO3Ub0  [         R                  " SS/5      n[         R                  " SU/5      nUu  p[         R                  " X!* /5      R                  S5      n[         R                  R	                  U5      n	[        SU5      U-  U	-  n[        XXVUSS	9$ U u  p[         R                  " U5      (       a  X4OX[        U5      4n[         R                  " U5      nU(       a  XmSS2SU24'   X}SS2US24'   U$ U(       a  XmSU& X}US& U$ )
a  Make an image split in 2 colored regions.

Returns an array of size ``size`` divided in two regions called 1 and
2 in what follows, and which will have colors color_1 and color_2
respectively.

Parameters
----------

x : int, optional
    If provided, the image is split horizontally in x, the left
    region being region 1.

y : int, optional
    If provided, the image is split vertically in y, the top region
    being region 1.

p1, p2: tuple or list, optional
    Positions (x1, y1), (x2, y2) in pixels, where the numbers can be
    floats. Region 1 is defined as the whole region on the left when
    going from ``p1`` to ``p2``.

p1, vector: tuple or list, optional
    ``p1`` is (x1,y1) and vector (v1,v2), where the numbers can be
    floats. Region 1 is then the region on the left when starting
    in position ``p1`` and going in the direction given by ``vector``.

gradient_width : float, optional
    If not zero, the split is not sharp, but gradual over a region of
    width ``gradient_width`` (in pixels). This is preferable in many
    situations (for instance for antialiasing).

Examples
--------

.. code:: python

    size = [200, 200]

    # an image with all pixels with x<50 =0, the others =1
    color_split(size, x=50, color_1=0, color_2=1)

    # an image with all pixels with y<50 red, the others green
    color_split(size, x=50, color_1=[255, 0, 0], color_2=[0, 255, 0])

    # An image split along an arbitrary line (see below)
    color_split(size, p1=[20, 50], p2=[25, 70], color_1=0, color_2=1)
Nr   g      r   r   r   g?r   )r   r	   r
   r   )
r   r   r   r   r   maxr   isscalarlenzeros)r   xyr%   r&   r   r	   r
   gradient_widthr   r(   r)   r   r-   s                 r0   color_splitr9      s[   v 1919>XXb\BHHRL0F]XXq$i(F1a&!B]XXsCj)F1a&!B1b'"))'2yy~~f%S.)F2T9VgX
 	
 ++g..Q3w<4Hhhuo 2A2J 12J 
 GG
    c           
      F    U(       a
  SX%-
  -  U-  OSn[        U UUUUSUS9$ )a  Draw an image with a circle.

Draws a circle of color ``color``, on a background of color ``bg_color``,
on a screen of size ``screensize`` at the position ``center=(x, y)``,
with a radius ``radius`` but slightly blurred on the border by ``blur``
pixels.

Parameters
----------

screensize : tuple or list
    Size of the canvas.

center : tuple or list
    Center of the circle.

radius : float
    Radius of the circle, in pixels.

bg_color : tuple or float, optional
    Color for the background of the canvas. As default, black.

blur : float, optional
    Blur for the border of the circle.

Examples
--------

.. code:: python

    from moviepy.video.tools.drawing import circle

    circle(
        (5, 5),  # size
        (2, 2),  # center
        2,      # radius
    )
    # array([[0.        , 0.        , 0.        , 0.        , 0.        ],
    #        [0.        , 0.58578644, 1.        , 0.58578644, 0.        ],
    #        [0.        , 1.        , 1.        , 1.        , 0.        ],
    #        [0.        , 0.58578644, 1.        , 0.58578644, 0.        ],
    #        [0.        , 0.        , 0.        , 0.        , 0.        ]])
r   r   r   )r%   r'   r	   r
   r   r   )r   )
screensizecenterr'   colorbg_colorblurr   s          r0   circlerA   
  s<    X 06SFM"V+1F r:   )NNNr   r   r   r   )NNNNNr   r   r   )r   r   r   )__doc__numpyr   r   r9   rA    r:   r0   <module>rE      sT     
fYV 
Vr5r:   