|
5 | 5 | import textwrap |
6 | 6 | from typing import TYPE_CHECKING, Any |
7 | 7 |
|
| 8 | +import xarray as xr |
| 9 | + |
8 | 10 | if TYPE_CHECKING: |
9 | 11 | from parcels import Field, FieldSet, ParticleSet |
10 | 12 |
|
11 | 13 |
|
12 | | -def field_repr(field: Field) -> str: # TODO v4: Rework or remove entirely |
| 14 | +def fieldset_repr(fieldset: FieldSet) -> str: |
| 15 | + """Return a pretty repr for FieldSet""" |
| 16 | + fields = [f for f in fieldset.fields.values() if getattr(f.__class__, "__name__", "") == "Field"] |
| 17 | + vfields = [f for f in fieldset.fields.values() if getattr(f.__class__, "__name__", "") == "VectorField"] |
| 18 | + |
| 19 | + fields_repr = "\n".join([repr(f) for f in fields]) |
| 20 | + vfields_repr = "\n".join([vectorfield_repr(vf, from_fieldset_repr=True) for vf in vfields]) |
| 21 | + |
| 22 | + out = f"""<{type(fieldset).__name__}> |
| 23 | + fields: |
| 24 | +{textwrap.indent(fields_repr, 8 * " ")} |
| 25 | + vectorfields: |
| 26 | +{textwrap.indent(vfields_repr, 8 * " ")} |
| 27 | +""" |
| 28 | + return textwrap.dedent(out).strip() |
| 29 | + |
| 30 | + |
| 31 | +def field_repr(field: Field, offset: int = 0) -> str: |
13 | 32 | """Return a pretty repr for Field""" |
14 | | - out = f"""<{type(field).__name__}> |
15 | | - name : {field.name!r} |
16 | | - data : {field.data!r} |
17 | | - extrapolate time: {field.allow_time_extrapolation!r} |
| 33 | + with xr.set_options(display_expand_data=False): |
| 34 | + out = f"""<{type(field).__name__} {field.name!r}> |
| 35 | + Parcels attributes: |
| 36 | + name : {field.name!r} |
| 37 | + interp_method : {field.interp_method!r} |
| 38 | + time_interval : {field.time_interval!r} |
| 39 | + units : {field.units!r} |
| 40 | + igrid : {field.igrid!r} |
| 41 | + DataArray: |
| 42 | +{textwrap.indent(repr(field.data), 8 * " ")} |
| 43 | +{textwrap.indent(repr(field.grid), 4 * " ")} |
| 44 | +""" |
| 45 | + return textwrap.indent(out, " " * offset).strip() |
| 46 | + |
| 47 | + |
| 48 | +def vectorfield_repr(fieldset: FieldSet, from_fieldset_repr=False) -> str: |
| 49 | + """Return a pretty repr for VectorField""" |
| 50 | + out = f"""<{type(fieldset).__name__} {fieldset.name!r}> |
| 51 | + Parcels attributes: |
| 52 | + name : {fieldset.name!r} |
| 53 | + vector_interp_method : {fieldset.vector_interp_method!r} |
| 54 | + vector_type : {fieldset.vector_type!r} |
| 55 | + {field_repr(fieldset.U, offset=4) if not from_fieldset_repr else ""} |
| 56 | + {field_repr(fieldset.V, offset=4) if not from_fieldset_repr else ""} |
| 57 | + {field_repr(fieldset.W, offset=4) if not from_fieldset_repr and fieldset.W else ""}""" |
| 58 | + return out |
| 59 | + |
| 60 | + |
| 61 | +def xgrid_repr(grid: Any) -> str: |
| 62 | + """Return a pretty repr for Grid""" |
| 63 | + out = f"""<{type(grid).__name__}> |
| 64 | + Parcels attributes: |
| 65 | + mesh : {grid._mesh} |
| 66 | + spatialhash : {grid._spatialhash} |
| 67 | + xgcm Grid: |
| 68 | +{textwrap.indent(repr(grid.xgcm_grid), 8 * " ")} |
18 | 69 | """ |
19 | 70 | return textwrap.dedent(out).strip() |
20 | 71 |
|
@@ -62,17 +113,6 @@ def particleset_repr(pset: ParticleSet) -> str: |
62 | 113 | return textwrap.dedent(out).strip() |
63 | 114 |
|
64 | 115 |
|
65 | | -def fieldset_repr(fieldset: FieldSet) -> str: # TODO v4: Rework or remove entirely |
66 | | - """Return a pretty repr for FieldSet""" |
67 | | - fields_repr = "\n".join([repr(f) for f in fieldset.fields.values()]) |
68 | | - |
69 | | - out = f"""<{type(fieldset).__name__}> |
70 | | - fields: |
71 | | -{textwrap.indent(fields_repr, 8 * " ")} |
72 | | -""" |
73 | | - return textwrap.dedent(out).strip() |
74 | | - |
75 | | - |
76 | 116 | def default_repr(obj: Any): |
77 | 117 | if is_builtin_object(obj): |
78 | 118 | return repr(obj) |
|
0 commit comments