
    Le                     ^    d Z ddlZddlZ G d d          ZddZddZ G d d          ZdS )z
Minimal set of functionality of Matplotlib's MaxNLocator to choose contour
levels without having to have Matplotlib installed.
Taken from Matplotlib 3.8.0.
    Nc                   *    e Zd ZdZd Zd Zd Zd ZdS )_Edge_integerz
    Helper for `.MaxNLocator`, `.MultipleLocator`, etc.

    Take floating-point precision limitations into account when calculating
    tick locations as integer multiples of a step.
    c                 f    |dk    rt          d          || _        t          |          | _        dS )z
        Parameters
        ----------
        step : float > 0
            Interval between ticks.
        offset : float
            Offset subtracted from the data limits prior to calculating tick
            locations.
        r   z'step' must be positiveN)
ValueErrorstepabs_offset)selfr   offsets      6lib/python3.11/site-packages/holoviews/util/locator.py__init__z_Edge_integer.__init__   s4     1996777	6{{    c                     | j         dk    rHt          j        | j         | j        z            }t	          dd|dz
  z            }t          d|          }nd}t          ||z
            |k     S )Nr   g|=
      g<Nё\?)r	   nplog10r   maxminr   )r
   msedgedigitstols        r   closetoz_Edge_integer.closeto!   sj    <!XdlTY677FeRFRK011Cfc""CCC29~~##r   c                 |    t          || j                  \  }}|                     || j        z  d          r|dz   S |S )z"Return the largest n: n*step <= x.   divmodr   r   r
   xdms       r   lez_Edge_integer.le+   sA    a##1<<DIq)) 	q5Lr   c                 |    t          || j                  \  }}|                     || j        z  d          r|S |dz   S )z#Return the smallest n: n*step >= x.r   r   r   r   s       r   gez_Edge_integer.ge2   sA    a##1<<DIq)) 	H1ur   N)__name__
__module____qualname____doc__r   r   r#   r%    r   r   r   r      sZ         # # #$ $ $      r   r   MbP?V瞯<Tc                    t          j        |           rt          j        |          s| |fS d}|| k     r|| }} d}t          t          | |g          \  } }t	          t          |           t          |                    }|d|z  t          j        t                    j        z  k     r| } |}nH|| z
  ||z  k    r<|dk    r| dk    r| } |}n*| |t          |           z  z  } ||t          |          z  z  }|r|s|| }} | |fS )a  
    Modify the endpoints of a range as needed to avoid singularities.

    Parameters
    ----------
    vmin, vmax : float
        The initial endpoints.
    expander : float, default: 0.001
        Fractional amount by which *vmin* and *vmax* are expanded if
        the original interval is too small, based on *tiny*.
    tiny : float, default: 1e-15
        Threshold for the ratio of the interval to the maximum absolute
        value of its endpoints.  If the interval is smaller than
        this, it will be expanded.  This value should be around
        1e-15 or larger; otherwise the interval will be approaching
        the double precision resolution limit.
    increasing : bool, default: True
        If True, swap *vmin*, *vmax* if *vmin* > *vmax*.

    Returns
    -------
    vmin, vmax : float
        Endpoints, expanded and/or swapped if necessary.
        If either input is inf or NaN, or if both inputs are 0 or very
        close to zero, it returns -*expander*, *expander*.
    FTg    .Ar   )r   isfinitemapfloatr   r   finfotiny)vminvmaxexpanderr2   
increasingswappedmaxabsvalues          r   nonsingularr9   :   s0   8 K #r{4'8'8 #y(""Gd{{4d UT4L))JD$c$iiT++KcDjBHUOO$8888y	d*	*	*1999DDDHSYY&&DHSYY&&D  z  4d:r   r   d   c                    t          || z
            }|| z   dz  }t          |          |z  |k     rd}n:t          j        dt          j        t          |                    dz  z  |          }dt          j        ||z            dz  z  }||fS )N   r   r   r   )r   mathcopysignr   )r3   r4   n	thresholddvmeanvr   scales           r   scale_rangerD   t   s    	TD[		BD[AE
5zzB""rdjU&<&<&ABEJJ4:b1f%%*+E&=r   c                   P    e Zd Z ej        g d          ZdZd	defdZd Z	d Z
dS )
MaxNLocator)g?g333333?g?g      ?g333333?g?g      ?g333333?g?g      ?g      ?g       @g      @g      @g      @g      @g      @g       @g      $@g      .@r   r   nbinsc                 >    |dk     rt          d          || _        d S )Nr   z6MaxNLocator nbins must be an integer greater than zero)r   rG   )r
   rG   s     r   r   zMaxNLocator.__init__   s%    199UVVV


r   c                 "   t          ||| j                  \  }}||z
  }||z
  }| j        |z  }||z
  | j        z  }||k    }	t          j        |	          d         d         }
|d |
dz            d d d         D ]}||z  |z  }t          ||          }|                    ||z
            }|                    ||z
            }t          j        ||dz             |z  |z   }||k    ||k    z  	                                }|| j
        k    r n||z   S )Nr   r   )rD   rG   _extended_stepsr   nonzeror   r#   r%   arangesum_min_n_ticks)r
   r3   r4   rC   r   _vmin_vmaxstepsraw_steplarge_stepsistepr   	best_vminr   lowhighticksntickss                     r   
_raw_tickszMaxNLocator._raw_ticks   s?   #D$
;;vvv$u,U]dj0x' 
;''*1-
 (57(ODDbD) 	 	D$$.I !v..D''%)+,,C7759,--DIc4!8,,t3i?E~%5.9>>@@F*** +v~r   c                 ^    t          ||dd          \  }}|                     ||          }|S )NgvIh%<=g+=)r5   r2   )r9   r[   )r
   r3   r4   locss       r   tick_valueszMaxNLocator.tick_values   s4     te%HHH
dtT**r   N)r   )r&   r'   r(   r   arrayrK   rO   intr   r[   r^   r*   r   r   rF   rF      s|        bh  8  8  8 9 9O L c    
  @    r   rF   )r+   r,   T)r   r:   )r)   r=   numpyr   r   r9   rD   rF   r*   r   r   <module>rb      s    
     , , , , , , , ,^7 7 7 7t   . . . . . . . . . .r   