'Construct a new Factor representing the sorted rank of each column
within each row.
Parameters
method : str, {\'ordinal\', \'min\', \'max\', \'dense\', \'average\'}
The method used to assign ranks to tied elements. See
`scipy.stats.rankdata` for a full description of the semantics for
each ranking method. Default is \'ordinal\'.
ascending : bool, optional
Whether to return sorted rank in ascending or descending order.
Default is True.
mask : zipline.pipeline.Filter, optional
A Filter representing assets to consider when computing ranks.
If mask is supplied, ranks are computed ignoring any asset/date
pairs for which `mask` produces a value of False.
groupby : zipline.pipeline.Classifier, optional
A classifier defining partitions over which to perform ranking.
Returns
ranks : zipline.pipeline.factors.Rank
A new factor that will compute the ranking of the data produced by
`self`.
Notes
The default value for `method` is different from the default for
`scipy.stats.rankdata`.  See that function\'s documentation for a full
description of the valid inputs to `method`.
Missing or non-existent data on a given day will cause an asset to be
given a rank of NaN for that day.
See Also
:func:`scipy.stats.rankdata`
:class:`zipline.pipeline.factors.factor.Rank`'

def rank(self, method='ordinal', ascending=True, mask=NotSpecified, groupby=NotSpecified):

    if (groupby is NotSpecified):
        return Rank(self, method=method, ascending=ascending, mask=mask)
    return GroupedRowTransform(transform=(rankdata if ascending else rankdata_1d_descending), transform_args=(method,), factor=self, groupby=groupby, dtype=float64_dtype, missing_value=nan, mask=mask, window_safe=True)
