NL i UdZddlmZddlmZmZddlmZmZddl m Z m Z m Z m Z mZmZmZmZmZmZmZddlmZddlmZeeeeeefZeeeeefZde d <d d Z! dd Z"y )adConstant folding of IR values. For example, 3 + 5 can be constant folded into 8. This is mostly like mypy.constant_fold, but we can bind some additional NameExpr and MemberExpr references here, since we have more knowledge about which definitions can be trusted -- we constant fold only references to other compiled modules in the same compilation unit. ) annotations)FinalUnion)constant_fold_binary_opconstant_fold_unary_op) BytesExpr ComplexExpr Expression FloatExprIntExpr MemberExprNameExprOpExprStrExpr UnaryExprVar) IRBuilder)bytes_from_strr CONST_TYPESct|tr |jSt|tr |jSt|tr |jSt|t rt |jSt|tr |jSt|trG|j}t|tr*|jr|j}t|tr|Syt|trD|j|}|0|\}}}|jr|j}t|tr|Syt|t rHt#||j$}t#||j&} || t)|j*|| Syt|t,r>t#||j.} | &t| t0st3|j*| Sy)zeReturn the constant value of an expression for supported operations. Return None otherwise. N) isinstancer valuer rrrr rnoderis_final final_valuerr get_final_refrconstant_fold_exprleftright constant_fold_binary_op_extendedoprexprbytesr) builderr"rrfinalfn final_varnativerrrs a/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypyc/irbuild/constant_fold.pyrr%s $ zz$ "zz$ zz$ "djj))$ $zz D( #yy dC T]]**K+ 5""$ # D* %%%d+  $) !B 6!!'33 kK9&&  D& !!'4995"7DJJ7   13DGGT5I I  D) $"7DII6  Zu%=)$''59 9 cZt|tst|ts t|||S|dk(r%t|trt|tr||zS|dk(r%t|trt|tr||zS|dk(r%t|trt|tr||zSy)zLike mypy's constant_fold_binary_op(), but includes bytes support. mypy cannot use constant folded bytes easily so it's simpler to only support them in mypyc. +*N)rr#rint)r!rrs r)r r Ns dE ":eU+C&r477 SyZe,E51Ie| sz$.:eS3Ie| sz$,E51Ie| r*N)r$rr"r returnConstantValue | None)r!strr ConstantValuerr2r/r0)#__doc__ __future__rtypingrrmypy.constant_foldrr mypy.nodesrr r r r r rrrrrmypyc.irbuild.builderrmypyc.irbuild.utilrr.floatcomplexr1r#r2r__annotations__rr r*r)r>s#N    ,-c5'356 5'36 U6&R  )6r*