Skip to content

Commit 135a4f2

Browse files
committed
-
1 parent 93ced0b commit 135a4f2

File tree

2 files changed

+39
-23
lines changed

2 files changed

+39
-23
lines changed

source_py3/python_toolbox/math_tools/factorials.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,23 @@
1111

1212
def factorial(x, start=1):
1313
'''
14+
Calculate a factorial
1415
1516
This differs from the built-in `math.factorial` in that it allows a `start`
16-
argument.
17+
argument. If one is given, the function returns `(x!)/(start!)`.
1718
'''
1819
from python_toolbox import misc_tools
1920
return misc_tools.general_product(range(start, x+1), start=1)
2021

21-
def reverse_factorial(number, round_up=True):
22+
23+
def inverse_factorial(number, round_up=True):
24+
'''
25+
Get the integer that the factorial of would be `number`.
26+
27+
If `number` isn't a factorial of an integer, the result will be rounded. By
28+
default it'll be rounded up, but you can specify `round_up=False` to have
29+
it be rounded down.
30+
'''
2231
assert number >= 0
2332
if number == 0:
2433
return 0
@@ -37,6 +46,13 @@ def reverse_factorial(number, round_up=True):
3746

3847

3948
def from_factoradic(factoradic_number):
49+
'''
50+
Get the integer that the factorial of would be `number`.
51+
52+
If `number` isn't a factorial of an integer, the result will be rounded. By
53+
default it'll be rounded up, but you can specify `round_up=False` to have
54+
it be rounded down.
55+
'''
4056
from python_toolbox import sequence_tools
4157
assert isinstance(factoradic_number, collections.Iterable)
4258
factoradic_number = \
@@ -51,7 +67,7 @@ def from_factoradic(factoradic_number):
5167
def to_factoradic(number, n_digits_pad=None):
5268
assert isinstance(number, int)
5369
assert number >= 0
54-
n_digits = reverse_factorial(number, round_up=False) + 1
70+
n_digits = inverse_factorial(number, round_up=False) + 1
5571
digits = [None] * n_digits
5672
current_number = number
5773
for i in range(n_digits)[::-1]:

source_py3/test_python_toolbox/test_math_tools/test_factorials.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
from python_toolbox.math_tools import (reverse_factorial, from_factoradic,
1+
from python_toolbox.math_tools import (inverse_factorial, from_factoradic,
22
to_factoradic)
33

4-
def test_reverse_factorial():
5-
assert reverse_factorial(0, round_up=True) == 0
6-
assert reverse_factorial(0, round_up=False) == 0
7-
assert reverse_factorial(1, round_up=True) == 1
8-
assert reverse_factorial(1, round_up=False) == 1
9-
assert reverse_factorial(2, round_up=True) == 2
10-
assert reverse_factorial(2, round_up=False) == 2
11-
assert reverse_factorial(6, round_up=True) == 3
12-
assert reverse_factorial(6, round_up=False) == 3
13-
assert reverse_factorial(24, round_up=True) == 4
14-
assert reverse_factorial(24, round_up=False) == 4
4+
def test_inverse_factorial():
5+
assert inverse_factorial(0, round_up=True) == 0
6+
assert inverse_factorial(0, round_up=False) == 0
7+
assert inverse_factorial(1, round_up=True) == 1
8+
assert inverse_factorial(1, round_up=False) == 1
9+
assert inverse_factorial(2, round_up=True) == 2
10+
assert inverse_factorial(2, round_up=False) == 2
11+
assert inverse_factorial(6, round_up=True) == 3
12+
assert inverse_factorial(6, round_up=False) == 3
13+
assert inverse_factorial(24, round_up=True) == 4
14+
assert inverse_factorial(24, round_up=False) == 4
1515

16-
assert reverse_factorial(25, round_up=True) == 5
17-
assert reverse_factorial(25, round_up=False) == 4
18-
assert reverse_factorial(26, round_up=True) == 5
19-
assert reverse_factorial(26, round_up=False) == 4
20-
assert reverse_factorial(0.1, round_up=True) == 1
21-
assert reverse_factorial(0.1, round_up=False) == 0
22-
assert reverse_factorial(1.1, round_up=True) == 2
23-
assert reverse_factorial(1.1, round_up=False) == 1
16+
assert inverse_factorial(25, round_up=True) == 5
17+
assert inverse_factorial(25, round_up=False) == 4
18+
assert inverse_factorial(26, round_up=True) == 5
19+
assert inverse_factorial(26, round_up=False) == 4
20+
assert inverse_factorial(0.1, round_up=True) == 1
21+
assert inverse_factorial(0.1, round_up=False) == 0
22+
assert inverse_factorial(1.1, round_up=True) == 2
23+
assert inverse_factorial(1.1, round_up=False) == 1
2424

2525

2626
def test_factoradics():

0 commit comments

Comments
 (0)