class_docstr: Multiply a BaseXC with a float or a tensor
  
  Examples
  --------
  >>> import torch
  >>> from deepchem.utils.dft_utils import ValGrad, SpinParam
  >>> from deepchem.utils.dft_utils import BaseXC, MulBaseXC
  >>> class MyXC(BaseXC):
  ...     @property
  ...     def family(self) -> int:
  ...         return 1
  ...     def get_edensityxc(self, densinfo: Union[ValGrad, SpinParam[ValGrad]]) -> torch.Tensor:
  ...         if isinstance(densinfo, ValGrad):
  ...             return densinfo.value.pow(2)
  ...         else:
  ...             return densinfo.u.value.pow(2) + densinfo.d.value.pow(2)
  ...     def get_vxc(self, densinfo: Union[ValGrad, SpinParam[ValGrad]]) -> Union[ValGrad, SpinParam[ValGrad]]:
  ...         if isinstance(densinfo, ValGrad):
  ...             return ValGrad(value=2*densinfo.value)
  ...         else:
  ...             return SpinParam(u=ValGrad(value=2*densinfo.u.value),
  ...                              d=ValGrad(value=2*densinfo.d.value))
  >>> xc = MyXC()
  >>> densinfo = ValGrad(value=torch.tensor([1., 2., 3.], requires_grad=True))
  >>> xc.get_edensityxc(densinfo)
  tensor([1., 4., 9.], grad_fn=<PowBackward0>)
  >>> xc.get_vxc(densinfo)
  ValGrad(value=tensor([2., 4., 6.], grad_fn=<MulBackward0>), grad=None, lapl=None, kin=None)
  >>> densinfo = SpinParam(u=ValGrad(value=torch.tensor([1., 2., 3.], requires_grad=True)),
  ...                      d=ValGrad(value=torch.tensor([4., 5., 6.], requires_grad=True)))
  >>> xc.get_edensityxc(densinfo)
  tensor([17., 29., 45.], grad_fn=<AddBackward0>)
  >>> xc.get_vxc(densinfo)
  SpinParam(u=ValGrad(value=tensor([2., 4., 6.], grad_fn=<MulBackward0>), grad=None, lapl=None, kin=None), d=ValGrad(value=tensor([ 8., 10., 12.], grad_fn=<MulBackward0>), grad=None, lapl=None, kin=None))
  >>> xc2 = MulBaseXC(xc, 2.)
  >>> xc2.get_edensityxc(densinfo)
  tensor([34., 58., 90.], grad_fn=<MulBackward0>)
  >>> xc2.get_vxc(densinfo)
  SpinParam(u=ValGrad(value=tensor([ 4.,  8., 12.], grad_fn=<MulBackward0>), grad=None, lapl=None, kin=None), d=ValGrad(value=tensor([16., 20., 24.], grad_fn=<MulBackward0>), grad=None, lapl=None, kin=None))
  >>> xc3 = xc * 2.
  >>> xc3.get_edensityxc(densinfo)
  tensor([34., 58., 90.], grad_fn=<MulBackward0>)
  >>> xc3.get_vxc(densinfo)
  SpinParam(u=ValGrad(value=tensor([ 4.,  8., 12.], grad_fn=<MulBackward0>), grad=None, lapl=None, kin=None), d=ValGrad(value=tensor([16., 20., 24.], grad_fn=<MulBackward0>), grad=None, lapl=None, kin=None))
class_docstr_tok: ["Multiply","a","BaseXC","with","a","float","or","a","tensor","Examples","--","--","--","--",">",">",">","import","torch",">",">",">","from","deepchem.utils.dft_utils","import","ValGrad",",","SpinParam",">",">",">","from","deepchem.utils.dft_utils","import","BaseXC",",","MulBaseXC",">",">",">","class","MyXC","(","BaseXC",")",":","...","@","property","...","def","family","(","self",")","-",">","int",":","...","return","1","...","def","get_edensityxc","(","self",",","densinfo",":","Union","[","ValGrad",",","SpinParam","[","ValGrad","]","]",")","-",">","torch.Tensor",":","...","if","isinstance","(","densinfo",",","ValGrad",")",":","...","return","densinfo.value.pow","(","2",")","...","else",":","...","return","densinfo.u.value.pow","(","2",")","+","densinfo.d.value.pow","(","2",")","...","def","get_vxc","(","self",",","densinfo",":","Union","[","ValGrad",",","SpinParam","[","ValGrad","]","]",")","-",">","Union","[","ValGrad",",","SpinParam","[","ValGrad","]","]",":","...","if","isinstance","(","densinfo",",","ValGrad",")",":","...","return","ValGrad","(","value=2","*","densinfo.value",")","...","else",":","...","return","SpinParam","(","u=ValGrad","(","value=2","*","densinfo.u.value",")",",","...","d=ValGrad","(","value=2","*","densinfo.d.value",")",")",">",">",">","xc","=","MyXC","(",")",">",">",">","densinfo","=","ValGrad","(","value=torch.tensor","(","[","1.",",","2.",",","3",".","]",",","requires_grad=True",")",")",">",">",">","xc.get_edensityxc","(","densinfo",")","tensor","(","[","1.",",","4.",",","9",".","]",",","grad_fn=","<","PowBackward0",">",")",">",">",">","xc.get_vxc","(","densinfo",")","ValGrad","(","value=tensor","(","[","2.",",","4.",",","6",".","]",",","grad_fn=","<","MulBackward0",">",")",",","grad=None",",","lapl=None",",","kin=None",")",">",">",">","densinfo","=","SpinParam","(","u=ValGrad","(","value=torch.tensor","(","[","1.",",","2.",",","3",".","]",",","requires_grad=True",")",")",",","...","d=ValGrad","(","value=torch.tensor","(","[","4.",",","5.",",","6",".","]",",","requires_grad=True",")",")",")",">",">",">","xc.get_edensityxc","(","densinfo",")","tensor","(","[","17.",",","29.",",","45",".","]",",","grad_fn=","<","AddBackward0",">",")",">",">",">","xc.get_vxc","(","densinfo",")","SpinParam","(","u=ValGrad","(","value=tensor","(","[","2.",",","4.",",","6",".","]",",","grad_fn=","<","MulBackward0",">",")",",","grad=None",",","lapl=None",",","kin=None",")",",","d=ValGrad","(","value=tensor","(","[","8.",",","10.",",","12",".","]",",","grad_fn=","<","MulBackward0",">",")",",","grad=None",",","lapl=None",",","kin=None",")",")",">",">",">","xc2","=","MulBaseXC","(","xc",",","2",".",")",">",">",">","xc2.get_edensityxc","(","densinfo",")","tensor","(","[","34.",",","58.",",","90",".","]",",","grad_fn=","<","MulBackward0",">",")",">",">",">","xc2.get_vxc","(","densinfo",")","SpinParam","(","u=ValGrad","(","value=tensor","(","[","4.",",","8.",",","12",".","]",",","grad_fn=","<","MulBackward0",">",")",",","grad=None",",","lapl=None",",","kin=None",")",",","d=ValGrad","(","value=tensor","(","[","16.",",","20.",",","24",".","]",",","grad_fn=","<","MulBackward0",">",")",",","grad=None",",","lapl=None",",","kin=None",")",")",">",">",">","xc3","=","xc","*","2",".",">",">",">","xc3.get_edensityxc","(","densinfo",")","tensor","(","[","34.",",","58.",",","90",".","]",",","grad_fn=","<","MulBackward0",">",")",">",">",">","xc3.get_vxc","(","densinfo",")","SpinParam","(","u=ValGrad","(","value=tensor","(","[","4.",",","8.",",","12",".","]",",","grad_fn=","<","MulBackward0",">",")",",","grad=None",",","lapl=None",",","kin=None",")",",","d=ValGrad","(","value=tensor","(","[","16.",",","20.",",","24",".","]",",","grad_fn=","<","MulBackward0",">",")",",","grad=None",",","lapl=None",",","kin=None",")",")"]
docstr: This method should list tensor names that affect the output of the
  method with name indicated in ``methodname``.
  If the ``methodname`` is not on the list in this function, it should
  raise ``KeyError``.
  
  Parameters
  ---------
  methodname: str
      The name of the method of the class.
  prefix: str
      The prefix to be appended in front of the parameters name.
      This usually contains the dots.
  
  Returns
  -------
  List[str]
      Sequence of name of parameters affecting the output of the method.
  
  Raises
  ------
  KeyError
      If the list in this function does not contain ``methodname``.
docstr_tok: ["This","method","should","list","tensor","names","that","affect","the","output","of","the","method","with","name","indicated","in","``","methodname","``",".","If","the","``","methodname","``","is","not","on","the","list","in","this","function",",","it","should","raise","``","KeyError","``",".","Parameters","--","--","--","--","-","methodname",":","str","The","name","of","the","method","of","the","class",".","prefix",":","str","The","prefix","to","be","appended","in","front","of","the","parameters","name",".","This","usually","contains","the","dots",".","Returns","--","--","--","-","List","[","str","]","Sequence","of","name","of","parameters","affecting","the","output","of","the","method",".","Raises","--","--","--","KeyError","If","the","list","in","this","function","does","not","contain","``","methodname","``","."]
code: def getparamnames(
      self, methodname: str, prefix: str = ""
  ) -> List[str]:
      """
      This method should list tensor names that affect the output of the
      method with name indicated in ``methodname``.
      If the ``methodname`` is not on the list in this function, it should
      raise ``KeyError``.
  
      Parameters
      ---------
      methodname: str
          The name of the method of the class.
      prefix: str
          The prefix to be appended in front of the parameters name.
          This usually contains the dots.
  
      Returns
      -------
      List[str]
          Sequence of name of parameters affecting the output of the method.
  
      Raises
      ------
      KeyError
          If the list in this function does not contain ``methodname``.
  
      """
      params = self.a.getparamnames(methodname, prefix=prefix + "a.")
      if isinstance(self.b, torch.Tensor):
          params = params + [prefix + "b"]
      return params
  
imports: from contextlib import contextmanager
  from abc import abstractmethod, abstractproperty
  import torch
  from deepchem.utils.differentiation_utils import EditableModule
  from typing import Any, List, Union, Iterator
  from deepchem.utils.dft_utils import ValGrad, SpinParam
label_desc: Use image node_id 5 for calling the MulBaseXC obj's underlying member method code with example usage: obj.getparamnames(methodname, prefix) and returns: params