sarapy 2.0.0__tar.gz → 2.1.1__tar.gz

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.
Files changed (35) hide show
  1. {sarapy-2.0.0/sarapy.egg-info → sarapy-2.1.1}/PKG-INFO +9 -1
  2. {sarapy-2.0.0 → sarapy-2.1.1}/README.md +8 -0
  3. {sarapy-2.0.0 → sarapy-2.1.1}/pyproject.toml +1 -1
  4. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/dataProcessing/OpsProcessor.py +16 -9
  5. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/preprocessing/TransformInputData.py +11 -2
  6. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/preprocessing/TransformToOutputData.py +16 -20
  7. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/version.py +1 -1
  8. {sarapy-2.0.0 → sarapy-2.1.1/sarapy.egg-info}/PKG-INFO +9 -1
  9. {sarapy-2.0.0 → sarapy-2.1.1}/LICENCE +0 -0
  10. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/__init__.py +0 -0
  11. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/dataProcessing/GeoProcessor.py +0 -0
  12. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/dataProcessing/TLMSensorDataProcessor.py +0 -0
  13. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/dataProcessing/TimeSeriesProcessor.py +0 -0
  14. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/dataProcessing/__init__.py +0 -0
  15. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/mlProcessors/FertilizerFMCreator.py +0 -0
  16. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/mlProcessors/FertilizerTransformer.py +0 -0
  17. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/mlProcessors/PlantinClassifier.py +0 -0
  18. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/mlProcessors/PlantinFMCreator.py +0 -0
  19. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/mlProcessors/__init__.py +0 -0
  20. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/preprocessing/DistancesImputer.py +0 -0
  21. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/preprocessing/FertilizerImputer.py +0 -0
  22. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/preprocessing/__init__.py +0 -0
  23. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/stats/__init__.py +0 -0
  24. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/stats/stats.py +0 -0
  25. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/utils/__init__.py +0 -0
  26. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/utils/amg_decoder.py +0 -0
  27. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/utils/amg_ppk.py +0 -0
  28. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/utils/getRawOperations.py +0 -0
  29. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy/utils/plotting.py +0 -0
  30. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy.egg-info/SOURCES.txt +0 -0
  31. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy.egg-info/dependency_links.txt +0 -0
  32. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy.egg-info/requires.txt +0 -0
  33. {sarapy-2.0.0 → sarapy-2.1.1}/sarapy.egg-info/top_level.txt +0 -0
  34. {sarapy-2.0.0 → sarapy-2.1.1}/setup.cfg +0 -0
  35. {sarapy-2.0.0 → sarapy-2.1.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sarapy
3
- Version: 2.0.0
3
+ Version: 2.1.1
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 SA_.
21
21
 
22
+ #### Version 2.1.1
23
+
24
+ - Se corrige error de tiepo en TransformToOutputData.
25
+
26
+ #### Version 2.1.0
27
+
28
+ - Se modifica TransformInputdata para poder obtener el timestamp en newSample de OpsProcessor. Se modifica transformOutputData para entregar los datos en base a la solicitud de #43. Se modifica OpsProcessor para poder obtener los datos de salida según solicitud en #43. Close #43.
29
+
22
30
  #### Version 2.0.0
23
31
 
24
32
  - Se realizan cambios en TransformInputData para que convierta los datos de telemetría a la forma de lista de diccionarios, como un JSON, para que sea más fácil de usar y entender. Además, a futuro, se espera que los datos de la electrónica se puedan enviar en este formato.
@@ -2,6 +2,14 @@
2
2
 
3
3
  Library for processing SARAPICO project metadata of _AMG SA_.
4
4
 
5
+ #### Version 2.1.1
6
+
7
+ - Se corrige error de tiepo en TransformToOutputData.
8
+
9
+ #### Version 2.1.0
10
+
11
+ - Se modifica TransformInputdata para poder obtener el timestamp en newSample de OpsProcessor. Se modifica transformOutputData para entregar los datos en base a la solicitud de #43. Se modifica OpsProcessor para poder obtener los datos de salida según solicitud en #43. Close #43.
12
+
5
13
  #### Version 2.0.0
6
14
 
7
15
  - Se realizan cambios en TransformInputData para que convierta los datos de telemetría a la forma de lista de diccionarios, como un JSON, para que sea más fácil de usar y entender. Además, a futuro, se espera que los datos de la electrónica se puedan enviar en este formato.
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "sarapy"
3
3
 
4
- version = "2.0.0"
4
+ version = "2.1.1"
5
5
  authors = [
6
6
  {name = "Lucas Baldezzari", email = "lmbaldezzari@gmail.com"},]
7
7
  maintainers = [
@@ -72,18 +72,26 @@ class OpsProcessor():
72
72
  Se toma una nueva muestra y se procesa la información para clasificar las operaciones considerando el
73
73
  plantín y por otro lado el fertilizante.
74
74
  Se retorna un array con las clasificaciones concatenadas, manteniendo el orden de las operaciones por operario.
75
-
75
+
76
76
  Args:
77
- ¡¡¡¡¡¡¡DOCUMENTAR!!!!!!!!!!!!!!!
77
+ - data: Lista de diccionario. Cada diccionario tiene la forma.
78
+ Ejemplo (NOTA: El salto de línea es agregado para mejorar la legibilidad):
79
+ [
80
+ {"id": 6, "receiver_timestamp": "2025-06-21T15:51:36.527825+00:00", "timestamp": "2025-06-21T15:51:01.000002+00:00", "datum": null,
81
+ "csv_datum": "2025-06-21T15:51:01.000002+00:00,2,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-58.0321,-33.2471,
82
+ 1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,0,3,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0.0000,0.0000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
83
+ "longitude": null, "latitude": null, "accuracy": null, "tag_seedling": null, "tag_fertilizer": null}
84
+ ]
78
85
 
79
86
  Returns:
80
87
  Lista de diccionarios con las clasificaciones. Cada diccionario tiene la forma
81
- {"id_db_h": 10, "id_db_dw": 10, "tag_seedling": 1, "tag_fertilizer": gramos (float)}
88
+ [{"timestamp": "2025-05-27T21:42:38.000002+00:00", "tag_seedling": 1, "tag_fertilizer": gramos (float)},...]
82
89
  """
83
90
 
84
91
  ##chqueo que newSample no esté vacío
85
92
  if len(data) != 0:
86
93
  newSample = self.transformInputData.transform(data)
94
+
87
95
  #Si tenemos nuevas operaciones, actualizamos el diccionario de operaciones
88
96
  self.updateOperationsDict(newSample) #actualizamos diccionario interno de la clase
89
97
  pl_clas = self.classifyForPlantin(**kwargs) #clasificamos las operaciones para plantín
@@ -94,9 +102,9 @@ class OpsProcessor():
94
102
  id_db_h_nums, id_db_dw_nums = self.getActualOperationsNumbers() #obtenemos los números de operaciones desde el diccionario de operaciones
95
103
  logging.debug(f"ID_DB_H shape: {id_db_h_nums.shape}, ID_DB_DW shape: {id_db_dw_nums.shape}")
96
104
  date_oprc = pd.DataFrame(newSample)["date_oprc"].values.reshape(-1, 1) ##extraigo las fechas de operación de la muestra
97
-
98
- return self.transformToOutputData.fit_transform(np.column_stack((id_db_h_nums,
99
- id_db_dw_nums,
105
+ timestamps = pd.DataFrame(newSample)["timestamp"].values.reshape(-1, 1) ##extraigo los timestamps de la muestra
106
+
107
+ return self.transformToOutputData.fit_transform(np.column_stack((timestamps,
100
108
  pl_clas,
101
109
  ft_grams)))
102
110
  else:
@@ -301,11 +309,10 @@ if __name__ == "__main__":
301
309
  with open(historical_data_path, 'r') as file:
302
310
  samples = json.load(file)
303
311
 
304
- samples1 = samples[:100]
305
- samples2 = samples[100:200]
312
+ samples1 = samples
306
313
 
307
314
  op = OpsProcessor(classifier_file='modelos\\pipeline_rf.pkl', imputeDistances = False,
308
315
  regresor_file='modelos\\regresor.pkl', poly_features_file='modelos\\poly_features.pkl')
309
316
 
310
- op.processOperations(samples[:2])
317
+ print(op.processOperations(samples[:20]))
311
318
  # op.processOperations(samples2)
@@ -32,6 +32,7 @@ class TransformInputData(BaseEstimator, TransformerMixin):
32
32
  "VUX1": 81, "VUX2": 82, "VUX3": 83, "VUX4": 84, "VUX5": 85, "VUX6": 86, "VUX7": 87, "VUX8": 88,
33
33
  "VUX9": 89, "VUX10": 90}
34
34
  self.dataFloat = ["latitud","longitud","Longitud_N","Latitud_N","Longitud_G","Latitud_G","date_oprc","Date_oprc"]
35
+ self.dataString = ["timestamp"]
35
36
 
36
37
  def transform(self, X):
37
38
  """
@@ -65,11 +66,13 @@ class TransformInputData(BaseEstimator, TransformerMixin):
65
66
  self.data_transformed = []
66
67
  dict_structre = {"id_db_h":None, "id_db_dw":None, "ID_NPDP":None,
67
68
  "date_oprc":None, "latitud":None, "longitud":None,
68
- "precision":None, "FR":None}
69
+ "precision":None, "FR":None, "timestamp": None}
70
+
69
71
  ##agrego los keys que están en dataPositions con valores None
70
72
  for key in self.data_positions.keys():
71
73
  dict_structre[key] = None
72
74
 
75
+
73
76
  for row in X:
74
77
  # Crear un diccionario para almacenar los datos transformados
75
78
  data_dict = dict_structre.copy()
@@ -103,6 +106,7 @@ class TransformInputData(BaseEstimator, TransformerMixin):
103
106
  data_dict["Date_oprc"] = data_dict.get("date_oprc", None)
104
107
  data_dict["latitud"] = data_dict.get("Latitud_N", None)
105
108
  data_dict["longitud"] = data_dict.get("Longitud_N", None)
109
+ data_dict["timestamp"] = row.get("timestamp", None)
106
110
  # data_dict["FR"] = row.get("tag_fertilizer", None)
107
111
 
108
112
  # Agregar el diccionario transformado a la lista
@@ -116,6 +120,11 @@ class TransformInputData(BaseEstimator, TransformerMixin):
116
120
  data[key] = float(value) if value else None
117
121
  except ValueError:
118
122
  data[key] = None
123
+ elif key in self.dataString:
124
+ try:
125
+ data[key] = str(value) if value else None
126
+ except ValueError:
127
+ data[key] = None
119
128
  else:
120
129
  try:
121
130
  data[key] = int(value) if value else None
@@ -137,4 +146,4 @@ if __name__ == "__main__":
137
146
  data_positions = json.load(open("sarapy/preprocessing/telemetriaDataPosition.json", 'r'))
138
147
  transform_input_data = TransformInputData()
139
148
  transformed_data = transform_input_data.transform(historical_data)
140
- transformed_data[-1]
149
+ print(transformed_data[-1])
@@ -10,10 +10,9 @@ class TransformToOutputData(BaseEstimator, TransformerMixin):
10
10
  - dataToTransform: array con los datos de las operaciones clasificadas.
11
11
  Actualmente el array de dataToTransform es de (n,5) con las columnas siguientes
12
12
 
13
- - 0: id_db_h
14
- - 1: id_db_dw
15
- - 2: tag_seedling
16
- - 3: tag_fertilizer
13
+ - 0: timestamp
14
+ - 1: tag_seedling
15
+ - 2: tag_fertilizer
17
16
  Returns:
18
17
  Retorna una lista de diccionarios con la siguiente estructura
19
18
  """
@@ -33,17 +32,16 @@ class TransformToOutputData(BaseEstimator, TransformerMixin):
33
32
  - X: array con los datos de las operaciones clasificadas.
34
33
  Actualmente el array de dataToTransform es de (n,5) con las columnas siguientes
35
34
 
36
- - 0: id_db_h
37
- - 1: id_db_dw
38
- - 2: tag_seedling
39
- - 3: tag_fertilizer
35
+ - 0: timestamp
36
+ - 1: tag_seedling
37
+ - 2: tag_fertilizer
40
38
  """
41
39
  self.is_fitted = True
42
- keys = ["id_db_h", "id_db_dw", "tag_seedling", "tag_fertilizer"]
40
+ keys = ["timestamp","tag_seedling", "tag_fertilizer"]
43
41
  self.temp_df = pd.DataFrame(X, columns = keys)
44
-
45
- ##convierto las columnas "id_db_h", "id_db_dw", "tag_seedling" a int
46
- for col in ["id_db_h", "id_db_dw", "tag_seedling"]:
42
+
43
+ ##convierto las columnas "timestamp", "tag_seedling" a int
44
+ for col in ["tag_seedling"]:
47
45
  self.temp_df[col] = self.temp_df[col].astype(float).astype(int)
48
46
  ##convierto la columna "tag_fertilizer" a float de y redondeo a 3 decimales
49
47
  self.temp_df["tag_fertilizer"] = self.temp_df["tag_fertilizer"].astype(float).round(3)
@@ -56,10 +54,9 @@ class TransformToOutputData(BaseEstimator, TransformerMixin):
56
54
  - X: array con los datos de las operaciones clasificadas.
57
55
  Actualmente el array de dataToTransform es de (n,5) con las columnas siguientes
58
56
 
59
- - 0: id_db_h
60
- - 1: id_db_dw
61
- - 2: tag_seedling
62
- - 3: tag_fertilizer
57
+ - 0: timestamp
58
+ - 1: tag_seedling
59
+ - 2: tag_fertilizer
63
60
  Returns:
64
61
  Retorna una lista de diccionarios donde cada diccionario contiene los datos de una operación para los campos mencionados anteriormente.
65
62
  """
@@ -72,10 +69,9 @@ class TransformToOutputData(BaseEstimator, TransformerMixin):
72
69
  - X: array con los datos de las operaciones clasificadas.
73
70
  Actualmente el array de dataToTransform es de (n,5) con las columnas siguientes
74
71
 
75
- - 0: id_db_h
76
- - 1: id_db_dw
77
- - 2: tag_seedling
78
- - 3: tag_fertilizer
72
+ - 0: timestamp
73
+ - 1: tag_seedling
74
+ - 2: tag_fertilizer
79
75
  Returns:
80
76
  Retorna una lista de diccionarios donde cada diccionario contiene los datos de una operación para los campos mencionados anteriormente.
81
77
  """
@@ -1,2 +1,2 @@
1
1
  ## Version of the package
2
- __version__ = "2.0.0"
2
+ __version__ = "2.1.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sarapy
3
- Version: 2.0.0
3
+ Version: 2.1.1
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 SA_.
21
21
 
22
+ #### Version 2.1.1
23
+
24
+ - Se corrige error de tiepo en TransformToOutputData.
25
+
26
+ #### Version 2.1.0
27
+
28
+ - Se modifica TransformInputdata para poder obtener el timestamp en newSample de OpsProcessor. Se modifica transformOutputData para entregar los datos en base a la solicitud de #43. Se modifica OpsProcessor para poder obtener los datos de salida según solicitud en #43. Close #43.
29
+
22
30
  #### Version 2.0.0
23
31
 
24
32
  - Se realizan cambios en TransformInputData para que convierta los datos de telemetría a la forma de lista de diccionarios, como un JSON, para que sea más fácil de usar y entender. Además, a futuro, se espera que los datos de la electrónica se puedan enviar en este formato.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes