class_docstr: The SCAD penalty of Fan and Li, quadratically smoothed around zero.
  
  This follows Fan and Li 2001 equation (3.7).
  
  Parameterization follows Boo, Johnson, Li and Tan 2011
  see docstring of SCAD
  
  Parameters
  ----------
  tau : float
      slope and threshold for linear segment
  c : float
      factor for second threshold
  c0 : float
      threshold for quadratically smoothed segment
  restriction : None or array
      linear constraints for
  
  Notes
  -----
  TODO: Use delegation instead of subclassing, so smoothing can be added to
  all penalty classes.
class_docstr_tok: ["The","SCAD","penalty","of","Fan","and","Li",",","quadratically","smoothed","around","zero",".","This","follows","Fan","and","Li","2001","equation","(","3.7",")",".","Parameterization","follows","Boo",",","Johnson",",","Li","and","Tan","2011","see","docstring","of","SCAD","Parameters","--","--","--","--","--","tau",":","float","slope","and","threshold","for","linear","segment","c",":","float","factor","for","second","threshold","c0",":","float","threshold","for","quadratically","smoothed","segment","restriction",":","None","or","array","linear","constraints","for","Notes","--","--","-","TODO",":","Use","delegation","instead","of","subclassing",",","so","smoothing","can","be","added","to","all","penalty","classes","."]
code: def func(self, params):
      # workaround for Null model
      weights = self._null_weights(params)
      # TODO: `and np.size(params) > 1` is hack for llnull, need better solution
      if self.restriction is not None and np.size(params) > 1:
          params = self.restriction.dot(params)
      # need to temporarily override weights for call to super
      # Note: we have the same problem with `restriction`
      self_weights = self.weights
      self.weights = 1.0
      value = super().func(params[None, ...])
      self.weights = self_weights
  
      # shift down so func(0) == 0
      value -= self.aq1
      # change the segment corrsponding to quadratic approximation
      p_abs = np.atleast_1d(np.abs(params))
      mask = p_abs < self.c0
      p_abs_masked = p_abs[mask]
      value[mask] = self.aq2 * p_abs_masked**2
  
      return (weights * value).sum(0)
  
imports: import numpy
label_desc: Use image node_id 2 for calling the SCADSmoothed obj's underlying member method code with example usage: obj.func(params) and returns: unknown