code: def __init__(
      self,
      roots,
      weights=None,
      hn=1.0,
      kn=1.0,
      wfunc=None,
      limits=None,
      monic=False,
      eval_func=None,
  ):
      equiv_weights = [
          weights[k] / wfunc(roots[k]) for k in range(len(roots))
      ]
      mu = sqrt(hn)
      if monic:
          evf = eval_func
          if evf:
              knn = kn
              eval_func = lambda x: evf(x) / knn
          mu = mu / abs(kn)
          kn = 1.0
  
      # compute coefficients from roots, then scale
      poly = np.poly1d(roots, r=True)
      np.poly1d.__init__(self, poly.coeffs * float(kn))
  
      # TODO: In numpy 1.13, there is no need to use __dict__ to access attributes
      self.__dict__["weights"] = np.array(
          list(zip(roots, weights, equiv_weights))
      )
      self.__dict__["weight_func"] = wfunc
      self.__dict__["limits"] = limits
      self.__dict__["normcoef"] = mu
  
      # Note: eval_func will be discarded on arithmetic
      self.__dict__["_eval_func"] = eval_func
  
imports: from __future__ import division, print_function, absolute_import
  import numpy
  from numpy import exp, inf, pi, sqrt, floor, sin, cos, around, int, hstack, arccos, arange
  from scipy import linalg
  from scipy.special import airy
  from .None import _ufuncs
  from .None import _ufuncs
  from .None import specfun
  from ._ufuncs import binom, eval_jacobi, eval_sh_jacobi, eval_gegenbauer, eval_chebyt, eval_chebyu, eval_chebys, eval_chebyc, eval_sh_chebyt, eval_sh_chebyu, eval_legendre, eval_sh_legendre, eval_genlaguerre, eval_laguerre, eval_hermite, eval_hermitenorm
label_desc: Use image node_id 1 to create a new orthopoly1d object from inherited base classes: np with example: obj = orthopoly1d(roots, weights, hn, kn, wfunc, limits, monic, eval_func)