コード例 #1
0
def gen_baseline(
        data: types.ChartAxis, formatter: Dict[str, Any],
        device: device_info.DrawerBackendInfo
) -> List[drawing_objects.LineData]:
    """Generate the baseline associated with the chart.

    Stylesheets:
        - The `baseline` style is applied.

    Args:
        data: Chart axis data to draw.
        formatter: Dictionary of stylesheet settings.
        device: Backend configuration.

    Returns:
        List of `LineData` drawing objects.
    """
    style = {
        'alpha': formatter['alpha.baseline'],
        'zorder': formatter['layer.baseline'],
        'linewidth': formatter['line_width.baseline'],
        'linestyle': formatter['line_style.baseline'],
        'color': formatter['color.baseline']
    }

    baseline = drawing_objects.LineData(
        data_type=types.DrawingLine.BASELINE,
        channels=data.channels,
        xvals=[types.AbstractCoordinate.LEFT, types.AbstractCoordinate.RIGHT],
        yvals=[0, 0],
        ignore_scaling=True,
        styles=style)

    return [baseline]
コード例 #2
0
ファイル: generators.py プロジェクト: rdputter/qiskit-terra
def gen_barrier(misc_data: types.NonPulseTuple) \
        -> List[Union[drawing_objects.LineData, drawing_objects.TextData]]:
    r"""Generate a barrier from provided relative barrier instruction..

    The `barrier` style is applied.

    Args:
        misc_data: Snapshot instruction data to draw.

    Returns:
        List of `TextData` drawing objects.
    """

    if not isinstance(misc_data.inst, pulse.instructions.RelativeBarrier):
        return []

    style = {'alpha': PULSE_STYLE['formatter.alpha.barrier'],
             'zorder': PULSE_STYLE['formatter.layer.barrier'],
             'linewidth': PULSE_STYLE['formatter.line_width.barrier'],
             'linestyle': PULSE_STYLE['formatter.line_style.barrier'],
             'color': PULSE_STYLE['formatter.color.barrier']}

    lines = []
    for chan in misc_data.inst.channels:
        line = drawing_objects.LineData(data_type='Barrier',
                                        channel=chan,
                                        x=misc_data.t0,
                                        y=None,
                                        styles=style)
        lines.append(line)

    return lines
コード例 #3
0
def gen_barrier(
        data: types.BarrierInstruction, formatter: Dict[str, Any],
        device: device_info.DrawerBackendInfo
) -> List[drawing_objects.LineData]:
    """Generate the barrier from provided relative barrier instruction.

    Stylesheets:
        - The `barrier` style is applied.

    Args:
        data: Barrier instruction data to draw.
        formatter: Dictionary of stylesheet settings.
        device: Backend configuration.
    Returns:
        List of `LineData` drawing objects.
    """
    style = {
        'alpha': formatter['alpha.barrier'],
        'zorder': formatter['layer.barrier'],
        'linewidth': formatter['line_width.barrier'],
        'linestyle': formatter['line_style.barrier'],
        'color': formatter['color.barrier']
    }

    line = drawing_objects.LineData(
        data_type=types.DrawingLine.BARRIER,
        channels=data.channels,
        xvals=[data.t0, data.t0],
        yvals=[types.AbstractCoordinate.BOTTOM, types.AbstractCoordinate.TOP],
        styles=style)

    return [line]
コード例 #4
0
ファイル: generators.py プロジェクト: rdputter/qiskit-terra
def gen_baseline(channel_data: types.ChannelTuple) \
        -> List[drawing_objects.LineData]:
    r"""Generate baseline associated with the channel.

    The `baseline` style is applied.

    Args:
        channel_data: Channel data to draw.

    Returns:
        List of `LineData` drawing objects.
    """
    style = {'alpha': PULSE_STYLE['formatter.alpha.baseline'],
             'zorder': PULSE_STYLE['formatter.layer.baseline'],
             'linewidth': PULSE_STYLE['formatter.line_width.baseline'],
             'linestyle': PULSE_STYLE['formatter.line_style.baseline'],
             'color': PULSE_STYLE['formatter.color.baseline']}

    baseline = drawing_objects.LineData(data_type='BaseLine',
                                        channel=channel_data.channel,
                                        x=None,
                                        y=0,
                                        styles=style)

    return [baseline]
コード例 #5
0
    def test_line_data(self):
        """Test for LineData."""
        data1 = drawing_objects.LineData(data_type='baseline',
                                         channel=pulse.DriveChannel(0),
                                         x=np.array([0, 1, 2]),
                                         y=np.array([0, 0, 0]),
                                         meta={'test_val': 0},
                                         offset=0,
                                         visible=True,
                                         styles={'color': 'red'})

        data2 = drawing_objects.LineData(data_type='baseline',
                                         channel=pulse.DriveChannel(0),
                                         x=np.array([0, 1, 2]),
                                         y=np.array([0, 0, 0]),
                                         meta={'test_val': 1},
                                         offset=1,
                                         visible=False,
                                         styles={'color': 'blue'})

        self.assertEqual(data1, data2)
コード例 #6
0
    def test_line_data_equivalent_with_abstract_coordinate(self):
        """Test for LineData with abstract coordinate."""
        xs = [types.AbstractCoordinate.LEFT, types.AbstractCoordinate.RIGHT]
        ys = [types.AbstractCoordinate.TOP, types.AbstractCoordinate.BOTTOM]

        data1 = drawing_objects.LineData(data_type='test',
                                         xvals=xs,
                                         yvals=ys,
                                         channels=self.ch_d0,
                                         meta=self.meta1,
                                         ignore_scaling=True,
                                         styles=self.style1)

        data2 = drawing_objects.LineData(data_type='test',
                                         xvals=xs,
                                         yvals=ys,
                                         channels=self.ch_d1,
                                         meta=self.meta2,
                                         ignore_scaling=True,
                                         styles=self.style2)

        self.assertEqual(data1, data2)
コード例 #7
0
    def test_line_data_equivalent(self):
        """Test for LineData."""
        xs = [0, 1, 2]
        ys = [3, 4, 5]

        data1 = drawing_objects.LineData(data_type='test',
                                         xvals=xs,
                                         yvals=ys,
                                         channels=self.ch_d0,
                                         meta=self.meta1,
                                         ignore_scaling=True,
                                         styles=self.style1)

        data2 = drawing_objects.LineData(data_type='test',
                                         xvals=xs,
                                         yvals=ys,
                                         channels=self.ch_d1,
                                         meta=self.meta2,
                                         ignore_scaling=True,
                                         styles=self.style2)

        self.assertEqual(data1, data2)
コード例 #8
0
    def setUp(self) -> None:
        super().setUp()

        self.style = stylesheet.QiskitPulseStyle()
        self.device = device_info.OpenPulseBackendInfo(
            name='test',
            dt=1,
            channel_frequency_map={
                pulse.DriveChannel(0): 5.0,
                pulse.MeasureChannel(0): 7.0,
                pulse.ControlChannel(0): 5.0,
            },
            qubit_channel_map={
                0: [
                    pulse.DriveChannel(0),
                    pulse.MeasureChannel(0),
                    pulse.AcquireChannel(0),
                    pulse.ControlChannel(0)
                ]
            })

        # objects
        self.short_pulse = drawing_objects.LineData(
            data_type=types.DrawingWaveform.REAL,
            xvals=[0, 0, 1, 4, 5, 5],
            yvals=[0, 0.5, 0.5, 0.5, 0.5, 0],
            channels=[pulse.DriveChannel(0)])
        self.long_pulse = drawing_objects.LineData(
            data_type=types.DrawingWaveform.REAL,
            xvals=[8, 8, 9, 19, 20, 20],
            yvals=[0, 0.3, 0.3, 0.3, 0.3, 0],
            channels=[pulse.DriveChannel(1)])
        self.abstract_hline = drawing_objects.LineData(
            data_type=types.DrawingLine.BASELINE,
            xvals=[
                types.AbstractCoordinate.LEFT, types.AbstractCoordinate.RIGHT
            ],
            yvals=[0, 0],
            channels=[pulse.DriveChannel(0)])
コード例 #9
0
ファイル: waveform.py プロジェクト: tijuhasz/qiskit-terra
def gen_filled_waveform_stepwise(data: types.PulseInstruction,
                                 formatter: Dict[str, Any],
                                 device: device_info.DrawerBackendInfo
                                 ) -> List[drawing_objects.LineData]:
    """Generate filled area objects of the real and the imaginary part of waveform envelope.

    The curve of envelope is not interpolated nor smoothed and presented
    as stepwise function at each data point.

    Stylesheets:
        - The `fill_waveform` style is applied.

    Args:
        data: Waveform instruction data to draw.
        formatter: Dictionary of stylesheet settings.
        device: Backend configuration.

    Returns:
        List of `LineData` drawing objects.
    """
    fill_objs = []

    # generate waveform data
    parsed = _parse_waveform(data)
    channel = data.inst.channel
    qubit = device.get_qubit_index(channel)
    if qubit is None:
        qubit = 'N/A'
    resolution = formatter['general.vertical_resolution']

    # phase modulation
    if formatter['control.apply_phase_modulation']:
        ydata = np.asarray(parsed.yvals, dtype=np.complex) * np.exp(1j * data.frame.phase)
    else:
        ydata = np.asarray(parsed.yvals, dtype=np.complex)

    # stepwise interpolation
    xdata = np.concatenate((parsed.xvals, [parsed.xvals[-1] + 1]))
    ydata = np.repeat(ydata, 2)
    re_y = np.real(ydata)
    im_y = np.imag(ydata)
    time = np.concatenate(([xdata[0]], np.repeat(xdata[1:-1], 2), [xdata[-1]]))

    # setup style options
    style = {'alpha': formatter['alpha.fill_waveform'],
             'zorder': formatter['layer.fill_waveform'],
             'linewidth': formatter['line_width.fill_waveform'],
             'linestyle': formatter['line_style.fill_waveform']}

    color_code = types.ComplexColors(*formatter[_fill_waveform_color(channel)])

    # create real part
    if np.any(re_y):
        # data compression
        re_valid_inds = _find_consecutive_index(re_y, resolution)
        # stylesheet
        re_style = {'color': color_code.real}
        re_style.update(style)
        # metadata
        re_meta = {'data': 'real', 'qubit': qubit}
        re_meta.update(parsed.meta)
        # active xy data
        re_xvals = time[re_valid_inds]
        re_yvals = re_y[re_valid_inds]

        # object
        real = drawing_objects.LineData(data_type=types.DrawingWaveform.REAL,
                                        channels=channel,
                                        xvals=re_xvals,
                                        yvals=re_yvals,
                                        fill=True,
                                        meta=re_meta,
                                        styles=re_style)
        fill_objs.append(real)

    # create imaginary part
    if np.any(im_y):
        # data compression
        im_valid_inds = _find_consecutive_index(im_y, resolution)
        # stylesheet
        im_style = {'color': color_code.imaginary}
        im_style.update(style)
        # metadata
        im_meta = {'data': 'imag', 'qubit': qubit}
        im_meta.update(parsed.meta)
        # active xy data
        im_xvals = time[im_valid_inds]
        im_yvals = im_y[im_valid_inds]

        # object
        imag = drawing_objects.LineData(data_type=types.DrawingWaveform.IMAG,
                                        channels=channel,
                                        xvals=im_xvals,
                                        yvals=im_yvals,
                                        fill=True,
                                        meta=im_meta,
                                        styles=im_style)
        fill_objs.append(imag)

    return fill_objs