https://github.com/epiqc/ScaffCC
Raw File
Tip revision: 4d7bfa034cfaea4e8346396c6198cdd3e271d272 authored by Andrew Litteken on 23 April 2020, 16:55:47 UTC
Version 5 Upgrade! (#40)
Tip revision: 4d7bfa0
UCCSD_ansatz_6.scaffold
#define PI 3.141592653589793238462643383279502884197
const int N = 6;

// NxN and NxNxNxN rotation angles for single and double excitation operators
// generated in Python as [random.uniform(0, 2*math.pi) for _ in range(N*...*N)]
const double Theta_p_q[N][N] = {2.515039361370519, 1.860632649136102, 0.31718707385218314, 5.504213579806724, 5.989222114108289, 2.0282818921289496, 2.3406579110433263, 3.9131621572230384, 4.845729881956943, 4.585027796885711, 4.071004082842135, 4.498569485975175, 4.7357885531284225, 3.2472862233877557, 2.7414973470516295, 4.5691040644082594, 1.863333422943442, 0.2663216191002778, 2.6336123362746187, 6.0333605680648725, 1.606383506454974, 4.52118132262467, 1.4251687760632987, 0.3125087316505064, 3.42770577576631, 3.353791464488023, 5.42818876074252, 0.8538144608657958, 3.136544158009951, 4.164710036149654, 1.0989855419402488, 4.019744218371284, 2.683753968014301, 0.6790819992628554, 5.547861192098516, 1.508356862175039};
const double Theta_p_q_r_s[N][N][N][N] = {2.622323210977541, 3.906333083524502, 1.6071257075770544, 0.05465146888609601, 4.45086937777845, 0.567171952365438, 5.606994452761074, 5.019496574499806, 3.013746771328402, 2.1886487232932583, 4.4453227223460905, 2.1557507919394756, 4.96093324657564, 0.014759725435268347, 2.5271207581772734, 2.4817941681574065, 4.932831532954821, 3.3752521280395813, 0.82822557203874, 3.0776818110052013, 4.530433558910385, 3.207161537977699, 6.093208184995521, 3.8894593204730232, 4.956724366247059, 6.058948564941248, 1.353110717302583, 3.998972011925115, 3.644320469027228, 0.9878480664257641, 0.6156695828599378, 2.8862936992484265, 2.770654194290265, 4.303068977680983, 1.364607667186205, 1.071667641811877, 0.5941179409933569, 5.787234878675334, 3.675982427449157, 2.5699349974144803, 6.109379837941623, 3.2617086544802296, 0.06633653371033695, 1.6534950905666899, 1.291599729702019, 5.143393857522924, 1.7199890681565684, 5.987585704850204, 3.0193539153132165, 1.4386427924988225, 3.601099166885009, 3.966332792684363, 2.5621338142277095, 1.0208391700130701, 0.42343670336957406, 1.523614655606883, 4.081124727240066, 5.657104464997299, 2.935157809019364, 0.4654137291956419, 4.877442789301444, 1.85018497194297, 5.421489860066636, 3.2768761615916238, 4.073804079734158, 2.187206536648313, 2.463000601455395, 4.304005646686364, 3.0191186566067625, 0.8306188922552341, 5.616144216959015, 1.0211372610357714, 0.1298879250573958, 3.646074072895033, 1.5166842694156217, 4.775132276593353, 0.8363400729550006, 1.326572515752253, 3.720865001098476, 5.789916165065805, 1.9223762235019546, 5.037735398487102, 5.814703879300411, 0.9550387220882018, 5.373764826393196, 3.6683546998785754, 2.104111456276533, 0.9117233379595712, 0.7983017536561913, 3.361563990825628, 3.4257095465074197, 3.3030130045972554, 5.002967537458966, 2.080254825933573, 2.5115356222731964, 1.8284232833225011, 4.417710002424906, 0.7372951020128042, 0.0034066613824312825, 0.2867758889147281, 1.6321609551404699, 2.481698739976882, 4.285199913925367, 3.212858028406215, 4.923657428563344, 1.8307558312474967, 5.332361080874853, 0.7156503080633413, 1.226911119803384, 5.41231786589596, 2.5191825270086294, 2.46538889434204, 4.613118428974696, 0.4242536758533259, 3.5526250849354266, 6.02421612108008, 0.2638400526147979, 5.355082251563163, 6.069387786791847, 3.3529396869821784, 4.945440718481962, 4.630723628180837, 5.91267006502004, 5.965699336195695, 0.5002531230967261, 0.15210977785089122, 0.6228909074402584, 1.849830672510718, 2.9538801157754935, 3.2580621541609216, 1.1459345139888506, 4.0374194902831215, 5.780576525369064, 0.4398929133486282, 4.674939281645305, 0.77224898402784, 4.48266079381349, 5.65911069280323, 1.5443050600289228, 0.1580148428704617, 1.334178711515644, 5.22491683043546, 2.957664491995839, 6.021648119541926, 1.7829171538024253, 1.4596202012174095, 4.192969715249015, 0.8947039952787664, 4.854298608775107, 2.9401426069076937, 3.12077637880147, 5.628024252197395, 2.4549195376304875, 5.049692040900807, 0.5074470336806433, 1.6985375877628843, 2.6875748500359977, 5.481384912796409, 4.826189473337494, 4.909969180610775, 4.389234228111256, 5.750808545095705, 3.1168717673624693, 5.491169585604023, 2.8046348080414853, 1.4432789805976496, 0.10899651890933212, 5.582614417919744, 5.285574982574566, 3.207191993511391, 4.463197239617778, 4.6847445318352525, 4.224990019917355, 1.386771487049227, 0.6917063608034328, 0.024227757291533182, 5.13205042137659, 2.026887891566386, 2.8199008953941385, 3.7842938505392953, 1.147767776267434, 4.173272061429942, 0.40541708562977136, 3.5920528003612913, 0.9622020980800493, 5.148350317498422, 3.5812454379571603, 4.437623351735198, 2.0833866445831917, 1.5336910193730477, 5.3428479708501, 2.14078503938396, 0.8243113308042486, 3.4359129742348182, 2.9134497427206365, 2.93949249056062, 0.06312192491107901, 2.9034290638169353, 1.1514980378340862, 1.652685549215571, 5.347895152643288, 0.16385313984232222, 1.6863750949656138, 2.9447520238637677, 3.7636598432697577, 5.4320988669202, 0.17986714674399717, 5.160352367408122, 0.7914179467288479, 5.007206090660978, 2.78314653843318, 1.6421421072187987, 0.5340116290108354, 3.009983458931095, 3.736789855105158, 3.2991640025101714, 3.958697125722292, 4.104342383699523, 5.047093175704456, 2.8801631853186045, 3.893094546164137, 4.596780281593394, 3.8979938244775325, 5.0382437137012435, 1.017018392411657, 0.40873682856455196, 4.487603115232, 5.356869616335665, 5.93083257597514, 3.4345991739599504, 4.184521817487807, 3.8110597332575122, 4.789534208562426, 3.30497882356762, 0.709565429186701, 3.780713547460414, 5.540472612674166, 5.954195651826744, 3.5883153318441465, 4.049574050161476, 0.7143740157611135, 1.6622971141908391, 1.6148136105433208, 0.3839655464241049, 1.0622790379917801, 2.2771191463153744, 0.18800806008869614, 0.33752736014077656, 2.7076974517010814, 5.1907285461689385, 5.245014601935428, 0.3868140262921817, 0.23094787052650936, 1.762316823992362, 1.9560334380001314, 2.843832449228668, 3.8525063308552188, 0.186319773708366, 3.0714572603620893, 2.4452365878379467, 6.255109550202678, 1.5997532110095989, 0.462399856340904, 4.185673421511912, 4.461406533848278, 5.063895787392896, 3.252698242720052, 0.10894823656660858, 3.4896846018337473, 1.1411862490542215, 4.6350205564562055, 0.9478004575825876, 5.62452217751551, 1.5058076783447858, 4.161844321765212, 0.9517554248969303, 4.136589763347995, 0.9380392430335818, 3.9096600776860093, 4.227947530734885, 3.328990119464051, 6.199087044621693, 3.7514670212060524, 4.2153463444849, 3.3466349021676063, 0.8017408691870941, 1.6307887161645016, 5.5709926890227095, 0.04466883268602998, 3.196647554750279, 0.8853857841597131, 1.4716143455613293, 2.4187741677743944, 5.319675510465772, 2.206844021113747, 4.819829493452515, 0.3266405120562348, 0.08736010865235234, 5.257794286156163, 1.9081341888999943, 5.3448124854752805, 6.264102189227519, 4.426831789669883, 4.718304351046692, 0.8976008060644249, 4.207683885830533, 4.602924287080801, 3.8490821295040276, 5.839333176073283, 0.9218973771902602, 2.395789008335513, 2.443222027918192, 1.3855224559981856, 3.9261383699706403, 0.07785945231058075, 1.8535776639547465, 1.1224269394000526, 1.2345608179268277, 0.9160984674614235, 5.8904607870473935, 4.699249532562648, 5.252212997208222, 2.30637890581883, 2.066023602696579, 1.1599970638762191, 0.6944994909126232, 2.72267611103403, 3.2348815997942464, 3.709357587293986, 6.106500011210755, 2.00998327855732, 4.451777132599374, 5.825864692671627, 3.9677299389675036, 0.15127713237986576, 5.682413432740296, 4.390083418199884, 5.286515348578917, 2.7473140318948714, 4.654450365794618, 1.0093432131943443, 5.053733847956332, 3.7482266975613032, 0.46870068117148106, 3.8838231953207893, 3.6289005450539014, 5.214708532121607, 5.763737410878364, 4.955130016953878, 4.772492882664763, 6.0303250420403, 0.04660183686561231, 4.340840004150901, 5.869733580717073, 6.189311615889339, 0.9774442616961796, 2.0370587710489687, 0.6711945887836733, 0.7980806408080706, 1.1788400913932309, 4.326342025408273, 2.9575177166424194, 5.163725267472336, 2.7103236197447083, 4.628975848087949, 5.701727427241831, 1.2060907144835487, 6.243205693960865, 2.85426268244089, 1.607128647390562, 6.20356853960133, 1.5402654942559741, 2.925309712949919, 4.56369930829258, 0.6088009548649974, 0.2969245837287781, 3.3637784443516354, 5.3500032101367, 2.6276527222895187, 2.767086713737254, 0.6924743245465795, 6.055916452801188, 0.592121769667029, 5.215075481258245, 0.08387776723451368, 0.7362416280402792, 3.023087612892969, 5.727141087801462, 1.0252005093521859, 4.434100478701442, 2.3039384747350757, 1.2742874190531124, 5.558589947406472, 0.8125688485431303, 2.78522169667532, 1.1840289288467791, 2.7685129181474832, 0.45037095484241096, 2.56442005706175, 3.7300377681951677, 4.1528850738051615, 5.479225990188898, 6.163442691864235, 2.888632181717506, 2.0062648720935723, 1.4504970354078852, 2.068837635293023, 2.11988302345368, 2.812902997239026, 4.225847494575256, 2.607919126874845, 4.2732570981612525, 0.8565636377763479, 1.6755704173273822, 0.7134956942504378, 3.0566833623353697, 1.2723615148925849, 1.915308080450323, 0.07659882040646165, 3.8465152243195257, 5.804248988802276, 4.16418528601122, 1.5075730538871905, 4.181457575799381, 1.897920833750049, 4.374791252434013, 4.167964786709566, 0.8106206273689415, 6.096945146772434, 4.325261928284146, 2.048598439167371, 4.477162177127332, 0.05603981766076111, 5.777906481543007, 0.6448236880028809, 1.4963979204934836, 1.9489146863055054, 2.8373935278720834, 5.64957571806289, 1.828192341729591, 4.1716989771827535, 1.823163647504898, 0.7085292023212499, 1.7278359587835381, 1.9768678924528222, 3.3336778146156973, 3.670129951302389, 1.8232142714897543, 2.9915876981303158, 3.1642300139096275, 3.4777882667283824, 4.2549050128513635, 5.383517126266585, 2.0184089636088007, 2.6632979615612893, 5.5152502895350075, 4.710081029266644, 0.015857845964135385, 2.653188814179528, 5.393795883939839, 6.0718451624555385, 3.7812654723932333, 2.164062465611261, 1.586088781545969, 1.4490688063176118, 4.4924158693981395, 0.9943155504961052, 4.820858598916363, 1.6543585310908735, 2.0752166906678378, 1.8101942734234362, 4.981808981804507, 4.836660276821178, 1.9419815367201756, 3.9737946111604874, 5.069148935513877, 0.18874911123213856, 4.676161284018349, 2.3619033450448823, 1.4336594141981072, 0.7941097426935759, 1.008931580421219, 4.974239673804752, 3.516240583561907, 0.8839260574107682, 1.9125250735560808, 0.8765887012253717, 0.20243851289329895, 3.7874750415244933, 1.062579486520709, 5.634282219815059, 3.337671435605989, 3.1009777575530175, 2.0038585219312934, 6.183367896019274, 4.893775315990822, 2.6445361653277724, 4.684344465814402, 1.7453351120713905, 4.784820009367943, 1.47125622121723, 1.5982501393301503, 5.285031727149605, 5.40051323958905, 4.034134423685634, 4.023247827805522, 3.5419180996736834, 5.192335532436374, 3.6667544778257284, 1.297637205248109, 4.6165111489549, 0.9132383347349868, 5.896356400366052, 0.32610133079214026, 5.438843353259169, 3.249502024104854, 1.3532940824536213, 2.358102539621628, 5.022905587796847, 2.517573965585135, 0.3078742977397631, 6.0842277074764795, 1.9313399553654158, 3.538699012178931, 4.935045518590933, 5.014985333715819, 2.874021670952111, 1.486861249964858, 0.5469616068341379, 3.0052771460198717, 5.925874780042736, 5.425476353150695, 3.786052600131622, 3.3922860401562023, 5.026108738872306, 3.127543452527347, 1.515302941758983, 5.298822016848306, 3.8098470105682827, 6.218656424371565, 4.8554622023319745, 5.061815858474757, 3.110308248878874, 5.372609983121229, 0.5696540160439111, 4.824655673053022, 1.3650398443854121, 4.843475786768374, 2.827883480630555, 3.6166048883493276, 3.286592436617875, 6.037741292559038, 3.0036236099580935, 2.750763769921251, 4.046268048523245, 0.7810979222128912, 6.0572432524853985, 2.918734460060305, 2.461112877697197, 0.346826381303762, 0.02827567047093271, 3.167298511700348, 0.9060664194122627, 5.388995417629681, 1.0472053948089781, 3.72291970983088, 5.160545093100209, 6.251000980830575, 6.1074581627771405, 4.396737110836341, 0.060091285940474186, 2.184483704723186, 3.7114525918732637, 1.9447493387692272, 1.8063605644501002, 1.1004757503854203, 4.335298623275336, 1.186410819600023, 5.224052896840275, 2.0503019250909724, 2.4030396467289283, 5.212983245981337, 5.635857455961258, 2.7137301426848697, 2.592704410435969, 6.032658099234499, 2.3017820197659646, 1.015949640016214, 1.582735212504052, 0.6834978838382283, 6.1105212234200295, 0.8208228852281775, 3.2734220355387156, 2.016759087201487, 0.31479003693972285, 1.0395796308327945, 3.0400459508435014, 0.29617484438162, 1.0945102696768079, 3.513935753531168, 1.362508569918451, 1.8498335859317527, 1.868460846484402, 5.180505120330729, 3.9650902297548973, 5.2003810254034954, 0.7791908093708774, 0.08403966243883677, 3.453526605091221, 0.34912605418263604, 0.09728228791716821, 2.068518868585532, 2.878304275376694, 5.32030776423925, 5.424497112154006, 3.3959219996040777, 3.9360731741648984, 0.30723863161142717, 5.269461294495595, 1.1557804639712717, 5.092960097232007, 5.696177957421484, 4.13415893121576, 1.448325649888381, 2.417354001440664, 5.541082180555064, 6.0561202578812825, 4.063529618115609, 5.636111351552358, 2.7257593630445713, 3.956846376017172, 3.2060507790856283, 0.08379356168983214, 3.347233278797303, 5.5608490406852855, 4.904862100554802, 5.5208280566545636, 1.2859265586253497, 0.5395309727777388, 4.016341328144301, 3.4817479772888764, 0.032873482361514154, 4.248852377915703, 5.578714194489264, 1.1921527277993784, 5.6309916804711495, 0.16087696775404403, 2.421772276874335, 2.9431268550413994, 2.384838609323893, 1.8631326072632903, 3.2196820244913753, 4.573591989645872, 2.872615649024222, 6.070773073165813, 3.785803884110495, 3.722528671946786, 6.066535583655123, 4.992729183060681, 2.8639161942709417, 1.871327486720315, 2.8005609059558676, 4.763257360966943, 3.8216779462364534, 0.697793171350277, 1.2713068400392444, 2.8385377936635794, 1.160687865222164, 3.513015944012593, 4.616638289009495, 1.971261989491461, 3.5459498371210874, 2.708420990817829, 6.221341642955067, 1.2154431419491072, 5.789159004542362, 2.2655481345678052, 2.434132683541724, 1.5943205156405211, 3.7929531761319897, 5.327565467857834, 2.7394745724781955, 5.3795918761724595, 5.585873352778905, 5.646542114320555, 3.264735294981419, 5.793617164695614, 3.0194580106415625, 5.080166571831812, 5.000573593546923, 5.649357088776977, 3.655284970995992, 4.596237344085584, 5.120670956477207, 2.417496818569668, 4.135376628498091, 2.6984367033360854, 5.219614581434657, 0.0030762166083821057, 0.6440834343918687, 1.5411881514410453, 0.3309811860519346, 2.3456815858435784, 0.43725090800198846, 1.0555713818328543, 2.3213638189441674, 3.460387616779321, 4.7105167747387, 0.5034866336751194, 0.5394052848550478, 5.785012325531275, 2.326747529647106, 5.0635730808049475, 5.5125803652613365, 1.6047353235525241, 6.0202648799032925, 5.43653403410024, 4.465480222965688, 5.9086462362783765, 6.0098185497385135, 5.148245926694928, 2.6238263568754205, 0.701177345581017, 2.419065854389664, 2.2685521926445698, 2.477166036004094, 4.638775466607639, 4.9666280521105515, 2.8618654041358074, 5.165066571544898, 2.806365775903936, 5.873737953344566, 0.6132944694402437, 4.493299665478473, 0.042308390110001697, 6.114908121912038, 2.2650256465348244, 3.1314871246354703, 1.2553521952506457, 1.4271504597505313, 2.865402604124756, 3.0537805014338795, 1.879743693474777, 2.774049836257758, 0.7819852053787217, 3.8803010169015755, 1.5874311031194208, 5.509188374724405, 5.5480944484297945, 0.8539910957394138, 5.846284097152815, 5.660099587185723, 3.8893372474575743, 4.109068208637694, 0.7823458451926507, 2.530468386747898, 3.1481183416829532, 0.6865171095108223, 4.371556300800495, 3.7914798600238493, 2.0489985221270115, 2.748072309423297, 5.149891065495844, 6.191454621366849, 5.639593256887981, 5.107036180236987, 3.6776193334624883, 1.272178666299569, 4.5473355948469605, 5.892318653220668, 0.35270971660530487, 5.740852438138433, 2.3875118834930222, 2.9092436035571074, 4.813834606709726, 4.607492889094366, 0.514328333523147, 4.053713437755461, 1.2902741854090662, 0.1294496933439186, 2.7913834313890895, 6.018284716432608, 0.07138564953892645, 4.2955371290737, 4.30534831380704, 6.013051547271193, 5.454980776741639, 1.1798217664657844, 5.845150344652397, 1.0916428197058416, 2.0547711042097863, 3.0222837500398394, 3.6153922031895354, 2.970480773137814, 5.564174552779558, 0.2622038524782409, 5.941430665593005, 4.694297340768985, 2.599981181818279, 4.70391608531952, 1.0362666126381606, 5.239460665899495, 1.2159786768896623, 2.187966918982203, 5.581569485286059, 2.4634401449410968, 6.0294352972692264, 4.3372797029120225, 3.8287426540108864, 4.04388986828201, 2.344054613735159, 1.3579203613736155, 2.2801658678585732, 4.689320658837501, 0.34985769085575136, 4.735165070956144, 5.930437417731999, 4.993047299480665, 0.5067370284445009, 5.982502223312639, 1.7080332863834045, 5.662975342685511, 2.6322777454333055, 4.099216026681039, 2.157492644633716, 5.800762207135842, 3.5835324343708046, 3.3981533217941693, 1.456878334065919, 3.497613544042403, 4.512128956048151, 2.207229884492621, 1.0179740723565605, 0.012154875084007926, 2.242566158188127, 0.9175843556160251, 5.737130398612825, 4.176222996766418, 2.4004231008473442, 1.2967053216621942, 5.464008286493341, 0.7458916592948862, 4.517368207852954, 3.001431136479697, 4.761709866377948, 5.881476269201495, 6.047695088443345, 5.925451893509586, 3.134681090747185, 0.001690192181485478, 5.443062334544531, 4.549202789415018, 0.8081433372623629, 5.082815219350807, 0.5028250470920778, 5.318331712068108, 2.3199441102821097, 2.3511856156759565, 5.8831876461749, 4.9926043082872615, 1.0416383752940157, 2.2159041416117087, 6.107898552770096, 1.7290961180220557, 1.9732400160425574, 5.539673701244475, 5.507232794985513, 0.004839870786596387, 0.48962066499854767, 2.40619049845726, 2.485408903308203, 5.714388057633254, 6.202897905722064, 4.52737621252851, 2.0345039361401587, 0.35583955840194625, 1.6452838842955513, 2.505605103785679, 5.063103341816879, 3.330231604719267, 1.2680256279522024, 4.795651236698133, 2.0890964263060003, 1.6406704673059427, 3.775469742594288, 3.4405779148873417, 1.748539273194775, 0.9830318777909306, 1.6279601352536495, 4.32490561292507, 6.02900065014512, 3.2182819563866714, 4.0549132116565385, 4.8336152046609335, 1.147155875822084, 3.167400188611803, 4.745179668722908, 0.0892307245452915, 0.5589920843535541, 4.207563303889748, 3.074985034874139, 5.624405069038905, 3.2455002237303847, 5.372243534710036, 5.419262315404938, 1.7394226864206612, 3.9738787432768867, 2.7490455656544115, 1.9368475376587522, 2.195101974908525, 3.259629451420845, 2.646430600441254, 2.8906203233387315, 4.4467362535234845, 5.2440260261108, 4.240945453316998, 5.09777921548491, 2.640536356490721, 3.7613111883348047, 1.8991306762840858, 3.2800418541890046, 4.989623214337289, 1.9405816771667037, 3.5244739118108095, 1.0100642965852349, 5.4529484938948976, 3.352162990432338, 6.119173106925929, 0.5820949659702689, 5.853997067792626, 3.0593791656183713, 0.1637848323398182, 1.890301483700522, 4.3711806051196, 1.4843327107023394, 1.6283132874841146, 1.2630546954150026, 1.165026019061291, 6.274589691795223, 1.4848716898069194, 1.675827783202046, 5.495585756109023, 5.570538769792704, 2.2414918553831424, 4.535584152587868, 2.088765850728817, 6.0246772039231775, 1.6841915880272, 0.8147518215170305, 6.28101013525661, 4.999857087672935, 4.1610845607348095, 2.119723158944128, 2.65225158627933, 0.5116345604677692, 3.526938287008274, 4.391610548935925, 5.276270119737161, 4.770271652695502, 2.9358835573149427, 3.8080365704947154, 3.632980531707169, 5.473018096374021, 5.289432711569157, 4.448823688498243, 4.618952222278513, 1.4740925516349017, 5.227108000967313, 1.6831570422014097, 0.05931465624668157, 6.061380822202958, 2.0957778581127156, 2.550437071702287, 3.5616947130908643, 1.0926273906297561, 1.783540095700825, 5.302817175271126, 2.9671217449686185, 5.6639516165285455, 4.250710042399891, 0.5713013693411302, 4.808391255061431, 1.747061508099483, 4.733221998917217, 5.530073439781728, 2.0091047902912096, 2.632797445123739, 5.894850330772285, 3.4895532248207055, 5.089568810158687, 2.0749662237619315, 5.542974266677425, 0.09694014515635735, 3.0829125609912933, 5.417138437931578, 1.6905455166633874, 0.04071899849938862, 5.7607244221131575, 5.278748881437379, 5.178993306046475, 2.4306357301673214, 0.1804506178347872, 0.24020209317539182, 4.905042799071616, 3.5648788724432796, 1.2970778219477166, 3.7218036904286813, 5.387742476583223, 4.127677124606656, 2.128035445656575, 0.9635711596797246, 3.413838982356708, 6.117480134506215, 4.661572827535084, 6.263681605206896, 5.883483529138409, 2.7934168299393662, 3.082979929949474, 1.8713557022816958, 4.222629203761555, 2.756690177436338, 1.0020955709049764, 0.4230049190699547, 5.594149680515415, 5.011114433809228, 5.307353020674265, 1.4896871417830646, 1.7884048394218794, 1.871351140368721, 3.34605451140873, 0.48970421126615343, 1.0313816032912648, 3.791520562736151, 4.453378849033179, 4.306460299238668, 3.865772737172043, 5.961327247671904, 1.7865070852760412, 6.104140224384695, 0.06554402621308443, 2.4715342047508155, 1.0470243919734372, 0.339829306480319, 1.2882962458153644, 3.8218971301206723, 0.1409452662261184, 3.4204287660142185, 0.3228044612383337, 0.3991676703349856, 4.210681538154333, 5.1255854086684485, 2.41351760608291, 4.525501362449167, 0.3589383215297067, 2.2279290401760425, 1.1433117343547738, 3.129198738080554, 2.6304403974035453, 4.86312081294655, 2.5697176821600487, 4.3005802388777115, 5.613118022636949, 5.95249913731083, 1.407504964483907, 4.148243930117768, 5.8312348730639165, 3.3316278340589514, 4.150303911012112, 3.0846314335876657, 1.2721572536300025, 3.552398463076778, 3.2848412285845763, 2.85602163901434, 0.6398287656271978, 3.586268769555903, 5.408075297772187, 1.5100408532174088, 3.5473448808830232, 3.6374443488061283, 4.271006038338214, 1.1705769105554689, 1.3888375306538707, 2.1517489453701826, 2.273151514341368, 2.8824546805001985, 0.3670571163773421, 3.275593660354731, 5.14745132166036, 2.811482153813795, 6.201211320846972, 4.599576543143974, 0.4486768831261479, 1.2688005656488863, 0.9704026174393791, 0.37823813112673776, 0.35338145026347373, 3.018396974330525, 5.059594600498878, 6.079067634079632, 5.632843095417719, 4.5532537208685895, 0.7433448258402345, 2.7538945324427466, 0.6816392087930194, 3.7389717410490877, 0.8550638418540565, 0.10570563272628598, 4.494269544787759, 0.17282214715828473, 5.8979303972509545, 3.2604088824909683, 2.7992055260769892, 1.882448910204234, 3.349558160262818, 1.6921438312723596, 3.172443368680996, 5.308088901455734, 4.484799997001332, 5.223423855680003, 4.826947212758224, 3.4849590704439337, 0.8225949579338736, 1.6969273644554697, 1.2438444286742552, 0.8536725410264852, 5.216730499320596, 0.19498750471073156, 5.51959973761202, 1.497662100885938, 5.391403545636168, 5.168223902079811, 3.0630956872966935, 0.594626597776873, 0.864407000965679, 0.5668108930196254, 1.1398047758211765, 6.231949668923336, 1.2306876025416174, 5.964172467511678, 2.0417829371368654, 2.925512138377188, 3.6266997791436637, 5.444976770144234, 3.916639883344973, 3.84829038409, 3.1573742108560774, 3.9936847300259948, 3.413614134489806, 4.590841549699011, 2.317128341663558, 5.533733803941908, 2.4347031400293315, 4.953637249939884, 4.009546228101454, 4.5854516179363705, 2.3194544835608952, 5.248837133548141, 6.042638767927021, 2.140866468079886, 0.23238163669855916, 3.653651567544146, 0.6655531100172092, 1.2563077588436777, 3.972412075066308, 2.6252755333580002, 1.852052840019776, 2.576226997605846, 1.5202450624788721, 0.13794434620645102, 1.3413983368637987, 0.9400961241378374, 0.25970120587443285, 4.353087274627946, 1.3332077732244045, 5.048676297812047, 5.7676627837055054, 0.2113832244859538, 5.336594975391293, 5.87352889299446, 1.4990404570911773, 0.34891391687542656, 0.17804417386718524, 3.237694339949667, 1.004778624370542, 0.08519513339548349, 1.8638805190112615, 4.946803271035886, 6.2699674603743745, 0.7045677079403174, 0.43304544289408653, 5.557636442154974, 3.9663223364121234, 3.418456502370552, 5.109768629222906, 1.8471199020140956, 2.17640734430334, 3.8314071430181955, 4.4875357136134255, 1.7232161180852303, 3.5794330570585453, 5.882886424585663, 5.285148594639413, 4.478772512674027, 3.8102420334693905, 0.14051537607294315, 1.5291735392847585, 4.231585904043024, 0.618173139831958, 4.8775927082024095, 2.6965293085680027, 6.097884204684383, 3.3001580690767214, 1.4698321125810387, 0.4302177721064933, 2.1191648048351084, 2.9326499909498396, 3.472055464567478, 4.492944282410711, 1.4109214136581965, 3.7886964691971174, 3.870379912086413, 5.836129834261288, 2.8445700838756167, 4.2497364104742354, 2.939747502297567, 2.562108199732475, 1.9895103592580379, 5.461527409818809, 6.130761070527244, 0.34770876569173853, 1.6717159991436288, 2.836670402486601, 3.3098366169253923, 2.5509196823501625, 0.05997830752403857, 0.5585334626242804, 3.028105867057111, 1.398879693933521, 0.8879337591542688, 4.055665275015684, 3.0378226614465706, 0.9616599277230479, 5.622394980241551, 1.6743943477456087, 2.6939954964495345, 3.9382496863103813, 4.6323015097492934, 3.346557522816107, 1.092703635074099, 4.2489135987605735, 0.11238614435984377, 1.577372263418268, 5.180469989796994, 2.8487032141569273, 0.6888942087715794, 2.333239845167438, 1.586382367262367, 3.2708837188353566, 3.2290914681608203, 5.984460636512457, 1.6047587309817912, 3.81844996156929, 2.4552239701696585, 4.879028651495722, 1.114208871594938, 0.4347503254593674, 0.8607924951024207, 3.7390806511130186, 1.125468663658172, 5.402621124258818, 5.868464270894726, 3.3276075452781932, 4.591207813220388, 2.7624325078644714, 3.649480147880401, 2.670579588913609, 3.2564841475978388, 4.887504605183223, 1.9067367407419884, 0.4781824144337449, 2.1817288530175047, 1.9963750455172622, 0.25174914736057086, 0.8928807896223392, 2.461041897282676, 2.09388367907669, 1.5552229739014294, 6.153289755576476, 4.524922888409759, 3.545998791462422, 3.9161556568409353, 1.8228443254940052, 2.273509404527081, 1.5036642709374304, 1.4044536902651388, 1.1784553418760488};


scaff_module Y_Rx(qbit q) {  // Y in Table A1 of Whitfield et al 2010 really means Rx(-pi/2)
  Rx(q, -PI/2);
}


scaff_module Y_Rxdagger(qbit q) {
  Rx(q, PI/2);
}


scaff_module CNOTLadder(qbit reg[N], int controlStartIndex, int controlStopIndex) {
  // Applies a ladder of CNOTs, as in the dashed-CNOT notation at bottom of
  // Table A1 of Whitfield et al 2010
  int delta = controlStopIndex > controlStartIndex ? 1 : -1;
  for (int index = controlStartIndex;; index += delta) {
    CNOT(reg[index], reg[index - 1]);
    if (index == controlStopIndex)
      break;
  }
}


scaff_module DoubleExcitationOperator(qbit reg[N], int p, int q, int r, int s) {
  // Prerequisite: p > q > r > s
  // See Double Excitation Operator circuit in Table A1 of Whitfield et al 2010
  for (int i = 1; i <= 8; i++) {
    // NB(pranav): for some reason, ScaffCC wouldn't let me move the M operator
    // into a separate scaff_module. Seems like a ScaffCC bug.
    switch (i) {  // M operator (as defined in A1)
      case 1: H(reg[p]); H(reg[q]); H(reg[r]); H(reg[s]); break;
      case 2: Y_Rx(reg[p]); Y_Rx(reg[q]); Y_Rx(reg[r]); Y_Rx(reg[s]); break;
      case 3: H(reg[p]); Y_Rx(reg[q]); H(reg[r]); Y_Rx(reg[s]); break;
      case 4: Y_Rx(reg[p]); H(reg[q]); Y_Rx(reg[r]); H(reg[s]); break;
      case 5: Y_Rx(reg[p]); Y_Rx(reg[q]); H(reg[r]); H(reg[s]); break;
      case 6: H(reg[p]); H(reg[q]); Y_Rx(reg[r]); Y_Rx(reg[s]); break;
      case 7: Y_Rx(reg[p]); H(reg[q]); H(reg[r]); Y_Rx(reg[s]); break;
      case 8: H(reg[p]); Y_Rx(reg[q]); Y_Rx(reg[r]); H(reg[s]); break;
    }
    CNOTLadder(reg, p, q+1); CNOT(reg[q], reg[r]); CNOTLadder(reg, r, s+1);
    Rz(reg[s], Theta_p_q_r_s[p][q][r][s]);
    CNOTLadder(reg, s+1, r); CNOT(reg[q], reg[r]); CNOTLadder(reg, q+1, p);
    switch (i) {  // M dagger
      case 1: H(reg[p]); H(reg[q]); H(reg[r]); H(reg[s]); break;
      case 2: Y_Rxdagger(reg[p]); Y_Rxdagger(reg[q]); Y_Rxdagger(reg[r]); Y_Rxdagger(reg[s]); break;
      case 3: H(reg[p]); Y_Rxdagger(reg[q]); H(reg[r]); Y_Rxdagger(reg[s]); break;
      case 4: Y_Rxdagger(reg[p]); H(reg[q]); Y_Rxdagger(reg[r]); H(reg[s]); break;
      case 5: Y_Rxdagger(reg[p]); Y_Rxdagger(reg[q]); H(reg[r]); H(reg[s]); break;
      case 6: H(reg[p]); H(reg[q]); Y_Rxdagger(reg[r]); Y_Rxdagger(reg[s]); break;
      case 7: Y_Rxdagger(reg[p]); H(reg[q]); H(reg[r]); Y_Rxdagger(reg[s]); break;
      case 8: H(reg[p]); Y_Rxdagger(reg[q]); Y_Rxdagger(reg[r]); H(reg[s]); break;
    }
  }
}


scaff_module SingleExcitationOperator(qbit reg[N], int p, int q) {
  // Prerequisite: p > q
  // See Single Excitation Operator circuit in Table A1 of Whitfield et al 2010
  H(reg[p]); H(reg[q]);
  CNOTLadder(reg, p, q+1);
  Rz(reg[q], Theta_p_q[p][q]);
  CNOTLadder(reg, q+1, p);
  H(reg[p]); H(reg[q]);

  Y_Rx(reg[p]); Y_Rx(reg[q]);
  CNOTLadder(reg, p, q+1);
  Rz(reg[q], Theta_p_q[p][q]);
  CNOTLadder(reg, q+1, p);
  Y_Rx(reg[p]); Y_Rx(reg[q]);
}


int main() {
  qbit reg[N];

  // enumerate all N > p > q > r > s >= 0 and apply Double Excitation Operator
  for (int p = 0; p < N; p++) {
    for (int q = 0; q < p; q++) {
      for (int r = 0; r < q; r++) {
        for (int s = 0; s < r; s++) {
          DoubleExcitationOperator(reg, p, q, r, s);
        }
      }
    }
  }

  // enumerate all N > p > q >= 0 and apply Single Excitation Operator
  for (int p = 0; p < N; p++) {
    for (int q = 0; q < p; q++) {
      SingleExcitationOperator(reg, p, q);
    }
  }

  return 0;
}
back to top