From 341e28268db995c657133d2aba7b168c643907da Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Mon, 22 Apr 2019 09:37:08 -0400 Subject: [PATCH] Update pragma rewiring expectations (#878) * update tests to not expect PRAGMA ..._REWIRING * tolerate extended whitespace before comments or newlines * tolerate comments in replies from quilc --- docs/source/compiler.rst | 14 +- pyquil/_parser/Quil.g4 | 4 +- pyquil/_parser/gen3/QuilLexer.py | 371 ++++++++++++++++--------------- pyquil/tests/test_api.py | 4 +- 4 files changed, 198 insertions(+), 195 deletions(-) diff --git a/docs/source/compiler.rst b/docs/source/compiler.rst index 3e9d5ab2a..1366ea35c 100644 --- a/docs/source/compiler.rst +++ b/docs/source/compiler.rst @@ -59,7 +59,6 @@ with output .. code:: python - PRAGMA EXPECTED_REWIRING "#(0 1 2 3 4 5 6 7)" RZ(pi/2) 0 RX(pi/2) 0 RZ(-pi/2) 1 @@ -73,7 +72,6 @@ with output RZ(-pi/2) 1 RX(-pi/2) 2 RZ(pi/2) 2 - PRAGMA CURRENT_REWIRING "#(0 1 2 3 4 5 6 7)" The compiler connection is also available directly via the property ``qc.compiler``. The precise class of this object changes based on context (e.g., ``QPUCompiler``, @@ -247,12 +245,12 @@ Rewirings When a Quil program contains multi-qubit instructions that do not name qubit-qubit links present on a target device, the compiler will rearrange the qubits so that execution becomes possible. In order to -help the user understand what rearrangement may have been done, the compiler emits two forms of -``PRAGMA``: ``PRAGMA EXPECTED_REWIRING`` and ``PRAGMA CURRENT_REWIRING``. From the perspective of the -user, both ``PRAGMA`` instructions serve the same purpose: ``PRAGMA ..._REWIRING "#(n0 n1 ... nk)"`` -indicates that the logical qubit labeled ``j`` in the program has been assigned to lie on the physical -qubit labeled ``nj`` on the device. This is strictly for human-readability: user-supplied instructions -of the form ``PRAGMA [EXPECTED|CURRENT]_REWIRING`` are discarded and have no effect. +help the user understand what rearrangement may have been done, the compiler emits comments at various +points in the raw Quil code (which is not currently visible from a pyQuil ``Program`` object's ``.out()`` +method): ``# Entering rewiring`` and ``# Exiting rewiring``. From the perspective of the user, both +comments serve the same purpose: ``# Entering rewiring: #(n0 n1 ... nk)`` indicates that the logical +qubit labeled ``j`` in the program has been assigned to lie on the physical qubit labeled ``nj`` on +the device. This is strictly for human-readability: these comments are discarded and have no effect. In addition, you have some control over how the compiler constructs its rewiring, which is controlled by ``PRAGMA INITIAL_REWIRING``. The syntax is as follows. diff --git a/pyquil/_parser/Quil.g4 b/pyquil/_parser/Quil.g4 index 757342e2b..e3a9dde6e 100644 --- a/pyquil/_parser/Quil.g4 +++ b/pyquil/_parser/Quil.g4 @@ -245,11 +245,11 @@ UNDERSCORE : '_' ; // Whitespace TAB : ' ' ; -NEWLINE : ( '\r'? '\n' | '\r' )+ ; +NEWLINE : (' ' | '\t' )* ( '\r'? '\n' | '\r' )+ ; // Skips -COMMENT : '#' ~( '\n' | '\r' )* -> skip ; +COMMENT : (' ' | '\t' )* '#' ~( '\n' | '\r' )* -> skip ; SPACE : ' ' -> skip ; // Error diff --git a/pyquil/_parser/gen3/QuilLexer.py b/pyquil/_parser/gen3/QuilLexer.py index 8e341155b..9989dbb3b 100644 --- a/pyquil/_parser/gen3/QuilLexer.py +++ b/pyquil/_parser/gen3/QuilLexer.py @@ -8,7 +8,7 @@ def serializedATN(): with StringIO() as buf: buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2J") - buf.write("\u0205\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\u0211\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") @@ -46,187 +46,194 @@ def serializedATN(): buf.write("8\168\u01ba\58\u01bd\n8\38\38\58\u01c1\n8\38\68\u01c4") buf.write("\n8\r8\168\u01c5\58\u01c8\n8\39\39\79\u01cc\n9\f9\169") buf.write("\u01cf\139\39\39\3:\3:\3;\3;\3<\3<\3=\3=\3>\3>\3?\3?\3") - buf.write("@\3@\3A\3A\3B\3B\3C\3C\3D\3D\3E\3E\3E\3E\3E\3F\5F\u01ef") - buf.write("\nF\3F\3F\6F\u01f3\nF\rF\16F\u01f4\3G\3G\7G\u01f9\nG\f") - buf.write("G\16G\u01fc\13G\3G\3G\3H\3H\3H\3H\3I\3I\2\2J\3\3\5\4\7") - buf.write("\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17") - buf.write("\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63") - buf.write("\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-") - buf.write("Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}") - buf.write("@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008d") - buf.write("H\u008fI\u0091J\3\2\t\5\2C\\aac|\7\2//\62;C\\aac|\6\2") - buf.write("\62;C\\aac|\3\2\62;\4\2GGgg\4\2--//\4\2\f\f\17\17\2\u0212") - buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") - buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") - buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") - buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2") - buf.write("%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2") - buf.write("\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67") - buf.write("\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2") - buf.write("A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2") - buf.write("\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2") - buf.write("\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2") - buf.write("\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3") - buf.write("\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q") - buf.write("\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2") - buf.write("{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083") - buf.write("\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2") - buf.write("\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091") - buf.write("\3\2\2\2\3\u0093\3\2\2\2\5\u009b\3\2\2\2\7\u00a6\3\2\2") - buf.write("\2\t\u00ae\3\2\2\2\13\u00b4\3\2\2\2\r\u00b9\3\2\2\2\17") - buf.write("\u00be\3\2\2\2\21\u00c8\3\2\2\2\23\u00d4\3\2\2\2\25\u00da") - buf.write("\3\2\2\2\27\u00df\3\2\2\2\31\u00e3\3\2\2\2\33\u00eb\3") - buf.write("\2\2\2\35\u00f2\3\2\2\2\37\u00fa\3\2\2\2!\u0102\3\2\2") - buf.write("\2#\u0109\3\2\2\2%\u010d\3\2\2\2\'\u0111\3\2\2\2)\u0116") - buf.write("\3\2\2\2+\u011c\3\2\2\2-\u0120\3\2\2\2/\u0124\3\2\2\2") - buf.write("\61\u0128\3\2\2\2\63\u012b\3\2\2\2\65\u012f\3\2\2\2\67") - buf.write("\u0133\3\2\2\29\u0137\3\2\2\2;\u013b\3\2\2\2=\u0140\3") - buf.write("\2\2\2?\u0149\3\2\2\2A\u0151\3\2\2\2C\u0154\3\2\2\2E\u0157") - buf.write("\3\2\2\2G\u015a\3\2\2\2I\u015d\3\2\2\2K\u0160\3\2\2\2") - buf.write("M\u0165\3\2\2\2O\u016b\3\2\2\2Q\u016e\3\2\2\2S\u0170\3") - buf.write("\2\2\2U\u0174\3\2\2\2W\u0178\3\2\2\2Y\u017d\3\2\2\2[\u0181") - buf.write("\3\2\2\2]\u0185\3\2\2\2_\u0187\3\2\2\2a\u0189\3\2\2\2") - buf.write("c\u018b\3\2\2\2e\u018d\3\2\2\2g\u018f\3\2\2\2i\u019a\3") - buf.write("\2\2\2k\u01aa\3\2\2\2m\u01ad\3\2\2\2o\u01b2\3\2\2\2q\u01c9") - buf.write("\3\2\2\2s\u01d2\3\2\2\2u\u01d4\3\2\2\2w\u01d6\3\2\2\2") - buf.write("y\u01d8\3\2\2\2{\u01da\3\2\2\2}\u01dc\3\2\2\2\177\u01de") - buf.write("\3\2\2\2\u0081\u01e0\3\2\2\2\u0083\u01e2\3\2\2\2\u0085") - buf.write("\u01e4\3\2\2\2\u0087\u01e6\3\2\2\2\u0089\u01e8\3\2\2\2") - buf.write("\u008b\u01f2\3\2\2\2\u008d\u01f6\3\2\2\2\u008f\u01ff\3") - buf.write("\2\2\2\u0091\u0203\3\2\2\2\u0093\u0094\7F\2\2\u0094\u0095") - buf.write("\7G\2\2\u0095\u0096\7H\2\2\u0096\u0097\7I\2\2\u0097\u0098") - buf.write("\7C\2\2\u0098\u0099\7V\2\2\u0099\u009a\7G\2\2\u009a\4") - buf.write("\3\2\2\2\u009b\u009c\7F\2\2\u009c\u009d\7G\2\2\u009d\u009e") - buf.write("\7H\2\2\u009e\u009f\7E\2\2\u009f\u00a0\7K\2\2\u00a0\u00a1") - buf.write("\7T\2\2\u00a1\u00a2\7E\2\2\u00a2\u00a3\7W\2\2\u00a3\u00a4") - buf.write("\7K\2\2\u00a4\u00a5\7V\2\2\u00a5\6\3\2\2\2\u00a6\u00a7") - buf.write("\7O\2\2\u00a7\u00a8\7G\2\2\u00a8\u00a9\7C\2\2\u00a9\u00aa") - buf.write("\7U\2\2\u00aa\u00ab\7W\2\2\u00ab\u00ac\7T\2\2\u00ac\u00ad") - buf.write("\7G\2\2\u00ad\b\3\2\2\2\u00ae\u00af\7N\2\2\u00af\u00b0") - buf.write("\7C\2\2\u00b0\u00b1\7D\2\2\u00b1\u00b2\7G\2\2\u00b2\u00b3") - buf.write("\7N\2\2\u00b3\n\3\2\2\2\u00b4\u00b5\7J\2\2\u00b5\u00b6") - buf.write("\7C\2\2\u00b6\u00b7\7N\2\2\u00b7\u00b8\7V\2\2\u00b8\f") - buf.write("\3\2\2\2\u00b9\u00ba\7L\2\2\u00ba\u00bb\7W\2\2\u00bb\u00bc") - buf.write("\7O\2\2\u00bc\u00bd\7R\2\2\u00bd\16\3\2\2\2\u00be\u00bf") - buf.write("\7L\2\2\u00bf\u00c0\7W\2\2\u00c0\u00c1\7O\2\2\u00c1\u00c2") - buf.write("\7R\2\2\u00c2\u00c3\7/\2\2\u00c3\u00c4\7Y\2\2\u00c4\u00c5") - buf.write("\7J\2\2\u00c5\u00c6\7G\2\2\u00c6\u00c7\7P\2\2\u00c7\20") - buf.write("\3\2\2\2\u00c8\u00c9\7L\2\2\u00c9\u00ca\7W\2\2\u00ca\u00cb") - buf.write("\7O\2\2\u00cb\u00cc\7R\2\2\u00cc\u00cd\7/\2\2\u00cd\u00ce") - buf.write("\7W\2\2\u00ce\u00cf\7P\2\2\u00cf\u00d0\7N\2\2\u00d0\u00d1") - buf.write("\7G\2\2\u00d1\u00d2\7U\2\2\u00d2\u00d3\7U\2\2\u00d3\22") - buf.write("\3\2\2\2\u00d4\u00d5\7T\2\2\u00d5\u00d6\7G\2\2\u00d6\u00d7") - buf.write("\7U\2\2\u00d7\u00d8\7G\2\2\u00d8\u00d9\7V\2\2\u00d9\24") - buf.write("\3\2\2\2\u00da\u00db\7Y\2\2\u00db\u00dc\7C\2\2\u00dc\u00dd") - buf.write("\7K\2\2\u00dd\u00de\7V\2\2\u00de\26\3\2\2\2\u00df\u00e0") - buf.write("\7P\2\2\u00e0\u00e1\7Q\2\2\u00e1\u00e2\7R\2\2\u00e2\30") - buf.write("\3\2\2\2\u00e3\u00e4\7K\2\2\u00e4\u00e5\7P\2\2\u00e5\u00e6") - buf.write("\7E\2\2\u00e6\u00e7\7N\2\2\u00e7\u00e8\7W\2\2\u00e8\u00e9") - buf.write("\7F\2\2\u00e9\u00ea\7G\2\2\u00ea\32\3\2\2\2\u00eb\u00ec") - buf.write("\7R\2\2\u00ec\u00ed\7T\2\2\u00ed\u00ee\7C\2\2\u00ee\u00ef") - buf.write("\7I\2\2\u00ef\u00f0\7O\2\2\u00f0\u00f1\7C\2\2\u00f1\34") - buf.write("\3\2\2\2\u00f2\u00f3\7F\2\2\u00f3\u00f4\7G\2\2\u00f4\u00f5") - buf.write("\7E\2\2\u00f5\u00f6\7N\2\2\u00f6\u00f7\7C\2\2\u00f7\u00f8") - buf.write("\7T\2\2\u00f8\u00f9\7G\2\2\u00f9\36\3\2\2\2\u00fa\u00fb") - buf.write("\7U\2\2\u00fb\u00fc\7J\2\2\u00fc\u00fd\7C\2\2\u00fd\u00fe") - buf.write("\7T\2\2\u00fe\u00ff\7K\2\2\u00ff\u0100\7P\2\2\u0100\u0101") - buf.write("\7I\2\2\u0101 \3\2\2\2\u0102\u0103\7Q\2\2\u0103\u0104") - buf.write("\7H\2\2\u0104\u0105\7H\2\2\u0105\u0106\7U\2\2\u0106\u0107") - buf.write("\7G\2\2\u0107\u0108\7V\2\2\u0108\"\3\2\2\2\u0109\u010a") - buf.write("\7P\2\2\u010a\u010b\7G\2\2\u010b\u010c\7I\2\2\u010c$\3") - buf.write("\2\2\2\u010d\u010e\7P\2\2\u010e\u010f\7Q\2\2\u010f\u0110") - buf.write("\7V\2\2\u0110&\3\2\2\2\u0111\u0112\7V\2\2\u0112\u0113") - buf.write("\7T\2\2\u0113\u0114\7W\2\2\u0114\u0115\7G\2\2\u0115(\3") - buf.write("\2\2\2\u0116\u0117\7H\2\2\u0117\u0118\7C\2\2\u0118\u0119") - buf.write("\7N\2\2\u0119\u011a\7U\2\2\u011a\u011b\7G\2\2\u011b*\3") - buf.write("\2\2\2\u011c\u011d\7C\2\2\u011d\u011e\7P\2\2\u011e\u011f") - buf.write("\7F\2\2\u011f,\3\2\2\2\u0120\u0121\7K\2\2\u0121\u0122") - buf.write("\7Q\2\2\u0122\u0123\7T\2\2\u0123.\3\2\2\2\u0124\u0125") - buf.write("\7Z\2\2\u0125\u0126\7Q\2\2\u0126\u0127\7T\2\2\u0127\60") - buf.write("\3\2\2\2\u0128\u0129\7Q\2\2\u0129\u012a\7T\2\2\u012a\62") - buf.write("\3\2\2\2\u012b\u012c\7C\2\2\u012c\u012d\7F\2\2\u012d\u012e") - buf.write("\7F\2\2\u012e\64\3\2\2\2\u012f\u0130\7U\2\2\u0130\u0131") - buf.write("\7W\2\2\u0131\u0132\7D\2\2\u0132\66\3\2\2\2\u0133\u0134") - buf.write("\7O\2\2\u0134\u0135\7W\2\2\u0135\u0136\7N\2\2\u01368\3") - buf.write("\2\2\2\u0137\u0138\7F\2\2\u0138\u0139\7K\2\2\u0139\u013a") - buf.write("\7X\2\2\u013a:\3\2\2\2\u013b\u013c\7O\2\2\u013c\u013d") - buf.write("\7Q\2\2\u013d\u013e\7X\2\2\u013e\u013f\7G\2\2\u013f<\3") - buf.write("\2\2\2\u0140\u0141\7G\2\2\u0141\u0142\7Z\2\2\u0142\u0143") - buf.write("\7E\2\2\u0143\u0144\7J\2\2\u0144\u0145\7C\2\2\u0145\u0146") - buf.write("\7P\2\2\u0146\u0147\7I\2\2\u0147\u0148\7G\2\2\u0148>\3") - buf.write("\2\2\2\u0149\u014a\7E\2\2\u014a\u014b\7Q\2\2\u014b\u014c") - buf.write("\7P\2\2\u014c\u014d\7X\2\2\u014d\u014e\7G\2\2\u014e\u014f") - buf.write("\7T\2\2\u014f\u0150\7V\2\2\u0150@\3\2\2\2\u0151\u0152") - buf.write("\7G\2\2\u0152\u0153\7S\2\2\u0153B\3\2\2\2\u0154\u0155") - buf.write("\7I\2\2\u0155\u0156\7V\2\2\u0156D\3\2\2\2\u0157\u0158") - buf.write("\7I\2\2\u0158\u0159\7G\2\2\u0159F\3\2\2\2\u015a\u015b") - buf.write("\7N\2\2\u015b\u015c\7V\2\2\u015cH\3\2\2\2\u015d\u015e") - buf.write("\7N\2\2\u015e\u015f\7G\2\2\u015fJ\3\2\2\2\u0160\u0161") - buf.write("\7N\2\2\u0161\u0162\7Q\2\2\u0162\u0163\7C\2\2\u0163\u0164") - buf.write("\7F\2\2\u0164L\3\2\2\2\u0165\u0166\7U\2\2\u0166\u0167") - buf.write("\7V\2\2\u0167\u0168\7Q\2\2\u0168\u0169\7T\2\2\u0169\u016a") - buf.write("\7G\2\2\u016aN\3\2\2\2\u016b\u016c\7r\2\2\u016c\u016d") - buf.write("\7k\2\2\u016dP\3\2\2\2\u016e\u016f\7k\2\2\u016fR\3\2\2") - buf.write("\2\u0170\u0171\7U\2\2\u0171\u0172\7K\2\2\u0172\u0173\7") - buf.write("P\2\2\u0173T\3\2\2\2\u0174\u0175\7E\2\2\u0175\u0176\7") - buf.write("Q\2\2\u0176\u0177\7U\2\2\u0177V\3\2\2\2\u0178\u0179\7") - buf.write("U\2\2\u0179\u017a\7S\2\2\u017a\u017b\7T\2\2\u017b\u017c") - buf.write("\7V\2\2\u017cX\3\2\2\2\u017d\u017e\7G\2\2\u017e\u017f") - buf.write("\7Z\2\2\u017f\u0180\7R\2\2\u0180Z\3\2\2\2\u0181\u0182") - buf.write("\7E\2\2\u0182\u0183\7K\2\2\u0183\u0184\7U\2\2\u0184\\") - buf.write("\3\2\2\2\u0185\u0186\7-\2\2\u0186^\3\2\2\2\u0187\u0188") - buf.write("\7/\2\2\u0188`\3\2\2\2\u0189\u018a\7,\2\2\u018ab\3\2\2") - buf.write("\2\u018b\u018c\7\61\2\2\u018cd\3\2\2\2\u018d\u018e\7`") - buf.write("\2\2\u018ef\3\2\2\2\u018f\u0190\7E\2\2\u0190\u0191\7Q") - buf.write("\2\2\u0191\u0192\7P\2\2\u0192\u0193\7V\2\2\u0193\u0194") - buf.write("\7T\2\2\u0194\u0195\7Q\2\2\u0195\u0196\7N\2\2\u0196\u0197") - buf.write("\7N\2\2\u0197\u0198\7G\2\2\u0198\u0199\7F\2\2\u0199h\3") - buf.write("\2\2\2\u019a\u019b\7F\2\2\u019b\u019c\7C\2\2\u019c\u019d") - buf.write("\7I\2\2\u019d\u019e\7I\2\2\u019e\u019f\7G\2\2\u019f\u01a0") - buf.write("\7T\2\2\u01a0j\3\2\2\2\u01a1\u01ab\t\2\2\2\u01a2\u01a6") - buf.write("\t\2\2\2\u01a3\u01a5\t\3\2\2\u01a4\u01a3\3\2\2\2\u01a5") - buf.write("\u01a8\3\2\2\2\u01a6\u01a4\3\2\2\2\u01a6\u01a7\3\2\2\2") - buf.write("\u01a7\u01a9\3\2\2\2\u01a8\u01a6\3\2\2\2\u01a9\u01ab\t") - buf.write("\4\2\2\u01aa\u01a1\3\2\2\2\u01aa\u01a2\3\2\2\2\u01abl") - buf.write("\3\2\2\2\u01ac\u01ae\t\5\2\2\u01ad\u01ac\3\2\2\2\u01ae") - buf.write("\u01af\3\2\2\2\u01af\u01ad\3\2\2\2\u01af\u01b0\3\2\2\2") - buf.write("\u01b0n\3\2\2\2\u01b1\u01b3\t\5\2\2\u01b2\u01b1\3\2\2") - buf.write("\2\u01b3\u01b4\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4\u01b5") - buf.write("\3\2\2\2\u01b5\u01bc\3\2\2\2\u01b6\u01b8\7\60\2\2\u01b7") - buf.write("\u01b9\t\5\2\2\u01b8\u01b7\3\2\2\2\u01b9\u01ba\3\2\2\2") - buf.write("\u01ba\u01b8\3\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u01bd\3") - buf.write("\2\2\2\u01bc\u01b6\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01c7") - buf.write("\3\2\2\2\u01be\u01c0\t\6\2\2\u01bf\u01c1\t\7\2\2\u01c0") - buf.write("\u01bf\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01c3\3\2\2\2") - buf.write("\u01c2\u01c4\t\5\2\2\u01c3\u01c2\3\2\2\2\u01c4\u01c5\3") - buf.write("\2\2\2\u01c5\u01c3\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u01c8") - buf.write("\3\2\2\2\u01c7\u01be\3\2\2\2\u01c7\u01c8\3\2\2\2\u01c8") - buf.write("p\3\2\2\2\u01c9\u01cd\7$\2\2\u01ca\u01cc\n\b\2\2\u01cb") - buf.write("\u01ca\3\2\2\2\u01cc\u01cf\3\2\2\2\u01cd\u01cb\3\2\2\2") - buf.write("\u01cd\u01ce\3\2\2\2\u01ce\u01d0\3\2\2\2\u01cf\u01cd\3") - buf.write("\2\2\2\u01d0\u01d1\7$\2\2\u01d1r\3\2\2\2\u01d2\u01d3\7") - buf.write("\60\2\2\u01d3t\3\2\2\2\u01d4\u01d5\7.\2\2\u01d5v\3\2\2") - buf.write("\2\u01d6\u01d7\7*\2\2\u01d7x\3\2\2\2\u01d8\u01d9\7+\2") - buf.write("\2\u01d9z\3\2\2\2\u01da\u01db\7]\2\2\u01db|\3\2\2\2\u01dc") - buf.write("\u01dd\7_\2\2\u01dd~\3\2\2\2\u01de\u01df\7<\2\2\u01df") - buf.write("\u0080\3\2\2\2\u01e0\u01e1\7\'\2\2\u01e1\u0082\3\2\2\2") - buf.write("\u01e2\u01e3\7B\2\2\u01e3\u0084\3\2\2\2\u01e4\u01e5\7") - buf.write("$\2\2\u01e5\u0086\3\2\2\2\u01e6\u01e7\7a\2\2\u01e7\u0088") - buf.write("\3\2\2\2\u01e8\u01e9\7\"\2\2\u01e9\u01ea\7\"\2\2\u01ea") - buf.write("\u01eb\7\"\2\2\u01eb\u01ec\7\"\2\2\u01ec\u008a\3\2\2\2") - buf.write("\u01ed\u01ef\7\17\2\2\u01ee\u01ed\3\2\2\2\u01ee\u01ef") - buf.write("\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01f3\7\f\2\2\u01f1") - buf.write("\u01f3\7\17\2\2\u01f2\u01ee\3\2\2\2\u01f2\u01f1\3\2\2") - buf.write("\2\u01f3\u01f4\3\2\2\2\u01f4\u01f2\3\2\2\2\u01f4\u01f5") - buf.write("\3\2\2\2\u01f5\u008c\3\2\2\2\u01f6\u01fa\7%\2\2\u01f7") - buf.write("\u01f9\n\b\2\2\u01f8\u01f7\3\2\2\2\u01f9\u01fc\3\2\2\2") - buf.write("\u01fa\u01f8\3\2\2\2\u01fa\u01fb\3\2\2\2\u01fb\u01fd\3") - buf.write("\2\2\2\u01fc\u01fa\3\2\2\2\u01fd\u01fe\bG\2\2\u01fe\u008e") - buf.write("\3\2\2\2\u01ff\u0200\7\"\2\2\u0200\u0201\3\2\2\2\u0201") - buf.write("\u0202\bH\2\2\u0202\u0090\3\2\2\2\u0203\u0204\13\2\2\2") - buf.write("\u0204\u0092\3\2\2\2\21\2\u01a6\u01aa\u01af\u01b4\u01ba") - buf.write("\u01bc\u01c0\u01c5\u01c7\u01cd\u01ee\u01f2\u01f4\u01fa") - buf.write("\3\b\2\2") + buf.write("@\3@\3A\3A\3B\3B\3C\3C\3D\3D\3E\3E\3E\3E\3E\3F\7F\u01ef") + buf.write("\nF\fF\16F\u01f2\13F\3F\5F\u01f5\nF\3F\3F\6F\u01f9\nF") + buf.write("\rF\16F\u01fa\3G\7G\u01fe\nG\fG\16G\u0201\13G\3G\3G\7") + buf.write("G\u0205\nG\fG\16G\u0208\13G\3G\3G\3H\3H\3H\3H\3I\3I\2") + buf.write("\2J\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r") + buf.write("\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30") + buf.write("/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'") + buf.write("M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q") + buf.write(":s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F") + buf.write("\u008bG\u008dH\u008fI\u0091J\3\2\n\5\2C\\aac|\7\2//\62") + buf.write(";C\\aac|\6\2\62;C\\aac|\3\2\62;\4\2GGgg\4\2--//\4\2\f") + buf.write("\f\17\17\4\2\13\13\"\"\2\u0220\2\3\3\2\2\2\2\5\3\2\2\2") + buf.write("\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17") + buf.write("\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3") + buf.write("\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2") + buf.write("\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3") + buf.write("\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2") + buf.write("\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3") + buf.write("\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E") + buf.write("\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2") + buf.write("O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2") + buf.write("\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2") + buf.write("\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2") + buf.write("\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3") + buf.write("\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177") + buf.write("\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2") + buf.write("\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d") + buf.write("\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\3\u0093\3\2\2") + buf.write("\2\5\u009b\3\2\2\2\7\u00a6\3\2\2\2\t\u00ae\3\2\2\2\13") + buf.write("\u00b4\3\2\2\2\r\u00b9\3\2\2\2\17\u00be\3\2\2\2\21\u00c8") + buf.write("\3\2\2\2\23\u00d4\3\2\2\2\25\u00da\3\2\2\2\27\u00df\3") + buf.write("\2\2\2\31\u00e3\3\2\2\2\33\u00eb\3\2\2\2\35\u00f2\3\2") + buf.write("\2\2\37\u00fa\3\2\2\2!\u0102\3\2\2\2#\u0109\3\2\2\2%\u010d") + buf.write("\3\2\2\2\'\u0111\3\2\2\2)\u0116\3\2\2\2+\u011c\3\2\2\2") + buf.write("-\u0120\3\2\2\2/\u0124\3\2\2\2\61\u0128\3\2\2\2\63\u012b") + buf.write("\3\2\2\2\65\u012f\3\2\2\2\67\u0133\3\2\2\29\u0137\3\2") + buf.write("\2\2;\u013b\3\2\2\2=\u0140\3\2\2\2?\u0149\3\2\2\2A\u0151") + buf.write("\3\2\2\2C\u0154\3\2\2\2E\u0157\3\2\2\2G\u015a\3\2\2\2") + buf.write("I\u015d\3\2\2\2K\u0160\3\2\2\2M\u0165\3\2\2\2O\u016b\3") + buf.write("\2\2\2Q\u016e\3\2\2\2S\u0170\3\2\2\2U\u0174\3\2\2\2W\u0178") + buf.write("\3\2\2\2Y\u017d\3\2\2\2[\u0181\3\2\2\2]\u0185\3\2\2\2") + buf.write("_\u0187\3\2\2\2a\u0189\3\2\2\2c\u018b\3\2\2\2e\u018d\3") + buf.write("\2\2\2g\u018f\3\2\2\2i\u019a\3\2\2\2k\u01aa\3\2\2\2m\u01ad") + buf.write("\3\2\2\2o\u01b2\3\2\2\2q\u01c9\3\2\2\2s\u01d2\3\2\2\2") + buf.write("u\u01d4\3\2\2\2w\u01d6\3\2\2\2y\u01d8\3\2\2\2{\u01da\3") + buf.write("\2\2\2}\u01dc\3\2\2\2\177\u01de\3\2\2\2\u0081\u01e0\3") + buf.write("\2\2\2\u0083\u01e2\3\2\2\2\u0085\u01e4\3\2\2\2\u0087\u01e6") + buf.write("\3\2\2\2\u0089\u01e8\3\2\2\2\u008b\u01f0\3\2\2\2\u008d") + buf.write("\u01ff\3\2\2\2\u008f\u020b\3\2\2\2\u0091\u020f\3\2\2\2") + buf.write("\u0093\u0094\7F\2\2\u0094\u0095\7G\2\2\u0095\u0096\7H") + buf.write("\2\2\u0096\u0097\7I\2\2\u0097\u0098\7C\2\2\u0098\u0099") + buf.write("\7V\2\2\u0099\u009a\7G\2\2\u009a\4\3\2\2\2\u009b\u009c") + buf.write("\7F\2\2\u009c\u009d\7G\2\2\u009d\u009e\7H\2\2\u009e\u009f") + buf.write("\7E\2\2\u009f\u00a0\7K\2\2\u00a0\u00a1\7T\2\2\u00a1\u00a2") + buf.write("\7E\2\2\u00a2\u00a3\7W\2\2\u00a3\u00a4\7K\2\2\u00a4\u00a5") + buf.write("\7V\2\2\u00a5\6\3\2\2\2\u00a6\u00a7\7O\2\2\u00a7\u00a8") + buf.write("\7G\2\2\u00a8\u00a9\7C\2\2\u00a9\u00aa\7U\2\2\u00aa\u00ab") + buf.write("\7W\2\2\u00ab\u00ac\7T\2\2\u00ac\u00ad\7G\2\2\u00ad\b") + buf.write("\3\2\2\2\u00ae\u00af\7N\2\2\u00af\u00b0\7C\2\2\u00b0\u00b1") + buf.write("\7D\2\2\u00b1\u00b2\7G\2\2\u00b2\u00b3\7N\2\2\u00b3\n") + buf.write("\3\2\2\2\u00b4\u00b5\7J\2\2\u00b5\u00b6\7C\2\2\u00b6\u00b7") + buf.write("\7N\2\2\u00b7\u00b8\7V\2\2\u00b8\f\3\2\2\2\u00b9\u00ba") + buf.write("\7L\2\2\u00ba\u00bb\7W\2\2\u00bb\u00bc\7O\2\2\u00bc\u00bd") + buf.write("\7R\2\2\u00bd\16\3\2\2\2\u00be\u00bf\7L\2\2\u00bf\u00c0") + buf.write("\7W\2\2\u00c0\u00c1\7O\2\2\u00c1\u00c2\7R\2\2\u00c2\u00c3") + buf.write("\7/\2\2\u00c3\u00c4\7Y\2\2\u00c4\u00c5\7J\2\2\u00c5\u00c6") + buf.write("\7G\2\2\u00c6\u00c7\7P\2\2\u00c7\20\3\2\2\2\u00c8\u00c9") + buf.write("\7L\2\2\u00c9\u00ca\7W\2\2\u00ca\u00cb\7O\2\2\u00cb\u00cc") + buf.write("\7R\2\2\u00cc\u00cd\7/\2\2\u00cd\u00ce\7W\2\2\u00ce\u00cf") + buf.write("\7P\2\2\u00cf\u00d0\7N\2\2\u00d0\u00d1\7G\2\2\u00d1\u00d2") + buf.write("\7U\2\2\u00d2\u00d3\7U\2\2\u00d3\22\3\2\2\2\u00d4\u00d5") + buf.write("\7T\2\2\u00d5\u00d6\7G\2\2\u00d6\u00d7\7U\2\2\u00d7\u00d8") + buf.write("\7G\2\2\u00d8\u00d9\7V\2\2\u00d9\24\3\2\2\2\u00da\u00db") + buf.write("\7Y\2\2\u00db\u00dc\7C\2\2\u00dc\u00dd\7K\2\2\u00dd\u00de") + buf.write("\7V\2\2\u00de\26\3\2\2\2\u00df\u00e0\7P\2\2\u00e0\u00e1") + buf.write("\7Q\2\2\u00e1\u00e2\7R\2\2\u00e2\30\3\2\2\2\u00e3\u00e4") + buf.write("\7K\2\2\u00e4\u00e5\7P\2\2\u00e5\u00e6\7E\2\2\u00e6\u00e7") + buf.write("\7N\2\2\u00e7\u00e8\7W\2\2\u00e8\u00e9\7F\2\2\u00e9\u00ea") + buf.write("\7G\2\2\u00ea\32\3\2\2\2\u00eb\u00ec\7R\2\2\u00ec\u00ed") + buf.write("\7T\2\2\u00ed\u00ee\7C\2\2\u00ee\u00ef\7I\2\2\u00ef\u00f0") + buf.write("\7O\2\2\u00f0\u00f1\7C\2\2\u00f1\34\3\2\2\2\u00f2\u00f3") + buf.write("\7F\2\2\u00f3\u00f4\7G\2\2\u00f4\u00f5\7E\2\2\u00f5\u00f6") + buf.write("\7N\2\2\u00f6\u00f7\7C\2\2\u00f7\u00f8\7T\2\2\u00f8\u00f9") + buf.write("\7G\2\2\u00f9\36\3\2\2\2\u00fa\u00fb\7U\2\2\u00fb\u00fc") + buf.write("\7J\2\2\u00fc\u00fd\7C\2\2\u00fd\u00fe\7T\2\2\u00fe\u00ff") + buf.write("\7K\2\2\u00ff\u0100\7P\2\2\u0100\u0101\7I\2\2\u0101 \3") + buf.write("\2\2\2\u0102\u0103\7Q\2\2\u0103\u0104\7H\2\2\u0104\u0105") + buf.write("\7H\2\2\u0105\u0106\7U\2\2\u0106\u0107\7G\2\2\u0107\u0108") + buf.write("\7V\2\2\u0108\"\3\2\2\2\u0109\u010a\7P\2\2\u010a\u010b") + buf.write("\7G\2\2\u010b\u010c\7I\2\2\u010c$\3\2\2\2\u010d\u010e") + buf.write("\7P\2\2\u010e\u010f\7Q\2\2\u010f\u0110\7V\2\2\u0110&\3") + buf.write("\2\2\2\u0111\u0112\7V\2\2\u0112\u0113\7T\2\2\u0113\u0114") + buf.write("\7W\2\2\u0114\u0115\7G\2\2\u0115(\3\2\2\2\u0116\u0117") + buf.write("\7H\2\2\u0117\u0118\7C\2\2\u0118\u0119\7N\2\2\u0119\u011a") + buf.write("\7U\2\2\u011a\u011b\7G\2\2\u011b*\3\2\2\2\u011c\u011d") + buf.write("\7C\2\2\u011d\u011e\7P\2\2\u011e\u011f\7F\2\2\u011f,\3") + buf.write("\2\2\2\u0120\u0121\7K\2\2\u0121\u0122\7Q\2\2\u0122\u0123") + buf.write("\7T\2\2\u0123.\3\2\2\2\u0124\u0125\7Z\2\2\u0125\u0126") + buf.write("\7Q\2\2\u0126\u0127\7T\2\2\u0127\60\3\2\2\2\u0128\u0129") + buf.write("\7Q\2\2\u0129\u012a\7T\2\2\u012a\62\3\2\2\2\u012b\u012c") + buf.write("\7C\2\2\u012c\u012d\7F\2\2\u012d\u012e\7F\2\2\u012e\64") + buf.write("\3\2\2\2\u012f\u0130\7U\2\2\u0130\u0131\7W\2\2\u0131\u0132") + buf.write("\7D\2\2\u0132\66\3\2\2\2\u0133\u0134\7O\2\2\u0134\u0135") + buf.write("\7W\2\2\u0135\u0136\7N\2\2\u01368\3\2\2\2\u0137\u0138") + buf.write("\7F\2\2\u0138\u0139\7K\2\2\u0139\u013a\7X\2\2\u013a:\3") + buf.write("\2\2\2\u013b\u013c\7O\2\2\u013c\u013d\7Q\2\2\u013d\u013e") + buf.write("\7X\2\2\u013e\u013f\7G\2\2\u013f<\3\2\2\2\u0140\u0141") + buf.write("\7G\2\2\u0141\u0142\7Z\2\2\u0142\u0143\7E\2\2\u0143\u0144") + buf.write("\7J\2\2\u0144\u0145\7C\2\2\u0145\u0146\7P\2\2\u0146\u0147") + buf.write("\7I\2\2\u0147\u0148\7G\2\2\u0148>\3\2\2\2\u0149\u014a") + buf.write("\7E\2\2\u014a\u014b\7Q\2\2\u014b\u014c\7P\2\2\u014c\u014d") + buf.write("\7X\2\2\u014d\u014e\7G\2\2\u014e\u014f\7T\2\2\u014f\u0150") + buf.write("\7V\2\2\u0150@\3\2\2\2\u0151\u0152\7G\2\2\u0152\u0153") + buf.write("\7S\2\2\u0153B\3\2\2\2\u0154\u0155\7I\2\2\u0155\u0156") + buf.write("\7V\2\2\u0156D\3\2\2\2\u0157\u0158\7I\2\2\u0158\u0159") + buf.write("\7G\2\2\u0159F\3\2\2\2\u015a\u015b\7N\2\2\u015b\u015c") + buf.write("\7V\2\2\u015cH\3\2\2\2\u015d\u015e\7N\2\2\u015e\u015f") + buf.write("\7G\2\2\u015fJ\3\2\2\2\u0160\u0161\7N\2\2\u0161\u0162") + buf.write("\7Q\2\2\u0162\u0163\7C\2\2\u0163\u0164\7F\2\2\u0164L\3") + buf.write("\2\2\2\u0165\u0166\7U\2\2\u0166\u0167\7V\2\2\u0167\u0168") + buf.write("\7Q\2\2\u0168\u0169\7T\2\2\u0169\u016a\7G\2\2\u016aN\3") + buf.write("\2\2\2\u016b\u016c\7r\2\2\u016c\u016d\7k\2\2\u016dP\3") + buf.write("\2\2\2\u016e\u016f\7k\2\2\u016fR\3\2\2\2\u0170\u0171\7") + buf.write("U\2\2\u0171\u0172\7K\2\2\u0172\u0173\7P\2\2\u0173T\3\2") + buf.write("\2\2\u0174\u0175\7E\2\2\u0175\u0176\7Q\2\2\u0176\u0177") + buf.write("\7U\2\2\u0177V\3\2\2\2\u0178\u0179\7U\2\2\u0179\u017a") + buf.write("\7S\2\2\u017a\u017b\7T\2\2\u017b\u017c\7V\2\2\u017cX\3") + buf.write("\2\2\2\u017d\u017e\7G\2\2\u017e\u017f\7Z\2\2\u017f\u0180") + buf.write("\7R\2\2\u0180Z\3\2\2\2\u0181\u0182\7E\2\2\u0182\u0183") + buf.write("\7K\2\2\u0183\u0184\7U\2\2\u0184\\\3\2\2\2\u0185\u0186") + buf.write("\7-\2\2\u0186^\3\2\2\2\u0187\u0188\7/\2\2\u0188`\3\2\2") + buf.write("\2\u0189\u018a\7,\2\2\u018ab\3\2\2\2\u018b\u018c\7\61") + buf.write("\2\2\u018cd\3\2\2\2\u018d\u018e\7`\2\2\u018ef\3\2\2\2") + buf.write("\u018f\u0190\7E\2\2\u0190\u0191\7Q\2\2\u0191\u0192\7P") + buf.write("\2\2\u0192\u0193\7V\2\2\u0193\u0194\7T\2\2\u0194\u0195") + buf.write("\7Q\2\2\u0195\u0196\7N\2\2\u0196\u0197\7N\2\2\u0197\u0198") + buf.write("\7G\2\2\u0198\u0199\7F\2\2\u0199h\3\2\2\2\u019a\u019b") + buf.write("\7F\2\2\u019b\u019c\7C\2\2\u019c\u019d\7I\2\2\u019d\u019e") + buf.write("\7I\2\2\u019e\u019f\7G\2\2\u019f\u01a0\7T\2\2\u01a0j\3") + buf.write("\2\2\2\u01a1\u01ab\t\2\2\2\u01a2\u01a6\t\2\2\2\u01a3\u01a5") + buf.write("\t\3\2\2\u01a4\u01a3\3\2\2\2\u01a5\u01a8\3\2\2\2\u01a6") + buf.write("\u01a4\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a7\u01a9\3\2\2\2") + buf.write("\u01a8\u01a6\3\2\2\2\u01a9\u01ab\t\4\2\2\u01aa\u01a1\3") + buf.write("\2\2\2\u01aa\u01a2\3\2\2\2\u01abl\3\2\2\2\u01ac\u01ae") + buf.write("\t\5\2\2\u01ad\u01ac\3\2\2\2\u01ae\u01af\3\2\2\2\u01af") + buf.write("\u01ad\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0n\3\2\2\2\u01b1") + buf.write("\u01b3\t\5\2\2\u01b2\u01b1\3\2\2\2\u01b3\u01b4\3\2\2\2") + buf.write("\u01b4\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5\u01bc\3") + buf.write("\2\2\2\u01b6\u01b8\7\60\2\2\u01b7\u01b9\t\5\2\2\u01b8") + buf.write("\u01b7\3\2\2\2\u01b9\u01ba\3\2\2\2\u01ba\u01b8\3\2\2\2") + buf.write("\u01ba\u01bb\3\2\2\2\u01bb\u01bd\3\2\2\2\u01bc\u01b6\3") + buf.write("\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01c7\3\2\2\2\u01be\u01c0") + buf.write("\t\6\2\2\u01bf\u01c1\t\7\2\2\u01c0\u01bf\3\2\2\2\u01c0") + buf.write("\u01c1\3\2\2\2\u01c1\u01c3\3\2\2\2\u01c2\u01c4\t\5\2\2") + buf.write("\u01c3\u01c2\3\2\2\2\u01c4\u01c5\3\2\2\2\u01c5\u01c3\3") + buf.write("\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u01c8\3\2\2\2\u01c7\u01be") + buf.write("\3\2\2\2\u01c7\u01c8\3\2\2\2\u01c8p\3\2\2\2\u01c9\u01cd") + buf.write("\7$\2\2\u01ca\u01cc\n\b\2\2\u01cb\u01ca\3\2\2\2\u01cc") + buf.write("\u01cf\3\2\2\2\u01cd\u01cb\3\2\2\2\u01cd\u01ce\3\2\2\2") + buf.write("\u01ce\u01d0\3\2\2\2\u01cf\u01cd\3\2\2\2\u01d0\u01d1\7") + buf.write("$\2\2\u01d1r\3\2\2\2\u01d2\u01d3\7\60\2\2\u01d3t\3\2\2") + buf.write("\2\u01d4\u01d5\7.\2\2\u01d5v\3\2\2\2\u01d6\u01d7\7*\2") + buf.write("\2\u01d7x\3\2\2\2\u01d8\u01d9\7+\2\2\u01d9z\3\2\2\2\u01da") + buf.write("\u01db\7]\2\2\u01db|\3\2\2\2\u01dc\u01dd\7_\2\2\u01dd") + buf.write("~\3\2\2\2\u01de\u01df\7<\2\2\u01df\u0080\3\2\2\2\u01e0") + buf.write("\u01e1\7\'\2\2\u01e1\u0082\3\2\2\2\u01e2\u01e3\7B\2\2") + buf.write("\u01e3\u0084\3\2\2\2\u01e4\u01e5\7$\2\2\u01e5\u0086\3") + buf.write("\2\2\2\u01e6\u01e7\7a\2\2\u01e7\u0088\3\2\2\2\u01e8\u01e9") + buf.write("\7\"\2\2\u01e9\u01ea\7\"\2\2\u01ea\u01eb\7\"\2\2\u01eb") + buf.write("\u01ec\7\"\2\2\u01ec\u008a\3\2\2\2\u01ed\u01ef\t\t\2\2") + buf.write("\u01ee\u01ed\3\2\2\2\u01ef\u01f2\3\2\2\2\u01f0\u01ee\3") + buf.write("\2\2\2\u01f0\u01f1\3\2\2\2\u01f1\u01f8\3\2\2\2\u01f2\u01f0") + buf.write("\3\2\2\2\u01f3\u01f5\7\17\2\2\u01f4\u01f3\3\2\2\2\u01f4") + buf.write("\u01f5\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f6\u01f9\7\f\2\2") + buf.write("\u01f7\u01f9\7\17\2\2\u01f8\u01f4\3\2\2\2\u01f8\u01f7") + buf.write("\3\2\2\2\u01f9\u01fa\3\2\2\2\u01fa\u01f8\3\2\2\2\u01fa") + buf.write("\u01fb\3\2\2\2\u01fb\u008c\3\2\2\2\u01fc\u01fe\t\t\2\2") + buf.write("\u01fd\u01fc\3\2\2\2\u01fe\u0201\3\2\2\2\u01ff\u01fd\3") + buf.write("\2\2\2\u01ff\u0200\3\2\2\2\u0200\u0202\3\2\2\2\u0201\u01ff") + buf.write("\3\2\2\2\u0202\u0206\7%\2\2\u0203\u0205\n\b\2\2\u0204") + buf.write("\u0203\3\2\2\2\u0205\u0208\3\2\2\2\u0206\u0204\3\2\2\2") + buf.write("\u0206\u0207\3\2\2\2\u0207\u0209\3\2\2\2\u0208\u0206\3") + buf.write("\2\2\2\u0209\u020a\bG\2\2\u020a\u008e\3\2\2\2\u020b\u020c") + buf.write("\7\"\2\2\u020c\u020d\3\2\2\2\u020d\u020e\bH\2\2\u020e") + buf.write("\u0090\3\2\2\2\u020f\u0210\13\2\2\2\u0210\u0092\3\2\2") + buf.write("\2\23\2\u01a6\u01aa\u01af\u01b4\u01ba\u01bc\u01c0\u01c5") + buf.write("\u01c7\u01cd\u01f0\u01f4\u01f8\u01fa\u01ff\u0206\3\b\2") + buf.write("\2") return buf.getvalue() diff --git a/pyquil/tests/test_api.py b/pyquil/tests/test_api.py index 35a61fff3..f04631627 100644 --- a/pyquil/tests/test_api.py +++ b/pyquil/tests/test_api.py @@ -44,7 +44,6 @@ BELL_STATE = Program(H(0), CNOT(0, 1)) BELL_STATE_MEASURE = Program(H(0), CNOT(0, 1), MEASURE(0, 0), MEASURE(1, 1)) COMPILED_BELL_STATE = Program([ - Pragma("EXPECTED_REWIRING", ('"#(0 1 2 3)"',)), RZ(pi / 2, 0), RX(pi / 2, 0), RZ(-pi / 2, 1), @@ -53,7 +52,6 @@ RZ(-pi / 2, 0), RX(-pi / 2, 1), RZ(pi / 2, 1), - Pragma("CURRENT_REWIRING", ('"#(0 1 2 3)"',)), Halt() ]) DUMMY_ISA_DICT = {"1Q": {"0": {}, "1": {}}, "2Q": {"0-1": {}}} @@ -247,7 +245,7 @@ def test_get_qc_returns_remote_qvm_compiler(): @mock_qpu_compiler_server.rpc_handler def native_quil_to_binary(payload: BinaryExecutableRequest) -> BinaryExecutableResponse: - assert payload.quil == COMPILED_BELL_STATE.out() + assert Program(payload.quil).out() == COMPILED_BELL_STATE.out() time.sleep(0.1) return BinaryExecutableResponse(program=COMPILED_BYTES_ARRAY)