def evaluate(self, verbose=True, passes=None):
        """Summary

        Returns:
            TYPE: Description
        """
        if self.is_pivot:
            index, pivot, columns = LazyOpResult(
                self.expr,
                self.weld_type,
                0
            ).evaluate(verbose=verbose, passes=passes)
            df_dict = {}
            for i, column_name in enumerate(columns):
                df_dict[column_name] = pivot[i]
            return DataFrameWeld(pd.DataFrame(df_dict, index=index))
        else:
            df = pd.DataFrame(columns=[])
            weldvec_type_list = []
            for type in self.column_types:
                weldvec_type_list.append(WeldVec(type))

            columns = LazyOpResult(
                grizzly_impl.unzip_columns(
                    self.expr,
                    self.column_types
                ),
                WeldStruct(weldvec_type_list),
                0
            ).evaluate(verbose=verbose, passes=passes)

            for i, column_name in enumerate(self.column_names):
                df[column_name] = columns[i]

            return DataFrameWeld(df)