def test_pipeline_propagate_attrs(): a1 = Slicerator(list(range(10))) a1.attr1 = 10 a2 = Slicerator(list(range(10, 20))) a2.attr1 = 20 a2.attr2 = 30 p1 = Pipeline(lambda x, y: x + y, a1, a2, propagate_attrs={"attr1", "attr2"}, propagate_how=0) assert (p1.attr1 == 10) try: p1.attr2 except AttributeError: pass else: raise AssertionError("attr2 should not exist") p2 = Pipeline(lambda x, y: x + y, a1, a2, propagate_attrs={"attr1", "attr2"}, propagate_how=1) assert (p2.attr1 == 20) assert (p2.attr2 == 30) p3 = Pipeline(lambda x, y: x + y, a1, a2, propagate_attrs={"attr1", "attr2"}, propagate_how="first") assert (p3.attr1 == 10) assert (p3.attr2 == 30) p4 = Pipeline(lambda x, y: x + y, a1, a2, propagate_attrs={"attr1", "attr2"}, propagate_how="last") assert (p4.attr1 == 20) assert (p4.attr2 == 30) a1.attr3 = 40 a1.attr4 = 50 a1._propagate_attrs = {"attr3"} a1.propagate_attrs = {"attr4"} p5 = Pipeline(lambda x, y: x + y, a1, a2, propagate_how="first") assert (p5.attr3 == 40) assert (p5.attr4 == 50) try: p5.attr1 except AttributeError: pass else: raise AssertionError("attr1 should not exist") try: p5.attr2 except AttributeError: pass else: raise AssertionError("attr2 should not exist")