Create an extended list of variable names including any pre-bound ones
        Throws an error if a variable is unbound
        Returns inferred dict of variable: val pairs

def _parse_var_dict(self, var_tbl: dict) -> dict:
        """
        Create an extended list of variable names including any pre-bound ones
        Throws an error if a variable is unbound
        Returns inferred dict of variable: val pairs
        """
        var_names = var_tbl.copy()
        # check that all of the variables are bound
        for v in self.var_names:
            if v not in var_tbl:
                if self.var_names[v] is None:
                    raise(KeyError("variable " + v + " is unbound"))
                else:
                    var_names[v] = self.var_names[v]
        # squeeze the variables
        return self._squeeze(var_names)