169 lines
3.7 KiB
Python
169 lines
3.7 KiB
Python
|
"""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,
|
||
|
)
|