TransmonConcentricType2#

class TransmonConcentricType2(design, name: str | None = None, options: Dict | None = None, options_connection_pads: dict | None = None, make: bool = True, **kwargs)[source]#

The base TrasmonConcentric class Inherits BaseQubit class. Metal transmon object consisting of a circle surrounding by a concentric ring. There are two Josephson Junction connecting the circle to the ring; one at the south end and one at the north end. There is a readout resonator.

apidocs/transmon_concentric_type_2.png
BaseQubit Default Options:
  • connection_pads: empty Dict – the dictionary which contains all active connection lines for the qubit.

  • _default_connection_pads: empty Dict – the default values for the (if any) connection lines of the qubit.

Default Options:
  • width: ‘1000um’ – Width of transmon pocket

  • height: ‘1000um’ – Height of transmon pocket

  • rad_o: ‘170um’ – Outer radius

  • rad_i: ‘115um’ – Inner radius

  • gap: ‘35um’ – Radius of gap between two pads

  • jj_w: ‘10um’ – Josephson Junction width

  • res_s: ‘100um’ – Space between top electrode and readout resonator

  • res_ext: ‘100um’ – Extension of readout resonator in x-direction beyond midpoint of transmon

  • fbl_rad: ‘100um’ – Radius of the flux bias line loop

  • fbl_sp: ‘100um’ – Spacing between metal pad and flux bias loop

  • fbl_gap: ‘80um’ – Space between parallel lines of the flux bias loop

  • fbl_ext: ‘300um’ – Run length of flux bias line between circular loop and edge of pocket

  • pocket_w: ‘1500um’ – Transmon pocket width

  • pocket_h: ‘1000um’ – Transmon pocket height

  • cpw_width: ‘10.0um’ – Width of the readout resonator and flux bias line

  • layer: ‘1’ – default layer

Parameters:
  • design (QDesign) – The parent design.

  • name (str) – Name of the component.

  • options (dict) – User options that will override the defaults. Defaults to None.

  • options_connection_pads (dict) – User options for connection pads on qubit

  • make (bool) – True if the make function should be called at the end of the init. Options be used in the make function to create the geometry. Defaults to None.

Attributes

TOOLTIP = 'Qubit'#
class_name#

the full module name with the class name. e.g., qiskit_metal.qlibrary.qubits.TransmonPocket.

Returns:

Class name

Return type:

str

Type:

Return the full name of the class

component_metadata = {'_qgeometry_table_poly': 'True', 'short_name': 'Q'}#

Component metadata

default_options = {'box_E_length': '0.7mm', 'box_E_width': '0.7mm', 'coupler_NE_gap': '0.1mm', 'coupler_NE_width': '0.1mm', 'coupler_NW_gap': '0.1mm', 'coupler_NW_width': '0.1mm', 'coupler_SW_gap': '0.1mm', 'coupler_SW_width': '0.1mm', 'finger_E_length': '0.5mm', 'finger_E_width': '0.1mm', 'finger_NE_length': '0.5mm', 'finger_NE_width': '0.1mm', 'finger_NW_length': '0.5mm', 'finger_NW_width': '0.1mm', 'finger_N_length': '2mm', 'finger_N_width': '0.1mm', 'finger_SW_length': '0.5mm', 'finger_SW_width': '0.1mm', 'gap': '0.5mm', 'jj_w': '0.2mm', 'layer': '1', 'orientation': '0', 'pocket_h': '10mm', 'pocket_w': '10mm', 'pos_x': '0mm', 'pos_y': '0mm', 'rad_inner': '1mm', 'rad_outer': '2mm', 'triangle_base': '2mm', 'triangle_height': '1mm'}#

Default drawing options

design#

Return a reference to the parent design object.

Returns:

design

Return type:

QDesign

id#

The unique id of component within a design.

Returns:

Component id

Return type:

int

logger#

The Qiskit Metal Logger.

Returns:

Logger

Return type:

logging.Logger

name#

Name of the component.

options = {}#

A dictionary of the component-designer-defined options. These options are used in the make function to create the QGeometry and QPins. All options should have string keys and preferrable string values.

pin_names#

The names of the pins.

Returns:

Set of pin names

Return type:

set

qgeometry_types#

Get a list of the names of the element tables.

Returns:

Name of element table or type; e.g., ‘poly’ and ‘path’

Return type:

List[str]

pins#

Dictionary of pins. Populated by component designer in make function using add_pin.

metadata#

Metadata allows a designer to store extra information or analysis results.

status#

Stores the latest status of the component. Values include: Initialization Successful, Build Failed, etc.

Methods

add_dependency(parent: str, child: str)#

Add a dependency between one component and another. Calls parent design.

Parameters:
  • parent (str) – The component on which the child depends

  • child (str) – The child cannot live without the parent.

add_pin(name: str, points: ndarray, width: float, input_as_norm: bool = False, chip: str | None = None, gap: float | None = None)#

Adds a pin from two points which are normal/tangent to the intended plane of the pin. The normal should ‘point’ in the direction of intended connection. Adds the new pin as a subdictionary to parent component’s pins dictionary.

Parameters:
  • name (*) – name of the pin

  • points (*) – [[x1,y1],[x2,y2]] for the normal/tangent line

  • width (*) – the width of the intended connection (eg. qubit bus pad arm)

  • input_as_norm (*) – Indicates if the points are tangent or normal to the pin plane. Defaults to False.. Make True for normal.

  • parent (*) – The id of the parent component.

  • chip (*) – the name of the chip the pin is located on. Defaults to None, which is

  • self.options.chip. (converted to) –

  • gap (*) – the dielectric gap of the pin for the purpose of representing as a port for simulations. Defaults to None which is converted to 0.6 * width.

Dictionary containing pins information:
  • points (numpy.ndarray) - two (x,y) points which represent the edge of the pin for another component to attach to (eg. the edge of a CPW TL)

  • middle (numpy.ndarray) - an (x,y) which represents the middle of the points above, where the pin is represented.

  • normal (numpy.ndarray) - the normal vector of the pin, pointing in direction of intended connection

  • tangent (numpy.ndarray) - 90 degree rotation of normal vector

  • width (float) - the width of the pin

  • chip (str) - the chip the pin is on

  • parent_name - the id of the parent component

  • net_id - net_id of the pin if connected to another pin. Defaults to 0, indicates not connected))

* = pin
. = outline of component

—> = the list being passed in as ‘points’ [[x1,y1],[x2,y2]]

normal vector

..........
         .
--------->*
         .
..........

tangent vector

..........^
         .|
         .*
         .|
..........|
add_qgeometry(kind: str, geometry: dict, subtract: bool = False, helper: bool = False, layer: int | str | None = None, chip: str | None = None, **kwargs)#

Add QGeometry.

Takes any additional options in options.

Parameters:
  • kind (str) – The kind of QGeometry, such as ‘path’, ‘poly’, etc. All geometry in the dictionary should have the same kind, such as Polygon or LineString.

  • geometry (Dict[BaseGeometry]) – Key-value pairs of name of the geometry you want to add and the value should be a shapely geometry object, such as a Polygon or a LineString.

  • subtract (bool) – Subtract from the layer. Defaults to False.

  • helper (bool) – Is this a helper object. If true, subtract must be false Defaults to False.

  • layer (int, str) – The layer to which the set of QGeometry will belong Defaults to None, which is converted to self.options.chip.

  • chip (str) – Chip name. Defaults to None, which is converted to

  • self.options.chip.

  • kwargs (dict) – Parameters dictionary

Assumptions:
  • Assumes all geometry in the geometry argument are homogeneous in kind; i.e., all lines or polys etc.

connect_components_already_in_design(pin_name_self: str, comp2_id: int, pin2_name: str) int#
WARNING: Do NOT use this method during generation of component instance.

This method is expecting self to be added to design._components dict. More importantly, the unique id of self component needs to be in design._components dict.

Parameters:
  • pin_name_self (str) – Name of pin within the component.

  • comp2_id (int) – Component within design, but not self.

  • pin2_name (str) – The pin of comp2_id that pin_name_self will connect to.

Returns:

A unique net_id for the connection.

Return type:

int

delete()#

Delete the QComponent.

Removes QGeometry, QPins, etc. from the design.

get_pin(name: str) Dict#

Interface for components to get pin data.

Parameters:

name (str) – Name of the desired pin.

Returns:

Returns the data of the pin, see make_pin() for what those values are.

Return type:

dict

classmethod get_template_options(design: QDesign, component_template: Dict = None, logger_: Logger = None, template_key: str = None) Dict#

Creates template options for the Metal Component class required for the class to function, based on the design template; i.e., be created, made, and rendered. Provides the blank option structure required.

The options can be extended by plugins, such as renderers.

Parameters:
  • design (QDesign) – Design class. Should be the class, not the instance.

  • component_template (Dict) – Template options to overwrite the class ones (default: None)

  • logger (logging.Logger) – A logger for errors. Defaults to None.

  • template_key (str) – The template key identifier. If None, then uses cls._get_unique_class_name(). Defaults to None.

Returns:

dictionary of default options based on design template.

Return type:

Dict

make()[source]#

Convert self.options into QGeometry.

parse_options(options: Dict | None = None) Dict#

Parse the options, converting string into interpreted values. Parses units, variables, strings, lists, and dictionaries. Explained by example below.

Parameters:

options (dict) – If left None, then self.options is used. Defaults to None.

Returns:

Parsed value

Return type:

dict

Calls self.design.parse_options.

See self.parse_value for more information.

parse_value(value: Any | List | Dict | Iterable) Any | List | Dict | Iterable#

Parse a string, mappable (dict, Dict), iterable (list, tuple) to account for units conversion, some basic arithmetic, and design variables. This is the main parsing function of Qiskit Metal.

Parameters:
  • value (str) – String to parse or

  • variable_dict (dict) – dict pointer of variables

Returns:

Parse value

Return type:

str, float, list, tuple, or ast eval

Handled Inputs:
Strings:
Strings of numbers, numbers with units; e.g., ‘1’, ‘1nm’, ‘1 um’

Converts to int or float. Some basic arithmetic is possible, see below.

Strings of variables ‘variable1’.

Variable interpretation will use string method isidentifier ‘variable1’.isidentifier()`

Dictionaries:

Returns ordered Dict with same key-value mappings, where the values have been subjected to parse_value.

Itterables(list, tuple, …):

Returns same kind and calls itself parse_value on each element.

Numbers:

Returns the number as is. Int to int, etc.

Arithemetic:

Some basic arithmetic can be handled as well, such as ‘-2 * 1e5 nm’ will yield float(-0.2) when the default units are set to mm.

Default units:

User units can be set in the design. The design will set config.DEFAULT.units

Examples

See the docstring for this module.

>> ?qiskit_metal.toolbox_metal.parsing

populate_to_track_table_usage() None#

Use the element_handler to get a list of all the table names used in QGeometry.

The dict qgeometry_able_usage should get updated by add_qgeometry(). This dict is used to get a summary tables used for this component.

qgeometry_bounds() Tuple#

Fetched the component bound dict_value.

Returns:

containing (minx, miny, maxx, maxy) bound values for the bounds of the component as a whole.

Return type:

tuple

Uses:

design.qgeometry.get_component_bounds

qgeometry_dict(element_type: str) Dict[str, BaseGeometry]#

Returns a dict of element qgeometry (shapely geometry) of the component as a python dict, where the dict keys are the names of the qgeometry and the corresponding values are the shapely geometries.

Parameters:

element_type (str) – Name of element table or type; e.g., ‘poly’ and ‘path’

Returns:

Geometry diction or None if an error in the name of the element type (ie. table)

Return type:

List[BaseGeometry]

qgeometry_list(element_type: str = 'all') List[BaseGeometry]#

Returns a list of element qgeometry (shapely geometry) of the component as a python list of shapely geometries.

Parameters:

element_type (str) – Name of element table or type; e.g., ‘poly’ and ‘path’. Can also specify all

Returns:

Geometry list or None if an error in the name of the element type (ie. table)

Return type:

List[BaseGeometry]

qgeometry_plot(ax: matplotlib.axes.Axes = None, plot_kw: dict = None) List#

Draw all the qgeometry of the component (polys and path etc.)

Parameters:
  • ax (matplotlib.axes.Axes) – Matplotlib axis to draw on. Defaults to None. When None, it gets the current axis.

  • plot_kw (dict) – Parameters dictionary.

Returns:

The list of qgeometry draw

Return type:

List

Example use:

Suppose you had a component called q1:

fig, ax = draw.mpl.figure_spawn() q1.qgeometry_plot(ax)

qgeometry_table(element_type: str) DataFrame#

Returns the entire element table for the component.

Parameters:

element_type (str) – Name of element table or type; e.g., ‘poly’ and ‘path’

Returns:

Element table for the component or None if an error in the name of the element type (ie. table)

Return type:

pd.DataFrame

rebuild()#

Builds the QComponent.

This is the main action function of a QComponent, call it qc. It converts the qc.options into QGeometry with all of the required options, such as the geometry points, layer number, materials, etc. needed to render.

The build clears the existing QGeometry and QPins and then calls the qc.make function, which is written by the component developer to implement the logic (using the metal. draw module) to convert the qc.options into the QGeometry.

Build status: The function also sets the build status of the component. It sets to failed when the component is created, and then it sets to good when it is done with no errors. The user can also set other statuses, which can appear if the code fails to reach the final line of the build, where the build status is set to good.

Raises:

Exception – Component build failure

to_script(thin: bool = False, is_part_of_chip: bool = False) Tuple#
Parameters:
  • thin – If true then any key in the QComponent’s options whose value is the same value as the default will not be included in the body

  • is_part_of_chip – If true, body will not include header code

Returns: Code that if copy-pasted into a .py file would generate an instance of this class with the same properties as the instance calling this function