sarapy 1.1.2__py3-none-any.whl → 1.1.4__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.
@@ -39,8 +39,6 @@ class GeoProcessor(BaseEstimator, TransformerMixin):
39
39
  assert isinstance(X, np.ndarray), "X debe ser un np.array"
40
40
  ##asserteamos que X tenga dos columnas
41
41
  assert X.ndim == 2, "X debe ser de la forma (n, 2)"
42
- # ##asserteamos que X no tenga valores nulos
43
- # assert not np.isnan(X).any(), "X no debe tener valores nulos"
44
42
  ##chequeamos que X tenga una sola fila, si es así, enviamos un warning
45
43
  if X.shape[0] == 1:
46
44
  warnings.warn("En GeoProcesor.fit(): X tiene una sola fila, por lo tanto no se puede computar la distancia entre los puntos.\
@@ -79,8 +77,41 @@ class GeoProcessor(BaseEstimator, TransformerMixin):
79
77
  Returns:
80
78
  np.array: np.array con las distancias entre los dos puntos
81
79
  """
80
+ X = self.sanityCheck(X)
82
81
  self.fit(X)
83
82
  return self.transform(self.points)
83
+
84
+ def sanityCheck(self, X):
85
+ """Chequea que los datos de latitud y lingitud estén en rangos válidos.
86
+
87
+ - Latitud: -90 a 90
88
+ - Longitud: -180 a 180
89
+
90
+ - X: array con los puntos de latitud y longitud. Shape (n, 2)
91
+ """
92
+ ##calculo los valores medios de latitud y longitud sin contar los valores de latitud fuera de rango (-90, 90)
93
+ ##y los valores de longitud fuera de rango (-180, 180)
94
+
95
+ mask_lat = (X[:, 0] >= -90) & (X[:, 0] <= 90)
96
+ mask_lon = (X[:, 1] >= -180) & (X[:, 1] <= 180)
97
+
98
+ X_temp = X[mask_lat & mask_lon]
99
+ self.media_lat = np.mean(X_temp[:, 0])
100
+ self.media_lon = np.mean(X_temp[:, 1])
101
+
102
+ ##mensaje de warning si hay valores de latitud fuera de rango
103
+ if not mask_lat.all():
104
+ warnings.warn("Hay valores de latitud fuera de rango. Se reemplazarán por el valor medio de latitud.")
105
+
106
+ ##mensaje de warning si hay valores de longitud fuera de rango
107
+ if not mask_lon.all():
108
+ warnings.warn("Hay valores de longitud fuera de rango. Se reemplazarán por el valor medio de longitud.")
109
+
110
+ ##reemplazo los valores de latitud y longitud fuera de rango por los valores medios
111
+ X[~mask_lat, 0] = self.media_lat
112
+ X[~mask_lon, 1] = self.media_lon
113
+
114
+ return X
84
115
 
85
116
  @property
86
117
  def points(self):
@@ -1,7 +1,4 @@
1
1
  ###Documentación en https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md
2
- import warnings
3
- import datetime
4
- from dateutil.tz import tzutc
5
2
  import numpy as np
6
3
  import pandas as pd
7
4
  from sarapy.mlProcessors import PlantinFMCreator
@@ -193,6 +190,9 @@ class OpsProcessor():
193
190
  ##chequeo si first_day_op_classified es True, si es así, no se considera la primera fila de las classified_ops
194
191
  if self.operationsDict[ID_NPDP]["first_day_op_classified"]:
195
192
  classified_ops = classified_ops[1:]
193
+
194
+ ##actualizo las operaciones que hayan sido hardcodeadas luego de despertar y/o reiniciar la electrónica
195
+ classified_ops = self.updateBedoreAwake(classified_ops)
196
196
 
197
197
  # plantinClassifications = np.vstack((plantinClassifications, classified_ops)) if plantinClassifications is not None else classified_ops
198
198
  plantinClassifications = np.concatenate((plantinClassifications, classified_ops)) if plantinClassifications is not None else classified_ops
@@ -282,12 +282,31 @@ class OpsProcessor():
282
282
 
283
283
  for ID_NPDP in self.operationsDict.keys():
284
284
  self._operationsDict[ID_NPDP]["sample_ops"] = None
285
+
286
+ def updateBedoreAwake(self, classified_ops):
287
+ """
288
+ Función para actualizar las operaciones que hayan sido hardcodeadas luego de despertar y/o reiniciar la electrónica.
289
+
290
+ Se chequea la bandera MODE de los datos de telemetría entregados por la electrónica.
291
+
292
+ Args:
293
+ - classified_ops: np.array con las operaciones clasificadas.
294
+
295
+ Returns:
296
+ - classified_ops: np.array con las operaciones clasificadas.
297
+ """
298
+
299
+ ##me quedo con los índices donde MODEFlag es igual a 1
300
+ mask = self.plantinFMCreator.tlmExtracted[:,self.plantinFMCreator.tlmdeDP["MODEFlag"]]==1
301
+ classified_ops[mask] = 0 ##hardcodeo las operaciones que hayan sido clasificadas como 1
302
+ print(sum(mask))
303
+ return classified_ops
285
304
 
286
305
  @property
287
306
  def operationsDict(self):
288
307
  return self._operationsDict
289
308
 
290
-
309
+
291
310
  if __name__ == "__main__":
292
311
  #cargo archivo examples\volcado_17112023_NODE_processed.csv
293
312
  import pandas as pd
@@ -296,8 +315,8 @@ if __name__ == "__main__":
296
315
  import sarapy.utils.getRawOperations as getRawOperations
297
316
  from sarapy.dataProcessing import OpsProcessor
298
317
 
299
- data_path = os.path.join(os.getcwd(), "examples\\2024-09-04\\UPM012N\\data.json")
300
- historical_data_path = os.path.join(os.getcwd(), "examples\\2024-09-04\\UPM012N\\historical-data.json")
318
+ data_path = os.path.join(os.getcwd(), "examples\\2024-09-16\\UPM001N\\data.json")
319
+ historical_data_path = os.path.join(os.getcwd(), "examples\\2024-09-16\\UPM001N\\historical-data.json")
301
320
 
302
321
  raw_data = pd.read_json(data_path, orient="records").to_dict(orient="records")
303
322
  raw_data2 = pd.read_json(historical_data_path, orient="records").to_dict(orient="records")
@@ -315,4 +334,5 @@ if __name__ == "__main__":
315
334
  ##
316
335
  df = pd.DataFrame(classifications)
317
336
  tag_seedling = df["tag_seedling"].values
318
- print(tag_seedling.mean())
337
+ print(tag_seedling.mean())
338
+ print(df["tag_seedling"].shape)
@@ -1,6 +1,4 @@
1
1
  ###Documentación en https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md
2
-
3
- import warnings
4
2
  import numpy as np
5
3
  from sklearn.base import BaseEstimator, TransformerMixin
6
4
  from sarapy.dataProcessing import TLMSensorDataProcessor, TimeSeriesProcessor, GeoProcessor
@@ -138,6 +136,11 @@ class PlantinFMCreator(BaseEstimator, TransformerMixin):
138
136
  """Devuelve los datos de telemetría extraídos."""
139
137
  return self._tlmExtracted
140
138
 
139
+ @property
140
+ def tlmdeDP(self):
141
+ """Devuelve el diccionario con la posición de los datos dentro del array devuelto por transform()."""
142
+ return self._tlmdeDP
143
+
141
144
  @property
142
145
  def timeDeltas(self):
143
146
  """Devuelve los datos de tiempo extraídos."""
sarapy/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  ## Version of the package
2
- __version__ = "1.1.2"
2
+ __version__ = "1.1.4"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sarapy
3
- Version: 1.1.2
3
+ Version: 1.1.4
4
4
  Home-page: https://github.com/lucasbaldezzari/sarapy
5
5
  Author: Lucas Baldezzari
6
6
  Author-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
@@ -19,6 +19,14 @@ Requires-Dist: geopy
19
19
 
20
20
  Library for processing SARAPICO project metadata of _AMG_.
21
21
 
22
+ #### Version 1.1.4
23
+
24
+ - Se implementa actualización de operaciones con bandera MODE en 1. Se hacen operaciones de plantin iguales a 0 para todas las operaciones con MODE = 1.
25
+
26
+ #### Version 1.1.3
27
+
28
+ - Se modifica GeoProcessor para no tener problemas con valores de latitud y longitud fuera de rangos.
29
+
22
30
  #### Version 1.1.2
23
31
 
24
32
  - Se modifica TimeSeriesProcessor.transform() para poder usar la modificación realizada en 1.1.1.
@@ -1,13 +1,13 @@
1
1
  sarapy/__init__.py,sha256=aVoywqGSscYYDycLaYJnz08dlQabl9gH0h4Q5KtHM9o,74
2
- sarapy/version.py,sha256=Ur_iCasKb8j3z51F97g4OQ4tOREikQGZey86JuvMpZE,51
3
- sarapy/dataProcessing/GeoProcessor.py,sha256=YeNFHZ5sArnSLDxz009SJzgdWuMPgvJPkqtwcivk87A,4654
4
- sarapy/dataProcessing/OpsProcessor.py,sha256=-mxZPA7V6r7xkkQBICmNBiT7FJGVs3C3D-DaPN34yHE,16433
2
+ sarapy/version.py,sha256=QbjLpixMK_eic3s_oNMRcPkwEz-PTNlNRF8-rLO3YK4,51
3
+ sarapy/dataProcessing/GeoProcessor.py,sha256=ARjgKTXDVdf_cFCXyFmzlnmmmay3HG3q-yeJ9QrAcQU,5919
4
+ sarapy/dataProcessing/OpsProcessor.py,sha256=xJy-DSYJ7jhTNxOxg5icafFvhx6cKVTMDguGOOKwL7s,17391
5
5
  sarapy/dataProcessing/TLMSensorDataProcessor.py,sha256=GfSIRYD_biFlOMTfSQSwW0HsUouZuUL3ScvL4uUHTPQ,23824
6
6
  sarapy/dataProcessing/TimeSeriesProcessor.py,sha256=-uic18Sut9yMCenbLO1-VabmKifKABt_FbCCP_fLcmE,5403
7
7
  sarapy/dataProcessing/__init__.py,sha256=Kqs5sFtq6RMEa3KLJFbsGRoYsIxHL1UUGMuplyCyQFk,200
8
8
  sarapy/dataProcessing/amg_decoder.py,sha256=JZ7cbu7DlCuatuq2F7aBfUr7S7U-K5poBgxw5nY6rNI,4319
9
9
  sarapy/mlProcessors/PlantinClassifier.py,sha256=ahoDIgxfKiq0sMm4dR1M4rLO-J6SxDMrASjlmswj3QI,6781
10
- sarapy/mlProcessors/PlantinFMCreator.py,sha256=Le3Itc2xpRvajs0ws3zd5ZkO_bSpKXy3xiWiRrulXI4,8404
10
+ sarapy/mlProcessors/PlantinFMCreator.py,sha256=FeEz0MiorkMPodPgN9FtBDJ22WVLoLwK4g-CFI46DAk,8568
11
11
  sarapy/mlProcessors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  sarapy/preprocessing/DistancesImputer.py,sha256=NvbVAh5m0yFxVgDbEFnEX7RSG13qLjO7i2gqjDAWsf4,9106
13
13
  sarapy/preprocessing/FertilizerImputer.py,sha256=zK6ONAilwPHvj-bC7yxnQYOkDBCCkWh6__57vYK9anM,1490
@@ -18,8 +18,8 @@ sarapy/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  sarapy/utils/amg_decoder.py,sha256=JZ7cbu7DlCuatuq2F7aBfUr7S7U-K5poBgxw5nY6rNI,4319
19
19
  sarapy/utils/amg_ppk.py,sha256=c0GusnxdntU-E0JOezzbIfC7SWoJmKAbad_zYDCJ3-c,1060
20
20
  sarapy/utils/getRawOperations.py,sha256=8aA1fIkNCnUYgiWfnFggRT_U35z432gZBrZ7seGO5w4,817
21
- sarapy-1.1.2.dist-info/LICENCE,sha256=N00sU3vSQ6F5c2vML9_qP4IFTkCPFFj0YGDB2CZP-uQ,840
22
- sarapy-1.1.2.dist-info/METADATA,sha256=E8vtdrokqR3ctTNnHLq91g7SLwHSYR-SU6NuQPlgdK0,2863
23
- sarapy-1.1.2.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
24
- sarapy-1.1.2.dist-info/top_level.txt,sha256=4mUGZXfX2Fw47fpY6MQkaJeuOs_8tbjLkkNp34DJWiA,7
25
- sarapy-1.1.2.dist-info/RECORD,,
21
+ sarapy-1.1.4.dist-info/LICENCE,sha256=N00sU3vSQ6F5c2vML9_qP4IFTkCPFFj0YGDB2CZP-uQ,840
22
+ sarapy-1.1.4.dist-info/METADATA,sha256=PFyMYDzc7nyDi_u5oNc4ZGiW1aiE7ZvwjgJGEY38oBg,3169
23
+ sarapy-1.1.4.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
24
+ sarapy-1.1.4.dist-info/top_level.txt,sha256=4mUGZXfX2Fw47fpY6MQkaJeuOs_8tbjLkkNp34DJWiA,7
25
+ sarapy-1.1.4.dist-info/RECORD,,
File without changes