
    :EjY!                        d dl mZ d dlZd dlmc mZ d dlZd dl	m
Z d Zdddd	Zd
dddddZd Zd Zd Zd Zd Zd Zd ZdS )    )annotationsN)trader_desk_tiny_live_preflightc                    | j                             dd           |                     t          j        |d          d           d S )NT)parentsexist_ok)	sort_keyszutf-8)encoding)parentmkdir
write_textjsondumps)pathpayloads     `/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_trader_desk_tiny_live_preflight.py_writer      sH    KdT222OODJw$777'OJJJJJ    T	candidater   boolc                h    dd| rdnddddddd| rd	nd
ddddd| rg ndgddddddddgdddddddS )Nz$finance_crypto_trader_desk_bridge.v1z2026-07-01T12:00:00+00:00   r   )tiny_live_candidateswatch_shadowblockedz
intent-btcBTClongtiny_live_candidateno_tradeawaiting_final_preflightz82.00trend_retest_continuation15Tno_candidateokrisk_onz77.00)liquidity_statemarket_regimeconfluence_score)	intent_idcoinsidesignalstatusconfidence_scoresetupnotional_cap_usdcrequires_preflightblockersevidenceexecution_allowedlive_order_allowedmainnet_signed_action)r4   r5   r6   )schema_versiongenerated_atsummarytrade_intentssafety_boundaryr5   r6    r   s    r   _bridger=      s    @31:,AAASTabcc *3<L//*4$+4%)&*"+ABB.1A04yfmnn%)&*)- 
$ 26Tlpqq"!%1  r      50.00z2.5000closedwin_rate
realized_rrA   intrB   strrC   c                J    ddddd| ddd||dd	d
dg ddddddidddddddd	S )Nztrader_desk_shadow_scorecard.v1Z         :      r   z0.0833z33.33)	decisionsr   r   r   rA   winslossesscratchwin_rate_pctrC   avg_rclosure_rate_pctr      z1.0000r?   )rA   rL   rC   rP   T)
paper_onlyr5   r6   )	r7   overallopen_shadow_positionsopen_positionsby_coinr;   rT   r5   r6   r<   r@   s      r   
_scorecardrY   *   sv    ;$&$$ '
 
 "#abbijjk*.deijj"!%-  r   c                     di g ddddS )Nr$   r   F)r-   	positionsopen_ordersstops_missing_countblock_new_entriesprivate_key_usedr<   r<   r   r   _reconcile_okr`   E   s#     "!  r   c            	     "    ddddg g dddgg g dS )NmainnetTFu   0xabc…123u   0xdef…456)	env_guessprivate_key_matches_API_Key%private_key_matches_HL_WALLET_ADDRESS!looks_like_api_wallet_private_keywarningserrorsrecommended_account_addressrecommended_signer_address)filesrg   rh   r<   r<   r   r   _credential_okrl   P   sB     '/39>59/<.;	 	
   r   c                   | dz  }| dz  }t          |t          d                     t          |t          ddd                     t          j        ||	          }|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         }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         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}|d         }||v }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}d}|d         }||v }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}d}|d         }||v }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}d}|d         }||v }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}d}|d         }||v }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}|d         }d}||u }|slt          j        d |fd!||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}|d"         }d}||u }|slt          j        d |fd!||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}|d#         }d}||u }|slt          j        d |fd!||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}|d$         d%         }d}||u }|slt          j        d |fd!||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}d S )&Nbridge.jsonscorecard.jsonTr   
   30.000.3096r@   )bridge_pathscorecard_pathr7   "trader_desk_tiny_live_preflight.v1==z%(py1)s == %(py4)spy1py4assert %(py6)spy6preflight_statusfailcurrent_intentr*   r   shadow_sampler2   )in)z%(py1)s in %(py4)sshadow_winrateread_only_reconcilesigned_credentialstestnet_execution_proofr4   Fisz%(py1)s is %(py4)sr5   r6   r;   dashboard_executes_orders)
r   r=   rY   	preflightbuild_preflight
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanation)	tmp_pathbridgescorer   @py_assert0@py_assert3@py_assert2@py_format5@py_format7s	            r   Ftest_preflight_fails_closed_without_bot_proofs_and_forces_no_executionr   c   sz   %F''E
67T***+++
5*BXNNNOOO'F5QQQG#$L(LL$(LLLLLLLLLLL$(LLLLLL$LLLL(LLLLLLLLLLLLLLLLLLLLLLLLLLLL%&0&0&&0000000000&&00000&0000&000000000000000000000000000#$V,55,5555555555,55555,55555555555555555555555555555551gj11?11111111111?111111?111111111111111111111111111111112wz222222222222222222222222222222222222222222222222222 7GJ$77 $77777777777 $777777 7777$777777777777777777777777777767:#66#66666666666#6666666666#6666666666666666666666666666$;
(;;$(;;;;;;;;;;;$(;;;;;;$;;;;(;;;;;;;;;;;;;;;;;;;;;;;;;;;;&'050'50000000000'500000'00005000000000000000000000000000'(1E1(E1111111111(E11111(1111E111111111111111111111111111*+4u4+u4444444444+u44444+4444u444444444444444444444444444$%&ABKeKBeKKKKKKKKKKBeKKKKKBKKKKeKKKKKKKKKKKKKKKKKKKKKKKKKKKKKr   c                8   | dz  }| dz  }| dz  }| dz  }| dz  }t          |t          d                     t          |t                                 t          |t                                 t          |t	                                 t          |ddddd	           |                    d
d           t          j        |||||          }|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         }g }	||	k    }
|
slt          j	        d|
fd||	f          t          j
        |          t          j
        |	          dz  }dd|iz  }t          t          j        |                    d x}x}
}	d |d         D             }t          |          }	|	sddt          j                    v st          j        t                    rt          j
        t                    ndt          j
        |          t          j
        |	          dz  }t          t          j        |                    d x}}	|d         }d}	||	u }
|
slt          j	        d|
fd||	f          t          j
        |          t          j
        |	          dz  }dd|iz  }t          t          j        |                    d x}x}
}	|d         }d}	||	u }
|
slt          j	        d|
fd||	f          t          j
        |          t          j
        |	          dz  }dd|iz  }t          t          j        |                    d x}x}
}	|d         }d}	||	u }
|
slt          j	        d|
fd||	f          t          j
        |          t          j
        |	          dz  }dd|iz  }t          t          j        |                    d x}x}
}	d S ) Nrn   ro   reconcile.jsoncredentials.jsontestnet.jsonTr   r$   r-   entry_provenreduce_only_stop_provencleanup_provenCTB_TINY_LIVE_ALERT_PROVENtruers   rt   reconcile_pathcredential_matrix_pathtestnet_proof_pathr~   passrv   rx   ry   r|   r}   r2   c              3  .   K   | ]}|d          dk    V  dS )r-   r   Nr<   ).0gates     r   	<genexpr>zQtest_preflight_can_pass_only_when_all_supplied_gates_are_green.<locals>.<genexpr>   s+      EEDtH~'EEEEEEr   gatesz,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}all)py0py2r{   r4   Fr   r   r5   r6   )r   r=   rY   r`   rl   setenvr   r   r   r   r   r   r   r   @py_builtinslocals_should_repr_global_name)r   monkeypatchr   r   	reconcilecredentialstestnetr   r   r   r   r   r   @py_assert1s                 r   >test_preflight_can_pass_only_when_all_supplied_gates_are_greenr   y   s   %F''E++I//K'G
67T***+++
5*,,
9moo&&&
;(()))
7tTVZnrssttt3V<<<' *"  G %&0&0&&0000000000&&00000&0000&000000000000000000000000000:$"$"$$$$$$$$$$"$$$$$$$$$"$$$$$$$$$$$$$$$$$$$$$$$$$$$EEGG4DEEEE3EEEEEEEEEEEEEEEE3EEEEE3EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE&'050'50000000000'500000'00005000000000000000000000000000'(1E1(E1111111111(E11111(1111E111111111111111111111111111*+4u4+u4444444444+u44444+4444u44444444444444444444444444444r   c           
        | dz  }| dz  }| dz  }| dz  }| dz  }t          |t          d                     t          |t                                 t          |t                                 t          |t	                                 t          |ddd	didi g d
           |                    dd           t          j        |||||          }|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}|d         }	||	v}
|
slt          j	        d|
fd||	f          t          j
        |          t          j
        |	          dz  }dd|iz  }t          t          j        |                    d x}x}
}	d S )Nrn   ro   r   r   ztestnet_raw.jsonTr   r$   r-   )r-   mainnet_blockedentry_responsestop_reduce_only_confirmedfinal_positionsfinal_open_ordersr   r   r   r~   r   rv   rx   ry   r|   r}   r   r2   not inz%(py1)s not in %(py4)s)r   r=   rY   r`   rl   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   s                r   2test_preflight_accepts_raw_testnet_fill_stop_smoker      sq   %F''E++I//K++G
67T***+++
5*,,
9moo&&&
;(()))
7tQY[_P`  AE  Z\  su  v  v  w  w  w3V<<<' *"  G %&0&0&&0000000000&&00000&0000&000000000000000000000000000$?GJ,??$,???????????$,??????$????,??????????????????????????????r   c                   | dz  }| dz  }| dz  }| dz  }| dz  }| dz  }t          |t          d                     t          |t                                 t          |t                                 t          |t	                                 t          |d	dddd
           t          |ddg d           t          j        ||||||          }|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}|d         }	||	v}
|
slt          j        d|
fd||	f          t          j	        |          t          j	        |	          dz  }dd|iz  }t          t          j        |                    d x}x}
}	d S )Nrn   ro   r   r   r   zalert_proof.jsonTr   r$   r   r   )alerts_provenalerts_checkedr2   )rs   rt   r   r   r   alert_proof_pathr~   r   rv   rx   ry   r|   r}   alert_deliveryr2   r   r   )r   r=   rY   r`   rl   r   r   r   r   r   r   r   )r   r   r   r   r   r   alertr   r   r   r   r   r   s                r   ,test_preflight_accepts_real_alert_proof_filer      sZ   %F''E++I//K'G))E
67T***+++
5*,,
9moo&&&
;(()))
7tTVZnrssttt
5DA2NNOOO' *"  G %&0&0&&0000000000&&00000&0000&00000000000000000000000000067:#66#66666666666#6666666666#666666666666666666666666666666r   c                .   | dz  }| dz  }| dz  dz  }t          |t          d                     t          |t          ddd	
                     |                    dd           t          j        }dt          |          dt          |          dt          |          dg} ||          }d}	||	k    }
|
st          j        d|
fd||	f          dt          j
                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          t          j        |          t          j        |	          dz  }dd|iz  }t          t          j        |                    d x}x}x}x}
}	t          j        |                                j                  }|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          |          }||k    }|st          j        d|fd ||f          t          j        |          d!t          j
                    v st          j        t                    rt          j        t                    nd!dt          j
                    v st          j        |          rt          j        |          ndt          j        |          d"z  }d#d$|iz  }t          t          j        |                    d x}x}}t          j        |                                          }|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'         }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)         }d}||u }|slt          j        d*|fd+||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d,         }d}||u }|slt          j        d*|fd+||f          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}d S )-Nrn   ro   runtimezpreflight.jsonTr   rp   rq   rr   r@   CTB_LIVE_TRADING_ALLOWEDF)raisingz--bridge-pathz--scorecard-pathz--outputz--jsonr   rv   )zJ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.main
}(%(py4)s)
} == %(py9)sr   )r   r   r{   r}   py9zassert %(py11)spy11r-   r$   rx   ry   r|   r}   output)z0%(py1)s == %(py6)s
{%(py6)s = %(py3)s(%(py4)s)
}rE   )rz   py3r{   r}   zassert %(py8)spy8r7   ru   r~   r   r5   r   r   r6   )r   r=   rY   delenvr   mainrE   r   r   r   r   r   r   r   r   r   loads
readouterrout	read_text)r   capsysr   r   r   r   r   r   @py_assert5@py_assert8@py_assert7@py_format10@py_format12resultr   r   r   r   @py_format9r   s                       r   (test_preflight_cli_writes_finance_exportr      s0   %F''E	!$44F
67T***+++
5*BXNNNOOO15AAA> VCJJCKK	 >>    
  
     
    
     
     
     
       
     
    
    
 !             
                Z))++/00F(#t#t##########t#########t###########################(*s6{{*{**********{****************s*****s*************6*****6******{***************************j))++,,G#$L(LL$(LLLLLLLLLLL$(LLLLLL$LLLL(LLLLLLLLLLLLLLLLLLLLLLLLLLLL%&0&0&&0000000000&&00000&0000&000000000000000000000000000'(1E1(E1111111111(E11111(1111E111111111111111111111111111*+4u4+u4444444444+u44444+4444u44444444444444444444444444444r   )r   r   )rA   rD   rB   rE   rC   rE   )
__future__r   builtinsr   _pytest.assertion.rewrite	assertionrewriter   r   	src.toolsr   r   r   r=   rY   r`   rl   r   r   r   r   r   r<   r   r   <module>r      s!   " " " " " "               B B B B B BK K K
 "&      : !#Gx      6    &L L L,5 5 5:@ @ @27 7 765 5 5 5 5r   