Skip to content

Add an option decompression_uplo for symmetric results - #294

Open
amontoison wants to merge 3 commits into
mainfrom
am/decompression_uplo
Open

Add an option decompression_uplo for symmetric results#294
amontoison wants to merge 3 commits into
mainfrom
am/decompression_uplo

Conversation

@amontoison

@amontoison amontoison commented Jan 4, 2026

Copy link
Copy Markdown
Collaborator

Add an argument decompression_uplo for StarSetColoringResult and TreeSetColoringResult such that we can specialize the decompression for bicoloring.
We can always use decompression_uplo = :L for the bicoloring.
For the bicoloring, decompress! only use the specialized version for SparseMatrixCSC since #288.

Everything is internal so it is not breaking.
Replace #289.

I will wait a review of Guillaume before that I merge this PR and future modifications.

@amontoison amontoison added performance Speeding things up benchmark Run benchmarks on PR labels Jan 4, 2026
@amontoison
amontoison requested a review from gdalle January 4, 2026 22:39
@codecov

codecov Bot commented Jan 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (31999f1) to head (a55cce6).

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #294   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           20        20           
  Lines         2027      2045   +18     
=========================================
+ Hits          2027      2045   +18     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

github-actions Bot commented Jan 4, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

main c72b0c8... main / c72b0c8...
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.002 1.84 ± 0.017 ms 1.78 ± 0.025 ms 1.03 ± 0.017
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.005 4.23 ± 0.045 ms 4.07 ± 0.047 ms 1.04 ± 0.016
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.01 9.62 ± 0.14 ms 9.27 ± 0.17 ms 1.04 ± 0.024
coloring/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 2.19 ± 0.031 s 1.95 ± 0.062 s 1.12 ± 0.039
coloring/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.273 ± 0.0099 s 0.264 ± 0.012 s 1.03 ± 0.06
coloring/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.841 ± 0.098 s 0.731 ± 0.033 s 1.15 ± 0.14
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 2.92 ± 0.021 ms 2.77 ± 0.03 ms 1.05 ± 0.014
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 7.69 ± 0.081 ms 7.16 ± 0.096 ms 1.07 ± 0.018
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 18.5 ± 0.26 ms 17 ± 0.33 ms 1.09 ± 0.026
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 4.49 ± 0.23 s 3.77 ± 0.1 s 1.19 ± 0.069
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.484 ± 0.03 s 0.425 ± 0.013 s 1.14 ± 0.078
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 1.72 ± 0.059 s 1.44 ± 0.037 s 1.19 ± 0.051
coloring/nonsymmetric/column/direct/n=1000/p=0.002 0.461 ± 0.012 ms 0.457 ± 0.012 ms 1.01 ± 0.036
coloring/nonsymmetric/column/direct/n=1000/p=0.005 1.15 ± 0.0087 ms 1.14 ± 0.015 ms 1.01 ± 0.015
coloring/nonsymmetric/column/direct/n=1000/p=0.01 2.88 ± 0.013 ms 2.8 ± 0.018 ms 1.03 ± 0.0081
coloring/nonsymmetric/column/direct/n=100000/p=0.0001 0.501 ± 0.026 s 0.461 ± 0.011 s 1.08 ± 0.062
coloring/nonsymmetric/column/direct/n=100000/p=2.0e-5 0.0792 ± 0.0021 s 0.0744 ± 0.0024 s 1.06 ± 0.044
coloring/nonsymmetric/column/direct/n=100000/p=5.0e-5 0.195 ± 0.011 s 0.183 ± 0.0073 s 1.06 ± 0.072
coloring/nonsymmetric/row/direct/n=1000/p=0.002 0.459 ± 0.012 ms 0.459 ± 0.012 ms 1 ± 0.036
coloring/nonsymmetric/row/direct/n=1000/p=0.005 1.14 ± 0.011 ms 1.14 ± 0.0098 ms 1 ± 0.013
coloring/nonsymmetric/row/direct/n=1000/p=0.01 2.81 ± 0.019 ms 2.84 ± 0.017 ms 0.989 ± 0.0089
coloring/nonsymmetric/row/direct/n=100000/p=0.0001 0.546 ± 0.029 s 0.499 ± 0.013 s 1.09 ± 0.065
coloring/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.0794 ± 0.0023 s 0.0739 ± 0.0026 s 1.08 ± 0.049
coloring/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.2 ± 0.012 s 0.197 ± 0.012 s 1.01 ± 0.085
coloring/symmetric/column/direct/n=1000/p=0.002 0.937 ± 0.0082 ms 0.942 ± 0.0083 ms 0.995 ± 0.012
coloring/symmetric/column/direct/n=1000/p=0.005 2.19 ± 0.013 ms 2.2 ± 0.016 ms 0.998 ± 0.0093
coloring/symmetric/column/direct/n=1000/p=0.01 4.94 ± 0.028 ms 4.95 ± 0.024 ms 0.998 ± 0.0075
coloring/symmetric/column/direct/n=100000/p=0.0001 0.839 ± 0.048 s 0.878 ± 0.019 s 0.956 ± 0.059
coloring/symmetric/column/direct/n=100000/p=2.0e-5 0.138 ± 0.0045 s 0.132 ± 0.0023 s 1.04 ± 0.039
coloring/symmetric/column/direct/n=100000/p=5.0e-5 0.339 ± 0.019 s 0.322 ± 0.0063 s 1.05 ± 0.063
coloring/symmetric/column/substitution/n=1000/p=0.002 1.53 ± 0.016 ms 1.53 ± 0.015 ms 1 ± 0.014
coloring/symmetric/column/substitution/n=1000/p=0.005 3.97 ± 0.021 ms 3.97 ± 0.025 ms 1 ± 0.0082
coloring/symmetric/column/substitution/n=1000/p=0.01 9.24 ± 0.061 ms 9.24 ± 0.054 ms 1 ± 0.0089
coloring/symmetric/column/substitution/n=100000/p=0.0001 1.84 ± 0.07 s 1.61 ± 0.07 s 1.15 ± 0.066
coloring/symmetric/column/substitution/n=100000/p=2.0e-5 0.221 ± 0.0055 s 0.217 ± 0.0083 s 1.02 ± 0.046
coloring/symmetric/column/substitution/n=100000/p=5.0e-5 0.654 ± 0.02 s 0.62 ± 0.02 s 1.06 ± 0.047
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.134 ± 0.0047 ms 0.0621 ± 0.0032 ms 2.16 ± 0.14
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.218 ± 0.0098 ms 0.121 ± 0.0072 ms 1.8 ± 0.13
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.38 ± 0.013 ms 0.236 ± 0.014 ms 1.61 ± 0.11
decompress/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.112 ± 0.0017 s 0.0631 ± 0.0018 s 1.77 ± 0.056
decompress/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 29.5 ± 1.4 ms 18.5 ± 0.36 ms 1.6 ± 0.082
decompress/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.0633 ± 0.00095 s 0.0379 ± 0.00057 s 1.67 ± 0.035
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.159 ± 0.0068 ms 0.155 ± 0.0069 ms 1.02 ± 0.063
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.32 ± 0.011 ms 0.316 ± 0.011 ms 1.01 ± 0.049
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.646 ± 0.015 ms 0.631 ± 0.015 ms 1.02 ± 0.034
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.189 ± 0.0083 s 0.173 ± 0.0095 s 1.09 ± 0.077
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.033 ± 0.0011 s 0.0348 ± 0.0014 s 0.949 ± 0.05
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.0745 ± 0.0035 s 0.0731 ± 0.0041 s 1.02 ± 0.075
decompress/nonsymmetric/column/direct/n=1000/p=0.002 24 ± 1.4 μs 21.1 ± 2.9 μs 1.14 ± 0.17
decompress/nonsymmetric/column/direct/n=1000/p=0.005 0.0463 ± 0.0059 ms 0.041 ± 0.0068 ms 1.13 ± 0.24
decompress/nonsymmetric/column/direct/n=1000/p=0.01 0.0857 ± 0.0056 ms 0.0845 ± 0.012 ms 1.01 ± 0.16
decompress/nonsymmetric/column/direct/n=100000/p=0.0001 27.2 ± 0.56 ms 27.5 ± 0.7 ms 0.988 ± 0.032
decompress/nonsymmetric/column/direct/n=100000/p=2.0e-5 5.45 ± 0.44 ms 5.19 ± 0.45 ms 1.05 ± 0.13
decompress/nonsymmetric/column/direct/n=100000/p=5.0e-5 13 ± 0.36 ms 13.1 ± 0.52 ms 0.993 ± 0.048
decompress/nonsymmetric/row/direct/n=1000/p=0.002 23.2 ± 1.9 μs 20.3 ± 3.5 μs 1.14 ± 0.22
decompress/nonsymmetric/row/direct/n=1000/p=0.005 0.0421 ± 0.0062 ms 0.0372 ± 0.0063 ms 1.13 ± 0.25
decompress/nonsymmetric/row/direct/n=1000/p=0.01 0.0769 ± 0.0083 ms 0.074 ± 0.012 ms 1.04 ± 0.2
decompress/nonsymmetric/row/direct/n=100000/p=0.0001 11.6 ± 0.52 ms 11.5 ± 0.43 ms 1.01 ± 0.059
decompress/nonsymmetric/row/direct/n=100000/p=2.0e-5 3.05 ± 0.22 ms 2.99 ± 0.19 ms 1.02 ± 0.099
decompress/nonsymmetric/row/direct/n=100000/p=5.0e-5 5.84 ± 0.28 ms 5.89 ± 0.26 ms 0.993 ± 0.065
decompress/symmetric/column/direct/n=1000/p=0.002 23.7 ± 1.4 μs 21.2 ± 2.6 μs 1.12 ± 0.15
decompress/symmetric/column/direct/n=1000/p=0.005 0.0456 ± 0.0037 ms 0.0408 ± 0.0065 ms 1.12 ± 0.2
decompress/symmetric/column/direct/n=1000/p=0.01 0.0835 ± 0.0056 ms 0.0815 ± 0.012 ms 1.02 ± 0.17
decompress/symmetric/column/direct/n=100000/p=0.0001 24.8 ± 0.91 ms 25.7 ± 1.2 ms 0.966 ± 0.057
decompress/symmetric/column/direct/n=100000/p=2.0e-5 4.52 ± 0.61 ms 4.33 ± 0.71 ms 1.04 ± 0.22
decompress/symmetric/column/direct/n=100000/p=5.0e-5 11.9 ± 0.35 ms 12.1 ± 0.49 ms 0.985 ± 0.05
decompress/symmetric/column/substitution/n=1000/p=0.002 0.0973 ± 0.0032 ms 0.0969 ± 0.0038 ms 1 ± 0.051
decompress/symmetric/column/substitution/n=1000/p=0.005 0.204 ± 0.0074 ms 0.204 ± 0.009 ms 1 ± 0.057
decompress/symmetric/column/substitution/n=1000/p=0.01 0.401 ± 0.012 ms 0.399 ± 0.014 ms 1 ± 0.047
decompress/symmetric/column/substitution/n=100000/p=0.0001 0.1 ± 0.0063 s 0.105 ± 0.0094 s 0.953 ± 0.1
decompress/symmetric/column/substitution/n=100000/p=2.0e-5 24.7 ± 0.48 ms 24.8 ± 0.5 ms 0.996 ± 0.028
decompress/symmetric/column/substitution/n=100000/p=5.0e-5 0.0497 ± 0.001 s 0.0486 ± 0.0011 s 1.02 ± 0.032
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.724 ± 0.0077 ms 0.727 ± 0.0084 ms 0.995 ± 0.016
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 2.54 ± 0.019 ms 2.54 ± 0.027 ms 0.997 ± 0.013
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 7.88 ± 0.064 ms 7.85 ± 0.066 ms 1 ± 0.012
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 1.69 ± 0.054 s 1.69 ± 0.011 s 1 ± 0.033
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.135 ± 0.0028 s 0.132 ± 0.0028 s 1.02 ± 0.031
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.518 ± 0.021 s 0.519 ± 0.016 s 0.999 ± 0.05
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.705 ± 0.0085 ms 0.71 ± 0.0083 ms 0.993 ± 0.017
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 2.53 ± 0.019 ms 2.53 ± 0.02 ms 0.997 ± 0.011
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 7.81 ± 0.064 ms 7.8 ± 0.061 ms 1 ± 0.011
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 1.66 ± 0.04 s 1.69 ± 0.038 s 0.982 ± 0.032
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.138 ± 0.0045 s 0.138 ± 0.0047 s 0.996 ± 0.047
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.527 ± 0.042 s 0.523 ± 0.017 s 1.01 ± 0.087
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.713 ± 0.0085 ms 0.72 ± 0.0081 ms 0.991 ± 0.016
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 2.49 ± 0.02 ms 2.5 ± 0.028 ms 0.998 ± 0.014
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 7.77 ± 0.062 ms 8.61 ± 0.059 ms 0.903 ± 0.0095
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 1.73 ± 0.086 s 1.78 ± 0.082 s 0.967 ± 0.066
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.154 ± 0.0044 s 0.15 ± 0.0029 s 1.03 ± 0.035
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.551 ± 0.029 s 0.534 ± 0.025 s 1.03 ± 0.071
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.297 ± 0.01 ms 0.297 ± 0.01 ms 1 ± 0.049
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.725 ± 0.0095 ms 0.727 ± 0.0076 ms 0.998 ± 0.017
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 1.76 ± 0.013 ms 1.79 ± 0.01 ms 0.983 ± 0.0092
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.295 ± 0.0072 s 0.29 ± 0.004 s 1.02 ± 0.028
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.0583 ± 0.00044 s 0.0575 ± 0.00047 s 1.01 ± 0.011
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.134 ± 0.0024 s 0.132 ± 0.0014 s 1.01 ± 0.021
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.727 ± 0.0084 ms 0.718 ± 0.0081 ms 1.01 ± 0.016
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 2.53 ± 0.02 ms 2.51 ± 0.022 ms 1.01 ± 0.012
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 7.83 ± 0.058 ms 7.8 ± 0.065 ms 1 ± 0.011
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 1.86 ± 0.079 s 1.7 ± 0.032 s 1.09 ± 0.051
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.139 ± 0.0058 s 0.135 ± 0.0044 s 1.03 ± 0.055
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.516 ± 0.012 s 0.508 ± 0.019 s 1.01 ± 0.046
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.712 ± 0.0083 ms 0.713 ± 0.0089 ms 0.998 ± 0.017
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 2.56 ± 0.034 ms 2.53 ± 0.023 ms 1.01 ± 0.016
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 7.83 ± 0.072 ms 7.83 ± 0.069 ms 1 ± 0.013
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 1.68 ± 0.012 s 1.73 ± 0.037 s 0.97 ± 0.022
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.142 ± 0.0032 s 0.139 ± 0.0048 s 1.02 ± 0.043
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.539 ± 0.02 s 0.545 ± 0.024 s 0.989 ± 0.057
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.717 ± 0.0079 ms 0.721 ± 0.0085 ms 0.994 ± 0.016
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 2.52 ± 0.03 ms 2.54 ± 0.021 ms 0.994 ± 0.014
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 7.87 ± 0.15 ms 7.84 ± 0.085 ms 1 ± 0.022
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 1.71 ± 0.019 s 1.82 ± 0.071 s 0.936 ± 0.038
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.158 ± 0.006 s 0.147 ± 0.0037 s 1.08 ± 0.049
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.556 ± 0.031 s 0.536 ± 0.029 s 1.04 ± 0.08
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.297 ± 0.01 ms 0.301 ± 0.011 ms 0.986 ± 0.049
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.725 ± 0.0079 ms 0.757 ± 0.0068 ms 0.958 ± 0.014
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 1.79 ± 0.0085 ms 1.88 ± 0.012 ms 0.955 ± 0.0076
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.289 ± 0.0061 s 0.302 ± 0.005 s 0.956 ± 0.026
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.0585 ± 0.00061 s 0.0589 ± 0.0006 s 0.994 ± 0.014
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.136 ± 0.0032 s 0.137 ± 0.0021 s 0.994 ± 0.028
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.22 ± 0.0052 ms 0.218 ± 0.0056 ms 1.01 ± 0.035
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.4 ± 0.011 ms 0.401 ± 0.011 ms 0.999 ± 0.039
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.668 ± 0.01 ms 0.666 ± 0.011 ms 1 ± 0.023
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.142 ± 0.0073 s 0.14 ± 0.0094 s 1.01 ± 0.086
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.0436 ± 0.00095 s 0.0423 ± 0.00091 s 1.03 ± 0.032
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.0811 ± 0.0048 s 0.0779 ± 0.0035 s 1.04 ± 0.078
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.207 ± 0.0063 ms 0.211 ± 0.0062 ms 0.983 ± 0.041
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.383 ± 0.011 ms 0.393 ± 0.011 ms 0.974 ± 0.039
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.649 ± 0.011 ms 0.658 ± 0.013 ms 0.987 ± 0.025
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.147 ± 0.0097 s 0.143 ± 0.0057 s 1.03 ± 0.079
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.0424 ± 0.0018 s 0.0411 ± 0.0011 s 1.03 ± 0.051
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.0838 ± 0.0041 s 0.0757 ± 0.0034 s 1.11 ± 0.074
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.184 ± 0.0098 ms 0.182 ± 0.0043 ms 1.01 ± 0.059
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.359 ± 0.011 ms 0.359 ± 0.011 ms 1 ± 0.043
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.591 ± 0.011 ms 0.592 ± 0.012 ms 0.998 ± 0.028
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.143 ± 0.009 s 0.143 ± 0.012 s 0.999 ± 0.1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.0407 ± 0.0017 s 0.0399 ± 0.0021 s 1.02 ± 0.069
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.077 ± 0.0044 s 0.0721 ± 0.0029 s 1.07 ± 0.075
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.112 ± 0.0026 ms 0.111 ± 0.0018 ms 1.01 ± 0.028
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.117 ± 0.0044 ms 0.124 ± 0.0037 ms 0.942 ± 0.045
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.142 ± 0.0046 ms 0.153 ± 0.0026 ms 0.927 ± 0.034
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 26 ± 0.18 ms 26 ± 0.21 ms 1 ± 0.011
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 21.7 ± 0.093 ms 21.9 ± 0.084 ms 0.988 ± 0.0057
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 23.6 ± 0.13 ms 23.7 ± 0.14 ms 0.997 ± 0.008
time_to_load 0.277 ± 0.0016 s 0.28 ± 0.0038 s 0.99 ± 0.015
main c72b0c8... main / c72b0c8...
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.48 k allocs: 2.32 MB 0.48 k allocs: 2.24 MB 1.04
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.49 k allocs: 3.9 MB 0.49 k allocs: 3.71 MB 1.05
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.5 k allocs: 6.84 MB 0.5 k allocs: 6.46 MB 1.06
coloring/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.58 k allocs: 0.709 GB 0.58 k allocs: 0.671 GB 1.06
coloring/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.55 k allocs: 0.246 GB 0.55 k allocs: 0.238 GB 1.03
coloring/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.56 k allocs: 0.411 GB 0.56 k allocs: 0.392 GB 1.05
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.638 k allocs: 2.83 MB 0.628 k allocs: 2.75 MB 1.03
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.64 k allocs: 4.82 MB 0.63 k allocs: 4.63 MB 1.04
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.64 k allocs: 8.33 MB 0.63 k allocs: 7.95 MB 1.05
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.645 k allocs: 0.812 GB 0.635 k allocs: 0.775 GB 1.05
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.645 k allocs: 0.272 GB 0.635 k allocs: 0.265 GB 1.03
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.645 k allocs: 0.472 GB 0.635 k allocs: 0.454 GB 1.04
coloring/nonsymmetric/column/direct/n=1000/p=0.002 0.135 k allocs: 0.354 MB 0.135 k allocs: 0.354 MB 1
coloring/nonsymmetric/column/direct/n=1000/p=0.005 0.135 k allocs: 0.578 MB 0.135 k allocs: 0.578 MB 1
coloring/nonsymmetric/column/direct/n=1000/p=0.01 0.135 k allocs: 0.967 MB 0.135 k allocs: 0.967 MB 1
coloring/nonsymmetric/column/direct/n=100000/p=0.0001 0.135 k allocs: 0.0931 GB 0.135 k allocs: 0.0931 GB 1
coloring/nonsymmetric/column/direct/n=100000/p=2.0e-5 0.135 k allocs: 0.0335 GB 0.135 k allocs: 0.0335 GB 1
coloring/nonsymmetric/column/direct/n=100000/p=5.0e-5 0.135 k allocs: 0.0558 GB 0.135 k allocs: 0.0558 GB 1
coloring/nonsymmetric/row/direct/n=1000/p=0.002 0.135 k allocs: 0.354 MB 0.135 k allocs: 0.354 MB 1
coloring/nonsymmetric/row/direct/n=1000/p=0.005 0.135 k allocs: 0.578 MB 0.135 k allocs: 0.578 MB 1
coloring/nonsymmetric/row/direct/n=1000/p=0.01 0.135 k allocs: 0.967 MB 0.135 k allocs: 0.967 MB 1
coloring/nonsymmetric/row/direct/n=100000/p=0.0001 0.135 k allocs: 0.0931 GB 0.135 k allocs: 0.0931 GB 1
coloring/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.135 k allocs: 0.0335 GB 0.135 k allocs: 0.0335 GB 1
coloring/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.135 k allocs: 0.0558 GB 0.135 k allocs: 0.0558 GB 1
coloring/symmetric/column/direct/n=1000/p=0.002 0.235 k allocs: 0.628 MB 0.235 k allocs: 0.628 MB 1
coloring/symmetric/column/direct/n=1000/p=0.005 0.245 k allocs: 1.02 MB 0.245 k allocs: 1.02 MB 1
coloring/symmetric/column/direct/n=1000/p=0.01 0.247 k allocs: 1.56 MB 0.247 k allocs: 1.56 MB 1
coloring/symmetric/column/direct/n=100000/p=0.0001 0.325 k allocs: 0.172 GB 0.325 k allocs: 0.172 GB 1
coloring/symmetric/column/direct/n=100000/p=2.0e-5 0.295 k allocs: 0.0603 GB 0.295 k allocs: 0.0603 GB 1
coloring/symmetric/column/direct/n=100000/p=5.0e-5 0.305 k allocs: 0.0947 GB 0.305 k allocs: 0.0947 GB 1
coloring/symmetric/column/substitution/n=1000/p=0.002 0.4 k allocs: 0.945 MB 0.4 k allocs: 0.945 MB 1
coloring/symmetric/column/substitution/n=1000/p=0.005 0.405 k allocs: 1.65 MB 0.405 k allocs: 1.65 MB 1
coloring/symmetric/column/substitution/n=1000/p=0.01 0.405 k allocs: 2.85 MB 0.405 k allocs: 2.85 MB 1
coloring/symmetric/column/substitution/n=100000/p=0.0001 0.41 k allocs: 0.276 GB 0.41 k allocs: 0.276 GB 1
coloring/symmetric/column/substitution/n=100000/p=2.0e-5 0.41 k allocs: 0.0897 GB 0.41 k allocs: 0.0897 GB 1
coloring/symmetric/column/substitution/n=100000/p=5.0e-5 0.41 k allocs: 0.159 GB 0.41 k allocs: 0.159 GB 1
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/nonsymmetric/column/direct/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/nonsymmetric/column/direct/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/nonsymmetric/column/direct/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/nonsymmetric/column/direct/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/nonsymmetric/column/direct/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/nonsymmetric/column/direct/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/nonsymmetric/row/direct/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/nonsymmetric/row/direct/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/nonsymmetric/row/direct/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/nonsymmetric/row/direct/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/symmetric/column/direct/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/symmetric/column/direct/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/symmetric/column/direct/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/symmetric/column/direct/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/symmetric/column/direct/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/symmetric/column/direct/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
decompress/symmetric/column/substitution/n=1000/p=0.002 0.045 k allocs: 0.197 MB 0.045 k allocs: 0.197 MB 1
decompress/symmetric/column/substitution/n=1000/p=0.005 0.045 k allocs: 0.419 MB 0.045 k allocs: 0.419 MB 1
decompress/symmetric/column/substitution/n=1000/p=0.01 0.045 k allocs: 0.803 MB 0.045 k allocs: 0.803 MB 1
decompress/symmetric/column/substitution/n=100000/p=0.0001 0.045 k allocs: 0.0782 GB 0.045 k allocs: 0.0782 GB 1
decompress/symmetric/column/substitution/n=100000/p=2.0e-5 0.045 k allocs: 19.1 MB 0.045 k allocs: 19.1 MB 1
decompress/symmetric/column/substitution/n=100000/p=5.0e-5 0.045 k allocs: 0.0409 GB 0.045 k allocs: 0.0409 GB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.105 k allocs: 0.196 MB 0.105 k allocs: 0.196 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.105 k allocs: 0.202 MB 0.105 k allocs: 0.202 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.105 k allocs: 0.216 MB 0.105 k allocs: 0.216 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.12 k allocs: 19.1 MB 0.12 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.105 k allocs: 19.1 MB 0.105 k allocs: 19.1 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.045 k allocs: 0.115 MB 0.045 k allocs: 0.115 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.045 k allocs: 11.4 MB 0.045 k allocs: 11.4 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.09 k allocs: 0.157 MB 0.09 k allocs: 0.157 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.09 k allocs: 0.157 MB 0.09 k allocs: 0.157 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.09 k allocs: 0.156 MB 0.09 k allocs: 0.156 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.09 k allocs: 0.157 MB 0.09 k allocs: 0.157 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.09 k allocs: 15.3 MB 0.09 k allocs: 15.3 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.05 k allocs: 0.116 MB 0.05 k allocs: 0.116 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.05 k allocs: 0.116 MB 0.05 k allocs: 0.116 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.05 k allocs: 0.116 MB 0.05 k allocs: 0.116 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.05 k allocs: 11.4 MB 0.05 k allocs: 11.4 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.05 k allocs: 11.4 MB 0.05 k allocs: 11.4 MB 1
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.05 k allocs: 11.4 MB 0.05 k allocs: 11.4 MB 1
time_to_load 0.149 k allocs: 11.2 kB 0.149 k allocs: 11.2 kB 1

@gdalle

gdalle commented Jan 14, 2026

Copy link
Copy Markdown
Member

I'm not sure I understand what this PR does. If we pre-specify the type of decompression when we do the coloring, doesn't it make the uplo argument useless? And if not, which uplo setting takes precedence, the one in the result or the one in the argument?

@amontoison

amontoison commented Jan 14, 2026

Copy link
Copy Markdown
Collaborator Author

Yes, it should make the uplo argument useless (if we specialize it in the result for :L or :U).
But for bicoloring, we don't specify the decompression uplo, it is always :L by design, we don't have issue here.

The one in the result always takes precedence.
Note that it is not exposed to the users for star and acyclic coloring with main function coloring.

@gdalle

gdalle commented Jan 29, 2026

Copy link
Copy Markdown
Member

I took a second look and the semantics of this are a bit confusing to me. From what I understand:

  • If you create the result with decompression_uplo = :L, you allow yourself to optimise the construction because you know that it will be used only inside bicoloring, and only with uplo = decompression_uplo = :L
  • But if you create the result with decompression_uplo = :F, then you must still account for the possibility that uplo != decompression_uplo?

@amontoison

amontoison commented Jan 29, 2026

Copy link
Copy Markdown
Collaborator Author

I took a second look and the semantics of this are a bit confusing to me. From what I understand:

* If you create the result with `decompression_uplo = :L`, you allow yourself to optimise the construction because you _know_ that it will be used only inside bicoloring, and only with `uplo = decompression_uplo = :L`

You are right!

* But if you create the result with `decompression_uplo = :F`, then you must still account for the possibility that `uplo != decompression_uplo`?

Yes, because the option decompression_uplo is not yet exposed for the users and I don't want to do breaking changes.
I want to only support uplo == decompression_uplo in the long run but we need to have a discussion together before such that we know where we are going in terms of API.
We don't need anymore the uplo argument for the decompression if we do that.

Comment thread src/decompression.jl
nzA = nonzeros(A)
check_compatible_pattern(A, ag, uplo)
if uplo == :F
if result.decompression_uplo == uplo

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this case not considered for the TreeSetColoringResult below?

@amontoison amontoison Sep 7, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because we only gain on the storage when the decompression is by substitution.
The code for the decompression itself is not impacted.

However, I forgot to add an assertion.
I fixed it in my last commit such that:

function decompress!(
    A::SparseMatrixCSC{R},
    B::AbstractMatrix{R},
    result::TreeSetColoringResult,
    uplo::Symbol=:F,
) where {R<:Real}
    check_compatible_pattern(A, result.ag, uplo)
    @assert result.decompression_uplo == uplo || result.decompression_uplo == :F
    decompress_csc!(nonzeros(A), A.colptr, B, result, uplo)
    return A
end

@amontoison
amontoison force-pushed the am/decompression_uplo branch from a55cce6 to c72b0c8 Compare September 7, 2026 20:37
@codecov

codecov Bot commented Sep 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.30%. Comparing base (3ab25db) to head (c72b0c8).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #294      +/-   ##
==========================================
+ Coverage   99.20%   99.30%   +0.09%     
==========================================
  Files          21       21              
  Lines        2150     2169      +19     
==========================================
+ Hits         2133     2154      +21     
+ Misses         17       15       -2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@amontoison
amontoison requested a review from gdalle September 7, 2026 20:46
@amontoison

Copy link
Copy Markdown
Collaborator Author

I propose to merge first the support of AMD GPUs (#274).
A minor modification is needed for the extensions and I would to do it for both backends in the same PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

benchmark Run benchmarks on PR performance Speeding things up

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants