Ë
    Ìi#  ã                   óü   — d dl mZmZmZ d dlmZ d dlmZ  ed«      Z ed«      Z	 ed«       ed«       ed«       ed	«       ed
«       ed«      gZ
dZdZdZ ed«       ed«      gZ ed«      gZ G d„ de«      Zy)é    )ÚROUND_CEILINGÚROUND_FLOORÚDecimal)Úisclose)ÚTickerÚ0Ú10z0.1z0.15z0.2z0.25z0.5z1.0é   é   é
   c                   óX   — e Zd ZdZd„ Zed„ «       Zed„ «       Zed„ «       Zd„ Z	d„ Z
d„ Zy	)
ÚScoreTickera  
    Attempt to find an optimal series of ticks by generating many possible
    sequences and scoring them based on several criteria. Only the best
    tick sequence is returned.

    Based an algorithm described by Austin Clemens:
    http://austinclemens.com/blog/2016/01/09/an-algorithm-for-creating-a-graphs-axes/

    See :meth:`.ScoreTicker.score` for scoring implementation.

    :param domain_min:
        Minimum value of the data series.
    :param domain_max:
        Maximum value of the data series.
    c                 óš   — || _         || _        | j                  «       | _        | j                  d   | _        | j                  d   | _        y )Nr   éÿÿÿÿ)Ú_domain_minÚ_domain_maxÚ_find_ticksÚ_ticksÚ_minÚ_max)ÚselfÚ
domain_minÚ
domain_maxs      úT/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/leather/ticks/score.pyÚ__init__zScoreTicker.__init__4   s@   € Ø%ˆÔØ%ˆÔà×&Ñ&Ó(ˆŒà—K‘K ‘NˆŒ	Ø—K‘K ‘Oˆ�	ó    c                 ó   — | j                   S ©N)r   ©r   s    r   ÚtickszScoreTicker.ticks=   s   € à�{‰{Ðr   c                 ó   — | j                   S r   )r   r   s    r   ÚminzScoreTicker.minA   ó   € à�y‰yÐr   c                 ó   — | j                   S r   )r   r   s    r   ÚmaxzScoreTicker.maxE   r#   r   c                 ó¾  — | j                   t        k  xr | j                  t        kD  }t        | j                  | j                   z
  «      t        dz
  z  }|j                  «       j                  t        ¬«      }g }t        D ]t  }|j                  ||t        t        |«      z  f«       |j                  ||t        t        |dz
  «      z  f«       |j                  ||t        t        |dz   «      z  f«       Œv g }|D �]I  \  }}g }|rQt        | j                   «      |z  j                  t        ¬«      }	|j                  | j                  |	 |z  «      «       nD|j                  | j                  | j                   |z  j                  t        ¬«      |z  «      «       d}
||
dz
     | j                  k  rF| j                  |d   ||
z  z   «      }|j                  |«       |
dz  }
||
dz
     | j                  k  rŒFt        |«      t        k  st        |«      t         kD  r�Œ#|j                  |||| j#                  |||«      dœ«       �ŒL t%        |d„ ¬«      }|d   d   S )z8
        Implements the tick-finding algorithm.
        é   )Úroundingr   )Úbase_intervalÚintervalr    Úscorec                 ó.   — | d   d   t        | d   «      fS )Nr+   Útotalr    )Úlen)Úcs    r   ú<lambda>z)ScoreTicker._find_ticks.<locals>.<lambda>|   s   € °a¸±jÀÑ6IÌ3ÈqÐQXÉzË?Ð5[€ r   )Úkeyr    )r   ÚZEROr   ÚabsÚDEFAULT_TICKSÚlog10Úto_integral_exactr   Ú	INTERVALSÚappendÚpowÚTENÚ_round_tickr   r.   ÚMIN_TICK_COUNTÚMAX_TICK_COUNTÚ_scoreÚsorted)r   Ú
force_zeroÚinterval_guessÚ	magnitudeÚcandidate_intervalsr*   Úcandidate_ticksr)   r    Ú	min_stepsÚtick_numÚtÚbests                r   r   zScoreTicker._find_ticksI   sX  € ð ×%Ñ%¬Ñ,ÒH°×1AÑ1AÄDÑ1Hˆ
ä˜T×-Ñ-°×0@Ñ0@Ñ@ÓAÄ]ÐUVÑEVÑWˆØ"×(Ñ(Ó*×<Ñ<ÄmÐ<ÓTˆ	à Ðä!ò 	WˆHØ×&Ñ&¨°(¼SÄÀiÓ=PÑ2PÐ'QÔRØ×&Ñ&¨°(¼SÄÀiÐRSÁmÓ=TÑ2TÐ'UÔVØ×&Ñ&¨°(¼SÄÀiÐRSÁmÓ=TÑ2TÐ'UÕVð	Wð
 ˆà':ó 	Ñ#ˆM˜8ØˆEáÜ  ×!1Ñ!1Ó2°XÑ=×PÑPÔZgÐPÓh�	Ø—‘Ø×$Ñ$ i Z°(Ñ%:Ó;õð —‘Ø×$Ñ$ d×&6Ñ&6¸Ñ&A×%TÑ%TÔ^iÐ%TÓ%jÐmuÑ%uÓvôð ˆHà˜ 1™Ñ%¨×(8Ñ(8Ò8Ø×$Ñ$ U¨1¡X°¸HÑ1DÑ%EÓF�à—‘˜Q”Ø˜A‘�ð	 ˜ 1™Ñ%¨×(8Ñ(8Ó8ô �5‹zœNÒ*¬c°%«j¼>Ò.IÙà×"Ñ"Ø!.Ø$ØØŸ™ ]°H¸eÓDñ	$ö ð3	ôB �oÑ+[Ô\ˆà�A‰w�wÑÐr   c                 óR  — dddddœ}| j                   |d   z
  |d   | j                  z
  z   }|| j                  | j                   z
  z  }t        d|«      |d<   |t        v rn|t        v rd|d<   nd|d<   t        |«      d	kD  rt        |«      d	z
  |d
<   |d   |d   z   |d
   z   |d<   |S )z–
        Score a given tick sequence based on several criteria. This method returns
        discrete scoring components for easier debugging.
        r   )Ú	pct_wasteÚinterval_penaltyÚlen_penaltyr-   r   r   rJ   é   rK   r'   r
   rL   r-   )r   r   r9   ÚBEST_INTERVALSÚWORST_INTERVALSr.   )r   r)   r*   r    ÚsÚwasterJ   s          r   r>   zScoreTicker._score€   sÝ   € ð Ø !ØØñ	
ˆð ×!Ñ! E¨!¡HÑ,°°r±¸T×=MÑ=MÑ1MÑNˆØ˜T×-Ñ-°×0@Ñ0@Ñ@ÑAˆ	ä˜R Ó+ˆˆ+‰ð œNÑ*ØØœoÑ-Ø$%ˆAÐ Ò!à$%ˆAÐ Ñ!ô ˆu‹:˜Š>Ü # E£
¨Q¡ˆAˆmÑà�{‘^ aÐ(:Ñ&;Ñ;¸aÀÑ>NÑNˆˆ'‰
àˆr   c                 ó¨   — t        dd«      D ]B  }t        t        d«      t        | «      «      }|j                  |«      }t	        ||«      sŒ@|c S  |S )zv
        Round a tick to 0-3 decimal places, if the remaining digits do not
        appear to be significant.
        r   r   r   )Úranger9   r   Úquantizer   )r   rG   ÚrÚexpÚ	quantizeds        r   r;   zScoreTicker._round_tick¢   sS   € ô
 �q˜!“ò 	!ˆAÜ”g˜b“k¤7¨A¨2£;Ó/ˆCØŸ
™
 3›ˆIä�q˜)Õ$Ø Ò ð	!ð ˆr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr    r"   r%   r   r>   r;   © r   r   r   r   $   sY   „ ñò$ð ñó ðð ñó ðð ñó ðò5 òn óDr   r   N)Údecimalr   r   r   Úmathr   Úleather.ticks.baser   r2   r:   r7   r4   r<   r=   rN   rO   r   r]   r   r   ú<module>ra      s�   ðß 7Ñ 7Ý å %ñ ˆsƒ|€Ùˆdƒm€ñ ˆEƒNÙˆFƒOÙˆEƒNÙˆFƒOÙˆEƒNÙˆEƒNð€	ð €ð €ð €ñ ˜%“.¡'¨%£.Ð1€ñ ˜6“?Ð#€ôJ�&õ Jr   