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

------------------------------------------------------------------------
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:       17.00s
  Peak RSS:        3910 MB
  RSS before:      3088 MB
  RSS after:       3910 MB
  RSS delta:       822 MB

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

  Stage Breakdown:
  Stage                        Time       %  Bar
  ------------------------ --------  ------  ----------------------------------------
  scan_and_buffer            8.989s   52.9%  █████████████████████░░░░░░░░░░░░░░░░░░░
  finalize_models            0.000s    0.0%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  calibration                2.398s   14.1%  █████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  compute_geometry           0.006s    0.0%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  create_estimator           0.001s    0.0%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  fragment_scorer            0.969s    5.7%  ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  fragment_router_scan       0.274s    1.6%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  build_loci                 0.425s    2.5%  █░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  eb_gdna_priors             0.304s    1.8%  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  locus_em                   3.636s   21.4%  ████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  TOTAL                     17.002s

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

  Top-3 hotspots:
    1. scan_and_buffer: 8.989s (52.9%)
    2. locus_em: 3.636s (21.4%)
    3. calibration: 2.398s (14.1%)

  RSS Memory Snapshots (MB):
    before                       3088 MB
    after_scan                   3517 MB
    after_finalize               3517 MB
    after_calibration            3750 MB
    after_router_scan            3910 MB
    after_buffer_release         3910 MB
    after_locus_em               3910 MB
    after_cleanup                3910 MB


========================================================================
cProfile: default
========================================================================
========================================================================
Top 60 by cumulative time
========================================================================
         2260449 function calls (2260350 primitive calls) in 17.747 seconds

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

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      161    0.171    0.001   20.309    0.126 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:323(wait)
  161/119    0.299    0.002   17.677    0.149 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:637(wait)
      642   13.147    0.020   14.483    0.023 {method 'acquire' of '_thread.lock' objects}
       20    0.068    0.003    1.452    0.073 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:424(estimate_kappa_marginal)
       20    0.000    0.000    1.378    0.069 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:77(_bounded_max)
       20    0.000    0.000    1.378    0.069 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/scipy/optimize/_minimize.py:831(minimize_scalar)
      363    0.006    0.000    1.345    0.004 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:84(<lambda>)
      363    1.336    0.004    1.340    0.004 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:492(_marginal_loglik)
       20    0.001    0.000    0.865    0.043 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/scipy/optimize/_optimize.py:2289(_minimize_scalar_bounded)
   227982    0.053    0.000    0.717    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2838(cumsum)
        1    0.683    0.683    0.683    0.683 {built-in method gc.collect}
        1    0.020    0.020    0.506    0.506 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:961(calibrate_gdna)
       20    0.088    0.004    0.359    0.018 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:746(_e_step)
        1    0.174    0.174    0.288    0.288 /Users/mkiyer/proj/rigel/src/rigel/pipeline.py:182(scan_and_buffer)
  165/164    0.046    0.000    0.255    0.002 /Users/mkiyer/proj/rigel/scripts/profiler.py:184(_snap_rss_current)
   228129    0.046    0.000    0.232    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:48(_wrapfunc)
       19    0.197    0.010    0.210    0.011 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:895(_m_step)
       41    0.189    0.005    0.202    0.005 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:511(build_gdna_fl_model)
        1    0.184    0.184    0.184    0.184 {method 'argsort' of 'numpy.ndarray' objects}
       20    0.169    0.008    0.172    0.009 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:361(_compute_strand_llr_betabinom)
   227982    0.160    0.000    0.160    0.000 {method 'cumsum' of 'numpy.ndarray' objects}
      266    0.001    0.000    0.114    0.000 {method 'sum' of 'numpy.ndarray' objects}
        1    0.092    0.092    0.104    0.104 /Users/mkiyer/proj/rigel/src/rigel/locus.py:30(build_loci)
      104    0.101    0.001    0.101    0.001 {built-in method numpy.asarray}
        2    0.011    0.006    0.067    0.034 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/functools.py:982(__get__)
   228321    0.015    0.000    0.066    0.000 {built-in method builtins.getattr}
       20    0.055    0.003    0.057    0.003 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:602(_compute_density_llr_gaussian)
       20    0.029    0.001    0.053    0.003 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:843(_compute_fl_llr)
976484/976433    0.041    0.000    0.041    0.000 {built-in method builtins.len}
        1    0.039    0.039    0.039    0.039 /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.027    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)
        1    0.000    0.000    0.024    0.024 /Users/mkiyer/proj/rigel/src/rigel/pipeline.py:95(_replay_strand_observations)
        8    0.000    0.000    0.022    0.003 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:254(to_scoring_arrays)
      970    0.021    0.000    0.021    0.000 {method 'reduce' of 'numpy.ufunc' objects}
      164    0.020    0.000    0.020    0.000 {method 'astype' of 'numpy.ndarray' objects}
        1    0.008    0.008    0.020    0.020 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:632(_seed_initial_partition)
        8    0.018    0.002    0.020    0.002 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:224(fragment_classes)
       20    0.018    0.001    0.018    0.001 {method 'at' of 'numpy.ufunc' objects}
        1    0.000    0.000    0.018    0.018 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:547(release)
        1    0.018    0.018    0.018    0.018 {method 'clear' of 'list' objects}
        1    0.014    0.014    0.017    0.017 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:190(compute_region_stats)
        1    0.000    0.000    0.017    0.017 /Users/mkiyer/proj/rigel/src/rigel/index.py:648(region_df)
        1    0.000    0.000    0.017    0.017 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/io/feather_format.py:80(read_feather)
        1    0.002    0.002    0.014    0.014 /Users/mkiyer/proj/rigel/src/rigel/scoring.py:121(from_models)
      266    0.001    0.000    0.014    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/_methods.py:47(_sum)
      141    0.014    0.000    0.014    0.000 {built-in method numpy.zeros}
        1    0.013    0.013    0.013    0.013 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/feather.py:230(read_table)
        1    0.012    0.012    0.012    0.012 /Users/mkiyer/proj/rigel/src/rigel/index.py:1199(build_exon_csr)
        1    0.002    0.002    0.010    0.010 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:145(unique)
   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)
        2    0.000    0.000    0.010    0.005 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:1421(searchsorted)
        2    0.010    0.005    0.010    0.005 {method 'searchsorted' of 'numpy.ndarray' objects}
        1    0.007    0.007    0.009    0.009 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:570(compute_log_density)
        1    0.000    0.000    0.009    0.009 /Users/mkiyer/proj/rigel/src/rigel/pipeline.py:114(_replay_fraglen_observations)
        1    0.007    0.007    0.008    0.008 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:350(_unique1d)
      519    0.000    0.000    0.008    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2304(sum)
      519    0.001    0.000    0.007    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:66(_wrapreduction)
        1    0.000    0.000    0.006    0.006 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pandas/core/base.py:567(to_numpy)



========================================================================
Top 60 by self time
========================================================================
         2260449 function calls (2260350 primitive calls) in 17.747 seconds

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

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      642   13.147    0.020   14.483    0.023 {method 'acquire' of '_thread.lock' objects}
      363    1.336    0.004    1.340    0.004 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:492(_marginal_loglik)
        1    0.683    0.683    0.683    0.683 {built-in method gc.collect}
  161/119    0.299    0.002   17.677    0.149 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:637(wait)
       19    0.197    0.010    0.210    0.011 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:895(_m_step)
       41    0.189    0.005    0.202    0.005 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:511(build_gdna_fl_model)
        1    0.184    0.184    0.184    0.184 {method 'argsort' of 'numpy.ndarray' objects}
        1    0.174    0.174    0.288    0.288 /Users/mkiyer/proj/rigel/src/rigel/pipeline.py:182(scan_and_buffer)
      161    0.171    0.001   20.309    0.126 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/threading.py:323(wait)
       20    0.169    0.008    0.172    0.009 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:361(_compute_strand_llr_betabinom)
   227982    0.160    0.000    0.160    0.000 {method 'cumsum' of 'numpy.ndarray' objects}
      104    0.101    0.001    0.101    0.001 {built-in method numpy.asarray}
        1    0.092    0.092    0.104    0.104 /Users/mkiyer/proj/rigel/src/rigel/locus.py:30(build_loci)
       20    0.088    0.004    0.359    0.018 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:746(_e_step)
       20    0.068    0.003    1.452    0.073 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:424(estimate_kappa_marginal)
       20    0.055    0.003    0.057    0.003 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:602(_compute_density_llr_gaussian)
   227982    0.053    0.000    0.717    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2838(cumsum)
  165/164    0.046    0.000    0.255    0.002 /Users/mkiyer/proj/rigel/scripts/profiler.py:184(_snap_rss_current)
   228129    0.046    0.000    0.232    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:48(_wrapfunc)
976484/976433    0.041    0.000    0.041    0.000 {built-in method builtins.len}
        1    0.039    0.039    0.039    0.039 /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}
       20    0.029    0.001    0.053    0.003 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:843(_compute_fl_llr)
        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)
      970    0.021    0.000    0.021    0.000 {method 'reduce' of 'numpy.ufunc' objects}
      164    0.020    0.000    0.020    0.000 {method 'astype' of 'numpy.ndarray' objects}
        1    0.020    0.020    0.506    0.506 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:961(calibrate_gdna)
       20    0.018    0.001    0.018    0.001 {method 'at' of 'numpy.ufunc' objects}
        8    0.018    0.002    0.020    0.002 /Users/mkiyer/proj/rigel/src/rigel/buffer.py:224(fragment_classes)
        1    0.018    0.018    0.018    0.018 {method 'clear' of 'list' objects}
   228321    0.015    0.000    0.066    0.000 {built-in method builtins.getattr}
        1    0.014    0.014    0.017    0.017 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:190(compute_region_stats)
      141    0.014    0.000    0.014    0.000 {built-in method numpy.zeros}
        1    0.013    0.013    0.013    0.013 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/feather.py:230(read_table)
        1    0.012    0.012    0.012    0.012 /Users/mkiyer/proj/rigel/src/rigel/index.py:1199(build_exon_csr)
        2    0.011    0.006    0.067    0.034 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/functools.py:982(__get__)
   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)
        2    0.010    0.005    0.010    0.005 {method 'searchsorted' 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)
        1    0.008    0.008    0.020    0.020 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:632(_seed_initial_partition)
        1    0.007    0.007    0.009    0.009 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:570(compute_log_density)
        1    0.007    0.007    0.008    0.008 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:350(_unique1d)
    24437    0.006    0.000    0.006    0.000 {method 'copy' of 'numpy.ndarray' objects}
      363    0.006    0.000    1.345    0.004 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:84(<lambda>)
        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)
       39    0.004    0.000    0.004    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/numeric.py:323(full)
        1    0.004    0.004    0.004    0.004 /Users/mkiyer/proj/rigel/src/rigel/estimator.py:211(run_batch_locus_em)
        1    0.004    0.004    0.004    0.004 /Users/mkiyer/proj/rigel/src/rigel/locus.py:386(compute_gdna_locus_gammas)
        1    0.003    0.003    0.006    0.006 /Users/mkiyer/proj/rigel/src/rigel/frag_length_model.py:529(observe_batch)
        6    0.003    0.001    0.003    0.001 /Users/mkiyer/proj/rigel/src/rigel/frag_length_model.py:149(observe_batch)
        1    0.003    0.003    0.003    0.003 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/pyarrow/pandas_compat.py:794(table_to_dataframe)
    12349    0.003    0.000    0.005    0.000 {built-in method builtins.max}
    34726    0.003    0.000    0.003    0.000 {method 'append' of 'list' objects}
       19    0.002    0.000    0.003    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/_methods.py:148(_var)
      235    0.002    0.000    0.002    0.000 {built-in method numpy.ascontiguousarray}
        1    0.002    0.002    0.010    0.010 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:145(unique)
        1    0.002    0.002    0.002    0.002 {method 'sort' of 'numpy.ndarray' objects}
        1    0.002    0.002    0.002    0.002 /Users/mkiyer/proj/rigel/src/rigel/calibration.py:280(compute_sense_fraction)
        1    0.002    0.002    0.014    0.014 /Users/mkiyer/proj/rigel/src/rigel/scoring.py:121(from_models)
      266    0.001    0.000    0.014    0.000 /Users/mkiyer/sw/miniforge3/envs/rigel/lib/python3.12/site-packages/numpy/_core/_methods.py:47(_sum)



Total function calls: 2,260,350