earthengine-api 1.5.24__py3-none-any.whl → 1.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of earthengine-api might be problematic. Click here for more details.

Files changed (63) hide show
  1. {earthengine_api-1.5.24.dist-info → earthengine_api-1.6.0.dist-info}/METADATA +1 -1
  2. earthengine_api-1.6.0.dist-info/RECORD +107 -0
  3. ee/__init__.py +11 -10
  4. ee/_arg_types.py +2 -1
  5. ee/_cloud_api_utils.py +7 -6
  6. ee/_helpers.py +3 -2
  7. ee/apifunction.py +11 -9
  8. ee/apitestcase.py +2 -1
  9. ee/batch.py +46 -42
  10. ee/blob.py +2 -2
  11. ee/classifier.py +57 -59
  12. ee/cli/commands.py +9 -7
  13. ee/cli/utils.py +13 -9
  14. ee/clusterer.py +39 -41
  15. ee/collection.py +42 -42
  16. ee/computedobject.py +10 -10
  17. ee/confusionmatrix.py +8 -8
  18. ee/customfunction.py +2 -2
  19. ee/data.py +15 -14
  20. ee/daterange.py +9 -9
  21. ee/deprecation.py +13 -11
  22. ee/deserializer.py +5 -5
  23. ee/dictionary.py +11 -11
  24. ee/ee_array.py +17 -17
  25. ee/ee_date.py +22 -22
  26. ee/ee_list.py +15 -15
  27. ee/ee_number.py +5 -5
  28. ee/ee_string.py +6 -6
  29. ee/ee_types.py +2 -2
  30. ee/element.py +14 -14
  31. ee/errormargin.py +3 -3
  32. ee/feature.py +67 -70
  33. ee/featurecollection.py +30 -32
  34. ee/filter.py +88 -90
  35. ee/function.py +3 -3
  36. ee/geometry.py +61 -62
  37. ee/image.py +216 -209
  38. ee/image_converter.py +2 -2
  39. ee/imagecollection.py +23 -20
  40. ee/join.py +13 -15
  41. ee/kernel.py +55 -57
  42. ee/oauth.py +26 -20
  43. ee/pixeltype.py +5 -5
  44. ee/projection.py +4 -3
  45. ee/reducer.py +39 -41
  46. ee/serializer.py +4 -4
  47. ee/table_converter.py +3 -2
  48. ee/terrain.py +6 -8
  49. ee/tests/_cloud_api_utils_test.py +1 -1
  50. ee/tests/_helpers_test.py +1 -1
  51. ee/tests/batch_test.py +1 -1
  52. ee/tests/data_test.py +2 -2
  53. ee/tests/ee_test.py +3 -3
  54. ee/tests/errormargin_test.py +1 -1
  55. ee/tests/image_converter_test.py +2 -2
  56. ee/tests/pixeltype_test.py +1 -2
  57. ee/tests/projection_test.py +2 -3
  58. ee/tests/table_converter_test.py +2 -2
  59. earthengine_api-1.5.24.dist-info/RECORD +0 -107
  60. {earthengine_api-1.5.24.dist-info → earthengine_api-1.6.0.dist-info}/WHEEL +0 -0
  61. {earthengine_api-1.5.24.dist-info → earthengine_api-1.6.0.dist-info}/entry_points.txt +0 -0
  62. {earthengine_api-1.5.24.dist-info → earthengine_api-1.6.0.dist-info}/licenses/LICENSE +0 -0
  63. {earthengine_api-1.5.24.dist-info → earthengine_api-1.6.0.dist-info}/top_level.txt +0 -0
ee/image.py CHANGED
@@ -6,8 +6,9 @@ details.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
+ from collections.abc import Sequence
9
10
  import json
10
- from typing import Any, Optional, Sequence
11
+ from typing import Any
11
12
 
12
13
  from ee import _arg_types
13
14
  from ee import _utils
@@ -39,8 +40,7 @@ def _parse_dimensions(dimensions: Any) -> Sequence[Any]:
39
40
  elif isinstance(dimensions, (list, tuple)) and 1 <= len(dimensions) <= 2:
40
41
  return dimensions
41
42
 
42
- raise ee_exception.EEException(
43
- 'Invalid dimensions {}.'.format(dimensions))
43
+ raise ee_exception.EEException(f'Invalid dimensions {dimensions}.')
44
44
 
45
45
 
46
46
  class Image(element.Element):
@@ -52,9 +52,7 @@ class Image(element.Element):
52
52
  _HAS_DYNAMIC_ATTRIBUTES = True
53
53
 
54
54
  @deprecation.WarnForDeprecatedAsset('args')
55
- def __init__(
56
- self, args: Optional[Any] = None, version: Optional[float] = None
57
- ):
55
+ def __init__(self, args: Any | None = None, version: float | None = None):
58
56
  """Constructs an Earth Engine image.
59
57
 
60
58
  Args:
@@ -132,7 +130,7 @@ class Image(element.Element):
132
130
  return 'Image'
133
131
 
134
132
  # pylint: disable-next=useless-parent-delegation
135
- def getInfo(self) -> Optional[Any]:
133
+ def getInfo(self) -> Any | None:
136
134
  """Fetch and return information about this image.
137
135
 
138
136
  Returns:
@@ -142,7 +140,7 @@ class Image(element.Element):
142
140
  """
143
141
  return super().getInfo()
144
142
 
145
- def getMapId(self, vis_params: Optional[Any] = None) -> dict[str, Any]:
143
+ def getMapId(self, vis_params: Any | None = None) -> dict[str, Any]:
146
144
  """Fetch and return a map ID dictionary, suitable for use in a Map overlay.
147
145
 
148
146
  Args:
@@ -175,7 +173,7 @@ class Image(element.Element):
175
173
  - whether dimensions had originally been specified, but were merged
176
174
  into the image.
177
175
  """
178
- keys_to_extract = set(['crs', 'crs_transform', 'crsTransform'])
176
+ keys_to_extract = {'crs', 'crs_transform', 'crsTransform'}
179
177
  request = {}
180
178
  reprojection_params = {}
181
179
  dimensions_consumed = False
@@ -264,7 +262,7 @@ class Image(element.Element):
264
262
  image
265
263
  - any remaining (non-selection/scale) parameters.
266
264
  """
267
- keys_to_extract = set(['region', 'dimensions', 'scale'])
265
+ keys_to_extract = {'region', 'dimensions', 'scale'}
268
266
  scale_keys = ['maxDimension', 'height', 'width', 'scale']
269
267
  request: dict[str, Any] = {}
270
268
  selection_params: dict[str, Any] = {}
@@ -357,8 +355,17 @@ class Image(element.Element):
357
355
  """
358
356
  # Split the parameters into those handled handled by visualize()
359
357
  # and those that aren't.
360
- keys_to_extract = set(['bands', 'gain', 'bias', 'min', 'max',
361
- 'gamma', 'palette', 'opacity', 'forceRgbOutput'])
358
+ keys_to_extract = {
359
+ 'bands',
360
+ 'gain',
361
+ 'bias',
362
+ 'min',
363
+ 'max',
364
+ 'gamma',
365
+ 'palette',
366
+ 'opacity',
367
+ 'forceRgbOutput',
368
+ }
362
369
  request = {}
363
370
  vis_params = {}
364
371
  if params:
@@ -449,7 +456,7 @@ class Image(element.Element):
449
456
  """
450
457
  return self._apply_spatial_transformations(params)
451
458
 
452
- def getDownloadURL(self, params: Optional[dict[str, Any]] = None) -> str:
459
+ def getDownloadURL(self, params: dict[str, Any] | None = None) -> str:
453
460
  """Get a download URL for an image chunk.
454
461
 
455
462
  Generates a download URL for small chunks of image data in GeoTIFF or NumPy
@@ -534,7 +541,7 @@ class Image(element.Element):
534
541
  params['image'] = image
535
542
  return data.getThumbId(params)
536
543
 
537
- def getThumbURL(self, params: Optional[dict[str, Any]] = None) -> str:
544
+ def getThumbURL(self, params: dict[str, Any] | None = None) -> str:
538
545
  """Get a thumbnail URL for this image.
539
546
 
540
547
  Args:
@@ -609,7 +616,7 @@ class Image(element.Element):
609
616
  return Image.combine_(args)
610
617
 
611
618
  @staticmethod
612
- def combine_(images: Any, names: Optional[Any] = None) -> Image:
619
+ def combine_(images: Any, names: Any | None = None) -> Image:
613
620
  """Combine all the bands from the given images into a single image.
614
621
 
615
622
  Args:
@@ -634,7 +641,7 @@ class Image(element.Element):
634
641
  return result
635
642
 
636
643
  @_utils.accept_opt_prefix(('opt_map', 'map_'))
637
- def expression(self, expression: Any, map_: Optional[Any] = None) -> Image:
644
+ def expression(self, expression: Any, map_: Any | None = None) -> Image:
638
645
  """Evaluates an arithmetic expression on an image or images.
639
646
 
640
647
  The bands of the primary input image are available using the built-in
@@ -714,8 +721,8 @@ class Image(element.Element):
714
721
  def addBands(
715
722
  self,
716
723
  srcImg: _arg_types.Image, # pylint: disable=invalid-name
717
- names: Optional[_arg_types.List] = None,
718
- overwrite: Optional[_arg_types.Bool] = None,
724
+ names: _arg_types.List | None = None,
725
+ overwrite: _arg_types.Bool | None = None,
719
726
  ) -> Image:
720
727
  """Returns an image containing all bands.
721
728
 
@@ -765,7 +772,7 @@ class Image(element.Element):
765
772
  def arrayAccum(
766
773
  self,
767
774
  axis: _arg_types.Integer,
768
- reducer: Optional[_arg_types.Reducer] = None,
775
+ reducer: _arg_types.Reducer | None = None,
769
776
  ) -> Image:
770
777
  """Accumulates elements of each array pixel along the given axis.
771
778
 
@@ -847,7 +854,7 @@ class Image(element.Element):
847
854
  def arrayFlatten(
848
855
  self,
849
856
  coordinateLabels: _arg_types.List, # pylint: disable=invalid-name
850
- separator: Optional[_arg_types.String] = None,
857
+ separator: _arg_types.String | None = None,
851
858
  ) -> Image:
852
859
  """Returns an image of scalar pixels with one band per element of the array.
853
860
 
@@ -926,7 +933,7 @@ class Image(element.Element):
926
933
  return apifunction.ApiFunction.call_(self.name() + '.arrayMask', self, mask)
927
934
 
928
935
  def arrayPad(
929
- self, lengths: _arg_types.List, pad: Optional[_arg_types.Number] = None
936
+ self, lengths: _arg_types.List, pad: _arg_types.Number | None = None
930
937
  ) -> Image:
931
938
  """Pads the array values in each pixel to be a fixed length.
932
939
 
@@ -973,7 +980,7 @@ class Image(element.Element):
973
980
  reducer: _arg_types.Any,
974
981
  axes: _arg_types.Any,
975
982
  # pylint: disable-next=invalid-name
976
- fieldAxis: Optional[_arg_types.Integer] = None,
983
+ fieldAxis: _arg_types.Integer | None = None,
977
984
  ) -> Image:
978
985
  """Reduces elements of each array pixel.
979
986
 
@@ -1036,10 +1043,10 @@ class Image(element.Element):
1036
1043
 
1037
1044
  def arraySlice(
1038
1045
  self,
1039
- axis: Optional[_arg_types.Integer] = None,
1040
- start: Optional[_arg_types.Any] = None,
1041
- end: Optional[_arg_types.Any] = None,
1042
- step: Optional[_arg_types.Integer] = None,
1046
+ axis: _arg_types.Integer | None = None,
1047
+ start: _arg_types.Any | None = None,
1048
+ end: _arg_types.Any | None = None,
1049
+ step: _arg_types.Integer | None = None,
1043
1050
  ) -> Image:
1044
1051
  """Returns a subarray image.
1045
1052
 
@@ -1078,7 +1085,7 @@ class Image(element.Element):
1078
1085
  self.name() + '.arraySlice', self, axis, start, end, step
1079
1086
  )
1080
1087
 
1081
- def arraySort(self, keys: Optional[_arg_types.Any] = None) -> Image:
1088
+ def arraySort(self, keys: _arg_types.Any | None = None) -> Image:
1082
1089
  """Sorts elements of each array pixel along one axis.
1083
1090
 
1084
1091
  Args:
@@ -1094,8 +1101,8 @@ class Image(element.Element):
1094
1101
 
1095
1102
  def arrayTranspose(
1096
1103
  self,
1097
- axis1: Optional[_arg_types.Integer] = None,
1098
- axis2: Optional[_arg_types.Integer] = None,
1104
+ axis1: _arg_types.Integer | None = None,
1105
+ axis2: _arg_types.Integer | None = None,
1099
1106
  ) -> Image:
1100
1107
  """Transposes two dimensions of each array pixel.
1101
1108
 
@@ -1268,7 +1275,7 @@ class Image(element.Element):
1268
1275
  self,
1269
1276
  # pylint: disable=invalid-name
1270
1277
  bandTypes: _arg_types.Dictionary,
1271
- bandOrder: Optional[_arg_types.Any] = None,
1278
+ bandOrder: _arg_types.Any | None = None,
1272
1279
  # pylint: enable=invalid-name
1273
1280
  ) -> Image:
1274
1281
  """Casts some or all bands of an image to the specified types.
@@ -1342,7 +1349,7 @@ class Image(element.Element):
1342
1349
  self,
1343
1350
  classifier: _arg_types.Classifier,
1344
1351
  # pylint: disable-next=invalid-name
1345
- outputName: Optional[_arg_types.String] = None,
1352
+ outputName: _arg_types.String | None = None,
1346
1353
  ) -> Image:
1347
1354
  """Classifies an image.
1348
1355
 
@@ -1387,12 +1394,12 @@ class Image(element.Element):
1387
1394
 
1388
1395
  def clipToBoundsAndScale(
1389
1396
  self,
1390
- geometry: Optional[_arg_types.Geometry] = None,
1391
- width: Optional[_arg_types.Integer] = None,
1392
- height: Optional[_arg_types.Integer] = None,
1397
+ geometry: _arg_types.Geometry | None = None,
1398
+ width: _arg_types.Integer | None = None,
1399
+ height: _arg_types.Integer | None = None,
1393
1400
  # pylint: disable-next=invalid-name
1394
- maxDimension: Optional[_arg_types.Integer] = None,
1395
- scale: Optional[_arg_types.Number] = None,
1401
+ maxDimension: _arg_types.Integer | None = None,
1402
+ scale: _arg_types.Number | None = None,
1396
1403
  ) -> Image:
1397
1404
  """Returns an image clipped to a geometry and scaled.
1398
1405
 
@@ -1450,7 +1457,7 @@ class Image(element.Element):
1450
1457
  self,
1451
1458
  clusterer: _arg_types.Clusterer,
1452
1459
  # pylint: disable-next=invalid-name
1453
- outputName: Optional[_arg_types.String] = None,
1460
+ outputName: _arg_types.String | None = None,
1454
1461
  ) -> Image:
1455
1462
  """Applies a clusterer to an image.
1456
1463
 
@@ -1494,8 +1501,8 @@ class Image(element.Element):
1494
1501
  def connectedPixelCount(
1495
1502
  self,
1496
1503
  # pylint: disable=invalid-name
1497
- maxSize: Optional[_arg_types.Integer] = None,
1498
- eightConnected: Optional[_arg_types.Bool] = None,
1504
+ maxSize: _arg_types.Integer | None = None,
1505
+ eightConnected: _arg_types.Bool | None = None,
1499
1506
  # pylint: enable=invalid-name
1500
1507
  ) -> Image:
1501
1508
  """Returns an ee.Image with the number of connected neighbors.
@@ -1544,8 +1551,8 @@ class Image(element.Element):
1544
1551
  def copyProperties(
1545
1552
  self,
1546
1553
  source: _arg_types.Element,
1547
- properties: Optional[_arg_types.List] = None,
1548
- exclude: Optional[_arg_types.List] = None,
1554
+ properties: _arg_types.List | None = None,
1555
+ exclude: _arg_types.List | None = None,
1549
1556
  ) -> Image:
1550
1557
  """Copies metadata properties from one element to another.
1551
1558
 
@@ -1579,7 +1586,7 @@ class Image(element.Element):
1579
1586
  source: _arg_types.Any,
1580
1587
  # pylint: disable=invalid-name
1581
1588
  maxDistance: _arg_types.Number,
1582
- geodeticDistance: Optional[_arg_types.Bool] = None,
1589
+ geodeticDistance: _arg_types.Bool | None = None,
1583
1590
  # pylint: enable=invalid-name
1584
1591
  ) -> Image:
1585
1592
  """Returns an ee.Image with the cumulative cost map.
@@ -1639,7 +1646,7 @@ class Image(element.Element):
1639
1646
  angle: _arg_types.Number,
1640
1647
  # pylint: disable=invalid-name
1641
1648
  maxDistance: _arg_types.Integer,
1642
- labelBand: Optional[_arg_types.String] = None,
1649
+ labelBand: _arg_types.String | None = None,
1643
1650
  # pylint: enable=invalid-name
1644
1651
  ) -> Image:
1645
1652
  """Returns an ee.Image with the directional distance transform.
@@ -1669,9 +1676,9 @@ class Image(element.Element):
1669
1676
  def displace(
1670
1677
  self,
1671
1678
  displacement: _arg_types.Any,
1672
- mode: Optional[_arg_types.String] = None,
1679
+ mode: _arg_types.String | None = None,
1673
1680
  # pylint: disable-next=invalid-name
1674
- maxOffset: Optional[_arg_types.Number] = None,
1681
+ maxOffset: _arg_types.Number | None = None,
1675
1682
  ) -> Image:
1676
1683
  """Warps an image using an image of displacements.
1677
1684
 
@@ -1700,10 +1707,10 @@ class Image(element.Element):
1700
1707
  # pylint: disable=invalid-name
1701
1708
  referenceImage: _arg_types.Image,
1702
1709
  maxOffset: _arg_types.Number,
1703
- projection: Optional[_arg_types.Projection] = None,
1704
- patchWidth: Optional[_arg_types.Number] = None,
1710
+ projection: _arg_types.Projection | None = None,
1711
+ patchWidth: _arg_types.Number | None = None,
1705
1712
  # pylint: enable=invalid-name
1706
- stiffness: Optional[_arg_types.Number] = None,
1713
+ stiffness: _arg_types.Number | None = None,
1707
1714
  ) -> Image:
1708
1715
  """Returns an ee.Image with the displacement map.
1709
1716
 
@@ -1747,9 +1754,9 @@ class Image(element.Element):
1747
1754
 
1748
1755
  def distance(
1749
1756
  self,
1750
- kernel: Optional[_arg_types.Kernel] = None,
1757
+ kernel: _arg_types.Kernel | None = None,
1751
1758
  # pylint: disable-next=invalid-name
1752
- skipMasked: Optional[_arg_types.Bool] = True,
1759
+ skipMasked: _arg_types.Bool | None = True,
1753
1760
  ) -> Image:
1754
1761
  """Returns an ee.Image with the distance map.
1755
1762
 
@@ -1849,9 +1856,9 @@ class Image(element.Element):
1849
1856
 
1850
1857
  def fastDistanceTransform(
1851
1858
  self,
1852
- neighborhood: Optional[_arg_types.Integer] = None,
1853
- units: Optional[_arg_types.String] = None,
1854
- metric: Optional[_arg_types.String] = None,
1859
+ neighborhood: _arg_types.Integer | None = None,
1860
+ units: _arg_types.String | None = None,
1861
+ metric: _arg_types.String | None = None,
1855
1862
  ) -> Image:
1856
1863
  """Returns the distance to the nearest non-zero valued pixel.
1857
1864
 
@@ -1928,12 +1935,12 @@ class Image(element.Element):
1928
1935
 
1929
1936
  def focalMax(
1930
1937
  self,
1931
- radius: Optional[_arg_types.Number] = None,
1938
+ radius: _arg_types.Number | None = None,
1932
1939
  # pylint: disable-next=invalid-name
1933
- kernelType: Optional[_arg_types.String] = None,
1934
- units: Optional[_arg_types.String] = None,
1935
- iterations: Optional[_arg_types.Integer] = None,
1936
- kernel: Optional[_arg_types.Kernel] = None,
1940
+ kernelType: _arg_types.String | None = None,
1941
+ units: _arg_types.String | None = None,
1942
+ iterations: _arg_types.Integer | None = None,
1943
+ kernel: _arg_types.Kernel | None = None,
1937
1944
  ) -> Image:
1938
1945
  """Returns the maximum value of the input within the kernel.
1939
1946
 
@@ -1962,12 +1969,12 @@ class Image(element.Element):
1962
1969
 
1963
1970
  def focalMean(
1964
1971
  self,
1965
- radius: Optional[_arg_types.Number] = None,
1972
+ radius: _arg_types.Number | None = None,
1966
1973
  # pylint: disable-next=invalid-name
1967
- kernelType: Optional[_arg_types.String] = None,
1968
- units: Optional[_arg_types.String] = None,
1969
- iterations: Optional[_arg_types.Integer] = None,
1970
- kernel: Optional[_arg_types.Kernel] = None,
1974
+ kernelType: _arg_types.String | None = None,
1975
+ units: _arg_types.String | None = None,
1976
+ iterations: _arg_types.Integer | None = None,
1977
+ kernel: _arg_types.Kernel | None = None,
1971
1978
  ) -> Image:
1972
1979
  """Returns the mean value of the input within the kernel.
1973
1980
 
@@ -1996,12 +2003,12 @@ class Image(element.Element):
1996
2003
 
1997
2004
  def focalMedian(
1998
2005
  self,
1999
- radius: Optional[_arg_types.Number] = None,
2006
+ radius: _arg_types.Number | None = None,
2000
2007
  # pylint: disable-next=invalid-name
2001
- kernelType: Optional[_arg_types.String] = None,
2002
- units: Optional[_arg_types.String] = None,
2003
- iterations: Optional[_arg_types.Integer] = None,
2004
- kernel: Optional[_arg_types.Kernel] = None,
2008
+ kernelType: _arg_types.String | None = None,
2009
+ units: _arg_types.String | None = None,
2010
+ iterations: _arg_types.Integer | None = None,
2011
+ kernel: _arg_types.Kernel | None = None,
2005
2012
  ) -> Image:
2006
2013
  """Returns the median value of the input within the kernel.
2007
2014
 
@@ -2030,12 +2037,12 @@ class Image(element.Element):
2030
2037
 
2031
2038
  def focalMin(
2032
2039
  self,
2033
- radius: Optional[_arg_types.Number] = None,
2040
+ radius: _arg_types.Number | None = None,
2034
2041
  # pylint: disable-next=invalid-name
2035
- kernelType: Optional[_arg_types.String] = None,
2036
- units: Optional[_arg_types.String] = None,
2037
- iterations: Optional[_arg_types.Integer] = None,
2038
- kernel: Optional[_arg_types.Kernel] = None,
2042
+ kernelType: _arg_types.String | None = None,
2043
+ units: _arg_types.String | None = None,
2044
+ iterations: _arg_types.Integer | None = None,
2045
+ kernel: _arg_types.Kernel | None = None,
2039
2046
  ) -> Image:
2040
2047
  """Returns the minimum value of the input within the kernel.
2041
2048
 
@@ -2064,12 +2071,12 @@ class Image(element.Element):
2064
2071
 
2065
2072
  def focalMode(
2066
2073
  self,
2067
- radius: Optional[_arg_types.Number] = None,
2074
+ radius: _arg_types.Number | None = None,
2068
2075
  # pylint: disable-next=invalid-name
2069
- kernelType: Optional[_arg_types.String] = None,
2070
- units: Optional[_arg_types.String] = None,
2071
- iterations: Optional[_arg_types.Integer] = None,
2072
- kernel: Optional[_arg_types.Kernel] = None,
2076
+ kernelType: _arg_types.String | None = None,
2077
+ units: _arg_types.String | None = None,
2078
+ iterations: _arg_types.Integer | None = None,
2079
+ kernel: _arg_types.Kernel | None = None,
2073
2080
  ) -> Image:
2074
2081
  """Returns the mode value of the input within the kernel.
2075
2082
 
@@ -2124,9 +2131,9 @@ class Image(element.Element):
2124
2131
  def geometry(
2125
2132
  self,
2126
2133
  # pylint: disable-next=invalid-name
2127
- maxError: Optional[_arg_types.ErrorMargin] = None,
2128
- proj: Optional[_arg_types.Projection] = None,
2129
- geodesics: Optional[_arg_types.Bool] = None,
2134
+ maxError: _arg_types.ErrorMargin | None = None,
2135
+ proj: _arg_types.Projection | None = None,
2136
+ geodesics: _arg_types.Bool | None = None,
2130
2137
  ) -> ee_geometry.Geometry:
2131
2138
  """Returns the geometry of a given feature in a given projection.
2132
2139
 
@@ -2147,9 +2154,9 @@ class Image(element.Element):
2147
2154
 
2148
2155
  def glcmTexture(
2149
2156
  self,
2150
- size: Optional[_arg_types.Integer] = None,
2151
- kernel: Optional[_arg_types.Kernel] = None,
2152
- average: Optional[_arg_types.Bool] = None,
2157
+ size: _arg_types.Integer | None = None,
2158
+ kernel: _arg_types.Kernel | None = None,
2159
+ average: _arg_types.Bool | None = None,
2153
2160
  ) -> Image:
2154
2161
  """Returns the GLCM texture metrics.
2155
2162
 
@@ -2252,10 +2259,10 @@ class Image(element.Element):
2252
2259
 
2253
2260
  def hersDescriptor(
2254
2261
  self,
2255
- selectors: Optional[_arg_types.List] = None,
2256
- buckets: Optional[_arg_types.Integer] = None,
2262
+ selectors: _arg_types.List | None = None,
2263
+ buckets: _arg_types.Integer | None = None,
2257
2264
  # pylint: disable-next=invalid-name
2258
- peakWidthScale: Optional[_arg_types.Number] = None,
2265
+ peakWidthScale: _arg_types.Number | None = None,
2259
2266
  ) -> dictionary.Dictionary:
2260
2267
  """Returns a dictionary of Histogram Error Ring Statistic (HERS) arrays.
2261
2268
 
@@ -2284,7 +2291,7 @@ class Image(element.Element):
2284
2291
  self,
2285
2292
  reference: _arg_types.Dictionary,
2286
2293
  # pylint: disable-next=invalid-name
2287
- peakWidthScale: Optional[_arg_types.Number] = None,
2294
+ peakWidthScale: _arg_types.Number | None = None,
2288
2295
  ) -> Image:
2289
2296
  """Returns an ee.Image with Histogram Error Ring Statistic (HERS).
2290
2297
 
@@ -2306,9 +2313,9 @@ class Image(element.Element):
2306
2313
  self,
2307
2314
  image2: _arg_types.Image,
2308
2315
  radius: _arg_types.Integer,
2309
- buckets: Optional[_arg_types.Integer] = None,
2316
+ buckets: _arg_types.Integer | None = None,
2310
2317
  # pylint: disable-next=invalid-name
2311
- peakWidthScale: Optional[_arg_types.Number] = None,
2318
+ peakWidthScale: _arg_types.Number | None = None,
2312
2319
  ) -> Image:
2313
2320
  """Returns an Image with Histogram Error Ring Statistic (HERS) for pairs.
2314
2321
 
@@ -2399,7 +2406,7 @@ class Image(element.Element):
2399
2406
  self,
2400
2407
  x: _arg_types.List,
2401
2408
  y: _arg_types.List,
2402
- behavior: Optional[_arg_types.String] = None,
2409
+ behavior: _arg_types.String | None = None,
2403
2410
  ) -> Image:
2404
2411
  """Returns an ee.Image with interpolated values.
2405
2412
 
@@ -2453,9 +2460,9 @@ class Image(element.Element):
2453
2460
  self,
2454
2461
  # pylint: disable=invalid-name
2455
2462
  imageCollection: _arg_types.ImageCollection,
2456
- linkedBands: Optional[_arg_types.Any] = None,
2457
- linkedProperties: Optional[_arg_types.Any] = None,
2458
- matchPropertyName: Optional[_arg_types.String] = None,
2463
+ linkedBands: _arg_types.Any | None = None,
2464
+ linkedProperties: _arg_types.Any | None = None,
2465
+ matchPropertyName: _arg_types.String | None = None,
2459
2466
  # pylint: enable=invalid-name
2460
2467
  ) -> Image:
2461
2468
  """Links the source image to a matching image from an image collection.
@@ -2504,7 +2511,7 @@ class Image(element.Element):
2504
2511
  @staticmethod
2505
2512
  def load(
2506
2513
  id: _arg_types.String, # pylint: disable=redefined-builtin
2507
- version: Optional[_arg_types.Integer] = None,
2514
+ version: _arg_types.Integer | None = None,
2508
2515
  ) -> Image:
2509
2516
  """Returns the image given its ID.
2510
2517
 
@@ -2585,7 +2592,7 @@ class Image(element.Element):
2585
2592
 
2586
2593
  return apifunction.ApiFunction.call_(self.name() + '.lte', self, image2)
2587
2594
 
2588
- def mask(self, mask: Optional[_arg_types.Image] = None) -> Image:
2595
+ def mask(self, mask: _arg_types.Image | None = None) -> Image:
2589
2596
  """Gets or sets an image's mask.
2590
2597
 
2591
2598
  The output image retains the metadata and footprint of the input image.
@@ -2765,8 +2772,8 @@ class Image(element.Element):
2765
2772
 
2766
2773
  def matrixTranspose(
2767
2774
  self,
2768
- axis1: Optional[_arg_types.Integer] = None,
2769
- axis2: Optional[_arg_types.Integer] = None,
2775
+ axis1: _arg_types.Integer | None = None,
2776
+ axis2: _arg_types.Integer | None = None,
2770
2777
  ) -> Image:
2771
2778
  """Transposes two dimensions of each array pixel.
2772
2779
 
@@ -2804,8 +2811,8 @@ class Image(element.Element):
2804
2811
 
2805
2812
  def medialAxis(
2806
2813
  self,
2807
- neighborhood: Optional[_arg_types.Integer] = None,
2808
- units: Optional[_arg_types.String] = None,
2814
+ neighborhood: _arg_types.Integer | None = None,
2815
+ units: _arg_types.String | None = None,
2809
2816
  ) -> Image:
2810
2817
  """Returns the discrete medial axis of the input image.
2811
2818
 
@@ -2833,7 +2840,7 @@ class Image(element.Element):
2833
2840
  def metadata(
2834
2841
  self,
2835
2842
  property: _arg_types.String, # pylint: disable=redefined-builtin
2836
- name: Optional[_arg_types.String] = None,
2843
+ name: _arg_types.String | None = None,
2837
2844
  ) -> Image:
2838
2845
  """Generates a constant image of type double from a metadata property.
2839
2846
 
@@ -2907,7 +2914,7 @@ class Image(element.Element):
2907
2914
  self,
2908
2915
  kernel: _arg_types.Kernel,
2909
2916
  # pylint: disable-next=invalid-name
2910
- defaultValue: Optional[_arg_types.Number] = None,
2917
+ defaultValue: _arg_types.Number | None = None,
2911
2918
  ) -> Image:
2912
2919
  """Turns the neighborhood of each pixel in a scalar image into a 2D array.
2913
2920
 
@@ -2975,7 +2982,7 @@ class Image(element.Element):
2975
2982
  def normalizedDifference(
2976
2983
  self,
2977
2984
  # pylint: disable-next=invalid-name
2978
- bandNames: Optional[_arg_types.Any] = None,
2985
+ bandNames: _arg_types.Any | None = None,
2979
2986
  ) -> Image:
2980
2987
  """Computes the normalized difference between two bands.
2981
2988
 
@@ -3026,8 +3033,8 @@ class Image(element.Element):
3026
3033
  self,
3027
3034
  # pylint: disable-next=invalid-name
3028
3035
  featureCollection: _arg_types.FeatureCollection,
3029
- color: Optional[_arg_types.Any] = None,
3030
- width: Optional[_arg_types.Any] = None,
3036
+ color: _arg_types.Any | None = None,
3037
+ width: _arg_types.Any | None = None,
3031
3038
  ) -> Image:
3032
3039
  """Returns an image with the geometries of a collection painted onto it.
3033
3040
 
@@ -3133,8 +3140,8 @@ class Image(element.Element):
3133
3140
 
3134
3141
  @staticmethod
3135
3142
  def random(
3136
- seed: Optional[_arg_types.Integer] = None,
3137
- distribution: Optional[_arg_types.String] = None,
3143
+ seed: _arg_types.Integer | None = None,
3144
+ distribution: _arg_types.String | None = None,
3138
3145
  ) -> Image:
3139
3146
  """Returns an image with a random number at each pixel location.
3140
3147
 
@@ -3187,8 +3194,8 @@ class Image(element.Element):
3187
3194
  self,
3188
3195
  reducer: _arg_types.Reducer,
3189
3196
  # pylint: disable=invalid-name
3190
- labelBand: Optional[_arg_types.String] = None,
3191
- maxSize: Optional[_arg_types.Integer] = None,
3197
+ labelBand: _arg_types.String | None = None,
3198
+ maxSize: _arg_types.Integer | None = None,
3192
3199
  # pylint: enable=invalid-name
3193
3200
  ) -> Image:
3194
3201
  """Applies a reducer to all of the pixels inside of each 'object'.
@@ -3223,10 +3230,10 @@ class Image(element.Element):
3223
3230
  reducer: _arg_types.Reducer,
3224
3231
  kernel: _arg_types.Kernel,
3225
3232
  # pylint: disable=invalid-name
3226
- inputWeight: Optional[_arg_types.String] = None,
3227
- skipMasked: Optional[_arg_types.Bool] = None,
3233
+ inputWeight: _arg_types.String | None = None,
3234
+ skipMasked: _arg_types.Bool | None = None,
3228
3235
  # pylint: enable=invalid-name
3229
- optimization: Optional[_arg_types.String] = None,
3236
+ optimization: _arg_types.String | None = None,
3230
3237
  ) -> Image:
3231
3238
  """Returns an ee.Image with the reducer applied as determined by the kernel.
3232
3239
 
@@ -3268,14 +3275,14 @@ class Image(element.Element):
3268
3275
  def reduceRegion(
3269
3276
  self,
3270
3277
  reducer: _arg_types.Reducer,
3271
- geometry: Optional[_arg_types.Geometry] = None,
3272
- scale: Optional[_arg_types.Number] = None,
3273
- crs: Optional[_arg_types.Projection] = None,
3278
+ geometry: _arg_types.Geometry | None = None,
3279
+ scale: _arg_types.Number | None = None,
3280
+ crs: _arg_types.Projection | None = None,
3274
3281
  # pylint: disable=invalid-name
3275
- crsTransform: Optional[_arg_types.List] = None,
3276
- bestEffort: Optional[_arg_types.Bool] = None,
3277
- maxPixels: Optional[_arg_types.Integer] = None,
3278
- tileScale: Optional[_arg_types.Number] = None,
3282
+ crsTransform: _arg_types.List | None = None,
3283
+ bestEffort: _arg_types.Bool | None = None,
3284
+ maxPixels: _arg_types.Integer | None = None,
3285
+ tileScale: _arg_types.Number | None = None,
3279
3286
  # pylint: enable=invalid-name
3280
3287
  ) -> dictionary.Dictionary:
3281
3288
  """Apply a reducer to all the pixels in a specific region.
@@ -3324,12 +3331,12 @@ class Image(element.Element):
3324
3331
  self,
3325
3332
  collection: _arg_types.FeatureCollection,
3326
3333
  reducer: _arg_types.Reducer,
3327
- scale: Optional[_arg_types.Number] = None,
3328
- crs: Optional[_arg_types.Projection] = None,
3334
+ scale: _arg_types.Number | None = None,
3335
+ crs: _arg_types.Projection | None = None,
3329
3336
  # pylint: disable=invalid-name
3330
- crsTransform: Optional[_arg_types.List] = None,
3331
- tileScale: Optional[_arg_types.Number] = None,
3332
- maxPixelsPerRegion: Optional[_arg_types.Integer] = None,
3337
+ crsTransform: _arg_types.List | None = None,
3338
+ tileScale: _arg_types.Number | None = None,
3339
+ maxPixelsPerRegion: _arg_types.Integer | None = None,
3333
3340
  # pylint: enable=invalid-name
3334
3341
  ) -> featurecollection.FeatureCollection:
3335
3342
  """Apply a reducer over the area of each feature in the given collection.
@@ -3374,8 +3381,8 @@ class Image(element.Element):
3374
3381
  self,
3375
3382
  reducer: _arg_types.Reducer,
3376
3383
  # pylint: disable=invalid-name
3377
- bestEffort: Optional[_arg_types.Bool] = None,
3378
- maxPixels: Optional[_arg_types.Integer] = None,
3384
+ bestEffort: _arg_types.Bool | None = None,
3385
+ maxPixels: _arg_types.Integer | None = None,
3379
3386
  # pylint: enable=invalid-name
3380
3387
  ) -> Image:
3381
3388
  """Returns an ee.Image with the reducer applied to combine all input pixels.
@@ -3410,21 +3417,21 @@ class Image(element.Element):
3410
3417
 
3411
3418
  def reduceToVectors(
3412
3419
  self,
3413
- reducer: Optional[_arg_types.Reducer] = None,
3414
- geometry: Optional[_arg_types.Geometry] = None,
3415
- scale: Optional[_arg_types.Number] = None,
3420
+ reducer: _arg_types.Reducer | None = None,
3421
+ geometry: _arg_types.Geometry | None = None,
3422
+ scale: _arg_types.Number | None = None,
3416
3423
  # pylint: disable=invalid-name
3417
- geometryType: Optional[_arg_types.String] = None,
3418
- eightConnected: Optional[_arg_types.Bool] = None,
3419
- labelProperty: Optional[_arg_types.String] = None,
3424
+ geometryType: _arg_types.String | None = None,
3425
+ eightConnected: _arg_types.Bool | None = None,
3426
+ labelProperty: _arg_types.String | None = None,
3420
3427
  # pylint: enable=invalid-name
3421
- crs: Optional[_arg_types.Projection] = None,
3428
+ crs: _arg_types.Projection | None = None,
3422
3429
  # pylint: disable=invalid-name
3423
- crsTransform: Optional[_arg_types.List] = None,
3424
- bestEffort: Optional[_arg_types.Bool] = None,
3425
- maxPixels: Optional[_arg_types.Integer] = None,
3426
- tileScale: Optional[_arg_types.Number] = None,
3427
- geometryInNativeProjection: Optional[_arg_types.Bool] = None,
3430
+ crsTransform: _arg_types.List | None = None,
3431
+ bestEffort: _arg_types.Bool | None = None,
3432
+ maxPixels: _arg_types.Integer | None = None,
3433
+ tileScale: _arg_types.Number | None = None,
3434
+ geometryInNativeProjection: _arg_types.Bool | None = None,
3428
3435
  # pylint: enable=invalid-name
3429
3436
  ) -> featurecollection.FeatureCollection:
3430
3437
  """Convert an image to a feature collection by reducing homogeneous regions.
@@ -3492,7 +3499,7 @@ class Image(element.Element):
3492
3499
  regex: _arg_types.String,
3493
3500
  replacement: _arg_types.String,
3494
3501
  # pylint: disable-next=redefined-builtin
3495
- all: Optional[_arg_types.Bool] = None,
3502
+ all: _arg_types.Bool | None = None,
3496
3503
  ) -> Image:
3497
3504
  """Renames the bands of an image.
3498
3505
 
@@ -3520,9 +3527,9 @@ class Image(element.Element):
3520
3527
  # pylint: disable=invalid-name
3521
3528
  referenceImage: _arg_types.Image,
3522
3529
  maxOffset: _arg_types.Number,
3523
- patchWidth: Optional[_arg_types.Number] = None,
3530
+ patchWidth: _arg_types.Number | None = None,
3524
3531
  # pylint: enable=invalid-name
3525
- stiffness: Optional[_arg_types.Number] = None,
3532
+ stiffness: _arg_types.Number | None = None,
3526
3533
  ) -> Image:
3527
3534
  """Registers an image to a reference image.
3528
3535
 
@@ -3564,11 +3571,11 @@ class Image(element.Element):
3564
3571
 
3565
3572
  def remap(
3566
3573
  self,
3567
- from_: Optional[_arg_types.List] = None,
3568
- to: Optional[_arg_types.List] = None,
3574
+ from_: _arg_types.List | None = None,
3575
+ to: _arg_types.List | None = None,
3569
3576
  # pylint: disable=invalid-name
3570
- defaultValue: Optional[_arg_types.Any] = None,
3571
- bandName: Optional[_arg_types.String] = None,
3577
+ defaultValue: _arg_types.Any | None = None,
3578
+ bandName: _arg_types.String | None = None,
3572
3579
  # pylint: enable=invalid-name
3573
3580
  **kwargs,
3574
3581
  ) -> Image:
@@ -3636,8 +3643,8 @@ class Image(element.Element):
3636
3643
  self,
3637
3644
  crs: _arg_types.Projection,
3638
3645
  # pylint: disable-next=invalid-name
3639
- crsTransform: Optional[_arg_types.List] = None,
3640
- scale: Optional[_arg_types.Number] = None,
3646
+ crsTransform: _arg_types.List | None = None,
3647
+ scale: _arg_types.Number | None = None,
3641
3648
  ) -> Image:
3642
3649
  """Force an image to be computed in a given projection and resolution.
3643
3650
 
@@ -3660,7 +3667,7 @@ class Image(element.Element):
3660
3667
  self.name() + '.reproject', self, crs, crsTransform, scale
3661
3668
  )
3662
3669
 
3663
- def resample(self, mode: Optional[_arg_types.String] = None) -> Image:
3670
+ def resample(self, mode: _arg_types.String | None = None) -> Image:
3664
3671
  """Returns an image that uses bilinear or bicubic interpolation.
3665
3672
 
3666
3673
  An algorithm that returns an image identical to its argument, but which uses
@@ -3722,8 +3729,8 @@ class Image(element.Element):
3722
3729
 
3723
3730
  def rsedTransform(
3724
3731
  self,
3725
- neighborhood: Optional[_arg_types.Integer] = None,
3726
- units: Optional[_arg_types.String] = None,
3732
+ neighborhood: _arg_types.Integer | None = None,
3733
+ units: _arg_types.String | None = None,
3727
3734
  ) -> Image:
3728
3735
  """Calculated the Reverse Squared Euclidean Distance (RSED).
3729
3736
 
@@ -3748,16 +3755,16 @@ class Image(element.Element):
3748
3755
 
3749
3756
  def sample(
3750
3757
  self,
3751
- region: Optional[_arg_types.Geometry] = None,
3752
- scale: Optional[_arg_types.Number] = None,
3753
- projection: Optional[_arg_types.Projection] = None,
3754
- factor: Optional[_arg_types.Number] = None,
3758
+ region: _arg_types.Geometry | None = None,
3759
+ scale: _arg_types.Number | None = None,
3760
+ projection: _arg_types.Projection | None = None,
3761
+ factor: _arg_types.Number | None = None,
3755
3762
  # pylint: disable=invalid-name
3756
- numPixels: Optional[_arg_types.Integer] = None,
3757
- seed: Optional[_arg_types.Integer] = None,
3758
- dropNulls: Optional[_arg_types.Bool] = None,
3759
- tileScale: Optional[_arg_types.Number] = None,
3760
- geometries: Optional[_arg_types.Bool] = None,
3763
+ numPixels: _arg_types.Integer | None = None,
3764
+ seed: _arg_types.Integer | None = None,
3765
+ dropNulls: _arg_types.Bool | None = None,
3766
+ tileScale: _arg_types.Number | None = None,
3767
+ geometries: _arg_types.Bool | None = None,
3761
3768
  # pylint: enable=invalid-name
3762
3769
  ) -> featurecollection.FeatureCollection:
3763
3770
  """Returns an ee.FeatureCollection of samples from an ee.Image.
@@ -3805,11 +3812,11 @@ class Image(element.Element):
3805
3812
 
3806
3813
  def sampleRectangle(
3807
3814
  self,
3808
- region: Optional[_arg_types.Any] = None,
3809
- properties: Optional[_arg_types.List] = None,
3815
+ region: _arg_types.Any | None = None,
3816
+ properties: _arg_types.List | None = None,
3810
3817
  # pylint: disable=invalid-name
3811
- defaultValue: Optional[_arg_types.Number] = None,
3812
- defaultArrayValue: Optional[_arg_types.Array] = None,
3818
+ defaultValue: _arg_types.Number | None = None,
3819
+ defaultArrayValue: _arg_types.Array | None = None,
3813
3820
  # pylint: enable=invalid-name
3814
3821
  ) -> feature.Feature:
3815
3822
  """Returns pixels from an image into a ND array per band.
@@ -3847,12 +3854,12 @@ class Image(element.Element):
3847
3854
  def sampleRegions(
3848
3855
  self,
3849
3856
  collection: _arg_types.FeatureCollection,
3850
- properties: Optional[_arg_types.List] = None,
3851
- scale: Optional[_arg_types.Number] = None,
3852
- projection: Optional[_arg_types.Projection] = None,
3857
+ properties: _arg_types.List | None = None,
3858
+ scale: _arg_types.Number | None = None,
3859
+ projection: _arg_types.Projection | None = None,
3853
3860
  # pylint: disable-next=invalid-name
3854
- tileScale: Optional[_arg_types.Number] = None,
3855
- geometries: Optional[_arg_types.Bool] = None,
3861
+ tileScale: _arg_types.Number | None = None,
3862
+ geometries: _arg_types.Bool | None = None,
3856
3863
  ) -> featurecollection.FeatureCollection:
3857
3864
  """Returns an ee.FeatureCollection of samples from an ee.Image.
3858
3865
 
@@ -3895,8 +3902,8 @@ class Image(element.Element):
3895
3902
  # pylint: disable-next=keyword-arg-before-vararg
3896
3903
  def select(
3897
3904
  self,
3898
- selectors: Optional[_arg_types.List] = None,
3899
- names: Optional[_arg_types.List] = None,
3905
+ selectors: _arg_types.List | None = None,
3906
+ names: _arg_types.List | None = None,
3900
3907
  *args,
3901
3908
  ) -> Image:
3902
3909
  """Selects bands from an image.
@@ -3973,8 +3980,8 @@ class Image(element.Element):
3973
3980
  self,
3974
3981
  crs: _arg_types.Projection,
3975
3982
  # pylint: disable-next=invalid-name
3976
- crsTransform: Optional[_arg_types.List] = None,
3977
- scale: Optional[_arg_types.Number] = None,
3983
+ crsTransform: _arg_types.List | None = None,
3984
+ scale: _arg_types.Number | None = None,
3978
3985
  ) -> Image:
3979
3986
  """Set a default projection to be applied to this image.
3980
3987
 
@@ -4063,7 +4070,7 @@ class Image(element.Element):
4063
4070
  )
4064
4071
 
4065
4072
  def slice(
4066
- self, start: _arg_types.Integer, end: Optional[_arg_types.Integer] = None
4073
+ self, start: _arg_types.Integer, end: _arg_types.Integer | None = None
4067
4074
  ) -> Image:
4068
4075
  """Selects a contiguous group of bands from an image by position.
4069
4076
 
@@ -4083,10 +4090,10 @@ class Image(element.Element):
4083
4090
 
4084
4091
  def spectralDilation(
4085
4092
  self,
4086
- metric: Optional[_arg_types.String] = None,
4087
- kernel: Optional[_arg_types.Kernel] = None,
4093
+ metric: _arg_types.String | None = None,
4094
+ kernel: _arg_types.Kernel | None = None,
4088
4095
  # pylint: disable-next=invalid-name
4089
- useCentroid: Optional[_arg_types.Bool] = None,
4096
+ useCentroid: _arg_types.Bool | None = None,
4090
4097
  ) -> Image:
4091
4098
  """Returns the spectral/spatial dilation of an image.
4092
4099
 
@@ -4113,7 +4120,7 @@ class Image(element.Element):
4113
4120
  )
4114
4121
 
4115
4122
  def spectralDistance(
4116
- self, image2: _arg_types.Image, metric: Optional[_arg_types.String] = None
4123
+ self, image2: _arg_types.Image, metric: _arg_types.String | None = None
4117
4124
  ) -> Image:
4118
4125
  """Computes the per-pixel spectral distance between two images.
4119
4126
 
@@ -4138,10 +4145,10 @@ class Image(element.Element):
4138
4145
 
4139
4146
  def spectralErosion(
4140
4147
  self,
4141
- metric: Optional[_arg_types.String] = None,
4142
- kernel: Optional[_arg_types.Kernel] = None,
4148
+ metric: _arg_types.String | None = None,
4149
+ kernel: _arg_types.Kernel | None = None,
4143
4150
  # pylint: disable-next=invalid-name
4144
- useCentroid: Optional[_arg_types.Bool] = None,
4151
+ useCentroid: _arg_types.Bool | None = None,
4145
4152
  ) -> Image:
4146
4153
  """Returns the spectral/spatial erosion of an image.
4147
4154
 
@@ -4169,10 +4176,10 @@ class Image(element.Element):
4169
4176
 
4170
4177
  def spectralGradient(
4171
4178
  self,
4172
- metric: Optional[_arg_types.String] = None,
4173
- kernel: Optional[_arg_types.Kernel] = None,
4179
+ metric: _arg_types.String | None = None,
4180
+ kernel: _arg_types.Kernel | None = None,
4174
4181
  # pylint: disable-next=invalid-name
4175
- useCentroid: Optional[_arg_types.Bool] = None,
4182
+ useCentroid: _arg_types.Bool | None = None,
4176
4183
  ) -> Image:
4177
4184
  """Returns the spectral gradient of an image.
4178
4185
 
@@ -4206,19 +4213,19 @@ class Image(element.Element):
4206
4213
  self,
4207
4214
  # pylint: disable=invalid-name
4208
4215
  numPoints: _arg_types.Integer,
4209
- classBand: Optional[_arg_types.String] = None,
4216
+ classBand: _arg_types.String | None = None,
4210
4217
  # pylint: enable=invalid-name
4211
- region: Optional[_arg_types.Geometry] = None,
4212
- scale: Optional[_arg_types.Number] = None,
4213
- projection: Optional[_arg_types.Projection] = None,
4214
- seed: Optional[_arg_types.Integer] = None,
4218
+ region: _arg_types.Geometry | None = None,
4219
+ scale: _arg_types.Number | None = None,
4220
+ projection: _arg_types.Projection | None = None,
4221
+ seed: _arg_types.Integer | None = None,
4215
4222
  # pylint: disable=invalid-name
4216
- classValues: Optional[_arg_types.List] = None,
4217
- classPoints: Optional[_arg_types.List] = None,
4218
- dropNulls: Optional[_arg_types.Bool] = None,
4219
- tileScale: Optional[_arg_types.Number] = None,
4223
+ classValues: _arg_types.List | None = None,
4224
+ classPoints: _arg_types.List | None = None,
4225
+ dropNulls: _arg_types.Bool | None = None,
4226
+ tileScale: _arg_types.Number | None = None,
4220
4227
  # pylint: enable=invalid-name
4221
- geometries: Optional[_arg_types.Bool] = None,
4228
+ geometries: _arg_types.Bool | None = None,
4222
4229
  ) -> featurecollection.FeatureCollection:
4223
4230
  """Extracts a stratified random sample of points from an image.
4224
4231
 
@@ -4305,7 +4312,7 @@ class Image(element.Element):
4305
4312
 
4306
4313
  return apifunction.ApiFunction.call_(self.name() + '.tanh', self)
4307
4314
 
4308
- def toArray(self, axis: Optional[_arg_types.Integer] = None) -> Image:
4315
+ def toArray(self, axis: _arg_types.Integer | None = None) -> Image:
4309
4316
  """Concatenates pixels from each band into a single array per pixel.
4310
4317
 
4311
4318
  The result will be masked if any input bands are masked.
@@ -4390,8 +4397,8 @@ class Image(element.Element):
4390
4397
  self,
4391
4398
  x: _arg_types.Number,
4392
4399
  y: _arg_types.Number,
4393
- units: Optional[_arg_types.String] = None,
4394
- proj: Optional[_arg_types.Projection] = None,
4400
+ units: _arg_types.String | None = None,
4401
+ proj: _arg_types.Projection | None = None,
4395
4402
  ) -> Image:
4396
4403
  """Translate the input image.
4397
4404
 
@@ -4451,9 +4458,9 @@ class Image(element.Element):
4451
4458
 
4452
4459
  def unmask(
4453
4460
  self,
4454
- value: Optional[_arg_types.Image] = None,
4461
+ value: _arg_types.Image | None = None,
4455
4462
  # pylint: disable-next=invalid-name
4456
- sameFootprint: Optional[_arg_types.Bool] = None,
4463
+ sameFootprint: _arg_types.Bool | None = None,
4457
4464
  ) -> Image:
4458
4465
  """Returns an ee.Image with mask and value of the value image.
4459
4466
 
@@ -4482,8 +4489,8 @@ class Image(element.Element):
4482
4489
  self,
4483
4490
  endmembers: _arg_types.List,
4484
4491
  # pylint: disable=invalid-name
4485
- sumToOne: Optional[_arg_types.Bool] = None,
4486
- nonNegative: Optional[_arg_types.Bool] = None,
4492
+ sumToOne: _arg_types.Bool | None = None,
4493
+ nonNegative: _arg_types.Bool | None = None,
4487
4494
  # pylint: enable=invalid-name
4488
4495
  ) -> Image:
4489
4496
  """Returns an ee.Image with endmembers unmixing each pixel.
@@ -4528,16 +4535,16 @@ class Image(element.Element):
4528
4535
 
4529
4536
  def visualize(
4530
4537
  self,
4531
- bands: Optional[_arg_types.Any] = None,
4532
- gain: Optional[_arg_types.Any] = None,
4533
- bias: Optional[_arg_types.Any] = None,
4534
- min: Optional[_arg_types.Any] = None, # pylint: disable=redefined-builtin
4535
- max: Optional[_arg_types.Any] = None, # pylint: disable=redefined-builtin
4536
- gamma: Optional[_arg_types.Any] = None,
4537
- opacity: Optional[_arg_types.Number] = None,
4538
- palette: Optional[_arg_types.Any] = None,
4538
+ bands: _arg_types.Any | None = None,
4539
+ gain: _arg_types.Any | None = None,
4540
+ bias: _arg_types.Any | None = None,
4541
+ min: _arg_types.Any | None = None, # pylint: disable=redefined-builtin
4542
+ max: _arg_types.Any | None = None, # pylint: disable=redefined-builtin
4543
+ gamma: _arg_types.Any | None = None,
4544
+ opacity: _arg_types.Number | None = None,
4545
+ palette: _arg_types.Any | None = None,
4539
4546
  # pylint: disable-next=invalid-name
4540
- forceRgbOutput: Optional[_arg_types.Bool] = None,
4547
+ forceRgbOutput: _arg_types.Bool | None = None,
4541
4548
  ) -> Image:
4542
4549
  """Produces an RGB or grayscale visualization of an image.
4543
4550