code: def __str__(self):
      block_type = type(self).__name__
      return (
          f"{block_type}(units={self.units}, thetas_dim={self.thetas_dim}, "
          f"past_seq_len={self.past_seq_len}, future_seq_len={self.future_seq_len}, "
          f"share_thetas={self.share_thetas}) at @{id(self)}"
      )
  
imports: import pickle
  import random
  from time import time
  from typing import Union
  import numpy
  import torch
  from torch import nn, optim
  from torch.nn import functional
  from torch.nn.functional import mse_loss, l1_loss, binary_cross_entropy, cross_entropy
  from torch.optim import Optimizer
  from .utils import PYTORCH_REGRESSION_LOSS_MAP
  from pytorch_lightning import seed_everything
label_desc: Use image node_id 3 for calling the Block obj's underlying member method code with example usage: obj.__str__() and returns: block_type, str, self, str, self, str, self, str, self, str, self, str, id