Skip to content

Commit 268435c

Browse files
authored
Allow None as parameter value in morphpy (#297)
* skip none inputs * Add tests
1 parent 73035a3 commit 268435c

File tree

3 files changed

+73
-15
lines changed

3 files changed

+73
-15
lines changed

news/allow_none.rst

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
**Added:**
2+
3+
* <news item>
4+
5+
**Changed:**
6+
7+
* <news item>
8+
9+
**Deprecated:**
10+
11+
* <news item>
12+
13+
**Removed:**
14+
15+
* <news item>
16+
17+
**Fixed:**
18+
19+
* In morphpy, when a parameter is set to None, it will not be used as an option.
20+
21+
**Security:**
22+
23+
* <news item>

src/diffpy/morph/morphpy.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,21 @@ def get_args(parser, params, kwargs):
1212
inputs.append(f"--{key}")
1313
inputs.append(f"{value}")
1414
for key, value in kwargs.items():
15-
key = key.replace("_", "-")
16-
if key == "exclude":
17-
for param in value:
15+
if value is not None:
16+
key = key.replace("_", "-")
17+
if key == "exclude":
18+
for param in value:
19+
if param:
20+
inputs.append(f"--{key}")
21+
inputs.append(f"{param}")
22+
else:
1823
inputs.append(f"--{key}")
19-
inputs.append(f"{param}")
20-
else:
21-
inputs.append(f"--{key}")
22-
inputs.append(f"{value}")
24+
inputs.append(f"{value}")
2325
(opts, pargs) = parser.parse_args(inputs)
2426
return opts, pargs
2527

2628

2729
def __get_morph_opts__(parser, scale, stretch, smear, plot, **kwargs):
28-
# Check for Python-specific options
29-
python_morphs = ["funcy", "funcx", "funcxy"]
30-
pymorphs = {}
31-
for pmorph in python_morphs:
32-
if pmorph in kwargs:
33-
pmorph_value = kwargs.pop(pmorph)
34-
pymorphs.update({pmorph: pmorph_value})
35-
3630
# Special handling of parameters with dashes
3731
kwargs_copy = kwargs.copy()
3832
kwargs = {}
@@ -42,6 +36,15 @@ def __get_morph_opts__(parser, scale, stretch, smear, plot, **kwargs):
4236
new_key = key.replace("_", "-")
4337
kwargs.update({new_key: kwargs_copy[key]})
4438

39+
# Check for Python-specific options
40+
python_morphs = ["funcy", "funcx", "funcxy"]
41+
pymorphs = {}
42+
for pmorph in python_morphs:
43+
if pmorph in kwargs:
44+
pmorph_value = kwargs.pop(pmorph)
45+
if pmorph_value is not None:
46+
pymorphs.update({pmorph: pmorph_value})
47+
4548
# Special handling of store_true and store_false parameters
4649
opts_storing_values = [
4750
"verbose",

tests/test_morphpy.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,38 @@ def test_morph_opts(self, setup_morph):
116116
else:
117117
assert getattr(opts, opt)
118118

119+
# Check that morphs can be set as None
120+
kwargs = {
121+
"hshift": None,
122+
"vshift": None,
123+
"squeeze": None,
124+
"funcx": None,
125+
"funcy": None,
126+
"funcxy": None,
127+
"verbose": None,
128+
"addpearson": None,
129+
"apply": None,
130+
"exclude": None,
131+
"reverse": None,
132+
"get_diff": None,
133+
"multiple_morphs": None,
134+
"multiple_targets": None,
135+
}
136+
kwargs_copy = kwargs.copy()
137+
opts, pymorphs = __get_morph_opts__(
138+
self.parser,
139+
scale=1,
140+
stretch=0,
141+
smear=0,
142+
plot=False,
143+
**kwargs_copy,
144+
)
145+
for opt in kwargs:
146+
try:
147+
assert not getattr(opts, opt)
148+
except AttributeError:
149+
pass
150+
119151
def test_morph(self, setup_morph):
120152
morph_results = {}
121153
morph_file = self.testfiles[0]

0 commit comments

Comments
 (0)