Best Python code snippet using pytest-benchmark
nodes.py
Source:nodes.py
...22 Module, Function or Class)23 .set_local(name, node), define an identifier <name> on the first parent frame,24 with the node defining it. This is used by the astng builder and should not25 be used from out there.26 .as_string(), returning a string representation of the code (should be27 executable).28on From and Import :29 .real_name(name),30 [1] http://docs.python.org/lib/module-compiler.ast.html31:author: Sylvain Thenault32:copyright: 2003-2007 LOGILAB S.A. (Paris, FRANCE)33:contact: http://www.logilab.fr/ -- mailto:python-projects@logilab.org34:copyright: 2003-2007 Sylvain Thenault35:contact: mailto:thenault@gmail.com36"""37# This file have been modified by Anatoly Zapadinski to meet the Clone Digger's needs38from __future__ import generators39__docformat__ = "restructuredtext en"40from compiler.ast import Assign, Add, And, AssAttr, AssList, AssName, \41 AssTuple, Assert, Assign, AugAssign, \42 Backquote, Bitand, Bitor, Bitxor, Break, CallFunc, Class, \43 Compare, Const, Continue, Dict, Discard, Div, FloorDiv, \44 Ellipsis, EmptyNode, Exec, \45 For, From, Function, Getattr, Global, \46 If, Import, Invert, Keyword, Lambda, LeftShift, \47 List, ListComp, ListCompFor, ListCompIf, Mod, Module, Mul, Name, Node, \48 Not, Or, Pass, Power, Print, Printnl, Raise, Return, RightShift, Slice, \49 Sliceobj, Stmt, Sub, Subscript, TryExcept, TryFinally, Tuple, UnaryAdd, \50 UnarySub, While, Yield51try:52 # introduced in python 2.453 from compiler.ast import GenExpr, GenExprFor, GenExprIf, GenExprInner54except:55 class GenExpr:56 """dummy GenExpr node, shouldn't be used since py < 2.4"""57 class GenExprFor: 58 """dummy GenExprFor node, shouldn't be used since py < 2.4"""59 class GenExprIf: 60 """dummy GenExprIf node, shouldn't be used since py < 2.4"""61 class GenExprInner: 62 """dummy GenExprInner node, shouldn't be used since py < 2.4"""63try:64 # introduced in python 2.465 from compiler.ast import Decorators66except:67 class Decorators:68 """dummy Decorators node, shouldn't be used since py < 2.4"""69try:70 # introduced in python 2.571 from compiler.ast import With72except:73 class With:74 """dummy With node, shouldn't be used since py < 2.5"""75from clonedigger.logilab.astng._exceptions import NotFoundError, InferenceError76from clonedigger.logilab.astng.utils import extend_class77from clonedigger.logilab.astng import InferenceContext78import re79ID_RGX = re.compile('^[a-zA-Z_][a-zA-Z_0-9]*$')80del re81INFER_NEED_NAME_STMTS = (From, Import, Global, TryExcept)82# Node ######################################################################83class NodeNG:84 """/!\ this class should not be used directly /!\ it's85 only used as a methods and attribute container, and update the86 original class from the compiler.ast module using its dictionnary87 (see below the class definition)88 """89 90 # attributes below are set by the builder module or by raw factories91 fromlineno = None92 tolineno = None93 # parent node in the tree94 parent = None95 def __str__(self):96 return '%s(%s)' % (self.__class__.__name__, getattr(self, 'name', ''))97 98 def parent_of(self, node):99 """return true if i'm a parent of the given node"""100 parent = node.parent101 while parent is not None:102 if self is parent:103 return True104 parent = parent.parent105 return False106 def is_statement(self):107 """return true if the node should be considered as statement node108 """109 if isinstance(self.parent, Stmt):110 return self111 return None112 def statement(self):113 """return the first parent node marked as statement node114 """115 if self.is_statement():116 return self117 return self.parent.statement()118 def frame(self):119 """return the first parent frame node (i.e. Module, Function or Class)120 """121 return self.parent.frame()122 def scope(self):123 """return the first node defining a new scope (i.e. Module,124 Function, Class, Lambda but also GenExpr)125 """126 return self.parent.scope()127 def root(self):128 """return the root node of the tree, (i.e. a Module)129 """130 if self.parent:131 return self.parent.root()132 return self133 def next_sibling(self):134 """return the previous sibling statement 135 """136 while not self.is_statement(): 137 self = self.parent138 index = self.parent.nodes.index(self)139 try:140 return self.parent.nodes[index+1]141 except IndexError:142 return143 def previous_sibling(self):144 """return the next sibling statement 145 """146 while not self.is_statement(): 147 self = self.parent148 index = self.parent.nodes.index(self)149 if index > 0:150 return self.parent.nodes[index-1]151 return152 def nearest(self, nodes):153 """return the node which is the nearest before this one in the154 given list of nodes155 """156 myroot = self.root()157 mylineno = self.source_line()158 nearest = None, 0159 for node in nodes:160 assert node.root() is myroot, \161 'not from the same module %s' % (self, node)162 lineno = node.source_line()163 if node.source_line() > mylineno:164 break165 if lineno > nearest[1]:166 nearest = node, lineno167 # FIXME: raise an exception if nearest is None ?168 return nearest[0]169 170 def source_line(self):171 """return the line number where the given node appears172 we need this method since not all nodes as the lineno attribute173 correctly set...174 """175 line = self.lineno176 if line is None:177 _node = self178 try:179 while line is None:180 _node = _node.getChildNodes()[0]181 line = _node.lineno182 except IndexError:183 _node = self.parent184 while _node and line is None:185 line = _node.lineno186 _node = _node.parent187 self.lineno = line188 return line189 190 def last_source_line(self):191 """return the last block line number for this node (i.e. including192 children)193 """194 try:195 return self.__dict__['_cached_last_source_line']196 except KeyError:197 line = self.source_line()198 for node in self.getChildNodes():199 line = max(line, node.last_source_line())200 self._cached_last_source_line = line201 return line202 def block_range(self, lineno):203 """handle block line numbers range for non block opening statements204 """205 return lineno, self.last_source_line()206 def set_local(self, name, stmt):207 """delegate to a scoped parent handling a locals dictionary208 """209 self.parent.set_local(name, stmt)210 def nodes_of_class(self, klass, skip_klass=None):211 """return an iterator on nodes which are instance of the given class(es)212 klass may be a class object or a tuple of class objects213 """214 if isinstance(self, klass):215 yield self216 for child_node in self.getChildNodes():217 if skip_klass is not None and isinstance(child_node, skip_klass):218 continue219 for matching in child_node.nodes_of_class(klass, skip_klass):220 yield matching221 def _infer_name(self, frame, name):222 if isinstance(self, INFER_NEED_NAME_STMTS) or (223 isinstance(self, (Function, Lambda)) and self is frame):224 return name225 return None226 def eq(self, value):227 return False228 229extend_class(Node, NodeNG)230Const.eq = lambda self, value: self.value == value231def decorators_scope(self):232 # skip the function node to go directly to the upper level scope233 return self.parent.parent.scope()234Decorators.scope = decorators_scope235# block range overrides #######################################################236def object_block_range(node, lineno):237 """handle block line numbers range for function/class statements:238 start from the "def" or "class" position whatever the given lineno239 """240 return node.source_line(), node.last_source_line()241Function.block_range = object_block_range242Class.block_range = object_block_range243Module.block_range = object_block_range244def if_block_range(node, lineno):245 """handle block line numbers range for if/elif statements246 """247 last = None248 for test, testbody in node.tests[1:]:249 if lineno == testbody.source_line():250 return lineno, lineno251 if lineno <= testbody.last_source_line():252 return lineno, testbody.last_source_line()253 if last is None:254 last = testbody.source_line() - 1255 return elsed_block_range(node, lineno, last)256If.block_range = if_block_range257def try_except_block_range(node, lineno):258 """handle block line numbers range for try/except statements259 """260 last = None261 for excls, exinst, exbody in node.handlers:262 if excls and lineno == excls.source_line():263 return lineno, lineno264 if exbody.source_line() <= lineno <= exbody.last_source_line():265 return lineno, exbody.last_source_line()266 if last is None:267 last = exbody.source_line() - 1268 return elsed_block_range(node, lineno, last)269TryExcept.block_range = try_except_block_range270def elsed_block_range(node, lineno, last=None):271 """handle block line numbers range for try/finally, for and while272 statements273 """274 if lineno == node.source_line():275 return lineno, lineno276 if node.else_:277 if lineno >= node.else_.source_line():278 return lineno, node.else_.last_source_line()279 return lineno, node.else_.source_line() - 1280 return lineno, last or node.last_source_line()281TryFinally.block_range = elsed_block_range282While.block_range = elsed_block_range283For.block_range = elsed_block_range284# From and Import #############################################################285def real_name(node, asname):286 """get name from 'as' name287 """288 for index in range(len(node.names)):289 name, _asname = node.names[index]290 if name == '*':291 return asname292 if not _asname:293 name = name.split('.', 1)[0]294 _asname = name295 if asname == _asname:296 return name297 raise NotFoundError(asname)298 299From.real_name = real_name300Import.real_name = real_name301def infer_name_module(node, name):302 context = InferenceContext(node)303 context.lookupname = name304 return node.infer(context, asname=False)305Import.infer_name_module = infer_name_module306# as_string ###################################################################307def add_as_string(node):308 """return an ast.Add node as string"""309 return '(%s) + (%s)' % (node.left.as_string(), node.right.as_string())310Add.as_string = add_as_string311def and_as_string(node):312 """return an ast.And node as string"""313 return ' and '.join(['(%s)' % n.as_string() for n in node.nodes])314And.as_string = and_as_string315 316def assattr_as_string(node):317 """return an ast.AssAttr node as string"""318 if node.flags == 'OP_DELETE':319 return 'del %s.%s' % (node.expr.as_string(), node.attrname.as_string())320 return '%s.%s' % (node.expr.as_string(), node.attrname.as_string())321AssAttr.as_string = assattr_as_string322def asslist_as_string(node):323 """return an ast.AssList node as string"""324 string = ', '.join([n.as_string() for n in node.nodes])325 return '[%s]' % string326AssList.as_string = asslist_as_string327def assname_as_string(node):328 """return an ast.AssName node as string"""329 if node.flags == 'OP_DELETE':330 return 'del %s' % node.name.as_string()331 return node.name.as_string()332AssName.as_string = assname_as_string333 334def asstuple_as_string(node):335 """return an ast.AssTuple node as string"""336 string = ', '.join([n.as_string() for n in node.nodes])337 # fix for del statement338 return string.replace(', del ', ', ')339AssTuple.as_string = asstuple_as_string340def assert_as_string(node):341 """return an ast.Assert node as string"""342 if node.fail:343 return 'assert %s, %s' % (node.test.as_string(), node.fail.as_string())344 return 'assert %s' % node.test.as_string()345Assert.as_string = assert_as_string346def assign_as_string(node):347 """return an ast.Assign node as string"""348 lhs = ' = '.join([n.as_string() for n in node.nodes])349 return '%s = %s' % (lhs, node.expr.as_string())350Assign.as_string = assign_as_string351def augassign_as_string(node):352 """return an ast.AugAssign node as string"""353 return '%s %s %s' % (node.node.as_string(), node.op.as_string(), node.expr.as_string())354AugAssign.as_string = augassign_as_string355def backquote_as_string(node):356 """return an ast.Backquote node as string"""357 return '`%s`' % node.expr.as_string()358Backquote.as_string = backquote_as_string359def bitand_as_string(node):360 """return an ast.Bitand node as string"""361 return ' & '.join(['(%s)' % n.as_string() for n in node.nodes])362Bitand.as_string = bitand_as_string363def bitor_as_string(node):364 """return an ast.Bitor node as string"""365 return ' | '.join(['(%s)' % n.as_string() for n in node.nodes])366Bitor.as_string = bitor_as_string367def bitxor_as_string(node):368 """return an ast.Bitxor node as string"""369 return ' ^ '.join(['(%s)' % n.as_string() for n in node.nodes])370Bitxor.as_string = bitxor_as_string371def break_as_string(node):372 """return an ast.Break node as string"""373 return 'break'374Break.as_string = break_as_string375def callfunc_as_string(node):376 """return an ast.CallFunc node as string"""377 expr_str = node.node.as_string()378 args = ', '.join([arg.as_string() for arg in node.args])379 if node.star_args:380 args += ', *%s' % node.star_args.as_string()381 if node.dstar_args:382 args += ', **%s' % node.dstar_args.as_string()383 return '%s(%s)' % (expr_str, args)384CallFunc.as_string = callfunc_as_string385def class_as_string(node):386 """return an ast.Class node as string"""387 bases = ', '.join([n.as_string() for n in node.bases])388 bases = bases and '(%s)' % bases or ''389 docs = node.doc and '\n """%s"""' % node.doc or ''390 return 'class %s%s:%s\n %s\n' % (node.name.as_string(), bases, docs,391 node.code.as_string())392Class.as_string = class_as_string393def compare_as_string(node):394 """return an ast.Compare node as string"""395 rhs_str = ' '.join(['%s %s' % (op.as_string(), expr.as_string())396 for op, expr in node.ops])397 return '%s %s' % (node.expr.as_string(), rhs_str)398Compare.as_string = compare_as_string399def const_as_string(node):400 """return an ast.Const node as string"""401 return node.value.as_string()402Const.as_string = const_as_string403def continue_as_string(node):404 """return an ast.Continue node as string"""405 return 'continue'406Continue.as_string = continue_as_string407def dict_as_string(node):408 """return an ast.Dict node as string"""409 return '{%s}' % ', '.join(['%s: %s' % (key.as_string(), value.as_string())410 for key, value in node.items])411Dict.as_string = dict_as_string412def discard_as_string(node):413 """return an ast.Discard node as string"""414 return node.expr.as_string()415Discard.as_string = discard_as_string416def div_as_string(node):417 """return an ast.Div node as string"""418 return '(%s) / (%s)' % (node.left.as_string(), node.right.as_string())419Div.as_string = div_as_string420def floordiv_as_string(node):421 """return an ast.Div node as string"""422 return '(%s) // (%s)' % (node.left.as_string(), node.right.as_string())423FloorDiv.as_string = floordiv_as_string424def ellipsis_as_string(node):425 """return an ast.Ellipsis node as string"""426 return '...'427Ellipsis.as_string = ellipsis_as_string428def empty_as_string(node):429 return ''430EmptyNode.as_string = empty_as_string431def exec_as_string(node):432 """return an ast.Exec node as string"""433 if node.globals:434 return 'exec %s in %s, %s' % (node.expr.as_string(),435 node.locals.as_string(),436 node.globals.as_string())437 if node.locals:438 return 'exec %s in %s' % (node.expr.as_string(),439 node.locals.as_string())440 return 'exec %s' % node.expr.as_string()441Exec.as_string = exec_as_string442def for_as_string(node):443 """return an ast.For node as string"""444 fors = 'for %s in %s:\n %s' % (node.assign.as_string(),445 node.list.as_string(),446 node.body.as_string())447 if node.else_:448 fors = '%s\nelse:\n %s' % (fors, node.else_.as_string())449 return fors450For.as_string = for_as_string451def from_as_string(node):452 """return an ast.From node as string"""453 return 'from %s import %s' % (node.modname, _import_string(node.names))454From.as_string = from_as_string455def function_as_string(node):456 """return an ast.Function node as string"""457 fargs = node.format_args()458 docs = node.doc and '\n """%s"""' % node.doc or ''459 return 'def %s(%s):%s\n %s' % (node.name, fargs, docs,460 node.code.as_string())461Function.as_string = function_as_string462def genexpr_as_string(node):463 """return an ast.GenExpr node as string"""464 return '(%s)' % node.code.as_string()465GenExpr.as_string = genexpr_as_string466def genexprinner_as_string(node):467 """return an ast.GenExpr node as string"""468 return '%s %s' % (node.expr.as_string(), ' '.join([n.as_string()469 for n in node.quals]))470GenExprInner.as_string = genexprinner_as_string471def genexprfor_as_string(node):472 """return an ast.GenExprFor node as string"""473 return 'for %s in %s %s' % (node.assign.as_string(),474 node.iter.as_string(),475 ' '.join([n.as_string() for n in node.ifs]))476GenExprFor.as_string = genexprfor_as_string477def genexprif_as_string(node):478 """return an ast.GenExprIf node as string"""479 return 'if %s' % node.test.as_string()480GenExprIf.as_string = genexprif_as_string481def getattr_as_string(node):482 """return an ast.Getattr node as string"""483 return '%s.%s' % (node.expr.as_string(), node.attrname.as_string())484Getattr.as_string = getattr_as_string485def global_as_string(node):486 """return an ast.Global node as string"""487 return 'global %s' % ', '.join([name.as_string() for name in node.names])488Global.as_string = global_as_string489def if_as_string(node):490 """return an ast.If node as string"""491 cond, body = node.tests[0]492 ifs = ['if %s:\n %s' % (cond.as_string(), body.as_string())]493 for cond, body in node.tests[1:]:494 ifs.append('elif %s:\n %s' % (cond.as_string(), body.as_string()))495 if node.else_:496 ifs.append('else:\n %s' % node.else_.as_string())497 return '\n'.join(ifs)498If.as_string = if_as_string499def import_as_string(node):500 """return an ast.Import node as string"""501 return 'import %s' % _import_string(node.names)502Import.as_string = import_as_string503def invert_as_string(node):504 """return an ast.Invert node as string"""505 return '~%s' % node.expr.as_string()506Invert.as_string = invert_as_string507def keyword_as_string(node):508 """return an ast.Keyword node as string"""509 return '%s=%s' % (node.name.as_string(), node.expr.as_string())510Keyword.as_string = keyword_as_string511def lambda_as_string(node):512 """return an ast.Lambda node as string"""513 return 'lambda %s: %s' % (node.format_args(), node.code.as_string())514Lambda.as_string = lambda_as_string515def leftshift_as_string(node):516 """return an ast.LeftShift node as string"""517 return '(%s) << (%s)' % (node.left.as_string(), node.right.as_string())518LeftShift.as_string = leftshift_as_string519def list_as_string(node):520 """return an ast.List node as string"""521 return '[%s]' % ', '.join([child.as_string() for child in node.nodes])522List.as_string = list_as_string523def listcomp_as_string(node):524 """return an ast.ListComp node as string"""525 return '[%s %s]' % (node.expr.as_string(), ' '.join([n.as_string()526 for n in node.quals]))527ListComp.as_string = listcomp_as_string528def listcompfor_as_string(node):529 """return an ast.ListCompFor node as string"""530 return 'for %s in %s %s' % (node.assign.as_string(),531 node.list.as_string(),532 ' '.join([n.as_string() for n in node.ifs]))533ListCompFor.as_string = listcompfor_as_string534def listcompif_as_string(node):535 """return an ast.ListCompIf node as string"""536 return 'if %s' % node.test.as_string()537ListCompIf.as_string = listcompif_as_string538def mod_as_string(node):539 """return an ast.Mod node as string"""540 return '(%s) %% (%s)' % (node.left.as_string(), node.right.as_string())541Mod.as_string = mod_as_string542def module_as_string(node):543 """return an ast.Module node as string"""544 docs = node.doc and '"""%s"""\n' % node.doc or ''545 return '%s%s' % (docs, node.node.as_string())546Module.as_string = module_as_string547def mul_as_string(node):548 """return an ast.Mul node as string"""549 return '(%s) * (%s)' % (node.left.as_string(), node.right.as_string())550Mul.as_string = mul_as_string551def name_as_string(node):552 """return an ast.Name node as string"""553 return node.name.as_string()554Name.as_string = name_as_string555def not_as_string(node):556 """return an ast.Not node as string"""557 return 'not %s' % node.expr.as_string()558Not.as_string = not_as_string559def or_as_string(node):560 """return an ast.Or node as string"""561 return ' or '.join(['(%s)' % n.as_string() for n in node.nodes])562Or.as_string = or_as_string563def pass_as_string(node):564 """return an ast.Pass node as string"""565 return 'pass'566Pass.as_string = pass_as_string567def power_as_string(node):568 """return an ast.Power node as string"""569 return '(%s) ** (%s)' % (node.left.as_string(), node.right.as_string())570Power.as_string = power_as_string571def print_as_string(node):572 """return an ast.Print node as string"""573 nodes = ', '.join([n.as_string() for n in node.nodes])574 if node.dest:575 return 'print >> %s, %s,' % (node.dest.as_string(), nodes)576 return 'print %s,' % nodes577Print.as_string = print_as_string578def printnl_as_string(node):579 """return an ast.Printnl node as string"""580 nodes = ', '.join([n.as_string() for n in node.nodes])581 if node.dest:582 return 'print >> %s, %s' % (node.dest.as_string(), nodes)583 return 'print %s' % nodes584Printnl.as_string = printnl_as_string585def raise_as_string(node):586 """return an ast.Raise node as string"""587 if node.expr1:588 if node.expr2:589 if node.expr3:590 return 'raise %s, %s, %s' % (node.expr1.as_string(),591 node.expr2.as_string(),592 node.expr3.as_string())593 return 'raise %s, %s' % (node.expr1.as_string(),594 node.expr2.as_string())595 return 'raise %s' % node.expr1.as_string()596 return 'raise'597Raise.as_string = raise_as_string598def return_as_string(node):599 """return an ast.Return node as string"""600 return 'return %s' % node.value.as_string()601Return.as_string = return_as_string602def rightshift_as_string(node):603 """return an ast.RightShift node as string"""604 return '(%s) >> (%s)' % (node.left.as_string(), node.right.as_string())605RightShift.as_string = rightshift_as_string606def slice_as_string(node):607 """return an ast.Slice node as string"""608 # FIXME: use flags609 lower = node.lower and node.lower.as_string() or ''610 upper = node.upper and node.upper.as_string() or ''611 return '%s[%s:%s]' % (node.expr.as_string(), lower, upper)612Slice.as_string = slice_as_string613def sliceobj_as_string(node):614 """return an ast.Sliceobj node as string"""615 return ':'.join([n.as_string() for n in node.nodes])616Sliceobj.as_string = sliceobj_as_string617def stmt_as_string(node):618 """return an ast.Stmt node as string"""619 stmts = '\n'.join([n.as_string() for n in node.nodes])620 if isinstance(node.parent, Module):621 return stmts622 return stmts.replace('\n', '\n ')623Stmt.as_string = stmt_as_string624def sub_as_string(node):625 """return an ast.Sub node as string"""626 return '(%s) - (%s)' % (node.left.as_string(), node.right.as_string())627Sub.as_string = sub_as_string628def subscript_as_string(node):629 """return an ast.Subscript node as string"""630 # FIXME: flags ?631 return '%s[%s]' % (node.expr.as_string(), ','.join([n.as_string()632 for n in node.subs]))633Subscript.as_string = subscript_as_string634def tryexcept_as_string(node):635 """return an ast.TryExcept node as string"""636 trys = ['try:\n %s' % node.body.as_string()]637 for exc_type, exc_obj, body in node.handlers:638 if exc_type:639 if exc_obj:640 excs = 'except %s, %s' % (exc_type.as_string(),641 exc_obj.as_string())642 else:643 excs = 'except %s' % exc_type.as_string()644 else:645 excs = 'except'646 trys.append('%s:\n %s' % (excs, body.as_string()))647 return '\n'.join(trys)648TryExcept.as_string = tryexcept_as_string649def tryfinally_as_string(node):650 """return an ast.TryFinally node as string"""651 return 'try:\n %s\nfinally:\n %s' % (node.body.as_string(),652 node.final.as_string())653TryFinally.as_string = tryfinally_as_string654def tuple_as_string(node):655 """return an ast.Tuple node as string"""656 return '(%s)' % ', '.join([child.as_string() for child in node.nodes])657Tuple.as_string = tuple_as_string658def unaryadd_as_string(node):659 """return an ast.UnaryAdd node as string"""660 return '+%s' % node.expr.as_string()661UnaryAdd.as_string = unaryadd_as_string662def unarysub_as_string(node):663 """return an ast.UnarySub node as string"""664 return '-%s' % node.expr.as_string()665UnarySub.as_string = unarysub_as_string666def while_as_string(node):667 """return an ast.While node as string"""668 whiles = 'while %s:\n %s' % (node.test.as_string(),669 node.body.as_string())670 if node.else_:671 whiles = '%s\nelse:\n %s' % (whiles, node.else_.as_string())672 return whiles673While.as_string = while_as_string674def with_as_string(node):675 """return an ast.With node as string"""676 withs = 'with (%s) as (%s):\n %s' % (node.expr.as_string(),677 node.vars.as_string(),678 node.body.as_string())679 return withs680With.as_string = with_as_string681def yield_as_string(node):682 """yield an ast.Yield node as string"""683 return 'yield %s' % node.value.as_string()684Yield.as_string = yield_as_string685def _import_string(names):686 """return a list of (name, asname) formatted as a string687 """688 _names = []689 for name, asname in names:690 if asname is not None:691 _names.append('%s as %s' % (name, asname))692 else:693 _names.append(name)694 return ', '.join(_names)695# to backport into compiler ###################################################...
as_string_op_test.py
Source:as_string_op_test.py
...28 ]29 with self.test_session():30 for dtype in (dtypes.float32, dtypes.float64):31 input_ = array_ops.placeholder(dtype)32 output = string_ops.as_string(input_, shortest=True)33 result = output.eval(feed_dict={input_: float_inputs_})34 s = lambda strs: [x.decode("ascii") for x in strs]35 self.assertAllEqual(s(result), ["%g" % x for x in float_inputs_])36 output = string_ops.as_string(input_, scientific=True)37 result = output.eval(feed_dict={input_: float_inputs_})38 self.assertAllEqual(s(result), ["%e" % x for x in float_inputs_])39 output = string_ops.as_string(input_)40 result = output.eval(feed_dict={input_: float_inputs_})41 self.assertAllEqual(s(result), ["%f" % x for x in float_inputs_])42 output = string_ops.as_string(input_, width=3)43 result = output.eval(feed_dict={input_: float_inputs_})44 self.assertAllEqual(s(result), ["%3f" % x for x in float_inputs_])45 output = string_ops.as_string(input_, width=3, fill="0")46 result = output.eval(feed_dict={input_: float_inputs_})47 self.assertAllEqual(s(result), ["%03f" % x for x in float_inputs_])48 output = string_ops.as_string(input_, width=3, fill="0", shortest=True)49 result = output.eval(feed_dict={input_: float_inputs_})50 self.assertAllEqual(s(result), ["%03g" % x for x in float_inputs_])51 output = string_ops.as_string(input_, precision=10, width=3)52 result = output.eval(feed_dict={input_: float_inputs_})53 self.assertAllEqual(s(result), ["%03.10f" % x for x in float_inputs_])54 output = string_ops.as_string(55 input_, precision=10, width=3, fill="0", shortest=True)56 result = output.eval(feed_dict={input_: float_inputs_})57 self.assertAllEqual(s(result), ["%03.10g" % x for x in float_inputs_])58 with self.assertRaisesOpError("Cannot select both"):59 output = string_ops.as_string(input_, scientific=True, shortest=True)60 output.eval(feed_dict={input_: float_inputs_})61 with self.assertRaisesOpError("Fill string must be one or fewer"):62 output = string_ops.as_string(input_, fill="ab")63 output.eval(feed_dict={input_: float_inputs_})64 def testInt(self):65 # Cannot use values outside -128..127 for test, because we're also66 # testing int867 int_inputs_ = [0, -1, 1, -128, 127, -101, 101, -0]68 s = lambda strs: [x.decode("ascii") for x in strs]69 with self.test_session():70 for dtype in (dtypes.int32, dtypes.int64, dtypes.int8):71 input_ = array_ops.placeholder(dtype)72 output = string_ops.as_string(input_)73 result = output.eval(feed_dict={input_: int_inputs_})74 self.assertAllEqual(s(result), ["%d" % x for x in int_inputs_])75 output = string_ops.as_string(input_, width=3)76 result = output.eval(feed_dict={input_: int_inputs_})77 self.assertAllEqual(s(result), ["%3d" % x for x in int_inputs_])78 output = string_ops.as_string(input_, width=3, fill="0")79 result = output.eval(feed_dict={input_: int_inputs_})80 self.assertAllEqual(s(result), ["%03d" % x for x in int_inputs_])81 with self.assertRaisesOpError("scientific and shortest"):82 output = string_ops.as_string(input_, scientific=True)83 output.eval(feed_dict={input_: int_inputs_})84 with self.assertRaisesOpError("scientific and shortest"):85 output = string_ops.as_string(input_, shortest=True)86 output.eval(feed_dict={input_: int_inputs_})87 with self.assertRaisesOpError("precision not supported"):88 output = string_ops.as_string(input_, precision=0)89 output.eval(feed_dict={input_: int_inputs_})90 def testLargeInt(self):91 # Cannot use values outside -128..127 for test, because we're also92 # testing int893 s = lambda strs: [x.decode("ascii") for x in strs]94 with self.test_session():95 input_ = array_ops.placeholder(dtypes.int32)96 int_inputs_ = [np.iinfo(np.int32).min, np.iinfo(np.int32).max]97 output = string_ops.as_string(input_)98 result = output.eval(feed_dict={input_: int_inputs_})99 self.assertAllEqual(s(result), ["%d" % x for x in int_inputs_])100 input_ = array_ops.placeholder(dtypes.int64)101 int_inputs_ = [np.iinfo(np.int64).min, np.iinfo(np.int64).max]102 output = string_ops.as_string(input_)103 result = output.eval(feed_dict={input_: int_inputs_})104 self.assertAllEqual(s(result), ["%d" % x for x in int_inputs_])105 def testBool(self):106 bool_inputs_ = [False, True]107 s = lambda strs: [x.decode("ascii") for x in strs]108 with self.test_session():109 for dtype in (dtypes.bool,):110 input_ = array_ops.placeholder(dtype)111 output = string_ops.as_string(input_)112 result = output.eval(feed_dict={input_: bool_inputs_})113 self.assertAllEqual(s(result), ["false", "true"])114 def testComplex(self):115 float_inputs_ = [116 0, 1, -1, 0.5, 0.25, 0.125, complex("INF"), complex("NAN"),117 complex("-INF")118 ]119 complex_inputs_ = [(x + (x + 1) * 1j) for x in float_inputs_]120 with self.test_session():121 for dtype in (dtypes.complex64,):122 input_ = array_ops.placeholder(dtype)123 def clean_nans(s_l):124 return [s.decode("ascii").replace("-nan", "nan") for s in s_l]125 output = string_ops.as_string(input_, shortest=True)126 result = output.eval(feed_dict={input_: complex_inputs_})127 self.assertAllEqual(128 clean_nans(result),129 ["(%g,%g)" % (x.real, x.imag) for x in complex_inputs_])130 output = string_ops.as_string(input_, scientific=True)131 result = output.eval(feed_dict={input_: complex_inputs_})132 self.assertAllEqual(133 clean_nans(result),134 ["(%e,%e)" % (x.real, x.imag) for x in complex_inputs_])135 output = string_ops.as_string(input_)136 result = output.eval(feed_dict={input_: complex_inputs_})137 self.assertAllEqual(138 clean_nans(result),139 ["(%f,%f)" % (x.real, x.imag) for x in complex_inputs_])140 output = string_ops.as_string(input_, width=3)141 result = output.eval(feed_dict={input_: complex_inputs_})142 self.assertAllEqual(143 clean_nans(result),144 ["(%03f,%03f)" % (x.real, x.imag) for x in complex_inputs_])145 output = string_ops.as_string(input_, width=3, fill="0", shortest=True)146 result = output.eval(feed_dict={input_: complex_inputs_})147 self.assertAllEqual(148 clean_nans(result),149 ["(%03g,%03g)" % (x.real, x.imag) for x in complex_inputs_])150 output = string_ops.as_string(input_, precision=10, width=3)151 result = output.eval(feed_dict={input_: complex_inputs_})152 self.assertAllEqual(153 clean_nans(result),154 ["(%03.10f,%03.10f)" % (x.real, x.imag) for x in complex_inputs_])155 output = string_ops.as_string(156 input_, precision=10, width=3, fill="0", shortest=True)157 result = output.eval(feed_dict={input_: complex_inputs_})158 self.assertAllEqual(159 clean_nans(result),160 ["(%03.10g,%03.10g)" % (x.real, x.imag) for x in complex_inputs_])161 with self.assertRaisesOpError("Cannot select both"):162 output = string_ops.as_string(input_, scientific=True, shortest=True)163 output.eval(feed_dict={input_: complex_inputs_})164if __name__ == "__main__":...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!