|
4 | 4 | import unittest
|
5 | 5 | import warnings
|
6 | 6 |
|
| 7 | +import numpy as np |
| 8 | + |
7 | 9 | faulthandler.enable() # to debug seg faults and timeouts
|
8 | 10 |
|
9 | 11 | import cf
|
@@ -664,6 +666,77 @@ def test_aggregate_trajectory(self):
|
664 | 666 | )
|
665 | 667 | )
|
666 | 668 |
|
| 669 | + def test_aggregate_actual_range(self): |
| 670 | + """Test aggregation of actual_range""" |
| 671 | + f = cf.example_field(0) |
| 672 | + f.set_property("actual_range", (5, 10)) |
| 673 | + f.set_property("valid_range", (0, 15)) |
| 674 | + f0 = f[:, :2] |
| 675 | + f1 = f[:, 2:4] |
| 676 | + f2 = f[:, 4:] |
| 677 | + |
| 678 | + g = cf.aggregate([f0, f1, f2]) |
| 679 | + self.assertEqual(len(g), 1) |
| 680 | + self.assertEqual(g[0].get_property("actual_range"), (5, 10)) |
| 681 | + |
| 682 | + f1.set_property("actual_range", [2, 13]) |
| 683 | + g = cf.aggregate([f0, f1, f2]) |
| 684 | + self.assertEqual(len(g), 1) |
| 685 | + self.assertEqual(g[0].get_property("actual_range"), (2, 13)) |
| 686 | + |
| 687 | + f1.set_property("actual_range", [-2, 17]) |
| 688 | + g = cf.aggregate([f0, f1, f2]) |
| 689 | + self.assertEqual(len(g), 1) |
| 690 | + self.assertEqual(g[0].get_property("actual_range"), (-2, 17)) |
| 691 | + |
| 692 | + g = cf.aggregate([f0, f1, f2], respect_valid=True) |
| 693 | + self.assertEqual(len(g), 1) |
| 694 | + self.assertEqual(g[0].get_property("valid_range"), (0, 15)) |
| 695 | + self.assertFalse(g[0].has_property("actual_range")) |
| 696 | + |
| 697 | + f1.set_property("actual_range", [0, 15]) |
| 698 | + g = cf.aggregate([f0, f1, f2], respect_valid=True) |
| 699 | + self.assertEqual(len(g), 1) |
| 700 | + self.assertEqual(g[0].get_property("valid_range"), (0, 15)) |
| 701 | + self.assertEqual(g[0].get_property("actual_range"), (0, 15)) |
| 702 | + |
| 703 | + def test_aggregate_numpy_array_property(self): |
| 704 | + """Test aggregation of numpy array-valued properties""" |
| 705 | + a = np.array([5, 10]) |
| 706 | + f = cf.example_field(0) |
| 707 | + f.set_property("array", a) |
| 708 | + f0 = f[:, :2] |
| 709 | + f1 = f[:, 2:4] |
| 710 | + f2 = f[:, 4:] |
| 711 | + |
| 712 | + g = cf.aggregate([f0, f1, f2]) |
| 713 | + self.assertEqual(len(g), 1) |
| 714 | + self.assertTrue((g[0].get_property("array") == a).all()) |
| 715 | + |
| 716 | + f1.set_property("array", np.array([-5, 20])) |
| 717 | + g = cf.aggregate([f0, f1, f2]) |
| 718 | + self.assertEqual(len(g), 1) |
| 719 | + self.assertEqual( |
| 720 | + g[0].get_property("array"), |
| 721 | + "[ 5 10] :AGGREGATED: [-5 20] :AGGREGATED: [ 5 10]", |
| 722 | + ) |
| 723 | + |
| 724 | + f2.set_property("array", np.array([-5, 20])) |
| 725 | + g = cf.aggregate([f0, f1, f2]) |
| 726 | + self.assertEqual(len(g), 1) |
| 727 | + self.assertEqual( |
| 728 | + g[0].get_property("array"), |
| 729 | + "[ 5 10] :AGGREGATED: [-5 20] :AGGREGATED: [-5 20]", |
| 730 | + ) |
| 731 | + |
| 732 | + f1.set_property("array", np.array([5, 10])) |
| 733 | + g = cf.aggregate([f0, f1, f2]) |
| 734 | + self.assertEqual(len(g), 1) |
| 735 | + self.assertEqual( |
| 736 | + g[0].get_property("array"), |
| 737 | + "[ 5 10] :AGGREGATED: [-5 20]", |
| 738 | + ) |
| 739 | + |
667 | 740 |
|
668 | 741 | if __name__ == "__main__":
|
669 | 742 | print("Run date:", datetime.datetime.now())
|
|
0 commit comments