Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/origin/master' into issues/para…
Browse files Browse the repository at this point in the history
…meter_constrainer_fix
  • Loading branch information
lumip committed Apr 16, 2018
2 parents 060cdd7 + c7891e7 commit 5dd25fe
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 4 deletions.
2 changes: 1 addition & 1 deletion qctoolkit/pulses/loop_pulse_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ def duration(self) -> ExpressionScalar:
def parameter_names(self) -> Set[str]:
parameter_names = self.body.parameter_names.copy()
parameter_names.remove(self._loop_index)
return parameter_names | self._loop_range.parameter_names
return parameter_names | self._loop_range.parameter_names | self.constrained_parameters

def _body_parameter_generator(self, parameters: Dict[str, Parameter], forward=True) -> Generator:
loop_range_parameters = dict((parameter_name, parameters[parameter_name].get_value())
Expand Down
2 changes: 1 addition & 1 deletion qctoolkit/pulses/repetition_pulse_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def __str__(self) -> str:

@property
def parameter_names(self) -> Set[str]:
return self.body.parameter_names | set(self.repetition_count.variables)
return self.body.parameter_names | set(self.repetition_count.variables) | self.constrained_parameters

@property
def measurement_names(self) -> Set[str]:
Expand Down
2 changes: 1 addition & 1 deletion qctoolkit/pulses/sequence_pulse_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ def __init__(self,

@property
def parameter_names(self) -> Set[str]:
return set.union(*(st.parameter_names for st in self.__subtemplates))
return self.constrained_parameters.union(*(st.parameter_names for st in self.__subtemplates))

@property
def subtemplates(self) -> List[MappingPulseTemplate]:
Expand Down
5 changes: 5 additions & 0 deletions tests/pulses/loop_pulse_template_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,11 @@ def test_parameter_names(self):

self.assertEqual(flt.parameter_names, {'k', 'a', 'b', 'c'})

def test_parameter_names_param_only_in_constraint(self) -> None:
flt = ForLoopPulseTemplate(body=DummyPulseTemplate(parameter_names={'k', 'i'}), loop_index='i',
loop_range=('a', 'b', 'c',), parameter_constraints=['k<=f'])
self.assertEqual(flt.parameter_names, {'k', 'a', 'b', 'c', 'f'})

def test_build_sequence(self):
dt = DummyPulseTemplate(parameter_names={'i'})
flt = ForLoopPulseTemplate(body=dt, loop_index='i', loop_range=('a', 'b', 'c'),
Expand Down
5 changes: 4 additions & 1 deletion tests/pulses/repetition_pulse_template_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@ def test_parameter_not_provided(self):
template.build_sequence(self.sequencer, parameters, conditions, measurement_mapping, channel_mapping,
self.block)


def test_build_sequence_declaration_exceeds_bounds(self) -> None:
parameters = dict(foo=ConstantParameter(9))
conditions = dict(foo=DummyCondition(requires_stop=True))
Expand All @@ -226,6 +225,10 @@ def test_build_sequence_declaration_parameter_value_not_whole(self) -> None:
self.template.build_sequence(self.sequencer, parameters, conditions, {}, {}, self.block)
self.assertFalse(self.sequencer.sequencing_stacks)

def test_parameter_names_param_only_in_constraint(self) -> None:
pt = RepetitionPulseTemplate(DummyPulseTemplate(parameter_names={'a'}), 'n', parameter_constraints=['a<c'])
self.assertEqual(pt.parameter_names, {'a','c', 'n'})


class RepetitionPulseTemplateSerializationTests(unittest.TestCase):

Expand Down
4 changes: 4 additions & 0 deletions tests/pulses/sequence_pulse_template_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@ def test_duration(self):
DummyPulseTemplate(duration='b'))
self.assertEqual(pt.duration, Expression('a+a+b'))

def test_parameter_names_param_only_in_constraint(self) -> None:
pt = SequencePulseTemplate(DummyPulseTemplate(parameter_names={'a'}), DummyPulseTemplate(parameter_names={'b'}), parameter_constraints=['a==b', 'a<c'])
self.assertEqual(pt.parameter_names, {'a','b','c'})

def test_build_waveform(self):
wfs = [DummyWaveform(), DummyWaveform()]
pts = [DummyPulseTemplate(waveform=wf) for wf in wfs]
Expand Down

0 comments on commit 5dd25fe

Please sign in to comment.