diff --git a/.buildinfo b/.buildinfo index 12a1b8f4..923b3d95 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: b99c1c5497efac3d8e908a0f99aa112c +config: 53bb5b5c3f20fc6ffde6186814f20d96 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 00000000..7f5d25e0 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,248 @@ + + + + + + + Overview: module code — SQuADDS 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + +
+
+
+ + +
+ +
+
+
+ +
+ + + + +
+
+ + +
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_modules/squadds/core/utils.html b/_modules/squadds/core/utils.html new file mode 100644 index 00000000..a08584d9 --- /dev/null +++ b/_modules/squadds/core/utils.html @@ -0,0 +1,332 @@ + + + + + + + squadds.core.utils — SQuADDS 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + +
+
+
+ + +
+ +
+
+
+
+ +

Source code for squadds.core.utils

+import urllib.parse
+import webbrowser
+import getpass
+import os
+from huggingface_hub import HfApi, HfFolder
+from squadds.core.globals import ENV_FILE_PATH
+
+
+[docs] +def set_huggingface_api_key(): + """ + Sets the Hugging Face API key by appending it to the .env file. + If the API key already exists in the .env file, it does not add it again. + If the Hugging Face token is not found, it raises a ValueError. + """ + # Check if API key already exists + if os.path.exists(ENV_FILE_PATH): + with open(ENV_FILE_PATH, 'r') as file: + existing_keys = file.read() + if 'HUGGINGFACE_API_KEY=' in existing_keys: + print('API key already exists in .env file.') + return + + # Ask for the new API key + api_key = getpass.getpass("Enter your Hugging Face API key: ") + # Append the new API key to the .env file + with open(ENV_FILE_PATH, 'a') as file: + file.write(f'\nHUGGINGFACE_API_KEY={api_key}\n') + print('API key added to .env file.') + + api = HfApi() + token = HfFolder.get_token() + if token is None: + raise ValueError("Hugging Face token not found. Please log in using `huggingface-cli login`.")
+ + + + + + + +
+[docs] +def send_email_via_client(dataset_name, institute, pi_name, date, dataset_link): + """ + Sends an email notification to recipients with the details of the created dataset. + + Args: + dataset_name (str): The name of the dataset. + institute (str): The name of the institute where the dataset was created. + pi_name (str): The name of the principal investigator who created the dataset. + date (str): The date when the dataset was created. + dataset_link (str): The link to the created dataset. + + Returns: + None + """ + recipients = ["shanto@usc.edu", "elevenso@usc.edu"] + subject = f"SQuADDS: Dataset Created - {dataset_name} ({date})" + body = f"{dataset_name} has been created by {pi_name} at {institute} on {date}.\nHere is the link - {dataset_link}" + + mailto_link = create_mailto_link(recipients, subject, body) + webbrowser.open(mailto_link)
+ +
+ +
+
+ + + + +
+
+ + +
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_modules/squadds/database/checker.html b/_modules/squadds/database/checker.html new file mode 100644 index 00000000..3f7dad51 --- /dev/null +++ b/_modules/squadds/database/checker.html @@ -0,0 +1,260 @@ + + + + + + + squadds.database.checker — SQuADDS 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + +
+
+
+ + +
+ +
+
+
+
+ +

Source code for squadds.database.checker

+
+[docs] +class Checker: + + def __init__(self): + self.upload_ready = False + +
+[docs] + def check(self, file): + # Implement checking logic here + # Return True if file passes checks, False otherwise + self.upload_ready = True + return True
+
+ +
+ +
+
+ + + + +
+
+ + +
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_modules/squadds/database/config.html b/_modules/squadds/database/config.html new file mode 100644 index 00000000..f1bfcecc --- /dev/null +++ b/_modules/squadds/database/config.html @@ -0,0 +1,261 @@ + + + + + + + squadds.database.config — SQuADDS 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + +
+
+
+ + +
+ +
+
+
+
+ +

Source code for squadds.database.config

+"""
+Helper methods to create config files
+"""
+    
+from datasets import DatasetBuilder, BuilderConfig, SplitGenerator, DownloadManager
+import datasets
+
+
+[docs] +class SQuADDS_DB_Config(BuilderConfig): + """BuilderConfig for SQuADDS_DB.""" + def __init__(self, circuit_element=None, element_name=None, result_type=None, **kwargs): + super(SQuADDS_DB_Config, self).__init__(**kwargs) + self.circuit_element = circuit_element + self.element_name = element_name + self.result_type = result_type
+ +
+ +
+
+ + + + +
+
+ + +
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_modules/squadds/database/contributor.html b/_modules/squadds/database/contributor.html new file mode 100644 index 00000000..9de989a9 --- /dev/null +++ b/_modules/squadds/database/contributor.html @@ -0,0 +1,439 @@ + + + + + + + squadds.database.contributor — SQuADDS 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + +
+
+
+ + +
+ +
+
+
+
+ +

Source code for squadds.database.contributor

+import os
+import hashlib
+import json
+
+from datetime import datetime
+from dotenv import load_dotenv
+from squadds.core.globals import *
+from squadds.core.utils import *
+from squadds.database.checker import Checker
+from huggingface_hub import HfApi, HfFolder, login
+
+load_dotenv(ENV_FILE_PATH)
+
+
+[docs] +class Contribute: + """ + Class representing a contributor for dataset creation and upload. + + Attributes: + dataset_files (list): List of dataset file paths. + institute (str): Institution name. + pi_name (str): PI (Principal Investigator) name. + api (HfApi): Hugging Face API object. + token (str): Hugging Face API token. + dataset_name (str): Name of the dataset. + dataset_files (list): List of dataset file paths. + dataset_link (str): Link to the dataset. + + Methods: + check_for_api_key: Checks for the presence of Hugging Face API key. + create_dataset_name: Creates a unique name for the dataset. + get_dataset_link: Retrieves the link to the dataset. + upload_dataset: Uploads the dataset to Hugging Face. + create_dataset_repository: Creates a repository for the dataset on Hugging Face. + upload_dataset_no_validation: Uploads the dataset to Hugging Face without validation. + """ + + def __init__(self, data_files): + self.dataset_files = data_files + self.institute = os.getenv('INSTITUTION') + self.pi_name = os.getenv('PI_NAME') + self.api, self.token = self.check_for_api_key() + self.dataset_name = None + self.dataset_files = None + self.dataset_link = None + +
+[docs] + def check_for_api_key(self): + """ + Checks for the presence of Hugging Face API key. + + Returns: + api (HfApi): Hugging Face API object. + token (str): Hugging Face API token. + + Raises: + ValueError: If Hugging Face token is not found. + """ + api = HfApi() + token = HfFolder.get_token() + if token is None: + raise ValueError("Hugging Face token not found. Please log in using `huggingface-cli login`.") + else: + token = os.getenv('HUGGINGFACE_API_KEY') + login(token) + return api, token
+ + +
+[docs] + def create_dataset_name(self, components, data_type, data_nature, data_source, date=None): + """ + Creates a unique name for the dataset. + + Args: + components (list): List of components. + data_type (str): Type of the data. + data_nature (str): Nature of the data. + data_source (str): Source of the data. + date (str, optional): Date of the dataset creation. Defaults to None. + + Returns: + str: Unique name for the dataset. + """ + components_joined = "-".join(components) + date = date or datetime.now().strftime('%Y%m%d') + base_string = f"{components_joined}_{data_type}_{data_nature}_{data_source}_{self.institute}_{self.pi_name}_{date}" + uid_hash = hashlib.sha256(base_string.encode()).hexdigest()[:8] # Short hash + self.dataset_name = f"{base_string}_{uid_hash}" + return f"{base_string}_{uid_hash}"
+ + + + + +
+[docs] + def upload_dataset(self): + """ + Uploads the dataset to Hugging Face. + + Raises: + NotImplementedError: If dataset upload is not implemented. + """ + checker = Checker() + for file in self.dataset_files: + checker.check(file) + if not checker.upload_ready: + raise NotImplementedError() + else: + # Upload the dataset to Hugging Face + raise NotImplementedError() + + # generate the link to the dataset + + # Send notification email after successful upload + send_email_via_client("Example Dataset", "Institute Name", "PI Name", "2023-01-01") + return
+ + +
+[docs] + def create_dataset_repository(self, components, data_type, data_nature, data_source): + """ + Creates a repository for the dataset on HuggingFace (if it doesn't exist). + + Args: + components (list): List of components. + data_type (str): Type of the data. + data_nature (str): Nature of the data. + data_source (str): Source of the data. + """ + date = datetime.now().strftime('%Y%m%d') + dataset_name = self.create_dataset_name(components, data_type, data_nature, data_source, date) + + # Create a repository for the dataset on HuggingFace (if it doesn't exist) + try: + self.api.create_repo(repo_id=dataset_name, token=self.token, repo_type="dataset") + print(f"Dataset repository {dataset_name} created.") + except Exception as e: + print(f"Error creating dataset repository: {e}")
+ + + +
+[docs] + def upload_dataset_no_validation(self, components, data_type, data_nature, data_source, files, date=None): + """ + Uploads the dataset to HuggingFace without validation. + + Args: + components (list): List of components. + data_type (str): Type of the data. + data_nature (str): Nature of the data. + data_source (str): Source of the data. + files (list): List of file paths. + date (str, optional): Date of the dataset creation. Defaults to None. + """ + dataset_name = self.create_dataset_name(components, data_type, data_nature, data_source, date) + + # Create a repository for the dataset on HuggingFace (if it doesn't exist) + try: + self.api.create_repo(repo_id=dataset_name, token=self.token, repo_type="dataset") + print(f"Dataset repository {dataset_name} created.") + except Exception as e: + print(f"Error creating dataset repository: {e}") + + # Upload files to the dataset + for file_path in files: + try: + self.api.upload_file( + path_or_fileobj=file_path, + path_in_repo=os.path.basename(file_path), + repo_id=dataset_name, + repo_type="dataset", + token=self.token + ) + print(f"Uploaded {file_path} to {dataset_name}.") + except Exception as e: + print(f"Error uploading file {file_path}: {e}")
+
+ + + +
+ +
+
+ + + + +
+
+ + +
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_modules/squadds/database/reader.html b/_modules/squadds/database/reader.html new file mode 100644 index 00000000..dad57096 --- /dev/null +++ b/_modules/squadds/database/reader.html @@ -0,0 +1,251 @@ + + + + + + + squadds.database.reader — SQuADDS 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + +
+
+
+ + +
+ +
+
+
+
+ +

Source code for squadds.database.reader

+
+[docs] +class Reader: + + def __init__(self, db): + self.db = db
+ +
+ +
+
+ + + + +
+
+ + +
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_modules/squadds/database/utils.html b/_modules/squadds/database/utils.html new file mode 100644 index 00000000..1e531497 --- /dev/null +++ b/_modules/squadds/database/utils.html @@ -0,0 +1,378 @@ + + + + + + + squadds.database.utils — SQuADDS 0.1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + +
+
+
+ + +
+ +
+
+
+
+ +

Source code for squadds.database.utils

+"""Utilities for the database package."""
+from pathlib import Path
+from squadds.core.globals import *
+
+import json
+import hashlib
+import shutil
+import glob
+import os
+
+
+[docs] +def copy_files_to_new_location(data_path, new_path): + """ + Copy files from the given data path to the new location. + + Args: + data_path (str): The path to the directory containing the files to be copied. + new_path (str): The path to the directory where the files will be copied to. + + Returns: + None + + Raises: + None + """ + new_names = [] + for file in glob.glob(os.path.join(data_path)): + new_name = generate_file_name(file) + # copy file to new location + location = os.path.dirname(new_path) + new_file = os.path.join(location, new_name) + new_names.append(new_file) + shutil.copy(file, new_file) + # alert if there are duplicates and show the files + if len(new_names) != len(set(new_names)): + print('There are duplicates!') + print(new_names)
+ + +
+[docs] +def generate_file_name(data_file): + """ + Generate a unique file name based on the given data file. + + Args: + data_file (str): The path to the data file. + + Returns: + str: The generated file name. + + """ + with open(data_file, 'r') as file: + data = json.load(file) + grp = data['contributor']['group'] + inst = data['contributor']['institution'] + dc = data["contributor"]['date_created'] + # create hash based on data + hash_fn = hashlib.sha256(json.dumps(data).encode()).hexdigest()[:16] + return f"{grp}_{inst}_{hash_fn}.json"
+ + +
+[docs] +def create_contributor_info(): + """ + Prompt the user for information and update the .env file. + + This function prompts the user to enter information such as institution name, group name, + PI name, and user name. It then validates the input and updates the corresponding fields + in the .env file. If the fields already exist in the .env file, the function prompts the + user to confirm whether to overwrite the existing values. + + Raises: + ValueError: If any of the input fields are empty. + """ + # Check if .env file exists + if not Path(ENV_FILE_PATH).exists(): + ENV_FILE_PATH.touch() + + # Read all lines from .env file + with open(ENV_FILE_PATH, "r") as env_file: + lines = env_file.readlines() + + # Convert lines to a dictionary + existing_fields = {} + for line in lines: + if "=" in line: + key, value = line.strip().split("=") + existing_fields[key.strip()] = value.strip().strip("\"") + + # Prompt the user for information + institution = input("Enter institution name: ") + group_name = input("Enter your group name: ") + pi_name = input("Enter your PI name: ") + user_name = input("Enter your name: ") + + # Validate the input + if not group_name: + raise ValueError("Group name cannot be empty") + if not pi_name: + raise ValueError("PI name cannot be empty") + if not institution: + raise ValueError("Institution cannot be empty") + if not user_name: + raise ValueError("User name cannot be empty") + + # Update or write field values in .env file + with open(ENV_FILE_PATH, "w") as env_file: + for line in lines: + if "=" in line: + key, _ = line.strip().split("=") + key = key.strip() + if key in ["GROUP_NAME", "PI_NAME", "INSTITUTION", "USER_NAME"]: + value = locals()[key.lower()] + if key in existing_fields and existing_fields[key] != "": + overwrite = input(f"{key} already exists with value: {existing_fields[key]}. Do you want to overwrite? (y/n): ") + if overwrite.lower() == "y": + env_file.write(f"{key} = \"{value}\"\n") + print(f"{key} overwritten with value: {value}") + else: + env_file.write(line) + print(f"{key} not overwritten. Existing value: {existing_fields[key]}") + else: + env_file.write(f"{key} = \"{value}\"\n") + print(f"{key} updated with value: {value}") + else: + env_file.write(line) + else: + env_file.write(line) + + print("Contributor information updated successfully!")
+ +
+ +
+
+ + + + +
+
+ + +
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000..eb19f698 --- /dev/null +++ b/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_sphinx_design_static/design-tabs.js b/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000..36b38cf0 --- /dev/null +++ b/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/check-solid.svg b/_static/check-solid.svg new file mode 100644 index 00000000..92fad4b5 --- /dev/null +++ b/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 00000000..54b3c463 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 00000000..f1916ec7 --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 00000000..2ea7ff3e --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 00000000..dbe1aaad --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000..eb19f698 --- /dev/null +++ b/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_static/design-tabs.js b/_static/design-tabs.js new file mode 100644 index 00000000..36b38cf0 --- /dev/null +++ b/_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/jupyter-sphinx.css b/_static/jupyter-sphinx.css new file mode 100644 index 00000000..87724dfc --- /dev/null +++ b/_static/jupyter-sphinx.css @@ -0,0 +1,123 @@ +/* Stylesheet for jupyter-sphinx + +These styles mimic the Jupyter HTML styles. + +The default CSS (Cascading Style Sheet) class structure of jupyter-sphinx +is the following: + +jupyter_container + code_cell (optional) + stderr (optional) + output (optional) + +If the code_cell is not displayed, then there is not a jupyter_container, and +the output is provided without CSS. + +This stylesheet attempts to override the defaults of all packaged Sphinx themes +to display jupter-sphinx cells in a Jupyter-like style. + +If you want to adjust the styles, add additional custom CSS to override these +styles. + +After a build, this stylesheet is loaded from ./_static/jupyter-sphinx.css . + +*/ + + +div.jupyter_container { + padding: .4em; + margin: 0 0 .4em 0; + background-color: #FFFF; + border: 1px solid #CCC; + -moz-box-shadow: 2px 2px 4px rgba(87, 87, 87, 0.2); + -webkit-box-shadow: 2px 2px 4px rgba(87, 87, 87, 0.2); + box-shadow: 2px 2px 4px rgba(87, 87, 87, 0.2); +} +.jupyter_container div.code_cell { + border: 1px solid #cfcfcf; + border-radius: 2px; + background-color: #f7f7f7; + margin: 0 0; + overflow: auto; +} + +.jupyter_container div.code_cell pre { + padding: 4px; + margin: 0 0; + background-color: #f7f7f7; + border: none; + background: none; + box-shadow: none; + -webkit-box-shadow: none; /* for nature */ + -moz-box-shadow: none; /* for nature */ +} + +.jupyter_container div.code_cell * { + margin: 0 0; +} +div.jupyter_container div.highlight { + background-color: #f7f7f7; /* for haiku */ +} +div.jupyter_container { + padding: 0; + margin: 0; +} + +/* Prevent alabaster breaking highlight alignment */ +div.jupyter_container .hll { + padding: 0; + margin: 0; +} + +/* overrides for sphinx_rtd_theme */ +.rst-content .jupyter_container div[class^='highlight'], +.document .jupyter_container div[class^='highlight'], +.rst-content .jupyter_container pre.literal-block { + border:none; + margin: 0; + padding: 0; + background: none; + padding: 3px; + background-color: transparent; +} +/* restore Mathjax CSS, as it assumes a vertical margin. */ +.jupyter_container .MathJax_Display { + margin: 1em 0em; + text-align: center; +} +.jupyter_container .stderr { + background-color: #FCC; + border: none; + padding: 3px; +} +.jupyter_container .output { + border: none; +} +.jupyter_container div.output pre { + background-color: white; + background: none; + padding: 4px; + border: none; + box-shadow: none; + -webkit-box-shadow: none; /* for nature */ + -moz-box-shadow: none; /* for nature */ +} +.jupyter_container .code_cell td.linenos { + text-align: right; + padding: 4px 4px 4px 8px; + border-right: 1px solid #cfcfcf; + color: #999; +} +.jupyter_container .output .highlight { + background-color: #ffffff; +} +/* combine sequential jupyter cells, + by moving sequential ones up higher on y-axis */ +div.jupyter_container + div.jupyter_container { + margin: -.5em 0 .4em 0; +} + +/* Fix for sphinx_rtd_theme spacing after jupyter_container #91 */ +.rst-content .jupyter_container { + margin: 0 0 24px 0; +} diff --git a/apidocs/index.html b/apidocs/index.html index 98fd7289..51ab1225 100644 --- a/apidocs/index.html +++ b/apidocs/index.html @@ -7,7 +7,10 @@ API Reference — SQuADDS 0.1.0 documentation - + + + + @@ -174,6 +177,7 @@

API Reference + + + + + diff --git a/developer/index.html b/developer/index.html index f6c7dd1d..307ee632 100644 --- a/developer/index.html +++ b/developer/index.html @@ -7,7 +7,10 @@ Developer Notes — SQuADDS 0.1.0 documentation - + + + + @@ -201,6 +204,7 @@

Contributors + + + + + diff --git a/genindex.html b/genindex.html index 0a3033cb..87e9d4d7 100644 --- a/genindex.html +++ b/genindex.html @@ -6,7 +6,11 @@ Index — SQuADDS 0.1.0 documentation - + + + + + @@ -140,20 +144,33 @@

Index

- C + A + | C + | D | G + | I | M + | P | R | S + | T | U
+

A

+ + +
+

C

+

D

+ + + +
+

G

+
    @@ -181,7 +212,15 @@

    G

+ +

I

+ +
@@ -219,6 +258,14 @@

M

+

P

+ + +
+

R

    @@ -318,14 +365,22 @@

    S

+

T

+ + +
+

U

@@ -350,6 +405,7 @@

U

© Copyright 2023, Sadman Ahmed Shanto & Eli Levenson-Falk. + Last updated on 2023/12/19.

@@ -391,6 +447,12 @@

U

+ + + + + + diff --git a/getting_started.html b/getting_started.html index 32faed42..64b06877 100644 --- a/getting_started.html +++ b/getting_started.html @@ -7,7 +7,10 @@ Getting Started with SQuADDS — SQuADDS 0.1.0 documentation - + + + + @@ -195,6 +198,7 @@

FAQ

+ Last updated on 2023/12/19.

@@ -243,6 +247,11 @@

FAQ

+ + + + + diff --git a/index.html b/index.html index b474d837..72c02e2c 100644 --- a/index.html +++ b/index.html @@ -7,7 +7,10 @@ Welcome to SQuADDS’s documentation! — SQuADDS 0.1.0 documentation - + + + + @@ -191,6 +194,7 @@

Indices and tables + + + + + diff --git a/modules.html b/modules.html index e06f35b2..493023af 100644 --- a/modules.html +++ b/modules.html @@ -7,7 +7,10 @@ SQuADDS — SQuADDS 0.1.0 documentation - + + + + @@ -196,6 +199,7 @@

SQuADDS¶ © Copyright 2023, Sadman Ahmed Shanto & Eli Levenson-Falk. + Last updated on 2023/12/19.

@@ -240,6 +244,11 @@

SQuADDS + + + + + diff --git a/objects.inv b/objects.inv index 1fd3cea4..838f85ad 100644 Binary files a/objects.inv and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html index 7bb3b107..86582f68 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -6,7 +6,11 @@ Python Module Index — SQuADDS 0.1.0 documentation - + + + + + @@ -224,6 +228,7 @@

Python Module Index

© Copyright 2023, Sadman Ahmed Shanto & Eli Levenson-Falk. + Last updated on 2023/12/19.

@@ -265,6 +270,12 @@

Python Module Index

+ + + + + + diff --git a/references/index.html b/references/index.html index 52dca8b5..21b1c247 100644 --- a/references/index.html +++ b/references/index.html @@ -7,7 +7,10 @@ References — SQuADDS 0.1.0 documentation - + + + + @@ -284,6 +287,7 @@ © Copyright 2023, Sadman Ahmed Shanto & Eli Levenson-Falk. + Last updated on 2023/12/19.

@@ -328,6 +332,11 @@ + + + + + diff --git a/release_notes.html b/release_notes.html index b1bfd08a..eded6c99 100644 --- a/release_notes.html +++ b/release_notes.html @@ -7,7 +7,10 @@ Release Notes — SQuADDS 0.1.0 documentation - + + + + @@ -179,6 +182,7 @@

Version 0.1.0 (2023-12-20) + + + + + diff --git a/search.html b/search.html index 133a4449..8972cd2c 100644 --- a/search.html +++ b/search.html @@ -6,7 +6,11 @@ Search — SQuADDS 0.1.0 documentation - + + + + + @@ -168,6 +172,7 @@ © Copyright 2023, Sadman Ahmed Shanto & Eli Levenson-Falk. + Last updated on 2023/12/19.

@@ -212,6 +217,12 @@ + + + + + + diff --git a/searchindex.js b/searchindex.js index e7369256..5e110187 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["apidocs/index", "developer/index", "getting_started", "index", "modules", "references/index", "release_notes", "setup", "squadds", "squadds.core", "squadds.database", "tutorials/Tutorial-1_getting_started_with_SQuADDS", "tutorials/Tutorial-2_Contributing_to_SQuADDS", "tutorials/index"], "filenames": ["apidocs/index.rst", "developer/index.rst", "getting_started.rst", "index.rst", "modules.rst", "references/index.rst", "release_notes.rst", "setup.rst", "squadds.rst", "squadds.core.rst", "squadds.database.rst", "tutorials/Tutorial-1_getting_started_with_SQuADDS.ipynb", "tutorials/Tutorial-2_Contributing_to_SQuADDS.ipynb", "tutorials/index.rst"], "titles": ["API Reference", "Developer Notes", "Getting Started with SQuADDS", "Welcome to SQuADDS\u2019s documentation!", "SQuADDS", "References", "Release Notes", "setup module", "squadds package", "squadds.core package", "squadds.database package", "Tutorial 1: Getting Started with SQuADDS", "Tutorial 2: Contributing to SQuADDS", "Tutorials"], "terms": {"thi": [0, 3, 10, 12], "section": [0, 1], "provid": [0, 1, 3, 12], "detail": [0, 9], "document": [0, 1], "all": [0, 11, 12], "modul": [0, 3, 4, 12], "class": [0, 3, 10], "function": [0, 10], "other": [0, 12], "member": 0, "squadd": [0, 1, 13], "project": 0, "setup": [0, 4, 11], "packag": [0, 4, 5, 6, 11, 12], "everyon": 1, "i": [1, 3, 9, 10, 12], "welcom": 1, "pleas": [1, 3, 11], "see": 1, "review": [1, 5, 12], "follow": [1, 11, 12], "more": [1, 12], "inform": [1, 5, 10], "contact": 1, "u": 1, "bug": 1, "report": 1, "ani": [1, 10, 12], "you": [1, 2, 3, 11, 12], "find": 1, "code": [1, 11, 12], "open": [1, 3, 5, 12], "an": [1, 3, 5, 9], "issu": 1, "github": [1, 2, 5], "featur": [1, 11], "request": [1, 12], "If": [1, 3, 9, 10, 12], "have": [1, 11, 12], "idea": 1, "new": [1, 3, 5, 10], "pull": [1, 12], "we": [1, 12], "from": [1, 2, 3, 5, 10, 11, 12], "commun": 1, "submit": 1, "patient": 1, "your": [1, 2, 3, 11, 12], "work": [1, 3, 12], "question": 1, "about": [1, 12], "typo": 1, "error": 1, "implement": [1, 3, 6, 10], "next": 1, "releas": 1, "would": 1, "like": 1, "help": 1, "version": 1, "look": 1, "what": 1, "sadman": [1, 3], "ahm": [1, 3], "shanto": [1, 3, 11, 12], "univers": 1, "southern": 1, "california": 1, "eli": [1, 3], "levenson": [1, 3], "falk": [1, 3], "etern": 1, "guidanc": 1, "andr": [1, 3], "kuo": [1, 3], "clark": [1, 3], "miyamoto": [1, 3], "york": 1, "madison": 1, "howard": 1, "institut": [1, 9, 10, 11, 12], "technologi": [1, 5], "hunter": 1, "can": [2, 11, 12], "us": [2, 3, 12], "pip": [2, 11, 12], "altern": 2, "sourc": [2, 3, 5, 10, 12], "clone": [2, 12], "repositori": [2, 3, 10, 12], "navig": [2, 12], "chosen": 2, "directori": [2, 10, 12], "cd": 2, "repo": 2, "path": [2, 10, 12], "git": [2, 12], "http": [2, 5, 12], "com": [2, 5], "shanto268": 2, "depend": [2, 12], "activ": 2, "qiskit": [2, 5, 12], "metal": [2, 5, 12], "conda": 2, "environ": [2, 11], "env": [2, 9, 10, 11, 12], "q": [2, 5], "placehold": 2, "A": [2, 3, 5, 9], "platform": 3, "aim": 3, "speed": 3, "up": [3, 11], "loop": 3, "creation": [3, 10], "quantum": [3, 5], "hardwar": 3, "tool": 3, "bridg": 3, "gap": 3, "between": 3, "theoret": 3, "practic": [3, 12], "research": 3, "engin": [3, 5], "well": 3, "character": [3, 5], "start": [3, 13], "point": 3, "develop": [3, 11, 12], "enabl": 3, "rapid": 3, "gener": [3, 9, 10, 12], "best": [3, 12], "guess": 3, "valid": [3, 10, 12], "pre": [3, 6], "underpin": 3, "vast": 3, "experiment": [3, 5], "paramet": 3, "lower": 3, "barrier": 3, "entri": 3, "group": [3, 5, 10, 11, 12], "seek": 3, "make": [3, 12], "them": 3, "which": 3, "refin": 3, "hi": 3, "support": 3, "its": 3, "continu": 3, "mainten": 3, "cite": 3, "our": [3, 6], "thank": 3, "articl": 3, "titl": 3, "workflow": 3, "author": 3, "haimeng": 3, "zhang": [3, 5], "vivek": 3, "maurya": [3, 5], "evangelo": 3, "vlacho": 3, "malida": 3, "hecht": 3, "chung": 3, "wa": [3, 9], "shum": 3, "journal": [3, 5], "arxiv": [3, 5], "preprint": 3, "year": 3, "2023": [3, 5], "index": 3, "search": 3, "page": [3, 11], "subpackag": 4, "core": [4, 8, 11], "submodul": [4, 8], "global": [4, 8], "util": [4, 8, 11], "content": [4, 12], "databas": [4, 6, 8], "checker": [4, 8], "config": [4, 8, 11, 12], "contributor": [4, 8, 11, 12], "db": [4, 8], "reader": [4, 8], "avail": 5, "org": 5, "hug": [5, 9, 10, 12], "face": [5, 9, 10, 12], "huggingfac": [5, 6, 10, 12], "co": [5, 12], "minev": 5, "et": 5, "al": 5, "energi": 5, "particip": 5, "quantiz": 5, "josephson": 5, "circuit": [5, 12], "npj": 5, "vol": 5, "7": [5, 12], "1": [5, 12, 13], "pp": 5, "131": 5, "2021": 5, "natur": [5, 10], "publish": 5, "uk": 5, "london": 5, "electrodynam": 5, "cqed": 5, "modular": 5, "quasi": 5, "lump": 5, "model": 5, "2103": 5, "10344": 5, "quant": 5, "ph": 5, "yuan": 5, "comparison": 5, "oscil": 5, "ratio": 5, "method": [5, 10], "design": [5, 6, 11, 12], "two": 5, "dimension": 5, "superconduct": 5, "chip": 5, "entropi": 5, "24": 5, "6": 5, "792": 5, "2022": 5, "mdpi": 5, "awslab": 5, "palac": 5, "3d": 5, "finit": 5, "element": [5, 12], "solver": 5, "comput": [5, 12], "electromagnet": 5, "koch": 5, "charg": 5, "insensit": 5, "qubit": [5, 11, 12], "deriv": 5, "cooper": 5, "pair": 5, "box": 5, "physic": 5, "76": 5, "4": [5, 11, 12], "042319": 5, "2007": 5, "ap": 5, "yan": 5, "framework": 5, "optim": 5, "2020": 5, "2006": 5, "04130": 5, "krantz": 5, "": [5, 12], "guid": 5, "appli": 5, "2": [5, 11, 13], "2019": 5, "aip": 5, "groszkowski": 5, "j": 5, "scqubit": 5, "python": [5, 12], "5": 5, "583": 5, "verein": 5, "zur": 5, "f\u00f6rderung": 5, "de": 5, "access": 5, "publizieren": 5, "den": 5, "quantenwissenschaften": 5, "aumann": 5, "circuitq": 5, "toolbox": 5, "9": 5, "093012": 5, "iop": 5, "nois": 5, "suppress": 5, "through": 5, "demand": 5, "caviti": [5, 6], "cool": 5, "control": 5, "bulletin": 5, "american": 5, "societi": 5, "liu": 5, "dissip": 5, "On": [5, 12], "shillito": 5, "dynam": 5, "transmon": 5, "ioniz": 5, "18": 5, "3": [5, 11, 12], "034031": 5, "besedin": 5, "p": 5, "menushenkov": 5, "qualiti": 5, "factor": 5, "transmiss": 5, "line": [5, 12], "coupl": 5, "coplanar": 5, "waveguid": 5, "reson": 5, "epj": 5, "16": 5, "2018": 5, "springeropen": 5, "mcdaniel": 5, "simul": [5, 6, 11, 12], "guidelin": [5, 12], "wideband": 5, "ground": 5, "back": 5, "ieee": 5, "20th": 5, "wireless": 5, "microwav": 5, "confer": 5, "wamicon": 5, "driven": 5, "reset": 5, "2310": 5, "16785": 5, "cond": 5, "mat": 5, "tanamoto": 5, "classic": 5, "spice": 5, "express": 5, "034501": 5, "huang": 5, "machin": [5, 12], "learn": 5, "electron": 5, "autom": 5, "survei": 5, "acm": 5, "transact": 5, "system": 5, "26": 5, "46": 5, "jiang": 5, "deep": 5, "neural": 5, "network": 5, "evalu": 5, "photon": 5, "devic": 5, "materi": 5, "8": [5, 12], "679": 5, "700": 5, "feng": 5, "artifici": 5, "aid": 5, "The": [5, 9, 10, 12], "state": 5, "art": 5, "theori": 5, "techniqu": 5, "70": 5, "11": [5, 11], "4597": 5, "4619": 5, "nov": 5, "nugraha": 5, "shao": 5, "base": [5, 6, 10, 12], "predict": 5, "march": 5, "meet": 5, "la": 5, "vega": 5, "nevada": 5, "10": [5, 12], "virtual": 5, "20": 5, "22": [5, 11], "b73": 5, "00007": 5, "multivalu": 5, "invers": 5, "applic": 5, "filter": 5, "66": 5, "3781": 5, "3797": 5, "aug": 5, "willsch": 5, "observ": 5, "harmon": 5, "tunnel": 5, "junction": 5, "2302": 5, "09192": 5, "sep": 5, "kerman": 5, "effici": 5, "numer": 5, "complex": 5, "2010": 5, "14929": 5, "menk": 5, "Its": 5, "local": [5, 12], "coupler": [5, 6, 11, 12], "mar": 5, "rajabzadeh": 5, "analysi": 5, "arbitrari": 5, "accompani": 5, "sqcircuit": 5, "1118": 5, "mvp": 6, "host": 6, "data": [6, 10], "transmoncross": [6, 11, 12], "claw": 6, "onli": 6, "closest": 6, "interpol": 6, "retriev": [6, 10], "logic": 6, "paper": 6, "tutori": 6, "basic": 6, "usag": 6, "contribut": [6, 8, 10, 13], "ad": 6, "pypi": 6, "creat": [6, 9, 10, 12], "create_mailto_link": [8, 9], "send_email_via_cli": [8, 9], "set_huggingface_api_kei": [8, 9, 11], "check": [8, 10], "squadds_db_config": [8, 10], "check_for_api_kei": [8, 10], "create_dataset_nam": [8, 10], "create_dataset_repositori": [8, 10], "get_dataset_link": [8, 10], "upload_dataset": [8, 10], "upload_dataset_no_valid": [8, 10], "copy_files_to_new_loc": [8, 10], "create_contributor_info": [8, 10, 12], "generate_file_nam": [8, 10], "recipi": 9, "subject": 9, "bodi": 9, "mailto": 9, "link": [9, 10], "given": [9, 10], "arg": [9, 10], "list": [9, 10, 12], "email": 9, "address": 9, "str": [9, 10], "return": [9, 10], "dataset_nam": [9, 10, 12], "pi_nam": [9, 10, 12], "date": [9, 10], "dataset_link": [9, 10], "send": 9, "notif": 9, "dataset": [9, 10, 11, 12], "name": [9, 10], "where": [9, 10, 12], "princip": [9, 10], "investig": [9, 10], "who": 9, "when": 9, "none": [9, 10], "set": [9, 11, 12], "api": [9, 10, 11, 12], "kei": [9, 10, 11], "append": [9, 12], "file": [9, 10, 11, 12], "alreadi": [9, 10, 11, 12], "exist": [9, 10, 11], "doe": 9, "add": [9, 12], "again": 9, "token": [9, 10], "found": [9, 10, 11, 12], "rais": [9, 10, 12], "valueerror": [9, 10], "object": 10, "helper": 10, "circuit_el": 10, "element_nam": 10, "result_typ": 10, "kwarg": 10, "builderconfig": 10, "squadds_db": [10, 11, 12], "data_fil": 10, "repres": 10, "upload": [10, 11, 12], "attribut": 10, "dataset_fil": 10, "pi": [10, 11, 12], "hfapi": 10, "presenc": 10, "uniqu": 10, "without": 10, "compon": 10, "data_typ": 10, "data_natur": 10, "data_sourc": 10, "type": 10, "option": 10, "default": 10, "doesn": 10, "t": [10, 11], "notimplementederror": [10, 12], "data_path": 10, "new_path": 10, "copi": 10, "locat": 10, "contain": 10, "prompt": 10, "user": [10, 11, 12], "updat": [10, 11, 12], "enter": 10, "It": [10, 12], "input": 10, "correspond": 10, "field": [10, 12], "confirm": 10, "whether": 10, "overwrit": 10, "valu": 10, "ar": 10, "empti": 10, "load_ext": [11, 12], "autoreload": [11, 12], "instal": [11, 12], "e": [11, 12], "obtain": [11, 12], "lfl": [11, 12], "prepar": [11, 12], "metadata": [11, 12], "py": [11, 12], "done": [11, 12], "collect": [11, 12], "attempt": [11, 12], "uninstal": [11, 12], "0": [11, 12], "successfulli": [11, 12], "run": [11, 12], "instruct": 11, "here": 11, "sign": 11, "onc": 11, "huggingface_api_kei": 11, "variabl": [11, 12], "execut": [11, 12], "import": [11, 12], "15": [11, 12], "get_dataset_config_nam": 11, "load_dataset": [11, 12], "13": 11, "39": [11, 12], "cap_matrix": [11, 12], "cavity_claw": [11, 12], "routermeand": 11, "eigenmod": [11, 12], "ncap": [11, 12], "qubit_data": 11, "datasetdict": 11, "train": [11, 12], "note": 11, "sim_result": [11, 12], "sim_opt": [11, 12], "num_row": 11, "1934": 11, "28": 11, "print": 11, "nest": 11, "try": 11, "f": [11, 12], "ha": [11, 12], "k": 11, "except": 11, "pass": 11, "design_opt": [11, 12], "design_tool": [11, 12], "date_cr": [11, 12], "claw_to_claw": 11, "claw_to_ground": 11, "cross_to_claw": 11, "cross_to_cross": 11, "cross_to_ground": 11, "ground_to_ground": 11, "unit": [11, 12], "renderer_opt": 11, "86": 12, "extens": 12, "load": 12, "To": 12, "reload": 12, "reload_ext": 12, "14": 12, "tabl": 12, "node": 12, "build": 12, "top": 12, "In": 12, "order": 12, "need": 12, "some": 12, "yourself": 12, "track": 12, "give": 12, "credit": 12, "root": 12, "group_nam": 12, "user_nam": 12, "Or": 12, "cell": 12, "17": 12, "want": 12, "json": 12, "format": 12, "AT": 12, "least": 12, "mani": 12, "supplementari": 12, "design_tool_nam": 12, "sim_setup_opt": 12, "simulator_nam": 12, "result1": 12, "sim_result1": 12, "unit1": 12, "result2": 12, "sim_result2": 12, "unit2": 12, "yyyi": 12, "mm": 12, "dd": 12, "hhmmss": 12, "same": 12, "just": 12, "instead": 12, "repeat": 12, "each": 12, "result": 12, "fork": 12, "do": 12, "so": 12, "checkout": 12, "branch": 12, "might": 12, "b": 12, "add_to_configur": 12, "modifi": 12, "necessari": 12, "sure": 12, "maintain": 12, "specif": 12, "requir": 12, "commit": 12, "push": 12, "chang": 12, "m": 12, "y": 12, "origin": 12, "against": 12, "hub": 12, "command": 12, "your_usernam": 12, "good": 12, "new_configur": 12, "involv": 12, "ones": 12, "librari": 12, "builder": 12, "script": 12, "defin": 12, "clear": 12, "messag": 12, "x": 12, "go": 12, "exampl": 12, "render": 12, "get": [12, 13], "automat": 12, "79": 12, "def": 12, "combine_json_fil": 12, "source_directori": 12, "output_fil": 12, "all_data": 12, "file_path": 12, "glob": 12, "o": 12, "join": 12, "r": 12, "encod": 12, "utf": 12, "write": 12, "combin": 12, "singl": 12, "w": 12, "outfil": 12, "dump": 12, "indent": 12, "80": 12, "replac": 12, "combined_qubit_data": 12, "desir": 12, "output": 12, "81": 12, "combined_coupler_data": 12, "82": 12, "routemeand": 12, "combined_cav": 12, "claw_data": 12, "83": 12, "renam": 12, "lfl_usc_": 12, "hash": 12, "hashlib": 12, "md5": 12, "sort_kei": 12, "true": 12, "hexdigest": 12, "new_fil": 12, "99": 12, "cli": 12, "test": 12, "save_info": 12, "all_config": 12, "info": 12, "cach": 12, "datasets_modul": 12, "6c042e99be0aa47463aa5d9ae2ceeb87b02331a7e2aa159865c27f7b19e9316": 12, "s_qu_adds_db": 12, "download": 12, "100": 12, "00": 12, "lt": 12, "12458": 12, "33it": 12, "took": 12, "min": 12, "checksum": 12, "extract": 12, "853": 12, "43it": 12, "split": 12, "traceback": 12, "most": 12, "recent": 12, "call": 12, "last": 12, "34": 12, "miniconda3": 12, "qiskit_met": 12, "bin": 12, "gt": 12, "sy": 12, "exit": 12, "main": 12, "lib": 12, "python3": 12, "site": 12, "datasets_cli": 12, "servic": 12, "146": 12, "download_and_prepar": 12, "948": 12, "self": 12, "_download_and_prepar": 12, "1043": 12, "_prepare_split": 12, "split_gener": 12, "prepare_split_kwarg": 12, "1445": 12, "96": 12, "random": 12, "create_train_val_test_split": 12, "source_fil": 12, "output_directori": 12, "train_ratio": 12, "val_ratio": 12, "makedir": 12, "extend": 12, "shuffl": 12, "total_data": 12, "len": 12, "train_end": 12, "int": 12, "val_end": 12, "train_data": 12, "val_data": 12, "test_data": 12, "save": 12, "97": 12, "lfl_usc_cavity_claw_3e95ba4a2e4da2141f9edaa9f9fa1653": 12, "lfl_usc_coupler_e7855e5c7467f76edb09779d8f3a1a0c": 12, "lfl_usc_qubit_e68f323df894ba4b2891bd64742a2c35": 12}, "objects": {"": [[8, 0, 0, "-", "squadds"]], "squadds": [[9, 0, 0, "-", "core"], [10, 0, 0, "-", "database"]], "squadds.core": [[9, 0, 0, "-", "globals"], [9, 0, 0, "-", "utils"]], "squadds.core.utils": [[9, 1, 1, "", "create_mailto_link"], [9, 1, 1, "", "send_email_via_client"], [9, 1, 1, "", "set_huggingface_api_key"]], "squadds.database": [[10, 0, 0, "-", "checker"], [10, 0, 0, "-", "config"], [10, 0, 0, "-", "contributor"], [10, 0, 0, "-", "db"], [10, 0, 0, "-", "reader"], [10, 0, 0, "-", "utils"]], "squadds.database.checker": [[10, 2, 1, "", "Checker"]], "squadds.database.checker.Checker": [[10, 3, 1, "", "check"]], "squadds.database.config": [[10, 2, 1, "", "SQuADDS_DB_Config"]], "squadds.database.contributor": [[10, 2, 1, "", "Contribute"]], "squadds.database.contributor.Contribute": [[10, 3, 1, "", "check_for_api_key"], [10, 3, 1, "", "create_dataset_name"], [10, 3, 1, "", "create_dataset_repository"], [10, 3, 1, "", "get_dataset_link"], [10, 3, 1, "", "upload_dataset"], [10, 3, 1, "", "upload_dataset_no_validation"]], "squadds.database.reader": [[10, 2, 1, "", "Reader"]], "squadds.database.utils": [[10, 1, 1, "", "copy_files_to_new_location"], [10, 1, 1, "", "create_contributor_info"], [10, 1, 1, "", "generate_file_name"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"]}, "titleterms": {"api": 0, "refer": [0, 5], "develop": 1, "note": [1, 6], "contribut": [1, 12], "item": 1, "contributor": [1, 10], "get": [2, 11], "start": [2, 11], "squadd": [2, 3, 4, 8, 9, 10, 11, 12], "instal": 2, "faq": 2, "welcom": 3, "": 3, "document": 3, "overview": 3, "superconduct": 3, "qubit": 3, "And": 3, "devic": 3, "design": 3, "simul": 3, "databas": [3, 10, 12], "citat": 3, "indic": 3, "tabl": 3, "releas": 6, "version": 6, "0": 6, "1": [6, 11], "2023": 6, "12": 6, "20": 6, "setup": [7, 12], "modul": [7, 8, 9, 10], "packag": [8, 9, 10], "subpackag": 8, "content": [8, 9, 10], "core": 9, "submodul": [9, 10], "global": 9, "util": [9, 10], "checker": 10, "config": 10, "db": 10, "reader": 10, "tutori": [11, 12, 13], "huggingfac": 11, "creat": 11, "an": [11, 12], "account": 11, "2": 12, "inform": 12, "understand": 12, "terminologi": 12, "structur": 12, "data": 12, "process": 12, "ad": 12, "exist": 12, "configur": 12, "new": 12}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "nbsphinx": 4, "sphinx": 60}, "alltitles": {"API Reference": [[0, "api-reference"]], "Developer Notes": [[1, "developer-notes"]], "Contribution Items": [[1, "contribution-items"]], "Developers": [[1, "developers"]], "Contributors": [[1, "contributors"]], "Getting Started with SQuADDS": [[2, "getting-started-with-squadds"]], "Installation": [[2, "installation"]], "FAQ": [[2, "faq"]], "Welcome to SQuADDS\u2019s documentation!": [[3, "welcome-to-squadds-s-documentation"]], "Overview": [[3, "overview"]], "SQuADDS: a Superconducting Qubit And Device Design and Simulation database": [[3, "squadds-a-superconducting-qubit-and-device-design-and-simulation-database"]], "Citation": [[3, "citation"]], "Indices and tables": [[3, "indices-and-tables"]], "SQuADDS": [[4, "squadds"]], "References": [[5, "references"]], "Release Notes": [[6, "release-notes"]], "Version 0.1.0 (2023-12-20)": [[6, "version-0-1-0-2023-12-20"]], "setup module": [[7, "setup-module"]], "squadds package": [[8, "squadds-package"]], "Subpackages": [[8, "subpackages"]], "Module contents": [[8, "module-squadds"], [9, "module-squadds.core"], [10, "module-squadds.database"]], "squadds.core package": [[9, "squadds-core-package"]], "Submodules": [[9, "submodules"], [10, "submodules"]], "squadds.core.globals module": [[9, "module-squadds.core.globals"]], "squadds.core.utils module": [[9, "module-squadds.core.utils"]], "squadds.database package": [[10, "squadds-database-package"]], "squadds.database.checker module": [[10, "module-squadds.database.checker"]], "squadds.database.config module": [[10, "module-squadds.database.config"]], "squadds.database.contributor module": [[10, "module-squadds.database.contributor"]], "squadds.database.db module": [[10, "module-squadds.database.db"]], "squadds.database.reader module": [[10, "module-squadds.database.reader"]], "squadds.database.utils module": [[10, "module-squadds.database.utils"]], "Tutorial 1: Getting Started with SQuADDS": [[11, "Tutorial-1:-Getting-Started-with-SQuADDS"]], "HuggingFace": [[11, "HuggingFace"]], "Creating an Account": [[11, "Creating-an-Account"]], "Tutorial 2: Contributing to SQuADDS": [[12, "Tutorial-2:-Contributing-to-SQuADDS"]], "Contribution Information Setup": [[12, "Contribution-Information-Setup"]], "Understanding the terminology and database structure": [[12, "Understanding-the-terminology-and-database-structure"]], "Data Processing:": [[12, "Data-Processing:"]], "Adding to an Existing Configuration": [[12, "Adding-to-an-Existing-Configuration"]], "Contributing a New Configuration": [[12, "Contributing-a-New-Configuration"]], "Tutorials": [[13, "tutorials"]]}, "indexentries": {"module": [[8, "module-squadds"], [9, "module-squadds.core"], [9, "module-squadds.core.globals"], [9, "module-squadds.core.utils"], [10, "module-squadds.database"], [10, "module-squadds.database.checker"], [10, "module-squadds.database.config"], [10, "module-squadds.database.contributor"], [10, "module-squadds.database.db"], [10, "module-squadds.database.reader"], [10, "module-squadds.database.utils"]], "squadds": [[8, "module-squadds"]], "create_mailto_link() (in module squadds.core.utils)": [[9, "squadds.core.utils.create_mailto_link"]], "send_email_via_client() (in module squadds.core.utils)": [[9, "squadds.core.utils.send_email_via_client"]], "set_huggingface_api_key() (in module squadds.core.utils)": [[9, "squadds.core.utils.set_huggingface_api_key"]], "squadds.core": [[9, "module-squadds.core"]], "squadds.core.globals": [[9, "module-squadds.core.globals"]], "squadds.core.utils": [[9, "module-squadds.core.utils"]], "checker (class in squadds.database.checker)": [[10, "squadds.database.checker.Checker"]], "contribute (class in squadds.database.contributor)": [[10, "squadds.database.contributor.Contribute"]], "reader (class in squadds.database.reader)": [[10, "squadds.database.reader.Reader"]], "squadds_db_config (class in squadds.database.config)": [[10, "squadds.database.config.SQuADDS_DB_Config"]], "check() (squadds.database.checker.checker method)": [[10, "squadds.database.checker.Checker.check"]], "check_for_api_key() (squadds.database.contributor.contribute method)": [[10, "squadds.database.contributor.Contribute.check_for_api_key"]], "copy_files_to_new_location() (in module squadds.database.utils)": [[10, "squadds.database.utils.copy_files_to_new_location"]], "create_contributor_info() (in module squadds.database.utils)": [[10, "squadds.database.utils.create_contributor_info"]], "create_dataset_name() (squadds.database.contributor.contribute method)": [[10, "squadds.database.contributor.Contribute.create_dataset_name"]], "create_dataset_repository() (squadds.database.contributor.contribute method)": [[10, "squadds.database.contributor.Contribute.create_dataset_repository"]], "generate_file_name() (in module squadds.database.utils)": [[10, "squadds.database.utils.generate_file_name"]], "get_dataset_link() (squadds.database.contributor.contribute method)": [[10, "squadds.database.contributor.Contribute.get_dataset_link"]], "squadds.database": [[10, "module-squadds.database"]], "squadds.database.checker": [[10, "module-squadds.database.checker"]], "squadds.database.config": [[10, "module-squadds.database.config"]], "squadds.database.contributor": [[10, "module-squadds.database.contributor"]], "squadds.database.db": [[10, "module-squadds.database.db"]], "squadds.database.reader": [[10, "module-squadds.database.reader"]], "squadds.database.utils": [[10, "module-squadds.database.utils"]], "upload_dataset() (squadds.database.contributor.contribute method)": [[10, "squadds.database.contributor.Contribute.upload_dataset"]], "upload_dataset_no_validation() (squadds.database.contributor.contribute method)": [[10, "squadds.database.contributor.Contribute.upload_dataset_no_validation"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["apidocs/index", "developer/index", "getting_started", "index", "modules", "references/index", "release_notes", "setup", "squadds", "squadds.core", "squadds.database", "tutorials/Tutorial-1_getting_started_with_SQuADDS", "tutorials/Tutorial-2_Contributing_to_SQuADDS", "tutorials/index"], "filenames": ["apidocs/index.rst", "developer/index.rst", "getting_started.rst", "index.rst", "modules.rst", "references/index.rst", "release_notes.rst", "setup.rst", "squadds.rst", "squadds.core.rst", "squadds.database.rst", "tutorials/Tutorial-1_getting_started_with_SQuADDS.ipynb", "tutorials/Tutorial-2_Contributing_to_SQuADDS.ipynb", "tutorials/index.rst"], "titles": ["API Reference", "Developer Notes", "Getting Started with SQuADDS", "Welcome to SQuADDS\u2019s documentation!", "SQuADDS", "References", "Release Notes", "setup module", "squadds package", "squadds.core package", "squadds.database package", "Tutorial 1: Getting Started with SQuADDS", "Tutorial 2: Contributing to SQuADDS", "Tutorials"], "terms": {"0": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13], "1": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13], "thi": [0, 3, 10, 12], "section": [0, 1], "provid": [0, 1, 3, 12], "detail": [0, 9], "document": [0, 1], "all": [0, 11, 12], "modul": [0, 3, 4, 12], "class": [0, 3, 10], "function": [0, 10], "other": [0, 12], "member": 0, "squadd": [0, 1, 13], "project": 0, "setup": [0, 4, 11], "packag": [0, 4, 5, 6, 11, 12], "everyon": 1, "i": [1, 3, 9, 10, 12], "welcom": 1, "pleas": [1, 3, 11], "see": 1, "review": [1, 5, 12], "follow": [1, 11, 12], "more": [1, 12], "inform": [1, 5, 10], "contact": 1, "u": 1, "bug": 1, "report": 1, "ani": [1, 10, 12], "you": [1, 2, 3, 11, 12], "find": 1, "code": [1, 11, 12], "open": [1, 3, 5, 12], "an": [1, 3, 5, 9], "issu": 1, "github": [1, 2, 5], "featur": [1, 11], "request": [1, 12], "If": [1, 3, 9, 10, 12], "have": [1, 11, 12], "idea": 1, "new": [1, 3, 5, 10], "pull": [1, 12], "we": [1, 12], "from": [1, 2, 3, 5, 10, 11, 12], "commun": 1, "submit": 1, "patient": 1, "your": [1, 2, 3, 11, 12], "work": [1, 3, 12], "question": 1, "about": [1, 12], "typo": 1, "error": 1, "implement": [1, 3, 6, 10], "next": 1, "releas": 1, "would": 1, "like": 1, "help": 1, "version": 1, "look": 1, "what": 1, "sadman": [1, 3], "ahm": [1, 3], "shanto": [1, 3, 11, 12], "univers": 1, "southern": 1, "california": 1, "eli": [1, 3], "levenson": [1, 3], "falk": [1, 3], "etern": 1, "guidanc": 1, "andr": [1, 3], "kuo": [1, 3], "clark": [1, 3], "miyamoto": [1, 3], "york": 1, "madison": 1, "howard": 1, "institut": [1, 8, 9, 10, 11, 12], "technologi": [1, 5], "hunter": 1, "can": [2, 11, 12], "us": [2, 3, 12], "pip": [2, 11, 12], "altern": 2, "sourc": [2, 3, 5, 9, 10, 12], "clone": [2, 12], "repositori": [2, 3, 10, 12], "navig": [2, 12], "chosen": 2, "directori": [2, 10, 12], "cd": 2, "repo": 2, "path": [2, 10, 12], "git": [2, 12], "http": [2, 5, 12], "com": [2, 5], "shanto268": 2, "depend": [2, 12], "activ": 2, "qiskit": [2, 5, 12], "metal": [2, 5, 12], "conda": 2, "environ": [2, 11], "env": [2, 9, 10, 11, 12], "q": [2, 5], "placehold": 2, "A": [2, 3, 5, 9], "platform": 3, "aim": 3, "speed": 3, "up": [3, 11], "loop": 3, "creation": [3, 10], "quantum": [3, 5], "hardwar": 3, "tool": 3, "bridg": 3, "gap": 3, "between": 3, "theoret": 3, "practic": [3, 12], "research": 3, "engin": [3, 5], "well": 3, "character": [3, 5], "start": [3, 13], "point": 3, "develop": [3, 11, 12], "enabl": 3, "rapid": 3, "gener": [3, 9, 10, 12], "best": [3, 12], "guess": 3, "valid": [3, 10, 12], "pre": [3, 6], "underpin": 3, "vast": 3, "experiment": [3, 5], "paramet": [3, 9, 10], "lower": 3, "barrier": 3, "entri": 3, "group": [3, 5, 10, 11, 12], "seek": 3, "make": [3, 12], "them": 3, "which": 3, "refin": 3, "hi": 3, "support": 3, "its": 3, "continu": 3, "mainten": 3, "cite": 3, "our": [3, 6], "thank": 3, "articl": 3, "titl": 3, "workflow": 3, "author": 3, "haimeng": 3, "zhang": [3, 5], "vivek": 3, "maurya": [3, 5], "evangelo": 3, "vlacho": 3, "malida": 3, "hecht": 3, "chung": 3, "wa": [3, 9], "shum": 3, "journal": [3, 5], "arxiv": [3, 5], "preprint": 3, "year": 3, "2023": [3, 5], "index": 3, "search": 3, "page": [3, 11], "subpackag": 4, "core": [4, 8, 11], "submodul": [4, 8], "global": [4, 8], "util": [4, 8, 11], "content": [4, 12], "databas": [4, 6, 8], "checker": [4, 8], "config": [4, 8, 11, 12], "contributor": [4, 8, 11, 12], "db": [4, 8], "reader": [4, 8], "avail": 5, "org": 5, "hug": [5, 9, 10, 12], "face": [5, 9, 10, 12], "huggingfac": [5, 6, 10, 12], "co": [5, 12], "minev": 5, "et": 5, "al": 5, "energi": 5, "particip": 5, "quantiz": 5, "josephson": 5, "circuit": [5, 12], "npj": 5, "vol": 5, "7": [5, 12], "pp": 5, "131": 5, "2021": 5, "natur": [5, 10], "publish": 5, "uk": 5, "london": 5, "electrodynam": 5, "cqed": 5, "modular": 5, "quasi": 5, "lump": 5, "model": 5, "2103": 5, "10344": 5, "quant": 5, "ph": 5, "yuan": 5, "comparison": 5, "oscil": 5, "ratio": 5, "method": [5, 10], "design": [5, 6, 11, 12], "two": 5, "dimension": 5, "superconduct": 5, "chip": 5, "entropi": 5, "24": 5, "6": 5, "792": 5, "2022": 5, "mdpi": 5, "awslab": 5, "palac": 5, "3d": 5, "finit": 5, "element": [5, 12], "solver": 5, "comput": [5, 12], "electromagnet": 5, "koch": 5, "charg": 5, "insensit": 5, "qubit": [5, 11, 12], "deriv": 5, "cooper": 5, "pair": 5, "box": 5, "physic": 5, "76": 5, "4": [5, 11, 12], "042319": 5, "2007": 5, "ap": 5, "yan": 5, "framework": 5, "optim": 5, "2020": 5, "2006": 5, "04130": 5, "krantz": 5, "": [5, 12], "guid": 5, "appli": 5, "2": [5, 11, 13], "2019": 5, "aip": 5, "groszkowski": 5, "j": 5, "scqubit": 5, "python": [5, 12], "5": 5, "583": 5, "verein": 5, "zur": 5, "f\u00f6rderung": 5, "de": 5, "access": 5, "publizieren": 5, "den": 5, "quantenwissenschaften": 5, "aumann": 5, "circuitq": 5, "toolbox": 5, "9": 5, "093012": 5, "iop": 5, "nois": 5, "suppress": 5, "through": 5, "demand": 5, "caviti": [5, 6], "cool": 5, "control": 5, "bulletin": 5, "american": 5, "societi": 5, "liu": 5, "dissip": 5, "On": [5, 12], "shillito": 5, "dynam": 5, "transmon": 5, "ioniz": 5, "18": 5, "3": [5, 11, 12], "034031": 5, "besedin": 5, "p": 5, "menushenkov": 5, "qualiti": 5, "factor": 5, "transmiss": 5, "line": [5, 12], "coupl": 5, "coplanar": 5, "waveguid": 5, "reson": 5, "epj": 5, "16": 5, "2018": 5, "springeropen": 5, "mcdaniel": 5, "simul": [5, 6, 11, 12], "guidelin": [5, 12], "wideband": 5, "ground": 5, "back": 5, "ieee": 5, "20th": 5, "wireless": 5, "microwav": 5, "confer": 5, "wamicon": 5, "driven": 5, "reset": 5, "2310": 5, "16785": 5, "cond": 5, "mat": 5, "tanamoto": 5, "classic": 5, "spice": 5, "express": 5, "034501": 5, "huang": 5, "machin": [5, 12], "learn": 5, "electron": 5, "autom": 5, "survei": 5, "acm": 5, "transact": 5, "system": 5, "26": 5, "46": 5, "jiang": 5, "deep": 5, "neural": 5, "network": 5, "evalu": 5, "photon": 5, "devic": 5, "materi": 5, "8": [5, 12], "679": 5, "700": 5, "feng": 5, "artifici": 5, "aid": 5, "The": [5, 9, 10, 12], "state": 5, "art": 5, "theori": 5, "techniqu": 5, "70": 5, "11": [5, 11], "4597": 5, "4619": 5, "nov": 5, "nugraha": 5, "shao": 5, "base": [5, 6, 10, 12], "predict": 5, "march": 5, "meet": 5, "la": 5, "vega": 5, "nevada": 5, "10": [5, 12], "virtual": 5, "20": 5, "22": [5, 11], "b73": 5, "00007": 5, "multivalu": 5, "invers": 5, "applic": 5, "filter": 5, "66": 5, "3781": 5, "3797": 5, "aug": 5, "willsch": 5, "observ": 5, "harmon": 5, "tunnel": 5, "junction": 5, "2302": 5, "09192": 5, "sep": 5, "kerman": 5, "effici": 5, "numer": 5, "complex": 5, "2010": 5, "14929": 5, "menk": 5, "Its": 5, "local": [5, 12], "coupler": [5, 6, 11, 12], "mar": 5, "rajabzadeh": 5, "analysi": 5, "arbitrari": 5, "accompani": 5, "sqcircuit": 5, "1118": 5, "mvp": 6, "host": 6, "data": [6, 10], "transmoncross": [6, 11, 12], "claw": 6, "onli": 6, "closest": 6, "interpol": 6, "retriev": [6, 10], "logic": 6, "paper": 6, "tutori": 6, "basic": 6, "usag": 6, "contribut": [6, 8, 10, 13], "ad": 6, "pypi": 6, "creat": [6, 9, 10, 12], "create_mailto_link": [8, 9], "send_email_via_cli": [8, 9], "set_huggingface_api_kei": [8, 9, 11], "check": [8, 10], "squadds_db_config": [8, 10], "dataset_fil": [8, 10], "pi_nam": [8, 9, 10, 12], "api": [8, 9, 10, 11, 12], "token": [8, 9, 10], "dataset_nam": [8, 9, 10, 12], "dataset_link": [8, 9, 10], "check_for_api_kei": [8, 10], "create_dataset_nam": [8, 10], "get_dataset_link": [8, 10], "upload_dataset": [8, 10], "create_dataset_repositori": [8, 10], "upload_dataset_no_valid": [8, 10], "copy_files_to_new_loc": [8, 10], "create_contributor_info": [8, 10, 12], "generate_file_nam": [8, 10], "recipi": 9, "subject": 9, "bodi": 9, "mailto": 9, "link": [9, 10], "given": [9, 10], "list": [9, 10, 12], "email": 9, "address": 9, "str": [9, 10], "return": [9, 10], "type": [9, 10], "date": [9, 10], "send": 9, "notif": 9, "dataset": [9, 10, 11, 12], "name": [9, 10], "where": [9, 10, 12], "princip": [9, 10], "investig": [9, 10], "who": 9, "when": 9, "none": [9, 10], "set": [9, 11, 12], "kei": [9, 10, 11], "append": [9, 12], "file": [9, 10, 11, 12], "alreadi": [9, 10, 11, 12], "exist": [9, 10, 11], "doe": 9, "add": [9, 12], "again": 9, "found": [9, 10, 11, 12], "rais": [9, 10, 12], "valueerror": [9, 10], "object": 10, "helper": 10, "circuit_el": 10, "element_nam": 10, "result_typ": 10, "kwarg": 10, "builderconfig": 10, "squadds_db": [10, 11, 12], "data_fil": 10, "repres": 10, "upload": [10, 11, 12], "pi": [10, 11, 12], "hfapi": 10, "presenc": 10, "uniqu": 10, "without": 10, "compon": 10, "data_typ": 10, "data_natur": 10, "data_sourc": 10, "option": 10, "default": 10, "doesn": 10, "t": [10, 11], "notimplementederror": [10, 12], "data_path": 10, "new_path": 10, "copi": 10, "locat": 10, "contain": 10, "prompt": 10, "user": [10, 11, 12], "updat": [10, 11, 12], "enter": 10, "It": [10, 12], "input": 10, "correspond": 10, "field": [10, 12], "confirm": 10, "whether": 10, "overwrit": 10, "valu": 10, "ar": 10, "empti": 10, "load_ext": [11, 12], "autoreload": [11, 12], "instal": [11, 12], "e": [11, 12], "obtain": [11, 12], "lfl": [11, 12], "prepar": [11, 12], "metadata": [11, 12], "py": [11, 12], "done": [11, 12], "collect": [11, 12], "attempt": [11, 12], "uninstal": [11, 12], "successfulli": [11, 12], "run": [11, 12], "instruct": 11, "here": 11, "sign": 11, "onc": 11, "huggingface_api_kei": 11, "variabl": [11, 12], "execut": [11, 12], "import": [11, 12], "15": [11, 12], "get_dataset_config_nam": 11, "load_dataset": [11, 12], "13": 11, "39": [11, 12], "cap_matrix": [11, 12], "cavity_claw": [11, 12], "routermeand": 11, "eigenmod": [11, 12], "ncap": [11, 12], "qubit_data": 11, "datasetdict": 11, "train": [11, 12], "note": 11, "sim_result": [11, 12], "sim_opt": [11, 12], "num_row": 11, "1934": 11, "28": 11, "print": 11, "nest": 11, "try": 11, "f": [11, 12], "ha": [11, 12], "k": 11, "except": 11, "pass": 11, "design_opt": [11, 12], "design_tool": [11, 12], "date_cr": [11, 12], "claw_to_claw": 11, "claw_to_ground": 11, "cross_to_claw": 11, "cross_to_cross": 11, "cross_to_ground": 11, "ground_to_ground": 11, "unit": [11, 12], "renderer_opt": 11, "86": 12, "extens": 12, "load": 12, "To": 12, "reload": 12, "reload_ext": 12, "14": 12, "tabl": 12, "node": 12, "build": 12, "top": 12, "In": 12, "order": 12, "need": 12, "some": 12, "yourself": 12, "track": 12, "give": 12, "credit": 12, "root": 12, "group_nam": 12, "user_nam": 12, "Or": 12, "cell": 12, "17": 12, "want": 12, "json": 12, "format": 12, "AT": 12, "least": 12, "mani": 12, "supplementari": 12, "design_tool_nam": 12, "sim_setup_opt": 12, "simulator_nam": 12, "result1": 12, "sim_result1": 12, "unit1": 12, "result2": 12, "sim_result2": 12, "unit2": 12, "yyyi": 12, "mm": 12, "dd": 12, "hhmmss": 12, "same": 12, "just": 12, "instead": 12, "repeat": 12, "each": 12, "result": 12, "fork": 12, "do": 12, "so": 12, "checkout": 12, "branch": 12, "might": 12, "b": 12, "add_to_configur": 12, "modifi": 12, "necessari": 12, "sure": 12, "maintain": 12, "specif": 12, "requir": 12, "commit": 12, "push": 12, "chang": 12, "m": 12, "y": 12, "origin": 12, "against": 12, "hub": 12, "command": 12, "your_usernam": 12, "good": 12, "new_configur": 12, "involv": 12, "ones": 12, "librari": 12, "builder": 12, "script": 12, "defin": 12, "clear": 12, "messag": 12, "x": 12, "go": 12, "exampl": 12, "render": 12, "get": [12, 13], "automat": 12, "79": 12, "def": 12, "combine_json_fil": 12, "source_directori": 12, "output_fil": 12, "all_data": 12, "file_path": 12, "glob": 12, "o": 12, "join": 12, "r": 12, "encod": 12, "utf": 12, "write": 12, "combin": 12, "singl": 12, "w": 12, "outfil": 12, "dump": 12, "indent": 12, "80": 12, "replac": 12, "combined_qubit_data": 12, "desir": 12, "output": 12, "81": 12, "combined_coupler_data": 12, "82": 12, "routemeand": 12, "combined_cav": 12, "claw_data": 12, "83": 12, "renam": 12, "lfl_usc_": 12, "hash": 12, "hashlib": 12, "md5": 12, "sort_kei": 12, "true": 12, "hexdigest": 12, "new_fil": 12, "99": 12, "cli": 12, "test": 12, "save_info": 12, "all_config": 12, "info": 12, "cach": 12, "datasets_modul": 12, "6c042e99be0aa47463aa5d9ae2ceeb87b02331a7e2aa159865c27f7b19e9316": 12, "s_qu_adds_db": 12, "download": 12, "100": 12, "00": 12, "lt": 12, "12458": 12, "33it": 12, "took": 12, "min": 12, "checksum": 12, "extract": 12, "853": 12, "43it": 12, "split": 12, "traceback": 12, "most": 12, "recent": 12, "call": 12, "last": 12, "34": 12, "miniconda3": 12, "qiskit_met": 12, "bin": 12, "gt": 12, "sy": 12, "exit": 12, "main": 12, "lib": 12, "python3": 12, "site": 12, "datasets_cli": 12, "servic": 12, "146": 12, "download_and_prepar": 12, "948": 12, "self": 12, "_download_and_prepar": 12, "1043": 12, "_prepare_split": 12, "split_gener": 12, "prepare_split_kwarg": 12, "1445": 12, "96": 12, "random": 12, "create_train_val_test_split": 12, "source_fil": 12, "output_directori": 12, "train_ratio": 12, "val_ratio": 12, "makedir": 12, "extend": 12, "shuffl": 12, "total_data": 12, "len": 12, "train_end": 12, "int": 12, "val_end": 12, "train_data": 12, "val_data": 12, "test_data": 12, "save": 12, "97": 12, "lfl_usc_cavity_claw_3e95ba4a2e4da2141f9edaa9f9fa1653": 12, "lfl_usc_coupler_e7855e5c7467f76edb09779d8f3a1a0c": 12, "lfl_usc_qubit_e68f323df894ba4b2891bd64742a2c35": 12}, "objects": {"": [[8, 0, 0, "-", "squadds"]], "squadds": [[9, 0, 0, "-", "core"], [10, 0, 0, "-", "database"]], "squadds.core": [[9, 0, 0, "-", "globals"], [9, 0, 0, "-", "utils"]], "squadds.core.utils": [[9, 1, 1, "", "create_mailto_link"], [9, 1, 1, "", "send_email_via_client"], [9, 1, 1, "", "set_huggingface_api_key"]], "squadds.database": [[10, 0, 0, "-", "checker"], [10, 0, 0, "-", "config"], [10, 0, 0, "-", "contributor"], [10, 0, 0, "-", "db"], [10, 0, 0, "-", "reader"], [10, 0, 0, "-", "utils"]], "squadds.database.checker": [[10, 2, 1, "", "Checker"]], "squadds.database.checker.Checker": [[10, 3, 1, "", "check"]], "squadds.database.config": [[10, 2, 1, "", "SQuADDS_DB_Config"]], "squadds.database.contributor": [[10, 2, 1, "", "Contribute"]], "squadds.database.contributor.Contribute": [[10, 4, 1, "", "api"], [10, 3, 1, "id1", "check_for_api_key"], [10, 3, 1, "id2", "create_dataset_name"], [10, 3, 1, "id3", "create_dataset_repository"], [10, 4, 1, "id0", "dataset_files"], [10, 4, 1, "", "dataset_link"], [10, 4, 1, "", "dataset_name"], [10, 3, 1, "id4", "get_dataset_link"], [10, 4, 1, "", "institute"], [10, 4, 1, "", "pi_name"], [10, 4, 1, "", "token"], [10, 3, 1, "id5", "upload_dataset"], [10, 3, 1, "id6", "upload_dataset_no_validation"]], "squadds.database.reader": [[10, 2, 1, "", "Reader"]], "squadds.database.utils": [[10, 1, 1, "", "copy_files_to_new_location"], [10, 1, 1, "", "create_contributor_info"], [10, 1, 1, "", "generate_file_name"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method", "4": "py:attribute"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"]}, "titleterms": {"api": 0, "refer": [0, 5], "develop": 1, "note": [1, 6], "contribut": [1, 12], "item": 1, "contributor": [1, 10], "get": [2, 11], "start": [2, 11], "squadd": [2, 3, 4, 8, 9, 10, 11, 12], "instal": 2, "faq": 2, "welcom": 3, "": 3, "document": 3, "overview": 3, "superconduct": 3, "qubit": 3, "And": 3, "devic": 3, "design": 3, "simul": 3, "databas": [3, 10, 12], "citat": 3, "indic": 3, "tabl": 3, "releas": 6, "version": 6, "0": 6, "1": [6, 11], "2023": 6, "12": 6, "20": 6, "setup": [7, 12], "modul": [7, 8, 9, 10], "packag": [8, 9, 10], "subpackag": 8, "content": [8, 9, 10], "core": 9, "submodul": [9, 10], "global": 9, "util": [9, 10], "checker": 10, "config": 10, "db": 10, "reader": 10, "tutori": [11, 12, 13], "huggingfac": 11, "creat": 11, "an": [11, 12], "account": 11, "2": 12, "inform": 12, "understand": 12, "terminologi": 12, "structur": 12, "data": 12, "process": 12, "ad": 12, "exist": 12, "configur": 12, "new": 12}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "nbsphinx": 4, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"API Reference": [[0, "api-reference"]], "Developer Notes": [[1, "developer-notes"]], "Contribution Items": [[1, "contribution-items"]], "Developers": [[1, "developers"]], "Contributors": [[1, "contributors"]], "Getting Started with SQuADDS": [[2, "getting-started-with-squadds"]], "Installation": [[2, "installation"]], "FAQ": [[2, "faq"]], "Welcome to SQuADDS\u2019s documentation!": [[3, "welcome-to-squadds-s-documentation"]], "Overview": [[3, "overview"]], "SQuADDS: a Superconducting Qubit And Device Design and Simulation database": [[3, "squadds-a-superconducting-qubit-and-device-design-and-simulation-database"]], "Citation": [[3, "citation"]], "Indices and tables": [[3, "indices-and-tables"]], "SQuADDS": [[4, "squadds"]], "References": [[5, "references"]], "Release Notes": [[6, "release-notes"]], "Version 0.1.0 (2023-12-20)": [[6, "version-0-1-0-2023-12-20"]], "setup module": [[7, "setup-module"]], "squadds package": [[8, "squadds-package"]], "Subpackages": [[8, "subpackages"]], "Module contents": [[8, "module-squadds"], [9, "module-squadds.core"], [10, "module-squadds.database"]], "squadds.core package": [[9, "squadds-core-package"]], "Submodules": [[9, "submodules"], [10, "submodules"]], "squadds.core.globals module": [[9, "module-squadds.core.globals"]], "squadds.core.utils module": [[9, "module-squadds.core.utils"]], "squadds.database package": [[10, "squadds-database-package"]], "squadds.database.checker module": [[10, "module-squadds.database.checker"]], "squadds.database.config module": [[10, "module-squadds.database.config"]], "squadds.database.contributor module": [[10, "module-squadds.database.contributor"]], "squadds.database.db module": [[10, "module-squadds.database.db"]], "squadds.database.reader module": [[10, "module-squadds.database.reader"]], "squadds.database.utils module": [[10, "module-squadds.database.utils"]], "Tutorial 1: Getting Started with SQuADDS": [[11, "Tutorial-1:-Getting-Started-with-SQuADDS"]], "HuggingFace": [[11, "HuggingFace"]], "Creating an Account": [[11, "Creating-an-Account"]], "Tutorial 2: Contributing to SQuADDS": [[12, "Tutorial-2:-Contributing-to-SQuADDS"]], "Contribution Information Setup": [[12, "Contribution-Information-Setup"]], "Understanding the terminology and database structure": [[12, "Understanding-the-terminology-and-database-structure"]], "Data Processing:": [[12, "Data-Processing:"]], "Adding to an Existing Configuration": [[12, "Adding-to-an-Existing-Configuration"]], "Contributing a New Configuration": [[12, "Contributing-a-New-Configuration"]], "Tutorials": [[13, "tutorials"]]}, "indexentries": {"module": [[8, "module-squadds"], [9, "module-squadds.core"], [9, "module-squadds.core.globals"], [9, "module-squadds.core.utils"], [10, "module-squadds.database"], [10, "module-squadds.database.checker"], [10, "module-squadds.database.config"], [10, "module-squadds.database.contributor"], [10, "module-squadds.database.db"], [10, "module-squadds.database.reader"], [10, "module-squadds.database.utils"]], "squadds": [[8, "module-squadds"]], "create_mailto_link() (in module squadds.core.utils)": [[9, "squadds.core.utils.create_mailto_link"]], "send_email_via_client() (in module squadds.core.utils)": [[9, "squadds.core.utils.send_email_via_client"]], "set_huggingface_api_key() (in module squadds.core.utils)": [[9, "squadds.core.utils.set_huggingface_api_key"]], "squadds.core": [[9, "module-squadds.core"]], "squadds.core.globals": [[9, "module-squadds.core.globals"]], "squadds.core.utils": [[9, "module-squadds.core.utils"]], "checker (class in squadds.database.checker)": [[10, "squadds.database.checker.Checker"]], "contribute (class in squadds.database.contributor)": [[10, "squadds.database.contributor.Contribute"]], "reader (class in squadds.database.reader)": [[10, "squadds.database.reader.Reader"]], "squadds_db_config (class in squadds.database.config)": [[10, "squadds.database.config.SQuADDS_DB_Config"]], "api (squadds.database.contributor.contribute attribute)": [[10, "squadds.database.contributor.Contribute.api"]], "check() (squadds.database.checker.checker method)": [[10, "squadds.database.checker.Checker.check"]], "check_for_api_key() (squadds.database.contributor.contribute method)": [[10, "id1"], [10, "squadds.database.contributor.Contribute.check_for_api_key"]], "copy_files_to_new_location() (in module squadds.database.utils)": [[10, "squadds.database.utils.copy_files_to_new_location"]], "create_contributor_info() (in module squadds.database.utils)": [[10, "squadds.database.utils.create_contributor_info"]], "create_dataset_name() (squadds.database.contributor.contribute method)": [[10, "id2"], [10, "squadds.database.contributor.Contribute.create_dataset_name"]], "create_dataset_repository() (squadds.database.contributor.contribute method)": [[10, "id3"], [10, "squadds.database.contributor.Contribute.create_dataset_repository"]], "dataset_files (squadds.database.contributor.contribute attribute)": [[10, "id0"], [10, "squadds.database.contributor.Contribute.dataset_files"]], "dataset_link (squadds.database.contributor.contribute attribute)": [[10, "squadds.database.contributor.Contribute.dataset_link"]], "dataset_name (squadds.database.contributor.contribute attribute)": [[10, "squadds.database.contributor.Contribute.dataset_name"]], "generate_file_name() (in module squadds.database.utils)": [[10, "squadds.database.utils.generate_file_name"]], "get_dataset_link() (squadds.database.contributor.contribute method)": [[10, "id4"], [10, "squadds.database.contributor.Contribute.get_dataset_link"]], "institute (squadds.database.contributor.contribute attribute)": [[10, "squadds.database.contributor.Contribute.institute"]], "pi_name (squadds.database.contributor.contribute attribute)": [[10, "squadds.database.contributor.Contribute.pi_name"]], "squadds.database": [[10, "module-squadds.database"]], "squadds.database.checker": [[10, "module-squadds.database.checker"]], "squadds.database.config": [[10, "module-squadds.database.config"]], "squadds.database.contributor": [[10, "module-squadds.database.contributor"]], "squadds.database.db": [[10, "module-squadds.database.db"]], "squadds.database.reader": [[10, "module-squadds.database.reader"]], "squadds.database.utils": [[10, "module-squadds.database.utils"]], "token (squadds.database.contributor.contribute attribute)": [[10, "squadds.database.contributor.Contribute.token"]], "upload_dataset() (squadds.database.contributor.contribute method)": [[10, "id5"], [10, "squadds.database.contributor.Contribute.upload_dataset"]], "upload_dataset_no_validation() (squadds.database.contributor.contribute method)": [[10, "id6"], [10, "squadds.database.contributor.Contribute.upload_dataset_no_validation"]]}}) \ No newline at end of file diff --git a/setup.html b/setup.html index e083d65c..3f94ca6b 100644 --- a/setup.html +++ b/setup.html @@ -7,7 +7,10 @@ setup module — SQuADDS 0.1.0 documentation - + + + + @@ -168,6 +171,7 @@

setup module + + + + + diff --git a/squadds.core.html b/squadds.core.html index 24799c9b..b8b979ae 100644 --- a/squadds.core.html +++ b/squadds.core.html @@ -7,7 +7,10 @@ squadds.core package — SQuADDS 0.1.0 documentation - + + + + @@ -155,37 +158,48 @@

Submodules

squadds.core.utils module

+squadds.core.utils.create_mailto_link(recipients, subject, body)[source]

Create a mailto link with the given recipients, subject, and body.

-
-
Args:

recipients (list): A list of email addresses of the recipients. -subject (str): The subject of the email. -body (str): The body of the email.

+
+
Parameters:
+
    +
  • recipients (list) – A list of email addresses of the recipients.

  • +
  • subject (str) – The subject of the email.

  • +
  • body (str) – The body of the email.

  • +
+
+
Returns:
+

The generated mailto link.

-
Returns:

str: The generated mailto link.

+
Return type:
+

str

-squadds.core.utils.send_email_via_client(dataset_name, institute, pi_name, date, dataset_link)
+squadds.core.utils.send_email_via_client(dataset_name, institute, pi_name, date, dataset_link)[source]

Sends an email notification to recipients with the details of the created dataset.

-
-
Args:

dataset_name (str): The name of the dataset. -institute (str): The name of the institute where the dataset was created. -pi_name (str): The name of the principal investigator who created the dataset. -date (str): The date when the dataset was created. -dataset_link (str): The link to the created dataset.

+
+
Parameters:
+
    +
  • dataset_name (str) – The name of the dataset.

  • +
  • institute (str) – The name of the institute where the dataset was created.

  • +
  • pi_name (str) – The name of the principal investigator who created the dataset.

  • +
  • date (str) – The date when the dataset was created.

  • +
  • dataset_link (str) – The link to the created dataset.

  • +
-
Returns:

None

+
Returns:
+

None

-squadds.core.utils.set_huggingface_api_key()
+squadds.core.utils.set_huggingface_api_key()[source]

Sets the Hugging Face API key by appending it to the .env file. If the API key already exists in the .env file, it does not add it again. If the Hugging Face token is not found, it raises a ValueError.

@@ -220,6 +234,7 @@

Submodules + + + + + diff --git a/squadds.database.html b/squadds.database.html index c974a743..b66c60d2 100644 --- a/squadds.database.html +++ b/squadds.database.html @@ -7,7 +7,10 @@ squadds.database package — SQuADDS 0.1.0 documentation - + + + + @@ -152,11 +155,11 @@

Submodules

squadds.database.checker module

-class squadds.database.checker.Checker
+class squadds.database.checker.Checker[source]

Bases: object

-check(file)
+check(file)[source]
@@ -167,7 +170,7 @@

Submodules
-class squadds.database.config.SQuADDS_DB_Config(circuit_element=None, element_name=None, result_type=None, **kwargs)
+class squadds.database.config.SQuADDS_DB_Config(circuit_element=None, element_name=None, result_type=None, **kwargs)[source]

Bases: BuilderConfig

BuilderConfig for SQuADDS_DB.

@@ -177,100 +180,229 @@

Submodules

squadds.database.contributor module

-class squadds.database.contributor.Contribute(data_files)
+class squadds.database.contributor.Contribute(data_files)[source]

Bases: object

Class representing a contributor for dataset creation and upload.

-
-
Attributes:

dataset_files (list): List of dataset file paths. -institute (str): Institution name. -pi_name (str): PI (Principal Investigator) name. -api (HfApi): Hugging Face API object. -token (str): Hugging Face API token. -dataset_name (str): Name of the dataset. -dataset_files (list): List of dataset file paths. -dataset_link (str): Link to the dataset.

+
+
+dataset_files
+

List of dataset file paths.

+
+
Type:
+

list

-
Methods:

check_for_api_key: Checks for the presence of Hugging Face API key. -create_dataset_name: Creates a unique name for the dataset. -get_dataset_link: Retrieves the link to the dataset. -upload_dataset: Uploads the dataset to Hugging Face. -create_dataset_repository: Creates a repository for the dataset on Hugging Face. -upload_dataset_no_validation: Uploads the dataset to Hugging Face without validation.

+
+
+ +
+
+institute
+

Institution name.

+
+
Type:
+

str

+
+
+
+ +
+
+pi_name
+

PI (Principal Investigator) name.

+
+
Type:
+

str

+
+
+
+ +
+
+api
+

Hugging Face API object.

+
+
Type:
+

HfApi

+
+
+
+ +
+
+token
+

Hugging Face API token.

+
+
Type:
+

str

+
+
+
+ +
+
+dataset_name
+

Name of the dataset.

+
+
Type:
+

str

+
+
+
+ +
+
+dataset_files
+

List of dataset file paths.

+
+
Type:
+

list

+
+
+
+ +
+ +

Link to the dataset.

+
+
Type:
+

str

+
+
-check_for_api_key()
+check_for_api_key()[source]

Checks for the presence of Hugging Face API key.

-
-
Returns:

api (HfApi): Hugging Face API object. +

+ +
+
+create_dataset_name()[source]
+

Creates a unique name for the dataset.

+
+ +
+ +

Retrieves the link to the dataset.

+
+ +
+
+upload_dataset()[source]
+

Uploads the dataset to Hugging Face.

+
+ +
+
+create_dataset_repository()[source]
+

Creates a repository for the dataset on Hugging Face.

+
+ +
+
+upload_dataset_no_validation()[source]
+

Uploads the dataset to Hugging Face without validation.

+
+ +
+
+check_for_api_key()[source]
+

Checks for the presence of Hugging Face API key.

+
+
Returns:
+

Hugging Face API object. token (str): Hugging Face API token.

-
Raises:

ValueError: If Hugging Face token is not found.

+
Return type:
+

api (HfApi)

+
+
Raises:
+

ValueError – If Hugging Face token is not found.

-
-create_dataset_name(components, data_type, data_nature, data_source, date=None)
+
+create_dataset_name(components, data_type, data_nature, data_source, date=None)[source]

Creates a unique name for the dataset.

-
-
Args:

components (list): List of components. -data_type (str): Type of the data. -data_nature (str): Nature of the data. -data_source (str): Source of the data. -date (str, optional): Date of the dataset creation. Defaults to None.

+
+
Parameters:
+
    +
  • components (list) – List of components.

  • +
  • data_type (str) – Type of the data.

  • +
  • data_nature (str) – Nature of the data.

  • +
  • data_source (str) – Source of the data.

  • +
  • date (str, optional) – Date of the dataset creation. Defaults to None.

  • +
-
Returns:

str: Unique name for the dataset.

+
Returns:
+

Unique name for the dataset.

+
+
Return type:
+

str

-
-create_dataset_repository(components, data_type, data_nature, data_source)
+
+create_dataset_repository(components, data_type, data_nature, data_source)[source]

Creates a repository for the dataset on HuggingFace (if it doesn’t exist).

-
-
Args:

components (list): List of components. -data_type (str): Type of the data. -data_nature (str): Nature of the data. -data_source (str): Source of the data.

+
+
Parameters:
+
    +
  • components (list) – List of components.

  • +
  • data_type (str) – Type of the data.

  • +
  • data_nature (str) – Nature of the data.

  • +
  • data_source (str) – Source of the data.

  • +
- +
+get_dataset_link()[source]

Retrieves the link to the dataset.

-
-
Returns:

str: Link to the dataset.

+
+
Returns:
+

Link to the dataset.

+
+
Return type:
+

str

-
-upload_dataset()
+
+upload_dataset()[source]

Uploads the dataset to Hugging Face.

-
-
Raises:

NotImplementedError: If dataset upload is not implemented.

+
+
Raises:
+

NotImplementedError – If dataset upload is not implemented.

-
-upload_dataset_no_validation(components, data_type, data_nature, data_source, files, date=None)
+
+upload_dataset_no_validation(components, data_type, data_nature, data_source, files, date=None)[source]

Uploads the dataset to HuggingFace without validation.

-
-
Args:

components (list): List of components. -data_type (str): Type of the data. -data_nature (str): Nature of the data. -data_source (str): Source of the data. -files (list): List of file paths. -date (str, optional): Date of the dataset creation. Defaults to None.

+
+
Parameters:
+
    +
  • components (list) – List of components.

  • +
  • data_type (str) – Type of the data.

  • +
  • data_nature (str) – Nature of the data.

  • +
  • data_source (str) – Source of the data.

  • +
  • files (list) – List of file paths.

  • +
  • date (str, optional) – Date of the dataset creation. Defaults to None.

  • +
@@ -285,7 +417,7 @@

Submodules

squadds.database.reader module

-class squadds.database.reader.Reader(db)
+class squadds.database.reader.Reader(db)[source]

Bases: object

@@ -295,41 +427,52 @@

Submodules
-squadds.database.utils.copy_files_to_new_location(data_path, new_path)
+squadds.database.utils.copy_files_to_new_location(data_path, new_path)[source]

Copy files from the given data path to the new location.

-
-
Args:

data_path (str): The path to the directory containing the files to be copied. -new_path (str): The path to the directory where the files will be copied to.

+
+
Parameters:
+
    +
  • data_path (str) – The path to the directory containing the files to be copied.

  • +
  • new_path (str) – The path to the directory where the files will be copied to.

  • +
-
Returns:

None

+
Returns:
+

None

-
Raises:

None

+
Raises:
+

None

-squadds.database.utils.create_contributor_info()
+squadds.database.utils.create_contributor_info()[source]

Prompt the user for information and update the .env file.

This function prompts the user to enter information such as institution name, group name, PI name, and user name. It then validates the input and updates the corresponding fields in the .env file. If the fields already exist in the .env file, the function prompts the user to confirm whether to overwrite the existing values.

-
-
Raises:

ValueError: If any of the input fields are empty.

+
+
Raises:
+

ValueError – If any of the input fields are empty.

-squadds.database.utils.generate_file_name(data_file)
+squadds.database.utils.generate_file_name(data_file)[source]

Generate a unique file name based on the given data file.

-
-
Args:

data_file (str): The path to the data file.

+
+
Parameters:
+

data_file (str) – The path to the data file.

+
+
Returns:
+

The generated file name.

-
Returns:

str: The generated file name.

+
Return type:
+

str

@@ -361,6 +504,7 @@

Submodulessquadds.database.contributor module @@ -443,6 +601,11 @@

Submodules + + + + + diff --git a/squadds.html b/squadds.html index 34603a61..d627d8bb 100644 --- a/squadds.html +++ b/squadds.html @@ -7,7 +7,10 @@ squadds package — SQuADDS 0.1.0 documentation - + + + + @@ -174,12 +177,26 @@

Subpackagessquadds.database.contributor module @@ -229,6 +246,7 @@

Subpackages + + + + + diff --git a/tutorials/Tutorial-1_getting_started_with_SQuADDS.html b/tutorials/Tutorial-1_getting_started_with_SQuADDS.html index c72a7657..c8107e18 100644 --- a/tutorials/Tutorial-1_getting_started_with_SQuADDS.html +++ b/tutorials/Tutorial-1_getting_started_with_SQuADDS.html @@ -8,6 +8,9 @@ Tutorial 1: Getting Started with SQuADDS — SQuADDS 0.1.0 documentation + + + @@ -144,8 +147,8 @@
[3]:
 
-
%load_ext autoreload
-%autoreload 2
+
%load_ext autoreload
+%autoreload 2
 
@@ -153,7 +156,7 @@
[4]:
 
-
- - - - -
# print all the nested keys of qubit_data["train"][0]
-for key in qubit_data["train"][0].keys():
-    try:
-        print(f"{key} has keys:")
-        for k in qubit_data["train"][0][key].keys():
-            print(f"\t{k}")
-    except:
-        pass
+
# print all the nested keys of qubit_data["train"][0]
+for key in qubit_data["train"][0].keys():
+    try:
+        print(f"{key} has keys:")
+        for k in qubit_data["train"][0][key].keys():
+            print(f"\t{k}")
+    except:
+        pass
 
@@ -335,6 +338,7 @@

Creating an Account + + + + + diff --git a/tutorials/Tutorial-2_Contributing_to_SQuADDS.html b/tutorials/Tutorial-2_Contributing_to_SQuADDS.html index bd94121c..97c1875e 100644 --- a/tutorials/Tutorial-2_Contributing_to_SQuADDS.html +++ b/tutorials/Tutorial-2_Contributing_to_SQuADDS.html @@ -8,6 +8,9 @@ Tutorial 2: Contributing to SQuADDS — SQuADDS 0.1.0 documentation + + + @@ -144,8 +147,8 @@
[86]:
 
-
%load_ext autoreload
-%autoreload 2
+
%load_ext autoreload
+%autoreload 2
 
@@ -162,7 +165,7 @@
[14]:
 
-
- - - - - - - - -
import json
-import random
-import os
+
import json
+import random
+import os
 
-def create_train_val_test_splits(source_files, output_directory, train_ratio=0.7, val_ratio=0.15):
-    """
-    Splits the data from source JSON files into train, validation, and test sets.
-    """
-    if not os.path.exists(output_directory):
-        os.makedirs(output_directory)
+def create_train_val_test_splits(source_files, output_directory, train_ratio=0.7, val_ratio=0.15):
+    """
+    Splits the data from source JSON files into train, validation, and test sets.
+    """
+    if not os.path.exists(output_directory):
+        os.makedirs(output_directory)
 
-    all_data = []
+    all_data = []
 
-    # Load data from all source files
-    for file_path in source_files:
-        with open(file_path, 'r', encoding='utf-8') as file:
-            data = json.load(file)
-            all_data.extend(data)
+    # Load data from all source files
+    for file_path in source_files:
+        with open(file_path, 'r', encoding='utf-8') as file:
+            data = json.load(file)
+            all_data.extend(data)
 
-    # Shuffle the data
-    random.shuffle(all_data)
+    # Shuffle the data
+    random.shuffle(all_data)
 
-    # Split the data
-    total_data = len(all_data)
-    train_end = int(total_data * train_ratio)
-    val_end = train_end + int(total_data * val_ratio)
+    # Split the data
+    total_data = len(all_data)
+    train_end = int(total_data * train_ratio)
+    val_end = train_end + int(total_data * val_ratio)
 
-    train_data = all_data[:train_end]
-    val_data = all_data[train_end:val_end]
-    test_data = all_data[val_end:]
+    train_data = all_data[:train_end]
+    val_data = all_data[train_end:val_end]
+    test_data = all_data[val_end:]
 
-    # Save the splits
-    with open(os.path.join(output_directory, 'train.json'), 'w', encoding='utf-8') as f:
-        json.dump(train_data, f, indent=4)
+    # Save the splits
+    with open(os.path.join(output_directory, 'train.json'), 'w', encoding='utf-8') as f:
+        json.dump(train_data, f, indent=4)
 
-    with open(os.path.join(output_directory, 'validation.json'), 'w', encoding='utf-8') as f:
-        json.dump(val_data, f, indent=4)
+    with open(os.path.join(output_directory, 'validation.json'), 'w', encoding='utf-8') as f:
+        json.dump(val_data, f, indent=4)
 
-    with open(os.path.join(output_directory, 'test.json'), 'w', encoding='utf-8') as f:
-        json.dump(test_data, f, indent=4)
+    with open(os.path.join(output_directory, 'test.json'), 'w', encoding='utf-8') as f:
+        json.dump(test_data, f, indent=4)
 

@@ -510,14 +513,14 @@

Contributing a New Configuration
[97]:
 

-