B
    \p               @   sz  d Z ddlmZ ddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZmZ ddlT dd	d
dddddddddddddddddddddgZdZd Zd!Zd"Zd#Zd$Zd%Zd&d'd(d)d*d+d,Zee ee ee e ee e ee e ee e eee e ee e ee e ee ee d-jZd.Zd!Zd/Zd Zd0Zd1Z dZ!dZ"ddddd
dd	d2d3Z#d4Z$d1d!d!ddddddddddddddddddddd0d1d0d"d!d d d.d5d"d d.d"d!d6d/d/d/d d!d6d!d6d d d1d1d1d1d1d1d1d1d.d1d1d1d1d1d1d1g@Z%d1d/d/ddddddddddddddddddddd0d1d0d7d/d d d.d5d5d d.d7d!d6d6d6d6d.d!d6d!d6d.d.d1d1d1d1d1d1d1d1d.d1d1d1d1d1d1d1g@Z&d1d/d/ddddddddddddddddddddd0d1d0d7d/d d d.d5d5d.d!d7d!d6d6d6d6d.d!d6d!d6d.d.d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1g@Z'd1d/d/ddddddddddddddddddddd0d1d0d1d1d d d.d5d5d.d!d8d!d6d6d6d6d.d!d6d!d6d.d.d1d1d1d1d1d1d1d1d1d9d:d;d:d;d1d1g@Z(d1d/d/ddddddddddddddddddddd0d0d0d1d1d d d.d5d5d.d!d/d/d5d6d6d6d.d/d5d/d5d.d.d1d1d1d1d1d1d1d1d1d6d6d7d6d7d1d1g@Z)e%e%e&e'e'e(e(e)d<Z*d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdmdmdmdmdmdmdmdndodpdqdrdsdmdmg@Z+dtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxZ,dydzd{d|d}d~dddd	Z-e.d6d"dd7dddgZ/e0e1e0e1e0e1fZ2e1e0e1e0e1e0fZ3dd Z4dݐddZ5dސddZ6dߐddZ7dddZ8dddZ9dddZ:G dd de;Z<G dd de=Z>G dd de?Z@d.ZAd!ZBd/ZCdZDd6ZEd"ZFeGd5d8\ZHZIZJZKZLZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVeeNe!eWiZXeeNe!eNiZYeeVe!eNiZZeAeXeej[ddfeBeXeej\ddfeCeXeej]ddfeDeXeej^ddfeEeXeeOddfeFeZe!ej[ddfeHeYeePddfeIeYeeQddfeJeYeeRddfeKeYeeSddfeLeYeeTddfeMeYeeUddfiZ_dd dddmfdd dddmfdd ddmdfdÜZ`dZadZbd/ZcdZddddZedddZfdddZgddȐdɄZhddʐd˄Zidd ZjdddZkddΐdτZldd Zmddѐd҄ZnddӐdԄZodd ZpdddZqdאd؄ Zrdِdڄ Zsdېd܄ ZtdS (  z9
Module for parsing/evaluating Microsoft Excel formulas.
    )print_functionN)unpack   )
BaseObject	XLRDErrorerror_text_from_codehex_char_dumpunpack_string_update_posunpack_unicode_update_pos)*oBOOLoERRoNUMoREFoRELoSTRGoUNKdecompile_formuladump_formulaevaluate_name_formula
okind_dictrangename3drangename3drelcellnamecellnameabscolnameFMLA_TYPE_CELLFMLA_TYPE_SHAREDFMLA_TYPE_ARRAYFMLA_TYPE_COND_FMTFMLA_TYPE_DATA_VALFMLA_TYPE_NAMEOperandRef3D                ?   CELLZSHAREDZARRAYzCOND-FMTzDATA-VALNAME)r   r$   r%   r&   r'   r(   )r   r$      r'      r(   #   9   :   ;   ,   -         oMSNG)r7   r6   r   r   r$   r4   r%   r5   ,	         r,            )   r?      (   r3   2   F   P   ZUnk00ZExpZTblZAddZSubZMulZDivZPowerZConcatZLTZLEZEQZGEZGTZNEZIsectZListZRangeZUplusZUminusZPercentZParenZMissArgZStrZExtendedZAttrZSheetZEndSheetZErrZBoolZIntZNumZArrayZFuncZFuncVarNameZRefZAreaZMemAreaZMemErrZMemNoMemZMemFuncZRefErrZAreaErrZRefNZAreaNZMemAreaNZ	MemNoMemN ZFuncCEZNameXZRef3dZArea3dZRefErr3dZ	AreaErr3d)ZCOUNTr   rA   r%   r   VR)ZIFr$   r4   r%   r4   rH   VRR)ZISNAr   r   r$   r   rH   rH   )ZISERRORr   r   r$   r   rH   rH   )ZSUMr   rA   r%   r   rH   rI   )ZAVERAGEr   rA   r%   r   rH   rI   )ZMINr   rA   r%   r   rH   rI   )MAXr   rA   r%   r   rH   rI   )ZROWr   r   r%   r   rH   rI   )ZCOLUMNr   r   r%   r   rH   rI   )ZNAr   r   r$   r   rH   rG   )ZNPVr$   rA   r%   r$   rH   VR)ZSTDEVr   rA   r%   r   rH   rI   )ZDOLLARr   r$   r%   r   rH   rH   )ZFIXEDr$   r4   r%   r4   rH   VVV)ZSINr   r   r$   r   rH   rH   )ZCOSr   r   r$   r   rH   rH   )ZTANr   r   r$   r   rH   rH   )ZATANr   r   r$   r   rH   rH   )ZPIr   r   r$   r   rH   rG   )ZSQRTr   r   r$   r   rH   rH   )ZEXPr   r   r$   r   rH   rH   )ZLNr   r   r$   r   rH   rH   )ZLOG10r   r   r$   r   rH   rH   )ZABSr   r   r$   r   rH   rH   )ZINTr   r   r$   r   rH   rH   )ZSIGNr   r   r$   r   rH   rH   )ZROUNDr$   r$   r$   r$   rH   VV)ZLOOKUPr$   r4   r%   r$   rH   rL   )ZINDEXr$   r%      r%   rI   ZRVVV)ZREPTr$   r$   r$   r$   rH   rN   )ZMIDr4   r4   r$   r4   rH   rM   )ZLENr   r   r$   r   rH   rH   )ZVALUEr   r   r$   r   rH   rH   )TRUEr   r   r$   r   rH   rG   )FALSEr   r   r$   r   rH   rG   )ZANDr   rA   r%   r   rH   rI   )ORr   rA   r%   r   rH   rI   )ZNOTr   r   r$   r   rH   rH   )ZMODr$   r$   r$   r$   rH   rN   )ZDCOUNTr4   r4   r$   r4   rH   RRR)ZDSUMr4   r4   r$   r4   rH   rS   )ZDAVERAGEr4   r4   r$   r4   rH   rS   )ZDMINr4   r4   r$   r4   rH   rS   )ZDMAXr4   r4   r$   r4   rH   rS   )ZDSTDEVr4   r4   r$   r4   rH   rS   )ZVARr   rA   r%   r   rH   rI   )ZDVARr4   r4   r$   r4   rH   rS   )ZTEXTr$   r$   r$   r$   rH   rN   )ZLINESTr   r%   r%   r%   ARRVV)ZTRENDr   r%   r%   r%   rT   RRRV)ZLOGESTr   r%   r%   r%   rT   rU   )ZGROWTHr   r%   r%   r%   rT   rV   )ZPVr4   r5   r%   r5   rH   VVVVV)ZFVr4   r5   r%   r5   rH   rW   )ZNPERr4   r5   r%   r5   rH   rW   )ZPMTr4   r5   r%   r5   rH   rW   )ZRATEr4      r%   rX   rH   VVVVVV)ZMIRRr4   r4   r$   r4   rH   ZRVV)ZIRRr   r$   r%   r$   rH   RV)ZRANDr   r   
   r   rH   rG   )ZMATCHr$   r4   r%   r4   rH   rJ   )ZDATEr4   r4   r$   r4   rH   rM   )ZTIMEr4   r4   r$   r4   rH   rM   )ZDAYr   r   r$   r   rH   rH   )ZMONTHr   r   r$   r   rH   rH   )ZYEARr   r   r$   r   rH   rH   )ZWEEKDAYr   r$   r%   r$   rH   rN   )ZHOURr   r   r$   r   rH   rH   )ZMINUTEr   r   r$   r   rH   rH   )ZSECONDr   r   r$   r   rH   rH   )ZNOWr   r   r[   r   rH   rG   )ZAREASr   r   r$   r   rH   rI   )ZROWSr   r   r$   r   rH   rI   )ZCOLUMNSr   r   r$   r   rH   rI   )ZOFFSETr4   r5   r%   r5   rI   ZRVVVV)ZSEARCHr$   r4   r%   r4   rH   rM   )Z	TRANSPOSEr   r   r$   r   rT   rT   )ZTYPEr   r   r$   r   rH   rH   )Z	SERIESSUMr%   r%   r$   r%   rH   ZVVVA)ZATAN2r$   r$   r$   r$   rH   rN   )ZASINr   r   r$   r   rH   rH   )ZACOSr   r   r$   r   rH   rH   )ZCHOOSEr$   rA   r%   r$   rH   rL   )ZHLOOKUPr4   r%   r%   r%   rH   VRRV)ZVLOOKUPr4   r%   r%   r%   rH   r\   )ZISREFr   r   r$   r   rH   rI   )ZLOGr   r$   r%   r$   rH   rN   )ZCHARr   r   r$   r   rH   rH   )ZLOWERr   r   r$   r   rH   rH   )ZUPPERr   r   r$   r   rH   rH   )ZPROPERr   r   r$   r   rH   rH   )ZLEFTr   r$   r%   r$   rH   rN   )ZRIGHTr   r$   r%   r$   rH   rN   )ZEXACTr$   r$   r$   r$   rH   rN   )ZTRIMr   r   r$   r   rH   rH   )ZREPLACEr%   r%   r$   r%   rH   VVVV)Z
SUBSTITUTEr4   r%   r%   r%   rH   r]   )ZCODEr   r   r$   r   rH   rH   )ZFINDr$   r4   r%   r4   rH   rM   )r*   r   r$   rO   r$   rH   rL   )ZISERRr   r   r$   r   rH   rH   )ZISTEXTr   r   r$   r   rH   rH   )ZISNUMBERr   r   r$   r   rH   rH   )ZISBLANKr   r   r$   r   rH   rH   )Tr   r   r$   r   rH   rI   )Nr   r   r$   r   rH   rI   )Z	DATEVALUEr   r   r$   r   rH   rH   )Z	TIMEVALUEr   r   r$   r   rH   rH   )ZSLNr4   r4   r$   r4   rH   rM   )ZSYDr%   r%   r$   r%   rH   r]   )ZDDBr%   r5   r%   r5   rH   rW   )ZINDIRECTr   r$   rO   r$   rI   rN   )ZCLEANr   r   r$   r   rH   rH   )ZMDETERMr   r   r$   r   rH   rT   )ZMINVERSEr   r   r$   r   rT   rT   )ZMMULTr$   r$   r$   r$   rT   AA)ZIPMTr%   rX   r%   rX   rH   rY   )ZPPMTr%   rX   r%   rX   rH   rY   )ZCOUNTAr   rA   r%   r   rH   rI   )ZPRODUCTr   rA   r%   r   rH   rI   )ZFACTr   r   r$   r   rH   rH   )ZDPRODUCTr4   r4   r$   r4   rH   rS   )Z	ISNONTEXTr   r   r$   r   rH   rH   )ZSTDEVPr   rA   r%   r   rH   rI   )ZVARPr   rA   r%   r   rH   rI   )ZDSTDEVPr4   r4   r$   r4   rH   rS   )ZDVARPr4   r4   r$   r4   rH   rS   )ZTRUNCr   r$   r%   r$   rH   rN   )Z	ISLOGICALr   r   r$   r   rH   rH   )ZDCOUNTAr4   r4   r$   r4   rH   rS   )ZUSDOLLARr   r$   r%   r$   rH   rN   )ZFINDBr$   r4   r%   r4   rH   rM   )ZSEARCHBr$   r4   r%   r4   rH   rM   )ZREPLACEBr%   r%   r$   r%   rH   r]   )ZLEFTBr   r$   r%   r$   rH   rN   )ZRIGHTBr   r$   r%   r$   rH   rN   )ZMIDBr4   r4   r$   r4   rH   rM   )ZLENBr   r   r$   r   rH   rH   )ZROUNDUPr$   r$   r$   r$   rH   rN   )Z	ROUNDDOWNr$   r$   r$   r$   rH   rN   )ZASCr   r   r$   r   rH   rH   )ZDBCSr   r   r$   r   rH   rH   )ZRANKr$   r4   r%   r4   rH   ZVRV)ZADDRESSr$   r5   r%   r5   rH   rW   )ZDAYS360r$   r4   r%   r4   rH   rM   )ZTODAYr   r   r[   r   rH   rG   )ZVDBr5   r;   r%   r;   rH   ZVVVVVVV)ZMEDIANr   rA   r%   r   rH   rI   )Z
SUMPRODUCTr   rA   r%   r   rH   rT   )ZSINHr   r   r$   r   rH   rH   )ZCOSHr   r   r$   r   rH   rH   )ZTANHr   r   r$   r   rH   rH   )ZASINHr   r   r$   r   rH   rH   )ZACOSHr   r   r$   r   rH   rH   )ZATANHr   r   r$   r   rH   rH   )ZDGETr4   r4   r$   r4   rH   rS   )INFOr   r   r$   r   rH   rH   )ZDBr%   r5   r%   r5   rH   rW   )Z	FREQUENCYr$   r$   r$   r$   rT   ZRR)z
ERROR.TYPEr   r   r$   r   rH   rH   )ZAVEDEVr   rA   r%   r   rH   rI   )ZBETADISTr4   r5   r%   r   rH   rH   )ZGAMMALNr   r   r$   r   rH   rH   )ZBETAINVr4   r5   r%   r   rH   rH   )Z	BINOMDISTr%   r%   r$   r%   rH   r]   )ZCHIDISTr$   r$   r$   r$   rH   rN   )ZCHIINVr$   r$   r$   r$   rH   rN   )ZCOMBINr$   r$   r$   r$   rH   rN   )Z
CONFIDENCEr4   r4   r$   r4   rH   rM   )Z	CRITBINOMr4   r4   r$   r4   rH   rM   )ZEVENr   r   r$   r   rH   rH   )Z	EXPONDISTr4   r4   r$   r4   rH   rM   )ZFDISTr4   r4   r$   r4   rH   rM   )ZFINVr4   r4   r$   r4   rH   rM   )ZFISHERr   r   r$   r   rH   rH   )Z	FISHERINVr   r   r$   r   rH   rH   )ZFLOORr$   r$   r$   r$   rH   rN   )Z	GAMMADISTr%   r%   r$   r%   rH   r]   )ZGAMMAINVr4   r4   r$   r4   rH   rM   )ZCEILINGr$   r$   r$   r$   rH   rN   )ZHYPGEOMDISTr%   r%   r$   r%   rH   r]   )ZLOGNORMDISTr4   r4   r$   r4   rH   rM   )ZLOGINVr4   r4   r$   r4   rH   rM   )ZNEGBINOMDISTr4   r4   r$   r4   rH   rM   )ZNORMDISTr%   r%   r$   r%   rH   r]   )Z	NORMSDISTr   r   r$   r   rH   rH   )ZNORMINVr4   r4   r$   r4   rH   rM   )ZNORMSINVr   r   r$   r   rH   rH   )ZSTANDARDIZEr4   r4   r$   r4   rH   rM   )ZODDr   r   r$   r   rH   rH   )ZPERMUTr$   r$   r$   r$   rH   rN   )ZPOISSONr4   r4   r$   r4   rH   rM   )ZTDISTr4   r4   r$   r4   rH   rM   )ZWEIBULLr%   r%   r$   r%   rH   r]   )ZSUMXMY2r$   r$   r$   r$   rH   r`   )ZSUMX2MY2r$   r$   r$   r$   rH   r`   )ZSUMX2PY2r$   r$   r$   r$   rH   r`   )ZCHITESTr$   r$   r$   r$   rH   r`   )ZCORRELr$   r$   r$   r$   rH   r`   )ZCOVARr$   r$   r$   r$   rH   r`   )ZFORECASTr4   r4   r$   r4   rH   ZVAA)ZFTESTr$   r$   r$   r$   rH   r`   )Z	INTERCEPTr$   r$   r$   r$   rH   r`   )ZPEARSONr$   r$   r$   r$   rH   r`   )ZRSQr$   r$   r$   r$   rH   r`   )ZSTEYXr$   r$   r$   r$   rH   r`   )ZSLOPEr$   r$   r$   r$   rH   r`   )ZTTESTr%   r%   r$   r%   rH   ZAAVV)ZPROBr4   r%   r%   r4   rH   ZAAV)ZDEVSQr   rA   r%   r   rH   rI   )ZGEOMEANr   rA   r%   r   rH   rI   )ZHARMEANr   rA   r%   r   rH   rI   )ZSUMSQr   rA   r%   r   rH   rI   )ZKURTr   rA   r%   r   rH   rI   )ZSKEWr   rA   r%   r   rH   rI   )ZZTESTr$   r4   r%   r$   rH   rZ   )ZLARGEr$   r$   r$   r$   rH   rZ   )ZSMALLr$   r$   r$   r$   rH   rZ   )ZQUARTILEr$   r$   r$   r$   rH   rZ   )Z
PERCENTILEr$   r$   r$   r$   rH   rZ   )ZPERCENTRANKr$   r4   r%   r$   rH   rZ   )ZMODEr   rA   r%   r   rH   rT   )ZTRIMMEANr$   r$   r$   r$   rH   rZ   )ZTINVr$   r$   r$   r$   rH   rN   )ZCONCATENATEr   rA   r%   r   rH   rH   )ZPOWERr$   r$   r$   r$   rH   rN   )ZRADIANSr   r   r$   r   rH   rH   )ZDEGREESr   r   r$   r   rH   rH   )ZSUBTOTALr$   rA   r%   r$   rH   rL   )ZSUMIFr$   r4   r%   r4   rH   ZRVR)ZCOUNTIFr$   r$   r$   r$   rH   rZ   )Z
COUNTBLANKr   r   r$   r   rH   rI   )ZISPMTr%   r%   r$   r%   rH   r]   )ZDATEDIFr4   r4   r$   r4   rH   rM   )Z
DATESTRINGr   r   r$   r   rH   rH   )ZNUMBERSTRINGr$   r$   r$   r$   rH   rN   )ZROMANr   r$   r%   r$   rH   rN   )ZGETPIVOTDATAr$   r$   r$   r$   rH   rZ   )Z	HYPERLINKr   r$   r%   r$   rH   rN   )ZPHONETICr   r   r$   r   rH   rH   )ZAVERAGEAr   rA   r%   r   rH   rI   )ZMAXAr   rA   r%   r   rH   rI   )ZMINAr   rA   r%   r   rH   rI   )ZSTDEVPAr   rA   r%   r   rH   rI   )ZVARPAr   rA   r%   r   rH   rI   )ZSTDEVAr   rA   r%   r   rH   rI   )ZVARAr   rA   r%   r   rH   rI   )ZBAHTTEXTr   r   r$   r   rH   rH   )ZTHAIDAYOFWEEKr   r   r$   r   rH   rH   )Z	THAIDIGITr   r   r$   r   rH   rH   )ZTHAIMONTHOFYEARr   r   r$   r   rH   rH   )ZTHAINUMSOUNDr   r   r$   r   rH   rH   )ZTHAINUMSTRINGr   r   r$   r   rH   rH   )ZTHAISTRINGLENGTHr   r   r$   r   rH   rH   )ZISTHAIDIGITr   r   r$   r   rH   rH   )ZROUNDBAHTDOWNr   r   r$   r   rH   rH   )ZROUNDBAHTUPr   r   r$   r   rH   rH   )ZTHAIYEARr   r   r$   r   rH   rH   )ZRTDr$   r5   r%   r   rH   rH   (  r   r   r$   r4   r%   r5   rX   r;   r&   r:   r[   r<   rO         r,   r'   r-   r>      r@   r?            r=               rA      r(   !   "   r.   $   %   &   '   rB   )   *   +   r2   r3   .   /   0   1   rC   3   4   8   r/   r0   r1   <   =   >   r)   @   A   B   C   D   E   rD   G   H   I   J   K   L   M   N   R   S   V   \   a   b   c   d   e   f   i   m   o   p   q   r   s   t   u   v   w   x   y   |   }   ~                                                                                                                                                                                 i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i   i!  i"  i#  i$  i%  i&  i'  i(  i)  i*  i+  i,  i-  i.  i/  i0  i1  i2  i3  i4  i5  i6  i7  i8  i9  i:  i;  i<  i=  i>  i?  i@  iA  iB  iC  iD  iE  iF  iG  iH  iI  iJ  iK  iL  iP  iQ  iV  iW  iX  iY  iZ  i[  i^  i_  i`  ia  ib  if  ig  ih  ii  ij  ik  il  im  in  io  ip  iq  ir  is  it  iu  iv  iw  ix  iy  iz  i{  zSkip??ZVolatileZIfZChooseZSkipZSumZAssignZSpaceZSpaceVolatile)	r   r   r$   r%   r&   r'   r(   r   r   r[   rj   rk   rw   c             C   s   t dd t| |j|jD S )Nc             s   s   | ]\}}}|||V  qd S )N ).0funcZnumaZnumbr   r   +lib/python3.7/site-packages/xlrd/formula.py	<genexpr>  s   zdo_box_funcs.<locals>.<genexpr>)tuplezipcoords)Z	box_funcsZboxaZboxbr   r   r   do_box_funcs  s    r   c       	      C   sv   |d? d@ }|d? d@ }| }|d@ }|rR|r<|dkr<|d8 }|rj|dkrj|d8 }n|r^||8 }|rj||8 }||||fS )	Nr,   r   rc      i   i   r      r   )	rowvalcolvalreldeltabrowxbcolxrow_relcol_relrowxcolxr   r   r   adjust_cell_addr_biff8  s    
r   c       	      C   sv   | d? d@ }| d? d@ }| d@ }|}|rR|r<|dkr<|d8 }|rj|dkrj|d8 }n|r^||8 }|rj||8 }||||fS )	Nr,   r   rc   i?  i    i @  r   r   r   )	r   r   r   r   r   r   r   r   r   r   r   r   adjust_cell_addr_biff_le7  s    
r   c             C   s`   |dkr2t d| ||d  \}}t|||||S t d| ||d  \}}t|||||S d S )NrE   z<HHr%   z<HBr4   )r   r   r   )dataposbvr   r   r   r   r   r   r   r   get_cell_addr  s    r   c             C   s   |dkrNt d| ||d  \}}}}	t|||||}
t||	|||}|
|fS t d| ||d  \}}}}	t|||||}
t||	|||}|
|fS d S )NrE   z<HHHHr&   z<HHBBrX   )r   r   r   )r   r   r   r   r   r   Zrow1valZrow2valZcol1valZcol2valres1res2r   r   r   get_cell_range_addr  s    r   c       
      C   s  y| j | }W n0 tk
r>   td|t| j f | jd dS X |\}}}|| jkr|rntd||f | jd |d  kr|ksn tdS || jkr|rtd||f | jd dS |d  kr|krn n|rtd	||f | jd d
S |d  kr|kr$n n|r td|f | jd dS t| j}d|  krR|  krR|k sn |rtd||f | jd td| | jd dS | j| }| j| }	d|  kr|	ksn dS ||	fS )Nz:!!! get_externsheet_local_range: refx=%d, not in range(%d))file)iiz5/// get_externsheet_local_range(refx=%d) -> addins %ri  )r   z7/// get_externsheet_local_range(refx=%d) -> external %r)r  z@/// get_externsheet_local_range(refx=%d) -> unspecified sheet %r)r6   r6   i  z</// get_externsheet_local_range(refx=%d) -> deleted sheet(s))r7   r7   r   z./// get_externsheet_local_range(refx=%d) -> %rz%--- first/last sheet not in range(%d))ii)r  )	Z_externsheet_info
IndexErrorprintlenlogfileZ_supbook_addins_inxAssertionErrorZ_supbook_locals_inx_all_sheets_map)
bkrefxblahinfoZref_recordxref_first_sheetxref_last_sheetxnsheetsxlrd_sheetx1xlrd_sheetx2r   r   r   get_externsheet_local_range  sF    



&

r  c             C   s   |dkr"|rt d| | jd dS |dkr6|dkr6dS t| j}d|  kr^|  kr^|k sn |rt d|||f | jd t d| | jd d	S | j| }| j| }d|  kr|ksn d
S ||fS )Nr   z?/// get_externsheet_local_range_b57(raw_extshtx=%d) -> external)r   )r  r  r6   )r7   r7   z6/// get_externsheet_local_range_b57(%d, %d, %d) -> ???z%--- first/last sheet not in range(%d))ii)r  r  )r  r  r  r  )r	  raw_extshtxr  r  r  r  r  r  r   r   r   get_externsheet_local_range_b57  s$    
 

r  c               @   s   e Zd ZdS )FormulaErrorN)__name__
__module____qualname__r   r   r   r   r    s   r  c               @   s.   e Zd ZdZdZeZdZd	ddZdd Z	dS )
r"   a  
    Used in evaluating formulas.
    The following table describes the kinds and how their values
    are represented.

    .. raw:: html

        <table border="1" cellpadding="7">
        <tr>
        <th>Kind symbol</th>
        <th>Kind number</th>
        <th>Value representation</th>
        </tr>
        <tr>
        <td>oBOOL</td>
        <td align="center">3</td>
        <td>integer: 0 => False; 1 => True</td>
        </tr>
        <tr>
        <td>oERR</td>
        <td align="center">4</td>
        <td>None, or an int error code (same as XL_CELL_ERROR in the Cell class).
        </td>
        </tr>
        <tr>
        <td>oMSNG</td>
        <td align="center">5</td>
        <td>Used by Excel as a placeholder for a missing (not supplied) function
        argument. Should *not* appear as a final formula result. Value is None.</td>
        </tr>
        <tr>
        <td>oNUM</td>
        <td align="center">2</td>
        <td>A float. Note that there is no way of distinguishing dates.</td>
        </tr>
        <tr>
        <td>oREF</td>
        <td align="center">-1</td>
        <td>The value is either None or a non-empty list of
        absolute Ref3D instances.<br>
        </td>
        </tr>
        <tr>
        <td>oREL</td>
        <td align="center">-2</td>
        <td>The value is None or a non-empty list of
        fully or partially relative Ref3D instances.
        </td>
        </tr>
        <tr>
        <td>oSTRG</td>
        <td align="center">1</td>
        <td>A Unicode string.</td>
        </tr>
        <tr>
        <td>oUNK</td>
        <td align="center">0</td>
        <td>The kind is unknown or ambiguous. The value is None</td>
        </tr>
        </table>
    N?r   c             C   s,   |d k	r|| _ |d k	r|| _|| _|| _d S )N)kindvalueranktext)selfZakindZavalueZarankZatextr   r   r   __init__b  s    zOperand.__init__c             C   s    t | jd}d|| j| jf S )Nz?Unknown kind?z#Operand(kind=%s, value=%r, text=%r))r   getr  r  r  )r  Z	kind_textr   r   r   __repr__l  s    zOperand.__repr__)NNr   r  )
r  r  r  __doc__r  r   r  r  r  r!  r   r   r   r   r"     s   =

c               @   s    e Zd ZdZdd Zdd ZdS )r#   a  
    Represents an absolute or relative 3-dimensional reference to a box
    of one or more cells.

    The ``coords`` attribute is a tuple of the form::

      (shtxlo, shtxhi, rowxlo, rowxhi, colxlo, colxhi)

    where ``0 <= thingxlo <= thingx < thingxhi``.

    .. note::
      It is quite possible to have ``thingx > nthings``; for example
      ``Print_Titles`` could have ``colxhi == 256`` and/or ``rowxhi == 65536``
      irrespective of how many columns/rows are actually used in the worksheet.
      The caller will need to decide how to handle this situation.
      Keyword: :class:`IndexError` :-)

    The components of the coords attribute are also available as individual
    attributes: ``shtxlo``, ``shtxhi``, ``rowxlo``, ``rowxhi``, ``colxlo``, and
    ``colxhi``.

    The ``relflags`` attribute is a 6-tuple of flags which indicate whether
    the corresponding (sheet|row|col)(lo|hi) is relative (1) or absolute (0).

    .. note::
      There is necessarily no information available as to what cell(s)
      the reference could possibly be relative to. The caller must decide what
      if any use to make of ``oREL`` operands.

    .. note:
      A partially relative reference may well be a typo.
      For example, define name ``A1Z10`` as ``$a$1:$z10`` (missing ``$`` after
      ``z``) while the cursor is on cell ``Sheet3!A27``.

      The resulting :class:`Ref3D` instance will have
      ``coords = (2, 3, 0, -16, 0, 26)``
      and ``relflags = (0, 0, 0, 1, 0, 0).<br>

      So far, only one possibility of a sheet-relative component in
      a reference has been noticed: a 2D reference located in the
      "current sheet".

      This will appear as ``coords = (0, 1, ...)`` and
      ``relflags = (1, 1, ...)``.

    .. versionadded:: 0.6.0
    c             C   sJ   |dd | _ |dd | _| js(d| _| j \| _| _| _| _| _| _d S )Nr   rX   rO   )r   r   r   r   r   r   )r   relflagsZshtxloZshtxhiZrowxloZrowxhiZcolxloZcolxhi)r  Zatupler   r   r   r    s
    zRef3D.__init__c             C   s0   | j r| j dkrd| jf S d| j| j f S d S )N)r   r   r   r   r   r   zRef3D(coords=%r)zRef3D(coords=%r, relflags=%r))r#  r   )r  r   r   r   r!    s    zRef3D.__repr__N)r  r  r  r"  r  r!  r   r   r   r   r#   r  s   /	rX   c             C   s   | S )Nr   )xr   r   r   nop  s    r%  c             C   s   | | S )Nr   )r$  yr   r   r   _opr_pow  s    r'  c             C   s   | |k S )Nr   )r$  r&  r   r   r   _opr_lt  s    r(  c             C   s   | |kS )Nr   )r$  r&  r   r   r   _opr_le  s    r)  c             C   s   | |kS )Nr   )r$  r&  r   r   r   _opr_eq  s    r*  c             C   s   | |kS )Nr   )r$  r&  r   r   r   _opr_ge  s    r+  c             C   s   | |kS )Nr   )r$  r&  r   r   r   _opr_gt  s    r,  c             C   s   | |kS )Nr   )r$  r&  r   r   r   _opr_ne  s    r-  c             C   s"   t | }|dr|dd }|S )zN
    Attempt to emulate Excel's default conversion from number to string.
    z.0Nr7   )strendswith)Znumsr   r   r   num2strg  s    
r1  rA   +-rB   r   /rC   ^r@   &<z<==z>=>z<>c             C   s   |  S )Nr   )r$  r   r   r   <lambda>  s    r:  rD   c             C   s   | S )Nr   )r$  r   r   r   r:    s    c             C   s   | d S )Ng      Y@r   )r$  r   r   r   r:    s    r}   %)rd   r>   r@   Z   c       W      C   s  |t krd}|j}|j}| j}d}|rXtd||j||||f | jd t|d|| jd |tkrht	dt
| }	d}
g }d}d}d}ttd }ttd }|j}dd }d	d
 }dd }|dkr|g}xd|
  kr|k rln nt||
 }|d@ }|d@ d? }|r|d }n|}t| }|	| }|r\td|
|||||f | jd td|| jd |dkr|d|||f }t||
sd|  krdkrn n||| 	nd|  krdkrn n||| n|dkr|rtd|| jd t|dkst| }| }d}d}ddd |j|k  |jdd |j|k  |dd |j|k  |jdd |j|k  g} tt}!| |!_|jtks|jtkrt|!_nT|jtks|jtkrn8|jt  kr|jkrFn nf|jd k	r|jd k	rt|jdkstt|jdks ttt|jd |jd }"t|"g|!_n|jt  krb|jkrn nt|!_|jd k	r|jd k	rt|jdkstt|jdksttt|jd |jd }"|jd j}#|jd j}$|#|$krt|"|# g|!_n ||! |
rtd|| jd n|d kr|r:td!|| jd t|dksLt| }| }d"}d}ddd |j|k  |jdd |j|k  |dd |j|k  |jdd |j|k  g} ttd || }!|jtks|jtkrt|!_n|jttfkrz|jttfkrzt|!_|jtks$|jtkr*t|!_|jd k	rz|jd k	rzt|jdksVtt|jdksjt|j|j |!_n ||! |
rtd#|| jd n|d$kr|rtd%|| jd t|dkst| }| }d&}d}ddd |j|k  |jdd |j|k  |dd |j|k  |jdd |j|k  g} ttd || }!|jtks`|jtkrht}!n8|jt  kr|jkrn nf|jd k	r|jd k	rt|jdkstt|jdksttt |jd |jd }"t|"g|!_n|jt  kr
|jkrn nt|!_|jd k	r|jd k	rt|jdks@tt|jdksTttt |jd |jd }"|jd j}#|jd j}$|#|$krt|"|# g|!_n ||! |
rtd'|| jd nd(|  krd)krn n||t!| n|d*krn|d+kr|tt"d t#d n|d,kr|d-krLt$||
d | j%dd.\}%}&nt&||
d dd.\}%}&|&|
 }|rtd/||%f | jd d0|%'d0d1 d0 }'|tt(|%t#|' n|d2kr|dksttd3n|d4k	rt)d5||
d |
d6  \}(})t*+|(d7}*|(d6k	r |)d d8 }n`|(d k	r|d6}|	rDtd9|| jd t|dk	sVt|d: }d;|j } tt!d t,| |d:< nd6}|
rtd<|(|*||)f | jd nd=|  k	rd>k	rn n|d?k 	sttd@ndA|  k	rdk
rn n|dA }+ddddBg|+ },tt-t!t!g|+ }-t)dCdD|+  ||
d |
d |,  \}.|+dk
r`t.|.}.t/|.}'n8|+dk
rtt/|.}'n$|+dk
rdE|. }'nd0t0|.  d0 }'|t|-|.t#|' ntdF| |dk
rtdG| |
|7 }
q|dk
r|| nb|dkr dt1|dHk },t)dCdI|,  ||
d |
d |,  d }/t2+|/d }0|0s`tdJ|/ | jd || n|0d d \}1}2|rtdK|/|1|2f | jd t||2kst|2rt3dLdM ||2 d  D }3dN|1|3f } ||2 d = n|1dO } ttd t,| }!||! nP|dkrdt1|dHk },t)dPdI|,  ||
d |
d |,  \}2}/t4|2dQ\}4}2t4|/dR\}5}/|rtdS|/|2|5|4f | jd t2+|/d }0|0stdT|/ | jd || qP|0d d \}1}6}7|rtdU|1|6|7f | jd |6|2  kr|7ksn tt||2kstt||2ks"tt3dVdM ||2 d  D }3dN|1|3f } ttd t,| }!|/dkrP||2  }8|8jt!t-fkr|rN|8jtkrNtdW| jd n|8jdXkr|rN|8jd k	rNtdY| jd n|2dkr|8jst-d |!_|!_nJ|2 d t1|8j }9||9 }:|:jt"kr(t!d |!_|!_n|:j|:j |!_|!_|rtdZ| jd n|/d[kr||2  }8|8jt!krd|8j  kr|2k rn nB||2 t1|8j  }:|:jt"krt!d |!_|!_n|:j|:j |!_|!_||2 d = ||! 	nh|dkr6t)d\||
d |
d  d d };|r,td]|; | jd | j5|; }<|<j6sRt7| |<|;||d  |<j8sj|<j9sj|<j:r|r|<j;| jd^d_d` ttd }!|p|<j8p|<j9p|<j:}|p|<j<}n$t|<j=dkstt>?|<j=d }!t#|!_|<j@d:kr|<j|!_nda| jA|<j@ |<jf |!_|r*tdbtB|!j| jd ||! n|d6krtC||
d ||}!|rhtdc|!| jd |!\}=}>}?}@d }A}Bd}|A|Bd |=|=d |>|>d f}"|rtdd|"| jd ttd }!|dkrdd|?|?|@|@f}Cttt|"|C g}!||! nZ|dkrtD||
d ||\}D}E|r.tdc|D|E| jd |D\}F}G}H}I|E\}J}K}L}Md }A}Bd}|A|Bd |F|Jd |G|Kd f}"|rtdd|"| jd ttd }!|dkrdd|H|L|I|Mf}Cttt|"|C g}!||! n|d8kr||| np|dekr$t)d\||
d |
d  d },|rPtdf|, | jd n,|dgkr<||| n|dhkrT||| n|d=kr|dkrtC||
d ||}!t)d\||
d |
d  d }NtE| |N|\}A}Bn`tC||
d ||}!t)di||
d |
d  \}O}P}Q|rtdj|O|P|Q| jd tF| |O|P|Q|\}A}B|!\}=}>}?}@|?p|@}R|p(|R}|A|Bd |=|=d |>|>d f}"||Ad:k O }|rhtdd|"| jd ttd }!|Rrdd|?|?|@|@f}Ct|"|C }St|!_tG| |Sddk|!_nt|"}St|!_tH| |S|!_t#|!_|dkr|Sg|!_||! nf|d>kr|dkrDtD||
d ||\}D}Et)d\||
d |
d  d }NtE| |N|\}A}BndtD||
d ||\}D}Et)di||
d |
d  \}O}P}Q|rtdl|O|P|Q| jd tF| |O|P|Q|\}A}B||Ad:k O }|D\}F}G}H}I|E\}J}K}L}M|Hp|Ip|Lp|M}R|p|R}|A|Bd |F|Jd |G|Kd f}"|rtdd|"| jd ttd }!|Rrbdd|H|L|I|Mf}Ct|"|C }St|!_tG| |Sddk|!_nt|"}St|!_tH| |S|!_t#|!_|dkr|Sg|!_||! n|d4krd}Tttd }!|dkrt)dm||
d |
d  \}N};|;d8 };|N}UnXt)dn||
d |
dh  \}N};|;d8 };|N}U|Ndkr,|Nd8 }Nn|Ndk rB|N d }Nnd}T|rftdo|U|N|;|Tf | jd |;|kr|rtdp| jd d }T}|Ts|dkrtE| |N|\}A}Bn:|Udkrdq\}A}Bn&| jI|N }V|Vd6krdr\}A}Bnds\}A}B|Ts|Ad:k rdt|;|Uf } ttd t#| }!n| j5|; }<|<j6s:t7| |<|;||d  |<j8sR|<j9sR|<j:r|rj|<j;| jdudvd` ttd }!|p|<j8p|<j9p|<j:}|p|<j<}n$t|<j=dkstt>?|<j=d }!t#|!_|<j@d:kr|<j|!_nda| jA|<j@ |<jf |!_|rtdwtB|!j| jd ||! n4|tJkr4d}|| n|rLtdx| | jd d}|dkrbtdy|
|7 }
qW |  }|rtK| jdz||  || t|dkrtd{| jd t| jd ||_=t|dkrd |_Ln
|d |_L||_<||_:||_Md|_6d S )|Nr   z1::: evaluate_name_formula %r %r %d %d %r level=%d)r   r   )foutz-Excessive indirect references in NAME formulac             S   s8  t |dkst| }| }t|  \}}}}}ddd |j|k  |jdd |j|k  |dd |j|k  |jdd |j|k  g}	t|d ||	}
y||j }||j }W n t	k
r   |
|
 d S X |jd ks|jd kr|
|
 d S ||j}||j}|||}|tkr$|r dnd}||
_|
|
 d S )Nr$   rG   ()r   r   )r  r  popbinop_rulesjoinr  r  r"   r  KeyErrorappendr  r   )opcdstkbopaopargdictresult_kindr   r  symotextresopZbconvZaconvZbvalZavalresultr   r   r   do_binop  s:    






z'evaluate_name_formula.<locals>.do_binopc       
   	   S   s   t |dkst| }|j}t|  \}}}}d|dd |j|k  |jdd |j|k  |g}	|d k	rp||}|t	||||	 d S )Nr   rG   r>  r?  )
r  r  r@  r  
unop_rulesrB  r  r  rD  r"   )
opcoderJ  rF  rH  valr   r  sym1sym2rL  r   r   r   
do_unaryop'  s    z)evaluate_name_formula.<locals>.do_unaryopc             S   s   d| |f }t |d S )Nz1ERROR *** Token 0x%02x (%s) found in NAME formula)r  )op_arg	oname_argmsgr   r   r   not_in_name_formula7  s    
z2evaluate_name_formula.<locals>.not_in_name_formularl   `   r5   r(   z9Pos:%d Op:0x%02x Name:t%s Sz:%d opcode:%02xh optype:%02xhzStack =r7   z9ERROR *** Unexpected token 0x%02x ("%s"); biff_version=%dr$   r4   rc   r,   z
tIsect pre rE   rG   r>  r?  ztIsect postr'   z	tList prer9   z
tList postr-   z
tRange pre:ztRange postr>   r@   r?   re   rf   rD   )lenlenz   sz=%d strg=%r"z""rg   ztExtended token not implementedr=   z<BHr%   z??Unknown??rX   tAttrSumr6   zSUM(%s)z)   subop=%02xh subname=t%s sz=%d nc=%02xhrh   ri   rC   z)tSheet & tEndsheet tokens not implementedrj   r&   r7  BBHd)rQ   rP   zUnhandled opcode: 0x%02xzSize not set for opcode 0x%02xrB   z BHz#*** formula/tFunc unknown FuncID:%dz    FuncID=%d name=%s nargs=%dc             s   s   | ]}|j V  qd S )N)r  )r   argr   r   r   r   $  s    z(evaluate_name_formula.<locals>.<genexpr>z%s(%s)z()z<Br   i   z(   FuncID=%d nargs=%d macro=%d prompt=%dz&*** formula/tFuncVar unknown FuncID:%dz!    name: %r, min~max args: %d~%dc             s   s   | ]}|j V  qd S )N)r  )r   ra  r   r   r   r   @  s    zIF testarg kind?)r   r   zIF testarg value?z$$$$$$ IF => constantr   z<Hz   tgtnamex=%dz!!! tgtobj has problems!!!z-----------       --------)headerZfooterz%s!%sz    tName: setting text toz  z   r:   z  %d bytes of cell ref formularO   rb   z<hxxxxxxxxhhtRef3d)r1c1tArea3dz<HHz<hxxxxxxxxHz+   origrefx=%d refx=%d tgtnamex=%d dodgy=%dz!!!! Self-referential !!!!)r  r  )r6   r6   )ififz$<<Name #%d in external(?) file #%d>>z!!! bad tgtobj !!!z------------------z    tNameX: setting text tozFORMULA: /// Not handled yet: tz!Fatal: token size is not positivez8End of formula. level=%d any_rel=%d any_err=%d stack=%r
z*** Stack has unprocessed args)NSTACK_ALARM_LEVELZraw_formulaZbasic_formula_lenbiff_versionr  namer  r   STACK_PANIC_LEVELr   szdictr"   r   r   rD  	BYTES_ORDonamesr  r  r  r@  rB  r  r  r   r  r  r   tIsectFuncsr#   r   r#  tRangeFuncsr   r8   	LEAF_RANKr	   encodingr
   replacer   r   
tAttrNamesr   	FUNC_RANKr   floatr.  r   int	func_defslistsepdivmodname_obj_listZ	evaluatedr   macroZbinaryany_errdumpany_relstackcopydeepcopyscope_sheet_namesreprr   r   r  r  r   r   _externsheet_type_b57error_opcodesZfprintfrN  any_external)Wr	  Znobjnamexr  levelr   fmlalenr   r   sztabr   r~  r}  r{  r  unk_opnd
error_opndspushrO  rU  rY  oprQ  optypeopxonameszrX  rG  rH  rK  r  rL  resr   ZrelfaZrelfbstrgnewposr  subopncsubnameinxnbr  r  funcx
func_attrs	func_namenargsargtextpromptrz  minargsmaxargsZtestargZresposZchosentgtnamextgtobjr   r   r   r   shx1shx2r#  r   r   rowx1colx1row_rel1col_rel1rowx2colx2row_rel2col_rel2r
  r  raw_shx1raw_shx2is_relref3ddodgyorigrefxextyr   r   r   r     s   

  


 
  
 
   
   
 



 



 

(








*

*




" 



  


  



 



 

 



 
 








 














c	       X         s6  |t krd}ttttfk}	|}
 j}|r\td||||	|
|f  jd t|
d| jd |t	krlt
dt| }d}g }d}d}ttd }ttd }|j}dd }d	d
 } fdd}|dkr|g}xd|  kr|k rn nt|
| }|d@ }|d@ d? }|r|d }n|}t| }|| }|rbtd||||||f  jd td| jd |dkrd|||f }t|t|d@ r||| |s|dkr&|dkrd}nd}|dkr||kr|rtt||
\}} d|| f }!|ttd t|! ttB @ s||| nd|  kr>dkrPn n||| n|dkr|rptd| jd t|dkst| }"| }#d}$d}%d d!d |#j|%k  |#jd"d |#j|%k  |$d!d |"j|%k  |"jd"d |"j|%k  g}&tt}'|&|'_|"jtks|#jtkrt|'_nd|"jtks|#jtkr6nJ|"jt  krR|#jkrXn nn(|"jt   krt|#jkrn nt |'_n ||' |rtd#| jd n8|d$kr|rtd%| jd t|dkst| }"| }#d&}$d}%d d!d |#j|%k  |#jd"d |#j|%k  |$d!d |"j|%k  |"jd"d |"j|%k  g}&ttd |%|&}'|"jtksf|#jtkrnt|'_nF|"jtt fkr|#jtt fkrt|'_|#jt ks|"jt krt |'_n ||' |rtd'| jd n|d(kr|rtd)| jd t|dkst| }"| }#d*}$d}%d d!d |#j|%k  |#jd"d |#j|%k  |$d!d |"j|%k  |"jd"d |"j|%k  g}&ttd |%|&}'|"jtks|#jtkrt}'n"|"jt  kr|#jkrn nn ||' |rtd+| jd nd,|  krd-krn n||t!| n|d.krn|d/kr>|tt"d td  n|d0kr|d1krnt#|
|d  j$dd2\}(})nt%|
|d dd2\}(})|)| }|rtd3||(f  jd d4|(&d4d5 d4 }!|tt'd t|! n|d6kr|dksttd7n|d8krtd9|
|d |d:  \}*}+t()|*d;},|*d:krB|+d d< }n`|*d$krd:}|rftd=| jd t|dksxt|d> }#d?|#j }&tt!d t*|&|d>< nd:}|rtd@|*|,||+f  jd ndA|  krdBkrn n|dCk sttdDndE|  krdkrn n|dE }-ddddFg|- }.tt+t!t!g|- }/tdGdH|-  |
|d |d |.  \}0|-dkrt,|0}0t-|0}!n8|-dkrt-|0}!n$|-dkrdI|0 }!nd4t.|0  d4 }!|t|/d t|! ntdJ| |dkrtdK| ||7 }q|dk	r|| n|dk
r"dt/|dLk }.tdGdM|.  |
|d |d |.  d }1t0)|1d }2|2	stdN|1  jd || n|2d d \}3}4|	rtdO|1|3|4f  jd t||4k	st|4
r t1dPdQ ||4 d  D }5dR|3|5f }&||4 d = n|3dS }&ttd t*|&}'||' 
n|dkrdt/|dLk }.tdTdM|.  |
|d |d |.  \}4}1t2|4dU\}6}4t2|1dV\}7}1|
rtdW|1|4|7|6f  jd |1dXk
rdY}2nt0)|1d }2|2
stdZ|1  jd || n|2d d \}3}8}9|rtd[|3|8|9f  jd |8|4  kr(|9ks.n tt||4ks@tt||4ksRtt1d\dQ ||4 d  D }5dR|3|5f }&ttd t*|&}'||4 d = ||' 	n |dkrNtd]|
|d |d  d d }:|rtd^|:  jd  j3|: };|;j4d>kr|;j5}&nd_ j6|;j4 |;j5f }&|r4td`t7|& jd ttd t|&}'||' nT|d:krt8|
|d ||	||}'|rtda|' jd |'\}} }<}=|<p|=}>|>rt }?nt}?t9|| |<|=|||}&t|?d t|&}'||' n|dkrt:|
|d ||	||\}@}A|rtda|@|A jd |@\}B}C}D}E|A\}F}G}H}I|B|Fd |C|Gd f}J|D|H|E|If}Kt;|Kr\t }?nt}?|rxtdb|J|K jd t<|J|K|||}&t|?d t|&}'||' n |d<krt=|| n|dckrtd]|
|d |d  d }.|rtdd|.  jd n|dekrt8|
|d ||	||}'d}|r8tdb|' jd |'\}} }<}=|<pL|=}>|>rZt }?nt}?t9|| |<|=|||}&t|?d t|&}'||' n|dfkrVt:|
|d ||	||\}@}A|rtda|@|A jd |@\}B}C}D}E|A\}F}G}H}I|B|Fd |C|Gd f}J|D|H|E|If}Kt;|Krt }?nt}?|r,tdb|J|K jd t<|J|K|||}&t|?d t|&}'||' nL|dAkr|dkrt8|
|d ||	||}'td]|
|d |d  d }Lt> |L|\}M}Nndt8|
|d ||	||}'tdg|
|d |d  \}O}P}Q|r tdh|O|P|Q jd t? |O|P|Q|\}M}N|'\}} }<}=|<p(|=}>|p2|>}|M|Nd ||d | | d f}J||Md>k O }|rrtdb|J jd ttd }'|>rdd|<|<|=|=f}Kt@|J|K }Rt |'_tA |R||||'_nt@|J}Rt|'_tB |R|'_t|'_d |'_C||' n|dBkr|dkrDt:|
|d ||	\}@}Atd]|
|d |d  d }Lt> |L|\}M}Nndt:|
|d ||	\}@}Atdg|
|d |d  \}O}P}Q|rtdi|O|P|Q jd t? |O|P|Q|\}M}N||Md>k O }|@\}B}C}D}E|A\}F}G}H}I|Dp|Ep|Hp|I}>|p|>}|M|Nd |B|Fd |C|Gd f}J|rtdb|J jd ttd }'|>rddd|D|H|E|If}Kt@|J|K }Rt |'_tA |R||||'_nt@|J}Rt|'_tB |R|'_t|'_||' n|d8krnd}Sttd }'|dkrtdj|
|d |d  \}L}:|:d8 }:|L}TnXtdk|
|d |df  \}L}:|:d8 }:|L}T|Ldkr|Ld8 }Ln|Ldk r2|L d }Lnd}S|rVtdl|T|L|:|Sf  jd |Ss|dkrxt> |L|\}M}Nn:|Tdkrdm\}M}Nn& jD|L }U|Ud:krdn\}M}Nndo\}M}Nt}?d }V|Mdpkrt'}? jE|: }Vd4|V&d4d5 d4 }&nn|Ss|Md>k rdq|:|Tf }&nP j3|: };|;j4d>kr$|;j5}&nd_ j6|;j4 |;j5f }&|rVtdrt7|'j jd t|?|Vt|&}'||' n4|tFkrd}|| n|rtds|  jd d}|dkrtdt||7 }qW |  }|rtdu||  ||f  jd t|dkrtdv jd t jd t|dkr(d }Wn
|d j}W|WS )wNr   zR::: decompile_formula len=%d fmlatype=%r browx=%r bcolx=%r reldelta=%d %r level=%d)r   r   )r=  z(Excessive indirect references in formulac             S   s   t |dkst| }| }t|  \}}}}}ddd |j|k  |jdd |j|k  |dd |j|k  |jdd |j|k  g}	t|d ||	}
||
 d S )Nr$   rG   r>  r?  )	r  r  r@  rA  rB  r  r  r"   rD  )rE  rF  rG  rH  rI  rJ  r   r  rK  rL  rM  r   r   r   rO  g  s    z#decompile_formula.<locals>.do_binopc       	   	   S   sr   t |dkst| }t|  \}}}}d|dd |j|k  |jdd |j|k  |g}|t|d || d S )Nr   rG   r>  r?  )	r  r  r@  rP  rB  r  r  rD  r"   )	rQ  rJ  rF  rH  r   r  rS  rT  rL  r   r   r   rU  x  s    z%decompile_formula.<locals>.do_unaryopc                s$   d| |t  f }t| jd d S )Nz?ERROR *** Unexpected token 0x%02x (%s) found in formula type %s)r   )FMLA_TYPEDESCR_MAPr  r  )rV  rW  rX  )r	  fmlatyper   r   unexpected_opcode  s    z,decompile_formula.<locals>.unexpected_opcoderl   rZ  r5   r(   z;Pos:%d Op:0x%02x opname:t%s Sz:%d opcode:%02xh optype:%02xhzStack =r7   z9ERROR *** Unexpected token 0x%02x ("%s"); biff_version=%drA   z<x2Hz<xHBzSHARED FMLA at rowx=%d colx=%dr4   rc   r,   z
tIsect prer$   r[  rE   rG   r>  r?  ztIsect postr'   z	tList prer9   z
tList postr-   z
tRange prer\  ztRange postr>   r@   r?   re   rf   rD   )r]  z   sz=%d strg=%rr^  z""rg   ztExtended token not implementedr=   z<BHr%   z??Unknown??rX   r_  r6   zSUM(%s)z)   subop=%02xh subname=t%s sz=%d nc=%02xhrh   ri   rC   z)tSheet & tEndsheet tokens not implementedrj   r&   r7  r`  )rQ   rP   zUnhandled opcode: 0x%02xzSize not set for opcode 0x%02xrB   z BHz#*** formula/tFunc unknown FuncID:%dz    FuncID=%d name=%s nargs=%dc             s   s   | ]}|j V  qd S )N)r  )r   ra  r   r   r   r   [  s    z$decompile_formula.<locals>.<genexpr>z%s(%s)z()z<Br   i   z(   FuncID=%d nargs=%d macro=%d prompt=%dr   )Z
CALL_ADDINr   rA   z&*** formula/tFuncVar unknown FuncID:%dz!    name: %r, min~max args: %d~%dc             s   s   | ]}|j V  qd S )N)r  )r   ra  r   r   r   r   {  s    z<Hz   tgtnamex=%dz%s!%sz    tName: setting text toz  z   r:   z  %d bytes of cell ref formularO   rb   z<hxxxxxxxxhhrc  re  z<HHz<hxxxxxxxxHz+   origrefx=%d refx=%d tgtnamex=%d dodgy=%d)r  r  )r6   r6   )ififr   z$<<Name #%d in external(?) file #%d>>z    tNameX: setting text tozFORMULA: /// Not handled yet: tz!Fatal: token size is not positivez7End of formula. level=%d any_rel=%d any_err=%d stack=%rz*** Stack has unprocessed args)Grf  r   r!   r   r    rg  r  r  r   ri  r   rj  r"   r   r   rD  rk  rl  r  _TOKEN_NOT_ALLOWEDr  r   ro  r   r   r  r@  rB  r  r  r   r  r   r   r8   r	   rp  r
   rq  r   rr  r   rs  r   rt  r.  r   ru  rv  rw  rx  ry  r  rh  r  r  r   cellnamerelr   sumrangename2drelrY  r  r  r#   r   r   r  r  Zaddin_func_namesr  )Xr	  Zfmlar  r  r   r   r  r  rd  r   r   r   r  r   r~  r}  r{  r  r  r  rO  rU  r  r  rQ  r  r  r  r  rX  Zfmtr   r   r  rG  rH  rK  r  rL  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rz  r  r  r  r  r   r   r  Zokindr   r   r  r  r  r  r  r  r  r  r   r#  r
  r  r  r  r  r  r  r  r  r  ZovaluerN  r   )r	  r  r   r   P  sx   

 





    
   
   



 



 

(








*

*


" 

 

 
 

 
 

 
 

 

 


 
 




















c       4      C   s  |r.t d||t|| jd t|d|| jd |dks:tt| }d}g }	d}
d}|	j}xJd|  krr|k rn n,t|| }|d@ }|d@ d? }|r|d	 }n|}t| }|| }|rt d
||||||f | jd |sd|  krdkr8n n<t	d||d |d  \}}|rt d||f| jd n|dkr|rXt d|	| jd t|	dksjt|	
 }|	
 }|||  |rt d|	| jd nH|dkr<|rt d|	| jd t|	dkst|	
 }|	
 }t|dkstt|dksttt|d |d }|| |rt d|	| jd n|dkr|r\t d|	| jd t|	dksnt|	
 }|	
 }t|dkstt|dksttt|d |d }|| |rt d|	| jd n|dkrJt	d||d |d  \}}t|d}|dkr$|d d }nd}|rt d||||f | jd n|dkr|dkrt||d  }||d |d |  }|d }nt||d dd \}}|| }|rt d!||f | jd n|dkrt d"| jd d S ||7 }q\|dkr n~|dkr\dt|d#k }t	d$d%|  ||d |d |  }|r~t d&| | jd n"|dkrdt|d#k }t	d'd%|  ||d |d |  \}}t|d(\} }t|d)\}!}|r~t d*|||!| f | jd n|d+kr t	d,||d |d+  }"|r~t d-|" | jd n^|dkrVt||d ||}#|r~t d|#| jd n(|dkrt||d ||}#|r~t d|#| jd n|d.krt	d,||d |d+  d }|r~t d/| | jd n|d0krt||d |dd1}#d}
|r~t d2|#| jd nr|d3krHt||d |dd1}#d}
|r~t d2|#| jd n6|d4krt	d,||d |d+  d }$t||d+ ||}#|rt d|$|#| jd |#\}}}%}&|
p|%p|&}
t| |$|\}'}(||'d5k O }|'|(d ||d ||d f})|rt d2|)| jd |dkr~||)g nb|d6krt	d,||d |d+  d }$t||d+ ||\}*}+|rtt d|$|*|+| jd |*\},}-}.}/|+\}0}1}2}3|
p|.p|/p|2p|3}
t| |$|\}'}(||'d5k O }|'|(d |,|0d |-|1d f})|rt d2|)| jd |dkr~||)g nr|dkrRt	d||d |d  \}$}"|r~t d7|$|"f | jd n,|tkrbd}n|rzt d8| | jd d}|dkrt d"| jd d S ||7 }q\W |rt d9|
  ||	f | jd t|	dkrt d:| jd d S );Nr   )r   r   )r=  rE   rl   rZ  r5   r(   z9Pos:%d Op:0x%02x Name:t%s Sz:%d opcode:%02xh optype:%02xhr   r$   z<HHz  r'   z	tList prez
tlist postr-   z
tRange preztRange postr,   z
tIsect preztIsect postr=   z<BHr%   z??Unknown??rX   z)   subop=%02xh subname=t%s sz=%d nc=%02xhrf   rD   )r]  z   sz=%d strg=%rz**** Dud size; exiting ****rB   r7  z BHz   FuncID=%dz<Br   i   z(   FuncID=%d nargs=%d macro=%d prompt=%dr4   z<Hz   namex=%dr:   z  %d bytes of cell ref formularO   )r   z   rb   rh   r6   ri   z   refx=%d namex=%dzFORMULA: /// Not handled yet: tz.End of formula. any_rel=%d any_err=%d stack=%rz*** Stack has unprocessed args)r  r  r  r   r  rj  rD  rk  rl  r   r@  r   rn  rm  rr  r   r
   ru  rx  r   r   r  r  )4r	  r   r  r   r   r  Zisnamer  r   r~  r}  r{  r  r  rQ  r  r  r  r  r   r   rG  rH  rN  r  r  r  r  r  r  r  r  r  rz  r  r  r
  r   r   r  r  r   r   r   r  r  r  r  r  r  r  r  r   r   r   r   ^  sR    
 
  
  
  

 


 


& 
* 
 
 
 
 
 
 
  
 
  
 
 
 
c             C   sT   |d krd}|s,|r d| d  S d| d  S |r@| r<d|  S dS d||  d d  S )	NTzR%dr   z$%dzR[%d]rI   z%di   r   )r   rowxrelr   rd  r   r   r   
rownamerel  s    r  c             C   sP   |d krd}|s,|r d| d  S dt |  S |r@| r<d|  S dS t ||  d S )NTzC%dr   $zC[%d]Cr   )r   )r   colxrelr   rd  r   r   r   
colnamerel  s    r  c             C   s   dt || d f S )z(Utility function: ``(5, 7)`` => ``'H6'``z%s%dr   )r   )r   r   r   r   r   r     s    c             C   s,   |rd| d |d f S dt || d f S )z*Utility function: ``(5, 7)`` => ``'$H$6'``zR%dC%dr   z$%s$%d)r   )r   r   rd  r   r   r   r   "  s    c       	      C   s`   |s|st | ||S |r |d ks,|r0|d kr0d}t||||}t| |||}|rX|| S || S )NT)r   r  r  )	r   r   r  r  r   r   rd  crr   r   r   r  (  s    r  c             C   s:   d}| dkr||  S t | d\}}||d  ||  S dS )z6Utility function: ``7`` => ``'H'``, ``27`` => ``'AB'``ZABCDEFGHIJKLMNOPQRSTUVWXYZr=   rh   r   N)rx  )r   ZalphabetZxdiv26Zxmod26r   r   r   r   4  s
    c             C   sP   |rdS || d kr,||d kr,t | ||S dt | ||t |d |d |f S )z( ``(5, 20, 7, 10)`` => ``'$H$6:$J$20'`` Nr   z%s:%s)r   )rlorhiclochird  r   r   r   rangename2d=  s
    r  c          
   C   st   | \}}}}|\}	}
}}|	s |
r,|d kr,d}|s4|r@|d kr@d}dt |||	||||t |d |d |
||||f S )NTz%s:%sr   )r  )Zrlo_rhi_clo_chiZrlorel_rhirel_clorel_chirelr   r   rd  r  r  r  r  ZrlorelZrhirelZclorelZchirelr   r   r   r  E  s    r  c             C   s0   |j }dt| f|dd  t|dd  f S )z
    Utility function:
    ``Ref3D(1, 4, 5, 20, 7, 10)`` =>
    ``'Sheet2:Sheet3!$H$6:$J$20'``
    (assuming Excel's default sheetnames)
    z%s!%sNr$   rX   )r   
sheetranger  )bookr  r   r   r   r   r   R  s    c       	      C   s\   |j }|j}t| |dd |dd }t|dd |dd |||}|sP|S d||f S )z
    Utility function:
    ``Ref3D(coords=(0, 1, -32, -22, -13, 13), relflags=(0, 0, 1, 1, 1, 1))``

    In R1C1 mode => ``'Sheet1!R[-32]C[-13]:R[-23]C[12]'``

    In A1 mode => depends on base cell ``(browx, bcolx)``
    Nr$   rX   z%s!%s)r   r#  sheetrangerelr  )	r  r  r   r   rd  r   r#  shdescZrngdescr   r   r   r   ^  s    	 c             C   s`   |dkr| | }nddddd |d| }d|krHd|dd	 d S d
|kr\d| d S |S )Nr   z?internal; any sheet?zinternal; deleted sheetzinternal; macro sheetz<<external>>)r6   r7   r  r  z
?error %d?'z''r[  )r   rq  )shnamesZshxZshnamer   r   r   quotedsheetnameo  s    
r  c             C   s8   |   }t||}||d kr4|dt||d  7 }|S )Nr   r\  )Zsheet_namesr  )r  sloshir  r  r   r   r   r    s
    
r  c             C   sP   |\}}|\}}|s$|s$t | ||S |d  kr<|d krHn n|rH|sLtdS )Nr   r   rG   )r  r  )r  ZsrangeZ	srangerelr  r  ZslorelZshirelr   r   r   r    s    (r  )NN)NN)NN)NN)r   )r   )r   r   )NNNr   r   r   )r   r   )Nr   )Nr   )r   )NNr   )r   )NNr   )NNr   )ur"  Z
__future__r   r  operatorZoprZstructr   Zbiffhr   r   r   r   r	   r
   Ztimemachine__all__r   r   r   r   r    r!   ZALL_FMLA_TYPESr  r   r  r   r   r8   r   r   r   r   r   r   rw  Zsztab0Zsztab1Zsztab2Zsztab3Zsztab4rj  rl  rv  rr  setr  minmaxrn  rm  r   r   r   r   r   r  r  	Exceptionr  objectr"   r   r#   ZtAddZtSubZtMulZtDivZtPowerZtConcatrangeZtLTZtLEZtEQZtGEZtGTZtNEr%  r'  r(  r)  r*  r+  r,  r-  r1  rt  Z_arith_argdictZ_cmp_argdictZ_strg_argdictaddsubmultruedivrA  rP  ro  rs  rf  ri  r   r   r   r  r  r   r   r  r   r  r  r   r   r  r  r  r   r   r   r   <module>	   sJ   







&\A	    e      %

	
