crisprzip.matrix_expon module

Perform fast and parallel matrix exponentiation.

crisprzip.matrix_expon.exponentiate_fast(matrix: ndarray, time: ndarray) ndarray

Fast method to calculate exp(M * t), via diagonalizing the matrix M. Uses Numba’s just-in-time compilation for performance optimization.

Parameters:
  • matrix (numpy.ndarray, (N, N)) – The input matrix to exponentiate.

  • time (numpy.ndarray, (T,)) – A 1D array of time values at which to calculate the exponentiation.

Returns:

exp_matrix – The resulting matrix exponentiation at each time step. Returns None if: - Matrix is singular - Matrix has complex eigenvalues - Overflow occurs in the exponential function - Resulting matrix contains negative terms.

Return type:

numpy.ndarray, (N, T, N)

crisprzip.matrix_expon.exponentiate_fast_var_onrate(ref_matrix: ndarray, time: float, on_rates: ndarray) ndarray

Compute exp(M * t) for varying on-rates using diagonalization.

Parameters:
  • ref_matrix (numpy.ndarray, (N, N)) – The reference transition rate matrix.

  • time (float) – The time at which the exponentiation is evaluated.

  • on_rates (numpy.ndarray, (K,)) – A 1D array of varying on-rates to update the reference matrix.

Returns:

exp_matrix – The resulting matrix exponentiation for each on_rates value. Returns None if diagonalization fails or produces invalid results.

Return type:

numpy.ndarray, (N, K, N)

crisprzip.matrix_expon.exponentiate_iterative(matrix: ndarray, time: ndarray) ndarray

Iteratively compute exp(M * t) using scipy.linalg.expm.

Parameters:
  • matrix (numpy.ndarray, (N, N)) – The input matrix to exponentiate.

  • time (numpy.ndarray, (T,)) – A 1D array of time values at which to calculate the exponentiation.

Returns:

exp_matrix – The resulting matrix exponentiation at each time step.

Return type:

numpy.ndarray, (N, T, N)

crisprzip.matrix_expon.exponentiate_iterative_var_onrate(ref_matrix: ndarray, time: float, on_rates: ndarray) ndarray

Iteratively compute exp(M * t) for varying on-rates using scipy.linalg.expm.

Parameters:
  • ref_matrix (numpy.ndarray, (N, N)) – The reference transition rate matrix.

  • time (float) – The time at which the exponentiation is evaluated.

  • on_rates (numpy.ndarray, (K,)) – A 1D array of varying on-rates to update the reference matrix.

Returns:

exp_matrix – The resulting matrix exponentiation for each value in on-rates.

Return type:

numpy.ndarray, (N, K, N)

crisprzip.matrix_expon.update_rate_matrix(ref_rate_matrix: ndarray, on_rate: float) ndarray

Update a reference rate matrix with a specific on-rate.

Parameters:
  • ref_rate_matrix (numpy.ndarray, (N, N)) – The reference transition rate matrix.

  • on_rate (float) – The rate of transition to update in the matrix.

Returns:

rate_matrix – A copy of the reference rate matrix with the on_rates value updated.

Return type:

numpy.ndarray, (N, N)