code: def hstack(data_frames: List["DataFrame"]) -> "DataFrame":
      if len(data_frames) == 1:
          return data_frames[0]
  
      l_df = DataFrame(
          data_frames[0]._ctx,
          data_frames[0].block_table,
          data_frames[0].partition_order_mappings,
          data_frames[0].data_manager.duplicate(),
      )
  
      column_set = set(l_df.schema.columns)
      for r_df in data_frames[1:]:
          other_column_set = set(r_df.schema.columns)
          if column_set & other_column_set:
              raise ValueError(
                  "Hstack does not support duplicate columns"
              )
  
          set_item(l_df, r_df.schema.columns.tolist(), r_df, 1)
  
          column_set |= other_column_set
  
      data_manager = l_df.data_manager
      block_table = l_df.block_table
  
      block_table, data_manager = compress_blocks(
          block_table, data_manager
      )
  
      l_df.block_table = block_table
      l_df.data_manager = data_manager
  
      return l_df
  
imports: import copy
  import functools
  from typing import List, Union
  import torch
  from sklearn.utils import resample
  from .._dataframe import DataFrame
  from ..manager.data_manager import DataManager
  from ..manager.block_manager import Block
  from ._compress_block import compress_blocks
  from ._indexer import get_partition_order_by_raw_table, get_partition_order_mappings_by_block_table
  from ._promote_types import promote_partial_block_types
  from ._set_item import set_item
  from fate.arch.tensor import DTensor
label_desc: Use image node_id 1 for calling a global function with example usage: hstack(data_frames) and returns: l_df, data_frames