bjodah / chempy

⚗ A package useful for chemistry written in Python
BSD 2-Clause "Simplified" License
536 stars 79 forks source link

5 tests fail #222

Closed yurivict closed 2 months ago

yurivict commented 1 year ago
========================================================================================== FAILURES ===========================================================================================
___________________________________________________________________ test_balance_stoichiometry__underdetermined__canoncial ____________________________________________________________________

    @requires("sympy", "pulp")
    def test_balance_stoichiometry__underdetermined__canoncial():
        # This tests for canonical representation of the underdetermined system
        # where all coefficients are integer and >= 1. It is however of limited
        # practical use (and hence marked ``xfail``) since underdetermined systems
        # have infinite number of solutions. It should however be possible to rewrite
        # the logic so that such canonical results are returned from balance_stoichiometry
        r2 = {"O2", "O3", "C", "NO", "N2O", "NO2", "N2O4"}
        p2 = {"CO", "CO2", "N2"}
>       bal2 = balance_stoichiometry(r2, p2, underdetermined=None)

chempy/tests/test_chemistry.py:472: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
chempy/chemistry.py:1567: in balance_stoichiometry
    sol = Tuple(*[Integer(x) for x in _solve_balancing_ilp_pulp(A)])
chempy/chemistry.py:1308: in _solve_balancing_ilp_pulp
    prob.solve(pulp.PULP_CBC_CMD(msg=False))
/usr/local/lib/python3.9/site-packages/pulp/pulp.py:1913: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x98778ea60>
lp = chempy_balancing_problem:
MINIMIZE
1*x0 + 1*x1 + 1*x2 + 1*x3 + 1*x4 + 1*x5 + 1*x6 + 1*x7 + 1*x8 + 1*x9 + 0
SUBJECT TO
...nteger
1 <= x3 Integer
1 <= x4 Integer
1 <= x5 Integer
1 <= x6 Integer
1 <= x7 Integer
1 <= x8 Integer
1 <= x9 Integer

callback = None

    def actualSolve(self, lp, callback=None):
        """Solve a well formulated lp problem"""
>       raise PulpSolverError(
            "PULP_CBC_CMD: Not Available (check permissions on %s)"
            % self.pulp_cbc_path
        )
E       pulp.apis.core.PulpSolverError: PULP_CBC_CMD: Not Available (check permissions on /usr/local/lib/python3.9/site-packages/pulp/solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.9/site-packages/pulp/apis/coin_api.py:364: PulpSolverError
______________________________________________________________________ test_balance_stoichiometry__very_underdetermined _______________________________________________________________________

    @requires("sympy", "pulp")
    def test_balance_stoichiometry__very_underdetermined():
        r3 = set("O2 Fe Al Cr".split())
        p3 = set("FeO Fe2O3 Fe3O4 Al2O3 Cr2O3 CrO3".split())
>       bal3 = balance_stoichiometry(r3, p3, underdetermined=None)

chempy/tests/test_chemistry.py:453: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
chempy/chemistry.py:1567: in balance_stoichiometry
    sol = Tuple(*[Integer(x) for x in _solve_balancing_ilp_pulp(A)])
chempy/chemistry.py:1308: in _solve_balancing_ilp_pulp
    prob.solve(pulp.PULP_CBC_CMD(msg=False))
/usr/local/lib/python3.9/site-packages/pulp/pulp.py:1913: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x99b672ca0>
lp = chempy_balancing_problem:
MINIMIZE
1*x0 + 1*x1 + 1*x2 + 1*x3 + 1*x4 + 1*x5 + 1*x6 + 1*x7 + 1*x8 + 1*x9 + 0
SUBJECT TO
...nteger
1 <= x3 Integer
1 <= x4 Integer
1 <= x5 Integer
1 <= x6 Integer
1 <= x7 Integer
1 <= x8 Integer
1 <= x9 Integer

callback = None

    def actualSolve(self, lp, callback=None):
        """Solve a well formulated lp problem"""
>       raise PulpSolverError(
            "PULP_CBC_CMD: Not Available (check permissions on %s)"
            % self.pulp_cbc_path
        )
E       pulp.apis.core.PulpSolverError: PULP_CBC_CMD: Not Available (check permissions on /usr/local/lib/python3.9/site-packages/pulp/solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.9/site-packages/pulp/apis/coin_api.py:364: PulpSolverError
_________________________________________________________________________ test_balance_stoichiometry__underdetermined _________________________________________________________________________

    @requires("sympy", "pulp")
    def test_balance_stoichiometry__underdetermined():
        try:
            from pulp import PulpSolverError
        except ModuleNotFoundError:
            from pulp.solvers import PulpSolverError  # older version of PuLP

        with pytest.raises(ValueError):
            balance_stoichiometry(
                {"C2H6", "O2"}, {"H2O", "CO2", "CO"}, underdetermined=False
            )
        reac, prod = balance_stoichiometry({"C2H6", "O2"}, {"H2O", "CO2", "CO"})

        r1 = {"C7H5O3-", "O2", "C21H27N7O14P2-2", "H+"}
        p1 = {
            "C7H5O4-",
            "C21H26N7O14P2-",
            "H2O",
        }  # see https://github.com/bjodah/chempy/issues/67
>       bal1 = balance_stoichiometry(r1, p1, underdetermined=None)

chempy/tests/test_chemistry.py:428: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
chempy/chemistry.py:1567: in balance_stoichiometry
    sol = Tuple(*[Integer(x) for x in _solve_balancing_ilp_pulp(A)])
chempy/chemistry.py:1308: in _solve_balancing_ilp_pulp
    prob.solve(pulp.PULP_CBC_CMD(msg=False))
/usr/local/lib/python3.9/site-packages/pulp/pulp.py:1913: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x987174190>
lp = chempy_balancing_problem:
MINIMIZE
1*x0 + 1*x1 + 1*x2 + 1*x3 + 1*x4 + 1*x5 + 1*x6 + 0
SUBJECT TO
_C1: 2 x0 + x1 - x2 -...IABLES
1 <= x0 Integer
1 <= x1 Integer
1 <= x2 Integer
1 <= x3 Integer
1 <= x4 Integer
1 <= x5 Integer
1 <= x6 Integer

callback = None

    def actualSolve(self, lp, callback=None):
        """Solve a well formulated lp problem"""
>       raise PulpSolverError(
            "PULP_CBC_CMD: Not Available (check permissions on %s)"
            % self.pulp_cbc_path
        )
E       pulp.apis.core.PulpSolverError: PULP_CBC_CMD: Not Available (check permissions on /usr/local/lib/python3.9/site-packages/pulp/solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.9/site-packages/pulp/apis/coin_api.py:364: PulpSolverError
___________________________________________________________________ test_balance_stoichiometry__substances__underdetermined ___________________________________________________________________

    @requires("sympy", "pulp")
    def test_balance_stoichiometry__substances__underdetermined():
        substances = {
            s.name: s
            for s in [
                Substance("eggs_6pack", composition=dict(eggs=6)),
                Substance("milk_carton", composition=dict(cups_of_milk=4)),
                Substance("flour_bag", composition=dict(spoons_of_flour=30)),
                Substance(
                    "pancake", composition=dict(eggs=1, cups_of_milk=1, spoons_of_flour=2)
                ),
                Substance(
                    "waffle", composition=dict(eggs=2, cups_of_milk=2, spoons_of_flour=3)
                ),
            ]
        }
        ur1 = {"eggs_6pack", "milk_carton", "flour_bag"}
        up1 = {"pancake", "waffle"}
>       br1, bp1 = balance_stoichiometry(
            ur1, up1, substances=substances, underdetermined=None
        )

chempy/tests/test_chemistry.py:503: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
chempy/chemistry.py:1567: in balance_stoichiometry
    sol = Tuple(*[Integer(x) for x in _solve_balancing_ilp_pulp(A)])
chempy/chemistry.py:1308: in _solve_balancing_ilp_pulp
    prob.solve(pulp.PULP_CBC_CMD(msg=False))
/usr/local/lib/python3.9/site-packages/pulp/pulp.py:1913: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x99b675820>
lp = chempy_balancing_problem:
MINIMIZE
1*x0 + 1*x1 + 1*x2 + 1*x3 + 1*x4 + 0
SUBJECT TO
_C1: - 4 x2 + x3 + 2 x4 = 0

_C2: -...: - 30 x1 + 2 x3 + 3 x4 = 0

VARIABLES
1 <= x0 Integer
1 <= x1 Integer
1 <= x2 Integer
1 <= x3 Integer
1 <= x4 Integer

callback = None

    def actualSolve(self, lp, callback=None):
        """Solve a well formulated lp problem"""
>       raise PulpSolverError(
            "PULP_CBC_CMD: Not Available (check permissions on %s)"
            % self.pulp_cbc_path
        )
E       pulp.apis.core.PulpSolverError: PULP_CBC_CMD: Not Available (check permissions on /usr/local/lib/python3.9/site-packages/pulp/solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.9/site-packages/pulp/apis/coin_api.py:364: PulpSolverError
___________________________________________________________________________ test_balance_stoichiometry__duplicates ____________________________________________________________________________

    @requires("sympy")
    def test_balance_stoichiometry__duplicates():
        cases = """
    C + CO + CO2 -> C + CO        # suggested solution:  C +      CO2 ->     2 CO
    C + CO + CO2 -> C +      CO2  # suggested solution:      2 CO      -> C +      CO2
    C + CO + CO2 ->     CO + CO2  # suggested solution:  C +      CO2 ->     2 CO
    C + CO       -> C + CO + CO2  # suggested solution:      2 CO      -> C +      CO2
    C +      CO2 -> C + CO + CO2  # suggested solution:  C +      CO2 ->     2 CO
        CO + CO2 -> C + CO + CO2  # suggested solution:      2 CO      -> C +      CO2
    """
        for prob, sol in [line.split("#") for line in cases.strip().splitlines()]:
            tst_r = Reaction.from_string(prob)
            ref_r = Reaction.from_string(sol.split(":")[1])
>           tst_bal = balance_stoichiometry(
                tst_r.reac, tst_r.prod, allow_duplicates=True, underdetermined=None
            )

chempy/tests/test_chemistry.py:535: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
chempy/chemistry.py:1424: in balance_stoichiometry
    result = balance_stoichiometry(
chempy/chemistry.py:1567: in balance_stoichiometry
    sol = Tuple(*[Integer(x) for x in _solve_balancing_ilp_pulp(A)])
chempy/chemistry.py:1308: in _solve_balancing_ilp_pulp
    prob.solve(pulp.PULP_CBC_CMD(msg=False))
/usr/local/lib/python3.9/site-packages/pulp/pulp.py:1913: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x99e837490>
lp = chempy_balancing_problem:
MINIMIZE
1*x0 + 1*x1 + 1*x2 + 0
SUBJECT TO
_C1: - x0 - x1 + x2 = 0

_C2: - 2 x1 + x2 = 0

VARIABLES
1 <= x0 Integer
1 <= x1 Integer
1 <= x2 Integer

callback = None

    def actualSolve(self, lp, callback=None):
        """Solve a well formulated lp problem"""
>       raise PulpSolverError(
            "PULP_CBC_CMD: Not Available (check permissions on %s)"
            % self.pulp_cbc_path
        )
E       pulp.apis.core.PulpSolverError: PULP_CBC_CMD: Not Available (check permissions on /usr/local/lib/python3.9/site-packages/pulp/solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.9/site-packages/pulp/apis/coin_api.py:364: PulpSolverError
====================================================================================== warnings summary =======================================================================================
chempy/kinetics/tests/test__native.py::test_get_native__a_substance_no_composition[solve1]
chempy/kinetics/tests/test__native.py::test_get_native__a_substance_no_composition[solve0]
  /usr/local/lib/python3.9/site-packages/pycompilation/runners.py:160: UserWarning: unsure of what kind of compiler c++ is, assuming g++
    warnings.warn("unsure of what kind of compiler %s is, assuming %s" %

chempy/kinetics/tests/test__native.py::test_get_native__a_substance_no_composition[solve1]
  /usr/local/lib/python3.9/site-packages/pycompilation/util.py:312: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
    import imp

chempy/tests/test__equilibrium.py::test_solve_equilibrium_1
chempy/tests/test__equilibrium.py::test_solve_equilibrium_2
  /usr/ports/science/py-chempy/work-py39/chempy-0.8.3/chempy/chemistry.py:1005: RuntimeWarning: divide by zero encountered in double_scalars
    tot *= conc ** nr

chempy/kinetics/tests/test_ode.py::test_get_ode__Radiolytic__units__multi
chempy/kinetics/tests/test_ode.py::test_get_odesys__time_dep_temperature
chempy/kinetics/tests/test_ode.py::test_create_odesys__ShiftedTPoly
  /usr/local/lib/python3.9/site-packages/pyodesys/core.py:519: UserWarning: 'adaptive' mode with SciPy's integrator (vode/lsoda) may overshoot (itask=2)
    warnings.warn("'adaptive' mode with SciPy's integrator (vode/lsoda) may overshoot (itask=2)")

chempy/kinetics/tests/test_ode.py::test_get_ode__Radiolytic__units__multi
chempy/kinetics/tests/test_ode.py::test_get_odesys__time_dep_temperature
chempy/kinetics/tests/test_ode.py::test_create_odesys__ShiftedTPoly
  /usr/local/lib/python3.9/site-packages/pyodesys/core.py:520: UserWarning: 'adaptive' mode with SciPy's integrator is unreliable, consider using e.g. cvode
    warnings.warn("'adaptive' mode with SciPy's integrator is unreliable, consider using e.g. cvode")

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=================================================================================== short test summary info ===================================================================================
SKIPPED [2] chempy/kinetics/tests/test__native.py:59: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [2] chempy/kinetics/tests/test__native.py:129: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test__native.py:188: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [3] chempy/kinetics/tests/test__native.py:218: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:1030: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:566: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:834: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [4] chempy/kinetics/tests/test_ode.py:518: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:548: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:1101: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:1144: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:885: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:1161: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:648: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:792: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:953: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:606: Unfulfilled requirements. Missing modules: pycvodes.
============================================================= 5 failed, 503 passed, 24 skipped, 5 xpassed, 11 warnings in 25.83s ==============================================================
*** Error code 1

Version: 0.8.3 Python-3.9 FreeBSD 13.2

bjodah commented 1 year ago

Thank you for reporting this. In the same environment, does pulp's tests pass for cbc? (python3 -m pytest --pyargs pulp -v -k CBC)

bjodah commented 2 months ago

Installing py39-pytest and py39-PuLP-2.7.0_1 on FreeBSD 14.0 and running my suggested command does indeed show that the cbc solver in PuLP does not work in the package shipped by FreeBSD:

-m pytest --pyargs pulp -v -k CBC
============================================================== test session starts ==============================================================
platform freebsd14 -- Python 3.9.18, pytest-7.4.4, pluggy-1.4.0 -- /usr/local/bin/python3
cachedir: .pytest_cache
rootdir: /home/bjorn
collected 1005 items / 946 deselected / 59 selected                                                                                             

tests/test_pulp.py::PULP_CBC_CMDTest::test_LpVariable_indexs_deprecation_logic SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CM...) [  1%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_LpVariable_indexs_param SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not avai...) [  3%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_LpVariable_indices_param SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not ava...) [  5%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_assignInvalidStatus SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)   [  6%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_LpVariable_indices_param SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not ava...) [  5%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_assignInvalidStatus SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)   [  6%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_export_dict_LP SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)        [  8%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_export_dict_LP_no_obj SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available) [ 10%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_export_dict_MIP SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)       [ 11%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_export_dict_max SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)       [ 13%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_export_json_LP SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)        [ 15%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_export_solver_dict_LP SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available) [ 16%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_export_solver_json SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)    [ 18%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_false_constraint SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)      [ 20%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_importMPS_RHS_fields56 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not avail...) [ 22%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_importMPS_binary SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)      [ 23%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_importMPS_integer SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)     [ 25%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_importMPS_maximize SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)    [ 27%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_importMPS_noname SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)      [ 28%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_infeasible_problem__is_not_valid SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'>...) [ 30%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_invalid_var_names SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)     [ 32%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_logPath SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)               [ 33%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_makeDict_behavior SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)     [ 35%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_makeDict_default_value SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not avail...) [ 37%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_measuring_solving_time SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not avail...) [ 38%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_parse_cplex_mipopt_solution SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not ...) [ 40%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulpTestAll SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)           [ 42%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_001 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 44%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_009 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 45%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_010 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 47%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_011 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 49%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_012 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 50%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_013 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 52%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_014 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 54%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_015 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 55%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_016 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 57%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_017 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 59%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_018 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 61%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_019 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 62%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_020 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 64%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_021 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 66%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_022 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 67%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_023 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 69%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_030 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 71%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_040 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 72%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_050 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 74%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_060 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 76%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_061 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 77%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_070 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 79%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_075 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 81%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_080 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 83%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_090 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 84%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_100 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 86%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_110 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 88%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_120 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 89%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_121 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 91%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_122 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 93%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_pulp_123 SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)              [ 94%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_timeLimit SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> not available)             [ 96%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_unbounded_problem__is_not_valid SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> ...) [ 98%]
tests/test_pulp.py::PULP_CBC_CMDTest::test_unset_objective_value__is_valid SKIPPED (solver <class 'pulp.apis.coin_api.PULP_CBC_CMD'> ...) [100%]

====================================================== 59 skipped, 946 deselected in 0.11s ======================================================