class_docstr: Base pairwise transformer for panel data template class.
  
  The base pairwise transformer specifies the methods and method signatures that all
  pairwise transformers have to implement.
  
  Specific implementations of these methods is deferred to concrete classes.
class_docstr_tok: ["Base","pairwise","transformer","for","panel","data","template","class",".","The","base","pairwise","transformer","specifies","the","methods","and","method","signatures","that","all","pairwise","transformers","have","to","implement",".","Specific","implementations","of","these","methods","is","deferred","to","concrete","classes","."]
docstr: Magic * method, return (right) PwTrafoPanelPipeline or CombinedDistance.
  
  Implemented for `other` being:
  * a transformer, then `PwTrafoPanelPipeline([other, self])` is returned
  * sklearn transformers are coerced via TabularToSeriesAdaptor
  
  Parameters
  ----------
  other: `sktime` transformer, must inherit from BaseTransformer
      otherwise, `NotImplemented` is returned
  
  Returns
  -------
  PwTrafoPanelPipeline object,
      concatenation of `other` (first) with `self` (last).
      not nested, contains only non-TransformerPipeline `sktime` steps
docstr_tok: ["Magic","*","method",",","return","(","right",")","PwTrafoPanelPipeline","or","CombinedDistance",".","Implemented","for","`","other","`","being",":","*","a","transformer",",","then","`","PwTrafoPanelPipeline","(","[","other",",","self","]",")","`","is","returned","*","sklearn","transformers","are","coerced","via","TabularToSeriesAdaptor","Parameters","--","--","--","--","--","other",":","`","sktime","`","transformer",",","must","inherit","from","BaseTransformer","otherwise",",","`","NotImplemented","`","is","returned","Returns","--","--","--","-","PwTrafoPanelPipeline","object",",","concatenation","of","`","other","`","(","first",")","with","`","self","`","(","last",")",".","not","nested",",","contains","only","non-TransformerPipeline","`","sktime","`","steps"]
code: def __rmul__(self, other):
      """Magic * method, return (right) PwTrafoPanelPipeline or CombinedDistance.
  
      Implemented for `other` being:
      * a transformer, then `PwTrafoPanelPipeline([other, self])` is returned
      * sklearn transformers are coerced via TabularToSeriesAdaptor
  
      Parameters
      ----------
      other: `sktime` transformer, must inherit from BaseTransformer
          otherwise, `NotImplemented` is returned
  
      Returns
      -------
      PwTrafoPanelPipeline object,
          concatenation of `other` (first) with `self` (last).
          not nested, contains only non-TransformerPipeline `sktime` steps
      """
      from sktime.dists_kernels.compose import PwTrafoPanelPipeline
      from sktime.dists_kernels.dummy import ConstantPwTrafoPanel
      from sktime.transformations.base import BaseTransformer
      from sktime.transformations.compose import TransformerPipeline
      from sktime.transformations.series.adapt import (
          TabularToSeriesAdaptor,
      )
      from sktime.utils.sklearn import is_sklearn_transformer
  
      # when other is an integer or float, treat it as constant distance/kernel
      if isinstance(other, (int, float)):
          other = ConstantPwTrafoPanel(constant=other)
  
      # behaviour is implemented only if other inherits from BaseTransformer
      #  in that case, distinctions arise from whether self or other is a pipeline
      #  todo: this can probably be simplified further with "zero length" pipelines
      if isinstance(other, BaseTransformer):
          # PwTrafoPanelPipeline already has the dunder method defined
          if isinstance(self, PwTrafoPanelPipeline):
              return other * self
          # if other is a TransformerPipeline but self is not, first unwrap it
          elif isinstance(other, TransformerPipeline):
              return PwTrafoPanelPipeline(
                  pw_trafo=self, transformers=other.steps
              )
          # if neither self nor other are a pipeline, construct a PwTrafoPanelPipeline
          else:
              return PwTrafoPanelPipeline(
                  pw_trafo=self, transformers=[other]
              )
      elif is_sklearn_transformer(other):
          return TabularToSeriesAdaptor(other) * self
      else:
          return NotImplemented
  
imports: from sktime.base import BaseEstimator
  from sktime.datatypes import check_is_scitype, convert_to
  from sktime.datatypes._series_as_panel import convert_Series_to_Panel
label_desc: Use image node_id 4 for calling the BasePairwiseTransformerPanel obj's underlying member method code with example usage: obj.__rmul__(other) and returns: unknown, unknown, NotImplemented, PwTrafoPanelPipeline, PwTrafoPanelPipeline