diff --git a/CHANGES.rst b/CHANGES.rst
index 6f3eabc..44bb335 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -5,16 +5,6 @@
 5.0.0 (unreleased)
 ==================
 
-- Adopt Python's standard `C3 resolution order
-  <https://www.python.org/download/releases/2.3/mro/>`_ for interface
-  linearization, with tweaks to support additional cases that are
-  common in interfaces but disallowed for Python classes.
-
-  In complex multiple-inheritance like scenerios, this may change the
-  interface resolution order, resulting in finding different adapters.
-  However, the results should make more sense. See `issue 21
-  <https://github.com/zopefoundation/zope.interface/issues/21>`_.
-
 - Make an internal singleton object returned by APIs like
   ``implementedBy`` and ``directlyProvidedBy`` immutable. Previously,
   it was fully mutable and allowed changing its ``__bases___``. That
@@ -57,6 +47,12 @@
   The changes in this release resulted in a 7% memory reduction after
   loading about 6,000 modules that define about 2,200 interfaces.
 
+  .. caution::
+
+     Details of many private attributes have changed, and external use
+     of those private attributes may break. In particular, the
+     lifetime and default value of ``_v_attrs`` has changed.
+
 - Remove support for hashing uninitialized interfaces. This could only
   be done by subclassing ``InterfaceClass``. This has generated a
   warning since it was first added in 2011 (3.6.5). Please call the
@@ -162,9 +158,12 @@
 - Fix a potential interpreter crash in the low-level adapter
   registry lookup functions. See issue 11.
 
-- Use Python's standard C3 resolution order to compute the
-  ``__iro___`` and ``__sro___`` of interfaces. Previously, an ad-hoc
-  ordering that made no particular guarantees was used.
+- Adopt Python's standard `C3 resolution order
+  <https://www.python.org/download/releases/2.3/mro/>`_ to compute the
+  ``__iro___`` and ``__sro___`` of interfaces, with tweaks to support
+  additional cases that are common in interfaces but disallowed for
+  Python classes. Previously, an ad-hoc ordering that made no
+  particular guarantees was used.
 
   This has many beneficial properties, including the fact that base
   interface and base classes tend to appear near the end of the
@@ -195,6 +194,17 @@
   the future). For details, see the documentation for
   ``zope.interface.ro``.
 
+- Make inherited tagged values in interfaces respect the resolution
+  order (``__iro__``), as method and attribute lookup does. Previously
+  tagged values could give inconsistent results. See `issue 190
+  <https://github.com/zopefoundation/zope.interface/issues/190>`_.
+
+- Add ``getDirectTaggedValue`` (and related methods) to interfaces to
+  allow accessing tagged values irrespective of inheritance. See
+  `issue 190
+  <https://github.com/zopefoundation/zope.interface/issues/190>`_.
+
+
 4.7.2 (2020-03-10)
 ==================
 
@@ -214,10 +224,13 @@
 
 - Drop support for Python 3.4.
 
-- Fix ``queryTaggedValue``, ``getTaggedValue``, ``getTaggedValueTags``
-  subclass inheritance. See `PR 144
+- Change ``queryTaggedValue``, ``getTaggedValue``,
+  ``getTaggedValueTags`` in interfaces. They now include inherited
+  values by following ``__bases__``. See `PR 144
   <https://github.com/zopefoundation/zope.interface/pull/144>`_.
 
+  .. caution:: This may be a breaking change.
+
 - Add support for Python 3.8.
 
 
diff --git a/docs/README.rst b/docs/README.rst
index d1e58cf..a8068f8 100644
--- a/docs/README.rst
+++ b/docs/README.rst
@@ -736,6 +736,28 @@ Tagged values can also be defined from within an interface definition:
   >>> IWithTaggedValues.getTaggedValue('squish')
   'squash'
 
+Tagged values are inherited in the same way that attribute and method
+descriptions are. Inheritance can be ignored by using the "direct"
+versions of functions.
+
+.. doctest::
+
+   >>> class IExtendsIWithTaggedValues(IWithTaggedValues):
+   ...     zope.interface.taggedValue('child', True)
+   >>> IExtendsIWithTaggedValues.getTaggedValue('child')
+   True
+   >>> IExtendsIWithTaggedValues.getDirectTaggedValue('child')
+   True
+   >>> IExtendsIWithTaggedValues.getTaggedValue('squish')
+   'squash'
+   >>> print(IExtendsIWithTaggedValues.queryDirectTaggedValue('squish'))
+   None
+   >>> IExtendsIWithTaggedValues.setTaggedValue('squish', 'SQUASH')
+   >>> IExtendsIWithTaggedValues.getTaggedValue('squish')
+   'SQUASH'
+   >>> IExtendsIWithTaggedValues.getDirectTaggedValue('squish')
+   'SQUASH'
+
 Invariants
 ==========
 
diff --git a/docs/api/declarations.rst b/docs/api/declarations.rst
index ce52833..26847b0 100644
--- a/docs/api/declarations.rst
+++ b/docs/api/declarations.rst
@@ -16,7 +16,7 @@ carefully at each object it documents, including providing examples.
 .. autointerface:: zope.interface.interfaces.IInterfaceDeclaration
 
 
-.. currentmodule:: zope.interface.declarations
+.. currentmodule:: zope.interface
 
 Declaring The Interfaces of Objects
 ===================================
@@ -536,7 +536,7 @@ You'll notice that an ``IDeclaration`` is a type of
 implementedBy
 -------------
 
-.. autofunction:: implementedByFallback
+.. autofunction:: implementedBy
 
 
 Consider the following example:
@@ -774,7 +774,7 @@ Exmples for :meth:`Declaration.__add__`:
 ProvidesClass
 -------------
 
-.. autoclass:: ProvidesClass
+.. autoclass:: zope.interface.declarations.ProvidesClass
 
 
 Descriptor semantics (via ``Provides.__get__``):
@@ -851,7 +851,7 @@ collect function to help with this:
 ObjectSpecification
 -------------------
 
-.. autofunction:: ObjectSpecification
+.. autofunction:: zope.interface.declarations.ObjectSpecification
 
 
 For example:
@@ -924,7 +924,7 @@ For example:
 ObjectSpecificationDescriptor
 -----------------------------
 
-.. autoclass:: ObjectSpecificationDescriptor
+.. autoclass:: zope.interface.declarations.ObjectSpecificationDescriptor
 
 For example:
 
diff --git a/docs/api/specifications.rst b/docs/api/specifications.rst
index 2152e26..357e361 100644
--- a/docs/api/specifications.rst
+++ b/docs/api/specifications.rst
@@ -23,6 +23,7 @@ Specification objects implement the API defined by
    :member-order: bysource
 
 .. autoclass:: zope.interface.interface.Specification
+   :no-members:
 
 For example:
 
@@ -172,7 +173,22 @@ first is that of an "element", which provides us a simple way to query
 for information generically (this is important because we'll see that
 ``IInterface`` implements this interface):
 
+..
+  IElement defines __doc__ to be an Attribute, so the docstring
+  in the class isn't used._
+
 .. autointerface:: IElement
+
+   Objects that have basic documentation and tagged values.
+
+   Known derivatives include :class:`IAttribute` and its derivative
+   :class:`IMethod`; these have no notion of inheritance.
+   :class:`IInterface` is also a derivative, and it does have a
+   notion of inheritance, expressed through its ``__bases__`` and
+   ordered in its ``__iro__`` (both defined by
+   :class:`ISpecification`).
+
+
 .. autoclass:: zope.interface.interface.Element
    :no-members:
 
@@ -181,14 +197,17 @@ content, or body, of an ``Interface``.
 
 .. autointerface:: zope.interface.interfaces.IAttribute
 .. autoclass:: zope.interface.interface.Attribute
+   :no-members:
 
-.. autoclass:: IMethod
+.. autointerface:: IMethod
+.. autoclass:: zope.interface.interface.Method
+   :no-members:
 
 Finally we can look at the definition of ``IInterface``.
 
 .. autointerface:: IInterface
 
-.. autoclass:: zope.interface.Interface
+.. autointerface:: zope.interface.Interface
 
 Usage
 -----
diff --git a/src/zope/interface/interface.py b/src/zope/interface/interface.py
index 3e81b6f..f9fb333 100644
--- a/src/zope/interface/interface.py
+++ b/src/zope/interface/interface.py
@@ -87,6 +87,13 @@ class Element(object):
         """ Returns the documentation for the object. """
         return self.__doc__
 
+    ###
+    # Tagged values.
+    #
+    # Direct tagged values are set only in this instance. Others
+    # may be inherited (for those subclasses that have that concept).
+    ###
+
     def getTaggedValue(self, tag):
         """ Returns the value associated with 'tag'. """
         if not self.__tagged_values:
@@ -98,7 +105,7 @@ class Element(object):
         return self.__tagged_values.get(tag, default) if self.__tagged_values else default
 
     def getTaggedValueTags(self):
-        """ Returns a list of all tags. """
+        """ Returns a collection of all tags. """
         return self.__tagged_values.keys() if self.__tagged_values else ()
 
     def setTaggedValue(self, tag, value):
@@ -107,6 +114,10 @@ class Element(object):
             self.__tagged_values = {}
         self.__tagged_values[tag] = value
 
+    queryDirectTaggedValue = queryTaggedValue
+    getDirectTaggedValue = getTaggedValue
+    getDirectTaggedValueTags = getTaggedValueTags
+
 
 @_use_c_impl
 class SpecificationBase(object):
@@ -512,12 +523,14 @@ class InterfaceClass(Element, InterfaceBase, Specification):
             raise Invalid(errors)
 
     def queryTaggedValue(self, tag, default=None):
-        """ Returns the value associated with 'tag'. """
-        value = Element.queryTaggedValue(self, tag, default=_marker)
-        if value is not _marker:
-            return value
-        for base in self.__bases__:
-            value = base.queryTaggedValue(tag, default=_marker)
+        """
+        Queries for the value associated with *tag*, returning it from the nearest
+        interface in the ``__iro__``.
+
+        If not found, returns *default*.
+        """
+        for iface in self.__iro__:
+            value = iface.queryDirectTaggedValue(tag, _marker)
             if value is not _marker:
                 return value
         return default
@@ -531,11 +544,9 @@ class InterfaceClass(Element, InterfaceBase, Specification):
 
     def getTaggedValueTags(self):
         """ Returns a list of all tags. """
-        keys = list(Element.getTaggedValueTags(self))
-        for base in self.__bases__:
-            for key in base.getTaggedValueTags():
-                if key not in keys:
-                    keys.append(key)
+        keys = set()
+        for base in self.__iro__:
+            keys.update(base.getDirectTaggedValueTags())
         return keys
 
     def __repr__(self):  # pragma: no cover
@@ -783,6 +794,9 @@ def fromMethod(meth, interface=None, name=None):
 def _wire():
     from zope.interface.declarations import classImplements
 
+    from zope.interface.interfaces import IElement
+    classImplements(Element, IElement)
+
     from zope.interface.interfaces import IAttribute
     classImplements(Attribute, IAttribute)
 
diff --git a/src/zope/interface/interfaces.py b/src/zope/interface/interfaces.py
index bf0d6c7..9ddf8f0 100644
--- a/src/zope/interface/interfaces.py
+++ b/src/zope/interface/interfaces.py
@@ -44,29 +44,96 @@ __all__ = [
 
 
 class IElement(Interface):
-    """Objects that have basic documentation and tagged values.
     """
+    Objects that have basic documentation and tagged values.
+
+    Known derivatives include :class:`IAttribute` and its derivative
+    :class:`IMethod`; these have no notion of inheritance.
+    :class:`IInterface` is also a derivative, and it does have a
+    notion of inheritance, expressed through its ``__bases__`` and
+    ordered in its ``__iro__`` (both defined by
+    :class:`ISpecification`).
+    """
+
+    # Note that defining __doc__ as an Attribute hides the docstring
+    # from introspection. When changing it, also change it in the Sphinx
+    # ReST files.
 
     __name__ = Attribute('__name__', 'The object name')
     __doc__  = Attribute('__doc__', 'The object doc string')
 
+    ###
+    # Tagged values.
+    #
+    # Direct values are established in this instance. Others may be
+    # inherited. Although ``IElement`` itself doesn't have a notion of
+    # inheritance, ``IInterface`` *does*. It might have been better to
+    # make ``IInterface`` define new methods
+    # ``getIndirectTaggedValue``, etc, to include inheritance instead
+    # of overriding ``getTaggedValue`` to do that, but that ship has sailed.
+    # So to keep things nice and symmetric, we define the ``Direct`` methods here.
+    ###
+
     def getTaggedValue(tag):
-        """Returns the value associated with `tag`.
+        """Returns the value associated with *tag*.
+
+        Raise a `KeyError` if the tag isn't set.
 
-        Raise a `KeyError` of the tag isn't set.
+        If the object has a notion of inheritance, this searches
+        through the inheritance hierarchy and returns the nearest result.
+        If there is no such notion, this looks only at this object.
+
+        .. versionchanged:: 4.7.0
+           This method should respect inheritance if present.
         """
 
     def queryTaggedValue(tag, default=None):
-        """Returns the value associated with `tag`.
+        """
+        As for `getTaggedValue`, but instead of raising a `KeyError`, returns *default*.
 
-        Return the default value of the tag isn't set.
+
+        .. versionchanged:: 4.7.0
+           This method should respect inheritance if present.
         """
 
     def getTaggedValueTags():
-        """Returns a list of all tags."""
+        """
+        Returns a collection of all tags in no particular order.
+
+        If the object has a notion of inheritance, this
+        includes all the inherited tagged values. If there is
+        no such notion, this looks only at this object.
+
+        .. versionchanged:: 4.7.0
+           This method should respect inheritance if present.
+        """
 
     def setTaggedValue(tag, value):
-        """Associates `value` with `key`."""
+        """
+        Associates *value* with *key* directly in this object.
+        """
+
+    def getDirectTaggedValue(tag):
+        """
+        As for `getTaggedValue`, but never includes inheritance.
+
+        .. versionadded:: 5.0.0
+        """
+
+    def queryDirectTaggedValue(tag, default=None):
+        """
+        As for `queryTaggedValue`, but never includes inheritance.
+
+        .. versionadded:: 5.0.0
+        """
+
+    def getDirectTaggedValueTags():
+        """
+        As for `getTaggedValueTags`, but includes only tags directly
+        set on this object.
+
+        .. versionadded:: 5.0.0
+        """
 
 
 class IAttribute(IElement):
@@ -83,25 +150,26 @@ class IMethod(IAttribute):
     def getSignatureInfo():
         """Returns the signature information.
 
-        This method returns a dictionary with the following keys:
-
-        o `positional` - All positional arguments.
-
-        o `required` - A list of all required arguments.
+        This method returns a dictionary with the following string keys:
 
-        o `optional` - A list of all optional arguments.
-
-        o `varargs` - The name of the varargs argument.
-
-        o `kwargs` - The name of the kwargs argument.
+        - positional
+            A sequence of the names of positional arguments.
+        - required
+            A sequence of the names of required arguments.
+        - optional
+            A dictionary mapping argument names to their default values.
+        - varargs
+            The name of the varargs argument (or None).
+        - kwargs
+            The name of the kwargs argument (or None).
         """
 
     def getSignatureString():
         """Return a signature string suitable for inclusion in documentation.
 
         This method returns the function signature string. For example, if you
-        have `func(a, b, c=1, d='f')`, then the signature string is `(a, b,
-        c=1, d='f')`.
+        have ``def func(a, b, c=1, d='f')``, then the signature string is ``"(a, b,
+        c=1, d='f')"``.
         """
 
 class ISpecification(Interface):
@@ -148,7 +216,7 @@ class ISpecification(Interface):
 
     __bases__ = Attribute("""Base specifications
 
-    A tuple if specifications from which this specification is
+    A tuple of specifications from which this specification is
     directly derived.
 
     """)
@@ -156,14 +224,15 @@ class ISpecification(Interface):
     __sro__ = Attribute("""Specification-resolution order
 
     A tuple of the specification and all of it's ancestor
-    specifications from most specific to least specific.
+    specifications from most specific to least specific. The specification
+    itself is the first element.
 
     (This is similar to the method-resolution order for new-style classes.)
     """)
 
     __iro__ = Attribute("""Interface-resolution order
 
-    A tuple of the of the specification's ancestor interfaces from
+    A tuple of the specification's ancestor interfaces from
     most specific to least specific.  The specification itself is
     included if it is an interface.
 
@@ -240,14 +309,14 @@ class IInterface(ISpecification, IElement):
 
     - You assert that your object implement the interfaces.
 
-      There are several ways that you can assert that an object
-      implements an interface:
+      There are several ways that you can declare that an object
+      provides an interface:
 
-      1. Call `zope.interface.implements` in your class definition.
+      1. Call `zope.interface.implementer` on your class definition.
 
-      2. Call `zope.interfaces.directlyProvides` on your object.
+      2. Call `zope.interface.directlyProvides` on your object.
 
-      3. Call `zope.interface.classImplements` to assert that instances
+      3. Call `zope.interface.classImplements` to declare that instances
          of a class implement an interface.
 
          For example::
@@ -321,6 +390,7 @@ class IInterface(ISpecification, IElement):
 
     __module__ = Attribute("""The name of the module defining the interface""")
 
+
 class IDeclaration(ISpecification):
     """Interface declaration
 

Interface.get/queryTaggedValue should respect __iro__, not just __bases__
Consider this inheritance tree:
```python
        O = Interface
        class F(O):
            taggedValue('tag', 'F')
            tag = Attribute('F')
        class E(O):
            taggedValue('tag', 'E')            
            tag = Attribute('E')
        class D(O):
            taggedValue('tag', 'D')            
            tag = Attribute('D')
        class C(D, F):
            taggedValue('tag', 'C')            
            tag = Attribute('C')
        class B(D, E):
            pass
        class A(B, C):
            pass
```

If we then look at the tagged value `"tag"` and the `tag`  Attribute of `A`, we get two different answers:

```pycon
>>> A['tag'].__name__
'C'
>>> A.getTaggedValue('tag')
'D'
```

This is because looking up tagged values only uses `__bases__`, whereas finding attributes follows the `__iro__`:
```pycon
>>> A.__iro__
(<InterfaceClass __main__.A>,
 <InterfaceClass __main__.B>,
 <InterfaceClass __main__.C>,
 <InterfaceClass __main__.D>,
 <InterfaceClass __main__.E>,
 <InterfaceClass __main__.F>,
 <InterfaceClass zope.interface.Interface>)
```

To implement this, much like there exists `InterfaceClass.direct(name)`, there should probably exist `InterfaceClass.queryDirectTaggedValue(name)`. 

Other `Direct` methods, like `getDirectTaggedValueTags` might be nice (though I don't have a direct use case for them right now).


diff --git a/src/zope/interface/tests/test_interface.py b/src/zope/interface/tests/test_interface.py
index df7f84b..70e5d64 100644
--- a/src/zope/interface/tests/test_interface.py
+++ b/src/zope/interface/tests/test_interface.py
@@ -121,6 +121,13 @@ class ElementTests(unittest.TestCase):
         element = self._makeOne()
         self.assertRaises(KeyError, element.getTaggedValue, 'nonesuch')
 
+    def test_getDirectTaggedValueTags(self):
+        element = self._makeOne()
+        self.assertEqual([], list(element.getDirectTaggedValueTags()))
+
+        element.setTaggedValue('foo', 'bar')
+        self.assertEqual(['foo'], list(element.getDirectTaggedValueTags()))
+
     def test_queryTaggedValue_miss(self):
         element = self._makeOne()
         self.assertEqual(element.queryTaggedValue('nonesuch'), None)
@@ -129,6 +136,18 @@ class ElementTests(unittest.TestCase):
         element = self._makeOne()
         self.assertEqual(element.queryTaggedValue('nonesuch', 'bar'), 'bar')
 
+    def test_getDirectTaggedValue_miss(self):
+        element = self._makeOne()
+        self.assertRaises(KeyError, element.getDirectTaggedValue, 'nonesuch')
+
+    def test_queryDirectTaggedValue_miss(self):
+        element = self._makeOne()
+        self.assertEqual(element.queryDirectTaggedValue('nonesuch'), None)
+
+    def test_queryDirectTaggedValue_miss_w_default(self):
+        element = self._makeOne()
+        self.assertEqual(element.queryDirectTaggedValue('nonesuch', 'bar'), 'bar')
+
     def test_setTaggedValue(self):
         element = self._makeOne()
         element.setTaggedValue('foo', 'bar')
@@ -136,6 +155,13 @@ class ElementTests(unittest.TestCase):
         self.assertEqual(element.getTaggedValue('foo'), 'bar')
         self.assertEqual(element.queryTaggedValue('foo'), 'bar')
 
+    def test_verifies(self):
+        from zope.interface.interfaces import IElement
+        from zope.interface.verify import verifyObject
+
+        element = self._makeOne()
+        verifyObject(IElement, element)
+
 
 class GenericSpecificationBaseTests(unittest.TestCase):
     # Tests that work with both implementations
@@ -1792,12 +1818,78 @@ class InterfaceTests(unittest.TestCase):
 
         self.assertEqual(ITagged.getTaggedValue('qux'), 'Spam')
         self.assertRaises(KeyError, ITagged.getTaggedValue, 'foo')
-        self.assertEqual(ITagged.getTaggedValueTags(), ['qux'])
+        self.assertEqual(list(ITagged.getTaggedValueTags()), ['qux'])
 
         self.assertEqual(IDerived2.getTaggedValue('qux'), 'Spam Spam')
         self.assertEqual(IDerived2.getTaggedValue('foo'), 'bar')
         self.assertEqual(set(IDerived2.getTaggedValueTags()), set(['qux', 'foo']))
 
+    def _make_taggedValue_tree(self, base):
+        from zope.interface import taggedValue
+        from zope.interface import Attribute
+        O = base
+        class F(O):
+            taggedValue('tag', 'F')
+            tag = Attribute('F')
+        class E(O):
+            taggedValue('tag', 'E')
+            tag = Attribute('E')
+        class D(O):
+            taggedValue('tag', 'D')
+            tag = Attribute('D')
+        class C(D, F):
+            taggedValue('tag', 'C')
+            tag = Attribute('C')
+        class B(D, E):
+            pass
+        class A(B, C):
+            pass
+
+        return A
+
+    def test_getTaggedValue_follows__iro__(self):
+        # And not just looks at __bases__.
+        # https://github.com/zopefoundation/zope.interface/issues/190
+        from zope.interface import Interface
+
+        # First, confirm that looking at a true class
+        # hierarchy follows the __mro__.
+        class_A = self._make_taggedValue_tree(object)
+        self.assertEqual(class_A.tag.__name__, 'C')
+
+        # Now check that Interface does, both for attributes...
+        iface_A = self._make_taggedValue_tree(Interface)
+        self.assertEqual(iface_A['tag'].__name__, 'C')
+        # ... and for tagged values.
+        self.assertEqual(iface_A.getTaggedValue('tag'), 'C')
+        self.assertEqual(iface_A.queryTaggedValue('tag'), 'C')
+        # Of course setting something lower overrides it.
+        assert iface_A.__bases__[0].__name__ == 'B'
+        iface_A.__bases__[0].setTaggedValue('tag', 'B')
+        self.assertEqual(iface_A.getTaggedValue('tag'), 'B')
+
+    def test_getDirectTaggedValue_ignores__iro__(self):
+        # https://github.com/zopefoundation/zope.interface/issues/190
+        from zope.interface import Interface
+
+        A = self._make_taggedValue_tree(Interface)
+        self.assertIsNone(A.queryDirectTaggedValue('tag'))
+        self.assertEqual([], list(A.getDirectTaggedValueTags()))
+
+        with self.assertRaises(KeyError):
+            A.getDirectTaggedValue('tag')
+
+        A.setTaggedValue('tag', 'A')
+        self.assertEqual(A.queryDirectTaggedValue('tag'), 'A')
+        self.assertEqual(A.getDirectTaggedValue('tag'), 'A')
+        self.assertEqual(['tag'], list(A.getDirectTaggedValueTags()))
+
+        assert A.__bases__[1].__name__ == 'C'
+        C = A.__bases__[1]
+        self.assertEqual(C.queryDirectTaggedValue('tag'), 'C')
+        self.assertEqual(C.getDirectTaggedValue('tag'), 'C')
+        self.assertEqual(['tag'], list(C.getDirectTaggedValueTags()))
+
     def test_description_cache_management(self):
         # See https://bugs.launchpad.net/zope.interface/+bug/185974
         # There was a bug where the cache used by Specification.get() was not

pip install -e .[dev]
parse_log_pytest
requirements.txt
coverage pytest
apt-get update apt-get install -y gcc
3.7
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi @ file:///croot/certifi_1671487769961/work/certifi
coverage==7.2.7
exceptiongroup==1.2.2
importlib-metadata==6.7.0
iniconfig==2.0.0
packaging==24.0
pluggy==1.2.0
pytest==7.4.4
tomli==2.0.1
typing_extensions==4.7.1
zipp==3.15.0
-e git+https://github.com/zopefoundation/zope.interface.git@d0c6a5967af074b1a7d60a1bb20d9337263b9571#egg=zope.interface

name: zope.interface
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==7.2.7
      - exceptiongroup==1.2.2
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - packaging==24.0
      - pluggy==1.2.0
      - pytest==7.4.4
      - tomli==2.0.1
      - typing-extensions==4.7.1
      - zipp==3.15.0
prefix: /opt/conda/envs/zope.interface

src/zope/interface/tests/test_interface.py::ElementTests::test_getDirectTaggedValueTags src/zope/interface/tests/test_interface.py::ElementTests::test_getDirectTaggedValue_miss src/zope/interface/tests/test_interface.py::ElementTests::test_queryDirectTaggedValue_miss src/zope/interface/tests/test_interface.py::ElementTests::test_queryDirectTaggedValue_miss_w_default src/zope/interface/tests/test_interface.py::ElementTests::test_verifies src/zope/interface/tests/test_interface.py::InterfaceTests::test_getDirectTaggedValue_ignores__iro__ src/zope/interface/tests/test_interface.py::InterfaceTests::test_getTaggedValue_follows__iro__ src/zope/interface/tests/test_interface.py::AttributeTests::test_getDirectTaggedValueTags src/zope/interface/tests/test_interface.py::AttributeTests::test_getDirectTaggedValue_miss src/zope/interface/tests/test_interface.py::AttributeTests::test_queryDirectTaggedValue_miss src/zope/interface/tests/test_interface.py::AttributeTests::test_queryDirectTaggedValue_miss_w_default src/zope/interface/tests/test_interface.py::MethodTests::test_getDirectTaggedValueTags src/zope/interface/tests/test_interface.py::MethodTests::test_getDirectTaggedValue_miss src/zope/interface/tests/test_interface.py::MethodTests::test_queryDirectTaggedValue_miss src/zope/interface/tests/test_interface.py::MethodTests::test_queryDirectTaggedValue_miss_w_default
src/zope/interface/tests/test_interface.py::Test_invariant::test_w_multiple src/zope/interface/tests/test_interface.py::Test_invariant::test_w_single src/zope/interface/tests/test_interface.py::Test_taggedValue::test_w_multiple src/zope/interface/tests/test_interface.py::Test_taggedValue::test_w_multiple_overwriting src/zope/interface/tests/test_interface.py::Test_taggedValue::test_w_single src/zope/interface/tests/test_interface.py::ElementTests::test_ctor_defaults src/zope/interface/tests/test_interface.py::ElementTests::test_ctor_no_doc_space_in_name src/zope/interface/tests/test_interface.py::ElementTests::test_getTaggedValue_miss src/zope/interface/tests/test_interface.py::ElementTests::test_queryTaggedValue_miss src/zope/interface/tests/test_interface.py::ElementTests::test_queryTaggedValue_miss_w_default src/zope/interface/tests/test_interface.py::ElementTests::test_setTaggedValue src/zope/interface/tests/test_interface.py::GenericSpecificationBaseTests::test_implementedBy_miss src/zope/interface/tests/test_interface.py::GenericSpecificationBaseTests::test_providedBy_miss src/zope/interface/tests/test_interface.py::SpecificationBaseTests::test_implementedBy_miss src/zope/interface/tests/test_interface.py::SpecificationBaseTests::test_optimizations src/zope/interface/tests/test_interface.py::SpecificationBaseTests::test_providedBy_miss src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test___call___hit src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test___call___miss src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_implementedBy_hit src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_implementedBy_miss src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_isOrExtends_hit src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_isOrExtends_miss src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_providedBy_hit src/zope/interface/tests/test_interface.py::SpecificationBasePyTests::test_providedBy_miss src/zope/interface/tests/test_interface.py::GenericInterfaceBaseTests::test___call___w___conform___ob_no_provides_wo_alternate src/zope/interface/tests/test_interface.py::GenericInterfaceBaseTests::test___call___w___conform___returning_value src/zope/interface/tests/test_interface.py::GenericInterfaceBaseTests::test___call___wo___conform___ob_no_provides_w_alternate src/zope/interface/tests/test_interface.py::InterfaceBaseTests::test___call___w___conform___ob_no_provides_wo_alternate src/zope/interface/tests/test_interface.py::InterfaceBaseTests::test___call___w___conform___returning_value src/zope/interface/tests/test_interface.py::InterfaceBaseTests::test___call___wo___conform___ob_no_provides_w_alternate src/zope/interface/tests/test_interface.py::InterfaceBaseTests::test_optimizations src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___adapt___ob_no_provides_uses_hooks src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___adapt___ob_provides src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___call___w___conform___miss_ob_provides src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___call___w___conform___ob_no_provides_wo_alternate src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___call___w___conform___returning_value src/zope/interface/tests/test_interface.py::InterfaceBasePyTests::test___call___wo___conform___ob_no_provides_w_alternate src/zope/interface/tests/test_interface.py::SpecificationTests::test___setBases_subscribes_bases_and_notifies_dependents src/zope/interface/tests/test_interface.py::SpecificationTests::test_changed_clears_volatiles_and_implied src/zope/interface/tests/test_interface.py::SpecificationTests::test_ctor src/zope/interface/tests/test_interface.py::SpecificationTests::test_extends_non_strict_w_self src/zope/interface/tests/test_interface.py::SpecificationTests::test_extends_strict_w_self src/zope/interface/tests/test_interface.py::SpecificationTests::test_extends_strict_wo_self src/zope/interface/tests/test_interface.py::SpecificationTests::test_get_hit_from_base_wo__v_attrs src/zope/interface/tests/test_interface.py::SpecificationTests::test_get_hit_w__v_attrs src/zope/interface/tests/test_interface.py::SpecificationTests::test_interfaces_skips_already_seen src/zope/interface/tests/test_interface.py::SpecificationTests::test_subscribe_again src/zope/interface/tests/test_interface.py::SpecificationTests::test_subscribe_first_time src/zope/interface/tests/test_interface.py::SpecificationTests::test_unsubscribe src/zope/interface/tests/test_interface.py::SpecificationTests::test_unsubscribe_miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___contains___hit src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___contains___miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___getitem___hit src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___getitem___miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___hash___missing_required_attrs src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___hash___normal src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___iter__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test___reduce__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_assignment_to__class__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_assignment_to__class__2 src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_comparison_with_None src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_comparison_with_same_instance src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_comparison_with_same_named_instance_in_other_module src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_attrs_w___annotations__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_attrs_w___locals__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_attrs_w__decorator_non_return src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_attrs_w_invalid_attr_type src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_bad_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_defaults src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_w_attrs_attrib_methods src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_ctor_w_explicit___doc__ src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_direct_hit_local_miss_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_direct_miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_getBases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_getDescriptionFor_hit src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_getDescriptionFor_miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_interfaces src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_isEqualOrExtendedBy_identity src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_isEqualOrExtendedBy_subiface src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_isEqualOrExtendedBy_unrelated src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_namesAndDescriptions_w_all_False_ignores_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_namesAndDescriptions_w_all_True_bases_w_same_names src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_namesAndDescriptions_w_all_True_no_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_namesAndDescriptions_w_all_True_simple src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_names_w_all_False_ignores_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_names_w_all_True_bases_w_same_names src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_names_w_all_True_no_bases src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_names_w_all_True_w_bases_simple src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_queryDescriptionFor_hit src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_queryDescriptionFor_miss src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_fail_in_base_w_errors_passed src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_fail_in_base_wo_errors_passed src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_fail_w_errors_passed src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_fail_wo_errors_passed src/zope/interface/tests/test_interface.py::InterfaceClassTests::test_validateInvariants_pass src/zope/interface/tests/test_interface.py::InterfaceTests::testInterfaceExtendsInterface src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___defers_to___conform___ src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___miss_w_alternate src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___miss_wo_alternate src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___object_implements src/zope/interface/tests/test_interface.py::InterfaceTests::test___call___w_adapter_hook src/zope/interface/tests/test_interface.py::InterfaceTests::test___contains__derived src/zope/interface/tests/test_interface.py::InterfaceTests::test___contains__nonesuch src/zope/interface/tests/test_interface.py::InterfaceTests::test___contains__simple src/zope/interface/tests/test_interface.py::InterfaceTests::test___doc___as_element src/zope/interface/tests/test_interface.py::InterfaceTests::test___doc___element src/zope/interface/tests/test_interface.py::InterfaceTests::test___doc___non_element src/zope/interface/tests/test_interface.py::InterfaceTests::test___getitem___derived src/zope/interface/tests/test_interface.py::InterfaceTests::test___getitem__nonesuch src/zope/interface/tests/test_interface.py::InterfaceTests::test___getitem__simple src/zope/interface/tests/test_interface.py::InterfaceTests::test___iter__derived src/zope/interface/tests/test_interface.py::InterfaceTests::test___iter__empty src/zope/interface/tests/test_interface.py::InterfaceTests::test___iter__simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_attributes_link_to_interface src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_base_and_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_base_not_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_multiple src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_multiple_w_explict_implements src/zope/interface/tests/test_interface.py::InterfaceTests::test_classImplements_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_description_cache_management src/zope/interface/tests/test_interface.py::InterfaceTests::test_function_attributes_become_tagged_values src/zope/interface/tests/test_interface.py::InterfaceTests::test_getDescriptionFor_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_getDescriptionFor_nonesuch_no_default src/zope/interface/tests/test_interface.py::InterfaceTests::test_getDescriptionFor_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_interface_object_provides_Interface src/zope/interface/tests/test_interface.py::InterfaceTests::test_invariant_as_decorator src/zope/interface/tests/test_interface.py::InterfaceTests::test_invariant_mutandis src/zope/interface/tests/test_interface.py::InterfaceTests::test_invariant_nested src/zope/interface/tests/test_interface.py::InterfaceTests::test_invariant_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_methods_link_to_interface src/zope/interface/tests/test_interface.py::InterfaceTests::test_namesAndDescriptions_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_namesAndDescriptions_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_names_derived src/zope/interface/tests/test_interface.py::InterfaceTests::test_names_simple src/zope/interface/tests/test_interface.py::InterfaceTests::test_taggedValue src/zope/interface/tests/test_interface.py::InterfaceTests::test_verifyClass src/zope/interface/tests/test_interface.py::InterfaceTests::test_verifyObject src/zope/interface/tests/test_interface.py::AttributeTests::test__repr__w_interface src/zope/interface/tests/test_interface.py::AttributeTests::test__repr__wo_interface src/zope/interface/tests/test_interface.py::AttributeTests::test__str__w_interface src/zope/interface/tests/test_interface.py::AttributeTests::test__str__wo_interface src/zope/interface/tests/test_interface.py::AttributeTests::test_ctor_defaults src/zope/interface/tests/test_interface.py::AttributeTests::test_ctor_no_doc_space_in_name src/zope/interface/tests/test_interface.py::AttributeTests::test_getTaggedValue_miss src/zope/interface/tests/test_interface.py::AttributeTests::test_queryTaggedValue_miss src/zope/interface/tests/test_interface.py::AttributeTests::test_queryTaggedValue_miss_w_default src/zope/interface/tests/test_interface.py::AttributeTests::test_setTaggedValue src/zope/interface/tests/test_interface.py::AttributeTests::test_verifies src/zope/interface/tests/test_interface.py::MethodTests::test___call___raises_BrokenImplementation src/zope/interface/tests/test_interface.py::MethodTests::test__repr__w_interface src/zope/interface/tests/test_interface.py::MethodTests::test__repr__wo_interface src/zope/interface/tests/test_interface.py::MethodTests::test__str__w_interface src/zope/interface/tests/test_interface.py::MethodTests::test__str__wo_interface src/zope/interface/tests/test_interface.py::MethodTests::test_ctor_defaults src/zope/interface/tests/test_interface.py::MethodTests::test_ctor_no_doc_space_in_name src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureInfo_bare src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_bare src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_w_kwargs src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_w_only_required src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_w_optional src/zope/interface/tests/test_interface.py::MethodTests::test_getSignatureString_w_varargs src/zope/interface/tests/test_interface.py::MethodTests::test_getTaggedValue_miss src/zope/interface/tests/test_interface.py::MethodTests::test_optional_as_property src/zope/interface/tests/test_interface.py::MethodTests::test_queryTaggedValue_miss src/zope/interface/tests/test_interface.py::MethodTests::test_queryTaggedValue_miss_w_default src/zope/interface/tests/test_interface.py::MethodTests::test_setTaggedValue src/zope/interface/tests/test_interface.py::MethodTests::test_verifies src/zope/interface/tests/test_interface.py::Test_fromFunction::test_bare src/zope/interface/tests/test_interface.py::Test_fromFunction::test_full_spectrum src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_interface src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_kwargs src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_name src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_only_required src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_optional src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_optional_self src/zope/interface/tests/test_interface.py::Test_fromFunction::test_w_varargs src/zope/interface/tests/test_interface.py::Test_fromMethod::test_full_spectrum src/zope/interface/tests/test_interface.py::Test_fromMethod::test_no_args src/zope/interface/tests/test_interface.py::Test_fromMethod::test_w_non_method
src/zope/interface/interface.py docs/README.rst docs/api/declarations.rst docs/api/specifications.rst CHANGES.rst src/zope/interface/interfaces.py
src/zope/interface/interface.py docs/README.rst docs/api/declarations.rst docs/api/specifications.rst CHANGES.rst src/zope/interface/interfaces.py