"""Test for unsupported-binary-operation."""
# pylint: disable=missing-docstring,too-few-public-methods,pointless-statement
# pylint: disable=expression-not-assigned, invalid-name, useless-object-inheritance


import collections


1 + "a" # [unsupported-binary-operation]
1 - [] # [unsupported-binary-operation]
1 * {} # [unsupported-binary-operation]
1 / collections # [unsupported-binary-operation]
1 ** (lambda x: x) # [unsupported-binary-operation]
{} * {} # [unsupported-binary-operation]
{} - {} # [unsupported-binary-operation]
{} | {} # [unsupported-binary-operation]
{} >> {} # [unsupported-binary-operation]
[] + () # [unsupported-binary-operation]
() + [] # [unsupported-binary-operation]
[] * 2.0 # [unsupported-binary-operation]
() * 2.0 # [unsupported-binary-operation]
2.0 >> 2.0 # [unsupported-binary-operation]
class A(object):
    pass
class B(object):
    pass
A() + B() # [unsupported-binary-operation]
class A1(object):
    def __add__(self, other):
        return NotImplemented

A1() + A1() # [unsupported-binary-operation]

class A2(object):
    def __add__(self, other):
        return NotImplemented
class B2(object):
    def __radd__(self, other):
        return NotImplemented
A2() + B2() # [unsupported-binary-operation]

class Parent(object):
    pass
class Child(Parent):
    def __add__(self, other):
        return NotImplemented
Child() + Parent() # [unsupported-binary-operation]
class A3(object):
    def __add__(self, other):
        return NotImplemented
class B3(A3):
    def __radd__(self, other):
        return NotImplemented
A3() + B3() # [unsupported-binary-operation]
# Augmented
FFF = 1
FFF += A() # [unsupported-binary-operation]
TTT = 1
TTT += [] # [unsupported-binary-operation]


# Don't emit for this case since we don't know what unknown is.
from unknown import Unknown
class Base(Unknown):
    pass
Base() * 23
