
    {j	                    \    d Z ddlmZ ddlmZ ddlZ ed       G d d             Zd
d	Zy)zNon-repainting swing structure derived from an MLP score series.

The pivot at bar ``p`` becomes usable at ``p + right``.  Signals are emitted
on that confirmation bar, so callers cannot accidentally use future score
values in a backtest.
    )annotations)	dataclassNT)frozenc                  0    e Zd ZU dZded<   ded<   ded<   y)ScoreStructurez?Confirmed swing relations and the resulting bullish-state gate.
np.ndarray
higher_low
lower_highbullish_stateN)__name__
__module____qualname____doc____annotations__     I/Users/jameslopez/projects/TradingBot25/strategies/mlp_score_structure.pyr   r      s    Ir   r   c               |   |dk  s|dk  rt        d      t        j                  | t              }t	        |      }t        j
                  |t              }t        j
                  |t              }t        j
                  |t              }d}d}	d}
t        ||z   |      D ]
  }||z
  }||   }t        j                  |      s|
||<   )|||z
  | }||dz   ||z   dz    }t        j                  |      j                         rt        j                  |      j                         r|t        j                  |      kD  r)|t        j                  |      kD  r|||k  rd||<   d}
|}n@|t        j                  |      k  r(|t        j                  |      k  r|	||	kD  rd||<   d}
|}	|
||<    t        |||      S )zReturn confirmed higher-low/lower-high events for ``score``.

    Equal values are deliberately not pivots: treating flat plateaus as
    repeated highs/lows would create arbitrary structural changes.
       z&left and right must both be at least 1)dtypeNFT)r	   r
   r   )
ValueErrornpasarrayfloatlenzerosboolrangeisfiniteallmaxminr   )scoreleftrightvaluesnr	   r
   r   previous_highprevious_lowbullishconfirmed_atpivot_atpivotbeforeafters                   r   confirmed_score_structurer0      s    ax519ABBZZU+FFA!4(J!4(JHHQd+M"&M!%LGdUlA.%'x {{5!*1M,'41x!|Hu$4q$89;;v""$U);)?)?)Arvvf~%%"&&-*? ,1F/3J|,#G %'EBFF5M,A+0D/3J|,"G$&-l#+ /. ZJVcddr   )r#   r   r$   intr%   r1   returnr   )	r   
__future__r   dataclassesr   numpyr   r   r0   r   r   r   <module>r6      s9    # !  $  )er   