Skip to content

Add an option decompression_uplo for symmetric results - #294

Open
amontoison wants to merge 1 commit into
mainfrom
am/decompression_uplo
Open

amontoison wants to merge 1 commit 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 28cbae0... main / 28cbae0...
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.002 1.84 ± 0.014 ms 1.79 ± 0.017 ms 1.03 ± 0.013
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.005 4.22 ± 0.041 ms 4.11 ± 0.034 ms 1.03 ± 0.013
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.01 9.59 ± 0.1 ms 9.42 ± 0.11 ms 1.02 ± 0.016
coloring/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 1.9 ± 0.026 s 2.26 ± 0.046 s 0.844 ± 0.021
coloring/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.274 ± 0.0071 s 0.307 ± 0.023 s 0.894 ± 0.071
coloring/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.706 ± 0.022 s 0.871 ± 0.05 s 0.811 ± 0.053
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 2.73 ± 0.019 ms 2.63 ± 0.023 ms 1.04 ± 0.011
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 7.31 ± 0.053 ms 7.02 ± 0.08 ms 1.04 ± 0.014
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 17.9 ± 0.18 ms 17 ± 0.13 ms 1.05 ± 0.014
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 4.02 ± 0.059 s 5.21 s 0.771
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.44 ± 0.0071 s 0.609 ± 0.06 s 0.722 ± 0.072
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 1.49 ± 0.033 s 2.01 ± 0.046 s 0.74 ± 0.024
coloring/nonsymmetric/column/direct/n=1000/p=0.002 0.444 ± 0.012 ms 0.447 ± 0.011 ms 0.993 ± 0.036
coloring/nonsymmetric/column/direct/n=1000/p=0.005 1.13 ± 0.0082 ms 1.13 ± 0.011 ms 0.998 ± 0.012
coloring/nonsymmetric/column/direct/n=1000/p=0.01 2.86 ± 0.017 ms 2.84 ± 0.023 ms 1.01 ± 0.01
coloring/nonsymmetric/column/direct/n=100000/p=0.0001 0.474 ± 0.0064 s 0.475 ± 0.0072 s 0.999 ± 0.02
coloring/nonsymmetric/column/direct/n=100000/p=2.0e-5 0.073 ± 0.00053 s 0.0738 ± 0.0009 s 0.989 ± 0.014
coloring/nonsymmetric/column/direct/n=100000/p=5.0e-5 0.188 ± 0.0023 s 0.19 ± 0.0048 s 0.986 ± 0.028
coloring/nonsymmetric/row/direct/n=1000/p=0.002 0.446 ± 0.011 ms 0.45 ± 0.012 ms 0.991 ± 0.036
coloring/nonsymmetric/row/direct/n=1000/p=0.005 1.15 ± 0.0099 ms 1.15 ± 0.015 ms 1 ± 0.016
coloring/nonsymmetric/row/direct/n=1000/p=0.01 2.94 ± 0.023 ms 2.85 ± 0.022 ms 1.03 ± 0.011
coloring/nonsymmetric/row/direct/n=100000/p=0.0001 0.485 ± 0.011 s 0.453 ± 0.0041 s 1.07 ± 0.027
coloring/nonsymmetric/row/direct/n=100000/p=2.0e-5 0.0714 ± 0.00033 s 0.0729 ± 0.00077 s 0.979 ± 0.011
coloring/nonsymmetric/row/direct/n=100000/p=5.0e-5 0.182 ± 0.002 s 0.185 ± 0.0032 s 0.986 ± 0.02
coloring/symmetric/column/direct/n=1000/p=0.002 0.946 ± 0.0079 ms 0.953 ± 0.0077 ms 0.992 ± 0.012
coloring/symmetric/column/direct/n=1000/p=0.005 2.17 ± 0.013 ms 2.2 ± 0.014 ms 0.988 ± 0.0088
coloring/symmetric/column/direct/n=1000/p=0.01 4.79 ± 0.021 ms 4.87 ± 0.026 ms 0.983 ± 0.0069
coloring/symmetric/column/direct/n=100000/p=0.0001 0.731 ± 0.0068 s 0.918 ± 0.13 s 0.797 ± 0.11
coloring/symmetric/column/direct/n=100000/p=2.0e-5 0.137 ± 0.00086 s 0.144 ± 0.0019 s 0.95 ± 0.014
coloring/symmetric/column/direct/n=100000/p=5.0e-5 0.323 ± 0.0013 s 0.347 ± 0.0076 s 0.929 ± 0.021
coloring/symmetric/column/substitution/n=1000/p=0.002 1.43 ± 0.015 ms 1.44 ± 0.015 ms 0.993 ± 0.015
coloring/symmetric/column/substitution/n=1000/p=0.005 3.74 ± 0.021 ms 3.77 ± 0.028 ms 0.99 ± 0.0091
coloring/symmetric/column/substitution/n=1000/p=0.01 8.72 ± 0.049 ms 8.86 ± 0.077 ms 0.984 ± 0.01
coloring/symmetric/column/substitution/n=100000/p=0.0001 1.47 ± 0.038 s 2.26 ± 0.059 s 0.65 ± 0.024
coloring/symmetric/column/substitution/n=100000/p=2.0e-5 0.213 ± 0.0025 s 0.232 ± 0.012 s 0.917 ± 0.049
coloring/symmetric/column/substitution/n=100000/p=5.0e-5 0.58 ± 0.0054 s 0.808 ± 0.024 s 0.718 ± 0.022
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.128 ± 0.0042 ms 0.0719 ± 0.0018 ms 1.79 ± 0.074
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.223 ± 0.0092 ms 0.13 ± 0.0029 ms 1.71 ± 0.08
decompress/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.389 ± 0.012 ms 0.26 ± 0.011 ms 1.5 ± 0.077
decompress/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.116 ± 0.0064 s 0.0725 ± 0.0036 s 1.6 ± 0.12
decompress/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 28.8 ± 0.76 ms 19.1 ± 0.55 ms 1.51 ± 0.059
decompress/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.0658 ± 0.0014 s 0.0421 ± 0.0012 s 1.56 ± 0.054
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.168 ± 0.0087 ms 0.171 ± 0.0057 ms 0.983 ± 0.061
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.342 ± 0.011 ms 0.342 ± 0.011 ms 0.999 ± 0.046
decompress/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.675 ± 0.012 ms 0.681 ± 0.012 ms 0.992 ± 0.025
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.182 ± 0.0059 s 0.209 ± 0.0085 s 0.871 ± 0.045
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.0353 ± 0.00064 s 0.0374 ± 0.0018 s 0.943 ± 0.047
decompress/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.0753 ± 0.0017 s 0.0842 ± 0.0045 s 0.894 ± 0.052
decompress/nonsymmetric/column/direct/n=1000/p=0.002 24.6 ± 1.2 μs 26.2 ± 1.2 μs 0.939 ± 0.063
decompress/nonsymmetric/column/direct/n=1000/p=0.005 0.0479 ± 0.0016 ms 0.0501 ± 0.0019 ms 0.958 ± 0.048
decompress/nonsymmetric/column/direct/n=1000/p=0.01 0.0898 ± 0.0041 ms 0.0913 ± 0.0043 ms 0.983 ± 0.065
decompress/nonsymmetric/column/direct/n=100000/p=0.0001 27.3 ± 0.7 ms 28.7 ± 1.1 ms 0.95 ± 0.045
decompress/nonsymmetric/column/direct/n=100000/p=2.0e-5 4.98 ± 0.61 ms 5.46 ± 0.41 ms 0.911 ± 0.13
decompress/nonsymmetric/column/direct/n=100000/p=5.0e-5 13.1 ± 0.37 ms 13.7 ± 0.57 ms 0.956 ± 0.048
decompress/nonsymmetric/row/direct/n=1000/p=0.002 24.5 ± 1.3 μs 27.2 ± 4.4 μs 0.902 ± 0.15
decompress/nonsymmetric/row/direct/n=1000/p=0.005 0.0436 ± 0.0015 ms 0.0465 ± 0.0028 ms 0.938 ± 0.066
decompress/nonsymmetric/row/direct/n=1000/p=0.01 0.0798 ± 0.0033 ms 0.0839 ± 0.0048 ms 0.952 ± 0.067
decompress/nonsymmetric/row/direct/n=100000/p=0.0001 12.5 ± 0.42 ms 12.2 ± 0.39 ms 1.02 ± 0.048
decompress/nonsymmetric/row/direct/n=100000/p=2.0e-5 3.14 ± 0.15 ms 3.29 ± 0.15 ms 0.953 ± 0.063
decompress/nonsymmetric/row/direct/n=100000/p=5.0e-5 6.06 ± 0.29 ms 6.2 ± 0.26 ms 0.977 ± 0.062
decompress/symmetric/column/direct/n=1000/p=0.002 24.2 ± 1.2 μs 25.4 ± 1.2 μs 0.952 ± 0.066
decompress/symmetric/column/direct/n=1000/p=0.005 0.0463 ± 0.0021 ms 0.0481 ± 0.0022 ms 0.964 ± 0.062
decompress/symmetric/column/direct/n=1000/p=0.01 0.0846 ± 0.0035 ms 0.0864 ± 0.0039 ms 0.978 ± 0.06
decompress/symmetric/column/direct/n=100000/p=0.0001 26.5 ± 1.1 ms 28.4 ± 1.1 ms 0.933 ± 0.053
decompress/symmetric/column/direct/n=100000/p=2.0e-5 4.62 ± 0.87 ms 5.58 ± 0.44 ms 0.828 ± 0.17
decompress/symmetric/column/direct/n=100000/p=5.0e-5 12.6 ± 0.51 ms 13.3 ± 0.52 ms 0.945 ± 0.053
decompress/symmetric/column/substitution/n=1000/p=0.002 0.1 ± 0.0051 ms 0.102 ± 0.0037 ms 0.978 ± 0.061
decompress/symmetric/column/substitution/n=1000/p=0.005 0.211 ± 0.0086 ms 0.213 ± 0.0079 ms 0.989 ± 0.055
decompress/symmetric/column/substitution/n=1000/p=0.01 0.402 ± 0.013 ms 0.416 ± 0.013 ms 0.966 ± 0.043
decompress/symmetric/column/substitution/n=100000/p=0.0001 0.0965 ± 0.0038 s 0.107 ± 0.0059 s 0.901 ± 0.061
decompress/symmetric/column/substitution/n=100000/p=2.0e-5 24.2 ± 0.37 ms 27.2 ± 0.96 ms 0.887 ± 0.034
decompress/symmetric/column/substitution/n=100000/p=5.0e-5 0.0488 ± 0.001 s 0.0533 ± 0.0023 s 0.917 ± 0.044
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.736 ± 0.012 ms 0.738 ± 0.011 ms 0.997 ± 0.021
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 2.56 ± 0.04 ms 2.55 ± 0.023 ms 1 ± 0.018
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 7.84 ± 0.076 ms 8.71 ± 0.13 ms 0.9 ± 0.016
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 1.61 ± 0.042 s 1.98 ± 0.027 s 0.816 ± 0.024
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.133 ± 0.0046 s 0.133 ± 0.0042 s 0.997 ± 0.047
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.508 ± 0.019 s 0.508 ± 0.035 s 1 ± 0.079
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.733 ± 0.0087 ms 0.726 ± 0.0091 ms 1.01 ± 0.017
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 2.62 ± 0.035 ms 2.58 ± 0.028 ms 1.02 ± 0.018
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 8.05 ± 0.18 ms 8.04 ± 0.069 ms 1 ± 0.024
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 1.66 ± 0.027 s 1.67 ± 0.025 s 0.993 ± 0.022
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.137 ± 0.0011 s 0.144 ± 0.0043 s 0.952 ± 0.03
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.524 ± 0.013 s 0.543 ± 0.012 s 0.966 ± 0.032
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.732 ± 0.0081 ms 0.725 ± 0.009 ms 1.01 ± 0.017
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 2.54 ± 0.042 ms 2.52 ± 0.022 ms 1.01 ± 0.019
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 7.79 ± 0.065 ms 7.9 ± 0.068 ms 0.986 ± 0.012
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 1.69 ± 0.046 s 1.78 ± 0.06 s 0.953 ± 0.041
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.149 ± 0.0026 s 0.146 ± 0.0066 s 1.02 ± 0.049
order/nonsymmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.54 ± 0.015 s 0.643 ± 0.062 s 0.841 ± 0.084
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.302 ± 0.01 ms 0.303 ± 0.013 ms 0.996 ± 0.055
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.735 ± 0.0074 ms 0.738 ± 0.0078 ms 0.996 ± 0.015
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 1.82 ± 0.0098 ms 1.77 ± 0.011 ms 1.03 ± 0.0083
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.287 ± 0.0038 s 0.295 ± 0.0047 s 0.974 ± 0.02
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.0545 ± 0.0041 s 0.0574 ± 0.00074 s 0.949 ± 0.073
order/nonsymmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.135 ± 0.025 s 0.143 ± 0.003 s 0.942 ± 0.18
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.739 ± 0.0096 ms 0.791 ± 0.0089 ms 0.935 ± 0.016
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 2.57 ± 0.042 ms 2.69 ± 0.024 ms 0.955 ± 0.018
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 7.86 ± 0.074 ms 8.21 ± 0.086 ms 0.957 ± 0.014
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 1.55 ± 0.068 s 1.98 ± 0.033 s 0.784 ± 0.037
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.132 ± 0.0013 s 0.137 ± 0.0044 s 0.963 ± 0.033
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.497 ± 0.025 s 0.605 ± 0.027 s 0.821 ± 0.055
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.736 ± 0.0097 ms 0.729 ± 0.0081 ms 1.01 ± 0.017
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 2.58 ± 0.022 ms 2.56 ± 0.018 ms 1.01 ± 0.011
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 7.99 ± 0.063 ms 8.01 ± 0.064 ms 0.998 ± 0.011
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 1.66 ± 0.023 s 1.83 ± 0.022 s 0.91 ± 0.017
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.137 ± 0.0011 s 0.141 ± 0.0033 s 0.971 ± 0.024
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.54 ± 0.019 s 0.557 ± 0.025 s 0.97 ± 0.055
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.731 ± 0.011 ms 0.724 ± 0.0092 ms 1.01 ± 0.02
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 2.53 ± 0.043 ms 2.51 ± 0.019 ms 1.01 ± 0.019
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 7.81 ± 0.13 ms 7.89 ± 0.066 ms 0.99 ± 0.019
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 1.69 ± 0.04 s 2.17 ± 0.011 s 0.779 ± 0.019
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.148 ± 0.0035 s 0.155 ± 0.0088 s 0.954 ± 0.059
order/nonsymmetric/row/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.55 ± 0.023 s 0.692 ± 0.016 s 0.795 ± 0.038
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.301 ± 0.01 ms 0.3 ± 0.01 ms 1.01 ± 0.049
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.734 ± 0.008 ms 0.73 ± 0.012 ms 1.01 ± 0.02
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 1.82 ± 0.013 ms 1.76 ± 0.034 ms 1.03 ± 0.021
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 0.29 ± 0.0057 s 0.295 ± 0.01 s 0.98 ± 0.038
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 0.0561 ± 0.00048 s 0.0561 ± 0.00051 s 1 ± 0.012
order/nonsymmetric/row/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 0.133 ± 0.0011 s 0.132 ± 0.001 s 1.01 ± 0.011
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.002 0.229 ± 0.0086 ms 0.23 ± 0.0086 ms 0.998 ± 0.053
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.005 0.416 ± 0.012 ms 0.418 ± 0.013 ms 0.996 ± 0.041
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=1000/p=0.01 0.682 ± 0.012 ms 0.687 ± 0.011 ms 0.993 ± 0.023
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=0.0001 0.156 ± 0.0028 s 0.164 ± 0.0029 s 0.949 ± 0.024
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=2.0e-5 0.0461 ± 0.00044 s 0.0463 ± 0.00079 s 0.996 ± 0.019
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :high2low, false}()/n=100000/p=5.0e-5 0.0876 ± 0.0015 s 0.0899 ± 0.0045 s 0.975 ± 0.052
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.002 0.211 ± 0.0044 ms 0.214 ± 0.0046 ms 0.988 ± 0.03
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.005 0.395 ± 0.012 ms 0.399 ± 0.012 ms 0.989 ± 0.041
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=1000/p=0.01 0.665 ± 0.013 ms 0.672 ± 0.011 ms 0.988 ± 0.025
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=0.0001 0.142 ± 0.0054 s 0.159 ± 0.012 s 0.891 ± 0.076
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=2.0e-5 0.0431 ± 0.00077 s 0.0448 ± 0.0016 s 0.961 ± 0.039
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:back, :low2high, false}()/n=100000/p=5.0e-5 0.0826 ± 0.0048 s 0.0901 ± 0.0045 s 0.917 ± 0.07
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.002 0.193 ± 0.0045 ms 0.192 ± 0.0046 ms 1.01 ± 0.034
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.005 0.366 ± 0.011 ms 0.364 ± 0.012 ms 1.01 ± 0.045
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=1000/p=0.01 0.609 ± 0.013 ms 0.606 ± 0.012 ms 1.01 ± 0.029
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=0.0001 0.138 ± 0.0069 s 0.157 ± 0.0075 s 0.878 ± 0.061
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=2.0e-5 0.0419 ± 0.0012 s 0.0431 ± 0.0011 s 0.973 ± 0.037
order/symmetric/column/SparseMatrixColorings.DynamicDegreeBasedOrder{:forward, :low2high, false}()/n=100000/p=5.0e-5 0.0778 ± 0.002 s 0.0874 ± 0.0058 s 0.89 ± 0.063
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.002 0.105 ± 0.0022 ms 0.106 ± 0.0027 ms 0.995 ± 0.033
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.005 0.138 ± 0.0036 ms 0.125 ± 0.012 ms 1.1 ± 0.11
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=1000/p=0.01 0.146 ± 0.01 ms 0.148 ± 0.0089 ms 0.986 ± 0.09
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=0.0001 25.7 ± 0.14 ms 25.7 ± 0.18 ms 1 ± 0.0088
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=2.0e-5 21.9 ± 0.11 ms 21.8 ± 0.095 ms 1 ± 0.0067
order/symmetric/column/SparseMatrixColorings.LargestFirst()/n=100000/p=5.0e-5 23.8 ± 0.12 ms 23.7 ± 0.12 ms 1 ± 0.0074
time_to_load 0.293 ± 0.0054 s 0.295 ± 0.0012 s 0.991 ± 0.019
main 28cbae0... main / 28cbae0...
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.002 0.515 k allocs: 2.33 MB 0.515 k allocs: 2.25 MB 1.03
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.005 0.525 k allocs: 3.91 MB 0.525 k allocs: 3.72 MB 1.05
coloring/nonsymmetric/bidirectional/direct/n=1000/p=0.01 0.535 k allocs: 6.85 MB 0.535 k allocs: 6.47 MB 1.06
coloring/nonsymmetric/bidirectional/direct/n=100000/p=0.0001 0.62 k allocs: 0.71 GB 0.62 k allocs: 0.672 GB 1.06
coloring/nonsymmetric/bidirectional/direct/n=100000/p=2.0e-5 0.59 k allocs: 0.247 GB 0.59 k allocs: 0.239 GB 1.03
coloring/nonsymmetric/bidirectional/direct/n=100000/p=5.0e-5 0.6 k allocs: 0.412 GB 0.6 k allocs: 0.393 GB 1.05
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.002 0.668 k allocs: 2.84 MB 0.658 k allocs: 2.76 MB 1.03
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.005 0.67 k allocs: 4.83 MB 0.66 k allocs: 4.64 MB 1.04
coloring/nonsymmetric/bidirectional/substitution/n=1000/p=0.01 0.67 k allocs: 8.34 MB 0.66 k allocs: 7.96 MB 1.05
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=0.0001 0.68 k allocs: 0.813 GB 0.67 k allocs: 0.776 GB 1.05
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=2.0e-5 0.68 k allocs: 0.273 GB 0.67 k allocs: 0.266 GB 1.03
coloring/nonsymmetric/bidirectional/substitution/n=100000/p=5.0e-5 0.68 k allocs: 0.473 GB 0.67 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.25 k allocs: 0.633 MB 0.25 k allocs: 0.633 MB 1
coloring/symmetric/column/direct/n=1000/p=0.005 0.26 k allocs: 1.03 MB 0.26 k allocs: 1.03 MB 1
coloring/symmetric/column/direct/n=1000/p=0.01 0.262 k allocs: 1.56 MB 0.262 k allocs: 1.56 MB 1
coloring/symmetric/column/direct/n=100000/p=0.0001 0.345 k allocs: 0.172 GB 0.345 k allocs: 0.172 GB 1
coloring/symmetric/column/direct/n=100000/p=2.0e-5 0.315 k allocs: 0.0608 GB 0.315 k allocs: 0.0608 GB 1
coloring/symmetric/column/direct/n=100000/p=5.0e-5 0.325 k allocs: 0.0952 GB 0.325 k allocs: 0.0952 GB 1
coloring/symmetric/column/substitution/n=1000/p=0.002 0.41 k allocs: 0.95 MB 0.41 k allocs: 0.95 MB 1
coloring/symmetric/column/substitution/n=1000/p=0.005 0.415 k allocs: 1.65 MB 0.415 k allocs: 1.65 MB 1
coloring/symmetric/column/substitution/n=1000/p=0.01 0.415 k allocs: 2.86 MB 0.415 k allocs: 2.86 MB 1
coloring/symmetric/column/substitution/n=100000/p=0.0001 0.425 k allocs: 0.276 GB 0.425 k allocs: 0.276 GB 1
coloring/symmetric/column/substitution/n=100000/p=2.0e-5 0.425 k allocs: 0.0901 GB 0.425 k allocs: 0.0901 GB 1
coloring/symmetric/column/substitution/n=100000/p=5.0e-5 0.425 k allocs: 0.16 GB 0.425 k allocs: 0.16 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.201 k allocs: 11.8 kB 0.201 k allocs: 11.8 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.18%. Comparing base (e951ff2) to head (026b715).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #294   +/-   ##
=======================================
  Coverage   99.17%   99.18%           
=======================================
  Files          22       22           
  Lines        2304     2325   +21     
=======================================
+ Hits         2285     2306   +21     
  Misses         19       19           

☔ 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.

@amontoison
amontoison force-pushed the am/decompression_uplo branch from c72b0c8 to dd445bd Compare September 9, 2026 03:58
amontoison added a commit that referenced this pull request Sep 19, 2026
`ColoringProblem` gains a third type parameter `uplo`, so the triangle to
recover is chosen once, up front, and propagates all the way to decompression.
This answers the review question on #294: the trailing `uplo` argument of
`decompress!` / `decompress_single_color!` is gone, so a result and a call site
can no longer disagree about which triangle is meant.

- `ColoringProblem{structure,partition,uplo}`, with `uplo` defaulting to `:F`.
  `ColoringProblem{structure,partition}()` still works, via an outer
  constructor on the partially applied UnionAll.
- `uplo != :F` is rejected for non-symmetric problems: `ColumnColoringResult`
  and `RowColoringResult` have no triangle logic, so the option would be
  silently dropped. The `:L` used internally by bicoloring is unaffected, it is
  passed explicitly to the inner symmetric result.
- `compressed_indices` only holds the requested triangle, so the star-coloring
  decompression kernels now walk it with a running counter instead of indexing
  it by position in the full pattern. In the single-color triangle fallback the
  hub is not necessarily the current column, so the spoke is decoded from the
  stored value rather than assumed.
- Out-of-place `decompress` allocates a target with the right triangular
  pattern for symmetric results.
- GPU extensions reject `uplo != :F` at coloring time (a real error rather than
  an `@assert`, since it is now user-reachable) instead of at decompression.

Breaking, hence 0.4.28 -> 0.5.0. Migration:
`decompress!(A, B, result, :U)` becomes
`result_U = coloring(S, ColoringProblem(; structure=:symmetric, uplo=:U), algo)`
followed by `decompress!(A, B, result_U)`. One result now yields exactly one
triangle, so build one result per triangle if you need several.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@amontoison
amontoison force-pushed the am/decompression_uplo branch from 28cbae0 to 026b715 Compare September 20, 2026 04:08
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