Skip to content

Added tests to proth_numer.py #12426

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 13 commits into from
1 change: 1 addition & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -719,6 +719,7 @@
* [Pollard Rho](maths/pollard_rho.py)
* [Polynomial Evaluation](maths/polynomial_evaluation.py)
* Polynomials
* [Legendre](maths/polynomials/legendre.py)
* [Single Indeterminate Operations](maths/polynomials/single_indeterminate_operations.py)
* [Power Using Recursion](maths/power_using_recursion.py)
* [Prime Check](maths/prime_check.py)
Expand Down
55 changes: 55 additions & 0 deletions maths/polynomials/legendre.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Imports de bibliothèques standard
from math import factorial

# Imports de bibliothèques tierces
import pytest
from numpy.polynomial import Polynomial


def legendre(n: int) -> list[float]:
"""
Compute the coefficients of the nth Legendre polynomial.

The Legendre polynomials are solutions to Legendre's differential equation
and are widely used in physics and engineering.

Parameters:
n (int): The order of the Legendre polynomial.

Returns:
list[float]: Coefficients of the polynomial in ascending order of powers.
"""
legendre_polynomial = (1 / (factorial(n) * (2**n))) * (Polynomial([-1, 0, 1]) ** n)
return legendre_polynomial.deriv(n).coef.tolist()


def test_legendre_0() -> None:
"""Test the 0th Legendre polynomial."""
assert legendre(0) == [1.0], "The 0th Legendre polynomial should be [1.0]"


def test_legendre_1() -> None:
"""Test the 1st Legendre polynomial."""
assert legendre(1) == [0.0, 1.0], "The 1st Legendre polynomial should be [0.0, 1.0]"


def test_legendre_2() -> None:
"""Test the 2nd Legendre polynomial."""
assert legendre(2) == [-0.5, 0.0, 1.5]
"The 2nd Legendre polynomial should be [-0.5, 0.0, 1.5]"


def test_legendre_3() -> None:
"""Test the 3rd Legendre polynomial."""
assert legendre(3) == [0.0, -1.5, 0.0, 2.5]
"The 3rd Legendre polynomial should be [0.0, -1.5, 0.0, 2.5]"


def test_legendre_4() -> None:
"""Test the 4th Legendre polynomial."""
assert legendre(4) == pytest.approx([0.375, 0.0, -3.75, 0.0, 4.375])
"The 4th Legendre polynomial should be [0.375, 0.0, -3.75, 0.0, 4.375]"


if __name__ == "__main__":
pytest.main()
Loading