From f707a092f8b4e3da7f42f1d99ea13e219ed1c93e Mon Sep 17 00:00:00 2001 From: Junya Otsuki Date: Thu, 22 Feb 2018 11:18:10 +0900 Subject: [PATCH] Forked from krivenko/pomerol2triqs, Commits on Oct 2, 2017, d63b3fab2e8fc3bb28d2b99976fba84eebfa7401 --- .clang-format | 45 ++ CMakeLists.txt | 60 ++ LICENSE | 674 +++++++++++++++++++++++ README.md | 45 ++ c++/CMakeLists.txt | 8 + c++/g2_parameters.hpp | 74 +++ c++/pomerol_ed.cpp | 538 ++++++++++++++++++ c++/pomerol_ed.hpp | 96 ++++ cmake/sitecustomize.py | 8 + doc/.gitignore | 6 + doc/g2_conv.tex | 134 +++++ example/2band.atom.py | 159 ++++++ example/2band.py | 182 ++++++ example/anderson.py | 140 +++++ python/CMakeLists.txt | 16 + python/__init__.py | 7 + python/pomerol2triqs_converters.hxx | 219 ++++++++ python/pomerol2triqs_desc.py | 67 +++ python/pomerol2triqs_parameters.rst | 41 ++ test/CMakeLists.txt | 1 + test/python/CMakeLists.txt | 13 + test/python/anderson_g2_matsubara.py | 114 ++++ test/python/anderson_g2_matsubara.ref.h5 | Bin 0 -> 482376 bytes test/python/anderson_gf.py | 90 +++ test/python/anderson_gf.ref.h5 | Bin 0 -> 133104 bytes test/python/slater_gf.py | 96 ++++ test/python/slater_gf.ref.h5 | Bin 0 -> 405336 bytes test/python/wick.py | 148 +++++ 28 files changed, 2981 insertions(+) create mode 100644 .clang-format create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 README.md create mode 100644 c++/CMakeLists.txt create mode 100644 c++/g2_parameters.hpp create mode 100644 c++/pomerol_ed.cpp create mode 100644 c++/pomerol_ed.hpp create mode 100644 cmake/sitecustomize.py create mode 100644 doc/.gitignore create mode 100644 doc/g2_conv.tex create mode 100644 example/2band.atom.py create mode 100644 example/2band.py create mode 100644 example/anderson.py create mode 100644 python/CMakeLists.txt create mode 100644 python/__init__.py create mode 100644 python/pomerol2triqs_converters.hxx create mode 100644 python/pomerol2triqs_desc.py create mode 100644 python/pomerol2triqs_parameters.rst create mode 100644 test/CMakeLists.txt create mode 100644 test/python/CMakeLists.txt create mode 100644 test/python/anderson_g2_matsubara.py create mode 100644 test/python/anderson_g2_matsubara.ref.h5 create mode 100644 test/python/anderson_gf.py create mode 100644 test/python/anderson_gf.ref.h5 create mode 100644 test/python/slater_gf.py create mode 100644 test/python/slater_gf.ref.h5 create mode 100644 test/python/wick.py diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..10b3840 --- /dev/null +++ b/.clang-format @@ -0,0 +1,45 @@ +BasedOnStyle: LLVM + +AccessModifierOffset: 0 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: true +AlignConsecutiveDeclarations: false +AlignEscapedNewlinesLeft: false +AlignOperands: false +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: true +AllowShortCaseLabelsOnASingleLine: true +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: true +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Attach +BreakBeforeTernaryOperators: false +BreakConstructorInitializersBeforeComma: false +BreakStringLiterals: false +ColumnLimit: 150 +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 3 +ContinuationIndentWidth: 3 +Cpp11BracedListStyle: true +DerivePointerBinding : false +IndentCaseLabels: true +IndentWidth: 2 +Language: Cpp +MaxEmptyLinesToKeep: 1 +NamespaceIndentation : All +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SpaceAfterControlStatementKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceInEmptyParentheses: false +SpacesInParentheses: false +Standard: Cpp11 +TabWidth: 2 +UseTab: Never diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5d7bd13 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,60 @@ +# Start configuration +cmake_minimum_required(VERSION 2.8.7) + +# Version number of the application +project(pomerol2triqs CXX) +set(POMEROL2TRIQS_VERSION "0.1") + +# Build the optimized version by default +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +# We use shared libraries +option(BUILD_SHARED_LIBS "Build shared libraries" ON) + +# Append TRIQS installed files to the cmake load path +list(APPEND CMAKE_MODULE_PATH ${TRIQS_PATH}/share/triqs/cmake) +# Append Pomerol installed files to the cmake load path +list(APPEND CMAKE_MODULE_PATH ${POMEROL_PATH}/share/pomerol/cmake) + +# Load TRIQS, including all predefined variables from TRIQS installation +find_package(TRIQS REQUIRED) + +if(NOT TRIQS_VERSION EQUAL 1.5) + message(FATAL_ERROR "The application requires the TRIQS library version 1.5 (got ${TRIQS_VERSION})") +endif() + +# Load Pomerol +find_package(pomerol REQUIRED) + +# Find MPI +find_package(MPI) + +# Get hash +triqs_get_git_hash(${CMAKE_SOURCE_DIR} "POMEROL2TRIQS") +if(${GIT_RESULT} EQUAL 0) + message(STATUS "Hash: ${POMEROL2TRIQS_GIT_HASH}") +endif(${GIT_RESULT} EQUAL 0) + +# We want to be installed in the TRIQS tree +set(CMAKE_INSTALL_PREFIX ${TRIQS_PATH}) + +message(STATUS "TRIQS : Adding compilation flags detected by the library") +add_definitions(${TRIQS_CXX_DEFINITIONS}) + +option(Tests "Enable Tests" ON) + +include_directories(c++) + +# Compile C++ code +add_subdirectory(c++) + +# Python interface +if (${TRIQS_WITH_PYTHON_SUPPORT}) + add_subdirectory(python) + if (${Tests}) + enable_testing() + add_subdirectory(test) + endif() +endif() diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..66285f0 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +pomerol2triqs +============= + +Quick and dirty TRIQS wrapper around the Pomerol exact diagonalization library + +To learn how to use this wrapper, see `example` subdir in the source directory. + +Features +-------- + +* Diagonalization of finite fermionic models with Hamiltonians written in terms of second quantization operators. +* Calculation of single-particle Green's functions: `G(\tau)`, `G(i\omega_n)`, `G(\omega)`. +* Calculation of two-particle Green's functions: `G(\omega;\nu,\nu')` and `G(\omega;\ell,\ell')`. + +Notation for the two-particle Green's functions is adopted from the +[PhD thesis of Lewin Boehnke](http://ediss.sub.uni-hamburg.de/volltexte/2015/7325/pdf/Dissertation.pdf). + +Installation +------------ + +- Install the latest version of [Pomerol](http://aeantipov.github.io/pomerol/) exact diagonalization library (`master` branch). +- Install the latest version of [TRIQS](https://triqs.ipht.cnrs.fr/1.x/install.html) library (**`unstable`** branch). +- `git clone https://github.com/krivenko/pomerol2triqs.git pomerol2triqs.git` +- `mkdir pomerol2triqs.build && cd pomerol2triqs.build` +- `cmake ../pomerol2triqs.git -DCMAKE_BUILD_TYPE=Release -DTRIQS_PATH= -DPOMEROL_PATH=` +- `make` +- `make install` + +License +------- + +Copyright (C) 2017 Igor Krivenko + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . diff --git a/c++/CMakeLists.txt b/c++/CMakeLists.txt new file mode 100644 index 0000000..9c873d7 --- /dev/null +++ b/c++/CMakeLists.txt @@ -0,0 +1,8 @@ +add_library(pomerol2triqs_c pomerol_ed.cpp) + +target_link_libraries(pomerol2triqs_c ${TRIQS_LIBRARY_ALL} ${pomerol_LIBRARIES}) +include_directories(${TRIQS_INCLUDE_ALL} ${pomerol_INCLUDE_DIRS}) +triqs_set_rpath_for_target(pomerol2triqs_c) + +install(TARGETS pomerol2triqs_c DESTINATION lib) +install(FILES pomerol_ed.hpp DESTINATION include/pomerol2triqs) diff --git a/c++/g2_parameters.hpp b/c++/g2_parameters.hpp new file mode 100644 index 0000000..c828371 --- /dev/null +++ b/c++/g2_parameters.hpp @@ -0,0 +1,74 @@ +#pragma once + +#include +using triqs::hilbert_space::gf_struct_t; + +namespace pomerol2triqs { + + enum block_order_t { AABB, ABBA }; + enum channel_t { PP, PH, AllFermionic }; + + using g2_blocks_t = std::set>; + + struct g2_iw_inu_inup_params_t { + + /// Structure of G^2 blocks. + gf_struct_t gf_struct; + + /// Inverse temperature + double beta; + + /// Channel in which Matsubara frequency representation is defined. + channel_t channel = PH; + + /// Order of block indices in the definition of G^2. + block_order_t block_order = AABB; + + /// List of block index pairs of G^2 to measure. + /// default: measure all blocks + g2_blocks_t blocks = g2_blocks_t{}; + + /// Number of bosonic Matsubara frequencies. + int n_iw = 30; + + /// Number of fermionic Matsubara frequencies. + int n_inu = 30; + + g2_iw_inu_inup_params_t() {} + g2_iw_inu_inup_params_t(gf_struct_t const &gf_struct, double beta) : gf_struct(gf_struct), beta(beta) {} + }; + + struct g2_iw_l_lp_params_t { + + /// Structure of G^2 blocks. + gf_struct_t gf_struct; + + /// Inverse temperature + double beta; + + /// Channel in which Matsubara frequency representation is defined. + channel_t channel = PH; + + /// Order of block indices in the definition of G^2. + block_order_t block_order = AABB; + + /// List of block index pairs of G^2 to measure. + /// default: measure all blocks + g2_blocks_t blocks = g2_blocks_t{}; + + /// Number of bosonic Matsubara frequencies. + int n_iw = 30; + + /// Number of Legendre coefficients. + int n_l = 20; + + /// Maximum number of positive Matsubara frequencies in summation. + int n_inu_sum = 500; + + /// Tolerance for Matsubara frequency summation. + double inu_sum_tol = 1e-6; + + g2_iw_l_lp_params_t() {} + g2_iw_l_lp_params_t(gf_struct_t const &gf_struct, double beta) : gf_struct(gf_struct), beta(beta) {} + }; +} diff --git a/c++/pomerol_ed.cpp b/c++/pomerol_ed.cpp new file mode 100644 index 0000000..d6be072 --- /dev/null +++ b/c++/pomerol_ed.cpp @@ -0,0 +1,538 @@ +#include "pomerol_ed.hpp" + +#include +#include +#include + +namespace pomerol2triqs { + + // Generalization of triqs::utility::legendre_T + // See eq. (4.5) in Lewin Boehnke's thesis + inline std::complex t_bar(int o, int l) { + if (o == 0) return l == 0 ? 1 : 0; + + const double pi = boost::math::constants::pi(); + bool neg_o = false; + if (o < 0) { + neg_o = true; + o = -o; + } + + std::complex res = (sqrt(2 * l + 1) / sqrt(o)) * std::pow(1_j, o + l) * boost::math::cyl_bessel_j(l + 0.5, o * pi / 2); + // \bar T_{-ol} = \bar T_{ol}^* + return neg_o ? std::conj(res) : res; + } + + Pomerol::Lattice pomerol_ed::init() { + + Pomerol::Lattice l; + + std::map site_max_orb; + for (auto const &ind : index_converter) { + std::string pomerol_site; + int pomerol_orb; + std::tie(pomerol_site, pomerol_orb, std::ignore) = ind.second; + + auto it = site_max_orb.find(pomerol_site); + if (it == site_max_orb.end()) + site_max_orb[pomerol_site] = pomerol_orb; + else + it->second = std::max(it->second, pomerol_orb); + } + + for (auto const &site_orb : site_max_orb) l.addSite(new Pomerol::Lattice::Site(site_orb.first, site_orb.second + 1, 2)); + + return l; + } + + pomerol_ed::pomerol_ed(index_converter_t const &index_converter, bool verbose) + : verbose(verbose), index_converter(index_converter), bare_lattice(init()), index_info(bare_lattice.getSiteMap()) { + index_info.prepare(); + if (verbose && !comm.rank()) { + std::cout << "Pomerol: lattice sites" << std::endl; + bare_lattice.printSites(); + std::cout << "Pomerol: operator indices" << std::endl; + index_info.printIndices(); + } + } + + double pomerol_ed::diagonalize_prepare(many_body_op_t const &hamiltonian) { + // Workaround for the broken std::vector + struct bool_ { + bool b; + }; + + std::vector OperatorSequence; + std::vector SiteLabels; + std::vector Orbitals; + std::vector Spins; + + lattice.reset(new Pomerol::Lattice(bare_lattice)); + + double gs_shift = 0; + + for (auto const &term : hamiltonian) { + if (term.monomial.empty()) { + gs_shift = std::real(term.coef); + continue; // Constant term is unphysical anyway ... + } + OperatorSequence.clear(); + SiteLabels.clear(); + Orbitals.clear(); + Spins.clear(); + + for (auto o : term.monomial) { + auto it = index_converter.find(o.indices); + if (it == index_converter.end()) TRIQS_RUNTIME_ERROR << "diagonalize: invalid Hamiltonian, unexpected operator indices " << o.indices; + + OperatorSequence.push_back({o.dagger}); + + std::string site; + unsigned short orb; + Pomerol::spin s; + std::tie(site, orb, s) = it->second; + SiteLabels.push_back(site); + Orbitals.push_back(orb); + Spins.push_back(s); + } + + lattice->addTerm(new Pomerol::Lattice::Term(term.monomial.size(), reinterpret_cast(OperatorSequence.data()), term.coef, + SiteLabels.data(), Orbitals.data(), Spins.data())); + } + + storage.reset(new Pomerol::IndexHamiltonian(lattice.get(), index_info)); + storage->prepare(); + + if (verbose && !comm.rank()) { + std::cout << "Pomerol: terms of Hamiltonian" << std::endl; + std::cout << *storage << std::endl; + } + + return gs_shift; + } + + void pomerol_ed::diagonalize_main(double gs_shift) { + + // Classify many-body states + states_class.reset(new Pomerol::StatesClassification(index_info, *symm)); + states_class->compute(); + + // Matrix representation of the Hamiltonian + matrix_h.reset(new Pomerol::Hamiltonian(index_info, *storage, *states_class)); + matrix_h->prepare(comm); + matrix_h->compute(comm); + + // Get ground state energy + if (verbose && !comm.rank()) { std::cout << "Pomerol: ground state energy is " << matrix_h->getGroundEnergy() + gs_shift << std::endl; } + + // Reset containers, we will compute them later if needed + rho.release(); + ops_container.release(); + } + + void pomerol_ed::diagonalize(many_body_op_t const &hamiltonian, bool ignore_symmetries) { + + double gs_shift = diagonalize_prepare(hamiltonian); + + // Check the Hamiltonian commutes with the total number of particles + Pomerol::OperatorPresets::N N(index_info.getIndexSize()); + if (!storage->commutes(N)) TRIQS_RUNTIME_ERROR << "diagonalize: Hamiltonian does not conserve the total number of particles"; + + // Construct Symmetrizer + symm.reset(new Pomerol::Symmetrizer(index_info, *storage)); + symm->compute(ignore_symmetries); + + diagonalize_main(gs_shift); + } + + void pomerol_ed::diagonalize(many_body_op_t const &hamiltonian, std::vector const& integrals_of_motion) { + + double gs_shift = diagonalize_prepare(hamiltonian); + + std::vector iom; + for(auto const& op : integrals_of_motion) { + Pomerol::Operator pom_op; + for (auto const &term : op) { + Pomerol::Operator pom_term; + pom_term += term.coef; + for (auto o : term.monomial) { + Pomerol::ParticleIndex pom_ind = lookup_pomerol_index(o.indices); + + if (pom_ind == -1) + TRIQS_RUNTIME_ERROR << "diagonalize: invalid integral of motion, unexpected operator indices " << o.indices; + + if(o.dagger) + pom_term *= Pomerol::OperatorPresets::c_dag(pom_ind); + else + pom_term *= Pomerol::OperatorPresets::c(pom_ind); + } + + pom_op += pom_term; + } + iom.push_back(pom_op); + } + + // Construct Symmetrizer + symm.reset(new Pomerol::Symmetrizer(index_info, *storage)); + symm->compute(iom); + + diagonalize_main(gs_shift); + } + + Pomerol::ParticleIndex pomerol_ed::lookup_pomerol_index(indices_t const &i) const { + auto it = index_converter.find(i); + if (it == index_converter.end()) return -1; + std::string site; + unsigned short orb; + Pomerol::spin s; + std::tie(site, orb, s) = it->second; + return index_info.getIndex(site, orb, s); + } + + // Translate gf_struct into a set of ParticleIndex + std::set pomerol_ed::gf_struct_to_pomerol_indices(gf_struct_t const &gf_struct) const { + std::set indices; + for (auto const &b : gf_struct) { + for (auto const &i : b.second) { + auto pom_ind = lookup_pomerol_index({b.first, i}); + if (pom_ind == -1) TRIQS_RUNTIME_ERROR << "gf_struct_to_pomerol_indices: unexpected GF index " << b.first << "," << i; + indices.insert(pom_ind); + } + } + return indices; + } + + // Create the Density Matrix. + void pomerol_ed::compute_rho(double beta) { + if (!states_class || !matrix_h) TRIQS_RUNTIME_ERROR << "compute_rho: internal error!"; + + if (!rho || rho->beta != beta) { + if (verbose && !comm.rank()) std::cout << "Pomerol: computing density matrix for \\beta = " << beta << std::endl; + rho.reset(new Pomerol::DensityMatrix(*states_class, *matrix_h, beta)); + rho->prepare(); + rho->compute(); + } + } + + void pomerol_ed::compute_field_operators(gf_struct_t const &gf_struct) { + if (!states_class || !matrix_h) TRIQS_RUNTIME_ERROR << "compute_field_operators: internal error!"; + + auto new_ops = gf_struct_to_pomerol_indices(gf_struct); + if (!ops_container || computed_ops != new_ops) { + if (verbose && !comm.rank()) { + std::cout << "Pomerol: computing field operators with indices "; + bool comma = false; + for (auto i : new_ops) { + std::cout << (comma ? ", " : "") << i; + comma = true; + } + std::cout << std::endl; + } + + ops_container.reset(new Pomerol::FieldOperatorContainer(index_info, *states_class, *matrix_h)); + ops_container->prepareAll(new_ops); + ops_container->computeAll(); + + computed_ops = new_ops; + } + } + + ////////////////////// + // Green's function // + ////////////////////// + + template + block_gf pomerol_ed::compute_gf(gf_struct_t const &gf_struct, gf_mesh const &mesh, Filler filler) const { + + if (!states_class || !matrix_h || !rho || !ops_container) TRIQS_RUNTIME_ERROR << "compute_gf: internal error!"; + + struct index_visitor { + std::vector indices; + void operator()(int i) { indices.push_back(std::to_string(i)); } + void operator()(std::string s) { indices.push_back(s); } + }; + + std::vector block_names; + std::vector> g_blocks; + + for (auto const &bl : gf_struct) { + block_names.push_back(bl.first); + int n = bl.second.size(); + + index_visitor iv; + for (auto &ind : bl.second) { apply_visitor(iv, ind); } + std::vector> indices{{iv.indices, iv.indices}}; + + g_blocks.push_back(gf{mesh, {n, n}, indices}); + auto &g = g_blocks.back(); + + for (int i1 : range(n)) { + Pomerol::ParticleIndex pom_i1 = lookup_pomerol_index({bl.first, bl.second[i1]}); + for (int i2 : range(n)) { + Pomerol::ParticleIndex pom_i2 = lookup_pomerol_index({bl.first, bl.second[i2]}); + + if (verbose && !comm.rank()) + std::cout << "fill_gf: Filling GF component (" << bl.first << "," << bl.second[i1] << ")(" << bl.first << "," << bl.second[i2] << ")" + << std::endl; + auto g_el = slice_target_to_scalar(g, i1, i2); + + Pomerol::GreensFunction pom_g(*states_class, *matrix_h, ops_container->getAnnihilationOperator(pom_i1), + ops_container->getCreationOperator(pom_i2), *rho); + pom_g.prepare(); + pom_g.compute(); + + filler(g_el, pom_g); + g_el.singularity()(1) = (i1 == i2) ? 1 : 0; + } + } + } + return make_block_gf(block_names, std::move(g_blocks)); + } + + block_gf pomerol_ed::G_iw(gf_struct_t const &gf_struct, double beta, int n_iw) { + if (!matrix_h) TRIQS_RUNTIME_ERROR << "G_iw: no Hamiltonian has been diagonalized"; + compute_rho(beta); + compute_field_operators(gf_struct); + + auto filler = [](gf_view g_el, Pomerol::GreensFunction const &pom_g) { + for (auto iw : g_el.mesh()) g_el[iw] = pom_g(std::complex(iw)); + }; + return compute_gf(gf_struct, {beta, Fermion, n_iw}, filler); + } + + block_gf pomerol_ed::G_tau(gf_struct_t const &gf_struct, double beta, int n_tau) { + if (!matrix_h) TRIQS_RUNTIME_ERROR << "G_tau: no Hamiltonian has been diagonalized"; + compute_rho(beta); + compute_field_operators(gf_struct); + + auto filler = [](gf_view g_el, Pomerol::GreensFunction const &pom_g) { + for (auto tau : g_el.mesh()) g_el[tau] = pom_g.of_tau(tau); + }; + return compute_gf(gf_struct, {beta, Fermion, n_tau}, filler); + } + + block_gf pomerol_ed::G_w(gf_struct_t const &gf_struct, double beta, std::pair const &energy_window, int n_w, + double im_shift) { + if (!matrix_h) TRIQS_RUNTIME_ERROR << "G_w: no Hamiltonian has been diagonalized"; + compute_rho(beta); + compute_field_operators(gf_struct); + + auto filler = [im_shift](gf_view g_el, Pomerol::GreensFunction const &pom_g) { + for (auto w : g_el.mesh()) g_el[w] = pom_g(double(w) + 1_j * im_shift); + }; + return compute_gf(gf_struct, {energy_window.first, energy_window.second, n_w}, filler); + } + + /////////////////////////////////// + // Two-particle Green's function // + /////////////////////////////////// + + template + auto pomerol_ed::compute_g2(gf_struct_t const &gf_struct, gf_mesh const &mesh, block_order_t block_order, g2_blocks_t const &g2_blocks, + Filler filler) const -> block2_gf> { + + if (!states_class || !matrix_h || !rho || !ops_container) TRIQS_RUNTIME_ERROR << "compute_g2: internal error!"; + + bool compute_all_blocks = g2_blocks.empty(); + + std::vector>>> gf_vecvec; + std::vector block_names; + + for (auto const &bl1 : gf_struct) { + auto &A = bl1.first; + int A_size = bl1.second.size(); + int s1 = A_size; + block_names.push_back(A); + + std::vector>> gf_vec; + for (auto const &bl2 : gf_struct) { + auto &B = bl2.first; + int B_size = bl2.second.size(); + int s3 = B_size; + + int s2 = block_order == AABB ? s1 : s3; + int s4 = block_order == AABB ? s3 : s1; + + gf_vec.emplace_back(mesh, make_shape(s1, s2, s3, s4)); + + if (compute_all_blocks || g2_blocks.count({A, B})) { + auto const &A_inner = bl1.second; + auto const &B_inner = bl2.second; + + auto &g2_block = gf_vec.back(); + + for (int a : range(A_size)) + for (int b : range(A_size)) + for (int c : range(B_size)) + for (int d : range(B_size)) { + + if (verbose && !comm.rank()) { + std::cout << "compute_g2: filling G^2 element "; + if (block_order == AABB) { + std::cout << "(" << A << "," << a << ")"; + std::cout << "(" << A << "," << b << ")"; + std::cout << "(" << B << "," << c << ")"; + std::cout << "(" << B << "," << d << ")"; + } else { + std::cout << "(" << A << "," << a << ")"; + std::cout << "(" << B << "," << d << ")"; + std::cout << "(" << B << "," << c << ")"; + std::cout << "(" << A << "," << b << ")"; + } + std::cout << std::endl; + } + + auto g2_el = block_order == AABB ? slice_target_to_scalar(g2_block, a, b, c, d) : slice_target_to_scalar(g2_block, a, d, c, b); + + Pomerol::ParticleIndex pom_i1 = lookup_pomerol_index({A, A_inner[b]}); + Pomerol::ParticleIndex pom_i2 = lookup_pomerol_index({B, B_inner[d]}); + Pomerol::ParticleIndex pom_i3 = lookup_pomerol_index({A, A_inner[a]}); + Pomerol::ParticleIndex pom_i4 = lookup_pomerol_index({B, B_inner[c]}); + + Pomerol::TwoParticleGF pom_g2(*states_class, *matrix_h, ops_container->getAnnihilationOperator(pom_i1), + ops_container->getAnnihilationOperator(pom_i2), ops_container->getCreationOperator(pom_i3), + ops_container->getCreationOperator(pom_i4), *rho); + pom_g2.prepare(); + pom_g2.compute(false, {}, comm); + + filler(g2_el, pom_g2); + } + } + } + gf_vecvec.emplace_back(std::move(gf_vec)); + } + + return make_block2_gf(block_names, block_names, std::move(gf_vecvec)); + } + + auto pomerol_ed::G2_iw_inu_inup(g2_iw_inu_inup_params_t const &p) -> block2_gf> { + if (!matrix_h) TRIQS_RUNTIME_ERROR << "G2_iw_inu_inup: no Hamiltonian has been diagonalized"; + compute_rho(p.beta); + compute_field_operators(p.gf_struct); + + if (verbose && !comm.rank()) std::cout << "G2_iw_inu_inup: filling output container" << std::endl; + + auto filler = [&p, this](gf_view g2_el, auto const &pom_g2) { + long mesh_index = 0; + for (auto w_nu_nup : g2_el.mesh()) { + if ((mesh_index++) % comm.size() != comm.rank()) continue; + + if (p.channel == AllFermionic) { + + int n1 = std::get<0>(w_nu_nup).index(); + int n2 = std::get<1>(w_nu_nup).index(); + int n3 = std::get<2>(w_nu_nup).index(); + + if (p.block_order == AABB) + g2_el[w_nu_nup] = -pom_g2(n2, n1 + n3 - n2, n1); + else + g2_el[w_nu_nup] = +pom_g2(n1 + n3 - n2, n2, n1); + + } else { // p.channel == PH or PP + + int w_n = std::get<0>(w_nu_nup).index(); + int nu_n = std::get<1>(w_nu_nup).index(); + int nup_n = std::get<2>(w_nu_nup).index(); + + int W_n = p.channel == PH ? w_n + nu_n : w_n - nup_n - 1; + + if (p.block_order == AABB) { + g2_el[w_nu_nup] = -pom_g2(W_n, nup_n, nu_n); + } else { + g2_el[w_nu_nup] = +pom_g2(nup_n, W_n, nu_n); + } + } + } + }; + + gf_mesh mesh_b{p.beta, Boson, p.n_iw}; + gf_mesh mesh_f{p.beta, Fermion, p.n_inu}; + + gf_mesh mesh_bff{mesh_b, mesh_f, mesh_f}; + gf_mesh mesh_fff{mesh_f, mesh_f, mesh_f}; + + block2_gf> g2; + + if (p.channel == AllFermionic) + g2 = compute_g2(p.gf_struct, mesh_fff, p.block_order, p.blocks, filler); + else + g2 = compute_g2(p.gf_struct, mesh_bff, p.block_order, p.blocks, filler); + + g2() = mpi_all_reduce(g2(), comm); + + return g2; + } + + auto pomerol_ed::G2_iw_l_lp(g2_iw_l_lp_params_t const &p) -> block2_gf> { + if (!matrix_h) TRIQS_RUNTIME_ERROR << "G2_iw_l_lp: no Hamiltonian has been diagonalized"; + compute_rho(p.beta); + compute_field_operators(p.gf_struct); + + gf_mesh mesh{{p.beta, Boson, p.n_iw}, {p.beta, Fermion, static_cast(p.n_l)}, {p.beta, Fermion, static_cast(p.n_l)}}; + + if (verbose && !comm.rank()) std::cout << "G2_iw_l_lp: filling output container" << std::endl; + + auto filler = [&p, this](gf_view g2_el, auto const &pom_g2) { + + auto get_g2_iw_inu_inup_val = [&p, &pom_g2](long w_m, long nu_n, long nup_n) { + int W_n = p.channel == PH ? w_m + nu_n : w_m - nup_n - 1; + if (p.block_order == AABB) + return -pom_g2(W_n, nup_n, nu_n); + else + return +pom_g2(nup_n, W_n, nu_n); + }; + + array, 2> border_contrib(p.n_l, p.n_l); + array llp_element_converged(p.n_l, p.n_l); + int n_llp_elements_converged; + + long mesh_index = 0; + for (auto iw : std::get<0>(g2_el.mesh())) { + if((mesh_index++) % comm.size() != comm.rank()) continue; + + int w_m = iw.index(); + + llp_element_converged() = false; + n_llp_elements_converged = 0; + + // Summation over n and n' is done by adding new border points to + // a square summation domain. + for (int r = 0; r < p.n_inu_sum; ++r) { // r is current size of the domain + if (n_llp_elements_converged == p.n_l * p.n_l) break; + + border_contrib() = 0; + for (int n = -r; n <= r; ++n) { + auto iw_val_1 = get_g2_iw_inu_inup_val(w_m, r, n); + auto iw_val_2 = get_g2_iw_inu_inup_val(w_m, -r - 1, n - 1); + auto iw_val_3 = get_g2_iw_inu_inup_val(w_m, n - 1, r); + auto iw_val_4 = get_g2_iw_inu_inup_val(w_m, n, -r - 1); + + for (auto l : std::get<1>(g2_el.mesh())) + for (auto lp : std::get<2>(g2_el.mesh())) { + if (llp_element_converged(l, lp)) continue; + + using std::conj; + std::complex val = 0; + val += t_bar(2 * r + w_m + 1, l) * iw_val_1 * conj(t_bar(2 * n + w_m + 1, lp)); + val += t_bar(2 * (-r - 1) + w_m + 1, l) * iw_val_2 * conj(t_bar(2 * (n - 1) + w_m + 1, lp)); + val += t_bar(2 * (n - 1) + w_m + 1, l) * iw_val_3 * conj(t_bar(2 * r + w_m + 1, lp)); + val += t_bar(2 * n + w_m + 1, l) * iw_val_4 * conj(t_bar(2 * (-r - 1) + w_m + 1, lp)); + + g2_el[{iw, l, lp}] += val; + border_contrib(l, lp) += val; + if (std::abs(border_contrib(l, lp)) < p.inu_sum_tol) { + llp_element_converged(l, lp) = true; + ++n_llp_elements_converged; + } + } + } + } + } + }; + + auto g2 = compute_g2(p.gf_struct, mesh, p.block_order, p.blocks, filler); + g2() = mpi_all_reduce(g2(), comm); + + return g2; + } +} diff --git a/c++/pomerol_ed.hpp b/c++/pomerol_ed.hpp new file mode 100644 index 0000000..1ca5633 --- /dev/null +++ b/c++/pomerol_ed.hpp @@ -0,0 +1,96 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "g2_parameters.hpp" + +namespace pomerol2triqs { + +#ifdef POMEROL_COMPLEX_MATRIX_ELEMENTS + using h_scalar_t = std::complex; +#else + using h_scalar_t = double; +#endif + + // Operator with real or complex value + using many_body_op_t = triqs::operators::many_body_operator_generic; + + using namespace triqs::gfs; + using triqs::hilbert_space::gf_struct_t; + + using indices_t = triqs::hilbert_space::fundamental_operator_set::indices_t; + using pomerol_indices_t = std::tuple; + using index_converter_t = std::map; + + class pomerol_ed { + + triqs::mpi::communicator comm; + + const bool verbose; + index_converter_t index_converter; + Pomerol::Lattice bare_lattice; + Pomerol::IndexClassification index_info; + + std::unique_ptr lattice; + std::unique_ptr storage; + std::unique_ptr symm; + std::unique_ptr states_class; + std::unique_ptr matrix_h; + std::unique_ptr rho; + std::set computed_ops; + std::unique_ptr ops_container; + + Pomerol::Lattice init(); + Pomerol::ParticleIndex lookup_pomerol_index(indices_t const &i) const; + std::set gf_struct_to_pomerol_indices(gf_struct_t const &gf_struct) const; + double diagonalize_prepare(many_body_op_t const &hamiltonian); + void diagonalize_main(double gs_shift); + void compute_rho(double beta); + void compute_field_operators(gf_struct_t const &gf_struct); + template block_gf compute_gf(gf_struct_t const &gf_struct, gf_mesh const &mesh, Filler filler) const; + + using w_nu_nup_t = cartesian_product; + using w_l_lp_t = cartesian_product; + template + block2_gf> compute_g2(gf_struct_t const &gf_struct, gf_mesh const &mesh, block_order_t block_order, + g2_blocks_t const &g2_blocks, Filler filler) const; + + public: + /// Create a new solver object + pomerol_ed(index_converter_t const &index_converter, bool verbose = false); + + /// Diagonalize Hamiltonian optionally employing conservation of N and S_z + void diagonalize(many_body_op_t const &hamiltonian, bool ignore_symmetries = false); + + /// Diagonalize Hamiltonian using provided integrals of motion + void diagonalize(many_body_op_t const &hamiltonian, std::vector const& integrals_of_motion); + + /// Green's function in Matsubara frequencies + block_gf G_iw(gf_struct_t const &gf_struct, double beta, int n_iw); + + /// Green's function in imaginary time + block_gf G_tau(gf_struct_t const &gf_struct, double beta, int n_tau); + + /// Retarded Green's function on real energy axis + block_gf G_w(gf_struct_t const &gf_struct, double beta, std::pair const &energy_window, int n_w, double im_shift = 0); + + /// Two-particle Green's function, Matsubara frequencies + TRIQS_WRAP_ARG_AS_DICT + block2_gf> G2_iw_inu_inup(g2_iw_inu_inup_params_t const &p); + + /// Two-particle Green's function, bosonic Matsubara frequency + Legendre coefficients + TRIQS_WRAP_ARG_AS_DICT + block2_gf> G2_iw_l_lp(g2_iw_l_lp_params_t const &p); + }; +} diff --git a/cmake/sitecustomize.py b/cmake/sitecustomize.py new file mode 100644 index 0000000..0f31ba9 --- /dev/null +++ b/cmake/sitecustomize.py @@ -0,0 +1,8 @@ +def application_pytriqs_import(name,*args,**kwargs): + if name.startswith('@package_name@'): + name = name[len('@package_name@')+1:] + return builtin_import(name,*args,**kwargs) + +import __builtin__ +__builtin__.__import__, builtin_import = application_pytriqs_import, __builtin__.__import__ + diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 0000000..6b7f2eb --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1,6 @@ +*.aux +*.bbl +*.blg +*.pdf +*.out +*.synctex.gz diff --git a/doc/g2_conv.tex b/doc/g2_conv.tex new file mode 100644 index 0000000..de8637a --- /dev/null +++ b/doc/g2_conv.tex @@ -0,0 +1,134 @@ +\documentclass[a4paper,12pt]{article} +\usepackage[utf8]{inputenc} +\usepackage[margin=0.7in]{geometry} +\usepackage{amsmath,amssymb} +\usepackage{caption} +\usepackage{verbatim} +\usepackage{hyperref} +\DeclareMathAlphabet{\mathpzc}{OT1}{pzc}{m}{it} + +\newcommand{\aver}[1]{\ensuremath{\langle#1\rangle}} +\renewcommand{\t}{\ensuremath{\tau}} +\newcommand{\w}{\ensuremath{\omega}} +\newcommand{\W}{\ensuremath{\Omega}} +\newcommand{\n}{\ensuremath{\nu}} +\newcommand{\TT}{\ensuremath{\mathbb{T}_\t}} + +\newcommand{\pom}{\ensuremath{\mathtt{Pomerol}}} + +\begin{document} +\title{Relations between conventions for the two-particle Green's functions + used in \texttt{Pomerol} and \texttt{TRIQS/CTHYB}} +\author{Igor Krivenko} +\maketitle + +\texttt{Pomerol} definition of the two-particle Green's function: +\begin{equation}\label{g2_pomerol} + G^{(2),\pom}_{\alpha\beta\gamma\delta}(\w_1,\w_2,\w_3) = + \int_0^\beta d\t_1d\t_1d\t_3 + e^{i\w_1\t_1 + i\w_2\t_2 - i\w_3\t_3} + \aver{\TT + c_\alpha(\t_1)c_\beta(\t_2)c^\dag_\gamma(\t_3)c^\dag_\delta(0)}. +\end{equation} + +\texttt{TRIQS/CTHYB} definitions: +\begin{itemize} + \item \textit{All fermionic case}, + \begin{equation}\label{g2_allfermionic} + G^{(2),3\nu}_{\alpha\beta\gamma\delta}(\nu_1,\nu_2,\nu_3) = + \int_0^\beta d\t_1d\t_1d\t_3 + e^{-i\nu_1\t_1 + i\nu_2\t_2 - i\nu_3\t_3} + \aver{\TT + c^\dagger_\alpha(\t_1)c_\beta(\t_2)c^\dagger_\gamma(\t_3)c_\delta(0)}. + \end{equation} + \item \textit{Particle-hole channel}, + \begin{equation}\label{g2_ph} + G^{(2),ph}_{\alpha\beta\gamma\delta}(\w;\n,\n') = + \frac{1}{\beta}\int_0^\beta d\t_1d\t_2d\t_3d\t_4\ + e^{-i\n\t_1} e^{i(\n+\w)\tau_2} e^{-i(\n'+\w)\t_3} e^{i\n'\t_4} + \aver{\TT + c^\dag_\alpha(\t_1) c_\beta(\t_2) c^\dag_\gamma(\t_3) + c_\delta(\t_4)}. + \end{equation} + + \item \textit{Particle-particle channel}, + \begin{equation}\label{g2_pp} + G^{(2),pp}_{\alpha\beta\gamma\delta}(\w;\n,\n') = + \frac{1}{\beta}\int_0^\beta d\t_1d\t_2d\t_3d\t_4\ + e^{-i\n\t_1} e^{i(\w-\n')\t_2} e^{-i(\w-\n)\t_3} e^{i\n'\t_4} + \aver{\TT + c^\dag_\alpha(\t_1) c_\beta(\t_2) c^\dag_\gamma(\t_3) + c_\delta(\t_4)}. + \end{equation} +\end{itemize} + +Relation between ph- and pp-channels: +\begin{equation} + G^{(2),pp}_{\alpha\beta\gamma\delta}(\w;\n,\n') = + G^{(2),ph}_{\alpha\beta\gamma\delta}(\w-\n-\n';\n,\n'). +\end{equation} + +General \texttt{Pomerol}-\texttt{TRIQS/CTHYB} relations disregarding block +structure. +\begin{align} + G^{(2),3\nu}_{\alpha\beta\gamma\delta}(\nu_1,\nu_2,\nu_3) &= + -G^{(2),\pom}_{\beta\delta\alpha\gamma}(\nu_2,\nu_1+\nu_3-\nu_2,\nu_1),\\ + G^{(2),ph}_{\alpha\beta\gamma\delta}(\w;\n,\n') &= + -G^{(2),\pom}_{\beta\delta\alpha\gamma}(\w+\n,\n',\n),\\ + G^{(2),pp}_{\alpha\beta\gamma\delta}(\w;\n,\n') &= + -G^{(2),\pom}_{\beta\delta\alpha\gamma}(\w-\n',\n',\n). +\end{align} + +Relations between $AABB$ and $ABBA$ block structures of $G^{(2)}$ in +\texttt{TRIQS/CTHYB}. +\begin{align} +G^{(2),ph}_{(A,a)(B,d)(B,c)(A,b)}(\w;\n,\n') &= - +G^{(2),ph}_{(A,a)(A,b)(B,c)(B,d)}(\n'-\n;\n,\n+\w),\\ +G^{(2),pp}_{(A,a)(B,d)(B,c)(A,b)}(\w;\n,\n') &= - +G^{(2),pp}_{(A,a)(A,b)(B,c)(B,d)}(\w;\n,\w-\n'). +\end{align} + +Relations for $AABB$ block structure of $G^{(2)}$ in \texttt{TRIQS/CTHYB}. +\begin{align} + G^{(2),ph}_{(A,a)(A,b)(B,c)(B,d)}(\w;\n,\n') &= + -G^{(2),\pom}_{(A,b)(B,d)(A,a)(B,c)}(\w+\n,\n',\n),\\ + G^{(2),pp}_{(A,a)(A,b)(B,c)(B,d)}(\w;\n,\n') &= + -G^{(2),\pom}_{(A,b)(B,d)(A,a)(B,c)}(\w-\n',\n',\n). +\end{align} + +Relations for $ABBA$ block structure of $G^{(2)}$ in \texttt{TRIQS/CTHYB}. +\begin{align} + G^{(2),ph}_{(A,a)(B,d)(B,c)(A,b)}(\w;\n,\n') &= + G^{(2),\pom}_{(A,b)(B,d)(A,a)(B,c)}(\n',\w+\n,\n),\\ + G^{(2),pp}_{(A,a)(B,d)(B,c)(A,b)}(\w;\n,\n') &= + G^{(2),\pom}_{(A,b)(B,d)(A,a)(B,c)}(\n',\w-\n',\n). +\end{align} + +Mixed Matsubara/Legendre representation of $G^{(2)}$ as a transformation of +$G^{(2)}_{\alpha\beta\gamma\delta}(\w;\nu,\nu')$ (both channels) +\cite{LewinThesis}. +\begin{equation}\label{legendre_transform} + G^{(2)}_{\alpha\beta\gamma\delta}(\w;\ell,\ell') \equiv + \sum_{n,n'\in\mathbb{Z}} + \bar T_{2n+m+1,\ell} + G^{(2)}_{\alpha\beta\gamma\delta}(\w;\nu_n,\nu_{n'}) + \bar T^*_{2n'+m+1,\ell'}, +\end{equation} +\begin{equation} + \bar T_{o,\ell} \equiv \frac{\sqrt{2\ell+1}}{\beta} + \int_0^\beta d\t e^{io\pi\frac{\t}{\beta}} P_\ell[x(\t)] = + \sqrt{2\ell+1}i^o i^\ell j_\ell\left(\frac{o\pi}{2}\right). +\end{equation} + +\bibliographystyle{plain} + +\begin{thebibliography}{9} + \bibitem{LewinThesis} + Lewin Volker Boehnke, + \emph{Susceptibilities in materials with multiple strongly correlated + orbitals} + PhD thesis, Universit\"at Hamburg, 2015, + \url{http://ediss.sub.uni-hamburg.de/volltexte/2015/7325/pdf/Dissertation.pdf} +\end{thebibliography} + +\end{document} diff --git a/example/2band.atom.py b/example/2band.atom.py new file mode 100644 index 0000000..3840ddc --- /dev/null +++ b/example/2band.atom.py @@ -0,0 +1,159 @@ +from pytriqs.archive import HDFArchive +from pytriqs.gf import * +from pytriqs.operators import Operator, c, c_dag, n +from pytriqs.operators.util.hamiltonians import h_int_kanamori +from pytriqs.utility import mpi +from pytriqs.applications.impurity_solvers.pomerol2triqs import PomerolED +import numpy as np +from itertools import product + +# 2-orbital Hubbard-Kanamori atom + +#################### +# Input parameters # +#################### + +beta = 10.0 # Inverse temperature +num_orb = 2 # Number of orbitals +U = 2.0 # Coulomb repulsion +mu = 1.5 # Chemical potential +J = 0.2 # Hund coupling + +spin_names = ("up", "dn") +orb_names = range(num_orb) + +# Number of Matsubara frequencies for GF calculation +n_iw = 1024 +# Number of imaginary time slices for GF calculation +n_tau = 10001 + +# Energy window for real frequency GF calculation +energy_window = (-5, 5) +# Number of frequency points for real frequency GF calculation +n_w = 1000 + +# Number of bosonic Matsubara frequencies for G^2 calculations +g2_n_iw = 5 +# Number of fermionic Matsubara frequencies for G^2 calculations +g2_n_inu = 10 +# Number of Legendre coefficients for G^2 calculations +g2_n_l = 10 +# Block index combinations for G^2 calculations +g2_blocks = set([("up", "up"), ("up", "dn"), ("dn", "up")]) + +gf_struct = {"up" : orb_names, "dn" : orb_names} +print "Block structure of single-particle Green's functions:", gf_struct + +# Conversion from TRIQS to Pomerol notation for operator indices +# TRIQS: block_name, inner_index +# Pomerol: site_label, orbital_index, spin_name +index_converter = {(sn, o) : ("loc", o, "down" if sn == "dn" else "up") + for sn, o in product(spin_names, orb_names)} + +# Make PomerolED solver object +ed = PomerolED(index_converter, verbose = True) + +# Number of particles on the impurity +N = sum(n(sn, o) for sn, o in product(spin_names, orb_names)) + +# Hamiltonian +H = h_int_kanamori(spin_names, orb_names, + np.array([[0, U-3*J], [U-3*J, 0]]), + np.array([[U, U-2*J], [U-2*J, U]]), + J, True) +H -= mu*N + +# Diagonalize H +ed.diagonalize(H) + +# Compute G(i\omega) +G_iw = ed.G_iw(gf_struct, beta, n_iw) + +# Compute G(\tau) +G_tau = ed.G_tau(gf_struct, beta, n_tau) + +# Compute G(\omega) +G_w = ed.G_w(gf_struct, beta, energy_window, n_w, 0.01) + +########### +# G^{(2)} # +########### + +common_g2_params = {'gf_struct' : gf_struct, + 'beta' : beta, + 'blocks' : g2_blocks, + 'n_iw' : g2_n_iw} + +############################### +# G^{(2)}(i\omega;i\nu,i\nu') # +############################### + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_ph_AABB = ed.G2_iw_inu_inup(channel = "PH", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_ph_ABBA = ed.G2_iw_inu_inup(channel = "PH", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_pp_AABB = ed.G2_iw_inu_inup(channel = "PP", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_pp_ABBA = ed.G2_iw_inu_inup(channel = "PP", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +######################### +# G^{(2)}(i\omega;l,l') # +######################### + +# Compute G^{(2),ph}(i\omega;l,l'), AABB block order +G2_iw_l_lp_ph_AABB = ed.G2_iw_l_lp(channel = "PH", + block_order = "AABB", + n_l = g2_n_l, + **common_g2_params) + +# Compute G^{(2),ph}(i\omega;l,l'), ABBA block order +G2_iw_l_lp_ph_ABBA = ed.G2_iw_l_lp(channel = "PH", + block_order = "ABBA", + n_l = g2_n_l, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;l,l'), AABB block order +G2_iw_l_lp_pp_AABB = ed.G2_iw_l_lp(channel = "PP", + block_order = "AABB", + n_l = g2_n_l, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;l,l'), ABBA block order +G2_iw_l_lp_pp_ABBA = ed.G2_iw_l_lp(channel = "PP", + block_order = "ABBA", + n_l = g2_n_l, + **common_g2_params) + +################ +# Save results # +################ + +if mpi.is_master_node(): + with HDFArchive('2band.atom.h5', 'w') as ar: + ar['G_iw'] = G_iw + ar['G_tau'] = G_tau + ar['G_w'] = G_w + ar['G2_iw_inu_inup_ph_AABB'] = G2_iw_inu_inup_ph_AABB + ar['G2_iw_inu_inup_ph_ABBA'] = G2_iw_inu_inup_ph_ABBA + ar['G2_iw_inu_inup_pp_AABB'] = G2_iw_inu_inup_pp_AABB + ar['G2_iw_inu_inup_pp_ABBA'] = G2_iw_inu_inup_pp_ABBA + ar['G2_iw_l_lp_ph_AABB'] = G2_iw_l_lp_ph_AABB + ar['G2_iw_l_lp_ph_ABBA'] = G2_iw_l_lp_ph_ABBA + ar['G2_iw_l_lp_pp_AABB'] = G2_iw_l_lp_pp_AABB + ar['G2_iw_l_lp_pp_ABBA'] = G2_iw_l_lp_pp_ABBA diff --git a/example/2band.py b/example/2band.py new file mode 100644 index 0000000..56d1f08 --- /dev/null +++ b/example/2band.py @@ -0,0 +1,182 @@ +from pytriqs.archive import HDFArchive +from pytriqs.gf import * +from pytriqs.operators import Operator, c, c_dag, n +from pytriqs.operators.util.hamiltonians import h_int_kanamori +from pytriqs.utility import mpi +from pytriqs.applications.impurity_solvers.pomerol2triqs import PomerolED +import numpy as np +from itertools import product + +# 2-orbital impurity Anderson model (bath: 1 site * 2 orbitals) + +#################### +# Input parameters # +#################### + +beta = 10.0 # Inverse temperature +num_orb = 2 # Number of orbitals +U = 2.0 # Coulomb repulsion +mu = 1.5 # Chemical potential +J = 0.2 # Hund coupling + +# Levels of the bath sites +epsilon = np.array([-0.2, 0.2]) +# Hopping matrix +V = 0.7*np.eye(num_orb) + 0.1*(np.ones((num_orb, num_orb)) - np.eye(num_orb)) + +spin_names = ("up", "dn") +orb_names = range(num_orb) + +# Number of Matsubara frequencies for GF calculation +n_iw = 1024 + +# Number of imaginary time slices for GF calculation +n_tau = 10001 + +# Energy window for real frequency GF calculation +energy_window = (-5, 5) +# Number of frequency points for real frequency GF calculation +n_w = 1000 + +# Number of bosonic Matsubara frequencies for G^2 calculations +g2_n_iw = 5 +# Number of fermionic Matsubara frequencies for G^2 calculations +g2_n_inu = 10 +# Number of Legendre coefficients for G^2 calculations +g2_n_l = 10 +# Block index combinations for G^2 calculations +g2_blocks = set([("up", "up"), ("up", "dn"), ("dn", "up")]) + +gf_struct = {"up" : orb_names, "dn" : orb_names} +print "Block structure of single-particle Green's functions:", gf_struct + +# Conversion from TRIQS to Pomerol notation for operator indices +# TRIQS: block_name, inner_index +# Pomerol: site_label, orbital_index, spin_name +index_converter = {} + +# Local degrees of freedom +index_converter.update({(sn, o) : ("loc", o, "down" if sn == "dn" else "up") + for sn, o in product(spin_names, orb_names)}) +# Bath degrees of freedom +index_converter.update({("B_" + sn, o) : ("bath", o, "down" if sn == "dn" else "up") + for sn, o in product(spin_names, orb_names)}) + +# Make PomerolED solver object +ed = PomerolED(index_converter, verbose = True) + +# Number of particles on the impurity +N = sum(n(sn, o) for sn, o in product(spin_names, orb_names)) + +# Local Hamiltonian +H_loc = h_int_kanamori(spin_names, orb_names, + np.array([[0, U-3*J], [U-3*J, 0]]), + np.array([[U, U-2*J], [U-2*J, U]]), + J, True) +H_loc -= mu*N + +# Bath Hamiltonian +H_bath = sum(epsilon[o] * n("B_" + sn, o) for sn, o in product(spin_names, orb_names)) + +# Hybridization Hamiltonian +H_hyb = sum( V[o1,o2] * c_dag("B_" + sn, o1) * c(sn, o2) + + np.conj(V[o2,o1]) * c_dag(sn, o1) * c("B_" + sn, o2) + for sn, o1, o2 in product(spin_names, orb_names, orb_names)) + +# Complete Hamiltonian +H = H_loc + H_hyb + H_bath + +# Diagonalize H +ed.diagonalize(H) + +# Compute G(i\omega) +G_iw = ed.G_iw(gf_struct, beta, n_iw) + +# Compute G(\tau) +G_tau = ed.G_tau(gf_struct, beta, n_tau) + +# Compute G(\omega) +G_w = ed.G_w(gf_struct, beta, energy_window, n_w, 0.01) + +########### +# G^{(2)} # +########### + +common_g2_params = {'gf_struct' : gf_struct, + 'beta' : beta, + 'blocks' : g2_blocks, + 'n_iw' : g2_n_iw} + +############################### +# G^{(2)}(i\omega;i\nu,i\nu') # +############################### + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_ph_AABB = ed.G2_iw_inu_inup(channel = "PH", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_ph_ABBA = ed.G2_iw_inu_inup(channel = "PH", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_pp_AABB = ed.G2_iw_inu_inup(channel = "PP", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_pp_ABBA = ed.G2_iw_inu_inup(channel = "PP", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +######################### +# G^{(2)}(i\omega;l,l') # +######################### + +# Compute G^{(2),ph}(i\omega;l,l'), AABB block order +G2_iw_l_lp_ph_AABB = ed.G2_iw_l_lp(channel = "PH", + block_order = "AABB", + n_l = g2_n_l, + **common_g2_params) + +# Compute G^{(2),ph}(i\omega;l,l'), ABBA block order +G2_iw_l_lp_ph_ABBA = ed.G2_iw_l_lp(channel = "PH", + block_order = "ABBA", + n_l = g2_n_l, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;l,l'), AABB block order +G2_iw_l_lp_pp_AABB = ed.G2_iw_l_lp(channel = "PP", + block_order = "AABB", + n_l = g2_n_l, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;l,l'), ABBA block order +G2_iw_l_lp_pp_ABBA = ed.G2_iw_l_lp(channel = "PP", + block_order = "ABBA", + n_l = g2_n_l, + **common_g2_params) + +################ +# Save results # +################ + +if mpi.is_master_node(): + with HDFArchive('2band.h5', 'w') as ar: + ar['G_iw'] = G_iw + ar['G_tau'] = G_tau + ar['G_w'] = G_w + ar['G2_iw_inu_inup_ph_AABB'] = G2_iw_inu_inup_ph_AABB + ar['G2_iw_inu_inup_ph_ABBA'] = G2_iw_inu_inup_ph_ABBA + ar['G2_iw_inu_inup_pp_AABB'] = G2_iw_inu_inup_pp_AABB + ar['G2_iw_inu_inup_pp_ABBA'] = G2_iw_inu_inup_pp_ABBA + ar['G2_iw_l_lp_ph_AABB'] = G2_iw_l_lp_ph_AABB + ar['G2_iw_l_lp_ph_ABBA'] = G2_iw_l_lp_ph_ABBA + ar['G2_iw_l_lp_pp_AABB'] = G2_iw_l_lp_pp_AABB + ar['G2_iw_l_lp_pp_ABBA'] = G2_iw_l_lp_pp_ABBA diff --git a/example/anderson.py b/example/anderson.py new file mode 100644 index 0000000..31e3da8 --- /dev/null +++ b/example/anderson.py @@ -0,0 +1,140 @@ +from pytriqs.archive import HDFArchive +from pytriqs.gf import * +from pytriqs.operators import Operator, c, c_dag, n +from pytriqs.utility import mpi +from pytriqs.applications.impurity_solvers.pomerol2triqs import PomerolED +import numpy as np +from itertools import product + +# Single orbital Anderson model + +#################### +# Input parameters # +#################### + +beta = 10.0 # Inverse temperature +U = 2.0 # Coulomb repulsion +mu = 1.0 # Chemical potential + +# Levels of the bath sites +epsilon = [-1.0, 0, 1.0] +# Hopping amplitudes +V = [0.5, 0.5, 0.5] + +spin_names = ("up", "dn") + +# Number of Matsubara frequencies for GF calculation +n_iw = 1024 + +# Number of imaginary time slices for GF calculation +n_tau = 10001 + +# Energy window for real frequency GF calculation +energy_window = (-5, 5) +# Number of frequency points for real frequency GF calculation +n_w = 1000 + +# Number of bosonic Matsubara frequencies for G^2 calculations +g2_n_iw = 5 +# Number of fermionic Matsubara frequencies for G^2 calculations +g2_n_inu = 10 +# Number of Legendre coefficients for G^2 calculations +g2_n_l = 10 +# Block index combinations for G^2 calculations +g2_blocks = set([("up", "up"), ("up", "dn"), ("dn", "up")]) + +gf_struct = {'up' : [0], 'dn' : [0]} + +# Conversion from TRIQS to Pomerol notation for operator indices +# TRIQS: block_name, inner_index +# Pomerol: site_label, orbital_index, spin_name +index_converter = {} + +# Local degrees of freedom +index_converter.update({(sn, 0) : ("loc", 0, "down" if sn == "dn" else "up") for sn in spin_names}) +# Bath degrees of freedom +index_converter.update({("B%i_%s" % (k, sn), 0) : ("bath" + str(k), 0, "down" if sn == "dn" else "up") + for k, sn in product(range(len(epsilon)), spin_names)}) + +# Make PomerolED solver object +ed = PomerolED(index_converter, verbose = True) + +# Number of particles on the impurity +H_loc = -mu*(n('up', 0) + n('dn', 0)) + U * n('up', 0) * n('dn', 0) + +# Bath Hamiltonian +H_bath = sum(eps*n("B%i_%s" % (k, sn), 0) + for sn, (k, eps) in product(spin_names, enumerate(epsilon))) + +# Hybridization Hamiltonian +H_hyb = Operator() +for k, v in enumerate(V): + H_hyb += sum( v * c_dag("B%i_%s" % (k, sn), 0) * c(sn, 0) + + np.conj(v) * c_dag(sn, 0) * c("B%i_%s" % (k, sn), 0) + for sn in spin_names) + +# Complete Hamiltonian +H = H_loc + H_hyb + H_bath + +# Diagonalize H +ed.diagonalize(H) + +# Compute G(i\omega) +G_iw = ed.G_iw(gf_struct, beta, n_iw) + +# Compute G(\tau) +G_tau = ed.G_tau(gf_struct, beta, n_tau) + +# Compute G(\omega) +G_w = ed.G_w(gf_struct, beta, energy_window, n_w, 0.01) + +########### +# G^{(2)} # +########### + +common_g2_params = {'gf_struct' : gf_struct, + 'beta' : beta, + 'blocks' : g2_blocks, + 'n_iw' : g2_n_iw} + +############################### +# G^{(2)}(i\omega;i\nu,i\nu') # +############################### + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_ph_AABB = ed.G2_iw_inu_inup(channel = "PH", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_ph_ABBA = ed.G2_iw_inu_inup(channel = "PH", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_pp_AABB = ed.G2_iw_inu_inup(channel = "PP", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_pp_ABBA = ed.G2_iw_inu_inup(channel = "PP", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +################ +# Save results # +################ + +if mpi.is_master_node(): + with HDFArchive('anderson.h5', 'w') as ar: + ar['G_iw'] = G_iw + ar['G_tau'] = G_tau + ar['G_w'] = G_w + ar['G2_iw_inu_inup_ph_AABB'] = G2_iw_inu_inup_ph_AABB + ar['G2_iw_inu_inup_ph_ABBA'] = G2_iw_inu_inup_ph_ABBA + ar['G2_iw_inu_inup_pp_AABB'] = G2_iw_inu_inup_pp_AABB + ar['G2_iw_inu_inup_pp_ABBA'] = G2_iw_inu_inup_pp_ABBA diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt new file mode 100644 index 0000000..802f6a1 --- /dev/null +++ b/python/CMakeLists.txt @@ -0,0 +1,16 @@ +# where will the python end up in triqs? +set(python_destination pytriqs/applications/impurity_solvers/pomerol2triqs) + +# make the build_xxx, install python files... +triqs_prepare_local_pytriqs(${python_destination}) + +# sitecustomize.py for build +set(package_name "pytriqs.applications.impurity_solvers") +configure_file(${CMAKE_SOURCE_DIR}/cmake/sitecustomize.py ${CMAKE_CURRENT_BINARY_DIR}/sitecustomize.py @ONLY) + +# Build the python module for the solver +triqs_python_extension(pomerol2triqs ${python_destination}) +target_link_libraries(pomerol2triqs pomerol2triqs_c) +include_directories(${TRIQS_INCLUDE_ALL} ${CMAKE_CURRENT_SOURCE_DIR} ${pomerol_INCLUDE_DIRS}) +triqs_set_rpath_for_target(pomerol2triqs) +install(TARGETS pomerol2triqs DESTINATION ${TRIQS_PYTHON_LIB_DEST_ROOT}/${python_destination}) diff --git a/python/__init__.py b/python/__init__.py new file mode 100644 index 0000000..f4bc587 --- /dev/null +++ b/python/__init__.py @@ -0,0 +1,7 @@ +r""" +DOC +""" + +from pomerol2triqs import PomerolED + +__all__ = ['PomerolED'] diff --git a/python/pomerol2triqs_converters.hxx b/python/pomerol2triqs_converters.hxx new file mode 100644 index 0000000..17edfce --- /dev/null +++ b/python/pomerol2triqs_converters.hxx @@ -0,0 +1,219 @@ +// DO NOT EDIT +// Generated automatically using libclang using the command : +// c++2py.py ../c++/pomerol_ed.hpp -I../../../pomerol/installed/include -I/usr/include/eigen3 -I../c++ --only_converters -p -mpytriqs.applications.impurity_solvers.pomerol2triqs -o pomerol2triqs --moduledoc "TRIQS wrapper around Pomerol ED library" + + +// --- C++ Python converter for g2_iw_l_lp_params_t +#include +#include +#include + +namespace triqs { namespace py_tools { + +template <> struct py_converter { + static PyObject *c2py(g2_iw_l_lp_params_t const & x) { + PyObject * d = PyDict_New(); + PyDict_SetItemString( d, "gf_struct" , convert_to_python(x.gf_struct)); + PyDict_SetItemString( d, "beta" , convert_to_python(x.beta)); + PyDict_SetItemString( d, "channel" , convert_to_python(x.channel)); + PyDict_SetItemString( d, "block_order", convert_to_python(x.block_order)); + PyDict_SetItemString( d, "blocks" , convert_to_python(x.blocks)); + PyDict_SetItemString( d, "n_iw" , convert_to_python(x.n_iw)); + PyDict_SetItemString( d, "n_l" , convert_to_python(x.n_l)); + PyDict_SetItemString( d, "n_inu_sum" , convert_to_python(x.n_inu_sum)); + PyDict_SetItemString( d, "inu_sum_tol", convert_to_python(x.inu_sum_tol)); + return d; + } + + template static void _get_optional(PyObject *dic, const char *name, T &r, U const &init_default) { + if (PyDict_Contains(dic, pyref::string(name))) + r = convert_from_python(PyDict_GetItemString(dic, name)); + else + r = init_default; + } + + template static void _get_optional(PyObject *dic, const char *name, T &r) { + if (PyDict_Contains(dic, pyref::string(name))) + r = convert_from_python(PyDict_GetItemString(dic, name)); + else + r = T{}; + } + + static g2_iw_l_lp_params_t py2c(PyObject *dic) { + g2_iw_l_lp_params_t res; + res.gf_struct = convert_from_python(PyDict_GetItemString(dic, "gf_struct")); + res.beta = convert_from_python(PyDict_GetItemString(dic, "beta")); + _get_optional(dic, "channel" , res.channel ,PH); + _get_optional(dic, "block_order", res.block_order ,AABB); + _get_optional(dic, "blocks" , res.blocks ,g2_blocks_t{}); + _get_optional(dic, "n_iw" , res.n_iw ,30); + _get_optional(dic, "n_l" , res.n_l ,20); + _get_optional(dic, "n_inu_sum" , res.n_inu_sum ,500); + _get_optional(dic, "inu_sum_tol", res.inu_sum_tol ,1e-6); + return res; + } + + template + static void _check(PyObject *dic, std::stringstream &fs, int &err, const char *name, const char *tname) { + if (!convertible_from_python(PyDict_GetItemString(dic, name), false)) + fs << "\n" << ++err << " The parameter " << name << " does not have the right type : expecting " << tname + << " in C++, but got '" << PyDict_GetItemString(dic, name)->ob_type->tp_name << "' in Python."; + } + + template + static void _check_mandatory(PyObject *dic, std::stringstream &fs, int &err, const char *name, const char *tname) { + if (!PyDict_Contains(dic, pyref::string(name))) + fs << "\n" << ++err << " Mandatory parameter " << name << " is missing."; + else _check(dic,fs,err,name,tname); + } + + template + static void _check_optional(PyObject *dic, std::stringstream &fs, int &err, const char *name, const char *tname) { + if (PyDict_Contains(dic, pyref::string(name))) _check(dic, fs, err, name, tname); + } + + static bool is_convertible(PyObject *dic, bool raise_exception) { + if (dic == nullptr or !PyDict_Check(dic)) { + if (raise_exception) { PyErr_SetString(PyExc_TypeError, "The function must be called with named arguments");} + return false; + } + std::stringstream fs, fs2; int err=0; + +#ifndef TRIQS_ALLOW_UNUSED_PARAMETERS + std::vector ks, all_keys = {"gf_struct","beta","channel","block_order","blocks","n_iw","n_l","n_inu_sum","inu_sum_tol"}; + pyref keys = PyDict_Keys(dic); + if (!convertible_from_python>(keys, true)) { + fs << "\nThe dict keys are not strings"; + goto _error; + } + ks = convert_from_python>(keys); + for (auto & k : ks) + if (std::find(all_keys.begin(), all_keys.end(), k) == all_keys.end()) + fs << "\n"<< ++err << " The parameter '" << k << "' is not recognized."; +#endif + + _check_mandatory(dic, fs, err, "gf_struct" , "gf_struct_t"); + _check_mandatory(dic, fs, err, "beta" , "double"); + _check_optional (dic, fs, err, "channel" , "pomerol2triqs::channel_t"); + _check_optional (dic, fs, err, "block_order", "pomerol2triqs::block_order_t"); + _check_optional (dic, fs, err, "blocks" , "g2_blocks_t"); + _check_optional (dic, fs, err, "n_iw" , "int"); + _check_optional (dic, fs, err, "n_l" , "int"); + _check_optional (dic, fs, err, "n_inu_sum" , "int"); + _check_optional (dic, fs, err, "inu_sum_tol", "double"); + if (err) goto _error; + return true; + + _error: + fs2 << "\n---- There " << (err > 1 ? "are " : "is ") << err<< " error"<<(err >1 ?"s" : "")<< " in Python -> C++ transcription for the class g2_iw_l_lp_params_t\n" < +#include +#include + +namespace triqs { namespace py_tools { + +template <> struct py_converter { + static PyObject *c2py(g2_iw_inu_inup_params_t const & x) { + PyObject * d = PyDict_New(); + PyDict_SetItemString( d, "gf_struct" , convert_to_python(x.gf_struct)); + PyDict_SetItemString( d, "beta" , convert_to_python(x.beta)); + PyDict_SetItemString( d, "channel" , convert_to_python(x.channel)); + PyDict_SetItemString( d, "block_order", convert_to_python(x.block_order)); + PyDict_SetItemString( d, "blocks" , convert_to_python(x.blocks)); + PyDict_SetItemString( d, "n_iw" , convert_to_python(x.n_iw)); + PyDict_SetItemString( d, "n_inu" , convert_to_python(x.n_inu)); + return d; + } + + template static void _get_optional(PyObject *dic, const char *name, T &r, U const &init_default) { + if (PyDict_Contains(dic, pyref::string(name))) + r = convert_from_python(PyDict_GetItemString(dic, name)); + else + r = init_default; + } + + template static void _get_optional(PyObject *dic, const char *name, T &r) { + if (PyDict_Contains(dic, pyref::string(name))) + r = convert_from_python(PyDict_GetItemString(dic, name)); + else + r = T{}; + } + + static g2_iw_inu_inup_params_t py2c(PyObject *dic) { + g2_iw_inu_inup_params_t res; + res.gf_struct = convert_from_python(PyDict_GetItemString(dic, "gf_struct")); + res.beta = convert_from_python(PyDict_GetItemString(dic, "beta")); + _get_optional(dic, "channel" , res.channel ,PH); + _get_optional(dic, "block_order", res.block_order ,AABB); + _get_optional(dic, "blocks" , res.blocks ,g2_blocks_t{}); + _get_optional(dic, "n_iw" , res.n_iw ,30); + _get_optional(dic, "n_inu" , res.n_inu ,30); + return res; + } + + template + static void _check(PyObject *dic, std::stringstream &fs, int &err, const char *name, const char *tname) { + if (!convertible_from_python(PyDict_GetItemString(dic, name), false)) + fs << "\n" << ++err << " The parameter " << name << " does not have the right type : expecting " << tname + << " in C++, but got '" << PyDict_GetItemString(dic, name)->ob_type->tp_name << "' in Python."; + } + + template + static void _check_mandatory(PyObject *dic, std::stringstream &fs, int &err, const char *name, const char *tname) { + if (!PyDict_Contains(dic, pyref::string(name))) + fs << "\n" << ++err << " Mandatory parameter " << name << " is missing."; + else _check(dic,fs,err,name,tname); + } + + template + static void _check_optional(PyObject *dic, std::stringstream &fs, int &err, const char *name, const char *tname) { + if (PyDict_Contains(dic, pyref::string(name))) _check(dic, fs, err, name, tname); + } + + static bool is_convertible(PyObject *dic, bool raise_exception) { + if (dic == nullptr or !PyDict_Check(dic)) { + if (raise_exception) { PyErr_SetString(PyExc_TypeError, "The function must be called with named arguments");} + return false; + } + std::stringstream fs, fs2; int err=0; + +#ifndef TRIQS_ALLOW_UNUSED_PARAMETERS + std::vector ks, all_keys = {"gf_struct","beta","channel","block_order","blocks","n_iw","n_inu"}; + pyref keys = PyDict_Keys(dic); + if (!convertible_from_python>(keys, true)) { + fs << "\nThe dict keys are not strings"; + goto _error; + } + ks = convert_from_python>(keys); + for (auto & k : ks) + if (std::find(all_keys.begin(), all_keys.end(), k) == all_keys.end()) + fs << "\n"<< ++err << " The parameter '" << k << "' is not recognized."; +#endif + + _check_mandatory(dic, fs, err, "gf_struct" , "gf_struct_t"); + _check_mandatory(dic, fs, err, "beta" , "double"); + _check_optional (dic, fs, err, "channel" , "pomerol2triqs::channel_t"); + _check_optional (dic, fs, err, "block_order", "pomerol2triqs::block_order_t"); + _check_optional (dic, fs, err, "blocks" , "g2_blocks_t"); + _check_optional (dic, fs, err, "n_iw" , "int"); + _check_optional (dic, fs, err, "n_inu" , "int"); + if (err) goto _error; + return true; + + _error: + fs2 << "\n---- There " << (err > 1 ? "are " : "is ") << err<< " error"<<(err >1 ?"s" : "")<< " in Python -> C++ transcription for the class g2_iw_inu_inup_params_t\n" < +#include +#include +#include +#include +#include +#include +#include +#include +#include "./pomerol2triqs_converters.hxx" +""") +module.add_using("namespace pomerol2triqs") +module.add_using("namespace Pomerol") + +module.add_enum("spin", ["down", "up"], "Pomerol", "Spin projection") +module.add_enum("block_order_t", ["AABB", "ABBA"], "pomerol2triqs", "G^{(2)} block order") +module.add_enum("channel_t", ["PP", "PH", "AllFermionic"], "pomerol2triqs", "G^{(2)} channel") + +# The class pomerol_ed +c = class_( + py_type = "PomerolED", # name of the python class + c_type = "pomerol_ed", # name of the C++ class + doc = r"Main solver class of pomerol2triqs", # doc of the C++ class +) + +c.add_constructor("""(index_converter_t index_converter, bool verbose = false)""", + doc = r"""Create a new solver object""") + +c.add_method("""void diagonalize(many_body_op_t hamiltonian, bool ignore_symmetries = false)""", + doc = r"""Diagonalize Hamiltonian""") + +c.add_method("""void diagonalize(many_body_op_t hamiltonian, std::vector integrals_of_motion)""", + doc = r"""Diagonalize Hamiltonian""") + +c.add_method("""block_gf G_iw (gf_struct_t gf_struct, double beta, int n_iw)""", + doc = r"""Green's function in Matsubara frequencies""") + +c.add_method("""block_gf G_tau (gf_struct_t gf_struct, double beta, int n_tau)""", + doc = r"""Green's function in imaginary time""") + +c.add_method("""block_gf G_w(gf_struct_t gf_struct, double beta, std::pair energy_window, int n_w, double im_shift = 0)""", + doc = r"""Retarded Green's function on real energy axis""") + +c.add_method("""block2_gf, tensor_valued<4>> G2_iw_inu_inup(**pomerol2triqs::g2_iw_inu_inup_params_t)""", + doc = r"""Two-particle Green's function, Matsubara frequencies""") + +c.add_method("""block2_gf, tensor_valued<4>> G2_iw_l_lp(**pomerol2triqs::g2_iw_l_lp_params_t)""", + doc = r"""Two-particle Green's function, bosonic Matsubara frequency + Legendre coefficients""") + +module.add_class(c) + +module.generate_code() diff --git a/python/pomerol2triqs_parameters.rst b/python/pomerol2triqs_parameters.rst new file mode 100644 index 0000000..d77e38c --- /dev/null +++ b/python/pomerol2triqs_parameters.rst @@ -0,0 +1,41 @@ ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| Parameter Name | Type | Default | Documentation | ++================+==============================+====================+==================================================================+ +| gf_struct | gf_struct_t | -- | Structure of G^2 blocks. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| beta | double | -- | Inverse temperature | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| channel | channel_t | PH | Channel in which Matsubara frequency representation is defined. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| block_order | block_order_t | AABB | Order of block indices in the definition of G^2. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| blocks | g2_blocks_t | measure all blocks | List of block index pairs of G^2 to measure. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| n_iw | int | 30 | Number of bosonic Matsubara frequencies. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| n_l | int | 20 | Number of Legendre coefficients. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| n_inu_sum | int | 500 | Maximum number of positive Matsubara frequencies in summation. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| inu_sum_tol | double | 1e-6 | Tolerance for Matsubara frequency summation. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ + + + ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| Parameter Name | Type | Default | Documentation | ++================+==============================+====================+==================================================================+ +| gf_struct | gf_struct_t | -- | Structure of G^2 blocks. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| beta | double | -- | Inverse temperature | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| channel | channel_t | PH | Channel in which Matsubara frequency representation is defined. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| block_order | block_order_t | AABB | Order of block indices in the definition of G^2. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| blocks | g2_blocks_t | measure all blocks | List of block index pairs of G^2 to measure. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| n_iw | int | 30 | Number of bosonic Matsubara frequencies. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ +| n_inu | int | 30 | Number of fermionic Matsubara frequencies. | ++----------------+------------------------------+--------------------+------------------------------------------------------------------+ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..8e5f91a --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(python) diff --git a/test/python/CMakeLists.txt b/test/python/CMakeLists.txt new file mode 100644 index 0000000..de8460f --- /dev/null +++ b/test/python/CMakeLists.txt @@ -0,0 +1,13 @@ +find_package(TriqsTest) + +# Copy h5 files to binary dir +FILE(GLOB all_h5_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h5) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/${all_h5_files} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + +triqs_add_python_test(anderson_gf) +triqs_add_python_test(slater_gf) +triqs_add_python_test(wick) + +foreach(TEST_MPI_NUMPROC 1 2 4) + triqs_add_python_test(anderson_g2_matsubara) +endforeach() diff --git a/test/python/anderson_g2_matsubara.py b/test/python/anderson_g2_matsubara.py new file mode 100644 index 0000000..3a0814f --- /dev/null +++ b/test/python/anderson_g2_matsubara.py @@ -0,0 +1,114 @@ +from pytriqs.archive import HDFArchive +from pytriqs.gf import * +from pytriqs.operators import Operator, c, c_dag, n +from pytriqs.utility import mpi +from pytriqs.applications.impurity_solvers.pomerol2triqs import PomerolED +from pytriqs.utility.comparison_tests import * +import numpy as np +from itertools import product + +# Single orbital Anderson model + +#################### +# Input parameters # +#################### + +beta = 10.0 # Inverse temperature +U = 2.0 # Coulomb repulsion +mu = 1.0 # Chemical potential + +# Levels of the bath sites +epsilon = [-1.0, 1.0] +# Hopping amplitudes +V = [0.5, 0.5] + +spin_names = ("up", "dn") + +# Number of bosonic Matsubara frequencies for G^2 calculations +g2_n_iw = 5 +# Number of fermionic Matsubara frequencies for G^2 calculations +g2_n_inu = 5 +# Block index combinations for G^2 calculations +g2_blocks = set([("up", "up"), ("dn", "dn"), ("up", "dn")]) + +# GF structure +gf_struct = {'up' : [0], 'dn' : [0]} + +# Conversion from TRIQS to Pomerol notation for operator indices +index_converter = {} +index_converter.update({(sn, 0) : ("loc", 0, "down" if sn == "dn" else "up") for sn in spin_names}) +index_converter.update({("B%i_%s" % (k, sn), 0) : ("bath" + str(k), 0, "down" if sn == "dn" else "up") + for k, sn in product(range(len(epsilon)), spin_names)}) + +# Make PomerolED solver object +ed = PomerolED(index_converter, verbose = True) + +# Number of particles on the impurity +H_loc = -mu*(n('up', 0) + n('dn', 0)) + U * n('up', 0) * n('dn', 0) + +# Bath Hamiltonian +H_bath = sum(eps*n("B%i_%s" % (k, sn), 0) + for sn, (k, eps) in product(spin_names, enumerate(epsilon))) + +# Hybridization Hamiltonian +H_hyb = Operator() +for k, v in enumerate(V): + H_hyb += sum( v * c_dag("B%i_%s" % (k, sn), 0) * c(sn, 0) + + np.conj(v) * c_dag(sn, 0) * c("B%i_%s" % (k, sn), 0) + for sn in spin_names) + +# Complete Hamiltonian +H = H_loc + H_hyb + H_bath + +# Diagonalize H +ed.diagonalize(H) + +########### +# G^{(2)} # +########### + +common_g2_params = {'gf_struct' : gf_struct, + 'beta' : beta, + 'blocks' : g2_blocks, + 'n_iw' : g2_n_iw} + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_ph_AABB = ed.G2_iw_inu_inup(channel = "PH", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_ph_ABBA = ed.G2_iw_inu_inup(channel = "PH", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_pp_AABB = ed.G2_iw_inu_inup(channel = "PP", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_pp_ABBA = ed.G2_iw_inu_inup(channel = "PP", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +if mpi.is_master_node(): + with HDFArchive('anderson_g2_matsubara_np%i.out.h5' % mpi.size, 'w') as ar: + ar['H'] = H + ar['G2_iw_inu_inup_ph_AABB'] = G2_iw_inu_inup_ph_AABB + ar['G2_iw_inu_inup_ph_ABBA'] = G2_iw_inu_inup_ph_ABBA + ar['G2_iw_inu_inup_pp_AABB'] = G2_iw_inu_inup_pp_AABB + ar['G2_iw_inu_inup_pp_ABBA'] = G2_iw_inu_inup_pp_ABBA + + with HDFArchive("anderson_g2_matsubara.ref.h5", 'r') as ar: + assert (ar['H'] - H).is_zero() + for bn1, bn2 in g2_blocks: + assert_gfs_are_close(ar['G2_iw_inu_inup_ph_AABB'][bn1, bn2], G2_iw_inu_inup_ph_AABB[bn1, bn2]) + assert_gfs_are_close(ar['G2_iw_inu_inup_ph_ABBA'][bn1, bn2], G2_iw_inu_inup_ph_ABBA[bn1, bn2]) + assert_gfs_are_close(ar['G2_iw_inu_inup_pp_AABB'][bn1, bn2], G2_iw_inu_inup_pp_AABB[bn1, bn2]) + assert_gfs_are_close(ar['G2_iw_inu_inup_pp_ABBA'][bn1, bn2], G2_iw_inu_inup_pp_ABBA[bn1, bn2]) + diff --git a/test/python/anderson_g2_matsubara.ref.h5 b/test/python/anderson_g2_matsubara.ref.h5 new file mode 100644 index 0000000000000000000000000000000000000000..df2845f9098a66e7e3241e40692732045e12c1b5 GIT binary patch literal 482376 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'>K3C_Ryc5mp*K{xV8}SY7yL9vU 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 z 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 literal 0 HcmV?d00001 diff --git a/test/python/slater_gf.py b/test/python/slater_gf.py new file mode 100644 index 0000000..3f3e186 --- /dev/null +++ b/test/python/slater_gf.py @@ -0,0 +1,96 @@ +from pytriqs.archive import HDFArchive +from pytriqs.gf import * +from pytriqs.operators import * +from pytriqs.operators.util.op_struct import set_operator_structure, get_mkind +from pytriqs.operators.util.U_matrix import U_matrix +from pytriqs.operators.util.hamiltonians import h_int_slater +from pytriqs.operators.util.observables import N_op, S_op, L_op +from pytriqs.applications.impurity_solvers.pomerol2triqs import PomerolED +from pytriqs.utility import mpi +from pytriqs.utility.comparison_tests import * +from itertools import product + +# 5-orbital atom with Slater interaction term + +#################### +# Input parameters # +#################### + +L = 2 # Angular momentum +beta = 10.0 # Inverse temperature +mu = 32.5 # Chemical potential (3 electrons in 5 bands) +# Slater parameters +U = 5.0 +J = 0.1 +F0 = U +F2 = J*(14.0/(1.0 + 0.625)) +F4 = F2*0.625 + +spin_names = ("up", "dn") +orb_names = range(-L, L+1) +U_mat = U_matrix(L, radial_integrals = [F0,F2,F4], basis='spherical') + +# Number of Matsubara frequencies for GF calculation +n_iw = 200 + +# Number of imaginary time slices for GF calculation +n_tau = 1001 + +# Energy window for real frequency GF calculation +energy_window = (-5, 5) +# Number of frequency points for real frequency GF calculation +n_w = 1000 + +# GF structure +gf_struct = set_operator_structure(spin_names, orb_names, False) + +mkind = get_mkind(False, None) +# Conversion from TRIQS to Pomerol notation for operator indices +index_converter = {mkind(sn, bn) : ("atom", bi, "down" if sn == "dn" else "up") + for sn, (bi, bn) in product(spin_names, enumerate(orb_names))} + +# Make PomerolED solver object +ed = PomerolED(index_converter, verbose = True) + +# Hamiltonian +H = h_int_slater(spin_names, orb_names, U_mat, False) + +# Number of particles +N = N_op(spin_names, orb_names, False) + +# z-component of spin +Sz = S_op('z', spin_names, orb_names, False) + +# z-component of angular momentum +Lz = L_op('z', spin_names, orb_names, off_diag = False, basis = 'spherical') + +# Double check that we are actually using integrals of motion +h_comm = lambda op: H*op - op*H +assert h_comm(N).is_zero() +assert h_comm(Sz).is_zero() +assert h_comm(Lz).is_zero() + +# Diagonalize H + +# Do not split H into blocks (uncomment to generate reference data) +#ed.diagonalize(H, True) + +ed.diagonalize(H, [N, Sz, Lz]) + +# Compute G(i\omega) +G_iw = ed.G_iw(gf_struct, beta, n_iw) + +# Compute G(\tau) +G_tau = ed.G_tau(gf_struct, beta, n_tau) + +if mpi.is_master_node(): + with HDFArchive('slater_gf.out.h5', 'w') as ar: + ar['H'] = H + ar['G_iw'] = G_iw + ar['G_tau'] = G_tau + + with HDFArchive("slater_gf.ref.h5", 'r') as ar: + assert (ar['H'] - H).is_zero() + assert_block_gfs_are_close(ar['G_iw'], G_iw) + assert_block_gfs_are_close(ar['G_tau'], G_tau) + diff --git a/test/python/slater_gf.ref.h5 b/test/python/slater_gf.ref.h5 new file mode 100644 index 0000000000000000000000000000000000000000..5669aa4c8e558357ceaeb7828c46dfe9532cf274 GIT binary patch literal 405336 zcmeF)2SC-x+Bfh6Hr9$AJE$lsDquqegNlkB#NGe}0crML02KinDhd|t1v_?%_+am@ z9qe7PV@Cx2IR9j>%cF?vd%d5#%H2yi=VVSYlbOlPll)A8m1XmMxl86&seiPzRM}P9 z_*4A)sQh%TnG8~uqHRV4vROvinVteGl(P4WF= zsU%YwWtacb5^wxo{!%4i)vU3#I>TL+T!!%96A7RO)St?@oVPl_UL?`g2W9P3*Z=ddpP*kxj#1UQHERLcN~&DWs%Uuj4TJ zbT`{}?JYG_*_2XHsZPn=0=`3?CRtBTnXJ68-Y@k}a!dI@VWa7IQ{>*(*Lg^A6Avzp{E~bWd;6vu%oA4bz_yQ5kAK&lfS-7fB!F^8E1H9 z^6Ayk0e}4#^{Y?clK$#1-;)07FW-{>>eIKVcOkFJ0(+vNDxRKSEmg-3Ep2S=(oarx z>>M42IM@yD>*C~*-e%PK{3HGUq8_zZ$^wb;es+8&>YZq>K}!8|QC1ZFNrduRydUQx zf3v!dtN;4!d;H|j?Ui(yt(P=aUazaNp7wv%|MLD>wU$>9`yuvEq)#tN{6wk`@?U;L zCotI6(|M@7!ywloBk`$+(_nm+y71I*$a|wouSsA3$t*wi)#P;cO7hIsi>oiMAog3s z?jovS>m82i{}r}SlK*FaME(3APWZ}Fqzj)jFxe?&JMna)n@CmG7wJX1`(sX~|M&U! zM7p$0wpXa+(t;(IZvJe0qCb6~$@a!2PadB<`Sb0GbYefnX2pJPZLlu=zt7Vtrx%sj z9#5B9xrlUPdm^7=dpAlqX?^v`LW!5B(p{^PGs$08>E0>n`1b5HE7@ySD)QNJ7u!n_ z8B>;GKfTf}r2qGMxrpj7wkMK{bmflBEPZ6=uFvu((uwWy`l96Tv*WI%6x3T~Lp+_G zDyO|F=jZto=|p+*{gk)2{ z@bb*8o{96NC>Nf;%<79sC(4EAFSFw=(us26`>B-6XZaK9ME-cW@P1eHx4a+Z^_urf zA|3C~cskxM@pPg*czKqh=js1_YVRVQ=+8vH`1W{z&C`i;L#%hQSc@p8%R z_=)x>`U##t-tUU-iFBe|c>Xdwej=SH7rvjx(SL6L?D&avqFh9K66M1CUA~{9TzGl% z_AdGr(NBo&@ci-d8BZs+!}G`cGm(z>6FeR7cSSnU-oZ|3=IO+7 z5cw3xfsZG6I&mC${&;;6=|uk`_LJw2_b)u1*iXJa-cRs!Vn2DgWVWB8U&^c<@$rP% zo=7K-AKza4TtlsM4gJ*b@^qqHc>c25Pf;$Sev9Lm)qaX{;m19*`Xc&4Q7$}xnbjAO zPLvDJUuN}Mq!Z=x<^BBBe~R)H=|ui`xnx$)M872R$M-X{dM46|{PF$F?D&avB7b~8 zdH*8%G2XxM?eYFoq!ay%$RBTieB8>@iTv^7&g&UZC-TS3lb?@xy3Fb|pU3fZ;<#s0 zF8?_niFBf068YohA|Llp^^B(z`Qzon$7ej9$RFQN-u`$xkw0FZneC_Om&9@B`^np% z*q%ry%7t%_w|AaSl*_l~Pi#-*kGBWj{>1h~dl&ipY(Lq&k*5>+%Va-4t1n`EB7b~8 zGdu30y^H9v7aKH*iXJaKK>N_18?vAxbynL(~0fz^5pfCrxWGE^T*4Dr_1cP z^Kqm|C)%wjPu^~MKgiRG{PA+({WVV~^2f`CkIQ*F(cby-v(T>FScshQ* z741jVGjaUH@et!IKJO6eczKHSA|0Q1@N}X)`Sy66L8KGqBJ#(#$K%30ohVPfJsy7% z>3DhabeWZlNGG-@@+r!N9|uwXqCCa=Jb!#YMLJO~VtYIt-%p-SY>(%U$B9Hbk-yB2 z13!K|o!C#lJ-(l!JVgG)_INs8&v-hqJ(17Mj)O?Y^OsdRv41?B*sgrPg=VJrTbNdo zdNBab5FYS`5Fll}QQ6_krZXJud21k{rbq z<}W7@*RLZC<@Lnc3Cio_8uB~#N^*Z~IRYuxi%?#lDkQ&eB{tJ9Ihc+xM<4zh0v3ude)3F?*1KT}rV_mzosVwo-d-YWIq>iekFJ!$6m1M1XB z|2X|eTnUn2@%sT)Du4NdpX9e(Z#C0%DgVSN_bp|%d!nA{)Xi*-U-Nw z%Se^}%UJ!(M5VrO*;xI{B>k6>`lYe@m&xybLpicPvB_1mc%WQ} zSC`8Fbxrkm{J3#t$$#XyGOKyIK|}e7i1B2`M{|7 zREzH{ATht>^WwZpWbRu$jrv-M*pH45uI?@RsbA-k-%~!&P-LA(cKMAw%KnOUVku^e zS$&>Oac5t$ZR)Sid|p~w=|3WrJ&+fCUYa+(4^#hWq{||;C$h8a>*X=P-D!lK9o`r7 zU$NiDcvt=F%PpACD|H(DC&3s05Z^Mu?28}&vTuHVUXf?&;y9>fq5AK?T1jI#xgi%VuMa9!ko>_<_B%62Wnm%jsJ*hkS)G6Eo60MSdZ#4&z4%2+fS-Silzb<$ zXpEzmhlBdeGuU;MlX{f_UV~kSxDIo&>o>@0pq-beyUYjWzCZnQ1Lb=%TZr=ykKg{C z_@???A=-c2bhp^jqj~zy$Xm?p-w!x!A%C9OL|$gqJ|dgR>-}yYayk5Jzj^!6RSG~$ z={H4r^l_5C?BF2|LtF7Sn(T|^0+}Ab(epZSjbE9eY_rv>pQwFl?0hA zL_OBF%4CIq+1pu<8{~h-;O~zoPbuREafIZ8`+WT1|5KGHACHDxetq{ueNnae`g*_G zr&-slZ@pfYpwuHV1CmSf^LiBeQx|d8-g!65#b$^oI%78FT;NzAsMn^Px&RiBz`tcj6sizn|;N|L&A( zkesisO7=3%ztWCGDg3vuH`pIoGm^MDb;6IU8-yL zrd0N;zEY*b79U@nuS<_oyDcpI&R1Hoz4ocuCF{{2tIj+dR&;`7_U7I^H~V@tVZnqM zHBBZ+@w;#C@>yMv#-H{|Yt(*%^wcHg^wnqeDEj)Y{j1z3NK+PfSwFeHDIFP}Jklj_ zf>fj5v>uZuno>j;`fsQWlFwh4UJWYCP*&|N?X>HtxpdNUYmCD?gVMu zu$D1bJ?c}z5>uxa&M{G%Rm;#JaCd$3JX-(#riv4#;0;r=M`<^p8&9gPj%GL0U#lENpR5P)e<-JK0r6VItmffn|kVZy&6)(3s{k8G-$!%R5 z(#7RVp6)w5QA*o6eQ?;mh7{25#-$4nCrVnwYMX2fX@0@Sh_^KJTGpar}%65`e)67aNgPa;_0C z^Y}?RUGF|B*G!@klMRQoHt~~6OevkM-d2fpJ6-QrrJJ9W&-~!fV+AcJHPE79khh;S zbMS}Pm0Md--$9pJ_=fvQb-GRTjGAOYy3fs(q#R9w2R=-sHoRwwBa<%(|KD zS_ViOleKk5F1Dl#+Gn5YjtP(^T=rY_;)Nv*J25ZRep7&C+iRyof2(G+_klqtuiF9A z=!)x?B`t17hJLLIcF+lw)|{;2HuqgK+EL`i&3x?wrQW3S^yt)_22G035k4_cYQJ|% zasRE&=|$5@_w{!LO50Kkg}f`=f@)W6TxQy@9qo6gj5nIdI(GpSy|(u)4n|1fyy^7PM>9t?}yXhmsD8f}TaK1F(TFrl+v>6R2* zDYRn#GE=2%j;}p?Pi;v?1{w=JdQ6oLKAJgn=Es(_Yk!RX?fFwBy*3}4o*&wZ#yY;t zH|+9M>G9$c_nJLxMH;qaZ&fcdO&Z~Ta;?g}HEkcaduSp1Y0}fn8|zej+?tw%N8YTq zVw&VSV(H9NUTvuTu*Oq-A54=%gAQ9(e%pqs6zHd4&S<){)@YkkYu~oiBlm}GxkpTw z=J+RXb|~16w!{qxZntN;G=E#uRY5D-(W?3p!(Zi@A&oTD4po`8r&lH(19EnqA$40- z`1IxY_B33>|Hbr`Go&Ez=AA2>SyNDly$PYOW=I}xtuODJZcWDvUfvc`K1f=UaQ5Ei z+t&2H&6FCOS_etbE$dbYXlO$%Z!S&>9U3I9u2ekW-W(gcZ!^uh$C4na#o_mZwO`th zacuRwsmFq(VXeAHRwP-Tl%l3A`k?1$OAi*t(BTO)rP8i+wCYP+vR?44Sgma{CC955*BtNLkwz3-V6*n_ zOv&%i%aKM29VsNcNBw#_vn1z~x_x}CJ5jX@<5O<6o+Yg~G9~5l@lMpBK%Bu&?^#mW zyWNK^Z`+wXt8Y9IyJMC#HZ<-`{F%l)uOA&erx|^C=6uPjv0d|}-JR+90GFlrRSP7a53Qn#>ATQO z9jiiX1}~5z)~qS?{GAIKHqE`c!NUbopC*0#CSG)<DxO5@hmx3b^uMn!rws(z?nn51(s)HQs+JI#NP+kENMFe%=p*`_5IJ?MCR=>Uh( zizJ_mhp#$*@T8W7DsO3>Z?WVtXV$HvB?pl7=S#!z6^o^gn`;>9?;b##tF7sBOLvL% z(BncxDffYtcW}jyqXsRJ+SjYU=upK$)N!HvEvrLIq^qUf?ejhuMD>q4Hy&4RsdP`} zWpp=cFfIOLscXB@OQrWK9m=?b4xuMuZJeK9S}NV|n|;!eNkd6>tiK}=1+-VwQ8AUlPAD_&8*?{Y*JMQQj7DWaOEsqxA&bZPd6vG3olkUj=Zy>C->9GxBH zlPAP?r8KU5(PGgj$CFQ`wY_o{S|$19%{SxjQEv)5x^2th@Kw^=W-XI9?D3)c6_;ms zZLwN<^6+A%dnbG;@Aa6*7j}9KyDBiKmTB+Rm`d2>W^{2Q^8;&_WSu6Q1YdW+3mH^t&@IsGEN7hO4 z*2YGce5X*KTBe>mx2~54m0qrUe&RH0X8hn~$@Lqg6NkI*)1w*Wlj^d=Y}-c3FkpY$ zo6<9>#@J^Qy-sYB%rBh?@Ekvj0%{+;7&InA+7Vyda&6vVDscHuL(kHir7)^=)&1BU zDq*CG(LJ zwEk0jo0Lsod;UwW#iW(eaDJa>+oTUenwMJTu#`GB%Tpu%%62K@WbZnDt(Q}kpga>o zF7A--2bIz^^;t>Y)vq2}d3UE|)Z*rY?%Ls0wf3dDeN|DCgO9D=0nq|bY7=x;}f%XNgswe{yAalRyu#(ezxVYSjlMP z@EjYAc97j92dkj8-BQWyUADMYjUt<%nCYg413teno^}&A0D&GLt5a<0= z;&$FUiL;MOGiE*UX;t6=jc-5nYS^V){57%liG3fj?Gf7_V*5)hKg9A&tUQR77qRjr zR^G&p2eIQt?06D8-o)wyvHC)+J`t;L#Ofol`bw-m6RYpU+5@rnLaaRzYj4EbBeC{M ztUVKJ@5K58V*LfN{)AY6L##g{)?X3p&xrMR#QH;G{Ux#flvsaDtUo5!UlZ%kiS_ry z&IiQK7sSpd#LhRw&PT+~SH#X|#Ljob&WFU#m&DGe#Llg*Tl}}#LoA`#skF0 z3&h3~#Ks%M#v{bWE5yb##Kt?s#zVx$OT@-g#Kv31#$&|BYsAKL#KwEX#)HJhi^Rs0 z#KxP%#-qf>tHj2$#KybC#>2$M%f!ah#Kzmi#^c1s>%_+M#K!x?<^#m$3&iFV#O52s z<|D-BE5znA#O6E1=0n8hOT^|=#O7PX=3~U>YsBVr#O8a%=7YrMi^S%W#O9mC=A*>s ztHkEB#OAxi=EKD1%f#l>#OB+?=HtZX>%`{s#OC|N;sM0s1;pYB#NrLa;t|B+6~y8h z#Nr*q;vvN1CB)(>#NsW);xWYHHN@gM#Ns`~;z7jXMa1Gs#NtiF;!(unRm9?1#Nu7V z;$g(%WyIoX#Nutl;&H^{b;RO%#NvI#;(^5Cg~Z~C#Nv&_;*rGSmBiwi#NwUA;-SRi zrNrW?#Nw^Q;<3cywZ!7N#Nxfg;=#n?#l+&t#Ny4w;?cz7)x_f2#Nyq=;^D;N<;3FY z#NzG5;_<}d^~B=&#Nz$Lt_KjiUO?=60s)9FHw1|H9}rNT(1vOuJefXZg|O`N3!cb%GdsM zi_hap$4%6OQ=XZw@=Jd3 zvG-`T5~T`@yct{Tvx~ z;x8{mdyK%p>hzZne(^s)@89JS)~9j8r~8w??S9<(HRU4xr{0hI<@<%amGPpzQeUz< z4=foiuPExBlI-{57byXLKbet|Zv&+siDLLsevr>|{?7e$-{S|h6z6E5)cdU3NAg&? z1b(*Sm ztj7)C>jxJp;|CGxkxPz`Cx7;ML*kgPA8}D%EXIF*y75Y;b zan|MWX?!lX7z^Ylb3YjVjqNMwr!1GhQy$+oUy1mK&sTm{KR6&zsX+f<{a`|Cc`uUN z%FF+iA3Pi*Z_h<3gsjHH1D4Axit~b!?DygqDFHqnHd6B4)h}ZK{IC4rfB<>B_R8k7 zs=tR<$}9e^ze<7qVhdh>#k@&JsYjwXev}_fP})hdzr3Zt6YuyQKWMR5-cDB~W0~e( zoCTHj{@Z@=ZH#I|4swP&yiZ@X2Zu_`#xWjo=4ImLCK^XkWn^e($~8}=U$KRB#qPWZvKF6QuqJNrI|A1vOeD*WJZi~jI~d4o0K2Q`Bu;Rkc2 zorfQEZ>Ir2*dx~!_`z*8o#6*3)UkmdT-L`Be$ddQC;Xs=!Fl+>r}N&!58e%H4L|4> zl?p#NIy^i4;E84L;Ri1js02T_QPTr{@Z$Lm@Pod3Ti^$8pPLUq_+Uak_`zjciop+7 zT($^)@KCL#@PoT+zl0z3`d|h>SbD)@_`xw3!{7)1yw?zZFl2aF_(Ais_u&WoUM&ni zC|PfTAJiGV3x2Rh$q@KKw=fLMj z!8R)b;0LRn?*%`o+weI2pibMW@Ph+P8^RCHoO~I6u)xe_@Pjdd0q}!CjSb)jwN2~6 z55C*z4?pP9#Q=V=esx3m!B%G*zzH$C4`$Gi$;Iz~* z_`zMn0^tX5FS`mqxTca3{NUj?aqxrV&Ub|$Y_j_z{9vipbKwV@53dS8xNU?9{GiXS zMeu`lhBkm7T-({GcHm}~p58j;?4?p<+ln?yih|aCx2PZsT0zX)w z_(yHEAFQ_F8vI~4<6H29Q_bw)2YuJ*!w=509tJ;{5|amha7@8|@Pn7iMZ*v7eA^Cw zu$faa_`!;UZQ%!l@2-O%ba8(HKd9Qf0Ddsx&I0(sp+iF82cH^EfFGPa?jHPLBfl;1 zgPuo+!wJ4u>DS*()FXV8K&=!Vk_} zIRSpKvfo_z!FDCL!4IBTpbtNo`&>Bu;3(r3@PnfVRD&O^7WEW3d-1{Z)I^xA3;Kj@(23O^X|HWYsF&yKC&2hYZ@gCBgdr3U;UElPnO z^f$N%KPVMy2tT;<$vODJ8bQJEgF{C>hacP+khVbW2X{W320vJ_Y$W{PbMyD`gKM`x zgC8t2z9{_Q$ps_f2Lnxy!VkXR9SuL&BX}+R;N|Pv;0MD?hrtgPUTF?LSX6gE{NUr- zec%VruiXSc_@+_{{NU-wFX0E@oOOpEY_2K654tv84?p;%PagQeoV8rx2OsRu4?h_G zb^`q1lx&vpgAt8(!w>GhX$3zRt$7iC@J{2?@Pq431KZqr1QluFsbre(>(LrtpLMi{8NxrfOb+AKbHaHT>YBX$#;7 zui8h!54P#P3x2R;gY%b95d2;0>Kv_`#xMz2OI2tsD@_HNmpi!(*hILj4&@Z-aQ z@PoDc<$xd5&e0rxFz|gj_`!mQufh-NJzEApIBlpN{9xZ_?cfLB1y+F{OlsT_esGXg zC-}jG-R8p&hTZP~Ke)v6I{aXnid*3a(>$)i58it_8Gdm4)K&0<5fk>p4|+Er2tT;5 zv<3WNwqph12R}x~zz>=qcY+_>U7`y7V8cNlqtt$I#`+%cgVj||@Pm=9TEGvw%(H|a zY;=Al{NRUeIpGIqwYGyFEZ(&){9s_nF8IM*HkR;%o%`2;AB&&tUjL?UK3R z2OpiYfFB(8MhAXywa$L{LEo|!;0GI&34$N&cK8|m;EQsG@PoExSHlmU-E$Ux(4j|p z_`&O*b>Ro!jO-6T*s`uG{NS#IPVj?`Q{3POXP#OFKWI3%H~iq4uC3q)mle~1AM8G| zIQ-y%M$O;{b4I*{AN25;1V1>vgg*S>gSAWH2j@RH4?pPt=05yjqvJ;KgRf^UfFIlt zYz9BrSHlm^8Ic=)(Eib8_`zaRo5K%U z883k!Jd!IOez0qNB>dpXX}0i#s|>^82OH}hfgij($rXMuCh-*f;GMA_imCmed4;<0 zgAH4*g&&ODB*70Bjy?lFII386_`ynZYQqmE%vuCL7&GK9{Gj=LTlm2n<(%LL``_OK zKR9FDBly9+8pq%V>sHtgKX`SIG5p}l9k<{Iw>nmU9~}BNEn4jdi-%{2AFOyj2!8P9 z^0x4Umu`-RA9S@0h9As($_9RLPU}4IgCiX4!w*(G*c5(n;T$da!3Ae~zz_C0panm; z(p(3Auvm*r@PlE~uEGx%F^PvCJYn4)ez4oV%J74K<~<2Nc&myn{Git;d-%c5Cp*Fq z`noy5586!b1wS~f-Vpe~p;dar4`wT33qLqDF$#V#F?1;WV29(A;RiXxnxvo0!gRSk`!w;GkO@JS)e8wGqu%IOS!75E2!VlhWB>O@3n%MfpzK_`U zi0u!t{Uw$kV)-Rj9>mIvSa}jFZ(_%T*zqEEJc%7|V)cPoeIZt#h}Ab@^^sV8C03t_ z)pug;fmnMX)}GScZieraXGx5WBmV*NF-{+w8UPwad^?0iA&d_wGeL+pG+?0iM+d`9eiN9=q^?0iY= zd`j$mOYD41?0ik^d`|3qPi#CuY`j2hJV9){L2NuiY`j8jJVR`}Lu@=mY`jElJVk80 zMQl7qY`jKnJV$K2M{GPuY`jQpJV|W4No+hyY`jWrJWFi6OKdz$Y`jctJWXu8O>8_) zY`jivJWp)APi#IwY`#EjK0$20L2N!kY`#KlK0|E2Lu@`oY`#QnK1FQ4MQlDsY`#Wp zK1Xc6M{GVwY`#crK1po8No+n!Y`#itK1*!AOKd(&Y`#ovK22=CO>90+Y`#uxK2L1E zPb?llEM7n?o zOe`KvEM844o=q&?O)MTxEM875o=z;@PAnczEM8A6o=+^^PwaXCvFioIt|t(?-azbn z1hMNC#I9!$yWa7cAB>1rF0^E_5O%s z*SW-cy5aKY$?W=<_}ZUs`T2b{@)f-QyC2;4jrUSdH*htu*5j%?>~Rg#Yis6f0rMOQ>wSUQcbct58T))uPExB zlI-{57byXLKbg`fR4z(A62I>tT+|ouonK$?SNk;UdiAY-aEMZme)~an9nw;sFP}|g*f+MX zpr5kpWnDi$dCG6|gX5I)_@~ZSepWviu~(@;|6l!}&O~`HOqJ^e|0_SJ^-A8Zi&6+# zjfW#H%PVRt>;GQ-S|z~8!%C;53f-Nt9R62+Fk+9qU3+EoS=C>yYx0V}>#tH^zu1D; zUomg$s?;M<96!nr>X5tzQ)PR9C*JWre$e}tyuGeU#xl*nI14K4{kQ$#)FEN;gM+RZ z!w;S)a}0j4i9rnfpzf<$@PmQfjo}CL4;li|FaXiRnZ!H8wO;0LuVFTfAFK^gKlsr21N@-%p&amo4&~C|2hEHs z!wc{&pk$;LufD;RoH47r+lz&Q~9P@IZWV_(7_<1b)!J`!e{!!v|l%51y^m z2!1f!_$mCLf40T&gGoN-@PqA^cY`1NV|OC_;IZ6A;Rg@B+6q5dZ&@t-;M9Gg@PkdW zMZ*uKB)5SdOb*tAAIz2OBK%+ut=I5_^Hmc3VA8>^@Pm|S0zYWsc^ZE3ZiTz>gLfQ! z;RloNU56jcIoA_@&}~XG{Gh|K82G`KyE?%S2AaNwA1pF<3jCm7F+2FdwIxo%4>|=^ zgCD$5+8ll`{`eL6LHE%u;0IM_0^tWWO{&5VcJncXA6&RH5PmRjSrzy}!>Tpl2RG@O z!4KZlKLtN{FVqr#@LDe&_`$-?p74Xo`M1IkwzpmkKd3i-D*WKtc1fLEqBV;0GfMm4qM6mv|L^a7^lc_(A7V z68vC5jWqZ{OVvgA!36~-zz@0~YYjiR(s&vC;Iio|Jb&>1tLyNCv)A2*A58PNhadE; zR2hCSVd-%A!Q~C}!4EETc7`8pxhw{L@OB4l_`wMei^C6kp6v)fxXEJ!{NVG`FX0E% z+JwOm#!KRC2cD*Rw@_C)x>qZiHK2Q|-JfFE4mV=nw)9p{(u zgQdHDgdePUcLx06;^$HDgDuR`;0K#ddk#Oi(62cB;Jo3Z;Rgq_JPtpowRji&;De3p z;Rh}D?|>hy*myDg;N5BIkFHC9{@{Uj2jK@Bm3M?6RNdJOKX^?i6@Kub(Hr=|z@wh< zgB@)e!w>Fmv=M%=Z)`sJ!CJN4;0McAD+oV$ICT>I;8wF{@Pn7E;@}5$^;*FX+ULFm zKNvCj4E*4WCV}vS)t}Uc9}GUX2!8P5p`!4EW138bAFSIa1%B|uT0{83#4BCl2Va*j z06%!COf&dF+Z`$JgR2K$g&(}TD;$2XQO+>Sj)foWHtH$-;L7F+@Pj>G z%!41?R`~_|pygFJ_`y0hb>IhQtQ!YExTjbk{9u!tyWt0G8+3yo%$2$xe$eFfZumi) zEk5vrnl3)@gD>jtf*%aF)rTKEak)JF;Ijx{_`%~fB>2Ix{aV8hI(XZ`54M|}3O|^# z-T;1Z>5zT!gAKCphacST^b~%uM)Mu;gC=EX!Vl(q-~m5a?0yOO!N|Iy@Pk*DhQkkf zcW4JcxWKUx{9wP^hVX-Ru7|)6O7Hr^4^C`51b*<~>74L`XBxGDA1vao2R|5*`#SvK zLB|#FgZ=lEhaYU&-&%hD;Ek&AgJyd>!4GB+?+ib<4&AvLesI(nE%?E0jU3<2r} zgdgm3{5kw!m%i2E2ixd}!w=dQIuAcM$+-gjVBZt<;0K3Kaf2URvAjS0;OVXX;0IlX zd%zD4ezF*TuyP)I_(2-o8h&v04o&#M*~@g`2WLNT4nKJ6dNTZ=PMyi{gC^FM;0NdU zFNYs=tQ-$Nc=pi)_`wMUP2dMtE(w#LKX}s|ey~-N8~k9bv>tx2g>fMKV4Y&#@Pj$R z3&9V*j|+z%42;bKKe(mGR`|h#w_Csu2CQ2OKNvqa0e&!d&uI9;eA=Dh2fOWB13$Pc z<|zE2k)9j;AcdWQA9T}K;rWA3uj|1Nu1{MBKbW$#G5lbSG3Ve1OB>dNAKdIz7k+Tv zpG)8eXLY;}KN#A+GyLF_0?zP*@wN8B4;~x;1b(oc>v8zO=Y|L12hX*r1wWYY=xzAH zXLxhabFObS(U!@4&h6gBIGh@PkFS}LZ%Xw|t2 z{GhqZDfq$LM>@g}-aX|2KRAA5XZXR+&-=g+S~swRAAI(5DEwgRH9PphMfp3y56+E? zh94Y|FdTmH@dAJN!MQ2t;Rl=Mm7hNtUqu7Y9}M~+`@xV$*6@R_b7enxVz?*#V2zow zA1s~x2!7DDnd}GIYhvpY`#xgZBep-p_Lo?Gh~<}9c@QfvV&zG!yontTV#kZv@g#P< ziPZ;U^@Uh{B39ps)kk9Wl~{cyR^N%W2V(7oSbHMY-iWnFV(pb!dnVT2iS-A>`U_(H z39eGcjhBdxr-+TWh>gdHjn{~c=ZKB>h>Zt{jTecHCy9+W ziH%2zjaP|{XNiq>iH(PejhBgyr-_ZXiH*mJjn|2d=ZTH?iOmOy%@>HxCy32Ah|Ncc z%~y!cXNb*rh|PzH&6kMHr-;qBh|R}{&DV&{=ZMYsh|LFy%@>KyCyC8BiOole%~y%d zXNk>siOq+J&6kPIr-{wCiOt7}&DV*|=ZVetiNynm#S4hV6Ntqdh{Yp_#Vd%#Gl<1I zh{Z#Q#Y>3AQ;5Y|h{a=w#cPPgbBM)zh{c15#fyl=lZeHeh{dCb#jA+LvxvpJh{eN* z#mk7r(}=~}h{fZG#p{U0^N7X!h{Xem#S7EDafWyzv3Mh~cqFlSC9!xWv3Mu3cqp-W zDY1Aev3M)7cr3AaEwOkmv3M`BcrdYeF|l|uv3N7Fcr>wiHL-X$v3NJJcsQ|mIk9*; zv3NVNcs#LqJ+XK`v3NhR>jA{B7ZAIiK4kEkC6k4? zt1L;mt}5>Pz{q}OTY2s>ea-5WWCDjK8nQKa&-~) z>6flNzhLHtALQqcf3F|(Q`&JvhNI2T4?o%uCfv%f`OjX6_GonXvyXo1H$Ly*YbA8_u>~R0e(N3(n+eqm3fCK zh9Bhz`8?RbI_6Qv$y6}Jlgsf#%4^7!QCU`yA^@B+%N(K7=>Ib{-lJ{bSa=qYxx=Wk zPuci>@6-<~0X`l!Qnr-vCgUdmSAH<*oxELpW%F6pU#nuj>u<&*^=rN2^;gWBLX~JL9yv_&QO!G}-lzz-U3^n)KX%Ucf(<4>l|u3_p0HWEJ?q4)u-T2V;AM!4KA`VG2JOtT`Ee@Q&wB_`#V~ zbm0fLzte{w3?5Mke(<42Uid+O$_77Ju+la7!R##z;0I%+qVR+B@?C}>92mG4e(-Ta zGx)*1TT|c%Ho4bLB(xOpl3 zU?-b$@Pom(%;5)5u2=;>SpIMx_`%4UC*cR(|L}z$oN_A|esI?CE%1XkUsZq~46eEw zez5xFX7Gc0aaG_42jzJJKe%`od%P9=U|F5D@Pnhz8^RA-UQUJ|ywl_k{NR)HdLMgzinQV58Ti3h`)9!q z9-HtCesE;;d-y@4q$%)&cUtX$AGE3S4t}uRwI}d{)jSHr4>pb)4nL?_<}mzVwd;}a zgKs^<;RmAGE2H3_n;q>^b~k_|^XK zgWXq~!4Gz}S_?neGgS+IuuLsy_`zNs^1=_Edf@{L2Da7$Yg_`yrj3*iSBmMjcE*sek#{NS-wZ{Y_U`&ES>yi}+&{NU8& zyzqnDEt|j(>iQ+a4?YdN1V4DlZx#IDz*PtT){iesDn{6ZpZWoyNcq);{0|KX`xQF8ING`#Ql79uHj$Ke(q$4E$hT ztMTxIGcS&X9~^lg3VyK9CO!DU|lVv|x zx)S_gm4O65sO!E5ez1boL-@f%E4RWAPQE)8eo)`S4SulMtfKIP#V5^yA3Rud1^nQn zkk;^n#n0t~A6!a@BvHs!B$h!AB;P5u9SED z71(i@Pm!dg~AWo4YPqCbiREResJyT z&G3VFuUv*7jPde=9}IrI0)DXZvpD#{N^88}2S<-?1V3nASsQ-PB5ySO;AK5W_`&Nv zE5i@w*pr6m4_>*^4Sw)Ri@xxK1HGET58l4m1b%StgXQppZ=Ym`ABJ{9x+-C-8%wjd+*EuO{NUmKXW$1z+v~v(hW$|oe(;=&EBxT2JtgVOxhFJ*AB^&T13#!6HUWOn z>vjeB!3O&m!w>dce-3`|^xM1egVQJ1gdglbavuC(U8{!hgAZpq!w+7Vvj%?9HDnU} zpmC3}@PpS*h@Pld9{)8V4j!(t&2OnG2h94|FHynQO-ZpdiLC<%m;0L4M zR)rrlIcNeu*t^X__`y|kZ^I9+8DaxJxZk)h{NT(vaqxp9$3K7{92tBBesDv{eei=P z>KMTf&Rua6elXh(J@~=4ms8;fTb|K`A8fO62K?amrLExyqc)9#AKX!37W`n2S=R7_ zWv^<%556p63O^X<(FA@_yHPIqK~<;j@PobVbHNWL%qj*y*zQ~c{NUtGm*EGeY(5V^ zs9mou{NUI+mEZ@LY&Zr#cwmMN{NV8NcJPCmRc+x1_ujFCAFOqy2mD~#s6p_9kH_?c zAKX*Y27Yj6QTh3UQ+p1EA8e*6KY#G%lT+}6)o0hj^9LVw|A6NYzKJZ3=MRp))E0hl z*1UK;fAEQk8~k9Y7kTa^&OR>Dj70ds{taY5$X*j$pV;>i+a9s~A-2E7@#vCQXT8_)Y`jivJWp)APi#Iw zY`#EjK0$20L2N!kY`#KlK0|E2Lu@`oY`#QnK1FQ4MHMs7$B50>h|TAS&G(4S2Z_xW ziOna8%{Ph7M~Tf>iOpw;&3B2-hl$OXiOr{p&9{lo$BE6?iOuJU&G(7L1Bk^7h{Y3# z#T$slBZ$Q-h{ZFA#XE?_Lx{yoh{aQg#aoEQV~E9Th{bb=#e0awgNVh8h{cnL#hZx5 zqlm?;h{dyr#k+{b!-&Pph{e;0#oLI*UGMnJ4;odIugi$*O?)ZtDl<~97m2m`^&?#+p?6t%4Y6Lh^7^o@{EoO@Z>?PC z5$i3{k^dUOuK)1;`B`3neqW7z1@Hgv2d%&HJ}m#Ar6{l;{P}~XMa7Z*@@|TH5LEo@ z>wP)(zxUlASFbw!BkNUG_fZ&>mg|qGPygPU@jGWjyh3?KmPsaq#=S zf3zReDfRV!TeQakWxl>%hD`hdFFxt`8?vmeOyEGWpSdaEVfH<=UuH@p>%ogVn7n))0G^aVh$F?J8ei zFJr2I?yIcF4d3erwUqILi1f&1#K)6AyB`eK|9U+T^+jdy_4WR_HRSvDJnMS(t$t8j zsYk#4p!!IBdj4RcZ){&d-**6iaH_29$0twuZGN!iKYYIOv-&}!T1wAW;;&VL_v4>D zUtU$-^jd0X*VoHqfV3aTl^--Rk+*BF>_=Ah z*T3EG`l}SxFS+3LSM-Mo#u@AHkMe_|N;`>Ew)c199pB>zRkm`zx++II)BG##NK}gd zwjZo>U;+H#;SomggJt?3fgk*Huj~hNn3=#2TD_G0;PCAO;Rkh($bK+BI1+yF(d4r5 zgYQ#hKWOz-_Jd85Wk0B`^&Eb1;_)i*gPrflez2vUCj6jFy-4`M`~m0T2fI9%{h-0D z%kYD`XJkKEh^*lUgR&dK4~~rP0YA9mi0lVn=)Q*^JkzK({GhIs3O{(qDm(mO^~&$z z2je#B!w+tsaZ~Q!Nv{^;RkmV?g~FxJ>(wz;PVlM;Rlx=+6+HfB>yh>!R$eE z;RnySN5T&#?QR7>Xp$=XL5G7E;0JHHzl0w&jWUBD>|dn|{NRN7M(~5}PyPu%xcTHQ z_(5Oth96uXcolxI+H=_t-mUxwelW*-*$=wf*uoF4p8gtsFe-Nd{9vK}z2FBoEItN5 z*!`yL2a7Lg06$o*)Mfa=1J5nt2iKJefFEqPq%!=V?a{jMgIn_W!w+VAAp61lldHiG z)^uzDKUiw?3HZT<7n{Hjx~we<6IbiaL(d<@PlhMWrrVhIC33+aKC94_`%bO#oz~38du;4pE&G; zAJi~5haZ%tzlR?jUML=ZaHOjb{Gj2bmhgj9CM|&Y3O~3-WeY!ezt1}OLCfUl z@PpkOEr1_<<+%WU@WQjX@PkdGeBlRQC*Or1+?#g`{NVAX!{G-*dh~@KYf!4KwnI~#t` z;ZhR(VEt#Q@PmK0nFc@D$#*CGVEND#_`%US&)^3;Unl}U*dT2L{NT>1N8krj%0|Nv z_PM(Te$b`SHu%9I{TIRy>T8mI`~23#kt`J+xWY{4|Yq-2S3=l^#u6AlVMHa2Ui5e!Vjj5w1OYJxHbWP zFi*lM_`%25Wj}bJb}jh9j~-$0gZ*C;r?^s2ixyl2|pO(-3ETJ zSib`BgWdB~gC9&h77Rc5sH7|W;OvS6;RjP6XNMmwwzwJm;9Bo;@Pl>iuEGya8MF+3 zFyaqA_`!Sw+rbZ}l&S(hcw&z&{9yG99pML$#Lt5td_1rN{9yFMYw&{?*KUCyET4D< ze(?6F$?${cvaf<4+^e}4elTFy0QkY!5D9+pUZaBWgX@fA;0GU>JHZd$pJD(%xaj5w z_`$RiJ>UmxdpN=mR^Qqjeo!;JCH&xU)0Oaph0ElGA8fs*H~iq7*gEioL!QOJ51!xJ z6n?PcuG;W}v8nap2mc744L?|Wcux4i;Uz5K2bWmuzz?Q%+6O;4YiN1+!D5j!;0J4$ zeg;3de@8X=!H|QpAMDxjEd1bOjq>n=S5jp^xV>zD_`!kX0zVigIl&KFj&p+_96xXo z{9wfUUhso4Z)HE&c7_ViAFN!gIQ-zH2ut|EWv$-A59(i>2tRmzb4B>U!3CDW4^A9^ z9)8fy_CEaJYC9wN!HM_g!w(MEH-jI%U(gkPaQuk1@PqrSO@<$w&~zO9V1p3_;0K%D zS_MBCmp?cBV7CFA;Rh?0ZVo^Ac*|n=L8F-$;0H%`ii970UBDK8u*mAw@Pi{49EKnC zNOgf9Y~KA8{9xOpH26VjN*(yY);rh04>rjs!4C#jI0HZE=wb*z82hdk{9s~y82n)6 zb9dkewaVJU51t$82tRmn)E@Z3t!Ey>54N0o6n@a;sO$&(G%3c6 zgrva_&eF~fKe%RK5d7ekv^MaAgGP;pA3QT{HvHfiM;rJ-4d2}GgA-oKez1S%rtpLL z^t9jy8+PddKbW(P7W`oFmg4Y(`wm}(AMF493jAQq#tZO+K}*`f59V)J8Gf*2vlH-x z4;OZTA3U#R4?k#S-VuH<;ekE;V565k;RlVD4~8Es6Wj}aaCrX?@Pl&}$$oHA{1Es- z%}KH!+&uRT{NUl-wc!VIH~$DfII^7l{6UjT?cfKk6JBi0^?wO3;8nOJ)#)*le-FNpOg#QGaz z{SmSLidcU}tiL1H9}?>?iS?(%`decCF|q!dSbt8ezbAG+Aa=eWc0M6?z9Du#B6hwa zc0MC^z9V)%BzC?ec0MI`z9n`(CU(9ic0MO|z9%*wAU0kgHl83h-XJy}AvRtiHl86i z-XS&~A~s$kHl89j-Xb<0BQ{6BQ;Ee}iN#}y z#cPShbBV=!iN%A7#fyo>lZnNfiN&Ld#jAG*g9G|zyxt_PyNIQ@dOtw9UL@A$ z*N=3S1aY0^HN<*}%4@A|@;l;seUNgUN33_lTK+4NUH=jL@v|*IzpqBVg7<&-gJr+* zJ}m#Asz|sW9MM)B*)Q*=s0XLoe|^0#r~dc8`{U}B?mx0#Wpy8gOGml>i2C&Jtr@>_ z_N5XK_pR~s$G_JPmRH(wM26z{{60Y=e6E4J1V6t|uyFdPf4yH%L5b<_ez_&_{=KVm zKSze0_{$6NEfJl5_wRoxmh^icbISKfD#fCq+^s1}>F@i&Gym}Walh;by_NBzy;68t zod=fm{CytyYd!nb{^s|S$-SRSWuVj}Q64|a5Au1=-?^Xed;FkQce%bBDD^(8_L1EC zcl!`^;8$Go_Mxj3f|XK#M49|(KX^lFkK%mC>#?{G*1nHeL+n|`r5ImWJA8e;jH&*) zud*IDe6Jt8po||xq(?3zKA!y9{a|9Ruh#=nUo7muzTQ8#hJ4?iXI-zp)em0##`r?$ z_wDHaC{@3i==A@b7Kr@07>4`N710_29-GGqukA$bOWMRf(?h`r`ukWveTnZ$ zUm~4)ef1k67gkvN`+xCr67!WHrTvI+{%^ZIIsTemWuR=pG)&}3Y%$|f9-F9CI=STc z#o7ZV%6|<|_E%R)W~7`w#Cj1y@?WQB$xG2MSg`Nw8Yq80VyZ})aX)^xR~o7>#~ZC? z%lmJi#SRAy3WFa!cgYxj@Ia|!@Po@L#o+magGW;F8_mc>bVsw_JGsU~pU`Jb$pj&=>H7bLLfpA2hXf!}A9XUuJ_JGzpJ_ zAB?w)hab%EsEOwfKJvHdf(hGjjy2%ARf3S4kH2A?0 zQElJ{=hplHKRD|^4*0=bWzygW$JVF}Kd9y72|t+U%|`e^?G;<$2UovY06!R&yFUEj zhx5hZ2U}KO0zbIB>oPolu6Tj2+#c8lQ$PX|tgAEY5VJx^oMDuzksD@Pp6umxLd@aQ72G)!!-E8>>m=~2bbrY06$pe zNNf1PRW+Bv4|bobDp)kdPrC8qI{cv3n%nS$&;0D+2g_Bg3_rMM@o@OT_Vx3@4^DD& zh968?90NbN%i0=#uySH?_`$}fJHijPbK3wvxa-fC@PqSOg~1PwZyN?b`2J%k{9vxd z6X6F7=1YVheDH27{NU3bBjE?zTRXuIPI{{9mG8d4R4{r4{NO9!^6-Q8-&(*A?!K}H zeo+5Ge)z#co~PjlOV^tOKj>OH6n?P5mhJF^y)7!k4^9}g7Jks_q80q$`l8k02gf=l z!4KB>_yK+}^7MK5!QCkV@Pq58R)il6u3iv+u)V7UKd5`DKm1^x&GX?0^~<(_AIv#t z1N>m#iAL~)JM2>72bXCi!Vl((H-jI{@#h8j!Ao7|!Vgw;dghSSgrYS_`z}ucfk+NS+^d3&}PpL_`%)gi{S^K z1WNFOHmwiB4@%`6;Ri?G*bG0IP&5^O(5U(w_`$J2I74Vu9ZZfX_>KUk?;EBL{~T9@DlH%vMMKiH{pAf7*1?on;{ z!B=M%!4JkAC<;G#!D1?&KUmm41%9yO8bkQO$V*+}2b=2^fFE33su}#?(rqd5gAN0) z!VgxD35Oqim@N!`u+`XT_`&@NvG9W-Bc9^&4VATum1vmaO7n-_`$X9 z>c9`unsM-hm5T(z54vC94L>+VzZ?8u^_2DSgCkGwh94Xl;R8Qt>f{4In77U@_`zsv zefYs!7t6yBX4~isKX}nlf*%~$w>A8r>o`03!3Gmk;RoNZHNf)+#|+#DKUhz5Km6dR zK2PBXD_HJ;AG}?1Cj4OPJrDT7Ew@X+4=$}83O{JKC>(y!!MYv%pq4`+_(AEWA^c$A z!LA>*;0I3^YzjZP@J>niK|i;H@PqM1_2CEGc9;o2Sog?t_`xm?)!_%X zRtU%Q2U}{NhabG_Q~`dl-m!Xk{@}>~H~2w^rTyUt%WdfgKbU8z2mD~q68zwzNz35}hv~<|5AIBS z06!Q|zyyBKJ}eA=kgl7<4_}tCj~LX1AH3G5F8rX*@g?%}2W{@d z4^r#S@PmnYo#6-f8}EZ3TtDUs{9u0P>hI&ez3RWb@;)sZ3*y$seNqV2QS!GfgiMUJOw}4 z`%p*t!A&O};0GTL>kL15>S-VN!L9Y|;0N znX(@&_wo_^;KydNA7rnItxxRxh;5J9{t(+=V)-GKUt;A!th|VoC$aJ-c07n3FJi}& z*zqP-ABfc#V)cnweIr&MiPcwP^_f_GC)OT_wHIRTiCB9h)*gwqS7Pm%SbHbd9}w#= zi1jDL`Ws^X5wZS?Sbs*Wza!Qk66-IC^{2%8TVnn3|6}hw;CgD?IG(J8L`HV@$Os{% z(?V8dXD3n-m5dOj(x6g8*%>7(*}E%Q8QG(zv>91Jqvw>dyi7_khL&K;s3V@dVI#186(~G+qH3&j5{gfW|{W z<0YW+6wr7JXgmfqUIQA>0gd;7;sHSM0-$&TP`m*s9sv}u0E%Y-#XErFAwcmGpm+*U zyagy80~D_Tist~udw}9WK=C4=coI;&2`C-~6t4n`X92~#fZ}05@iL%z8c@6qC>{qC zuLFwb0mb`(<^zD{3xMVmfaV*3<|BaSD}d%RfaW`Z=0kwyOMvE6faY6(=3{{7Yk=l+ zfaZIE=7WIdi-6{nfaaTk=A(e-tAOUSfabe^=EH#I%Yf$7facqP=Hr0o>wxC-fad#v z@&SPI1%UDifbtE1@)3aY6@c;?fbt!H@*#loC4llNfbuPX@-cw&HGuLtfbuUPpP(Bk-z7tSB6i~htP(Bqz86qF7*M_#P(B$@ zz8O$H`jdW=%U1)+X9LQ21ImX3%9jJmrvu8j1Iot(%GU$R=L5?319~0+=y?I4=LvwG zHvoDb0qA)JpywHYo_9cg&ykh<`R7IXJWlz&_+NGfBs~s(&iF0wLw~ux=$GIBke)(H zpLy?pe7ep=@ACQgKdQB0KSh4^@BM$OUkvMVvV5g8|MSC?p5vMYe0jY;|MtK4uYY{c zjeoC5x?0lb*S9OJU$R~0*Uwu8vnwIBr+;tD_V zvEEbcKjOHb0l$~{qx~Yyf~200JB&P#`hmzfUtTZo3;&US{Bc}iZ)QnX={xkEVte>C z{UY-lSL_%39#{S&x5l5ICLULG#I>@-_YkEo{U{wLe(&*H<}Kf&<2)n2cbGMwwfp?; zkA#Td_lML5{)?aZ{?HOHg1XpmO4sB^>o{Y?b}NlzxE)LHMb}>K*ZXx_$oCz2{_X0kb(~+B zuZZ}*1O11-mH+klW*z5O-d`dA&>4Q)ZocJue5H=_m!5|dQ2JSQoO)4W&-Q=San>Kn zj>1gTfBpSB&Oi5oOux+bYcDqM{Nmxbc(%SYF1W2=%#VWKcCY+i``5VwI3Cs!4_!-a z2hy4R-MU3dk0-UexUOtZto11=rHGu-n-zE%u?Lvyc5l+Mboj zZt?8zQu}sBdOXeAY_>U zwIiz|tX){4y}DUi&YXEm2d-c0bJ(PZr?61PtzA{MX0R;&YD=S$oWv_IzYX;{ZkC}NR#8Wt#-aGN(yk@Ytbz3#BXiuR+ZrSSw2b+OU&FYqe z_jw9_VJGi(e%=f$_7v3~cg|B7{b0*x^_tD$Mak*j2kv_c2cvxIh4*X@(Pxhtcl+om zcn|1danrjw41QUvpGNr^g42Ae~X$vJ0RY#E{Z zsor;q;2uwA2pPN2>Uc-gw*CK3;=K6c+ zqX(VV*4RBW##?CI!m(k-89msrF0+Z!QEy?^k~6VutF?j4!y{&=W_Sy_P0#GSHl_{i zOEV7CDC{Hn-CZ+yR(u;+n)N7WQ*9r?pzeF6-Rf9vw{b z5qcgu=(O};J7|^So^mPEM;Mqjs7Y*feHdUkD5rnPnZoKcx3ROQ=|i4Q$<{;=J>W(rN4>s7vL&>nKK8_!!bX{JzPb@S`?E8D~4$r|ThES@R&R#|=d zMNtD#86UIzc*0EKXn3KdASVO3<+tEKwYxKgHl42CHA*#r$}_zuWEb}pMju^%uX+ao zK5Sj((zUs-aP#TW53RNeaIQ?x5e@qL3VO!#Tu+oXgv?{HY9XG!g7eBl+4Z^_!kU_< z9lTVJ!-glZ!JGT zw@}ehh1wgz{c#@3Z@c>m9URMP9db8s^`y5p;+bh^Q|`p2yInP4;f|F0lYiu_H?=(Ae>3vxjbum2Y7qMLanFfETOJx z6Z-{kI>43A&#sp=pCxpU$sRSPPe)klc}6+LXO`f0+NG@j){fBjq2`@B`(_F4uRaWW zqtOWp4{ls3=*29dpPF9A#fhEZU^TDNw;RtEVm*srX?C>}JhBcx-Nb&juw&272DMDh zz;MhZ=LxH33w1Wla!rUegV!qRoA%$BE!>(rs#lFFouNsnO%1iGfr4M!q|rkHJA=u@ zLlI*J1`7VG3XKc>*cnb=npE@lqCjCs+Azb56S_d9N-?SvuLKJ17L2~t;b|8*H>=@| z##Ms^n|`I%C^>e8ndL`}D`Oob)G@u@toEa>@WQ?Cb?wzbg5j4TffA*Ql-&EY#K9Fs!RrcWAZSd$X!ruwZ)Y>c(NE%|W&NlMwR*!GhK^ zjg=v*&7pnCI^$mypCi27aUx7f-vUMsOm!?`HAkp-XZOh~mo1=q?}tx$R>V6Y`rUR7{wc+C)DT)CNduH3eSV@)?T+SD~f(D%Kf70|8+ zYh6&8*+4wzk~7i=;fWgi$c+#%;y*SUgytI*evPWFK#5v%I%^qec)-EHo=s(W9U8#4Rg{vC6LB6=%N zUq06t3MmaRE%0Qnu=Qh)!U===!4A#fh`_pGLP_Ua2J;{G17qzcI-{+_giA}cHRgF( zf$pJ#Mb|D46XHhRIP^}lKP+ipHL7Pym@x3d6hDn!{lTusjV2Sy&l6f1Xdl-aJOH+g zbsbf$?>ynf8G`^9m4R@_Y{>CJ;q!!Y9gao!+cOY+daJn!Y4d~)m-V_fbR7iiQgw!2 zsy1Kn8NAWFV~fFX=*{&u&28rk&2QwcSIZp?SNd;XI%4B|q2Y%SA08ba0$YndEav%o zzHs?&t>Qgb4TXya(_e*~ED&7RmufW7*cwW|n{y{2bb(;x5^kTo(;C84i#e;`S|GTL zJ05S^d>C}_-e9v-H(aoEXicL5EF} z5^bQ7b@lA^Z6k!+2TSj8>OCAnGs`?_6dobGPdOW(^k_IFo1XpX@+v~882f5$`@j)U z>R!mJMOF)i+x~-V7`Cv5cJJ%>AKSlB7;bsMq}wf97}9d=#2R%M2?-m^wYs-(By`%E zyMyRBFDW%KSuwy4wr=me?4HtMVL|Z^+soInhn55Dm0Ih%ShyK3lzR5Y9?qA$y0LBM zVxdT2+R*!{4lp3&y=L-=C4%>k3dx5Kj{@tt@9WOHy+lY_H`dfTel+aW$Y^kM%f4^qev-Qdm+Xe(}-T zcV*!UwYlP~F9c$lB_JWJY3kx1k)(9>8FFsxJ zxi=JFc{6hJvKYb5GNXxdvzaj6CAj7etF=Oh0sDKa1^dE?gpy^6j&pd^Cn+CF_(T2J zl}Wab*9nFi@j-321VGzYTddNKtryy)j&79ZH5=ZV=8oFAb%U_x!GbCmeS+X}rO>QO z8#W3tr9Q;hfH|YE~9f_RSAV++Jj~|C2tZM+%fSR>oFG|k9c%B#63

!UYq##Y%ZyfUkw=6GU0m{l#fTkGg%p-JsS&kr07hb3uV@m|xm2nezCIomTlb%)TQO0AErXGDSabCbhS89N1^=0SG{sK>x! zmHN8Fm39mLPtL2lSYeBGRA>o9U|HyE=LvY5({r3H^lS0AckEVAibr^c3*k4hA%K2Y|*4K;sFZ@dnU%1ZcbhG@bz(?*NU5fW}Ke<0+u= z7SMS7$)}DRuK|tcfW~`3@c^KB0Z=>vDBb`Rj{u5S0L3$a;vGQo5TJMoP&@@F-U1Yl z0gBfE#dCn-JwWjwpm-5bJP9b?1Qd?~idO-}vw-4VK=Cl3co|SU4Jh6Q6psUn*8#=z zfZ}~X^8rBf1wiu&K=Tbi^ASMvl}|b?ZaxEOz5{4J1ZchlXg&pKz6EGL257zpXg&vM zz6WSN2xz_tXg&#Oz6oeP3TVCxXg&*Qz6)qR3~0U#Xg&>Sz71$T4rsm(Xg&{Uz7HrL z04QGoD4zf*-vB5d0VrPqD4zi+-vKBe0w`YsD4zl--vTHf11MhuD4zo;-vcNg1Snqw zD4zr<-vlTh1t?zyD4zu=-vuZi1}I+!D4zx>-v%fj2Pj_$D4z!?-v=lk2q<3&D4z%@ z-v}rl2`FC)D4z)^-w7xm3MgL+D4z-_-wG%n3n*U;D4z=`-wP-o3@Bd=D4z@{-wY@p z4Jcm?D4z`|-wh}q4k%v^D4z}}-wr4r4=7&`D4!1~-w)_{0HEgufSxA+dfou&c?6*6 z6@Z>+e2Pc8=N*8bn@Z0ot;FZ)(&LgJUB@)(lJtaA+9UrdJ?BhV$<~wBzAv(#c)VKT z*EEmw>lun{eUklMdOoNkzGWe8FX15jSNdV;FZ^-*Y$WMm@OAi>_m%%YI?G32`F@%I zPj$($&eAI3%k4yJXK{&NUhk(m$$#Kr{`ejm>v{gVZ|aj@vR&o(UPHoB)_$b+^!vSr zf1r{6M7#LhIISeU*B~A0kJ4G)&)>dfe)BzgOzULU-aW;3pWppqdG7c9A+>@3;wQd8w8V=LDYhT! zn*3-zrk>btrST58V=2G0>!P%VbY%Re6ko(#`0{%Ew|-s9KW_M5J?3gLevmR)>>A;C z@@Lm$8lL@fJCNE-#Q86;_v^Nh?>qAR+tt_VF*k_qD8IU75#M*9|IoMczaHPJ$Bg~T z`zz!hI>T?<&9_{SuhV1h_{HZdKdT-y>AKjn{a^K%>C42U5Or<;lpa${o%K8RV)M=~ z9!`4Aj#C;Je&;K{tzY=n*T(U%j(9?GX?%R}ck3}fm+wfr#`bG19!GxdSL^NX_WP^1 z!M}3+xcy4=CTFo7N!$LrpNmV+b9Jt;_Gc;X?_2U6Uw)qZ=f0N_AK3n^#1s4M`Aegq zxZdCWykTY6Nxnpnxum)25u(Q&{(gl%(PO4`JK2ipG1s3d>QD5T5>ZIgO3(PL`5q-qmAW`^H}Iz*2-GT6Km(POSHw(d32V`l3Y*+BG| zrX8c+5ItsqXhfIW2T=l*-P}8&jprF9noW2uS#)ngh@UqJMjQ*$<#B6`dQ*LF@KdQ6v{bGHyZ=CfwHqlq4K+lli9 zi5@dMyJHQa$MkjCX+rdvv0a+4CVI@|p~H_8J!aO%@`H#T)4lF~6{5#H8(3b0=rQ+H zvkV}5%yy^a-Vi;epF{g+M31>^LZ9_Sj~VINs=%^Oddw&1Tel#3Oot4w1w@azw3T$YY|%?AS&#is&&to74;^dQ6qu#@0lS*}G?KFQUh+5!-A9(POsCJXwn9 zF*RDpI#4~Pol82=V>U>i>`3&OMfUb8MD&=KT|bl~ddvbA%QJ``Q@Omye4@u3^Lj^R zqQ^W~^xR#d#~k@yZ4A+4I@xZxO7xgJL#v%7ddycl1GI@A)ANJFIHJc~klkhi(PLT^ zTN6k0n3v3J^dWl8)urCoBznyELaQ-Ek7?*-vxw+1P3|6dC3;LP&x*B)9@AV$$C&6b zUpsd%LG+kSTN&RWddxe^&!-bTW~-@BVu&8|_FMJwM33oO???-x$E=c)oHh(PMt-e)km7W9IbUokjGR*ZMW=L-d$aYCpY1 z^q96w8l(|DW^9wERF9d|dP4@$V>T|cv@y|Rszs^PBznvg<4sSA9&@$TZ9k&N^fp;! zLG+l_7atf$^qBRV>)j!G%yP3U?j(9lgIbyaM3334#K+x4k7-`B0QJ>uHacV$(PQrO z-Ef`gF%6Q<-V;5hYsB7oqQ~@TX>*L|F(WTLDo6B~i(ih9A$m-+>GLg#9y9)duN%>0 z)}B2=kLWSeZXU2Edd!BS$G;(Z%u!9$-Vi-z%8JePh#s@B`-SmDkJ)j}u zvqX>C!*FZ|qQ@NDA+re4V>S+nT1fPmHzxWR5`JF+0>>GMeZyPnlGhP4t+1cg{LN z^q8*KH^vY>rhSOPWTMC1qTaAO(PMVV9brxMm~q?JTM|9ywn`P+5k2OSt3_jp9&^vU zXUm8lb9oaFrN^K2nDyMWixWMj?Tv0Fi5_!dfrGD!9&>t{c4MN)EZQ_RgXl4JqW3xw zJ!Z<{elA3hS+nr#PhMlgKO_w@#pH!L(PK8eIc^itV@CTf8%Fe)IgyJi5k2OtGY?M@ zJ?7deE9(uM7{W;MHFO^F_}Pr>-UM30%O7qyA#F{{Vw_9A-B zZUb|d5Itsg3AdX>kJ<2))=;9yydjJ=BzjCwn{rKw9`lLiN_(QmOgNfTndmV+Jk3TD zJ*KVbjHG}9e z8yz%LC3;Mkk@qx+9&@v^!yux^R1UctMD&>9F{3vVJ?6&CrC$?0=AHUI3KBi$Y4wmg zM2~4V-`bGqF=IC8oFRJ5Yq}j*5+bhKPP%j zr`HV+5Its&5W9`&F;~Qgzax6gF*E9T6FugT#s2<8k6El{Y6{U~UeUf_O!SzEt)I3f zddxW8HCKopv+U#o)K|0c9orW~kGc2sEFgN!)F{95M2~sq*yuo_$Fz%B(Ua&g=V`XK zAbQL~z8T>}k6Fb>V;dTY)SN(DoL)@i5|0x)8U~+k6HKLHY=jX+`lIyhUhV~it7v@ zddzkz*9D@-G)-H9Ia=Ek5EM31>eJJEsYF{}3Qe@yh4r!T&^K=hc-7wo97=Bkuj zJEF%d7j%f~F>Bv*^dx%B*z!(PkBJ!2`hd0vXn%l?2hi~XIv+si3+Q?Px?X^;C!p&M z==T8hdja}A0sY>9+5@2W0;oL!YHxtrBcS#Qs67K}?||-yPxBD&egSkp0lMD+-H(9o zS3vhOp!*$Ae*mbz0MwrV>Tdw`M}Yb(K>Zn@{ti%o2&lgV)Sm+CZvpkkfck4d{W+li z9?*CIXuJS4o&Xwe0F6h0#w$SM8KChF(0B-FyaY6!0vc}tjmLn-Ye3^Upz$71JOC(O z02EIEiZ=koBY@%+K=BNqcn45C1Snnt6i)$)w*bXsfZ{bk@f@Id4^TV^C|>+jSBZ-! z0mYku;!!~HDxi24P`nE$9tIRI1B#~s#oK`5aX|4ppm-ioybowT0BF7dXg&dGz5!@H z0%*PhXg&jIz5{4J1ZchlXg&pKz6EGL257zpXg&vMz6WSN2xz_tXg&#Oz6oeP3TVCx zXg&*Qz6)qR3~0U#Xg&>Sz71$T4rsm(Xg&{Uz7HrL04QGoD4zf*-vB5d0VrPqD4zi+ z-vKBe0w`YsD4zl--vTHf13meC4WN7upnMOYd=Q{~5ukh$pnMacd=#L36`*_;pnMmg zd>Ej78K8U`pnMykd>o*B9iV(3pnM;od?28FA)tIBpnM~sd?cWJC7^sJpnNBwd?=uN zDWH5RpnNN!d@P`REuefZpnNZ&d@!JVF`#@hpnNl+d^DhZHK2SppnNx=d^n(dIiP$x zpnN-^d_16hJ)nF(pnN}|=K+A87XW&m0O)xGpyv^Qo>u^Ro&o522T1i~>x<7XB{1-p* z{h=jZgmkg}NY~^?>j&M$b}Nl{xE)LH!RC}??NvH1{3*p3_e*?vJ^a02mGh4qzE?ju zPK+O-2*@zxaIRXVnj?R1ojH|Eqq`IfaevA)*fJ zpVANN>9e!97aMqf@vw>xTVEO%e$N-bwP*OX*T?a&j(9p*W%%*ypVAMilxO?37LOyp z_G{hzcl-UdTi{mY0p=uV?&oRoO4E1vy;O$8L z9COrrQ9nns6MEFo(Y>w)^>ggCtt$0%EVJi0^>ftkQiSRUixuBY{Ty=^yHh{M;fY?< z&oO>*67_Rb8)rfN9DO|0sGsB6HRjaMQTu=k^>dt)v5)#W4(qN<{T!_?CQv^|4cj#8 z=V++WpZYnv*D$w%!Q|@pQFc>xzx`wxprmh=V-7;oBBE4u`WUV9Mx9@ zP(R0gTw+_ABb=_;}?T>gV_vc2PgapoYt-pJSiodDPGG`nU+{=NMJV zkoq|uy!DRyIX=)lNc|iW8zxgf$0}*nsh?w;?Tx9QV}EN^>gVWPZ58!%R4=ua`Z?Mi zx1@fK+LcyQKgSyz+E72o3Ta!YpX0Q_-qg?WL{4Gq=NKKdm-;zwa%)EY9Gm7=r+$u8 zS36KY$2V{8Q$NQGg-=mGNAI`=)X%X`NHX`Z@L$qNtx^X6uL4&vD+wx75#Z z&*l{B=NRihm-;!{x!b|4MWB9; zDGw5;pJTY%RO;tATy+5Tb3EZXfciOp%$z{|976>s>gRaBM>O?wT>5k`^>bX-q$Txp z>{G1~^>Z{|(3JW)HeFGg`Z?+sT0#9BYehs;KgUz!3s67D(=qd?pX1<)snpLgdF2f1 z=Qu8S3H5VyJhg)QIR>piMEx9}G_a(8jwXxdQa{Hv*EUc;$GI;Osh?wRb7Sh~7=7N5 z`Z*355=Z?UjgtCNKgSj>*3{2&WV0aZ=a_oZfciPwwJ%Kl9IH&2M*SS`F4LfXj%A{U zP(R05_qWu~(V@Hw^>e(`J&pP~-s>}z`Z@0Pyh!~Vz4kw)evY2+Mo~Y<4`b4(pX1F0 zRqE$>EBy@hbKI_VpZYlt4zEQ09IslGq<)Sirbbgg$DIb-sGp-_P<`s>*s0(H>gQNB z(3JW)ZX7s;`Z?BbdxZKqcCOc+`Z?+ryHEWbEsMucKgTu?VyK_v&Pyk$pQB0X=G4!z z^YZP>seW)pck1V8t<;G6IeMu+rGAd;1D{bp$0howsGp<1n-leOoVKz&^>Z9F^#S#B zoK#Ai`Z;!7)sp%-TAuWvevS=_7o&cT9>oHwpX1cFH>jWEVf72t&+$<$f9mJhZ%s++ z=V<%Rj`}(FX=qLT94G2cpni@OR1>M6WBAJg)X!1Rb^`TtT%a|S`Z+4CilTmw3r^cp zKgVin^{JoZE$gO1lq)z=D`;M$h{T#1MPojQ~g<>yJKgYL= zcThjamXY_VpQHV|64cL8?LkHA=jc7J2=#L`H&&+l!Q_74)X&lV#764p7zC-*&++{H z{mjqNAeQ<$o~RW~{Tz=~@}+)`N?}IS&(X={GWB!xeqD|FIXtO2V*rU)&>gQ-XrW^Hh^m!dX{Tz>7TTcBPjcu%`pQAyz z1@&{RJu#5_Io`;*LH!&Py&q9O$B`8pP(R1@6_lx;qtltI)X(vrXJzW=xV5nx^>ege zbdCBs`uou`knIbI7aLH!(`-fv0$9GjGAO8p#P z4_HV29J|!LM*SR1B;`;)M+48T)X#C=*gSlfN{jkAx>&hWKgVGoN>V?^ zVx@wqpJSO_^QoWXzKo*O&vDg;BgSl-CYt&=#$8OIevZpV-J*Vu zW5*n%evYaZRjHrjfy1S!pJUirb?WC>_rz)H=eVcVY3k>Add>^#=NPp=nEE*m?LUzE zIkrDhi~2d9RRikh=<{|o^>Z}nuR;AByE(m~evacKw5gwCH~XH{&#_l$JFey)X%Y8m0arQIQi6Q>gU*d?k(!)xbs0Y z^>e(vZ8`OG9N^!W`Z=~*w}SdPRypQR{T#>jTTJ~Nb2|^FevV0*eW{;g>Wy2}&$02j zv((S={O)no&$0Ox6YA%gU+FVHfJ>xPO*C^>ci%MUDD7 zx|;8#evb8f)T4fmp%>z*pQEKl4eIAuSTmLSIkt>@PyHM_pEad^j%N=Rq<)UtT^3S5 zNBh7V)X#Ce)@|zNIJsLO^>eIOWH0q|tTnqh^>d8b`jGlL9ZwtrshyT$0FClsGsBeMZwh1@#WFC)X#B9@H6V?SZ<>O^>Zxk(VzM`ZhC7( z{TwruA5uTZ%1Yy?pJVp49O~!zxM*GK=U8k-0qWlo_iSU6IX`Z;#;-$nf#t@k~kevU7C-k^StVG~wRKgSv!w^BdHs#XEi&+%Tm z7WH#%uWU^H92akyMg1Im6{$=891p$=rGAb9HbbbNW8v6&)X%Y_qbv1ue7G=|`Z>-w zvY~#C6)(k5KgUtchfqJqa>E8vKgW>3fz;2jfAeJO=Qyl{0o4zVX*!AeIW}>uO!b4! zGI~=#$N1BCsGno|p`O&waburX)X(wWruo#*(O8xFIqrKsllnQXzC4xc2R{U7Qa{J= z)6CBiF`)GUZ4c1?038pY;{|j+fX)}t^#F9e09{W&*Bj990qFMv^m_vOy#cicKZ1z{svHg z1gO6P)Sm(B?*R3Ofci^7{VAaS7Epf-sJ{l(p9AXe0gVTM#tT5>383)?(0BxByaF_y z0UGZBjfa57OF-i(pz#*acnoN~1~i@n8t(zc1AyWMK=A~icmq&80w`Vq6wd&PcL2ph zfZ`=U@f4tV3s5`;C|&~;&jE_}0L6oV;zdC5B%pW`P&^7KUIi4-0*ZG5#lwK&WkB&X zpm-ZlJPs&c2Ncf(iuVD{2cR!MUjQ_p05snKG#>#pUja0q0W{wMG#>&qUjj6r0yN(O zG#>*rUjsCs12o?QG#>;sUj#It1T^0SG#>>tUj;Ou1vK9UG#>^uUj{Uv1~lIWG#>{v zUk5aw2Q=RYln(%uF94KJ_*5r?%QpbZM*zxK0Lo_o%69%<$~OVZM*+%LeX0k*<+A|gy8z|G0OiX7<IWTLI-`0p)7}<#Pe$ zdjaKx0p*JU<&y#Bn*rsc0p+U!<+B0hy8-3H0p-g-`FC^qbU^ubK>2t;`FcS4d_ehr zK+gjJJumoF=Zt%v0O)xGpyv^Qo>u^Ro&o52#~<{AZf5-RCh570^eMenW+px_lHU8n z&yTdkFGRFu+mqI_Z_hYE{JZqL-d=ppBdxbfm#r6qp8rV4@w0vY@x2=M1n;lw2mQbD zJuLs9>XKmnpk=c!w=1a~#I*SGdOy`k{sRZ|f zf1+JT`awK?{Co9-yTmu;;<#S{zo+}7^@BRCzua$2_oIKCFR#a)#D4((*uS#~ONxWO zT|XH3i@%Ti=k><*+Oc+HEw%~#zL1Xi_jEC?l$y?u(ud(V_FLYU`W}6lzrfBvLA(z5 z{I#U>7ne)t|99(ur2aKd^!GR;zF+xwzZWbW|KIbOCHy_x`Sz{k7q7$^vENndAAiRy z-+qmM_x-EK&gRhtm885&gxJ4J@c|wer1ysHJF#~2x&2H1jaA1l zulKp{|7w5FKhFAIy=90PZ%MxpyD~Wb{@L}GS;k*(2U2@6>+t3EezkV-SC2RUcJ;M- z%ZRVc$3*%k>Uh(CDyZ>WfrD8v}e0j zVsWXm(ns_^aj}w{1G`%F#Xo4CX04aso3!@t&wtw$kn#_4;)zM^Cc%ldgU|UYYHel9 zt;O$sZavT4Y&|P+Jt_Y9T>H)PW9?Boj{N3T>5goDX}iDY-QtD*k9QyhJ)#r@*rlltofbbLQb51KHFU57|I9c>-ELm_R z^=sTF`Zd~IVt$R5qF-ZR2jb{p(?q{U`<~3N@#aG2*LY5g`8Adm{Te-Y zGrz`(qF>|g!_2SIO!RBqcA5D#hKPQR9@Cg#qrT|Z*tHGwYb+-EHBQ{l{2HG-GrvZQ zVCL6oB>FYhQD=UQ$)aE5nQqLl(MI%ZT$siD8jp&8jY~|JUt?dGrz_Qj?AyIkm%P~_a5_WTqgQ8 z?m5r=8jp&8jnii{zsB04U*oG?%&)PP=+{_&DD!K~IL`bU8y#bQjg3XWMyDCfuW_a5 z*I3@2`8DntStI9>NjP6jWb2R z#)FQ`ud$%$*SPvT^J|O~{Tf>hV}6ZYMZd-qotR(aV$rYhS#9RmSVHt`YrKjVg7RU*mMquQ9MY^J^?E`Zewy#rzr%*J6H+8{09z#_Q{tUt?k<^K0xX z`ZcyRWPXjtqF-a#Oy<{EPV{T+w4M1izIwp?8v7eCzs5zPUt`cc=GS;|5A$mrFqQc= z#+x(0#;B^yud$)%*XUb{`8C!M{Th3XVSbISqF>`%V1A8lMZZSKWqyrCMZd-x{g_|l zAknXJj2ZK5d_9BtHC}nb{2DKLFu%s)ZJ1wUtmxNRR$zXO3q`+1Qy=EnxIpx4T&KhQ z8qE#5J|Mh(%gF+7X;H9nao`ZeBXevL0iF~7#Jmdvklx#-u}-<$b0s)>G$ zmX(-aqo(NBSg||vYkV<>`8DpI&iop0K4N~2<&v1cP8HFwv2}6g*En4CYxM8S{2FaV zzs7+@a;RTpA-^t;FW8f%JvjRh((zs8SmnO|c&V1A8bM8C$lcbQ+~ zIMJ_hvmWznyf%sXHST`E{2IH7evKz?Fu%r~O_*O})OzOE=qLI$?pI}gjW=E}zec|a z%&)PS=-0TXF7s<#B>FYB=*j#VPscI8#(^7|U*kN{uhCVT`88G){Th|-GQUPk(XY|B zA@gfg68##d-DiG{Ek(b^Cg+%6V`?t*YwX{H`88&AW`2#Un=`-0-lAXQ?5@nOaZ5V$ zYs?L1evMN_zs3fs%&)P5=+`*$B=c)rY{&c>9iK73#wn)EuW{!R=GVBrE%R$!skDyz zHMSJ}8oLKEzs5$QU*kka=GUk!`Zd}aFu%s*8<}5YnPJSYaiQqfsC|L?HF}7CjR)+R zU*l}iuhHZb^J^?8`Zbz%Vt$P~)ROHcw)H zjqR2*zsC6T%&)P15c6v+?8W>VZ_iN)1uxFVVPHLkwM z{2D!cm|x@T$IP$MqcrntL=0$sK-&YfKS0L==y(C051{h}bUgrFFF@B5(DerNdjR^q z0R5hTes4hS0Z@AZ)SdvfH$d$XP4dqCp>pz#9G zcmim=0W=-~8m|D2XMn~#K;t2x@evDBb`R zj{u5S0L3$a;vGQo5TJMoP&@@F-U1Yl0gBfE#dCn-JwWjwpm-5bJP9b?1Qd?~idO-} zvw-4VNaN#SK=Cr5cp6Z=4JaN56t4q{=K;n0faU{$<_m!46M*I$faW8B<|}~aGl1qh zfaXJh=1YL)Q-J1MfaYU>=4*iFbAaZ1faZgM=8J&llYr)%faars=Bt3_vw-Hifab%1 z=F5QQ(}3pNfac?X=Iemw^ML02fbs#Ke51L10ib*WpnL1cc`B*^tT0r?+K>1!k`Cvf#VnF$1K>21s`Dj4-YC!pHK>2P!`EWq_azOcX zK>2n+`FKG2dO-PnK>2<^&jSEGF97sB0nqaXK+hupJ+A=tJOj}44pDDeR7p>K&XYBo zJ?9kh4i5c-_4{wjN!LeUt}}!`K|O^ z%)b%8y*QE2G+}?Y6t`z}lHZ=E$dRYm-|LI(>BJVK|B{Z+N@TY<_IK&<^83v1`L3SR z@8`SuUBiF#a_ozm;>$nR#pkXf{=rRr-YKnUasBe~;N$y$@gLt`V^5<0x~@6;E8lnY|9_qOpY9jyn(L4K^6x0M15f8KulJ`r z`xpQ5$F-}NU$R|&?mZ~W@vPlQ<8glD-mVF3eW~63ey{0Yd=vf2seSIfp&T^c{M~ib zC0!sM-~PS2>yXLpPK)Dy1+4q{(Yosxv47wWLIzSlpfu_C_#?Y4pWcBk!rqk@1Goa> zd(u)o_wBmtb-(y~`G2mvjuYcqYw_aY{zaPCS&8dO*I3eBk8v1F|1@Tp8~t>3m|{!* zAzf!3`q%vbBlRyh&iN;o_fbu=7A!9^eO$N?dN|zzV|-c^-JDoKkj-Y{7bLLx9aVazVbSR{H1pNqrO}~ z>C5`^2jXK!X}p&{rCvC{@5XpB+YYAe;z)(rIxRUNial3^-{go_NR#v8)RuR`P zSRf^s?IXlMe(rc&Q|P@*D3$oMt)WAQJB@L6v~?RglzvV9)3C@!MnlTd@k^gdqMlp6 z5AttmKAYZ6JkvZ~pWY`$IGO)e__SS>PrC2UJ$el_Gws-NC`l0xbscVROXkQLpLRgL zDeZ?!%gKhtqoM!&^q>6Ve*Yl0e`);t9rsID?!WPg<9;3Sv?FGT?Na2wTX&mZyG%Lt zyIuY_THv3bC2p6}yiZ5$ucUAN-FjltJT7A+l)ts>dLCyK^6h!p=bD0dx=acldNq%SUtg&_)9gwfJN7PV z{l*|Ik3$+5Of@x5&Ew4HANm~ak&?$1DwkcI>3BJhkDk3Wx?0$!JU(GDc75u>i+TJ| z-AQ@ThYNYUcFfwLw~ZCNYIXJ&A>@4C^4|CNuQa%OE{`{lHtI0JRKdqKRlPQC-Pye5 zR-SDZzOJC)SyiE*Z{V4{<>o3S9nTe2aHUy~PpNC1&Rgy_)b`lsny2#EZ{V8sS?!ba zxInidYuk@Fna9(H)_hoM{)s$Zw9iy8Y*nr>nObqTriDEDdI-9?o07^h3k0 zod+t|#j@C4t=ot4mPdNr4?E(l;PiPWp3e&^*x~XO3+p8Z^VT09zWL>;HVPiAUuKrl z)x^BzixOAV+T*3*BO0By9Bi!M=a+9^xp(zI-umy{52R(!QLw(*vcWq$Dmb@mM~6ZM z6l_v9s@g7O%%Mei0<94stTUctYW3aHIVmxeS^@9#)b-R zdVhDLMc3l_PNp1ke(mhIq?yhFj`TCW<`El|PA9@pJd zhAY^@XSb_Wdj%_X+FWy+rh?DKp9{J0a(CYL$F}HpbJYa}`?HPwzx zQ}7dIzc+ivDmbU7L7aoNf?sy=YkRDxf(P`RR_bgA1&1%*Uutq21&6ja_uSoB!HN2Z z3eT>o;2STZmfx+Q;35r+tUg>)!7b19*;}KKg3FC^xccJl&b;fhFJ_Zjo97C?aA$%4 zg9i$BZd~17>6U`$99od=mZsps@1~D8Kd)c|kMObXCl##LL~ZGZ!wRl-=Cr==kMveO~H|)?-VS!Nx?OHEid(Kt%CdMuGm~PO2M9kbMDNHRB+*;1&-HU zqTpw@7Os9DuHcs^9MX!;Q*bqZqi4n;3RVsc4B8N=;K=Hios9z&JiYEnH)UT1Cv8e! zoav?DVM)av<#;H#n)a+v?P&^b`ylCr=M)9+>wE6$t4Rvhp4H7RaDsyO9Ch0yxGK1m zo{?247X>fs*|Xr=u?pTWN*MmZQNbY>H@B@kTEScDt{iCLpy2C;7Dq3%Q?N$O!m4j< z6@32A)ESN=6g;$F!*ba+3f}jsY3l4@3V!*q#N(FM3VwdQ+|;Zg3cfh<@y?^~Ao-)pvHos&|88+mT{oV>(ZlSJW>Bf`7Scva3v#3TgK0f)HkTfc*OMX6|y@i_8;v! z`cjIF`&BBD3No&5wzyP`jLW?=9UUs;GdT~hO_lM0wlxOW$#{0R%IAB@xZt>0eIps4 zDcE6lQyIs#OxapZ#z`$6tXGq9oB2~5K6X?be_(ah+gUPhd3jc;+cMVeKlJWJ83#@2 zJ@lB23p89ZZoiB*LX$MN$oRGM(JpIb{BqZ|0!w9FqSva{VKNS={V^jz#u-AbqBCT? zv_rsrHyLkz_GGrRjN{Mu%&?cSOVejdhRJwyL8I6KGB#`VtZZ)?hu+FK*(wxpvFS&h9r`kMUjHnpwTxqPTSPUN@w|u!IgMrPexZSH0~wdQ(zHt*8Bcs| zWn4qXBcIlEtSaNIaSabwlyUpz4Z4<>aZ1>$+%hsAQqk*TDH)%&x^%IGj8CpCms?E6 zhdN9)DJtXn<19B8lJT)7A6qHQIJwvR>mNHP+SmL=7gxQP@v|+peR5^obY#TzH!|*a z=t<~n8QTtgx$mWn54-t)$d++s*SUS3%Q*18>VYg7D|^2Zp32xM!1nB88AnwaKmL)7 z`x9`J-<+Nkc~8bs2T#qpE92M34FfY|y!5ux{5vuhKJHq3 zTgK;lB^Ifr%#St92m`>cZH+&%lWr<_B4AG^xA zh1*&?IX`XmZlIit*j=}j^GT!59p!A-xRt(~*JLhhF6Xv>(;CS6Y5$X2a@PGgQ&Y|f zeWKLmJY;H}Vsd_Ztbnqdr(9^6dscQm-AC+yA?Fs8<~@;f`*u6;%ekIf&D(NrGUeiwFtFlYZ zGs3QJlXKM>hc?UE$mLwDoRdNdZIE-ZTK(6`d6VaEy=}{_l=GR7x0lN~ zJ0N+foU?YFSuE$69*-8vxo-XH5pqteX1_qrck3LPC+F#H^}^(AI&y!goTKA=hsb&G zi1)#APVw3iBbhtjpT`C`&DqsIb(Xkvm_pHG2 zki&@_fU@K8rJ0aTolTPleUySjkK?~EGcIu4?@l7e z`U#sk9y4|Y#~1H}a-34po8z8^CUCr9u^q?#E)U>%>n3xKwX2$NJYQ3f6jT4|1-IjL}5zMT@sH%H}+mtVgbZ?iZalJS7!iuG=D?7#Oa$J>@&;`rjp zGaUCfKEd&++`}Bdewo1W?#BB#t`@nIIYd$tsQ$0wOss zZ?Tl)!upFiUS%H6as8R|I8MD5%5mv_b2v7A8p!dh)w4L>Gtr;p_QQQSZsy>_@i0Fx zj-&T^a(uI>2ggP2r*T~2>Qs)a4xhqtlXq?$kBgqfvHGxy9Cy&3z_EFu@f=TlIF94e z=`I{kx#`St*{4n%cT(ZmztLE3x%t2`99N#_$g$I<(Hy7L;5lQ$C~mpVIR}m{TJd~m zg*~@?L0O)Q2itMWvr6*(I&37j{6ck}jW^qJ%X2&Ny#MwHZh1E!p2s%e`R=*l-1^?0 zJeO_Gv+X?_Zhf;zp2G(5T%`)nd#(@TzTbH@&#N4HUelWAR)u+Pe9@ZQp354Z?@#5~ zxhKyr8}dA~FwYBa4&}D*4Lp}#&T}JAo)c|&PUy&Uxkfy1F2nQ8w?nx7d)?-FelpLy zck!IIn&+pXJU{Z_`S4htormz8Va{`TL!Li0<2kf8&&Mk8yu3Ki#guq1_;N6R{+T>` zr}O;o63>s4dG36eXN~1;G3WVRSDxo~=DBkx zo-20XxrhnRszyB56L=onp6BRxJgc;!%hP zAnt-#A8}K}H4v9Wtcv)3CH{P0Abx;29r0zv$%v022E@A%Z$`WUaTMa^h?gKwpNQBMu}eNY7A+rx*fAd-g_hfYBio_%G2`vwR^K8N@M;!F8(3R<3q_$uP-i1GM-6D_}uI0Nxr#P<}77!aE zHbHEPxFcdS#GMg$Mcf^+1!7CYJrVat+!wJG;{J#SA|8x*2x4o*Hi$<1K zh{qrvi`W_QIK<--PeeQk@npn!emD&+pN`lQu@_<=#J-6A5CGhjVw~?QhnAN|tckc1;>w7tA+CmaU+xIW^Bh_w+nL5%aC&Cv1|h;OSqta8C$ug`zxE9++e6VU7hrZRd)Vb*V*Ui z>htSZumX+t;syBJ^;Buh)|0NMbiKas^XIM4A0b{ZE%C&D$06VM3;(L$$}djMN@w?z zG(P=qAHV7^{e8!c#}O@YGlpWnA#L?X*XNHD$2V!*$Njxjr_t&TYp>FA;ZLa@o8A8M zdRpQa?K8f-9^U@X#`(uj-(AP}E9*o5+&xr?Y`^=DKA!yB)z{YN zPyfn1P{fZurN6ZO{IAFN-eGk;5`uxwo@;dyi^VpxYKEK-&*3+@Urv!iem>p3g@0REZ!{PiER{Y&HD@3{Xj4G+KEmvP*$Bc6d?CLag=)Ajk?ny|dg z?{@jiHL1VlfN{H&=6z=#@$K?Q*XP$X7mZ#%b5<-%{b`~2^g)`phKTo1oOrxi;`c3E zv+YUidA4EfCjMP&?`L%Q^>RekZ1Lse`OIPd-~QZip%Yi1zv4POu0DT((Qmo>{P5C@ ztIw}oO_{6DKT3ZeSD(N1`d3_i{(5`dx%&KfyWZpK^Ov6aUR_?Fe|))JTz&qJvo><| z`FlQ&Osc_4%)lD9+XA*BG72)#o2M(uS+gzsPqrSD)W& z;XtlF|B2-4Tz&qUU5vT<{El-DbM^VHu9$Q6`8`c;aP|4KR@dR`^M5#|&(-ID*JC|b zpWor7J6E57*bZ~9KEKJR23&pqE~krf_4yB}-{b1@k8W+u)#neKmB!WQA2uM4tIzMC zR+_8N|9E92SD$}>fsR~#{)gvoarOE8`6O`l`E3U-iOYOX$i6D7Vr ze~$yNx%&KR-CA(<`RARkz}4rk{CEympI>#&F0MZR)p;+u`ux|{x8v&bSKFn^)#qhq5;#MkFhsr+;Oq07_vY*KKcC0f=YQkM*XLKB%-84tSeviUAAM*kSD*j*7`{IL zuzq}f{!<0{`us|7S910Fx2p2>`Iiso>+?6?&)4VQc-oh%&tIh`U!Q+y6}~?IlRA8T z{+>IrU@3v%kLL) z_4)f$=IitKxz5+;uh|3D=g;En^EY|R*XOrM&+_Uo(ZT&%f*?U!Q-A9$%lo z`E>KK~*IzCQo;8GL>IrkDBp`~gk*`uw%}@%8z4d+_!7KMvvR^OwEO*XLi^ zn6J+{cD$JghN8qe3~ zA8NqY=YLz9ug~v%iLcK;t`1+Hf8s*EKL6_{e0~0mseFC@y<_+_d3bMy7TqaBWb^g;KfdDY^Uv1f z>+{EV;p_9aapvpu7ggr#^WSg5*XLJm&e!K37sl7;KU$Tq&+l@Pug~w?kFU?4_4!*m@%8!t$KH7d)VM!>yt0zLD=RBx?~KS!$sU`~En(SNGe!_uM}muRfpWoaa2}^PJ`OdeuFMety%g z=;uFE9{v0knxmipPHXh@Cnlhu|I=0U^Y5&Ie*Wj`=;wE{N?P?&p&D{`uR1NqMv_$ z3H0-S>V_n@D@%TV<5+nzu_|I9w< z=YKE({rnB>(a*o-6Z-jer=y>L_8j!{AJRoX|H$U(=T9Dne*UW|=;zNBj(+~Yh&p&Yu z`uR=EqMv`-TlDh>=SDw&ZV&YH7l}nb{|rm?^Pd=we*Ww=(a+z}AN~A6^U=@0zX1CA z%{9=^KhPKb{QDN5pFb@S{rrAr=;ycGhkkx1d-U^1l|?`QB}?@4H@t*?{x_Q>=L6Bt z-?TOQ`F91QpZ|3t`uXe6L_dFoBl`J04A9TNX(;;nN47vezeY9m^S6A0e*UX7(a%4t zH~RU*Qqj-fy*v8(6P(b`KkY2~`8BVhpFihd^z$DXkAD8shUn+tnFsy+`zE5Fe@z|q z^9L12KYxq?`uW$cKtI3TCiL@{JcWM#>@Mi%KkkZtes>S_^S|{#KmVd>=;z-(2L1dE z7onfuQ4jt6I@8e4U%n{%`JWC(KYxQX^z-+cgMR+52hh*2*%|%(Gb^E=zhNo#^BY$< zvrP0+-)e+@{?$X!&;Ka|{rmxg(9d7h75)60=IH0&o(ui_n^MrvZ)J~u{_Pjg&u=^e z{ruDSp`SlTN%Zr#DS>`|6Mgja_qd3D{&k+{=TFOne*VDo=;tpt68-!$=AxfJ_#*oG z3q_%yUwbI}`8yUvKYy-`=;v<{hJOB`M(F3Sb^`tUW3|!GuaN`&{7XBdpMTm3^z$Dw zKtKPs-stDgSrYyHCr!}L|Mmd-`L`OOpFidR`uT@{-VMI}@Feu}x3@z-zjt5s^XK^NpU(>Y{8v24&p!$M{0p<8pMQ8M^z%Cepr3!nPW1DeX`r9q zY#sXfZ`q@tKW#Mn`Q2uspa0<&^z%2lfPQ|X2k7TFzK?$X3P;e--`y7d{6Y88&wr>m z`uXdrqo04g7y9|@-#|bAB7gMrXV*nP|EOZ<=TBXUe*Q+@=;wc@jeh`*<{HE{G&#(Ug{roW%;=q^OF$n$q6TH#Szv3MF`Af7wKmYs`^z-k1eGIPO z!2tdI5o^%TU!Xnu`R(=5&u?#tetzG{=;z=4%nxpF^lTsC<7R7tcNwCe-^>jC{NdBl z&+mK({rrL5(a#_M9R2*uebLX~dmQ@tBQ4R-f8HAX{2$zA!2UK1b_I6K?gG4es59`^ zNc8jjTcV#oBnAEaX&cbbzj^@r`7c#QKmQFi^z(mwjDG%QQRwIY6pem<&*$jlKb;*p zTUGS)hxJB3zo!TK`QxvlkH2FXWD5uM^ZSOQkN;?0N8F_${=M2Y8^5 zzi}z#O*_%Y-@grVsaW*yZ+AsLR|(npGWz$UrXr85iF_yyef!>PkRMtg+iD|g-bKIu zav$WEHpq$fkf*96J6uJdexM(6RVUYrXnW~L{4gj z+_nmGOn&4&@6cE8AA@}K9CBfqKNyvA|$8SPD{#WGVKSw_P+e7gBij$Autv`;JA|HQrPaHqn4f$4QWG!># zL8i#J$iHt({(ZgHI6uJ{`F3;UsAkA1O^~ZKMjl7L{p(76`(fnUw$e+KHeEIR@$JZwwOMd*5NUJG+vT8RtNWQ z3-LH&W8wnD547?6_7g849ztwHtV{g91YZ9w;)BGiiJggu5StL!BGx9(M*Olk?%!?V z)5L+q8;F+@yAh8k9!A`U*o?RZaXsQH#HEP~6XzyYBYs~Dk52;eW8xU%NaAb67l=<0 zhY|-9?<3w#yn}cnu`lsj;#I`Uh?fvACZ0z;hj#={lcN@d{CVas`Ej0KB%4#WJf^teE7e8K9v0Y{QLPC@s|E?{QMt( z(VvyIJ#02|->UR{z?YK$;8?AHmgj))$M5DpdbVUnjKAJ}Nc~5ys~`D%J>-523;6?} z%zK(rU$)Mqb*J(l{qB{UwXg3-o*6^(tYns-pS>>sUO)d8L)n=Y01JYB?0MB{e;>~* zKmQYYTw!Ovg7iFK+)(xUBOaSSzW&I}N0P@V<9`0n^4Fbzm!CgT?s2k`A3T13sUrWm zmwcXdj5Ev6&wiGesqKK^kJ@n70uejU-1Ut6sFc~-je z%=Ytlk-v+RUibO=Uh*`iw3e+`X}|bVTE|aX{d}IDd_zt1pU>m#&uXmv{nMZIhHEsG z-B;QBG3kEu`)V~ccWEd~Tyi(dwZ+dLUunHWw*2|LEOF=l#+^{Uu71_euO(kc=vV#Y zI`aA(?_I`kO8N2lv*%gff8=?VdB;Put?W$vXFc!8R#Zjfr+?{b7Qj zjP`j7{^I)}k1Tn})YY@C{=w$GFDSoV2HTi$c{yZbz0J!D5g`uwZ<-Y-j@ zMwzx#{Jo#_jxVw+et`MA`#jn!RO>R+9`t{}74y23zW240KVM0AA+!5D0seR%NVh9p zO5aZS(D&B0yUDieBHv#<`38yWWIva_-_~9)V?$rrrSv>(=Y{jUv-;)6 zjrP#zskC+k^m$ITONBmz=mLG75&dJK&vP(9ANoAT=Zv7w)1|FH^mztE zJ42tx*|RhBd9;iSpwDCIr3rl=vn$x=`SKF`JSz?FLZ7FD+8*fhEcVAf&yL2v(C4vV zf_;n~^m(rB!ah&0dD_tDDZkzW z`aDOw1Vf)^UBh?K=gHr$8T5H{%<@2=r*-bS(C3+W8T&l`145zCQ$~Fm^m)pi#y-yl zH|+CxyJ4RvtWrnl^MoX0pGT*9Ug-0<+hd>SP=D<6%(;wxp3r3M^EepagFa8N3HEu6 z^Y4K^&slfu^St?jeV(aB_CTK}`V#heT<2h)=jdtd^Gw}U!y zbFj~ItRnV#E*W5-CnOI0Jlk}z&*OOv`#c8yu+KATHTHQL+`>N37(MLslnuf@k6t47 zd7{T*pQlCz?DK>KW1pwRGVJpNe!xD@w87Ztu{Om%&)aI)=W*(ZeV(qpvCp&kF7|n1 zPGO&?%XIAXOq_>(9t$1p^NiQSKF^13*yp);0{c8iD`B4}??deK9PNsIo_@2i&r|dy z_IW((VV}pO6ZUzWhhd**=2h(ToGFieo+9er(B~Om2Kzj%?_;0mX?N`N41R-sp1rBq z=Q(p1`#i^nV4o*^D)xD{zsEk0UlZ)}Xt`paM|}|Xd0N|IpU1%s`#ifMvCs3SHuia@ zT40~&vn%#_>RVx-$1n!_JO^rGpXXyS?DNF;z&_9Y*VyNo)(iVQ3$tOL=ioi;^US-2 zeICoZ*yq_ueV*6U=P_uBeV#7Mu+LMd1onBtsL!MCihZ8Z)aPm10sB1p&S9S?j`}=_ z)aThmeV!(ju+OuD`aGMc&$Eg8JbDS(=h2#qeV!=l^NgcD&wc9i9Hc(adg}8;P@hMa z`aBD%&vTjjJg(H|=}LVbBkJ?Kqdt!-^?7zvpQkGIdETmHpXVC&d7jt7K2IO&^Y~Mr zr#tm|x>28JGxd2&Q=i9x`aA`w&y$DxJY}iR<4t{@_eR*~*-3q#W7Ow4M}3~D)aMDN zK2Im=^DL)6PiN}$RHZ&o8|w3np+3(x>hmn3KF>Jn^Jr0@X9V?mEU3>DYlnTF>eS~s zy#)I_9jMQ9kor7(sn4^8`aBb;&$EU4Jlm+xGlu#+=L4|MlY{y^derAJq(09w>hnCc z!#+hoN5#Xe6%>hsuApGSxKJR7Oc<3fF&z)RTYv7|oFE@SNTbfZ4cn^f%cxKW?S zkor6)$77%8@e1to+hmn0i+!HU&#}+rNPV6USFq1BkNP|l zsn2t!74~@=Q=i9~`aDP6u+L*jeI6a^^VFa|Pf~O2^UO8CK2O+V?DJSqpGS-OJm%Er zxz!E(JmaX(qfULE`B$;eGj|a7d74w7ryccqYEqx49`$)jQlF<0^?3$TpQj}Cd0uVA zK9AQ)?DI^YhJ79*>hol$KF?U{^Jr3^rz-V%b}z&}&#SW7=UL*6eV)}tu+L*feIEZ* z?DJfljeVZ8`?1gC+zI>FyStj~WOsUV4m-;-Tsn1i6`aG*$u+KB8 zBldZ8sn1iC`aGBIu+O7IeV$!5*ynk*7yCT+y4dFlD2{!ez)INX3B7=Qp4`;u8BTqk z($wdfHv;=S&)u=lQ;zyPPIs}-<1z&MJo}1bpJ%im_IWm*#XiruX4vOhd>s2c*GpiZ zXIOUZ^CWk|K2Pj%?DLeQK93gld4}s^pQi%#dAd`dCl~d3np2wj&$Bxf`#d+DvCq?h`aHuevCmVL`aFG{u+I~(fqkCPlGx`tw;TIBxBaot zEvUB^C8)DGT;?DOQMK2OMP?DHgb z!#+hoOn!9I_t1NM1}P@g9|^?B-1pT{xC74FZjY%ajphByPq-oidl+(7K}ync^; zp8C}1xzZo|JQ~#J(WE|4P3rT6-NimnP3rTUd4@fn_t}u^SHV8dhhEs{Ikg!3JjJNb zGo>{4dFI$-pXbUY?D4#)gY2>vdptD@BKyw89?#6&$nJ}=$1}7f@@0SQ@yu$C+%^XL zJJ(&1lPV$)56AvaHtO>%se$9M53sj$%o{m3^?4ST!13yLu&)!m9=Ra(c?wgXXRR8} z_q>8VotqnwJ4{5rVvgKRANi0P@~bH9<=i=hJajd(^AzMl)aS`ZeIBdIIR8UF0)aR+X5XUP{K~5ckys-~*aZ}{BO_8hBKt5a+IjJ!6>72;bKcSzj zVj{9{JhIPS3s_j@2;=!$%|6LP+e$U{0HN47&A)dsm- zE98V0$hVD0q#-x#^7A+mi#g{wQK1;owcEsnY zuhWzGA@y}86Bi{8EQybg1@RZ^<@gg1BrZgJj`}!m#4U-l6NhQz{w*TzOI(>anff$g z#N5ZRqw)5{<%rX$@4~&CU>f%#o7iMik6LF3NEqlmc| z!u^RBG`}u!1>)kwTEt(9;`(?){FwM2@eSezUk5$_@1M(jtthIkqAB4T&q8N|-S zPQ>=aqlrflTN7In_an9-?oQl=*qqpuxE*mT;ugfsiJK5NB5p`rpSU)04dQCVRf($* z>l0TZE>B#JSdX|Au`aO=u{LoD;^M@`h>H*xA}*+e^V4`f;=D>&i^g*+;aoJ%oRh|L z5Ni;t6RRoVFGcYA=reH|aVqgACH#@bQ!>c!Y5qInWF`ET#@{I6*EG(YMB~hfG@g(_ zeo6CRDByAji{u=7%&MmqC6&^Y0VKD&ZI!zo&$wX`DHV z#+mQZ_?-;$ZJHmMLB2)vnImZYW(N5N&A+aMuhBU3RT^i$LgUPrX`DHn#xG@%FVg%A zO87jDE8}xCKP-cMmgb*P!l!AR`4o*apQP~<8RX+M|5ye&l;$5*!bfOa86T$kA;gC= z$iXx}D1&^E<})9l@%`(J|DB%pfnI`ONcad|n25F3oq(AkU%s zvz72H8fTtKj#^E4WF&LB^v`BR7|XOJh+d}b#aXP!vo%oAwb zQ3*?Z9{&COjCjlcH+`O>zv$1*+8$QTl|P@C)x8J5d;k9Em691T{(7IM z_&;)8{mAEE+grA7EaVS>GVi(98rghl-KqRXzkB6o?d$uIXC{(7E1A{jVXw=-x6h+3 z_t*u%f?)r1X7_pA<sWuRp?JQTyZTkIZ}|d5kjN=LwUqhksX}CqV9T zvXUP>Wv@S1Hph)}PPIs*itW?U(X( z^{ZW)8}fCe>e76BZqv}v`2G~9sU|xwv#Ce?BhNGC>*LQp@7(*B9*>NA=^y>#aq!5j zr+~k7y;;{w9}p;ervKl1>AgD3_995`0sq}z`X6;$x8{|7A7CSYbd`NRFn%N3Pw911 z_4)ZPofiMNjrsFIZTUU$3c&YEzuRB`qkn%0*eAPPEBSsXTfbh(s`dMiTXes1hk5-< zpCc{g>qxq(-|e}V{vBL$^zVe+A{``+^^3wcD+>a(r>zc0KD`r7XIL+w?4NUy!40dM}wC>*TSvfrSCPlF?i`U ztX;uNKfeDc@Y3s@S_@wK=1!X6rJw2E7`*g#=Y0e(y~dLQ;HAHG^%{8Tr?`#;FMaY@ zTkz7~P1yuq`q(~+;HCFDeF(ht6~;CPFa6S6y5OZha=syW=^wfu1}}YnPc87$+uVHu zUixECt-woPu$149M59Zg()w&<+!ws`2{X%pm;Ob;mf)o?ZG8&7^i4y}!At+N{yp&0 zH}$IsUiyVMnu3?!&}KV$>CY6O3SRo&56rWUiv|absw2&DaIYj zmH;pPkhY7#OW!S55P0cNq`n0&ea@0i!AoDKrWSbVuYafwUiv#1+t%4#?@0RowjX{J zy!4jEJ;6&qHNMZIfrAgH&kxyk_E_Tz3SJvDD|flaA?f48hMIwwewq<_>6cB-177;B z=k@yyDXiFj?2+wLC&V2}zrM4L&`V$28ol&~4@85Pe%|SzaTZ33?K><9055$=A@tIF zEJ82+pthXQM6ca`u!{GgI@YPX6U8w z+7P|;{T@1LryLJT-@ZuH2Jq51dlh`D);h)bf>!9Ickn|meVv2orN5?yUiv0E(Mum& z5WVyb2B4R|a;mv&a1F)nSIv%I`sAbJrGJ-WsrTep7q&(l@q3Fa4?u=%uey8ol(FKdlBYy@L*V z>Aj-ROFz3adg)swpqKt?3VP|wN1~U$mlb;H*G)n%eZX7v(%)@_Uixv)=%rsZ5WV!8 zBhX84H66Y5rz6lyU$+)|>F@PIFTI-!dg<>DL@)i9X!O#rt$|+pw4&&x&qZGPlH{eo z-V?p_pES@*--NvMmB>q9fV}jh$V(qiUi#wXrSC*u`f}u@e@0$<3-Z$Ylb3!TdFgG* zOW$cnyR9=!73cGC$BDO01g_Ge_vJzYpC>PUyIT{N?C7A_zN3Cp$*BVOUOhOWlfcpB zrN2U6djBy~^WHE~T%Xx3)AzdsJ~6HAj`;%n*u5__Qs5;`V~U#!eC1C3rfLG0YFW@f zzrZV;%}cy#ueiM!2iu59fmiC}y&Wp>==Rt{nRy-tJ3ePx94hV{@(zkS){5ntLV_Fto{R$QXMJ0s>5h!Z%# z!t&8gf%8o6VR=sASyk6K91(bhN0|0rfv4G>HQgexOHj1>T7g$}^K0ZOuy(~S@pA>9 z*aE%ub=uBd?j($xB)yt%CveZ}-QsNo&QmLC%^-ozvbEgRSK#;tNkw}IT=PNvMRS2) zgf+O)K9RIoYfo1|1*^#uck-*(P)!S58;3i&AQ)&oY{zlc=RRunLrfHW-xs>cZ1Zx21x_nyGLP8K;FEpVUEyp=>Aai{(AC}I4} zQS{R999&`EU18k%dg=Tk-_t-Zedx;VmG21iLqc~RzAdmp_M5##UaNOMIZ_z+xVwCn z$d6*tOW$f;@mIHm`6bGsm%igW|8C;=ygakDM2=d5UiwG((M#WZP=j_6!u78j@m5RZ zs9NZy*WZO+de4O+BW?=YFDX>GvB=f4qnEygAA0GRFWMe>L)bp%z`g|{yPIzvCUV>T z=%u$B_pYosex_W-FV}_Z3mOz3BXWhy=%t_k_U0yW+`Gm7c_KG>hhF+z)zM2I5aixc zoNrzez4WuLbS*B9f0>V7`lheYOCMkQL)0~4|3_X&FMVp)S|Q^2b1Rn}A~$b~Uiv*D z7K_C3l-HMCMQ$=1z4S2?w+$D^S65H%Cvw2BdtF3!YKdO@LN(A!-|ZQC>EmWQR~5JS z>T^*~a$Gy&}YlvLo272i$3`H;f-3iNHiJtTLCI_F09GASn4mwsSz^wL+hF1A6uzVTnsOTTh1 zdg(ob&`WRD6}|N5Dx;U)xeR*g=T<^5eYqxvp5pDtTOU~>vdPgN9wL7plD0_XNi)z( z-={Nr>CdZUhd~2Ztr{#z4Wt(p_e|S1bXS6Hlvq* z&w2FH-)ezgdf!v%rGKQ0UivAy&`Y1U8+z$KoI)>sqZ$(?i~C=>Z#CfArO`{@*34&; zIDcZWC2$Sn^1#-?kDbK%32Fhrz28m-zUF{l`YHp^OTT70dgBJC(Mvzfvm%VIoPu6@{ha8f*C>l#`uzLQORpDzUixR*(M$ir2fg%@#v4t5{j<{t zt~v+3^z*lWaunysT|zJY;_e;$Wk`YWO6rB@$=UiuLam%#Op(s2WRlnuS~RlU(m z|11K%^zC+|m;Oj8^wL+>MlXHv>Kbr+$!pO|f1so;j2Fv~UiukhHDP>96E$Fmk?5r_ z{1LtM2@larzg<5LJm%UV=%sJ74!!i&7tu@qq$PUk2Yx~?{p{ppaQ!AV&`ZB_{XrOi z(gD5nW>wKk-?1rr>8ClPmwwSp^wM{l>jT&C*J&;AlBVdTuiXi~^no*%!F=mz^wO{E zgB9!khWQ~jGl5^so&j9@uq&`_E*IdX!<~VB@1mD}%V6}< zAN+(~`cIoC!uG4I&`Td~;0WWlvW*A+{LBG(bqspxHSXKN_?lPfp}(99Ie&HZ(ns_~ zFZ~8j^wPh(i5~ia<&bS1(Mx~eDthQ|G(fiXMGt++qR1W#(L?W;4|$3wdg%LJb&*h4|q7L$tN9dWqupYTsf8=!~k(=E^ulxl+mcW?h}@=PSk;n8w?%NC5wmY&<7vvOkWIHqD zoaC)POy2s1yXEOa$_8S(Fob0A+lBjj7 z^4fo>iSu98Ku#d9eHwY~ixW2?&;3a9-20K|{t z%MouSFMb2!Gvvh|Nc@pJ`D=+=5x*dB{%T@#;%vl6$*VtwxC!xR^6Z}`UP#=J*ns#W zdH63A`w>qi?m=9eI6v`A^7>yU4j^7mJc)P^aeLz0#3hMy5x=2sKrC@M@loQP#6HAJ ziDwZz5sxCaBJN4tk+>DHA#p9@%EWra+Qfy4^AhJERwMpIorQPAiNr67pAtVLen1>U ze1|xaID+^(@fG6B#Nosjh`CD?D+8U#5%s4=I6^48vj6?s)W;M z{0lKZe{0b5c{XBx{?A3@n#5Yfd5H57=O->m%&$*HXuKG4abkYG)1mQ_#HESL5SJz9 z*VpniUV*qGu|9DXVgur8#MOyw67&0mIy7F7xIS@1;zq=ciJK5NBQ_##LEMs<-~Y6s z@wUY6iA{)2iTVAOIgNKF?n2y+xI1wV;@-p-#C?hT5%(wNZk8pD4<;T$Jd}7C@o?f1 z#3PAE5sx7rOKeZhzDJ&BhQuOMDYyoz`=@fzZF#OsNDi8l~$B;G{4g?JnBc4B{G{(QHa#si4=5(g6R zCq76VM0|)ig!nLVDDg4k6T~NpPZ6IXK1+O#_yX}o;&9^2#8-*05#Jz=AihO>oA?fK z6mc|h3~?;+1LB9o@x+gbpAbJIeop+7IDt5k_%-nx;qI4O8lAl3$Z$V zAEQB>oj4~kf1i_^#KwOBpFmX}hV#FngwTX3!OA(hQE=#OOT%NcBaYbT% z;wr=j#MOwa6W1iJMO=rt9&vr*hQy7C8xuDnZbocG+=93zaVz3B#BGWB`$!WSHzn>! zY);&nxC?PN;_k#fh%uOI(jzx`|Zc^m)-STezHzoDJ%2;=)W zUJq(&9^!6fnZN(YZ{{I?zi1`jQ)RCM0oi2tUr#*w>b#GU&acS8BP`c=REF8MlA`R)Jz^DN*Wd7dd>AAic`%Etfv>zYRq*)#qB z)^BgIOLhR9Xv=ReBj5l0 z8NYp^g>1bm^V=KBUj?Q6|GWM6SDuXlzy0oP!@+M~?cxXU+gBQB0)G3>3)R7I-*s;Y z`0ZO&eg}U0{>`R>-#+5{Bki zm3!EN-@aetQQ)_C3fc^Q`?>{_z;9n-TnPB>YZh$*e*0D9OM>6NqE#dC+iR6L0)BgQ z-8|s8KNa;9{Pyea4FbP??i?GzZy#5>ANcKW_AU#4d(YeGx6f7aH2Cdf#&-h0{o(uQ zx8K&j68P;??V5q#zF->q?T2hczkQJroxpEDL$50M?Vr1&-+tXC^xOA;kAC~H=6Aqv zUqmke{Pt%f&~G0(8vXVqFQebydjtCIjeDWrepIcs;J3FmZVP_n=C}Xebi3$+Xs$BzrA_CWboT3k4L}#VK?;K*DR<`FIuH9`0We6Lcjf;x9GPISc`u95982pKP&+K_A5W3-`?~E`t5rTMZf*R#pt)s z9)o`S8_&^izjr_S?Jeq~-+sbw^xGdhgMRx1GtqB04Z-1=^`tAE0q2GRPS@hd)=zxBE z&5r1|zkCJ#_UjL!-+tjl^xIdPj(+Gj7GnGfiCE` z-%oz~`XA75??8V0<>a@&M1K3r$GMSlD0duMQ56u^Kz zn<=)x9Dm5TmB3p}@-_S-`03rkBCJCN9<&|(_LIh=-@blx^xI#pxMXy+;Hx){AisSj z^xOAXg?{_%uhu105Vk)x<%aqv!8gBlH2UouN1)%{-x>Y(bH<|I-mwY#?E`M3-~M9@ z^xNA{MZf()d-U6n(ni0%aXa+e*L{P2`ISb29qvm%T*4eHnZ7+mBp}e)}9t(QiMu1p4hi z^g_RVvJd+0pS4E6eTW_U?O#?$zkO0y^xGfsLce{HJ?OXZG!*^zBTt~;-mMS%?PDjP z-@bu8`t3J;LchJvboATLnuC7(U|sav+cZbN{o7&ax4)8te*2u^=(pc{9R2p{Ezxhk z`9AvXP14YBAK4ZC_KP;7-(JTN{q{yH(QjWb1^xC39nf$8_6Yjz*B?i}{e~mxx8D_s ze*4@<&~Kk$g?{_ZSJ7`@RvrEJsmsxCpK=8K_Cqz$Z-284`t8r&M!$W@81&muT!Vi5 z4rS4AKkY60?Spfp-#)ho`t6IxqThbHCHn183`f6xwwma-@92+y`=I&gw+}3Ue)~=u z=(iu}i+=lk3(#+$7KncPjb`Y#x7>$*dnbGJ+eei}zx^dk^xHSQgns+AuhDP6!wCKM zZQi2azNi8E?GGP7zkToO=(k@Kj(+=`^U!Z^`~v;WzN; zuvGNhckhmV`vfQS+fO@-etXSp=(o=~82$D~#-rcKD!J0?T@>n-`?E={q}D?&~LwJ8v5;bk3qkE!$s(~ zchp0_z0NfB+m|nje*33`(Qn@%4gL1L=Ahrc>jCuJYj#Gz{me?}w{KVq{r1Kc&MXss z*tZ&?-+uKF^xJ<5LBD;#AoSZ;bw$6uraAiUx938?{iYQ3+gsVA-+ucA^xGScK)?O; zedxE(Q4;<3ZAzfu-b5e$_B}45-+rAZ`t8&5px-|5Jo@d+jYPlwjJfEy559Bl_)IgrVPls1f?@tDQi<{a9`E+iT=Nzx~qA=(nGC0{!-f4A5`C ztvCAZbCyKE{Yew_+rK@4e*3LP=(mqKfPVYopLc`LK0FEi_U-M^Z|~g~{r34i(Qn^9 z4gL0$r=j2eZYuii^I4(a{)z|s?bRls-+o~>^xF?Fg?@X70QB3>*ol67GY$0Ho2^5? z{VjX++oz32zrEW`^xHq&f`0oZ7tn8S^Z@<##`n>0U*QP)?YrBe-#+L*`t1)DN56eN zb@bbh_d>sY{Tt}FU*wN|`|P^tw;xpu{r0IV(Qn_#8~yh0w9#+hBM@{VxA*iwzkU2Q^x1bTgKXh|etX|=^w}S+i`;D;`s~#UAv?}PpS^_^@&FI?**7kQ zylE%;?EAMtE)|RZ`t7dB=PDr^Uq*j@)Kuh=HIWa+p|9S14e~<^WLs@y&AaHQU+#na z(gr!P9`aOmWQVKhqYv~$uIhvw&(U_=NG~TzC<3zNyIZBas*NMOHUMuG0*;L`~$addT;RAn(nE ztec8H?;=Ua9*>Y0Ml$hkT{8={y6#S=aaAA zihT9$$WPyx{Pc~BI-An|su*A2e)sX{K*w9fc)V4|Lv=jFe{WT- z2i1B|tp~;bU#vPGROf^0d{CVa((f0mo)1*d2mj0G1NPh7jYNNiv`(c<$$EB0{`>oq zr-px@Ur)Y4K!4fwN%JD*oH7vo6Nz#UfHdz)FWI;@{XV|5A6f14kKU)><+l&}MNe4P z_RZOJ|M|L-JUYjE{(N3md)za7e==`fo&QI!D`j3Ai@x~0qVh6j_6p5f*Dv|)`Ss)9 z>$krsKaT_8fnXnLUNxDaN?k4QR|lx3nx*BCv7_xqSvy%;e&4Rh*FV2G=A_r(I_cLY zJu|2O;QL?LCu-8?=g-^HwfOY=`8>Rpe?R^4`Cax7OL`o#eJuce`+LE!Kb9Riz3&I* z$9~$W?f;E_dpk?ny|?;)@72_ly$*N`7LS&in(B2xe&GHi7wk8yBER3-@^vH~hRpKY z^XHt5_|5)|-#$ftzqIA+UfKEaWT@=?ke-)S=ZCZ+{u`Hke(1^XwxN9eNJk;F{q|Sn z>sETb<8>@~3A@&w8d^+~2qp%GcGe`t9B2>qs(J%kIP<*OAxX zc<(ZPQ_7FWpFPj!{Ugt_%sU=S|E0%6@%c^mjB5OS5&rn|+v;CD4jvg_%zwic>S|fl zZ*S)yd#3;2`t1$#$@aoR{_iKh-*2B&_8pG=4VC)W&ds;~q|WX)ck;LYq|0pb&P|c8 z^K*Rt`H$D-2Kl z`v%qLC20lxH!k_}Qf>L&wizp17t&Gq-M)Y6dL8X7zn^$tFKc}J%h${AyYTh$`&YH! ze*Wz*L&wN22ag&%#MW}mpwZUjzF)=HpMRhK_451me7*d>-M9JQejt7RGWkCH&;P;4 zNjmR52{?{*=wH`%~%utL>3(XD8oZJ^2Q;<*y#n zJmVv>c~+saOX+#Rov!c60ok}_uNLZd+^)GuNnb<`>m~0 z!EfI)$Q1nci!NjXzy0%@N5F6IP$vca_MK`@1Hb)_T~EMo-|p6D@Y_fC4hFw{-=n+0 zZ{MTvUhv!NtRD-0`$qfx!EZldj1l)e*2rB`h(woQQ30fw=cP% zwPF0_^P$qR?0w=4`0by6=?s4RVSQuo961=4KL7kKeem1co;3o${i4?Xx@(`FNuR&_ zu5-bL0~P#mNoVleyEQcczx}ZlnveA2PNi=jAO6_$jGcnFy=dk7I-7z!H@XXc`+{H4 zZ$ETLp?PXiC(^HPk)dyeLo*a?<6Xf)gXqZ(lAJ z{r0POqTjxjtx@eoF2~ZZuXE*;O_N$HxX3Q_+dp^L);+N$G<|;9T95b|#tL@m99(^M z^wIS3!42Ml-~N7^X8T?A72_!#@)VeT^+@{s+M0F2Z*L!te)~QBLleh5JDfhhhT5{? zK^qm^+~ppJq;IcQsbl_xoeKW+7X9`^s^xXx(^@fp$F6d} zA%zuOwEvE&6XFh~U*FSk^xIcSM!)@o7Wbw`4pGdnWfDBj!brh~^X(}gsIA}*?&!C7 z{(^pcts;Bc=Gz~fe*5;9&~L9Z2mST~PNUzx%m(z^f7ytB`{$j|Z}0sA{r2}g(Qm(N z3i|DB^(Sek91lw0zf@hnzzw?rlSzp5ho?YA1B-+omb`t99y&~NW}4E^@``=Q_7YBl=pOWz{Dy&n4Q^9G^c zzCa@S?Jtf)zkQhs=(pb;jDGvN%g}GX^#l6tCk!UPy(#+b6RM%#-k~S@?K|~Gzx~3y z=(mqPg?{_4)6s7~X&(CR`|6m|1UkU4EpVR+(*Ctr|#&t zcYIUp_WVJL?N6nm-~RU9Vp9?aD#mXNd3o^A00lpqn&W|Ie+3_ZU#aDkehNO+^X)*teMv|3+g~QXy>%t@+utI;{dMx&Un9SL=LGcI z8%{;PecmzXx8Fd1`@+-EZ~ut=_E*SnpX(0#?ahtRZ-1Qp_8Jc8w+|%0{Y>)Pk0ZZ* z_4nwvKR|x_N94D+BENlg4fNaRsgHj93U$$Mzm)v;kH~Moi2U{o$ZsDNWeaUZMmHhUOy+iUbjzkM3{?cb2! z{v`SBlgV%Yp8WPl$ZxMhe)}Hex3?p|y*v5sK|g#7l~$!}kV{PuInZy!p2`_bgL zPa(hk4f5M-k>7ql`R#L%-+mkU?M=yVf0z9BOUQ3uiv0G*KxheK7g$_mkh=oc#8df6;GmrNnO^O@8}uC4T#Lzu9kZkwL$G zOY+-4A;0}-^4ovTpx=HM`R(73-@g9e?6<%6H~Z~#{YAh1zQ5?VUz)^ zd-T1i{PuV}RDOFr9xA^*9uJk@9*>90Z;!`A<+sP9}ks}6pxSUc&Ltt`2CG) zJ*d`$YCS0a|7X?tpgJE^=Y#5ekbeJC^?aauKFCVX2g-^@@k-QM?hjkb;bi@$3b>rL5f9~Uvwv#T?eLP>U^P8FC$3C7LavzT}zgpJv z@vx`Qb>Gju7?M{ba{tfg{Wn&t;$CLnx{CNmt}A8F^G^<`p63;-=fC&2A9;zYke6rZ zpz(vg9i6eGM~wM)DLpS6e}g~qpY-~|9-x13k04V1{1E_0i#>6f-6M#k#}#(wD@d;^ zwGXRaSHxrU$JZ5^DN8yJGTtL_H~A;`2$a39q@0kgA3ga&RDFIBSJS`$@BF$_MShoE z<-RoO2xL}gfIV~>`P}knIs;b6Wb55kzV4NsA6-tX-gilB;J@jCPKd0F-G&#e7YzOH_?Gq6m)j+A{5=9O7@<+og~^5gMm z&$AW($nz}oj>o!x>G8;DXJGR$9tV%#vc7-!m1Nz{K;$*qGyVUzGf-u;Y%fgYe)8Yn z8TkLb`g+yBRRq-3Y~&BPvd;&xg=F)k*GcWmvi-()1@bFXUHt2g0DnHHEx(7y!twpm z@Am3TzIbWf8BRhEyoI}ro#x3drOyYEkvK2qv3&fQ>{3s@|4xRoZ@r|?8(y7d9Mn~I zDXs4y^2Nu>S*^3|`m*{1{v%&}l_Ik9+Dd*0lsyl46;(YCWc9~7GxzUD>&RV4wk|B_ z#*?01xYV}9%XCk)U6DlV#@C;xbMQ_7Gq=}0OXpWZD;yd+>1jIO_SbMIH~2|9=PG@_ zu$9H*bRJu&dD}_-9;I{9YVj8?jf_v{oE68GJu~ZJIw!XG%YSW0Tsp6}m^{QL>OneJ zO`f+PX9)$*YOvL`cE9`S<38i34IaBSHl5u^eem0y8k5c+J{>6hAn0B?=N?t1^XZw< z>3k@@+4x14QRy7>aM_ocCU?{MW&er;J~Y3R&IiUhIkjnZJDokQ_w9bRYh*f`ep>AN zY}BoEj;&!oqKs!mI*&h4Y1{3SH`BR8`BrMHKi^2_`FB5B!6TuvW%8F%o^p7P=8d@EjOTcXjWbnbjIVYAWDi|Jg_{OXee%P*v}XGnpDVrO8a z&&~}kiz>PUeL8e$xqHyL^!ZKhrbLRJfsHMDte=-9wT|c15jz8q z%wFUdI|DhhU2Qi1_UZKbJXs%r->V_0;Ezoq>Xz*OnJM1K#aA?-4r#>Zjk|5jz8QR>a;GI|D{J!}=d= zr|1q`t})prySjpltbfpC_fbVhVDtQ$wZzWA>|7?$8OZZ+e!Q8MV*b#GNNuq*Ff6at zL$NdPwDQVoVrQV(x%&mrxhT2<<6qVf6gvY6HU;yGodJ)WtuJnNRdfdiml{%gcRdBy zw11Q!b_TXvoGvDI26{hS9zSrfqAO7MZC>aMbiQ$2Q|t`1e(sx3>%oGf=Z)S?CO$X&gH3(g8&$z-n)WK^+$;I99_NIs<8E+d^mHX7<+5 z8E_07;c+8b(Gl2E?n$iQ4F&5abcN19IfF%ssVfxY_iGH-vYM=5;~9Z|6)hF))4Ift z#%&e+`cumXi>fQwy5{NYMT;r;T-Cnk4u4j30Y2y0e8TCef@4388P)Wrf_E%#4xNE~ zrnb--7?m~?Is?V8m+8A~p{!+bVeM)|CY&HCAwyf(EX^H5A-#PsIs+A6eaZd7S}`7-Fk$+rp$Z8H3+#W;2|5D`SX9%3{z=T^S0$+6Rb-9qhUnY8tj_#nizD;!| zF4-ZlgL`7hsRGAm8=TNdU?(f=3{-r3UHy}Z;`)Zan3DH~zyTAwP>}u9h;E8A2%&#S|!KYjM$_V`C(~}+f1x~V@ zJmO0`#r_|BkvlF?;JusY6^Ik~v4Q2In*#Um)WhT3l~t>xFqQ{epBzQoTJ_(|Ccxuy%8zw+GWP6E5$z|KJALF^2iDVnrqkTAdA zGvi%-1%6UGsb~*@TV9C2XfCkYz6RIY3w-l@<#MeAzWc29fo1|fU7577k-(`>>TRkk z@b1}9Q)&p@`()MGRR!L5zLsevfkPf!v??cXx7hNdN(($?sKIF+fd?(AYF1p}g|pv% zDlD*f-WfLw2)wu>b_O(87WYe@#9|ze7$jpD$fO8Hn{kUrvh(!TRilM!1>NE_IWJu(<9-F z9|>%2WUwG!;D-0qmOm6&?PJikIDvyZ9Xt0x;AMXE-`*FvmBWgvBD*geY!fStuS=d7 z5F_xU_CwW0UK4Vt?>%9BaA=Xk(E_`MZa&0Zqgm%g7IDU3TrE?*^bM09XVkz0Bfe|1Zk zU%rgfI+2II@$V+GzvgT$ku?`%XP`{XxS0{c^{pJ(pq%$ZOO?wM5?Uv+3Rq;ra?K*d8eI;J|$gL@sEyb(qN4_S&@)`L*4< zvLg4R&OkTn3>>?tf8x4u`_-v4(8B2cJaIhgO(T1e_f$P^A@YC&?kz=5t!7Zc7c36Q5U3xF+n+8tM#Gpw7TS>I`fd=(0oH{$neTH6o9p&cFfc4192VIZm9v z&T-ptk^35?_7mBD=)Eo?8@A}sPULF_4V#Hv_{qAuB5$J3K;PaM^~CXYsk5|2Ht4>o zpvYlPm2!*R=d8Mh$PceJ_$2-wVBDZ1Z$Q(C@OyZqym*x#{K^aa{dW>Ri3&i|m=wY@W!S?Q72!dG&?b?jqM3VKhf%`+YrUi=3=GX_mH#nEw4EW2zseIjUF1#Yb%6_yoaQQyJIuw-z_yG1T*PsWs2kHn&ONjTaPwk! zoW=1JKWpGRVeh7jMx}g9*Uiy{iGI z=suhz&fjn11N`WKCGcva^1xRQJa!Vd@AG*#@Uf)Hz>V!pfEV`F23GTYHc`C3c4x64xqc+V(J;2Vw9fY%OB8805c zrtcGhOFVcAe5FDhuu)JH@Nn-4;5p~8Goabx0*p^hISuUh`WWyKgTugQ*Bk^^YrhY8 zu>Njj!yUj&CvO4vdFBT^aJCQdUbD5p>kU@}H#1ua96Eg&@R&PGfH!qt3>@)%0q`u} zdBE+*xdVq;&IUeYJrnq;+YI1p!LGp8*0mm4Mm&l@lS z_()|(;8SYY8F>2G0mf%W*#ke1wgYy1J{EX?cH}oz#=v+`@6o_+9;1M7Ub6*mRtDL` zVI+(%2_FHxt1fb@bv7`bR1n#E-f$Q<(Ly%&7zX22OCc}cX$|8Y+aTwS9SY;CU6F$; zA=kb<1m<6yirlv*^7gpFFn|6Uq{j`x&?qFA7mJf2Y4RUNfWLtIQL07F{fBgKA zwVjaHcS0^-8F`*Ma%ePq|96BSH}ppCG8OsZK;+m~$n~orhv!H3c{dR5pLY!M&U46@ z1Cd|(AgeDzPMv~$VbJRp$p@)322(nKuWX)9c&Zs9LPkV&y9EF^G z4LR-{a`WTJIfIdF??FDa4cT`C@;z_lvCEOo7b8!Yi~Ph5dEGQ*&q>H(%UsE=;_y6wdEW z{G}w0`x6f&E=+tu7q_2H+=e(8@kJfn-jmppxH|DCZQMSb*q7LexHEB8;+({BCGhr6 z5^o@$MQlUdiMSrIE^#*ESH*FEB8g8C2N16(UP$arJcihkxGQlR;)cWq#AS$!5Ni^r zQ77On@pIw_#CM3V5uYbMNqmI(0P$|(?Zg|2*AcHKUO~(qfCV(}PCS#?g?K9QWMW5R z2Vy(oQN$yNt%-*a4<@!G9zfimxG!;UV)ouE^VD~x?Yj_nCN?K#&pUh5O=y05CESk2 z+bZGKG~SB1C9$y*Zb9SB&1sz3h{lz1Gn%iAo6`KoO4yLbGs=x<`-V!m0gW@)r}50@ zdUShPo$J#6su-*2=mudcvPeFL&dlrGW&QK(D7$xkA>umaF_c{q+eej zWj$>Cx4%1#7;f|JFOna^_}dTv#D9{A=^bo=gdwvq3z zp8N_-O3SWKnrA0xkFw}%*ebW)Nb?el%g5!vzyG8C$tpjWJk5L@GUC(x-*f3ozff4wge@Q++q z$~-fPy7;`M@=g6)&y4^7e*Nfmx;DK|WmX4(Ul;$q9e};^=Z^q*AlUDk*&TpbdR$>= zzJm0+VpvM`x*{H%KfbQW-Z?5>M-;wE**i(S@0d)u#^=CC!{=VVQdd!E(-#{Gmt+`ImF^#au9%kI66 z{DD{Y`M}FwHeY(3RDC|ktTQHSUN3(>s4d^k#G3ei>38=6e)#=QUD@qg$@fFq`b`|C zTEAIyW&J&S#p_r492rmt*YEHC{{*Ce-?pnIyB!bt?PcWqpP&ExcDC>TFN1V{3d+A( zw{eo)o`wAI{_y_G&m-wk_}%~h;yZr*Ww95~+;8@&=qvUDdOzvcM(hPx=58G&_5zISjqnnC0sZ__pck;-h0-=&q< z3%H#6;o)WPN?GqOAoc z@nSEa_U=}mVlQCP+D*_4DA%`bXR#OH-MD5mbn1Efc?it z-xYfSKB-;qh`oT^CF>0kdjU3eVxboh9p1XB*b69K{yy{q1~&77UO=B0G0+Rh|Hes2 z>;+6*o&vpqYLlu|7kdFIjYky{djV~)20=mpI0RwK9A3m94BJ@f(|YeYdWKs$dZ^a5Ufh=yK(xurGq z0;-nRa1na}W_ClM7qI=XFZ2THZ*YNLK!@^^p%>7p;X3FAI9JxaFZKemt(*?MfJ+`B z&k^Y|03uwA*2=oHNyqiKVz~#kk=mpFVy$ZbmuUvzm z7myZy7kUAq<#RwU;Led*&T{yPy}~Yq}nK0W-|Jpcim%u7;M_3&=fc67&MRQY%9*U|~=V=mn@pYe6p{ z>1Gk=1uUHK9C`sIwq%1|Kxe~>&}U!L~f^EK+_x03#e0jD)a*GdSfr3Q9JAfL^gR3y?~LLG0+RByd8T1 zk%bFFFTkrS_5$*Dz+S-3B;9fwVWGS#0 zQ1bxy0-S4eFW^Ww?giLoS%AHO+M~G_ki~_20k2kbFW_b^?gbRi%)Nm6Ww;lxs}lDD zMn!Nhp!6~B1$gJ`Nky@24|+zaSeihBX;&T%iG&{XaPxIO1yfTi`DYexTm;l(v4ja{Z?$v|W0bLC#Z z(0bep_<2v8sm9A!dVO|`u}4niUO?XA+zYr}f_njP-MANUs22AEoJ(>qVA&Jy1yr0g zvas>?pSI^-KzWPt*bDfnHTMEsM{+M9@+9{Hye@Gsz`Gmw0_=xzFTkN1_W~-U<6eOM zh>+_>pSfrS?gcc=!M%V%CAk++$^XL%=`^H*f9*l=0(Uz*0Z% z1=x+_UVy8|xsAr#e>#JE0VVTuFW{0V_X2KbL zUO>gZ+zarZ%DsRKA>0cnb&GoemEE})&_6r(0!psoUO>;&+zXgllY0Rjj&d(xc~0&H z*rwoK!0DFU3kW*Oy@0nRxfk%b1NQ_ zQQQkyI*5A#Z=AUo(0eZT0=6gI2j4$@9QOihC+vgc!@6=Wz-~780z5`>FCbxZ?gfPB z;a6n;Ouhl1#}$3y?_ZG+zUuInR@{PH*hcDR514f&fn)=z~y_~ z3)p**djT){aWA0leeMNxwBlaCm2bEgkZTe50&azIFTn0c?gi|~&AkAd9NY`ox{!MT zFPCsHU~4Y!1z4u%UVzsC?ggx^#=U^Sy}1{V^#k_;BJXoA;K#yu;8)x1r0=n37FJR6X?ggxVz8tsb z?z05Fzu7``fF1V&9Gh`3;L-%{1x&ojy?}#lxfk&I1@{70ui{=npJCh!c-fVE0rz`y zFCg1wPuySUePhu6DMq6Y_85sie}j7gSGsa9;K@I@7f^Z)_X0v(xfhVM1or~cC*@v% z?a$l`2))g{fEstX7jX3j_W{zSWH&3xy?|^TxfgJMHunOmhH)R@hkWd9L%A1VagqA~ zd2HD`S8yMoM;7)iU+x1OO~*bvoBIG8ZP+=tavvbnfj$2o_W+7aU^gnpK5~(J0A0ti zBg?THJfi!dnf8UoqvohNz89T>i`u;9!*_TJLJGWv#D9&z? zj6LNp{r=$x*~yl%^N(W(b!7)OU}q@F-ek%4`an^3{u z5drM8vLBFkIgc-2!1kKW4)A5?pTfT3&AvE>oq7a&)DU(-4|bBi?5wgU&_?zIj=A#k zU0m3OoYNeSxF0FEB>-1)A6A_3i7jYu9GG)@0AC&b}*q1NEx$ z`0gs~nw8ntDzPV2WY@01PG6q=pe#E?_6Uy39>IxHynLAK6TFgrf^5F=an zr5j7zN*9#QB%Mh5rR-1KmA)u_Ogd0{lk^Jd`O?#*$4ift9wgmcx~sIabX#fN-)JJo z8%Wodt}b0o+E%)pbQ$TA(#52UN*9qX5KHHmR=RvFT~Ur#maZyoCtX9jrnH{lb>(<{>4wsc zrJG6X_ggDD-dehyw3D=ce|MJS`g+h^j=M?sl-AdmzH)qkw7xzKk>kUpM@WyB_LTOL zo*+G0+DBSnZ)eDHKk2#B{?d!2mr5^}{y}<;^m^${(mzUXline{TY8W5e(8hKho$xB z-$^-sMmj|Lf^?|#73u5JH>Gb&M@T=Eej@!$`la-1>1gRU((k1|N+*=}A4#N>NvD)f zBb{Da-|u9RBwbXxgmh`?a?%y0D@#|Ct}b0mx~_Bs=|<8`rJG5& zlx{8EPTEP@MOxqAc9Y}o(!HenO81u@C_O}axb#TrG1B9t$4gI=_K}_@Jww`0daks; z^djk{(krA_Nw1M!FTF|nN9k?SJEa4q_evj-J|ulq`ndEd>9f-3q%TTemcA+-E`3W{ zf8V<=#~(>Qm3}V$i*%&)8|nAbAEov8)5P-oYEtPG(y67>NoSPKES*i-N;6X&1rQ1q(kam{tEZtSwO}eLa zAL;(m1Eq&Z50f4tJz9F4^myq>(mvADq^C>IlAa?yUwWbR66xjAKS-~UUN5~#db9La z=^fI$rT0khm;Oomi1cykQ_^RpL!>WC>wfB0IetU>mh@fe`_d1kpGZHGekuK0I$HXj z^gpC6;tlvcO@!6g3uzxnUr%^%I`S$)&r@0(pZ{d<0E(-jJhi1~cx%Q>35 z->8`XZuV2$On-N8zFhsmF~@!7@A1v|<4gPapYBtPK=9}N^NGLF37hyuJtgYu-yHDi z^U8c4R2uZ@%Y9J~@-MhEad%!#{wmL_*j$_7VSHVQcbWczlk^L^39~PwKR^DyzP*p> z`#1n!1$89j+PB|t@^x@03}JqK&-z{b>$~A;`PC}=CT4rd^v1^`LCiZW^ZTGgzxqZ0 z{NL$*{m;M6x3B8(cl7NanBFhCn4Y}Yehwt_j5*J&O_z`VIbeDs{zpEj?^Ve3xP49M zk@;zeE8kv!&-p#R*&p%k`;Cq{-+jl%e2ne;!^JD+a{vEz`E1OqOU$c}`Pqs8_;-B< z^!vlw^gshl=a2bu$F*-?-*n!Zf8ObNYR z^C;f8|L1F4!h{L`^%9pXLCp7MA`6GF^7}0I^W%@c?lk|KJ|F-7{VnDdwfeulh5v8g zzTIzp9(?2arQi>J{x8?Je=t4fmHxl$+Xobjxfj7EC;YGS?QcGexm`EYS2ecZ4~7QE zT;BY1GXD4HKlJVJ)m}+|KPY8-B*EXuoEPQ?_E-7#4}4>8*Tr_t-+r>i$j(OJe&3qNQu?VFdiaWeY$W4jC6}LZ;8IL#OT|XYdxrz z(YN>R)cvZ_w;%a@&K#p}f6%cseESk}s7F#7fvv!|(G^zEl*T))id+jl?Pq=wPAZ|V_s+34FxJZibf=-YQrr%`t}DRzJYIFB>%=H zM&Eu!u^F$7zWu(Q3E%q6L>plg(z2B42tVZAdP;qDY_K#Z3E^74cD}20}&gk1$ zE?y44eZ=Op@a^lgsR`e{&*0AR?F*fccxLqN%N;yqY4q(gw(^5-f3#;R`1ZY*4O z?YGs0Z-3g&9lrgNu=_WSzWv0t&EVT#fABqg`+d*4!MD#-`?A$6@2@x-_L<>zdN!peEa-cmcqB+oZ1_{{jiXG@a^4ysYu^G zsu6tq?o(&Mx4)cWBz*h&v%Z0E@78KGeEXxT-Qe2~tn3Nj{>7s=3yi+~sKI;T+xMva z3w-;kqsGCv58r(rzWvNz)8N~?rI`WW-tyVQyGGx>*WzE`+uuL#1K-}SnG<~b`zy-B zw?9>FEPQ+aR;S?G7YT0<-#+T@CHVFw2PS}T|Fqs%`1S$)_rtf}U*`mT`@2_a!?&L> zs6TxB$##|D+fU!n5WaoR%(n3D*PmVo-#)ba0{HfGruf0P&;Iyha-(nm@yTHL_S^mQ z!?*7`uqb@{id&Pxx36?GJ$(ChV;;h{zjn+5zWw5UHt_A8Z@h+Y@72g3zI~IHcJS@L zAGZa*ebnA;@a+$m9|PY$$wpuJ_K99qgKs~@b})SV?&ZSZ+aEgJAHIG23Lfz7CzO8! z-`;l0N%-~=cKP7jm)bEDzWs|Kb>Q1y?RpKqy>Gwr@a=nfAAoQFaHBnZ`weyI+b_yS z-~Pn#{P67`q@Zu#z6O2!Yd%}x+pqt}F8KB%d(pQ)8F>-D{o>no;MBs?vA`w(mT_Jgz2w{LlvzJ2bf`S9&8t)g#VbQ691{I9Ix+s{u<-@a@a`u0&r z=-aP<7Yg5g$omKI?T5P1x3BgzIehyntLWSJFG}D3UK9HEof6QuZ|_duK4U}r_Gf0% zx1U;yzWtI!^zBDj)3;w%kiLE9i}dY#@1$? z+Yf$B-+tU&`u1}k(zkb*K;Qn=PxS5UoTP96?F0JuKi{NppS3G}`w!FU+ZUZc-`+Mg zeftuP>D#ZGL*G7g75esV-RRp#=c8}$>OkM#XF7fRI&10MUvZ*u-zbQ_{f-v&?K}6U zZ*S3yzWt6!`u4p>(6`Svj=uer%=GO&D$}>G;7Z@V-fQ~y8&A-;pR$*}eNsF6_MtcE z+b?@d-@biQ`t}u8(6^5mK;OQIAAS4kk@W4Y>eIKk3!-oT&3^j!)xa^}4-BMl zzss4vy;m@O`}7Iu+b8y;Z=YcgeS2RE@$GZbx3>(VZ$In?efzuq^z9GjqHmw%6@B|A z$?4m#okrh&e>i=6TW9+AUft>2pDj+`-ex_0`#DqS+b>8<-@aNx`u5*0rEkC4hrWHn zZS?H}8q&8Pu!X+;^#1hi-{q!n|H7HRz4K}M_NQLbx4%)1zWs<-^z9vs(6|4voxc5o zV)X4VouO~vd@_A|-zW6#t6I^w|0#sN{kM+v?dv+zx1U#wzI~eA^zB={pl?6Vi@v?x zVEXoNiqN-D+m*h3s6BoAensiqZ+<}EzLqzA`{>s6?W=z9hHrnY1%3N&!|2;b9i?yY zd5*sQ*v|CrZ3oe}uW3u)zGy1?_GO0Bx3?-o-`+M0eS4Rp^zC!ap>O|kC4Kuvhv?f+ z98KT8&RF{PX{OV+A2yx7ea6xB?aTM2Z@*_Mef#&;^zE07qHn)86Mg&suJrBqez*hQ zK70aw`>WgO+s|l9-#$$N`u6**=-Z#jdt{c;x9?PmzJ0zf^zFTa=-XH6Oy7RX82a`z z8`HNhpNzhJ$v5=vANQwkU;Y$*`;+eU?Ne=~Z||FfzWv!O^zF|Vpl=_3ioSi}S@i8E zrJ`?N{Um++4L#`Fr=CpTzV>PQ_6x7kw_nkPzWrrO`t~zc(6>K%jK2NzYV_^5AEa;p zE-QU|pCt6{b2`$uPyQ2q`#MGG+m~xY-+p=y`u0s4(6=A8gT8$kJNowSJLucL_{S#r z_HAC$w-4z@-#&kP`u1~Y(zn0yVK4mp#G~okcm2>C$LF}vw{JI{zWwB3^zAbzrf>h; zioX530Q&Z+Hqy7hkdVIpg+=u3T?Wv%_wGaAK9x6p``)YR+aEkh-~RAz`u4|f(YIf} zhra!_p7iZ&+@^0|GYftDAPf5T@8{CD54u3#-f{zdd!Ov|?O$2axA&S$-+r$@efyEw z=-XdSN#DM1Z~FG`mFU}-aieb^5=GyB{cZa8UGv?6hkkA+ef#(R^zE%q(6?V`Pv1WM z8~XN@e%X)DA67|DKAf^B=3UVZk3Y}dBzM_JhuuF|K^ zw3OY;o!zG#`>h50c?doFGAr1thO$dEWp6IX&X$nfm5C2L$cpK?<;=%ii_kLIW_Da&z#b=KcFUMJ0{U-yH^mrgBxGCQyTy>xTwY|;_gc>N!x z$4a-5E+G9OD?i@_>5bA;q}`$ACulCy+L}Z^la%V(qp8DNcWNMD(xiQO1iOhU1@viO46mJi%A!dwwAV% z&LW*oI<<6i=_Jw#q~BZe>-$#vwe(Br=h9E5A4%VnzAJr4`lj>^>Fd&0q(h}IN}rcL zCmkXkEPY1$l=MmI6VgYekHpf4<@ljk`X@PlQ2K!MzF2y%9M|3>$F&3Hcx=5}E+1R( zlFM(8rMJoP-`iW|`dj{F|0vhj-Ym!eYzN5a+w>RrM!CJ%dV^g4OY8M=|2}uGlg}U5 zy;g4TbN3qg{Bhl@<@P>zuaeLIwf7J5c;dQO%I$sbULl|VYwzXqc;dR3$?bjZy;L60 z=k6u)`Qy45%k6#by+|I<=kA5_`Qy45$nAaY?Jtk#bN77t{9k*|lgAU+Jy&k;bN3wi z{9k*|md6v%N4p9bG)DYJ-*(bFQxy}efnI!edpikgiZWX zo{E3n5B2T$hkW|HGM@)oFMRrPU(|#A3+_zZomXAH%JV8V*CyaHUsvK?roZ4M{eo`7 z?AzP-_7)W9DuKadZcmf+b=QsI=B;tFu%S>hsD3X8=jUp@a;1<{5$&g$4u`R zT})42Y(EDc+>ANTtWB4X|2bfKBK}7{sBc!t^tk((&Li{F5Ldpv{+{!De6v5|+dJNf zIp6!4&imNDKdRq}f1hMN2mTj7>i37W=}GW4oj>O1B(8n?LZcow%b6eN&ikLfocZy8sUQFI_rjQenK3_)iA;`mdTV>rVovo0bLs#Hm36^ z-nakf_vC;2_W8cb@3Yv?k3Z_$7yFw&AHUbPFZUat2j94Q3HVc=_sjL|k3ElhrT_2x z_P$eM?nQvf3IE)_z4_n2tQ}%rcdIvw`S^QoC+V+efcbqy&0c+7d)Djr>wn?l&oXL5ccX8gr&z0FM&Ew;4?6;lzJ2hiaUMqB zzGNcDOh(^+&PM;bM&EvJ;WDRI=U&`u2ys zH#9W*_NlrLaW(q(?GKz^Y4q*wZw$|5^zFAjzT{~1?ZcCV4l?@oEf?gl@HY7N!L#Rf zH2U_b(_I~A^z9F?THn&>+iyG|;&Z@(~Ak%~s&zKGxMnCAG-@exwyTwM|zVuC(7e?Ry``|G6_BA?gOKbG)ou~U&Gy3+gYY%iV`u6LpwvRCS z_P?yIIn(Id51q3TzI~~db($J|`;f9WuZ_Na#$}V>+dD4Ko!98wm(O+*zWsNBy{{U5 z`${1%jJ~~Jv77Mi3!kV}#pv5l%y|pG{lkh&;M-d~2#0U)|7d77qis(%Lw@Pfo+b!w@-5Pd-(SIBih5a-%)h}eEX3L z7sI!oU8)j%`;rGzq%r#T_K|(z+j}_`f^R?8c>sL-W?kIj+rM437QX!}>#FeWYguf8 zZ*Mi(55B$i_(=Hn2OidiZ=b7Dd-(R-Y?i^dpOGr+e`opB0$dz;H1@a^l~ z_JMD|EPdjIM&G`u%`y1)5&ho7w@+Kg2fqEcS+2pi-{v|8zP-iDdGPJG6@GEo=-c=6 zd<);cf7_Yx?H5dUg>PScUKRNE5f8`1xBn$51ipQuB%R>fyPvvB-`+Y2eESB0-tg_S zZ8`+s{!r61@a>;(sSn@&N$x@L?MDSwgKuBVqA7fP*BVvf+fO*R5x#wv`itS)zo|bL zzJ2ux2~!w-`_b;h;M=EuTM)i|qV2`u+Yh;t0=|8>^BLjWTMT>*-+t1HMDXnol+Op> z{+p>$@a=cpUjW}e(KUPc_M4)&!nb#~$pPQqY2sM;_S2qEhi_k_pgnwh+m1uv+m~&4 z1-^aD&;ju6Ta+CL-+p9)xA5%`_B#dNep0sl@a;V&41;g)Xjd1$eXz}S`1U^eD!{kD zQtBXl`|{1J!?&+^i@yDV4fO5rBrO2nzR`5??GMnmKm5&B`1Z#K?1pcj=_-Bu+%A{k z+dr#Y7ry;2%OUXXU*4f_f8h*$`;K1p?Q4e8w}01!zI}q#^z9ugU4U=jviJ!2_V4D> zw{KaCzWpy1>DzlI35RcAZ54g{Cu!5cw_n|azJ0d3^zFlcrf_;iu`_Cp=Hz zzIx_7@a;1ep>LnP8GU<~yY%hXWVsCAK3kTD@a=<#(YJ4(Bn5o?VteV^*Qr6@eyuBg zd+SUK2JET3W1smK*L)-B+rR8U-~RMU`u01j)3^VSfxdm#lJxDzm#1&v;5L2xH;3rk zJLI8npF5JieeJ^Z?K54XZ{K_mef!lH=-XF*Mc@A768iQdUeLEcHkH18+LQF{6Q84R zAM`VQ`;YhN+lTg`Z{L3oeft(Z^zCzIpl^S+8GZZY3+UTdwx@4js~3Iy^@Zr$-)T(W z{>m)+_FXp6w?FMd-#+6$`u459rEeeRLEpZ4ANuxpqv_iZA4T6ji8p=wwpr=h7pO|# z{!|zG_6H;B+owN8-~Pfr`u3IW>D#{!r*FUZ9esO8NBZ_zR?@fM=0V^7f%x{nzBvg9 zuk-Kk$6eyvpAp}Fy!iIB#kUU--#$waeftzH^zBcGZ{J9K`|{%3R~FxXllb<9#kaQ+ z-+q+%_P4~h4;0@%@)!E{mBhE7D!%<9@$EB+Z{J#c`$gj0KUqiLzJvJoPU73Yv7m3C zR($*J;@fZCO5eVt`1ZNPx34U|{ZjGm{lvFVAijMM@$H9;Z*M8S{r$r9?PrK@Us8Pg z?&90unnd3|m-zO_a?rPLEWUksQ~LI2I?}hd7TJPOeES1l^z8?UZ@=q3ef!$t+us^W-@d>2_U}XJ+rRBZ-+uEz`u4jk z(YIfolD_?#A@uEMl%{XLDKmZhOGW70&z?=+-c5Y_Oyb*r7)9TH_Za&2p1$<$fA*zs zKXDX&`?Y=O+m{yKzMuH^nZ&oxDZYI~XZrS~#kX%RzI_w%?GuY{KQ=#o`?BKOR}D#ZWM&CYsJAM0Z z;@h8oLEpZv`1bzo=-a0j-@b+T_QOWex4-(HzI|%(?a%tsw@)Cxy-yU#S2iN&|?CBFUpIrQx-ifg&cKz#d43+UUY72m$U`1bw9 zw_iG(zWt_0%W-?X#kW7ua3PLwtVG|wq4@S^#?rSRd4<0H))w^bBOcSY_ghNezP0%F zm!0X`pXf^8{>?Z~+~2C=+Yb`oetwscxcutN^zGL>)3*gY8GZZtPW0_h7o=~0 zApw2+H}~n=&$>q6{@r!@_A?*Tvp<}eok)E9W3B1i&-A5lA90SJeIxPh+lX(!^b9@w zy=B7T-Rg36GZ*-`?MX z$Ahoan-2>?;G=^~JaUxhIbw@6HZ$ zWoH)Oeq0A0w`$A2-im#+IXko|JB9f6oy4~ft;fsv6yM&u7LPxx&JMFZeE-kUna~=dY)9 zM(O?H(+`j?ARR6q{e0;*(mAAWX5;-^CG8`K4E*&M_d#Lmd z>G{$lrCp`#OP7?+DxFCBsd(jK(ubwDN-vY1Aw5odpmaCsw$cry)rT)D#|ug4l+GZn zp1b<(QQ~1elfEwA{d4up)f?X@*H?dAJ#6)*)h||$RXtAi8P(5I-)y?vziHBw zr6)*xOM6O>mi|t9nDkKTLDC-51El*&_m=J{?Jn&m-CeqybXRFt>CV!fq&rGG#nK(* zc>7qoog8l~-A1}~Ed8w<*KQ@pwOh*Z*t&&WKDKTymv@Y%o67Ou+fC&9jsIjflIzEH zHe-w*NM X5Aoj*=Kp_q{Odvd>%o8X_2B;j2PM$L literal 0 HcmV?d00001 diff --git a/test/python/wick.py b/test/python/wick.py new file mode 100644 index 0000000..05df5c1 --- /dev/null +++ b/test/python/wick.py @@ -0,0 +1,148 @@ +from pytriqs.archive import HDFArchive +from pytriqs.gf import * +from pytriqs.operators import Operator, c, c_dag, n +from pytriqs.utility import mpi +from pytriqs.applications.impurity_solvers.pomerol2triqs import PomerolED +from pytriqs.utility.comparison_tests import * +import numpy as np +from itertools import product + +# Non-interacting impurity in a bath + +#################### +# Input parameters # +#################### + +beta = 10.0 # Inverse temperature +e_d = 0.1 # Local level +h = 0.15 # Magnetic field + +# Levels of the bath sites +epsilon = [-1.0, 1.0] +# Hopping amplitudes +V = [0.5, 0.5] + +spin_names = ("up", "dn") + +# Number of Matsubara frequencies for GF calculation +n_iw = 200 + +# Number of bosonic Matsubara frequencies for G^2 calculations + +g2_n_iw = 5 + +# Number of fermionic Matsubara frequencies for G^2 calculations +g2_n_inu = 5 + +# GF structure +gf_struct = {'up' : [0], 'dn' : [0]} + +# Conversion from TRIQS to Pomerol notation for operator indices +index_converter = {} +index_converter.update({(sn, 0) : ("loc", 0, "down" if sn == "dn" else "up") for sn in spin_names}) +index_converter.update({("B%i_%s" % (k, sn), 0) : ("bath" + str(k), 0, "down" if sn == "dn" else "up") + for k, sn in product(range(len(epsilon)), spin_names)}) + +# Make PomerolED solver object +ed = PomerolED(index_converter, verbose = True) + +# Local Hamiltonian +H_loc = e_d*(n('up', 0) + n('dn', 0)) + h*(n('up', 0) - n('dn', 0)) + +# Bath Hamiltonian +H_bath = sum(eps*n("B%i_%s" % (k, sn), 0) + for sn, (k, eps) in product(spin_names, enumerate(epsilon))) + +# Hybridization Hamiltonian +H_hyb = Operator() +for k, v in enumerate(V): + H_hyb += sum( v * c_dag("B%i_%s" % (k, sn), 0) * c(sn, 0) + + np.conj(v) * c_dag(sn, 0) * c("B%i_%s" % (k, sn), 0) + for sn in spin_names) + +# Complete Hamiltonian +H = H_loc + H_hyb + H_bath + +# Diagonalize H +ed.diagonalize(H) + +# Compute G(i\omega) +G_iw = ed.G_iw(gf_struct, beta, n_iw) + +########### +# G^{(2)} # +########### + +common_g2_params = {'gf_struct' : gf_struct, + 'beta' : beta, + 'n_iw' : g2_n_iw} + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_ph_AABB = ed.G2_iw_inu_inup(channel = "PH", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),ph}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_ph_ABBA = ed.G2_iw_inu_inup(channel = "PH", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), AABB block order +G2_iw_inu_inup_pp_AABB = ed.G2_iw_inu_inup(channel = "PP", + block_order = "AABB", + n_inu = g2_n_inu, + **common_g2_params) + +# Compute G^{(2),pp}(i\omega;i\nu,i\nu'), ABBA block order +G2_iw_inu_inup_pp_ABBA = ed.G2_iw_inu_inup(channel = "PP", + block_order = "ABBA", + n_inu = g2_n_inu, + **common_g2_params) + +b_mesh = MeshImFreq(beta = beta, S = 'Boson', n_max = g2_n_iw) +f_mesh = MeshImFreq(beta = beta, S = 'Fermion', n_max = g2_n_inu) +g2_mesh = MeshProduct(b_mesh, f_mesh, f_mesh) + +# Check meshes of G2 containers +for bn1, bn2 in product(spin_names, spin_names): + assert G2_iw_inu_inup_ph_AABB[bn1, bn2].mesh == g2_mesh + assert G2_iw_inu_inup_ph_ABBA[bn1, bn2].mesh == g2_mesh + assert G2_iw_inu_inup_pp_AABB[bn1, bn2].mesh == g2_mesh + assert G2_iw_inu_inup_pp_ABBA[bn1, bn2].mesh == g2_mesh + +G2_iw_inu_inup_ph_AABB_wick = G2_iw_inu_inup_ph_AABB.copy() +G2_iw_inu_inup_ph_ABBA_wick = G2_iw_inu_inup_ph_AABB.copy() +G2_iw_inu_inup_pp_AABB_wick = G2_iw_inu_inup_ph_AABB.copy() +G2_iw_inu_inup_pp_ABBA_wick = G2_iw_inu_inup_ph_AABB.copy() + +G = lambda s, i: G_iw[s].data[i + n_iw, 0, 0] + +g2_mesh_enum = product(enumerate(b_mesh), enumerate(f_mesh), enumerate(f_mesh)) +for (m, w), (i, nu), (ip, nup) in g2_mesh_enum: + m -= g2_n_iw - 1 + i -= g2_n_inu + ip -= g2_n_inu + d_w_0 = int(m == 0) + d_w_nu_nup = int(m == i + ip + 1) + d_nu_nup = int(i == ip) + + + for s1, s2 in product(spin_names, spin_names): + d_s1_s2 = int(s1 == s2) + + G2_iw_inu_inup_ph_AABB_wick[s1, s2].data[m + (g2_n_iw - 1), i + g2_n_inu, ip + g2_n_inu] = \ + beta * d_w_0 * G(s1, i) * G(s2, ip) - beta * d_nu_nup * d_s1_s2 * G(s1, m + i) * G(s2, i) + G2_iw_inu_inup_ph_ABBA_wick[s1, s2].data[m + (g2_n_iw - 1), i + g2_n_inu, ip + g2_n_inu] = \ + beta * d_w_0 * d_s1_s2 * G(s1, i) * G(s2, ip) - beta * d_nu_nup * G(s2, m + i) * G(s1, i) + G2_iw_inu_inup_pp_AABB_wick[s1, s2].data[m + (g2_n_iw - 1), i + g2_n_inu, ip + g2_n_inu] = \ + beta * d_w_nu_nup * G(s1, i) * G(s2, ip) - beta * d_nu_nup * d_s1_s2 * G(s1, m - i - 1) * G(s2, i) + G2_iw_inu_inup_pp_ABBA_wick[s1, s2].data[m + (g2_n_iw - 1), i + g2_n_inu, ip + g2_n_inu] = \ + beta * d_w_nu_nup * d_s1_s2 * G(s1, i) * G(s2, ip) - beta * d_nu_nup * G(s2, m - i - 1) * G(s1, i) + +for s1, s2 in product(spin_names, spin_names): + assert_gfs_are_close(G2_iw_inu_inup_ph_AABB_wick[s1, s2], G2_iw_inu_inup_ph_AABB[s1, s2]) + assert_gfs_are_close(G2_iw_inu_inup_ph_ABBA_wick[s1, s2], G2_iw_inu_inup_ph_ABBA[s1, s2]) + assert_gfs_are_close(G2_iw_inu_inup_pp_AABB_wick[s1, s2], G2_iw_inu_inup_pp_AABB[s1, s2]) + assert_gfs_are_close(G2_iw_inu_inup_pp_ABBA_wick[s1, s2], G2_iw_inu_inup_pp_ABBA[s1, s2])