src/triage/component/audition/selection_rules.py

Summary

Maintainability
B
6 hrs
Test Coverage

File selection_rules.py has 413 lines of code (exceeds 400 allowed). Consider refactoring.
Open

import inspect
import verboselogs, logging
logger = verboselogs.VerboseLogger(__name__)

from numpy import exp, log, average
Severity: Minor
Found in src/triage/component/audition/selection_rules.py - About 2 hrs to fix

    Function best_avg_recency_weight has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
    Open

    def best_avg_recency_weight(
        df, train_end_time, metric, parameter, curr_weight, decay_type, n=1
    ):
        """Pick the model with the highest average metric value so far, penalized
        for relative variance as:
    Severity: Minor
    Found in src/triage/component/audition/selection_rules.py - About 55 mins to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Function best_average_two_metrics has 8 arguments (exceeds 5 allowed). Consider refactoring.
    Open

    def best_average_two_metrics(
    Severity: Major
    Found in src/triage/component/audition/selection_rules.py - About 50 mins to fix

      Function best_avg_var_penalized has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
      Open

      def best_avg_var_penalized(df, train_end_time, metric, parameter, stdev_penalty, n=1):
          """Pick the model with the highest
           average metric value so far, placing less weight in older
           results. You need to specify two parameters: the shape of how the
           weight affects points (decay_type, linear or exponential) and the relative
      Severity: Minor
      Found in src/triage/component/audition/selection_rules.py - About 45 mins to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Function best_avg_recency_weight has 7 arguments (exceeds 5 allowed). Consider refactoring.
      Open

      def best_avg_recency_weight(
      Severity: Major
      Found in src/triage/component/audition/selection_rules.py - About 45 mins to fix

        Function most_frequent_best_dist has 6 arguments (exceeds 5 allowed). Consider refactoring.
        Open

        def most_frequent_best_dist(
        Severity: Minor
        Found in src/triage/component/audition/selection_rules.py - About 35 mins to fix

          Function best_avg_var_penalized has 6 arguments (exceeds 5 allowed). Consider refactoring.
          Open

          def best_avg_var_penalized(df, train_end_time, metric, parameter, stdev_penalty, n=1):
          Severity: Minor
          Found in src/triage/component/audition/selection_rules.py - About 35 mins to fix

            Module level import not at top of file
            Open

            from .metric_directionality import greater_is_better, best_in_series, idxbest

            Place imports at the top of the file.

            Always put imports at the top of the file, just after any module
            comments and docstrings, and before module globals and constants.
            
            Okay: import os
            Okay: # this is a comment\nimport os
            Okay: '''this is a module docstring'''\nimport os
            Okay: r'''this is a module docstring'''\nimport os
            Okay:
            try:\n\timport x\nexcept ImportError:\n\tpass\nelse:\n\tpass\nimport y
            Okay:
            try:\n\timport x\nexcept ImportError:\n\tpass\nfinally:\n\tpass\nimport y
            E402: a=1\nimport os
            E402: 'One string'\n"Two string"\nimport os
            E402: a=1\nfrom sys import x
            
            Okay: if x:\n    import os

            Line too long (90 > 88 characters)
            Open

                # curr_weight is amount of weight to put on current point, relative to the first point

            Limit all lines to a maximum of 79 characters.

            There are still many devices around that are limited to 80 character
            lines; plus, limiting windows to 80 characters makes it possible to
            have several windows side-by-side.  The default wrapping on such
            devices looks ugly.  Therefore, please limit all lines to a maximum
            of 79 characters. For flowing long blocks of text (docstrings or
            comments), limiting the length to 72 characters is recommended.
            
            Reports error E501.

            Line too long (92 > 88 characters)
            Open

                    # variance will be undefined in first time window since we only have one obseravtion

            Limit all lines to a maximum of 79 characters.

            There are still many devices around that are limited to 80 character
            lines; plus, limiting windows to 80 characters makes it possible to
            have several windows side-by-side.  The default wrapping on such
            devices looks ugly.  Therefore, please limit all lines to a maximum
            of 79 characters. For flowing long blocks of text (docstrings or
            comments), limiting the length to 72 characters is recommended.
            
            Reports error E501.

            Line too long (97 > 88 characters)
            Open

                    # sample(frac=1) to shuffle rows so we don't accidentally introduce bias in breaking ties

            Limit all lines to a maximum of 79 characters.

            There are still many devices around that are limited to 80 character
            lines; plus, limiting windows to 80 characters makes it possible to
            have several windows side-by-side.  The default wrapping on such
            devices looks ugly.  Therefore, please limit all lines to a maximum
            of 79 characters. For flowing long blocks of text (docstrings or
            comments), limiting the length to 72 characters is recommended.
            
            Reports error E501.

            Line too long (97 > 88 characters)
            Open

                    # sample(frac=1) to shuffle rows so we don't accidentally introduce bias in breaking ties

            Limit all lines to a maximum of 79 characters.

            There are still many devices around that are limited to 80 character
            lines; plus, limiting windows to 80 characters makes it possible to
            have several windows side-by-side.  The default wrapping on such
            devices looks ugly.  Therefore, please limit all lines to a maximum
            of 79 characters. For flowing long blocks of text (docstrings or
            comments), limiting the length to 72 characters is recommended.
            
            Reports error E501.

            Line too long (97 > 88 characters)
            Open

                    # sample(frac=1) to shuffle rows so we don't accidentally introduce bias in breaking ties

            Limit all lines to a maximum of 79 characters.

            There are still many devices around that are limited to 80 character
            lines; plus, limiting windows to 80 characters makes it possible to
            have several windows side-by-side.  The default wrapping on such
            devices looks ugly.  Therefore, please limit all lines to a maximum
            of 79 characters. For flowing long blocks of text (docstrings or
            comments), limiting the length to 72 characters is recommended.
            
            Reports error E501.

            Multiple imports on one line
            Open

            import verboselogs, logging

            Place imports on separate lines.

            Okay: import os\nimport sys
            E401: import sys, os
            
            Okay: from subprocess import Popen, PIPE
            Okay: from myclas import MyClass
            Okay: from foo.bar.yourclass import YourClass
            Okay: import myclass
            Okay: import foo.bar.yourclass

            Line too long (93 > 88 characters)
            Open

                # sample(frac=1) to shuffle rows so we don't accidentally introduce bias in breaking ties

            Limit all lines to a maximum of 79 characters.

            There are still many devices around that are limited to 80 character
            lines; plus, limiting windows to 80 characters makes it possible to
            have several windows side-by-side.  The default wrapping on such
            devices looks ugly.  Therefore, please limit all lines to a maximum
            of 79 characters. For flowing long blocks of text (docstrings or
            comments), limiting the length to 72 characters is recommended.
            
            Reports error E501.

            Line too long (93 > 88 characters)
            Open

                # sample(frac=1) to shuffle rows so we don't accidentally introduce bias in breaking ties

            Limit all lines to a maximum of 79 characters.

            There are still many devices around that are limited to 80 character
            lines; plus, limiting windows to 80 characters makes it possible to
            have several windows side-by-side.  The default wrapping on such
            devices looks ugly.  Therefore, please limit all lines to a maximum
            of 79 characters. For flowing long blocks of text (docstrings or
            comments), limiting the length to 72 characters is recommended.
            
            Reports error E501.

            Module level import not at top of file
            Open

            from numpy import exp, log, average

            Place imports at the top of the file.

            Always put imports at the top of the file, just after any module
            comments and docstrings, and before module globals and constants.
            
            Okay: import os
            Okay: # this is a comment\nimport os
            Okay: '''this is a module docstring'''\nimport os
            Okay: r'''this is a module docstring'''\nimport os
            Okay:
            try:\n\timport x\nexcept ImportError:\n\tpass\nelse:\n\tpass\nimport y
            Okay:
            try:\n\timport x\nexcept ImportError:\n\tpass\nfinally:\n\tpass\nimport y
            E402: a=1\nimport os
            E402: 'One string'\n"Two string"\nimport os
            E402: a=1\nfrom sys import x
            
            Okay: if x:\n    import os

            Line too long (92 > 88 characters)
            Open

                    # variance will be undefined in first time window since we only have one obseravtion

            Limit all lines to a maximum of 79 characters.

            There are still many devices around that are limited to 80 character
            lines; plus, limiting windows to 80 characters makes it possible to
            have several windows side-by-side.  The default wrapping on such
            devices looks ugly.  Therefore, please limit all lines to a maximum
            of 79 characters. For flowing long blocks of text (docstrings or
            comments), limiting the length to 72 characters is recommended.
            
            Reports error E501.

            Line too long (97 > 88 characters)
            Open

                    # sample(frac=1) to shuffle rows so we don't accidentally introduce bias in breaking ties

            Limit all lines to a maximum of 79 characters.

            There are still many devices around that are limited to 80 character
            lines; plus, limiting windows to 80 characters makes it possible to
            have several windows side-by-side.  The default wrapping on such
            devices looks ugly.  Therefore, please limit all lines to a maximum
            of 79 characters. For flowing long blocks of text (docstrings or
            comments), limiting the length to 72 characters is recommended.
            
            Reports error E501.

            There are no issues that match your filters.

            Category
            Status