Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

legacyio.py contains no executable code. #424

Closed
rileyjmurray opened this issue Apr 16, 2024 · 3 comments
Closed

legacyio.py contains no executable code. #424

rileyjmurray opened this issue Apr 16, 2024 · 3 comments
Milestone

Comments

@rileyjmurray
Copy link
Contributor

All of the code in this file has been commented out. I suggest we delete the file.

"""
Functions for allowing old-vesion objects to unpickle load.
"""
#***************************************************************************************************
# Copyright 2015, 2019 National Technology & Engineering Solutions of Sandia, LLC (NTESS).
# Under the terms of Contract DE-NA0003525 with NTESS, the U.S. Government retains certain rights
# in this software.
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0 or in the LICENSE file in the root pyGSTi directory.
#***************************************************************************************************
#These functions no longer work, and the changes have become too great to retain
# backward compatibility with old versions. Keep this commented code around
# for potentially adding similar functionality in future versions.
#
#import numbers as _numbers
#import sys as _sys
#from contextlib import contextmanager as _contextmanager
#from types import ModuleType as _ModuleType
#
#from .. import objects as _objs
#from .. import circuits as _circuits
#from ..circuits import circuit as _circuit
#from ..objects.replib import slowreplib as _slow
#
#
#@_contextmanager
#def enable_no_cython_unpickling():
# """
# Context manager for unpickling objects constructed *with* Cython extensions.
#
# A context manager enabling the un-pickling of pyGSTi objects that
# were constructed on a system *with* pyGSTi's C-extensions, when the
# current system's pyGSTi does not have these extensions.
# """
#
# class dummy_DMStateRep(object):
# def __new__(cls, data, reducefix):
# #replacement_obj = _slow.DMStateRep.__new__(_slow.DMStateRep)
# replacement_obj = _slow.DMStateRep(data, reducefix)
# return replacement_obj
#
# class dummy_DMEffectRepDense(object):
# def __new__(cls, data, reducefix):
# #replacement_obj = _slow.DMEffectRepDense.__new__(_slow.DMEffectRepDense)
# replacement_obj = _slow.DMEffectRepDense(data, reducefix)
# return replacement_obj
#
# class dummy_DMOpRepDense(object):
# def __new__(cls, data, reducefix):
# #replacement_obj = _slow.DMOpRepDense.__new__(_slow.DMEffectRepDense)
# replacement_obj = _slow.DMOpRepDense(data, reducefix)
# return replacement_obj
#
# assert(_sys.modules.get('pygsti.objects.replib.fastreplib', None) is None), \
# "You should only use this function when they Cython extensions are *not* built!"
# fastreplib = _ModuleType("fastreplib")
# fastreplib.DMStateRep = dummy_DMStateRep
# fastreplib.DMEffectRepDense = dummy_DMEffectRepDense
# fastreplib.DMOpRepDense = dummy_DMOpRepDense
# _sys.modules['pygsti.objects.replib.fastreplib'] = fastreplib
#
# yield
#
# del _sys.modules['pygsti.objects.replib.fastreplib']
#
#
#@_contextmanager
#def enable_old_object_unpickling(old_version="0.9.6"):
# """
# Context manager enabling unpickling of old-verion objects.
#
# Returns a context manager which enables the unpickling of old-version (
# back to 0.9.6 and sometimes prior) objects.
#
# Parameters
# ----------
# old_version : str, optional
# The string representation of the old version whose pickle files you'd
# like to unpickle. E.g., `"0.9.7"`
# """
# def totup(v): return tuple(map(int, v.split('.')))
# old_version = totup(old_version)
#
# if old_version < totup("0.9.6"):
# raise ValueError(("Cannot unpickle files from version < 0.9.6 with this version."
# " Revert back to 0.9.6 and update to 0.9.6 first."))
#
# if old_version == totup("0.9.6"):
# class dummy_GateString(object):
# def __new__(cls):
# replacement_obj = _circuit.Circuit.__new__(_circuit.Circuit)
# return replacement_obj
#
# def GateString_setstate(self, state):
# s = state['_str'] if '_str' in state else state['str']
# c = _objs.Circuit(state['_tup'], stringrep=s)
# #OLD: self.__dict__.update(c.__dict__)
# return c.__dict__ # now just return updated Circuit state
#
# class dummy_CompressedGateString(object):
# def __new__(cls):
# replacement_obj = _circuit.CompressedCircuit.__new__(_circuit.CompressedCircuit)
# return replacement_obj
#
# class dummy_GateSet(object):
# def __new__(cls):
# replacement_obj = _objs.ExplicitOpModel.__new__(_objs.ExplicitOpModel)
# return replacement_obj
#
# class dummy_GateMatrixCalc(object):
# def __new__(cls):
# replacement_obj = _objs.MatrixForwardSimulator.__new__(_objs.MatrixForwardSimulator)
# return replacement_obj
#
# class dummy_AutoGator(object): pass
# class dummy_SimpleCompositionAutoGator(object): pass
#
# class dummy_LindbladParameterizedGate(object):
# def __new__(cls):
# replacement_obj = _objs.LindbladDenseOp.__new__(_objs.LindbladDenseOp)
# return replacement_obj
#
# def Lind_setstate(self, state):
# assert(not state['sparse']), "Can only unpickle old *dense* LindbladParameterizedGate objects"
# g = _objs.LindbladDenseOp.from_operation_matrix(state['base'], state['unitary_postfactor'],
# ham_basis=state['ham_basis'],
# nonham_basis=state['other_basis'],
# param_mode=state['param_mode'],
# nonham_mode=state['nonham_mode'], truncate=True,
# mx_basis=state['matrix_basis'], evotype=state['_evotype'])
# self.__dict__.update(g.__dict__)
#
# def ModelMember_setstate(self, state):
# if "dirty" in state: # .dirty was replaced with ._dirty
# state['_dirty'] = state['dirty']
# del state['dirty']
# self.__dict__.update(state)
#
# #Modules
# gatestring = _ModuleType("gatestring")
# gatestring.GateString = dummy_GateString
# gatestring.CompressedGateString = dummy_CompressedGateString
# _sys.modules['pygsti.objects.gatestring'] = gatestring
# #_objs.circuit.Circuit.__setstate__ = GateString_setstate Never needed now
#
# gateset = _ModuleType("gateset")
# gateset.GateSet = dummy_GateSet
# _sys.modules['pygsti.objects.gateset'] = gateset
#
# gate = _ModuleType("gate")
# gate.EigenvalueParameterizedGate = _objs.EigenvalueParamDenseOp
# gate.LinearlyParameterizedGate = _objs.LinearlyParamDenseOp
# #gate.LindbladParameterizedGateMap = _objs.LindbladOp # no upgrade code for this yet
# gate.LindbladParameterizedGate = dummy_LindbladParameterizedGate
# _objs.LindbladDenseOp.__setstate__ = Lind_setstate # dummy_LindbladParameterizedGate.__setstate__
# gate.FullyParameterizedGate = _objs.FullDenseOp
# gate.TPParameterizedGate = _objs.TPDenseOp
# gate.GateMatrix = _objs.DenseOperator
# gate.ComposedGateMap = _objs.ComposedOp
# gate.EmbeddedGateMap = _objs.EmbeddedOp
# gate.ComposedGate = _objs.ComposedDenseOp
# gate.EmbeddedGate = _objs.EmbeddedDenseOp
# gate.StaticGate = _objs.StaticDenseOp
# gate.LinearlyParameterizedElementTerm = _objs.operation.LinearlyParameterizedElementTerm
# #MapOp = _objs.MapOperator
# _sys.modules['pygsti.objects.gate'] = gate
#
# # spamvec = _ModuleType("spamvec") #already exists - just add to it
# spamvec = _sys.modules['pygsti.objects.spamvec']
# spamvec.LindbladParameterizedSPAMVec = _objs.LindbladSPAMVec
# spamvec.FullyParameterizedSPAMVec = _objs.FullSPAMVec
# spamvec.CPTPParameterizedSPAMVec = _objs.CPTPSPAMVec
# spamvec.TPParameterizedSPAMVec = _objs.TPSPAMVec
#
# povm = _sys.modules['pygsti.objects.povm']
# povm.LindbladParameterizedPOVM = _objs.LindbladPOVM
#
# #Don't need class logic here b/c we just store the class itself in a model object:
# gatematrixcalc = _ModuleType("gatematrixcalc")
# gatematrixcalc.GateMatrixCalc = _objs.matrixforwardsim.MatrixForwardSimulator # dummy_GateMatrixCalc
# _sys.modules['pygsti.objects.gatematrixcalc'] = gatematrixcalc
#
# autogator = _ModuleType("autogator")
# autogator.AutoGator = dummy_AutoGator
# autogator.SimpleCompositionAutoGator = dummy_SimpleCompositionAutoGator
# _sys.modules['pygsti.objects.autogator'] = autogator
#
# #These have been removed now!
# #gatestringstructure = _ModuleType("gatestringstructure")
# #gatestringstructure.GatestringPlaquette = _objs.circuitstructure.CircuitPlaquette
# #gatestringstructure.GateStringStructure = _objs.CircuitStructure
# #gatestringstructure.LsGermsStructure = _objs.LsGermsStructure
#
# #_sys.modules['pygsti.objects.gatestringstructure'] = gatestringstructure
#
# _objs.modelmember.ModelMember.__setstate__ = ModelMember_setstate
#
# if old_version <= totup("0.9.7.1"):
# class dummy_Basis(object):
# def __new__(cls):
# replacement_obj = _objs.basis.BuiltinBasis.__new__(_objs.basis.BuiltinBasis)
# return replacement_obj
#
# def __setstate__(self, state):
# return Basis_setstate(self, state)
#
# def Basis_setstate(self, state):
# if "labels" in state: # .label was replaced with ._label
# state['_labels'] = state['labels']
# del state['labels']
#
# if "name" in state and state['name'] in ('pp', 'std', 'gm', 'qt', 'unknown') and 'dim' in state:
# dim = state['dim'].opDim if hasattr(state['dim'], 'opDim') else state['dim']
# assert(isinstance(dim, _numbers.Integral))
# sparse = state['sparse'] if ('sparse' in state) else False
# newBasis = _objs.BuiltinBasis(state['name'], int(dim), sparse)
# self.__class__ = _objs.basis.BuiltinBasis
# self.__dict__.update(newBasis.__dict__)
# else:
# raise ValueError("Can only load old *builtin* basis objects!")
#
# class dummy_Dim(object):
# def __setstate__(self, state): # was Dim_setstate
# if "gateDim" in state: # .label was replaced with ._label
# state['opDim'] = state['gateDim']
# del state['gateDim']
# self.__dict__.update(state)
#
# def StateSpaceLabels_setstate(self, state):
# squared_labeldims = {k: int(d**2) for k, d in state['labeldims'].items()}
# squared_dims = [tuple((squared_labeldims[lbl] for lbl in tpbLbls))
# for tpbLbls in state['labels']]
# sslbls = _objs.StateSpaceLabels(state['labels'], squared_dims)
# self.__dict__.update(sslbls.__dict__)
#
# #DEBUG!!!
# #print("!!setstate:")
# #print(state)
# #assert(False),"STOP"
#
# def Circuit_setstate(self, state):
# if old_version == totup("0.9.6"): # b/c this clobbers older-version upgrade
# state = GateString_setstate(self, state)
#
# if 'line_labels' in state: line_labels = state['line_labels']
# elif '_line_labels' in state: line_labels = state['_line_labels']
# else: raise ValueError("Cannot determing line labels from old Circuit state: %s" % str(state.keys()))
#
# if state['_str']: # then rely on string rep to init new circuit
# c = _objs.Circuit(None, line_labels, editable=not state['_static'], stringrep=state['_str'])
# else:
#
# if 'labels' in state: labels = state['labels']
# elif '_labels' in state: labels = state['_labels']
# else: raise ValueError("Cannot determing labels from old Circuit state: %s" % str(state.keys()))
# c = _objs.Circuit(labels, line_labels, editable=not state['_static'])
#
# self.__dict__.update(c.__dict__)
#
# def Hack_CompressedCircuit_expand(self):
# """ Hacked version to rely on string rep & re-parse if it's there """
# return _objs.Circuit(None, self._line_labels, editable=False, stringrep=self._str)
#
# def SPAMVec_setstate(self, state):
# if "dirty" in state: # backward compat: .dirty was replaced with ._dirty in ModelMember
# state['_dirty'] = state['dirty']; del state['dirty']
# self.__dict__.update(state)
#
# dim = _ModuleType("dim")
# dim.Dim = dummy_Dim
# _sys.modules['pygsti.baseobjs.dim'] = dim
#
# #_objs.basis.saved_Basis = _objs.basis.Basis
# #_objs.basis.Basis = dummy_Basis
# _objs.basis.Basis.__setstate__ = Basis_setstate
# _circuits.circuit.Circuit.__setstate__ = Circuit_setstate
# _objs.labeldicts.StateSpaceLabels.__setstate__ = StateSpaceLabels_setstate
# _circuits.circuit.CompressedCircuit.saved_expand = pygsti.circuits.circuit.CompressedCircuit.expand
# _circuits.circuit.CompressedCircuit.expand = Hack_CompressedCircuit_expand
# _objs.spamvec.SPAMVec.__setstate__ = SPAMVec_setstate
#
# if old_version < totup("0.9.9"):
#
# def SPAMVec_setstate(self, state):
# #Note: include "dirty"
# if old_version <= totup("0.9.7.1"): # b/c this clobbers older-version upgrade
# if "dirty" in state: # backward compat: .dirty was replaced with ._dirty in ModelMember
# state['_dirty'] = state['dirty']; del state['dirty']
# if "_prep_or_effect" not in state:
# state['_prep_or_effect'] = "unknown"
# if "base1D" not in state and 'base' in state:
# state['base1D'] = state['base'].flatten()
# del state['base']
#
# self.__dict__.update(state)
#
# #HERE TODO: need to remake/add ._reps to all spam & operation objects
#
# _objs.spamvec.SPAMVec.__setstate__ = SPAMVec_setstate
#
# # Compatibility with refactored `baseobjs` API
# _sys.modules['pygsti.baseobjs.smartcache'] = _objs.smartcache
# _sys.modules['pygsti.baseobjs.verbosityprinter'] = _objs.verbosityprinter
# _sys.modules['pygsti.baseobjs.profiler'] = pygsti.baseobjs.profiler
# _sys.modules['pygsti.baseobjs.protectedarray'] = _objs.protectedarray
# _sys.modules['pygsti.baseobjs.objectivefns'] = pygsti.objectivefns.objectivefns
# _sys.modules['pygsti.baseobjs.basis'] = _objs.basis
# _sys.modules['pygsti.baseobjs.label'] = _objs.label
#
# if old_version < totup("0.9.9.1"):
#
# def DenseOperator_setstate(self, state):
# if "base" in state:
# del state['base']
# self.__dict__.update(state)
#
# def DenseSPAMVec_setstate(self, state):
# if old_version <= totup("0.9.9"): # b/c this clobbers (or shadows) older-version upgrade
# if old_version <= totup("0.9.7.1"): # b/c this clobbers older-version upgrade
# if "dirty" in state: # backward compat: .dirty was replaced with ._dirty in ModelMember
# state['_dirty'] = state['dirty']; del state['dirty']
# if "_prep_or_effect" not in state:
# state['_prep_or_effect'] = "unknown"
# if "base1D" not in state and 'base' in state:
# state['base1D'] = state['base'].flatten()
# del state['base']
#
# if "base" in state:
# del state['base']
# if "base1D" in state:
# del state['base1D']
# self.__dict__.update(state)
#
# _objs.spamvec.DenseSPAMVec.__setstate__ = DenseSPAMVec_setstate
# _objs.operation.DenseOperator.__setstate__ = DenseOperator_setstate
#
# yield # body of context-manager block
#
# if old_version <= totup("0.9.6"):
# del _sys.modules['pygsti.objects.gatestring']
# del _sys.modules['pygsti.objects.gateset']
# del _sys.modules['pygsti.objects.gate']
# del _sys.modules['pygsti.objects.gatematrixcalc']
# del _sys.modules['pygsti.objects.autogator']
# #del _sys.modules['pygsti.objects.gatestringstructure']
#
# del _sys.modules['pygsti.objects.spamvec'].LindbladParameterizedSPAMVec
# del _sys.modules['pygsti.objects.spamvec'].FullyParameterizedSPAMVec
# del _sys.modules['pygsti.objects.spamvec'].CPTPParameterizedSPAMVec
# del _sys.modules['pygsti.objects.spamvec'].TPParameterizedSPAMVec
#
# del _sys.modules['pygsti.objects.povm'].LindbladParameterizedPOVM
#
# delattr(_objs.Circuit, '__setstate__')
# delattr(_objs.LindbladDenseOp, '__setstate__')
# delattr(_objs.modelmember.ModelMember, '__setstate__')
#
# if old_version <= totup("0.9.7.1"):
# del _sys.modules['pygsti.baseobjs.dim']
# delattr(_objs.Basis, '__setstate__')
# delattr(_objs.labeldicts.StateSpaceLabels, '__setstate__')
# if hasattr(_objs.Circuit, '__setstate__'): # b/c above block may have already deleted this
# delattr(_objs.Circuit, '__setstate__')
# pygsti.circuits.circuit.CompressedCircuit.expand = pygsti.circuits.circuit.CompressedCircuit.saved_expand
# delattr(pygsti.circuits.circuit.CompressedCircuit, 'saved_expand')
# delattr(_objs.spamvec.SPAMVec, '__setstate__')
#
# if old_version < totup("0.9.9"):
# if hasattr(_objs.spamvec.SPAMVec, '__setstate__'): # b/c above block may have already deleted this
# delattr(_objs.spamvec.SPAMVec, '__setstate__')
#
# del _sys.modules['pygsti.baseobjs.smartcache']
# del _sys.modules['pygsti.baseobjs.verbosityprinter']
# del _sys.modules['pygsti.baseobjs.profiler']
# del _sys.modules['pygsti.baseobjs.protectedarray']
# del _sys.modules['pygsti.baseobjs.objectivefns']
# del _sys.modules['pygsti.baseobjs.basis']
# del _sys.modules['pygsti.baseobjs.label']
#
# if old_version < totup("0.9.9.1"):
# delattr(_objs.spamvec.DenseSPAMVec, '__setstate__')
# delattr(_objs.operation.DenseOperator, '__setstate__')

@sserita
Copy link
Contributor

sserita commented Apr 16, 2024

Agreed. I think the next release we are anticipating is 0.9.13, which will have other deletions/deprecations (i.e. Qibo). So we can go ahead and delete this as part of that.

@rileyjmurray
Copy link
Contributor Author

Note: At time of commenting, PR #451 includes an incidental change that would resolve this issue. However, I just opened PR #452 that's dedicated to the broader problem of removing commented-out code.

@sserita
Copy link
Contributor

sserita commented Sep 19, 2024

Closed with #451

@sserita sserita closed this as completed Sep 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants