class_docstr: Abstract implementation of encrypted tensor type. Every subclass of `CrypTensor`
  must implement the methods defined here. The actual tensor data should live in
  an instance attribute called `_tensor`. When implemented, the `CrypTensor`
  provides a full autograd implementation to the user.
class_docstr_tok: ["Abstract","implementation","of","encrypted","tensor","type",".","Every","subclass","of","`","CrypTensor","`","must","implement","the","methods","defined","here",".","The","actual","tensor","data","should","live","in","an","instance","attribute","called","`","_tensor","`",".","When","implemented",",","the","`","CrypTensor","`","provides","a","full","autograd","implementation","to","the","user","."]
docstr: Performs matrix multiplication of :attr:`self` with :attr:`tensor`
  
  The behavior depends on the dimensionality of the tensors as follows:
  
  - If both tensors are 1-dimensional, the dot product (scalar) is returned.
  - If both arguments are 2-dimensional, the matrix-matrix product is returned.
  - If the first argument is 1-dimensional and the second argument is
    2-dimensional, a 1 is prepended to its dimension for the purpose of
    the matrix multiply. After the matrix multiply, the
    prepended dimension is removed.
  - If the first argument is 2-dimensional and the second argument is
    1-dimensional, the matrix-vector product is returned.
  - If both arguments are at least 1-dimensional and at least one argument
    is N-dimensional (where N > 2), then a batched matrix multiply is returned.
    If the first argument is 1-dimensional, a 1 is prepended to its dimension
    for the purpose of the batched matrix multiply and removed after.
    If the second argument is 1-dimensional, a 1 is appended to its dimension
    for the purpose of the batched matrix multiple and removed after.
    The non-matrix (i.e. batch) dimensions are broadcasted (and thus
    must be `broadcastable`_).  For example, if :attr:`self` is a
    :math:`(j \times 1 \times n \times m)` tensor and :attr:`tensor` is a
    :math:`(k \times m \times p)` tensor, :attr:`out` will be an
    :math:`(j \times k \times n \times p)` tensor.
  
  Arguments:
      tensor (Tensor): the tensor to be multiplied
  
  .. _broadcastable:
      https://pytorch.org/docs/stable/notes/broadcasting.html#broadcasting-semantics
docstr_tok: ["Performs","matrix","multiplication","of",":","attr",":","`","self","`","with",":","attr",":","`","tensor","`","The","behavior","depends","on","the","dimensionality","of","the","tensors","as","follows",":","-","If","both","tensors","are","1-dimensional",",","the","dot","product","(","scalar",")","is","returned",".","-","If","both","arguments","are","2-dimensional",",","the","matrix-matrix","product","is","returned",".","-","If","the","first","argument","is","1-dimensional","and","the","second","argument","is","2-dimensional",",","a","1","is","prepended","to","its","dimension","for","the","purpose","of","the","matrix","multiply",".","After","the","matrix","multiply",",","the","prepended","dimension","is","removed",".","-","If","the","first","argument","is","2-dimensional","and","the","second","argument","is","1-dimensional",",","the","matrix-vector","product","is","returned",".","-","If","both","arguments","are","at","least","1-dimensional","and","at","least","one","argument","is","N-dimensional","(","where","N",">","2",")",",","then","a","batched","matrix","multiply","is","returned",".","If","the","first","argument","is","1-dimensional",",","a","1","is","prepended","to","its","dimension","for","the","purpose","of","the","batched","matrix","multiply","and","removed","after",".","If","the","second","argument","is","1-dimensional",",","a","1","is","appended","to","its","dimension","for","the","purpose","of","the","batched","matrix","multiple","and","removed","after",".","The","non-matrix","(","i.e",".","batch",")","dimensions","are","broadcasted","(","and","thus","must","be","`","broadcastable","`","_",")",".","For","example",",","if",":","attr",":","`","self","`","is","a",":","math",":","`","(","j","\\times","1","\\times","n","\\times","m",")","`","tensor","and",":","attr",":","`","tensor","`","is","a",":","math",":","`","(","k","\\times","m","\\times","p",")","`","tensor",",",":","attr",":","`","out","`","will","be","an",":","math",":","`","(","j","\\times","k","\\times","n","\\times","p",")","`","tensor",".","Arguments",":","tensor","(","Tensor",")",":","the","tensor","to","be","multiplied","..","_broadcastable",":","https",":","\/\/pytorch.org\/docs\/stable\/notes\/broadcasting.html","#","broadcasting-semantics"]
code: def matmul(self, tensor):
      r"""Performs matrix multiplication of :attr:`self` with :attr:`tensor`
  
      The behavior depends on the dimensionality of the tensors as follows:
  
      - If both tensors are 1-dimensional, the dot product (scalar) is returned.
      - If both arguments are 2-dimensional, the matrix-matrix product is returned.
      - If the first argument is 1-dimensional and the second argument is
        2-dimensional, a 1 is prepended to its dimension for the purpose of
        the matrix multiply. After the matrix multiply, the
        prepended dimension is removed.
      - If the first argument is 2-dimensional and the second argument is
        1-dimensional, the matrix-vector product is returned.
      - If both arguments are at least 1-dimensional and at least one argument
        is N-dimensional (where N > 2), then a batched matrix multiply is returned.
        If the first argument is 1-dimensional, a 1 is prepended to its dimension
        for the purpose of the batched matrix multiply and removed after.
        If the second argument is 1-dimensional, a 1 is appended to its dimension
        for the purpose of the batched matrix multiple and removed after.
        The non-matrix (i.e. batch) dimensions are broadcasted (and thus
        must be `broadcastable`_).  For example, if :attr:`self` is a
        :math:`(j \times 1 \times n \times m)` tensor and :attr:`tensor` is a
        :math:`(k \times m \times p)` tensor, :attr:`out` will be an
        :math:`(j \times k \times n \times p)` tensor.
  
      Arguments:
          tensor (Tensor): the tensor to be multiplied
  
      .. _broadcastable:
          https://pytorch.org/docs/stable/notes/broadcasting.html#broadcasting-semantics
      """
      raise NotImplementedError("matmul is not implemented")
  
imports: from contextlib import contextmanager
  import torch
  from .debug import register_validation
  from .gradients import AutogradContext, BaseAutogradContext, get_grad_fn
  from .common import functions
label_desc: Use image node_id 49 for calling the CrypTensor obj's underlying member method code with example usage: obj.matmul(tensor) without return types