@Action(units=(None, None, 'seconds', None), values=(None, None, None, _GROUP_BY))
    def write(self, data, auto_start=True, timeout=10.0, group_by='scan'):
        if np.isscalar(data):
            err = self.lib.WriteAnalogScalarF64(bool32(auto_start),
                                                float64(timeout),
                                                float64(data), None)
            return 1

        data = np.asarray(data, dtype = np.float64)

        number_of_channels = self.number_of_channels()

        if data.ndims == 1:
            if number_of_channels == 1:
                samples_per_channel = data.shape[0]
                shape = (samples_per_channel, 1)
            else:
                samples_per_channel = data.size / number_of_channels
                shape = (samples_per_channel, number_of_channels)

            if not group_by == Constants.Val_GroupByScanNumber:
                shape = tuple(reversed(shape))

            data.reshape(shape)
        else:
            if group_by == Constants.Val_GroupByScanNumber:
                samples_per_channel = data.shape[0]
            else:
                samples_per_channel = data.shape[-1]

        err, count = self.lib.WriteAnalogF64(samples_per_channel, auto_start,
                                             timeout, group_by,
                                             data.ctypes.data, RetValue('i32'),
                                             None)

        return count
Provide an implementation of ``connection.rollback()``, given
dataset/ETHPy150Open LabPy/lantz/lantz/drivers/legacy/ni/daqmx/tasks.py/AnalogOutputTask.write--crossover with--dataset/ETHPy150Open RoseOu/flasky/venv/lib/python2.7/site-packages/sqlalchemy/engine/interfaces.py/Dialect.do_rollback