code: def test_dataframe_getitem_using_attr(setup):
      data = pd.DataFrame(
          np.random.rand(10, 5),
          columns=["c1", "c2", "key", "dtypes", "size"],
      )
      df = md.DataFrame(data, chunk_size=2)
  
      series1 = df.c2
      pd.testing.assert_series_equal(series1.execute().fetch(), data.c2)
  
      # accessing column using attribute shouldn't overwrite existing attributes
      assert df.key == getattr(getattr(df, "_data"), "_key")
      assert df.size == data.size
      pd.testing.assert_series_equal(df.dtypes, data.dtypes)
  
      # accessing non-existing attributes should trigger exception
      with pytest.raises(AttributeError):
          _ = df.zzz
  
imports: import os
  import tempfile
  import mars
  import numpy
  import pandas
  import pytest
  from ....None import dataframe
  from ....None import tensor
  from ....utils import pd_release_version
  from ...datasource.read_csv import DataFrameReadCSV
  from ...datasource.read_sql import DataFrameReadSQL
  from ...datasource.read_parquet import DataFrameReadParquet
label_desc: Use image node_id 7 for calling a global function with example usage: test_dataframe_getitem_using_attr(setup) without return types