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 +0,0 @@
|
|
1
|
-
from classiq.interface.generator.arith.binary_ops import ArgToInplace # noqa: F401
|
classiq/builtin_functions/qpe.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
from classiq.interface.generator.standard_gates.standard_gates_param_list import * # noqa: F401, F403
|
classiq/exceptions.py
DELETED
@@ -1,131 +0,0 @@
|
|
1
|
-
import logging
|
2
|
-
from typing import List
|
3
|
-
|
4
|
-
_logger = logging.getLogger(__name__)
|
5
|
-
|
6
|
-
CLASSIQ_SLACK_COMMUNITY_LINK = (
|
7
|
-
"\nIf you need further assistance, please reach out on our Community Slack channel at: https://short.classiq.io/join-slack"
|
8
|
-
"\nIf the error persists feel free to open a ticket at: https://short.classiq.io/support"
|
9
|
-
)
|
10
|
-
|
11
|
-
|
12
|
-
class ClassiqError(Exception):
|
13
|
-
def __init__(self, message: str) -> None:
|
14
|
-
message_with_link = message + CLASSIQ_SLACK_COMMUNITY_LINK
|
15
|
-
super().__init__(message_with_link)
|
16
|
-
self._raw_message = message
|
17
|
-
|
18
|
-
@property
|
19
|
-
def raw_message(self) -> str:
|
20
|
-
return self._raw_message
|
21
|
-
|
22
|
-
|
23
|
-
class ClassiqExecutionError(ClassiqError):
|
24
|
-
pass
|
25
|
-
|
26
|
-
|
27
|
-
class ClassiqMissingOutputFormatError(ClassiqError):
|
28
|
-
def __init__(self, missing_formats: List[str]) -> None:
|
29
|
-
msg = (
|
30
|
-
f"Cannot create program because output format is missing. "
|
31
|
-
f"Expected one of the following formats: {missing_formats}"
|
32
|
-
)
|
33
|
-
super().__init__(message=msg)
|
34
|
-
|
35
|
-
|
36
|
-
class ClassiqCombinatorialOptimizationError(ClassiqError):
|
37
|
-
pass
|
38
|
-
|
39
|
-
|
40
|
-
class ClassiqOracleError(ClassiqError):
|
41
|
-
pass
|
42
|
-
|
43
|
-
|
44
|
-
class ClassiqAnalyzerError(ClassiqError):
|
45
|
-
pass
|
46
|
-
|
47
|
-
|
48
|
-
class ClassiqAnalyzerGraphError(ClassiqError):
|
49
|
-
pass
|
50
|
-
|
51
|
-
|
52
|
-
class ClassiqAPIError(ClassiqError):
|
53
|
-
pass
|
54
|
-
|
55
|
-
|
56
|
-
class ClassiqVersionError(ClassiqError):
|
57
|
-
pass
|
58
|
-
|
59
|
-
|
60
|
-
class ClassiqValueError(ClassiqError, ValueError):
|
61
|
-
pass
|
62
|
-
|
63
|
-
|
64
|
-
class ClassiqArithmeticError(ClassiqValueError):
|
65
|
-
pass
|
66
|
-
|
67
|
-
|
68
|
-
class ClassiqIndexError(ClassiqError, IndexError):
|
69
|
-
pass
|
70
|
-
|
71
|
-
|
72
|
-
class ClassiqWiringError(ClassiqValueError):
|
73
|
-
pass
|
74
|
-
|
75
|
-
|
76
|
-
class ClassiqControlError(ClassiqError):
|
77
|
-
def __init__(self) -> None:
|
78
|
-
message = "Repeated control names, please rename the control states"
|
79
|
-
super().__init__(message=message)
|
80
|
-
|
81
|
-
|
82
|
-
class ClassiqQRegError(ClassiqValueError):
|
83
|
-
pass
|
84
|
-
|
85
|
-
|
86
|
-
class ClassiqQFuncError(ClassiqValueError):
|
87
|
-
pass
|
88
|
-
|
89
|
-
|
90
|
-
class ClassiqQSVMError(ClassiqValueError):
|
91
|
-
pass
|
92
|
-
|
93
|
-
|
94
|
-
class ClassiqQNNError(ClassiqValueError):
|
95
|
-
pass
|
96
|
-
|
97
|
-
|
98
|
-
class ClassiqTorchError(ClassiqQNNError):
|
99
|
-
pass
|
100
|
-
|
101
|
-
|
102
|
-
class ClassiqChemistryError(ClassiqError):
|
103
|
-
pass
|
104
|
-
|
105
|
-
|
106
|
-
class ClassiqAuthenticationError(ClassiqError):
|
107
|
-
pass
|
108
|
-
|
109
|
-
|
110
|
-
class ClassiqExpiredTokenError(ClassiqAuthenticationError):
|
111
|
-
pass
|
112
|
-
|
113
|
-
|
114
|
-
class ClassiqFileNotFoundError(FileNotFoundError):
|
115
|
-
pass
|
116
|
-
|
117
|
-
|
118
|
-
class ClassiqStateInitializationError(ClassiqError):
|
119
|
-
pass
|
120
|
-
|
121
|
-
|
122
|
-
class ClassiqPasswordManagerSelectionError(ClassiqError):
|
123
|
-
pass
|
124
|
-
|
125
|
-
|
126
|
-
class ClassiqMismatchIOsError(ClassiqError):
|
127
|
-
pass
|
128
|
-
|
129
|
-
|
130
|
-
class ClassiqNotImplementedError(ClassiqError, NotImplementedError):
|
131
|
-
pass
|
@@ -1,72 +0,0 @@
|
|
1
|
-
from datetime import date
|
2
|
-
from typing import List, Optional
|
3
|
-
|
4
|
-
import pydantic
|
5
|
-
from pydantic import validator
|
6
|
-
|
7
|
-
from classiq._internals.enum_utils import StrEnum
|
8
|
-
|
9
|
-
|
10
|
-
class Granularity(StrEnum):
|
11
|
-
monthly = "MONTHLY"
|
12
|
-
daily = "DAILY"
|
13
|
-
hourly = "HOURLY"
|
14
|
-
|
15
|
-
|
16
|
-
class CostScope(StrEnum):
|
17
|
-
user = "user"
|
18
|
-
organization = "organization"
|
19
|
-
|
20
|
-
|
21
|
-
class ExecutionCostForTimePeriod(pydantic.BaseModel):
|
22
|
-
start: date = pydantic.Field(
|
23
|
-
description="The beginning of the time period for tasks usage and cost ("
|
24
|
-
"inclusive).",
|
25
|
-
)
|
26
|
-
end: date = pydantic.Field(
|
27
|
-
description="The end of the time period for tasks usage and cost (exclusive).",
|
28
|
-
)
|
29
|
-
granularity: Granularity = pydantic.Field(
|
30
|
-
description="Either MONTHLY or DAILY, or HOURLY.", default=Granularity.daily
|
31
|
-
)
|
32
|
-
cost_scope: CostScope = pydantic.Field(
|
33
|
-
description="Either user or organization", default=CostScope.user
|
34
|
-
)
|
35
|
-
|
36
|
-
class Config:
|
37
|
-
json_encoders = {date: lambda v: v.strftime("%Y-%m-%d")}
|
38
|
-
|
39
|
-
@validator("end")
|
40
|
-
def date_order(cls, v, values, **kwargs):
|
41
|
-
if "start" in values and v <= values["start"]:
|
42
|
-
raise ValueError('"end" date should be after "start" date')
|
43
|
-
return v
|
44
|
-
|
45
|
-
|
46
|
-
"""The following models describe the aws response model and based on this schema:
|
47
|
-
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ce.html#CostExplorer.Client.get_cost_and_usage"""
|
48
|
-
|
49
|
-
|
50
|
-
class TimePeriod(pydantic.BaseModel):
|
51
|
-
Start: str
|
52
|
-
End: str
|
53
|
-
|
54
|
-
|
55
|
-
class BlendedCost(pydantic.BaseModel):
|
56
|
-
Amount: str
|
57
|
-
Unit: str
|
58
|
-
|
59
|
-
|
60
|
-
class Total(pydantic.BaseModel):
|
61
|
-
BlendedCost: BlendedCost
|
62
|
-
|
63
|
-
|
64
|
-
class ExecutedTaskForPeriodItem(pydantic.BaseModel):
|
65
|
-
TimePeriod: TimePeriod
|
66
|
-
Total: Total
|
67
|
-
Groups: Optional[List]
|
68
|
-
Estimated: Optional[bool]
|
69
|
-
|
70
|
-
|
71
|
-
class ExecutionCostForTimePeriodResponse(pydantic.BaseModel):
|
72
|
-
executed_task_for_period: List[ExecutedTaskForPeriodItem]
|
@@ -1,115 +0,0 @@
|
|
1
|
-
from statistics import NormalDist
|
2
|
-
from typing import List, Tuple
|
3
|
-
|
4
|
-
import numpy as np
|
5
|
-
import pydantic
|
6
|
-
|
7
|
-
from classiq.interface.generator import function_params, linear_pauli_rotations
|
8
|
-
from classiq.interface.generator.arith.register_user_input import RegisterUserInput
|
9
|
-
from classiq.interface.helpers.custom_pydantic_types import (
|
10
|
-
PydanticNonOneProbabilityFloat,
|
11
|
-
PydanticProbabilityFloat,
|
12
|
-
)
|
13
|
-
|
14
|
-
RHOS_PZEROS_LENGTH_ERROR_MSG = "rhos and p_zeros must have the same length"
|
15
|
-
|
16
|
-
|
17
|
-
class LinearGCI(function_params.FunctionParams):
|
18
|
-
"""
|
19
|
-
A circuit composed of a series of Y rotations to perform a linear approximation to the Gaussian Conditional
|
20
|
-
Independence model.
|
21
|
-
The model consists of a Bernoulli probability, which itself is a function of a latent random variable x:
|
22
|
-
p(x) = F( (F_inv(p_zero) + x*sqrt(rho))/sqrt(1-rho) )
|
23
|
-
with F being the Gaussian CDF, p_zero is p(x=0) when rho=0, and rho reflects the sensitivity.
|
24
|
-
|
25
|
-
The circuit takes a state register |x> and zero-input target qubits.
|
26
|
-
Each target qubit undergoes the following transformation:
|
27
|
-
|x>|0> -> cos((slope*x + offset)/2)|x>|0> + sin((slope*x + offset)/2)|x>|1>
|
28
|
-
Where the slope and the offset are determined by the linear approximation of the inverse sine of p(x).
|
29
|
-
"""
|
30
|
-
|
31
|
-
num_state_qubits: pydantic.PositiveInt = pydantic.Field(
|
32
|
-
description="The number of input qubits"
|
33
|
-
)
|
34
|
-
truncation_value: float = pydantic.Field(
|
35
|
-
description="The truncation value of the latent normal distribution"
|
36
|
-
)
|
37
|
-
p_zeros: List[PydanticProbabilityFloat] = pydantic.Field(
|
38
|
-
description="The probability when the latent normal variable equals zero"
|
39
|
-
)
|
40
|
-
rhos: List[PydanticNonOneProbabilityFloat] = pydantic.Field(
|
41
|
-
description="The sensitivity of the probability to changes in the latent normal variable values"
|
42
|
-
)
|
43
|
-
|
44
|
-
@pydantic.validator("rhos")
|
45
|
-
def validate_rhos(cls, rhos, values):
|
46
|
-
p_zeros = values.get("p_zeros")
|
47
|
-
if len(p_zeros) != len(rhos):
|
48
|
-
raise ValueError(RHOS_PZEROS_LENGTH_ERROR_MSG)
|
49
|
-
return rhos
|
50
|
-
|
51
|
-
@property
|
52
|
-
def linear_pauli_rotations(self) -> linear_pauli_rotations.LinearPauliRotations:
|
53
|
-
offsets, slopes = get_gci_values(
|
54
|
-
qubit_count_state=self.num_state_qubits,
|
55
|
-
truncation_value=self.truncation_value,
|
56
|
-
rhos=self.rhos,
|
57
|
-
p_zeros=self.p_zeros,
|
58
|
-
)
|
59
|
-
return linear_pauli_rotations.LinearPauliRotations(
|
60
|
-
num_state_qubits=self.num_state_qubits,
|
61
|
-
bases=["Y"] * len(self.rhos),
|
62
|
-
offsets=offsets,
|
63
|
-
slopes=slopes,
|
64
|
-
)
|
65
|
-
|
66
|
-
def _create_ios(self) -> None:
|
67
|
-
state_name = linear_pauli_rotations.STATE
|
68
|
-
target_name = linear_pauli_rotations.TARGET
|
69
|
-
self._inputs = {
|
70
|
-
state_name: RegisterUserInput(name=state_name, size=self.num_state_qubits),
|
71
|
-
target_name: RegisterUserInput(name=target_name, size=len(self.rhos)),
|
72
|
-
}
|
73
|
-
self._outputs = {**self.inputs}
|
74
|
-
|
75
|
-
|
76
|
-
def get_gci_values(
|
77
|
-
*,
|
78
|
-
qubit_count_state: int,
|
79
|
-
truncation_value: float,
|
80
|
-
rhos: List[float],
|
81
|
-
p_zeros: List[float],
|
82
|
-
) -> Tuple[List[float], List[float]]:
|
83
|
-
qubit_count_target = len(rhos)
|
84
|
-
|
85
|
-
# Qiskit's code below
|
86
|
-
|
87
|
-
# get normal (inverse) CDF and pdf
|
88
|
-
def cdf(x: float) -> float:
|
89
|
-
return NormalDist().cdf(x)
|
90
|
-
|
91
|
-
def inv_cdf(p: float) -> float:
|
92
|
-
return NormalDist().inv_cdf(p)
|
93
|
-
|
94
|
-
def pdf(x: float) -> float:
|
95
|
-
return NormalDist().pdf(x)
|
96
|
-
|
97
|
-
# create linear rotations for conditional defaults
|
98
|
-
slopes = []
|
99
|
-
offsets = []
|
100
|
-
for k in range(qubit_count_target):
|
101
|
-
psi = inv_cdf(p_zeros[k]) / np.sqrt(1 - rhos[k])
|
102
|
-
|
103
|
-
# compute slope / offset
|
104
|
-
slope = -np.sqrt(rhos[k]) / np.sqrt(1 - rhos[k])
|
105
|
-
slope *= pdf(psi) / np.sqrt(1 - cdf(psi)) / np.sqrt(cdf(psi))
|
106
|
-
offset = 2 * np.arcsin(np.sqrt(cdf(psi)))
|
107
|
-
|
108
|
-
# adjust for integer to normal range mapping
|
109
|
-
offset += slope * (-truncation_value)
|
110
|
-
slope *= 2 * truncation_value / (2**qubit_count_state - 1)
|
111
|
-
|
112
|
-
offsets.append(offset)
|
113
|
-
slopes.append(slope)
|
114
|
-
|
115
|
-
return offsets, slopes
|
@@ -1,59 +0,0 @@
|
|
1
|
-
from typing import List
|
2
|
-
|
3
|
-
import numpy as np
|
4
|
-
import pydantic
|
5
|
-
|
6
|
-
from classiq.interface.generator import function_params
|
7
|
-
from classiq.interface.generator.arith.register_user_input import RegisterUserInput
|
8
|
-
from classiq.interface.generator.function_params import get_zero_input_name
|
9
|
-
|
10
|
-
LENGTH_ERROR_MESSAGE = "Input length error: Length of weights vector has to be identical to the number of input qubits"
|
11
|
-
STATE = "state"
|
12
|
-
SUM = "sum"
|
13
|
-
|
14
|
-
|
15
|
-
class PydanticStrictNonNegativeInteger(pydantic.ConstrainedInt):
|
16
|
-
strict = True
|
17
|
-
ge = 0
|
18
|
-
|
19
|
-
|
20
|
-
class WeightedAdder(function_params.FunctionParams):
|
21
|
-
"""
|
22
|
-
Creates a circuit implementing a scalar product between an n-qubit state |q1,q2,...,qn> and an n-length non-negative
|
23
|
-
integer vector (w1,w2,...wn), such that the result of the output register is |q1*w1+q2*w2+...qn*wn>.
|
24
|
-
If no weights are provided, they are default to 1 for every qubit.
|
25
|
-
"""
|
26
|
-
|
27
|
-
num_state_qubits: pydantic.PositiveInt = pydantic.Field(
|
28
|
-
description="The number of input qubits"
|
29
|
-
)
|
30
|
-
weights: List[PydanticStrictNonNegativeInteger] = pydantic.Field(
|
31
|
-
default=None,
|
32
|
-
description="List of non-negative integers corresponding to the weight of each qubit",
|
33
|
-
)
|
34
|
-
|
35
|
-
@pydantic.validator("weights", always=True, pre=True)
|
36
|
-
def validate_weights(cls, weights, values):
|
37
|
-
num_state_qubits = values.get("num_state_qubits")
|
38
|
-
if weights is None:
|
39
|
-
return [1] * num_state_qubits
|
40
|
-
if len(weights) != num_state_qubits:
|
41
|
-
raise ValueError(LENGTH_ERROR_MESSAGE)
|
42
|
-
return weights
|
43
|
-
|
44
|
-
def num_sum_qubits(self) -> int:
|
45
|
-
sum_weights = np.sum(self.weights)
|
46
|
-
if sum_weights > 0:
|
47
|
-
return 1 + int(np.floor(np.log2(sum_weights)))
|
48
|
-
return 1
|
49
|
-
|
50
|
-
def _create_ios(self) -> None:
|
51
|
-
self._inputs = {
|
52
|
-
STATE: RegisterUserInput(name=STATE, size=self.num_state_qubits)
|
53
|
-
}
|
54
|
-
zero_input_name = get_zero_input_name(SUM)
|
55
|
-
self._create_zero_input_registers({zero_input_name: self.num_sum_qubits()})
|
56
|
-
self._outputs = {
|
57
|
-
**self._inputs,
|
58
|
-
SUM: RegisterUserInput(name=SUM, size=self.num_sum_qubits()),
|
59
|
-
}
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import enum
|
2
|
-
from typing import Dict
|
3
|
-
|
4
|
-
from sympy import Basic, Integer
|
5
|
-
|
6
|
-
from classiq.interface.chemistry.elements import ELEMENTS
|
7
|
-
from classiq.interface.chemistry.ground_state_problem import (
|
8
|
-
FermionMapping as LibraryFermionMapping,
|
9
|
-
)
|
10
|
-
from classiq.interface.generator.expressions.enums.classical_enum import ClassicalEnum
|
11
|
-
|
12
|
-
Element = ClassicalEnum("Element", ELEMENTS) # type: ignore[call-overload]
|
13
|
-
|
14
|
-
|
15
|
-
class MolecularBasis(enum.Enum):
|
16
|
-
sto3g = 0
|
17
|
-
|
18
|
-
def to_sympy(self) -> Basic:
|
19
|
-
return Integer(self.value)
|
20
|
-
|
21
|
-
@staticmethod
|
22
|
-
def sympy_locals() -> Dict[str, Basic]:
|
23
|
-
return {f"Basis_{basis.name}": basis.to_sympy() for basis in MolecularBasis}
|
24
|
-
|
25
|
-
|
26
|
-
FermionMapping = ClassicalEnum( # type: ignore[call-overload]
|
27
|
-
"FermionMapping", [mapping.name for mapping in LibraryFermionMapping]
|
28
|
-
)
|
@@ -1,16 +0,0 @@
|
|
1
|
-
from typing_extensions import assert_never
|
2
|
-
|
3
|
-
from classiq.interface.generator.expressions.enums.classical_enum import ClassicalEnum
|
4
|
-
|
5
|
-
|
6
|
-
class LadderOperator(ClassicalEnum):
|
7
|
-
PLUS = 0
|
8
|
-
MINUS = 1
|
9
|
-
|
10
|
-
def __str__(self) -> str:
|
11
|
-
if self is LadderOperator.PLUS:
|
12
|
-
return "+"
|
13
|
-
elif self is LadderOperator.MINUS:
|
14
|
-
return "-"
|
15
|
-
else:
|
16
|
-
assert_never(self)
|
@@ -1,22 +0,0 @@
|
|
1
|
-
from sympy import Symbol
|
2
|
-
|
3
|
-
from classiq.interface.generator.expressions.qmod_sized_proxy import QmodSizedProxy
|
4
|
-
from classiq.interface.model.quantum_type import QuantumNumeric
|
5
|
-
|
6
|
-
|
7
|
-
class QmodQNumProxy(Symbol, QmodSizedProxy):
|
8
|
-
def __new__(cls, name, **assumptions):
|
9
|
-
return super().__new__(cls, name, **assumptions)
|
10
|
-
|
11
|
-
def __init__(self, name: str, quantum_type: QuantumNumeric) -> None:
|
12
|
-
super().__init__(quantum_type.size_in_bits)
|
13
|
-
self._fraction_digits = quantum_type.fraction_digits
|
14
|
-
self._is_signed = quantum_type.is_signed
|
15
|
-
|
16
|
-
@property
|
17
|
-
def fraction_digits(self) -> int:
|
18
|
-
return self._fraction_digits
|
19
|
-
|
20
|
-
@property
|
21
|
-
def is_signed(self) -> bool:
|
22
|
-
return self._is_signed
|
@@ -1,18 +0,0 @@
|
|
1
|
-
from classiq.interface.helpers.pydantic_model_helpers import nameables_to_dict
|
2
|
-
from classiq.interface.model.quantum_function_declaration import (
|
3
|
-
QuantumFunctionDeclaration,
|
4
|
-
)
|
5
|
-
|
6
|
-
from .atomic_quantum_functions import * # noqa: F403
|
7
|
-
from .exponentiation_functions import * # noqa: F403
|
8
|
-
from .std_lib_functions import * # noqa: F403
|
9
|
-
|
10
|
-
QuantumFunctionDeclaration.BUILTIN_FUNCTION_DECLARATIONS.update(
|
11
|
-
nameables_to_dict(
|
12
|
-
[
|
13
|
-
func
|
14
|
-
for func in vars().values()
|
15
|
-
if isinstance(func, QuantumFunctionDeclaration)
|
16
|
-
]
|
17
|
-
)
|
18
|
-
)
|