Ë
    uŽ±j[
  ã                   ót   — d Z ddlZddlmc mZ ddlZddl	Z
ddlZddlmZ ddlmZ ddlmZmZ d„ Zd„ Zd„ Zy)	zLIndependent arithmetic and proximity counterexamples for the research audit.é    N)Ú_score_to_signals)Ú	evaluator)ÚmeasureÚverify_tracec                  ór  ‡— t        j                  t        g d¢g d¢g d¢¬«      «      Št        ddddd¬	«      } t        «       }|j                  }‰j
                  }d
} ||| |«      }d}||k(  }|�s‡t        j                  d|fd||f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      dt        j                  «       v st        j                  ‰«      rt        j                  ‰«      ndt        j                  |«      dt        j                  «       v st        j                  | «      rt        j                  | «      ndt        j                  |«      t        j                  |«      t        j                  |«      dœ	z  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}x}x}x}x}}ˆfd„}
 |
| «      } |
t        | d¬«      «      }|j                  }|j                  } |«       }g d¢}||k(  }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}|j                  }|j                  } |«       }g d¢}||k(  }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )N)ç      i@g{®Gáz¤?g=
×£pýh@r   )ç      Y@r	   g     @Y@g     €Y@)Úactivation_scoreÚcloseÚhighr	   g      Œ@g      ŒÀé   g      4@)Ú!i_long_entry_activation_thresholdÚ i_long_exit_activation_thresholdÚ-i_long_exit_activation_confirmation_thresholdÚi_entry_score_windowÚi_trailing_stop_thresholdgš™™™™™©?r   ©ú==)z¦%(py12)s
{%(py12)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s()
}.fragile_count
}(%(py7)s
{%(py7)s = %(py5)s.activation_score
}, %(py8)s, %(py10)s)
} == %(py15)sr   ÚframeÚparams)	Úpy0Úpy2Úpy4Úpy5Úpy7Úpy8Úpy10Úpy12Úpy15zassert %(py17)sÚpy17c                 óÄ   •— t        ‰j                  «       | t        j                  d«      ‰j                  j                  «       ‰j                  j                  «       «      S )Né   )r   ÚcopyÚnpÚzerosr   Úto_numpyr   )Úpr   s    €úJ/Users/jameslopez/projects/TradingBot25/tests/test_mlp_revisit_verifier.pyÚreplayzItest_smoothed_crossing_can_change_with_zero_raw_proximity.<locals>.replay   sA   ø€ Ü  §¡£¨q´"·(±(¸1³+¸u¿{¹{×?SÑ?SÓ?UÐW\×WaÑWa×WjÑWjÓWlÓmÐmó    g33333Y@)r   )FFTF)zh%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.execute_entry
}.tolist
}()
} == %(py9)sÚoriginal)r   r   r   Úpy6Úpy9zassert %(py11)sÚpy11)FTFFÚchanged)ÚpdÚ	DataFrameÚdictr   Úfragile_countr
   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚexecute_entryÚtolist)r   Ú@py_assert1Ú@py_assert3Ú@py_assert6Ú@py_assert9Ú@py_assert11Ú@py_assert14Ú@py_assert13Ú@py_format16Ú@py_format18r)   r+   r/   Ú@py_assert5Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12r   s                     @r(   Ú9test_smoothed_crossing_can_change_with_zero_raw_proximityrL      s­  ø€ Ü�L‰LœÒ/HÚ$<ÒC[ô]ó ^€Eä°DØ)-Ð]bØ¸#ô?€Fô ‹;ÐNˆ;×$Ñ$ÐN U×%;Ñ%;ÐNÀSÐNÑ$Ð%;¸VÀSÓIÐNÈQÐNÐIÈQÑN×N×NÖNÐIÈQ×N×N×N×N×NÑNŒ9×N×NÓNŒ9×N×NÔNˆ;×N×NÒNÐ$×N×N×N×N×NÐN U×N×NÓN U×N×NÔNÐ%;×N×N×N×N×NÐN¸V×N×NÓN¸V×N×NÔNÀS×N×NÒNÐI×N×NÒNÈQ×N×N×N×N×N×N×NÓNôná�f‹~€HÙ”T˜&ÀFÔKÓL€GØ×!Ñ!ÐIÐ!×(Ñ(ÐIÑ(Ó*ÐIÒ.IÐIÐ*Ð.IÑI×I×IÕIÐ*Ð.I×I×I×I×I×IÑIˆ8×I×IÓIˆ8×I×IÔIÐ!×I×IÒIÐ(×I×IÒIÐ*×I×IÒIÐ.I×I×I×I×I×I×I×IØ× Ñ ÐHÐ ×'Ñ'ÐHÑ'Ó)ÐHÒ-HÐHÐ)Ð-HÑH×H×HÕHÐ)Ð-H×H×H×H×H×HÑHˆ7×H×HÓHˆ7×H×HÔHÐ ×H×HÒHÐ'×H×HÒHÐ)×H×HÒHÐ-H×H×H×H×H×H×H×HÐHr*   c                  ó@	  — t        j                  ddd¬«      j                  «       } t        t	        j
                  g d¢«      t	        j
                  g d¢«      t	        j
                  g d¢«      ¬«      }t        | |d	d	«      }|d
   }t        j                  }d}| } ||«      }||k(  }|sÝt        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }	dd|	iz  }
t        t        j                   |
«      «      ‚d x}x}x}x}x}}|d   }t        j                  }d}| } ||«      }||k(  }|sÝt        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }	dd|	iz  }
t        t        j                   |
«      «      ‚d x}x}x}x}x}}t        | |dd «      }|d   }d}||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                   |«      «      ‚d x}x}}|d
   }t        j                  }d}d}||z  }d}||z
  }d}||z  } ||«      }||k(  }|�st        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }d d!|iz  }t        t        j                   |«      «      ‚d x}x}x}x}x}x}x}x}x}x}}y )"Nz2026-02-28 12:00r"   Ú6h©ÚperiodsÚfreq)ç        gš™™™™™¹¿g{®Gáz”?g¸…ëQ¸ž¿)TFFF)FFFT)Ú
net_returnr<   Úexecute_exitz
2026-02-28Úpnl_pcté
   r   )zO%(py1)s == %(py10)s
{%(py10)s = %(py5)s
{%(py5)s = %(py3)s.approx
}(-%(py7)s)
}Úpytest)Úpy1Úpy3r   r   r   zassert %(py12)sr   Údd_pctz
2026-03-01Úentriesr   )z%(py1)s == %(py4)s)rX   r   zassert %(py6)sr,   gR¸…ëQð?g
×£p=
ï?é   éd   )zt%(py1)s == %(py18)s
{%(py18)s = %(py5)s
{%(py5)s = %(py3)s.approx
}((((%(py7)s * %(py9)s) - %(py12)s) * %(py15)s))
})rX   rY   r   r   r-   r   r   Úpy18zassert %(py20)sÚpy20)r0   Ú
date_ranger&   r2   r$   Úarrayr   rW   Úapproxr4   r5   r9   r6   r7   r8   r:   r;   )ÚtimesÚtraceÚfirstÚ@py_assert0Ú@py_assert4r@   rH   rA   Ú@py_assert2Ú@py_format11Ú@py_format13Úcarryr?   Ú@py_format5Ú@py_format7Ú@py_assert10rB   rD   rC   Ú@py_assert16Ú@py_assert17Ú@py_format19Ú@py_format21s                          r(   Ú:test_independent_measurement_keeps_first_loss_and_carry_inrs      sý  € Ü�M‰MÐ,°a¸dÔC×LÑLÓN€EÜœBŸH™HÒ%:Ó;Ü!Ÿx™xÒ(CÓDÜ Ÿh™hÒ'BÓCôE€Eô �E˜5 ,°Ó=€EØ�ÑÐ1œvŸ}™}Ð1¨bÐ1¨b¨SÐ1™}¨SÓ1Ð1ÐÐ1Ñ1×1×1Õ1ÐÐ1×1×1Ó1Ð×1×1×1×1×1Ð1œv×1×1Ó1œv×1×1Ô1˜}×1×1Ò1¨b×1×1Ò1Ð1×1×1×1×1×1×1×1Ñ1Ø�‰?Ð0œfŸm™mÐ0¨RÐ0¨R¨CÐ0™m¨CÓ0Ð0ˆ?Ð0Ñ0×0×0Õ0ˆ?Ð0×0×0Ó0ˆ?×0×0×0×0×0Ð0œf×0×0Ó0œf×0×0Ô0˜m×0×0Ò0¨R×0×0Ò0Ð0×0×0×0×0×0×0×0Ñ0Ü�E˜5 ,°Ó5€EØ�ÑÐ ˜qÐ Ð˜qÑ × × Õ Ð˜q× × Ó Ð× × Ò ˜q× × × × × × Ó Ø�ÑÐ>œvŸ}™}Ð>¨dÐ>°3Ð>¨d°3©hÐ>°qÐ>¨h°q©jÐ>¸#Ð>¨j¸#Ñ-=Ð>™}Ð-=Ó>Ð>ÐÐ>Ñ>×>×>Ö>ÐÐ>×>×>Ó>Ð×>×>×>×>×>Ð>œv×>×>Ó>œv×>×>Ô>˜}×>×>Ò>¨d×>×>Ò>°3×>×>Ò>°q×>×>Ò>¸#×>×>Ò>Ð>×>×>×>×>×>×>×>×>Ô>r*   c                  ó(  — t        j                  ddd¬«      j                  «       } t        t	        j
                  g d¢«      t	        j
                  g d¢«      t	        j
                  g d¢«      t	        j
                  g d¢«      ¬	«      }d
di}t        | t	        j
                  g d¢«      ||«       t        |t	        j
                  g d¢«      ¬«      }t        j                  t        «      5  t        | t	        j
                  g d¢«      ||«       d d d «       t        j                  t        «      5  t        | t	        j
                  g d¢«      t        |t	        j                  d«      ¬«      |«       d d d «       y # 1 sw Y   ŒmxY w# 1 sw Y   y xY w)Nz
2026-01-01é   rN   rO   )r\   r\   r   )TFF)FFT)rR   gR¸…ëQ¸?ç{®Gázt¿)Úpositionr<   rT   rS   ÚPeriod_Measurementsz[])r	   ç     €[@ry   )rR   gš™™™™™¹?rv   )rS   )rw   )r0   r`   r&   r2   r$   ra   r   rW   Úraisesr:   r%   )rc   rd   ÚrowÚbads       r(   ÚFtest_verifier_rejects_corrupt_returns_and_invalid_position_transitionsr}   '   s  € Ü�M‰M˜,°¸Ô=×FÑFÓH€EÜœ"Ÿ(™(¢9Ó-¼R¿X¹XÒFZÓ=[Ü Ÿh™hÒ';Ó<ÌÏÉÒRcÓIdôf€Eà  $Ð
'€CÜ�œŸ™Ò!3Ó4°e¸SÔAÜ
ˆu¤§¡ª/Ó!:Ô
;€CÜ	�‰”~Õ	&Ü�UœBŸH™HÒ%7Ó8¸#¸sÔC÷ 
'ä	�‰”~Õ	&Ü�UœBŸH™HÒ%7Ó8¼$¸uÌrÏxÉxÐXYË{Ô:[Ð]`Ôa÷ 
'Ð	&÷ 
'Ð	&úç	&Ð	&ús   Ã,$E<Ä1AFÅ<FÆF)Ú__doc__Úbuiltinsr6   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter4   Únumpyr$   Úpandasr0   rW   Ústrategies.strategy_mlp_scoresr   Ú#tools.run_mlp_entry_loss_experimentr   Útools.verify_mlp_revisitr   r   rL   rs   r}   © r*   r(   Ú<module>r‰      s0   ðÙ Rß  „ Ó Û Û å <Ý 9ß :òIò
?ó
br*   