code: def afb3D_A(x, af, d):
      """3D Analysis Filter Bank
       (along one dimension only)
  
      Parameters
      ----------
      x : 3D ndarray
          N1xN2xN2 matrix, where min(N1,N2,N3) > 2*length(filter)
             (Ni are even)
      af : 2D ndarray
          analysis filter for the columns
          af[:, 1] - lowpass filter
          af[:, 2] - highpass filter
      d : int
          dimension of filtering (d = 1, 2 or 3)
  
      Returns
      -------
      lo : 1D array
          lowpass subbands
      hi : 1D array
          highpass subbands
      """
  
      lpf = af[:, 0]
      hpf = af[:, 1]
      # permute dimensions of x so that dimension d is first.
      p = [(i + d) % 3 for i in range(3)]
      x = x.transpose(p)
      # filter along dimension 0
      (N1, N2, N3) = x.shape
      L = af.shape[0] // 2
      x = cshift3D(x, -L, 0)
      n1Half = N1 // 2
      lo = np.zeros((L + n1Half, N2, N3))
      hi = np.zeros((L + n1Half, N2, N3))
      for k in range(N3):
          lo[:, :, k] = nlmeans_block.firdn(x[:, :, k], lpf)
      lo[:L] = lo[:L] + lo[n1Half : n1Half + L, :, :]
      lo = lo[:n1Half, :, :]
  
      for k in range(N3):
          hi[:, :, k] = nlmeans_block.firdn(x[:, :, k], hpf)
      hi[:L] = hi[:L] + hi[n1Half : n1Half + L, :, :]
      hi = hi[:n1Half, :, :]
      # permute dimensions of x (inverse permutation)
      q = permutationinverse(p)
      lo = lo.transpose(q)
      hi = hi.transpose(q)
      return lo, hi
  
file_path: dipy/dipy/core/wavelet.py
imports: import numpy
  from dipy.denoise import nlmeans_block
label_desc: Use image node_id 3 for calling a global function with example usage: afb3D_A(x, af, d) and returns: lo,  hi