o
    bp                    @   s  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 g d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dZdZ dZ!dZ"dddddd d!d"d#Z#d$Z$g d%Z%g d&Z&g d'Z'g d(Z(g d)Z)e%e%e&e'e'e(e(e)d*Z*g d+Z+i dd,dd-d	d.dd/d
d0dd1d2d3d4d5dd6d7d8d9d:d;d<d=d>d?d@dAdBdCdDddEi dFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcddddedfi dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddÓddœddǓddɓdd˓i dd͓ddϓddѓddӓddՓddדddٓddۓddݓddߓddddddddddddddi ddddddddddddddddddd ddddddddd	d
dddddi 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i 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i 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i dvdwdxdydz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i 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i 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ۓi 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i 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%Z,d&d'd(d)d*d+d,d-d.d/	Z-e.g d0Z/e0e1e0e1e0e1fZ2e1e0e1e0e1e0fZ3d1d2 Z4dd3d4Z5	dd5d6Z6dd7d8Z7dd9d:Z8dd;d<Z9	dd=d>Z:G d?d@ d@e;Z<G dAdB dBe=Z>G dCdD dDe?Z@dZAd
ZBdZCd2ZDd4ZEdZFeGd7dC\ZHZIZJZKZLZMdEdF ZNdGdH ZOdIdJ ZPdKdL ZQdMdN ZRdOdP ZSdQdR ZTdSdT ZUdUdV ZVeeNe!eWiZXeeNe!eNiZYeeVe!eNiZZeAeXeej[d`dWfeBeXeej\d`dXfeCeXeej]dsdYfeDeXeej^dsdZfeEeXeeOdd[feFeZe!ej[dLd\feHeYeePd9d]feIeYeeQd9d^feJeYeeRd9d_feKeYeeSd9d`feLeYeeTd9dafeMeYeeUd9dbfiZ_dcdd ddXdefdfdd ddWdefdgdd ddedhfdiZ`djZadjZbdZcd9ZdddkdlZe		ddmdnZfddodpZgddqdrZhddsdtZidudv ZjddwdxZkddydzZld{d| Zmdd}d~ZndddZodd Zpddd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SHAREDARRAYzCOND-FMTzDATA-VALNAME)r   r$   r%   r&   r'   r(   )r   r$      r'      r(   #   9   :   ;   ,   -         r   r   r   r   r   r   r   oMSNG)r8   r7   r   r   r$   r5   r%   r6   ,)@r8   r%   r%   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r8   r7   r&   r%   r$   r$   r5   	   r&   r$   r5   r&   r%      r6   r6   r6   r$   r%   r<   r%   r<   r$   r$   r8   r8   r8   r8   r8   r8   r8   r8   r5   r8   r8   r8   r8   r8   r8   r8   )@r8   r6   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r8   r7      r6   r$   r$   r5   r;   r;   r$   r5   r=   r%   r<   r<   r<   r<   r5   r%   r<   r%   r<   r5   r5   r8   r8   r8   r8   r8   r8   r8   r8   r5   r8   r8   r8   r8   r8   r8   r8   )@r8   r6   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r8   r7   r=   r6   r$   r$   r5   r;   r;   r5   r%   r=   r%   r<   r<   r<   r<   r5   r%   r<   r%   r<   r5   r5   r8   r8   r8   r8   r8   r8   r8   r8   r8   r8   r8   r8   r8   r8   r8   r8   )@r8   r6   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r8   r7   r8   r8   r$   r$   r5   r;   r;   r5   r%   r-   r%   r<   r<   r<   r<   r5   r%   r<   r%   r<   r5   r5   r8   r8   r8   r8   r8   r8   r8   r8   r8            r?   r@   r8   r8   )@r8   r6   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r8   r$   r$   r5   r;   r;   r5   r%   r6   r6   r;   r<   r<   r<   r5   r6   r;   r6   r;   r5   r5   r8   r8   r8   r8   r8   r8   r8   r8   r8   r<   r<   r=   r<   r=   r8   r8   )   r@      (   r4   2   F   P   )@ZUnk00ZExpZTblAddSubZMulDivZPowerZConcatLTZLEZEQZGEGTZNEZIsectListRangeZUplusZUminusZPercentZParenZMissArgStrZExtendedZAttrZSheetZEndSheetZErrZBoolZIntNumArrayZFuncZFuncVarNameZRefZAreaZMemAreaZMemErrZMemNoMemZMemFuncZRefErrZAreaErrZRefNZAreaNZMemAreaNZ	MemNoMemN rR   rR   rR   rR   rR   rR   rR   ZFuncCEZNameXZRef3dZArea3dZRefErr3dZ	AreaErr3drR   rR   )ZCOUNTr   rB   r%   r   VR)ZIFr$   r5   r%   r5   rS   VRR)ZISNAr   r   r$   r   rS   rS   )ZISERRORr   r   r$   r   rS   rS   )ZSUMr   rB   r%   r   rS   rT   )ZAVERAGEr   rB   r%   r   rS   rT      )ZMINr   rB   r%   r   rS   rT   r<   )MAXr   rB   r%   r   rS   rT   )ZROWr   r   r%   r   rS   rT   r;   )ZCOLUMNr   r   r%   r   rS   rT   
   )ZNAr   r   r$   r   rS   rR   r=   )ZNPVr$   rB   r%   r$   rS   VR   )ZSTDEVr   rB   r%   r   rS   rT      )ZDOLLARr   r$   r%   r   rS   rS      )ZFIXEDr$   r5   r%   r5   rS   VVVr-   )ZSINr   r   r$   r   rS   rS   )ZCOSr   r   r$   r   rS   rS   r.   )ZTANr   r   r$   r   rS   rS   r?   )ZATANr   r   r$   r   rS   rS      )PIr   r   r$   r   rS   rR   rA   )ZSQRTr   r   r$   r   rS   rS   r@   )ZEXPr   r   r$   r   rS   rS      )LNr   r   r$   r   rS   rS      )ZLOG10r   r   r$   r   rS   rS      )ZABSr   r   r$   r   rS   rS   r>   )INTr   r   r$   r   rS   rS      )ZSIGNr   r   r$   r   rS   rS      )ZROUNDr$   r$   r$   r$   rS   VV   )ZLOOKUPr$   r5   r%   r$   rS   rY      )ZINDEXr$   r%   rZ   r%   rT   ZRVVVrB   )ZREPTr$   r$   r$   r$   rS   rg      )ZMIDr5   r5   r$   r5   rS   r]   )ZLENr   r   r$   r   rS   rS   !   )ZVALUEr   r   r$   r   rS   rS   "   )TRUEr   r   r$   r   rS   rR   r/   )FALSEr   r   r$   r   rS   rR   $   )ANDr   rB   r%   r   rS   rT   %   )ORr   rB   r%   r   rS   rT   &   )NOTr   r   r$   r   rS   rS   '   )ZMODr$   r$   r$   r$   rS   rg   rC   )ZDCOUNTr5   r5   r$   r5   rS   RRR)   )ZDSUMr5   r5   r$   r5   rS   rv   *   )ZDAVERAGEr5   r5   r$   r5   rS   rv   +   )ZDMINr5   r5   r$   r5   rS   rv   r3   )ZDMAXr5   r5   r$   r5   rS   rv   r4   )ZDSTDEVr5   r5   r$   r5   rS   rv   .   )ZVARr   rB   r%   r   rS   rT   /   )ZDVARr5   r5   r$   r5   rS   rv   0   )ZTEXTr$   r$   r$   r$   rS   rg   1   )ZLINESTr   r%   r%   r%   ARRVVrD   )ZTRENDr   r%   r%   r%   r~   RRRV3   )ZLOGESTr   r%   r%   r%   r~   r   4   )ZGROWTHr   r%   r%   r%   r~   r   8   )ZPVr5   r6   r%   r6   rS   VVVVVr0   )ZFVr5   r6   r%   r6   rS   r   r1   )ZNPERr5   r6   r%   r6   rS   r   r2   )ZPMTr5   r6   r%   r6   rS   r   <   )ZRATEr5   rV   r%   rV   rS   VVVVVV=   )ZMIRRr5   r5   r$   r5   rS   ZRVV>   )ZIRRr   r$   r%   r$   rS   RV)ZRANDr   r   rX   r   rS   rR   @   )MATCHr$   r5   r%   r5   rS   rU   A   )ZDATEr5   r5   r$   r5   rS   r]   B   )ZTIMEr5   r5   r$   r5   rS   r]   C   )ZDAYr   r   r$   r   rS   rS   D   )ZMONTHr   r   r$   r   rS   rS   E   )ZYEARr   r   r$   r   rS   rS   rE   )ZWEEKDAYr   r$   r%   r$   rS   rg   G   )ZHOURr   r   r$   r   rS   rS   H   )ZMINUTEr   r   r$   r   rS   rS   I   )ZSECONDr   r   r$   r   rS   rS   J   )ZNOWr   r   rX   r   rS   rR   K   )ZAREASr   r   r$   r   rS   rT   L   )ZROWSr   r   r$   r   rS   rT   M   )COLUMNSr   r   r$   r   rS   rT   N   )ZOFFSETr5   r6   r%   r6   rT   ZRVVVVR   )ZSEARCHr$   r5   r%   r5   rS   r]   S   )Z	TRANSPOSEr   r   r$   r   r~   r~   V   )ZTYPEr   r   r$   r   rS   rS   \   )Z	SERIESSUMr%   r%   r$   r%   rS   ZVVVAa   )ZATAN2r$   r$   r$   r$   rS   rg   b   )ZASINr   r   r$   r   rS   rS   c   )ZACOSr   r   r$   r   rS   rS   d   )ZCHOOSEr$   rB   r%   r$   rS   rY   e   )ZHLOOKUPr5   r%   r%   r%   rS   VRRVf   )ZVLOOKUPr5   r%   r%   r%   rS   r   i   )ZISREFr   r   r$   r   rS   rT   m   )ZLOGr   r$   r%   r$   rS   rg   o   )ZCHARr   r   r$   r   rS   rS   p   )ZLOWERr   r   r$   r   rS   rS   q   )ZUPPERr   r   r$   r   rS   rS   r   )ZPROPERr   r   r$   r   rS   rS   s   )LEFTr   r$   r%   r$   rS   rg   t   )RIGHTr   r$   r%   r$   rS   rg   u   )ZEXACTr$   r$   r$   r$   rS   rg   v   )ZTRIMr   r   r$   r   rS   rS   w   )ZREPLACEr%   r%   r$   r%   rS   VVVVx   )Z
SUBSTITUTEr5   r%   r%   r%   rS   r   y   )ZCODEr   r   r$   r   rS   rS   |   )ZFINDr$   r5   r%   r5   rS   r]   }   )r*   r   r$   rZ   r$   rS   rY   ~   )ZISERRr   r   r$   r   rS   rS      )ZISTEXTr   r   r$   r   rS   rS      )ZISNUMBERr   r   r$   r   rS   rS      )ZISBLANKr   r   r$   r   rS   rS      )Tr   r   r$   r   rS   rT      )Nr   r   r$   r   rS   rT      )Z	DATEVALUEr   r   r$   r   rS   rS      )Z	TIMEVALUEr   r   r$   r   rS   rS      )ZSLNr5   r5   r$   r5   rS   r]      )ZSYDr%   r%   r$   r%   rS   r      )ZDDBr%   r6   r%   r6   rS   r      )ZINDIRECTr   r$   rZ   r$   rT   rg      )ZCLEANr   r   r$   r   rS   rS      )ZMDETERMr   r   r$   r   rS   r~      )ZMINVERSEr   r   r$   r   r~   r~      )ZMMULTr$   r$   r$   r$   r~   AA   )ZIPMTr%   rV   r%   rV   rS   r      )ZPPMTr%   rV   r%   rV   rS   r      )ZCOUNTAr   rB   r%   r   rS   rT      )ZPRODUCTr   rB   r%   r   rS   rT      )ZFACTr   r   r$   r   rS   rS      )ZDPRODUCTr5   r5   r$   r5   rS   rv      )Z	ISNONTEXTr   r   r$   r   rS   rS      )ZSTDEVPr   rB   r%   r   rS   rT      )ZVARPr   rB   r%   r   rS   rT      )ZDSTDEVPr5   r5   r$   r5   rS   rv      )ZDVARPr5   r5   r$   r5   rS   rv      )ZTRUNCr   r$   r%   r$   rS   rg      )Z	ISLOGICALr   r   r$   r   rS   rS      )ZDCOUNTAr5   r5   r$   r5   rS   rv      )ZUSDOLLARr   r$   r%   r$   rS   rg      )ZFINDBr$   r5   r%   r5   rS   r]      )ZSEARCHBr$   r5   r%   r5   rS   r]      )ZREPLACEBr%   r%   r$   r%   rS   r      )ZLEFTBr   r$   r%   r$   rS   rg      )ZRIGHTBr   r$   r%   r$   rS   rg      )ZMIDBr5   r5   r$   r5   rS   r]      )ZLENBr   r   r$   r   rS   rS      )ZROUNDUPr$   r$   r$   r$   rS   rg      )Z	ROUNDDOWNr$   r$   r$   r$   rS   rg      )ASCr   r   r$   r   rS   rS      )ZDBCSr   r   r$   r   rS   rS      )ZRANKr$   r5   r%   r5   rS   ZVRV   )ZADDRESSr$   r6   r%   r6   rS   r      )ZDAYS360r$   r5   r%   r5   rS   r]      )ZTODAYr   r   rX   r   rS   rR      )ZVDBr6   r<   r%   r<   rS   ZVVVVVVV   )ZMEDIANr   rB   r%   r   rS   rT      )Z
SUMPRODUCTr   rB   r%   r   rS   r~      )ZSINHr   r   r$   r   rS   rS      )ZCOSHr   r   r$   r   rS   rS      )ZTANHr   r   r$   r   rS   rS      )ZASINHr   r   r$   r   rS   rS      )ZACOSHr   r   r$   r   rS   rS      )ZATANHr   r   r$   r   rS   rS      )ZDGETr5   r5   r$   r5   rS   rv      )INFOr   r   r$   r   rS   rS      )ZDBr%   r6   r%   r6   rS   r      )Z	FREQUENCYr$   r$   r$   r$   r~   ZRRi  )z
ERROR.TYPEr   r   r$   r   rS   rS   i  )ZAVEDEVr   rB   r%   r   rS   rT   i  )ZBETADISTr5   r6   r%   r   rS   rS   i  )ZGAMMALNr   r   r$   r   rS   rS   i  )ZBETAINVr5   r6   r%   r   rS   rS   i  )Z	BINOMDISTr%   r%   r$   r%   rS   r   i  )ZCHIDISTr$   r$   r$   r$   rS   rg   i  )ZCHIINVr$   r$   r$   r$   rS   rg   i  )ZCOMBINr$   r$   r$   r$   rS   rg   i  )Z
CONFIDENCEr5   r5   r$   r5   rS   r]   i  )Z	CRITBINOMr5   r5   r$   r5   rS   r]   i  )ZEVENr   r   r$   r   rS   rS   i  )Z	EXPONDISTr5   r5   r$   r5   rS   r]   i  )ZFDISTr5   r5   r$   r5   rS   r]   i  )ZFINVr5   r5   r$   r5   rS   r]   i  )ZFISHERr   r   r$   r   rS   rS   i  )Z	FISHERINVr   r   r$   r   rS   rS   i  )ZFLOORr$   r$   r$   r$   rS   rg   i  )Z	GAMMADISTr%   r%   r$   r%   rS   r   i  )ZGAMMAINVr5   r5   r$   r5   rS   r]   i   )ZCEILINGr$   r$   r$   r$   rS   rg   i!  )ZHYPGEOMDISTr%   r%   r$   r%   rS   r   i"  )ZLOGNORMDISTr5   r5   r$   r5   rS   r]   i#  )ZLOGINVr5   r5   r$   r5   rS   r]   i$  )ZNEGBINOMDISTr5   r5   r$   r5   rS   r]   i%  )ZNORMDISTr%   r%   r$   r%   rS   r   i&  )Z	NORMSDISTr   r   r$   r   rS   rS   i'  )ZNORMINVr5   r5   r$   r5   rS   r]   i(  )ZNORMSINVr   r   r$   r   rS   rS   i)  )ZSTANDARDIZEr5   r5   r$   r5   rS   r]   i*  )ZODDr   r   r$   r   rS   rS   i+  )ZPERMUTr$   r$   r$   r$   rS   rg   i,  )ZPOISSONr5   r5   r$   r5   rS   r]   i-  )ZTDISTr5   r5   r$   r5   rS   r]   i.  )ZWEIBULLr%   r%   r$   r%   rS   r   i/  )ZSUMXMY2r$   r$   r$   r$   rS   r   i0  )ZSUMX2MY2r$   r$   r$   r$   rS   r   i1  )ZSUMX2PY2r$   r$   r$   r$   rS   r   i2  )ZCHITESTr$   r$   r$   r$   rS   r   i3  )ZCORRELr$   r$   r$   r$   rS   r   i4  )ZCOVARr$   r$   r$   r$   rS   r   i5  )ZFORECASTr5   r5   r$   r5   rS   ZVAAi6  )ZFTESTr$   r$   r$   r$   rS   r   i7  )Z	INTERCEPTr$   r$   r$   r$   rS   r   i8  )ZPEARSONr$   r$   r$   r$   rS   r   i9  )ZRSQr$   r$   r$   r$   rS   r   i:  )ZSTEYXr$   r$   r$   r$   rS   r   i;  )ZSLOPEr$   r$   r$   r$   rS   r   i<  )ZTTESTr%   r%   r$   r%   rS   ZAAVVi=  )ZPROBr5   r%   r%   r5   rS   ZAAVi>  )ZDEVSQr   rB   r%   r   rS   rT   i?  )ZGEOMEANr   rB   r%   r   rS   rT   i@  )ZHARMEANr   rB   r%   r   rS   rT   iA  )ZSUMSQr   rB   r%   r   rS   rT   iB  )ZKURTr   rB   r%   r   rS   rT   iC  )ZSKEWr   rB   r%   r   rS   rT   iD  )ZZTESTr$   r5   r%   r$   rS   r   iE  )ZLARGEr$   r$   r$   r$   rS   r   iF  )ZSMALLr$   r$   r$   r$   rS   r   iG  )ZQUARTILEr$   r$   r$   r$   rS   r   iH  )Z
PERCENTILEr$   r$   r$   r$   rS   r   iI  )ZPERCENTRANKr$   r5   r%   r$   rS   r   iJ  )ZMODEr   rB   r%   r   rS   r~   iK  )ZTRIMMEANr$   r$   r$   r$   rS   r   iL  )ZTINVr$   r$   r$   r$   rS   rg   iP  )ZCONCATENATEr   rB   r%   r   rS   rS   iQ  )POWERr$   r$   r$   r$   rS   rg   iV  )ZRADIANSr   r   r$   r   rS   rS   iW  )ZDEGREESr   r   r$   r   rS   rS   iX  )ZSUBTOTALr$   rB   r%   r$   rS   rY   iY  )ZSUMIFr$   r5   r%   r5   rS   ZRVRiZ  )ZCOUNTIFr$   r$   r$   r$   rS   r   i[  )Z
COUNTBLANKr   r   r$   r   rS   rT   i^  )ZISPMTr%   r%   r$   r%   rS   r   i_  )ZDATEDIFr5   r5   r$   r5   rS   r]   i`  )Z
DATESTRINGr   r   r$   r   rS   rS   ia  )ZNUMBERSTRINGr$   r$   r$   r$   rS   rg   ib  )ZROMANr   r$   r%   r$   rS   rg   if  )ZGETPIVOTDATAr$   r$   r$   r$   rS   r   ig  )Z	HYPERLINKr   r$   r%   r$   rS   rg   ih  )ZPHONETICr   r   r$   r   rS   rS   ii  )ZAVERAGEAr   rB   r%   r   rS   rT   ij  )ZMAXAr   rB   r%   r   rS   rT   ik  )ZMINAr   rB   r%   r   rS   rT   il  )ZSTDEVPAr   rB   r%   r   rS   rT   im  )ZVARPAr   rB   r%   r   rS   rT   in  )ZSTDEVAr   rB   r%   r   rS   rT   io  )ZVARAr   rB   r%   r   rS   rT   ip  )ZBAHTTEXTr   r   r$   r   rS   rS   iq  )ZTHAIDAYOFWEEKr   r   r$   r   rS   rS   ir  )Z	THAIDIGITr   r   r$   r   rS   rS   is  )ZTHAIMONTHOFYEARr   r   r$   r   rS   rS   it  )ZTHAINUMSOUNDr   r   r$   r   rS   rS   iu  )ZTHAINUMSTRINGr   r   r$   r   rS   rS   iv  )ZTHAISTRINGLENGTHr   r   r$   r   rS   rS   )ZISTHAIDIGITr   r   r$   r   rS   rS   )ZROUNDBAHTDOWNr   r   r$   r   rS   rS   )ZROUNDBAHTUPr   r   r$   r   rS   rS   )ZTHAIYEARr   r   r$   r   rS   rS   )ZRTDr$   r6   r%   r   rS   rS   )iw  ix  iy  iz  i{  zSkip??ZVolatileIfZChooseZSkipZSumAssignZSpaceZSpaceVolatile)	r   r   r$   r%   r&   r'   r(   r   r   )r<   r&   rX   r=   rh   ri   r{   c                 C   s   t dd t| |j|jD S )Nc                 s   s     | ]\}}}|||V  qd S N ).0funcZnumaZnumbr   r   K/var/www/secure340b-portal/env/lib/python3.10/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@ }|r)|r|dkr|d8 }|r(|dkr(|d8 }n|r/||8 }|r5||8 }||||fS )	Nr-   r   r\            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@ }|}|r)|r|dkr|d8 }|r(|dkr(|d8 }n|r/||8 }|r5||8 }||||fS )	Nr-   r   r\   i?  i    i @  r   r  r   r  r   r   r   adjust_cell_addr_biff_le7  s   r  c                 C   s\   |dkrt d| ||d  \}}t|||||S t d| ||d  \}}t|||||S )NrF   <HHr%   z<HBr5   r   r  r  )dataposbvr  r  r  r	  r
  r   r   r   get_cell_addr  s   
r  c                 C   s   |dkr't d| ||d  \}}}}	t|||||}
t||	|||}|
|fS t d| ||d  \}}}}	t|||||}
t||	|||}|
|fS )NrF   z<HHHHr&   z<HHBBrV   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  z| j | }W n ty   td|t| j f | jd Y dS w |\}}}|| jkrG|r7td||f | jd |d  krB|ksEJ  J dS || jkr[|rYtd||f | jd dS |d  kre|krvn n|rttd	||f | jd d
S |d  kr|krn n|rtd|f | jd d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sdS  dS ||	fS )Nz:!!! get_externsheet_local_range: refx=%d, not in range(%d)file)r  z5/// 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r7   r7   i  z</// get_externsheet_local_range(refx=%d) -> deleted sheet(s)r8   r8   r   z./// get_externsheet_local_range(refx=%d) -> %r%--- first/last sheet not in range(%d))r&  r(  )Z_externsheet_info
IndexErrorprintlenlogfileZ_supbook_addins_inxZ_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  sR   



 

r7  c                 C   s   |dkr|rt d| | jd dS |dkr|dkrdS t| j}d|  kr/|  kr/|k sIn |rGt d|||f | jd t d| | jd d	S | j| }| j| }d|  kr^|ksad
S  d
S ||fS )Nr   z?/// get_externsheet_local_range_b57(raw_extshtx=%d) -> externalr  r!  r7   r$  z6/// get_externsheet_local_range_b57(%d, %d, %d) -> ???r%  )r8  r'  )r*  r,  r+  r-  )r.  raw_extshtxr2  r3  r0  r4  r5  r6  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 ur|| _ |d ur|| _|| _|| _d S r   )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@  rA  rC  )rD  Z	kind_textr   r   r   __repr__l  s   zOperand.__repr__)NNr   r?  )
r<  r=  r>  __doc__rA  r   r@  rC  rE  rG  r   r   r   r   r"     s    @

r"   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   rV   rZ   r   r   r   r   r   r   )r  relflagsZshtxloZshtxhiZrowxloZrowxhiZcolxloZcolxhi)rD  Zatupler   r   r   rE    s   
zRef3D.__init__c                 C   s,   | j r| j dkrd| jf S d| j| j f S )NrI  zRef3D(coords=%r)zRef3D(coords=%r, relflags=%r))rJ  r  )rD  r   r   r   rG    s
   
zRef3D.__repr__N)r<  r=  r>  rH  rE  rG  r   r   r   r   r#   r  s    0	r#   c                 C      | S r   r   xr   r   r   nop  s   rN  c                 C   s   | | S r   r   rM  yr   r   r   _opr_pow      rQ  c                 C   s   | |k S r   r   rO  r   r   r   _opr_lt  rR  rS  c                 C   s   | |kS r   r   rO  r   r   r   _opr_le  rR  rT  c                 C   s   | |kS r   r   rO  r   r   r   _opr_eq  rR  rU  c                 C   s   | |kS r   r   rO  r   r   r   _opr_ge  rR  rV  c                 C   s   | |kS r   r   rO  r   r   r   _opr_gt  rR  rW  c                 C   s   | |kS r   r   rO  r   r   r   _opr_ne  rR  rX  c                 C   s"   t | }|dr|dd }|S )zN
    Attempt to emulate Excel's default conversion from number to string.
    z.0Nr8   )strendswith)numsr   r   r   num2strg  s   
r]  +-r   /^&<z<==z>=>z<>c                 C   s   |  S r   r   rL  r   r   r   <lambda>  s    rf  rR   c                 C   rK  r   r   rL  r   r   r   rf    s    c                 C   s   | d S )Ng      Y@r   rL  r   r   r   rf    rR  %)r^   r?   rA   Z   c           W      C   s  |t krd}|j}|j}| j}d}|r,td||j||||f | jd t|d|| jd |tkr4t	dt
| }	d}
g }d}d}d}ttd }ttd }|j}dd }d	d
 }dd }|dkrb|g}d|
  krm|k r1n nt||
 }|d@ }|d@ d? }|r|d }n|}t| }|	| }|rtd|
|||||f | jd td|| jd |dkrd|||f }t||sZd|  krdkrn n||| n{d|  krdkrn n||| nh|dkr|rtd|| jd t|dksJ | }| }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sB|jtkrFt|!_n|jtksR|jtkrSn|jt  kra|jkrn n3|jd ur|jd urt|jdksyJ t|jdksJ tt|jd |jd }"t|"g|!_nZ|jt  kr|jkrn nIt|!_|jd ur|jd urt|jdksJ t|jdksJ tt|jd |jd }"|jd j}#|jd j}$|#|$krt|"|# g|!_n	 ||! |rtd|| jd nI|d kr|rtd!|| jd t|dksJ | }| }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sc|jtkrgt|!_nK|jttfv r|jttfv rt|!_|jtks|jtkrt|!_|jd ur|jd urt|jdksJ t|jdksJ |j|j |!_n	 ||! |rtd#|| jd n|d$kr|rtd%|| jd t|dksJ | }| }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r(t}!n|jt  kr6|jkrkn n3|jd urj|jd urjt|jdksNJ t|jdksXJ tt|jd |jd }"t|"g|!_nZ|jt  kry|jkrn nIt|!_|jd ur|jd urt|jdksJ t|jdksJ tt|jd |jd }"|jd j}#|jd j}$|#|$krt|"|# g|!_n	 ||! |rtd'|| jd ntd(|  krd)krn n||t | n^|d*krnW|d+kr|tt!d t"d nG|d,krL|d-krt#||
d | j$dd.\}%}&nt%||
d dd.\}%}&|&|
 }|r8td/||%f | jd d0|%&d0d1 d0 }'|tt'|%t"|' n|d2kr\|dksXJ td3|d4krt(d5||
d |
d6  \}(})t)*|(d7}*|(d6kr|)d d8 }n0|(d krd6}|rtd9|| jd t|dksJ |d: }d;|j } tt d t+| |d:< nd6}|rtd<|(|*||)f | jd nd=|  krd>krn n|d?k sJ td@dA|  krdkrDn nZ|dA }+g dB|+ },tt,t t g|+ }-t(dCdD|+  ||
d |
d |,  \}.|+dkrt-|.}.t.|.}'n|+dkr(t.|.}'n|+dkr2dE|. }'nd0t/|.  d0 }'|t|-|.t"|' ntdF| |dkrUtdG| |
|7 }
qb|dkre|| n|dkrdt0|dHk },t(dCdI|,  ||
d |
d |,  d }/t1*|/d }0|0stdJ|/ | jd || ny|0d d \}1}2|rtdK|/|1|2f | jd t||2ksJ |2rt2dLdM ||2 d  D }3dN|1|3f } ||2 d = n|1dO } ttd t+| }!||! n)|dkrddt0|dHk },t(dPdI|,  ||
d |
d |,  \}2}/t3|2dQ\}4}2t3|/dR\}5}/|r/tdS|/|2|5|4f | jd t1*|/d }0|0sGtdT|/ | jd || n|0d d \}1}6}7|r_tdU|1|6|7f | jd |6|2  krl|7ksoJ  J t||2ksxJ t||2ksJ t2dVdM ||2 d  D }3dN|1|3f } ttd t+| }!|/dkr||2  }8|8jt t,fvr|r|8jtkrtdW| jd n|8jdXvr|r|8jd urtdY| jd n|2dkr|8jst,d|!_|!_n%|2 d t0|8j }9||9 }:|:jt!krt d|!_|!_n	|:j|:j|!_|!_|rtdZ| jd n@|/d[krX||2  }8|8jt krXd|8j  kr5|2k rXn n!||2 t0|8j  }:|:jt!krOt d|!_|!_n	|:j|:j|!_|!_||2 d = ||! n|dkrt(d\||
d |
d  d d };|rtd]|; | jd | j4|; }<|<j5st6| |<|;||d  |<j7s|<j8s|<j9r|r|<j:| jd^d_d` ttd }!|p|<j7p|<j8p|<j9}|p|<j;}nt|<j<dksJ t=>|<j<d }!t"|!_|<j?d:kr|<j|!_nda| j@|<j? |<jf |!_|rtdbtA|!j| jd ||! n|d6krktB||
d ||}!|r$tdc|!| jd |!\}=}>}?}@d }A}Bd}|A|Bd |=|=d |>|>d f}"|rItdd|"| jd ttd }!|dkredd|?|?|@|@f}Cttt|"|C g}!||! n|dkrtC||
d ||\}D}E|rt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}!||! nD|d8kr||| n8|dek	rt(d\||
d |
d  d },|	r tdf|, | jd n|dgk	r||| n
|dhk	r||| n|d=k	r|dk	rEtB||
d ||}!t(d\||
d |
d  d }NtD| |N|\}A}Bn0tB||
d ||}!t(di||
d |
d  \}O}P}Q|	rktdj|O|P|Q| jd tE| |O|P|Q|\}A}B|!\}=}>}?}@|?	p|@}R|	p|R}|A|Bd |=|=d |>|>d f}"||Ad:k O }|	rtdd|"| jd ttd }!|R	rdd|?|?|@|@f}Ct|"|C }St|!_tF| |Sddk|!_nt|"}St|!_tG| |S|!_t"|!_|dk	r|Sg|!_||! n3|d>k
r|dk
rtC||
d ||\}D}Et(d\||
d |
d  d }NtD| |N|\}A}Bn2tC||
d ||\}D}Et(di||
d |
d  \}O}P}Q|
r:tdl|O|P|Q| jd tE| |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|
pe|R}|A|Bd |F|Jd |G|Kd f}"|
rtdd|"| jd ttd }!|R
rdd|H|L|I|Mf}Ct|"|C }St|!_tF| |Sddk|!_nt|"}St|!_tG| |S|!_t"|!_|dk
r|Sg|!_||! nX|d4krd}Tttd }!|dk
rt(dm||
d |
d  \}N};|;d8 };|N}Un,t(dn||
d |
dh  \}N};|;d8 };|N}U|Ndkr|Nd8 }Nn|Ndk r|N d }Nnd}T|r#tdo|U|N|;|Tf | jd |;|kr6|r2tdp| jd d }T}|Tsd|dkrGtD| |N|\}A}Bn|UdkrQdq\}A}Bn| jH|N }V|Vd6kr`dr\}A}Bnds\}A}B|Tsl|Ad:k rzdt|;|Uf } ttd t"| }!n| j4|; }<|<j5st6| |<|;||d  |<j7s|<j8s|<j9r|r|<j:| jdudvd` ttd }!|p|<j7p|<j8p|<j9}|p|<j;}nt|<j<dksJ t=>|<j<d }!t"|!_|<j?d:kr|<j|!_nda| j@|<j? |<jf |!_|rtdwtA|!j| jd ||! n|tIv r
d}|| n|rtdx| | jd d}|dkr!tdy|
|7 }
d|
  kr0|k spn |  }|rXtJ| jdz||  || t|dkrRtd{| jd t| jd ||_<t|dkrfd |_Kn|d |_K||_;||_9||_Ld|_5d S )|Nr   z1::: evaluate_name_formula %r %r %d %d %r level=%dr  r   Zfoutz-Excessive indirect references in NAME formulac                 S   s4  t |dksJ | }| }t|  \}}}}}ddd |j|k  |jdd |j|k  |dd |j|k  |jdd |j|k  g}	t|d ||	}
z||j }||j }W n tye   |	|
 Y d S w |j
d u sp|j
d u rw|	|
 d S ||j
}||j
}|||}|tkr|rdnd}||
_
|	|
 d S )Nr$   rR   ()r   r   )r+  popbinop_rulesjoinrB  rC  r"   r@  KeyErrorappendrA  r   )opcdstkbopaopargdictresult_kindr   rB  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J | }|j}t|  \}}}}d|dd |j|k  |jdd |j|k  |g}	|d ur8||}|t||||	 d S Nr   rR   rj  rk  )	r+  rl  rA  
unop_rulesrn  rB  rC  rp  r"   )
opcoderv  rr  rt  valr   rB  sym1sym2rx  r   r   r   
do_unaryop'  s   z)evaluate_name_formula.<locals>.do_unaryopc                 S   s   d| |f }t |)Nz1ERROR *** Token 0x%02x (%s) found in NAME formula)r;  Zop_argZ	oname_argmsgr   r   r   not_in_name_formula7  s   z2evaluate_name_formula.<locals>.not_in_name_formularj   `   r6   r(   9Pos:%d Op:0x%02x Name:t%s Sz:%d opcode:%02xh optype:%02xhStack =r8   9ERROR *** Unexpected token 0x%02x ("%s"); biff_version=%dr$   r5   r\   r-   
tIsect pre rF   rR   rj  rk  tIsect postr'   	tList prer:   
tList postr.   
tRange pre:tRange postr?   rA   r@   r`   rb   rE   Zlenlen   sz=%d strg=%r"""rc   tExtended token not implementedr>   <BHr%   ??Unknown??rV   tAttrSumr7   SUM(%s))   subop=%02xh subname=t%s sz=%d nc=%02xhre   rf   rD   )tSheet & tEndsheet tokens not implementedrh   r   r   r$   r&   rc  BBHdrn   rm   Unhandled opcode: 0x%02xSize not set for opcode 0x%02xrC    BH#*** formula/tFunc unknown FuncID:%d    FuncID=%d name=%s nargs=%dc                 s       | ]}|j V  qd S r   rC  r   argr   r   r   r   $      z(evaluate_name_formula.<locals>.<genexpr>%s(%s)()<Br   r  (   FuncID=%d nargs=%d macro=%d prompt=%d&*** formula/tFuncVar unknown FuncID:%d!    name: %r, min~max args: %d~%dc                 s   r  r   r  r  r   r   r   r   @  r  zIF testarg kind?)r   r   zIF testarg value?z$$$$$$ IF => constantr   <H   tgtnamex=%dz!!! tgtobj has problems!!!z-----------       --------)headerfooter%s!%s    tName: setting text to     r;     %d bytes of cell ref formularZ   r[   <hxxxxxxxxhhtRef3d)r1c1tArea3dr  <hxxxxxxxxH+   origrefx=%d refx=%d tgtnamex=%d dodgy=%dz!!!! Self-referential !!!!r!  r#  fr  $<<Name #%d in external(?) file #%d>>z!!! bad tgtobj !!!z------------------    tNameX: setting text toFORMULA: /// Not handled yet: t!Fatal: token size is not positivez8End of formula. level=%d any_rel=%d any_err=%d stack=%r
*** Stack has unprocessed args)MSTACK_ALARM_LEVELZraw_formulaZbasic_formula_lenbiff_versionr*  namer,  r   STACK_PANIC_LEVELr   szdictr"   r   r   rp  	BYTES_ORDonamesr;  r+  rl  rn  rB  rC  r   r@  rA  r  tIsectFuncsr#   r   rJ  tRangeFuncsr   r9   	LEAF_RANKr	   encodingr
   replacer   r   
tAttrNamesrF  	FUNC_RANKr   floatrY  r   int	func_defslistsepdivmodname_obj_listZ	evaluatedr   macrobinaryany_errdumpany_relstackcopydeepcopyscope_sheet_namesreprr  r  r7  r:  r   r   _externsheet_type_b57error_opcodesZfprintfrz  any_external)Wr.  Znobjnamexr0  levelr  fmlalenr  r  sztabr  r  r  r  r  unk_opnd
error_opndspushr{  r  r  opr~  optypeopxonameszr  rs  rt  rw  rB  rx  resr  ZrelfaZrelfbstrgnewposrC  subopncsubnameinxnbr@  rA  funcx
func_attrs	func_namenargsargtextpromptr  minargsmaxargsZtestargZresposZchosentgtnamextgtobjr  r  r  r  shx1shx2rJ  r  r  rowx1colx1row_rel1col_rel1rowx2colx2row_rel2col_rel2r/  r9  raw_shx1raw_shx2is_relref3ddodgyorigrefxextyr   r   r   r     sX  

 

	  

	 
	  












(








*
*
 




"














 






 
























        

r   c	           X         s6  |t krd}ttttfv }	|}
 j}|r.td||||	|
|f  jd t|
d| jd |t	kr6t
dt| }d}g }d}d}ttd }ttd }|j}dd }d	d
 } fdd}|dkre|g}d|  krp|k 
r_n 	nt|
| }|d@ }|d@ d? }|r|d }n|}t| }|| }|rtd||||||f  jd td| jd |dkrd|||f }t|t|d@ r||| |so|dkr	|dkrd}nd}|dkr||kr|rJ t||
\}} d|| f }!|ttd t|! ttB @ s||| nVd|  krdkrn n||| nA|dkr|r.td| jd t|dks7J | }"| }#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|'_n3|"jtks|#jtkrn&|"jt  kr|#jkrn nn|"jt  kr|#jkrn nt|'_n	 ||' |rtd#| jd n|d$krc|rtd%| jd t|dksJ | }"| }#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r.t|'_n$|"jttfv rQ|#jttfv rQt|'_|#jtksM|"jtkrPt|'_n	 ||' |ratd'| jd n|d(kr|rstd)| jd t|dks|J | }"| }#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 ntd,|  krd-krn n||t | n^|d.krnW|d/kr|tt!d td  nG|d0kra|d1kr0t"|
|d  j#dd2\}(})nt$|
|d dd2\}(})|)| }|rMtd3||(f  jd d4|(%d4d5 d4 }!|tt&d t|! n|d6krq|dksmJ td7|d8krtd9|
|d |d:  \}*}+t'(|*d;},|*d:kr|+d d< }n0|*d$krd:}|rtd=| jd t|dksJ |d> }#d?|#j }&tt d t)|&|d>< nd:}|rtd@|*|,||+f  jd ndA|  krdBkrn n|dCk sJ tdDdE|  krdkrYn nZ|dE }-g dF|- }.tt*t t g|- }/tdGdH|-  |
|d |d |.  \}0|-dkr3t+|0}0t,|0}!n|-dkr=t,|0}!n|-dkrGdI|0 }!nd4t-|0  d4 }!|t|/d t|! ntdJ| |dkrjtdK| ||7 }qe|dkrz|| n|dkrdt.|dLk }.tdGdM|.  |
|d |d |.  d }1t/(|1d }2|2stdN|1  jd || n|2d d \}3}4|rtdO|1|3|4f  jd t||4ksJ |4rt0dPdQ ||4 d  D }5dR|3|5f }&||4 d = n|3dS }&ttd t)|&}'||' nB|dkrdt.|dLk }.tdTdM|.  |
|d |d |.  \}4}1t1|4dU\}6}4t1|1dV\}7}1|rDtdW|1|4|7|6f  jd |1dXkrLdY}2nt/(|1d }2|2sdtdZ|1  jd || n|2d d \}3}8}9|r|td[|3|8|9f  jd |8|4  kr|9ksJ  J t||4ksJ t||4ksJ t0d\dQ ||4 d  D }5dR|3|5f }&ttd t)|&}'||4 d = ||' n|dkrtd]|
|d |d  d d }:|rtd^|:  jd  j2|: };|;j3d>kr|;j4}&nd_ j5|;j3 |;j4f }&|rtd`t6|& jd ttd t|&}'||' n*|d:krat7|
|d ||	||}'|r7tda|' jd |'\}} }<}=|<pA|=}>|>rHt}?nt}?t8|| |<|=|||}&t|?d t|&}'||' n|dkrt9|
|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rt}?nt}?|rtdb|J|K jd t;|J|K|||}&t|?d t|&}'||' n|d<krt<|| nt|dckrtd]|
|d |d  d }.|rtdd|.  jd nR|dekr;t7|
|d ||	||}'d}|rtdb|' jd |'\}} }<}=|<p|=}>|>r"t}?nt}?t8|| |<|=|||}&t|?d t|&}'||' n|dfkrt9|
|d ||	||\}@}A|rYt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}?|rtdb|J|K jd t;|J|K|||}&t|?d t|&}'||' n|dAkrj|dkrt7|
|d ||	||}'td]|
|d |d  d }Lt= |L|\}M}Nn2t7|
|d ||	||}'tdg|
|d |d  \}O}P}Q|rtdh|O|P|Q jd t> |O|P|Q|\}M}N|'\}} }<}=|<p	|=}>|p|>}|M|Nd ||d | | d f}J||Md>k O }|r.tdb|J jd ttd }'|>rQdd|<|<|=|=f}Kt?|J|K }Rt|'_t@ |R||||'_nt?|J}Rt|'_tA |R|'_t|'_d |'_B||' n|dBk	r=|dkrt9|
|d ||	\}@}Atd]|
|d |d  d }Lt= |L|\}M}Nn2t9|
|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 }'|>	r'dd|D|H|E|If}Kt?|J|K }Rt|'_t@ |R||||'_nt?|J}Rt|'_tA |R|'_t|'_||' n	|d8k
r,d}Sttd }'|dk	rdtdj|
|d |d  \}L}:|:d8 }:|L}Tn,tdk|
|d |df  \}L}:|:d8 }:|L}T|Ldk	r|Ld8 }Ln|Ldk 	r|L d }Lnd}S|	rtdl|T|L|:|Sf  jd |S	s|dk	rt= |L|\}M}Nn|Tdk	rdm\}M}Nn jC|L }U|Ud:k	rdn\}M}Nndo\}M}Nt}?d }V|Mdpk	rt&}? jD|: }Vd4|V%d4d5 d4 }&n7|S	s|Md>k 	rdq|:|Tf }&n( j2|: };|;j3d>k
r|;j4}&nd_ j5|;j3 |;j4f }&|
r tdrt6|'j jd t|?|Vt|&}'||' n|tEv 
r8d}|| n|
rDtds|  jd d}|dk
rOtdt||7 }d|  k
r^|k ssn |  }|
rtdu||  ||f  jd t|dk
rtdv jd t jd t|dk
rd }W|WS |d j}W|WS )wNr   zR::: decompile_formula len=%d fmlatype=%r browx=%r bcolx=%r reldelta=%d %r level=%dr  r   ri  z(Excessive indirect references in formulac                 S   s   t |dksJ | }| }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$   rR   rj  rk  )r+  rl  rm  rn  rB  rC  r"   rp  )rq  rr  rs  rt  ru  rv  r   rB  rw  rx  ry  r   r   r   r{  g  s   	z#decompile_formula.<locals>.do_binopc           	   	   S   sr   t |dksJ | }t|  \}}}}d|dd |j|k  |jdd |j|k  |g}|t|d || d S r|  )r+  rl  r}  rn  rB  rC  rp  r"   )	r~  rv  rr  rt  r   rB  r  r  rx  r   r   r   r  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 %sr  )FMLA_TYPEDESCR_MAPr*  r,  r  r.  fmlatyper   r   unexpected_opcode  s   z,decompile_formula.<locals>.unexpected_opcoderj   r  r6   r(   z;Pos:%d Op:0x%02x opname:t%s Sz:%d opcode:%02xh optype:%02xhr  r8   r  rB   z<x2Hz<xHBzSHARED FMLA at rowx=%d colx=%dr5   r\   r-   r  r$   r  rF   rR   rj  rk  r  r'   r  r:   r  r.   r  r  r  r?   rA   r@   r`   rb   rE   r  r  r  r  rc   r  r>   r  r%   r  rV   r  r7   r  r  re   rf   rD   r  rh   r  rc  r  r  r  r  rC   r  r  r  c                 s   r  r   r  r  r   r   r   r   [  r  z$decompile_formula.<locals>.<genexpr>r  r  r  r   r  r  r  )Z
CALL_ADDINr   rB   r  r  c                 s   r  r   r  r  r   r   r   r   {  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  z7End of formula. level=%d any_rel=%d any_err=%d stack=%rr  )Fr  r   r!   r   r    r  r*  r,  r   r  r   r  r"   r   r   rp  r  r  r;  _TOKEN_NOT_ALLOWEDr   r  r   r   r+  rl  rn  rB  rC  r   r@  r   r   r9   r	   r  r
   r  r   r  rF  r  r   r  rY  r   r  r  r  r  r  r  r  r  r  r  cellnamerelr  sumrangename2drelr  r7  r:  r#   r   r   rA  r  Zaddin_func_namesr  )Xr.  Zfmlar  r  r  r  r0  r  r  r  r  r  r  r  r  r  r  r  r  r  r{  r  r  r  r~  r  r  r  r  r  fmtr  r  rC  rs  rt  rw  rB  rx  r  r  r  r  r  r  r  r  r@  rA  r  r  r  r  r   r  r  r  r  r  r  r  r  r  Zokindr  r  r  r	  r
  r  r  r  r  r  r  rJ  r/  r  r  r9  r  r  r  r  r  r  Zovaluerz  r   r  r   r   P  s  






	  
	 
	 











(








*
*

 
"












 





 






















      D
r   c           4      C   s  |rt d||t|| jd t|d|| jd |dksJ t| }d}g }	d}
d}|	j}d|  kr7|k rNn nt|| }|d@ }|d@ d? }|rQ|d	 }n|}t| }|| }|rlt d
||||||f | jd |sd|  krydkrn ntd||d |d  \}}|rt d||f| jd nN|dkr|rt d|	| jd t|	dksJ |		 }|		 }|||  |rt d|	| jd n|dkr|rt d|	| jd t|	dksJ |		 }|		 }t|dksJ t|dksJ t
t|d |d }|| |rt d|	| jd n|dkr^|r!t d|	| jd t|	dks*J |		 }|		 }t|dks;J t|dksDJ t
t|d |d }|| |r]t d|	| jd n|dkrtd||d |d  \}}t|d}|dkr|d d }nd}|rt d||||f | jd nO|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rbdt|d#k }td'd%|  ||d |d |  \}}t|d(\} }t|d)\}!}|r`t d*|||!| f | jd n|d+krtd,||d |d+  }"|rt d-|" | jd n|dkrt||d ||}#|rt d|#| jd n|dkrt||d ||}#|rt d|#| jd nx|d.krtd,||d |d+  d }|rt d/| | jd nV|d0krt||d |dd1}#d}
|rt d2|#| jd n8|d3krt||d |dd1}#d}
|rt d2|#| jd n|d4krtd,||d |d+  d }$t||d+ ||}#|r?t d|$|#| jd |#\}}}%}&|
pL|%pL|&}
t| |$|\}'}(||'d5k O }|'|(d ||d ||d f})|rtt d2|)| jd |dkr~||)g n|d6krtd,||d |d+  d }$t||d+ ||\}*}+|rt 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 n9|dkrtd||d |d  \}$}"|rt d7|$|"f | jd n|tv r"d}n|r.t d8| | jd d}|dkr>t d"| jd d S ||7 }d|  krM|k s:n |rot d9|
  ||	f | jd t|	dkrqt d:| jd d S d S d S );Nr   r  r   ri  rF   rj   r  r6   r(   r  r   r$   r  r  r'   r  z
tlist postr.   r  r  r-   r  r  r>   r  r%   r  rV   r  rb   rE   r  r  z**** Dud size; exiting ****rC   rc  r  z   FuncID=%dr  r   r  r  r5   r  z   namex=%dr;   r  rZ   )r  r  r[   re   r7   rf   z   refx=%d namex=%dr  z.End of formula. any_rel=%d any_err=%d stack=%rr  )r*  r+  r,  r   r  rp  r  r  r   rl  r  r  r  r  rF  r
   r  r  r  r  r7  r  )4r.  r  r  r  r  r0  Zisnamer  r  r  r  r  r  r  r~  r  r  r  r  r  r  rs  rt  rz  r  r  r  r  r  r  r  r  r  r  r  r  r/  r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r   r   r   r   ^  sX  




 





&
* 










  r   c                 C   sT   |d u 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]rT   z%dr  r   )r  rowxrelr  r  r   r   r   
rownamerel  s   r!  c                 C   sP   |d u 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  r  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   r   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$%dr$  )r  r  r  r   r   r   r   "  s   r   c           	      C   s`   |s
|s
t | ||S |r|d u s|r|d u rd}t||||}t| |||}|r,|| S || S )NT)r   r&  r!  )	r  r  r   r%  r  r  r  crr   r   r   r  (  s   r  c                 C   s6   d}| dkr
||  S t | d\}}||d  ||  S )z6Utility function: ``7`` => ``'H'``, ``27`` => ``'AB'``ABCDEFGHIJKLMNOPQRSTUVWXYZr>   re   r   )r  )r  alphabetZxdiv26Zxmod26r   r   r   r   4  s
   r   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   %s:%s)r   )rlorhiclochir  r   r   r   rangename2d=  s
   $r0  c              
   C   st   | \}}}}|\}	}
}}|	s|
r|d u rd}|s|r |d u r d}dt |||	||||t |d |d |
||||f S )NTr+  r   )r  )Zrlo_rhi_clo_chiZrlorel_rhirel_clorel_chirelr  r  r  r,  r-  r.  r/  ZrlorelZrhirelZclorelZchirelr   r   r   r  E  s   r  c                 C   s2   |j }dt| g|dd R  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)
    r  Nr$   rV   )r  
sheetranger0  )bookr  r  r   r   r   r   R  s
   r   c           	      C   s\   |j }|j}t| |dd |dd }t|dd |dd |||}|s(|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$   rV   r  )r  rJ  sheetrangerelr  )	r2  r  r  r  r  r  rJ  shdescZrngdescr   r   r   r   ^  s   	 r   c                 C   s`   |dkr	| | }nddddd |d| }d|v r$d|dd	 d S d
|v r.d| d S |S )Nr   z?internal; any sheet?zinternal; deleted sheetzinternal; macro sheetz<<external>>)r7   r8   r(  r"  z
?error %d?'z''r  )rF  r  )shnamesZshxZshnamer   r   r   quotedsheetnameo  s   
r7  c                 C   s8   |   }t||}||d kr|dt||d  7 }|S )Nr   r  )Zsheet_namesr7  )r2  sloshir6  r4  r   r   r   r1    s
   
r1  c                 C   sR   |\}}|\}}|s|st | ||S |d  kr|d kr%n J |r%|s'J dS )Nr   r   rR   )r1  )r2  srangeZ	srangerelr8  r9  ZslorelZshirelr   r   r   r3    s   *r3  )NN)r   )r   r   )NNNr   r   r   )Nr   )NNr   )urH  
__future__r   r  operatorZoprstructr   Zbiffhr   r   r   r   r	   r
   Ztimemachine__all__r   r   r   r   r    r!   ZALL_FMLA_TYPESr  rF  r  r   r   r9   r   r   r   r   r   r   r  Zsztab0Zsztab1Zsztab2Zsztab3Zsztab4r  r  r  r  setr  minmaxr  r  r  r  r  r  r  r7  r:  	Exceptionr;  objectr"   r   r#   ZtAddZtSubZtMulZtDivZtPowerZtConcatrangeZtLTZtLEZtEQZtGEZtGTZtNErN  rQ  rS  rT  rU  rV  rW  rX  r]  r  Z_arith_argdictZ_cmp_argdictZ_strg_argdictaddsubmultruedivrm  r}  r  r  r  r  r   r   r   r!  r&  r   r   r  r   r0  r  r   r   r7  r1  r3  r   r   r   r   <module>   sf   







	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	  
                                               !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~               
  &\A	    e     %	