zmc
2023-10-12 ed135d79df12a2466b52dae1a82326941211dcc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
U
¬ý°d~Oã@sÀdZddlmZddlZddlmZddlmZddlZ    ddl
m Z m Z ddl mZddlmZdd    lmZddlmmZdd
lmZmZmZdd lmZdd lmZdd l m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'm(Z(Gdd„dej)ƒZ*Gdd„dej+ƒZ+Gdd„de+ƒZ,Gdd„dej-ƒZ-Gdd„de-ƒZ.Gdd„de.ƒZ/Gdd„de-ƒZ0Gdd „d e0ƒZ1Gd!d"„d"ej2ƒZ2Gd#d$„d$eƒZ3d%d&„Z4Gd'd(„d(ej5ƒZ6Gd)d*„d*ƒZ7d+d,œd-d.„Z8dS)/z1 manage PyTables query interface via Expressions é)Ú annotationsN)Úpartial)ÚAny)Ú    TimedeltaÚ    Timestamp)Únpt)ÚUndefinedVariableError)Ú is_list_like)ÚexprÚopsÚscope)Úensure_decoded)ÚBaseExprVisitor)Úis_term)Ú extract_array)ÚIndex)Ú pprint_thingÚpprint_thing_encodedcs6eZdZUdZded<d ddddœ‡fd    d
„ Z‡ZS) Ú PyTablesScope)Ú
queryablesúdict[str, Any]rNÚintúdict[str, Any] | NoneÚNone)ÚlevelrÚreturncs$tƒj|d||d|pi|_dS)Né)Ú global_dictÚ
local_dict)ÚsuperÚ__init__r)Úselfrrrr©Ú    __class__©úWd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/computation/pytables.pyr *szPyTablesScope.__init__)NNN)Ú__name__Ú
__module__Ú __qualname__Ú    __slots__Ú__annotations__r Ú __classcell__r$r$r"r%r%s
ûrcsNeZdZUded<ddd„Zddddœ‡fdd    „ Zd
d „Zed d „ƒZ‡Z    S)ÚTermrÚenvNcCst|tƒr|}nt}t |¡S©N)Ú
isinstanceÚstrÚConstantÚobjectÚ__new__)ÚclsÚnamer-ÚsideÚencodingÚklassr$r$r%r38s
z Term.__new__r©r-rcstƒj||||ddS©N)r6r7)rr )r!r5r-r6r7r"r$r%r ?sz Term.__init__cCsh|jdkr4|j|jjkr.tdt|jƒ›dƒ‚|jSz|jj|jddWStk
rb|jYSXdS)NÚleftzname z is not definedF)Úis_local)r6r5r-rÚ    NameErrorÚreprÚresolver©r!r$r$r%Ú _resolve_nameBs
zTerm._resolve_namecCs|jSr.)Ú_valuer@r$r$r%ÚvalueQsz
Term.value)NN)NN)
r&r'r(r*r3r rAÚpropertyrCr+r$r$r"r%r,5s
 
r,cs.eZdZd    dddœ‡fdd„ Zdd„Z‡ZS)
r1Nrrr9cs.t|tƒstt|ƒƒ‚tƒj||||ddSr:)r/rÚAssertionErrorÚtyperr )r!rCr-r6r7r"r$r%r WszConstant.__init__cCs|jSr.)Ú_namer@r$r$r%rA[szConstant._resolve_name)NN)r&r'r(r rAr+r$r$r"r%r1Vsr1csÔeZdZUdZded<ded<ded<dddd    œ‡fd
d „ Zdd œd d„Zdd„Zdd„Ze    dd œdd„ƒZ
e    dd œdd„ƒZ e    dd„ƒZ e    dd„ƒZ e    dd„ƒZdd œdd„Zd d œd!d"„Zdd œd#d$„Z‡ZS)%ÚBinOpér0Úoprrz
str | NoneÚ    conditionr)rJrrcs&tƒ |||¡||_||_d|_dSr.)rr rr7rK)r!rJÚlhsÚrhsrr7r"r$r%r fszBinOp.__init__©rcCsdSr.r$r@r$r$r%Ú_disallow_scalar_only_bool_opslsz$BinOp._disallow_scalar_only_bool_opscs®‡‡fdd„}ˆjˆj}}t|ƒr<t|ƒr<||j|jƒ}nnt|ƒs`t|ƒr`|| ˆ¡|jƒ}nJt|ƒr„t|ƒs„||j| ˆ¡ƒ}n&t|ƒsªt|ƒsª|| ˆ¡| ˆ¡ƒ}|S)Ncs¦|dkr |S|dkr|Sˆ}t|tƒrTt|tƒr6t}qŠt||ƒrD|St||ƒrŠ|Sn6t|tƒrŠt|tƒrnt}nt||ƒr||St||ƒrŠ|S|ˆj||ˆjˆjd ¡S)z5create and return a new specialized BinOp from myselfN)rr7)    r/ÚConditionBinOpÚJointConditionBinOpÚ FilterBinOpÚJointFilterBinOprJrr7Úevaluate)r;ÚrightÚk©r8r!r$r%Úprps4
 
 
 
 
 
 
 
ÿzBinOp.prune.<locals>.pr)rLrMrrCÚprune)r!r8rXr;rUÚresr$rWr%rYosz BinOp.prunecCs&t|ƒs|g}t|tjƒr"| ¡}|S)zinplace conform rhs)r    r/ÚnpZndarrayZravel)r!rMr$r$r%Úconform™s
 z BinOp.conformÚboolcCs |j|jkS)z$return True if this is a valid field)rLrr@r$r$r%Úis_valid¡szBinOp.is_validcCs|j |j¡dk    S)zx
        return True if this is a valid column name for generation (e.g. an
        actual column in the table)
        N)rÚgetrLr@r$r$r%Ú is_in_table¦szBinOp.is_in_tablecCst|j |j¡ddƒS)zthe kind of my fieldÚkindN©Úgetattrrr_rLr@r$r$r%ra®sz
BinOp.kindcCst|j |j¡ddƒS)zthe meta of my fieldÚmetaNrbr@r$r$r%rd³sz
BinOp.metacCst|j |j¡ddƒS)zthe metadata of my fieldÚmetadataNrbr@r$r$r%re¸szBinOp.metadatacCs(| |j¡}d|j›d|j›d|›dS)z2create and return the op string for this TermValueú(ú ú))Útostringr7rLrJ)r!ÚvÚvalr$r$r%Úgenerate½s zBinOp.generateÚ    TermValuecs¶‡fdd„}tˆjƒ}tˆjƒ}|dkrvt|ttfƒr>||ƒ}t|ƒ}t|ƒ d¡}|jdk    rh|     d¡}t
||j |ƒS|dkrºt|t ƒr’t |ƒ}n t |dd    }| d¡j }t
t|ƒ||ƒS|d
krútˆjd d }||kràd }n|j|dd}t
||dƒS|dkrtt|ƒƒ}t
|||ƒS|dkr:t|ƒ}t
|||ƒS|dkrvt|t ƒrb| ¡ ¡dk}nt|ƒ}t
|||ƒSt|t ƒr’t
|||ƒdƒStd|›dt|ƒ›d|›dƒ‚dS)zn
        convert the expression that is in the term to something that is
        accepted by pytables
        cs ˆjdk    rt|ˆjdSt|ƒS)N)r7)r7rr)rCr@r$r%Ú    stringifyÈs
z&BinOp.convert_value.<locals>.stringify)Z
datetime64ÚdatetimeÚnsNÚUTC)Z timedelta64Ú    timedeltaÚs)ÚunitÚcategoryT)Z extract_numpyéÿÿÿÿr;)r6ÚintegerÚfloatr])    ÚfalseÚfÚnoÚnÚnoneÚ0z[]z{}ÚÚstringzCannot compare z     of type z to z column)r rardr/rrxrZas_unitÚtzZ
tz_convertrmrBr0rrreZ searchsortedÚstripÚlowerr]Ú    TypeErrorrF)r!rjrnrardreÚresultr$r@r%Ú convert_valueÂsJ 
 
 
 
 
 
 
 
 
 
    zBinOp.convert_valuecCsdSr.r$r@r$r$r%Úconvert_valuesszBinOp.convert_values)r&r'r(Ú_max_selectorsr*r rOrYr\rDr^r`rardrerlr†r‡r+r$r$r"r%rH_s*
*
 
 
@rHc@sPeZdZUdZded<ddœdd„Zdd    „Zd
d „Zd d „Zdddœdd„Z    dS)rRNztuple[Any, Any, Index] | NoneÚfilterr0rNcCs0|jdkrdStd|jd›d|jd›dƒS)NzFilter: Not Initializedz [Filter : [rz] -> [rú])r‰rr@r$r$r%Ú__repr__    s
zFilterBinOp.__repr__cCs.|jdk    r*|jd|jdd|jdf|_|S)zinvert the filterNrT©Úinverté)r‰Úgenerate_filter_opr@r$r$r%rs 
 
ýzFilterBinOp.invertcCs|jgS)zreturn the actual filter format)r‰r@r$r$r%ÚformatszFilterBinOp.formatcCs¤|jstd|›dƒ‚| |j¡}t|ƒ}|jrj|jdkrft|ƒ|jkrf|     ¡}|j
|t |ƒf|_ |SdS|jdkr|     ¡}|j
|t |ƒf|_ nt d|›dƒ‚|S)Núquery term is not valid [rŠ©ú==ú!=z7passing a filterable condition to a non-table indexer [)r^Ú
ValueErrorr\rMÚlistr`rJÚlenrˆrrLrr‰r„)r!rMÚvaluesZ    filter_opr$r$r%rTs" 
 
ÿzFilterBinOp.evaluateFr]rŒcCs0|jdkr|r|jdkr$|r$dd„Sdd„SdS)Nr”r“cSs | |¡Sr.©Úisin©ZaxisÚvalsr$r$r%Ú<lambda>:óz0FilterBinOp.generate_filter_op.<locals>.<lambda>cSs
| |¡Sr.r™r›r$r$r%r<rž)rJ)r!rr$r$r%r8szFilterBinOp.generate_filter_op)F)
r&r'r(r‰r*r‹rrrTrr$r$r$r%rRs
 
rRc@seZdZdd„Zdd„ZdS)rScCs tdƒ‚dS)Nz unable to collapse Joint Filters©ÚNotImplementedErrorr@r$r$r%r@szJointFilterBinOp.formatcCs|Sr.r$r@r$r$r%rTCszJointFilterBinOp.evaluateN)r&r'r(rrTr$r$r$r%rS?srSc@s2eZdZddœdd„Zdd„Zdd„Zd    d
„Zd S) rPr0rNcCstd|j›dƒS)Nz[Condition : [z]])rrKr@r$r$r%r‹HszConditionBinOp.__repr__cCs tdƒ‚dS)zinvert the conditionz6cannot use an invert condition when passing to numexprNrŸr@r$r$r%rKsÿzConditionBinOp.invertcCs|jS)zreturn the actual ne format)rKr@r$r$r%rTszConditionBinOp.formatcs˜ˆjstdˆ›dƒ‚ˆjs dSˆ ˆj¡}‡fdd„|Dƒ}ˆjdkr„t|ƒˆjkr~‡fdd„|Dƒ}dd |¡›d    ˆ_    q”dSnˆ 
|d
¡ˆ_    ˆS) Nr‘rŠcsg|]}ˆ |¡‘qSr$)r†©Ú.0rjr@r$r%Ú
<listcomp>asz+ConditionBinOp.evaluate.<locals>.<listcomp>r’csg|]}ˆ |¡‘qSr$)rlr¡r@r$r%r£gsrfz | rhr) r^r•r`r\rMrJr—rˆÚjoinrKrl)r!rMr˜Úvsr$r@r%rTXs 
zConditionBinOp.evaluateN)r&r'r(r‹rrrTr$r$r$r%rPGs    rPc@seZdZdd„ZdS)rQcCs(d|jj›d|j›d|jj›d|_|S)Nrfrgrh)rLrKrJrMr@r$r$r%rTts$zJointConditionBinOp.evaluateN)r&r'r(rTr$r$r$r%rQssrQc@seZdZdd„ZdS)ÚUnaryOpcCsh|jdkrtdƒ‚|j}| |¡}|dk    rdt|tƒr>|jdk    s\t|tƒsdt|tƒrd|jdk    rd|     ¡SdS)Nú~z$UnaryOp only support invert type ops)
rJr ÚoperandrYÚ
issubclassrPrKrRr‰r)r!r8r¨r$r$r%rYzs"
 
ÿþýüûz UnaryOp.pruneN)r&r'r(rYr$r$r$r%r¦ysr¦csbeZdZeZeZddœ‡fdd„ Zdd„Zdd„Z    d    d
„Z
d d „Z d d„Z dd„Z dd„Z‡ZS)ÚPyTablesExprVisitorrrNc sHtƒ |||¡|jD],}|j|}t|d|›|f‡fdd„    ƒqdS)NZvisit_cstt|fˆŽSr.)rrH)ÚnodeÚbin_op©Úkwargsr$r%r—ržz.PyTablesExprVisitor.__init__.<locals>.<lambda>)rr Ú
binary_opsZbinary_op_nodes_mapÚsetattr)r!r-ÚengineÚparserr®r¬Zbin_noder"r­r%r s
 
ýzPyTablesExprVisitor.__init__cKsht|jtjtjfƒr&td| |j¡ƒSt|jtjƒrN|     | |j¡j
|j ¡St|jtj ƒrdt dƒ‚dS)Nr§zUnary addition not supported)r/rJÚastZNotZInvertr¦Úvisitr¨ZUSubÚ
const_typerCr-ZUAddr ©r!r«r®r$r$r%Ú visit_UnaryOpšs z!PyTablesExprVisitor.visit_UnaryOpcKs| |j¡jSr.)r´rCr¶r$r$r%Ú visit_Index¢szPyTablesExprVisitor.visit_IndexcKs*tjt ¡g|jd|jgd}| |¡S)Nr)r r;Z comparators)r³ZCompareÚEqÚtargetsrCr´)r!r«r®Zcmprr$r$r%Ú visit_Assign¥s ÿz PyTablesExprVisitor.visit_Assignc
Ks¢| |j¡}| |j¡}z
|j}Wntk
r6YnXt|tƒrH|j}z| |||j¡WStk
rœ}z"t    dt
|ƒ›dt
|ƒ›ƒ|‚W5d}~XYnXdS)Nzcannot subscript z with ) r´rCÚsliceÚAttributeErrorr/r,rµr-r„r•r>)r!r«r®rCZslobjÚerrr$r$r%Úvisit_Subscript«s   
 
ÿþz#PyTablesExprVisitor.visit_SubscriptcKs¨|j}|j}t|jƒ}|tjkr”| |¡}z
|j}Wntk
rHYnXz| t    ||ƒ|j
¡WStk
r’t |tj ƒrŽ|j |krŽ|YSYnXtd|j›ƒ‚dS)NzInvalid Attribute context )ÚattrrCrFÚctxr³ÚLoadr´r½Ú    term_typercr-r/ÚNameÚidr•r&)r!r«r®rÀrCrÁZresolvedr$r$r%Úvisit_AttributeÀs
 
 
 
z#PyTablesExprVisitor.visit_AttributecCst|tjƒrt ¡S|Sr.)r/r³ZInr¹)r!rJr$r$r%Ú translate_InØsz PyTablesExprVisitor.translate_IncCs| |j¡|j||fSr.)r´rJ)r!r«r;rUr$r$r%Ú_rewrite_membership_opÛsz*PyTablesExprVisitor._rewrite_membership_op)r&r'r(r1rµr,rÃr r·r¸r»r¿rÆrÇrÈr+r$r$r"r%rªŒs
rªcCs"t|ttfƒst|ƒstdƒ‚|S)a—
    Validate that the where statement is of the right type.
 
    The type may either be String, Expr, or list-like of Exprs.
 
    Parameters
    ----------
    w : String term expression, Expr, or list-like of Exprs.
 
    Returns
    -------
    where : The original where clause if the check was successful.
 
    Raises
    ------
    TypeError : An invalid data type was passed in for w (e.g. dict).
    zLwhere must be passed as a string, PyTablesExpr, or list-like of PyTablesExpr)r/Ú PyTablesExprr0r    r„)Úwr$r$r%Ú_validate_whereßs
ÿrËc@sTeZdZUdZded<ded<ded<dd
d d d œdd„Zddœdd„Zdd„ZdS)rÉa½
    Hold a pytables-like expression, comprised of possibly multiple 'terms'.
 
    Parameters
    ----------
    where : string term expression, PyTablesExpr, or list-like of PyTablesExprs
    queryables : a "kinds" map (dict of column name -> kind), or None if column
        is non-indexable
    encoding : an encoding that will encode the query terms
 
    Returns
    -------
    a PyTablesExpr object
 
    Examples
    --------
    'index>=date'
    "columns=['A', 'D']"
    'columns=A'
    'columns==A'
    "~(columns=['A','B'])"
    'index>df.index[3] & string="bar"'
    '(index>df.index[3] & index<=df.index[6]) | string="bar"'
    "ts>=Timestamp('2012-02-01')"
    "major_axis>=20130101"
    zPyTablesExprVisitor | NoneÚ_visitorrr-r0r
Nrrrr)rÚ scope_levelrc    Cs t|ƒ}||_d|_d|_d|_d|_d}t|tƒrD|jj    }|j
}nft |ƒr¦t |ƒ}t |ƒD],\}}t|tƒrx|jj    }q\t|ƒ}|||<q\d dd„t |¡Dƒ¡}n|}||_
t|d|d|_|dk    rt|j
tƒr|jj |¡t|j|dd|d|_| ¡|_dS)Nz & cSsg|]}d|›d‘qS)rfrhr$)r¢rÊr$r$r%r£8sz)PyTablesExpr.__init__.<locals>.<listcomp>r)rZpytables)rr²r±r7)rËr7rKr‰ÚtermsrÌr/rÉr-r r
r    r–Ú    enumerater¤ÚcomÚflattenrr0rÚupdaterªÚparse)    r!Úwhererr7rÍrZ_whereÚidxrÊr$r$r%r s>
 
 
 
ûzPyTablesExpr.__init__rNcCs|jdk    rt|jƒSt|jƒSr.)rÎrr
r@r$r$r%r‹Ks
 
zPyTablesExpr.__repr__c
Cs¬z|j t¡|_Wn<tk
rN}ztd|j›d|›dƒ|‚W5d}~XYnXz|j t¡|_Wn<tk
rž}ztd|j›d|›dƒ|‚W5d}~XYnX|j|jfS)z2create and return the numexpr condition and filterzcannot process expression [z], [z] is not a valid conditionNz] is not a valid filter)    rÎrYrPrKr½r•r
rRr‰)r!r¾r$r$r%rTPs"ÿýÿýzPyTablesExpr.evaluate)NNr)r&r'r(Ú__doc__r*r r‹rTr$r$r$r%rÉús
û1rÉc@s.eZdZdZdddœdd„Zddœdd    „Zd
S) rmz<hold a term value the we use to construct a condition/filterr0r)rarcCs(t|tƒst|ƒ‚||_||_||_dSr.)r/r0rErCÚ    convertedra)r!rCr×rar$r$r%r gszTermValue.__init__rNcCsH|jdkr*|dk    rt|jƒSd|j›dS|jdkr>t|jƒSt|jƒS)z6quote the string if not encoded else encode and returnr€Nú"rx)rar0r×r>)r!r7r$r$r%rims
 
 
 
zTermValue.tostringN)r&r'r(rÖr rir$r$r$r%rmdsrmr]rNcs4tˆtƒsdStjtjd}t‡fdd„|DƒƒS)z7loose checking if s is a pytables-acceptable expressionF)ú=c3s|]}|ˆkVqdSr.r$)r¢rJ©rsr$r%Ú    <genexpr>sz#maybe_expression.<locals>.<genexpr>)r/r0rªr¯Z    unary_opsÚany)rsÚ
operationsr$rÚr%Úmaybe_expressionzs
rÞ)9rÖÚ
__future__rr³Ú    functoolsrÚtypingrÚnumpyr[Zpandas._libs.tslibsrrZpandas._typingrZ pandas.errorsrZpandas.core.dtypes.commonr    Zpandas.core.commonÚcoreÚcommonrÐZpandas.core.computationr
r r Z_scopeZpandas.core.computation.commonr Zpandas.core.computation.exprrZpandas.core.computation.opsrZpandas.core.constructionrZpandas.core.indexes.baserZpandas.io.formats.printingrrZScoperr,r1rHrRrSrPrQr¦rªrËZExprrÉrmrÞr$r$r$r%Ú<module>s@           !    (9,Sj