Source code for warg.math_utilities.ordinals
#!/usr/bin/env python3
import math
from warg.typing_extension import Number
__all__ = [
"ceil_odd",
"ceil_even",
"floor_even",
"floor_odd",
"next_even",
"next_odd",
"prev_even",
"prev_odd",
]
import logging
_logger = logging.getLogger(__name__)
[docs]
def ceil_even(v: Number) -> Number:
"""
:param v:
:type v:
:return:
:rtype:
"""
return math.ceil(v / 2.0) * 2
[docs]
def floor_even(v: Number) -> Number:
"""
:param v:
:type v:
:return:
:rtype:
"""
return math.floor(v / 2.0) * 2
[docs]
def ceil_odd(v: Number) -> Number:
"""
:param v:
:type v:
:return:
:rtype:
"""
return math.ceil(v) // 2 * 2 + 1
[docs]
def floor_odd(v: Number) -> Number:
"""
:param v:
:type v:
:return:
:rtype:
"""
v = math.floor(v)
return v + v % 2 - 1
[docs]
def next_even(v: Number) -> Number:
"""
:param v:
:type v:
:return:
:rtype:
"""
return floor_even(v) + 2
[docs]
def next_odd(v: Number) -> Number:
"""
:param v:
:type v:
:return:
:rtype:
"""
return floor_odd(v) + 2
[docs]
def prev_even(v: Number) -> Number:
"""
:param v:
:type v:
:return:
:rtype:
"""
return ceil_even(v) - 2
[docs]
def prev_odd(v: Number) -> Number:
"""
:param v:
:type v:
:return:
:rtype:
"""
return ceil_odd(v) - 2
if __name__ == "__main__":
from warg.ast_ops import cprint
import numpy
for a in numpy.arange(-1.0, 10.0, 0.5):
cprint(a)
for f in (
ceil_odd,
ceil_even,
floor_even,
floor_odd,
next_even,
next_odd,
prev_even,
prev_odd,
):
_logger.info(f.__name__, f(a))