text: # coding=utf-8
  # Copyright (c) 2019 Alibaba PAI team.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  
  import numpy as np
  import tensorflow as tf
  
  def gelu(x):
      """ Gaussian Error Linear Unit.
      Original Implementation of the gelu activation function in Google Bert repo when initially created.
          For information: OpenAI GPT's gelu is slightly different (and gives slightly different results):
          0.5 * x * (1 + torch.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * torch.pow(x, 3))))
          Also see https://arxiv.org/abs/1606.08415
      """
      cdf = 0.5 * (1.0 + tf.math.erf(x / tf.math.sqrt(2.0)))
      return x * cdf
  
  
  def gelu_new(x):
      """Gaussian Error Linear Unit.
      This is a smoother version of the RELU.
      Original paper: https://arxiv.org/abs/1606.08415
      Args:
          x: float Tensor to perform activation.
      Returns:
          `x` with the GELU activation applied.
      """
      cdf = 0.5 * (1.0 + tf.tanh((np.sqrt(2 / np.pi) * (x + 0.044715 * tf.pow(x, 3)))))
      return x * cdf
  
  def swish(x):
      return x * tf.sigmoid(x)
  
  def relu(x):
      return tf.nn.relu(x)
  