# Source code for simplestatistics.statistics.choose

"""
Implements factorial() function.
"""

from .factorial import factorial

[docs]def choose(n, k):
"""
The choose function calculates the binomial coefficient_
as used in combinatorics and other counting problems.

.. _binomial coefficient: https://en.wikipedia.org/wiki/Binomial_coefficient

The binomical coefficient, written as :math:n \\choose k
and often read aloud as ':math:n choose :math:k'
is the answer to the question "how many ways are there to choose
:math:k elements, regardless of their order, from a set of :math:n
elements?".

Equation:
.. math::
\\frac{n!}{k! (n - k)!}

Args:
n: An integer.
k: An integer.

Returns:
An integer.

Examples:

>>> choose(5, 3)
10

>>> choose(2.1, 5)
Traceback (most recent call last):
...
TypeError: choose() expects both n and k to be integers
"""

# choose works with integers
if type(n) is float or type(k) is float:
raise TypeError('choose() expects both n and k to be integers')

numerator = factorial(n)
denomerator = factorial(k) * factorial(n - k)

return(int(numerator / denomerator))