
    JjZ>                    P   d dl mZ d dlZd dlmc mZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZm Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&m'Z' d Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d  Z8d! Z9dS )"    )annotationsN)datetimetimezone)Decimal)summarize_l2_book)build_market_confluence_reportscore_coin_confluence)CoinMarketContextMarketContextSnapshot)event_risk_from_news_itemsload_event_risk_context)CoinGeckoFundamentalsClient) build_normalized_market_snapshot)!_build_research_sentiment_context)append_snapshotenrich_with_derivatives_deltaswrite_latest)collect_news_event_riskparse_rss_items)classify_market_rows)build_reportc                    i dddt          d          dt          d          dt          d          d	t          d
          dt          d          dt          d          dt          d          dt          d          dt          j        t          j                  dt          d          dddddt          d          dt          d          dt          d          d t          d!          t          d          t          d"          t          d#          t          d#          t          d$          t          d$          t          d%          t          d%          d&}|                    |            t          d'i |S )(NcoinBTCrsi55sma_fast101sma_slow100atr1.2funding0volume50000000mid102
spread_pctz0.03	timestampreliability_scorez0.99
stale_dataFl2_availableTopen_interest12345.67premiumz0.00002	oracle_pxz102.0mark_pxz102.057500000050000z0.02z0.04)prev_day_pxday_ntl_vlmbid_depth_notional_5ask_depth_notional_5buy_impact_1k_pctsell_impact_1k_pctbuy_impact_5k_pctsell_impact_5k_pct )r   r   nowr   utcupdater
   )	overridesdatas     R/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_market_confluence.pyctxrD      s   wt}} 	GENN 	GENN	
 	wu~~ 	73<< 	'*%% 	wu~~ 	gfoo 	X\(,// 	WV__ 	e 	 	,, 	79%%  	WW%%!" 	78$$#$ u~~z** ' 0 0 ' 0 0$V__%foo$V__%foo3  D6 	KK	$$t$$$    c                    t          t                                } | j        }d}t          |          }||k    }|st	          j        d|fd||f          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          dt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}x}}| j        }d	}||k    }|st	          j        d
|fd||f          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          t	          j	        |          dz  }dd|iz  }	t          t	          j        |	                    d x}x}}| j        }d}||u }|st	          j        d|fd||f          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          t	          j	        |          dz  }dd|iz  }	t          t	          j        |	                    d x}x}}| j        }d}||u }|st	          j        d|fd||f          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          t	          j	        |          dz  }dd|iz  }	t          t	          j        |	                    d x}x}}| j        }d}||k    }|st	          j        d
|fd||f          dt          j                    v st	          j        |           rt	          j	        |           ndt	          j	        |          t	          j	        |          dz  }dd|iz  }	t          t	          j        |	                    d x}x}}d S )N60>=)zQ%(py2)s
{%(py2)s = %(py0)s.final_score
} >= %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}scorer   py0py2py4py6py8assert %(py10)spy10paper_candidate==z6%(py2)s
{%(py2)s = %(py0)s.recommendation
} == %(py5)srL   rM   py5assert %(py7)spy7Fis)z:%(py2)s
{%(py2)s = %(py0)s.live_order_allowed
} is %(py5)s)z=%(py2)s
{%(py2)s = %(py0)s.mainnet_signed_action
} is %(py5)sr=   )z0%(py2)s
{%(py2)s = %(py0)s.blockers
} == %(py5)s)r	   rD   final_scorer   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationrecommendationlive_order_allowedmainnet_signed_actionblockers)
rJ   @py_assert1@py_assert5@py_assert7@py_assert3@py_format9@py_format11@py_assert4@py_format6@py_format8s
             rC   7test_score_coin_confluence_accepts_clean_retest_contextrs   3   s   !#%%((E-------------------------5-----5-------------------------------------------------------------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45444445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4444444444#,u,#u,,,,,,,,,,#u,,,,,,,,,,,,5,,,,,5,,,,,,#,,,,u,,,,,,,,,,,,,,,,,,,,,,,,,,,&/%/&%//////////&%////////////5/////5//////&////%///////////////////////////>R>R>R55>RrE   c                 	   t          t          t          d          t          d          t          d          t          d          dt          d          t          d                              } | j        }d}||k    }|st	          j        d|fd	||f          d
t          j                    v st	          j        |           rt	          j	        |           nd
t	          j	        |          t	          j	        |          dz  }dd|iz  }t          t	          j        |                    d x}x}}d}| j        }||v }|st	          j        d|fd||f          t	          j	        |          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}}d}| j        }||v }|st	          j        d|fd||f          t	          j	        |          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}}d}| j        }||v }|st	          j        d|fd||f          t	          j	        |          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}}d}| j        }||v }|st	          j        d|fd||f          t	          j	        |          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}}d}| j        }||v }|st	          j        d|fd||f          t	          j	        |          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}}d S )N825000000z0.20Fz0.18)r   r%   r6   r)   r-   r9   r:   block_new_entryrT   rV   rJ   rW   rY   rZ   momentum_overheatedinz0%(py1)s in %(py5)s
{%(py5)s = %(py3)s.blockers
}py1py3rX   weak_liquidityspread_too_widel2_unavailableimpact_slippage_too_high)r	   rD   r   rf   r^   r_   r`   ra   rb   rc   rd   re   ri   )rJ   rj   rp   rm   rq   rr   @py_assert0@py_assert2s           rC   @test_score_coin_confluence_blocks_overheated_or_illiquid_contextr   =   s   !#'$--	@R@R`ghq`r`r  @G  HN  @O  @O  ^c  w~  E  wF  wF  [b  ci  [j  [j  #k  #k  #k  l  lE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45444445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4444444444 2EN2 N2222222222 N22222 22222222222E22222E222222N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-u~-~----------~----------------u-----u------~---------------------------..................................................................-u~-~----------~----------------u-----u------~---------------------------%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77777777777777777rE   c                 ~	   t          dddddddgddddddggi          } | j        }d }||u}|st          j        d|fd	||f          d
t	          j                    v st          j        |           rt          j        |           nd
t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}| j
        }d}t          |          }||k    }|st          j        d|fd||f          d
t	          j                    v st          j        |           rt          j        |           nd
t          j        |          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          dz  }dd|iz  }	t          t          j	        |	                    d x}x}x}}| j        }d}t          |          }||k    }|st          j        d|fd||f          d
t	          j                    v st          j        |           rt          j        |           nd
t          j        |          dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          t          j        |          dz  }dd|iz  }	t          t          j	        |	                    d x}x}x}}| j        }d }||u}|st          j        d|fd||f          d
t	          j                    v st          j        |           rt          j        |           nd
t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}| j        }d }||u}|st          j        d|fd||f          d
t	          j                    v st          j        |           rt          j        |           nd
t          j        |          t          j        |          dz  }dd|iz  }t          t          j	        |                    d x}x}}d S )Nlevels9920)pxsz98r   r(   )is not)z6%(py2)s
{%(py2)s = %(py0)s.spread_pct
} is not %(py5)ssummaryrW   rY   rZ   3940rT   )zZ%(py2)s
{%(py2)s = %(py0)s.bid_depth_notional_5
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   rK   rQ   rR   4060)zZ%(py2)s
{%(py2)s = %(py0)s.ask_depth_notional_5
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
})z=%(py2)s
{%(py2)s = %(py0)s.buy_impact_1k_pct
} is not %(py5)s)z>%(py2)s
{%(py2)s = %(py0)s.sell_impact_1k_pct
} is not %(py5)s)r   r)   r^   r_   r`   ra   rb   rc   rd   re   r7   r   r8   r9   r:   )
r   rj   rp   rm   rq   rr   rk   rl   rn   ro   s
             rC   2test_summarize_l2_book_calculates_depth_and_impactr   H   sl   D	!	!$d#;#;<T	"	"5$=$=>, !  G
 )T)T))))))))))T))))))))))))7)))))7))))))))))T)))))))))))))))))))))))))))':6:76??:'?::::::::::'?::::::::::::7:::::7::::::':::::::::::7:::::7::::::6::::?:::::::::::::::::::::::::::::':6:76??:'?::::::::::'?::::::::::::7:::::7::::::':::::::::::7:::::7::::::6::::?:::::::::::::::::::::::::::::$0D0$D0000000000$D0000000000007000007000000$0000D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%1T1%T1111111111%T1111111111117111117111111%1111T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1rE   c            
     	   t          t          t          d          t          d          t          d          t          d                              } | j        }d}||k    }|st	          j        d|fd||f          d	t          j                    v st	          j        |           rt	          j	        |           nd	t	          j	        |          t	          j	        |          d
z  }dd|iz  }t          t	          j        |                    d x}x}}| j        }d}t          |          }||k     }|st	          j        d|fd||f          d	t          j                    v st	          j        |           rt	          j	        |           nd	t	          j	        |          dt          j                    v st	          j        t                    rt	          j	        t                    ndt	          j	        |          t	          j	        |          dz  }dd|iz  }	t          t	          j        |	                    d x}x}x}}d}
| j        }|
|v }|st	          j        d|fd|
|f          t	          j	        |
          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}}d}
| j        }|
|v }|st	          j        d|fd|
|f          t	          j	        |
          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}}d}
| j        }|
|v }|st	          j        d|fd|
|f          t	          j	        |
          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}}d S )Nz0.00018z0.0015r    z100.4)r#   r0   r1   r2   rw   rT   rV   rJ   rW   rY   rZ   rG   )<)zV%(py2)s
{%(py2)s = %(py0)s.derivatives_score
} < %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   rK   rQ   rR   crowded_positive_fundingry   r{   r|   premium_too_highmark_oracle_basis_wide)r	   rD   r   rf   r^   r_   r`   ra   rb   rc   rd   re   derivatives_scoreri   )rJ   rj   rp   rm   rq   rr   rk   rl   rn   ro   r   r   s               rC   =test_score_coin_confluence_blocks_crowded_derivatives_contextr   U   s)   !#gi.@.@'RZJ[J[gnotgugu  @G  HO  @P  @P  #Q  #Q  #Q  R  RE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45444445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4444444444"2T2WT]]2"]2222222222"]2222222222225222225222222"22222222222W22222W222222T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%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777777777777777//////////////////////////////////////////////////////////////////#5u~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5u55555u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5rE   c                 b   t          j        t          d          t          dt          d          t          d          t          d                    t          dt          d	          t          d
          t          d                    g          } t	          |           }|                                }|j        }ddh}||v }|st          j        d|fd||f          dt          j
                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|j        }d}||k    }|st          j        d|fd||f          dt          j
                    v st          j        |          rt          j        |          nd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!}||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         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         }||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'         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'         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'         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'         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         d/         }|d'         d         d0         }||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(         }d1}||k    }	|	slt          j        d"|	fd#||f          t          j        |          t          j        |          dz  }
dd|
iz  }t          t          j        |                    d x}x}	}d S )2Nr   r   ETHr   r    103)r   r   r   r'   WLD803000000z0.15)r   r   r%   r)   risk_on	selectivery   )z5%(py2)s
{%(py2)s = %(py0)s.market_regime
} in %(py5)sreportrW   rY   rZ      rH   )z6%(py2)s
{%(py2)s = %(py0)s.eligible_count
} >= %(py5)srg   Fr[   z%(py1)s is %(py4)sr}   rN   assert %(py6)srO   rh   score_versionconfluence_score.v1rT   z%(py1)s == %(py4)sriskweightsz%(py1)s in %(py4)sscoresrf   rS   r   sentiment_scoreevent_risk_scoreportfolio_score
risk_scorefinal_trade_scorer]   rw   )r   from_coin_contextsrD   r   r   to_dictmarket_regimer^   r_   r`   ra   rb   rc   rd   re   eligible_count)snapshotr   rB   rj   rp   rm   rq   rr   r   r   @py_format5@py_format7s               rC   >test_build_market_confluence_report_sets_regime_and_serializesr   _   s
   $7'%..gV[nn]]]GDMM')2D2DQXY_Q`Q`aaa9  H ,H55F>>D;I{#;;#;;;;;;;;;;;#;;;;;;;;;;;;;6;;;;;6;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;; %A% A%%%%%%%%%% A%%%%%%%%%%%%6%%%%%6%%%%%% %%%%A%%%%%%%%%%%%%%%%%%%%%%%%%%%$%..%..........%.....%...............................'(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 9$99 $99999999999 $999999 9999$9999999999999999999999999999$T)_$6_$$$$$$$$$$6_$$$$$6$$$$_$$$$$$$$$$$$$$$$$$$$$$$$$$$>% !12G6GG26GGGGGGGGGGG26GGGGGG2GGGG6GGGGGGGGGGGGGGGGGGGGGGGGGGGG7$x."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5Xu 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5556h!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5Xu 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55504>%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000>% !45]h9N}9]]59]]]]]]]]]]]59]]]]]]5]]]]9]]]]]]]]]]]]]]]]]]]]]]]]]]]]>% !12G6GG26GGGGGGGGGGG26GGGGGG2GGGG6GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGrE   c            	     \   t          j        t          dt          d          t          d                    t          dt          d          d          g          } t	          |           }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         }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}}g d}	t          |	          }|j        }
 |
|          }|sddt          j                    v st          j        t                    rt          j	        t                    ndt          j	        |	          t          j	        |          t          j	        |
          dt          j                    v st          j        |          rt          j	        |          ndt          j	        |          dz  }t          t          j        |                    d x}	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         }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"         }	t          |	          }d#}t          |          }||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        t                    rt          j	        t                    nd&t          j	        |          t          j	        |          d'z  }d(d)|iz  }t          t          j        |                    d x}	x}x}
x}}|d*         d+         }	t          |	          }d,}t          |          }||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        t                    rt          j	        t                    nd&t          j	        |          t          j	        |          d'z  }d(d)|iz  }t          t          j        |                    d x}	x}x}
x}}|d*         d.         }	t          |	          }d,}t          |          }||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        t                    rt          j	        t                    nd&t          j	        |          t          j	        |          d'z  }d(d)|iz  }t          t          j        |                    d x}	x}x}
x}}|d         d/         }d0}||k    }|slt          j        d|fd||f          t          j	        |          t          j	        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d1         d2         }d3}||k    }|slt          j        d|fd||f          t          j	        |          t          j	        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d4         d2         }d3}||k    }|slt          j        d|fd||f          t          j	        |          t          j	        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d5         d2         }d3}||k    }|slt          j        d|fd||f          t          j	        |          t          j	        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d4         d"         }	t          |	          }d6}t          |          }||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        t                    rt          j	        t                    nd&t          j	        |          t          j	        |          d'z  }d(d)|iz  }t          t          j        |                    d x}	x}x}
x}}|d7         d"         }	t          |	          }d#}t          |          }||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        t                    rt          j	        t                    nd&t          j	        |          t          j	        |          d'z  }d(d)|iz  }t          t          j        |                    d x}	x}x}
x}}|d8         d9         }d:}||k    }|slt          j        d|fd||f          t          j	        |          t          j	        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d8         d;         }|d8         d<         }||k    }|slt          j        d|fd||f          t          j	        |          t          j	        |          dz  }dd|iz  }t          t          j        |                    d x}x}}|d8         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 S )?Nr   z0.00012z0.0012)r   r#   r0   r   z0.12T)r   r)   r-   coinsschema_versionzmarket_snapshot.v1rT   r   r   r   rO   rg   Fr[   r   rh   )priceohlcvtrendmomentum
volatility	liquidityderivativesfundamentals	sentiment
event_riskregimer   
confluencezhassert %(py9)s
{%(py9)s = %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}.issubset
}(%(py7)s)
}setbtc)rL   rM   rN   rO   rZ   py9r   sourcehyperliquid_metaAndAssetCtxsr#   z
0.00012000r.   r/   rJ   r$   )>)zO%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py10)s
{%(py10)s = %(py6)s(%(py8)s)
}r   )rL   rM   rN   rO   rP   rR   zassert %(py12)spy12r   r9   z0.0200)zP%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py10)s
{%(py10)s = %(py6)s(%(py8)s)
}r:   crowding_statecrowded_longr   status
not_loadedr   r   50.00r   r   r   r   r   r]   rf   rw   )r   r   rD   r   r   r   r   r^   r_   rc   rd   re   r   issubsetr`   ra   rb   )r   r   
normalizedr   r   rm   r   r   r   rj   rk   @py_assert8@py_format10rl   @py_assert9ro   @py_format13s                    rC   Ktest_build_normalized_market_snapshot_exposes_phase2_schema_and_derivativesr   y   s   $7	 2 2GH<M<MNNN76??FFF9  H 099J1(JGGOOQQJ
W
e
$C&'?+??'+???????????'+??????'????+????????????????????????????*+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-.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 l  l  l  {3  l  m  m  {  m  v  {  v  v  wz  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {3  {  {  {  {  {3  {  {  {  {  {  {  l  {  {  {  {  m  {  {  {  {  v  {  {  {  {  {  {  {  {  {  {  {  wz  {  {  {  {  {  wz  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {  {}h'I+II'+IIIIIIIIIII'+IIIIII'IIII+IIIIIIIIIIIIIIIIIIIIIIIIIIII}i(8L8(L8888888888(L88888(8888L888888888888888888888888888}o.<*<.*<<<<<<<<<<.*<<<<<.<<<<*<<<<<<<<<<<<<<<<<<<<<<<<<<<}%g.>7.//>#>'#,,>/,>>>>>>>>>>/,>>>>>>>>>>>>7>>>>>7>>>>>>.>>>>/>>>>>>>>>>>'>>>>>'>>>>>>#>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>{#$78N7899NXNWX=N=NN9=NNNNNNNNNNN9=NNNNNNNNNNNNN7NNNNN7NNNNNN8NNNN9NNNNNNNNNNNWNNNNNWNNNNNNXNNNN=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN{#$89O79::OhOgh>O>OO:>OOOOOOOOOOO:>OOOOOOOOOOOOO7OOOOO7OOOOOO9OOOO:OOOOOOOOOOOgOOOOOgOOOOOOhOOOO>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO}./A>A/>AAAAAAAAAA/>AAAAA/AAAA>AAAAAAAAAAAAAAAAAAAAAAAAAAA~x(8L8(L8888888888(L88888(8888L888888888888888888888888888{H%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|X&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{#G,A7,--AA1A1AA-1AAAAAAAAAAA-1AAAAAAAAAAAAA7AAAAA7AAAAAA,AAAA-AAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv;w'77'((73773<<7(<7777777777(<7777777777777777777777777'7777(7777777777777777777777773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|_-F1FF-1FFFFFFFFFFF-1FFFFFF-FFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFF|01US5F}5UU15UUUUUUUUUUU15UUUUUU1UUUU5UUUUUUUUUUUUUUUUUUUUUUUUUUUU|-.C2CC.2CCCCCCCCCCC.2CCCCCC.CCCC2CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrE   c                 p    G d d          } t           |                                           d          }|                    d          }|j        }d}||k    }|st	          j        d|fd||f          dt          j                    v st	          j        |          rt	          j	        |          nd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}||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}||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}||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}||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"}||k    }	|	slt	          j        d|	fd||f          t	          j	        |          t	          j	        |          dz  }
dd|
iz  }t          t	          j        |                    d x}x}	}d S )#Nc                      e Zd ZdddZdS )Stest_coingecko_fundamentals_client_maps_public_market_fields.<locals>.FakeTransport
   )timeoutc               (   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d	d
ddddddddddgS )Nbitcoinidsry   r   r   r   rO     i  2      g      @g      g      ?g      )@d         )id
market_capfully_diluted_valuationtotal_volumemarket_cap_rank'price_change_percentage_24h_in_currency&price_change_percentage_7d_in_currency&price_change_percentage_1h_in_currency'price_change_percentage_30d_in_currencyathatlcirculating_supplytotal_supply)r^   r_   rc   rd   re   )	selfurlparamsr   r   rm   r   r   r   s	            rC   getzWtest_coingecko_fundamentals_client_maps_public_market_fields.<locals>.FakeTransport.get   s    -u-9----------9-----9-------------------------------"+/ "#$;>:?:=;?&( "   rE   N)__name__
__module____qualname__r   r=   rE   rC   FakeTransportr      s0        .0 	 	 	 	 	 	 	rE   r   )r   r   loadedrT   )z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)sr   rW   rY   rZ   r   coingecko_marketsr   r   r   rO   r   coingecko_idr   market_cap_usd1000r   r   price_change_1h_pctz0.5price_change_30d_pctz12.5ath_usdr    atl_usd1fdv_to_market_capr"   )r   collectfor_coinr   r^   r_   r`   ra   rb   rc   rd   re   )r   r   r   rj   rp   rm   rq   rr   r   r   r   r   s               rC   <test_coingecko_fundamentals_client_maps_public_market_fieldsr     s          & +==??;;CCHMMH


E
"
"C?&h&?h&&&&&&&&&&?h&&&&&&&&&&&&8&&&&&8&&&&&&?&&&&h&&&&&&&&&&&&&&&&&&&&&&&&&&&x=///=///////////=//////=////////////////////////////////x=$H$=H$$$$$$$$$$=H$$$$$=$$$$H$$$$$$$$$$$$$$$$$$$$$$$$$$$~+)+)++++++++++)+++++++++)+++++++++++++++++++++++++++ *F* F********** F***** ****F*************************** !&Q&!Q&&&&&&&&&&!Q&&&&&!&&&&Q&&&&&&&&&&&&&&&&&&&&&&&&&&&$%..%..........%.....%...............................%&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y>"U">U"""""""""">U""""">""""U"""""""""""""""""""""""""""y> S >S          >S     >    S                           "#,u,#u,,,,,,,,,,#u,,,,,#,,,,u,,,,,,,,,,,,,,,,,,,,,,,,,,,,,rE   c                    t          j        t          d          g          } t          |           }t	          | |dddddidddd	d
diddddddi                                          }|d         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         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         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         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         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 S )Nr   r   r  r   r   )r   r   r   &tradingview_community_research_contextloaded_research_onlyr   r   )r   r   rJ   recent_ideas_countnews_search_research_contextgreen80.00)r   r   
risk_levelrJ   )r   r   r   r   r   r   rT   r   r   r   rO   r   r   r  r   r  )r   r   rD   r   r   r   r^   r_   rc   rd   re   )r   r   r   r   rm   r   r   r   s           rC   ;test_normalized_market_snapshot_accepts_loaded_fundamentalsr     sZ   $7%8IJJH/99J1(;xdeffg%MYo  {B  Z[  \  \  ]&DPfv}  IP  Q  Q  R   gii  gu%n5h?K8K?8KKKKKKKKKK?8KKKKK?KKKK8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gu%n56GHMAMHAMMMMMMMMMMHAMMMMMHMMMMAMMMMMMMMMMMMMMMMMMMMMMMMMMMgu%k28<V@VV<@VVVVVVVVVVV<@VVVVVV<VVVV@VVVVVVVVVVVVVVVVVVVVVVVVVVVVgu%k23GHMAMHAMMMMMMMMMMHAMMMMMHMMMMAMMMMMMMMMMMMMMMMMMMMMMMMMMMgu%l3LALWLAWLLLLLLLLLLAWLLLLLALLLLW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LrE   c                   | dz  }|                                  |dz                      dd           t          dt          |                     \  }}|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         }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}||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         }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researchz!tradingview_community_ideas.jsonlzY{"coin":"BTC","bias":"bullish","live_order_allowed":false,"mainnet_signed_action":false}
utf-8encoding)r   r   )r   runtime_dirr   r   r  rT   r   r   r   rO   r  r   research_onlyTr[   r   rg   F)	mkdir
write_textr   strr^   r_   rc   rd   re   )	tmp_pathresearch_dirrowsr   r   rm   r   r   r   s	            rC   0test_research_sentiment_context_is_research_onlyr$     s   j(L77CC  Ea  lsC  t  t  t5NX[\dXeXefffMD';x 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;+,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;'/4/'4//////////'4/////'////4///////////////////////////;+,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?#+t+#t++++++++++#t+++++#++++t+++++++++++++++++++++++++++++rE   c                    d} t          | dd          }t          dd          }t          d|                                          }t          d|                                          }t	          |          }d	}||k    }|st          j        d
|fd||f          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
        |          t          j
        |          dz  }dd|iz  }	t          t          j        |	                    d x}x}}|d         }
ddh}|
|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}|
|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 )Na}  <?xml version='1.0'?><rss><channel>
    <item><title>Bitcoin rallies before FOMC decision</title><description>Crypto traders watch CPI and Fed risk.</description><link>https://example.test/btc</link></item>
    <item><title>Solana bridge exploit reported</title><description>SOL ecosystem exploit risk.</description><link>https://example.test/sol</link></item>
    </channel></rss>unit)r   SOL)r   r   r=   )feedsr   r   r'  r   rT   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenitems)rL   r}   r~   rO   zassert %(py8)srP   r  yellowredry   r   r   r   rO   r   rg   Fr[   r   rh   )r   r   r   r   r)  r^   r_   r`   ra   rb   rc   rd   re   )rssr*  payload
manual_btc
manual_solr   rk   rp   r   rn   r   rm   r   s                rC   Atest_news_event_risk_collector_parses_rss_and_stays_research_onlyr1     s5   C
 CnEEEE%BnEEEG+E599AACCJ+E599AACCJu:::?:33uu:l#8%'88#'88888888888#'888888#8888'8888888888888888888888888888l#,u,#u,,,,,,,,,,#u,,,,,#,,,,u,,,,,,,,,,,,,,,,,,,,,,,,,,,'(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4rE   c                   dddddiddd}| dz  }| d	z  }t          ||           t          ||           |j        }d
} ||          }|j        }d} ||          }	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	        |          t	          j	        |          t	          j	        |	          t	          j	        |
          dz  }dd|iz  }t          t	          j        |                    d x}x}x}x}x}x}	x}}
t          d                              |                    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         }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2026-07-05T00:00:00+00:00r   r$   r	  )r#   r.   Fr*   r   rg   rh   zderivatives_history.jsonlzderivatives_latest.jsonr  r  
r   rT   )z%(py12)s
{%(py12)s = %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.read_text
}(encoding=%(py4)s)
}.count
}(%(py10)s)
} == %(py15)shistory)rL   rM   rN   rO   rP   rR   r   py15zassert %(py17)spy17jsonrg   r[   r   r   r   rO   rh   )r   r   	read_textcountr^   r_   r`   ra   rb   rc   rd   re   
__import__loads)r!  r.  r6  latestrj   rm   rk   rl   r   @py_assert11@py_assert14@py_assert13@py_format16@py_format18r   r   r   r   r   s                      rC   6test_derivatives_history_writers_emit_jsonl_and_latestrD     sn   75VYloJpJpBq  JO  jo  p  pG44G11FGW%%%!!!?g?g...?.4?T?44T::?a?:a??????????:a????????????7?????7??????????g????.????4????T????:????a?????????????????????????????????????%%f&6&6&6&H&HIIF&'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)*3e3*e3333333333*e33333*3333e33333333333333333333333333333rE   c                    ddddddiddd} d	dd
dddidg}t          | |d          }|d         d         }|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         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}||k    }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }t	          t          j        |                    d x}x}}d S )Nz2026-07-05T01:00:00+00:00r   110z0.00006z0.0006)r.   r#   r0   Fr4  r3  r    z0.00001z0.0001)r*   r   )<   )windowsr   derivatives_deltas60mopen_interest_change_pctz10.0000rT   r   r   r   rO   funding_changez
0.00005000crowding_alertneutral)r   r^   r_   rc   rd   re   )	r.  r6  enrichedr   r   rm   r   r   r   s	            rC   3test_derivatives_history_enriches_oi_funding_deltasrP     s   75\anw  EM  KN  KN  CO  gl  GL  M  MG8E]box  FN  LO  LO  DP  Q  Q  RG-gwNNNH
7
E
"C#$U+,FGT9TG9TTTTTTTTTTG9TTTTTGTTTT9TTTTTTTTTTTTTTTTTTTTTTTTTTT#$U+,<=MM=MMMMMMMMMM=MMMMM=MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM -I- I---------- I----- ----I-----------------------------rE   c                 l   dgddddg} t          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}||k    }|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MARKETz"Crypto market watches FOMC and CPIzFed macro riskcrypto_news_rsssymbolstitler   categoryr   r  r+  rT   r   r   r   rO   rJ   r   r   r   r^   r_   rc   rd   re   )r*  r   r   rm   r   r   r   s          rC   3test_event_risk_market_macro_is_yellow_not_coin_redrY    s   ".R_o  ~O  P  P  QE
$UE
2
2
:
:
<
<C|((((((((((((((((((((((((((((((((((((((((((((((((w<"7"<7""""""""""<7"""""<""""7"""""""""""""""""""""""""""""rE   c                 l   dgddddg} t          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}||k    }|slt          j        d|fd	||f          t          j        |          t          j        |          d
z  }dd|iz  }t          t          j        |                    d x}x}}d S )Nr'  Solana bridge exploit reportedzSOL ecosystem exploit riskrS  rT  r  r,  rT   r   r   r   rO   rJ   z20.00rX  r*  solr   rm   r   r   r   s          rC   &test_event_risk_coin_exploit_stays_redr^    s   +KXt  CT  U  U  VE
$UE
2
2
:
:
<
<C|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%w<"7"<7""""""""""<7"""""<""""7"""""""""""""""""""""""""""""rE   c            
        dgdddddg} t          d| 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 S )Nr'  z2026-07-01T00:00:00+00:00r[  zold itemrS  )rU  published_atrV  r   rW  i        )tzinfo)r>   r  r  rT   r   r   r   rO   rJ   r  )
r   r   r   r?   r   r^   r_   rc   rd   re   r\  s          rC   &test_event_risk_ignores_stale_old_newsrd    s   2MXx  FP  ^o  p  p  qE
$UExaS[S_7`7`7`
a
a
a
i
i
k
kC|''''''''''''''''''''''''''''''''''''''''''''''''w<"7"<7""""""""""<7"""""<""""7"""""""""""""""""""""""""""""rE   c            
        ddddddddd	d
d
ddddddddddddddg} t          | ddhdh          }d |D             }d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!         }||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          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%         }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 )*Nr   r   Bitcoinr   i e      r   )symbolr   namer   r   r   r   r   illiquidIlliquidi  r   P   )ri  r   rj  r   r   r   r   r]  solanaSolanai iir   r'  )
hl_symbolstrending_symbolsc                    g | ]
}|d          S )ri  r=   ).0rows     rC   
<listcomp>zOtest_coin_opportunity_radar_detects_hl_movers_research_only.<locals>.<listcomp>)  s    000cCM000rE   rT   r   r   r   rO   sharp_1h_selloffr   reasonsry   r   coingecko_trendingrg   Fr[   r   rh   )r   r^   r_   rc   rd   re   )r#  
candidatesr   rm   r   r   r   s          rC   ;test_coin_opportunity_radar_detects_hl_movers_research_onlyrz     s   	9QRdm  Z[  HJ  Z^  	_  	_ZX[mq  ^`  MO  	P  	P(qbk  XZ  GJ  	K  	KD &du~Y^X_```J00Z000BUENB0NBBBBBBBBBB0NBBBBB0BBBBNBBBBBBBBBBBBBBBBBBBBBBBBBBB9Ay!99!99999999999!9999999999!9999999999999999999999999999;:a=#;;#;;;;;;;;;;;#;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=-.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a=01:U:1U::::::::::1U:::::1::::U:::::::::::::::::::::::::::::rE   c                   | dz  dz  }|                     d           |dz                      dd           |d	z                      d
d           | dz                                    | dz  dz                      dd           t          | | dz  d          }|d         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         }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         }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 S ) Nexperiments"candidate_v76_fee_aware_anti_chaseT)parentszsignal_journal.jsonlz{"final_decision":"blocked:confluence_block_new_entry","would_enter":false,"block_reason":["confluence_block_new_entry","tv_bias_bearish"],"confluence_gate":{"score":"55"},"tradingview_context":{"available":true}}
r  r  ztrade_journal.jsonlz&{"event":"exit","net_pnl_usd":"0.10"}
reportszmarket_confluence_latest.jsonz>{"confluence":{"market_regime":"risk_off","eligible_count":0}}r   )runtime_rootexperiment_rootlimit
strategiesrg   Fr[   r   r   r   rO   signals_seenr   rT   r   top_blockersr   confluence_block_new_entrytv_available_signals)r  r  r   r^   r_   rc   rd   re   )	r!  expr   rt  r   rm   r   r   r   s	            rC   6test_confluence_gate_impact_report_summarizes_blockersr  0  s   
]
"%I
ICIIdI!!-- 	b .    	  ,,-Vah,iii	  """	;;GG  II  T[G  \  \  \xMAYacdddF

C
DC&'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~#!#!##########!#########!###########################~q!!$D(DD$(DDDDDDDDDDD$(DDDDDD$DDDD(DDDDDDDDDDDDDDDDDDDDDDDDDDDD%&+!+&!++++++++++&!+++++&++++!+++++++++++++++++++++++++++++rE   ):
__future__r   builtinsr`   _pytest.assertion.rewrite	assertionrewriter^   r   r   decimalr   src.hyperliquid.market_datar   src.market.confluencer   r	   src.market.contextr
   r   src.market.event_riskr   r   src.market.fundamentalsr   src.market.snapshotr   "src.tools.market_confluence_reportr   'src.tools.derivatives_history_collectorr   r   r   #src.tools.news_event_risk_collectorr   r    src.tools.coin_opportunity_radarr   'src.tools.confluence_gate_impact_reportr   rD   rs   r   r   r   r   r   r  r  r$  r1  rD  rP  rY  r^  rd  rz  r  r=   rE   rC   <module>r     si   " " " " " "               ' ' ' ' ' ' ' '       9 9 9 9 9 9 W W W W W W W W G G G G G G G G U U U U U U U U ? ? ? ? ? ? @ @ @ @ @ @ P P P P P P q q q q q q q q q q X X X X X X X X A A A A A A @ @ @ @ @ @% % %@     8 8 8
2 
2 
26 6 6H H H4D D D>!- !- !-HM M M$, , ,5 5 5$4 4 4	. 	. 	.# # ## # ## # #; ; ; , , , , ,rE   