function where_(condition, a, b) {
    const $a = (0, _tensorUtilEnv.convertToTensor)(a, "a", "where");
    const $b = (0, _tensorUtilEnv.convertToTensor)(b, "b", "where");
    const $condition = (0, _tensorUtilEnv.convertToTensor)(condition, "condition", "where", "bool");
    // TODO: move this logic to forward function when the broadcastTo op is
    // implemented in WASM.
    // Find the broadcastable shape for $condition, $a, and $b.
    const broadcastShape = (0, _broadcastUtil.assertAndGetBroadcastShape)((0, _broadcastUtil.assertAndGetBroadcastShape)($condition.shape, $a.shape), $b.shape);
    const $broadcastedCondition = (0, _broadcastTo.broadcastTo)($condition, broadcastShape);
    const $broadcastedA = (0, _broadcastTo.broadcastTo)($a, broadcastShape);
    const $broadcastedB = (0, _broadcastTo.broadcastTo)($b, broadcastShape);
    const inputs = {
        condition: $broadcastedCondition,
        t: $broadcastedA,
        e: $broadcastedB
    };
    return (0, _engine.ENGINE).runKernel((0, _kernelNames.Select), inputs);
}
Returns the elements, either `a` or `b` depending on the `condition`.

If the condition is true, select from `a`, otherwise select from `b`.

```js
const cond = tf.tensor1d([false, false, true], 'bool');
const a = tf.tensor1d([1 , 2, 3]);
const b = tf.tensor1d([-1, -2, -3]);

a.where(cond, b).print();
```

@param condition The input condition. Must be of dtype bool.
@param a If `condition` is rank 1, `a` may have a higher rank but
    its first dimension must match the size of `condition`.
@param b A tensor with the same dtype as `a` and with shape that is
    compatible with `a`.
@return A tensor with same dtype as `a` and `b`, and shape that is
    broadcastable from `a` and `b`.

@doc {heading: 'Operations', subheading: 'Logical'}