MCPcopy Create free account
hub / github.com/pydata/numexpr / _binop

Function _binop

numexpr3/ne3compiler.py:1236–1270  ·  view source on GitHub ↗

AST function factory for binomial operations, such as :code:`+,-,*,` etc. ast.Binop fields are :code:`(left,op,right)`

(self: NumExpr, node: ast.AST)

Source from the content-addressed store, hash-verified

1234 return outputRegister
1235
1236def _binop(self: NumExpr, node: ast.AST) -> NumReg:
1237 '''
1238 AST function factory for binomial operations, such as :code:`+,-,*,` etc.
1239
1240 ast.Binop fields are :code:`(left,op,right)`
1241 '''
1242 # info('$ast.Binop: %s'%node.op)
1243 # (left,op,right)
1244 leftRegister = _ASTAssembler[type(node.left)](self, node.left)
1245 rightRegister = _ASTAssembler[type(node.right)](self, node.right)
1246
1247 # Check to see if a cast is required
1248 leftRegister, rightRegister = self._cast2(leftRegister, rightRegister)
1249
1250 # Format: (opCode, lib, left_register, right_register)
1251 try:
1252 opWord, self.assignDChar = OPTABLE[(type(node.op), self.lib, leftRegister.dchar, rightRegister.dchar)]
1253 except KeyError as e:
1254 if leftRegister.dchar == None or rightRegister.dchar == None:
1255 raise ValueError(
1256 'Binop did not find arrays: left: {}, right: {}. Possibly a stack depth issue'.format(
1257 leftRegister.name, rightRegister.name))
1258 else:
1259 raise e
1260
1261 # Make/reuse a temporary for output
1262 outputRegister = self._transmit2(leftRegister, rightRegister)
1263
1264 #_messages.append( 'BinOp: %s %s %s' %( node.left, type(node.op), node.right ) )
1265 self._codeStream.write(b''.join((opWord, outputRegister.token, leftRegister.token, rightRegister.token, _NULL_REG )))
1266
1267 # Release the leftRegister and rightRegister if they are temporaries and weren't reused.
1268 self._releaseTemp(leftRegister, outputRegister)
1269 self._releaseTemp(rightRegister, outputRegister)
1270 return outputRegister
1271
1272def _call(self: NumExpr, node: ast.AST) -> NumReg:
1273 '''

Callers 2

_compareFunction · 0.85
_boolopFunction · 0.85

Calls 3

_cast2Method · 0.80
_transmit2Method · 0.80
_releaseTempMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…