== Why is this an issue?

Implementing the special method ``++__ne__++`` is not equivalent to implementing the special method ``++__eq__++``. By default ``++__ne__++`` will call ``++__eq__++``, but the default implementation of ``++__eq__++`` does not call ``++__ne__++``.


This rule raises an issue when the special method ``++__ne__++`` is implemented but not the ``++__eq__++`` method.


=== Noncompliant code example

[source,python]
----
class Ne:
    def __ne__(self, other):   # Noncompliant.
        return False

myvar = Ne() == 1  # False. __ne__ is not called
myvar = 1 == Ne()  # False. __ne__ is not called
myvar = Ne() != 1  # False
myvar = 1 != Ne()  # False
----


=== Compliant solution

[source,python]
----
# Recommended, as __ne__ delegates to __eq__ by default
class Eq:
    def __eq__(self, other):
        return True

myvar = Eq() == 1  # True
myvar = 1 == Eq()  # True
myvar = Eq() != 1  # False. __eq__ is called
myvar = 1 != Eq()  # False. __eq__ is called

# OR if __ne__ needs a special implementation

class Eq:
    def __eq__(self, other):
        return True

    def __ne__(self, other):
        return False
----


:link-with-uscores1: https://docs.python.org/3/reference/datamodel.html#object.__ne__

== Resources

* Python documentation - {link-with-uscores1}[the ++__ne__++ special method]

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::highlighting.adoc[]

endif::env-github,rspecator-view[]
