jason-neal/eniric

View on GitHub
scripts/phoenix_precision.py

Summary

Maintainability
C
1 day
Test Coverage

File phoenix_precision.py has 514 lines of code (exceeds 400 allowed). Consider refactoring.
Open

#!/usr/bin/env python
"""
phoenix_precision.py
--------------------
Script to generate RV precision of synthetic spectra, see :ref:`Calculating-Precisions`.
Severity: Major
Found in scripts/phoenix_precision.py - About 4 hrs to fix

    Cyclomatic complexity is too high in function do_analysis. (10)
    Open

    def do_analysis(
        star_params,
        vsini: float,
        R: float,
        band: str,
    Severity: Minor
    Found in scripts/phoenix_precision.py by radon

    Cyclomatic Complexity

    Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

    Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

    Construct Effect on CC Reasoning
    if +1 An if statement is a single decision.
    elif +1 The elif statement adds another decision.
    else +0 The else statement does not cause a new decision. The decision is at the if.
    for +1 There is a decision at the start of the loop.
    while +1 There is a decision at the while statement.
    except +1 Each except branch adds a new conditional path of execution.
    finally +0 The finally block is unconditionally executed.
    with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
    assert +1 The assert statement internally roughly equals a conditional statement.
    Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
    Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

    Source: http://radon.readthedocs.org/en/latest/intro.html

    Cyclomatic complexity is too high in function is_already_computed. (6)
    Open

    def is_already_computed(
        computed_values: List[str],
        model,
        pars,
        add_rv: bool = False,
    Severity: Minor
    Found in scripts/phoenix_precision.py by radon

    Cyclomatic Complexity

    Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

    Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

    Construct Effect on CC Reasoning
    if +1 An if statement is a single decision.
    elif +1 The elif statement adds another decision.
    else +0 The else statement does not cause a new decision. The decision is at the if.
    for +1 There is a decision at the start of the loop.
    while +1 There is a decision at the while statement.
    except +1 Each except branch adds a new conditional path of execution.
    finally +0 The finally block is unconditionally executed.
    with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
    assert +1 The assert statement internally roughly equals a conditional statement.
    Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
    Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

    Source: http://radon.readthedocs.org/en/latest/intro.html

    Function do_analysis has 12 arguments (exceeds 6 allowed). Consider refactoring.
    Open

    def do_analysis(
    Severity: Major
    Found in scripts/phoenix_precision.py - About 1 hr to fix

      Avoid deeply nested control flow statements.
      Open

                      if args.add_rv:
                          output_template = (
                              "{0:5d},{1:3.01f},{2:4.01f},{3:3.01f},{4:s},{5:3d}k,"
                              "{6:4.01f},{7:3.01f},{8:3.01f},{9:1d},{10:6d},{11:5.01f},"
                              "{12:5.01f},{13:5.01f}\n"
      Severity: Major
      Found in scripts/phoenix_precision.py - About 45 mins to fix

        Avoid deeply nested control flow statements.
        Open

                        if args.correct:
                            # Apply Artigau 2018 Corrections
                            corr_value = correct_artigau_2018(band)
                            for ii, res in enumerate(result):
                                if (ii > 0) and (result[ii] is not None):  # Not the quality
        Severity: Major
        Found in scripts/phoenix_precision.py - About 45 mins to fix

          Avoid deeply nested control flow statements.
          Open

                          with open(args.output, "a") as f:
                              f.write(strip_whitespace(linetowite) + "\n")  # Make csv only
          
          
          Severity: Major
          Found in scripts/phoenix_precision.py - About 45 mins to fix

            Function convolve_and_resample has 7 arguments (exceeds 6 allowed). Consider refactoring.
            Open

            def convolve_and_resample(
            Severity: Major
            Found in scripts/phoenix_precision.py - About 35 mins to fix

              Whitespace before ':'
              Open

                      snr_estimate = np.sqrt(np.sum(sampled_flux[index_ref - 1 : index_ref + 2]))
              Severity: Minor
              Found in scripts/phoenix_precision.py by pep8

              Avoid extraneous whitespace.

              Avoid extraneous whitespace in these situations:
              - Immediately inside parentheses, brackets or braces.
              - Immediately before a comma, semicolon, or colon.
              
              Okay: spam(ham[1], {eggs: 2})
              E201: spam( ham[1], {eggs: 2})
              E201: spam(ham[ 1], {eggs: 2})
              E201: spam(ham[1], { eggs: 2})
              E202: spam(ham[1], {eggs: 2} )
              E202: spam(ham[1 ], {eggs: 2})
              E202: spam(ham[1], {eggs: 2 })
              
              E203: if x == 4: print x, y; x, y = y , x
              E203: if x == 4: print x, y ; x, y = y, x
              E203: if x == 4 : print x, y; x, y = y, x

              There are no issues that match your filters.

              Category
              Status