parameters: (x, condlist, funclist, *args, **kw)
return_statement: return y
docstring: Evaluate a piecewise-defined function.
  
      Given a set of conditions and corresponding functions, evaluate each
      function on the input data wherever its condition is true.
  
      Parameters
      ----------
      x : ndarray or scalar
          The input domain.
      condlist : list of bool arrays or bool scalars
          Each boolean array corresponds to a function in `funclist`.  Wherever
          `condlist[i]` is True, `funclist[i](x)` is used as the output value.
  
          Each boolean array in `condlist` selects a piece of `x`,
          and should therefore be of the same shape as `x`.
  
          The length of `condlist` must correspond to that of `funclist`.
          If one extra function is given, i.e. if
          ``len(funclist) == len(condlist) + 1``, then that extra function
          is the default value, used wherever all conditions are false.
      funclist : list of callables, f(x,*args,**kw), or scalars
          Each function is evaluated over `x` wherever its corresponding
          condition is True.  It should take a 1d array as input and give an 1d
          array or a scalar value as output.  If, instead of a callable,
          a scalar is provided then a constant function (``lambda x: scalar``) is
          assumed.
      args : tuple, optional
          Any further arguments given to `piecewise` are passed to the functions
          upon execution, i.e., if called ``piecewise(..., ..., 1, 'a')``, then
          each function is called as ``f(x, 1, 'a')``.
      kw : dict, optional
          Keyword arguments used in calling `piecewise` are passed to the
          functions upon execution, i.e., if called
          ``piecewise(..., ..., alpha=1)``, then each function is called as
          ``f(x, alpha=1)``.
  
      Returns
      -------
      out : ndarray
          The output is the same shape and type as x and is found by
          calling the functions in `funclist` on the appropriate portions of `x`,
          as defined by the boolean arrays in `condlist`.  Portions not covered
          by any condition have a default value of 0.
  
  
      See Also
      --------
      choose, select, where
  
      Notes
      -----
      This is similar to choose or select, except that functions are
      evaluated on elements of `x` that satisfy the corresponding condition from
      `condlist`.
  
      The result is::
  
              |--
              |funclist[0](x[condlist[0]])
        out = |funclist[1](x[condlist[1]])
              |...
              |funclist[n2](x[condlist[n2]])
              |--
  
      Examples
      --------
      Define the sigma function, which is -1 for ``x < 0`` and +1 for ``x >= 0``.
  
      >>> x = np.linspace(-2.5, 2.5, 6)
      >>> np.piecewise(x, [x < 0, x >= 0], [-1, 1])
      array([-1., -1., -1.,  1.,  1.,  1.])
  
      Define the absolute value, which is ``-x`` for ``x <0`` and ``x`` for
      ``x >= 0``.
  
      >>> np.piecewise(x, [x < 0, x >= 0], [lambda x: -x, lambda x: x])
      array([2.5,  1.5,  0.5,  0.5,  1.5,  2.5])
  
      Apply the same function to a scalar value.
  
      >>> y = -2
      >>> np.piecewise(y, [y < 0, y >= 0], [lambda x: -x, lambda x: x])
      array(2)
docstring_summary: Evaluate a piecewise-defined function.
docstring_tokens: Evaluate a piecewise - defined function .
function: def piecewise(x, condlist, funclist, *args, **kw):
      """
      Evaluate a piecewise-defined function.
  
      Given a set of conditions and corresponding functions, evaluate each
      function on the input data wherever its condition is true.
  
      Parameters
      ----------
      x : ndarray or scalar
          The input domain.
      condlist : list of bool arrays or bool scalars
          Each boolean array corresponds to a function in `funclist`.  Wherever
          `condlist[i]` is True, `funclist[i](x)` is used as the output value.
  
          Each boolean array in `condlist` selects a piece of `x`,
          and should therefore be of the same shape as `x`.
  
          The length of `condlist` must correspond to that of `funclist`.
          If one extra function is given, i.e. if
          ``len(funclist) == len(condlist) + 1``, then that extra function
          is the default value, used wherever all conditions are false.
      funclist : list of callables, f(x,*args,**kw), or scalars
          Each function is evaluated over `x` wherever its corresponding
          condition is True.  It should take a 1d array as input and give an 1d
          array or a scalar value as output.  If, instead of a callable,
          a scalar is provided then a constant function (``lambda x: scalar``) is
          assumed.
      args : tuple, optional
          Any further arguments given to `piecewise` are passed to the functions
          upon execution, i.e., if called ``piecewise(..., ..., 1, 'a')``, then
          each function is called as ``f(x, 1, 'a')``.
      kw : dict, optional
          Keyword arguments used in calling `piecewise` are passed to the
          functions upon execution, i.e., if called
          ``piecewise(..., ..., alpha=1)``, then each function is called as
          ``f(x, alpha=1)``.
  
      Returns
      -------
      out : ndarray
          The output is the same shape and type as x and is found by
          calling the functions in `funclist` on the appropriate portions of `x`,
          as defined by the boolean arrays in `condlist`.  Portions not covered
          by any condition have a default value of 0.
  
  
      See Also
      --------
      choose, select, where
  
      Notes
      -----
      This is similar to choose or select, except that functions are
      evaluated on elements of `x` that satisfy the corresponding condition from
      `condlist`.
  
      The result is::
  
              |--
              |funclist[0](x[condlist[0]])
        out = |funclist[1](x[condlist[1]])
              |...
              |funclist[n2](x[condlist[n2]])
              |--
  
      Examples
      --------
      Define the sigma function, which is -1 for ``x < 0`` and +1 for ``x >= 0``.
  
      >>> x = np.linspace(-2.5, 2.5, 6)
      >>> np.piecewise(x, [x < 0, x >= 0], [-1, 1])
      array([-1., -1., -1.,  1.,  1.,  1.])
  
      Define the absolute value, which is ``-x`` for ``x <0`` and ``x`` for
      ``x >= 0``.
  
      >>> np.piecewise(x, [x < 0, x >= 0], [lambda x: -x, lambda x: x])
      array([2.5,  1.5,  0.5,  0.5,  1.5,  2.5])
  
      Apply the same function to a scalar value.
  
      >>> y = -2
      >>> np.piecewise(y, [y < 0, y >= 0], [lambda x: -x, lambda x: x])
      array(2)
  
      """
      x = asanyarray(x)
      n2 = len(funclist)
  
      # undocumented: single condition is promoted to a list of one condition
      if isscalar(condlist) or (
              not isinstance(condlist[0], (list, ndarray)) and x.ndim != 0):
          condlist = [condlist]
  
      condlist = array(condlist, dtype=bool)
      n = len(condlist)
  
      if n == n2 - 1:  # compute the "otherwise" condition.
          condelse = ~np.any(condlist, axis=0, keepdims=True)
          condlist = np.concatenate([condlist, condelse], axis=0)
          n += 1
      elif n != n2:
          raise ValueError(
              "with {} condition(s), either {} or {} functions are expected"
              .format(n, n, n+1)
          )
  
      y = zeros(x.shape, x.dtype)
      for k in range(n):
          item = funclist[k]
          if not isinstance(item, collections_abc.Callable):
              y[condlist[k]] = item
          else:
              vals = x[condlist[k]]
              if vals.size > 0:
                  y[condlist[k]] = item(vals, *args, **kw)
  
      return y
function_tokens: def piecewise ( x , condlist , funclist , * args , * * kw ) : x = asanyarray ( x ) n2 = len ( funclist ) # undocumented: single condition is promoted to a list of one condition if isscalar ( condlist ) or ( not isinstance ( condlist [ 0 ] , ( list , ndarray ) ) and x . ndim != 0 ) : condlist = [ condlist ] condlist = array ( condlist , dtype = bool ) n = len ( condlist ) if n == n2 - 1 : # compute the "otherwise" condition. condelse = ~ np . any ( condlist , axis = 0 , keepdims = True ) condlist = np . concatenate ( [ condlist , condelse ] , axis = 0 ) n += 1 elif n != n2 : raise ValueError ( "with {} condition(s), either {} or {} functions are expected" . format ( n , n , n + 1 ) ) y = zeros ( x . shape , x . dtype ) for k in range ( n ) : item = funclist [ k ] if not isinstance ( item , collections_abc . Callable ) : y [ condlist [ k ] ] = item else : vals = x [ condlist [ k ] ] if vals . size > 0 : y [ condlist [ k ] ] = item ( vals , * args , * * kw ) return y