classiq 0.37.1__py3-none-any.whl → 0.65.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- classiq/__init__.py +49 -34
- classiq/_analyzer_extras/_ipywidgets_async_extension.py +3 -2
- classiq/_analyzer_extras/interactive_hardware.py +3 -3
- classiq/_internals/api_wrapper.py +241 -95
- classiq/_internals/async_utils.py +2 -77
- classiq/_internals/authentication/auth0.py +26 -10
- classiq/_internals/authentication/authentication.py +11 -0
- classiq/_internals/authentication/device.py +18 -8
- classiq/_internals/authentication/password_manager.py +40 -13
- classiq/_internals/authentication/token_manager.py +11 -6
- classiq/_internals/client.py +106 -37
- classiq/_internals/config.py +3 -4
- classiq/_internals/host_checker.py +38 -15
- classiq/_internals/jobs.py +56 -50
- classiq/_internals/type_validation.py +9 -9
- classiq/analyzer/__init__.py +1 -3
- classiq/analyzer/analyzer.py +50 -47
- classiq/analyzer/analyzer_utilities.py +15 -15
- classiq/analyzer/rb.py +19 -20
- classiq/analyzer/show_interactive_hack.py +30 -7
- classiq/analyzer/url_utils.py +2 -3
- classiq/applications/__init__.py +3 -12
- classiq/applications/chemistry/__init__.py +14 -10
- classiq/applications/chemistry/ansatz_parameters.py +4 -4
- classiq/{applications_model_constructors → applications/chemistry}/chemistry_model_constructor.py +170 -170
- classiq/applications/chemistry/ground_state_problem.py +1 -1
- classiq/applications/combinatorial_helpers/allowed_constraints.py +23 -0
- classiq/applications/combinatorial_helpers/arithmetic/arithmetic_expression.py +35 -0
- classiq/applications/combinatorial_helpers/arithmetic/isolation.py +42 -0
- classiq/applications/combinatorial_helpers/combinatorial_problem_utils.py +166 -0
- classiq/applications/combinatorial_helpers/encoding_mapping.py +107 -0
- classiq/applications/combinatorial_helpers/encoding_utils.py +124 -0
- classiq/applications/combinatorial_helpers/memory.py +75 -0
- classiq/applications/combinatorial_helpers/optimization_model.py +193 -0
- classiq/applications/combinatorial_helpers/pauli_helpers/pauli_sparsing.py +31 -0
- classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +46 -0
- classiq/applications/combinatorial_helpers/pyomo_utils.py +447 -0
- classiq/applications/combinatorial_helpers/sympy_utils.py +22 -0
- classiq/applications/combinatorial_helpers/transformations/encoding.py +189 -0
- classiq/applications/combinatorial_helpers/transformations/fixed_variables.py +143 -0
- classiq/applications/combinatorial_helpers/transformations/ising_converter.py +120 -0
- classiq/applications/combinatorial_helpers/transformations/penalty.py +31 -0
- classiq/applications/combinatorial_helpers/transformations/penalty_support.py +37 -0
- classiq/applications/combinatorial_helpers/transformations/sign_seperation.py +74 -0
- classiq/applications/combinatorial_helpers/transformations/slack_variables.py +87 -0
- classiq/applications/combinatorial_optimization/__init__.py +24 -5
- classiq/applications/combinatorial_optimization/combinatorial_optimization_config.py +2 -2
- classiq/applications/combinatorial_optimization/combinatorial_optimization_model_constructor.py +137 -0
- classiq/applications/combinatorial_optimization/combinatorial_problem.py +229 -0
- classiq/applications/combinatorial_optimization/examples/__init__.py +1 -3
- classiq/applications/finance/__init__.py +4 -5
- classiq/{applications_model_constructors → applications/finance}/finance_model_constructor.py +50 -57
- classiq/applications/grover/__init__.py +9 -0
- classiq/applications/grover/grover_model_constructor.py +157 -0
- classiq/applications/hamiltonian/__init__.py +0 -0
- classiq/applications/hamiltonian/pauli_decomposition.py +113 -0
- classiq/applications/libraries/__init__.py +0 -0
- classiq/applications/libraries/qmci_library.py +22 -0
- classiq/applications/qnn/__init__.py +2 -4
- classiq/applications/qnn/circuit_utils.py +8 -8
- classiq/applications/qnn/datasets/__init__.py +9 -11
- classiq/applications/qnn/datasets/dataset_base_classes.py +7 -5
- classiq/applications/qnn/datasets/dataset_not.py +2 -1
- classiq/applications/qnn/datasets/dataset_parity.py +2 -2
- classiq/applications/qnn/gradients/quantum_gradient.py +2 -2
- classiq/applications/qnn/gradients/simple_quantum_gradient.py +2 -1
- classiq/applications/qnn/qlayer.py +30 -10
- classiq/applications/qnn/torch_utils.py +4 -3
- classiq/applications/qnn/types.py +7 -7
- classiq/applications/qsvm/__init__.py +6 -4
- classiq/applications/qsvm/qsvm.py +4 -10
- classiq/applications/qsvm/qsvm_data_generation.py +5 -8
- classiq/{applications_model_constructors → applications/qsvm}/qsvm_model_constructor.py +30 -28
- classiq/execution/__init__.py +8 -3
- classiq/execution/all_hardware_devices.py +11 -0
- classiq/execution/execution_session.py +400 -0
- classiq/execution/iqcc.py +63 -0
- classiq/execution/jobs.py +197 -25
- classiq/execution/qnn.py +79 -0
- classiq/executor.py +23 -117
- classiq/interface/_version.py +1 -1
- classiq/interface/analyzer/analysis_params.py +49 -16
- classiq/interface/analyzer/cytoscape_graph.py +15 -9
- classiq/interface/analyzer/result.py +36 -32
- classiq/interface/applications/qsvm.py +28 -25
- classiq/interface/ast_node.py +16 -0
- classiq/interface/backend/backend_preferences.py +390 -119
- classiq/interface/backend/ionq/ionq_quantum_program.py +15 -23
- classiq/interface/backend/pydantic_backend.py +27 -22
- classiq/interface/backend/quantum_backend_providers.py +70 -16
- classiq/interface/chemistry/fermionic_operator.py +43 -32
- classiq/interface/chemistry/ground_state_problem.py +42 -24
- classiq/interface/chemistry/molecule.py +20 -14
- classiq/interface/chemistry/operator.py +75 -236
- classiq/interface/combinatorial_optimization/encoding_types.py +1 -1
- classiq/interface/combinatorial_optimization/examples/ascending_sequence.py +2 -4
- classiq/interface/combinatorial_optimization/examples/greater_than_ilp.py +1 -1
- classiq/interface/combinatorial_optimization/examples/ilp.py +2 -1
- classiq/interface/combinatorial_optimization/examples/integer_portfolio_optimization.py +2 -4
- classiq/interface/combinatorial_optimization/examples/knapsack.py +3 -3
- classiq/interface/combinatorial_optimization/examples/mds.py +2 -1
- classiq/interface/combinatorial_optimization/examples/mht.py +10 -6
- classiq/interface/combinatorial_optimization/examples/mis.py +4 -1
- classiq/interface/combinatorial_optimization/examples/mvc.py +2 -1
- classiq/interface/combinatorial_optimization/examples/portfolio_variations.py +2 -2
- classiq/interface/combinatorial_optimization/examples/set_cover.py +3 -3
- classiq/interface/combinatorial_optimization/examples/tsp.py +4 -3
- classiq/interface/combinatorial_optimization/examples/tsp_digraph.py +6 -2
- classiq/interface/combinatorial_optimization/mht_qaoa_input.py +14 -9
- classiq/interface/combinatorial_optimization/optimization_problem.py +2 -2
- classiq/interface/combinatorial_optimization/result.py +1 -3
- classiq/interface/combinatorial_optimization/solver_types.py +1 -1
- classiq/interface/debug_info/__init__.py +0 -0
- classiq/interface/debug_info/debug_info.py +86 -0
- classiq/interface/exceptions.py +201 -0
- classiq/interface/execution/iqcc.py +19 -0
- classiq/interface/execution/jobs.py +15 -12
- classiq/interface/execution/primitives.py +18 -0
- classiq/interface/executor/constants.py +1 -0
- classiq/interface/executor/estimation.py +2 -2
- classiq/interface/executor/execution_preferences.py +26 -143
- classiq/interface/executor/execution_request.py +36 -56
- classiq/interface/executor/execution_result.py +30 -8
- classiq/interface/executor/iqae_result.py +4 -6
- classiq/interface/executor/optimizer_preferences.py +34 -22
- classiq/interface/executor/{quantum_program.py → quantum_code.py} +44 -34
- classiq/interface/executor/quantum_instruction_set.py +3 -2
- classiq/interface/executor/register_initialization.py +12 -17
- classiq/interface/executor/result.py +122 -64
- classiq/interface/executor/vqe_result.py +11 -11
- classiq/interface/finance/function_input.py +42 -19
- classiq/interface/finance/gaussian_model_input.py +7 -5
- classiq/interface/finance/log_normal_model_input.py +6 -4
- classiq/interface/finance/model_input.py +6 -4
- classiq/interface/generator/adjacency.py +1 -3
- classiq/interface/generator/amplitude_loading.py +27 -14
- classiq/interface/generator/ansatz_library.py +5 -5
- classiq/interface/generator/application_apis/__init__.py +1 -0
- classiq/interface/generator/application_apis/arithmetic_declarations.py +17 -0
- classiq/interface/generator/application_apis/chemistry_declarations.py +27 -187
- classiq/interface/generator/application_apis/combinatorial_optimization_declarations.py +18 -21
- classiq/interface/generator/application_apis/entangler_declarations.py +11 -6
- classiq/interface/generator/application_apis/finance_declarations.py +48 -69
- classiq/interface/generator/application_apis/qsvm_declarations.py +0 -70
- classiq/interface/generator/arith/argument_utils.py +57 -6
- classiq/interface/generator/arith/arithmetic.py +37 -16
- classiq/interface/generator/arith/arithmetic_arg_type_validator.py +15 -17
- classiq/interface/generator/arith/arithmetic_expression_abc.py +70 -26
- classiq/interface/generator/arith/arithmetic_expression_parser.py +18 -12
- classiq/interface/generator/arith/arithmetic_expression_validator.py +61 -43
- classiq/interface/generator/arith/arithmetic_operations.py +19 -16
- classiq/interface/generator/arith/arithmetic_param_getters.py +7 -8
- classiq/interface/generator/arith/arithmetic_result_builder.py +21 -17
- classiq/interface/generator/arith/ast_node_rewrite.py +4 -3
- classiq/interface/generator/arith/binary_ops.py +375 -139
- classiq/interface/generator/arith/endianness.py +1 -1
- classiq/interface/generator/arith/extremum_operations.py +96 -23
- classiq/interface/generator/arith/logical_ops.py +16 -12
- classiq/interface/generator/arith/machine_precision.py +3 -0
- classiq/interface/generator/arith/number_utils.py +44 -48
- classiq/interface/generator/arith/register_user_input.py +70 -27
- classiq/interface/generator/arith/unary_ops.py +57 -46
- classiq/interface/generator/arith/uncomputation_methods.py +1 -1
- classiq/interface/generator/builtin_api_builder.py +2 -9
- classiq/interface/generator/chemistry_function_params.py +5 -5
- classiq/interface/generator/circuit_code/circuit_code.py +7 -7
- classiq/interface/generator/circuit_code/types_and_constants.py +4 -7
- classiq/interface/generator/commuting_pauli_exponentiation.py +8 -6
- classiq/interface/generator/compiler_keywords.py +8 -0
- classiq/interface/generator/complex_type.py +13 -25
- classiq/interface/generator/constant.py +3 -4
- classiq/interface/generator/control_state.py +35 -28
- classiq/interface/generator/copy.py +47 -0
- classiq/interface/generator/custom_ansatz.py +2 -5
- classiq/interface/generator/distance.py +3 -5
- classiq/interface/generator/excitations.py +3 -2
- classiq/interface/generator/expressions/atomic_expression_functions.py +26 -8
- classiq/interface/generator/expressions/enums/__init__.py +0 -10
- classiq/interface/generator/expressions/enums/finance_functions.py +12 -22
- classiq/interface/generator/expressions/evaluated_expression.py +21 -7
- classiq/interface/generator/expressions/expression.py +27 -15
- classiq/interface/generator/expressions/expression_constants.py +9 -3
- classiq/interface/generator/expressions/non_symbolic_expr.py +119 -0
- classiq/interface/generator/expressions/qmod_qarray_proxy.py +99 -0
- classiq/interface/generator/expressions/qmod_qscalar_proxy.py +59 -0
- classiq/interface/generator/expressions/qmod_qstruct_proxy.py +36 -0
- classiq/interface/generator/expressions/qmod_sized_proxy.py +30 -2
- classiq/interface/generator/expressions/qmod_struct_instance.py +14 -2
- classiq/interface/generator/expressions/sympy_supported_expressions.py +20 -11
- classiq/interface/generator/finance.py +3 -3
- classiq/interface/generator/function_param_library.py +6 -6
- classiq/interface/generator/function_param_list_without_self_reference.py +2 -10
- classiq/interface/generator/function_params.py +42 -69
- classiq/interface/generator/functions/__init__.py +0 -22
- classiq/interface/generator/functions/builtins/__init__.py +0 -0
- classiq/interface/generator/functions/builtins/internal_operators.py +16 -0
- classiq/interface/generator/functions/classical_function_declaration.py +18 -9
- classiq/interface/generator/functions/classical_type.py +47 -166
- classiq/interface/generator/functions/concrete_types.py +55 -0
- classiq/interface/generator/functions/function_declaration.py +13 -14
- classiq/interface/generator/functions/port_declaration.py +1 -13
- classiq/interface/generator/functions/qmod_python_interface.py +2 -1
- classiq/interface/generator/functions/type_name.py +90 -0
- classiq/interface/generator/generated_circuit_data.py +155 -22
- classiq/interface/generator/grover_diffuser.py +32 -25
- classiq/interface/generator/grover_operator.py +34 -23
- classiq/interface/generator/hamiltonian_evolution/exponentiation.py +4 -6
- classiq/interface/generator/hamiltonian_evolution/qdrift.py +4 -4
- classiq/interface/generator/hamiltonian_evolution/suzuki_trotter.py +12 -8
- classiq/interface/generator/hardware/hardware_data.py +76 -36
- classiq/interface/generator/hardware_efficient_ansatz.py +38 -17
- classiq/interface/generator/hartree_fock.py +14 -4
- classiq/interface/generator/identity.py +10 -6
- classiq/interface/generator/linear_pauli_rotations.py +33 -19
- classiq/interface/generator/mcmt_method.py +1 -1
- classiq/interface/generator/mcu.py +20 -16
- classiq/interface/generator/mcx.py +29 -20
- classiq/interface/generator/model/__init__.py +2 -5
- classiq/interface/generator/model/constraints.py +27 -8
- classiq/interface/generator/model/model.py +32 -203
- classiq/interface/generator/model/preferences/preferences.py +118 -43
- classiq/{quantum_register.py → interface/generator/model/quantum_register.py} +27 -22
- classiq/interface/generator/oracles/arithmetic_oracle.py +2 -4
- classiq/interface/generator/oracles/custom_oracle.py +17 -13
- classiq/interface/generator/oracles/oracle_abc.py +9 -9
- classiq/interface/generator/partitioned_register.py +7 -7
- classiq/interface/generator/piecewise_linear_amplitude_loading.py +45 -29
- classiq/interface/generator/preferences/optimization.py +1 -2
- classiq/interface/generator/qpe.py +47 -34
- classiq/interface/generator/qsvm.py +13 -17
- classiq/interface/generator/quantum_function_call.py +107 -87
- classiq/interface/generator/{generated_circuit.py → quantum_program.py} +50 -37
- classiq/interface/generator/range_types.py +13 -12
- classiq/interface/generator/register_role.py +18 -6
- classiq/interface/generator/slice_parsing_utils.py +11 -6
- classiq/interface/generator/standard_gates/controlled_standard_gates.py +32 -39
- classiq/interface/generator/standard_gates/standard_angle_metaclass.py +2 -6
- classiq/interface/generator/standard_gates/standard_gates.py +3 -3
- classiq/interface/generator/standard_gates/u_gate.py +7 -10
- classiq/interface/generator/state_preparation/bell_state_preparation.py +3 -3
- classiq/interface/generator/state_preparation/computational_basis_state_preparation.py +2 -1
- classiq/interface/generator/state_preparation/distributions.py +16 -15
- classiq/interface/generator/state_preparation/metrics.py +5 -7
- classiq/interface/generator/state_preparation/state_preparation.py +30 -23
- classiq/interface/generator/synthesis_metadata/synthesis_duration.py +0 -4
- classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +20 -6
- classiq/interface/generator/transpiler_basis_gates.py +7 -3
- classiq/interface/generator/types/builtin_enum_declarations.py +178 -0
- classiq/interface/generator/types/compilation_metadata.py +6 -0
- classiq/interface/generator/types/enum_declaration.py +54 -0
- classiq/interface/generator/types/qstruct_declaration.py +18 -0
- classiq/interface/generator/types/struct_declaration.py +15 -14
- classiq/interface/generator/ucc.py +9 -6
- classiq/interface/generator/unitary_gate.py +10 -6
- classiq/interface/generator/user_defined_function_params.py +4 -1
- classiq/interface/generator/validations/flow_graph.py +11 -9
- classiq/interface/generator/validations/validator_functions.py +8 -6
- classiq/interface/generator/visitor.py +23 -16
- classiq/interface/hardware.py +31 -10
- classiq/interface/helpers/classproperty.py +8 -0
- classiq/interface/helpers/custom_encoders.py +3 -0
- classiq/interface/helpers/custom_pydantic_types.py +40 -50
- classiq/interface/helpers/datastructures.py +26 -0
- classiq/interface/helpers/hashable_mixin.py +3 -2
- classiq/interface/helpers/hashable_pydantic_base_model.py +2 -1
- classiq/interface/helpers/pydantic_model_helpers.py +7 -11
- classiq/interface/helpers/validation_helpers.py +4 -21
- classiq/interface/helpers/versioned_model.py +1 -1
- classiq/interface/ide/ide_data.py +16 -20
- classiq/interface/ide/visual_model.py +130 -0
- classiq/interface/interface_version.py +1 -0
- classiq/interface/jobs.py +35 -6
- classiq/interface/model/allocate.py +16 -0
- classiq/interface/model/bind_operation.py +44 -14
- classiq/interface/model/classical_if.py +15 -0
- classiq/interface/model/classical_parameter_declaration.py +33 -3
- classiq/interface/model/control.py +45 -0
- classiq/interface/model/handle_binding.py +298 -20
- classiq/interface/model/inplace_binary_operation.py +31 -26
- classiq/interface/model/invert.py +12 -0
- classiq/interface/model/model.py +87 -73
- classiq/interface/model/native_function_definition.py +16 -21
- classiq/interface/model/parameter.py +13 -0
- classiq/interface/model/phase_operation.py +11 -0
- classiq/interface/model/port_declaration.py +27 -9
- classiq/interface/model/power.py +14 -0
- classiq/interface/model/quantum_expressions/amplitude_loading_operation.py +38 -21
- classiq/interface/model/quantum_expressions/arithmetic_operation.py +51 -14
- classiq/interface/model/quantum_expressions/quantum_expression.py +12 -35
- classiq/interface/model/quantum_function_call.py +146 -462
- classiq/interface/model/quantum_function_declaration.py +193 -152
- classiq/interface/model/quantum_lambda_function.py +65 -0
- classiq/interface/model/quantum_statement.py +71 -12
- classiq/interface/model/quantum_type.py +205 -67
- classiq/interface/model/quantum_variable_declaration.py +4 -26
- classiq/interface/model/repeat.py +15 -0
- classiq/interface/model/statement_block.py +58 -0
- classiq/interface/model/validation_handle.py +13 -6
- classiq/interface/model/variable_declaration_statement.py +3 -1
- classiq/interface/model/within_apply_operation.py +13 -0
- classiq/interface/pyomo_extension/pyomo_sympy_bimap.py +4 -1
- classiq/interface/server/global_versions.py +6 -7
- classiq/interface/server/routes.py +22 -21
- classiq/interface/source_reference.py +59 -0
- classiq/model_expansions/__init__.py +0 -0
- classiq/model_expansions/atomic_expression_functions_defs.py +253 -0
- classiq/model_expansions/capturing/__init__.py +0 -0
- classiq/model_expansions/capturing/captured_vars.py +435 -0
- classiq/model_expansions/capturing/mangling_utils.py +56 -0
- classiq/model_expansions/closure.py +171 -0
- classiq/model_expansions/debug_flag.py +3 -0
- classiq/model_expansions/evaluators/__init__.py +0 -0
- classiq/model_expansions/evaluators/arg_type_match.py +158 -0
- classiq/model_expansions/evaluators/argument_types.py +42 -0
- classiq/model_expansions/evaluators/classical_expression.py +36 -0
- classiq/model_expansions/evaluators/control.py +144 -0
- classiq/model_expansions/evaluators/parameter_types.py +226 -0
- classiq/model_expansions/evaluators/quantum_type_utils.py +239 -0
- classiq/model_expansions/evaluators/type_type_match.py +90 -0
- classiq/model_expansions/expression_evaluator.py +135 -0
- classiq/model_expansions/expression_renamer.py +76 -0
- classiq/model_expansions/function_builder.py +247 -0
- classiq/model_expansions/generative_functions.py +158 -0
- classiq/model_expansions/interpreters/__init__.py +0 -0
- classiq/model_expansions/interpreters/base_interpreter.py +263 -0
- classiq/model_expansions/interpreters/frontend_generative_interpreter.py +28 -0
- classiq/model_expansions/interpreters/generative_interpreter.py +249 -0
- classiq/model_expansions/model_tables.py +18 -0
- classiq/model_expansions/quantum_operations/__init__.py +9 -0
- classiq/model_expansions/quantum_operations/bind.py +60 -0
- classiq/model_expansions/quantum_operations/call_emitter.py +266 -0
- classiq/model_expansions/quantum_operations/classicalif.py +53 -0
- classiq/model_expansions/quantum_operations/declarative_call_emitter.py +87 -0
- classiq/model_expansions/quantum_operations/emitter.py +181 -0
- classiq/model_expansions/quantum_operations/quantum_function_call.py +33 -0
- classiq/model_expansions/quantum_operations/repeat.py +56 -0
- classiq/model_expansions/quantum_operations/shallow_emitter.py +180 -0
- classiq/model_expansions/quantum_operations/variable_decleration.py +28 -0
- classiq/model_expansions/scope.py +240 -0
- classiq/model_expansions/scope_initialization.py +150 -0
- classiq/model_expansions/sympy_conversion/__init__.py +0 -0
- classiq/model_expansions/sympy_conversion/arithmetics.py +49 -0
- classiq/model_expansions/sympy_conversion/expression_to_sympy.py +179 -0
- classiq/model_expansions/sympy_conversion/sympy_to_python.py +123 -0
- classiq/model_expansions/transformers/__init__.py +0 -0
- classiq/model_expansions/transformers/ast_renamer.py +26 -0
- classiq/model_expansions/transformers/var_splitter.py +299 -0
- classiq/model_expansions/utils/__init__.py +0 -0
- classiq/model_expansions/utils/counted_name_allocator.py +11 -0
- classiq/model_expansions/utils/handles_collector.py +33 -0
- classiq/model_expansions/visitors/__init__.py +0 -0
- classiq/model_expansions/visitors/boolean_expression_transformers.py +214 -0
- classiq/model_expansions/visitors/variable_references.py +144 -0
- classiq/open_library/__init__.py +4 -0
- classiq/open_library/functions/__init__.py +130 -0
- classiq/open_library/functions/amplitude_estimation.py +30 -0
- classiq/open_library/functions/discrete_sine_cosine_transform.py +181 -0
- classiq/open_library/functions/grover.py +157 -0
- classiq/open_library/functions/hea.py +115 -0
- classiq/open_library/functions/linear_pauli_rotation.py +82 -0
- classiq/open_library/functions/modular_exponentiation.py +201 -0
- classiq/open_library/functions/qaoa_penalty.py +117 -0
- classiq/open_library/functions/qft_functions.py +54 -0
- classiq/open_library/functions/qpe.py +46 -0
- classiq/open_library/functions/qsvt.py +331 -0
- classiq/open_library/functions/state_preparation.py +301 -0
- classiq/open_library/functions/swap_test.py +27 -0
- classiq/open_library/functions/utility_functions.py +81 -0
- classiq/open_library/functions/variational.py +52 -0
- classiq/qmod/__init__.py +17 -10
- classiq/qmod/builtins/__init__.py +19 -2
- classiq/qmod/builtins/classical_execution_primitives.py +60 -47
- classiq/qmod/builtins/classical_functions.py +44 -38
- classiq/qmod/builtins/constants.py +10 -0
- classiq/qmod/builtins/enums.py +208 -0
- classiq/qmod/builtins/functions/__init__.py +137 -0
- classiq/qmod/builtins/functions/allocation.py +150 -0
- classiq/qmod/builtins/functions/arithmetic.py +55 -0
- classiq/qmod/builtins/functions/benchmarking.py +8 -0
- classiq/qmod/builtins/functions/chemistry.py +91 -0
- classiq/qmod/builtins/functions/exponentiation.py +105 -0
- classiq/qmod/builtins/functions/finance.py +34 -0
- classiq/qmod/builtins/functions/operators.py +16 -0
- classiq/qmod/builtins/functions/qsvm.py +24 -0
- classiq/qmod/builtins/functions/standard_gates.py +651 -0
- classiq/qmod/builtins/operations.py +379 -57
- classiq/qmod/builtins/structs.py +103 -80
- classiq/qmod/cfunc.py +42 -0
- classiq/qmod/classical_function.py +8 -20
- classiq/qmod/cparam.py +64 -0
- classiq/qmod/create_model_function.py +56 -0
- classiq/qmod/declaration_inferrer.py +145 -112
- classiq/qmod/expression_query.py +39 -0
- classiq/qmod/generative.py +42 -0
- classiq/qmod/model_state_container.py +19 -5
- classiq/qmod/native/__init__.py +7 -0
- classiq/qmod/native/expression_to_qmod.py +194 -0
- classiq/qmod/native/pretty_printer.py +401 -0
- classiq/qmod/pretty_print/__init__.py +7 -0
- classiq/qmod/pretty_print/expression_to_python.py +222 -0
- classiq/qmod/pretty_print/pretty_printer.py +572 -0
- classiq/qmod/python_classical_type.py +67 -0
- classiq/qmod/qfunc.py +79 -0
- classiq/qmod/qmod_constant.py +143 -0
- classiq/qmod/qmod_parameter.py +84 -53
- classiq/qmod/qmod_variable.py +497 -100
- classiq/qmod/quantum_callable.py +17 -7
- classiq/qmod/quantum_expandable.py +278 -105
- classiq/qmod/quantum_function.py +232 -48
- classiq/qmod/semantics/__init__.py +0 -0
- classiq/qmod/semantics/annotation/__init__.py +0 -0
- classiq/qmod/semantics/annotation/call_annotation.py +92 -0
- classiq/qmod/semantics/annotation/qstruct_annotator.py +23 -0
- classiq/qmod/semantics/error_manager.py +88 -0
- classiq/qmod/semantics/lambdas.py +25 -0
- classiq/qmod/semantics/static_semantics_visitor.py +384 -0
- classiq/qmod/semantics/validation/__init__.py +0 -0
- classiq/qmod/semantics/validation/constants_validation.py +16 -0
- classiq/qmod/semantics/validation/func_call_validation.py +99 -0
- classiq/qmod/semantics/validation/function_name_collisions_validation.py +23 -0
- classiq/qmod/semantics/validation/handle_validation.py +85 -0
- classiq/qmod/semantics/validation/main_validation.py +33 -0
- classiq/qmod/semantics/validation/types_validation.py +128 -0
- classiq/qmod/symbolic.py +178 -111
- classiq/qmod/symbolic_expr.py +36 -12
- classiq/qmod/symbolic_type.py +2 -5
- classiq/qmod/type_attribute_remover.py +32 -0
- classiq/qmod/utilities.py +108 -1
- classiq/qmod/write_qmod.py +53 -0
- classiq/synthesis.py +210 -22
- {classiq-0.37.1.dist-info → classiq-0.65.3.dist-info}/METADATA +16 -8
- classiq-0.65.3.dist-info/RECORD +521 -0
- {classiq-0.37.1.dist-info → classiq-0.65.3.dist-info}/WHEEL +1 -1
- classiq/_internals/_qfunc_ext.py +0 -6
- classiq/applications/benchmarking/__init__.py +0 -9
- classiq/applications/benchmarking/mirror_benchmarking.py +0 -67
- classiq/applications/numpy_utils.py +0 -37
- classiq/applications_model_constructors/__init__.py +0 -17
- classiq/applications_model_constructors/combinatorial_optimization_model_constructor.py +0 -178
- classiq/applications_model_constructors/grover_model_constructor.py +0 -227
- classiq/applications_model_constructors/libraries/ampltitude_estimation_library.py +0 -11
- classiq/applications_model_constructors/libraries/qmci_library.py +0 -109
- classiq/builtin_functions/__init__.py +0 -43
- classiq/builtin_functions/amplitude_loading.py +0 -3
- classiq/builtin_functions/binary_ops.py +0 -1
- classiq/builtin_functions/exponentiation.py +0 -5
- classiq/builtin_functions/qpe.py +0 -4
- classiq/builtin_functions/qsvm.py +0 -7
- classiq/builtin_functions/range_types.py +0 -5
- classiq/builtin_functions/standard_gates.py +0 -1
- classiq/builtin_functions/state_preparation.py +0 -6
- classiq/builtin_functions/suzuki_trotter.py +0 -3
- classiq/exceptions.py +0 -131
- classiq/interface/executor/aws_execution_cost.py +0 -72
- classiq/interface/executor/error_mitigation.py +0 -6
- classiq/interface/generator/credit_risk_example/linear_gci.py +0 -115
- classiq/interface/generator/credit_risk_example/weighted_adder.py +0 -59
- classiq/interface/generator/expressions/enums/chemistry.py +0 -28
- classiq/interface/generator/expressions/enums/classical_enum.py +0 -5
- classiq/interface/generator/expressions/enums/ladder_operator.py +0 -16
- classiq/interface/generator/expressions/enums/optimizers.py +0 -9
- classiq/interface/generator/expressions/enums/pauli.py +0 -8
- classiq/interface/generator/expressions/enums/qsvm_feature_map_entanglement.py +0 -9
- classiq/interface/generator/expressions/qmod_qnum_proxy.py +0 -22
- classiq/interface/generator/functions/core_lib_declarations/quantum_functions/__init__.py +0 -18
- classiq/interface/generator/functions/core_lib_declarations/quantum_functions/atomic_quantum_functions.py +0 -641
- classiq/interface/generator/functions/core_lib_declarations/quantum_functions/exponentiation_functions.py +0 -89
- classiq/interface/generator/functions/core_lib_declarations/quantum_functions/std_lib_functions.py +0 -862
- classiq/interface/generator/functions/core_lib_declarations/quantum_operators.py +0 -169
- classiq/interface/generator/functions/foreign_function_definition.py +0 -106
- classiq/interface/generator/functions/function_implementation.py +0 -103
- classiq/interface/generator/functions/native_function_definition.py +0 -153
- classiq/interface/generator/functions/quantum_function_declaration.py +0 -69
- classiq/interface/generator/functions/register.py +0 -42
- classiq/interface/generator/functions/register_mapping_data.py +0 -102
- classiq/interface/generator/inequality_mixer.py +0 -51
- classiq/interface/generator/model/classical_main_validator.py +0 -106
- classiq/interface/generator/range_mixer.py +0 -56
- classiq/interface/generator/state_propagator.py +0 -63
- classiq/interface/generator/types/builtin_struct_declarations/__init__.py +0 -2
- classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +0 -22
- classiq/interface/generator/types/builtin_struct_declarations/qaoa_declarations.py +0 -23
- classiq/interface/generator/types/combinatorial_problem.py +0 -26
- classiq/interface/ide/show.py +0 -34
- classiq/interface/model/common_model_types.py +0 -23
- classiq/interface/model/numeric_reinterpretation.py +0 -25
- classiq/interface/model/operator_synthesis_data.py +0 -48
- classiq/interface/model/quantum_expressions/control_state.py +0 -38
- classiq/interface/model/quantum_if_operation.py +0 -95
- classiq/interface/model/resolvers/function_call_resolver.py +0 -43
- classiq/interface/model/validations/handle_validation_base.py +0 -55
- classiq/interface/model/validations/handles_validator.py +0 -154
- classiq/interface/model/validations/port_to_wire_name_generator.py +0 -12
- classiq/model/__init__.py +0 -14
- classiq/model/composite_function_generator.py +0 -33
- classiq/model/function_handler.py +0 -466
- classiq/model/function_handler.pyi +0 -152
- classiq/model/logic_flow.py +0 -149
- classiq/model/logic_flow_change_handler.py +0 -71
- classiq/model/model.py +0 -246
- classiq/qmod/builtins/functions.py +0 -896
- classiq/qmod/qmod_struct.py +0 -37
- classiq/quantum_functions/__init__.py +0 -17
- classiq/quantum_functions/annotation_parser.py +0 -207
- classiq/quantum_functions/decorators.py +0 -22
- classiq/quantum_functions/function_library.py +0 -181
- classiq/quantum_functions/function_parser.py +0 -74
- classiq/quantum_functions/quantum_function.py +0 -236
- classiq-0.37.1.dist-info/RECORD +0 -418
- /classiq/{applications_model_constructors/libraries → applications/combinatorial_helpers}/__init__.py +0 -0
- /classiq/{interface/generator/credit_risk_example → applications/combinatorial_helpers/arithmetic}/__init__.py +0 -0
- /classiq/{interface/generator/functions/core_lib_declarations → applications/combinatorial_helpers/pauli_helpers}/__init__.py +0 -0
- /classiq/{interface/generator/functions/core_lib_declarations/quantum_functions/chemistry_functions.py → applications/combinatorial_helpers/py.typed} +0 -0
- /classiq/{interface/model/resolvers → applications/combinatorial_helpers/solvers}/__init__.py +0 -0
- /classiq/{interface/model/validations → applications/combinatorial_helpers/transformations}/__init__.py +0 -0
- /classiq/{_internals → interface}/enum_utils.py +0 -0
@@ -1,466 +0,0 @@
|
|
1
|
-
import abc
|
2
|
-
import collections.abc
|
3
|
-
import functools
|
4
|
-
from typing import (
|
5
|
-
Any,
|
6
|
-
Callable,
|
7
|
-
Collection,
|
8
|
-
Dict,
|
9
|
-
Iterable,
|
10
|
-
List,
|
11
|
-
Mapping,
|
12
|
-
Optional,
|
13
|
-
Tuple,
|
14
|
-
Union,
|
15
|
-
cast,
|
16
|
-
)
|
17
|
-
|
18
|
-
from classiq.interface.generator import function_param_list, function_params
|
19
|
-
from classiq.interface.generator.control_state import ControlState
|
20
|
-
from classiq.interface.generator.function_params import IOName, PortDirection
|
21
|
-
from classiq.interface.generator.functions.port_declaration import (
|
22
|
-
PortDeclarationDirection,
|
23
|
-
SynthesisPortDeclaration,
|
24
|
-
)
|
25
|
-
from classiq.interface.generator.identity import Identity
|
26
|
-
from classiq.interface.generator.quantum_function_call import (
|
27
|
-
SynthesisQuantumFunctionCall,
|
28
|
-
WireName,
|
29
|
-
)
|
30
|
-
from classiq.interface.generator.slice_parsing_utils import parse_io_slicing
|
31
|
-
from classiq.interface.generator.user_defined_function_params import CustomFunction
|
32
|
-
|
33
|
-
from classiq.exceptions import ClassiqValueError, ClassiqWiringError
|
34
|
-
from classiq.model import logic_flow_change_handler
|
35
|
-
from classiq.model.logic_flow import LogicFlowBuilder
|
36
|
-
from classiq.quantum_functions.function_library import (
|
37
|
-
FunctionLibrary,
|
38
|
-
QuantumFunction,
|
39
|
-
SynthesisQuantumFunctionDeclaration,
|
40
|
-
)
|
41
|
-
from classiq.quantum_register import QReg, QRegGenericAlias
|
42
|
-
|
43
|
-
SupportedInputArgs = Union[
|
44
|
-
Mapping[IOName, QReg],
|
45
|
-
Collection[QReg],
|
46
|
-
QReg,
|
47
|
-
]
|
48
|
-
|
49
|
-
WireNameDict = Dict[IOName, WireName]
|
50
|
-
|
51
|
-
_SAME_INPUT_NAME_ERROR_MSG: str = "Cannot create multiple inputs with the same name"
|
52
|
-
_INPUT_AS_OUTPUT_ERROR_MSG: str = "Can't connect input directly to output"
|
53
|
-
ILLEGAL_INPUT_OR_SLICING_ERROR_MSG: str = "is not a valid input name/slice"
|
54
|
-
ILLEGAL_OUTPUT_ERROR_MSG: str = "Illegal output provided"
|
55
|
-
|
56
|
-
ASSIGNED = "_assigned_"
|
57
|
-
|
58
|
-
|
59
|
-
def _get_identity_call_name(name: str, io: PortDirection) -> str:
|
60
|
-
return f"{name}_{io.value}_Identity"
|
61
|
-
|
62
|
-
|
63
|
-
class FunctionHandler(abc.ABC):
|
64
|
-
def __init__(self) -> None:
|
65
|
-
self._function_library: Optional[FunctionLibrary] = None
|
66
|
-
self._port_declarations: Dict[IOName, SynthesisPortDeclaration] = dict()
|
67
|
-
self._external_port_wiring: Dict[PortDirection, WireNameDict] = {
|
68
|
-
PortDirection.Input: dict(),
|
69
|
-
PortDirection.Output: dict(),
|
70
|
-
}
|
71
|
-
self._generated_qregs: Dict[IOName, QReg] = dict()
|
72
|
-
self._logic_flow_builder: LogicFlowBuilder = LogicFlowBuilder()
|
73
|
-
|
74
|
-
@property
|
75
|
-
def input_wires(self) -> WireNameDict:
|
76
|
-
return self._external_port_wiring[PortDirection.Input]
|
77
|
-
|
78
|
-
@property
|
79
|
-
def output_wires(self) -> WireNameDict:
|
80
|
-
return self._external_port_wiring[PortDirection.Output]
|
81
|
-
|
82
|
-
def _verify_unique_inputs(self, input_names: Iterable[IOName]) -> None:
|
83
|
-
input_port_declarations = {
|
84
|
-
name: port_declaration
|
85
|
-
for name, port_declaration in self._port_declarations.items()
|
86
|
-
if port_declaration.direction.is_input
|
87
|
-
}
|
88
|
-
if not input_port_declarations.keys().isdisjoint(input_names):
|
89
|
-
raise ClassiqWiringError(_SAME_INPUT_NAME_ERROR_MSG)
|
90
|
-
|
91
|
-
def _verify_no_inputs_as_outputs(self, output_qregs: Iterable[QReg]) -> None:
|
92
|
-
for qreg in output_qregs:
|
93
|
-
if any(
|
94
|
-
qreg.isoverlapping(gen_qreg)
|
95
|
-
for gen_qreg in self._generated_qregs.values()
|
96
|
-
):
|
97
|
-
raise ClassiqWiringError(f"{_INPUT_AS_OUTPUT_ERROR_MSG} {qreg}")
|
98
|
-
|
99
|
-
@staticmethod
|
100
|
-
def _parse_control_states(
|
101
|
-
control_states: Optional[Union[ControlState, Iterable[ControlState]]] = None
|
102
|
-
) -> List[ControlState]:
|
103
|
-
if control_states is None:
|
104
|
-
return list()
|
105
|
-
elif isinstance(control_states, ControlState):
|
106
|
-
return [control_states]
|
107
|
-
return list(control_states)
|
108
|
-
|
109
|
-
def create_inputs(
|
110
|
-
self,
|
111
|
-
inputs: Mapping[IOName, QRegGenericAlias],
|
112
|
-
) -> Dict[IOName, QReg]:
|
113
|
-
self._verify_unique_inputs(inputs.keys())
|
114
|
-
qregs_dict = {
|
115
|
-
name: self._create_input_with_identity(name, qreg_type)
|
116
|
-
for name, qreg_type in inputs.items()
|
117
|
-
}
|
118
|
-
self._generated_qregs.update(qregs_dict)
|
119
|
-
return qregs_dict
|
120
|
-
|
121
|
-
def _create_input_with_identity(
|
122
|
-
self, name: IOName, qreg_type: QRegGenericAlias
|
123
|
-
) -> QReg:
|
124
|
-
qreg = qreg_type()
|
125
|
-
self._handle_io_with_identity(PortDirection.Input, name, qreg)
|
126
|
-
return qreg
|
127
|
-
|
128
|
-
def set_outputs(self, outputs: Mapping[IOName, QReg]) -> None:
|
129
|
-
for name, qreg in outputs.items():
|
130
|
-
self._set_output_with_identity(name, qreg)
|
131
|
-
|
132
|
-
def _set_output_with_identity(self, name: IOName, qreg: QReg) -> None:
|
133
|
-
self._handle_io_with_identity(PortDirection.Output, name, qreg)
|
134
|
-
|
135
|
-
def _handle_io_with_identity(
|
136
|
-
self, port_direction: PortDirection, name: IOName, qreg: QReg
|
137
|
-
) -> None:
|
138
|
-
# We need to add an Identity call on each input/output of the logic flow,
|
139
|
-
# since function input/output pins don't support "pin slicing".
|
140
|
-
# (Which means we cannot use QRegs in the wiring directly - because it gets
|
141
|
-
# decomposed into 1 bit wirings).
|
142
|
-
# Adding the identity also indirectly adds support for slicing on IOs
|
143
|
-
# (via the QReg slicing).
|
144
|
-
rui = qreg.to_register_user_input(name)
|
145
|
-
identity_call = SynthesisQuantumFunctionCall(
|
146
|
-
name=_get_identity_call_name(name, port_direction),
|
147
|
-
function_params=Identity(arguments=[rui]),
|
148
|
-
)
|
149
|
-
self._body.append(identity_call)
|
150
|
-
wire_name = logic_flow_change_handler.handle_io_connection(
|
151
|
-
port_direction, identity_call, name
|
152
|
-
)
|
153
|
-
if port_direction == PortDirection.Input:
|
154
|
-
self._logic_flow_builder.connect_func_call_to_qreg(
|
155
|
-
identity_call, name, qreg
|
156
|
-
)
|
157
|
-
else:
|
158
|
-
self._logic_flow_builder.connect_qreg_to_func_call(
|
159
|
-
qreg, name, identity_call
|
160
|
-
)
|
161
|
-
declaration_direction = PortDeclarationDirection.from_port_direction(
|
162
|
-
port_direction
|
163
|
-
)
|
164
|
-
if (
|
165
|
-
name in self._port_declarations
|
166
|
-
and self._port_declarations[name].direction != declaration_direction
|
167
|
-
):
|
168
|
-
declaration_direction = PortDeclarationDirection.Inout
|
169
|
-
self._port_declarations[name] = SynthesisPortDeclaration(
|
170
|
-
name=name,
|
171
|
-
size=rui.size,
|
172
|
-
direction=declaration_direction,
|
173
|
-
)
|
174
|
-
external_port_wiring_dict = dict(self._external_port_wiring[port_direction])
|
175
|
-
external_port_wiring_dict[name] = wire_name
|
176
|
-
self._external_port_wiring[port_direction] = external_port_wiring_dict
|
177
|
-
|
178
|
-
def apply(
|
179
|
-
self,
|
180
|
-
function_name: Union[
|
181
|
-
str,
|
182
|
-
SynthesisQuantumFunctionDeclaration,
|
183
|
-
QuantumFunction,
|
184
|
-
],
|
185
|
-
in_wires: Optional[SupportedInputArgs] = None,
|
186
|
-
out_wires: Optional[SupportedInputArgs] = None,
|
187
|
-
is_inverse: bool = False,
|
188
|
-
strict_zero_ios: bool = True,
|
189
|
-
release_by_inverse: bool = False,
|
190
|
-
control_states: Optional[Union[ControlState, Iterable[ControlState]]] = None,
|
191
|
-
should_control: bool = True,
|
192
|
-
power: int = 1,
|
193
|
-
call_name: Optional[str] = None,
|
194
|
-
) -> Dict[IOName, QReg]:
|
195
|
-
# if there's no function library, create one
|
196
|
-
if self._function_library is None:
|
197
|
-
self.create_library()
|
198
|
-
|
199
|
-
if isinstance(function_name, SynthesisQuantumFunctionDeclaration):
|
200
|
-
function_data = function_name
|
201
|
-
elif isinstance(function_name, QuantumFunction):
|
202
|
-
function_data = function_name.function_data
|
203
|
-
else:
|
204
|
-
function_data = None
|
205
|
-
|
206
|
-
if function_data:
|
207
|
-
if function_data.name not in self._function_library.function_dict: # type: ignore[union-attr]
|
208
|
-
self._function_library.add_function(function_data) # type: ignore[union-attr]
|
209
|
-
|
210
|
-
function_name = function_data.name
|
211
|
-
|
212
|
-
function_name = cast(str, function_name)
|
213
|
-
return self._add_function_call(
|
214
|
-
function_name,
|
215
|
-
self._function_library.get_function(function_name), # type: ignore[union-attr]
|
216
|
-
in_wires=in_wires,
|
217
|
-
out_wires=out_wires,
|
218
|
-
is_inverse=is_inverse,
|
219
|
-
strict_zero_ios=strict_zero_ios,
|
220
|
-
release_by_inverse=release_by_inverse,
|
221
|
-
control_states=control_states,
|
222
|
-
should_control=should_control,
|
223
|
-
power=power,
|
224
|
-
call_name=call_name,
|
225
|
-
)
|
226
|
-
|
227
|
-
def release_qregs(self, qregs: Union[QReg, Collection[QReg]]) -> None:
|
228
|
-
if isinstance(qregs, QReg):
|
229
|
-
qregs = [qregs]
|
230
|
-
for qreg in qregs:
|
231
|
-
self._logic_flow_builder.connect_qreg_to_zero(qreg)
|
232
|
-
|
233
|
-
def _add_function_call(
|
234
|
-
self,
|
235
|
-
function: str,
|
236
|
-
params: function_params.FunctionParams,
|
237
|
-
control_states: Optional[Union[ControlState, Iterable[ControlState]]] = None,
|
238
|
-
in_wires: Optional[SupportedInputArgs] = None,
|
239
|
-
out_wires: Optional[SupportedInputArgs] = None,
|
240
|
-
is_inverse: bool = False,
|
241
|
-
release_by_inverse: bool = False,
|
242
|
-
should_control: bool = True,
|
243
|
-
power: int = 1,
|
244
|
-
call_name: Optional[str] = None,
|
245
|
-
strict_zero_ios: bool = True,
|
246
|
-
) -> Dict[IOName, QReg]:
|
247
|
-
if function != type(params).__name__ and not isinstance(params, CustomFunction):
|
248
|
-
raise ClassiqValueError(
|
249
|
-
"The FunctionParams type does not match function name"
|
250
|
-
)
|
251
|
-
|
252
|
-
if (
|
253
|
-
isinstance(params, CustomFunction)
|
254
|
-
and self._function_library
|
255
|
-
and function not in self._function_library.function_dict
|
256
|
-
):
|
257
|
-
raise ClassiqValueError(
|
258
|
-
"QuantumFunctionCall: The function is not found in included library."
|
259
|
-
)
|
260
|
-
|
261
|
-
call = SynthesisQuantumFunctionCall(
|
262
|
-
function=function,
|
263
|
-
function_params=params,
|
264
|
-
is_inverse=is_inverse,
|
265
|
-
release_by_inverse=release_by_inverse,
|
266
|
-
strict_zero_ios=strict_zero_ios,
|
267
|
-
control_states=self._parse_control_states(control_states),
|
268
|
-
should_control=should_control,
|
269
|
-
power=power,
|
270
|
-
name=call_name,
|
271
|
-
)
|
272
|
-
|
273
|
-
if in_wires is not None:
|
274
|
-
self._connect_in_qregs(call=call, in_wires=in_wires)
|
275
|
-
|
276
|
-
self._body.append(call)
|
277
|
-
|
278
|
-
return self._connect_out_qregs(call=call, out_wires=out_wires or {})
|
279
|
-
|
280
|
-
def _connect_in_qregs(
|
281
|
-
self,
|
282
|
-
call: SynthesisQuantumFunctionCall,
|
283
|
-
in_wires: SupportedInputArgs,
|
284
|
-
) -> None:
|
285
|
-
if isinstance(in_wires, dict):
|
286
|
-
self._connect_named_in_qregs(call=call, in_wires=in_wires)
|
287
|
-
elif isinstance(in_wires, QReg):
|
288
|
-
self._connect_unnamed_in_qregs(call=call, in_wires=[in_wires])
|
289
|
-
elif isinstance(in_wires, collections.abc.Collection):
|
290
|
-
self._connect_unnamed_in_qregs(
|
291
|
-
# mypy doesn't recognize that `dict` wouldn't reach this point
|
292
|
-
call=call,
|
293
|
-
in_wires=in_wires, # type: ignore[arg-type]
|
294
|
-
)
|
295
|
-
else:
|
296
|
-
raise ClassiqWiringError(
|
297
|
-
f"Invalid in_wires type: {type(in_wires).__name__}"
|
298
|
-
)
|
299
|
-
|
300
|
-
def _connect_unnamed_in_qregs(
|
301
|
-
self,
|
302
|
-
call: SynthesisQuantumFunctionCall,
|
303
|
-
in_wires: Collection[QReg],
|
304
|
-
) -> None:
|
305
|
-
call_inputs = call.function_params.inputs_full(call.strict_zero_ios).keys()
|
306
|
-
self._connect_named_in_qregs(call, dict(zip(call_inputs, in_wires)))
|
307
|
-
|
308
|
-
def _connect_named_in_qregs(
|
309
|
-
self,
|
310
|
-
call: SynthesisQuantumFunctionCall,
|
311
|
-
in_wires: Dict[IOName, QReg],
|
312
|
-
) -> None:
|
313
|
-
for input_name, in_qreg in in_wires.items():
|
314
|
-
pin_name, pin_indices = self._get_pin_name_and_indices(input_name, call)
|
315
|
-
if len(in_qreg) != len(pin_indices):
|
316
|
-
raise ClassiqWiringError(
|
317
|
-
f"Incorrect size of input QReg: expected {len(pin_indices)}, actual {len(in_qreg)}"
|
318
|
-
)
|
319
|
-
self._logic_flow_builder.connect_qreg_to_func_call(
|
320
|
-
in_qreg, pin_name, call, pin_indices
|
321
|
-
)
|
322
|
-
|
323
|
-
@staticmethod
|
324
|
-
def _get_pin_name_and_indices(
|
325
|
-
input_name: IOName,
|
326
|
-
call: SynthesisQuantumFunctionCall,
|
327
|
-
) -> Tuple[IOName, range]:
|
328
|
-
try:
|
329
|
-
name, slicing = parse_io_slicing(input_name)
|
330
|
-
except (AssertionError, ValueError) as e:
|
331
|
-
raise ClassiqWiringError(
|
332
|
-
f"{input_name} {ILLEGAL_INPUT_OR_SLICING_ERROR_MSG}"
|
333
|
-
) from e
|
334
|
-
pin_info = call.input_regs_dict.get(name)
|
335
|
-
if pin_info is None:
|
336
|
-
raise ClassiqWiringError(
|
337
|
-
f"No register size information on input pin {name}"
|
338
|
-
)
|
339
|
-
indices = range(pin_info.size)[slicing]
|
340
|
-
return name, indices
|
341
|
-
|
342
|
-
def _connect_out_qregs(
|
343
|
-
self,
|
344
|
-
call: SynthesisQuantumFunctionCall,
|
345
|
-
out_wires: SupportedInputArgs,
|
346
|
-
) -> Dict[IOName, QReg]:
|
347
|
-
if isinstance(out_wires, dict):
|
348
|
-
return self._connect_named_out_qregs(call, out_wires)
|
349
|
-
elif isinstance(out_wires, QReg):
|
350
|
-
return self._connect_unnamed_out_qregs(call, [out_wires])
|
351
|
-
elif isinstance(out_wires, collections.abc.Collection):
|
352
|
-
return self._connect_unnamed_out_qregs(
|
353
|
-
# mypy doesn't recognize that `dict` wouldn't reach this point
|
354
|
-
call,
|
355
|
-
out_wires, # type: ignore[arg-type]
|
356
|
-
)
|
357
|
-
else:
|
358
|
-
raise ClassiqWiringError(
|
359
|
-
f"Invalid in_wires type: {type(out_wires).__name__}"
|
360
|
-
)
|
361
|
-
|
362
|
-
def _connect_unnamed_out_qregs(
|
363
|
-
self,
|
364
|
-
call: SynthesisQuantumFunctionCall,
|
365
|
-
out_wires: Collection[QReg],
|
366
|
-
) -> Dict[IOName, QReg]:
|
367
|
-
call_outputs = call.function_params.outputs.keys()
|
368
|
-
return self._connect_named_out_qregs(call, dict(zip(call_outputs, out_wires)))
|
369
|
-
|
370
|
-
def _connect_named_out_qregs(
|
371
|
-
self,
|
372
|
-
call: SynthesisQuantumFunctionCall,
|
373
|
-
out_wires: Mapping[IOName, QReg],
|
374
|
-
) -> Dict[IOName, QReg]:
|
375
|
-
if not all(
|
376
|
-
output_name in call.output_regs_dict.keys() for output_name in out_wires
|
377
|
-
):
|
378
|
-
raise ClassiqWiringError(ILLEGAL_OUTPUT_ERROR_MSG)
|
379
|
-
output_dict = {}
|
380
|
-
for output_name, reg_user_input in call.output_regs_dict.items():
|
381
|
-
if reg_user_input is None:
|
382
|
-
raise ClassiqValueError(
|
383
|
-
f"No output register information for {output_name}"
|
384
|
-
)
|
385
|
-
qreg = out_wires.get(output_name) or QReg.from_arithmetic_info(
|
386
|
-
reg_user_input
|
387
|
-
)
|
388
|
-
self._logic_flow_builder.connect_func_call_to_qreg(call, output_name, qreg)
|
389
|
-
output_dict[output_name] = qreg
|
390
|
-
return output_dict
|
391
|
-
|
392
|
-
def __getattr__(self, item: str) -> Callable[..., Any]:
|
393
|
-
# This is added due to problematic behaviour in deepcopy.
|
394
|
-
# deepcopy approaches __getattr__ before __init__ is called,
|
395
|
-
# and therefore self._function_library doesn't exist.
|
396
|
-
# Thus, we treat _function_library differently.
|
397
|
-
|
398
|
-
if item == "_function_library":
|
399
|
-
raise AttributeError(
|
400
|
-
f"{self.__class__.__name__!r} has no attribute {item!r}"
|
401
|
-
)
|
402
|
-
|
403
|
-
is_builtin_function_name = any(
|
404
|
-
item == func.__name__
|
405
|
-
for func in function_param_list.function_param_library.param_list
|
406
|
-
)
|
407
|
-
|
408
|
-
if is_builtin_function_name:
|
409
|
-
return functools.partial(self._add_function_call, item)
|
410
|
-
|
411
|
-
is_user_function_name = (
|
412
|
-
self._function_library is not None
|
413
|
-
and item in self._function_library.function_names
|
414
|
-
)
|
415
|
-
|
416
|
-
if is_user_function_name:
|
417
|
-
return functools.partial(self.apply, item)
|
418
|
-
|
419
|
-
if (
|
420
|
-
self._function_library is not None
|
421
|
-
and item in self._function_library.function_factory_names
|
422
|
-
):
|
423
|
-
return functools.partial(
|
424
|
-
self._function_library.get_function_factory(item),
|
425
|
-
add_method=functools.partial(
|
426
|
-
self._function_library.add_function,
|
427
|
-
override_existing_functions=True,
|
428
|
-
),
|
429
|
-
apply_method=self.apply,
|
430
|
-
)
|
431
|
-
|
432
|
-
raise AttributeError(f"{self.__class__.__name__!r} has no attribute {item!r}")
|
433
|
-
|
434
|
-
def __dir__(self) -> List[str]:
|
435
|
-
builtin_func_name = [
|
436
|
-
func.__name__
|
437
|
-
for func in function_param_list.function_param_library.param_list
|
438
|
-
]
|
439
|
-
user_func_names = (
|
440
|
-
list(self._function_library.function_names)
|
441
|
-
if self._function_library is not None
|
442
|
-
else list()
|
443
|
-
)
|
444
|
-
return list(super().__dir__()) + builtin_func_name + user_func_names
|
445
|
-
|
446
|
-
def include_library(self, library: FunctionLibrary) -> None:
|
447
|
-
"""Includes a function library.
|
448
|
-
|
449
|
-
Args:
|
450
|
-
library (FunctionLibrary): The function library.
|
451
|
-
"""
|
452
|
-
if self._function_library is not None:
|
453
|
-
raise ClassiqValueError("Another function library is already included.")
|
454
|
-
|
455
|
-
self._function_library = library
|
456
|
-
|
457
|
-
@property
|
458
|
-
@abc.abstractmethod
|
459
|
-
def _body(
|
460
|
-
self,
|
461
|
-
) -> List[SynthesisQuantumFunctionCall]:
|
462
|
-
pass
|
463
|
-
|
464
|
-
@abc.abstractmethod
|
465
|
-
def create_library(self) -> None:
|
466
|
-
pass
|
@@ -1,152 +0,0 @@
|
|
1
|
-
from typing import Optional, Dict
|
2
|
-
|
3
|
-
from classiq.interface.generator.function_param_list import *
|
4
|
-
|
5
|
-
from classiq.interface.generator.standard_gates.controlled_standard_gates import *
|
6
|
-
|
7
|
-
from classiq.interface.generator.standard_gates.standard_angled_gates import *
|
8
|
-
|
9
|
-
from classiq.interface.generator.standard_gates.standard_gates import *
|
10
|
-
|
11
|
-
import abc
|
12
|
-
from classiq.exceptions import ClassiqValueError as ClassiqValueError, ClassiqWiringError as ClassiqWiringError
|
13
|
-
from classiq.interface.generator import function_param_list as function_param_list, function_params as function_params
|
14
|
-
from classiq.interface.generator.control_state import ControlState as ControlState
|
15
|
-
from classiq.interface.generator.function_params import IOName as IOName, PortDirection as PortDirection
|
16
|
-
from classiq.interface.generator.functions.port_declaration import PortDeclarationDirection as PortDeclarationDirection, SynthesisPortDeclaration as SynthesisPortDeclaration
|
17
|
-
from classiq.interface.generator.identity import Identity as Identity
|
18
|
-
from classiq.interface.generator.quantum_function_call import SynthesisQuantumFunctionCall as SynthesisQuantumFunctionCall, WireName as WireName
|
19
|
-
from classiq.interface.generator.slice_parsing_utils import parse_io_slicing as parse_io_slicing
|
20
|
-
from classiq.interface.generator.user_defined_function_params import CustomFunction as CustomFunction
|
21
|
-
from classiq.model import logic_flow_change_handler as logic_flow_change_handler
|
22
|
-
from classiq.model.logic_flow import LogicFlowBuilder as LogicFlowBuilder
|
23
|
-
from classiq.quantum_functions.function_library import FunctionLibrary as FunctionLibrary, QuantumFunction as QuantumFunction, SynthesisQuantumFunctionDeclaration as SynthesisQuantumFunctionDeclaration
|
24
|
-
from classiq.quantum_register import QReg as QReg, QRegGenericAlias as QRegGenericAlias
|
25
|
-
from typing import Any, Callable, Collection, Dict, Iterable, List, Mapping, Optional, Union
|
26
|
-
|
27
|
-
SupportedInputArgs = Union[Mapping[IOName, QReg], Collection[QReg], QReg]
|
28
|
-
WireNameDict = Dict[IOName, WireName]
|
29
|
-
ILLEGAL_INPUT_OR_SLICING_ERROR_MSG: str
|
30
|
-
ILLEGAL_OUTPUT_ERROR_MSG: str
|
31
|
-
ASSIGNED: str
|
32
|
-
|
33
|
-
class FunctionHandler(abc.ABC, metaclass=abc.ABCMeta):
|
34
|
-
def __init__(self) -> None: ...
|
35
|
-
@property
|
36
|
-
def input_wires(self) -> WireNameDict: ...
|
37
|
-
@property
|
38
|
-
def output_wires(self) -> WireNameDict: ...
|
39
|
-
def create_inputs(self, inputs: Mapping[IOName, QRegGenericAlias]) -> Dict[IOName, QReg]: ...
|
40
|
-
def set_outputs(self, outputs: Mapping[IOName, QReg]) -> None: ...
|
41
|
-
def apply(self, function_name: Union[str, SynthesisQuantumFunctionDeclaration, QuantumFunction], in_wires: Optional[SupportedInputArgs] = None, out_wires: Optional[SupportedInputArgs] = None, is_inverse: bool = False, strict_zero_ios: bool = True, release_by_inverse: bool = False, control_states: Optional[Union[ControlState, Iterable[ControlState]]] = None, should_control: bool = True, power: int = 1, call_name: Optional[str] = None) -> Dict[IOName, QReg]: ...
|
42
|
-
def release_qregs(self, qregs: Union[QReg, Collection[QReg]]) -> None: ...
|
43
|
-
def __getattr__(self, item: str) -> Callable[..., Any]: ...
|
44
|
-
def __dir__(self) -> List[str]: ...
|
45
|
-
def include_library(self, library: FunctionLibrary) -> None: ...
|
46
|
-
@abc.abstractmethod
|
47
|
-
def create_library(self) -> None: ...
|
48
|
-
def Adder(self, params: Adder, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
49
|
-
def C3XGate(self, params: C3XGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
50
|
-
def RGate(self, params: RGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
51
|
-
def ExponentialStatePreparation(self, params: ExponentialStatePreparation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
52
|
-
def RXXGate(self, params: RXXGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
53
|
-
def BellStatePreparation(self, params: BellStatePreparation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
54
|
-
def Exponentiation(self, params: Exponentiation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
55
|
-
def Mcu(self, params: Mcu, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
56
|
-
def PhaseEstimation(self, params: PhaseEstimation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
57
|
-
def CustomOracle(self, params: CustomOracle, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
58
|
-
def CRYGate(self, params: CRYGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
59
|
-
def Identity(self, params: Identity, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
60
|
-
def AmplitudeLoading(self, params: AmplitudeLoading, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
61
|
-
def UCC(self, params: UCC, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
62
|
-
def CRXGate(self, params: CRXGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
63
|
-
def LinearGCI(self, params: LinearGCI, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
64
|
-
def Negation(self, params: Negation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
65
|
-
def WeightedAdder(self, params: WeightedAdder, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
66
|
-
def RangeMixer(self, params: RangeMixer, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
67
|
-
def Modulo(self, params: Modulo, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
68
|
-
def RZGate(self, params: RZGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
69
|
-
def HartreeFock(self, params: HartreeFock, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
70
|
-
def StatePropagator(self, params: StatePropagator, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
71
|
-
def LessEqual(self, params: LessEqual, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
72
|
-
def RShift(self, params: RShift, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
73
|
-
def LogicalAnd(self, params: LogicalAnd, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
74
|
-
def GridEntangler(self, params: GridEntangler, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
75
|
-
def Mcx(self, params: Mcx, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
76
|
-
def YGate(self, params: YGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
77
|
-
def CyclicShift(self, params: CyclicShift, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
78
|
-
def ZGate(self, params: ZGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
79
|
-
def GHZStatePreparation(self, params: GHZStatePreparation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
80
|
-
def HGate(self, params: HGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
81
|
-
def IGate(self, params: IGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
82
|
-
def SGate(self, params: SGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
83
|
-
def SdgGate(self, params: SdgGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
84
|
-
def SXGate(self, params: SXGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
85
|
-
def SXdgGate(self, params: SXdgGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
86
|
-
def RYGate(self, params: RYGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
87
|
-
def CPhaseGate(self, params: CPhaseGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
88
|
-
def Power(self, params: Power, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
89
|
-
def CRZGate(self, params: CRZGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
90
|
-
def C4XGate(self, params: C4XGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
91
|
-
def UnitaryGate(self, params: UnitaryGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
92
|
-
def Subtractor(self, params: Subtractor, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
93
|
-
def CCXGate(self, params: CCXGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
94
|
-
def Min(self, params: Min, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
95
|
-
def TGate(self, params: TGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
96
|
-
def TdgGate(self, params: TdgGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
97
|
-
def Max(self, params: Max, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
98
|
-
def HypercubeEntangler(self, params: HypercubeEntangler, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
99
|
-
def BitwiseOr(self, params: BitwiseOr, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
100
|
-
def SwapGate(self, params: SwapGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
101
|
-
def NotEqual(self, params: NotEqual, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
102
|
-
def MCPhaseGate(self, params: MCPhaseGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
103
|
-
def HadamardTransform(self, params: HadamardTransform, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
104
|
-
def UniformDistributionStatePreparation(self, params: UniformDistributionStatePreparation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
105
|
-
def Arithmetic(self, params: Arithmetic, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
106
|
-
def RXGate(self, params: RXGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
107
|
-
def GroverOperator(self, params: GroverOperator, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
108
|
-
def AmplitudeEstimation(self, params: AmplitudeEstimation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
109
|
-
def BitwiseXor(self, params: BitwiseXor, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
110
|
-
def FinanceModels(self, params: FinanceModels, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
111
|
-
def GreaterEqual(self, params: GreaterEqual, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
112
|
-
def Equal(self, params: Equal, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
113
|
-
def Sign(self, params: Sign, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
114
|
-
def ComputationalBasisStatePreparation(self, params: ComputationalBasisStatePreparation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
115
|
-
def LinearPauliRotations(self, params: LinearPauliRotations, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
116
|
-
def UGate(self, params: UGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
117
|
-
def FinancePayoff(self, params: FinancePayoff, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
118
|
-
def CYGate(self, params: CYGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
119
|
-
def CZGate(self, params: CZGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
120
|
-
def LShift(self, params: LShift, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
121
|
-
def QSVMFeatureMap(self, params: QSVMFeatureMap, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
122
|
-
def BitwiseAnd(self, params: BitwiseAnd, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
123
|
-
def RYYGate(self, params: RYYGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
124
|
-
def InequalityMixer(self, params: InequalityMixer, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
125
|
-
def PiecewiseLinearRotationAmplitudeLoading(self, params: PiecewiseLinearRotationAmplitudeLoading, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
126
|
-
def GreaterThan(self, params: GreaterThan, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
127
|
-
def TwoDimensionalEntangler(self, params: TwoDimensionalEntangler, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
128
|
-
def QFT(self, params: QFT, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
129
|
-
def StatePreparation(self, params: StatePreparation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
130
|
-
def PiecewiseLinearAmplitudeLoading(self, params: PiecewiseLinearAmplitudeLoading, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
131
|
-
def WStatePreparation(self, params: WStatePreparation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
132
|
-
def ArithmeticOracle(self, params: ArithmeticOracle, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
133
|
-
def iSwapGate(self, params: iSwapGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
134
|
-
def CommutingPauliExponentiation(self, params: CommutingPauliExponentiation, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
135
|
-
def LessThan(self, params: LessThan, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
136
|
-
def Multiplier(self, params: Multiplier, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
137
|
-
def RZZGate(self, params: RZZGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
138
|
-
def CustomFunction(self, params: CustomFunction, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
139
|
-
def PhaseGate(self, params: PhaseGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
140
|
-
def Finance(self, params: Finance, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
141
|
-
def QDrift(self, params: QDrift, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
142
|
-
def SuzukiTrotter(self, params: SuzukiTrotter, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
143
|
-
def CXGate(self, params: CXGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
144
|
-
def HardwareEfficientAnsatz(self, params: HardwareEfficientAnsatz, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
145
|
-
def XGate(self, params: XGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
146
|
-
def HVA(self, params: HVA, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
147
|
-
def CHGate(self, params: CHGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
148
|
-
def CSXGate(self, params: CSXGate, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
149
|
-
def GroverDiffuser(self, params: GroverDiffuser, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
150
|
-
def RandomizedBenchmarking(self, params: RandomizedBenchmarking, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
151
|
-
def LogicalOr(self, params: LogicalOr, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|
152
|
-
def BitwiseInvert(self, params: BitwiseInvert, in_wires: Optional[Dict[str, Wire]] = None) -> Dict[str, Wire]: ...
|