class_docstr: PGExplainer from `Parameterized Explainer for Graph Neural Network
  <https://arxiv.org/pdf/2011.04573>`__, adapted for heterogeneous graphs
  
  PGExplainer adopts a deep neural network (explanation network) to
  parameterize the generation process of explanations, which enables it to
  explain multiple instances collectively. PGExplainer models the underlying
  structure as edge distributions, from which the explanatory graph is
  sampled.
  
  Parameters
  ----------
  model : nn.Module
      The GNN model to explain that tackles multiclass graph classification
  
      * Its forward function must have the form
        :attr:`forward(self, graph, nfeat, embed, edge_weight)`.
      * The output of its forward function is the logits if embed=False else
        the intermediate node embeddings.
  num_features : int
      Node embedding size used by :attr:`model`.
  coff_budget : float, optional
      Size regularization to constrain the explanation size. Default: 0.01.
  coff_connect : float, optional
      Entropy regularization to constrain the connectivity of explanation. Default: 5e-4.
  sample_bias : float, optional
      Some members of a population are systematically more likely to be selected
      in a sample than others. Default: 0.0.
class_docstr_tok: ["PGExplainer","from","`","Parameterized","Explainer","for","Graph","Neural","Network","<","https",":","\/\/arxiv.org\/pdf\/2011.04573",">","`","__",",","adapted","for","heterogeneous","graphs","PGExplainer","adopts","a","deep","neural","network","(","explanation","network",")","to","parameterize","the","generation","process","of","explanations",",","which","enables","it","to","explain","multiple","instances","collectively",".","PGExplainer","models","the","underlying","structure","as","edge","distributions",",","from","which","the","explanatory","graph","is","sampled",".","Parameters","--","--","--","--","--","model",":","nn.Module","The","GNN","model","to","explain","that","tackles","multiclass","graph","classification","*","Its","forward","function","must","have","the","form",":","attr",":","`","forward","(","self",",","graph",",","nfeat",",","embed",",","edge_weight",")","`",".","*","The","output","of","its","forward","function","is","the","logits","if","embed=False","else","the","intermediate","node","embeddings",".","num_features",":","int","Node","embedding","size","used","by",":","attr",":","`","model","`",".","coff_budget",":","float",",","optional","Size","regularization","to","constrain","the","explanation","size",".","Default",":","0.01.","coff_connect",":","float",",","optional","Entropy","regularization","to","constrain","the","connectivity","of","explanation",".","Default",":","5e-4",".","sample_bias",":","float",",","optional","Some","members","of","a","population","are","systematically","more","likely","to","be","selected","in","a","sample","than","others",".","Default",":","0.0","."]
docstr: Convert an edge mask from homogeneous mappings built through
  embeddings into heterogenous format by leveraging the context from
  the source DGLGraphs in homogenous and heterogeneous form.
  
  The `edge_mask` needs to have been built using the embedding of the
  homogenous graph format for the mappings to work correctly.
  
  Parameters
  ----------
  edge_mask : dict[str, Tensor]
      A dict mapping node types (keys) to a tensor of edge weights (values).
  homograph : DGLGraph
      The homogeneous form of the source graph.
  heterograph : DGLGraph
      The heterogeneous form of the source graph.
  
  Returns
  -------
  dict[str, Tensor]
      A dict mapping node types (keys) to tensors of node ids (values)
docstr_tok: ["Convert","an","edge","mask","from","homogeneous","mappings","built","through","embeddings","into","heterogenous","format","by","leveraging","the","context","from","the","source","DGLGraphs","in","homogenous","and","heterogeneous","form",".","The","`","edge_mask","`","needs","to","have","been","built","using","the","embedding","of","the","homogenous","graph","format","for","the","mappings","to","work","correctly",".","Parameters","--","--","--","--","--","edge_mask",":","dict","[","str",",","Tensor","]","A","dict","mapping","node","types","(","keys",")","to","a","tensor","of","edge","weights","(","values",")",".","homograph",":","DGLGraph","The","homogeneous","form","of","the","source","graph",".","heterograph",":","DGLGraph","The","heterogeneous","form","of","the","source","graph",".","Returns","--","--","--","-","dict","[","str",",","Tensor","]","A","dict","mapping","node","types","(","keys",")","to","tensors","of","node","ids","(","values",")"]
code: def _edge_mask_to_heterogeneous(
      self, edge_mask, homograph, heterograph
  ):
      r"""Convert an edge mask from homogeneous mappings built through
      embeddings into heterogenous format by leveraging the context from
      the source DGLGraphs in homogenous and heterogeneous form.
  
      The `edge_mask` needs to have been built using the embedding of the
      homogenous graph format for the mappings to work correctly.
  
      Parameters
      ----------
      edge_mask : dict[str, Tensor]
          A dict mapping node types (keys) to a tensor of edge weights (values).
      homograph : DGLGraph
          The homogeneous form of the source graph.
      heterograph : DGLGraph
          The heterogeneous form of the source graph.
  
      Returns
      -------
      dict[str, Tensor]
          A dict mapping node types (keys) to tensors of node ids (values)
      """
      return {
          etype: edge_mask[
              (
                  homograph.edata[ETYPE]
                  == heterograph.get_etype_id(etype)
              )
              .nonzero()
              .squeeze(1)
          ]
          for etype in heterograph.canonical_etypes
      }
  
imports: import math
  import torch
  import torch.nn
  import torch.nn.functional
  from ....None import batch, ETYPE, khop_in_subgraph, NID, to_homogeneous
label_desc: Use image node_id 5 for calling the HeteroPGExplainer obj's underlying member method code with example usage: obj._edge_mask_to_heterogeneous(edge_mask, homograph, heterograph) and returns: unknown