From 13ab25d1ab4e995b4f97b2eb5f6955a0337a6c24 Mon Sep 17 00:00:00 2001 From: soranjh Date: Fri, 6 Jun 2025 16:59:15 -0400 Subject: [PATCH 01/11] add intro --- ...how_to_build_vibrational_hamiltonians.json | 71 +++++++++++++++++++ ...l_how_to_build_vibrational_hamiltonians.py | 60 ++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json create mode 100644 demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json new file mode 100644 index 0000000000..79292d0d01 --- /dev/null +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json @@ -0,0 +1,71 @@ +{ + "title": "How to build spin Hamiltonians", + "authors": [ + { + "username": "ddhawan" + }, + { + "username": "soran" + } + ], + "dateOfPublication": "2024-12-05T00:00:00+00:00", + "dateOfLastModification": "2024-12-06T00:00:00+00:00", + "categories": [ + "Getting Started", + "How-to" + ], + "tags": [], + "previewImages": [ + { + "type": "thumbnail", + "uri": "/_static/demo_thumbnails/regular_demo_thumbnails/thumbnail_how_to_build_spin_hamiltonians.png" + }, + { + "type": "large_thumbnail", + "uri": "/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_how_to_build_spin_hamiltonians.png" + } + ], + "seoDescription": "Learn how to build spin Hamiltonians with PennyLane.", + "doi": "", + "references": [ + { + "id": "ashcroft", + "type": "book", + "title": "Solid State Physics", + "authors": "N. W. Ashcroft, D. N. Mermin", + "year": "1976", + "publisher": "New York: Saunders College Publishing", + "url": "https://en.wikipedia.org/wiki/Ashcroft_and_Mermin" + }, + { + "id": "jovanovic", + "type": "article", + "title": "Refraction and band isotropy in 2D square-like Archimedean photonic crystal lattices", + "authors": "D. Jovanovic, R. Gajic, K. Hingerl", + "journal": "Opt. Express", + "volume": "16", + "pages": "4048--4058", + "year": "2008", + "url": "https://opg.optica.org/oe/fulltext.cfm?uri=oe-16-6-4048&id=154856" + } + ], + "basedOnPapers": [], + "referencedByPapers": [], + "relatedContent": [ + { + "type": "demonstration", + "id": "tutorial_quantum_chemistry", + "weight": 1.0 + }, + { + "type": "demonstration", + "id": "tutorial_fermionic_operators", + "weight": 1.0 + }, + { + "type": "demonstration", + "id": "tutorial_isingmodel_PyTorch", + "weight": 1.0 + } + ] +} diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py new file mode 100644 index 0000000000..3c75658e5e --- /dev/null +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py @@ -0,0 +1,60 @@ +r"""How to build vibrational Hamiltonians +========================================= +Vibrational motions are crucially important to describe the quantum properties of molecules and +materials. Molecular vibrations can significantly affect the outcome of chemical reactions. There +are also several spectroscopy techniques that rely on the vibrational properties of molecules to +provide valuable insight to understand chemical systems and design new materials. Classical quantum +computations have been routinely implemented to describe vibrational motions of molecules. However, +efficient classical methods typically have fundamental theoretical limitations that prevent their +practical implementation for describing challenging vibrational systems. This makes quantum +algorithms an ideal choice where classical methods are not efficient or accurate. + +Quantum algorithms require a precise description of the system Hamiltonian to compute vibrational +properties. In this demo, we learn how to use PennyLane features to construct and manipulate +different representations of vibrational Hamiltonians. We also briefly discuss the implementation of +the Hamiltonian in an interesting quantum algorithm for computing the vibrational dynamics of a +molecule. + +.. figure:: ../_static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_how_to_build_spin_hamiltonians.png + :align: center + :width: 70% + :target: javascript:void(0) +""" + +###################################################################### +# Vibrational Hamiltonian +# ----------------------- +# A molecular vibrational Hamiltonian can be defined in terms of the kinetic energy operator of the +# nuclei, :math:`T`, and the potential energy operator, :math:`V`, that describes the interaction between +# the nuclei as: +# +# .. math:: +# +# H = T + V. +# +# +# Christiansen representation +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# The +# +# Conclusion +# ---------- +# The +# +# References +# ---------- +# +# .. [#aaa] +# +# N. W. , +# "". +# +# .. [#bbb] +# +# D. , +# "", +# 2008. +# +# About the authors +# ----------------- +# From 64563596194281744fefb0d52b78daa77307417d Mon Sep 17 00:00:00 2001 From: soranjh Date: Fri, 6 Jun 2025 17:39:42 -0400 Subject: [PATCH 02/11] add christiansen --- ...l_how_to_build_vibrational_hamiltonians.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py index 3c75658e5e..83d179a1df 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py @@ -32,10 +32,27 @@ # # H = T + V. # +# The kinetic energy operator can be written in terms of position and momentum operations or bosonic +# creation and annihilation operations. The potential energy operator is usually obtained by +# expanding the molecular potential energy surface over vibrational normal coordinates. The choice +# of these operations result in several ways to represent a vibrational Hamiltonian which are +# explained in the following. We also provide PennyLane codes for creating them. # # Christiansen representation # ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# The +# The Christiansen representation of the vibrational Hamiltonian is a second-quantization form for +# defining the Hamiltonian in term os bosonic creation :math:`b^{\dagger}` and annihilation +# :math:`b` operations: +# +# .. math:: +# +# H = \sum_{i}^M \sum_{k_i, l_i}^{N_i} C_{k_i, l_i}^{(i)} b_{k_i}^{\dagger} b_{l_i} + +# \sum_{i Date: Mon, 9 Jun 2025 15:22:40 -0400 Subject: [PATCH 03/11] add pes code --- ...l_how_to_build_vibrational_hamiltonians.py | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py index 83d179a1df..b893dd65bf 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py @@ -34,9 +34,19 @@ # # The kinetic energy operator can be written in terms of position and momentum operations or bosonic # creation and annihilation operations. The potential energy operator is usually obtained by -# expanding the molecular potential energy surface over vibrational normal coordinates. The choice -# of these operations result in several ways to represent a vibrational Hamiltonian which are -# explained in the following. We also provide PennyLane codes for creating them. +# expanding the molecular potential energy surface over vibrational normal coordinates :math:`Q`. +# +# .. math:: +# +# V({Q}) = \sum_i V_1(Q_i) + \sum_{ij} V_2(Q_i,Q_j) + .... +# +# This is typically done by performing single-point energy calculations at small distances along the +# normal mode coordinates. Computing the energies for each mode separately provides the term +# :math:`V_1` while displacing atoms along two different modes simultaneously gives the term +# :math:`V_2` and so on. +# +# There are several ways to represent a vibrational Hamiltonian. Here we explain some of these +# representations and provide PennyLane codes for constructing them. # # Christiansen representation # ^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -52,6 +62,23 @@ # # where :math:`M` represents the number of normal modes and :math:`N` is the number of modals. The # coefficients :math:`C` represent the one-mode and two-mode integrals defined here. +# +# PennyLane provides a set of functions to construct the Christiansen Hamiltonian, either directly +# in one step or by building the Hamiltonian from its building blocks step by step. An important +# step in both methods is to construct the potential energy operator which is done based on +# single-point energy calculations along the normal modes of the molecule. The +# :func:`~.pennylane.qchem.vibrational_pes` function in PennyLane provides an convenient way to +# perform the potential energy scan by just providing minimal input. + + +import numpy as np +import pennylane as qml + +symbols = ['H', 'F'] # define atomic symbols +geometry = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0]]) # define atom positions +mol = qml.qchem.Molecule(symbols, geometry) # construct the molecule +pes = qml.qchem.vibrational_pes(mol) + # # # Conclusion From d497621064eae2a2440402f70a5188aa3b72679f Mon Sep 17 00:00:00 2001 From: soranjh Date: Tue, 10 Jun 2025 15:55:34 -0400 Subject: [PATCH 04/11] add hamiltonians --- ...l_how_to_build_vibrational_hamiltonians.py | 136 ++++++++++++++---- 1 file changed, 112 insertions(+), 24 deletions(-) diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py index b893dd65bf..3ab643f6b7 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py @@ -25,34 +25,32 @@ # Vibrational Hamiltonian # ----------------------- # A molecular vibrational Hamiltonian can be defined in terms of the kinetic energy operator of the -# nuclei, :math:`T`, and the potential energy operator, :math:`V`, that describes the interaction between -# the nuclei as: +# nuclei, :math:`T`, and the potential energy operator, :math:`V`, that describes the interaction +# between the nuclei as: # # .. math:: # # H = T + V. # -# The kinetic energy operator can be written in terms of position and momentum operations or bosonic -# creation and annihilation operations. The potential energy operator is usually obtained by -# expanding the molecular potential energy surface over vibrational normal coordinates :math:`Q`. +# The kinetic and potential energy operators can be written in terms of momentum and position +# operators, respectively. There are several ways to construct the potential energy operator which +# lead to different representation of the vibrational Hamiltonian. Here we explain some of these +# representations and provide PennyLane codes for constructing them. +# +# Christiansen representation +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# The Christiansen representation of the vibrational Hamiltonian relies on the n-mode expansion of +# the potential energy surface :math:`V` over vibrational normal coordinates :math:`Q`. # # .. math:: # # V({Q}) = \sum_i V_1(Q_i) + \sum_{ij} V_2(Q_i,Q_j) + .... # -# This is typically done by performing single-point energy calculations at small distances along the -# normal mode coordinates. Computing the energies for each mode separately provides the term -# :math:`V_1` while displacing atoms along two different modes simultaneously gives the term -# :math:`V_2` and so on. +# This provides a general representation of the potential energy surface where the terms :math:`V_n` +# depend on :math:`n` vibrational mode at most. # -# There are several ways to represent a vibrational Hamiltonian. Here we explain some of these -# representations and provide PennyLane codes for constructing them. -# -# Christiansen representation -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# The Christiansen representation of the vibrational Hamiltonian is a second-quantization form for -# defining the Hamiltonian in term os bosonic creation :math:`b^{\dagger}` and annihilation -# :math:`b` operations: +# The Christiansen Hamiltonian is then constructed in second-quantization based on this potential +# energy surface and bosonic creation :math:`b^{\dagger}` and annihilation :math:`b` operations: # # .. math:: # @@ -61,25 +59,115 @@ # b_{k_i}^{\dagger} b_{k_j}^{\dagger} b_{l_i} b_{l_j}, # # where :math:`M` represents the number of normal modes and :math:`N` is the number of modals. The -# coefficients :math:`C` represent the one-mode and two-mode integrals defined here. +# coefficients :math:`C` represent n-mode integrals which depend on the :math:`n`-mode contribution +# of the potential energy, :math:`V_n`, defined above. # # PennyLane provides a set of functions to construct the Christiansen Hamiltonian, either directly # in one step or by building the Hamiltonian from its building blocks step by step. An important # step in both methods is to construct the potential energy operator which is done based on # single-point energy calculations along the normal modes of the molecule. The -# :func:`~.pennylane.qchem.vibrational_pes` function in PennyLane provides an convenient way to -# perform the potential energy scan by just providing minimal input. - +# :func:`~.pennylane.qchem.vibrational_pes` function in PennyLane provides a convenient way to +# perform the potential energy calculations for a given molecule. The calculations are typically +# done by performing single-point energy calculations at small distances along the +# normal mode coordinates. Computing the energies for each mode separately provides the term +# :math:`V_1` while displacing atoms along two different modes simultaneously gives the term +# :math:`V_2` and so on. +# +# Let's look at an example for the HF molecule. import numpy as np import pennylane as qml -symbols = ['H', 'F'] # define atomic symbols -geometry = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0]]) # define atom positions -mol = qml.qchem.Molecule(symbols, geometry) # construct the molecule +symbols = ['H', 'F'] +geometry = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0]]) +mol = qml.qchem.Molecule(symbols, geometry) pes = qml.qchem.vibrational_pes(mol) +###################################################################### +# The :func:`~.pennylane.qchem.vibrational_pes` function creates a +# :class:`~.pennylane.qchem.VibrationalPES` object that stores the potential energy surface +# and vibrational information. This object is the input for several functions that we learn about +# here. For instance, the :func:`~.pennylane.qchem.christiansen_integrals` function accepts this +# object to compute the integrals needed to construct the bosonic form of the Christiansen +# Hamiltonian defined above. + +integrals = qml.qchem.vibrational.christiansen_integrals(pes,n_states=4) +h_bosonic = qml.qchem.christiansen_bosonic(integrals[0]) +print(h_bosonic) + +###################################################################### +# The bosonic Hamiltonian constructed with :func:`~.pennylane.qchem.christiansen_bosonic` can be +# mapped to its qubit form by using the proper mapping equations defined in the +# :func:`~.pennylane.qchem.christiansen_mapping` function. + +h_qubit = qml.bose.christiansen_mapping(h_bosonic) +h_qubit + +###################################################################### +# This provides a vibrational Hamiltonian in the qubit basis that can be used in any desired quantum +# algorithm in PennyLane. +# +# Note that PennyLane also provides the :func:`~.pennylane.qchem.christiansen_hamiltonian` function +# that uses the :class:`~.pennylane.qchem.VibrationalPES` object directly and builds the qubit +# Christiansen Hamiltonian. + +h_qubit2 = qml.qchem.vibrational.christiansen_hamiltonian(pes,n_states=4) + +###################################################################### +# You can verify that the two Hamiltonians are identical. +# +# Taylor representation +# ^^^^^^^^^^^^^^^^^^^^^ +# The Taylor representation of the vibrational Hamiltonian relies on a Taylor expansion of +# the potential energy surface :math:`V` in terms of the vibrational mass-weighted normal +# coordinate operators :math:`q`. +# +# .. math:: +# +# V = V_0 + \sum_i F_i q_i + \sum_{ij} F_{ij} q_i,q_j + .... +# +# Note that the force constants :math:`F` are derivatives of the potential energy surface. # +# The Taylor Hamiltonian can then be constructed by defining the kinetic and potential energy +# components in terms of the momentum and coordinate operators. +# +# .. math:: +# +# H = \sum_{i \ge j} K_{ij} p_i p_j + \sum_{i\ge j} \Phi_{ij}^{(2)} q_i q_j + +# \sum_{i \ge j \ge k} \Phi_{ijk}^{(3)} q_i q_j q_k + ..., +# +# where the coefficients :math:`\Phi` are obtained from the force constants :math:`F` after +# rearranging the terms in the potential energy operator according to the number of different modes. +# +# The :func:`~.pennylane.qchem.taylor_coeffs` function computes the coefficients :math:`\Phi` from +# a :class:`~.pennylane.qchem.VibrationalPES` object. + +one, two = qml.qchem.taylor_coeffs(pes) + +###################################################################### +# We can then use these coefficients to construct a bosonic form of the Taylor Hamiltonian. + +h_bosonic = qml.qchem.taylor_bosonic(coeffs=[one, two], freqs=pes.freqs, uloc=pes.uloc) +print(h_bosonic) + +###################################################################### +# This bosonic Hamiltonian can be mapped to the qubit basis using mapping schemes of +# :func:`~.pennylane.bose.binary_mapping` or :func:`~.pennylane.bose.unary_mapping` functions. + +h_qubit = qml.binary_mapping(h_bosonic, n_states=4) +h_qubit + +###################################################################### +# This Hamiltonian can be used in any desired quantum algorithm in PennyLane. +# +# Note that PennyLane also provides the :func:`~.pennylane.qchem.taylor_hamiltonian` function +# that uses the :class:`~.pennylane.qchem.VibrationalPES` object directly and builds the qubit +# Taylor Hamiltonian. + +h_qubit2 = qml.qchem.vibrational.taylor_hamiltonian(pes, n_states=4) + +###################################################################### +# You can verify that the two Hamiltonians are identical. # # Conclusion # ---------- From 05408be0db3e9f10d065476850b444f48ae098eb Mon Sep 17 00:00:00 2001 From: Soran Jahangiri <40344468+soranjh@users.noreply.github.com> Date: Thu, 3 Jul 2025 09:44:00 -0400 Subject: [PATCH 05/11] Apply suggestions from code review Co-authored-by: Austin Huang Co-authored-by: Diksha Dhawan <40900030+ddhawan11@users.noreply.github.com> --- ...how_to_build_vibrational_hamiltonians.json | 4 +-- ...l_how_to_build_vibrational_hamiltonians.py | 31 +++++++++---------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json index 79292d0d01..66f6e3e4f1 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json @@ -1,5 +1,5 @@ { - "title": "How to build spin Hamiltonians", + "title": "How to build vibrational Hamiltonians", "authors": [ { "username": "ddhawan" @@ -25,7 +25,7 @@ "uri": "/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_how_to_build_spin_hamiltonians.png" } ], - "seoDescription": "Learn how to build spin Hamiltonians with PennyLane.", + "seoDescription": "Learn how to build vibrational Hamiltonians with PennyLane.", "doi": "", "references": [ { diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py index 3ab643f6b7..7486d0b118 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py @@ -1,12 +1,10 @@ r"""How to build vibrational Hamiltonians ========================================= -Vibrational motions are crucially important to describe the quantum properties of molecules and +Vibrational motions are crucial for describing the quantum properties of molecules and materials. Molecular vibrations can significantly affect the outcome of chemical reactions. There are also several spectroscopy techniques that rely on the vibrational properties of molecules to provide valuable insight to understand chemical systems and design new materials. Classical quantum -computations have been routinely implemented to describe vibrational motions of molecules. However, -efficient classical methods typically have fundamental theoretical limitations that prevent their -practical implementation for describing challenging vibrational systems. This makes quantum +computations have been routinely implemented to describe vibrational motions of molecules. However, for challenging vibrational systems, classical methods typically have fundamental theoretical limitations that prevent their practical implementation. This makes quantum algorithms an ideal choice where classical methods are not efficient or accurate. Quantum algorithms require a precise description of the system Hamiltonian to compute vibrational @@ -25,7 +23,7 @@ # Vibrational Hamiltonian # ----------------------- # A molecular vibrational Hamiltonian can be defined in terms of the kinetic energy operator of the -# nuclei, :math:`T`, and the potential energy operator, :math:`V`, that describes the interaction +# nuclei, :math:`T`, and the potential energy operator, :math:`V`, that describes the interactions # between the nuclei as: # # .. math:: @@ -34,7 +32,7 @@ # # The kinetic and potential energy operators can be written in terms of momentum and position # operators, respectively. There are several ways to construct the potential energy operator which -# lead to different representation of the vibrational Hamiltonian. Here we explain some of these +# lead to different representations of the vibrational Hamiltonian. Here we explain some of these # representations and provide PennyLane codes for constructing them. # # Christiansen representation @@ -47,10 +45,10 @@ # V({Q}) = \sum_i V_1(Q_i) + \sum_{ij} V_2(Q_i,Q_j) + .... # # This provides a general representation of the potential energy surface where the terms :math:`V_n` -# depend on :math:`n` vibrational mode at most. +# depend on :math:`n` vibrational modes at most. # # The Christiansen Hamiltonian is then constructed in second-quantization based on this potential -# energy surface and bosonic creation :math:`b^{\dagger}` and annihilation :math:`b` operations: +# energy surface in terms of bosonic creation :math:`b^{\dagger}` and annihilation :math:`b` operations: # # .. math:: # @@ -63,7 +61,7 @@ # of the potential energy, :math:`V_n`, defined above. # # PennyLane provides a set of functions to construct the Christiansen Hamiltonian, either directly -# in one step or by building the Hamiltonian from its building blocks step by step. An important +# in one step or from its building blocks step by step. An important # step in both methods is to construct the potential energy operator which is done based on # single-point energy calculations along the normal modes of the molecule. The # :func:`~.pennylane.qchem.vibrational_pes` function in PennyLane provides a convenient way to @@ -88,17 +86,16 @@ # :class:`~.pennylane.qchem.VibrationalPES` object that stores the potential energy surface # and vibrational information. This object is the input for several functions that we learn about # here. For instance, the :func:`~.pennylane.qchem.christiansen_integrals` function accepts this -# object to compute the integrals needed to construct the bosonic form of the Christiansen +# object to compute the integrals needed to construct the Christiansen # Hamiltonian defined above. -integrals = qml.qchem.vibrational.christiansen_integrals(pes,n_states=4) +integrals = qml.qchem.vibrational.christiansen_integrals(pes, n_states=4) h_bosonic = qml.qchem.christiansen_bosonic(integrals[0]) print(h_bosonic) ###################################################################### # The bosonic Hamiltonian constructed with :func:`~.pennylane.qchem.christiansen_bosonic` can be -# mapped to its qubit form by using the proper mapping equations defined in the -# :func:`~.pennylane.qchem.christiansen_mapping` function. +# mapped to its qubit form by using the :func:`~.pennylane.qchem.christiansen_mapping` function. h_qubit = qml.bose.christiansen_mapping(h_bosonic) h_qubit @@ -108,10 +105,10 @@ # algorithm in PennyLane. # # Note that PennyLane also provides the :func:`~.pennylane.qchem.christiansen_hamiltonian` function -# that uses the :class:`~.pennylane.qchem.VibrationalPES` object directly and builds the qubit -# Christiansen Hamiltonian. +# that uses the :class:`~.pennylane.qchem.VibrationalPES` object directly and builds the +# Christiansen Hamiltonian in qubit representation. -h_qubit2 = qml.qchem.vibrational.christiansen_hamiltonian(pes,n_states=4) +h_qubit2 = qml.qchem.vibrational.christiansen_hamiltonian(pes, n_states=4) ###################################################################### # You can verify that the two Hamiltonians are identical. @@ -129,7 +126,7 @@ # Note that the force constants :math:`F` are derivatives of the potential energy surface. # # The Taylor Hamiltonian can then be constructed by defining the kinetic and potential energy -# components in terms of the momentum and coordinate operators. +# components in terms of the momentum and position operators. # # .. math:: # From 1f15615e1169811fff88bacc0aa158b5ceae74cc Mon Sep 17 00:00:00 2001 From: soranjh Date: Mon, 7 Jul 2025 15:32:40 -0400 Subject: [PATCH 06/11] add conc and refs --- ...how_to_build_vibrational_hamiltonians.json | 44 ++++++------- ...l_how_to_build_vibrational_hamiltonians.py | 62 +++++++++++-------- 2 files changed, 56 insertions(+), 50 deletions(-) diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json index 79292d0d01..06e8ebaa20 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json @@ -4,12 +4,15 @@ { "username": "ddhawan" }, + { + "username": "austingmhuang" + }, { "username": "soran" } ], - "dateOfPublication": "2024-12-05T00:00:00+00:00", - "dateOfLastModification": "2024-12-06T00:00:00+00:00", + "dateOfPublication": "2025-07-10T00:00:00+00:00", + "dateOfLastModification": "2025-07-10T00:00:00+00:00", "categories": [ "Getting Started", "How-to" @@ -25,28 +28,26 @@ "uri": "/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_how_to_build_spin_hamiltonians.png" } ], - "seoDescription": "Learn how to build spin Hamiltonians with PennyLane.", + "seoDescription": "Learn how to build vibrational Hamiltonians with PennyLane.", "doi": "", "references": [ { - "id": "ashcroft", - "type": "book", - "title": "Solid State Physics", - "authors": "N. W. Ashcroft, D. N. Mermin", - "year": "1976", - "publisher": "New York: Saunders College Publishing", - "url": "https://en.wikipedia.org/wiki/Ashcroft_and_Mermin" + "id": "loaiza", + "type": "article", + "title": "Simulating near-infrared spectroscopy on a quantum computer for enhanced chemical detection", + "authors": "I. Loaiza *et al.*", + "journal": "arXiv:2504.10602", + "year": "2025", + "url": "https://arxiv.org/abs/2504.10602" }, { - "id": "jovanovic", + "id": "motlagh", "type": "article", - "title": "Refraction and band isotropy in 2D square-like Archimedean photonic crystal lattices", - "authors": "D. Jovanovic, R. Gajic, K. Hingerl", - "journal": "Opt. Express", - "volume": "16", - "pages": "4048--4058", - "year": "2008", - "url": "https://opg.optica.org/oe/fulltext.cfm?uri=oe-16-6-4048&id=154856" + "title": "Quantum Algorithm for Vibronic Dynamics: Case Study on Singlet Fission Solar Cell Design", + "authors": "D. Motlagh *et al.*", + "journal": "arXiv:2411.13669", + "year": "2024", + "url": "https://arxiv.org/abs/2411.13669" } ], "basedOnPapers": [], @@ -59,12 +60,7 @@ }, { "type": "demonstration", - "id": "tutorial_fermionic_operators", - "weight": 1.0 - }, - { - "type": "demonstration", - "id": "tutorial_isingmodel_PyTorch", + "id": "tutorial_how_to_build_spin_hamiltonians", "weight": 1.0 } ] diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py index 3ab643f6b7..17a2e9e5fe 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py @@ -1,9 +1,9 @@ r"""How to build vibrational Hamiltonians ========================================= Vibrational motions are crucially important to describe the quantum properties of molecules and -materials. Molecular vibrations can significantly affect the outcome of chemical reactions. There -are also several spectroscopy techniques that rely on the vibrational properties of molecules to -provide valuable insight to understand chemical systems and design new materials. Classical quantum +materials. Molecular vibrations can affect the outcome of chemical reactions and there are several +spectroscopy techniques that rely on the vibrational properties of molecules to provide valuable +insight into understanding chemical systems and processes [#loaiza]_ [#motlagh]_. Classical quantum computations have been routinely implemented to describe vibrational motions of molecules. However, efficient classical methods typically have fundamental theoretical limitations that prevent their practical implementation for describing challenging vibrational systems. This makes quantum @@ -33,9 +33,9 @@ # H = T + V. # # The kinetic and potential energy operators can be written in terms of momentum and position -# operators, respectively. There are several ways to construct the potential energy operator which -# lead to different representation of the vibrational Hamiltonian. Here we explain some of these -# representations and provide PennyLane codes for constructing them. +# operators, respectively. There are several ways to represent and construct a molecular vibrational +# Hamiltonian. Here we explain some of these representations and show how PennyLane features can be +# used to constructing the Hamiltonians. # # Christiansen representation # ^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -44,12 +44,11 @@ # # .. math:: # -# V({Q}) = \sum_i V_1(Q_i) + \sum_{ij} V_2(Q_i,Q_j) + .... +# V({Q}) = \sum_i V_1(Q_i) + \sum_{ij} V_2(Q_i,Q_j) + ..., # -# This provides a general representation of the potential energy surface where the terms :math:`V_n` -# depend on :math:`n` vibrational mode at most. +# where :math:`V_n` represents the :math:`n`-mode component of the potential energy surface. # -# The Christiansen Hamiltonian is then constructed in second-quantization based on this potential +# The Christiansen Hamiltonian is then constructed in second-quantization based on the potential # energy surface and bosonic creation :math:`b^{\dagger}` and annihilation :math:`b` operations: # # .. math:: @@ -58,13 +57,14 @@ # \sum_{i`__ in PennyLane +# provides a set of tools that can be used to construct several representations of vibrational +# Hamiltonians. Here we learned how to use these tools to build vibrational Hamiltonians +# step-by-step and also use the PennyLane built-in functions to easily construct the Hamiltonians in +# one step. The qchem module provides +# `features `__ +# for constructing a vibrational potential energy surface efficiently using parallel executor +# options. The modular design of the vibrational features also facilitate further extension of the +# tools to support building other Hamiltonian types and representations and develop novel mapping +# methods intuitively. # # References # ---------- # -# .. [#aaa] +# .. [#loaiza] # -# N. W. , -# "". +# I. Loaiza *et al.*, +# "Simulating near-infrared spectroscopy on a quantum computer for enhanced chemical detection", +# arXiv:2504.10602, 2025. # -# .. [#bbb] +# .. [#motlagh] # -# D. , -# "", -# 2008. +# D. Motlagh *et al.*, +# "Quantum Algorithm for Vibronic Dynamics: Case Study on Singlet Fission Solar Cell Design", +# arXiv:2411.13669, 2024. # # About the authors # ----------------- From d50ef961729e0897432b930d575b85bae70beac4 Mon Sep 17 00:00:00 2001 From: soranjh Date: Mon, 7 Jul 2025 15:46:30 -0400 Subject: [PATCH 07/11] update intro --- .../tutorial_how_to_build_vibrational_hamiltonians.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py index c6b21216c6..29afd3f053 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py @@ -2,8 +2,8 @@ ========================================= Vibrational motions are crucial for describing the quantum properties of molecules and materials. Molecular vibrations can affect the outcome of chemical reactions and there are several -spectroscopy techniques that rely on the vibrational properties of molecules to provide valuable -insight into understanding chemical systems and processes [#loaiza]_ [#motlagh]_. Classical quantum +vibrational spectroscopy techniques that provide valuable insight into understanding chemical +systems and processes [#loaiza]_ [#motlagh]_. Classical quantum computations have been routinely implemented to describe vibrational motions of molecules. However, for challenging vibrational systems, classical methods typically have fundamental theoretical limitations that prevent their practical implementation. This makes quantum algorithms an ideal From d24b3ea145b385c7c57cb06fb6cef6c0bebb72f6 Mon Sep 17 00:00:00 2001 From: soranjh Date: Mon, 7 Jul 2025 15:48:24 -0400 Subject: [PATCH 08/11] update intro --- .../tutorial_how_to_build_vibrational_hamiltonians.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py index 29afd3f053..5f0fbb1282 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py @@ -25,7 +25,7 @@ # Vibrational Hamiltonian # ----------------------- # A molecular vibrational Hamiltonian can be defined in terms of the kinetic energy operator of the -# nuclei, :math:`T`, and the potential energy operator, :math:`V`, that describes the interactions +# nuclei, :math:`T`, and the potential energy operator, :math:`V`, which describes the interactions # between the nuclei as: # # .. math:: From 9b7fd75d8f58ed0dd37b0914efa1f7afd95d2ea8 Mon Sep 17 00:00:00 2001 From: soranjh Date: Thu, 31 Jul 2025 15:46:52 -0400 Subject: [PATCH 09/11] add images --- .../thumbnail_large_vibrational_hamiltonian.png | Bin 0 -> 38526 bytes .../OGthumbnail_vibrational_hamiltonian.png | Bin 0 -> 36039 bytes .../thumbnail_vibrational_hamiltonian.png | Bin 0 -> 7436 bytes ...ial_how_to_build_vibrational_hamiltonians.py | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 _static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_vibrational_hamiltonian.png create mode 100644 _static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_vibrational_hamiltonian.png create mode 100644 _static/demo_thumbnails/regular_demo_thumbnails/thumbnail_vibrational_hamiltonian.png diff --git a/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_vibrational_hamiltonian.png b/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_vibrational_hamiltonian.png new file mode 100644 index 0000000000000000000000000000000000000000..84ef31c1c57b4dc2009cd22d0731dbdd43dca82d GIT binary patch literal 38526 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 literal 0 HcmV?d00001 diff --git a/_static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_vibrational_hamiltonian.png b/_static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_vibrational_hamiltonian.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d90fac8e969044d360a82148732131d35b091e GIT binary patch literal 36039 zcmbq)RX`Qd_V)nN(kUt3CDN&sfTZN1ySqa=q`O19&Y}Cz-Q6jTbW2G5@!q%Z@qY7i zX4c;8w^z@aJ#)eo<)zS2h)@6kK$HF=t_%Q(8UO%~i3ImbSr>Dpdj089{Hh}H^73+i zdX~TO@=AEAzgS*eL`O$wWo4b5nAFqL`}y-{XJ@B~h={MR@5Zl;f@Z_&uf$?fdy zVq#)EOF9%36h?=KmF#^xe$>isFHB9`?R5Y>57cbMU1eOGWj6K7xgKG5>>e>1*@me@0PNHNZfB^AE@G zQIGi3{|C-uARNp;ocAval8XO34&I*=8!m(Q;jrdAZ)ZS8;WD2}F#H=7G4s^=S1#zq6LOh`2hEQbwU~=HY^VdfUc)yio*$C(3`sn$|DHLFVaA#4Y z2nT;^cmf`4TT$&&Tnsnb0|12FTL#Ltzn$)bhN>})a zIbb^Fy7(2$T74v$CSH}0okKX{yE3UGyY2!eO>ngi;w63u!sNX4L5VpIUQcd`kH-0r z0y`F40@r&D-oNdMqIHCAz)7RW#!fS>n;irA*_c5?B6RQ z4lO(0NLK%212LW?xHvOezYbKHy|R$~GHFHg!jI7d>ca_#qTfhNyS)Mw#J zgdZ&7{q|tnl9rW=8W+=>WK?U)R0&;4>KP@=feNu47t?Z%{voqS4mhj&BCs15ER`?b zNYzmZm*Ff*r&;y5wQXWuUS#zj zi~VZ>N=$&B4W;V%#JddTFn1s4H`{G}v(7C}i& zLJrvY19^wI^1zL9d#3PIky9P(S(qA-LjT39LRi`NB&B5S;J&FrB-1R@>~fGVul_v< zMmx2jK_yFg!sT2wURnn#X$+P^&vU`!=AnKai(Qm-{CcfudZ-@0KY_J$*!*P9V)`)% z=8lPsm(P&jcJl8DtA}^A_t^a1lbQ+DfOt{zvAwC3t=r8_g`HO&|LIV4u~Lh<$vr|R zPs-cX3q>^k-tondw?Q z1{EK6`OhSYi!Hfy=dJBCv+U@)4RYb`h+7gF5dcsxai*4gu)$*bD^H@0DAo~Oe$S5W zU5LaMGe0;Wq60wb~& z!aZ$G)k?euwu-uAX3R@)~JOi7-{wQzZ`DHMc!d%3_40QuAY z$1_&NY-$SW<*PCC1!R*!6fq!SjtP{`_j3zTJ!O}#xoj&1E^E;-kja8*0zk+|BbQyD zj%m&NJV!oIXr?-gdy0b3S3bCNJt{SDsX7msj+xRe)K0P{_sJIij{=2OAOI{EKR{8r zHpFV1kDHy$gOo=4Wsz#hj7O>;;Qd%Fdk?*f__yAJ>II&1Y9z#}EQ};=fz&w5rP|9% zjJuX8e*4`LO08|okffSiIKccH|8HA}?I`2YyJm+unJSRuL@%1({7sGRz+r!$<4KoQ zz+61CEG1CKOztA0#-m%Wb)#RTVZ*R??*^X}q4L6QcoXBzvNgGF5NFLSmikAu3f5ey z%#KElXRCSkI;OKCh)+#`7V-m_%;rtV@>npcU+PQT^_OF)-#E+jK=z}X)uG#0>tLUY zep}Bt7B?4;(QgCHE`wp!vleTvg)TB?Kj1AUAho10yBmIbSLQ4b|Xew(@ULL+x{Y!9zNXJ-3gB9M@FZWUQ4yNvXbOHX_@a|zVZP6zZjl4SR zB#KB){yM5RqHfoPMS62K!wcxlhB6X_rd(FcTFVcFoPMlf`C1jQXQPaNg}zc5?Ddxn zDWF4uiVC*+Lt1cWF?uPMyb}uqPkGTJaPh2_373KOHiptnpg(TOWCJC zJnB3h*YA^;hdGxYh2YcOeEPfO;JQ0u%Wyryr31gQ@WqMn&MPfBgdvZt0CYN^_dMmZ zZy?J4Zz!k*jELu3kc+5CW~ZXq;!s@G%igPiG<`Z1g35lcjq$m&@~cODp+YeAQ2CM_{#U zSqqIfJArwmM8>&|`N;m1G&ekLz%*8KJei_LjD{g|xjm?w#>6xCRj-Rm67We`tU~jy z+sdksY8f3nmu+@tmf1CJ#~-Oed)s++HYe5KA9GHPCZ_3?=+aWQf2wKHjMCYt;zV@! zu`;pVO_POQts8-8OTF&FbRG*Aw!%l{Xog4@hENtPS%mMzHrX+(0Q>BN&S zB0))79|IYV9YX|sdNCe#UE-D05GiUvjC2`o&eX?(z_|~};<;B+&3b@)$#-KHnn!JT z%&?2_NzsB4K<8gB;%r?PMa6m9k*_@9aUSbBZ+2rm(H|8b z@B(Vq{dh0p<{T-=`$^ytFb%)SIawd9)Zr>|TD z=f!p;79{#%jkMv+a->fc*euZ2yD6T0>X>+Fk?Zp;UH$dJjFH_B9qKuD>}iSJh2k(| zTCEa2+@^t?@#hsYsn*1VW=GGufa_cI9%}VRI0``A`Q~t`CYmzn@DO@^k$4X`q6%Q? zw88kk>%#qUa@c;!ZY~{y1x(Im=#LBs41#k%HVhBdB%_Z-!vZgo&Rmf^6}1S8brQ@; z5r-1|{gFWcW~b=PoM?8F^S0i!vx~_p+UpOo9JnT_TLY47+62;1`MFyWxRJ=ZAex9PNux=QU9&g^_%vwsJ z1*KDxufKSKk%*sMHwHVuhIo#9}+kgYXs zO7h>b)ntEDBloDr5cO`RYf9|SP9w&v4;o(9R5KB8L3uBnQa!{T%P+8;l_kDQrquPK<=1|ff{47X z_#iAC`+n=k4~SmxhV;vaiLB*oZw#q?FIr8}J7tDUe*~e#ccmwBCg{QXc_}(#dQwq6HKcqxc z8lv%GAOf6S7LZtXH+K+n>a_|asG5G*gw>$~MCq~xmC{&xaerV$#q8uYM);`iUFb!{ zGE!u3ywf3ojZT|3<8O9Nm~;>oONunb#FvOF3Q-=nvBG$C12Mnk`7g!aG7Qxc@Nx=; zrUwdAQ-)9`C&x5xof3znzT%!B8^`L3dmjwIJ@Vezb4rr&%v$fwAMb zI*M@5AvTygM;uPbm@)kCKK=63AJ=Zcq+b_kopbs-FxmO@%TWP@YMLLQx4WTkYBwu5 z0&-egi02W;zpMZ`O=J2e8&uPOU(c)xCZsJQDkwxzIj8wbPbjcqCc86Us{T}ki34?2 z12HBUxVMfDaFd-Z(?-f`L22}La!% z{8r*2(8o3Ce+B?39(+jSRi*CDk|lvFL8IFaK+b&a4b8ky=B{VE^(M>hAR`k{a?|q% z`$%QS_r9j_!R8m9g*GBE*{?PJ>u0<-MM2^)ZxN4fdjnC2{n`vF0#KM;I5eIkJQS>Q zh0C^Jmz=)CsrQv_%bm~t5CDc3Pu>hLk{38Q`f@RwB+FizpIedR8KS|6788K8Hja0{ zLi6ecn59|Mgc{I$iD3O?+NR{sLs_d{t8Z4SdUI@K^1LScXGB2J#H<#l_4d+syyD)~ zCTr{o!dr4303({O|A92myDYqMZeIUwPRjfJ__i;!o?SrB zB)BVcqiaMus`2qB<$hVcD{q@Vp!mD7jbOVbb2Onv?h!NOca%>3^s7q21*PNB-oL0! zh1tr7W{1|sjKu*z?!b>Bh6hr7m$wg-9u1!63 zu_@9Nj~sJ6DSXEd_@N8%osWk|N7r}-Y3vpdHk(IHAO9m4RcIi-G(kPziIPOB%!|JU zjJe@qI9JHPjlY872Q^Isd|N;i=bJj@DF4Xvn~mzc$nhG7?KV4RumLul;_$TE#v3hS zHHvOk#!p@^2`s&|s+cW5_RubU=`dF(IlVJCyU>6ye27p(oiX$SEw*a;dBc{JH-Msj zxKkepL*Udh%(-UW#!dQlYjIwuw!KtSz5j7WSYe*;NNdp^4&awOqCCD^Kkl?E|H;AN zL6rgla<+v=b2c(aLD~v|!9%hoFfZu7xLWYF zVy&*R^lO*-HVDuFevOUqmkRf0Ysi>;G3r1mult|!95u4)l~*>*6zN?&uCLHPus0V6 zzd5v^=o(T7mU}4xfF7Tu>%oJyBZH^qp#>)uB_R5_UcQwiBYfK|nx^|_Oq9t!@SdVy zvJiV&Aj2-;{YK?;7pQ!t zrjoK_$CMWTE$}S=P-(-RKnSJ3eAoM$C0c%F5V?F6T!ze!D0n?=pfm2-Dx=J?dC7XA z27*!a3M%pxs9FTyQszC#b7s^325=u{(;}jqM#g8%>ge?%2JDMP$PH)t#?w6m(r>we zjZ@WUeLTxf+e1!D)0He7zn6cZ7AT44h3&_Cb`YhM4QBXlaG8 zZ+B}%&?N)JSElZtUBj`?NF**C2%0e1eRdxsJ-?9j6#GaSz?aPGYTQZ_xR1Vj(wtqv zgsEx}Q*Ok+mX?APX7;?e+KRpDT&{uMtT0$PU#DLif;3=YgUN}KD>E79S-jhv8z^9N z4YFkzgUx|Lw~XT!v|@^SS&28Wy;VCpuwoAO?Th)q}KY2 zTp};ai}|sCzf0R>I5Em)@LHGDfH|F-JktoRyGTCwAb#bY(bm}J$5;0>fd3IsHqUVK zh0{CsrZ(fm4R};=G7u^bzKQ?dW4(#^pNYaCvRb>;D%e@9c>$rb$CxTuabyfD-Tv;E zK}HDRLWE|8ObG#yz*VqSUo_O|Ab>RwL~Q<-MlhbA8Isj(HkARq=)a2rURR#)L)4IN zlq!y;EKD^6_{G#?`G0)YUtQ^fR5f6@XlY9)KfqM(zDqZYC-2~Ki5_na6K%0cH_!k3;-nAg^dd>l$C4KfxQ31EY~KZ;V_XMx1ONvxG+cY#2E<$ddT@mVPP5?|(Di7hit z1tWB5wc5od{pC0-1j4cE@6+d5T_vOJVh3r~a<+Fa(5ohMoPO2l^O0toGmRV@SHYj9 zsF3*HIx{x|sY&~}xNJk0{9J07P9Aabaa$OBDwhdX-FRyH2QL=7ahjvFD+Y|6WA!*{ zmWE_BEQijzFj67wZ674*&*qD}c|F?J>y8b`5To&jSBcFfKFyocuS63)N>_2HNmIHT z?Ax$!PNBX~FA{>Ov5q&Q76Ihd$h(9M!l-H)>`puP^&*8{P>AqmR+|N}bU@C&%~o_O zYP(@b3E9X}`&h4GZYFQ$Cc4ONvUiBn6W&I+(#on@ zouSdJc2y9tFIItUjS{h82YfbwMQJu+P9XgFa3G3XCQ!T`A|9q%VFYg@O-ZR zlgSyn8gZyUd$bo}>?~AiiB*XBum1Ko1zL|6x)l&Lh3;Y@ODUJwO9vfNb7W!K{hQ7= zS4LeQ=6$wkEjYp~#LwaUu;vE>B)a#d9DUdQ>lY}w06(@nX`?R6EVZXF>8M`D=Y`M8 z>;U0~r4Kt@XqnD@Li)?~`$ zx(eOmUP-Br_Lx}JGA&t@1VR!00uvJRTW)YbRqo9zb^FOWTW3!7oyQId5b3~K$a#pK z#3iBUqG}ot0MnUDrz25q_xPNCi+_E*lV2e-IVbkYxwT=K;G(5jtky0jT*{x0s9WFK zhXTy=E*Y<>sp%9n{dJg|crL@0Vkv+DQn5%#rzG15<5$&*t|^=DhUsaOZGg^9bpnSj zv+t9&RfD9v@|A{6y43&3*-|XW#bX2~1q5Qg9W_MPhre^zTGyJ#(16b9wua=kPg4HV#$rE~rIdP@fvI(coUNv|;c#8&*T#03cQQej?rSpt;va7FL4dpEbG}q+nSfM`!FIUciyU zmmH|m3g2C=J_FCjzD|F@`@k-I%~|l8MLtU;(-Qu0(mODI+m6-z zC`Aq zsbD@7HZ?bvfQQxGgqvXe3Pg*v&73xNN8IV6fk}8AV9ULUnG|<0&96m`j5-CZ>Kp5u zI&0g6EH?*<-IcahFF}5;*>Fqt(+_Ko_P~s4NPY?OS=+Hk5*e!DXQ?eL^&d_!t(+edX=W4Vb_g8Lceg_~GUuN5vF5l~m_m90 z=Wyh(Nn7QfL-pWRRc0a5nuQu7l9pDeOltBHWm;E<8Q>I;YNqLuF0h9L_}~MJnjBJDj!+&f?B%Ap8vIFu$=uN{+>{B>k%eRP^VX(D+FId@4!YD2yX0 zJR?P(iwy9sa&rUQzrgHd8>O5AiW;CJOdKKAJ*j6BrG>m_bVMtpOJSu;NoW;o43 z)2Rj(LZV_s$^Hhc@YKWB#Sxb4N|&c3#!#aAuogai`9UFoQoFR~Bslil2GkyercX zR-(@}#@>qCePbJAR!u_lJ`Yu0?0Xe%R7NRVK|>GDQ2)2ausnS(JTjXEMcq8rMKoGU za){{nTHLU&v?$COThgA40ufCpbtEyi3HA-JC9{}V9*Xv|;>JGmg7ppz_NGk?3GRR1 zbX<#5BmcIKNKM}scfL>-ZVnr63@heN%gpMpw)mPL%a)+>Gd}i|>Te|oc zs=1!Bn}=NM(4Qdp)~Ra z=^88EN-H9kOk+;*H#gw4#1BY+GUP{UU_Mh@!PLtIKzC);^5)9m=?V)q75hx>%}+DRYOnDNm}5-<7wS*q&ev}_B@a*p#Jf!B(}1Y7HZ_*#e4Sz00y7yh zx+wVk%aVuY@Zl^%Ay=uKcq%{Nyip~j1SR24q>m*Dag8RLno_)LqNU8iP~2M225*-d zIK5@$G0vLMXTf@8w3^uG7Pm??I={V2ueqE=uYhqe8*0h8$p0u0sJ8K`&ulxoxK`<^ z4LtxRKg{JS&I_FO$b*?hhSD6(?CEK8pq!|O=`5XHDFej4qjuI4SdZ}L^n<77t zE_1in56-xt^}X$AhQ7P!WosA69}~zjS=$_ZUU1cg+U7Efi8IBInO`k?Z*J-{DKd!E zdO9PPSPJs&mN)bNA^0}Bl1XeZ1P%7ofu42>?29w0h&6kRfd)SefnX28G2Q5E6jWC~DH@7y69z{YwBhszj`wuYi6!bQYQx!8RCq>}- z2+OCJ4ofPh5C&d!bdDtVpDpEc?H_k(hWIMklx7{0Xvugrsaj2Mjxwr;*$>jd4&uYT z?EcvZ!Vb$DBT6DMRy7*Ggtc{qCSIDCy#=Bp;hMf=p)PDW4jP+uAgw@zpFY}F(H2lg zHxEbsiv77eWbTv4_`D0phxPgqO!8?XCNmME=3Hfzjhe6UyJDa1=VnV#Bx|(w#*2ON zfXw+xU}EMh;{klbNsemznKacc7m3UDa?Jdz_@yp(=yb^ z24GF3&}gHz8kW8d^oL97qVX`k5RR~JUj87=+W7s&2XCxj&e!diGy{)s7w-_KJPT#w z8Ju>GZI3L7Wc_cq| z`0r{)vk?2Caw(~|)Y5?8?}FdjAr)r}*pncU5hMrb&!jZh?b!B>l2TdNBV=;V=O^6d z{d~ay^dHzK1Zlv{`DPrbJ?BJdUjtj{X1o-qIMj_s9?H!5CVa3n19O(wep8?FGALmI z03oZp^rYr)EaZ>R%aLYNwW7%5kUk-U&BdZ3=5ai@l|@~%lvHtF&zexru}(XonoZKnXz9YSLC(Os0Ic-e>b>)&0=zbvcQtFl?&dhX(D&2U8lzc_2ws`Uge z3X@ipMl}s+^O^ zhveK-1X-S8zh7Z26m(K)xZgy!bK zj@uBI`A^>KPjnr$G*CK|!&oq+rqw1=xc9(<#^!vAK}X358vx8@%J8~4wsePxq*fd@ zzSqLfYnHE~ru28*NWt-M#)IQ%)cXbqFRLTjn(w=%htBixfRD&?;u}nwH(3Mcu}kXI zNA}H(J^fK$6|R*S&+n;(BP|=LP#2V+k=Q^mqCKRxnq!EOOEk;rV+M|q#-tzBlajd9 zBeI**6;rwjKkpG+oUezH=`AzuA_C?+w)@6K(E^v>l>0@xF^4SK?JF2>jVyosF&f$a zvsk}tNkUkdM;#nNxpxl>a;W*{4PvfNlPtIG9`d|*DAr7j7(uBJd4JYPK z_0*J=jrBW=3U~GGC$?o{uJ~l`VRAZFp&fQ@dHkzj&nCQ zpT?y*-Y$BQ>M1kaKcN>s0+U(?_WKqGUA5&)tz-Yh+MrU$Yh&zAj3~6K0M&e8Iq>^9 zc~7e6S%CHo|8KtfmSU8Vm2G3=DU~Lg_fDCRrqOz-LYRzJ1d17=#6=+=UshnP zID-gqJfvM|v6X5Qo|xc>6Y@n(Bz(fA`JsX_fb=IA%V|V)NIKz30tGdMqSSScLc^l% zAI~+8fJg`!N@w*sN_BCFE55#w^21}kRy<$x9>$ z9%AQ1yZ(HB9xwmz zbAuDgMVx`R>8-|dYdoa-O|`ewF=^mLi+g4x%lx;csO>+GkSfscBKnaP{H4vNmRQ!h zje}%A3c6}oH=M_Tl|~|CHbtg}%&zySYPFUfTK<`~3H)|JEYwjVhkRYg3}Qn z)gX4Xje2wZ1UpC)vAX*1;&X6bUm0Y$^~5p(M4p+2jmoPMa@o`U2KX_-i=pu*p&Ol9 zUc>O%w8h> zT_Eh~FEvmPd>*XO*NQFyU&gS}4yg@#yQpV3mAbbD+hVKNgCh0CNdI~wqV|l?f7Y_xTb`9-M=t#vzGb|d zm*3ycEoxnrg_vG=V&U0~>-DTt^XjfTJC{2fp<`VQGfM{^F8DZ*&%f$5A zC;LHNL$bN#U%6AB0b5KC+$cIa$#Q9OMN@P1_-qgy+6$3=Zovfd|JpsX{(6<@Df2yx zoyK8%d?<~_VZ#WoD}o@UfMSApA^2o%zotU68KmyvKaW4vC++oPhpGKAj0g13GKz88 z+fWT;vzC7J%uBST!SL9TPT5OqF6gqF8jdWRR+z5(y&H2LvVJ~kh=9!>qc`X037%J0ZW_D9Z1DQ{Uz!H-lfQ@BlJpMo0)$i%@@ z;fg+hA8dXtf)}$#veA-%Mk4<1#(+14PuKqUt_GroWf6;#hmt(lgfAsq>+EJoc+w4J^f<>|m7mdPvnzKc3 zxy+O}WKnG%lWpnhmu($oBDtTYks60b88wS!BZ9!3$wDn@ANp!Pbr4}uLJv41d0iU* z{-@4^78$~COGaxUlsG1``iPhspAGIn*L=L!L>f&EE<|v!?5{`ADuy0x(!M3e>eW8D%PgutbT$SS)O}AR=xaNrOGtbmu5WA{L%K=|BBGOWoVhu+x7vNSjf8+_{;wbbV7M^z|n*d-;uOivR(XLY}KZ;oRty#K8{ZwAuY z9WI+uWyFI?C!jH?4(SG|;glt|c8I+)Ur`mI$5W!@XjL&9#rFpd$mc_LP1Zg`q1Nj$;+73BkIS~@eFT=;>JlbTSkq%s=N7ZXdzNV8 zc!!b=mlkvyyBcEACjHl<|Md>4(MqjDMT2v}FfEChiz+y)5wF{~ci4zJLDjjid>%2m zNiTzbl#zWBdIkn-;o}*MbU{He30W33%uWgYMC-N1?ElSNCrTlYlC-+Kd4KRg99;rU zQx?>h^Q)$n;W=#nvB9NxTY3`DXq~tNK0LCNMB>OZbl3{nLR1~^dywj{W%26aCz0gJ z(Nw49pI+j$F6|QSZT~FCX-FEbzB>&vnTf0|vThF%hzofmVI9LWA$lZFc2ObXz&( zH+A(pD~*#jH4Tq<8z+dbsn3quS|#~OP4MtEU>hQ_+N|=|UogYqp!1+pyw7?JeX~dV zsjF|Ck@&ain69tuR~{OjUF#K;V(ZZinbR(OzF>`*hOIq$l9-|06uiHWLzu$vU(3M@ z4lU%e8Mj3#(Pip>y&X@yHu0o$byA6kZTN%fC#m&O$Ahu)GC4u-9G5u`gVCF-$%hB| zd@yLj-pCm;{uS4R%VSl8$yWFyBQ!=<2vNCga7H0nk zMLpB4mbh(+JczNXGa#LLWD};FSW|sO*kATCe!jI{JpcnrjWZjNRu#_K?Hu!3Ax!}u zwxMjiGASiBg16+0Ogss}GyZbSWRoyix5uWthL(etnGB@snQeR9%WUvEE^5VK0|AiE zxzxi1K^cQ(S51{z2mI4_ykeR;4~sqLc;g{lqSs?#tAw&-;#I7Ox@b5 zuAhDmi^vGbhnS|rNT;3+cYH|4M4$QoP-hl|r2k~@B%?I?#0&047jb`sQwK){b25LU z?;tddVv?lmI|$#-)F>)Ey;aF>R74G(YGn`AT}Uxx7iGD_LSlM8X7r}-7;w5Mab=Ab zcYb}}(IyUo<*19I&w>0PCB#PVmRbC&^Rq5{*m4+}LUx|aoBCxQ3Nbw~c5gszf6NT- z%n43KeSpCKsxQ5%8VyxK@}-1*(-cMJ#ygH;=ljb~my-KiFS>QC6W(I%Xr(O3 z&CAUyB2TE2@8i+ow2HUi7aeRHXFT;6T!)hzEmR-#6ze2qv3v6GuYz%YxSanp*eyLT z3vZidbKGe|nTqoD3U&EUf`)cfovBnHWO}eOE~x~JXIEgGOuu=x95E)o#ssxuWr18)=|mO^6l7L96bJP7&pdaB;T=- zpPr-n$T3FMHYmF=hgrK^cti8s9)A@#;~HM2o@ITRj(qs+LYp;B)kQu2+wAps>O5FC zQ{3;>+?I$TiOV*jjO8n&Erd1OWJ#(}7#qawh_`c|QI(471_H0If}OcOdqsc!oh`&4 zbz~u&KHe{!_-nh_@H3dwV$@1}+T(W!74hhlz1SLhWJ^(APHo*OTfq{P?;OW?tE#t4 z0>SmC?=*VBuUIbR5#M}D@l!>0EH2ruv)fhUw)*2!saePmH({pk?ROZ3I_yfUAggzV zLS4t5?oGM2i2YtIPWY1rH{Fcg8&%=F{s$D~_F_!ftr#wNj2yGegznLf+8)$4T!VVic_X?FW7bCT=J z+{bJtnz(?U@5>wmCOoI72jha*5T|cD(XA)K>(n`S)n1gmb^eTeSs1372>8h!qd6H^ zaYzhOkAgzspq}d!JBsQ(NH&*d{#1L9bX)!GRz}_of{8CvuMTI8 zYS0|?)u!(+0O>VqqqZ{Qld81YS2(>_zyAzN3GTRz3HQ~ZMxb@ixB(2L_o|7NL4g1XI|vU<-R-Y#|=-d*S$ zrxVEj?Xo+=ALYBjyTE_8MrW`qNS)o*H5A!q5C|%%#?;ymONfU`H>xdYMtnP8iYfPXw|Fd-3zZi*xtC*Lw$l{+zn4?@^N;aZn`FBMi%U zUHJzlP8!lMF!h|4T^lj|B7aUvVOSx3v%fRWsH47l#?>;Fyl6dF)~C+a=YqG8FzG=- zNEUb>`Zwd(+ML#dMrk(Q#lJcyiP40*x&~+0IkrC#8pe2(sYsg7!1NVScTPk(2!Sbw zx5w8*n)EuWyaqqpytD7-BV(claHD<&OF;YOx3~G zAF%tKe`waVI^Z*OORv_zoXZv!@%tm5^= zB!-Q*LaIXw^U_^{2;`=QztEhDM3gx8%`n-Hk@=rF7y(LjHfk@O106_h42)Jz4Y<6ZQRcVG9J zNx0Kby5Md1>>SHN@Y`$1O;|j}tSy>qE0$OMndUKx{BZub*$)}=?T=YEhTeEKE?K9h zk$1FcRbs5LNGV!iU!#62cd364?^=F_<@Bj^;dFp`TfZzj>B7~v+D&h;hNgj_b?Yve z?L*I{(^oObo{GtF&Nh{V*9b>Ekt<;(P_@}F?`nz0RDoIjM9`&0sU2ZiYr6#n5zuZ3 z&K=nemRw^0E_;rkbSwZ@k@|)`k*4Bpirow4e_qzk_<7G3z<@=W^Z{B^gTl-`rEy%J z!DNbfS^`l$bCpgmmN{QXG9iICeodZlPgi?AYy0+5BxT^(-Qx*d+B>=*@~?j_IOz|9 zp6;!MS`^iJVusACHc2@cb`!x&P^)UjwOlp!KP}X@7LqoBYfQZ{oj|w*r*o=!CfM)a z7J(-Pi!yBHWz#FV55-46pJN;AMD+&S0WVgiFXz#(^#qYDMk}=leAmBGip=ztCXb29 z7IA**-L3mPa}KFSpeCYfL66*>i8Nypv2;07G9eF?F@7G3GDmo?;gkcGG+E<5wB*Oq z305V)SbB9+KMX317w#Dy&tSN$`Y|0wJ-M_Efpb;GV!y6N4B=!YC!{Bk?inlS_l31zDL9l?aHmI2q&E$ zBj=$shKQ~OkWxMPr>r)oBO6MDJbPx@^@uh%n$I>ktQ2@i6uOuJh~h6Vm0QZ`Uk`7h zg*~w#obF{M*4lB_W+#Z_ zXKOh+VI}3K8rmlWK`0Z}n`Pt#+A#@|OR=b|NUMSsnbba1e8!t$nMV`eCBqM_^)yu0 zsV1!Gk8HW`&V7Ug4XZZEJ>`Q|oihgd^l7kTxz7AZ302_)3(y7FFMlDbwlJ=DC@_SB z-4o{A9p|2|o$5s^vTy2bd6@!kI#iTd)jB}uYu+T!htd1M&6kvF$4} zB|r8KsWsiQwS$eLw#%S|sUPW3zv-*>R!=QEN)&Q!$}D zY*J|pNj&?tA{NW}-2>*)hyyF@2gOmwHpFh=Fbou!OPY$^6C=)i(!@In5-ho(n&+ z6zzn_(hLCe6xk4g!8uH;^CMDcQ0!nh7N?os`E0w);Tvro&Dx0!?jZ23Ud9ZkNrkZP zdV4}GWwQH`KVE4(KBT!LF*cb#E%n=9{R}nxr6(TgR$2;_vyP<;By%mUL2%6e;r+4G z;M{r&c=CjrvrD^8JsSq~TkNZ2CDc9gXzb~%JWviu*BJbp1YC)O^(E`;n-&F>Waiw=y+<6z+5(0V=PQBl)SLm z4A#F;ozb$Y5A&bem`W8HYz5i51XtF$2T}UnD$op8R~>&H%T@cYL0yG$6_S;?3V+|k zaW@}1D}oiQoES}VxRB{mNn~hf6B*ePY?u979b@glZxz&Bo^TkKG7-mB{I$TjY7aSL zuDX}HSJ%|62tGxyyi|g;CFW}EZB~`j92NNN5`0=%D-ztb$|imQ2J1MGRGyTp5OslE zg=zpZul{!w1faVEIW< zFL&+dY?BjJCr6bHbpkS(&{{!z>j(lsb=%5w4N*oMtQ>3@tWajEPM{;XT1s$aC36)g zYp#~X)pH9IXGO4{KsksbSqxW2rKDSH9dBSNyg3Zl#YX-W9>Q-gowr?ri%(je0L@_a zUZ8WwAI5SOl9k3)C?lAwBNiskieM#IqljC#&oky~-pOehoiZ!{zdC%iL57&%c3`EC zi-oF_SUaSt8LWsp;AKh8)m)ybb<94;xC)gC=4!NsY0p^^EKCEn+3;@0TrDLoqhsUk zwEsujZ0vZ#jhAi7oZYQ!z%xnFfKnsC;LW=ICUwcV3csO6W}o9+-Mu_@2AQk2wd4h7 zMX-{J`fgpnIx=B?uhuzNjj4XCH=R7!x{kC4=f1_L-PmGzwF$8UXX317yG~TakeOyz zFkblA5nRm#mM?s|kJSfpwE#U z(4Ds(xJO#N&O`=l55kO$6x{l96?|>I8s)N!nz=eHft(e= zN}XazZQc*7`KiL7SsHL?ZK5jdy`LS}Mb_Ta4qT3%bn*ndF8kCf6i>G~DRW%45eDI^ zHN_44hQeuclUtOl7Fn6A_Fcmd2hNIMB~CF6(#@>x=0f3TZ4J=c$613>JMfRGMRDtC z2ZqwAtSFTPGNrix!REW8N-yDf$RbP0RX|qo#x$W^g&p~dxjJHD`o>uitaOcgwGZnq zypyvw5td#74kfVfhzNYkeA*6tx0zlRKjC)ZEJs?rWaUOeW$Vf)d9TH;!()4x+F1%3 zXk1;vZ$M_BBV4^3_qr9#)sYS47tV@crAsj+zD(IHxw=}z#n3I$gP|ZX)?k6!fuZdF z8Eyx5mYK6e<_=r^igoOhcTP`riDGkH1&Ev;B`ek~XxedW`397zVNmgsxq5D4;;abP z|41=B%>D+Kx9LiEu+d7l1|xQ0jI0~P4m`1Wki`=vRH>Ohdql*uj&YTON(`GAS98~f zYzzEt2v=PVgiQ1^b|C)IGq5mmRs;(u@2Dw;bG8G+lce@N)zkN*z2i4kx|4LU>#VjN zxSHNK^-04Y=iLJ!hyYeFI3-81iGKq!``qAMb&_@VALZ5R8CaM&D}t3E#c#P}Sd;pA zS(jCB)>Xq;wfYLBl~;w&tI^n}vqWZeyGkBETJ#P3)Jje_n6xl)R>V*C&b+y47>MFg z#K@Ly`AVD+paq7b43ts`!*G=2`+q9#WE0t5Yn8;Vtlyt)I@5`dC+$AH^_(ij@R_*9 z>A+-Rg%LW|1}5ANj2~zH4(-5gMBZq0d<6W8l|VZsF;>H$fe&Ceg+Tl+>#Bxosy_g^>@F#^JJ%#~G<4NM}$?Z9|Y z#6zRy4GVmn!?7v3hC;80w9wU1@D^n~H_+8%RiM&H2HcXOQU))YAy}AvR>X)=R6Fof zcM2Vh{~@FKs3UTX;Nl~&0~=6+SEyzOMpfNE>h|DYF{Ee~goLK6x;R75YUi_l$8;4U z*&#)>;D;h8J3HluU}5^;bIC>uHO27RE0@MN2(Yc7DJ$(y4eY@6!>k_zJ8*YZ_hZQq z3zFHO@W(G;cwGb)XC-Qs^&wbQDXx=F48X#4*A088=R_%ncZE|c zu?o1C2=W*b*E7%#OjK6W_aK~fbL%S&gCzsXTBY>q_aI;pzn3I%AxbP?8j@Xr56J^6 zYbFJ6X0`gZTrR)N_qh4>!*8oq&ReNw-R|E0EljsPN8MvHUh|Qm9oVtnf#QE)L}e8r zX=o>E2R>3yEb`W10K` zP0mOKSeH?CH3H%cqau=pel!c$RiLa^Ue>UzRn^t!tNGNFxAWzC)xWkvGs@^fUp)py zRI}R)_lg^WC^V9~`71d%G-Ii(A~G(0`%swv0fX-?brp)B1bzF(1(=wG>naFgvRXH@ zS->@}*H@QQ3ofrd*Q#p}wLf}8urRrD-rv)Ol6XAp{#OS_H%O!wj5oLlg(c7qBk+;` zC#1jAeQ~NE;H{$!a||J&{-JWCtdF($%eD~V4F1rf(-X=%QGGi-1oNA3IoFUUs+)xZ zbk0ULSkrU-q2?~GzB1%JLO2(S{gGuU_=ivIFncf&-g^p0Tq9)Zk3X z?r}gy&cxus#M29*XxqZDz(`kRtz-ku#C26`G*A|dQNeflcJ*?41iq}V`7S~>FA)b} zVcN#&xZ(Ho)Da5eQ1fTPEj#dj;VrfpR}&g~#_%^E{z9a$f@e;yk8Te^Tgf0L>#BZ^ z_JW|RP+28m`aPZ-1+d1j!ifW5Wb(p+S4@Q6X1 zbvGSY(tD+$@TXb(B51j45xBlYU4{0zbE2-AgfQ*)R<8-0RWdKHRvZ#E?^?Zu$#Xnd zMGfcr;I?HP%%`>)1cyJ9@NM=z*BfE@`Bk{=4J<~k`(x`pp;{{VlB%na3KmEg6kRn4 zVTub5_%@%On78Y^OF?)57A8OL##zjUnnPZ=t*a9SoCWkja2+Eg&lh{cReu=UffHsu z2TuAkH@%RG#uW`qI+Y7qyRIt49Ea;__YkHu;ehqqX%D=-x#qlEJaf+$rYC;fjgx?( z=B8B)$8~kWz?PN#y%wy~mw&D|OiM#Mumo>u@*&*97lX;zH)E2vlUM=kQuzoNVR#av ztB^N2qO45yFROpJddC5(>D%kw!gSYLm>dKQH8<_MyFdL%*{mcZJbpK-kA(PP5N&u? zmpU5Kl{NOx;2uc%U(%N6Q&M#m9spCo8cfkuJcKDOh9RrJnXfn}#C+OYnEbe#u`{Dq zFg^(vhn)CuYRRaR^U z?nXda3A&1fFtKVlvZ_gIQvVzez{2#^TbSGerWhLWVH{_hmDSoIX`df1Yu|BjwAVc& zJMdwYl@%knt^bV7?7-}B zELolz=_($=1h=c#U#3Ih>YDQt)mlqf037u^>oEg|niFkHh3l0I1xzL8gw01v!=Ux- zLjtBz<96VR(Z|>6RL+<9heid~Ky}{QfRS|-rj=;N07?^Gg)9=Nton8}UrvX_GC$R( zHR2$_&M<1nn}gi|*n$1Tqecp_jI@d0#qGe5&D_lVdq+F4PC~gz&{XWVtQ6=snQZdb zmJ=IYjro4poCP~K-*;VCanARxi>w3(SNm_S?(%YtZd!ZFT!+I<+;@YH0rF7uCu6WJ zZHVkr{wiRyt+xXsvUzWT+JPh7C~Afp&*dEk;2zO~i$rFnt7*+d2$le4UEITU6^}Oz zgCSOdwN@)3{)8S2@cND~1da~1d2XK=k7O8CJWm354fOck6tM$qAaVQ>fA2DC1QYXH z*3$wS`C1-ekP>tiona_94gT+_u3{^@Acd!b_~)0?L2{FGWJ}n)h3UmOETJw#9%?=o z+mcpE3oVCiB6eV%^OimB0@{HaNd-|^m4CWV%8rDFr9gbFxUTB=nrgJ9qq>TRFvW7a zU7b&d%G(v+{>PI#dbcpW-)g^K)!srFC|CGu1%iaiNH4jUdL8cGqKox1&rmxsK1PhR zWi2M2ldvh;S27VC5QLVxs$fb9GW*<^=Q-bJJ<#nc*tE8k+xoXKJ>g^9xVS`EY#Z#} zwuHg-7+3m~Q`m#~0p4XsZPx4p$w0GKR^{WDPKn~R2sN?P)eQW;O<7?U34OXg&xhDu z)i$jshz|?}*twVn+WCOPTS~mO1AE(2cWbXmE!(UiW(S7AIQ~RSYwdg)LfREeM|hcg zgb7}QOl@^F6m9*2Set!rsjTmYW(KZdi8QYdZebFi3@uELV8PmRd)Tg2y=}>;QkPgR zUjqhA9-StcOYm954vb!HNjX{hlf83YZW;!na1>G5mT$3*1GF?SKq*u1h2egC|EHpb zX}pPJueBCNlJ)(h17#9hN7_9)yYT1)m&o?0GrF$AB*TM*D{!He#?NEE<;&6rUc8wk zK9D8ka`1h=rSykZYbcwol(#JnBOJM(kXvo5ILwp7IRws z#15=mS(*0*PfXQFYf`ZVU02&lhSe(cTV!J~n^22;-wJFs45P5fBasR^sJj?y$9^v&jou7V^(q_Im@R_LPp zVYC}~pBIQrL0@Jpn8~R+JZzSJ7E5UgPR~xfZApQcTnvUcO51i|oD#Hg>qyu zIH#QrU>rZR1DC{QI8yx&FFYm!brmxNV};@fTxBKd>Z_$~T)aa*LG4TK^E1^$>#U1} zHbJ!mpFFe8{~edtawL*cGDC{Ni%%T41NX=A=cn}TjZ{AAhCbEMTqJs!VFmK2q)nkX zRq9Z*Z+)#SYOgljnMSs<0A$Cirt*7bwSmUAbXU=~WSK=RE_g#Cnbu-(I(Ad@@ko(v zO%K`L5RN!_%$_AXsd<4HAXtDrt`a^Dvhmar0uA3-sjJK7t7&A5Md02IHQ_K>cnpQr z#G1sJu&mZETlqCi=QX8pob{fssF|$Ll|4#Xy|CKNfWm%_8G?7M?GxhQ3{zWtxFx33SZQGLMhY(U@puowBk7wBcyVTG&x8oEg9l?6_?y=N%-W zwy5-+x~Vy*#@wV_M@c9Y3XzntH!m5oz8$psO6y)w-ju zvYCypLS!?>^%KFnCT?NWYc(aJR+J}l3rthqTyZGybL!_360k7>Bc75~nfCbuh6%xT{FuddcW9b5uDJu(z z3-L?gH@W7KHD9OWwx!0`5iKBDgjjzF${niSVLQ%u6AFJ3j7#8G(}{+a#&gTQ`gu^J z*BT|#jAub#(&3O0ruDHCz9p!v6Ai;;)FgrTe$H69RZunJ_4WEK^U}Rbe!A&Kq?z6uiZetwr zcwLQvu6Aq$k*J8sIbFR{R>VfF4@o=cJn`{MW>GaeB*$$_*9iWH9GT#hYWYaz@Oz^? zI%xekRj~t0VA+rKO|wd}j)RS_1e-^J41%EQDy%eP%6fY9)3-~9c!f*?`rj6&``)5& z6irRvdD~L6tkh^3CSp47++-?tU`Wol^J)+_d*%295p_xuRLTzS9=u(`I8v<1p3-#{ z-nCrygfQhRn{)ROWhGRDCbBTy^-WfTfOcTlZA;e#NTflmXABb)@Eyc&gs)zA?)vkA zcHko1yG<19D`oIPwzt(be*Lb)1Y)s?M(V1(=}~ltFs*My_x92;-Vsg`(^;5Kd<>d7 zWI2J5Qq{|Dmk5T?kXV2FJ#E(t5cWGPHfye-%e z8vEIYTkhMI8s|kZbi|7szs89Sbq8&Lt|}-iv;(IH`)IZ1v9&x%|LAB~6@F5ciS!p_ zDz2cb_+WHaA5zw*{4e*GF7jeE-B9sRD259>^ulTeDHvPtzHJG3CdODJodtB3Bb|)at^j7=wyu*KAm#>&L!_D7Ob8kQH7n} z%cQT(oe8edd>7J$}WiH&H2X*tNBpvz-PkhDj*`P$c;aGo0Xwd+Q+qd3BRgWG{2 z^}pByvG^Jrs}-|gXDDYT%Ys8vM%GmUetzg@kZ()3xwxFx5+8wbuuonx7^)rk85sUz zCk%P^ki2s0b`$5#VcHXRBSc>kvYT#_nrYM{OVdun434EGMP1FudrRCjMej2V%Hz)8<7#MKe9%A??W-vMs6yoy+iB$~8Nd1TA(fOcS~ zY)cDgh}YXv-h}&2^uh0qww!*_IZ^r6%o1R@_9CCmt99XUJPx6KOuT1~YD;d(AO;V6Tf+x>``JZR!YY#afTdDuWHl_C zY8!M0ra3}E1y~2*pryxET=no>5`zEo`D*(^QZo6>@p2vSn1^?pA%ZNL$$(iPc3}rT zITORYNT93vjdyimOj{ETUxyJ`J~7itYu&V1NBM7k}^$F4EdE~sz^=ZD*k&0 z*L`O=BuGK+u9|wB%u}B`-Zo`|A0fVZGs`y34m^IgEp1m0*Mv0}ZHEMPHu(?> zeJBgWRwJwUM6v^yrUR2cM#=^zrXsGIEI!9is++z`yxvWc7!2hy9p2-)3$(04g{|9x zaodt5f3#c{#Kf;JTyxxK{F27ofrR*!3tHA=m=#q5O}bB(4O6fBF7bJ=qZ&)BKIVp~ecQ1CJ;l zLwH<*VU`&oC4#)^S(C^o9C9u_akVpBpm-L9ZIcuUkhI4slx`m=86@2fY?W9|rslHl{(69Th0aDiO6KW*^nlH^p>f!yeM|Wyy zMWNe)CzfgqF*fHDoj^kp;Rj!5k@ck+zrb{0>chr7FTW%~q{gVL#3t>)M`zaAmX=f2p&+|G41b~!fI%l} zMzRCP)Bq2EXlRkB&#Z3@kBohmWi zM`Nx0W|oah0iv@6jThBj_FZHTQdY)zh`~vfSyz>+ ztf&$>{YbMdjcm+tQgB_TmA-Q`5neCLx~Z`p*k2H{35{zxi^0s&vydS=OVHzlwNc7y zovLRgu`EzWNcl6_lpT0t$MRM5mhI6^Wr2YR4-(W<&~#&F2gXL`;EY%dW(pD|3nDbG z;%Ju>)_(ue>T}XAW{>^2I-!&WX=5ew%qXtj+iF`XeZ?_-k+k2q5qa>r=fmE!K310y>yE=uF1k`Dm}DGH<@u5!YPbIG^Wj*!#}!O*^x8Q6g-wk4Yj2N78p z&1LCF5j*fAQNyO2Q(y;fX)nNttrkqZa*>-g0|?g>*4e~h)noP?4JJcWafcs}nq~+7 zIJIz!;R+IkOR4lh5&k@`MhBGwuWq>4JZNp>PNH~bFca4p476dBUF>cT>x|cSSIw*; zkp4h=oFdLxecDCa8^fgNncj znr?7AaJw6KLQYv-XISM3&dm3EdXBEOS>P2~h%EV%8v%@y01_MiXv$wrDTZU=UL z`D!g0z04X`MKlr3?Z6;tme3{7Fk%NrBP*w@jDdQaRIh(dP0LoV`Wxf?yubhaU`ycM zlgfhQCW~i0)DFzcS5YOaz;9{m7A$W6K4>(n@C{-I#xP!duK5&jnt0XO5qc67^$m+D zH~mdd)wK^vXjG&?JiLSB(BfJ6s(9jMH z5uRaW4fzysnz-y?O|+DhTXnGM;Sh%%>5=^@3!F(vx`&Vjk4Q087UV73fsd`9Vpv;d zjp+7msaF-Z-#4FEs1ZAGS@7_pmIqnj*V=)3`KrM&BeOM@(dQLY_Yr=9c2>j=-0J@I)RlfJW);E0xKa@m z(UG(wGTFFwsl5{J^*~BF*qD2Hz$(yw;{odu))k}b?7+voe6<-7F;R!h+fvjHjI^^N zcHovH>+rvX&A5n|zw23?MG_K|E~PN;?QLNFw%LB$Th@a2ngnE<=m`E1Vh1KnF^t@M zGXAi4uDeYGK^X03l=aj%tV++?=|Pq1#yr9oT8I`r-wT8RbC>xp64?#MC8Lad^@4 zN>U3R4IY}hM2bdfmk#{VOa~sPw$w~VPuXA5#(qxdz*IXcp#wX0gSAYG88a=(suN{? z@@=X`e1jEguF&5|EqFYnXj~H6Y~yv!&;BS=4DD)Tfvp;h38n_1c2+_Mrtq~vvIa6W zeAK84R>%{ZK*(E~Sh)u4@wTsnucQjZn6Q@<{0(YKLI*aSVwjIi2W}IXO6za`lnzX{ zvl8>qohEAuHG9HX$vk*O2X<-Tw=In08mx1u+2RtO5nrb9r$SCJSqb*r_o=*=DTej} zQ)aIQ*UV0*X5a>!fsdx&zZx7#u#O(T4B|L0%E$jK94o;O!MbpEpqy-vrOXTFi-{AQ zx9(Gc4>HAYh`?m62G<;AQ*&--M8|{qJ!{sl<09G<1Y10!66|h=_@RRr+Pc7e0yQJ9 z`|%}1*+@FU$#5O`gC5}&!*((>`PUG2MCrhEJF6RiOnH4@MuJrsNZMKn<{hkulkIUX zV^`QxK+UUOwo!`qso3ejKgO;DV@fpn*8nVy!Oy83zu|$I?@IS9C0GRlClAcplt8Y* zx`aEHlPz)~Mj%)6`*bAoP@@1Cq63e1iXk!i*P;-N1_Yaervt;0a@I%@NU#dqq-rg$ zat&6(f^xw^#093L$UY+5PD?@uHke{4xmx4dl*L00nA7PndC7B;tn?7ANbZA#fk3NQ z#5GtiwjZol@@A;^pj(Cb8p$3QM1!O=Il+4JE08=?QdDCB*Liutn z3?pivxWF}7pWxjdi>|^H)NDgGu~zH9*|nJtJnkumZq#5rb^o2EzjQi-RSI{>sS`&4%f~03Z@ury8u4;ryDHx6^kP0}b(X;Lo`; zk*uV8ca)azRKhU4b{mLku%34Wt6Z{<0Kd^}Lo~5s9r&BoQgbajaJw3;jIJ|(@1xm- z?<^(-gO2L+vZG6yP;XvXQi=;M3`2D^+b|8*`BR*)uf$wnNrIYfs1@hQst){KbYRD7 zu!#=*7D-4Z0@ME6m2r|0+@n)BMeQ1$bsku?T&@eYWF5^mV-D71DFU)2M$I;qx|FW! zz_Qfb6<*(~&Pc-p#o7d=*{!J#>?v}~j(u}&)%cVvxm_2WT(Qn3>o5)0lP9?mK9lE) zAqs7_q17e4)cl9tQuFFLo>)|b*~064{jNI0mZ|%vNMJJ2fdfTs*|9(cXd_trsa(ER z3D(5K6|2)_Y)du)-RIqUdjcmisCm&-T}uAzz&pRxJc`OBh~pgEh~p|rvPd~rgTe2! zXbxs*IJ|--R5b6^;+yDh6JeDhEkWX4!p}t z&C@6eVh#O>t0WtKX-r>rVj25oHpRq^Q!K3mhmG^HBLTwqP_&lm+DSHlj`a$G2~n42 zJL+Ja%ZLbuI|FbJX(`sRO^<@3=P240K>jsvX9j zDgfanS(FtTK%RcVkv>0JhikCjzs}`k%ZRQZj0 z13!nQ<|+(waDlGuPp(z>H6)g?gK3k`aL;cO9T<~1o!p@k$yLEUUe}=DaR=*CW-qbB zL(MkCp0}OVfuq6$mw1KmKnRDJ=B{;oy-mo7Y7IPzf2J4fB$@PaIic)gD&zQviUSR)!_2qJNis4 zSN%+`H4nPx4Z5}VqsM4{J{Rl)Z=%le5KM!0M$CzFJ9~-i!DWn;Q1fkLHo_gdr~{{^ z*O{n`gE{p8*BN_#(2=jX#ktk*P=f>1X4Ap`5&8*Q2W}F9>opl^fy?WGJokbVzi-ln zX|O(##QasnKyIK)FfoeIYN`2a#;298RK2*oo*x?y6`NmQwxz3ADi><7ijfZ7NjBT? zGewUNq5$_pNByMo03feQiB(}JNk4aq&l*)CSe?Q5>@re%Rf2J;^kzq<1FNutCbQ+W z{X=kkwYY!=CM98F%UBy_koPOf>V2C2b#>i%Z%q8nNVZsKd%nJh3S?{|>ovqqJ89ml2X zYENK7-lGzH1OG5vYW|U@4xE-bth2m!Cq$fIU%)ClN$u6(OarkPj+zs3i*?|Qlpq_Z z1ioxINRB&L7t(LTil|2=_?4v&{E4Ry996K!?9%y@dVI2kRf5!54c0!{W`n_tZjSa1 zbYM&@#bALg{st+SWw6enro9p-{WiNx&|^BphaJ*^RhYvnXA9ynb#`tIQe!n(wNKs0 z&~qZ*%nUw=REog@TcQn8Fy~;M5V+~Lkum&iP|#ye@QsxY{DYwmoFqTUmP99`gC{CJ=dot6MG-$E!GY;GIGMFn8z&1-rK6jfdf~0 z18kmgbckACd@54LY!p2aA2i~?G9KZ%2JpmB*%fo%Vx3};l@aT%oza^Nn{6Jn;=niT z;=tQljmAT}5bowAA$&_mZ&K@iR<2so)$!FITH^$o_t1PU8UR?~rR<71Z?W1CDk(rPre3uf4phg+RSmV=`pMI2b!6LBrafi(yTOQ--xL`w7S znTvIX%pn_mk}i48@hFHmeg9;+Br~7dWiXy-w&s3Qw(hI9t{(P5Gzduuz>zfFow-;e zh?NbY)VidPdOC;4n9ZvsaH}`83rD^XR!61Pt@~=O^DS%ZBEJMU0# z&>RoE;=s*Nep>xmlvdSh^@7yTrmGPLPFQqv_y-XPL?Hk_8fkS4XD-$`z8B^~;|K@V z_qVjh;o#N4leIdw%Vs*4e7AEytKGVNew+>ZP@zXx&%S{7U(5Z2t^4wE^?7RZ zqBBW(0rm65f#o^YT(|N8DuV$x3K#35YGOqTfBCd2=Dqnb8wO!g>9{)S*z6cC5{sBz zTJ!Z#uewAA%bEL;rnkqb;H+n)m+k)Y;FtCo_+tX!&CVv7Q?i#q>>$*)WO& zw*_s8xZMKFFRi=%_<^Hn-B)sTEqxGH9<%y5vI1TdDpoTZ5@L9F2LVVlv(joH*f+7NNd0`Flu zdtEx%6jB^GXD`I%mZ}{KM^;dA6w7VQdddtbo7o}OQzW362UBA@^ zrl)LL3};sp7(Q=#_0Tx*A6nyBNzKD`{Ua-n3w{7f5$jWBO8CbRD+gRMwAp57%%;)q zhO|rQHZP2mB#;^N)KbDjYo0jp?`vAq-8oJ~az^T^8O?HquOSm(9^MrFZR z8+TsRDdvZ<@m2RCXm($DL%>JYzPZu58V4f&-omN{^)hP^?%N ztKSP^1=`W2+x+9J`h-WR5_YRKWs}?$(Q4+41FQdrL_>evxqAUX>F9`+$6lJ^#JYf3 z%g3ddcX`KGQ@FY958lNL`oBgbQ$Nlhs1jvMi3|@m>(z@_otpB0rI@zXvldDs027KA z>!dPbjqn|C=~%+R5bJ=F`1CN?P8;73eksgq#;bF?vZ&3fZr#uN3hidUk8fh)25>=3 ztSppRpjh#BS~@18OYf4T`Yz$&_P#Ivn-yL)W!C1`?1A5!IN+f*M0^P_p`NNKh!tWj z7tg>DYoB%)Jv_co%@FsG(|zbxHx8WJtlwKi+0T@LBb6Rz#7BGyFriVrSf@sQl>#29 zaI;i80mb}!V^FN4+d&3T-`~8XY~a-tvwpogymeo_Qcv$oFhF52V1jwEsyhu?{3;p1 z_rIlcNimOa3|$3(ilwSo)a00(vpE^B#%9&(HN4bM`ueoNvvl?giVFZrrbaPI19j&t z)*-}NI>Jc*{y?msKU&c$kW}^uW(1Dccv^3LgI*>x)|G$cf61OQ$ zWg97$Y~Aw@&W)w_uKAs6b@z%7gZmxI)!k&RxMov-g(>rDrg5LR%mL7>p_t-`Tec)v z$HWB==#mjP@5wrqDHryTtHNacC@~H!7Wh;cIu$US1%n}~G~=7qX;>Pp__$41Op4JZ zO%@7YSp%BAz1Y)4)%KboEF7;vf?i0s_Q<`M*dEsb-()FjUPBAVm!29 zgoM^^Tmi$%f^%B?=^ok*{`~62ivE3#F4RoJ3~6KLcFdAC-b=LZml}DMyMq(l-+&Rs z)k`J@>#U)}>*7fUP5Q+Wt44RU7AqPEzG-Xk{@ZSapFMvU3uce13;e1ptr14~!3dGC z4$0zRy~Z5Gf9Tdp@Y61H?MVZu`jMqmvtvOW;kj$j?* zBUG9ha1z{`DhO6KXz_Q=D=*#TnMCV;ow5iTibC4M1r8X2O0O&pYvC6LE4FPqBQxM6 zSV^!>y0>VvZ#4M5sC8dn8dsWOiV>_}gjlo#V{x$FV!lwXp#dksDvp9jw6StKYDpWR zMC*RN?qF|(U1&PFeaV&9I7P66 z(GpSGnHa3)BT)EgTn8}i?GVrFHWQgf@c*2=B>(krc$Fx;_%!GvSM_6F-W zj2G$^Y3>Q$y<#27Z?KNt4!h2Y`|~so{72BbFQe~K!P^(D0Uld00~6Ko+Z(J);+O+^ zBqm(3E@Vf;BicA}J8elDp9HP@YNS4iqBX>03x;T}hX0zlZ*2(H6|D^%&}3r373-Y1 zSYp$r^B1fyu37Wng4TUS650`F`2SB$;l}F#8FP%3NtT)@sHPFN_KE%l7Ydxq_y1L2eV6^p?!<>_>5#< zSfg%luFv zU_tA?N@+-YVD}u%;S2s&+ZwDh3_;Y?`d~es&hJhZ3V)_kDhBSYFs5BTa}F#WddO8U z*idk3X=|_&H*}z~)&}eG^nQMFLHi{VWucZ#1Q%9KryJ`}=wBYrfx!@2QEWaV;$&jglme<4MxT_szj1{+mZuwgxM%SZixbupUqE z?@p)!Z7;dq}s-3dtrRn|If=cj2brecz!_LUI%Z zYd4VZ3O=6Be=W*hQir36Im(5^tz64I5I4ZsAAplJv&sHQYmdeU>o@%E)^9><3yDm< z&=RR!YE$RZ3p12#18gy>bQWw#A|51g-b$9;13*bwY9-m|TF%DAqEZ9rIx(~gu*1VAsf>QRr zTw7DW-z;Ofpr4HVwW;og_1-A7p=AZGoCOCI6>QATaR!P>@PB6_)`x3~>er8Q!G1S2 zdO^9uYzSIb;MClm5fNlzbsjEe68yi(<*JtT-Oa~~HTAljI~rD6R-kiZcSeN9!uo?r za2PVNmhaEM^!Dv%U^R8G7wg?&-P_T!0#7m`w&p2~h4qd}a2STth`%}W2|s-Paz2o7 zoJX%_r1nTKEi3R;;(R+!VPU;3WG{>G+A=wazkd4bX_}vLkTumRbvLZW+%fY38UyF? zr63FI%In>r73mP67|0)%pKq+?QrzPCXqZQ@FI5`4bkeex5uje*|2n(qrm)stc##q-|a*e8`IvZsy4=tJ6?J3MetdWe;VZeW$%x{F*Y%ANhFjHEwKm{5@TGkaKEVPmPy|uO} z-pbOKEfwIP6stCBEl6EL8&khipQ^*My{W3&c(dd963|GG%WbV@ToXVm{mVy}0ty{l z`OOC3F#7=xO69w(3zpevV{nqX6l`HF{Kc193yv=Vja2t8>r8ks4sA?4Z>Ch8HN^F~ zd?=zpfheM7?aqS#1!$%8{6^GFte}4BoPt#8c|Ub(3VT|!H-Ye^brVZA-`L(GB!KSmnQFKr4!m(V(P$q^G6 zW?`L)b!&X8Ikf;B^-6{3mmb8LN5C^poy98X!fO0l^HBjuV^R0Y%}khDp{2Pqb}7ul z>M0+>JqwNiJYKok8a38pjUwQ=V&`R>Fbk{qdRiF5CdW^~Kuih>6&8)#ev_ce|S?5CvdZ z=Op;CSjR3KGPgj8QT(UG`@gKMKwIlFtO+AwhWEJu>!0RTIdcZRt=gZTj5(~Sda;sA zS%Gg$sh!mXq*95PTtW}K_Ah~x4r|U&LBO5gGMQ^`a$)rvdYfBLv5qsWmN)C1<{>Na z?_{t(s?Zg}gCO+w>xr?1@hnX0dL16J0G;YbrO<3_xQmf$xd9NNqI( zdf8f1HTAG2+-?Cpc$eB$1u553SunJSo;H?CjK>+)bg(OzGgd?ZkK&L=gR?>^5hrcX z*UB;!Jm#<(HGl)tOMq>FsZ`-HJYa<@v1KTD@?kYxb`CsRM!_DsIq`rM&P2|a@7jY{ z_!QRqPwi#^zAYutvX;UsLpbx)Q1EDiIAB;WQkem`vzA7pLb4YwH-~4ZZF~$XyO)5j zi*9sCiy{(Xa0$*=@T*574XYXOQb@*vfi|n~%9?B8{~hkEeGF@=>=+9M9#PhAxn>|3 zE^Ta6MTFHbA_z>Othr_&7*1_$#UrdK+k%1aF2y4Q58zA_y=33Yg48r=qx62xSz{-7D&&p?X6)&(OtX3Rk1+3<=1hA1m zp{w}f+u|j{3It~*4dd>FS5fmbtcj0dHG~!D z@-7YS<>KHIT}6Yi5>{X&*3!^N<(te%Bc`ix>W#44o!AfobX!NherL@KVJ`&kdAEb# z&#RkIr>jT9!DkWn?&FK6VO4TZ8*@t2 zGWl?{rZ{O+5LRGZwvjXrz6=LvMj8?K#Nk5_VeMhau$FQY&G47KyUS4&hyo~#brWn` zPy`IAEf_;k-^8&0WzFD>%GhF$HWXEQz6F?m=^X3t3f%EAZv1Pypp1myHAjQ9VT~LN zE5m|;|1nz1iFV+2@LqUkgMT<1R!vxemleuMWcwYa^;WpHge!!VumaYZ`i?AGGdc0O zwuBQ`!@8GRp*3LzUeG9TVbR)Hu8uig#fh_FZA{@$(?gbNts}w;ypBZ9w4K+3SDBnm zI9^3>KICYv`j$y;`!!yzhJVLOSb^tm2TNw*o7S{o8yNREH!E0`a^%$HCBh0kB$l(H zRCd`^au&=ypvlp&ri2xEdDDfZ`@ySBE)oy;m)l`o5mw-ZjbgdjS+gIUM=V!yhpS;- z$x%vJftS`iX^reSYRwBd^I5K5lhLyRZKnG^AFaIb`ZSA|NJ~x5!2=_)WorVQF7goOT0zWiL7INLzQgy1_7jk8h z@SCd`$oQL=p>_=mKK-n#2^+!+bY&jMm8i-$suO9Z<%{Lq1BRuYYd93z8pqd+$SqP~ z+?7b{V`E&W=B2eZxlp`$eaRuuJ`TPkM30 z+}}E+UtfVvwPn*VT8y^rGFn^4xDnATxHv~*R{pkI4PY2Wu@7HVVC;-?W*ub)R&*g2 z`NMB#w#)mA70JD}#X4%)Qx=pwR=gx?1c_u|j%UI27$y#PI+5bEa6Q9SdvxnDahPG@ z-5iW|%=RybHQes+q<0e7Hfm|Tz?`G?92#DS`MU#pJcUtsc$!!D-v0806gEgA@~7#T zfumnn43|-#W~ZG7J0$8QWGMuPo(;LKk>GT;Y)-+n#;dF)`-dNMJ6?7EyoT|!!g&L_ zI>&C4^&p74M!4y3Odx%=5t=Ex`Ea`PK?wDabArq82vMP#6EO=;^_k{qt}f)t2{?SX^RS#B;P8iU=;_k#x9;f ze|Blr12YEW>*GnA)_uPu;bl{BAT;Pho6JKzb@wRV2uYAd`pC_0|47rgFy*&QBsWBw76t*h zN$zCV7EEg1loqW$#4zQCDCAZ_!9?p)?BnN=tv1^PR@(to#j2fC7|XWW4qTr@!Z-2q zbwMl*LC}a-pt;G{8H6`Lf$2n7qr+R8K2`t~qv1l}YcwLTo9TsS_6|y^rQqRQ(u8-y zb2w8c^+7n#D~dN1hqzUvDrdX)85eNoY3o7ahlmENG3=irLMZ+Lup34YW4}C^%~hpB z5jD-MZ0<=aRJC4|0>1j?sV$S}qV(5e+0i$b_5((dTN$qZcx z;tol($WNC9qsRl;%V;U)zwG9ZF}ondC|qd^KF_=q-FOJxtK!Tr>-p_!PALEwyF32d zUpeoNfS0l9v#g*GqrOngSvKtJbrauRO`}7={!$J$ap@S-@tO#cuRLQvKvB80U#(Uf zf$`M&vo3;`kRQCUt(6ue0CK`&yz+aTGB5y+w#v*)wfZv!l%ymCz7|K`4ig6CP?AVw zWKHLOzZY|*+iS#_WCYwdm6Hj^p3_J)q;m1hCU%STwhk`Y}t%(nM1a z{kPDUPU14U{HS?Dq2}#Q3dui8g!tY+V1qOKbiI9N0-!90V!J4$sV(G2ac8@Y%Squ< zK#`v5cBBcQ>*9P(caw%9^(wx6IscpdM5Q@6P%&C{saN(+KMuaA55hem z*4280ak*9C(P&nnML&nc59L2Ch%5-lox3bT)Gl|~jb^0#3aVz`r~Ko>9=>6n&v^VG zaP^r3-d5>M`BiD6qHTTC-ExBgqZQ6U)dDYfZ;7t+UlOH>@xd;?-C3Gsau!DbIFfho zJt4HSsoxXwcep`j`=<#OhNtwN4(1Gf`xr5T*NpG#Dvt>O>rf?0zn$m}9pzuc?Z8Px z1xqC{iIMgjFoM6JYV}}C+PUTGLq5krWzQA)CCTcALM#T5`Im1earw8KT<&@D36Zqa z+50uh9VV7_iU1|}hf8C#M$R|&URPld{*#0P}jee0ORy@;2l?Tt4RQ#Yhw zL?0^pS->2XFsvI=*rfkalb?W|>O&WJyb;_gXkLIl*5Xw|5mD(R)2`6zn1tvq?p}4e zo_y5>5ZTM9&#WzCH~R1r-1xepigF&1mLL_J5?lF2@T-vNWzPauP=J_z? z?r|E%Rk?AZ#X{B zjB)^|$T+>q!xtLo+Npw>2PbOt4ffpMxVM%=>Bej6rDWxy`b@XrdHu=@F0U(~bh&J$ zdMiQj-;H>2rRUc7u7C2dYL(<4Hc`SA)$g1+-h}WEQ^@3AWkuodob7I-r2m6M|G7X&_oGERMt`q7y`O4h>3F{8EGFqc(WK@_ literal 0 HcmV?d00001 diff --git a/_static/demo_thumbnails/regular_demo_thumbnails/thumbnail_vibrational_hamiltonian.png b/_static/demo_thumbnails/regular_demo_thumbnails/thumbnail_vibrational_hamiltonian.png new file mode 100644 index 0000000000000000000000000000000000000000..622dcc3b70f14343dae708bba646559e451fcfbb GIT binary patch literal 7436 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 Date: Thu, 31 Jul 2025 16:10:35 -0400 Subject: [PATCH 10/11] rename file --- ... tutorial_how_to_build_vibrational_hamiltonians.metadata.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename demonstrations/{tutorial_how_to_build_vibrational_hamiltonians.json => tutorial_how_to_build_vibrational_hamiltonians.metadata.json} (100%) diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.metadata.json similarity index 100% rename from demonstrations/tutorial_how_to_build_vibrational_hamiltonians.json rename to demonstrations/tutorial_how_to_build_vibrational_hamiltonians.metadata.json From b288ee81bed83cdc57c7140a701c84c37fbea187 Mon Sep 17 00:00:00 2001 From: soranjh Date: Thu, 31 Jul 2025 16:25:28 -0400 Subject: [PATCH 11/11] optimize false --- .../tutorial_how_to_build_vibrational_hamiltonians.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py index 623311c5ab..b0b0ca9e61 100644 --- a/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py +++ b/demonstrations/tutorial_how_to_build_vibrational_hamiltonians.py @@ -81,9 +81,9 @@ import pennylane as qml symbols = ['H', 'F'] -geometry = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0]]) +geometry = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.79]]) mol = qml.qchem.Molecule(symbols, geometry) -pes = qml.qchem.vibrational_pes(mol) +pes = qml.qchem.vibrational_pes(mol, optimize=False) ###################################################################### # The :func:`~.pennylane.qchem.vibrational_pes` function creates a