classiq 0.38.0__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 +47 -32
- classiq/_analyzer_extras/_ipywidgets_async_extension.py +2 -1
- classiq/_internals/api_wrapper.py +235 -97
- classiq/_internals/async_utils.py +1 -3
- classiq/_internals/authentication/auth0.py +26 -10
- classiq/_internals/authentication/authentication.py +11 -0
- classiq/_internals/authentication/device.py +10 -5
- classiq/_internals/authentication/password_manager.py +18 -6
- classiq/_internals/authentication/token_manager.py +10 -5
- classiq/_internals/client.py +94 -33
- classiq/_internals/config.py +3 -4
- classiq/_internals/host_checker.py +38 -15
- classiq/_internals/jobs.py +60 -57
- classiq/_internals/type_validation.py +9 -9
- classiq/analyzer/__init__.py +1 -3
- classiq/analyzer/analyzer.py +24 -19
- classiq/analyzer/analyzer_utilities.py +10 -10
- classiq/analyzer/rb.py +15 -15
- classiq/analyzer/show_interactive_hack.py +27 -4
- 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 +165 -158
- classiq/applications/chemistry/ground_state_problem.py +1 -1
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/allowed_constraints.py +4 -1
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/arithmetic_expression.py +1 -1
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/isolation.py +1 -1
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/combinatorial_problem_utils.py +51 -15
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/encoding_mapping.py +12 -12
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/encoding_utils.py +8 -6
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/memory.py +7 -11
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/optimization_model.py +67 -40
- classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +46 -0
- classiq/applications/combinatorial_helpers/pyomo_utils.py +447 -0
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/sympy_utils.py +2 -2
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/encoding.py +15 -20
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/fixed_variables.py +14 -15
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/ising_converter.py +11 -15
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/penalty.py +1 -2
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/penalty_support.py +3 -7
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/sign_seperation.py +2 -3
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/slack_variables.py +5 -8
- classiq/applications/combinatorial_optimization/__init__.py +20 -6
- classiq/applications/combinatorial_optimization/combinatorial_optimization_config.py +2 -2
- classiq/{applications_model_constructors → applications/combinatorial_optimization}/combinatorial_optimization_model_constructor.py +35 -33
- 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 +48 -42
- classiq/applications/grover/__init__.py +9 -0
- classiq/{applications_model_constructors → applications/grover}/grover_model_constructor.py +52 -51
- classiq/applications/hamiltonian/pauli_decomposition.py +113 -0
- classiq/applications/libraries/qmci_library.py +22 -0
- classiq/applications/qnn/__init__.py +2 -4
- classiq/applications/qnn/circuit_utils.py +6 -6
- 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 +1 -1
- 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 +5 -5
- classiq/applications/qsvm/__init__.py +6 -4
- classiq/applications/qsvm/qsvm.py +3 -6
- classiq/applications/qsvm/qsvm_data_generation.py +3 -3
- 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 +20 -115
- classiq/interface/_version.py +1 -1
- classiq/interface/analyzer/analysis_params.py +43 -13
- classiq/interface/analyzer/cytoscape_graph.py +15 -9
- classiq/interface/analyzer/result.py +28 -32
- classiq/interface/applications/qsvm.py +20 -29
- classiq/interface/ast_node.py +16 -0
- classiq/interface/backend/backend_preferences.py +390 -121
- classiq/interface/backend/ionq/ionq_quantum_program.py +15 -23
- classiq/interface/backend/pydantic_backend.py +25 -22
- classiq/interface/backend/quantum_backend_providers.py +69 -16
- classiq/interface/chemistry/fermionic_operator.py +30 -21
- classiq/interface/chemistry/ground_state_problem.py +28 -25
- classiq/interface/chemistry/molecule.py +14 -10
- classiq/interface/chemistry/operator.py +64 -231
- classiq/interface/combinatorial_optimization/encoding_types.py +1 -1
- classiq/interface/combinatorial_optimization/examples/ascending_sequence.py +1 -3
- 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/mht.py +10 -6
- classiq/interface/combinatorial_optimization/examples/portfolio_variations.py +2 -2
- classiq/interface/combinatorial_optimization/examples/set_cover.py +1 -2
- classiq/interface/combinatorial_optimization/mht_qaoa_input.py +8 -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/debug_info.py +86 -0
- classiq/{exceptions.py → interface/exceptions.py} +37 -9
- 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/execution_preferences.py +26 -114
- classiq/interface/executor/execution_request.py +24 -46
- classiq/interface/executor/execution_result.py +30 -8
- classiq/interface/executor/iqae_result.py +4 -6
- classiq/interface/executor/optimizer_preferences.py +17 -14
- classiq/interface/executor/quantum_code.py +28 -24
- classiq/interface/executor/quantum_instruction_set.py +2 -2
- classiq/interface/executor/register_initialization.py +11 -14
- classiq/interface/executor/result.py +83 -56
- classiq/interface/executor/vqe_result.py +10 -10
- classiq/interface/finance/function_input.py +35 -25
- classiq/interface/finance/gaussian_model_input.py +5 -5
- classiq/interface/finance/log_normal_model_input.py +4 -4
- classiq/interface/finance/model_input.py +4 -4
- classiq/interface/generator/adjacency.py +1 -3
- classiq/interface/generator/amplitude_loading.py +22 -12
- classiq/interface/generator/ansatz_library.py +5 -5
- classiq/interface/generator/application_apis/arithmetic_declarations.py +8 -5
- 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 +46 -5
- classiq/interface/generator/arith/arithmetic.py +35 -16
- classiq/interface/generator/arith/arithmetic_arg_type_validator.py +6 -7
- classiq/interface/generator/arith/arithmetic_expression_abc.py +66 -25
- classiq/interface/generator/arith/arithmetic_expression_parser.py +11 -11
- classiq/interface/generator/arith/arithmetic_expression_validator.py +47 -43
- classiq/interface/generator/arith/arithmetic_operations.py +14 -6
- 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 +3 -2
- classiq/interface/generator/arith/binary_ops.py +218 -130
- classiq/interface/generator/arith/endianness.py +1 -1
- classiq/interface/generator/arith/extremum_operations.py +96 -25
- classiq/interface/generator/arith/logical_ops.py +14 -12
- classiq/interface/generator/arith/number_utils.py +12 -6
- classiq/interface/generator/arith/register_user_input.py +60 -37
- classiq/interface/generator/arith/unary_ops.py +49 -29
- 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 +3 -3
- 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 +7 -7
- classiq/interface/generator/compiler_keywords.py +5 -1
- classiq/interface/generator/complex_type.py +13 -18
- classiq/interface/generator/constant.py +3 -4
- classiq/interface/generator/control_state.py +34 -29
- 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 +21 -5
- 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 +5 -5
- classiq/interface/generator/expressions/expression.py +26 -14
- 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 +34 -8
- 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 +19 -11
- classiq/interface/generator/finance.py +2 -2
- 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 +36 -64
- classiq/interface/generator/functions/__init__.py +0 -22
- 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 +153 -20
- classiq/interface/generator/grover_diffuser.py +32 -25
- classiq/interface/generator/grover_operator.py +34 -25
- 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 +9 -9
- classiq/interface/generator/hardware/hardware_data.py +72 -34
- classiq/interface/generator/hardware_efficient_ansatz.py +20 -16
- classiq/interface/generator/hartree_fock.py +13 -5
- classiq/interface/generator/identity.py +10 -6
- classiq/interface/generator/linear_pauli_rotations.py +32 -20
- classiq/interface/generator/mcmt_method.py +1 -1
- classiq/interface/generator/mcu.py +17 -15
- classiq/interface/generator/mcx.py +24 -17
- classiq/interface/generator/model/__init__.py +2 -5
- classiq/interface/generator/model/constraints.py +26 -8
- classiq/interface/generator/model/model.py +27 -190
- classiq/interface/generator/model/preferences/preferences.py +115 -41
- classiq/{quantum_register.py → interface/generator/model/quantum_register.py} +14 -17
- classiq/interface/generator/oracles/arithmetic_oracle.py +2 -4
- classiq/interface/generator/oracles/custom_oracle.py +15 -13
- classiq/interface/generator/oracles/oracle_abc.py +7 -7
- 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 +41 -30
- classiq/interface/generator/qsvm.py +9 -10
- classiq/interface/generator/quantum_function_call.py +88 -73
- classiq/interface/generator/quantum_program.py +41 -24
- classiq/interface/generator/range_types.py +11 -12
- classiq/interface/generator/register_role.py +18 -6
- classiq/interface/generator/slice_parsing_utils.py +5 -5
- classiq/interface/generator/standard_gates/controlled_standard_gates.py +30 -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 +4 -7
- classiq/interface/generator/state_preparation/state_preparation.py +25 -20
- 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 +7 -11
- classiq/interface/generator/ucc.py +5 -4
- classiq/interface/generator/unitary_gate.py +5 -5
- classiq/interface/generator/user_defined_function_params.py +4 -1
- classiq/interface/generator/validations/flow_graph.py +7 -7
- classiq/interface/generator/validations/validator_functions.py +4 -4
- classiq/interface/generator/visitor.py +23 -16
- classiq/interface/hardware.py +29 -8
- classiq/interface/helpers/classproperty.py +8 -0
- classiq/interface/helpers/custom_encoders.py +2 -2
- 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 -5
- classiq/interface/helpers/validation_helpers.py +3 -20
- classiq/interface/helpers/versioned_model.py +1 -4
- 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 +29 -69
- classiq/interface/model/allocate.py +16 -0
- classiq/interface/model/bind_operation.py +32 -9
- 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 +29 -24
- classiq/interface/model/invert.py +12 -0
- classiq/interface/model/model.py +69 -61
- classiq/interface/model/native_function_definition.py +17 -20
- 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 +30 -18
- 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 +141 -343
- classiq/interface/model/quantum_function_declaration.py +190 -157
- classiq/interface/model/quantum_lambda_function.py +33 -32
- classiq/interface/model/quantum_statement.py +71 -12
- classiq/interface/model/quantum_type.py +177 -40
- classiq/interface/model/quantum_variable_declaration.py +3 -25
- classiq/interface/model/repeat.py +15 -0
- classiq/interface/model/statement_block.py +40 -14
- classiq/interface/model/validation_handle.py +13 -6
- classiq/interface/model/variable_declaration_statement.py +3 -1
- classiq/interface/model/within_apply_operation.py +7 -5
- classiq/interface/server/global_versions.py +6 -7
- classiq/interface/server/routes.py +17 -21
- classiq/interface/source_reference.py +59 -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 +10 -10
- classiq/qmod/builtins/__init__.py +19 -2
- classiq/qmod/builtins/classical_execution_primitives.py +36 -14
- classiq/qmod/builtins/classical_functions.py +39 -43
- 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 +373 -40
- classiq/qmod/builtins/structs.py +103 -80
- classiq/qmod/cfunc.py +2 -2
- classiq/qmod/classical_function.py +4 -8
- classiq/qmod/cparam.py +64 -0
- classiq/qmod/create_model_function.py +56 -0
- classiq/qmod/declaration_inferrer.py +143 -101
- classiq/qmod/expression_query.py +20 -4
- classiq/qmod/generative.py +42 -0
- classiq/qmod/model_state_container.py +18 -6
- classiq/qmod/native/__init__.py +7 -0
- classiq/qmod/native/expression_to_qmod.py +16 -11
- classiq/qmod/native/pretty_printer.py +187 -97
- 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 +60 -8
- classiq/qmod/qmod_constant.py +93 -26
- classiq/qmod/qmod_parameter.py +68 -59
- classiq/qmod/qmod_variable.py +468 -155
- classiq/qmod/quantum_callable.py +17 -7
- classiq/qmod/quantum_expandable.py +269 -96
- classiq/qmod/quantum_function.py +196 -41
- 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 +147 -123
- classiq/qmod/symbolic_expr.py +27 -12
- classiq/qmod/symbolic_type.py +2 -5
- classiq/qmod/type_attribute_remover.py +32 -0
- classiq/qmod/utilities.py +98 -4
- classiq/qmod/write_qmod.py +17 -3
- classiq/synthesis.py +210 -22
- {classiq-0.38.0.dist-info → classiq-0.65.3.dist-info}/METADATA +16 -9
- classiq-0.65.3.dist-info/RECORD +521 -0
- classiq/_internals/_qfunc_ext.py +0 -6
- classiq/applications/benchmarking/__init__.py +0 -9
- classiq/applications/benchmarking/mirror_benchmarking.py +0 -70
- classiq/applications/numpy_utils.py +0 -37
- classiq/applications_model_constructors/__init__.py +0 -25
- classiq/applications_model_constructors/combinatorial_helpers/multiple_comp_basis_sp.py +0 -34
- classiq/applications_model_constructors/combinatorial_helpers/pauli_helpers/pauli_utils.py +0 -65
- classiq/applications_model_constructors/combinatorial_helpers/pyomo_utils.py +0 -243
- classiq/applications_model_constructors/libraries/ampltitude_estimation_library.py +0 -11
- classiq/applications_model_constructors/libraries/qmci_library.py +0 -107
- 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/interface/executor/aws_execution_cost.py +0 -73
- classiq/interface/executor/error_mitigation.py +0 -6
- classiq/interface/generator/credit_risk_example/linear_gci.py +0 -122
- classiq/interface/generator/credit_risk_example/weighted_adder.py +0 -69
- 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/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 -1229
- classiq/interface/generator/functions/core_lib_declarations/quantum_operators.py +0 -95
- classiq/interface/generator/functions/foreign_function_definition.py +0 -114
- classiq/interface/generator/functions/function_implementation.py +0 -107
- classiq/interface/generator/functions/native_function_definition.py +0 -155
- classiq/interface/generator/functions/quantum_function_declaration.py +0 -69
- classiq/interface/generator/functions/register.py +0 -44
- classiq/interface/generator/functions/register_mapping_data.py +0 -106
- 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 -74
- classiq/interface/generator/types/builtin_struct_declarations/__init__.py +0 -1
- classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +0 -22
- classiq/interface/ide/show.py +0 -34
- classiq/interface/model/call_synthesis_data.py +0 -68
- classiq/interface/model/common_model_types.py +0 -23
- classiq/interface/model/quantum_expressions/control_state.py +0 -38
- classiq/interface/model/quantum_if_operation.py +0 -94
- 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 -156
- 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 -462
- classiq/model/logic_flow.py +0 -149
- classiq/model/logic_flow_change_handler.py +0 -71
- classiq/model/model.py +0 -229
- classiq/qmod/builtins/functions.py +0 -913
- classiq/qmod/qmod_struct.py +0 -37
- classiq/quantum_functions/__init__.py +0 -17
- classiq/quantum_functions/annotation_parser.py +0 -205
- 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.38.0.dist-info/RECORD +0 -454
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/__init__.py +0 -0
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/__init__.py +0 -0
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/pauli_helpers/__init__.py +0 -0
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/pauli_helpers/pauli_sparsing.py +0 -0
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/py.typed +0 -0
- /classiq/{applications_model_constructors/combinatorial_helpers/transformations → applications/combinatorial_helpers/solvers}/__init__.py +0 -0
- /classiq/{applications_model_constructors/libraries → applications/combinatorial_helpers/transformations}/__init__.py +0 -0
- /classiq/{interface/generator/credit_risk_example → applications/hamiltonian}/__init__.py +0 -0
- /classiq/{interface/generator/functions/core_lib_declarations → applications/libraries}/__init__.py +0 -0
- /classiq/interface/{model/resolvers → debug_info}/__init__.py +0 -0
- /classiq/{_internals → interface}/enum_utils.py +0 -0
- /classiq/interface/{model/validations → generator/functions/builtins}/__init__.py +0 -0
- /classiq/{interface/generator/functions/core_lib_declarations/quantum_functions/chemistry_functions.py → model_expansions/__init__.py} +0 -0
- {classiq-0.38.0.dist-info → classiq-0.65.3.dist-info}/WHEEL +0 -0
classiq/qmod/symbolic_type.py
CHANGED
@@ -1,8 +1,5 @@
|
|
1
|
-
from typing import
|
1
|
+
from typing import Union
|
2
2
|
|
3
|
-
from classiq.qmod.qmod_parameter import QParam
|
4
3
|
from classiq.qmod.symbolic_expr import SymbolicExpr
|
5
4
|
|
6
|
-
SymbolicTypes = Union[
|
7
|
-
QParam, SymbolicExpr, int, float, bool, Tuple["SymbolicTypes", ...]
|
8
|
-
]
|
5
|
+
SymbolicTypes = Union[SymbolicExpr, int, float, bool, tuple["SymbolicTypes", ...]]
|
@@ -0,0 +1,32 @@
|
|
1
|
+
from classiq.interface.generator.visitor import Transformer
|
2
|
+
from classiq.interface.model.port_declaration import PortDeclaration
|
3
|
+
from classiq.interface.model.quantum_function_declaration import (
|
4
|
+
AnonQuantumOperandDeclaration,
|
5
|
+
)
|
6
|
+
from classiq.interface.model.quantum_type import QuantumBitvector, QuantumNumeric
|
7
|
+
|
8
|
+
|
9
|
+
def decl_without_type_attributes(
|
10
|
+
operand_declaration: AnonQuantumOperandDeclaration,
|
11
|
+
) -> AnonQuantumOperandDeclaration:
|
12
|
+
remover = AttributeRemover()
|
13
|
+
return operand_declaration.model_copy(
|
14
|
+
update=dict(
|
15
|
+
positional_arg_declarations=[
|
16
|
+
remover.visit(arg) if isinstance(arg, PortDeclaration) else arg
|
17
|
+
for arg in operand_declaration.positional_arg_declarations
|
18
|
+
]
|
19
|
+
)
|
20
|
+
)
|
21
|
+
|
22
|
+
|
23
|
+
class AttributeRemover(Transformer):
|
24
|
+
"""Remove attributes that could be expressions such as length, fraction places, etc."""
|
25
|
+
|
26
|
+
def visit_QuantumNumeric(self, node: QuantumNumeric) -> QuantumNumeric:
|
27
|
+
return QuantumNumeric(source_ref=node.source_ref)
|
28
|
+
|
29
|
+
def visit_QuantumBitvector(self, node: QuantumBitvector) -> QuantumBitvector:
|
30
|
+
return QuantumBitvector(
|
31
|
+
element_type=self.visit(node.element_type), source_ref=node.source_ref
|
32
|
+
)
|
classiq/qmod/utilities.py
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
+
import dataclasses
|
2
|
+
import inspect
|
3
|
+
import itertools
|
1
4
|
import keyword
|
2
5
|
import sys
|
3
|
-
from
|
6
|
+
from enum import Enum as PythonEnum
|
7
|
+
from types import FrameType
|
8
|
+
from typing import Any, ForwardRef, Literal, Optional, get_args, get_origin, overload
|
9
|
+
|
10
|
+
from classiq.interface.source_reference import SourceReference
|
4
11
|
|
5
12
|
DEFAULT_DECIMAL_PRECISION = 4
|
6
13
|
|
@@ -11,8 +18,19 @@ def mangle_keyword(name: str) -> str:
|
|
11
18
|
return name
|
12
19
|
|
13
20
|
|
21
|
+
@overload
|
14
22
|
def unmangle_keyword(name: str) -> str:
|
15
|
-
|
23
|
+
pass
|
24
|
+
|
25
|
+
|
26
|
+
@overload
|
27
|
+
def unmangle_keyword(name: None) -> None:
|
28
|
+
pass
|
29
|
+
|
30
|
+
|
31
|
+
def unmangle_keyword(name: Optional[str]) -> Optional[str]:
|
32
|
+
if name is None:
|
33
|
+
return None
|
16
34
|
if name[-1] == "_" and keyword.iskeyword(name[:-1]):
|
17
35
|
name = name[:-1]
|
18
36
|
return name
|
@@ -22,6 +40,82 @@ def version_portable_get_args(py_type: type) -> tuple:
|
|
22
40
|
if get_origin(py_type) is None:
|
23
41
|
return tuple()
|
24
42
|
if sys.version_info[0:2] < (3, 10):
|
25
|
-
|
43
|
+
type_args = get_args(py_type) # The result of __class_getitem__
|
26
44
|
else:
|
27
|
-
|
45
|
+
type_args = get_args(py_type)[0]
|
46
|
+
if not isinstance(type_args, tuple):
|
47
|
+
return (type_args,)
|
48
|
+
return tuple(
|
49
|
+
(
|
50
|
+
version_portable_get_args(type_arg)[0]
|
51
|
+
if get_origin(type_arg) == Literal
|
52
|
+
else type_arg
|
53
|
+
)
|
54
|
+
for type_arg in type_args
|
55
|
+
)
|
56
|
+
|
57
|
+
|
58
|
+
def get_source_ref(frame: FrameType) -> SourceReference:
|
59
|
+
filename = inspect.getfile(frame)
|
60
|
+
lineno = frame.f_lineno
|
61
|
+
if sys.version_info[0:2] < (3, 11) or frame.f_lasti < 0:
|
62
|
+
source_ref = SourceReference(
|
63
|
+
file_name=filename,
|
64
|
+
start_line=lineno - 1,
|
65
|
+
start_column=-1,
|
66
|
+
end_line=-1,
|
67
|
+
end_column=-1,
|
68
|
+
)
|
69
|
+
else:
|
70
|
+
positions_gen = frame.f_code.co_positions()
|
71
|
+
positions = next(itertools.islice(positions_gen, frame.f_lasti // 2, None))
|
72
|
+
source_ref = SourceReference(
|
73
|
+
file_name=filename,
|
74
|
+
start_line=(positions[0] or 0) - 1,
|
75
|
+
start_column=(positions[2] or 0) - 1,
|
76
|
+
end_line=(positions[1] or 0) - 1,
|
77
|
+
end_column=(positions[3] or 0) - 1,
|
78
|
+
)
|
79
|
+
return source_ref
|
80
|
+
|
81
|
+
|
82
|
+
def qmod_val_to_expr_str(val: Any) -> str:
|
83
|
+
if dataclasses.is_dataclass(type(val)):
|
84
|
+
kwargs_str = ", ".join(
|
85
|
+
[
|
86
|
+
f"{field.name}={qmod_val_to_expr_str(vars(val)[field.name])}"
|
87
|
+
for field in dataclasses.fields(val)
|
88
|
+
]
|
89
|
+
)
|
90
|
+
return f"struct_literal({type(val).__name__}, {kwargs_str})"
|
91
|
+
|
92
|
+
if isinstance(val, list):
|
93
|
+
elements_str = ", ".join([qmod_val_to_expr_str(elem) for elem in val])
|
94
|
+
return f"[{elements_str}]"
|
95
|
+
|
96
|
+
if isinstance(val, PythonEnum):
|
97
|
+
return f"{type(val).__name__}.{val.name}"
|
98
|
+
|
99
|
+
return str(val)
|
100
|
+
|
101
|
+
|
102
|
+
def unwrap_forward_ref(x: Any) -> Any:
|
103
|
+
if isinstance(x, ForwardRef):
|
104
|
+
return x.__forward_arg__
|
105
|
+
return x
|
106
|
+
|
107
|
+
|
108
|
+
def varname(depth: int) -> Optional[str]:
|
109
|
+
frame = sys._getframe(depth)
|
110
|
+
codes = inspect.getframeinfo(frame).code_context
|
111
|
+
if codes is None or len(codes) != 1:
|
112
|
+
return None
|
113
|
+
code = codes[0]
|
114
|
+
if "=" not in code:
|
115
|
+
return None
|
116
|
+
var_name = code.split("=")[0].strip()
|
117
|
+
if ":" in var_name:
|
118
|
+
var_name = var_name.split(":")[0].strip()
|
119
|
+
if not var_name.isidentifier():
|
120
|
+
return None
|
121
|
+
return var_name
|
classiq/qmod/write_qmod.py
CHANGED
@@ -17,13 +17,27 @@ def write_qmod(
|
|
17
17
|
directory: Optional[Path] = None,
|
18
18
|
decimal_precision: int = DEFAULT_DECIMAL_PRECISION,
|
19
19
|
) -> None:
|
20
|
-
|
20
|
+
"""
|
21
|
+
Creates a native Qmod file from a serialized model and outputs the synthesis options (Preferences and Constraints) to a file.
|
22
|
+
The native Qmod file may be uploaded to the Classiq IDE.
|
23
|
+
|
24
|
+
Args:
|
25
|
+
serialized_model: The serialized model to write as a native Qmod file and synthesis options file.
|
26
|
+
name: The name to save the file by.
|
27
|
+
directory: The directory to save the files in. If None, the current working directory is used.
|
28
|
+
decimal_precision: The number of decimal places to use for numbers, set to 4 by default.
|
29
|
+
|
30
|
+
Returns:
|
31
|
+
None
|
32
|
+
"""
|
33
|
+
|
34
|
+
model = Model.model_validate_json(serialized_model)
|
21
35
|
pretty_printed_model = DSLPrettyPrinter(decimal_precision=decimal_precision).visit(
|
22
36
|
model
|
23
37
|
)
|
24
38
|
|
25
|
-
synthesis_options = model.
|
26
|
-
include={"constraints", "preferences"},
|
39
|
+
synthesis_options = model.model_dump(
|
40
|
+
include={"constraints", "preferences"}, exclude_none=True
|
27
41
|
)
|
28
42
|
|
29
43
|
synthesis_options_path = Path(f"{name}.{_SYNTHESIS_OPTIONS_SUFFIX}")
|
classiq/synthesis.py
CHANGED
@@ -1,59 +1,247 @@
|
|
1
|
-
from typing import NewType
|
1
|
+
from typing import Any, NewType, Optional
|
2
2
|
|
3
3
|
import pydantic
|
4
4
|
|
5
|
+
from classiq.interface.analyzer.result import QasmCode
|
6
|
+
from classiq.interface.exceptions import ClassiqValueError
|
5
7
|
from classiq.interface.executor.execution_preferences import ExecutionPreferences
|
6
8
|
from classiq.interface.generator.model.constraints import Constraints
|
7
9
|
from classiq.interface.generator.model.preferences.preferences import Preferences
|
8
|
-
from classiq.interface.model.
|
9
|
-
from classiq.interface.model.model import SerializedModel
|
10
|
+
from classiq.interface.model.model import Model, SerializedModel
|
10
11
|
|
12
|
+
from classiq import QuantumProgram
|
13
|
+
from classiq._internals import async_utils
|
11
14
|
from classiq._internals.api_wrapper import ApiWrapper
|
12
|
-
from classiq._internals.async_utils import syncify_function
|
13
15
|
|
14
16
|
SerializedQuantumProgram = NewType("SerializedQuantumProgram", str)
|
15
17
|
|
18
|
+
CANT_PARSE_QUANTUM_PROGRAM_MSG = (
|
19
|
+
"Can not parse quantum_program into GeneratedCircuit, \n"
|
20
|
+
)
|
21
|
+
|
22
|
+
|
23
|
+
def show(quantum_program: SerializedQuantumProgram, display_url: bool = True) -> None:
|
24
|
+
"""
|
25
|
+
Displays the interactive representation of the quantum program in the Classiq IDE.
|
26
|
+
|
27
|
+
Args:
|
28
|
+
quantum_program:
|
29
|
+
The serialized quantum program to be displayed.
|
30
|
+
display_url:
|
31
|
+
Whether to print the url
|
32
|
+
|
33
|
+
Links:
|
34
|
+
[Visualization tool](https://docs.classiq.io/latest/reference-manual/analyzer/quantum-program-visualization-tool/)
|
35
|
+
"""
|
36
|
+
try:
|
37
|
+
circuit = QuantumProgram.model_validate_json(quantum_program)
|
38
|
+
except pydantic.ValidationError as exc:
|
39
|
+
raise ClassiqValueError(CANT_PARSE_QUANTUM_PROGRAM_MSG) from exc
|
40
|
+
circuit.show() # type: ignore[attr-defined]
|
41
|
+
|
42
|
+
|
43
|
+
async def quantum_program_from_qasm_async(qasm: str) -> SerializedQuantumProgram:
|
44
|
+
quantum_program = await ApiWrapper.get_generated_circuit_from_qasm(
|
45
|
+
QasmCode(code=qasm)
|
46
|
+
)
|
47
|
+
return SerializedQuantumProgram(quantum_program.model_dump_json())
|
48
|
+
|
49
|
+
|
50
|
+
def quantum_program_from_qasm(qasm: str) -> SerializedQuantumProgram:
|
51
|
+
"""
|
52
|
+
generate a quantum program from a QASM file.
|
53
|
+
|
54
|
+
Args:
|
55
|
+
qasm: A QASM2/3 string.
|
56
|
+
|
57
|
+
Returns:
|
58
|
+
SerializedQuantumProgram: Quantum program serialized as a string. (See: QuantumProgram)
|
59
|
+
"""
|
60
|
+
return async_utils.run(quantum_program_from_qasm_async(qasm))
|
61
|
+
|
16
62
|
|
17
63
|
async def synthesize_async(
|
18
|
-
serialized_model:
|
64
|
+
serialized_model: SerializedModel,
|
19
65
|
) -> SerializedQuantumProgram:
|
20
|
-
model
|
66
|
+
model = Model.model_validate_json(serialized_model)
|
21
67
|
quantum_program = await ApiWrapper.call_generation_task(model)
|
22
|
-
return SerializedQuantumProgram(quantum_program.
|
68
|
+
return SerializedQuantumProgram(quantum_program.model_dump_json(indent=2))
|
69
|
+
|
70
|
+
|
71
|
+
def synthesize(
|
72
|
+
serialized_model: SerializedModel, auto_show: bool = False
|
73
|
+
) -> SerializedQuantumProgram:
|
74
|
+
"""
|
75
|
+
Synthesize a model with the Classiq engine to receive a quantum program.
|
76
|
+
[More details](https://docs.classiq.io/latest/reference-manual/synthesis/)
|
23
77
|
|
78
|
+
Args:
|
79
|
+
serialized_model: A model object serialized as a string.
|
80
|
+
auto_show: boolean. whether to call `show` on the output
|
24
81
|
|
25
|
-
|
82
|
+
Returns:
|
83
|
+
SerializedQuantumProgram: Quantum program serialized as a string. (See: QuantumProgram)
|
84
|
+
"""
|
85
|
+
result = async_utils.run(synthesize_async(serialized_model))
|
86
|
+
if auto_show:
|
87
|
+
show(result)
|
88
|
+
return result
|
26
89
|
|
27
90
|
|
28
91
|
def set_preferences(
|
29
|
-
serialized_model:
|
30
|
-
|
31
|
-
|
92
|
+
serialized_model: SerializedModel,
|
93
|
+
preferences: Optional[Preferences] = None,
|
94
|
+
**kwargs: Any
|
95
|
+
) -> SerializedModel:
|
96
|
+
"""
|
97
|
+
Overrides the preferences of a (serialized) model and returns the updated model.
|
98
|
+
|
99
|
+
Args:
|
100
|
+
serialized_model: The model in serialized form.
|
101
|
+
preferences: The new preferences to be set for the model. Can be passed as keyword arguments.
|
102
|
+
|
103
|
+
Returns:
|
104
|
+
SerializedModel: The updated model with the new preferences applied.
|
105
|
+
"""
|
106
|
+
if preferences is None:
|
107
|
+
if kwargs:
|
108
|
+
preferences = Preferences(**kwargs)
|
109
|
+
else:
|
110
|
+
raise ClassiqValueError(
|
111
|
+
"Missing preferences. Either pass `Preferences` object or pass keywords"
|
112
|
+
)
|
113
|
+
|
114
|
+
model = Model.model_validate_json(serialized_model)
|
32
115
|
model.preferences = preferences
|
33
|
-
return model.get_model()
|
116
|
+
return model.get_model()
|
117
|
+
|
118
|
+
|
119
|
+
def update_preferences(
|
120
|
+
serialized_model: SerializedModel, **kwargs: Any
|
121
|
+
) -> SerializedModel:
|
122
|
+
"""
|
123
|
+
Updates the preferences of a (serialized) model and returns the updated model.
|
124
|
+
|
125
|
+
Args:
|
126
|
+
serialized_model: The model in serialized form.
|
127
|
+
kwargs: key-value combination of preferences fields to update
|
128
|
+
|
129
|
+
Returns:
|
130
|
+
SerializedModel: The updated model with the new preferences applied.
|
131
|
+
"""
|
132
|
+
model = Model.model_validate_json(serialized_model)
|
133
|
+
|
134
|
+
for key, value in kwargs.items():
|
135
|
+
setattr(model.preferences, key, value)
|
136
|
+
return model.get_model()
|
34
137
|
|
35
138
|
|
36
139
|
def set_constraints(
|
37
|
-
serialized_model:
|
38
|
-
|
39
|
-
|
140
|
+
serialized_model: SerializedModel,
|
141
|
+
constraints: Optional[Constraints] = None,
|
142
|
+
**kwargs: Any
|
143
|
+
) -> SerializedModel:
|
144
|
+
"""
|
145
|
+
Overrides the constraints of a (serialized) model and returns the updated model.
|
146
|
+
|
147
|
+
Args:
|
148
|
+
serialized_model: The model in serialized form.
|
149
|
+
constraints: The new constraints to be set for the model. Can be passed as keyword arguments.
|
150
|
+
|
151
|
+
Returns:
|
152
|
+
SerializedModel: The updated model with the new constraints applied.
|
153
|
+
"""
|
154
|
+
if constraints is None:
|
155
|
+
if kwargs:
|
156
|
+
constraints = Constraints(**kwargs)
|
157
|
+
else:
|
158
|
+
raise ClassiqValueError(
|
159
|
+
"Missing constraints. Either pass `Constraints` object or pass keywords"
|
160
|
+
)
|
161
|
+
|
162
|
+
model = Model.model_validate_json(serialized_model)
|
40
163
|
model.constraints = constraints
|
41
|
-
return model.get_model()
|
164
|
+
return model.get_model()
|
165
|
+
|
166
|
+
|
167
|
+
def update_constraints(
|
168
|
+
serialized_model: SerializedModel, **kwargs: Any
|
169
|
+
) -> SerializedModel:
|
170
|
+
"""
|
171
|
+
Updates the constraints of a (serialized) model and returns the updated model.
|
172
|
+
|
173
|
+
Args:
|
174
|
+
serialized_model: The model in serialized form.
|
175
|
+
kwargs: key-value combination of constraints fields to update
|
176
|
+
|
177
|
+
Returns:
|
178
|
+
SerializedModel: The updated model with the new constraints applied.
|
179
|
+
"""
|
180
|
+
model = Model.model_validate_json(serialized_model)
|
181
|
+
|
182
|
+
for key, value in kwargs.items():
|
183
|
+
setattr(model.constraints, key, value)
|
184
|
+
return model.get_model()
|
42
185
|
|
43
186
|
|
44
187
|
def set_execution_preferences(
|
45
|
-
serialized_model:
|
46
|
-
|
47
|
-
|
188
|
+
serialized_model: SerializedModel,
|
189
|
+
execution_preferences: Optional[ExecutionPreferences] = None,
|
190
|
+
**kwargs: Any
|
191
|
+
) -> SerializedModel:
|
192
|
+
"""
|
193
|
+
Overrides the execution preferences of a (serialized) model and returns the updated model.
|
194
|
+
|
195
|
+
Args:
|
196
|
+
serialized_model: A serialization of the defined model.
|
197
|
+
execution_preferences: The new execution preferences to be set for the model. Can be passed as keyword arguments.
|
198
|
+
Returns:
|
199
|
+
SerializedModel: The model with the attached execution preferences.
|
200
|
+
|
201
|
+
For more examples please see: [set_execution_preferences](https://docs.classiq.io/latest/reference-manual/executor/?h=set_execution_preferences#usage)
|
202
|
+
"""
|
203
|
+
if execution_preferences is None:
|
204
|
+
if kwargs:
|
205
|
+
execution_preferences = ExecutionPreferences(**kwargs)
|
206
|
+
else:
|
207
|
+
raise ClassiqValueError(
|
208
|
+
"Missing execution_preferences. Either pass `ExecutionPreferences` object or pass keywords"
|
209
|
+
)
|
210
|
+
|
211
|
+
model = Model.model_validate_json(serialized_model)
|
48
212
|
model.execution_preferences = execution_preferences
|
49
|
-
return model.get_model()
|
213
|
+
return model.get_model()
|
214
|
+
|
215
|
+
|
216
|
+
def update_execution_preferences(
|
217
|
+
serialized_model: SerializedModel, **kwargs: Any
|
218
|
+
) -> SerializedModel:
|
219
|
+
"""
|
220
|
+
Updates the execution_preferences of a (serialized) model and returns the updated model.
|
221
|
+
|
222
|
+
Args:
|
223
|
+
serialized_model: The model in serialized form.
|
224
|
+
kwargs: key-value combination of execution_preferences fields to update
|
225
|
+
|
226
|
+
Returns:
|
227
|
+
SerializedModel: The updated model with the new execution_preferences applied.
|
228
|
+
"""
|
229
|
+
model = Model.model_validate_json(serialized_model)
|
230
|
+
|
231
|
+
for key, value in kwargs.items():
|
232
|
+
setattr(model.execution_preferences, key, value)
|
233
|
+
|
234
|
+
return model.get_model()
|
50
235
|
|
51
236
|
|
52
237
|
__all__ = [
|
53
238
|
"SerializedModel",
|
54
239
|
"SerializedQuantumProgram",
|
55
|
-
"synthesize",
|
56
|
-
"set_preferences",
|
57
240
|
"set_constraints",
|
58
241
|
"set_execution_preferences",
|
242
|
+
"set_preferences",
|
243
|
+
"synthesize",
|
244
|
+
"update_constraints",
|
245
|
+
"update_execution_preferences",
|
246
|
+
"update_preferences",
|
59
247
|
]
|
@@ -1,13 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: classiq
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.65.3
|
4
4
|
Summary: Classiq's Python SDK for quantum computing
|
5
5
|
Home-page: https://classiq.io
|
6
6
|
License: Proprietary
|
7
7
|
Keywords: quantum computing,quantum circuits,quantum algorithms,QAD,QDL
|
8
8
|
Author: Classiq Technologies
|
9
9
|
Author-email: support@classiq.io
|
10
|
-
Requires-Python: >=3.
|
10
|
+
Requires-Python: >=3.9,<3.13
|
11
11
|
Classifier: Development Status :: 4 - Beta
|
12
12
|
Classifier: Intended Audience :: Developers
|
13
13
|
Classifier: Intended Audience :: Education
|
@@ -16,10 +16,10 @@ Classifier: License :: Other/Proprietary License
|
|
16
16
|
Classifier: Natural Language :: English
|
17
17
|
Classifier: Operating System :: OS Independent
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
19
|
-
Classifier: Programming Language :: Python :: 3.8
|
20
19
|
Classifier: Programming Language :: Python :: 3.9
|
21
20
|
Classifier: Programming Language :: Python :: 3.10
|
22
21
|
Classifier: Programming Language :: Python :: 3.11
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
23
23
|
Classifier: Programming Language :: Python :: 3 :: Only
|
24
24
|
Classifier: Topic :: Scientific/Engineering
|
25
25
|
Classifier: Topic :: Software Development
|
@@ -31,22 +31,29 @@ Provides-Extra: analyzer-sdk
|
|
31
31
|
Provides-Extra: qml
|
32
32
|
Requires-Dist: ConfigArgParse (>=1.5.3,<2.0.0)
|
33
33
|
Requires-Dist: Pyomo (>=6.5,<6.6)
|
34
|
+
Requires-Dist: black (>=24.0,<25.0)
|
34
35
|
Requires-Dist: httpx (>=0.23.0,<1)
|
35
36
|
Requires-Dist: ipywidgets (>=7.7.1,<8.0.0) ; extra == "analyzer-sdk"
|
37
|
+
Requires-Dist: jupyterlab (>=4.2.5,<5.0.0) ; extra == "analyzer-sdk"
|
36
38
|
Requires-Dist: keyring (>=23.5.0,<24.0.0)
|
37
39
|
Requires-Dist: matplotlib (>=3.4.3,<4.0.0)
|
38
40
|
Requires-Dist: networkx (>=2.5.1,<3.0.0)
|
41
|
+
Requires-Dist: notebook (>=7.2.2,<8.0.0) ; extra == "analyzer-sdk"
|
39
42
|
Requires-Dist: numexpr (>=2.7.3,<3.0.0)
|
40
|
-
Requires-Dist: numpy (>=1.20.1,<2.0.0)
|
41
|
-
Requires-Dist:
|
42
|
-
Requires-Dist:
|
43
|
+
Requires-Dist: numpy (>=1.20.1,<2.0.0) ; python_version < "3.12"
|
44
|
+
Requires-Dist: numpy (>=1.26.0,<2.0.0) ; python_version >= "3.12"
|
45
|
+
Requires-Dist: packaging (>=23.2,<24.0)
|
46
|
+
Requires-Dist: pandas (>=1.4.0,<3.0.0)
|
43
47
|
Requires-Dist: plotly (>=5.7.0,<6.0.0)
|
44
|
-
Requires-Dist: pydantic (>=
|
45
|
-
Requires-Dist:
|
46
|
-
Requires-Dist:
|
48
|
+
Requires-Dist: pydantic (>=2.9.0,<2.10.0)
|
49
|
+
Requires-Dist: pydantic-settings (>=2.4.0,<3.0.0)
|
50
|
+
Requires-Dist: scipy (>=1.10.0,<2.0.0) ; python_version < "3.12"
|
51
|
+
Requires-Dist: scipy (>=1.11.0,<2.0.0) ; python_version >= "3.12"
|
52
|
+
Requires-Dist: sympy (>=1.13.0,<2.0.0)
|
47
53
|
Requires-Dist: tabulate (>=0.8.9,<1)
|
48
54
|
Requires-Dist: torch (>=2.0,<3.0) ; extra == "qml"
|
49
55
|
Requires-Dist: torchvision (>=0.15,<1.0) ; extra == "qml"
|
56
|
+
Requires-Dist: tqdm (>=4.67.1,<5.0.0)
|
50
57
|
Project-URL: Documentation, https://docs.classiq.io/
|
51
58
|
Description-Content-Type: text/markdown
|
52
59
|
|