PatchSet#
- class pyhf.patchset.PatchSet(spec, **config_kwargs)[source]#
Bases:
objectA way to store a collection of patches (
Patch).It contains
metadataabout the PatchSet itself:a high-level
descriptionof what the patches represent or the analysis it is fora list of
referenceswhere the patchset is sourced from (e.g. hepdata)a list of
digestscorresponding to the background-only workspace the patchset was made forthe
labelsof the dimensions of the phase-space for what the patches cover
In addition to the above metadata, the PatchSet object behaves like a:
smart list allowing you to iterate over all the patches defined
smart dictionary allowing you to access a patch by the patch name or the patch values
The below example shows various ways one can interact with a
PatchSetobject.Example
>>> import pyhf >>> patchset = pyhf.PatchSet({ ... "metadata": { ... "references": { "hepdata": "ins1234567" }, ... "description": "example patchset", ... "digests": { "md5": "098f6bcd4621d373cade4e832627b4f6" }, ... "labels": ["x", "y"] ... }, ... "patches": [ ... { ... "metadata": { ... "name": "patch_name_for_2100x_800y", ... "values": [2100, 800] ... }, ... "patch": [ ... { ... "op": "add", ... "path": "/foo/0/bar", ... "value": { ... "foo": [1.0] ... } ... } ... ] ... } ... ], ... "version": "1.0.0" ... }) ... >>> patchset.version '1.0.0' >>> patchset.references {'hepdata': 'ins1234567'} >>> patchset.description 'example patchset' >>> patchset.digests {'md5': '098f6bcd4621d373cade4e832627b4f6'} >>> patchset.labels ['x', 'y'] >>> patchset.patches [<pyhf.patchset.Patch object 'patch_name_for_2100x_800y(2100, 800)' at 0x...>] >>> patchset['patch_name_for_2100x_800y'] <pyhf.patchset.Patch object 'patch_name_for_2100x_800y(2100, 800)' at 0x...> >>> patchset[(2100,800)] <pyhf.patchset.Patch object 'patch_name_for_2100x_800y(2100, 800)' at 0x...> >>> patchset[[2100,800]] <pyhf.patchset.Patch object 'patch_name_for_2100x_800y(2100, 800)' at 0x...> >>> patchset[2100,800] <pyhf.patchset.Patch object 'patch_name_for_2100x_800y(2100, 800)' at 0x...> >>> for patch in patchset: ... print(patch.name) ... patch_name_for_2100x_800y >>> len(patchset) 1
- __init__(spec, **config_kwargs)[source]#
Construct a PatchSet.
- Parameters:
spec (
jsonable) – The patchset JSON specificationconfig_kwargs – Possible keyword arguments for the patchset validation
- Returns:
The PatchSet instance.
- Return type:
patchset (
PatchSet)
Attributes
- description#
The description in the PatchSet metadata
- digests#
The digests in the PatchSet metadata
- labels#
The labels in the PatchSet metadata
- metadata#
The metadata of the PatchSet
- patches#
The patches in the PatchSet
- references#
The references in the PatchSet metadata
- version#
The version of the PatchSet
Methods
- apply(spec, key)[source]#
Apply the patch associated with the key to the background-only workspace specificatiom.
- Parameters:
- Raises:
InvalidPatchLookup – if the provided patch name is not in the patchset
PatchSetVerificationError – if the patchset cannot be verified against the workspace specification
- Returns:
The background-only workspace with the patch applied.
- Return type:
workspace (
Workspace)
- verify(spec)[source]#
Verify the patchset digests against a background-only workspace specification. Verified if no exception was raised.
- Parameters:
spec (
Workspace) – The workspace specification to verify the patchset against.- Raises:
PatchSetVerificationError – if the patchset cannot be verified against the workspace specification
- Returns:
None