-
Notifications
You must be signed in to change notification settings - Fork 240
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
Change supertype calculation when combining scatters #5101
Conversation
src/toil/wdl/wdltoil.py
Outdated
optional = optional or typ.optional | ||
else: | ||
# We have conflicting types | ||
raise RuntimeError(f"Cannot generate a supertype from conflicting types: {types}") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This can be simplified... but I'm not sure that the logic still holds up? optional
seems like it will be set to the previous typ
in types
, if True, and will remain True the entire loop thereafter.
Here's the simplification:
supertype = None
optional = False
for typ in types:
if isinstance(typ, WDL.Type.Any):
# ignore an Any type, as we represent a bottom type as Any. See https://miniwdl.readthedocs.io/en/latest/WDL.html#WDL.Type.Any
# and https://github.com/openwdl/wdl/blob/e43e042104b728df1f1ad6e6145945d2b32331a6/SPEC.md?plain=1#L1484
optional = optional or typ.optional
else:
if supertype is None:
supertype = typ
optional = optional or typ.optional
else:
# We have conflicting types
raise RuntimeError(f"Cannot generate a supertype from conflicting types: {types}")
==>
supertype = None
optional = False
for typ in types:
if isinstance(typ, WDL.Type.Any):
# ignore an Any type, as we represent a bottom type as Any. See https://miniwdl.readthedocs.io/en/latest/WDL.html#WDL.Type.Any
# and https://github.com/openwdl/wdl/blob/e43e042104b728df1f1ad6e6145945d2b32331a6/SPEC.md?plain=1#L1484
optional = optional or typ.optional
elif supertype is None:
supertype = typ
optional = optional or typ.optional
else:
# We have conflicting types
raise RuntimeError(f"Cannot generate a supertype from conflicting types: {types}")
==>
supertype = None
optional = False
for typ in types:
optional = optional or typ.optional
if supertype is None and not isinstance(typ, WDL.Type.Any):
supertype = typ
elif not isinstance(typ, WDL.Type.Any):
# We have conflicting types
raise RuntimeError(f"Cannot generate a supertype from conflicting types: {types}")
Is this still what it needs to do?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this should be functionally similar, I can adjust the comment to give some clarification about the Any
type as that is pretty important to keep
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will actually break when the types
list has multiple types in them, so I'll keep it as is
optional = optional or typ.optional | ||
elif supertype is None: | ||
supertype = typ | ||
optional = optional or typ.optional |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think @DailyDreaming is right that we could factor out this line from the conditional.
#5055
Changelog Entry
To be copied to the draft changelog by merger:
Reviewer Checklist
issues/XXXX-fix-the-thing
in the Toil repo, or from an external repo.camelCase
that want to be insnake_case
.docs/running/{cliOptions,cwl,wdl}.rst
Merger Checklist