1414#include <stddef.h>
1515
1616typedef enum device_mode {
17- RYDBERG ,
17+ ISING ,
1818 XY
1919} device_mode ;
2020
21- typedef struct qpos {
22- double x ;
23- double y ;
24- double z ;
25- } qpos ;
26-
2721typedef struct channel {
2822 int id ;
2923 int type ;
30- int target ;
24+ ptrdiff_t target ;
3125 double time ;
3226 void * params ;
3327} channel ;
3428
3529#define __CQ_ANALOG_MAX_NUM_SAMPLES__ 4096
3630typedef struct pulse {
37- double freq [__CQ_ANALOG_MAX_NUM_SAMPLES__ ];
38- double phase [__CQ_ANALOG_MAX_NUM_SAMPLES__ ];
39- double detuning [__CQ_ANALOG_MAX_NUM_SAMPLES__ ];
31+ double * freq ;
32+ double * phase ;
33+ double * detuning ;
34+
4035 double duration ;
4136 ptrdiff_t num_samples ;
4237} pulse ;
4338
44- cq_status cq_print_analog_device (void );
45- cq_status cq_print_avail_channels (void );
46- cq_status cq_print_channel (channel * ch );
47- cq_status cq_print_qpos (int qreg_id );
48- // TODO: cq_status cq_retarget_channel(channel *ch, int new_target);
49- ptrdiff_t cq_duration_to_samples (double duration );
50- double cq_samples_to_duration (ptrdiff_t num_samples );
51-
52- cq_status cq_enable_analog_mode (device_mode mode );
53- cq_status cq_enable_analog_qreg (int qreg_id , int num_qubits );
54- cq_status cq_disable_analog_qreg (int qreg_id );
55- cq_status cq_get_global_channel (channel * ch , int type , int qreg_id );
56- cq_status cq_get_local_channel (channel * ch , int type , int target , int qreg_id );
39+ cq_status cq_enable_analog_mode (int mode );
40+ cq_status cq_enable_analog_qreg (qubit * qr );
41+ cq_status cq_disable_analog_qreg (qubit * qr );
5742
58- cq_status cq_update_qreg_pos (const qpos * new_positions , int num_qubits , int qreg_id );
43+ cq_status cq_get_channel (channel * ch , int type , qubit * qr , qubit * target );
44+ cq_status cq_retarget_channel (channel * ch , qubit * new_target );
45+ cq_status cq_set_qubit_pos (const double * new_positions , qubit * qr );
5946
6047cq_status cq_init_pulse (pulse * pulse , double duration );
48+ cq_status cq_free_pulse (pulse * pulse );
49+
6150cq_status cq_play (channel * ch , pulse * pulse );
6251cq_status cq_capture (channel * ch , pulse * pulse , int * result , int shots );
6352cq_status cq_delay (channel * ch , double dt );
6453cq_status cq_barrier (channel * * ch , int num_channels );
6554
55+ // =============================== Waveforms ==================================
6656cq_status cq_gaussian_wf (double * samples , double duration , double amp , double sigma );
67-
6857// TODO: consider removing as it has limited applicability
6958cq_status cq_gaussian_sqr_wf (double * samples , double duration , double amp ,
7059 double sigma , double width );
71-
7260cq_status cq_interpolated_wf (double * samples , double duration ,
7361 double * points , int num_points );
7462cq_status cq_sech_wf (double * samples , double duration , double amp , double sigma );
@@ -84,4 +72,22 @@ cq_status cq_composite_wf(double *samples, double **waveforms,
8472 ptrdiff_t * num_samples , int num_waveforms ,
8573 ptrdiff_t * total_num_samples );
8674
75+ // =============================== Helpers ====================================
76+ cq_status cq_print_analog_device (void );
77+ cq_status cq_print_avail_channels (void );
78+ cq_status cq_print_channel (channel * ch );
79+ cq_status cq_print_qpos (qubit * qr );
80+
81+ ptrdiff_t cq_duration_to_samples (double duration );
82+ double cq_samples_to_duration (ptrdiff_t num_samples );
83+
84+ cq_status cq_set_device_sample_rate (double rate );
85+ cq_status cq_set_device_min_pulse_duration (double duration );
86+ cq_status cq_set_device_max_pulse_duration (double duration );
87+ cq_status cq_set_device_interaction_coeff (double coeff );
88+ cq_status cq_set_device_min_qubit_dist (double distance );
89+ cq_status cq_set_device_max_num_shots (int shots );
90+ cq_status cq_set_device_coupling_func (double (* coupler )(double * q0 , double * q1 ));
91+
8792#endif
93+
0 commit comments