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","."]
code: def _get_forward_function_no_ctx(self, grad_fn):
      # determine if self is a dummy object (the case for staticmethods):
      is_dummy = getattr(self, "__IS_DUMMY__", False)
  
      def autograd_forward_no_ctx(*args, **kwargs):
          if not is_dummy:
              args = [self] + list(args)
  
          # Create dummy AutogradContext that stores no data
          ctx = BaseAutogradContext()
  
          with CrypTensor.no_grad():
              result = grad_fn.forward(ctx, *args, **kwargs)
          return result
  
      return autograd_forward_no_ctx
  
imports: from contextlib import contextmanager
  import torch
  from .debug import register_validation
  from .gradients import AutogradContext, BaseAutogradContext, get_grad_fn
  from .None import functions
label_desc: Use image node_id 13 for calling the CrypTensor obj's underlying member method code with example usage: obj._get_forward_function_no_ctx(grad_fn) and returns: autograd_forward_no_ctx, result