fix: schedule time reference to support ALAP
Breaking Changes
- Drops support of multiple timing constraints. This could be recovered by a check on the compatibility of multiple timing constraints. It has been chosen to keep that out of this MR to preserve a smaller scope.
Explanation of changes
Major refactor of _determine_absolute_timing_schedule to:
- Pick the time root of a schedule as the first schedulable that is referenced by other schedulables, but does not reference any schedulables itself.
- Calculate the relative timings of all schedulables in the schedule relative to the time root
- Normalize the timings using
_normalize_absolute_timing
Motivation of changes
For more information see #491 (closed)
_determine_absolute_timing_schedule loops through schedulables in the same order that they were added. Additionally, in ALAP scheduling, the ref_schedulable is the schedulable next in time of the schedulable being added. This leads to _get_start_time trying to access the abs_time key of a schedulable of which the abs_time has not been determined yet.
Merge checklist
See also merge request guidelines
-
Merge request has been reviewed (in-depth by a knowledgeable contributor), and is approved by a project maintainer. -
New code is covered by unit tests (or N/A). -
New code is documented and docstrings use numpydoc format (or N/A). -
New functionality: considered making private instead of extending public API (or N/A). -
Public API changed: added @deprecatedand entry in deprecated code suggestions (or N/A). -
Newly added/adjusted documentation and docstrings render properly (or N/A). -
Pipeline fix or dependency update: post in #software-for-developerschannel to mergemainback in or update local packages (or N/A). -
Tested on hardware (or N/A). -
CHANGELOG.mdfor breaking changes andAUTHORS.mdhave been updated (or N/A). -
Update Hardware backends documentation if backend interface change or N/A -
Check whether performance is significantly affected by looking at the Performance metrics results. -
Windows tests in CI pipeline pass (manually triggered by maintainers before merging). - Maintainers do not hit Auto-merge, we need to actively check as manual tests do not block pipeline
For reference, the issues workflow is described in the contribution guidelines.
Edited by Tim Vroomans