code: def lake_problem(
      X: FLOAT_OR_ARRAY,
      a: FLOAT_OR_ARRAY = 0.1,
      q: FLOAT_OR_ARRAY = 2.0,
      b: FLOAT_OR_ARRAY = 0.42,
      eps: FLOAT_OR_ARRAY = 0.02,
  ) -> float:
      """Lake Problem as given in Hadka et al., (2015) and Kwakkel (2017)
      modified for use as a test function.
  
      The `mean` and `stdev` parameters control the log normal distribution of
      natural inflows (`epsilon` in [1] and [2]).
  
      References
      ----------
      .. [1] Hadka, D., Herman, J., Reed, P., Keller, K., (2015).
             "An open source framework for many-objective robust decision making."
             Environmental Modelling & Software 74, 114-129.
             doi:10.1016/j.envsoft.2015.07.014
  
      .. [2] Kwakkel, J.H, (2017). "The Exploratory Modeling Workbench: An open
             source toolkit for exploratory modeling, scenario discovery, and
             (multi-objective) robust decision making."
             Environmental Modelling & Software 96, 239-250.
             doi:10.1016/j.envsoft.2017.06.054
  
      .. [3] Singh, R., Reed, P., Keller, K., (2015). "Many-objective robust
             decision making for managing an ecosystem with a deeply uncertain
             threshold response."
             Ecology and Society 20.
             doi:10.5751/ES-07687-200312
  
  
      Parameters
      ----------
      X : float or np.ndarray
          normalized concentration of Phosphorus at point in time
      a : float or np.ndarray
          rate of anthropogenic pollution (0.0 to 0.1)
      q : float or np.ndarray
          exponent controlling recycling rate (2.0 to 4.5).
      b : float or np.ndarray
          decay rate for phosphorus
          (0.1 to 0.45, where default 0.42 is irreversible, as described in [1])
      eps : float or np.ndarray
          natural inflows of phosphorus (pollution), see [3]
  
  
  
      Returns
      -------
      float, phosphorus pollution for a point in time
      """
      Xq = X**q
      X_t1 = X + a + (Xq / (1.0 + Xq)) - (b * X) + eps
  
      return X_t1
  
imports: from typing import Union
  import numpy
  from numpy import log, sqrt
  from scipy.optimize import brentq
label_desc: Use image node_id 1 for calling a global function with example usage: lake_problem(X, a, q, b, eps) and returns: X_t1