Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests: Parameters: add for specify_none #2416

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 8 additions & 10 deletions psyneulink/core/components/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -2167,13 +2167,10 @@ def _initialize_parameters(self, context=None, **param_defaults):
alias_names = {p.name for p in self.class_parameters if isinstance(p, ParameterAlias)}

self.parameters = self.Parameters(owner=self, parent=self.class_parameters)
self.defaults = Defaults(owner=self, parent=self.class_defaults)

# assign defaults based on pass in params and class defaults
defaults = {
k: v for (k, v) in self.class_defaults.values(show_all=True).items()
if k not in alias_names
}

defaults = {}
if param_defaults is not None:
for name, value in copy.copy(param_defaults).items():
if name in alias_names:
Expand Down Expand Up @@ -2214,13 +2211,14 @@ def _initialize_parameters(self, context=None, **param_defaults):
for k in defaults:
if defaults[k] is None:
continue
defaults[k] = copy_parameter_value(
defaults[k],
shared_types=shared_types
setattr(
self.defaults, k,
copy_parameter_value(
defaults[k],
shared_types=shared_types
)
)

self.defaults = Defaults(owner=self, **defaults)

for p in filter(lambda x: not isinstance(x, (ParameterAlias, SharedParameter)), self.parameters._in_dependency_order):
# copy spec so it is not overwritten later
# TODO: check if this is necessary
Expand Down
18 changes: 11 additions & 7 deletions psyneulink/core/globals/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -978,7 +978,7 @@ def __init__(
reference=False,
dependencies=None,
initializer=None,
port=None,
port=None, # if modulated, set to the ParameterPort
mdf_name=None,
specify_none=False,
_owner=None,
Expand All @@ -988,7 +988,6 @@ def __init__(
# attributes will be taken from
_inherited_source=None,
_user_specified=False,
# if modulated, set to the ParameterPort
**kwargs
):
if isinstance(aliases, str):
Expand Down Expand Up @@ -1246,7 +1245,7 @@ def _restore_inherited_attrs(self, exclusions=None):
attr not in exclusions
and getattr(self, attr) is getattr(self._parent, attr)
):
setattr(self, attr, self._inherited_attrs_cache[attr])
super().__setattr__(attr, self._inherited_attrs_cache[attr])

@property
def _parent(self):
Expand Down Expand Up @@ -1726,9 +1725,10 @@ def _initialize_from_context(self, context=None, base_context=Context(execution_
# KDM 7/30/18: the below is weird like this in order to use this like a property, but also include it
# in the interface for user simplicity: that is, inheritable (by this Parameter's children or from its parent),
# visible in a Parameter's repr, and easily settable by the user
def _set_default_value(self, value):
value = self._parse(value)
self._validate(value)
def _set_default_value(self, value, directly=False):
if not directly:
value = self._parse(value)
self._validate(value)

super().__setattr__('default_value', value)

Expand Down Expand Up @@ -2174,8 +2174,11 @@ def __setattr__(self, attr, value):
super().__setattr__(attr, value)
else:
if isinstance(value, Parameter):
is_new_parameter = False

if value._owner is None:
value._owner = self
is_new_parameter = True
elif value._owner is not self and self._initializing:
# case where no Parameters class defined on subclass
# but default value overridden in __init__
Expand All @@ -2186,7 +2189,8 @@ def __setattr__(self, attr, value):
value.name = attr

if self._initializing and not value._inherited:
value.default_value = self._reconcile_value_with_init_default(attr, value.default_value)
reconciled_value = self._reconcile_value_with_init_default(attr, value.default_value)
value._set_default_value(reconciled_value, directly=not is_new_parameter)

super().__setattr__(attr, value)

Expand Down
Loading