def shape(self, args): shape = args[0] points = args[1] if shape == 'line': if len(points) < 2: raise ValueError( "The shape 'line' should have 2 points or more") vectors = [ Vector(start_point=point1, end_point=point2) for point1, point2 in combinations(points, 2) ] angles = [ Angle(vector1=vec1, vector2=vec2, size=180) for vec1, vec2 in combinations(vectors, 2) ] res = frozenset(chain(vectors, angles)) return res elif shape == 'polygon': if len(points) < 3: raise ValueError( "The shape 'polygon' should have 3 points or more") vectors = [ Vector(start_point=points[i], end_point=points[(i + 1) % len(points)]) for i in range(len(points)) ] angles = [ Angle(vector1=vectors[i], vector2=vectors[(i + 1) % len(vectors)]) for i in range(len(vectors)) ] res = frozenset(chain(vectors, angles)) return res raise ValueError(f"Unknown shape: '{shape}'")
def test_SumAngles_on_second_empty_adds_nothing(sqlalchemy_information, memory_session): angle1 = Angle(vector1=Vector(start_point='A', end_point='B'), vector2=Vector(start_point='C', end_point='D'), size=30) angle2 = Angle(vector1=angle1.vector2, vector2=Vector(start_point='E', end_point='F')) memory_session.add_all([angle1, angle2]) memory_session.commit() tested_rule = SumAngles() sqlalchemy_information.execute(tested_rule) assert len(memory_session.query(Angle).all()) == 2
def execute(self, session): vector1 = Vector(start_point='A', end_point='B') vector2 = Vector(start_point='D', end_point='C') session.add_all( [vector1, vector2, Angle(vector1=vector1, vector2=vector2)]) session.commit()
def execute(self, session: Session): angle = aliased(Angle, name="angle1") angles = session.query(angle.vector_id2, angle.vector_id1, 360 - angle.size).filter(angle.size != None).all() mapper = lambda ang: Angle( vector_id1=ang[0], vector_id2=ang[1], size=ang[2]) new_angles = list(map(mapper, angles)) session.add_all(new_angles) session.commit()
def test_SumAngles(sqlalchemy_information, memory_session): angle1 = Angle(vector1=Vector(start_point='A', end_point='B'), vector2=Vector(start_point='C', end_point='D'), size=30) angle2 = Angle(vector1=angle1.vector2, vector2=Vector(start_point='E', end_point='F'), size=60) memory_session.add_all([angle1, angle2]) memory_session.commit() tested_rule = SumAngles() sqlalchemy_information.execute(tested_rule) assert len(memory_session.query(Angle).all()) == 3 result = memory_session.query(Angle).filter_by( vector_id1=angle1.vector_id1, vector_id2=angle2.vector_id2).first() assert result.size == angle1.size + angle2.size
def test_ReverseAngle_on_null_empty_size_not_adding(sqlalchemy_information, memory_session): angle = Angle(vector1=Vector(start_point='A', end_point='B'), vector2=Vector(start_point='C', end_point='D')) memory_session.add(angle) memory_session.commit() tested_rule = ReverseAngle() sqlalchemy_information.execute(tested_rule) assert len(memory_session.query(Angle).all()) == 1
def test_SumVectors_on_second_empty_adds_nothing(sqlalchemy_information, memory_session): vector1 = Vector(start_point='A', end_point='B', length=2) vector2 = Vector(start_point=vector1.end_point, end_point='C') angle = Angle(vector1=vector1, vector2=vector2, size=180) memory_session.add_all([angle, vector1, vector2]) memory_session.commit() tested_rule = SumVectors() sqlalchemy_information.execute(tested_rule) assert len(memory_session.query(Angle).all()) == 1 assert len(memory_session.query(Vector).all()) == 2
def test_ReverseAngle(sqlalchemy_information, memory_session): angle = Angle(vector1=Vector(start_point='A', end_point='B'), vector2=Vector(start_point='C', end_point='D'), size=30) memory_session.add(angle) memory_session.commit() tested_rule = ReverseAngle() sqlalchemy_information.execute(tested_rule) assert len(memory_session.query(Angle).all()) == 2 result = memory_session.query(Angle).filter_by( vector1=angle.vector2, vector2=angle.vector1).first() assert result.size == 360 - angle.size
def test_SumVectors(sqlalchemy_information, memory_session): vector1 = Vector(start_point='A', end_point='B', length=2) vector2 = Vector(start_point=vector1.end_point, end_point='C', length=3) angle = Angle(vector1=vector1, vector2=vector2, size=180) memory_session.add_all([angle, vector1, vector2]) memory_session.commit() tested_rule = SumVectors() sqlalchemy_information.execute(tested_rule) assert len(memory_session.query(Angle).all()) == 1 assert len(memory_session.query(Vector).all()) == 3 result = memory_session.query(Vector).filter_by( start_point=vector1.start_point, end_point=vector2.end_point).first() assert result.length == vector1.length + vector2.length
def execute(self, session): vector = Vector(start_point='A', end_point='B') session.add_all([vector, Angle(vector1=vector, size=-1)]) session.commit()
def execute(self, session): session.add(Angle(vector2=Vector(start_point='B', end_point='C'))) session.commit()