Skip to content

Commit 3b4adae

Browse files
committed
Access to variable like attribute
1 parent 1a490b3 commit 3b4adae

File tree

11 files changed

+112
-123
lines changed

11 files changed

+112
-123
lines changed

examples/02_eddy_identification/pet_filter_and_detection.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,20 +62,20 @@ def update_axes(ax, mappable=None):
6262
ax_a = fig.add_subplot(121, xlabel="Amplitude (cm)")
6363
ax_r = fig.add_subplot(122, xlabel="Speed Radius (km)")
6464
ax_a.hist(
65-
merge_f["amplitude"] * 100,
65+
merge_f.amplitude * 100,
6666
bins=arange(0.0005, 100, 1),
6767
label="Eddies in the filtered grid",
6868
histtype="step",
6969
)
7070
ax_a.hist(
71-
merge_t["amplitude"] * 100,
71+
merge_t.amplitude * 100,
7272
bins=arange(0.0005, 100, 1),
7373
label="Eddies without filter",
7474
histtype="step",
7575
)
7676
ax_a.set_xlim(0, 10)
77-
ax_r.hist(merge_f["radius_s"] / 1000.0, bins=arange(0, 300, 5), histtype="step")
78-
ax_r.hist(merge_t["radius_s"] / 1000.0, bins=arange(0, 300, 5), histtype="step")
77+
ax_r.hist(merge_f.radius_s / 1000.0, bins=arange(0, 300, 5), histtype="step")
78+
ax_r.hist(merge_t.radius_s / 1000.0, bins=arange(0, 300, 5), histtype="step")
7979
ax_r.set_xlim(0, 100)
8080
ax_a.legend()
8181

examples/08_tracking_manipulation/pet_run_a_tracking.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@
2828
c.prepare_merging()
2929
# We have now an eddy object
3030
eddies_area_tracker = c.merge(raw_data=False)
31-
eddies_area_tracker["virtual"][:] = eddies_area_tracker["time"] == 0
32-
eddies_area_tracker.filled_by_interpolation(eddies_area_tracker["virtual"] == 1)
31+
eddies_area_tracker.virtual[:] = eddies_area_tracker.time == 0
32+
eddies_area_tracker.filled_by_interpolation(eddies_area_tracker.virtual == 1)
3333

3434
# %%
3535
# We run a traking with default tracker
3636
c = Correspondances(datasets=file_objects, virtual=3)
3737
c.track()
3838
c.prepare_merging()
3939
eddies_default_tracker = c.merge(raw_data=False)
40-
eddies_default_tracker["virtual"][:] = eddies_default_tracker["time"] == 0
41-
eddies_default_tracker.filled_by_interpolation(eddies_default_tracker["virtual"] == 1)
40+
eddies_default_tracker.virtual[:] = eddies_default_tracker.time == 0
41+
eddies_default_tracker.filled_by_interpolation(eddies_default_tracker.virtual == 1)
4242

4343
# %%
4444
# Start GUI to compare tracking

notebooks/python_module/02_eddy_identification/pet_filter_and_detection.ipynb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109
},
110110
"outputs": [],
111111
"source": [
112-
"fig = plt.figure(figsize=(12, 5))\nax_a = fig.add_subplot(121, xlabel=\"Amplitude (cm)\")\nax_r = fig.add_subplot(122, xlabel=\"Speed Radius (km)\")\nax_a.hist(\n merge_f[\"amplitude\"] * 100,\n bins=arange(0.0005, 100, 1),\n label=\"Eddies in the filtered grid\",\n histtype=\"step\",\n)\nax_a.hist(\n merge_t[\"amplitude\"] * 100,\n bins=arange(0.0005, 100, 1),\n label=\"Eddies without filter\",\n histtype=\"step\",\n)\nax_a.set_xlim(0, 10)\nax_r.hist(merge_f[\"radius_s\"] / 1000.0, bins=arange(0, 300, 5), histtype=\"step\")\nax_r.hist(merge_t[\"radius_s\"] / 1000.0, bins=arange(0, 300, 5), histtype=\"step\")\nax_r.set_xlim(0, 100)\nax_a.legend()"
112+
"fig = plt.figure(figsize=(12, 5))\nax_a = fig.add_subplot(121, xlabel=\"Amplitude (cm)\")\nax_r = fig.add_subplot(122, xlabel=\"Speed Radius (km)\")\nax_a.hist(\n merge_f.amplitude * 100,\n bins=arange(0.0005, 100, 1),\n label=\"Eddies in the filtered grid\",\n histtype=\"step\",\n)\nax_a.hist(\n merge_t.amplitude * 100,\n bins=arange(0.0005, 100, 1),\n label=\"Eddies without filter\",\n histtype=\"step\",\n)\nax_a.set_xlim(0, 10)\nax_r.hist(merge_f.radius_s / 1000.0, bins=arange(0, 300, 5), histtype=\"step\")\nax_r.hist(merge_t.radius_s / 1000.0, bins=arange(0, 300, 5), histtype=\"step\")\nax_r.set_xlim(0, 100)\nax_a.legend()"
113113
]
114114
},
115115
{
@@ -176,7 +176,7 @@
176176
"name": "python",
177177
"nbconvert_exporter": "python",
178178
"pygments_lexer": "ipython3",
179-
"version": "3.7.6"
179+
"version": "3.7.7"
180180
}
181181
},
182182
"nbformat": 4,

notebooks/python_module/08_tracking_manipulation/pet_run_a_tracking.ipynb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
},
6363
"outputs": [],
6464
"source": [
65-
"c = Correspondances(datasets=file_objects, class_method=AreaTracker, virtual=3)\nc.track()\nc.prepare_merging()\n# We have now an eddy object\neddies_area_tracker = c.merge(raw_data=False)\neddies_area_tracker[\"virtual\"][:] = eddies_area_tracker[\"time\"] == 0\neddies_area_tracker.filled_by_interpolation(eddies_area_tracker[\"virtual\"] == 1)"
65+
"c = Correspondances(datasets=file_objects, class_method=AreaTracker, virtual=3)\nc.track()\nc.prepare_merging()\n# We have now an eddy object\neddies_area_tracker = c.merge(raw_data=False)\neddies_area_tracker.virtual[:] = eddies_area_tracker.time == 0\neddies_area_tracker.filled_by_interpolation(eddies_area_tracker.virtual == 1)"
6666
]
6767
},
6868
{
@@ -80,7 +80,7 @@
8080
},
8181
"outputs": [],
8282
"source": [
83-
"c = Correspondances(datasets=file_objects, virtual=3)\nc.track()\nc.prepare_merging()\neddies_default_tracker = c.merge(raw_data=False)\neddies_default_tracker[\"virtual\"][:] = eddies_default_tracker[\"time\"] == 0\neddies_default_tracker.filled_by_interpolation(eddies_default_tracker[\"virtual\"] == 1)"
83+
"c = Correspondances(datasets=file_objects, virtual=3)\nc.track()\nc.prepare_merging()\neddies_default_tracker = c.merge(raw_data=False)\neddies_default_tracker.virtual[:] = eddies_default_tracker.time == 0\neddies_default_tracker.filled_by_interpolation(eddies_default_tracker.virtual == 1)"
8484
]
8585
},
8686
{

setup.cfg

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,7 @@ versionfile_source = src/py_eddy_tracker/_version.py
1010
versionfile_build = py_eddy_tracker/_version.py
1111
tag_prefix =
1212
parentdir_prefix =
13+
14+
[tool:pytest]
15+
filterwarnings=
16+
ignore:tostring.*is deprecated

src/py_eddy_tracker/dataset/grid.py

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -551,15 +551,16 @@ def grid_tiles(self, varname, slice_x, slice_y):
551551

552552
def high_filter(self, grid_name, w_cut, **kwargs):
553553
"""Return the grid high-pass filtered, by substracting to the grid the low-pass filter (default: order=1)
554+
554555
:param grid_name: the name of the grid
555556
:param int, w_cut: the half-power wavelength cutoff (km)
556-
557557
"""
558558
result = self._low_filter(grid_name, w_cut, **kwargs)
559559
self.vars[grid_name] -= result
560560

561561
def low_filter(self, grid_name, w_cut, **kwargs):
562562
"""Return the grid low-pass filtered (default: order=1)
563+
563564
:param grid_name: the name of the grid
564565
:param int, w_cut: the half-power wavelength cutoff (km)
565566
"""
@@ -804,28 +805,25 @@ def eddy_identification(
804805
track_array_variables=sampling,
805806
array_variables=array_variables,
806807
)
807-
808-
obs.obs["height_max_speed_contour"] = self.contours.cvalues[
809-
i_max_speed
810-
]
811-
obs.obs["height_external_contour"] = cvalues
812-
obs.obs["height_inner_contour"] = self.contours.cvalues[i_inner]
808+
obs.height_max_speed_contour[:] = self.contours.cvalues[i_max_speed]
809+
obs.height_external_contour[:] = cvalues
810+
obs.height_inner_contour[:] = self.contours.cvalues[i_inner]
813811
array_size = speed_array.shape[0]
814-
obs.obs["nb_contour_selected"] = array_size
812+
obs.nb_contour_selected[:] = array_size
815813
if speed_array.shape[0] == 1:
816-
obs.obs["uavg_profile"][:] = speed_array[0]
814+
obs.uavg_profile[:] = speed_array[0]
817815
else:
818-
obs.obs["uavg_profile"] = raw_resample(speed_array, sampling)
819-
obs.obs["amplitude"] = amp.amplitude
820-
obs.obs["speed_average"] = max_average_speed
821-
obs.obs["num_point_e"] = contour.lon.shape[0]
816+
obs.uavg_profile[:] = raw_resample(speed_array, sampling)
817+
obs.amplitude[:] = amp.amplitude
818+
obs.speed_average[:] = max_average_speed
819+
obs.num_point_e[:] = contour.lon.shape[0]
822820
xy_e = uniform_resample(contour.lon, contour.lat, **out_sampling)
823-
obs.obs["contour_lon_e"], obs.obs["contour_lat_e"] = xy_e
824-
obs.obs["num_point_s"] = speed_contour.lon.shape[0]
821+
obs.contour_lon_e[:], obs.contour_lat_e[:] = xy_e
822+
obs.num_point_s[:] = speed_contour.lon.shape[0]
825823
xy_s = uniform_resample(
826824
speed_contour.lon, speed_contour.lat, **out_sampling
827825
)
828-
obs.obs["contour_lon_s"], obs.obs["contour_lat_s"] = xy_s
826+
obs.contour_lon_s[:], obs.contour_lat_s[:] = xy_s
829827

830828
# FIXME : we use a contour without resampling
831829
# First, get position based on innermost contour
@@ -841,20 +839,20 @@ def eddy_identification(
841839
create_vertice(*xy_e)
842840
)
843841

844-
obs.obs["radius_s"] = eddy_radius_s
845-
obs.obs["radius_e"] = eddy_radius_e
846-
obs.obs["shape_error_e"] = aerr_e
847-
obs.obs["shape_error_s"] = aerr_s
848-
obs.obs["speed_area"] = poly_area(
842+
obs.radius_s[:] = eddy_radius_s
843+
obs.radius_e[:] = eddy_radius_e
844+
obs.shape_error_e[:] = aerr_e
845+
obs.shape_error_s[:] = aerr_s
846+
obs.speed_area[:] = poly_area(
849847
*coordinates_to_local(*xy_s, lon0=centlon_s, lat0=centlat_s)
850848
)
851-
obs.obs["effective_area"] = poly_area(
849+
obs.effective_area[:] = poly_area(
852850
*coordinates_to_local(*xy_e, lon0=centlon_s, lat0=centlat_s)
853851
)
854-
obs.obs["lon"] = centlon_s
855-
obs.obs["lat"] = centlat_s
856-
obs.obs["lon_max"] = centlon_i
857-
obs.obs["lat_max"] = centlat_i
852+
obs.lon[:] = centlon_s
853+
obs.lat[:] = centlat_s
854+
obs.lon_max[:] = centlon_i
855+
obs.lat_max[:] = centlat_i
858856
if aerr > 99.9 or aerr_s > 99.9:
859857
logger.warning(
860858
"Strange shape at this step! shape_error : %f, %f",
@@ -874,18 +872,14 @@ def eddy_identification(
874872
else:
875873
eddies = EddiesObservations.concatenate(eddies)
876874
eddies.sign_type = 1 if anticyclonic_search else -1
877-
eddies.obs["time"] = (date - datetime(1950, 1, 1)).total_seconds() / 86400.0
875+
eddies.time[:] = (date - datetime(1950, 1, 1)).total_seconds() / 86400.0
878876

879877
# normalization longitude between 0 - 360, because storage have an offset on 180
880-
eddies.obs["lon_max"] %= 360
881-
eddies.obs["lon"] %= 360
882-
ref = eddies.obs["lon"] - 180
883-
eddies.obs["contour_lon_e"] = (
884-
(eddies.obs["contour_lon_e"].T - ref) % 360 + ref
885-
).T
886-
eddies.obs["contour_lon_s"] = (
887-
(eddies.obs["contour_lon_s"].T - ref) % 360 + ref
888-
).T
878+
eddies.lon_max[:] %= 360
879+
eddies.lon[:] %= 360
880+
ref = eddies.lon - 180
881+
eddies.contour_lon_e[:] = ((eddies.contour_lon_e.T - ref) % 360 + ref).T
882+
eddies.contour_lon_s[:] = ((eddies.contour_lon_s.T - ref) % 360 + ref).T
889883
a_and_c.append(eddies)
890884

891885
if in_h_unit is not None:

src/py_eddy_tracker/featured_tracking/old_tracker_reference.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,7 @@ def mask_function(self, other, distance):
2222
# Compute Parameter of ellips
2323
minor, major = 1.05, 1.5
2424
y = self.basic_formula_ellips_major_axis(
25-
self.obs["lat"],
26-
degrees=True,
27-
c0=minor,
28-
cmin=minor,
29-
cmax=major,
30-
lat1=23,
31-
lat2=5,
25+
self.lat, degrees=True, c0=minor, cmin=minor, cmax=major, lat1=23, lat2=5,
3226
)
3327
# mask from ellips
3428
mask = self.shifted_ellipsoid_degrees_mask(
@@ -37,11 +31,7 @@ def mask_function(self, other, distance):
3731

3832
# We check ratio (maybe not usefull)
3933
check_ratio(
40-
mask,
41-
self.obs["amplitude"],
42-
other.obs["amplitude"],
43-
self.obs["radius_e"],
44-
other.obs["radius_e"],
34+
mask, self.amplitude, other.amplitude, self.radius_e, other.radius_e,
4535
)
4636
indexs_closest = where(mask)
4737
mask[indexs_closest] = self.across_ground(
@@ -76,7 +66,7 @@ def post_process_link(self, other, i_self, i_other):
7666
for i in where(nb_link > 1)[0]:
7767
m = i == i_other
7868
multiple_in = i_self[m]
79-
i_keep = self.obs["amplitude"][multiple_in].argmax()
69+
i_keep = self.amplitude[multiple_in].argmax()
8070
m[where(m)[0][i_keep]] = False
8171
mask[m] = False
8272

src/py_eddy_tracker/observations/network.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def build_dataset(self, group):
116116
if display_iteration:
117117
print()
118118
eddies = eddies.add_fields(("track",))
119-
eddies.obs["track"][new_i] = group
119+
eddies.track[new_i] = group
120120
return eddies
121121

122122

0 commit comments

Comments
 (0)