> ## Documentation Index
> Fetch the complete documentation index at: https://demo.agenticlabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# birth_death_simulator_test.py

Here's a documentation of the target file:

## High-level description

This file contains unit tests for the BirthDeathFitnessSimulator class in Cassiopeia. It tests various aspects of the simulator, including error handling, basic functionality, and more complex scenarios involving birth, death, and fitness mutations.

## Code Structure

The main class `BirthDeathSimulatorTest` inherits from `unittest.TestCase` and contains multiple test methods. Each method tests a specific aspect or scenario of the BirthDeathFitnessSimulator.

## Symbols

### `BirthDeathSimulatorTest`

#### Description

A test class that contains various unit tests for the BirthDeathFitnessSimulator class.

#### Internal Logic

The class sets up a character matrix and priors in the `setUp` method, which are used in some of the tests. It then defines multiple test methods, each focusing on a specific aspect of the simulator's functionality.

### `test_bad_waiting_distributions`

#### Description

Tests that the simulator raises appropriate errors when invalid waiting time distributions are provided.

#### Internal Logic

Creates BirthDeathFitnessSimulator instances with invalid parameters and asserts that TreeSimulatorError is raised in each case.

### `test_bad_stopping_conditions`

#### Description

Ensures that the simulator raises errors when invalid stopping conditions are given.

#### Internal Logic

Creates BirthDeathFitnessSimulator instances with various invalid stopping conditions and asserts that TreeSimulatorError is raised in each case.

### `test_dead_at_start`

#### Description

Tests that the simulator raises an error when all lineages die on the first event.

#### Internal Logic

Creates BirthDeathFitnessSimulator instances with parameters that would cause immediate death of all lineages and asserts that TreeSimulatorError is raised.

### `test_dead_before_end`

#### Description

Ensures that the simulator raises an error when all lineages die before the stopping condition is met.

#### Internal Logic

Creates BirthDeathFitnessSimulator instances with parameters that would cause all lineages to die before the stopping condition and asserts that TreeSimulatorError is raised.

### `test_single_lineage`

#### Description

Tests the base case where stopping conditions are met before any divisions occur.

#### Internal Logic

Creates BirthDeathFitnessSimulator instances with parameters that result in a single lineage and verifies the resulting tree structure.

### `test_constant_yule`

#### Description

Tests a small case without death and with constant waiting times.

#### Internal Logic

Creates BirthDeathFitnessSimulator instances with constant birth rates and no death, and verifies the resulting tree structure.

### `test_nonconstant_yule`

#### Description

Tests a case without death but with variable waiting times.

#### Internal Logic

Creates BirthDeathFitnessSimulator instances with variable birth rates and no death, and verifies the resulting tree structure.

### `test_nonconstant_birth_death`

#### Description

Tests a case with variable birth and death waiting times, including pruning of dead lineages and collapsing of unifurcations.

#### Internal Logic

Creates BirthDeathFitnessSimulator instances with variable birth and death rates, and verifies the resulting tree structure, including the absence of certain nodes due to pruning and collapsing.

### `test_nonconstant_birth_death_no_unifurcation_collapsing`

#### Description

Tests a case with variable birth and death waiting times, but without collapsing unifurcations.

#### Internal Logic

Similar to the previous test, but with `collapse_unifurcations=False`, and verifies that certain nodes are present in the resulting tree.

### `test_nonconstant_birth_death_both_stopping_conditions`

#### Description

Tests a case with variable birth and death waiting times, using both stopping conditions (number of extant nodes and experiment time).

#### Internal Logic

Creates BirthDeathFitnessSimulator instances with both stopping conditions and verifies the resulting tree structure under different scenarios.

### `test_nonconstant_yule_with_predictable_fitness`

#### Description

Tests a case with birth and death with constant fitness.

#### Internal Logic

Creates a BirthDeathFitnessSimulator with predictable fitness mutations and verifies that the fitness values in the resulting tree match the expected values.

### `test_nonconstant_birth_death_with_variable_fitness`

#### Description

Tests a case with variable birth and death waiting times, as well as variable fitness evolution.

#### Internal Logic

Creates a BirthDeathFitnessSimulator with variable fitness mutations and verifies the resulting tree structure.

### `test_no_initial_birth_scale`

#### Description

Tests the simulator's behavior when initializing with a tree that doesn't have default initial birth scales.

#### Internal Logic

Creates an initial tree without birth scales, initializes a BirthDeathFitnessSimulator with this tree, and verifies that the resulting tree has the correct number of leaves and birth scales.

### `test_birth_scale`

#### Description

Tests that the birth scales are correctly maintained when initializing the simulator with an existing tree.

#### Internal Logic

Creates an initial tree using the simulator, then uses this tree to initialize another simulation, and verifies that the birth scales are correctly maintained in the final tree.

## Dependencies

* unittest
* networkx
* numpy
* pandas
* cassiopeia.data.CassiopeiaTree
* cassiopeia.mixins.TreeSimulatorError
* cassiopeia.simulator.BirthDeathFitnessSimulator
* cassiopeia.data.utilities

## Error Handling

The test cases use `assertRaises` to check for expected exceptions in various scenarios, such as invalid input parameters or unexpected simulation outcomes.

## TODOs

There are no explicit TODOs in the code.
