def clear_attr_from_cache(self, attrname):
    "Mark an attribute deleted in the name-to-number cache\n\n        Will remove an attribute, and all attributes with higher numbers,\n        from the attribute cache.\n\n        Does NOT delete the variable!\n\n        This maintains a cache of name-to-number mappings for attributes\n        to keep from having to query the CDF library constantly. It's mostly\n        an internal function.\n\n        Parameters\n        ==========\n        attrname : bytes\n            name of the attribute. Not this is NOT a string in Python 3!\n        "
    (num, scope) = self.attr_num(attrname)
    for (a, n) in list(self._attr_info.items()):
        if (n[0] >= num):
            del self._attr_info[a]
Mark an attribute deleted in the name-to-number cache

Will remove an attribute, and all attributes with higher numbers,
from the attribute cache.

Does NOT delete the variable!

This maintains a cache of name-to-number mappings for attributes
to keep from having to query the CDF library constantly. It's mostly
an internal function.

Parameters
==========
attrname : bytes
    name of the attribute. Not this is NOT a string in Python 3!
def clear_attr_from_cache(self, attrname):
    "Mark an attribute deleted in the name-to-number cache\n\n        Will remove an attribute, and all attributes with higher numbers,\n        from the attribute cache.\n\n        Does NOT delete the variable!\n\n        This maintains a cache of name-to-number mappings for attributes\n        to keep from having to query the CDF library constantly. It's mostly\n        an internal function.\n\n        Parameters\n        ==========\n        attrname : bytes\n            name of the attribute. Not this is NOT a string in Python 3!\n        "
    (num, scope) = self.attr_num(attrname)
    for (a, n) in list(self._attr_info.items()):
        if (n[0] >= num):
            del self._attr_info[a]