def METHOD_NAME(self, column_names=None, virtual=True):
    dtypes = {name: self.data_type(name) for name in self.get_column_names(strings=True, virtual=False)}
    df = DataFrameRemote(self.name, self.column_names, dtypes=dtypes, length_original=self._length_original)
    df.executor = self.executor
    state = self.state_get()
    if not virtual:
        state['virtual_columns'] = {}
    df.state_set(state, use_active_range=True)
    return df