Skip to content

BUG: setting a declared eccentricity back to None leaves the old distribution in place #1171

Description

@thc1006

What happens

add_cp_eccentricity and add_thrust_eccentricity accept None to mean an input is not randomized, and their docstrings document x and y as optional. Passing None after a distribution was configured does not remove the earlier one, so the next reseed brings it back.

stochastic = StochasticRocket(rocket=calisto, radius=0.0127 / 2)

stochastic.add_cp_eccentricity(x=0.001)
stochastic.add_cp_eccentricity(x=None)

stochastic._set_stochastic(7)

On develop at 7822ab1d:

after the None call, still declared:      True
after the reseed, the attribute:          (0, 0.001, Generator.normal)
in the generated dict:                    True

The caller asked for the uncertainty to go away and it is still being drawn.

Why

StochasticModel._declare_stochastic_input returns early on None rather than removing the entry:

if input_value is None:
    return
self.__stochastic_dict[input_name] = input_value

dict_generator walks __stochastic_dict, so the stale declaration reaches the draw. The early return is right for the case it was written for, which is add_cp_eccentricity(x=0.001) with no y, where None means "was never given" rather than "take it away". The two meanings are not distinguished.

Fix

Removing the entry instead of returning early covers the second meaning, and leaves the first alone as long as removal only happens for a name that is being configured. #1169 adds _reconfigure_stochastic_input, which already owns the replacement half of this, so the removal fits there in about a line.

Worth a test for each meaning: add_cp_eccentricity(x=0.001) with no y must not declare y, and add_cp_eccentricity(x=None) after x=0.001 must remove x.

Where it came from

The behaviour arrived with #1167, which declared these inputs so a fixed seed could reproduce them. Reconfiguration was not part of that change. Raised separately rather than folded into #1169, which fixes the other half of the same lifecycle and is under review.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions