def __add__(self, other):
        """Combines two Requirements.

        Assumes both Requirements are being used as feature requests.
        Adding two Requirements being used as feature lists for a
        primitive has no meaning.

        The following code is a reduced K-map of the full interaction
        of two Requirement objects. For details, see
        requirements_description.txt in the documentation.
        """
        if not isinstance(other, Requirement):
            return NotImplemented
        a1, a2, a3, a4, b1, b2, b3, b4 = self.A, self.B, self.C, self.D, other.A, other.B, other.C, other.D
        A = (a1 or a2 or a3 or b1)and(a1 or a4 or b1 or b4)and(a1 or b1 or b2 or b3)and(a1 or not a4 or b1 or not b4)
        B = False
        C = b3 or b2 or a3 or a2
        D = (a2 or a3 or b4)and(a4 or b2 or b3)and(a4 or b4)
        res = Requirement(A, B, C, D)
        #print(self, a1, a2, a3, a4)
        #print(other, b1, b2, b3, b4)
        #print(res, A, B, C, D, "\n")
        return res
def __add__ ( self , other ) : if not isinstance ( other , Requirement ) : return NotImplemented a1 , a2 , a3 , a4 , b1 , b2 , b3 , b4 = self . A , self . B , self . C , self . D , other . A , other . B , other . C , other . D A = ( a1 or a2 or a3 or b1 ) and ( a1 or a4 or b1 or b4 ) and ( a1 or b1 or b2 or b3 ) and ( a1 or not a4 or b1 or not b4 ) B = False C = b3 or b2 or a3 or a2 D = ( a2 or a3 or b4 ) and ( a4 or b2 or b3 ) and ( a4 or b4 ) res = Requirement ( A , B , C , D ) return res
Combines two Requirements.

        Assumes both Requirements are being used as feature requests.
        Adding two Requirements being used as feature lists for a
        primitive has no meaning.

        The following code is a reduced K-map of the full interaction
        of two Requirement objects. For details, see
        requirements_description.txt in the documentation.