small_parsimony_test.py
High-level description
This file contains unit tests for the small_parsimony.py
module in Cassiopeia. The tests cover functions related to small parsimony inference on phylogenetic trees, including Fitch-Hartigan reconstruction, parsimony scoring, and the FitchCount algorithm.
Code Structure
The code defines a single test class TestSmallParsimony
that inherits from unittest.TestCase
. This class contains multiple test methods, each testing a specific function or aspect of the small_parsimony
module. The test methods use various assertions provided by the unittest
framework to check for expected outcomes.
References
This test file references the following symbols from the cassiopeia.tools.small_parsimony
module:
fitch_hartigan_bottom_up
fitch_hartigan_top_down
fitch_hartigan
score_small_parsimony
fitch_count
Symbols
TestSmallParsimony
Description
This class contains unit tests for functions in the cassiopeia.tools.small_parsimony
module. It sets up two test trees, a binary tree and a general tree, with associated character data, to be used in the test cases.
Inputs
None
Outputs
None
Internal Logic
The class defines several test methods, each testing a specific function or aspect of the small_parsimony
module. Each test method sets up the necessary input data and calls the function being tested. Assertions are then used to verify that the function behaves as expected.
test_fitch_hartigan_bottom_up
Description
Tests the fitch_hartigan_bottom_up
function, which performs the bottom-up phase of the Fitch-Hartigan algorithm.
Inputs
Uses the self.binary_tree
object as input.
Outputs
None
Internal Logic
- Checks for expected errors when invalid input is provided.
- Runs the
fitch_hartigan_bottom_up
function on the binary tree. - Verifies that the correct ancestral state sets are assigned to each node.
- Tests the function with different
add_key
parameters.
test_fitch_hartigan_top_down
Description
Tests the fitch_hartigan_top_down
function, which performs the top-down refinement step of the Fitch-Hartigan algorithm.
Inputs
Uses the self.binary_tree
object as input.
Outputs
None
Internal Logic
- Runs the
fitch_hartigan_bottom_up
function to initialize ancestral state sets. - Runs the
fitch_hartigan_top_down
function on the binary tree. - Verifies that the correct character states are assigned to each node.
- Tests the function with different
label_key
parameters.
test_fitch_hartigan
Description
Tests the fitch_hartigan
function, which combines the bottom-up and top-down steps of the Fitch-Hartigan algorithm.
Inputs
Uses the self.binary_tree
object as input.
Outputs
None
Internal Logic
- Runs the
fitch_hartigan
function on the binary tree. - Verifies that the correct character states are assigned to each node.
test_score_parsimony
Description
Tests the score_small_parsimony
function, which calculates the parsimony score of a tree.
Inputs
Uses the self.binary_tree
object as input.
Outputs
None
Internal Logic
- Checks for expected errors when invalid input is provided.
- Runs the
score_small_parsimony
function with and without ancestral state inference. - Verifies that the calculated parsimony score is correct in both cases.
test_general_tree_fitch_bottom_up
Description
Tests the fitch_hartigan_bottom_up
function on a general (non-binary) tree.
Inputs
Uses the self.general_tree
object as input.
Outputs
None
Internal Logic
- Runs the
fitch_hartigan_bottom_up
function on the general tree. - Verifies that the correct ancestral state sets are assigned to each node.
test_general_tree_fitch_hartigan
Description
Tests the fitch_hartigan
function on a general (non-binary) tree.
Inputs
Uses the self.general_tree
object as input.
Outputs
None
Internal Logic
- Runs the
fitch_hartigan
function on the general tree. - Verifies that the correct character states are assigned to each node.
test_general_tree_parsimony
Description
Tests the score_small_parsimony
function on a general (non-binary) tree.
Inputs
Uses the self.general_tree
object as input.
Outputs
None
Internal Logic
- Runs the
score_small_parsimony
function on the general tree. - Verifies that the calculated parsimony score is correct.
test_fitch_count_basic_binary
Description
Tests the fitch_count
function on a basic binary tree.
Inputs
Uses the self.binary_tree
object as input.
Outputs
None
Internal Logic
- Runs the
fitch_count
function on the binary tree. - Verifies that the resulting count matrix has the correct dimensions and values.
- Tests the function with and without pre-computed ancestral states.
test_fitch_count_basic_binary_custom_state_space
Description
Tests the fitch_count
function with a custom state space.
Inputs
Uses the self.binary_tree
object as input.
Outputs
None
Internal Logic
- Runs the
fitch_count
function with a specified state space. - Verifies that the resulting count matrix has the correct dimensions and values.
- Checks for expected errors when an invalid state space is provided.
test_fitch_count_basic_binary_internal_node
Description
Tests the fitch_count
function with a specified root node.
Inputs
Uses the self.binary_tree
object as input.
Outputs
None
Internal Logic
- Runs the
fitch_count
function with a specified root node. - Verifies that the resulting count matrix has the correct dimensions and values.
test_fitch_count_general_tree
Description
Tests the fitch_count
function on a general (non-binary) tree.
Inputs
Uses the self.general_tree
object as input.
Outputs
None
Internal Logic
- Runs the
fitch_count
function on the general tree. - Verifies that the resulting count matrix has the correct dimensions and values.
Dependencies
unittest
networkx
numpy
pandas
cassiopeia
Error Handling
The test methods use assertions provided by the unittest
framework to check for expected errors. For example, the assertRaises
method is used to verify that a specific exception is raised when invalid input is provided to a function.