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
92 changes: 12 additions & 80 deletions assets/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -21,60 +21,16 @@ body {
-webkit-font-smoothing: antialiased;
}

/* Glassmorphic Panel */
.glass-panel {
background: var(--bg-elevated);
backdrop-filter: blur(24px);
-webkit-backdrop-filter: blur(24px);
border: 1px solid var(--bg-border);
border-radius: 24px;
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.3);
}

/* Gradient Text */
.gradient-text {
background: linear-gradient(135deg, var(--cyan), var(--blue), var(--violet), var(--purple));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
display: inline-block;
}
/* No replacement, removing the unused CSS class */

.primary-gradient-bg {
background: linear-gradient(135deg, var(--blue), var(--violet), var(--purple));
}
/* No replacement, removing the unused CSS class */

.primary-gradient-bg:hover {
background: linear-gradient(135deg, var(--cyan), var(--blue), var(--violet));
}
/* Removed unused CSS class '.primary-gradient-bg' */

/* Base button styling enhancements */
.glass-button {
background-color: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.1);
color: var(--white);
border-radius: 16px;
padding: 12px 18px;
font-size: 15px;
font-weight: 600;
cursor: pointer;
width: 100%;
outline: none;
transition: all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
/* Removed unused CSS class '.glass-button' */

.glass-button:hover {
background-color: rgba(255, 255, 255, 0.1);
border-color: rgba(255, 255, 255, 0.2);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
}

.button-clicked {
transform: scale(0.95) !important;
opacity: 0.8;
transition: all 0.1s ease-out;
}
/* Removed unused CSS class '.button-clicked' */

input:focus {
outline: none;
Expand Down Expand Up @@ -107,37 +63,13 @@ input:focus {
}

/* Customizing Dash rc-slider for Dark Theme */
.rc-slider-rail {
background-color: rgba(255, 255, 255, 0.2) !important;
}
.rc-slider-track {
background-color: var(--purple) !important;
}
.rc-slider-mark-text {
color: var(--text-muted) !important;
font-size: 13px !important;
margin-top: 8px !important;
}
.rc-slider-mark-text-active {
color: var(--white) !important;
font-weight: 600 !important;
}
.rc-slider-dot {
background-color: var(--bg) !important;
border-color: rgba(255, 255, 255, 0.3) !important;
}
.rc-slider-dot-active {
border-color: var(--purple) !important;
}
.rc-slider-handle {
border: solid 2px var(--white) !important;
background-color: var(--purple) !important;
box-shadow: 0 0 10px rgba(139, 47, 240, 0.6) !important;
}
.rc-slider-handle:hover, .rc-slider-handle:active, .rc-slider-handle:focus {
border-color: var(--white) !important;
box-shadow: 0 0 15px rgba(139, 47, 240, 0.8) !important;
}
/* Removed unused CSS class '.rc-slider-rail' */
/* Removed unused CSS class '.rc-slider-track' */
/* Removed unused CSS class '.rc-slider-mark-text' */
/* Removed unused CSS class '.rc-slider-mark-text-active' */
/* Removed unused CSS class '.rc-slider-dot' */
/* Removed unused CSS class '.rc-slider-dot-active' */
/* Removed unused CSS class '.rc-slider-handle' */
.rc-slider-tooltip-inner {
background-color: var(--bg-elevated) !important;
color: var(--white) !important;
Expand Down
50 changes: 1 addition & 49 deletions bloch_sphere_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,55 +74,7 @@ def state_to_bloch(state_vector: np.ndarray) -> tuple[float, float, float]:
return x, y, z


def apply_gate_to_state(theta_deg: float, phi_deg: float, gate_name: str) -> tuple[float, float]:
"""
Update system quantum state via unitary gate evolution.

Transforms spherical parametrizations to an operator-agnostic matrix sequence, applies the
requested primitive via Qiskit's matrix synthesis engine, and recovers the subsequent angles.

Args:
theta_deg (float): Starting polar angle θ in degrees.
phi_deg (float): Starting azimuthal angle φ in degrees.
gate_name (str): The common identifier for the targeted unitary (e.g., 'X', 'H').

Returns:
tuple[float, float]: Synthesized (new_theta_deg, new_phi_deg) after applying the gate.
"""
theta_rad = np.deg2rad(theta_deg)
phi_rad = np.deg2rad(phi_deg)

current_state_vector = np.array([
np.cos(theta_rad / 2),
np.exp(1j * phi_rad) * np.sin(theta_rad / 2)
])

gate_circuit = QuantumCircuit(1)
gate_map = {
'X': gate_circuit.x,
'Y': gate_circuit.y,
'Z': gate_circuit.z,
'H': gate_circuit.h,
'S': gate_circuit.s,
'T': gate_circuit.t,
}

if gate_name in gate_map:
gate_map[gate_name](0)
gate_operator = Operator(gate_circuit)
# Evolve state: |ψ'⟩ = U|ψ⟩
new_state_vector = gate_operator.data @ current_state_vector
else:
new_state_vector = current_state_vector

x, y, z = state_to_bloch(new_state_vector)

# Bound Z mathematically into valid domain [-1, 1] prior to arccos to avoid floating point instability errors.
new_theta_rad = np.arccos(np.clip(z, -1, 1))
new_phi_rad = np.arctan2(y, x)

# Normalize bounded phase to [0, 360) ensuring rotation modularity.
return np.rad2deg(new_theta_rad), np.rad2deg(new_phi_rad % (2 * np.pi))
pass


def create_figure_for_state(theta_deg: float, phi_deg: float) -> go.Figure:
Expand Down