"""Primitive float ops.""" from __future__ import annotations from mypyc.ir.ops import ERR_MAGIC, ERR_MAGIC_OVERLAPPING, ERR_NEVER from mypyc.ir.rtypes import ( bool_rprimitive, float_rprimitive, int_rprimitive, object_rprimitive, str_rprimitive, ) from mypyc.primitives.registry import binary_op, function_op, load_address_op # Get the 'builtins.float' type object. load_address_op(name="builtins.float", type=object_rprimitive, src="PyFloat_Type") binary_op( name="//", arg_types=[float_rprimitive, float_rprimitive], return_type=float_rprimitive, c_function_name="CPyFloat_FloorDivide", error_kind=ERR_MAGIC_OVERLAPPING, ) # float(int) int_to_float_op = function_op( name="builtins.float", arg_types=[int_rprimitive], return_type=float_rprimitive, c_function_name="CPyFloat_FromTagged", error_kind=ERR_MAGIC_OVERLAPPING, ) # float(str) function_op( name="builtins.float", arg_types=[str_rprimitive], return_type=object_rprimitive, c_function_name="PyFloat_FromString", error_kind=ERR_MAGIC, ) # abs(float) function_op( name="builtins.abs", arg_types=[float_rprimitive], return_type=float_rprimitive, c_function_name="fabs", error_kind=ERR_NEVER, ) # math.sin(float) function_op( name="math.sin", arg_types=[float_rprimitive], return_type=float_rprimitive, c_function_name="CPyFloat_Sin", error_kind=ERR_MAGIC_OVERLAPPING, ) # math.cos(float) function_op( name="math.cos", arg_types=[float_rprimitive], return_type=float_rprimitive, c_function_name="CPyFloat_Cos", error_kind=ERR_MAGIC_OVERLAPPING, ) # math.tan(float) function_op( name="math.tan", arg_types=[float_rprimitive], return_type=float_rprimitive, c_function_name="CPyFloat_Tan", error_kind=ERR_MAGIC_OVERLAPPING, ) # math.sqrt(float) function_op( name="math.sqrt", arg_types=[float_rprimitive], return_type=float_rprimitive, c_function_name="CPyFloat_Sqrt", error_kind=ERR_MAGIC_OVERLAPPING, ) # math.exp(float) function_op( name="math.exp", arg_types=[float_rprimitive], return_type=float_rprimitive, c_function_name="CPyFloat_Exp", error_kind=ERR_MAGIC_OVERLAPPING, ) # math.log(float) function_op( name="math.log", arg_types=[float_rprimitive], return_type=float_rprimitive, c_function_name="CPyFloat_Log", error_kind=ERR_MAGIC_OVERLAPPING, ) # math.floor(float) function_op( name="math.floor", arg_types=[float_rprimitive], return_type=int_rprimitive, c_function_name="CPyFloat_Floor", error_kind=ERR_MAGIC, ) # math.ceil(float) function_op( name="math.ceil", arg_types=[float_rprimitive], return_type=int_rprimitive, c_function_name="CPyFloat_Ceil", error_kind=ERR_MAGIC, ) # math.fabs(float) function_op( name="math.fabs", arg_types=[float_rprimitive], return_type=float_rprimitive, c_function_name="fabs", error_kind=ERR_NEVER, ) # math.pow(float, float) pow_op = function_op( name="math.pow", arg_types=[float_rprimitive, float_rprimitive], return_type=float_rprimitive, c_function_name="CPyFloat_Pow", error_kind=ERR_MAGIC_OVERLAPPING, ) # math.copysign(float, float) copysign_op = function_op( name="math.copysign", arg_types=[float_rprimitive, float_rprimitive], return_type=float_rprimitive, c_function_name="copysign", error_kind=ERR_NEVER, ) # math.isinf(float) function_op( name="math.isinf", arg_types=[float_rprimitive], return_type=bool_rprimitive, c_function_name="CPyFloat_IsInf", error_kind=ERR_NEVER, ) # math.isnan(float) function_op( name="math.isnan", arg_types=[float_rprimitive], return_type=bool_rprimitive, c_function_name="CPyFloat_IsNaN", error_kind=ERR_NEVER, )