
    SLj0                        d dl mZ d dlZd dlmc mZ d dlm	Z	 d dl
mZmZmZmZ ddddd dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZd!dZdS )"    )annotationsNCandle)LabStrategy#default_research_sampler_strategiesrender_strategy_lab_reportrun_strategy_lab      Y@)highlowvolumeiintclosefloatr   float | Noner   r   returnr   c               H    t          d| dz  z   |||n|||n|||          S )Ni Se<   )tsopenr   r   r   r   r   )r   r   r   r   r   s        M/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_strategy_lab.py_candler      sE    1r6!%TT5?CC       Nonec                    t          ddddddddd	
          } dt          dd          t          dd          t          dd          t          dd          t          dd          t          dd          t          dd          gi}t          | g|ddi          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}||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         }|j        }	d"}
|	|
k    }|st	          j        d|fd#|	|
f          t	          j	        |          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}}d S ))Nlab_momentum_breakoutmomentum_breakout         ?      ?       @   r
   )lookbackbreakout_pcttake_profit_pctstop_loss_pctmax_hold_barstrade_size_usdstrategy_idfamily
parametersBTCr   d      e      f      g      h   gLZ@   g     Z@ volumes==)z3%(py2)s
{%(py2)s = %(py0)s.strategy_id
} == %(py5)sresultpy0py2py5assert %(py7)spy7z5%(py2)s
{%(py2)s = %(py0)s.closed_trades
} == %(py5)stake_profitz3%(py3)s
{%(py3)s = %(py1)s.exit_reason
} == %(py6)spy1py3py6assert %(py8)spy8>z4%(py2)s
{%(py2)s = %(py0)s.total_pnl_usd
} > %(py5)s)r   r   r	   r+   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationclosed_tradestradesexit_reasontotal_pnl_usdstrategycandlesr>   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert2@py_assert5@py_format7@py_format9s                r   Ctest_momentum_breakout_enters_after_trend_breakout_and_takes_profitrj      s3   +"" #
 
  H 	AsOOWQ__gaoowq#PWXY[^P_P_Auwq%00
G xj'E;;OPPPQRSF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86888886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$1$1$$$$$$$$$$1$$$$$$$$$$$$6$$$$$6$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$=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888#!#!##########!############6#####6##########!#############################r   c                    t          ddddddddd	d
          } dd t          g d          D             i}t          | g|ddi          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         }|j        }	h d}
|	|
v }|st	          j        d|fd|	|
f          t	          j	        |          t	          j	        |	          t	          j	        |
          dz  }dd|iz  }t          t	          j        |                    d x}x}	x}}
|j        d         }|j        }	d}
|	|
k    }|st	          j        d|fd|	|
f          t	          j	        |          t	          j	        |	          t	          j	        |
          dz  }dd|iz  }t          t	          j        |                    d x}x}	x}}
d S ) Nlab_rsi_reversionrsi_mean_reversionr4   g      9@g     K@      @      @
   r
   )
rsi_periodoversold_rsiexit_rsir&   r'   r(   r)   r*   ETHc                4    g | ]\  }}t          ||          S  r   .0r   r   s      r   
<listcomp>zUtest_mean_reversion_rsi_enters_oversold_dump_and_exits_on_rebound.<locals>.<listcomp><   s&    fffXQwq%((fffr   )r/   b   `   ^   _   r|   a   r{   r9   r:   r   r0   r<   rE   r>   r?   rC   rD   >   rF   end_of_replayrsi_recoveredin)z3%(py3)s
{%(py3)s = %(py1)s.exit_reason
} in %(py6)srH   rL   rM   z,%(py3)s
{%(py3)s = %(py1)s.coin
} == %(py6)s)r   	enumerater	   rY   rQ   rR   rS   rT   rU   rV   rW   rX   rZ   r[   coinr]   s                r   Atest_mean_reversion_rsi_enters_oversold_dump_and_exits_on_reboundr   .   s	   '# " #
 
  H ffCdCdCd9e9efffgGxj'E;;OPPPQRSF$1$1$$$$$$$$$$1$$$$$$$$$$$$6$$$$$6$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$=\'\+\+\+\\'+\\\\\\\\\\\'+\\\\\\\\\\'\\\\+\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\=) )E) E)))))))))) E))))))))) ))))E)))))))))))))))))))))))))))))))r   c                    t          dddddddddd	
          } dt          ddd          t          ddd          t          ddd          t          ddd          t          ddd          t          dddd          t          dddd          gi}t          | g|ddi          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         }|j        }	d&}
|	|
k    }|st	          j        d |fd'|	|
f          t	          j	        |          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}}d S )-Nlab_liquidation_reversalliquidation_reversalr   ro   r"   ?r#   r
   )r$   drop_pctvolume_spike_multr&   r'   r(   r)   r*   WLDr   r/   r   r0   r1   r2   r3   r4   r6   r|   r~   i  r   r   r8        X@c      r   r   r9   r:   r<   rE   r>   r?   rC   rD   rF   rG   rH   rL   rM   rN   rP   )r   r   r	   rY   rQ   rR   rS   rT   rU   rV   rW   rX   rZ   r[   r\   r]   s                r   Htest_liquidation_reversal_enters_volume_spike_dump_and_exits_on_snapbackr   E   s   .%!$" #
 
  H 	As3'''As3'''As3'''As3'''As3'''Arr#...At"S111

G xj'E;;OPPPQRSF$1$1$$$$$$$$$$1$$$$$$$$$$$$6$$$$$6$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$=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888#!#!##########!############6#####6##########!#############################r   c                    t          ddddddd          } d	t          d
dd          t          ddd          t          ddd          t          ddd          t          ddd          t          dddd          t          dddd          gi}t          | g|d	di          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 S )$Nr   r   r   ro   r"   r#   )r$   r   r   r(   r*   r   r   r/   r   r0   r1   r2   r3   r4   r6   r|   r~   n   r   r8   r   r   x   r   r9   r:   r<   rE   r>   r?   rC   rD   r   r   r	   rY   rQ   rR   rS   rT   rU   rV   rW   rX   r^   r_   r>   r`   ra   rb   rc   rd   s           r   ;test_liquidation_reversal_rejects_dump_without_volume_spiker   f   s   .% !s_`aa  H 	As3'''As3'''As3'''As3'''As3'''Arr#...At"S111

G xj'E;;OPPPQRSF$1$1$$$$$$$$$$1$$$$$$$$$$$$6$$$$$6$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$$$r   c                 0   t          ddddddddddd	          } d
 t          g d          D             d t          g d          D             d}t          | g|dd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}}|j        d         }|j        }	d}
|	|
k    }|st	          j        d|fd|	|
f          t	          j	        |          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}}d S )Nlab_relative_strength_rotationrelative_strength_rotationr6   r0   ro   r"   r
   )r$   top_nmin_momentum_pctr&   r'   r(   r)   max_total_tradesr*   c                4    g | ]\  }}t          ||          S rv   rw   rx   s      r   rz   zOtest_relative_strength_rotation_enters_only_top_ranked_coin.<locals>.<listcomp>   s&    ^^^ha5!!^^^r   )r/   r1   r3   r5   r7   g      Z@c                4    g | ]\  }}t          ||          S rv   rw   rx   s      r   rz   zOtest_relative_strength_rotation_enters_only_top_ranked_coin.<locals>.<listcomp>   &    \\\ha5!!\\\r   )r/   r5   j   m   p   s   )r.   SOLr9   r:   r   r<   rE   r>   r?   rC   rD   r   r   rH   rL   rM   rN   rP   r   r   r	   rY   rQ   rR   rS   rT   rU   rV   rW   rX   rZ   r   r\   r]   s                r   ;test_relative_strength_rotation_enters_only_top_ranked_coinr   }   sE   4+ #" # !	
 	
  H _^)<\<\<\2]2]^^^\\)<Z<Z<Z2[2[\\\ G
 xj';Wb;c;cdddefgF$1$1$$$$$$$$$$1$$$$$$$$$$$$6$$$$$6$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$=) )E) E)))))))))) E))))))))) ))))E)))))))))))))))))))))))))))))#!#!##########!############6#####6##########!#############################r   c                 0   t          dddddddddd	d
          } d t          g d          D             d t          g d          D             d}t          | g|dd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}}|j        d         }|j        }	d}
|	|
k    }|st	          j        d|fd|	|
f          t	          j	        |          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}}d S )"N lab_risk_managed_trend_followingrisk_managed_trend_followingr4   r   r#   rn   r"   r6   r
   )fast_smaslow_smalong_lookbackmin_long_trend_pctr&   r'   r(   r)   r*   c                4    g | ]\  }}t          ||          S rv   rw   rx   s      r   rz   z`test_risk_managed_trend_following_requires_aligned_fast_slow_and_long_trends.<locals>.<listcomp>   s&    pppha5!!pppr   )
r/   r1   r3   r5   r7   i   r   k   l   o   c                4    g | ]\  }}t          ||          S rv   rw   rx   s      r   rz   z`test_risk_managed_trend_following_requires_aligned_fast_slow_and_long_trends.<locals>.<listcomp>   s&    jjjxq%E""jjjr   )
r/   r1   r/   r   r{   r   r|   r~   r}   ]   )rt   DOGEr9   r:   r   r0   r<   rE   r>   r?   rC   rD   rt   r   rH   rL   rM   rN   rP   r   r]   s                r   Ltest_risk_managed_trend_following_requires_aligned_fast_slow_and_long_trendsr      sE   6-"%" #	
 	
  H qp)<n<n<n2o2opppjj9=h=h=h3i3ijjj G
 xj';Xc;d;deeefghF$1$1$$$$$$$$$$1$$$$$$$$$$$$6$$$$$6$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$=) )E) E)))))))))) E))))))))) ))))E)))))))))))))))))))))))))))))#!#!##########!############6#####6##########!#############################r   c                 d   t          dddddddddd	d
          } dt          dddd          t          dddd          t          dddd          t          dddd          t          dddd          t          dddd          t          d dd!d          t          d"d#d$d          t          ddd%d          t          d&d'd(d          g
i}t          | g|dd)i*          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/d0|iz  }t          t	          j        |                    d x}x}}d S )1N*lab_risk_managed_trend_following_atr_guardr   r4   r   r#   rn   r6   r"   r
   )r   r   r   r   
atr_periodmax_atr_pctr(   r)   r*   rt   r   r/   r1   r   )r   r   r0   r   r|   r2   r3   r   r   r5   r   r{   r7   r   r   r   r8   q      r   r   r   	   r   w   r9   r:   r<   rE   r>   r?   rC   rD   r   r   s           r   <test_risk_managed_trend_following_rejects_excessive_atr_chopr      s!   @-"%#	
 	
  H 	As"---As"---As"---As"---As"---As#...As#...As#...As#...As#...
G xj'E;;OPPPQRSF$1$1$$$$$$$$$$1$$$$$$$$$$$$6$$$$$6$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$$$r   c                    t          ddddddddd          } d	 t          g d
          D             d t          g d          D             d t          g d          D             d}t          | g|ddd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 S )N,lab_relative_strength_rotation_breadth_guardr   r6   r2   ro   r
   )r$   r   r   min_positive_candidatesr(   r)   r*   c                4    g | ]\  }}t          ||          S rv   rw   rx   s      r   rz   z`test_relative_strength_rotation_goes_to_cash_when_market_breadth_is_too_thin.<locals>.<listcomp>   r   r   )r/   r5   r   r   r   r   c                4    g | ]\  }}t          ||          S rv   rw   rx   s      r   rz   z`test_relative_strength_rotation_goes_to_cash_when_market_breadth_is_too_thin.<locals>.<listcomp>   s&    YYYha5!!YYYr   )r/   r   r/   r   r/   r   c                4    g | ]\  }}t          ||          S rv   rw   rx   s      r   rz   z`test_relative_strength_rotation_goes_to_cash_when_market_breadth_is_too_thin.<locals>.<listcomp>   s&    ZZZha5!!ZZZr   )r/   r/   r   r/   r   r/   )r   r.   rt   r9   r:   r   r<   rE   r>   r?   rC   rD   )r   r   r	   rY   rQ   rR   rS   rT   rU   rV   rW   rX   r   s           r   Ltest_relative_strength_rotation_goes_to_cash_when_market_breadth_is_too_thinr      s   B+ #'(#
 
  H ]\)<Z<Z<Z2[2[\\\YY)<W<W<W2X2XYYYZZ)<X<X<X2Y2YZZZ G xj';Wbkv;w;wxxxyz{F$1$1$$$$$$$$$$1$$$$$$$$$$$$6$$$$$6$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$$$r   c                    t          ddddddddd	d
          } t          dddd          t          dddd          t          dddd          t          dddd          t          dd	dd          t          dddd          t          dddd          gt          dddd          t          dddd          t          dddd          t          dddd          t          dd	dd          t          dddd          t          dddd          gd}t          | g|dd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}}|j        d         }|j        }	d'}
|	|
k    }|st	          j        d!|fd(|	|
f          t	          j	        |          t	          j	        |	          t	          j	        |
          d)z  }d*d+|iz  }t          t	          j        |                    d x}x}	x}}
|j        d         }|j        }	d,}
|	|
k    }|st	          j        d!|fd-|	|
f          t	          j	        |          t	          j	        |	          t	          j	        |
          d)z  }d*d+|iz  }t          t	          j        |                    d x}x}	x}}
d S ).Nlab_donchian_volume_breakoutdonchian_volume_breakoutr         ?r   r!   g333333?r6   r
   )r$   r%   r   r&   r'   r(   r)   r*   r   r/   r1   r   r0   gY@r2   g33333X@r4   gfffffY@g     Y@ǧY@   r8   g      Z@gZ@   r   )HYPESUIr9   r:   r<   rE   r>   r?   rC   rD   r   r   rH   rL   rM   rF   rG   )r   r   r	   rY   rQ   rR   rS   rT   rU   rV   rW   rX   rZ   r   r[   r]   s                r   Otest_donchian_volume_breakout_requires_range_high_break_and_volume_confirmationr      s   2)!$" #
 
  H AsS111Au3s333At#c222Au3s333Au3s333Au5555Au5555
 AsS111Au3s333At#c222Au3s333Au3s333Au5555Au5555
 G* xj'KXc;d;deeefghF$1$1$$$$$$$$$$1$$$$$$$$$$$$6$$$$$6$$$$$$$$$$1$$$$$$$$$$$$$$$$$$$$$$$$$$$=* *F* F********** F********* ****F*****************************=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88888r   c            	        ddl m}   |             }d |D             }h d}|j        } ||          }|sd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}}d |D             }t          |          }t          |          }	||	k    }|sMt          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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}x}}	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 S )Nr   generate_lab_grid_strategiesc                    h | ]	}|j         
S rv   )r,   ry   r^   s     r   	<setcomp>zRtest_generate_lab_grid_strategies_covers_independent_archetypes.<locals>.<setcomp>  s    ;;;H;;;r   >   trend_pullbackr   rm   r   r   r   volatility_squeeze_breakoutr   zJassert %(py6)s
{%(py6)s = %(py3)s
{%(py3)s = %(py1)s.issubset
}(%(py4)s)
}families)rI   rJ   py4rK   c                    h | ]	}|j         
S rv   r+   r   s     r   r   zRtest_generate_lab_grid_strategies_covers_independent_archetypes.<locals>.<setcomp>(  s    @@@$@@@r   r<   )zN%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py9)s
{%(py9)s = %(py6)s(%(py7)s)
}len
strategies)r@   rA   r   rK   rD   py9zassert %(py11)spy11   )>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)s)r@   rI   rJ   rK   rL   rM   )strategy_labr   issubsetrQ   rV   rS   rT   rU   rW   rX   r   rR   )r   r   r   re   rf   rg   rh   r`   rb   @py_assert8@py_format10@py_format12ra   ri   s                 r   ?test_generate_lab_grid_strategies_covers_independent_archetypesr     s:   999999--//J;;
;;;H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 x	 	 	 	 x	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 A@Z@@@T3@AATS__TA_TTTTTTTTTTA_TTTTTTTTTTTT3TTTTT3TTTTTT@TTTTATTTTTTTTTTTSTTTTTS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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z?? b ?b          ?b            3     3             z     z      ?    b                             r   c                    ddl m}   |             }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             }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 S )Nr   r   c              3  >   K   | ]}|j         d k    od|j        v V  dS )r   r   Nr,   r-   r   s     r   	<genexpr>zVtest_strategy_lab_grid_includes_defensive_trend_and_rotation_guards.<locals>.<genexpr>1  sQ        F  Fnvx"@@i]V^ViEi  F  F  F  F  F  Fr   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyr@   rA   r   c              3  >   K   | ]}|j         d k    od|j        v V  dS )r   r   Nr   r   s     r   r   zVtest_strategy_lab_grid_includes_defensive_trend_and_rotation_guards.<locals>.<genexpr>2  sV        P  P  yAx">>sC\`h`sCs  P  P  P  P  P  Pr   )
r   r   r   rS   rT   rQ   rU   rV   rW   rX   )r   r   r`   rb   @py_format5s        r   Ctest_strategy_lab_grid_includes_defensive_trend_and_rotation_guardsr   ,  s    999999--//J F  F  {E  F  F  F  F3  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F3  F  F  F  F  F3  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  F  F  F  F P  P  EO  P  P  P  P3  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P3  P  P  P  P  P3  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  Pr   c                 n	   t                      } d | D             }ddh}||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          |          }|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             }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             }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}}t          g |           }d}||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j	        |          rt          j        |          nddz  }dd|iz  }	t	          t          j        |	                    d x}}d}||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j	        |          rt          j        |          nddz  }dd|iz  }	t	          t          j        |	                    d x}}d}||v }|st          j        d|fd||f          t          j        |          dt          j                    v st          j	        |          rt          j        |          nddz  }dd|iz  }	t	          t          j        |	                    d x}}d S )Nc                    h | ]	}|j         
S rv   r   ry   ss     r   r   zXtest_research_sampler_strategies_are_labelled_not_champion_candidates.<locals>.<setcomp>8  s    ,,,aAM,,,r   !sampler_squeeze_breakout_research"sampler_relative_strength_researchr<   z%(py1)s == %(py4)srI   r   assert %(py6)srK   c              3  4   K   | ]}|j         d          du V  dS )research_samplerTNr-   r   s     r   r   zXtest_research_sampler_strategies_are_labelled_not_champion_candidates.<locals>.<genexpr>9  s/      JJAq|./47JJJJJJr   r   allr   c              3  4   K   | ]}|j         d          du V  dS )not_championTNr  r   s     r   r   zXtest_research_sampler_strategies_are_labelled_not_champion_candidates.<locals>.<genexpr>:  s.      FFq|N+t3FFFFFFr   c              3  4   K   | ]}|j         d          du V  dS )
paper_onlyTNr  r   s     r   r   zXtest_research_sampler_strategies_are_labelled_not_champion_candidates.<locals>.<genexpr>;  s.      DDaq|L)T1DDDDDDr   )sampler_strategiesu-   Research sampler — not a champion candidater   z%(py1)s in %(py3)sreportrI   rJ   assert %(py5)srB   )r   rQ   rR   rV   rW   rX   r  rS   rT   rU   r   )
samplersre   rb   rf   r   rh   r`   r  @py_format4rc   s
             r   Etest_research_sampler_strategies_are_labelled_not_champion_candidatesr  5  sR   244H,,8,,,{1TVz0{{,0{{{{{{{{{{{,0{{{{{{,{{{{0{{{{{{{{{{{{{{{{{{{{{{{{{{{{JJJJJJ3JJJJJJJJJJJJJJJJ3JJJJJ3JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFXFFFF3FFFFFFFFFFFFFFFF3FFFFF3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FFFFDD8DDDD3DDDDDDDDDDDDDDDD3DDDDD3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'xHHHF:D:fDDDDDDDDDD:fDDDDD:DDDDDDDDDDDfDDDDDf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.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8888888/9/69999999999/699999/999999999996999996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9r   c            
        t          dddddddd	          } t          d
ddddddd	          }dd t          g d          D             i}t          || g|ddi          }t          |d          }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}||v }|st	          j        d|fd||f          t	          j        |          dt          j
                    v st	          j        |          rt	          j        |          nddz  }
dd|
iz  }t          t	          j        |                    d x}}d }||v }|st	          j        d|fd||f          t	          j        |          dt          j
                    v st	          j        |          rt	          j        |          nddz  }
dd|
iz  }t          t	          j        |                    d x}}d S )!Nwinnerr   r4   r   r    ro   r#   )r$   r%   r&   r'   r(   r*   loserg       @r   c                4    g | ]\  }}t          ||          S rv   rw   rx   s      r   rz   zOtest_strategy_lab_ranks_by_score_and_marks_observation_only.<locals>.<listcomp>N  s&    mmmXQwq%((mmmr   )r/   r1   r3   r5   r   r7   r5   r3   r9   r:   r   )min_samplesc                    g | ]	}|j         
S rv   r   )ry   r>   s     r   rz   zOtest_strategy_lab_ranks_by_score_and_marks_observation_only.<locals>.<listcomp>S  s    5556F555r   r<   r   r   r   rK   zStrategy Lab Tournamentr   r
  r  r  r  rB   zobservation-only)r   r   r	   r   rQ   rR   rV   rW   rX   rS   rT   rU   )r  r  r_   resultsr  re   rb   rf   r   rh   r  rc   s               r   ;test_strategy_lab_ranks_by_score_and_marks_observation_onlyr  C  s   " !33adwxyy  F
 " !33adwxyy  E
 mmCkCkCk9l9lmmmnGv%AUVVVG'Q???F55W555L(G9LL59LLLLLLLLLLL59LLLLLL5LLLL9L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$.$..........$.....$...........................................'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )
__future__r   builtinsrS   _pytest.assertion.rewrite	assertionrewriterQ   historical_replayr   r   r   r   r   r	   r   rj   r   r   r   r   r   r   r   r   r   r   r  r  rv   r   r   <module>r     s   " " " " " "               $ $ $ $ $ $ w w w w w w w w w w w w ;?TXjo      $ $ $ $8* * * *.$ $ $ $B% % % %.$ $ $ $6$ $ $ $6 %  %  %  %F% % % %0'9 '9 '9 '9T! ! ! !(P P P P: : : :( ( ( ( ( (r   