bjodah/chempy

7 tests fail on FreeBSD

yurivict opened this issue · 2 comments

========================================================================================== FAILURES ==========================================================================================
____________________________________________________________________ test_get_native__a_substance_no_composition[solve0] _____________________________________________________________________

solve = ()

    @requires("pygslodeiv2", "pyodesys")
    @pytest.mark.parametrize("solve", [(), ("H2O",)])
    def test_get_native__a_substance_no_composition(solve):
        rsys = ReactionSystem.from_string(
            "\n".join(["H2O -> H2O+ + e-(aq); 1e-8", "e-(aq) + H2O+ -> H2O; 1e10"])
        )
        odesys, extra = get_odesys(rsys)
        c0 = {"H2O": 0, "H2O+": 2e-9, "e-(aq)": 3e-9}
        if len(solve) > 0:
            from pyodesys.symbolic import PartiallySolvedSystem
    
            odesys = PartiallySolvedSystem(odesys, extra["linear_dependencies"](solve))
>       odesys = get_native(rsys, odesys, "gsl")

chempy/kinetics/tests/test__native.py:116: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
chempy/kinetics/_native.py:182: in get_native
    return native_sys[integrator].from_other(odesys, namespace_extend=ns_extend, **kw)
/usr/local/lib/python3.8/site-packages/pyodesys/symbolic.py:504: in from_other
    instance = cls(**kwargs)
/usr/local/lib/python3.8/site-packages/pyodesys/native/_base.py:295: in __init__
    self._native = self._NativeCode(self, save_temp=save_temp,
/usr/local/lib/python3.8/site-packages/pyodesys/native/gsl.py:21: in __init__
    super(NativeGSLCode, self).__init__(*args, **kwargs)
/usr/local/lib/python3.8/site-packages/pyodesys/native/_base.py:113: in __init__
    compile_sources([_src], cwd=tmpdir, metadir=cachedir,
/usr/local/lib/python3.8/site-packages/pycompilation/compilation.py:149: in compile_sources
    dstpaths.append(src2obj(
/usr/local/lib/python3.8/site-packages/pycompilation/compilation.py:444: in src2obj
    return pyx2obj(srcpath, objpath=objpath,
/usr/local/lib/python3.8/site-packages/pycompilation/compilation.py:582: in pyx2obj
    return src2obj(
/usr/local/lib/python3.8/site-packages/pycompilation/compilation.py:469: in src2obj
    runner.run()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pycompilation.runners.CppCompilerRunner object at 0x853c593d0>

    def run(self):
        if self.only_update:
            for src in self.sources:
                if missing_or_other_newer(self.out, src, cwd=self.cwd):
                    break
            else:
                msg = ('No source newer than {0}.' +
                       ' Did not compile').format(
                           self.out)
                if self.logger:
                    self.logger.info(msg)
                else:
                    print(msg)
                return self.out
    
        # Append output flag and name to tail of flags
        self.flags.extend(['-o', self.out])
    
        # Logging
        if self.logger:
            self.logger.info(
                'In "{0}", executing:\n"{1}"'.format(
                    self.cwd, ' '.join(self.cmd())))
    
        env = os.environ.copy()
        env['PWD'] = self.cwd
    
        # NOTE: the ' '.join(self.cmd()) part seems to be necessary for
        # intel compilers
        p = subprocess.Popen(' '.join(self.cmd()),
                             shell=True,
                             cwd=self.cwd,
                             stdin=subprocess.PIPE,
                             stdout=subprocess.PIPE,
                             stderr=subprocess.STDOUT,
                             env=env)
        comm = p.communicate()
        if sys.version_info[0] == 2:
            self.cmd_outerr = comm[0]
        else:
            try:
                self.cmd_outerr = comm[0].decode('utf-8')
            except UnicodeDecodeError:
                self.cmd_outerr = comm[0].decode('iso-8859-1')  # win32
        self.cmd_returncode = p.returncode
    
        # Error handling
        if self.cmd_returncode != 0:
            msg = "Error executing '{0}' in {1}. Command exited with" + \
                  " status {2} after givning the following output: {3}\n"
>           raise CompilationError(msg.format(
                ' '.join(self.cmd()), self.cwd, str(self.cmd_returncode),
                self.cmd_outerr))
E           pycompilation.util.CompilationError: Error executing '/usr/bin/clang++ -fwrapv -pthread -c -std=c++11 -Wall -Wextra -fPIC -O2 -fopenmp -fno-strict-aliasing -o ./_gsl_wrapper.o -I/usr/local/lib/python3.8/site-packages/numpy/core/include -I/usr/local/lib/python3.8/site-packages/pyodesys/native/sources -I/usr/local/lib/python3.8/site-packages/pygslodeiv2/include -I/usr/local/include/python3.8 ./_gsl_wrapper.cpp' in /tmp/tmpsfqq1ukp. Command exited with status 1 after givning the following output: In file included from ./_gsl_wrapper.cpp:653:
E           In file included from /usr/local/lib/python3.8/site-packages/numpy/core/include/numpy/arrayobject.h:4:
E           In file included from /usr/local/lib/python3.8/site-packages/numpy/core/include/numpy/ndarrayobject.h:12:
E           In file included from /usr/local/lib/python3.8/site-packages/numpy/core/include/numpy/ndarraytypes.h:1822:
E           /usr/local/lib/python3.8/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: "Using deprecated NumPy API, disable it with "          "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
E           #warning "Using deprecated NumPy API, disable it with " \
E            ^
E           In file included from ./_gsl_wrapper.cpp:658:
E           /usr/local/lib/python3.8/site-packages/pygslodeiv2/include/gsl_odeiv2_cxx.hpp:15:10: fatal error: 'gsl/gsl_errno.h' file not found
E           #include <gsl/gsl_errno.h>
E                    ^~~~~~~~~~~~~~~~~
E           1 warning and 1 error generated.

/usr/local/lib/python3.8/site-packages/pycompilation/runners.py:370: CompilationError
------------------------------------------------------------------------------------ Captured stderr call ------------------------------------------------------------------------------------
INFO:pyodesys.native._base:Cythonizing /home/yuri/.cache/python3.8-pyodesys-0.14.0/_gsl_wrapper.pyx to ./_gsl_wrapper.cpp
INFO:pyodesys.native._base:In "/tmp/tmpsfqq1ukp", executing:
"/usr/bin/clang++ -fwrapv -pthread -c -std=c++11 -Wall -Wextra -fPIC -O2 -fopenmp -fno-strict-aliasing -o ./_gsl_wrapper.o -I/usr/local/lib/python3.8/site-packages/numpy/core/include -I/usr/local/lib/python3.8/site-packages/pyodesys/native/sources -I/usr/local/lib/python3.8/site-packages/pygslodeiv2/include -I/usr/local/include/python3.8 ./_gsl_wrapper.cpp"
------------------------------------------------------------------------------------- Captured log call --------------------------------------------------------------------------------------
INFO     pyodesys.native._base:compilation.py:367 Cythonizing /home/yuri/.cache/python3.8-pyodesys-0.14.0/_gsl_wrapper.pyx to ./_gsl_wrapper.cpp
INFO     pyodesys.native._base:runners.py:340 In "/tmp/tmpsfqq1ukp", executing:
                                              "/usr/bin/clang++ -fwrapv -pthread -c -std=c++11 -Wall -Wextra -fPIC -O2 -fopenmp -fno-strict-aliasing -o ./_gsl_wrapper.o -I/usr/local/lib/python3.8/site-packages/numpy/core/include -I/usr/local/lib/python3.8/site-packages/pyodesys/native/sources -I/usr/local/lib/python3.8/site-packages/pygslodeiv2/include -I/usr/local/include/python3.8 ./_gsl_wrapper.cpp"
____________________________________________________________________ test_get_native__a_substance_no_composition[solve1] _____________________________________________________________________

solve = ('H2O',)

    @requires("pygslodeiv2", "pyodesys")
    @pytest.mark.parametrize("solve", [(), ("H2O",)])
    def test_get_native__a_substance_no_composition(solve):
        rsys = ReactionSystem.from_string(
            "\n".join(["H2O -> H2O+ + e-(aq); 1e-8", "e-(aq) + H2O+ -> H2O; 1e10"])
        )
        odesys, extra = get_odesys(rsys)
        c0 = {"H2O": 0, "H2O+": 2e-9, "e-(aq)": 3e-9}
        if len(solve) > 0:
            from pyodesys.symbolic import PartiallySolvedSystem
    
            odesys = PartiallySolvedSystem(odesys, extra["linear_dependencies"](solve))
>       odesys = get_native(rsys, odesys, "gsl")

chempy/kinetics/tests/test__native.py:116: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
chempy/kinetics/_native.py:182: in get_native
    return native_sys[integrator].from_other(odesys, namespace_extend=ns_extend, **kw)
/usr/local/lib/python3.8/site-packages/pyodesys/symbolic.py:504: in from_other
    instance = cls(**kwargs)
/usr/local/lib/python3.8/site-packages/pyodesys/native/_base.py:295: in __init__
    self._native = self._NativeCode(self, save_temp=save_temp,
/usr/local/lib/python3.8/site-packages/pyodesys/native/gsl.py:21: in __init__
    super(NativeGSLCode, self).__init__(*args, **kwargs)
/usr/local/lib/python3.8/site-packages/pyodesys/native/_base.py:113: in __init__
    compile_sources([_src], cwd=tmpdir, metadir=cachedir,
/usr/local/lib/python3.8/site-packages/pycompilation/compilation.py:149: in compile_sources
    dstpaths.append(src2obj(
/usr/local/lib/python3.8/site-packages/pycompilation/compilation.py:444: in src2obj
    return pyx2obj(srcpath, objpath=objpath,
/usr/local/lib/python3.8/site-packages/pycompilation/compilation.py:582: in pyx2obj
    return src2obj(
/usr/local/lib/python3.8/site-packages/pycompilation/compilation.py:469: in src2obj
    runner.run()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pycompilation.runners.CppCompilerRunner object at 0x8550062e0>

    def run(self):
        if self.only_update:
            for src in self.sources:
                if missing_or_other_newer(self.out, src, cwd=self.cwd):
                    break
            else:
                msg = ('No source newer than {0}.' +
                       ' Did not compile').format(
                           self.out)
                if self.logger:
                    self.logger.info(msg)
                else:
                    print(msg)
                return self.out
    
        # Append output flag and name to tail of flags
        self.flags.extend(['-o', self.out])
    
        # Logging
        if self.logger:
            self.logger.info(
                'In "{0}", executing:\n"{1}"'.format(
                    self.cwd, ' '.join(self.cmd())))
    
        env = os.environ.copy()
        env['PWD'] = self.cwd
    
        # NOTE: the ' '.join(self.cmd()) part seems to be necessary for
        # intel compilers
        p = subprocess.Popen(' '.join(self.cmd()),
                             shell=True,
                             cwd=self.cwd,
                             stdin=subprocess.PIPE,
                             stdout=subprocess.PIPE,
                             stderr=subprocess.STDOUT,
                             env=env)
        comm = p.communicate()
        if sys.version_info[0] == 2:
            self.cmd_outerr = comm[0]
        else:
            try:
                self.cmd_outerr = comm[0].decode('utf-8')
            except UnicodeDecodeError:
                self.cmd_outerr = comm[0].decode('iso-8859-1')  # win32
        self.cmd_returncode = p.returncode
    
        # Error handling
        if self.cmd_returncode != 0:
            msg = "Error executing '{0}' in {1}. Command exited with" + \
                  " status {2} after givning the following output: {3}\n"
>           raise CompilationError(msg.format(
                ' '.join(self.cmd()), self.cwd, str(self.cmd_returncode),
                self.cmd_outerr))
E           pycompilation.util.CompilationError: Error executing '/usr/bin/clang++ -fwrapv -pthread -c -std=c++11 -Wall -Wextra -fPIC -O2 -fopenmp -fno-strict-aliasing -o ./_gsl_wrapper.o -I/usr/local/lib/python3.8/site-packages/numpy/core/include -I/usr/local/lib/python3.8/site-packages/pyodesys/native/sources -I/usr/local/lib/python3.8/site-packages/pygslodeiv2/include -I/usr/local/include/python3.8 ./_gsl_wrapper.cpp' in /tmp/tmpu40hzltd. Command exited with status 1 after givning the following output: In file included from ./_gsl_wrapper.cpp:653:
E           In file included from /usr/local/lib/python3.8/site-packages/numpy/core/include/numpy/arrayobject.h:4:
E           In file included from /usr/local/lib/python3.8/site-packages/numpy/core/include/numpy/ndarrayobject.h:12:
E           In file included from /usr/local/lib/python3.8/site-packages/numpy/core/include/numpy/ndarraytypes.h:1822:
E           /usr/local/lib/python3.8/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: "Using deprecated NumPy API, disable it with "          "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
E           #warning "Using deprecated NumPy API, disable it with " \
E            ^
E           In file included from ./_gsl_wrapper.cpp:658:
E           /usr/local/lib/python3.8/site-packages/pygslodeiv2/include/gsl_odeiv2_cxx.hpp:15:10: fatal error: 'gsl/gsl_errno.h' file not found
E           #include <gsl/gsl_errno.h>
E                    ^~~~~~~~~~~~~~~~~
E           1 warning and 1 error generated.

/usr/local/lib/python3.8/site-packages/pycompilation/runners.py:370: CompilationError
------------------------------------------------------------------------------------ Captured stderr call ------------------------------------------------------------------------------------
INFO:pyodesys.native._base:Cythonizing /home/yuri/.cache/python3.8-pyodesys-0.14.0/_gsl_wrapper.pyx to ./_gsl_wrapper.cpp
INFO:pyodesys.native._base:In "/tmp/tmpu40hzltd", executing:
"/usr/bin/clang++ -fwrapv -pthread -c -std=c++11 -Wall -Wextra -fPIC -O2 -fopenmp -fno-strict-aliasing -o ./_gsl_wrapper.o -I/usr/local/lib/python3.8/site-packages/numpy/core/include -I/usr/local/lib/python3.8/site-packages/pyodesys/native/sources -I/usr/local/lib/python3.8/site-packages/pygslodeiv2/include -I/usr/local/include/python3.8 ./_gsl_wrapper.cpp"
------------------------------------------------------------------------------------- Captured log call --------------------------------------------------------------------------------------
INFO     pyodesys.native._base:compilation.py:367 Cythonizing /home/yuri/.cache/python3.8-pyodesys-0.14.0/_gsl_wrapper.pyx to ./_gsl_wrapper.cpp
INFO     pyodesys.native._base:runners.py:340 In "/tmp/tmpu40hzltd", executing:
                                              "/usr/bin/clang++ -fwrapv -pthread -c -std=c++11 -Wall -Wextra -fPIC -O2 -fopenmp -fno-strict-aliasing -o ./_gsl_wrapper.o -I/usr/local/lib/python3.8/site-packages/numpy/core/include -I/usr/local/lib/python3.8/site-packages/pyodesys/native/sources -I/usr/local/lib/python3.8/site-packages/pygslodeiv2/include -I/usr/local/include/python3.8 ./_gsl_wrapper.cpp"
________________________________________________________________________ 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:409: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
chempy/chemistry.py:1560: 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.8/site-packages/pulp/pulp.py:1880: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x854e78f10>
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.8/site-packages/pulp/apis/../solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.8/site-packages/pulp/apis/coin_api.py:352: 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:434: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
chempy/chemistry.py:1560: 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.8/site-packages/pulp/pulp.py:1880: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x8536898b0>
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.8/site-packages/pulp/apis/../solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.8/site-packages/pulp/apis/coin_api.py:352: PulpSolverError
___________________________________________________________________ test_balance_stoichiometry__underdetermined__canoncial ___________________________________________________________________

    @requires("sympy", "pulp")
    def test_balance_stoichiometry__underdetermined__canoncial():
        # This tests for canoncial 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 canoncial 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:453: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
chempy/chemistry.py:1560: 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.8/site-packages/pulp/pulp.py:1880: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x85431bf40>
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.8/site-packages/pulp/apis/../solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.8/site-packages/pulp/apis/coin_api.py:352: 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:484: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
chempy/chemistry.py:1560: 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.8/site-packages/pulp/pulp.py:1880: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x854062a60>
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.8/site-packages/pulp/apis/../solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.8/site-packages/pulp/apis/coin_api.py:352: 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:516: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
chempy/chemistry.py:1423: in balance_stoichiometry
    result = balance_stoichiometry(
chempy/chemistry.py:1560: 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.8/site-packages/pulp/pulp.py:1880: in solve
    status = solver.actualSolve(self, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pulp.apis.coin_api.PULP_CBC_CMD object at 0x85730da30>
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.8/site-packages/pulp/apis/../solverdir/cbc/linux/64/cbc)

/usr/local/lib/python3.8/site-packages/pulp/apis/coin_api.py:352: PulpSolverError
====================================================================================== warnings summary ======================================================================================
chempy/kinetics/tests/test__native.py::test_get_native__a_substance_no_composition[solve0]
chempy/kinetics/tests/test__native.py::test_get_native__a_substance_no_composition[solve1]
  /usr/local/lib/python3.8/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /home/yuri/.cache/python3.8-pyodesys-0.14.0/_gsl_wrapper.pyx
    tree = Parsing.p_module(s, pxd, full_module_name)

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.8/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.8/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")

chempy/tests/test__equilibrium.py::test_solve_equilibrium_1
chempy/tests/test__equilibrium.py::test_solve_equilibrium_2
  /disk-samsung/freebsd-ports/science/py-chempy/work-py38/chempy-0.8.2/chempy/chemistry.py:1005: RuntimeWarning: divide by zero encountered in double_scalars
    tot *= conc ** nr

-- Docs: https://docs.pytest.org/en/latest/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 [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:566: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [1] chempy/kinetics/tests/test_ode.py:606: 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:834: 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:953: 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: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:1161: Unfulfilled requirements. Missing modules: pycvodes.
SKIPPED [2] chempy/util/tests/test_table.py:44: latex not installed? (pdflatex command missing)
SKIPPED [1] chempy/util/tests/test_table.py:55: latex not installed? (pdflatex command missing)
=============================================================== 7 failed, 295 passed, 27 skipped, 10 warnings in 27.61 seconds ===============================================================

Version: 0.8.2
Python-3.8
clang-11
FreeBSD 13

PRs welcome.

Tests don't fail now in the same version 0.8.2
Python-3.9