code: def __init__(
      self,
      units,
      thetas_dim,
      past_seq_len=10,
      future_seq_len=5,
      share_thetas=False,
      nb_harmonics=None,
  ):
      super(Block, self).__init__()
      self.units = units
      self.thetas_dim = thetas_dim
      self.past_seq_len = past_seq_len
      self.future_seq_len = future_seq_len
      self.share_thetas = share_thetas
      self.fc1 = nn.Linear(past_seq_len, units)
      self.fc2 = nn.Linear(units, units)
      self.fc3 = nn.Linear(units, units)
      self.fc4 = nn.Linear(units, units)
      self.backcast_linspace, self.forecast_linspace = linear_space(
          past_seq_len, future_seq_len
      )
      if share_thetas:
          self.theta_f_fc = self.theta_b_fc = nn.Linear(
              units, thetas_dim, bias=False
          )
      else:
          self.theta_b_fc = nn.Linear(units, thetas_dim, bias=False)
          self.theta_f_fc = nn.Linear(units, thetas_dim, bias=False)
  
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 1 to create a new Block object from inherited base classes: nn with example: obj = Block(units, thetas_dim, past_seq_len, future_seq_len, share_thetas, nb_harmonics)