docstr: Mode-n unfolding times khatri-rao product of factors.
  
  Parameters
  ----------
  x
      tensor to unfold
  factors
      list of matrices of which to the khatri-rao product
  mode
      mode on which to unfold `tensor`
  
  Returns
  -------
  mttkrp
      dot(unfold(x, mode), khatri-rao(factors))
docstr_tok: ["Mode-n","unfolding","times","khatri-rao","product","of","factors",".","Parameters","--","--","--","--","--","x","tensor","to","unfold","factors","list","of","matrices","of","which","to","the","khatri-rao","product","mode","mode","on","which","to","unfold","`","tensor","`","Returns","--","--","--","-","mttkrp","dot","(","unfold","(","x",",","mode",")",",","khatri-rao","(","factors",")",")"]
code: def unfolding_dot_khatri_rao(x, cp_tensor, mode):
      """Mode-n unfolding times khatri-rao product of factors.
  
      Parameters
      ----------
      x
          tensor to unfold
      factors
          list of matrices of which to the khatri-rao product
      mode
          mode on which to unfold `tensor`
  
      Returns
      -------
      mttkrp
          dot(unfold(x, mode), khatri-rao(factors))
      """
      mttkrp_parts = []
      weights, factors = cp_tensor
      rank = ivy.shape(factors[0])[1]
      for r in range(rank):
          component = ivy.multi_mode_dot(
              x, [ivy.conj(f[:, r]) for f in factors], skip=mode
          )
          mttkrp_parts.append(component)
  
      if weights is None:
          return ivy.stack(mttkrp_parts, axis=1)
      else:
          return ivy.stack(mttkrp_parts, axis=1) * ivy.reshape(
              weights, (1, -1)
          )
  
imports: from .base import FactorizedTensor
  import ivy
label_desc: Use image node_id 26 for calling the CPTensor obj's underlying member method code with example usage: obj.unfolding_dot_khatri_rao(x, cp_tensor, mode) and returns: ivy, unknown