File: C:/Users/fred/anaconda3/Lib/site-packages/numba/tests/doc_examples/test_literally_usage.py
# "magictoken" is used for markers as beginning and ending of example text.
import unittest
from numba.tests.support import captured_stdout
class DocsLiterallyUsageTest(unittest.TestCase):
def test_literally_usage(self):
with captured_stdout() as stdout:
# magictoken.ex_literally_usage.begin
import numba
def power(x, n):
raise NotImplementedError
@numba.extending.overload(power)
def ov_power(x, n):
if isinstance(n, numba.types.Literal):
# only if `n` is a literal
if n.literal_value == 2:
# special case: square
print("square")
return lambda x, n: x * x
elif n.literal_value == 3:
# special case: cubic
print("cubic")
return lambda x, n: x * x * x
else:
# If `n` is not literal, request literal dispatch
return lambda x, n: numba.literally(n)
print("generic")
return lambda x, n: x ** n
@numba.njit
def test_power(x, n):
return power(x, n)
# should print "square" and "9"
print(test_power(3, 2))
# should print "cubic" and "27"
print(test_power(3, 3))
# should print "generic" and "81"
print(test_power(3, 4))
# magictoken.ex_literally_usage.end
assert test_power(3, 2) == 3 ** 2
assert test_power(3, 3) == 3 ** 3
assert test_power(3, 4) == 3 ** 4
self.assertEqual('square\n9\ncubic\n27\ngeneric\n81\n',
stdout.getvalue())
if __name__ == '__main__':
unittest.main()