Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)

## [Unreleased]
### Added
- waveform_report - New `qualang_tools.waveform_report` subpackage with enhanced waveform visualization: vertical timeline markers, configurable colors and filtering, and Plotly figures via `create_waveform_plot_with_markers` and `extract_timing_markers`.

## [0.21.1] - 2026-01-16
### Fixed
Expand Down
1 change: 1 addition & 0 deletions qualang_tools/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"macros",
"multi_user",
"units",
"waveform_report",
"external_frameworks",
"callable_from_qua",
"wirer",
Expand Down
1 change: 0 additions & 1 deletion qualang_tools/addons/calibration/calibrations.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import numpy as np
from scipy import signal


available_variables = ["frequency", "amplitude", "duration"]
u = unit()

Expand Down
6 changes: 2 additions & 4 deletions qualang_tools/analysis/discriminator.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,7 @@ def two_state_discriminator(Ig, Qg, Ie, Qe, b_print=True, b_plot=True):
fidelity = 100 * (gg + ee) / 2

if b_print:
print(
f"""
print(f"""
Fidelity Matrix:
-----------------
| {gg:.3f} | {ge:.3f} |
Expand All @@ -82,8 +81,7 @@ def two_state_discriminator(Ig, Qg, Ie, Qe, b_print=True, b_plot=True):
IQ plane rotated by: {180 / np.pi * angle:.1f}{chr(176)}
Threshold: {threshold:.3e}
Fidelity: {fidelity:.1f}%
"""
)
""")

if b_plot:
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
Expand Down
1 change: 0 additions & 1 deletion qualang_tools/callable_from_qua/_callable_from_qua.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
from packaging.version import Version
import qm


# TODO: Remove this if block when we drop support for qm < 1.2.2 (and move the import that is currently in the
# else block to the top)
if Version(qm.__version__) < Version("1.2.2"):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from .TwoQubitRB import TwoQubitRb
from .verification import SequenceTracker


phased_xz_command_sequences = {
r"I \otimes I": [720], # Identity on both qubits
r"I \otimes Z": [732], # Z on qubit 1, Identity on qubit 2
Expand Down
18 changes: 6 additions & 12 deletions qualang_tools/config/server/upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,22 +132,19 @@ def enter_empty_config(click):

def init_edits_file():
with open(os.path.join(UPLOAD_DIRECTORY, "config_edits.py"), "w") as fp:
fp.write(
"""
fp.write("""
from qualang_tools.config import *
from qualang_tools.config.server.config_editor import config_editor
from config_initial import configuration

setup = ConfigBuilder()

"""
)
""")


def init_empty_initial_config_file():
with open(os.path.join(UPLOAD_DIRECTORY, "config_initial.py"), "w") as fp:
fp.write(
"""
fp.write("""
configuration = {
"version": 1,
"controllers": {},
Expand All @@ -159,16 +156,13 @@ def init_empty_initial_config_file():
"oscillators": {},
"mixers": {},
}
"""
)
""")


def init_final_config_file():
with open(os.path.join(UPLOAD_DIRECTORY, "config_final.py"), "w") as fp:
fp.write(
"""
fp.write("""
from config_edits import configuration, setup

configuration = setup.build(configuration)
"""
)
""")
1 change: 0 additions & 1 deletion qualang_tools/plot/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from qualang_tools.plot.plot import *
from qualang_tools.plot.fitting import *


__all__ = [
"interrupt_on_close",
"Fit",
Expand Down
1 change: 0 additions & 1 deletion qualang_tools/results/data_handler/data_folder_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import re
from datetime import datetime


__all__ = ["DEFAULT_FOLDER_PATTERN", "extract_data_folder_properties", "get_latest_data_folder", "create_data_folder"]


Expand Down
1 change: 0 additions & 1 deletion qualang_tools/results/data_handler/data_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
get_latest_data_folder,
)


__all__ = ["save_data", "DataHandler"]

NODE_FILENAME = "node.json"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from abc import ABC
from pathlib import Path


__all__ = ["DataProcessor"]


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from .helpers import copy_nested_dict, iterate_nested_dict, update_nested_dict
from .data_processor import DataProcessor


logger = logging.getLogger(__name__)


Expand Down
13 changes: 13 additions & 0 deletions qualang_tools/waveform_report/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from qualang_tools.waveform_report.enhanced_report import (
VerticalMarkerConfig,
TimingMarker,
create_waveform_plot_with_markers,
extract_timing_markers,
)

__all__ = [
"VerticalMarkerConfig",
"TimingMarker",
"create_waveform_plot_with_markers",
"extract_timing_markers",
]
Loading
Loading