gtn/.venv/Lib/site-packages/mypyc/primitives/float_ops.py

169 lines
3.7 KiB
Python
Raw Normal View History

"""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,
)