========================================================================
RIGEL PROFILE REPORT
========================================================================
Platform:   macOS-26.3-arm64-arm-64bit
Python:     3.12.13
Date:       2026-03-24 10:45:16

------------------------------------------------------------------------
Config: default
------------------------------------------------------------------------
  BAM:             /Users/mkiyer/Downloads/rigel_runs/real_bams/mctp_LBX0345_SI_43019_start.str.rmdup.collate.bam
  Index:           /Users/mkiyer/Downloads/rigel_runs/benchmark_pristine_v5_phase3b/rigel_index
  Transcripts:     457,513
  Genes:           63,472

  Wall time:       22.70s
  Peak RSS:        4039 MB
  RSS before:      3111 MB
  RSS after:       4039 MB
  RSS delta:       928 MB

  Fragments:       9,884,574
  Buffered:        1,130,994
  Unique align:    750,259
  Multimapping:    380,735
  Intergenic:      122,545
  gDNA total:      122,545
  Throughput:      435,521 frags/s

  Stage Breakdown:
  Stage                        Time       %  Bar
  ------------------------ --------  ------  ----------------------------------------
  scan_and_buffer            9.124s   40.2%  ████████████████░░░░░░░░░░░░░░░░░░░░░░░░
  finalize_models            0.000s    0.0%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  calibration                2.513s   11.1%  ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  compute_geometry           0.007s    0.0%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  create_estimator           0.002s    0.0%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  fragment_scorer            2.436s   10.7%  ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  fragment_router_scan       0.294s    1.3%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  build_loci                 2.212s    9.7%  ███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  eb_gdna_priors             2.394s   10.5%  ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  locus_em                   3.715s   16.4%  ██████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  TOTAL                     22.696s

  Locus EM sub-stages:
    build_locus_em_data: 0.000s
    run_locus_em:        3.715s
    assign_posteriors:   0.000s
    Loci:                12,216
    Max transcripts:     162,574
    Max units:           510,690

  Top-3 hotspots:
    1. scan_and_buffer: 9.124s (40.2%)
    2. locus_em: 3.715s (16.4%)
    3. calibration: 2.513s (11.1%)

  RSS Memory Snapshots (MB):
    before                       3111 MB
    after_scan                   3558 MB
    after_finalize               3558 MB
    after_calibration            3807 MB
    after_router_scan            4039 MB
    after_buffer_release         4039 MB
    after_locus_em               4039 MB
    after_cleanup                4039 MB


========================================================================
cProfile: default
========================================================================
========================================================================
Top 60 by cumulative time
========================================================================
         12514596 function calls (12514457 primitive calls) in 23.485 seconds

   Ordered by: cumulative time
   List reduced from 587 to 60 due to restriction <60>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
  214/134    0.478    0.002   24.483    0.183 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:637(wait)
      214    0.497    0.002   20.990    0.098 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:323(wait)
      854   13.696    0.016   16.505    0.019 {method 'acquire' of '_thread.lock' objects}
   568129    0.928    0.000    5.750    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/arrow/array.py:722(__getitem__)
    69022    0.269    0.000    5.318    0.000 /Users/mkiyer/proj/rigel/src/rigel/locus.py:33(_merged_intervals)
    34511    0.046    0.000    2.801    0.000 /Users/mkiyer/proj/rigel/src/rigel/locus.py:116(<genexpr>)
    12225    0.006    0.000    2.696    0.000 {built-in method builtins.sum}
    24432    0.053    0.000    2.447    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/arrow/array.py:1539(take)
    24432    2.209    0.000    2.213    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/compute.py:467(take)
       20    0.070    0.003    1.481    0.074 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:424(estimate_kappa_marginal)
   457516    0.118    0.000    1.430    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2838(cumsum)
       20    0.000    0.000    1.405    0.070 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:77(_bounded_max)
       20    0.000    0.000    1.405    0.070 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/scipy/optimize/_minimize.py:831(minimize_scalar)
      363    0.009    0.000    1.383    0.004 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:84(<lambda>)
      363    1.369    0.004    1.374    0.004 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:492(_marginal_loglik)
        1    0.015    0.015    1.235    1.235 /Users/mkiyer/proj/rigel/src/rigel/locus.py:71(build_loci)
  218/216    0.040    0.000    0.978    0.005 /Users/mkiyer/proj/rigel/scripts/profiler.py:184(_snap_rss_current)
       20    0.002    0.000    0.974    0.049 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/scipy/optimize/_optimize.py:2289(_minimize_scalar_bounded)
        1    0.688    0.688    0.688    0.688 {built-in method gc.collect}
   457663    0.155    0.000    0.668    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:48(_wrapfunc)
   457516    0.466    0.000    0.466    0.000 {method 'cumsum' of 'numpy.ndarray' objects}
       20    0.096    0.005    0.390    0.019 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:746(_e_step)
   568129    0.158    0.000    0.255    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/indexers/utils.py:441(check_array_indexer)
       41    0.204    0.005    0.220    0.005 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:511(build_gdna_fl_model)
       19    0.192    0.010    0.205    0.011 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:895(_m_step)
  1372549    0.203    0.000    0.203    0.000 {method 'tolist' of 'numpy.ndarray' objects}
2445619/2445617    0.167    0.000    0.178    0.000 {built-in method builtins.isinstance}
       20    0.173    0.009    0.178    0.009 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:361(_compute_strand_llr_betabinom)
    24536    0.118    0.000    0.118    0.000 {built-in method numpy.asarray}
   457513    0.071    0.000    0.114    0.000 /Users/mkiyer/proj/rigel/src/rigel/index.py:1181(get_exon_intervals)
    24432    0.014    0.000    0.110    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/string_arrow.py:161(_from_pyarrow_array)
        1    0.000    0.000    0.096    0.096 /Users/mkiyer/proj/rigel/src/rigel/pipeline.py:182(scan_and_buffer)
    24436    0.046    0.000    0.095    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/string_arrow.py:133(__init__)
    49834    0.066    0.000    0.066    0.000 {method 'reduce' of 'numpy.ufunc' objects}
       20    0.061    0.003    0.066    0.003 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:602(_compute_density_llr_gaussian)
   482287    0.037    0.000    0.059    0.000 {built-in method builtins.getattr}
       20    0.032    0.002    0.058    0.003 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:843(_compute_fl_llr)
   511417    0.052    0.000    0.055    0.000 {built-in method builtins.max}
        1    0.002    0.002    0.048    0.048 /Users/mkiyer/proj/rigel/src/rigel/locus.py:396(compute_gdna_locus_gammas)
    24432    0.015    0.000    0.044    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/dtypes/common.py:1392(is_bool_dtype)
   457766    0.043    0.000    0.043    0.000 {method 'get' of 'dict' objects}
        2    0.011    0.006    0.041    0.020 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/functools.py:982(__get__)
   556142    0.039    0.000    0.039    0.000 {method 'append' of 'list' objects}
604484/604432    0.038    0.000    0.038    0.000 {built-in method builtins.len}
    24432    0.006    0.000    0.035    0.000 {method 'max' of 'numpy.ndarray' objects}
   543702    0.034    0.000    0.034    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/types.py:272(is_timestamp)
   543702    0.032    0.000    0.032    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/types.py:277(is_duration)
    24432    0.010    0.000    0.032    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/dtypes/common.py:728(is_integer_dtype)
    24436    0.015    0.000    0.031    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/arrow/array.py:310(__init__)
    24539    0.006    0.000    0.029    0.000 {method 'any' of 'numpy.ndarray' objects}
    24432    0.004    0.000    0.029    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/_methods.py:39(_amax)
    24914    0.028    0.000    0.028    0.000 {method 'sort' of 'list' objects}
        1    0.000    0.000    0.028    0.028 /Users/mkiyer/proj/rigel/src/rigel/pipeline.py:114(_replay_fraglen_observations)
        2    0.008    0.004    0.027    0.013 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/string_.py:435(tolist)
        8    0.000    0.000    0.025    0.003 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:254(to_scoring_arrays)
      163    0.025    0.000    0.025    0.000 {method 'astype' of 'numpy.ndarray' objects}
   457516    0.023    0.000    0.023    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2834(_cumsum_dispatcher)
    24540    0.004    0.000    0.023    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/_methods.py:55(_any)
        8    0.020    0.002    0.022    0.003 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:224(fragment_classes)
        1    0.008    0.008    0.021    0.021 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:632(_seed_initial_partition)



========================================================================
Top 60 by self time
========================================================================
         12514596 function calls (12514457 primitive calls) in 23.485 seconds

   Ordered by: internal time
   List reduced from 587 to 60 due to restriction <60>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      854   13.696    0.016   16.505    0.019 {method 'acquire' of '_thread.lock' objects}
    24432    2.209    0.000    2.213    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/compute.py:467(take)
      363    1.369    0.004    1.374    0.004 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:492(_marginal_loglik)
   568129    0.928    0.000    5.750    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/arrow/array.py:722(__getitem__)
        1    0.688    0.688    0.688    0.688 {built-in method gc.collect}
      214    0.497    0.002   20.990    0.098 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:323(wait)
  214/134    0.478    0.002   24.483    0.183 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:637(wait)
   457516    0.466    0.000    0.466    0.000 {method 'cumsum' of 'numpy.ndarray' objects}
    69022    0.269    0.000    5.318    0.000 /Users/mkiyer/proj/rigel/src/rigel/locus.py:33(_merged_intervals)
       41    0.204    0.005    0.220    0.005 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:511(build_gdna_fl_model)
  1372549    0.203    0.000    0.203    0.000 {method 'tolist' of 'numpy.ndarray' objects}
       19    0.192    0.010    0.205    0.011 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:895(_m_step)
       20    0.173    0.009    0.178    0.009 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:361(_compute_strand_llr_betabinom)
2445619/2445617    0.167    0.000    0.178    0.000 {built-in method builtins.isinstance}
   568129    0.158    0.000    0.255    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/indexers/utils.py:441(check_array_indexer)
   457663    0.155    0.000    0.668    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:48(_wrapfunc)
    24536    0.118    0.000    0.118    0.000 {built-in method numpy.asarray}
   457516    0.118    0.000    1.430    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2838(cumsum)
       20    0.096    0.005    0.390    0.019 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:746(_e_step)
   457513    0.071    0.000    0.114    0.000 /Users/mkiyer/proj/rigel/src/rigel/index.py:1181(get_exon_intervals)
       20    0.070    0.003    1.481    0.074 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:424(estimate_kappa_marginal)
    49834    0.066    0.000    0.066    0.000 {method 'reduce' of 'numpy.ufunc' objects}
       20    0.061    0.003    0.066    0.003 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:602(_compute_density_llr_gaussian)
    24432    0.053    0.000    2.447    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/arrow/array.py:1539(take)
   511417    0.052    0.000    0.055    0.000 {built-in method builtins.max}
    34511    0.046    0.000    2.801    0.000 /Users/mkiyer/proj/rigel/src/rigel/locus.py:116(<genexpr>)
    24436    0.046    0.000    0.095    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/string_arrow.py:133(__init__)
   457766    0.043    0.000    0.043    0.000 {method 'get' of 'dict' objects}
  218/216    0.040    0.000    0.978    0.005 /Users/mkiyer/proj/rigel/scripts/profiler.py:184(_snap_rss_current)
   556142    0.039    0.000    0.039    0.000 {method 'append' of 'list' objects}
604484/604432    0.038    0.000    0.038    0.000 {built-in method builtins.len}
   482287    0.037    0.000    0.059    0.000 {built-in method builtins.getattr}
   543702    0.034    0.000    0.034    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/types.py:272(is_timestamp)
   543702    0.032    0.000    0.032    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/types.py:277(is_duration)
       20    0.032    0.002    0.058    0.003 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:843(_compute_fl_llr)
    24914    0.028    0.000    0.028    0.000 {method 'sort' of 'list' objects}
      163    0.025    0.000    0.025    0.000 {method 'astype' of 'numpy.ndarray' objects}
   457516    0.023    0.000    0.023    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2834(_cumsum_dispatcher)
      140    0.021    0.000    0.021    0.000 {built-in method numpy.zeros}
   457514    0.020    0.000    0.020    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/multiarray.py:197(concatenate)
       20    0.020    0.001    0.020    0.001 {method 'at' of 'numpy.ufunc' objects}
        8    0.020    0.002    0.022    0.003 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:224(fragment_classes)
        5    0.019    0.004    0.019    0.004 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/arrow/array.py:1671(to_numpy)
        1    0.016    0.016    0.019    0.019 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:190(compute_region_stats)
    24432    0.015    0.000    0.044    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/dtypes/common.py:1392(is_bool_dtype)
        1    0.015    0.015    0.015    0.015 {method 'clear' of 'list' objects}
        1    0.015    0.015    0.015    0.015 /Users/mkiyer/proj/rigel/src/rigel/estimator.py:211(run_batch_locus_em)
    24436    0.015    0.000    0.031    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/arrow/array.py:310(__init__)
        1    0.015    0.015    1.235    1.235 /Users/mkiyer/proj/rigel/src/rigel/locus.py:71(build_loci)
        1    0.015    0.015    0.015    0.015 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/feather.py:230(read_table)
    24432    0.014    0.000    0.110    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/string_arrow.py:161(_from_pyarrow_array)
        1    0.011    0.011    0.011    0.011 /Users/mkiyer/proj/rigel/src/rigel/index.py:660(region_cr)
        2    0.011    0.006    0.041    0.020 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/functools.py:982(__get__)
        2    0.010    0.005    0.010    0.005 {method 'searchsorted' of 'numpy.ndarray' objects}
    24432    0.010    0.000    0.032    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/dtypes/common.py:728(is_integer_dtype)
    24436    0.010    0.000    0.012    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/dtypes/dtypes.py:2193(__init__)
      363    0.009    0.000    1.383    0.004 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:84(<lambda>)
        1    0.008    0.008    0.021    0.021 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:632(_seed_initial_partition)
    24437    0.008    0.000    0.008    0.000 {method 'copy' of 'numpy.ndarray' objects}
        2    0.008    0.004    0.027    0.013 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/string_.py:435(tolist)



Total function calls: 12,514,457