docs: def list_available_solvers():
      """Determine available solver interfaces (with python bindings).
  
      Returns
      -------
      dict
          A dict like {'GLPK': True, 'GUROBI': False, ...}
      """
      solvers = dict(GUROBI=False, GLPK=False, MOSEK=False, CPLEX=False, SCIPY=False)
      try:
          import gurobipy
  
          solvers['GUROBI'] = True
          log.debug('Gurobi python bindings found at %s' % os.path.dirname(gurobipy.__file__))
      except Exception:
          log.debug('Gurobi python bindings not available.')
      try:
          import swiglpk
  
          solvers['GLPK'] = True
          log.debug('GLPK python bindings found at %s' % os.path.dirname(swiglpk.__file__))
      except Exception:
          log.debug('GLPK python bindings not available.')
      try:
          import mosek
  
          solvers['MOSEK'] = True
          log.debug('Mosek python bindings found at %s' % os.path.dirname(mosek.__file__))
      except Exception:
          log.debug('Mosek python bindings not available.')
      try:
          import cplex
  
          solvers['CPLEX'] = True
          log.debug('CPLEX python bindings found at %s' % os.path.dirname(cplex.__file__))
      except Exception:
          log.debug('CPLEX python bindings not available.')
      try:
          from scipy import optimize
          optimize.linprog
  
          solvers["SCIPY"] = True
          log.debug("Scipy linprog function found at %s" % optimize.__file__)
      except (ImportError, AttributeError):
          log.debug("Scipy solver not available")
      return solvers