function logSumExp_(x, axis, keepDims) {
	  if (axis === void 0) {
	    axis = null;
	  }

	  if (keepDims === void 0) {
	    keepDims = false;
	  }

	  var $x = convertToTensor(x, 'x', 'logSumExp');
	  var axes = parseAxisParam(axis, $x.shape);
	  var xMax = max$4($x, axes, true
	  /* keepDims */
	  );
	  var a = sub($x, xMax);
	  var b = exp$3(a);
	  var c = sum$1(b, axes);
	  var d = log$9(c);
	  var res = add$1(reshape(xMax, d.shape), d);

	  if (keepDims) {
	    var newShape = expandShapeToKeepDim(res.shape, axes);
	    return reshape(res, newShape);
	  }

	  return res;
	}
Computes the log(sum(exp(elements across the reduction dimensions)).

Reduces the input along the dimensions given in `axis`. Unless `keepDims`
is true, the rank of the array is reduced by 1 for each entry in `axis`.
If `keepDims` is true, the reduced dimensions are retained with length 1.
If `axis` has no entries, all dimensions are reduced, and an array with a
single element is returned.

```js
const x = tf.tensor1d([1, 2, 3]);

x.logSumExp().print();  // or tf.logSumExp(x)
```

```js
const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);

const axis = 1;
x.logSumExp(axis).print();  // or tf.logSumExp(a, axis)
```
@param x The input tensor.
@param axis The dimension(s) to reduce. If null (the default),
    reduces all dimensions.
@param keepDims If true, retains reduced dimensions with length
    of 1. Defaults to false.

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