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

VSC internal TypeError due to if_then constraint with Enum. #146

Closed
msmftc opened this issue Feb 15, 2022 · 1 comment
Closed

VSC internal TypeError due to if_then constraint with Enum. #146

msmftc opened this issue Feb 15, 2022 · 1 comment

Comments

@msmftc
Copy link

msmftc commented Feb 15, 2022

It appears that a recent change in PyVSC introduced a new issue. In a test that previously worked, an if_then constraint that uses IntEnum (or Enum) now causes a TypeError inside VSC. I created a small example that reproduces the error, and I verified that this example passes on earlier VSC versions. Unfortunately, I cannot determine which version, but I think the issue arose recently.

import vsc
from enum import IntEnum


class CmdTypes(IntEnum):
    TYPE_A = 0
    TYPE_B = 1


@vsc.randobj
class Cmd():
    def __init__(self):
        self.cmd_type = vsc.rand_enum_t(CmdTypes)
        self.cmd_op = vsc.rand_bit_t(1)

    @vsc.constraint
    def op_type_combination_c(self):
        with vsc.if_then(self.cmd_type == CmdTypes.TYPE_B):  # This if_then is needed to hit the bug.
           self.cmd_op == 1


cmd = Cmd()
cmd.randomize()    # This randomize() causes a TypeError in VSC.
print(f"Cmd type:  {cmd.cmd_type}, Cmd op:  {cmd.cmd_op}")

The example produces this output:

Traceback (most recent call last):
  File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/root/.vscode-server-insiders/extensions/ms-python.python-2021.12.1559732655/pythonFiles/lib/python/debugpy/__main__.py", line 45, in <module>
    cli.main()
  File "/root/.vscode-server-insiders/extensions/ms-python.python-2021.12.1559732655/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 444, in main
    run()
  File "/root/.vscode-server-insiders/extensions/ms-python.python-2021.12.1559732655/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 285, in run_file
    runpy.run_path(target_as_str, run_name=compat.force_str("__main__"))
  File "/usr/lib64/python3.6/runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "/usr/lib64/python3.6/runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/scratch/mcgrathm/silicon-validation/lib/python/tests/experiment.py", line 23, in <module>
    cmd.randomize()
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/rand_obj.py", line 168, in randomize
    solve_fail_debug=solve_fail_debug)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/model/randomizer.py", line 558, in do_randomize
    fm, bounds_v.bound_m))
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/visitors/array_constraint_builder.py", line 48, in build
    m.accept(builder)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/model/field_composite_model.py", line 154, in accept
    v.visit_composite_field(self)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/model/model_visitor.py", line 68, in visit_composite_field
    c.accept(self)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/model/constraint_block_model.py", line 42, in accept
    v.visit_constraint_block(self)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/visitors/constraint_copy_builder.py", line 85, in visit_constraint_block
    super().visit_constraint_block(c)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/model/model_visitor.py", line 107, in visit_constraint_block
    self.visit_constraint_scope(c)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/visitors/constraint_override_visitor.py", line 25, in visit_constraint_scope
    cc.accept(self)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/model/constraint_if_else_model.py", line 63, in accept
    visitor.visit_constraint_if_else(self)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/visitors/array_constraint_builder.py", line 90, in visit_constraint_if_else
    is_x, val = XExprEvaluator().eval(c.cond)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/visitors/x_expr_evaluator.py", line 27, in eval
    e.accept(self)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/model/expr_bin_model.py", line 178, in accept
    visitor.visit_expr_bin(self)
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/visitors/x_expr_evaluator.py", line 118, in visit_expr_bin
    if lhs_val == rhs_val:
  File "/scratch/mcgrathm/silicon-validation/.venv/lib64/python3.6/site-packages/vsc/model/value_scalar.py", line 48, in __eq__
    v = int(rhs)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
mballance added a commit that referenced this issue Feb 26, 2022
…eval from #132

Progress adding riscv-dv regression tests

Signed-off-by: Matthew Ballance <matt.ballance@gmail.com>
@mballance
Copy link
Member

This issue is corrected in the 0.7.0 release

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