code: def log_logistic(X, out=None):
      """Compute the log of the logistic function, ``log(1 / (1 + e ** -x))``.
  
      This implementation is numerically stable because it splits positive and
      negative values::
  
          -log(1 + exp(-x_i))     if x_i > 0
          x_i - log(1 + exp(x_i)) if x_i <= 0
  
      For the ordinary logistic function, use ``sklearn.utils.fixes.expit``.
  
      Parameters
      ----------
      X: array-like, shape (M, N) or (M, )
          Argument to the logistic function
  
      out: array-like, shape: (M, N) or (M, ), optional:
          Preallocated output array.
  
      Returns
      -------
      out: array, shape (M, N) or (M, )
          Log of the logistic function evaluated at every point in x
  
      Notes
      -----
      See the blog post describing this implementation:
      http://fa.bianp.net/blog/2013/numerical-optimizers-for-logistic-regression/
      """
      is_1d = X.ndim == 1
      X = np.atleast_2d(X)
      X = check_array(X, dtype=np.float64)
  
      n_samples, n_features = X.shape
  
      if out is None:
          out = np.empty_like(X)
  
      _log_logistic_sigmoid(n_samples, n_features, X, out)
  
      if is_1d:
          return np.squeeze(out)
      return out
  
imports: from __future__ import division
  from functools import partial
  import warnings
  import numpy
  from scipy import linalg
  from scipy.sparse import issparse, csr_matrix
  from .None import check_random_state
  from .fixes import np_version
  from ._logistic_sigmoid import _log_logistic_sigmoid
  from ..externals.six.moves import xrange
  from .sparsefuncs_fast import csr_row_norms
  from .validation import check_array
  from ..exceptions import NonBLASDotWarning
label_desc: Use image node_id 17 for calling a global function with example usage: log_logistic(X, out) and returns: out, np