code: def _layer_norm_ref(axis, epsilon, X):
      left = int(np.prod(X.shape[:axis]))
      reshaped = np.reshape(X, [left, -1])
      mean = np.mean(reshaped, axis=1).reshape([left, 1])
      std = np.sqrt(
          np.mean(np.square(reshaped), axis=1).reshape([left, 1])
          - np.square(mean)
          + epsilon
      )
      Y = (reshaped - mean) / (std)
      Y = np.reshape(Y, X.shape)
      mean = np.reshape(mean, X.shape[:axis] + (1,))
      std = np.reshape(std, X.shape[:axis] + (1,))
      return (Y, mean, std)
  
imports: from caffe2.python import brew, core, workspace
  from caffe2.python.model_helper import ModelHelper
  from functools import partial
  from hypothesis import given, settings
  from typing import Optional, Tuple
  import caffe2.python.hypothesis_test_util
  import caffe2.python.serialized_test.serialized_test_util
  import hypothesis.strategies
  import numpy
  import torch
  import unittest
  from ._utils import assert_allclose
label_desc: Use image node_id 1 for calling a global function with example usage: _layer_norm_ref(axis, epsilon, X) and returns: Y,  mean,  std