-
Notifications
You must be signed in to change notification settings - Fork 55
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tutorial updates for single-param wildcard and procedural error bars.
- Loading branch information
Showing
3 changed files
with
267 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
174 changes: 174 additions & 0 deletions
174
jupyter_notebooks/Tutorials/reporting/ProceduralErrorBars.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"# Procedural Error Bars\n", | ||
"\n", | ||
"One other way we can use the `pygsti.report.reportables` module described in the [ModelAnalysisMetrics tutorial](ModelAnalysisMetrics.ipynb) is to procedurally generate error bars for any quantity you want.\n", | ||
"\n", | ||
"First, let's simulate a noisy GST experiment" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"import pygsti\n", | ||
"from pygsti.modelpacks import smq1Q_XY\n", | ||
"from pygsti.report import reportables as rptbl, modelfunction as modelfn" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"target_model = smq1Q_XY.target_model()\n", | ||
"\n", | ||
"L=128\n", | ||
"edesign = smq1Q_XY.create_gst_experiment_design(L)\n", | ||
"\n", | ||
"noisy_model = target_model.randomize_with_unitary(.1)\n", | ||
"noisy_model = noisy_model.depolarize(.05)\n", | ||
"\n", | ||
"N=64\n", | ||
"dataset = pygsti.data.simulate_data(noisy_model,edesign,N)\n", | ||
"\n", | ||
"\n", | ||
"gst_proto = pygsti.protocols.StandardGST(modes=['full TP','CPTPLND','Target'],verbosity=2)\n", | ||
"data = pygsti.protocols.ProtocolData(edesign,dataset)\n", | ||
"results = gst_proto.run(data)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"Now let's compute error bars on the CPTP estimate, and then get a 95% confidence interval \"view\" from the `ConfidenceRegionFactory`." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"crfact = results.estimates['CPTPLND'].add_confidence_region_factory('stdgaugeopt', 'final')\n", | ||
"crfact.compute_hessian(comm=None, mem_limit=3.0*(1024.0)**3) #optionally use multiple processors & set memlimit\n", | ||
"crfact.project_hessian('intrinsic error')\n", | ||
"\n", | ||
"crf_view = results.estimates['CPTPLND'].confidence_region_factories['stdgaugeopt','final'].view(95)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"Finally, we can construct `pygsti.report.ModelFunction` objects that take a function which computes some observable from a model and the extracted view from above to compute error bars on that quantity of interest.\n", | ||
"\n", | ||
"One common thing to check is error bars on the process matrices. The `ModelFunction` in this case only needs to return the operation:" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"final_model = results.estimates['CPTPLND'].models['stdgaugeopt'].copy()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"def get_op(model, lbl):\n", | ||
" return model[lbl]\n", | ||
"get_op_modelfn = modelfn.modelfn_factory(get_op)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"rptbl.evaluate(get_op_modelfn(final_model, (\"Gxpi2\", 0)), crf_view)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"rptbl.evaluate(get_op_modelfn(final_model, (\"Gypi2\", 0)), crf_view)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"But we can also create model functions that perform more complicated actions, such as computing other reportables." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Note that when creating ModelFunctions in this way, the model where you want the quantity evaluated must be the first argument\n", | ||
"def ddist(model, ideal_model, lbl, basis):\n", | ||
" return rptbl.half_diamond_norm(model[lbl], ideal_model[lbl], basis)\n", | ||
"ddist_modelfn = modelfn.modelfn_factory(ddist)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"rptbl.evaluate(ddist_modelfn(final_model, target_model, (\"Gxpi2\", 0), 'pp'), crf_view)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"rptbl.evaluate(ddist_modelfn(final_model, target_model, (\"Gypi2\", 0), 'pp'), crf_view)" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "pygsti", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.11.5" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 2 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters