Skip to main content

cqlib_core/visualization/circuit/
mod.rs

1// This code is part of Cqlib.
2//
3// (C) Copyright China Telecom Quantum Group 2026
4//
5// This code is licensed under the Apache License, Version 2.0. You may
6// obtain a copy of this license in the LICENSE.txt file in the root directory
7// of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8//
9// Any modifications or derivative works of this code must retain this
10// copyright notice, and modified files need to carry a notice indicating
11// that they have been altered from the originals.
12
13//! Circuit visualization pipeline.
14//!
15//! This module provides a complete visualization pipeline for
16//! [`Circuit`](crate::circuit::Circuit): from backend-agnostic IR construction
17//! to concrete text/figure rendering.
18//!
19//! # Core Components
20//!
21//! - **Layout builder**: [`build_visual_circuit`] converts circuit operations into layered
22//!   [`VisualCircuit`] IR.
23//! - **Text drawer**: [`circuit_to_text`] renders Unicode box-drawing circuit diagrams.
24//! - **Figure drawer**: [`circuit_to_figure`], [`draw_figure_from_visual`], and
25//!   [`render_figure_to_file`] generate SVG/PNG outputs.
26//!
27//! # Examples
28//!
29//! ```rust
30//! use cqlib_core::circuit::{Circuit, Qubit};
31//! use cqlib_core::visualization::{TextDrawerOptions, circuit_to_text};
32//!
33//! let mut circuit = Circuit::new(2);
34//! circuit.h(Qubit::new(0)).unwrap();
35//! circuit.cx(Qubit::new(0), Qubit::new(1)).unwrap();
36//!
37//! let text = circuit_to_text(&circuit, &TextDrawerOptions::default()).unwrap();
38//! assert!(text.contains("H"));
39//! ```
40
41pub mod figure;
42pub mod ir;
43pub mod layout;
44pub mod params;
45pub mod style;
46pub mod text;
47
48pub use figure::{
49    FigureDrawStyle, FigureDrawerOptions, circuit_to_figure, draw_figure_from_visual,
50    render_figure_to_file,
51};
52pub use ir::{
53    VisualChildren, VisualCircuit, VisualCondition, VisualControlFlowKind, VisualOpStyle,
54    VisualOperation,
55};
56pub use layout::{VisualBuildOptions, build_visual_circuit};
57pub use params::{ParameterDisplayMode, ParameterFormatOptions, ParameterFormatter};
58pub use style::GateStyle;
59pub use text::{TextDrawerOptions, circuit_to_text, draw_text_from_visual};
60
61#[cfg(test)]
62#[path = "figure_test.rs"]
63mod figure_test;
64
65#[cfg(test)]
66#[path = "params_test.rs"]
67mod params_test;
68
69#[cfg(test)]
70#[path = "layout_test.rs"]
71mod layout_test;
72
73#[cfg(test)]
74#[path = "ir_test.rs"]
75mod ir_test;
76
77#[cfg(test)]
78#[path = "style_test.rs"]
79mod style_test;
80
81#[cfg(test)]
82#[path = "text_test.rs"]
83mod text_test;