code: def __init__(
      self, num_spherical, num_radial, cutoff=5.0, envelope_exponent=5
  ):
      super(angle_emb, self).__init__()
      assert num_radial <= 64
      self.num_spherical = num_spherical
      self.num_radial = num_radial
      self.cutoff = cutoff
      # self.envelope = Envelope(envelope_exponent)
  
      bessel_forms = bessel_basis(num_spherical, num_radial)
      sph_harm_forms = real_sph_harm(num_spherical)
      self.sph_funcs = []
      self.bessel_funcs = []
  
      x, theta = sym.symbols("x theta")
      modules = {"sin": torch.sin, "cos": torch.cos}
      for i in range(num_spherical):
          if i == 0:
              sph1 = sym.lambdify(
                  [theta], sph_harm_forms[i][0], modules
              )(0)
              self.sph_funcs.append(
                  lambda x: torch.zeros_like(x) + sph1
              )
          else:
              sph = sym.lambdify([theta], sph_harm_forms[i][0], modules)
              self.sph_funcs.append(sph)
          for j in range(num_radial):
              bessel = sym.lambdify([x], bessel_forms[i][j], modules)
              self.bessel_funcs.append(bessel)
  
imports: import numpy
  from scipy.optimize import brentq
  from scipy import special
  import torch
  from math import pi
  import sympy
label_desc: Use image node_id 1 to create a new angle_emb object from inherited base classes: torch.nn with example: obj = angle_emb(num_spherical, num_radial, cutoff, envelope_exponent)