Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable the hybrid solver interface #1366

Merged
merged 7 commits into from
Oct 31, 2023

Conversation

cdiener
Copy link
Member

@cdiener cdiener commented Oct 27, 2023

  • description of feature/fix
  • tests added/passed
  • add an entry to the next release

This enables the hybrid solver from optlang.

Example

In [1]: from cobra.io import load_model

In [2]: mod = load_model("textbook")

In [3]: mod.solver.configuration.lp_method = "auto"

In [4]: mod.solver.configuration.qp_method = "auto"

In [5]: mod.solver = "hybrid"

In [6]: mod.optimize()
Out[6]: <Solution 0.874 at 0x7f27a95d20d0>

In [7]: from cobra.medium import minimal_medium

In [8]: minimal_medium(mod, minimize_components=True, open_exchanges=True)
/home/cdiener/code/cobrapy/src/cobra/medium/minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
  medium = pd.Series()
Out[8]: 
EX_fru_e       7.040736
EX_gln__L_e    0.272640
EX_pi_e        0.367870
dtype: float64

In [9]: from cobra.flux_analysis import moma

In [10]: moma(mod, linear=False)  # kind of a stupid example, just to illustrate it works
Out[10]: <Solution 0.000 at 0x7f27a8b52390>

Things to consider

  1. There is currently an issue with the wheels for highspy. The wheels on PyPI only work with linux at the moment. There are some candiates here in the artifacts. Installing from source will work on all OSs. Broken wheels are handled by optlang and if code is run on a platform with a broken highspy wheel it will not be listed as an available solver.

  2. This is not specific to the hybrid interface but in some case one has to set the configuration for LP/QP methods before switching if the next solver does not support he same methods. Maybe this should be handled more gracefully in optlang by using the default and issuing a warning instead of raising an error.

  3. HIGHS and OSQP only support getting the full set of primals/duals at once, so there is no good way of getting primals for only one variable. Right now, the interface will thus obtain the full solution on every solve, which makes basis recycling a bit slower. So it is not the best solver for FVA or gene deletions.

  4. Is it okay if I also fix the minimal_medium pandas deprecation warning here?

Full test and benchmark results

===================================================== test session starts ======================================================
platform linux -- Python 3.11.6, pytest-7.3.0, pluggy-1.0.0
benchmark: 4.0.0 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/cdiener/code/cobrapy
configfile: tox.ini
testpaths: tests
plugins: cov-4.0.0, mock-3.10.0, anyio-3.6.2, benchmark-4.0.0
collected 670 items                                                                                                            

tests/test_core/test_configuration.py ......                                                                             [  0%]
tests/test_core/test_core_reaction.py ...........s.........................................x.......                      [ 10%]
tests/test_core/test_dictlist.py ......................                                                                  [ 13%]
tests/test_core/test_formula.py .....                                                                                    [ 14%]
tests/test_core/test_gene.py .                                                                                           [ 14%]
tests/test_core/test_gpr.py .....................x..x.............................................                       [ 24%]
tests/test_core/test_group.py ..                                                                                         [ 24%]
tests/test_core/test_metabolite.py ....s..s.                                                                             [ 26%]
tests/test_core/test_model.py ...............................................................s.                          [ 35%]
tests/test_core/test_solution.py ..s                                                                                     [ 36%]
tests/test_flux_analysis/test_deletion.py ....s.....                                                                     [ 37%]
tests/test_flux_analysis/test_fastcc.py ....                                                                             [ 38%]
tests/test_flux_analysis/test_geometric.py ..                                                                            [ 38%]
tests/test_flux_analysis/test_moma.py .                                                                                  [ 38%]
tests/test_flux_analysis/test_parsimonious.py ..                                                                         [ 39%]
tests/test_flux_analysis/test_reaction.py .                                                                              [ 39%]
tests/test_flux_analysis/test_room.py ....                                                                               [ 40%]
tests/test_flux_analysis/test_variability.py .......                                                                     [ 41%]
tests/test_flux_analysis/test_deletion.py ..........                                                                     [ 42%]
tests/test_flux_analysis/test_fastcc.py ....                                                                             [ 43%]
tests/test_flux_analysis/test_geometric.py ..                                                                            [ 43%]
tests/test_flux_analysis/test_moma.py .                                                                                  [ 43%]
tests/test_flux_analysis/test_parsimonious.py ..                                                                         [ 43%]
tests/test_flux_analysis/test_reaction.py .                                                                              [ 44%]
tests/test_flux_analysis/test_room.py ....                                                                               [ 44%]
tests/test_flux_analysis/test_variability.py .......                                                                     [ 45%]
tests/test_flux_analysis/test_deletion.py ..........                                                                     [ 47%]
tests/test_flux_analysis/test_fastcc.py ....                                                                             [ 47%]
tests/test_flux_analysis/test_geometric.py ..                                                                            [ 48%]
tests/test_flux_analysis/test_moma.py .                                                                                  [ 48%]
tests/test_flux_analysis/test_parsimonious.py ..                                                                         [ 48%]
tests/test_flux_analysis/test_reaction.py .                                                                              [ 48%]
tests/test_flux_analysis/test_room.py ....                                                                               [ 49%]
tests/test_flux_analysis/test_variability.py .......                                                                     [ 50%]
tests/test_flux_analysis/test_deletion.py ...                                                                            [ 50%]
tests/test_flux_analysis/test_moma.py .                                                                                  [ 50%]
tests/test_flux_analysis/test_deletion.py ...                                                                            [ 51%]
tests/test_flux_analysis/test_moma.py .                                                                                  [ 51%]
tests/test_flux_analysis/test_deletion.py ......                                                                         [ 52%]
tests/test_flux_analysis/test_gapfilling.py .                                                                            [ 52%]
tests/test_flux_analysis/test_helpers.py ...                                                                             [ 52%]
tests/test_flux_analysis/test_loopless.py .......                                                                        [ 54%]
tests/test_flux_analysis/test_phenotype_phase_plane.py ......                                                            [ 54%]
tests/test_flux_analysis/test_variability.py .......                                                                     [ 55%]
tests/test_io/test_annotation.py ..                                                                                      [ 56%]
tests/test_io/test_annotation_format.py ..                                                                               [ 56%]
tests/test_io/test_io_order.py ...........................                                                               [ 60%]
tests/test_io/test_json.py ....                                                                                          [ 61%]
tests/test_io/test_mat.py ...............                                                                                [ 63%]
tests/test_io/test_notes.py .                                                                                            [ 63%]
tests/test_io/test_pickle.py ..                                                                                          [ 63%]
tests/test_io/test_sbml.py .ssss............xxxx.x.x..s.............                                                     [ 70%]
tests/test_io/test_yaml.py .x                                                                                            [ 70%]
tests/test_io/test_web/test_load.py .......                                                                              [ 71%]
tests/test_manipulation/test_annotate.py .                                                                               [ 71%]
tests/test_manipulation/test_delete.py .......                                                                           [ 72%]
tests/test_manipulation/test_modify.py ...                                                                               [ 72%]
tests/test_manipulation/test_validate.py ..                                                                              [ 73%]
tests/test_medium/test_boundary_types.py .........                                                                       [ 74%]
tests/test_medium/test_minimal_medium.py ..........                                                                      [ 76%]
tests/test_sampling/test_achr.py ......                                                                                  [ 77%]
tests/test_sampling/test_optgp.py ......                                                                                 [ 77%]
tests/test_sampling/test_sampling.py ..........                                                                          [ 79%]
tests/test_summary/test_metabolite_summary.py .................                                                          [ 81%]
tests/test_summary/test_model_summary.py ...............                                                                 [ 84%]
tests/test_summary/test_reaction_summary.py ...........                                                                  [ 85%]
tests/test_summary/test_metabolite_summary.py .................                                                          [ 88%]
tests/test_summary/test_model_summary.py ...............                                                                 [ 90%]
tests/test_summary/test_reaction_summary.py ....................                                                         [ 93%]
tests/test_util/test_array.py ..                                                                                         [ 93%]
tests/test_util/test_context.py ...                                                                                      [ 94%]
tests/test_util/test_process_pool.py ...............                                                                     [ 96%]
tests/test_util/test_solver.py ..................s                                                                       [ 99%]
tests/test_util/test_util.py ....                                                                                        [100%]

======================================================= warnings summary =======================================================
tests/test_core/test_gpr.py::test_and_gpr[a AND b-2-gpr_genes2-a and b]
tests/test_core/test_gpr.py::test_gpr_equality_with_bolean_logic[a_and_b_strs]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists0]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists1]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists2]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists3]
  /home/cdiener/code/cobrapy/src/cobra/core/gene.py:358: SyntaxWarning: Uppercase AND/OR found in rule 'a AND b'.
    warn(

tests/test_core/test_gpr.py::test_or_gpr[a OR b-2-gpr_genes2-a or b]
tests/test_core/test_gpr.py::test_gpr_as_symbolic_boolean[a OR b-symbolic_gpr2]
tests/test_core/test_gpr.py::test_gpr_equality_with_bolean_logic[a_or_b_strs]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists0]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists4]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists5]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists6]
tests/test_core/test_gpr.py::test_gpr_from_symbolic[a OR b-symbolic_gpr5]
  /home/cdiener/code/cobrapy/src/cobra/core/gene.py:358: SyntaxWarning: Uppercase AND/OR found in rule 'a OR b'.
    warn(

tests/test_core/test_gpr.py::test_complicated_gpr[(a OR b) AND c]
tests/test_core/test_gpr.py::test_gpr_as_symbolic_boolean[(a OR b) AND c-symbolic_gpr6]
tests/test_core/test_gpr.py::test_gpr_equality_with_bolean_logic[a_b_c_or_and_strs]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists3]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists6]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists8]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists9]
tests/test_core/test_gpr.py::test_gpr_from_symbolic[(a OR b) AND c-symbolic_gpr9]
  /home/cdiener/code/cobrapy/src/cobra/core/gene.py:358: SyntaxWarning: Uppercase AND/OR found in rule '(a OR b) AND c'.
    warn(

tests/test_core/test_gpr.py::test_gpr_that_needs_two_replacements
  /home/cdiener/code/cobrapy/src/cobra/core/gene.py:358: SyntaxWarning: Uppercase AND/OR found in rule '(591001.3.peg.1891 AND 591001.3.peg.1892 AND 591001.3.peg.1893)'.
    warn(

tests/test_core/test_gpr.py::test_gpr_equality_with_bolean_logic[a_and_b_strs]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists0]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists1]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists2]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists3]
  /home/cdiener/code/cobrapy/src/cobra/core/gene.py:358: SyntaxWarning: Uppercase AND/OR found in rule 'b AND a'.
    warn(

tests/test_core/test_gpr.py::test_gpr_equality_with_bolean_logic[a_or_b_strs]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists0]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists4]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists5]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists6]
  /home/cdiener/code/cobrapy/src/cobra/core/gene.py:358: SyntaxWarning: Uppercase AND/OR found in rule 'b OR a'.
    warn(

tests/test_core/test_gpr.py::test_gpr_equality_with_bolean_logic[a_b_c_or_strs]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists1]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists4]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists7]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists8]
  /home/cdiener/code/cobrapy/src/cobra/core/gene.py:358: SyntaxWarning: Uppercase AND/OR found in rule 'a OR b or c'.
    warn(

tests/test_core/test_gpr.py::test_gpr_equality_with_bolean_logic[a_b_c_and_strs]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists2]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists5]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists7]
tests/test_core/test_gpr.py::test_gpr_inequality_boolean[gpr_lists9]
  /home/cdiener/code/cobrapy/src/cobra/core/gene.py:358: SyntaxWarning: Uppercase AND/OR found in rule 'a AND b and c'.
    warn(

tests/test_core/test_model.py::test_reaction_delete
tests/test_core/test_model.py::test_reaction_delete
  /home/cdiener/code/cobrapy/src/cobra/core/reaction.py:879: DeprecationWarning: delete is deprecated. Use reaction.remove_from_model instead
    warn(

tests/test_core/test_model.py::test_group_loss_of_elements
tests/test_flux_analysis/test_gapfilling.py::test_gapfilling
  /home/cdiener/code/cobrapy/src/cobra/core/group.py:147: UserWarning: need to pass in a list
    warn("need to pass in a list")

tests/test_core/test_model.py::test_change_objective
tests/test_core/test_model.py::test_change_objective
tests/test_core/test_model.py::test_change_objective
  /home/cdiener/code/cobrapy/src/cobra/core/reaction.py:761: DeprecationWarning: Please use reaction.flux instead.
    warn("Please use reaction.flux instead.", DeprecationWarning)

tests/test_flux_analysis/test_geometric.py: 1 warning
tests/test_io/test_json.py: 6 warnings
tests/test_io/test_mat.py: 14 warnings
tests/test_io/test_pickle.py: 2 warnings
tests/test_io/test_sbml.py: 18 warnings
tests/test_io/test_yaml.py: 2 warnings
  /home/cdiener/code/cobrapy/src/cobra/util/solver.py:554: UserWarning: Solver status is 'infeasible'.
    warn(f"Solver status is '{status}'.", UserWarning)

tests/test_medium/test_minimal_medium.py: 274 warnings
  /home/cdiener/code/cobrapy/src/cobra/medium/minimal_medium.py:112: FutureWarning: The default dtype for empty Series will be 'object' instead of 'float64' in a future version. Specify a dtype explicitly to silence this warning.
    medium = pd.Series()

tests/test_util/test_process_pool.py::test_with_context
  /home/cdiener/code/cobrapy/src/cobra/util/process_pool.py:72: PytestMockWarning: Mocks returned by pytest-mock do not need to be used as context managers. The mocker fixture automatically undoes mocking at the end of a test. This warning can be ignored if it was triggered by mocking a context manager. https://pytest-mock.readthedocs.io/en/latest/remarks.html#usage-as-context-manager
    self._pool.__enter__()

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

-------------------------------------------------------------------------------------------------------------------------------- benchmark: 56 tests --------------------------------------------------------------------------------------------------------------------------------
Name (time in us)                                                       Min                         Max                        Mean                     StdDev                     Median                         IQR            Outliers           OPS            Rounds  Iterations
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
test_subtract_metabolite_benchmark[gurobi]                           2.2210 (1.0)               42.8750 (1.0)                2.5678 (1.0)               1.6440 (1.0)               2.4480 (1.0)                0.1160 (1.0)        25;378  389,445.0767 (1.0)        4659           1
test_subtract_metabolite_benchmark[cplex]                            2.2890 (1.03)              68.3980 (1.60)               4.1441 (1.61)              3.7591 (2.29)              3.0860 (1.26)               2.0360 (17.55)     164;171  241,305.4923 (0.62)       6378           1
test_subtract_metabolite_benchmark[glpk]                             2.3340 (1.05)              48.0570 (1.12)               4.9202 (1.92)              2.8143 (1.71)              4.5730 (1.87)               0.9762 (8.42)       29;102  203,242.1688 (0.52)       1943           1
test_change_objective_benchmark[optlang-glpk]                      120.6360 (54.32)            522.4520 (12.19)            149.3786 (58.17)            38.1732 (23.22)           132.2330 (54.02)             24.0393 (207.23)    368;368    6,694.3987 (0.02)       2601           1
test_change_objective_benchmark[optlang-cplex]                     199.1030 (89.65)            459.3160 (10.71)            223.5738 (87.07)            43.9883 (26.76)           210.1320 (85.84)             21.0570 (181.52)        4;4    4,472.7953 (0.01)         48           1
test_achr_sample_benchmark                                         240.2170 (108.16)        15,246.6630 (355.61)           383.1738 (149.23)          722.3710 (439.40)          310.4670 (126.82)           168.2637 (>1000.0)       4;7    2,609.7819 (0.01)        967           1
test_optgp_sample_benchmark                                        310.3160 (139.72)           847.1020 (19.76)            433.5972 (168.86)          118.9395 (72.35)           374.1195 (152.83)           237.7370 (>1000.0)     331;0    2,306.2878 (0.01)       1014           1
test_loopless_benchmark_after                                      785.5410 (353.69)         2,219.7130 (51.77)            892.6913 (347.65)          142.5749 (86.72)           830.3280 (339.19)           129.0415 (>1000.0)    110;64    1,120.2081 (0.00)        980           1
test_loopless_benchmark_before                                     942.2160 (424.23)         3,020.4740 (70.45)          1,182.0751 (460.35)          241.3384 (146.80)        1,117.8755 (456.65)           188.4715 (>1000.0)     61;43      845.9700 (0.00)        692           1
test_minimal_medium_mip_benchmark                                4,641.6310 (>1000.0)       10,877.9680 (253.71)         5,577.8353 (>1000.0)       1,045.6055 (636.01)        5,150.4305 (>1000.0)        1,408.0545 (>1000.0)      22;3      179.2810 (0.00)        168           1
test_minimal_medium_linear_benchmark                             4,746.4850 (>1000.0)       12,780.4260 (298.09)         6,007.7749 (>1000.0)       1,645.3141 (>1000.0)       5,223.0170 (>1000.0)        1,485.7672 (>1000.0)      12;7      166.4510 (0.00)         91           1
test_copy_benchmark[optlang-glpk]                                8,639.2220 (>1000.0)      215,628.2820 (>1000.0)       13,219.7811 (>1000.0)      22,812.2820 (>1000.0)      10,561.0590 (>1000.0)        1,718.6073 (>1000.0)       1;3       75.6442 (0.00)         81           1
test_copy_benchmark[optlang-cplex]                               8,842.8780 (>1000.0)       14,316.7610 (333.92)        10,919.7518 (>1000.0)       1,222.4106 (743.56)       10,966.1480 (>1000.0)        1,376.3210 (>1000.0)       9;1       91.5772 (0.00)         30           1
test_deepcopy_benchmark                                         15,694.4280 (>1000.0)      314,824.4660 (>1000.0)       26,095.8490 (>1000.0)      44,629.7774 (>1000.0)      18,967.8615 (>1000.0)        4,623.8495 (>1000.0)       1;1       38.3203 (0.00)         44           1
test_fastcc_benchmark[glpk]                                     18,808.2300 (>1000.0)       27,621.1050 (644.22)        20,942.8220 (>1000.0)       1,611.5068 (980.24)       20,809.4850 (>1000.0)        1,774.9317 (>1000.0)      11;1       47.7491 (0.00)         43           1
test_gpr_equality_benchmark                                     20,437.4840 (>1000.0)       25,558.5890 (596.12)        22,338.0347 (>1000.0)       1,337.4611 (813.54)       22,115.0325 (>1000.0)        1,819.1530 (>1000.0)       9;0       44.7667 (0.00)         32           1
test_single_reaction_deletion_benchmark[glpk]                   20,840.1330 (>1000.0)       24,988.4670 (582.82)        22,332.7618 (>1000.0)       1,081.6181 (657.92)       22,378.5120 (>1000.0)        1,209.3540 (>1000.0)      12;3       44.7773 (0.00)         37           1
test_single_gene_deletion_linear_moma_benchmark[glpk]           23,055.7340 (>1000.0)       38,615.4990 (900.65)        26,319.2084 (>1000.0)       3,245.1638 (>1000.0)      25,390.9915 (>1000.0)        3,970.6340 (>1000.0)       5;1       37.9951 (0.00)         30           1
test_fastcc_benchmark[cplex]                                    23,700.8330 (>1000.0)       32,639.7080 (761.28)        25,774.7391 (>1000.0)       2,181.1494 (>1000.0)      25,081.3380 (>1000.0)        2,383.9635 (>1000.0)       6;2       38.7977 (0.00)         36           1
test_single_gene_deletion_linear_room_benchmark[glpk]           25,950.2090 (>1000.0)       47,668.3800 (>1000.0)       31,951.9793 (>1000.0)       5,611.0599 (>1000.0)      31,134.1310 (>1000.0)        6,255.3290 (>1000.0)       6;1       31.2970 (0.00)         19           1
test_single_gene_deletion_moma_benchmark[cplex]                 28,314.8480 (>1000.0)       40,975.5620 (955.70)        34,476.9840 (>1000.0)       4,075.9781 (>1000.0)      33,988.3440 (>1000.0)        8,056.1982 (>1000.0)      11;0       29.0049 (0.00)         25           1
test_single_gene_deletion_linear_room_benchmark[cplex]          30,500.0670 (>1000.0)       68,856.1120 (>1000.0)       42,649.5639 (>1000.0)      10,259.0894 (>1000.0)      42,607.3730 (>1000.0)       13,912.1007 (>1000.0)       6;1       23.4469 (0.00)         17           1
test_single_gene_deletion_linear_moma_benchmark[cplex]          33,484.8950 (>1000.0)       46,683.3010 (>1000.0)       37,811.7433 (>1000.0)       4,233.0393 (>1000.0)      36,566.5220 (>1000.0)        5,082.0500 (>1000.0)       5;0       26.4468 (0.00)         22           1
test_single_reaction_deletion_benchmark[cplex]                  35,597.8390 (>1000.0)       48,411.2350 (>1000.0)       41,711.3557 (>1000.0)       4,106.7386 (>1000.0)      41,938.5000 (>1000.0)        7,516.9975 (>1000.0)       9;0       23.9743 (0.00)         24           1
test_fastcc_benchmark[hybrid]                                   43,641.5370 (>1000.0)       80,763.9400 (>1000.0)       55,096.7471 (>1000.0)       8,855.5439 (>1000.0)      53,501.7400 (>1000.0)        3,900.5073 (>1000.0)       4;4       18.1499 (0.00)         15           1
test_add_metabolite_benchmark[gurobi]                           47,171.5360 (>1000.0)       51,967.1480 (>1000.0)       48,282.8281 (>1000.0)       1,196.3889 (727.73)       47,844.2310 (>1000.0)        1,031.6945 (>1000.0)       2;2       20.7113 (0.00)         19           1
test_add_metabolite_benchmark[cplex]                            47,986.2910 (>1000.0)       60,508.3480 (>1000.0)       49,912.8654 (>1000.0)       3,083.5317 (>1000.0)      49,053.2230 (>1000.0)        1,153.1555 (>1000.0)       2;3       20.0349 (0.00)         20           1
test_add_metabolite_benchmark[glpk]                             48,359.1450 (>1000.0)       53,027.6900 (>1000.0)       49,791.9914 (>1000.0)       1,125.7087 (684.74)       49,626.0440 (>1000.0)          934.4312 (>1000.0)       5;2       20.0836 (0.00)         21           1
test_flux_variability_benchmark[cplex]                          52,722.9120 (>1000.0)       69,932.2230 (>1000.0)       58,140.0347 (>1000.0)       5,739.9571 (>1000.0)      57,816.9480 (>1000.0)        7,145.2955 (>1000.0)       1;0       17.1999 (0.00)          8           1
test_pfba_benchmark[cplex]                                      63,524.4740 (>1000.0)       75,204.5270 (>1000.0)       67,568.0630 (>1000.0)       4,581.2748 (>1000.0)      66,729.9390 (>1000.0)        5,462.4390 (>1000.0)       1;0       14.7999 (0.00)          6           1
test_single_gene_deletion_fba_benchmark[glpk]                   84,127.1660 (>1000.0)      104,777.2040 (>1000.0)       89,979.0596 (>1000.0)       6,836.7151 (>1000.0)      88,520.1590 (>1000.0)        3,514.5265 (>1000.0)       1;1       11.1137 (0.00)          7           1
test_single_gene_deletion_fba_benchmark[cplex]                  84,977.2520 (>1000.0)      115,968.7560 (>1000.0)       95,540.5132 (>1000.0)       9,283.1446 (>1000.0)      92,018.1720 (>1000.0)       12,479.2015 (>1000.0)       3;0       10.4668 (0.00)         11           1
test_single_gene_deletion_linear_moma_benchmark[hybrid]         92,090.5690 (>1000.0)      132,243.2630 (>1000.0)      100,250.8305 (>1000.0)      11,864.3636 (>1000.0)      97,044.2080 (>1000.0)        8,565.2140 (>1000.0)       1;1        9.9750 (0.00)         10           1
test_single_gene_deletion_linear_room_benchmark[hybrid]         98,121.1920 (>1000.0)      136,736.3840 (>1000.0)      111,687.3335 (>1000.0)      11,959.1933 (>1000.0)     108,055.0675 (>1000.0)       14,080.9830 (>1000.0)       3;0        8.9536 (0.00)         10           1
test_flux_variability_loopless_benchmark[cplex]                108,310.3300 (>1000.0)      147,710.6330 (>1000.0)      122,901.2899 (>1000.0)      13,485.2730 (>1000.0)     117,784.3450 (>1000.0)       20,795.1735 (>1000.0)       3;0        8.1366 (0.00)          9           1
test_achr_init_benchmark                                       109,112.3240 (>1000.0)      330,553.2910 (>1000.0)      157,740.4424 (>1000.0)      74,120.0931 (>1000.0)     120,730.6570 (>1000.0)       78,853.5793 (>1000.0)       1;1        6.3395 (0.00)          9           1
test_single_gene_deletion_fba_benchmark[hybrid]                113,241.4500 (>1000.0)      137,132.8390 (>1000.0)      121,290.4381 (>1000.0)       8,749.0715 (>1000.0)     118,673.8255 (>1000.0)       13,014.4585 (>1000.0)       2;0        8.2447 (0.00)          8           1
test_flux_variability_loopless_benchmark[glpk]                 115,074.5190 (>1000.0)      138,949.7130 (>1000.0)      128,862.1222 (>1000.0)      10,297.1189 (>1000.0)     135,734.1680 (>1000.0)       18,519.6488 (>1000.0)       2;0        7.7602 (0.00)          9           1
test_flux_variability_loopless_benchmark[hybrid]               137,314.7830 (>1000.0)      144,399.8830 (>1000.0)      139,559.4689 (>1000.0)       2,447.3373 (>1000.0)     138,523.3675 (>1000.0)        2,867.5130 (>1000.0)       2;0        7.1654 (0.00)          8           1
test_pfba_benchmark[glpk]                                      149,147.0140 (>1000.0)      171,139.6850 (>1000.0)      156,251.5560 (>1000.0)       9,017.6511 (>1000.0)     151,872.4360 (>1000.0)       11,127.5995 (>1000.0)       1;0        6.3999 (0.00)          5           1
test_geometric_fba_benchmark[cplex]                            165,014.1640 (>1000.0)      318,751.5180 (>1000.0)      211,051.4112 (>1000.0)      63,702.0079 (>1000.0)     187,517.5830 (>1000.0)       75,667.7337 (>1000.0)       1;0        4.7382 (0.00)          5           1
test_geometric_fba_benchmark[glpk]                             165,591.7880 (>1000.0)      212,340.4690 (>1000.0)      192,479.0373 (>1000.0)      18,253.2109 (>1000.0)     198,895.7325 (>1000.0)       29,966.9620 (>1000.0)       2;0        5.1954 (0.00)          6           1
test_optgp_init_benchmark                                      169,941.9070 (>1000.0)      209,082.7270 (>1000.0)      185,200.1122 (>1000.0)      14,503.3889 (>1000.0)     182,255.4230 (>1000.0)       13,667.8935 (>1000.0)       2;0        5.3996 (0.00)          5           1
test_double_gene_deletion_benchmark                            180,012.9130 (>1000.0)      223,338.0280 (>1000.0)      198,281.6172 (>1000.0)      16,851.7959 (>1000.0)     200,056.9400 (>1000.0)       23,134.4025 (>1000.0)       2;0        5.0433 (0.00)          5           1
test_gpr_symbolism_benchmark                                   184,335.1930 (>1000.0)      292,671.0500 (>1000.0)      217,380.2356 (>1000.0)      42,954.1847 (>1000.0)     204,945.9880 (>1000.0)       31,897.1125 (>1000.0)       1;1        4.6002 (0.00)          5           1
test_copy_benchmark_large_model[optlang-cplex]                 188,534.2380 (>1000.0)      453,784.6940 (>1000.0)      250,888.7276 (>1000.0)     113,911.5680 (>1000.0)     204,521.9650 (>1000.0)       83,553.1767 (>1000.0)       1;1        3.9858 (0.00)          5           1
test_pfba_benchmark[hybrid]                                    220,623.0740 (>1000.0)      606,065.1290 (>1000.0)      315,945.9808 (>1000.0)     162,754.2904 (>1000.0)     249,365.9490 (>1000.0)      103,682.9632 (>1000.0)       1;1        3.1651 (0.00)          5           1
test_copy_benchmark_large_model[optlang-glpk]                  222,081.8320 (>1000.0)      413,136.2280 (>1000.0)      294,932.2254 (>1000.0)      94,491.3229 (>1000.0)     229,418.8770 (>1000.0)      163,661.6210 (>1000.0)       1;0        3.3906 (0.00)          5           1
test_single_reaction_deletion_benchmark[hybrid]                264,429.7450 (>1000.0)      326,895.6420 (>1000.0)      295,573.7994 (>1000.0)      24,217.9928 (>1000.0)     302,236.7100 (>1000.0)       34,803.6612 (>1000.0)       2;0        3.3832 (0.00)          5           1
test_single_gene_deletion_moma_benchmark[hybrid]               308,420.1310 (>1000.0)      364,447.5200 (>1000.0)      331,691.1660 (>1000.0)      22,660.2764 (>1000.0)     333,746.7560 (>1000.0)       34,370.7205 (>1000.0)       2;0        3.0149 (0.00)          5           1
test_flux_variability_benchmark[glpk]                          316,016.0120 (>1000.0)      349,599.7290 (>1000.0)      339,069.1798 (>1000.0)      13,435.8760 (>1000.0)     342,282.6260 (>1000.0)       13,813.9683 (>1000.0)       1;0        2.9493 (0.00)          5           1
test_double_reaction_deletion_benchmark                        609,252.9860 (>1000.0)      854,443.7430 (>1000.0)      773,973.5060 (>1000.0)      97,167.3241 (>1000.0)     799,363.0170 (>1000.0)      106,056.0932 (>1000.0)       1;0        1.2920 (0.00)          5           1
test_geometric_fba_benchmark[hybrid]                         1,023,727.1270 (>1000.0)    1,658,614.1540 (>1000.0)    1,346,921.9078 (>1000.0)     292,585.9094 (>1000.0)   1,267,277.0150 (>1000.0)      541,621.3995 (>1000.0)       3;0        0.7424 (0.00)          5           1
test_flux_variability_benchmark[hybrid]                      4,857,905.6960 (>1000.0)    5,153,362.8900 (>1000.0)    5,055,272.9016 (>1000.0)     115,518.2066 (>1000.0)   5,084,840.4870 (>1000.0)      114,921.6588 (>1000.0)       1;0        0.1978 (0.00)          5           1
test_single_gene_deletion_room_benchmark[cplex]              6,066,726.0810 (>1000.0)    7,149,963.7760 (>1000.0)    6,566,601.3488 (>1000.0)     447,866.3932 (>1000.0)   6,612,153.0110 (>1000.0)      747,221.5107 (>1000.0)       2;0        0.1523 (0.00)          5           1
test_single_gene_deletion_room_benchmark[hybrid]            60,739,469.0210 (>1000.0)  170,085,329.6590 (>1000.0)  106,933,118.6170 (>1000.0)  55,809,899.5292 (>1000.0)  77,876,918.9120 (>1000.0)  105,419,248.2898 (>1000.0)       2;0        0.0094 (0.00)          5           1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Legend:
  Outliers: 1 Standard Deviation from Mean; 1.5 IQR (InterQuartile Range) from 1st Quartile and 3rd Quartile.
  OPS: Operations Per Second, computed as 1 / Mean
============================ 648 passed, 12 skipped, 10 xfailed, 368 warnings in 980.40s (0:16:20) =============================

@cdiener cdiener requested a review from Midnighter October 27, 2023 20:45
Copy link
Member

@Midnighter Midnighter left a comment

Choose a reason for hiding this comment

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

Should we install osqp and highs by default? I raised the same question on optlang. Quite possibly the answer is no, since installation can be difficult on non-Linux systems?

release-notes/next-release.md Outdated Show resolved Hide resolved
src/cobra/util/solver.py Outdated Show resolved Hide resolved
tests/test_flux_analysis/test_deletion.py Show resolved Hide resolved
@Midnighter
Copy link
Member

Btw, I saw that both osqp and highs are available as conda packages, so maybe our recommendation for Mac & Windows platforms could be to use conda?

@cdiener
Copy link
Member Author

cdiener commented Oct 29, 2023

Btw, I saw that both osqp and highs are available as conda packages, so maybe our recommendation for Mac & Windows platforms could be to use conda?

I wish, but unfortunately the highs conda package is only the compiled (C) library. It does not include highspy (the Python interface).

I did notice in the CI though that the current wheels actually do work on Windows. So it's only MAC that does not work. But I do think this will be fixed in the coming months. I do know the HIGHS team is working on fixing the wheels.

@Midnighter Midnighter merged commit d58bb70 into opencobra:devel Oct 31, 2023
2 of 8 checks passed
@cdiener cdiener deleted the feature/hybrid_solver branch October 31, 2023 16:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants