function conv3d_(x, filter, strides, pad, dataFormat = "NDHWC", dilations = [
    1,
    1,
    1
]) {
    const $x = (0, _tensorUtilEnv.convertToTensor)(x, "x", "conv3d");
    const $filter = (0, _tensorUtilEnv.convertToTensor)(filter, "filter", "conv3d");
    let x5D = $x;
    let reshapedTo5D = false;
    if ($x.rank === 4) {
        reshapedTo5D = true;
        x5D = (0, _reshape.reshape)($x, [
            1,
            $x.shape[0],
            $x.shape[1],
            $x.shape[2],
            $x.shape[3]
        ]);
    }
    _util.assert(x5D.rank === 5, ()=>`Error in conv3d: input must be rank 5, but got rank ${x5D.rank}.`);
    _util.assert($filter.rank === 5, ()=>`Error in conv3d: filter must be rank 5, but got rank ` + `${$filter.rank}.`);
    _util.assert(x5D.shape[4] === $filter.shape[3], ()=>`Error in conv3d: depth of input (${x5D.shape[4]}) must match ` + `input depth for filter ${$filter.shape[3]}.`);
    _util.assert((0, _convUtil.eitherStridesOrDilationsAreOne)(strides, dilations), ()=>"Error in conv3D: Either strides or dilations must be 1. " + `Got strides ${strides} and dilations '${dilations}'`);
    _util.assert(dataFormat === "NDHWC", ()=>`Error in conv3d: got dataFormat of ${dataFormat} but only NDHWC is currently supported.`);
    _util.assert((0, _convUtil.stridesOrDilationsArePositive)(dilations), ()=>"Error in conv3D: Dilated rates should be larger than 0.");
    _util.assert((0, _convUtil.stridesOrDilationsArePositive)(strides), ()=>"Error in conv3D: Strides should be larger than 0.");
    const inputs = {
        x: x5D,
        filter: $filter
    };
    const attrs = {
        strides,
        pad,
        dataFormat,
        dilations
    };
    // tslint:disable-next-line: no-unnecessary-type-assertion
    const res = (0, _engine.ENGINE).runKernel((0, _kernelNames.Conv3D), inputs, attrs);
    if (reshapedTo5D) return (0, _reshape.reshape)(res, [
        res.shape[1],
        res.shape[2],
        res.shape[3],
        res.shape[4]
    ]);
    return res;
}
Computes a 3D convolution over the input x.

@param x The input tensor, of rank 5 or rank 4, of shape
    `[batch, depth, height, width, channels]`. If rank 4,
batch of 1 is assumed.
@param filter The filter, rank 5, of shape
    `[filterDepth, filterHeight, filterWidth, inChannels, outChannels]`.
     inChannels must match between input and filter.
@param strides The strides of the convolution: `[strideDepth, strideHeight,
strideWidth]`.
@param pad The type of padding algorithm.
   - `same` and stride 1: output will be of same size as input,
      regardless of filter size.
   - `valid`: output will be smaller than input if filter is larger
      than 1x1.
  - For more info, see this guide:
    [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](
         https://www.tensorflow.org/api_docs/python/tf/nn/convolution)
@param dataFormat: An optional string from: "NDHWC", "NCDHW". Defaults to
    "NDHWC". Specify the data format of the input and output data. With the
    default format "NDHWC", the data is stored in the order of: [batch,
    depth, height, width, channels]. Only "NDHWC" is currently supported.
@param dilations The dilation rates: `[dilationDepth, dilationHeight,
    dilationWidth]` in which we sample input values across the height
    and width dimensions in atrous convolution. Defaults to `[1, 1, 1]`.
    If `dilations` is a single number, then
    `dilationDepth == dilationHeight == dilationWidth`. If it is greater
    than 1, then all values of `strides` must be 1.

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