def test_with_name_field():
    array = ak.Array(
        [
            {"x": 0.0, "y": []},
            {"x": 1.1, "y": [1]},
            {"x": 2.2, "y": [2, 2]},
            {"x": 3.3, "y": [3, 3, 3]},
        ]
    )
    array2 = ak.repartition(array, 2)
    z = ak.Array([100, 200, 300, 400])
    z2 = ak.repartition(z, 3)

    one = ak.with_name(array, "Wilbur")
    assert isinstance(one.layout, ak.layout.Content)
    assert one.layout.parameters["__record__"] == "Wilbur"

    one = ak.with_name(array2, "Wilbur")
    assert isinstance(one.layout, ak.partition.PartitionedArray)
    assert one.layout.partition(0).parameters["__record__"] == "Wilbur"
    assert one.layout.partition(1).parameters["__record__"] == "Wilbur"

    two = ak.with_field(array, z, "z")
    assert isinstance(two.layout, ak.layout.Content)
    assert ak.to_list(two) == [
        {"x": 0.0, "y": [], "z": 100},
        {"x": 1.1, "y": [1], "z": 200},
        {"x": 2.2, "y": [2, 2], "z": 300},
        {"x": 3.3, "y": [3, 3, 3], "z": 400},
    ]

    two = ak.with_field(array2, z, "z")
    assert isinstance(two.layout, ak.partition.PartitionedArray)
    assert ak.to_list(two) == [
        {"x": 0.0, "y": [], "z": 100},
        {"x": 1.1, "y": [1], "z": 200},
        {"x": 2.2, "y": [2, 2], "z": 300},
        {"x": 3.3, "y": [3, 3, 3], "z": 400},
    ]

    two = ak.with_field(array2, z2, "z")
    assert isinstance(two.layout, ak.partition.PartitionedArray)
    assert ak.to_list(two) == [
        {"x": 0.0, "y": [], "z": 100},
        {"x": 1.1, "y": [1], "z": 200},
        {"x": 2.2, "y": [2, 2], "z": 300},
        {"x": 3.3, "y": [3, 3, 3], "z": 400},
    ]

    two = ak.with_field(array2, z2, "z")
    assert isinstance(two.layout, ak.partition.PartitionedArray)
    assert ak.to_list(two) == [
        {"x": 0.0, "y": [], "z": 100},
        {"x": 1.1, "y": [1], "z": 200},
        {"x": 2.2, "y": [2, 2], "z": 300},
        {"x": 3.3, "y": [3, 3, 3], "z": 400},
    ]
def test_unknown_type():
    array = ak.Array({"x": np.arange(10)})
    array = ak.with_field(base=array, what=None, where="unknown field1")
    array = ak.with_field(base=array, what=[None], where="unknown field2")

    # Try to access the type of a single element
    # This raises a ValueError in #879
    tpe1 = array["unknown field1"].type
    tpe2 = array["unknown field2"].type
    assert str(tpe1) == "10 * ?unknown"
    assert str(tpe2) == "10 * ?unknown"
Пример #3
0
def test_broadcast_single_bool():
    base = ak.Array([[{
        "x": 0.1,
        "y": 0.2,
        "z": 0.3
    }, {
        "x": 0.4,
        "y": 0.5,
        "z": 0.6
    }]])
    base_new1 = ak.with_field(base, True, "always_true")
    assert ak.to_list(base_new1.always_true) == [[True, True]]
    base_new2 = ak.with_field(base_new1, base.x > 0.3, "sometimes_true")
    assert ak.to_list(base_new2.always_true) == [[True, True]]
def test_one_level():
    base = ak.zip({
        "a": ak.zip({"x": [1, 2, 3]}),
        "b": [1, 2, 3]
    },
                  depth_limit=1)
    what = ak.Array([1.1, 2.2, 3.3], check_valid=True)
    assert ak.to_list(ak.with_field(base, what, where=["a", "y"])) == [
        {
            "b": 1,
            "a": {
                "x": 1,
                "y": 1.1
            }
        },
        {
            "b": 2,
            "a": {
                "x": 2,
                "y": 2.2
            }
        },
        {
            "b": 3,
            "a": {
                "x": 3,
                "y": 3.3
            }
        },
    ]

    base["a", "y"] = what
    assert ak.to_list(base) == [
        {
            "b": 1,
            "a": {
                "x": 1,
                "y": 1.1
            }
        },
        {
            "b": 2,
            "a": {
                "x": 2,
                "y": 2.2
            }
        },
        {
            "b": 3,
            "a": {
                "x": 3,
                "y": 3.3
            }
        },
    ]
Пример #5
0
def update(events, collections):
    """Return a shallow copy of events array with some collections swapped out"""
    out = events
    for name, value in collections.items():
        out = ak.with_field(out, value, name)
    return out
Пример #6
0
def test_listarray():
    one = ak.Array([[{
        "x": 1
    }, {
        "x": 2
    }, {
        "x": 3
    }], [], [{
        "x": 4
    }, {
        "x": 5
    }]],
                   check_valid=True)
    two = ak.Array([[1.1, 2.2, 3.3], [], [4.4, 5.5]], check_valid=True)
    assert ak.to_list(ak.with_field(one, two, "y")) == [
        [{
            "x": 1,
            "y": 1.1
        }, {
            "x": 2,
            "y": 2.2
        }, {
            "x": 3,
            "y": 3.3
        }],
        [],
        [{
            "x": 4,
            "y": 4.4
        }, {
            "x": 5,
            "y": 5.5
        }],
    ]

    three = ak.Array([100, 200, 300], check_valid=True)
    assert ak.to_list(ak.with_field(one, three, "y")) == [
        [{
            "x": 1,
            "y": 100
        }, {
            "x": 2,
            "y": 100
        }, {
            "x": 3,
            "y": 100
        }],
        [],
        [{
            "x": 4,
            "y": 300
        }, {
            "x": 5,
            "y": 300
        }],
    ]

    assert ak.to_list(ak.with_field(one, [100, 200, 300], "y")) == [
        [{
            "x": 1,
            "y": 100
        }, {
            "x": 2,
            "y": 100
        }, {
            "x": 3,
            "y": 100
        }],
        [],
        [{
            "x": 4,
            "y": 300
        }, {
            "x": 5,
            "y": 300
        }],
    ]
Пример #7
0
def test_regulararray():
    content = ak.layout.NumpyArray(
        np.array([0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]))
    recordarray = ak.layout.RecordArray({"x": content})
    regulararray = ak.Array(ak.layout.RegularArray(recordarray,
                                                   3,
                                                   zeros_length=0),
                            check_valid=True)

    content2 = ak.layout.NumpyArray(np.array([100, 200, 300]))
    regulararray2 = ak.Array(ak.layout.RegularArray(content2,
                                                    1,
                                                    zeros_length=0),
                             check_valid=True)
    assert ak.to_list(ak.with_field(regulararray, regulararray2, "y")) == [
        [{
            "x": 0.0,
            "y": 100
        }, {
            "x": 1.1,
            "y": 100
        }, {
            "x": 2.2,
            "y": 100
        }],
        [{
            "x": 3.3,
            "y": 200
        }, {
            "x": 4.4,
            "y": 200
        }, {
            "x": 5.5,
            "y": 200
        }],
        [{
            "x": 6.6,
            "y": 300
        }, {
            "x": 7.7,
            "y": 300
        }, {
            "x": 8.8,
            "y": 300
        }],
    ]

    content2 = ak.layout.NumpyArray(
        np.array([100, 200, 300, 400, 500, 600, 700, 800, 900]))
    regulararray2 = ak.Array(ak.layout.RegularArray(content2,
                                                    3,
                                                    zeros_length=0),
                             check_valid=True)
    assert ak.to_list(ak.with_field(regulararray, regulararray2, "y")) == [
        [{
            "x": 0.0,
            "y": 100
        }, {
            "x": 1.1,
            "y": 200
        }, {
            "x": 2.2,
            "y": 300
        }],
        [{
            "x": 3.3,
            "y": 400
        }, {
            "x": 4.4,
            "y": 500
        }, {
            "x": 5.5,
            "y": 600
        }],
        [{
            "x": 6.6,
            "y": 700
        }, {
            "x": 7.7,
            "y": 800
        }, {
            "x": 8.8,
            "y": 900
        }],
    ]

    content2 = ak.Array(ak.layout.NumpyArray(np.array([[100], [200], [300]])),
                        check_valid=True)
    assert ak.to_list(ak.with_field(regulararray, content2, "y")) == [
        [{
            "x": 0.0,
            "y": 100
        }, {
            "x": 1.1,
            "y": 100
        }, {
            "x": 2.2,
            "y": 100
        }],
        [{
            "x": 3.3,
            "y": 200
        }, {
            "x": 4.4,
            "y": 200
        }, {
            "x": 5.5,
            "y": 200
        }],
        [{
            "x": 6.6,
            "y": 300
        }, {
            "x": 7.7,
            "y": 300
        }, {
            "x": 8.8,
            "y": 300
        }],
    ]

    content2 = ak.Array(
        ak.layout.NumpyArray(
            np.array([[100, 200, 300], [400, 500, 600], [700, 800, 900]])),
        check_valid=True,
    )
    assert ak.to_list(ak.with_field(regulararray, content2, "y")) == [
        [{
            "x": 0.0,
            "y": 100
        }, {
            "x": 1.1,
            "y": 200
        }, {
            "x": 2.2,
            "y": 300
        }],
        [{
            "x": 3.3,
            "y": 400
        }, {
            "x": 4.4,
            "y": 500
        }, {
            "x": 5.5,
            "y": 600
        }],
        [{
            "x": 6.6,
            "y": 700
        }, {
            "x": 7.7,
            "y": 800
        }, {
            "x": 8.8,
            "y": 900
        }],
    ]
Пример #8
0
def test_withfield():
    base = ak.Array([{"x": 1}, {"x": 2}, {"x": 3}], check_valid=True)
    what = ak.Array([1.1, 2.2, 3.3], check_valid=True)
    assert ak.to_list(ak.with_field(base, what)) == [
        {
            "x": 1,
            "1": 1.1
        },
        {
            "x": 2,
            "1": 2.2
        },
        {
            "x": 3,
            "1": 3.3
        },
    ]
    assert ak.to_list(ak.with_field(base, what, where="y")) == [
        {
            "x": 1,
            "y": 1.1
        },
        {
            "x": 2,
            "y": 2.2
        },
        {
            "x": 3,
            "y": 3.3
        },
    ]

    base["z"] = what
    assert ak.to_list(base) == [
        {
            "x": 1,
            "z": 1.1
        },
        {
            "x": 2,
            "z": 2.2
        },
        {
            "x": 3,
            "z": 3.3
        },
    ]

    base["q"] = 123
    assert ak.to_list(base) == [
        {
            "x": 1,
            "z": 1.1,
            "q": 123
        },
        {
            "x": 2,
            "z": 2.2,
            "q": 123
        },
        {
            "x": 3,
            "z": 3.3,
            "q": 123
        },
    ]

    base = ak.Array([{"x": 1}, {"x": 2}, {"x": 3}], check_valid=True)[2]
    assert ak.to_list(ak.with_field(base, 100, "y")) == {"x": 3, "y": 100}
Пример #9
0
def test_make_mixins():
    @ak.mixin_class(ak.behavior)
    class Point(object):
        def distance(self, other):
            return np.sqrt((self.x - other.x)**2 + (self.y - other.y)**2)

        @ak.mixin_class_method(np.equal, {"Point"})
        def point_equal(self, other):
            return np.logical_and(self.x == other.x, self.y == other.y)

        @ak.mixin_class_method(np.abs)
        def point_abs(self):
            return np.sqrt(self.x**2 + self.y**2)

        @ak.mixin_class_method(np.add, {"Point"})
        def point_add(self, other):
            return ak.zip(
                {
                    "x": self.x + other.x,
                    "y": self.y + other.y
                },
                with_name="Point",
            )

    @ak.mixin_class(ak.behavior)
    class WeightedPoint(Point):
        @ak.mixin_class_method(np.equal, {"WeightedPoint"})
        def weighted_equal(self, other):
            return np.logical_and(self.point_equal(other),
                                  self.weight == other.weight)

        @ak.mixin_class_method(np.add, {"WeightedPoint"})
        def weighted_add(self, other):
            sumw = self.weight + other.weight
            return ak.zip(
                {
                    "x":
                    (self.x * self.weight + other.x * other.weight) / sumw,
                    "y":
                    (self.y * self.weight + other.y * other.weight) / sumw,
                    "weight": sumw,
                },
                with_name="WeightedPoint",
            )

    one = ak.Array(
        [
            [{
                "x": 1,
                "y": 1.1
            }, {
                "x": 2,
                "y": 2.2
            }, {
                "x": 3,
                "y": 3.3
            }],
            [],
            [{
                "x": 4,
                "y": 4.4
            }, {
                "x": 5,
                "y": 5.5
            }],
        ],
        with_name="Point",
    )
    two = ak.Array(
        [
            [{
                "x": 0.9,
                "y": 1
            }, {
                "x": 2,
                "y": 2.2
            }, {
                "x": 2.9,
                "y": 3
            }],
            [],
            [{
                "x": 3.9,
                "y": 4
            }, {
                "x": 5,
                "y": 5.5
            }],
        ],
        with_name="Point",
    )
    wone = ak.Array(ak.with_field(one, abs(one), "weight"),
                    with_name="WeightedPoint")
    wtwo = ak.Array(ak.with_field(two, abs(two), "weight"),
                    with_name="WeightedPoint")

    assert ak.to_list(one + wone) == [
        [{
            "x": 2,
            "y": 2.2
        }, {
            "x": 4,
            "y": 4.4
        }, {
            "x": 6,
            "y": 6.6
        }],
        [],
        [{
            "x": 8,
            "y": 8.8
        }, {
            "x": 10,
            "y": 11.0
        }],
    ]
    assert ak.to_list(wone + wtwo) == [
        [
            {
                "x": 0.9524937500390619,
                "y": 1.052493750039062,
                "weight": 2.831969279439222,
            },
            {
                "x": 2.0,
                "y": 2.2,
                "weight": 5.946427498927402
            },
            {
                "x": 2.9516640394605282,
                "y": 3.1549921183815837,
                "weight": 8.632349833200564,
            },
        ],
        [],
        [
            {
                "x": 3.9515600270076154,
                "y": 4.206240108030463,
                "weight": 11.533018588312771,
            },
            {
                "x": 5.0,
                "y": 5.5,
                "weight": 14.866068747318506
            },
        ],
    ]
    assert ak.to_list(abs(one)) == [
        [1.4866068747318506, 2.973213749463701, 4.459820624195552],
        [],
        [5.946427498927402, 7.433034373659253],
    ]
    assert ak.to_list(one.distance(wtwo)) == [
        [0.14142135623730953, 0.0, 0.31622776601683783],
        [],
        [0.4123105625617664, 0.0],
    ]