45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
#!/usr/bin/env python
|
|
|
|
import six
|
|
|
|
|
|
@six.python_2_unicode_compatible
|
|
class Computation(object): # pragma: no cover
|
|
"""
|
|
Computations produce a new column by performing a calculation on each row.
|
|
|
|
Computations are applied with :class:`.TableSet.compute`.
|
|
|
|
When implementing a custom computation, ensure that the values returned by
|
|
:meth:`.Computation.run` are of the type specified by
|
|
:meth:`.Computation.get_computed_data_type`. This can be ensured by using
|
|
the :meth:`.DataType.cast` method. See :class:`.Formula` for an example.
|
|
"""
|
|
def __str__(self):
|
|
"""
|
|
String representation of this column. May be used as a column name in
|
|
generated tables.
|
|
"""
|
|
return self.__class__.__name__
|
|
|
|
def get_computed_data_type(self, table):
|
|
"""
|
|
Returns an instantiated :class:`.DataType` which will be appended to
|
|
the table.
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def validate(self, table):
|
|
"""
|
|
Perform any checks necessary to verify this computation can run on the
|
|
provided table without errors. This is called by :meth:`.Table.compute`
|
|
before :meth:`run`.
|
|
"""
|
|
pass
|
|
|
|
def run(self, table):
|
|
"""
|
|
When invoked with a table, returns a sequence of new column values.
|
|
"""
|
|
raise NotImplementedError()
|