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

zhinst update makes HF2LI qcodes driver not working #138

Open
edumur opened this issue Jul 4, 2022 · 1 comment
Open

zhinst update makes HF2LI qcodes driver not working #138

edumur opened this issue Jul 4, 2022 · 1 comment

Comments

@edumur
Copy link
Contributor

edumur commented Jul 4, 2022

Dear all,

I am not sure if I should post that here or on the zhinst repo.

The code to reproduce the error:

from Qcodes_contrib_drivers.qcodes_contrib_drivers.drivers.ZurichInstruments.HF2LI import HF2LI

hf2li = HF2LI(...)
hf2li.sigouts.sigouts0.range()

The error:

ValueError                                Traceback (most recent call last)
Input In [8], in <cell line: 1>()
----> 1 hf2li.sigouts.sigouts0.range()

File ~\Miniconda3\envs\python38\lib\site-packages\zhinst\qcodes\qcodes_adaptions.py:208, in ZIParameter.__call__(self, *args, **kwargs)
    206 if len(args) == 0:
    207     if self.gettable:
--> 208         return self.get(**kwargs)
    209     else:
    210         raise NotImplementedError(
    211             "no get cmd found in" + f" Parameter {self.name}"
    212         )

File ~\Miniconda3\envs\python38\lib\site-packages\qcodes\instrument\parameter.py:661, in _BaseParameter._wrap_get.<locals>.get_wrapper(*args, **kwargs)
    659 except Exception as e:
    660     e.args = e.args + (f'getting {self}',)
--> 661     raise e

File ~\Miniconda3\envs\python38\lib\site-packages\qcodes\instrument\parameter.py:648, in _BaseParameter._wrap_get.<locals>.get_wrapper(*args, **kwargs)
    643     raise NotImplementedError(
    644         f"Trying to get an abstract parameter: {self.full_name}"
    645     )
    646 try:
    647     # There might be cases where a .get also has args/kwargs
--> 648     raw_value = get_function(*args, **kwargs)
    650     value = self._from_raw_value_to_value(raw_value)
    652     if self._validate_on_get:

File ~\Miniconda3\envs\python38\lib\site-packages\zhinst\toolkit\nodetree\node.py:503, in Node._get(self, deep, enum, parse, **kwargs)
    501     else:
    502         value = self._get_cached(**kwargs)
--> 503     value = self._parse_get_value(value, enum=enum, parse=parse)
    504     return (timestamp, value) if deep else value
    505 if readable is None and (
    506     self.node_info.contains_wildcards or self.node_info.is_partial
    507 ):

File ~\Miniconda3\envs\python38\lib\site-packages\zhinst\toolkit\nodetree\node.py:455, in Node._parse_get_value(self, value, enum, parse)
    443 """Parse the raw value from the data server.
    444 
    445 Args:
   (...)
    452     Parsed value
    453 """
    454 if enum and isinstance(value, int):
--> 455     enum_info = self.node_info.options.get(value, None)
    456     value = (
    457         getattr(self.node_info.enum, enum_info.enum)
    458         if enum_info and enum_info.enum
    459         else value
    460     )
    461 if parse:

File ~\Miniconda3\envs\python38\lib\site-packages\zhinst\toolkit\nodetree\node.py:227, in NodeInfo.options(self)
    225 for key, value in self._info.get("Options", {}).items():
    226     node_options = re.findall(r'("(.+?)"[,:]+)? ?(.*)', value)
--> 227     option_map[int(key)] = self._option_info(
    228         node_options[0][1], node_options[0][2]
    229     )
    230 return option_map

ValueError: ("invalid literal for int() with base 10: '0.01'", 'getting zi_baseinstrument_dev***_sigouts0_range')

I guess someone has to update the qcodes driver to the new zhinst dict.

@jenshnielsen jenshnielsen changed the title zhinst update makes qcodes driver not working zhinst update makes HF2LI qcodes driver not working Jul 4, 2022
@astafan8
Copy link
Contributor

astafan8 commented Jul 4, 2022

Could you check what version of zhinst-qcodes and zhinst-toolkit you have installed in your environment? if it's 0.3.*, then it's likely that you're facing the consequences of this refactor https://docs.zhinst.com/zhinst-qcodes/en/latest/refactoring/index.html .

The solution for this HF2LI driver in qcodes_ms_drivers could be the following:

  • implement a version check upon import of zhinst-qcodes (the 0.3 reports __version__ correctly, while the 0.2.* versions did not even have it), and throw an error or warning to the user suggesting to downgrade to zhinst-qcodes 0.2.* to keep this driver working
  • [my recommendation] update the driver to work with 0.3, and still implement the version check that asks the user to update to the 0.3 version of zhinst-qcodes.

the version check could be smth like:

from packaging import version

def is_zi_version_0_3_or_higher() -> bool:
    try:
        zhinst_qcodes_version = zhinst.qcodes.__version__
    except (ImportError, ModuleNotFoundError):
        zhinst_qcodes_version = "0.0"
    return version.parse(zhinst_qcodes_version) >= version.parse("0.3")

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