Skip to content

API documentation of schemes

The module that contains common logic for schemes, validation etc. There is no obvious need, why this code should be touch in a new back-end.

BackendConfigSchemaIn

Bases: BaseModel

The schema send in to detail the configuration of the backend. This is uploaded to the storage provider.

Source code in src/sqooler/schemes.py
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
class BackendConfigSchemaIn(BaseModel, validate_assignment=True):
    """
    The schema send in to detail the configuration of the backend.
    This is uploaded to the storage provider.
    """

    description: str = Field(description="A description for the backend")
    version: str = Field(description="The backend version in the form X.Y.Z")
    display_name: Optional[DisplayNameStr]
    cold_atom_type: ColdAtomStr
    gates: list = Field(
        description="The list of GateConfig objects for the basis gates of the backend"
    )
    max_experiments: int = Field(
        description="The maximum number of experiments per job"
    )
    max_shots: int = Field(
        description="The maximum number of shots allowed on the backend"
    )
    simulator: bool = Field(description="True if the backend is a simulator")
    supported_instructions: list[str] = Field(
        description="Instructions supported by the backend."
    )
    num_wires: int = Field(description="The number of qubits / wires for the backend")
    wire_order: WireOrderStr
    num_species: int = Field(description="The number of species in the system.")

    pending_jobs: Optional[int] = Field(
        default=None, description="The number of pending jobs on the backend"
    )
    status_msg: Optional[str] = Field(
        default=None, description="The status message for the backend"
    )
    last_queue_check: Optional[datetime] = Field(
        default=None, description="The last time the queue was checked."
    )
    sign: bool = Field(
        default=False,
        description="True if the results are signed by the backend provider.",
    )
    kid: Optional[str] = Field(
        default=None,
        description="The identifier for the public and private key of the backend.",
    )

BackendConfigSchemaOut

Bases: BaseModel

The schema send out to detail the configuration of the backend. We follow the conventions of the qiskit configuration dictionary here.

Will becomes compatible with qiskit.providers.models.BackendConfiguration

Source code in src/sqooler/schemes.py
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
class BackendConfigSchemaOut(BaseModel, validate_assignment=True):
    """
    The schema send out to detail the configuration of the backend. We follow the
    conventions of the qiskit configuration dictionary here.

    Will becomes compatible with qiskit.providers.models.BackendConfiguration
    """

    description: str = Field(description="A description for the backend")
    display_name: DisplayNameStr
    conditional: bool = Field(
        default=False, description="True if the backend supports conditional operations"
    )
    coupling_map: str = Field(
        default="linear", description="The coupling map for the device"
    )
    dynamic_reprate_enabled: bool = Field(
        default=False,
        description="whether delay between programs can be set dynamically ",
    )
    local: bool = Field(
        default=False, description="True if the backend is local or False if remote"
    )
    memory: bool = Field(default=False, description="True if backend supports memory")
    open_pulse: bool = Field(default=False, description="True if backend is OpenPulse")
    backend_version: str = Field(description="The backend version in the form X.Y.Z")
    n_qubits: int = Field(description="The number of qubits / wires for the backend")
    backend_name: BackendNameStr
    basis_gates: list[str] = Field(
        description="The list of strings for the basis gates of the backends"
    )
    max_experiments: int = Field(
        description="The maximum number of experiments per job"
    )
    max_shots: int = Field(
        description="The maximum number of shots allowed on the backend"
    )
    simulator: bool = Field(description="True if the backend is a simulator")
    gates: list = Field(
        description="The list of GateConfig objects for the basis gates of the backend"
    )
    supported_instructions: list[str] = Field(
        description="Instructions supported by the backend."
    )
    cold_atom_type: ColdAtomStr
    wire_order: WireOrderStr
    num_species: int = Field(
        description="The number of species in the system. Non standard qiskit field."
    )
    url: Optional[str] = Field(default=None, description="The url of the backend")

BackendStatusSchemaOut

Bases: BaseModel

The schema for the status of a backend. Follows the conventions of the qiskit.providers.models.BackendStatus.

Source code in src/sqooler/schemes.py
124
125
126
127
128
129
130
131
132
133
134
135
136
class BackendStatusSchemaOut(BaseModel):
    """
    The schema for the status of a backend. Follows the conventions of the
    `qiskit.providers.models.BackendStatus`.
    """

    backend_name: BackendNameStr
    backend_version: str = Field(
        description="The version of the backend. Of the form X.Y.Z"
    )
    operational: bool = Field(description="True if the backend is operational")
    pending_jobs: int = Field(description="The number of pending jobs on the backend")
    status_msg: str = Field(description="The status message for the backend")

DataDict

Bases: BaseModel

A class that defines the structure of the data within the ExperimentDict.

Source code in src/sqooler/schemes.py
272
273
274
275
276
277
278
279
280
class DataDict(BaseModel):
    """
    A class that defines the structure of the data within the ExperimentDict.
    """

    memory: list[str] = Field(description="A list of results safed as string.")
    instructions: Optional[list[GateDict]] = Field(
        default=None, description="The indices of the wires that were measured."
    )

DropboxLoginInformation

Bases: BaseModel

The login information for the dropbox

Source code in src/sqooler/schemes.py
 94
 95
 96
 97
 98
 99
100
101
class DropboxLoginInformation(BaseModel):
    """
    The login information for the dropbox
    """

    app_key: str
    app_secret: str
    refresh_token: str

ExperimentDict

Bases: BaseModel

A class that defines the structure of the experiments. Strongly inspired by the qiskit class qiskit.result.ExperimentData.

Source code in src/sqooler/schemes.py
283
284
285
286
287
288
289
290
291
292
class ExperimentDict(BaseModel):
    """
    A class that defines the structure of the experiments. Strongly inspired by the
    qiskit class qiskit.result.ExperimentData.
    """

    header: dict = Field(description="Contains centralized information about the job.")
    shots: int = Field(description="number of shots in the experiment.")
    success: bool = Field(description="True if experiment ran successfully.")
    data: DataDict = Field(description="dictionary of results for the experiment.")

ExperimentalInputDict

Bases: BaseModel

The input for the experimental job.

Source code in src/sqooler/schemes.py
257
258
259
260
261
262
263
264
265
266
267
268
269
class ExperimentalInputDict(BaseModel):
    """
    The input for the experimental job.
    """

    instructions: list[GateDict] = Field(description="The instructions for the job")
    num_wires: int = Field(description="The number of wires for the job")
    shots: int = Field(description="The number of shots for the job")
    wire_order: WireOrderStr
    seed: Optional[int] = Field(
        default=None,
        description="The seed for the random number generator if one might be used",
    )

GateDict

Bases: BaseModel

The most basic class for a gate as it is communicated in the json API.

Source code in src/sqooler/schemes.py
246
247
248
249
250
251
252
253
254
class GateDict(BaseModel):
    """
    The most basic class for a gate as it is communicated in
    the json API.
    """

    name: str = Field(description="The name of the gate")
    wires: list[int] = Field(description="The wires on which the gate acts")
    params: list[float] = Field(description="The parameters of the gate")

GateInstruction

Bases: BaseModel

The basic class for all the gate intructions of a backend. Any gate has to have the following attributes.

Source code in src/sqooler/schemes.py
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
class GateInstruction(BaseModel):
    """
    The basic class for all the gate intructions of a backend.
    Any gate has to have the following attributes.
    """

    name: str
    parameters: str
    wires: list[int] = Field(description="The wires on which the gate acts")
    description: str
    coupling_map: list
    qasm_def: str = "{}"
    is_gate: bool = True

    @classmethod
    def config_dict(cls) -> dict:
        """
        Give back the properties of the instruction such as needed for the server.
        """
        return {
            "coupling_map": cls.model_fields["coupling_map"].default,
            "description": cls.model_fields["description"].default,
            "name": cls.model_fields["name"].default,
            "parameters": [cls.model_fields["parameters"].default],
            "qasm_def": cls.model_fields["qasm_def"].default,
        }

    @field_validator("wires")
    @classmethod
    def valid_coupling(cls, wires: list) -> list:
        """
        Validate that the wires are within the coupling map.

        Args:
            wires: the wires of the gate

        Returns:
            the wires if they are valid

        Raises:
            ValueError: if the wires are not within the coupling map
        """
        if not wires in cls.model_fields["coupling_map"].default:
            raise ValueError("The combination of wires is not in the coupling map.")
        return wires

config_dict() classmethod

Give back the properties of the instruction such as needed for the server.

Source code in src/sqooler/schemes.py
333
334
335
336
337
338
339
340
341
342
343
344
@classmethod
def config_dict(cls) -> dict:
    """
    Give back the properties of the instruction such as needed for the server.
    """
    return {
        "coupling_map": cls.model_fields["coupling_map"].default,
        "description": cls.model_fields["description"].default,
        "name": cls.model_fields["name"].default,
        "parameters": [cls.model_fields["parameters"].default],
        "qasm_def": cls.model_fields["qasm_def"].default,
    }

valid_coupling(wires) classmethod

Validate that the wires are within the coupling map.

Parameters:

Name Type Description Default
wires list

the wires of the gate

required

Returns:

Type Description
list

the wires if they are valid

Raises:

Type Description
ValueError

if the wires are not within the coupling map

Source code in src/sqooler/schemes.py
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
@field_validator("wires")
@classmethod
def valid_coupling(cls, wires: list) -> list:
    """
    Validate that the wires are within the coupling map.

    Args:
        wires: the wires of the gate

    Returns:
        the wires if they are valid

    Raises:
        ValueError: if the wires are not within the coupling map
    """
    if not wires in cls.model_fields["coupling_map"].default:
        raise ValueError("The combination of wires is not in the coupling map.")
    return wires

LabscriptParams

Bases: BaseModel

A class that defines the parameters for the labscript folders.

Source code in src/sqooler/schemes.py
366
367
368
369
370
371
372
373
374
class LabscriptParams(BaseModel):
    """
    A class that defines the parameters for the labscript folders.
    """

    exp_script_folder: str = Field(
        description="The relative path to the experimental scripts."
    )
    t_wait: float = Field(description="The time to wait between checks.")

LocalLoginInformation

Bases: BaseModel

The login information for a local storage provider.

Source code in src/sqooler/schemes.py
114
115
116
117
118
119
120
121
class LocalLoginInformation(BaseModel):
    """
    The login information for a local storage provider.
    """

    base_path: str = Field(
        description="The base path of the storage provider on your local file system."
    )

MongodbLoginInformation

Bases: BaseModel

The login information for MongoDB

Source code in src/sqooler/schemes.py
104
105
106
107
108
109
110
111
class MongodbLoginInformation(BaseModel):
    """
    The login information for MongoDB
    """

    mongodb_username: str
    mongodb_password: str
    mongodb_database_url: str

NextJobSchema

Bases: BaseModel

The schema for the next job to be executed.

Source code in src/sqooler/schemes.py
139
140
141
142
143
144
145
class NextJobSchema(BaseModel):
    """
    The schema for the next job to be executed.
    """

    job_id: str = Field(description="unique execution id from the backend.")
    job_json_path: str = Field(description="The path to the job json file.")

ResultDict

Bases: BaseModel

A class that defines the structure of results. It is closely related to the qiskit class qiskit.result.Result.

Source code in src/sqooler/schemes.py
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
class ResultDict(BaseModel):
    """
    A class that defines the structure of results. It is closely related to the
    qiskit class qiskit.result.Result.
    """

    backend_name: BackendNameStr | None = None
    display_name: DisplayNameStr
    backend_version: str = Field(description="backend version, in the form X.Y.Z.")
    job_id: str = Field(description="unique execution id from the backend.")
    qobj_id: Optional[str] = Field(default=None, description="user-generated Qobj id.")
    success: bool = Field(
        description="True if complete input qobj executed correctly.", default=True
    )
    status: StatusStr
    header: dict = Field(
        description="Contains centralized information about the job.", default={}
    )
    results: list[ExperimentDict] = Field(
        description="corresponding results for array of experiments of the input qobj",
        default=[],
    )

StatusMsgDict

Bases: BaseModel

A class that defines the structure of the status messages.

Source code in src/sqooler/schemes.py
83
84
85
86
87
88
89
90
91
class StatusMsgDict(BaseModel):
    """
    A class that defines the structure of the status messages.
    """

    job_id: str = Field(description="unique execution id from the backend.")
    status: StatusStr
    detail: str = Field(description="detailed status of job execution.")
    error_message: str = Field(description="error message of job execution.")

get_init_results()

A support function that returns the result dict for an initializing job.

Returns:

Type Description
ResultDict

the result dict

Source code in src/sqooler/schemes.py
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
def get_init_results() -> ResultDict:
    """
    A support function that returns the result dict for an initializing job.

    Returns:
        the result dict
    """
    return ResultDict(
        display_name="",
        backend_version="",
        job_id="",
        qobj_id=None,
        success=True,
        status="INITIALIZING",
    )

get_init_status()

A support function that returns the status message for an initializing job.

Returns:

Type Description
StatusMsgDict

the status message

Source code in src/sqooler/schemes.py
377
378
379
380
381
382
383
384
385
386
387
388
389
def get_init_status() -> StatusMsgDict:
    """
    A support function that returns the status message for an initializing job.

    Returns:
        the status message
    """
    return StatusMsgDict(
        job_id="None",
        status="INITIALIZING",
        detail="Got your json.",
        error_message="None",
    )

Comments