
    #
3j                     x    S SK rS SKJrJr  \" SSSS9S 5       r\" SSSS9S 5       r\" S	SSSS
9S 5       rS rg)    N)njitprangez(f8[:],)T)cachenogilc                     [        U 5      n[        SU5       H  nUS-
  n[        X   X   S-   5      X'   M     [        US-
  SS5       H  nUS-   n[        X   X   S-   5      X'   M     g )N      )lenrangemin)dni1i2s       Q/home/wildlama/miniconda3/lib/python3.13/site-packages/pymatting/util/distance.py_propagate_1d_first_passr      sr    AAAqk!VAE1519%  AE2r"!VAE1519% #    z(f8[:], i4[:], f8[:], f8[:])c                    [        U 5      nSn[        R                  * n[        U5       H  nX   nU[        R                  :X  a  M  X-  n	XU'   US:  a3  X   n
SXU-  -   X:   -
  X-  -
  -  Xz-
  -  nXbU   :  a  OUS-  nUS:  a  M3  US-  nXqU'   XbU'   [        R                  X%S-   '   M     US:  a  g Sn[        U5       HG  nX%S-      U:  a  US-  nX%S-      U:  a  M  X   n
Xz-
  n[        R                  " X-  X:   -   5      X'   MI     g )Nr
   r   g      ?r   )r   npinfr   sqrt)r   vzfnxksxd_yxfxvkdxs               r   _propagate_1dr$      s1   	QB
A	A2Yt266>[!1fBrEzAE)BG34?AQ4xFA 1f 	
Q!!66a%/ 2 	1u	A2YAhlFA Ahl TVwwrw' r   z(f8[:, :],))r   parallelr   c                 b   U R                   u  p[        U5       H  n[        U S S 2U4   5        M     [        R                  " X4[        R
                  S9n[        R                  " XS-   45      n[        R                  " X45      n[        U5       H  n[        X   XG   XW   Xg   5        M     g )N)dtyper   )shaper   r   r   zerosint32r$   )distancenyr   r   r   r   r   ys           r   _propagate_distancer.   =   s    ^^FBBZ !Q$0  	"*A
"1fA
"ABZhk14qt4 r   c                     U R                   [        R                  :w  a  U S:g  n U R                  u  p[        R                  " X4[        R
                  5      n[        R                  X0'   [        U5        U$ )a  
For every non-zero value, compute the distance to the closest zero value.
Based on :cite:`felzenszwalb2012distance`.

Parameters
----------
mask: numpy.ndarray
    2D matrix of zero and nonzero values.

Returns
-------
distance: numpy.ndarray
    Distance to closest zero-valued pixel.

Example
-------
>>> from pymatting import *
>>> import numpy as np
>>> mask = np.random.rand(10, 20) < 0.9
>>> distance = distance_transform(mask)
r   )r'   r   bool_r(   r)   float64r   r.   )maskr,   r   r+   s       r   distance_transformr3   L   sV    . zzRXXqyZZFBxx"**-HVVHN!Or   )	numpyr   numbar   r   r   r$   r.   r3    r   r   <module>r7      sk      jD)& *& $D=(( >((V m4$d;5 <5 r   