
    E#ibN                       S SK Jr  S SKJr  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  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJ r   S SKJ!r!  S SKJ"r"  S SKJ#r#  S SK$J%r%  S SK&J'r'   " S S\\5      r(g)    )Exchange)ImplicitAPIN)AnyBalances
CurrenciesCurrency	IndexTypeIntLedgerEntryMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersTrade)List)ExchangeError)PermissionDenied)ArgumentsRequired)
BadRequest)	BadSymbol)InsufficientFunds)InvalidOrder)OrderNotFound)RateLimitExceeded)	TICK_SIZE)Precisec                   |  ^  \ rS rSrS\4U 4S jjr0 4S\4S jjr0 4S\\	   4S jjr
S\S\	4S jrS rS	 rS
SS0 4S\S\S\S\S\\   4
S jjrSES\	S\4S jjrSS0 4S\S\S\S\\   4S jjrSSS0 4S\S\S\4S jjrSES\S\	S\4S jjrS0 4S\S\S\4S jjrSFS\S\S\4S jjrS0 4S\S\4S jjrS0 4S\4S jjr SES\S\	S\!4S jjr"0 4S\#4S  jjr$S\#4S! jr%SSS0 4S"\S\S\S\\&   4S# jjr'SES$\S%\(S\&4S& jjr)S' r*S( r+S0 4S\S)\,S*\-S+\.S,\/4
S- jjr00 4S. jr1S/ r2S0 4S0\S\4S1 jjr3S0 4S\S*\-4S2 jjr4SSS0 4S\S\S\S\\5   4S3 jjr6SSS0 4S\S\S\S\\5   4S4 jjr7S0 4S0\S\4S5 jjr8SES6\S\	S\54S7 jjr9S8 r:0 4S"\S+\.4S9 jjr;SES%\(4S: jjr<S;S<0 SS4S= jr=S"\>S>\S?\S@\SA\SB\4SC jr?SDr@U =rA$ )G	coinmetro   returnc                 v  > U R                  [        [        U ]  5       0 SS_SS_SS/_SS_S	S
_SS_SS_S0 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!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_S0S_S1S_E0 S2S_S3S_S4S_S5S_S6S_S7S_S8S_S9S_S:S_S;S_S<S_S=S_S>S_S?S_S@S_SAS_SBS_E0 SCS_SDS_SES_SFS_SGS_SHS_SIS_SJS_SKS_SLS_SMS_SNS_SOS_SPS_SQS_SRS_SSS_E0 STS_SUS_SVS_SWS_SXS_SYS_SZS_S[S_S\S_S]S_S^S_S_S_S`S_SaS_SbS_ScS_SdS_ESSSSSSSSSSSSSSSe.E_SfSgShSiSjSkSl._SmSnSoSoSp.SqSqSp.SrSs/StSuSv._SwSxSySzSySzSySySzSyS{.0SySyS|SySyS|S|SyS}.SySySySySySySySySySyS~.
SySySySyS.S.Sp._SSSSSS._SSSxSSU R	                  S5      U R	                  S5      S.0_S[
        _SS S/S._SS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 SS SS.SSSSS.SS SSSS.SS SS SSSS.S SS0S.	S S S.S S S.S._S[        [        [        [        [        [        [        [        [        [        [        [        [        S.[        [        [        [        [        [        [        [        [        [        [        [        [        [        [        S.S._5      $ )Nidr$   name	Coinmetro	countriesEEversionv1	rateLimit   	certifiedFprohasCORSspotTmarginswapfutureoption	addMarginborrowCrossMarginborrowIsolatedMargincancelAllOrderscancelOrdercancelOrderscloseAllPositionsclosePositioncreateDepositAddresscreateOrdercreatePostOnlyOrdercreateReduceOnlyOrdercreateStopLimitOrdercreateStopMarketOrdercreateStopOrderdeposit	editOrderfetchAccountsfetchBalancefetchBidsAsksfetchBorrowInterestfetchBorrowRateHistoriesfetchBorrowRateHistoryfetchCanceledAndClosedOrdersfetchCanceledOrdersfetchClosedOrderfetchClosedOrdersfetchCrossBorrowRatefetchCrossBorrowRatesfetchCurrenciesfetchDepositfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsfetchDepositsWithdrawalsfetchDepositWithdrawFeefetchDepositWithdrawFeesfetchFundingHistoryfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchL3OrderBookfetchLedgerfetchLeveragefetchLeverageTiersfetchMarketLeverageTiersfetchMarketsfetchMarkOHLCVfetchMyTrades
fetchOHLCVfetchOpenInterestHistoryfetchOpenOrderfetchOpenOrders
fetchOrderfetchOrderBookfetchOrderBooksfetchOrdersfetchOrderTradesfetchPositionfetchPositionsfetchPositionsRiskfetchPremiumIndexOHLCVfetchStatusfetchTickerfetchTickers	fetchTimefetchTradesfetchTradingFeefetchTradingFeesfetchTradingLimitsfetchTransactionFeefetchTransactionFeesfetchTransactionsfetchTransfersfetchWithdrawal)fetchWithdrawalsfetchWithdrawalWhitelistreduceMarginrepayCrossMarginrepayIsolatedMarginsandboxsetLeverage	setMarginsetMarginModesetPositionModesignIntransferwithdrawws
timeframes6000030000018000001440000086400000)1m5m30m4h1durlszQhttps://github.com/ccxt/ccxt/assets/43336371/e86f87ec-6ba3-4410-962b-f7988c5db539zhttps://api.coinmetro.com)publicprivatehttps://api.coinmetro.com/openzhttps://coinmetro.com/z7https://documenter.getpostman.com/view/3653795/SVfWN6KSzZhttps://help.coinmetro.com/hc/en-gb/articles/6844007317789-What-are-the-fees-on-Coinmetro-z&https://go.coinmetro.com/?ref=crypto24)logoapitestwwwdocfeesreferralr   get      )z	demo/tempz/exchange/candles/{pair}/{timeframe}/{from}/{to}zexchange/priceszexchange/ticks/{pair}/{from}assetsmarketszexchange/book/{pair}z"exchange/bookUpdates/{pair}/{from}gQ?)zusers/balanceszusers/walletszusers/wallets/history/{since}z exchange/orders/status/{orderID}zexchange/orders/activezexchange/orders/history/{since}zexchange/fills/{since}zexchange/margin)
jwt	jwtDevicedeviceszjwt-read-onlyzexchange/orders/createz exchange/orders/modify/{orderID}zexchange/swapzexchange/swap/confirm/{swapId}zexchange/orders/close/{orderID}zexchange/orders/hedge)r   z exchange/orders/cancel/{orderID}zusers/margin/collateralzusers/margin/primary/{currency})r   postputrequiredCredentials)apiKeysecretuidtokenr   tradingz0.0010)feeSide	tierBased
percentagetakermakerprecisionModeoptionsQRDO)currenciesByIdForParseMarketcurrencyIdsListForParseMarketfeatures)triggerPriceTypeprice)IOCFOKPOGTD)
marginModetriggerPricer   triggerDirectionstopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedtrailingleveragemarketBuyByCostmarketBuyRequiresPriceselfTradePreventionicebergi )r   limitdaysBack	untilDayssymbolRequired)r   triggerr   r   )r   r   r   r   r   )r   r   r   r   r   r   r   r     )	r   rC   createOrdersrn   rs   rr   rv   rT   ro   )linearinverse)r5   r7   r8   
exceptions)z4Both buyingCurrency and sellingCurrency are requiredz8One and only one of buyingQty and sellingQty is requiredzInvalid buyingCurrencyzInvalid 'from'zInvalid sellingCurrencyzInvalid buyingQtyzInvalid sellingQtyzInsufficient balancez8Expiration date is in the past or too near in the future	ForbiddenzOrder Not Foundz%since must be a millisecond timestampzThis pair is disabled on margin)zaccessing from a new IPzavailable to allocatezAt leastzcollateral is not allowedzInsufficient liquidityzInsufficient order sizezInvalid quantityzInvalid Stop LosszInvalid stop price!zNot enough balancezNot enough marginzorderType missingzServer Timeoutz4Time in force has to be IOC or FOK for market orderszToo many attempts)exactbroad)deep_extendsuperr$   describeparse_numberr!   r   r   r   r   r   r   r   r    )self	__class__s    V/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/async_support/coinmetro.pyr   coinmetro.describe   sx   i ? A qD
+qD
KqD
 $qD
 t	qD

 qD
 qD
 5qD
  ddd $d 	d
 %d %d Ud $Td 'd "5d td d $Ud  d 'd  t!d" &u#d$ (%d& ''d( ()d* "4+d, 5-d. U/d0  1d2 3d4  5d6 &u7d8 +E9d: )%;d< /=d> &u?d@ #EAdB $UCdD 'EdF (GdH "4IdJ KdL &uMdN (OdP 1%QdR  SdT +EUdV *5WdX +EYdZ &u[d\ #E]d^ *5_d` $Uadb "5cdd *5edf +Egdh #Eidj tkdl  mdn %eodp +Eqdr sdt !%udv  wdx dydz +E{d| !%}d~ "4d@ dAdB !$CdD "5EdF uGdH #EIdJ  KdL !%MdN %eOdP )%QdR uSdT uUdV WdX UYdZ t[d\ "5]d^ #E_d` %eadb &ucdd 'edf $Ugdh !%idj "5kdl %*,1 %$)',$"!&#(!!GdqD
Z    [qD
h k9:
 ?? 0M uDiqD
J %&KL+,89"##$01>?	 +,)*9=<=23;?26+,	  !%&#$)*23<=)*:;;<12  !<=34;<	/+KqD
b "	$cqD
n $!&"&!..w7!..s3oqD
@ YAqD
D 0428EqD
L #&*(,,0,1).+004%*7
 $(#'"'#'	( #($)$)+/27/4#'/$2 %)&+!%$*%)*/& ',#($)*/	# ',!%#($)*/( ',!%$*%)#($)*/$ *.#u=~ ##
 ##GGMqD
\  MYP\.:(2/;)5*6,=P\!1'4=G7@  0@-> *1;.:/;(4)5+7*;):)3&3LX):#"]qD
 q q	    c                   #    U R                  U5      I Sh  vN n0 n[        S[        U5      5       H  nX$   nU R                  US5      nU R	                  U5      nU R                  US5      nSn	US:X  d  US:X  d  US:X  a  Sn	OUS	:X  a  S	n	U R                  US
S5      n
US:X  a  Sn
U R                  UUUU	UU R                  US5      U R                  US5      U R                  US5      SU R                  U R                  U
5      5      U R                  US5      SS.SSS.S.0 S.5      X7'   M     U R                  U R                  S5      c  U R                  US5      nXR                  S'   U R                  U R                  S/ 5      n[        UR!                  5       5      n[        S[        U5      5       H  nUR#                  X   5        M     XR                  S'   U$  GN7f)a  
fetches all available currencies on an exchange

https://documenter.getpostman.com/view/3653795/SVfWN6KS#d5876d43-a3fe-4479-8c58-24d0f044edfb

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an associative dictionary of currencies
Nr   symboltypecoinr   erc20cryptofiatdigitsnotabeneDecimalsRENDER4canTrade
canDepositcanWithdrawminQtyminmax)amountr   )r(   coder)   r   infoactiverI   r   fee	precisionlimitsnetworksr   r(   r   )publicGetAssetsrangelensafe_stringsafe_currency_codesafe_string_2safe_currency_structure	safe_boolr   parse_precisionsafe_number
safe_valuer   index_by	safe_listlistkeysappend)r   paramsresponseresulticurrencyr(   r  typeRawr   precisionDigitscurrenciesByIdcurrentCurrencyIdsListcurrencyIdsLists                 r   fetch_currenciescoinmetro.fetch_currenciesN  s     --f55V q#h-(A{H!!(H5B**2.D&&x8GD& Gw$6'W:LF""008EWXOx"%77 ..:>>>(LA NN8]C!..t/C/CO/TU  $//(C#
  $#!	 +9 FL )J ??4<<)GHP!]]648N;ILL78%)^^DLLBace%f"">#6#6#89O1c/23&--o.@A 4<RLL89s 6s   G)G&GG)c                   #    / nUR                  U R                  U5      5        U R                  U R                  S5      c  UR                  U R	                  5       5        [
        R                  " U6 I Sh  vN nUS   n/ n[        S[        U5      5       H5  nU R                  XF   5      nUS   b  US   c  M$  UR                  U5        M7     U$  N[7f)a  
retrieves data on all markets for coinmetro

https://documenter.getpostman.com/view/3653795/SVfWN6KS#9fd18008-338e-4863-b07d-722878a46832

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: an array of objects representing market data
r   Nr   basequote)
r  publicGetMarketsr  r   r'  asynciogatherr  r  parse_market)r   r  promises	responsesr  r  r   markets           r   fetch_marketscoinmetro.fetch_markets  s      --f56??4<<)GHPOOD1134!..(33	Q<  q#h-(A&&x{3Ff~%)@MM&! ) 1 4s   A5C7C8ACr2  c                     U R                  US5      nU R                  U5      nU R                  US5      nU R                  US5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      n	U R	                  USS5      n
U R                  U R                  S0 5      nU R                  0 SU_SUS	-   U-   _S
U_SU_SS _SU_SU_SS _SS_SS_SU
_SS_SS_SS_SS_SS_SS _S U R                  US5      U R                  US5      S S S S S US   U R                  U R                  U R                  US5      5      5      S.S S S.US   S S.S S S.U	S   S S.S.S US.E5      $ )NpairbaseIdquoteIdr6   Fr   r(   r   /r*  r+  settlesettleIdr   r5   Tr7   r8   r9   r  contractr   r   r   r
  )r  r   r  minLimit)r   r  r   cost)r   r   r   contractSizeexpiryexpiryDatetimestrike
optionTyper
  r  createdr  )r  parse_market_idr  !parse_market_precision_and_limitsr  r  r   safe_market_structurer  r   r  )r   r2  r(   parsedMarketIdr7  r8  r*  r+  basePrecisionAndLimitsquotePrecisionAndLimitsr6   tradingFeess               r   r/  coinmetro.parse_market  sU   ff---b1!!.(;"">9=&&v.''0!%!G!G!O"&"H"H"Q%8oodiiB?)) 2+
"2+
dSj5(2+
 D2+
 U	2+

 d2+
 f2+
 w2+
 2+
 F2+
 D2+
 f2+
 E2+
 e2+
 e2+
 d2+
  !2+
" d#2+
$ %%k7;%%k7; "0=**4+?+?@P@PQWYd@e+fg  
 2*=
  
 3:>$ c2+
 2 2	r   c                    S nS nU R                  U R                  S/ 5      n[        U5      n[        SU5       HK  n[        SXV-
  S-
  5       H3  nXG   nXGS-      n	[        U5      [        U	5      :  d  M(  XU'   XUS-   '   M5     MM     [        S[        U5      5       HY  nXF   n
UR	                  U
5      nUS:X  d  M   UR                  U
S5      nU R                  X5      (       d  MJ  US:X  a  U
nUnOUnU
n  O   Ub  UcT  UR                  S5      (       a  UR                  SS5      nSnUR                  S5      (       a  UR                  SS5      nSnUUS.nU$ )Nr   r   r    USDTUSD)r7  r8  )r  r   r  r  findreplacein_arrayendswith)r   marketIdr7  r8  currencyIdscurrencyIdsLengthr   jab
currencyId
entryIndexrestIdr  s                 r   rE  coinmetro.parse_market_id  sr   oodll4SUWX,q+,A1/3a78NA&q6CF?%&N)*A& 9 - q#k*+A$J!z2JQ!))*b9==55!Q!+"(!'", , >W_  ((!))&"5   ''!))%4
 r   c                     U R                  U R                  S0 5      nU R                  X!0 5      nU R                  US0 5      nU R                  US0 5      nU R                  US5      nU R                  US5      US.nU$ )Nr   r  r  r  r
  )r
  r=  )r  r   r  )r   r[  
currenciesr!  r  amountLimitsr=  r  s           r   rF  +coinmetro.parse_market_precision_and_limits@  s    __T\\3QSUV
??:2>8R8vx<##L%8))(K@ 
 r   r   Nr   	timeframesincer   c                   #    U R                  5       I Sh  vN   U R                  U5      nUS   U R                  U R                  X"5      S.nSnUb0  X7S'   Ub(  U R	                  U5      S-  n	U R                  X9U-  5      nOSUS'   U R                  USU5      nUb  U R                  US/5      nXS'   OS	US'   U R                  U R                  Xu5      5      I Sh  vN n
U R                  U
S
/ 5      nU R                  XX#U5      $  N N,7f)a  
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market

https://documenter.getpostman.com/view/3653795/SVfWN6KS#13cfb5bc-7bfb-4847-85e1-e0f35dfb3573

:param str symbol: unified symbol of the market to fetch OHLCV data for
:param str timeframe: the length of time each candle represents
:param int [since]: timestamp in ms of the earliest candle to fetch
:param int [limit]: the maximum amount of candles to fetch
:param dict [params]: extra parameters specific to the exchange API endpoint
:param int [params.until]: the latest time in ms to fetch entries for
:returns int[][]: A list of candles ordered, open, high, low, close, volume
Nr(   )r6  rc  fromr   z:fromuntiltoz:tocandleHistory)load_marketsr2  r  r   parse_timeframesumsafe_integeromit+publicGetExchangeCandlesPairTimeframeFromToextendr  parse_ohlcvs)r   r   rc  rd  r   r  r2  requestrg  durationr  ri  s               r   fetch_ohlcvcoinmetro.fetch_ohlcvL  s#     !!!V$4L))$//9P
 #FO //	:TAE(:;%GFO!!&'59YYvy1F!DM!GDMII$++V]Jfgg8 x"E  	%PPc 	"( hs"   DD	CDD+DDc           	          U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      /$ )N	timestampohlcv)rm  r  )r   ohlcvr2  s      r   parse_ohlcvcoinmetro.parse_ohlcv  sl    e[1UC(UC(UC(UC(UC(
 	
r   c                 &  #    U R                  5       I Sh  vN   U R                  U5      nSUS   0nUb  X&S'   OSUS'   U R                  U R                  Xd5      5      I Sh  vN nU R	                  US/ 5      nU R                  XX#5      $  Nv N+7f)a  
get the list of most recent trades for a particular symbol

https://documenter.getpostman.com/view/3653795/SVfWN6KS#6ee5d698-06da-4570-8c84-914185e05065

:param str symbol: unified symbol of the market to fetch trades for
:param int [since]: timestamp in ms of the earliest trade to fetch
:param int [limit]: the maximum amount of trades to fetch(default 200, max 500)
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
Nr6  r(   rf  rN  tickHistory)rj  r2  publicGetExchangeTicksPairFromrp  r  parse_trades)	r   r   rd  r   r  r2  rr  r  r  s	            r   fetch_tradescoinmetro.fetch_trades  s      !!!V$F4L
 #FO !GFO<<T[[=YZZ: nnX}bA  eCCQ 	" [s"   BBAB#B$*BBc                    #    U R                  5       I Sh  vN   SnUb  U R                  U5      n0 nUb  X&S'   OSUS'   U R                  U R                  Xd5      5      I Sh  vN nU R	                  XuX#5      $  Nc N7f)a  
fetch all trades made by the user

https://documenter.getpostman.com/view/3653795/SVfWN6KS#4d48ae69-8ee2-44d1-a268-71f84e557b7b

:param str symbol: unified market symbol
:param int [since]: the earliest time in ms to fetch trades for
:param int [limit]: the maximum number of trades structures to retrieve(default 500, max 1000)
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
Nrd  r   )rj  r2  privateGetExchangeFillsSincerp  r  r   r   rd  r   r  r2  rr  r  s           r   fetch_my_tradescoinmetro.fetch_my_trades  s      !!![[(F$G  !GG::4;;w;WXX   5@@3 	" Ys"   A>A:AA>#A<$A><A>tradec                    U R                  USS5      nU R                  X25      nUS   nU R                  U/ SQ5      nU R                  US5      nU R	                  US5      nU R	                  US5      nU R	                  US5      n	U R	                  US5      n
U R                  UU	UU R                  U5      US U
S UUS S US	.U5      $ )
Nr   r6  )_idseqNum	seqNumberrw  r   qtyorderIDside)r(   orderrw  datetimer   r   r  takerOrMakerr   r  r>  r	  r  )r  safe_marketsafe_string_nrm  r  
safe_tradeiso8601)r   r  r2  rU  r   r(   rw  priceStringamountStringr  r  s              r   parse_tradecoinmetro.parse_trade  s    V %%eXv>!!(3!'EF%%e[9	&&ug6''u5  	2v."Y/  " 
  	r   c                   #    U R                  5       I Sh  vN   U R                  U5      nSUS   0nU R                  U R                  XS5      5      I Sh  vN nU R	                  US0 5      nU R	                  US0 5      nU R	                  US0 5      n	UU	S.n
U R                  X5      nU R                  US5      US	'   U$  N Nl7f)
a8  
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

https://documenter.getpostman.com/view/3653795/SVfWN6KS#26ad80d7-8c46-41b5-9208-386f439a8b87

:param str symbol: unified symbol of the market to fetch the order book for
:param int [limit]: the maximum amount of order book entries to return(default 100, max 200)
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
Nr6  r(   bookbidask)bidsasksr  nonce)rj  r2  publicGetExchangeBookPairrp  r  parse_order_bookrm  )r   r   r   r  r2  rr  r  r  rawBidsrawAsksrawOrderbook	orderbooks               r   fetch_order_bookcoinmetro.fetch_order_book8  s      !!!V$F4L
 77G8TUU8 x4//$r2//$r2
 )),?	!..t[A	'U 	"
 Vs"   CC?CCA+CCpriceKey	amountKeycountOrIdKeyc                     [        UR                  5       5      n/ n[        S[        U5      5       HH  nU R	                  XW5      nU R                  XW5      n	U R                  X5      n
UR                  X/5        MJ     U$ )Nr   )r  r  r  r  r  r  r  )r   bidasksr  r  r  pricesr  r   r  r   volumes              r   parse_bids_askscoinmetro.parse_bids_askso  sq    glln%q#f+&A**65K$$V/E%%g;FMM5/*	 '
 r   symbolsc                 H  #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  US/ 5      nU R                  US/ 5      n0 n[        S[	        U5      5       H"  nXG   nU R                  US5      n	U	c  M  XU	'   M$     [        S[	        U5      5       HC  nXW   n
U R                  U
S5      n	U	c  M  U R                  Xi0 5      nU R                  X5      Xi'   ME     [        UR                  5       5      nU R                  X5      $  GN N7f)a  
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market

https://documenter.getpostman.com/view/3653795/SVfWN6KS#6ecd1cd1-f162-45a3-8b3b-de690332a485

:param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
NlatestPrices24hInfor   r6  )
rj  publicGetExchangePricesr  r  r  r  rp  r  valuesparse_tickers)r   r  r  r  r  twentyFourHInfostickersObjectr   latestPricerU  twentyFourHInfotickerss               r   fetch_tickerscoinmetro.fetch_tickersy  s     !!!55f==b xD??8YC q#l+,A&/K''V<H#*5h'	 -
 q#./0A.1O''@H#"oomrJ*.++o*S' 1 }++-.!!'33E 	"=s-   D"DD"D AD"7D"
AD" D"c                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  US/ 5      nU R                  XA5      $  NA N*7f)a  
fetches the bid and ask price and volume for multiple markets

https://documenter.getpostman.com/view/3653795/SVfWN6KS#6ecd1cd1-f162-45a3-8b3b-de690332a485

:param str[] [symbols]: unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
Nr  )rj  r  r  r  )r   r  r  r  r  s        r   fetch_bids_askscoinmetro.fetch_bids_asks  sW      !!!55f==~~hC!!,88 	"=   AAAA)AAtickerc                 P   U R                  US5      nU R                  X25      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      n	U R                  US5      n
U R                  US	5      n[        R                  " US
5      nU R                  0 SUS   _SU_SU R                  U5      _SS _SU_SU_SS _SU	_SU_SS _SU_SS _SS _SS _SS _SU_SS _U
S US.EU5      $ )Nr6  rw  r  r  ry  rz  r   r|  delta100r   r  openhighlowcloselast	bidVolume	askVolumevwappreviousClosechanger   average)
baseVolumequoteVolumer  )r  r  rm  r"   
string_mulsafe_tickerr  )r   r  r2  rU  rw  r  r  r  r  r  r  r  r   s                r   parse_tickercoinmetro.parse_ticker  s   & ##FF3!!(3%%fk:	vu-vu-,vs+0%%fc2
  1''u5
 !
fX&!
!
 Y/!
 D	!

 D!
 3!
 T!
 D!
 3!
 !
 3!
 !
 D!
 T!
 d!
  *!!
" t#!
$ %)!
* + 	r   c                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  US/ 5      nU R                  U5      $  NA N*7f)a`  
query for balance and get the amount of funds available for trading or funds locked in orders

https://documenter.getpostman.com/view/3653795/SVfWN6KS#741a1dcc-7307-40d0-acca-28d003d1506a

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
Nr  )rj  privateGetUsersWalletsr  parse_balance)r   r  r  r  s       r   fetch_balancecoinmetro.fetch_balance  sW      !!!44V<<~~h3!!$'' 	"<r  c                 J   SU0n[        S[        U5      5       Hv  nU R                  X0 5      nU R                  US5      nU R	                  U5      nU R                  5       nU R                  US5      US'   U R                  US5      US'   XrU'   Mx     U R                  U5      $ )Nr  r   r!  balancetotalreservedused)r  r  	safe_dictr  r  accountsafe_balance)r   balancesr  r   balanceEntryr[  r  r  s           r   r  coinmetro.parse_balance  s    0 H
 q#h-(A>>(r:L)),
CJ**:6DllnG#//iHGG"..|ZHGFO"4L )   ((r   r  c                   #    U R                  5       I Sh  vN   0 nUb  X%S'   OSUS'   SnUb  U R                  U5      nU R                  U R                  XT5      5      I Sh  vN nU R	                  US/ 5      n/ n	[        S[        U5      5       Ha  n
X   nU R                  US5      nU R	                  US/ 5      n[        S[        U5      5       H  nX   nXS'   U	R                  U5        M     Mc     U R                  XX#5      $  N N7f)	a  
fetch the history of changes, actions done by the user or operations that altered the balance of the user

https://documenter.getpostman.com/view/3653795/SVfWN6KS#4e7831f7-a0e7-4c3e-9336-1d0e5dcb15cf

:param str [code]: unified currency code, default is None
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
:param int [limit]: max number of ledger entries to return(default 200, max 500)
:param dict [params]: extra parameters specific to the exchange API endpoint
:param int [params.until]: the latest time in ms to fetch entries for
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
Nrd  rN  r  r   r!  balanceHistoryr[  )
rj  r!  "privateGetUsersWalletsHistorySincerp  r  r  r  r  r  parse_ledger)r   r  rd  r   r  rr  r!  r  ledgerByCurrenciesledgerr   currencyLedgerr[  r  rX  rawLedgerEntrys                   r   fetch_ledgercoinmetro.fetch_ledger=  s     !!!$G  "GG}}T*H@@WA]^^r "__XvrBq#012A/2N)).*EJ!__^=MrRN1c.12!/!2/9|,n- 3	 3   5@@[ 	" _s#   DD	AD#D$B&DDitemr!  c                 f   U R                  US5      nU R                  US5      nU R                  US5      nU R                  XB5      nU R                  USS5      nU R                  U5      u  pgU R	                  US0 5      nU R                  US5      n	U	S S.n
U R                  US5      nS nUbS  [
        R                  " US	5      (       a  S
n[
        R                  " U5      nO[
        R                  " US	5      (       a  SnU R                  US U R                  U5      UUS US UUUS S S U
S.U5      $ )Nrw  r[  descriptionrN  JSONdatar   )r>  r!  r  r   outin)r  r(   rw  r  	directionr  referenceIdreferenceAccountr   r!  r  beforeafterstatusr	  )r  rn  safe_currencyparse_ledger_entry_descriptionr  r"   	string_lt
string_abs	string_gtsafe_ledger_entry	parse8601)r   r  r!  r  r[  r  r   r  r  feeCostr	  r  r  s                r   parse_ledger_entrycoinmetro.parse_ledger_entry  sP   ##D+6%%dL9
yy|,%%j;&&t]B? ??L??4R8""8V4
 !!$1	  --!	 ++F3""63// 	%%1 "& $ '
  ! 	r   c                     / nUb  UR                  S5      nS nS n[        U5      nUS:  a7  U R                  US   5      nUS   S:w  a  US   nX4/$ U R                  US5      nX4/$ )N r   r   -   )splitr  parse_ledger_entry_typer  )r   r  descriptionArrayr   r  lengths         r   r  (coinmetro.parse_ledger_entry_description  s    "*005%&A://0@0CDD"c).q1 "" #../?C""r   c                 2    SSSS.nU R                  X!U5      $ )Ntransactionr  )DepositWithdrawr   )r  )r   r   typess      r   r  !coinmetro.parse_ledger_entry_type  s'    $%

 T22r   r   r  r  r   c                   #    U R                  5       I Sh  vN   U R                  U5      n0 nX(S'   Sn	Ub  U R                  X5      n	U R                  US5      n
U R	                  US5      nUS:X  ap  Uc!  U
c  [        U R                  S-   U-   S-   5      eUbI  UbF  [        R                  " U R                  U5      U R                  U	5      5      nU R                  U5      n
SnU
b  U R                  X5      nUS:X  a  U R                  US   US	   XU5      nO US
:X  a  U R                  US	   US   XU5      nU R                  US5      nUb&  U R	                  US5      nU R                  U5      US'   U R                  USS5      nUb'  U R	                  US/5      nU R                  X5      US'   U R                  US0 5      nU R                  USS5      nUb  U R	                  US/5      nUUS'   U R!                  US5      nUb'  U R	                  US5      nU R                  UU5      US'   U R!                  US5      nUb'  U R	                  US5      nU R                  UU5      US'   U R#                  U5      (       d  XS'   U R%                  U R'                  X5      5      I Sh  vN nU R)                  UU5      $  GN N7f)a  
create a trade order

https://documenter.getpostman.com/view/3653795/SVfWN6KS#a4895a1d-3f50-40ae-8231-6962ef06c771

:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much of currency you want to trade in units of base currency
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
:param dict [params]: extra parameters specific to the exchange API endpoint
:param float [params.cost]: the quote quantity that can be used alternative for the amount in market orders
:param str [params.timeInForce]: "GTC", "IOC", "FOK", "GTD"
:param number [params.expirationTime]: timestamp in millisecond, for GTD orders only
:param float [params.triggerPrice]: the price at which a trigger order is triggered at
:param float [params.stopLossPrice]: *margin only* The price at which a stop loss order is triggered at
:param float [params.takeProfitPrice]: *margin only* The price at which a take profit order is triggered at
:param bool [params.margin]: True for creating a margin order
:param str [params.fillStyle]: fill style of the limit order: "sell" fulfills selling quantity "buy" fulfills buying quantity "base" fulfills base currency quantity "quote" fulfills quote currency quantity
:param str [params.clientOrderId]: client's comment
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
N	orderTyper>  r   z> createOrder() requires a price or params.cost argument for a z ordersellr7  r8  buyr   r   	stopPriceuserDataclientOrderIdcommentr   stopLossr   
takeProfit)rj  r2  amount_to_precisionr  rn  r   r(   r"   r  number_to_stringparse_to_numericcost_to_precisionhandle_create_order_sideencode_order_time_in_forcer  price_to_precisionr  is_emptyprivatePostExchangeOrdersCreaterp  parse_order)r   r   r   r  r  r   r  r2  rr  formattedAmountr>  
costStringprecisedCostr   r   r!  r#  r   r   r  s                       r   create_ordercoinmetro.create_order  s    . !!!V$
#"66vFOvv.66*7?DL'2r(ruy(y  }E  )E  F  F#&*<$//0E0Ee0LdNcNcdsNtu
,,Z811&?L6>33F84DfYFWYhx  AGU]33F94EvhGWYex  AGoofm<"YYv}5F%)%D%D[%QGM"))&.+N#YYv'78F#'#:#:6#PGK ??6:r:$$V_iHYYv'89F")HY((A$YYv7F#'#:#:6=#QHZ **63DE&YYv'89F%)%<%<V_%UH\"}}X&&"*J==dkk'>Z[[: &11W 	"\ \s"   KJ>JK'K(KKc                 2    XS'   X%S'   Ub  X5S'   Ub  XES'   U$ )NsellingCurrencybuyingCurrency
sellingQty	buyingQty )r   r6  r7  r8  r9  rr  s         r   r*  "coinmetro.handle_create_order_side[  s5    %4!"$2 !!$.L! #,K r   c                 4    SSSSS.nU R                  X!U5      $ )Nr   r  r      )GTCr   r   r   r  r   r   timeInForceTypess      r   r+  $coinmetro.encode_order_time_in_forced  s*    	"
 /kJJr   r(   c                   #    U R                  5       I Sh  vN   SU0nSnU R                  SU5      u    nU R                  USS5      nU R                  US5      nSnU(       d  Ub)  U R	                  U R                  XC5      5      I Sh  vN nO(U R                  U R                  XC5      5      I Sh  vN nU R                  U5      $  N N@ N7f)a   
cancels an open order

https://documenter.getpostman.com/view/3653795/SVfWN6KS#eaea86da-16ca-4c56-9f00-5b1cb2ad89f8
https://documenter.getpostman.com/view/3653795/SVfWN6KS#47f913fb-8cab-49f4-bc78-d980e6ced316

:param str id: order id
:param str symbol: not used by coinmetro cancelOrder()
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.margin]: True for cancelling a margin order
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr  r>   r6   F)rj  handle_margin_mode_and_paramsr  rn  %privatePostExchangeOrdersCloseOrderIDrp  %privatePutExchangeOrdersCancelOrderIDr/  )r   r(   r   r  rr  r   isMarginr  s           r   cancel_ordercoinmetro.cancel_orderm  s      !!!r
 
;;M6R>>&(E:68,
.!GGT[HdeeH!GGT[HdeeH( ))A 	" fes4   CC	A3C
C(C3C4CCCc                   #    U R                  5       I Sh  vN   U R                  US5      nUc  [        U R                  S-   5      eSU0nU R	                  U R                  XS5      5      I Sh  vN nU R                  U5      $  Nn N7f)a  
closes an open position

https://documenter.getpostman.com/view/3653795/SVfWN6KS#47f913fb-8cab-49f4-bc78-d980e6ced316

:param str symbol: not used by coinmetro closePosition()
:param str [side]: not used by coinmetro closePosition()
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.orderID]: order id
:param number [params.fraction]: fraction of order to close, between 0 and 1(defaults to 1)
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
NorderIdz- closePosition() requires a orderId parameterr  )rj  r  r   r(   rE  rp  r/  )r   r   r  r  rK  rr  r  s          r   close_positioncoinmetro.close_position  s      !!!""695?#DGG.]$]^^w
 CCDKKPWD`aa< ))K 	" bs"   B	BAB	/B0B	B	c                   #    U R                  5       I Sh  vN   SnUb  U R                  U5      nU R                  U5      I Sh  vN nU R                  XeX#5      n[	        S[        U5      5       H  nXx   n	SU	S'   M     U$  Nl N?7f)a  
fetch all unfilled currently open orders

https://documenter.getpostman.com/view/3653795/SVfWN6KS#518afd7a-4338-439c-a651-d4fdaa964138

:param str symbol: unified market symbol
:param int [since]: the earliest time in ms to fetch open orders for
:param int [limit]: the maximum number of open order structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nr   r  r  )rj  r2  privateGetExchangeOrdersActiveparse_ordersr  r  )
r   r   rd  r   r  r2  r  ordersr   r  s
             r   fetch_open_orderscoinmetro.fetch_open_orders  s      !!![[(F<<VDD""8UBq#f+&AIE$E(O '  	" Es!   BB.BB>BBc                    #    U R                  5       I Sh  vN   SnUb  U R                  U5      n0 nUb  X&S'   U R                  U R                  Xd5      5      I Sh  vN nU R	                  XuX#5      $  N] N7f)a(  
fetches information on multiple canceled and closed orders made by the user

https://documenter.getpostman.com/view/3653795/SVfWN6KS#4d48ae69-8ee2-44d1-a268-71f84e557b7b

:param str symbol: unified market symbol of the market orders were made in
:param int [since]: the earliest time in ms to fetch orders for
:param int [limit]: the maximum number of order structures to retrieve
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
Nrd  )rj  r2  $privateGetExchangeOrdersHistorySincerp  rP  r  s           r    fetch_canceled_and_closed_orders*coinmetro.fetch_canceled_and_closed_orders  s      !!![[(F$GBB4;;wC_``  5@@ 	" as"   A8A4AA8A6A86A8c                    #    U R                  5       I Sh  vN   SU0nU R                  U R                  XC5      5      I Sh  vN nU R                  U5      $  NA N7f)a  
fetches information on an order made by the user

https://documenter.getpostman.com/view/3653795/SVfWN6KS#95bbed87-db1c-47a7-a03e-aa247e91d5a6

:param int|str id: order id
:param str symbol: not used by coinmetro fetchOrder()
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
Nr  )rj  %privateGetExchangeOrdersStatusOrderIDrp  r/  )r   r(   r   r  rr  r  s         r   fetch_ordercoinmetro.fetch_order  sd      !!!r
 CCDKKPWD`aaH ))Q 	" bs!   AA+AAAAr  c           
         U R                  US5      nU R                  US5      nS nUSL a  Uc  U R                  US5      nSnO'SnO$U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  US	5      nU R                  US
5      n	U R                  US5      n
US:X  a  Uc  U	b  U	S:w  a  U	nUc  U
b  U
S:w  a  U
nU R                  USS5      nU R                  USS5      nX-   nX-   nS nS nUnUnS nS nS nU R	                  U R
                  S5      nU R                  UU5      b  SnUnUnU	nU
nSnOU R                  UU5      b  SnUnUnU
nU	nSnS nUb  Ub  [        R                  " UU5      nU R                  UU5      nS nU R                  US5      nUb  Ub	  UU   US S.nU R                  US/ 5      nU R                  US0 5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  0 SU R                  US5      _SU_SU_S U R                  U5      _S!U R                  US"5      _SU_S#US#   _S$U_S%U R                  U R                  US%5      5      _S&U_S'U_S(U R                  US)5      _S*U_S+U_S,S _S-U_S.U_US US UUS/.EU5      $ )0NcreationTimecanceledTcompletionTimerejectedr  r  r9  r8  	boughtQtysoldQtyr2  r   r7  rN  r6  r(   r  r*  r  r+  r   )r!  r>  ratefillsr!  r#  r%  r$  r  r"  rw  r  lastTradeTimestamplastFillTimer   r   r   r  r   r   r   r   r   r  r  r>  )filled	remainingr	  r   tradesr  )rm  r  r  rn  r  r   r"   
string_divr  
safe_orderr  parse_order_time_in_force)r   r  r2  rw  
isCanceledr  r   r9  r8  ra  rb  buyingCurrencyIdsellingCurrencyIdbyuingIdPlusSellingIdsellingIdPlusBuyingIdr  rU  
baseAmountquoteAmountrg  r>  feeInBaseOrQuotemarketsByIdr   r	  r
  ri  r!  r"  r   r   s                                  r   r/  coinmetro.parse_order2  s   b %%e^<	__UJ7
  --e5EF	##%%eX6FIIeX.E{3$$UK8	%%e\:
$$UK8	""5)48!	(=IQTDT%	")<7c>$
++E3CRH ,,U4ErJ 0 D 1 D
mmDLL$7??;(=>JD,H$KFD%__[*?@LD,H#JFD&")@&&{J?E!!(F3""5&1&6&B"#34C
 4??5*b9((9=**8\B((:>  
$""5)4 
] 
  
 Y/	 

 !$"3"3E>"J 
 f 
 fX& 
 D 
 499$:K:KES`:ab 
 D 
 U 
 D,,UK@ 
  
 ] 
 t 
  j! 
" D# 
$ / 
0 1 	r   c                 .    / SQnU R                  X!U5      $ )N)Nr>  r   r   r   r?  r@  s      r   rl  #coinmetro.parse_order_time_in_force>  s    
 /kJJr   c                 X  #    U R                  5       I Sh  vN   U R                  U5      nUS   n0 nU R                  X5      Xe'   U R                  U R	                  Xc5      5      I Sh  vN nU R                  US0 5      nU R                  X5      n	U R	                  U	SU05      $  N N>7f)a  
create a loan to borrow margin

https://documenter.getpostman.com/view/3653795/SVfWN6KS#5b90b3b9-e5db-4d07-ac9d-d680a06fd110

:param str code: unified currency code of the currency to borrow
:param float amount: the amount to borrow
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `margin loan structure <https://docs.ccxt.com/#/?id=margin-loan-structure>`
Nr(   r  r  )rj  r!  currency_to_precisionprivatePutUsersMarginCollateralrp  r  parse_margin_loan)
r   r  r  r  r!  r[  rr  r  r  r  s
             r   borrow_cross_margincoinmetro.borrow_cross_marginH  s      !!!==&d^
"88F==dkk'>Z[[ 8R8,,V>{{;f)
  	 	"
 \s"   B*B&AB*)B(*=B*(B*c                 X    U R                  US5      nS U R                  X25      S S S S US.$ )Nr   )r(   r!  r  r   rw  r  r  )r  r  )r   r  r!  r[  s       r   r|  coinmetro.parse_margin_loanb  s>    %%dF3
//
E
 	
r   r   GETc                    U R                  X@R                  U5      5      nSU R                  X5      -   nU R                  S   U   U-   n	U R	                  U5      n
Uc  0 nSUS'   US:X  Ga  U R
                  c  U R                  b  U R                  U l        U R                  c  U R                  b  U R                  U l        U	S:X  a"  SUS'   U R                  b  U R                  US	'   OyU	S
:X  a,  U R
                  US'   U R                  b  U R                  US	'   OGSU R                  -   US'   U	R                  S5      (       d  U R                  5         U R
                  US'   US:X  d  US:X  a  SUS'   U R	                  U5      nO[        U
5      S:w  a  U	SU
-   -  n	U	R                  S5      (       a)  U	S[        U	5      S-
   n	U	R                  S5      (       a  M)  XXeS.$ )Nr9  r   trueCCXTr   zhttps://api.coinmetro.com/jwtbypasszX-Device-IdzX-OTPz#https://api.coinmetro.com/jwtDevicezBearer Authorizationr   POSTPUTz!application/x-www-form-urlencodedzContent-Typer   ?r   )urlmethodbodyheaders)rn  extract_paramsimplode_paramsr   	urlencoder   r   r   r   twofa
startswithcheck_required_credentialsr  rT  )r   pathr   r  r  r  r  rr  endpointr  querys              r   signcoinmetro.signn  s   ))F$7$7$=>,,T::iis#h.w'?G ) t{{'>;;

")@![[
55)1&::)'+zzGG$==)-&::)'+zzGG$+4tzz+A(~~&FGG335-1XXGM*& fo*M'~~g.Z1_3;Cll3aC1%C ll3dOOr   reasonr  r  r  r  c
                 
   Uc  g US:w  ay  US:w  as  US:w  am  U R                   S-   U-   n
U R                  US5      nU R                  U R                  S   X5        U R	                  U R                  S   X5        [        U
5      eg )Nr0         r  messager   r   )r(   r  throw_broadly_matched_exceptionr   throw_exactly_matched_exceptionr   )r   r  r  r  r  r  r  r  requestHeadersrequestBodyfeedbackr  s               r   handle_errorscoinmetro.handle_errors  s    CKdckww}t+H&&x;G001I7]001I7]))r   )r   r   )N)r   r   r  )B__name__
__module____qualname____firstlineno__r   r   r   r'  r   r   r3  dictr/  rE  rF  strr
   r  rt  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   floatr   r3  r*  r+  rH  rL  r   rR  rV  rZ  r/  rl  r}  r|  r  intr  __static_attributes____classcell__)r   s   @r   r$   r$      s   r# rh	 -/ b: bH *, %V %N=4 =F =~&P
 ?CQUdhqs ?Q ?Q ?Q3 ?Q^a ?Qx|  ~B  yC ?QB
 
4 
 <@d[] 4D 4DS 4D 4Dbfglbm 4Dl 37TX\eg %AC %As %ARU %ANB Bv B BH @DB 5S 5 5S\ 5n 9 hq  6:" L47 L4 L4\ 8<B 9W 934 3 36 3j *, ( (") ")H .2SW`b zAs zA# zAS zAgklwgx zAx%t %x %; %N#3 mqy{ b2 b2I b2Y b2X] b2fi b2H hj K 9=R -*S -*# -*^ CGr 2*3 2*i 2*h 59tZ^gi c  TW nrsxny . DHVZimvx AS APS Acf A  ~B  CH  ~I A, 8<B 3*C 3* 3*jJ Jv J JXK JL c 5 4

 

 &eBSW !PF	# 	s 	 	c 	TX 	`c 	 	r   r$   )) ccxt.async_support.base.exchanger   ccxt.abstract.coinmetror   r-  ccxt.base.typesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   typingr   ccxt.base.errorsr   r   r   r   r   r   r   r   r    ccxt.base.decimal_to_precisionr!   ccxt.base.preciser"   r$   r:  r   r   <module>r     sb    6 /  x  x  x  x  x  * - . ' & . ) * . 4 %B+ Br   