11# Copyright (c) 2023 Diego Gasco (diego.gasco99@gmail.com), Diegomangasco on GitHub
2- """
3- Implementation of dimensionality reduction algorithms.
4-
5- Includes:
6- - Principal Component Analysis (PCA)
7- - Linear Discriminant Analysis (LDA)
8- - Locally Linear Embedding (LLE)
9- - Multidimensional Scaling (MDS)
10- """
112
123"""
134Requirements:
178 - Each column of the features matrix corresponds to a class item
189"""
1910
11+ import doctest
2012import logging
21-
2213import numpy as np
2314import pytest
2415from scipy .linalg import eigh
@@ -419,20 +410,16 @@ def test_linear_discriminant_analysis() -> None:
419410
420411 # Assert that the function raises an AssertionError if dimensions > classes
421412 with pytest .raises (AssertionError ):
422- projected_data = linear_discriminant_analysis (
423- features , labels , classes , dimensions
424- )
425- if isinstance (projected_data , np .ndarray ):
426- raise AssertionError (
427- "Did not raise AssertionError for dimensions > classes"
428- )
413+ linear_discriminant_analysis (features , labels , classes , dimensions )
429414
430415
431416def test_principal_component_analysis () -> None :
432417 """Test function for Principal Component Analysis."""
433418 features = np .array ([[1 , 2 , 3 ], [4 , 5 , 6 ], [7 , 8 , 9 ]])
434419 dimensions = 2
435- expected_output = np .array ([[6.92820323 , 8.66025404 , 10.39230485 ], [3.0 , 3.0 , 3.0 ]])
420+ expected_output = np .array (
421+ [[6.92820323 , 8.66025404 , 10.39230485 ], [3.0 , 3.0 , 3.0 ]]
422+ )
436423
437424 output = principal_component_analysis (features , dimensions )
438425 if not np .allclose (expected_output , output ):
@@ -443,9 +430,10 @@ def test_dimensionality_reduction() -> None:
443430 """Test all dimensionality reduction algorithms."""
444431 print ("Testing all dimensionality reduction algorithms..." )
445432
446- # Create sample data
447- features = np .random .rand (5 , 50 )
448- labels = np .random .randint (0 , 3 , 50 )
433+ # Create sample data using numpy Generator
434+ rng = np .random .default_rng (42 )
435+ features = rng .random ((5 , 50 ))
436+ labels = rng .integers (0 , 3 , 50 )
449437 dimensions = 2
450438
451439 try :
@@ -477,7 +465,5 @@ def test_dimensionality_reduction() -> None:
477465
478466
479467if __name__ == "__main__" :
480- import doctest
481-
482468 doctest .testmod ()
483469 test_dimensionality_reduction ()
0 commit comments