========================================================================
RIGEL PROFILE REPORT
========================================================================
Platform:   macOS-26.3-arm64-arm-64bit
Python:     3.12.13
Date:       2026-03-24 11:40:46

------------------------------------------------------------------------
Config: default
------------------------------------------------------------------------
  BAM:             /Users/mkiyer/Downloads/rigel_runs/sim_ccle_hela_salmon/gdna_high_ss_0.90_nrna_default/align_minimap2/reads_namesort.bam
  Index:           /Users/mkiyer/Downloads/rigel_runs/benchmark_pristine_v5_phase3b/rigel_index
  Transcripts:     457,513
  Genes:           63,472

  Wall time:       205.62s
  Peak RSS:        15810 MB
  RSS before:      3063 MB
  RSS after:       15810 MB
  RSS delta:       12747 MB

  Fragments:       42,036,167
  Buffered:        14,732,713
  Unique align:    13,145,960
  Multimapping:    1,586,753
  Intergenic:      1,734,280
  gDNA total:      1,734,280
  Throughput:      204,434 frags/s

  Stage Breakdown:
  Stage                        Time       %  Bar
  ------------------------ --------  ------  ----------------------------------------
  scan_and_buffer           93.077s   45.3%  ██████████████████░░░░░░░░░░░░░░░░░░░░░░
  finalize_models            0.000s    0.0%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  calibration               14.106s    6.9%  ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  compute_geometry           0.007s    0.0%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  create_estimator           0.005s    0.0%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  fragment_scorer            0.987s    0.5%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  fragment_router_scan       6.352s    3.1%  █░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  build_loci                 0.788s    0.4%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  eb_gdna_priors             0.318s    0.2%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  locus_em                  89.983s   43.8%  █████████████████░░░░░░░░░░░░░░░░░░░░░░░
  TOTAL                    205.622s

  Locus EM sub-stages:
    build_locus_em_data: 0.000s
    run_locus_em:        89.983s
    assign_posteriors:   0.000s
    Loci:                12,402
    Max transcripts:     376,144
    Max units:           12,393,179

  Top-3 hotspots:
    1. scan_and_buffer: 93.077s (45.3%)
    2. locus_em: 89.983s (43.8%)
    3. calibration: 14.106s (6.9%)

  RSS Memory Snapshots (MB):
    before                       3063 MB
    after_scan                   9394 MB
    after_finalize               9394 MB
    after_calibration            9394 MB
    after_router_scan           13422 MB
    after_buffer_release        13422 MB
    after_locus_em              15810 MB
    after_cleanup               15810 MB


========================================================================
cProfile: default
========================================================================
========================================================================
Top 60 by cumulative time
========================================================================
         2317214 function calls (2316283 primitive calls) in 206.459 seconds

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

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
1902/1031    0.369    0.000  229.165    0.222 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:637(wait)
     1902    0.695    0.000  216.031    0.114 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:323(wait)
7608/7606  188.608    0.025  193.355    0.025 {method 'acquire' of '_thread.lock' objects}
       16    0.192    0.012    9.159    0.572 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:424(estimate_kappa_marginal)
       16    0.000    0.000    8.959    0.560 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:77(_bounded_max)
       16    0.001    0.000    8.658    0.541 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/scipy/optimize/_minimize.py:831(minimize_scalar)
      283    0.072    0.000    8.005    0.028 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:84(<lambda>)
      283    7.616    0.027    7.933    0.028 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:492(_marginal_loglik)
1906/1904    0.449    0.000    3.496    0.002 /Users/mkiyer/proj/rigel/scripts/profiler.py:184(_snap_rss_current)
       24    0.002    0.000    2.112    0.088 /Users/mkiyer/proj/rigel/src/rigel/pipeline.py:260(_on_chunk)
       24    0.000    0.000    2.093    0.087 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:543(inject_chunk)
       24    0.051    0.002    2.093    0.087 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:531(_accept_chunk)
       33    1.285    0.039    1.487    0.045 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:511(build_gdna_fl_model)
       92    1.324    0.014    1.324    0.014 {built-in method numpy.asarray}
       16    0.001    0.000    0.982    0.061 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/scipy/optimize/_optimize.py:2289(_minimize_scalar_bounded)
       15    0.004    0.000    0.787    0.052 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:553(_spill_oldest)
       15    0.000    0.000    0.782    0.052 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:309(_spill_chunk)
       15    0.782    0.052    0.782    0.052 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/feather.py:115(write_feather)
       25    0.021    0.001    0.740    0.030 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:597(iter_chunks)
       15    0.165    0.011    0.719    0.048 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:355(_load_chunk)
        1    0.700    0.700    0.700    0.700 {built-in method gc.collect}
   227982    0.055    0.000    0.692    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2838(cumsum)
       16    0.121    0.008    0.638    0.040 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:746(_e_step)
       16    0.545    0.034    0.547    0.034 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:361(_compute_strand_llr_betabinom)
       16    0.220    0.014    0.543    0.034 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:843(_compute_fl_llr)
       16    0.526    0.033    0.526    0.033 {method 'at' of 'numpy.ufunc' objects}
       16    0.506    0.032    0.506    0.032 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/feather.py:230(read_table)
      342    0.469    0.001    0.469    0.001 {method 'astype' of 'numpy.ndarray' objects}
   228101    0.046    0.000    0.238    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:48(_wrapfunc)
       15    0.165    0.011    0.195    0.013 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:895(_m_step)
        1    0.188    0.188    0.188    0.188 {method 'argsort' of 'numpy.ndarray' objects}
   227982    0.164    0.000    0.164    0.000 {method 'cumsum' of 'numpy.ndarray' objects}
      407    0.001    0.000    0.131    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2304(sum)
      407    0.106    0.000    0.129    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:66(_wrapreduction)
       24    0.000    0.000    0.093    0.004 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:254(to_scoring_arrays)
        1    0.002    0.002    0.091    0.091 /Users/mkiyer/proj/rigel/src/rigel/scoring.py:121(from_models)
        1    0.085    0.085    0.089    0.089 /Users/mkiyer/proj/rigel/src/rigel/index.py:1199(build_exon_csr)
       16    0.082    0.005    0.086    0.005 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:602(_compute_density_llr_gaussian)
        1    0.071    0.071    0.085    0.085 /Users/mkiyer/proj/rigel/src/rigel/locus.py:30(build_loci)
      770    0.084    0.000    0.084    0.000 {method 'reduce' of 'numpy.ufunc' objects}
        1    0.026    0.026    0.084    0.084 /Users/mkiyer/proj/rigel/src/rigel/frag_length_model.py:529(observe_batch)
        1    0.000    0.000    0.080    0.080 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:547(release)
       24    0.058    0.002    0.076    0.003 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:224(fragment_classes)
        1    0.069    0.069    0.069    0.069 {method 'clear' of 'list' objects}
        1    0.014    0.014    0.066    0.066 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:632(_seed_initial_partition)
        6    0.066    0.011    0.066    0.011 /Users/mkiyer/proj/rigel/src/rigel/frag_length_model.py:149(observe_batch)
    24989    0.063    0.000    0.063    0.000 {method 'copy' of 'numpy.ndarray' objects}
   228279    0.016    0.000    0.062    0.000 {built-in method builtins.getattr}
        2    0.012    0.006    0.062    0.031 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/functools.py:982(__get__)
        1    0.001    0.001    0.060    0.060 /Users/mkiyer/proj/rigel/src/rigel/pipeline.py:95(_replay_strand_observations)
      214    0.000    0.000    0.055    0.000 {method 'sum' of 'numpy.ndarray' objects}
      214    0.000    0.000    0.055    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/_methods.py:47(_sum)
977449/977398    0.038    0.000    0.038    0.000 {built-in method builtins.len}
        1    0.035    0.035    0.035    0.035 /Users/mkiyer/proj/rigel/src/rigel/index.py:660(region_cr)
       10    0.029    0.003    0.029    0.003 {method 'tolist' of 'numpy.ndarray' objects}
        2    0.008    0.004    0.026    0.013 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/string_.py:435(tolist)
        6    0.025    0.004    0.025    0.004 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/arrow/array.py:1671(to_numpy)
      117    0.020    0.000    0.020    0.000 {built-in method numpy.zeros}
        1    0.014    0.014    0.018    0.018 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:190(compute_region_stats)
       24    0.000    0.000    0.017    0.001 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:148(from_raw)



========================================================================
Top 60 by self time
========================================================================
         2317214 function calls (2316283 primitive calls) in 206.459 seconds

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

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
7608/7606  188.608    0.025  193.355    0.025 {method 'acquire' of '_thread.lock' objects}
      283    7.616    0.027    7.933    0.028 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:492(_marginal_loglik)
       92    1.324    0.014    1.324    0.014 {built-in method numpy.asarray}
       33    1.285    0.039    1.487    0.045 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:511(build_gdna_fl_model)
       15    0.782    0.052    0.782    0.052 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/feather.py:115(write_feather)
        1    0.700    0.700    0.700    0.700 {built-in method gc.collect}
     1902    0.695    0.000  216.031    0.114 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:323(wait)
       16    0.545    0.034    0.547    0.034 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:361(_compute_strand_llr_betabinom)
       16    0.526    0.033    0.526    0.033 {method 'at' of 'numpy.ufunc' objects}
       16    0.506    0.032    0.506    0.032 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/feather.py:230(read_table)
      342    0.469    0.001    0.469    0.001 {method 'astype' of 'numpy.ndarray' objects}
1906/1904    0.449    0.000    3.496    0.002 /Users/mkiyer/proj/rigel/scripts/profiler.py:184(_snap_rss_current)
1902/1031    0.369    0.000  229.165    0.222 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:637(wait)
       16    0.220    0.014    0.543    0.034 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:843(_compute_fl_llr)
       16    0.192    0.012    9.159    0.572 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:424(estimate_kappa_marginal)
        1    0.188    0.188    0.188    0.188 {method 'argsort' of 'numpy.ndarray' objects}
       15    0.165    0.011    0.195    0.013 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:895(_m_step)
       15    0.165    0.011    0.719    0.048 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:355(_load_chunk)
   227982    0.164    0.000    0.164    0.000 {method 'cumsum' of 'numpy.ndarray' objects}
       16    0.121    0.008    0.638    0.040 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:746(_e_step)
      407    0.106    0.000    0.129    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:66(_wrapreduction)
        1    0.085    0.085    0.089    0.089 /Users/mkiyer/proj/rigel/src/rigel/index.py:1199(build_exon_csr)
      770    0.084    0.000    0.084    0.000 {method 'reduce' of 'numpy.ufunc' objects}
       16    0.082    0.005    0.086    0.005 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:602(_compute_density_llr_gaussian)
      283    0.072    0.000    8.005    0.028 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:84(<lambda>)
        1    0.071    0.071    0.085    0.085 /Users/mkiyer/proj/rigel/src/rigel/locus.py:30(build_loci)
        1    0.069    0.069    0.069    0.069 {method 'clear' of 'list' objects}
        6    0.066    0.011    0.066    0.011 /Users/mkiyer/proj/rigel/src/rigel/frag_length_model.py:149(observe_batch)
    24989    0.063    0.000    0.063    0.000 {method 'copy' of 'numpy.ndarray' objects}
       24    0.058    0.002    0.076    0.003 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:224(fragment_classes)
   227982    0.055    0.000    0.692    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2838(cumsum)
       24    0.051    0.002    2.093    0.087 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:531(_accept_chunk)
   228101    0.046    0.000    0.238    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:48(_wrapfunc)
977449/977398    0.038    0.000    0.038    0.000 {built-in method builtins.len}
        1    0.035    0.035    0.035    0.035 /Users/mkiyer/proj/rigel/src/rigel/index.py:660(region_cr)
       10    0.029    0.003    0.029    0.003 {method 'tolist' of 'numpy.ndarray' objects}
        1    0.026    0.026    0.084    0.084 /Users/mkiyer/proj/rigel/src/rigel/frag_length_model.py:529(observe_batch)
        6    0.025    0.004    0.025    0.004 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/arrow/array.py:1671(to_numpy)
       25    0.021    0.001    0.740    0.030 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:597(iter_chunks)
      117    0.020    0.000    0.020    0.000 {built-in method numpy.zeros}
      683    0.017    0.000    0.017    0.000 {built-in method numpy.ascontiguousarray}
   228279    0.016    0.000    0.062    0.000 {built-in method builtins.getattr}
        1    0.014    0.014    0.066    0.066 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:632(_seed_initial_partition)
        1    0.014    0.014    0.018    0.018 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:190(compute_region_stats)
        1    0.012    0.012    0.013    0.013 /Users/mkiyer/proj/rigel/src/rigel/scan.py:75(scan)
        2    0.012    0.006    0.062    0.031 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/functools.py:982(__get__)
       16    0.011    0.001    0.011    0.001 {built-in method posix.unlink}
   227982    0.010    0.000    0.010    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2834(_cumsum_dispatcher)
        1    0.010    0.010    0.012    0.012 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:350(_unique1d)
        2    0.008    0.004    0.026    0.013 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/arrays/string_.py:435(tolist)
        1    0.008    0.008    0.008    0.008 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:280(compute_sense_fraction)
       51    0.007    0.000    0.007    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/numeric.py:323(full)
       15    0.007    0.000    0.010    0.001 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/_methods.py:148(_var)
        1    0.007    0.007    0.011    0.011 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:570(compute_log_density)
        2    0.007    0.003    0.007    0.003 {method 'searchsorted' of 'numpy.ndarray' objects}
        3    0.006    0.002    0.006    0.002 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/internals/managers.py:2436(_stack_arrays)
        1    0.006    0.006    0.006    0.006 {method 'sort' of 'numpy.ndarray' objects}
        3    0.005    0.002    0.007    0.002 /Users/mkiyer/proj/rigel/src/rigel/strand_model.py:97(observe_batch)
       96    0.005    0.000    0.005    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/_methods.py:96(_clip)
        1    0.005    0.005    0.005    0.005 /Users/mkiyer/proj/rigel/src/rigel/frag_length_model.py:323(compute_all_transcript_eff_lens)



Total function calls: 2,316,283