<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def where(cond, x, y):
 """Return elements from `x` or `y` depending on `cond`. Performs xarray-like broadcasting across input arguments. Parameters cond : scalar, array, Variable, DataArray or Dataset with boolean dtype When True, return values from `x`, otherwise returns values from `y`. x, y : scalar, array, Variable, DataArray or Dataset Values from which to choose. All dimension coordinates on these objects must be aligned with each other and with `cond`. Returns ------- In priority order: Dataset, DataArray, Variable or array, whichever type appears as an input argument. Examples -------- <xarray.DataArray (x: 2, y: 2)> array([[1, 2], [0, 0]]) Dimensions without coordinates: x, y See also -------- numpy.where : corresponding numpy function Dataset.where, DataArray.where : equivalent methods """

    # alignment for three arguments is complicated, so don't support it yet
    return apply_ufunc(duck_array_ops.where,
                       cond, x, y,
                       join='exact',
                       dataset_join='exact',
                       dask='allowed')