
    E#ia                        S SK r S SKJrJrJrJrJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#   " S S5      r$g)    N)"AuthenticationErrorNotSupportedInvalidProxySettingsExchangeNotAvailableOperationFailedOnMaintenanceget_cli_arg_valueget_root_diris_syncdump
json_parsejson_stringifyconvert_asciiio_file_existsio_file_readio_dir_readcall_methodcall_method_sync call_exchange_method_dynamically%call_exchange_method_dynamically_syncget_root_exceptionexception_messageexit_scriptget_exchange_propset_exchange_propinit_exchangeget_test_files_syncget_test_filesset_fetch_responseis_null_valuecloseget_env_varsget_langget_extc                   r   \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrSrSrSr/ r0 r0 r0 r0 r0 rSrSrSrS rS rS rS rS	 rS
 rS r S r!S r"S r#/ S4S jr$S r%S r&S r'S r(SRS jr)SSS jr*SSS jr+SRS jr,S r-S r.S r/S r0S r1SRS jr2S r3S  r4SRS! jr5S" r6S# r7STS$ jr8STS% jr9SRS& jr:S' r;S( r<S) r=S* r>S+ r?S, r@SRS- jrASRS. jrBSRS/ jrCS0 rDSUS1 jrESUS2 jrFSUS3 jrGS4 rHS5 rIS6 rJS7 rKS8 rLS9 rMS: rNS; rOS< rPS= rQS> rRS? rSS@ rTSA rUSB rVSC rWSD rXSE rYSF rZSG r[SH r\SI r]SJ r^SK r_SL r`SM raSN rbSO rcSP rdSQreg)VtestMainClass   F proxiesc                    [        S5      =(       d    [        S5      U l        [        S5      U l        [        S5      =(       d    [        S5      U l        [        S5      U l        [        S5      U l        [        S5      U l        [        S	5      U l        [        S
5      U l        [        S5      U l	        [        S5      U l
        [        S5      U l        [        5       U l        [        5       U l        g )Nz--responseTestsz
--responsez	--idTestsz--requestTestsz	--requestz--infoz	--verbosez--debugz	--privatez--privateOnlyz	--sandboxz
--loadKeysz--ws)r	   response_testsid_testsrequest_testsinfoverbosedebugprivate_testprivate_test_onlysandbox	load_keysws_testsr#   langr$   ext)selfs    O/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/test/tests_async.pyparse_cli_args_and_props&testMainClass.parse_cli_args_and_props    s    /0ABeFWXdFe)+6./?@bDUVaDb%h/	(5&y1
-k:!2?!C(5*<8)&1J	9    c                    #     U R                  XU5      I S h  vN   g  N! [         a  n[        S5        UeS nAff = f7f)N[TEST_FAILURE])
init_inner	Exceptionr   )r8   exchange_idsymbol_argvmethod_argves        r9   inittestMainClass.init/   s;     	//+KHHH 	!"G	s+   A ! ! A ! 
=8=A c                 v  #    U R                  5         U R                  (       aD  U R                  (       a3  U R                  X5      I S h  vN   U R	                  X5      I S h  vN   gU R                  (       a  U R	                  X5      I S h  vN   gU R                  (       a  U R                  X5      I S h  vN   gU R
                  (       a  U R                  5       I S h  vN   gSn[        US-   U-   S-   S-   U R                  UUUU R                  [        S5      S.U5        U R                  U R                  SSS.n[        XU R                  5      nUR                  (       a&  [        U R                  S	S
5      5        [!        S5        U R#                  U5      I S h  vN   [%        ['        U R(                  R+                  5       5      5      S:  d   S5       eU R-                  U5        U R/                  U5        U R1                  Xb5      I S h  vN   [!        S5        g  GN GN GN GNw GNP N N!7f)NT
r(   z[INFO] TESTING 
--useProxy)exchangesymbolmethodisWsuseProxy0u  )r/   r0   enableRateLimittimeoutz[INFO] skipping alias   r   zTest files were not loaded)r:   r-   r+   run_static_request_testsrun_static_response_testsr,   run_broker_id_testsr   r7   r5   r	   r/   r0   r   aliasadd_paddingr   import_fileslenlist
test_fileskeysexpand_settings check_if_specific_test_is_chosen
start_test)r8   rA   rB   rC   new_lineexchange_argsrJ   s          r9   r?   testMainClass.init_inner6   s    %%'$"5"5//III00JJJ00JJJ//III==**,,,X]X%*->>#!!MM),7K
 	 ||ZZ#	
 !T]]K>>!!"92>?N)))4,,./014R6RR4X&--k:ooh444AG JJ K J -( 	* 	5s   AH9	H&
H9"H)#*H9H,*H98H/9)H9"H2#C H9#H5$A1H9H7H9)H9,H9/H92H95H97H9c                 |   Ub  [        U R                  R                  5       5      nUR                  S5      n[	        U5      S:  au  [        S[	        U5      5       H[  nX$   n[        S[	        U5      5       H;  nX6   nUR                  SS5      nXW:X  d  M   U R                  R                  U5        M=     M]     g g g )N,   r   z()r(   )	rZ   r[   r\   splitrY   rangereplaceonly_specific_testsappend)r8   rC   test_file_namespossible_method_namesitest_file_namejmethod_names           r9   r^   .testMainClass.check_if_specific_test_is_chosen^   s    ""4??#7#7#9:O$/$5$5c$:!()Q.q#o"67A%4%7N"1c*?&@A&;&>&1&9&9$&C)8 44;;NK	 B 8 / #r<   c                   #    [        UR                  R                  5       5      nUR                  S5        [	        5       (       a  [        X R                  5      U l        g[        X R                  5      I S h  vN U l        g N
7f)NloadMarketsT)	rZ   hasr\   rj   r   r   r5   r[   r   )r8   rJ   
propertiess      r9   rX   testMainClass.import_filesk   sd     (,,++-.
-(991*mmLDO  %3:}}$MMDO Ns   A7B9B:Bc                 `   UR                   n[        US5      n[        UR                  5       5      n[	        S[        U5      5       Hd  nXE   nX6   nU(       d  M  [        X5      b  M"  US-   U-   nUR                  5       n	[        5       n
X;   a  X   OS nU(       d  MX  [        XU5        Mf     g )NrequiredCredentialsr   _)	idr   rZ   r\   rg   rY   upperr"   r   )r8   rJ   rA   	req_credsobjkeysrm   
credentialis_requiredfull_keycredential_env_nameenv_varscredential_values               r9   load_credentials_from_env'testMainClass.load_credentials_from_envt   s    kk%h0JK	y~~'(q#g,'A J#/K{0FN&,z9&.nn&6#'>EXEd8#@ko ##%h<LM (r<   c                 d   UR                   n[        5       S-   n[        5       S-   n[        U5      n[        U5      n0 nU(       a  [        U5      n0 nU(       a  [        U5      nUR	                  Xx5      n	UR                  X0 5      n
U
(       a  [        U
R                  5       5      n[        S[        U5      5       H\  nX   nX   (       d  M  S n[        X   [        5      (       a!  [        X0 5      nUR	                  XU   5      nOX   n[        XU5        M^     U R                  (       a  U R                  U5        [        5       S-   n[        U5      nUR                  UU0 5      U l        U R                   nUR                  US5      nUb  UR#                  U5      Ul        ['        S5      (       a\  UR)                  US5      Ul        UR)                  US5      Ul        UR)                  US	5      Ul        UR)                  US
5      Ul        UR                  US0 5      U l        0 U l        g )Nz	keys.jsonzkeys.local.jsonr   zskip-tests.jsonrQ   rI   	httpProxy
httpsProxywsProxywssProxyskipMethods)rz   r
   r   r   deep_extend
safe_valuerZ   r\   rg   rY   
isinstancedictr   r   r4   r   skipped_settings_for_exchangeparse_to_intrQ   r	   safe_string
http_proxyhttps_proxyws_proxy	wss_proxyskipped_methodschecked_public_tests)r8   rJ   rA   keys_global
keys_localkeys_global_existskeys_local_existsglobal_settingslocal_settingsall_settingsexchange_settingssetting_keysrm   keyfinal_valueexistingskipped_fileskipped_settingsr   rQ   s                       r9   r]   testMainClass.expand_settings   s   kk"n{2!^&77
+K8*:6*;7O)*5N++OL$//2N 1 6 6 89L1c,/0"o$))"&K!"3"8$??#4XB#G&.&:&:8WZE[&\&7&<%h[A 1 >>**84#~(99'5-5-@-@AQS^`b-c*(,(J(J%%%&CYO'44W=H\**"*"6"67TVa"bH#+#7#78UWc#dH  ( 4 45RT] ^H!)!5!56SU_!`H'223PR_acd$&!r<   c                 n    Sn[        U5      nX$-
  S-
  nUS:  a  [        SU5       H  nUS-  nM
     X-   $ )Nr(   r    )rY   rg   )r8   messagesizeresmessage_lengthmissing_spacerm   s          r9   rW   testMainClass.add_padding   sG    W-111m,s
 -}r<   c                   #    SU;   a  U R                   S:X  a  SUR                  S'   SU;   a  U R                   S:X  a  gU R                  X!5      nUS:H  nUS:H  nXR                  :H  nUS	:H  n	U(       d  XR                  ;   a  U(       d  gS n
XR
                  ;   =(       a    UR
                  U   nU(       d<  [        U R                  5      S
:  a#  UR                  XR                  5      (       d  Sn
OHU(       d  U(       d  U(       d
  U	(       d  Sn
O)[        U[        5      (       a  Sn
OXR                  ;  a  Sn
U(       a  UR                  S5      I S h  vN   UR                  nU
(       a.  U R                  (       a  [        U R!                  U
S5      X5        gU R                  (       a4  SUR#                  U5      -   S-   n[        U R!                  SS5      XU5        [%        5       (       a  ['        U R                  XXS5        O[)        U R                  XXS5      I S h  vN   U R                  (       a  [        U R!                  SS5      X5        U(       a  SU R                  U'   g GN NK7f)N	OrderBookcsFchecksumphpTrs   fetchCurrenciesfeaturesr   z[INFO] IGNORED_TESTz[INFO] UNSUPPORTED_TESTz[INFO] SKIPPED_TESTz[INFO] UNIMPLEMENTED_TESTrR   ()z[INFO] TESTINGz[INFO] TESTING DONE)r7   options	get_skipsproxy_test_file_namer   rt   rY   ri   in_arrayr   strr[   load_marketsrz   r.   r   rW   jsonr   r   r   )r8   rp   rJ   args	is_publicskipped_properties_for_methodis_load_marketsis_fetch_currenciesis_proxy_testis_feature_testskip_messagesupported_by_exchangenameargs_stringifieds                 r9   test_methodtestMainClass.test_method   s    +%$((d*:+0HZ(+%$((e*;(,x(M%&-7*.??$(A(AA&*4k-F-FFPc!,!< [(,,{B[C(@(@$AA$EhN_N_`k  nF  nF  OG  OG0L )>}]l4L5s;;0L06L''---{{yyT%%lB7K99"X]]4%883>!!"2B7L\]99T__kEbidoo{Fcjjj99!!"7<dP59D%%k2% . ks&   EI1I,CI1#I/$A	I1/I1c                 f   0 nX"S-   U R                   -   /n[        S[        U5      5       Hi  nXE   nX`R                  ;   d  M  [	        U R                  U   [
        5      (       a  U R                  U   s  $ UR                  X0R                  U   5      nMk     / SQ/ SQ/ SQ/ SQSS// S	QS
S/S.n[        UR                  5       5      n[        S[        U5      5       H  nX   n	Xy   n
UR                  X*5      (       d  M#  XR                  ;   a3  [	        U R                  U	   [
        5      (       a  U R                  U	   s  $ UR                  U R                  U	0 5      nUR                  X;5      nM     SU;   a  SU;  a  US   US'   SU;   a  SU;  a  US   US'   SU;   a  SU;  a  US   US'   U$ )N.r   )fetchOrderBookfetchOrderBooksfetchL2OrderBookwatchOrderBookwatchOrderBookForSymbols)fetchTickerfetchTickerswatchTickerwatchTickers)fetchTradeswatchTradeswatchTradesForSymbols)
fetchOHLCV
watchOHLCVwatchOHLCVForSymbolsfetchLedgerfetchLedgerEntry)fetchDepositsWithdrawalsfetchDepositsfetchWithdrawalsfetchDepositWithdrawFeefetchDepositWithdrawFees)	orderBooktickertradeohlcvledgerdepositWithdrawdepositWithdrawFee	timestampdatetimebidask
baseVolumequoteVolume)r7   rg   rY   r   r   r   r   rZ   r\   r   	safe_dict)r8   rJ   rp   final_skipsmethod_namesrm   m_nameobject_skipsobject_namesobject_nameobject_methodsextra_skipss               r9   r   testMainClass.get_skips   s   #3%6%ABq#l+,A!_F---d226:C@@//77"*"6"6{DXDXY_D`"aK - ATLI$&89`#<>X"Y
 L--/0q#l+,A&/K)6N  ==#7#77jI]I]^iIjlo>p>p//<<&001E1E{TVW&22;L - ;&{1J&1+&>K
#[ 5K+?!,U!3KK'-;2N)4\)BK&r<   c                 l  #    SnUR                  U5      n[        SU5       H  n U R                  XX45      I S h  vN     g   g N	! [         Ga  n[	        U5      n	US:H  n
[        U	[        5      n[        U	[        5      n[        U	[        5      nU(       a  XuS-
  :X  a  [        U	[        5      n[        U	[        5      nS nS nU
(       a  SnU(       a  SnOSnOU(       a  U(       d  SnSnOSnSnU(       a  SOSn[        US	S
UR                  X[        U	5      5        Us S nAs  $ UR                  US-   S-  5      I S h  vN     S nAGM.  U
(       a(  [        SS[        U	5      UR                  X5         S nA  gU(       a8  U R                  (       a!  [        S[        U	5      UR                  X5         S nA  gU(       a@  U(       a9  U R                  (       a"  [        SS[        U	5      UR                  X5         S nA  g[        S[        U	5      UR                  X5         S nA  gS nAff = f7f)N   r   Trs   re   Fr>   [TEST_WARNING]zHMethod could not be tested due to a repeated Network/Availability issuesz |   zExchange can not load marketsz[INFO] NOT_SUPPORTED[INFO]z(Authentication problem for public method)r   rg   r   r@   r   r   r   r   r   r   r   r   rz   r   sleepr.   )r8   rp   rJ   r   r   max_retriesr   rm   exrD   r   is_auth_erroris_not_supportedis_operation_failedis_on_maintenanceis_exchange_not_availableshould_failret_success	fail_types                      r9   	test_safetestMainClass.test_safe  s!     #==.q+&A=%&&{dNNN '~ { O :%&r*#.-#?!+A/B!C$.q,$? '1!_'E#&!O+-7=-I)5?CW5X1&*&***/K0.3.2  9AR.2.3 /4.28C$4IY	Y(rty  |D  |G  |G  IT  hy  z{  h|  }** 'nna!et^<<<< '-/NPabcPdfnfqfqs~  R$ (99 !79J19Mx{{\gz# ]99 +UWhijWkmumxmx  {F  Y#-/@/CX[[R]p$u:%s   #H4AAA H4AH1CH,!H1"H4)H,EH,	H4)H,9H4?9H,8H4>AH,?H4!H,&H4,H11H4c                 z  #    / / U/U/U/U/U/U// / / / S.nU R                   (       a  U/U/U/U/U/U/U//U/U//S.	nUR                  U5      nUS   nU R                   (       d1  U(       a  / US'   O$U/US'   U/US'   U/US'   U/US'   U/US	'   U/US
'   X0l        U R                  XS5      I S h  vN   g N7f)N)r   r   r   r   fetchLastPricesr   r   r   r   fetchBidsAsksfetchStatus	fetchTime)	r   r   r   r   watchBidsAsksr   r   r   r   spotr   fetchFundingRatesfetchFundingRatefetchFundingRateHistoryfetchIndexOHLCVfetchMarkOHLCVfetchPremiumIndexOHLCVT)r5   marketpublic_tests	run_tests)r8   rJ   rK   testsr  is_spots         r9   run_public_teststestMainClass.run_public_tests^  s    !"8#H &x!("8%h!
 ==%h)/ &x!'"(#)(.4XJ &x+1(
E (.}}+-'(.4X)*-3H()4:8/0,28'(+1(&'39(./!nnXd333 	4s   B1B;3B94B;c           	        #    [        UR                  5       5      n/ n[        S[        U5      5       H,  nXF   nX'   nUR	                  U R                  XqX5      5        M.     [        R                  " U6 I S h  vN n	/ n
[        S[        U5      5       H%  nXF   nX   nU(       a  M  U
R	                  U5        M'     U(       a  SOSn[        U
5      (       a,  SR                  U
5      n[        SUR                  USU-   5        U R                  (       a.  [        U R                  SU-   S-   UR                  -   S	5      5        g
 N7f)Nr   PUBLIC_TESTSPRIVATE_TESTSz, r>   zFailed methods : z[INFO] END r   rR   T)rZ   r\   rg   rY   rj   r  asynciogatherjoinr   rz   r.   rW   )r8   rJ   r  is_public_test
test_namespromisesrm   	test_name	test_argsresultsfailed_methodstest_returned_valuetest_prefix_stringerrors_strings                 r9   r  testMainClass.run_tests  s    %**,'
q#j/*A"I(IOODNN9	Z[ +  11q#j/*A"I")*&&%%i0	 +
 0>^?~ IIn5M!8;;0BDWZgDgh99!!-2D"Ds"JX[["XZ\]^ 2s   A7E9E:+E)BEc                    #    U R                  SU/ S5      I S h  vN nU(       d  g[        UR                  5      n[        SUS5        g N/7f)Nrs   TFz[INFO:MAIN] Exchange loadedsymbols)r  rY   r4  r   )r8   rJ   resultexchange_symbols_lengths       r9   load_exchangetestMainClass.load_exchange  sJ     ~~mXr4HH"%h&6&6"7*,CYO Is   AA
0Ac                 ~   S nUR                  U R                  S5      nUR                  U R                  S5      nU(       a	  U(       a  U$ U(       d	  U(       a  U$ [        S[        U5      5       HI  nX7   nUR	                  UR
                  U5      n	U	c  M(  UR	                  U	S5      n
U
(       d  U
b  MF  Un  U$    U$ )NpreferredSpotSymbolpreferredSwapSymbolr   active)r   r   rg   rY   r   markets)r8   rJ   r  r4  rK   preferred_spot_symbolpreferred_swap_symbolrm   sr  r<  s              r9   get_test_symboltestMainClass.get_test_symbol  s     ( 4 4T5W5WYn o ( 4 4T5W5WYn o,((2((q#g,'A
A(()9)91=F!!,,VX>fnF ( r<   Nc                     Uc  / SQnUS   n[        S[        U5      5       H  nX$   UR                  ;   d  M  X$   s  $    U$ )N)	BTCETHXRPLTCBCHEOSBNBBSVUSDTr   )rg   rY   
currencies)r8   rJ   codescoderm   s        r9   get_exchange_codetestMainClass.get_exchange_code  sH    =TEQxq#e*%Ax8...x & r<   c                    0 nUR                   n[        UR                  5       5      n[        S[	        U5      5       HA  nXV   nXG   nU(       a  US   (       a	  XUS   '   M%  U(       a  M.  US   (       a  M:  XUS   '   MC     U$ )Nr   r  rK   )r=  rZ   r\   rg   rY   )	r8   rJ   r  r   r=  r\   rm   r   r  s	            r9   get_markets_from_exchange'testMainClass.get_markets_from_exchange  s|    ""GLLN#q#d)$A'C\Fv(.F8$%T&..(.F8$% % 
r<   c                    U R                  X5      n/ SQn/ SQn/ SQnU(       a  UOUnU R                  XU5      nUc  [        S[        U5      5       Hk  n	XI   n
UR	                  USU
5      nUR                  US5      n[        UR                  5       5      n[        U5      nU(       d  MY  U R                  XU5      n  O   UcY  UR	                  USS5      n/ n[        S[        U5      5       H  n	UR                  X   S   5        M     U R                  XU5      nUc7  [        UR                  5       5      n[        U5      nUS:  a  US   nUb  US   nU$ )	N)rD  rE  rF  rG  rJ  DASHDOGEETCTRXrL  USDCUSDGUSDEURTUSDCNYJPYBRL)BTC/USDTBTC/USDCzBTC/USDzBTC/CNYzBTC/EURzBTC/AUDzBTC/BRLzBTC/JPYzETH/USDTETH/USDCzETH/USDzETH/CNYzETH/EURzETH/AUDzETH/BRLzETH/JPYzEUR/USDTzEUR/USDzEUR/USDCzUSDT/EURzUSD/EURzUSDC/EURzBTC/ETHzETH/BTC)BTC/USDT:USDTBTC/USDC:USDCzBTC/USD:USDzETH/USDT:USDTzETH/USDC:USDCzETH/USD:USDBTC/USD:BTCzETH/USD:ETHr   baserK   r<  T)
rS  rA  rg   rY   	filter_byindex_byrZ   r\   rj   values)r8   rJ   r  current_type_marketsrN  spot_symbolsswap_symbolstarget_symbolsrK   rm   current_codemarkets_array_for_current_codeindexed_mktssymbols_array_for_current_codesymbols_lengthactive_marketsactive_symbolsrk  values_lengthfirsts                       r9   get_valid_symboltestMainClass.get_valid_symbol  st   #==hM U h X)-<%%hnE>1c%j)$x191C1CDXZ`bn1o.'001OQYZ15l6G6G6I1J.!$%C!D!>!11(B`aF * >%//0DhPTUNN1c.12%%n&7&AB 3))(.IF>.5578FKMq q	$"8_Fr<   c                   #    S nS nUb!  UR                  U5      nUS   (       a  UnOOUnOLUR                  S   (       a  U R                  US5      nUR                  S   (       a  U R                  US5      nUb  [        SU5        Ub  [        SU5        U R                  (       d  UR                  S   (       aG  UbD  U R
                  (       a  [        S5        SUR                  S'   U R                  X5      I S h  vN   UR                  S   (       aG  UbD  U R
                  (       a  [        S	5        SUR                  S'   U R                  X5      I S h  vN   U R                  (       d  U R                  (       a~  UR                  S   (       a+  Ub(  SUR                  S'   U R                  X5      I S h  vN   UR                  S   (       a+  Ub(  SUR                  S'   U R                  X5      I S h  vN   g GN N NI N7f)
Nr  TswapFz![INFO:MAIN] Selected SPOT SYMBOL:z![INFO:MAIN] Selected SWAP SYMBOL:z[INFO] ### SPOT TESTS ###defaultTypez[INFO] ### SWAP TESTS ###)
r  rt   ry  r   r2   r.   r   r   r1   run_private_tests)r8   rJ   provided_symbolspot_symbolswap_symbolr  s         r9   test_exchangetestMainClass.test_exchange  s    &___5Ff~--||F#"33HdC||F#"33HeD"4kB"4kB%%||F#(?994528  /++HBBB||F#(?994528  /++HBBB 6 6||F#(?28  /,,XCCC||F#(?28  /,,XCCC C
 C D DsJ   C:H<G==AHH A H8H9>H7H8H HHHc                   #    UR                  S5      (       d  [        SS5        gU R                  U5      n0 S/ _S/ _S/ _S/ _S	/ _S
/ _SU/_SU/_SU/_SU/_SU//_SU/_SU/_SU/_SU/_SX2/_SU/_U/U/U/U/U/U/U/U/U/U/S.
En[        S5      (       a  U/US'   U R                  (       a  U/U/U/U/U/S.nUR                  U5      nUS   nU R                  (       d=  U(       a  / US'   O0U/US'   U/US'   U/US'   U/US'   U/US '   U/US!'   U/US"'   U/US#'   U R                  XS5      I S h  vN   g  N7f)$NFz[INFO] Skipping private testszKeys not foundTsignInfetchBalancefetchAccountsfetchTransactionFeesfetchTradingFeesr  fetchOrdersfetchOpenOrdersfetchClosedOrdersfetchMyTradesfetchLeverageTiersr   fetchTransactionsr   r   fetchBorrowInterestcancelAllOrders)
fetchCanceledOrdersfetchMarginModesfetchPositionfetchDepositcreateDepositAddressfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchBorrowRateHistoryr   z--fundedTestscreateOrder)watchBalancewatchMyTradeswatchOrderswatchPositionwatchPositionsr  r   fetchPositionsr  fetchPositionRisksetPositionModesetMarginModefetchOpenInterestHistoryr  fetchFundingHistory)check_required_credentialsr   rP  r	   r5   r  r  )r8   rJ   rK   rO  r  r  r  s          r9   r~  testMainClass.run_private_tests  s?    2259902BC%%h/
b
B
 R
 #B	

 
 2
 F8
 x
  &
 fX
 !F8*
 D6
  $
 dV
 
  "D>!
" x#
$ %+8!'$X!F%)F$(6&*V/3f'+f!%7
: _--$*8E- ==!%"( &x"(#)(E (.}}+-'( ,2(&'*0o&.4X)*,28'(*0o&5;H014:8/006x+,nnXe444s   D:E<E=Ec                   #    U R                   nU R                  S:X  a  [        5       (       a  gSnS n[        SU5       H  n U R	                  X!/ S5      I S h  vN     g   Ub"  SU-   S-   [        U5      -   n[        SU-   5        g N.! [
         a*  nUnUR                  US-  5      I S h  vN     S nAMz  S nAff = f7f)	NpyTr   r   r   z[TEST_FAILURE] Failed z : r   )	r   r7   r   rg   r   r@   r  r   r   )r8   rJ   proxy_test_namer  	exceptionro   rD   error_messages           r9   test_proxiestestMainClass.test_proxies_  s     3388t			q+&A/&&"dKKK '  4FNQbclQmmM !M12 L /	nnQX.../sN   A CB
BB
*CB


B>B9-B0.B93C9B>>Cc                 
   UR                   S:X  a  UR                  b  UR                  S:X  d   S5       eUR                  S   S   S:X  d   SUR                  S   S   -   5       eSUR                  S	   S
   ;   d#   S[	        UR                  S	   S
   5      -   5       eg UR                   S:X  aU  UR                  S:X  d   SUR                  -   5       eUR                  S   S   S:X  d   SUR                  S   S   -   5       eg g )Nbinancer(   z$binance.com hostname should be emptyapipubliczhttps://api.binance.com/api/v3z/https://api.binance.com/api/v3 does not match: zlending/union/accountsapigetz8SAPI should contain the endpoint lending/union/account, 	binanceusz
binance.usz#binance.us hostname does not match zhttps://api.binance.us/api/v3z.https://api.binance.us/api/v3 does not match: )rz   hostnameurlsr  r   )r8   rJ   s     r9   check_constructortestMainClass.check_constructorw  s   ;;)#$$,0A0AR0GoIooG=='15UU  j  XI  LT  LY  LY  Z_  L`  ai  Lj  Xj  jU+x||F/CE/JJ  v  NH  KY  Zb  Zf  Zf  gm  Zn  ot  Zu  Kv  Nv  vJ[[K'$$4o6[^f^o^o6oo4=='15TT  h  WG  JR  JW  JW  X]  J^  _g  Jh  Wh  hT (r<   c                 P  #    UR                   S:w  a  gSUl        UR                  S5      I S h  vN nUS   nUS   n[        UR	                  5       5      n[        U5      S:  d   S5       e[        UR                  5       5      n[        U5      S:  d   S	5       eSUl        g Nt7f)
Nr  FTrb  r.   responseHeadersr   z$Response headers should not be emptyz+Response headers values should not be empty)rz   return_response_headersfetch_tickerrZ   r\   rY   rk  )r8   rJ   r   r.   headersheaders_keysheader_valuess          r9   test_return_response_headers*testMainClass.test_return_response_headers  s     ;;)#+/(,,Z88f~()GLLN+< 1$L&LL$W^^-.=!A%T'TT%+0( 9s   -B&B$A5B&c                 6  #    UR                   (       a  gU R                  U5        U R                  (       d  [        US5      (       a  UR	                  S5         U R                  U5      I S h  vN nU(       d#  [        5       (       d  [        U5      I S h  vN   gU R                  X5      I S h  vN   [        5       (       d  [        U5      I S h  vN   g g  Nk ND N, N! [         a*  n[        5       (       d  [        U5      I S h  vN    UeS nAff = f7f)NTr3   )
rV   r  r3   r   set_sandbox_moder7  r   r!   r  r@   )r8   rJ   rK   r5  rD   s        r9   r_   testMainClass.start_test  s     >>x(<<,XyAA%%d+	--h77Fyy/))
 $$X66699Ho%%  8 * 7% 	99Ho%%G	s   ADC" .C/(C" CC" DC" 1C2!C" C C" DC" C" C"  C" "
D,D	D
DDDc                     [        U5      n[        U5      nUnUb  SU-   S-   nUSU-   S-   U-   -  nU(       d   U5       eg )N[]z computed: z	 stored: )r   )	r8   condr   calculated_outputstored_outputr   calculated_stringstored_stringr  s	            r9   assert_static_error!testMainClass.assert_static_error  sX     ++<=&}5?#IOM6DGXXX"]"tr<   c                 B    [        5       S-   U-   S-   n[        U5      nU$ )Nz./ts/src/test/static/markets/.jsonr
   r   r8   rz   filenamecontents       r9   load_markets_from_file$testMainClass.load_markets_from_file  s*    
  >$CCbH7Rx(r<   c                 B    [        5       S-   U-   S-   n[        U5      nU$ )Nz ./ts/src/test/static/currencies/r  r  r  s       r9   load_currencies_from_file'testMainClass.load_currencies_from_file  s(    >$FFKgUx(r<   c                    0 nU(       a5  X-   S-   n[        U5      (       d  [        SU-   5        g [        U5      X2'   U$ [        U5      n[	        S[        U5      5       H*  nXV   nUR                  SS5      n[        X-   5      n	XU'   M,     U$ )Nr  z[WARN] tests not found: r   r(   )r   r   r   r   rg   rY   rh   )
r8   foldertarget_exchanger5  pathfilesrm   fileexchange_namer  s
             r9   load_static_datatestMainClass.load_static_data  s    +g5D!$''/$67&24&8F#MF#q#e*%A8D LL"5M"6=1G$+=!	 &
 r<   c                     Uc  g UR                  S5      nSn[        S[        U5      5       HM  nUS:  d  M  X$   nUR                  S5      S:  a   UR                  S5      nUS-  nX6S   -  n  U$ US-  nX5-  nMO     U$ )N/r(   r      ?)rf   rg   rY   find)r8   url	url_partsr   rm   currentcurrent_partss          r9   remove_hostnamefrom_url%testMainClass.remove_hostnamefrom_url  s    ;IIcN	q#i.)A1u#,<<$r)$+MM#$6M3JC++C 
 s
 * 
r<   c                 D   0 nUR                  S5      n[        S[        U5      5       Hs  nX4   nUR                  S5      n[        U5      nUS:w  a  M+  US   nUS   n	U	b7  U	R                  S5      (       d  U	R                  S5      (       a  [	        U	5      n	XU'   Mu     U$ )N&r   =r  re   r  {)rf   rg   rY   
startswithr   )
r8   r  r5  partsrm   part	key_valuekeys_lengthr   values
             r9   urlencoded_to_dict testMainClass.urlencoded_to_dict  s    		#q#e*%A8D

3Ii.KaA,CaLE!)9)9#)>)>EDTDTUXDYDY"5)3K & r<   c           	         [        U5      (       a  [        U5      (       a  gU(       d  U(       d  g[        U[        5      (       a  [        U[        5      (       a  [        UR	                  5       5      n[        UR	                  5       5      n[        U5      n	[        U5      n
U R                  X:H  SXC5        [        S[        U5      5       Hf  nX{   nUR                  X5      (       a  M  UR                  X5      (       d  U R                  SSU-   XC5        XL   nX<   nU R                  XXX\5        Mh     g[        U[        5      (       az  [        U[        5      (       ae  [        U5      n[        U5      nU R                  UU:H  SXC5        [        S[        U5      5       H  nXK   nX;   nU R                  XUUU5        M!     g[        U5      (       a  S OUn[        U5      (       a  S OUnU(       a  [        U5      OSnU(       a  [        U5      OSnSU-   S-   U-   nU(       a(  U R                  S	:w  a  U R                  UU:H  UXCU5        g[        U[        5      n[        U[        5      n[        U[        5      n[        U[        5      nUS L nUS L nUU:H  =(       a    UU:H  =(       a    UU:H  nU R                  US
XCU5        U=(       d    UnU=(       d    Un U=(       d    Un!U(       d  U (       d  U!(       a  U R                  S	:X  d  U R                  S:X  a}  Sn" UR                  U5        Sn"U"(       a6  U R                  UR                  U5      UR                  U5      :H  UXCU5        gU R                  [        U5      [        U5      :H  UXCU5        gU R                  [        U5      [        U5      :H  UXCU5        gU R                  S	:X  aL  UR!                  U5      n$UR!                  U5      n%U R                  [        U$5      [        U%5      :H  UXCU5        gUR                  U5      n&UR                  U5      n'U R                  U&U':H  UXCU5        g! [         a  n#Sn" S n#A#GN9S n#A#ff = f)NTzoutput length mismatchr   Fzoutput key missing: 	undefinedzoutput value mismatch: != C#zoutput type mismatchGO)r    r   r   rZ   r\   rY   r  rg   r   assert_new_and_stored_outputr   r6   boolparse_to_numericr@   r   number_to_string)(r8   rJ   	skip_keys
new_outputr  strict_type_checkasserting_keystored_output_keysnew_output_keysstored_keys_lengthnew_keys_lengthrm   r   stored_value	new_valuestored_array_lengthnew_array_lengthstored_itemnew_itemsanitized_new_outputsanitized_stored_outputnew_output_stringstored_output_stringmessage_erroris_computed_boolis_stored_boolis_computed_stringis_stored_stringis_computed_undefinedis_stored_undefinedshould_be_same
is_boolean	is_stringis_undefined	is_numberrD   stringified_new_outputstringified_stored_outputnumeric_new_outputnumeric_stored_outputs(                                           r9   "assert_new_and_stored_output_inner0testMainClass.assert_new_and_stored_output_inner  s   $$})E)E-}d++*Z2N2N!%m&8&8&:!;":??#45O!$%7!8!/2O$$%7%JLdfs  A1c"456(+$$S44 ))#??,,U4JS4PR_l,1&O	11(y`qw 7H w t,,*Z2N2N"%m"4":$$%8<L%LNfhu  C1c-01+.%=11(xQ\^op 2n c -:*,E,E4J /<]/K/KdR_#=Q$8 9WbCZ3'>#?`k 47HH6QThhM dii4&7 (()=AX)XZgiv  ER  SR O %//CT$J ",-Dd"K&01Es&K"$./F$L )=)E%'>$'F#"2n"D  "fK]aqKq  "f  yN  Re  ye((9OQ^lyz-?
.B2B	4K8Kl		T)tyyD/@$)	.$556JK(,I % 44X5N5NOc5dhp  iB  iB  CZ  i[  6[  ]j  ly  GT  U#' 44]CT5UYfg{Y|5|  L  N[  iv  w#'00?P1QUbcwUx1x  {H  JW  er  s#yyD(191J1JK_1`.4<4M4MNe4f1005K1LPSTmPn1np}  @M  [h  i
  .6-F-FGX-Y*080I0IJ^0_-001CG\1\^kmz  IV  W+  ) .(-I.s   #Q 
Q4'Q//Q4c                     Sn U R                  XX4XV5      nU$ ! [         aR  nU R                  (       a:  U R                  U5      S-   S-   U R                  U5      -   S-   n	[	        SU	-   5        UeS nAff = f)NTz(calculated)r  z(stored)z[TEST_FAILURE_DETAIL])r(  r@   r.   var_to_stringr   )
r8   rJ   r  r  r  r  r	  r   rD   r  s
             r9   r  *testMainClass.assert_new_and_stored_outputJ  s    	99(zj{  LC 
  	yy $ 2 2: > ORX X[_[m[mn{[| |  @J  !J,}<=G		s    
A5AA00A5c                 V    S nUc  SnU$ [        U5      (       a  SnU$ [        U5      nU$ )Nr  null)r    r   )r8   obj
new_strings      r9   r+  testMainClass.var_to_stringU  sE    
;$J
 	 3J  (,Jr<   c                    XE:w  a7  U R                  U5      nU R                  U5      n	U R                  X:H  SX5        Uc  Uc  Ub  Ub  UR                  S5      n
UR                  S5      nUR                  U
S5      nUR                  US5      nUc  Uc  gU R	                  U5      nU R	                  U5      nU R                  XX5        gUS:X  aG  UbD  UbA  [        U[        5      (       a  [        U5      n[        U[        5      (       a  [        U5      nOUS:X  a)  Ub&  Ub#  U R	                  U5      nU R	                  U5      nOkUS:X  ae  UR                  S5      (       d  UR                  S	5      (       a  [        U5      n[        U5      nO"U R	                  U5      nU R	                  U5      nU R                  XXv5        g)
Nzurl mismatchr  re   Tr   
urlencodedbothr  r  )
r  r  rf   r   r  r  r   r   r   r  )r8   rJ   typer  
stored_urlrequest_urlr  r  
first_pathsecond_pathstored_url_partsnew_url_partsstored_url_querynew_url_querystored_url_paramsnew_url_paramss                   r9   assert_static_request_output*testMainClass.assert_static_request_output_  s   $55jAJ66{CK$$Z%>PZh !
(:&[-D#-#3#3C#8  + 1 1# 6#+#6#67G#K  ( 3 3M1 E$,=3H  $($;$;<L$M!!%!8!8!G11(~i6>}8z?U--- *= 9*c**'
3
\!}'@zG] 33MBM00<JV^'',,0H0H0M0M *= 9'
3
 $ 7 7 F!44Z@
))(zYr<   c                 *    U R                  XX4S5        g )NF)r  )r8   rJ   r  computed_resultstored_results        r9   assert_static_response_output+testMainClass.assert_static_response_output  s    ))(_der<   c                     Uc  g / n[        S[        U5      5       H;  nX   n[        U5      (       a  UR                  S 5        M*  UR                  U5        M=     U$ )Nr   )rg   rY   r    rj   )r8   input	new_inputrm   r  s        r9   sanitize_data_input!testMainClass.sanitize_data_input  sZ    =	q#e*%AhGW%%  &  ) & r<   c           	        #    S nS nU R                   (       a  [        SUSUS   5         [        5       (       d'  [        XU R	                  US   5      5      I S h  vN   O[        XU R	                  US   5      5          UR                  US5      n	U R                  XXSS   XyU5        g NO! [         a9  n[        U[        5      (       d  UeUR                  nUR                  n S nANkS nAff = f! [         ae  nSU l        SU R                  -   S	-   S-   UR                  -   S
-   S-   U-   S
-   S-   US   -   S
-   [!        U5      -   n
[        SU
-   5         S nAgS nAff = f7f)Nz[INFO] STATIC REQUEST TEST::descriptionrH  outputr  Tr  ][STATIC_REQUEST]r  r>   )r.   r   r   r   rJ  r   r@   r   r   last_request_bodylast_request_urlr   r@  request_tests_failedr6   rz   r   )r8   rJ   rL   datar5  r  rO  r7  rD   call_outputr  s              r9   test_request_statically%testMainClass.test_request_statically  s    99.T-=PQ		4996xIaIabfgnboIpqqq5hH`H`aefmanHop	3"--dH=K--hieVapvw
  r  	4q"677//F"33K		4  	3(,D%$))O.AACG(++UX[[^aadjjmppsvvy}  L  zM  M  PS  S  Vg  hi  Vj  jM!M122		3sw   'E$0B, B*B, E$ B, >E$ )C2 )E$*B, ,
C/6/C*%E$*C//E$2
E!<AEE$E!!E$c                   #    UR                  US5      n[        XS   5      nU R                  (       a  [        SUSUS   5         [	        5       (       d9  [        XU R                  US   5      5      I S h  vN nU R                  XcXu5        O1[        XU R                  US   5      5      nU R                  XcX5         [        US 5        g NU! [         ae  n	SU l
        SU R                  -   S	-   S-   UR                  -   S
-   S-   U-   S
-   S-   US   -   S
-   [        U	5      -   n
[        SU
-   5         S n	A	NyS n	A	ff = f7f)NparsedResponsehttpResponsez[INFO] STATIC RESPONSE TEST:rM  rN  rH  Tr  z][STATIC_RESPONSE]r  r>   )r   r   r.   r   r   r   rJ  rE  r   r@   response_tests_failedr6   rz   r   )r8   rJ   rL   r  rT  expected_resultmocked_exchangeunified_resultunified_result_syncrD   r  s              r9   test_response_statically&testMainClass.test_response_statically  s    "--d4DE,XN7KL99/d=>QR
	399'GZ^ZrZrswx  tA  [B  (C  "C22?~o&KH^b^v^vw{  }D  xE  _F  'G#22?Obt
 	8T* "C
  	3)-D&$))O.BBSH8;;VY\\_bbekknqqtwwz~  @M  {N  N  QT  T  Wh  ij  Wk  kM!M122	3sO   AE 0C 6C7C E 0C >E C 
D=AD83E 8D==E c                     U R                  U5      nU R                  U5      n[        U0 SU_SU_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SSSS.SSS./_SSSSS0 S ._5      nX4l        U$ )!Nr=  rM  rP   F	rateLimitre   r   zhttp://fake:8080r   apiKeyr   secretsecretsecretpasswordwalletAddresswallet
privateKeyB0xff3bdd43534543d421f05aec535965b5050ad6ac15345435345435453495e771uidtokenlogin	accountId12345accounts	myAccountrL  )rz   rO  rZ  r   Tl   I5 )enableUnifiedAccountenableUnifiedMarginaccessTokenexpiresleverageBrackets)r  r  r   rM  )r8   r  r=  rM  rJ   s        r9   init_offline_exchange#testMainClass.init_offline_exchange  s8   --m<33MB
  1
w1
*1
 u1
 	1

 +1
 ,1
 e1
 n1
 
1
 X1
 ^1
 51
 W1
 W1
 1
  
 !1
. (,',&*$&/1
 > )r<   c           	        #    U R                  U5      nUR                  US0 5      nUR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US5      n	U	(       a  [        U	5      Ul        UR                  US5      n
U
(       a  Xl	        UR                  U5        UR                  US0 5      n[        UR                  5       5      n[        S[        U5      5       GH  nX   nX   n[        S[        U5      5       GH\  nUU   nUR                   nUR                  US0 5      nUR                  UR#                  UU5      5        UR                  US	5      nUb  UU:w  a  Mf  UR%                  US
S5      nU(       a  M  UR                  US
S5      nUS:w  a  M  UR%                  USS5      nU(       a  U R&                  S:X  a  M  UR%                  USS5      nU(       a  U R&                  S:X  a  M  UR                  US5      nUR                  US/ 5      nU R)                  XNUUU5      I S h  vN   UR+                  UR#                  U0 5      5      Ul        GM_     GM     [-        5       (       d  [/        U5      I S h  vN   g NW N7f)Nr   rd  re  rj  rh  rq  methodsr   rN  disabledFr(   
disabledCSr   
disabledGOr  
outputTypeskipKeysT)rx  r   r   r   rd  re  rj  rh  	safe_listrq  extend_exchange_optionsr   rZ   r\   rg   rY   r   r   	safe_boolr6   rV  convert_to_safe_dictionaryr   r!   )r8   r  exchange_datar+  rJ   global_optionsapi_keyre  private_keywallet_addressrq  r{  methods_namesrm   rL   r-  ro   r5  old_exchange_optionstest_exchange_optionsrN  is_disableddisabled_stringis_disabled_c_sharpis_disabled_gor5  r  s                              r9    test_exchange_request_statically.testMainClass.test_exchange_request_statically  s    --m<!++M9bI&&}h?!'lHO%%mX>!&kHO**=,G"%k"2H!--m_M%(%8H"%%mZ@ (((8%%mYCW\\^,q#m,-A"%FoG1c'l+ '/'7'7$(0(;(;FIr(R%001E1EFZ\q1rs&11&-H)	[0H&00UK"*"6"6vz2"N"b(&.&8&8u&U#&DII,=!)!3!3FL%!P!tyyD'8++M<H$//z2N	228VTS\]]]#+#F#FxG[G[\prtGu#v 3 , .: yy/!! ^ "s%   JK*K&AK* K(!K*(K*c                   #    U R                  U5      nUR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US5      nU(       a  [        U5      Ul        UR                  US0 5      n	UR                  US0 5      n
UR                  U
5        [        U	R                  5       5      n[        S[        U5      5       GH{  nX   nX   n[        S[        U5      5       GHU  nX   nUR                  US5      nUR                  nUR                  US0 5      nUR                  UR                  UU5      5        UR                  US	S
5      nU(       a  Mv  UR                  USS
5      nU(       a  U R                   S:X  a  M  UR                  USS
5      nU(       a  U R                   S:X  a  M  Ub  UU:w  a  M  UR                  USS
5      nU(       a  U R                   S:X  a  GM  UR                  US/ 5      nU R#                  XMUU5      I S h  vN   UR                  UR                  U0 5      5        GMX     GM~     [%        5       (       d  ['        U5      I S h  vN   g NR N7f)Nrd  re  rj  rh  r{  r   r   rN  r|  Fr}  r   disabledPHPPHPr~  r  r  T)rx  r   r   rd  re  rj  rh  r   r  rZ   r\   rg   rY   r   r   r  r6   r`  r   r!   )r8   r  r  r+  rJ   r  re  r  r  r{  r   r  rm   rL   r-  ro   r5  rN  r  r  r  r  is_disabled_phpr  r  s                            r9   !test_exchange_response_statically/testMainClass.test_exchange_response_statically"  sz    --m<&&}h?!'lHO%%mX>!&kHO**=,G"%k"2H!--m_M%(%8H"%%mYC%%mYC((1W\\^,q#m,-A"%FoG1c'l+ &11&-H'/'7'7$(0(;(;FIr(R%001E1EFZ\q1rs&00UK&.&8&8u&U#&DII,="*"4"4V]E"R"		U(:)	[0H!)!3!3FL%!P!tyyD'8$//z2N	33HiQWXXX 001E1EFZ\^1_`3 , .: yy/!! Y
 "s%   I+K-K .AK:K;KKc                     Ub  gSnUS   n[        UR                  5       5      n[        S[        U5      5       H'  nXg   nXX   n	[        U	5      n
UR	                  XJ5      nM)     U$ )Nre   r   r{  )rZ   r\   rg   rY   sum)r8   rJ   r  r+  r  r{  r  rm   rL   r-  results_lengths              r9   !get_number_of_tests_from_exchange/testMainClass.get_number_of_tests_from_exchangeW  sm     	*W\\^,q#m,-A"%FoG \N,,s3C	 .
 
r<   c                    [        S0 5      nUR                  USS5      nU(       a"  U R                  S:X  a  [        SU-   S-   5        gUR                  USS5      nU(       a"  U R                  S	:X  a  [        SU-   S
-   5        gUR                  USS5      nU(       a"  U R                  S:X  a  [        SU-   S-   5        gUR                  USS5      nU(       a"  U R                  S:X  a  [        SU-   S-   5        gg)NExchange
disabledPyFPYz[TEST_WARNING] Exchange z is disabled in pythonTr  r  z is disabled in phpr}  r   z is disabled in c#r~  r  z is disabled in go)r   r  r6   r   )r8   r  r  rJ   is_disabled_pyr  r  r  s           r9   check_if_exchange_is_disabled+testMainClass.check_if_exchange_is_disabledd  s     R0!++M<OtyyD0+m;>VVW",,]M5Q		U 2+m;>SST&00eTDII$5+m;>RRS!++M<OtyyD0+m;>RRSr<   c                 D   #    U R                  SX5      I S h  vN   g N7f)NrequestTrun_static_tests)r8   r  r+  s      r9   rS   &testMainClass.run_static_request_testsx  s$     ##IJJJ 	K     c                 <  #    [        5       S-   U-   S-   nU R                  XB5      nUc  g[        UR                  5       5      n[	        S0 5      n/ nSn	U(       a  [        SU-   5        U(       a  [        SU-   5        [        S[        U5      5       H  n
Xj   nX[   nU R                  X5      nU(       a  M%  U R                  X|U5      nUR                  X5      n	US:X  a#  UR                  U R                  XU5      5        Mq  UR                  U R                  XU5      5        M      [        R                  " U6 I S h  vN   U R"                  (       d  U R$                  (       a  [+        S5        g [-        5       (       a  SOSnS	U R&                  -   S-   U-   S-   [/        U	5      -   S-   U-   S-   n[        SU-   5        g  N! [          aK  nUS:X  a  SU l        OSU l        S	U R&                  -   S
-   [)        U5      -   n[        SU-   5         S nANS nAff = f7f)Nz./ts/src/test/static/r  Tr  r   z[INFO:MAIN] Exchange to test: z[INFO:MAIN] Testing only: r  r  rP  r>   re   z[SYNC]r(   r  z[TEST_SUCCESS] z static z tests passed.r   )r
   r  rZ   r\   r   r   rg   rY   r  r  r  rj   r  r  r%  r&  r@   rS  r[  r6   r   r   r   r   )r8   r5  r  r+  r  static_data	exchangesrJ   r*  r  rm   r  r  r|  number_of_testsrD   r  prefixsuccess_messages                      r9   r  testMainClass.run_static_tests|  s     "99D@3F++FD))+,	 R01OCD-	9:q#i.)A%LM'6M99-WH"DDX^ghO,,s4Cy  E Emdm no F F}en op *	3..(+++ $$(B(BN")))X"F!DIIo3f<?PPSVWZS[[^hhkoo  sC  COO+, , 	3y ,0)-1*$))O.AADUVWDXXM!M122	3sD   D'H*G  GG A=HG 
HAHHHHc                 D   #    U R                  SX5      I S h  vN   g N7f)NresponseTr  )r8   r  tests      r9   rT   'testMainClass.run_static_response_tests  s&      ##JDDD 	Er  c                   #    U R                  5       U R                  5       U R                  5       U R                  5       U R	                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R                  5       U R!                  5       U R#                  5       U R%                  5       U R'                  5       U R)                  5       U R+                  5       U R-                  5       U R/                  5       U R1                  5       U R3                  5       U R5                  5       U R7                  5       /n[8        R:                  " U6 I S h  vN   SU R<                  -   S-   n[?        SU-   5        [A        S5        g N07f)Nr  z&][TEST_SUCCESS] brokerId tests passed.r   r   T)!test_binancetest_okxtest_cryptocom
test_bybittest_kucointest_kucoinfuturestest_bitget	test_mexctest_htxtest_wootest_bitmarttest_coinex
test_bingxtest_phemextest_blofintest_coinbaseinternationaltest_coinbase_advancedtest_woofi_pro
test_oxfuntest_xttest_paradextest_hashkeytest_coincatch	test_defxtest_cryptomustest_derivetest_mode_tradetest_backpackr%  r&  r6   r   r   )r8   r*  r  s      r9   rU   !testMainClass.run_broker_id_tests  s     %%'$:M:M:OQUQ`Q`Qbdhdtdtdvx|  yP  yP  yR  TX  Td  Td  Tf  hl  hv  hv  hx  z~  zG  zG  zI  KO  KX  KX  KZ  \`  \m  \m  \o  qu  qA  qA  qC  EI  ET  ET  EV  X\  Xh  Xh  Xj  lp  l|  l|  l~  @D  @_  @_  @a  cg  c~  c~  c@  BF  BU  BU  BW  Y]  Yh  Yh  Yj  lp  lx  lx  lz  |@  |M  |M  |O  QU  Qb  Qb  Qd  fj  fy  fy  f{  }A  }K  }K  }M  OS  Ob  Ob  Od  fj  fv  fv  fx  z~  zN	  zN	  zP	  R	V	  R	d	  R	d	  R	f	  g	nnh'''		/,TTX'(A	 	(s   F=G2?G0 1G2c                   #    U R                  S5      nSnSnSnS n UR                  SSSSS	5      I S h  vN   US
   n[        U5      nUR                  U5      (       d   SU-   S-   U-   5       eS n	 UR                  SSSSS	5      I S h  vN   S n
 UR                  SSSSS	5      I S h  vN   U	S
   n[        U5      nUR                  U5      (       d   SU-   S-   U-   5       eU
S
   nUR                  U5      (       d   SU-   S-   U-   5       eS n SSSSSS.SSSSS./nUR                  U5      I S h  vN   US   n[        S[        U5      5       H3  nUU   nUS
   nUR                  U5      (       a  M%   SU-   S-   U-   5       e   [        5       (       d  [        U5      I S h  vN   g GN{! [         a&  nU R                  UR                  5      n S nAGNS nAff = f GN[! [         a&  nU R                  UR                  5      n	 S nAGNS nAff = f GNq! [         a&  nU R                  UR                  5      n
 S nAGNS nAff = f GN! [         a&  nU R                  UR                  5      n S nAGNDS nAff = f N7f)Nr  z
x-TKT5PX2Fz
x-cvBPrNm9z
x-xcKtGhcurb  limitbuyre    N  newClientOrderIdzbinance - spot clientOrderId: z does not start with spotIdre  rg  zbinance - swap clientOrderId: z does not start with swapIdz%binance - swap clientOrderIdInverse: selli )rK   r5  sideamountpricer  )rK   r5  r  r  batchOrdersr   z&binance createOrders - clientOrderId: T)rx  create_orderr@   r  rQ  r   r  create_ordersrg   rY   r   r!   )r8   rJ   spot_idswap_idinverse_swap_idspot_order_requestrD   client_order_idspot_id_stringswap_order_requestswap_inverse_order_requestclient_order_id_swapswap_id_stringclient_order_id_inversecreate_orders_requestordersbatch_ordersrm   r  current_client_order_ids                       r9   r  testMainClass.test_binance  sZ    --i8&!	U''
GUAuMMM --?@W)).99  	_;[^m;m  qN  <N  Q_  <_  	_9!	U''%ERRR &*"	]''wq%PPP  22DEW#..~>>  	i@`cw@w  {X  AX  [i  Ai  	i>"<=O"P&11/BB  	xDk  oF  EF  If  Ef  ix  Ex  	xB $	X 	F ((000 -];q#l+,A"1oG&-.@&A#*55nEE  {Go  sJ  HJ  Mj  Hj  m{  H{  {E - yy/!!_ N 	U!%!8!89S9S!T	U S 	U!%!8!89S9S!T	U Q 	])-)@)@A[A[)\&	]. 1 	X$($;$;H<V<V$W!	X "s  J
F3 F0F3 8J
3G) G&G) J
H +H,H 0A#J
#I 7I8I <;J
;/J
*J+J
0F3 3
G#=GJ
G##J
&G) )
H3HJ
HJ
H 
I)I
J

IJ
I 
JJ :J
 JJ
c                   #    U R                  S5      nSnS n UR                  SSSSS5      I S h  vN   US   S	   n[        U5      nUR                  U5      (       d   S
U-   S-   U-   5       eUS   S   nXr:X  d   SU-   S-   U-   5       eS n UR                  SSSSS5      I S h  vN   US   S	   n	U	R                  U5      (       d   SU	-   S-   U-   5       eUS   S   n
X:X  d   SU-   S-   U
-   5       e[        5       (       d  [        U5      I S h  vN   g N! [         a   n[        UR                  5      n S nAGNS nAff = f N! [         a  n[        UR                  5      n S nANS nAff = f Nb7f)Nokx6b9ad766b55dBCDErb  r  r  re   r  r   clOrdIdzokx - spot clientOrderId:  does not start with id: tagz
okx - id: z different from spot tag: re  zokx - swap clientOrderId:  different from swap tag: T	rx  r  r@   r   rQ  r   r  r   r!   )r8   rJ   rz   r  rD   r  	id_stringspot_tagr  r  swap_tags              r9   r  testMainClass.test_okx  s    --e4!	H''
GUAuMMM -Q/	:G	)))44  	O6RUd6d  hC  7C  FO  7O  	O4%a(/~Z|b03OORZZZ~!	H''%ERRR  2!4Y?#..y99  	Y;WZn;n  rM  <M  PY  <Y  	Y9%a(/~Z|b03OORZZZ~yy/!!' N 	H!+H,F,F!G	H S 	H!+H,F,F!G	H "s   E9D DD AE9E 'E	(E ,A(E9E7E9D 
E&E;E9EE9	E 
E4E/*E9/E44E9c                   #    U R                  S5      nSnUR                  5       I S h  vN   S n UR                  SSSSS5      I S h  vN   US   S	   nXR:X  d   S
U-   S-   U-   5       e[        5       (       d  [        U5      I S h  vN   g Nd NF! [         a  n[	        UR
                  5      n S nANhS nAff = f N57f)N	cryptocomCCXTrb  r  r  re   r  params	broker_idzcryptocom - id:  different from  broker_id: T)rx  r   r  r@   r   rQ  r   r!   r8   rJ   rz   r  rD   r   s         r9   r  testMainClass.test_cryptocom	  s     --k:##%%%	=''
GUAuMMM H%k2	d 2R 7:X X[d ddyy/!! 	& N 	= !;!;<G	=
 "sV   'C BC B 	B
B :C B>	C B 
B;B61C 6B;;C c                 d  #    U R                  S5      nS nSnUR                  S   U:X  d   S5       e UR                  SSSSS	5      I S h  vN   US
   U:X  d   SU-   S-   5       e[        5       (       d  [        U5      I S h  vN   g N=! [         a  nUR                  n S nANVS nAff = f N*7f)Nbybitr  brokerIdid not in optionsrb  r  r  re   r  Refererzbybit - id:  not in headers.Trx  r   r  r@   last_request_headersr   r!   r8   rJ   req_headersrz   rD   s        r9   r  testMainClass.test_bybit  s     --g6
+r1F3FF1	8''
GUAuMMM 9%+U^b-@CU-UU+yy/!! N 	8"77K	8
 "sL   0B0B B	B 3B0B.B0	B 
B+B&!B0&B++B0c                   #    U R                  S5      nS nUR                  S   S   S   nUR                  S   S   S   nUS:X  d   SU-   S-   5       eUS	:X  d   S
U-   S-   5       e UR                  SSSSS5      I S h  vN   SnUS   U:X  d   SU-   S-   5       e[        5       (       d  [        U5      I S h  vN   g N?! [         a  nUR                  n S nANXS nAff = f N*7f)Nkucoinpartnerr  rz   r   ccxtzkucoin - id:  not in optionsz$9e58cc35-5b5e-4133-92ec-166e3f077cb8zkucoin - key:  not in options.rb  r  r  re   r  KC-API-PARTNERr	  Tr
  )r8   rJ   r  r  spot_keyrD   rz   s          r9   r  testMainClass.test_kucoin'  s    --h7""9-f5d;##I.v6u=& O/G";>O"OO AAsCSV^C^asCssA	8''
GUAuMMM +,2]Ob4HK]4]]2yy/!! N 	8"77K	8 "sN   A$C&'C ?B? C 5C&9C$:C&?C 
C!CC&C!!C&c                   #    U R                  S5      nS nSnUR                  S   S   S   nUR                  S   S   S   nXC:X  d   SU-   S-   5       eUS	:X  d   S
U-   S-   5       e UR                  SSSSS5      I S h  vN   US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5      I S h  vN   g N=! [         a  nUR                  n S nANVS nAff = f N*7f)Nkucoinfuturesccxtfuturesr  futurerz   r   zkucoinfutures - id: r  z$1b327198-f30c-4f14-a0ac-918871282f15zkucoinfutures - key: re  r  r  re   r  r  r	  Tr
  )r8   rJ   r  rz   	future_id
future_keyrD   s          r9   r   testMainClass.test_kucoinfutures9  s    --o>$$Y/9$?	%%i0:5A
W 6 BEW WWCC~E\_iEil~E~~C	8''%ERRR +,2d4JR4ORd4dd2yy/!! S 	8"77K	8 "sN   A%C%(C   B>C  3C%8C#9C%>C   
C 
CC%C  C%c                 p  #    U R                  S5      nS nSnUR                  S   U:X  d   SU-   S-   5       e UR                  SSSS	S
5      I S h  vN   US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5      I S h  vN   g N=! [         a  nUR                  n S nANVS nAff = f N*7f)Nbitgetp4svebrokerzbitget - id: r  rb  r  r  re   r  X-CHANNEL-API-CODEr	  Tr
  r  s        r9   r  testMainClass.test_bitgetJ  s     --h7)R/Y21EHY1YY/	8''
GUAuMMM /0B6a"8LOa8aa6yy/!! N 	8"77K	8 "L   6B6B BB 3B6	B4
B6B 
B1B,'B6,B11B6c                   #    U R                  S5      nS nSnUR                  S   U:X  d   SU-   S-   5       eUR                  5       I S h  vN    UR                  SSSS	S
5      I S h  vN   US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5      I S h  vN   g N[ N?! [         a  nUR
                  n S nANXS nAff = f N,7f)Nmexcr  r"  zmexc - id: r  rb  r  r  re   r  sourcer	  Trx  r   r   r  r@   r  r   r!   r  s        r9   r  testMainClass.test_mexcX  s     --f5)R/W1CFW1WW/##%%%	8''
GUAuMMM 8$*SMB,>AS,SS*yy/!! 	&M 	8"77K	8 "Z   A	CB'CB+ )B)*B+ .3C!C"C)B+ +
C5CCCCc                 h  #    U R                  S5      nSnS n UR                  SSSSS5      I S h  vN   US   n[        U5      nUR                  U5      (       d   S	U-   S
-   U-   5       eS n UR                  SSSSS5      I S h  vN   S n UR                  SSSSS5      I S h  vN   US   n	U	R                  U5      (       d   SU	-   S
-   U-   5       eUS   n
U
R                  U5      (       d   SU
-   S
-   U-   5       e[        5       (       d  [        U5      I S h  vN   g N! [         a   n[        UR                  5      n S nAGNS nAff = f N! [         a  n[        UR                  5      n S nANS nAff = f N! [         a  n[        UR                  5      n S nANS nAff = f N7f)Nhtx
AA03022abcrb  r  r  re   r  zclient-order-idzhtx - spot clientOrderId r  re  rg  channel_codezhtx - swap channel_code z htx - swap inverse channel_code Tr  )r8   rJ   rz   r  rD   r  r  r  r  r  r  s              r9   r  testMainClass.test_htxg  s"    --e4!	H''
GUAuMMM -->?G	)))44  	N6QTc6c  gB  7B  EN  7N  	N4!	H''%ERRR &*"	P''wq%PPP  2.A#..y99  	W;UXl;l  pK  <K  NW  <W  	W9"<^"L&11)<<  	e>`cz>z  ~Y  ?Y  \e  ?e  	e<yy/!!/ N 	H!+H,F,F!G	H S 	H!+H,F,F!G	H Q 	P)3H4N4N)O&	P "s   F2D' D%D' 8F2/E EE F2F 'F(F ,A3F2F0 F2%D' '
E1EF2EF2E 
E? E:5F2:E??F2F 
F-F(#F2(F--F2c           	      z  #    U R                  S5      nSnS n UR                  SSSSS5      I S h  vN   US   n[        U5      nUR                  U5      (       d   S	U-   S
-   U-   5       eS n UR                  SSSSSSS05      I S h  vN   US   nUR                  U5      (       d   SU-   S
-   U-   5       e[        5       (       d  [        U5      I S h  vN   g N! [         a  n[        UR                  5      n S nANS nAff = f N! [         a  n[        UR                  5      n S nANS nAff = f Na7f)Nwooz$bc830de7-50f3-460b-9ee0-f430f83f9dadrb  r  r  re   r  r   zwoo - broker_id: r  re  	stopPricerO   r  zwoo - brokerId: Tr  )	r8   rJ   rz   r  rD   r   r  stop_order_requestclient_order_id_stops	            r9   r  testMainClass.test_woo  s}    --e43!	H''
GUAuMMM '{3	G	##I..y0Ci0ORm0mpy0yy.!	H''%EUT   
  2*=#..y99  	O;MPd;d  hC  <C  FO  <O  	O9yy/!!% N 	H!+H,F,F!G	H  	H!+H,F,F!G	H
 "s   D;C CC 8D;/D 
DD AD;D9D;C 
D)D>D;DD;D 
D6D1,D;1D66D;c                   #    U R                  S5      nS nSnUR                  S   U:X  d   SU-   S-   5       eUR                  5       I S h  vN    UR                  SSSS	S
5      I S h  vN   US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5      I S h  vN   g N[ N?! [         a  nUR
                  n S nANXS nAff = f N,7f)NbitmartCCXTxBitmart000r  zbitmart - id: r  rb  r  r  re   r  zX-BM-BROKER-ID not in headersTr)  r  s        r9   r  testMainClass.test_bitmart  s     --i8
+r1\3Cb3HK\3\\1##%%%	8''
GUAuMMM +,2]4Dr4IL]4]]2yy/!! 	&M 	8"77K	8 "r+  c                   #    U R                  S5      nSnUR                  S   U:X  d   SU-   S-   5       eS n UR                  SSSS	S
5      I S h  vN   US   n[        U5      nUR                  U5      (       d   SU-   S-   U-   5       e[        5       (       d  [        U5      I S h  vN   g N]! [         a  n[	        UR
                  5      n S nANS nAff = f N37f)Ncoinexzx-167673045r  zcoinex - id: r  rb  r  r  re   r  	client_idzcoinex - clientOrderId: r  T)
rx  r   r  r@   r   rQ  r   r  r   r!   )r8   rJ   rz   r  rD   r  r  s          r9   r  testMainClass.test_coinex  s    --h7
+r1[?R3GJ[3[[1!	H''
GUAuMMM -[9G	)))44  	M6PSb6b  fA  7A  DM  7M  	M4yy/!! N 	H!+H,F,F!G	H "sM   6CB1 B/B1 AC)C*C/B1 1
C;CCCCc                 p  #    U R                  S5      nS nSnUR                  S   U:X  d   SU-   S-   5       e UR                  SSSS	S
5      I S h  vN   US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5      I S h  vN   g N=! [         a  nUR                  n S nANVS nAff = f N*7f)Nbingxr  r"  zbingx - id: r  rb  r  r  re   r  zX-SOURCE-KEYr	  Tr
  r  s        r9   r  testMainClass.test_bingx  s     --g6)R/X"1DGX1XX/	8''
GUAuMMM >*b0Z.22EHZ2ZZ0yy/!! N 	8"77K	8
 "r%  c                   #    U R                  S5      nSnS n UR                  SSSSS5      I S h  vN   US   n[        U5      nUR                  U5      (       d   S	U-   S
-   U-   5       e[        5       (       d  [        U5      I S h  vN   g N]! [         a  n[        UR                  5      n S nANS nAff = f N37f)Nphemex
CCXT123456rb  r  r  re   r  clOrdIDzphemex - clOrdID: r  Tr  )r8   rJ   rz   r  rD   r  r  s          r9   r  testMainClass.test_phemex  s     --h7	=''
GUAuMMM "),G	)))44  	G6J_6\_z6z  ~G  7G  	G4yy/!! N 	= !;!;<G	= "sJ   B?B BB AB?	B=
B?B 
B:B50B?5B::B?c                   #    U R                  S5      nSnS n UR                  SSSS5      I S h  vN   US   n[        U5      nUR                  U5      (       d   SU-   S	-   U-   5       e[        5       (       d  [        U5      I S h  vN   g
 N]! [         a  n[        UR                  5      n S nANS nAff = f N37f)Nblofinec6dd3a7dd982d0bzLTC/USDT:USDTr  r  re   r  zblofin - brokerId: r  Tr  )r8   rJ   rz   r  rD   r   r  s          r9   r  testMainClass.test_blofin  s     --h7	=''5!LLL J'	G	##I..{0E	0QTo0or{0{{.yy/!! M 	= !;!;<G	= "sJ   B>B BB AB>B<	B>B 
B9B4/B>4B99B>c                   #    U R                  S5      nSUR                  S'   SnUR                  S   U:X  d   S5       eS n UR                  SSS	S
S5      I S h  vN   US   nUR                  [        U5      5      (       d   S5       e[        5       (       d  [        U5      I S h  vN   g NR! [         a  n[	        UR
                  5      n S nANtS nAff = f N37f)Ncoinbaseinternationalrandom	portfolionfqkvdjpr  r  rf  r  r  re   r  r  $clientOrderId does not start with idT
rx  r   r  r@   r   rQ  r  r   r   r!   r8   rJ   rz   r  rD   r  s         r9   r  (testMainClass.test_coinbaseinternational  s     --.EF(0%
+r1F3FF1	=''%ERRR ""34))#b'22Z4ZZ2yy/!! S 	= !;!;<G	=
 "sN   ?CB/ B-B/ AC'C(C-B/ /
C9CCCCc                   #    U R                  S5      nSnUR                  S   U:X  d   S5       eS n UR                  SSSSS	5      I S h  vN   US
   nUR                  [        U5      5      (       d   S5       e[        5       (       d  [        U5      I S h  vN   g NR! [         a  n[	        UR
                  5      n S nANtS nAff = f N37f)Ncoinbaser  r  r  rc  r  r  re   r  r  rQ  TrR  rS  s         r9   r  $testMainClass.test_coinbase_advanced  s     --j9
+r1F3FF1	=''
GUAuMMM ""34))#b'22Z4ZZ2yy/!! N 	= !;!;<G	=
 "sM   0CB  BB  ACCCB   
C	*C?CC		Cc                   #    U R                  S5      nSUl        SnUR                  5       I S h  vN   S n UR                  SSSSS5      I S h  vN   US	   nXR:X  d   S
U-   S-   U-   5       e[        5       (       d  [        U5      I S h  vN   g Na NC! [         a  n[        UR                  5      n S nANeS nAff = f N57f)Nwoofipro+secretsecretsecretsecretsecretsecretsecretsr  rf  r  r  re   r  	order_tagzwoofipro - id: r  T	rx  re  r   r  r@   r   rQ  r   r!   r  s         r9   r  testMainClass.test_woofi_pro  s     --j9G##%%%	=''%ERRR K(	c 1B 69W WZc ccyy/!! 	& S 	= !;!;<G	=
 "V   .CBCB BB 7CCCB 
B? B:5C:B??Cc                 |  #    U R                  S5      nSUl        SnUR                  5       I S h  vN   S n UR                  SSSSS5      I S h  vN   US	   nUS
   nUS   nXr:X  d"   S[        U5      -   S-   [        U5      -   5       eg N[ N=! [         a  n[        UR                  5      n S nAN_S nAff = f7f)NoxfunrZ  r   z
BTC/USD:OXr  r  re   r  r  r   r(  zoxfun - id: r  T)rx  re  r   r  r@   r   rQ  r   )r8   rJ   rz   r  rD   r  rx  r   s           r9   r  testMainClass.test_oxfun+  s     --g6G##%%%	=''guaOOO "q	(O	jR 8;Y Y\_`i\j jj 	& P 	= !;!;<G	=sJ   .B<BB<B BB 8B<B 
B9B4/B<4B99B<c                   #    U R                  S5      nSnS n UR                  SSSSS5      I S h  vN   US   nXR:X  d   S	U-   S
-   U-   5       eS n UR                  SSSSS5      I S h  vN   US   nXr:X  d   S	U-   S
-   U-   5       e[        5       (       d  [        U5      I S h  vN   g N{! [         a  n[        UR                  5      n S nANS nAff = f No! [         a  n[        UR                  5      n S nANS nAff = f Na7f)Nxtr  rb  r  r  re   r  mediaz	xt - id: r  re  clientMediaTrx  r  r@   r   rQ  r   r!   )r8   rJ   rz   r  rD   
spot_mediar  
swap_medias           r9   r  testMainClass.test_xt;  s4    --d3!	H''
GUAuMMM (0
]r!14P!PS]!]]!	H''%ERRR (6
]r!14P!PS]!]]yy/!! N 	H!+H,F,F!G	H S 	H!+H,F,F!G	H
 "s   DB/ B-B/ DC +C,C 07D'D	(D-B/ /
C9CDCDC 
D'D<DDDc                 ,  #    U R                  S5      nSUl        SUl        SUR                  S'   SSSS	S
SSSSSSSSSSSS./SSSSS.UR                  S'   S nSnUR                  S   U:X  d   SU-   S -   5       eUR	                  5       I S h  vN    UR                  S!S"S#S$S%5      I S h  vN   US&   U:X  d   SU-   S'-   5       e[        5       (       d  [        U5      I S h  vN   g( N[ N?! [         a  nUR                  n S nANXS nAff = f N,7f))Nparadex*0xc751489d24a33172541ea451bc253d7a9e98c781@c33b1eb4b53108bf52e10f636d8c1236c04c33a712357ba3543ab45f48a5cb0brm  	authTokenz(https://potc-testnet-sepolia.starknet.ioz5https://pathfinder.api.testnet.paradex.trade/rpc/v0_7PRIVATE_SN_POTC_SEPOLIAz&https://voyager.testnet.paradex.trade/A0x286003f7c7bfc3f94e8f0af48b48302e7aee2fb13c23b141479ba00832ef2c6r'   A0x3530cc4759d78042f1b543bf797f5f3d647cde0388c33734cf91b7f7b9314a9A0x41cb0280ebadaa75f996d8d92c6f265f6d040bb3ba442e5f86a554f1765244eA0x2c6a867917ef858d6b193a0ff9e62b46d0dc760366920d631715d58baeaca1fz	TEST USDCrZ     *0x29A873159D5e14AcBd63913D4A7E2df04570c666*0x8586e05adc0C35aa11609023d4Ae6075Cb813b4CA0x6f373b346561036d98ea10fb3e60d2f459c872b1933b50b21fe6ef4fda3b75eA0x46e9237f5408b5f899e72125dd69bd55485a287aaf24663d3ebe00d237fc7ef)r   rK   decimalsl1_token_addressl1_bridge_addressl2_token_addressl2_bridge_address*0x582CC5d9b509391232cd544cDF9da036e55833Af*0x11bACdFbBcd3Febe5e8CEAa75E0Ef6444d9B45FB11155111z0.2)starknet_gateway_urlstarknet_fullnode_rpc_urlstarknet_chain_idblock_explorer_urlparaclear_addressparaclear_decimalsparaclear_account_proxy_hashparaclear_account_hashoracle_addressbridged_tokensl1_core_contract_addressl1_operator_addressl1_chain_idliquidation_feesystemConfigr  r"  zparadex - id: r  zBTC/USD:USDCr  r  re   r  zPARADEX-PARTNERr:  T)
rx  rh  rj  r   r   r  r@   r  r   r!   r  s        r9   r  testMainClass.test_paradexP  s_    --i8!M`(/%$N)`!:"J!d"#,o&iaDE[\   )U#O%$-,
(0 )R/Z1AB1FIZ1ZZ/##%%%	8''5QQQ ,-3^5E5JM^5^^3yy/!! 	&Q 	8"77K	8 "sZ   BDC+DC/ -C-.C/ 23D%D&D-C/ /
D9D
D
DDc                 0  #    U R                  S5      nS nSn UR                  SSSSS5      I S h  vN   US   U:X  d   S	U-   S
-   5       e[	        5       (       d  [        U5      I S h  vN   g N=! [         a  nUR                  n S nANVS nAff = f N*7f)Nhashkey10000700011rb  r  r  re   r  zINPUT-SOURCEzhashkey - id: r	  Trx  r  r@   r  r   r!   r  s        r9   r  testMainClass.test_hashkeyz  s     --i8	8''
GUAuMMM >*b0\2BR2GJ\2\\0yy/!! N 	8"77K	8
 "I   BA1 A/A1 3B)B*B/A1 1
B;BBBBc                 0  #    U R                  S5      nS nSn UR                  SSSSS5      I S h  vN   US   U:X  d   S	U-   S
-   5       e[	        5       (       d  [        U5      I S h  vN   g N=! [         a  nUR                  n S nANVS nAff = f N*7f)N	coincatch47cfyrb  r  r  re   r  r#  zcoincatch - id: r	  Tr  r  s        r9   r  testMainClass.test_coincatch  s     --k:	8''
GUAuMMM /0B6d8JR8ORd8dd6yy/!! N 	8"77K	8
 "r  c                 0  #    U R                  S5      nS n UR                  SSSSS5      I S h  vN   SnUS   U:X  d   S	U-   S
-   5       e[	        5       (       d  [        U5      I S h  vN   g N?! [         a  nUR                  n S nANXS nAff = f N*7f)NdefxzDOGE/USDC:USDCr  r  d   re   r  zX-DEFX-SOURCEzdefx - id: r	  Tr  )r8   rJ   r  rD   rz   s        r9   r  testMainClass.test_defx  s     --f5	8''(8'5#qQQQ ?+r1Z=23EHZ3ZZ1yy/!! R 	8"77K	8 "sI   BA1 A/A1 5B)B*B/A1 1
B;BBBBc                 B  #    U R                  S5      nS n UR                  SSSSS5      I S h  vN   SnUS   U:X  d   S	U-   S
-   5       e[        5       (       d  [        U5      I S h  vN   g N?! [         a  n[        UR                  5      n S nANaS nAff = f N37f)N	cryptomusrb  r  r  re   r  r  r  zcryptomus - tag:  not in request.Trf  )r8   rJ   r  rD   r  s        r9   r  testMainClass.test_cryptomus  s     --k:	=''
GVQNNN u~$T&9C&?BT&TT$yy/!! O 	= !;!;<G	=
 "sI   BA1 A/A1 5B)B*B/A1 1
B;BBBBc                   #    U R                  S5      nSnUR                  S   U:X  d   SU-   S-   5       eS n SSSS.nSUl        S	Ul        UR	                  S
SSSSU5      I S h  vN   US   U:X  d   SU-   S-   5       e[        5       (       d  [        U5      I S h  vN   g N=! [
         a  n[        UR                  5      n S nAN_S nAff = f N37f)Nderive*0x0ad42b8e602c2d3d475ae52d678cf63d84ab2749rz   zderive - id: r  i  
   )subaccount_idmax_feederiveWalletAddressB0x7b77bb7b20e92bbb85f2a22b330b896959229a5790e35f2f290922de3fb22ad5z	LBTC/USDCr  r  g{Gz?i  referral_codezderive - referral_code: r  T)
rx  r   rh  rj  r  r@   r   rQ  r   r!   )r8   rJ   rz   r  r  rD   s         r9   r  testMainClass.test_derive  s     --h79%+U_r-ADU-UU+
	=!%'SF
 &RH""fH''WfdDRXYYY '2-c/IB/NQc/cc-yy/!! Z 	= !;!;<G	= "sL   6C-B& &B$'B& +3CCC$B& &
C0C
C
CCc                   #    U R                  S5      nSUl        SnUR                  5       I S h  vN   S n UR                  SSSSS5      I S h  vN   US	   nXR:X  d   S
U-   S-   U-   5       e[        5       (       d  [        U5      I S h  vN   g Na NC! [         a  n[        UR                  5      n S nANeS nAff = f N57f)N	modetraderZ  CCXTMODErf  r  r  re   r  r[  zmodetrade - id: r  Tr\  r  s         r9   r  testMainClass.test_mode_trade  s     --k:G##%%%	=''%ERRR K(	d 2R 7:X X[d ddyy/!! 	& S 	= !;!;<G	=
 "r^  c                 L  #    U R                  S5      nSUl        SUl        S nSn UR                  SSSSS	5      I S h  vN   US
   U:X  d   SU-   S-   5       e[        5       (       d  [        U5      I S h  vN   g N=! [         a  nUR
                  n S nANVS nAff = f N*7f)Nbackpackz,Jcj3vxDMAIrx0G5YYfydzS/le/owoQ+VSS164zC1RXo=z,sRkC124Iazob0QYvaFj9dm63MXEVY48lDNt+/GVDVAU=1400rd  r  r  re   i  zX-Broker-Idzbackpack - id: r	  T)rx  rd  re  r  r@   r  r   r!   r  s        r9   r  testMainClass.test_backpack  s     --j9HH	8''
GUAtLLL =)R/\1BR1GJ\1\\/yy/!! M 	8"77K	8
 "sK   $B$A? A= A? 3B$7B"8B$=A? ?
B	BB$BB$)r   r0   r7   r,   r.   r6   r4   r1   r2   r  r-   rS  r+   r[  r3   r   r   r[   r/   r5   )N)T)TN)NN)f__name__
__module____qualname____firstlineno__r,   rS  r[  r-   r5   r+   r.   r/   r0   r1   r2   r4   r3   ri   r   r   r   r[   r  r7   r6   r   r:   rE   r?   r^   rX   r   r]   rW   r   r   r  r   r  r7  rA  rP  rS  ry  r  r~  r  r  r  r_   r  r  r  r  r  r  r(  r  r+  r@  rE  rJ  rV  r`  rx  r  r  r  r  rS   r  rT   rU   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __static_attributes__ r<   r9   r&   r&      s   H !MHNDGELIG$&!OJL
CD$&PLN,'\-^)V ;= GR)V2$ D%NB5H0h4
#
$$"Pd	&Pf0&%N7r3j('-R	6p4$">4 >   *(T* r<   r&   )%r%  tests_helpersr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r&   r  r<   r9   <module>r     sL     O	  O	  O	  O	  O	  O	  O	  O	  O	\ \r<   