Skip to content

STYLE: Fix lint error "F811 redefinition of unused 'setup'" in benchmarks  #22885

Closed
@datapythonista

Description

@datapythonista

(related to #22884)

There is an issue in the linting of the benchmarks, caused by how asv manages reusing a setup function. See:

(pandas-dev) [mgarcia@xps asv_bench]$ flake8 --config=none benchmarks/categoricals.py 
benchmarks/categoricals.py:21:5: F811 redefinition of unused 'setup' from line 14

The problem is that to make asv reuse a common setup function for all the benchmarks in a file, it is expected to have it defined in the top-level namespace. Then every benchmark class in the file can specify a setup method that will be executed after the common one. See this sample code:

from .pandas_vb_common import setup

class MyBenchmark:
    def setup(self):
        pass

Regardless if this is a good approach by asv, the problem is that the previous code causes linting problems (the error shown before). In this case, the setup defined in pandas_vb_common.py simply defines the seed, np.random.seed(1234).

It's not a great option, but we could move the import of setup at the end of the file (so, the methods are not seen as redefinitions), and flag it to ignore the validation of not being used: from .pandas_vb_common import setup # noqa: F401. But I find this one trickier, as it's difficult to see that there is a common setup being executed, unless you go at the end of the file.

Those are the affected files:

benchmarks/ctors.py
benchmarks/series_methods.py
benchmarks/panel_methods.py
benchmarks/inference.py
benchmarks/replace.py
benchmarks/groupby.py
benchmarks/algorithms.py
benchmarks/timeseries.py
benchmarks/binary_ops.py
benchmarks/stat_ops.py
benchmarks/index_object.py
benchmarks/frame_methods.py
benchmarks/panel_ctor.py
benchmarks/eval.py
benchmarks/reshape.py
benchmarks/categoricals.py
benchmarks/rolling.py
benchmarks/gil.py
benchmarks/indexing.py
benchmarks/multiindex_object.py
benchmarks/sparse.py
benchmarks/frame_ctor.py
benchmarks/plotting.py
benchmarks/join_merge.py
benchmarks/attrs_caching.py
benchmarks/reindex.py
benchmarks/io/stata.py
benchmarks/io/csv.py
benchmarks/io/sql.py
benchmarks/io/json.py
benchmarks/io/msgpack.py
benchmarks/io/hdf.py
benchmarks/io/excel.py
benchmarks/io/pickle.py

Metadata

Metadata

Assignees

No one assigned

    Labels

    CIContinuous IntegrationCode StyleCode style, linting, code_checksNeeds DiscussionRequires discussion from core team before further actiongood first issue

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions