FlowerPower 0.11.6.13__py3-none-any.whl → 0.11.6.14__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.
@@ -304,7 +304,7 @@ def _can_downcast_to_float32(array: pa.Array) -> bool:
304
304
  return F32_MIN <= min_val <= max_val <= F32_MAX
305
305
 
306
306
 
307
- def _get_optimal_int_type(array: pa.Array) -> pa.DataType:
307
+ def _get_optimal_int_type(array: pa.Array, allow_unsigned: bool) -> pa.DataType:
308
308
  """
309
309
  Determine the most efficient integer type based on data range.
310
310
  """
@@ -317,7 +317,8 @@ def _get_optimal_int_type(array: pa.Array) -> pa.DataType:
317
317
  min_val = min_max["min"].as_py()
318
318
  max_val = min_max["max"].as_py()
319
319
 
320
- if min_val >= 0: # Unsigned
320
+ if allow_unsigned and min_val >= 0:
321
+ # If allow_unsigned is True, check for unsigned types
321
322
  if max_val <= 255:
322
323
  return pa.uint8()
323
324
  elif max_val <= 65535:
@@ -326,6 +327,7 @@ def _get_optimal_int_type(array: pa.Array) -> pa.DataType:
326
327
  return pa.uint32()
327
328
  else:
328
329
  return pa.uint64()
330
+
329
331
  else: # Signed
330
332
  if -128 <= min_val and max_val <= 127:
331
333
  return pa.int8()
@@ -337,7 +339,9 @@ def _get_optimal_int_type(array: pa.Array) -> pa.DataType:
337
339
  return pa.int64()
338
340
 
339
341
 
340
- def _optimize_numeric_array(array: pa.Array, shrink: bool) -> pa.Array:
342
+ def _optimize_numeric_array(
343
+ array: pa.Array, shrink: bool, allow_unsigned: bool = True
344
+ ) -> pa.Array:
341
345
  """
342
346
  Optimize numeric PyArrow array by downcasting when possible.
343
347
  Uses vectorized operations for efficiency.
@@ -357,7 +361,7 @@ def _optimize_numeric_array(array: pa.Array, shrink: bool) -> pa.Array:
357
361
  if array.type in [pa.int8(), pa.uint8()]:
358
362
  return array
359
363
 
360
- optimal_type = _get_optimal_int_type(array)
364
+ optimal_type = _get_optimal_int_type(array, allow_unsigned)
361
365
  return pc.cast(array, optimal_type)
362
366
 
363
367
  # Default: return unchanged
@@ -448,7 +452,11 @@ def _optimize_string_array(
448
452
 
449
453
 
450
454
  def _process_column(
451
- table: pa.Table, col_name: str, shrink_numerics: bool, time_zone: str | None = None
455
+ table: pa.Table,
456
+ col_name: str,
457
+ shrink_numerics: bool,
458
+ allow_unsigned: bool,
459
+ time_zone: str | None = None,
452
460
  ) -> pa.Array:
453
461
  """
454
462
  Process a single column for type optimization.
@@ -461,7 +469,7 @@ def _process_column(
461
469
 
462
470
  # Process based on current type
463
471
  if pa.types.is_floating(array.type) or pa.types.is_integer(array.type):
464
- return _optimize_numeric_array(array, shrink_numerics)
472
+ return _optimize_numeric_array(array, shrink_numerics, allow_unsigned)
465
473
  elif pa.types.is_string(array.type):
466
474
  return _optimize_string_array(array, col_name, shrink_numerics, time_zone)
467
475
 
@@ -475,6 +483,7 @@ def opt_dtype(
475
483
  exclude: str | list[str] | None = None,
476
484
  time_zone: str | None = None,
477
485
  shrink_numerics: bool = True,
486
+ allow_unsigned: bool = True,
478
487
  strict: bool = False,
479
488
  ) -> pa.Table:
480
489
  """
@@ -491,6 +500,7 @@ def opt_dtype(
491
500
  exclude: Column(s) to exclude from optimization
492
501
  time_zone: Optional time zone for datetime parsing
493
502
  shrink_numerics: Whether to downcast numeric types when possible
503
+ allow_unsigned: Whether to allow unsigned types
494
504
  strict: If True, will raise an error if any column cannot be optimized
495
505
 
496
506
  Returns:
@@ -516,7 +526,9 @@ def opt_dtype(
516
526
  try:
517
527
  # Process column for optimization
518
528
  new_columns.append(
519
- _process_column(table, col_name, shrink_numerics, time_zone)
529
+ _process_column(
530
+ table, col_name, shrink_numerics, allow_unsigned, time_zone
531
+ )
520
532
  )
521
533
  except Exception as e:
522
534
  if strict:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: FlowerPower
3
- Version: 0.11.6.13
3
+ Version: 0.11.6.14
4
4
  Summary: A simple workflow framework. Hamilton + APScheduler = FlowerPower
5
5
  Author-email: "Volker L." <ligno.blades@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/legout/flowerpower
@@ -48,7 +48,7 @@ flowerpower/plugins/io/base.py,sha256=oGxTKobs0M19hPV842EelAeJ01EBz6kDdGv_4GTyFz
48
48
  flowerpower/plugins/io/metadata.py,sha256=PCrepLilXRWKDsB5BKFF_-OFs712s1zBeitW-84lDLQ,7005
49
49
  flowerpower/plugins/io/helpers/datetime.py,sha256=1WBUg2ywcsodJQwoF6JiIGc9yhVobvE2IErWp4i95m4,10649
50
50
  flowerpower/plugins/io/helpers/polars.py,sha256=6YbPg1UDeZaWLSnXatgvzCNJI8Ui2GhTegYsbV5VgrM,27463
51
- flowerpower/plugins/io/helpers/pyarrow.py,sha256=umgmM2hZQ-tfbZTl8rYo158K6P0SsAOfm7oe-N5cc_M,18243
51
+ flowerpower/plugins/io/helpers/pyarrow.py,sha256=lYZHbPklzYvd7L5XqDjoTUV42cHi_c9Wh8xf1HYtS2M,18592
52
52
  flowerpower/plugins/io/helpers/sql.py,sha256=BPIxjarKF3p93EdtUu-md8KislE9q8IWNSeZ5toFU6U,7298
53
53
  flowerpower/plugins/io/loader/__init__.py,sha256=MKH42nvVokaWas0wFgX1yrpU5iLpvHjRqqF-KzwLHCg,780
54
54
  flowerpower/plugins/io/loader/csv.py,sha256=Q5bmcbbr530sT1kQ2YiJwvsMUPqi0VcZWsLOygmzRyI,827
@@ -94,9 +94,9 @@ flowerpower/utils/monkey.py,sha256=VPl3yimoWhwD9kI05BFsjNvtyQiDyLfY4Q85Bb6Ma0w,2
94
94
  flowerpower/utils/open_telemetry.py,sha256=fQWJWbIQFtKIxMBjAWeF12NGnqT0isO3A3j-DSOv_vE,949
95
95
  flowerpower/utils/scheduler.py,sha256=2zJ_xmLXpvXUQNF1XS2Gqm3Ogo907ctZ50GtvQB_rhE,9354
96
96
  flowerpower/utils/templates.py,sha256=ouyEeSDqa9PjW8c32fGpcINlpC0WToawRFZkMPtwsLE,1591
97
- flowerpower-0.11.6.13.dist-info/licenses/LICENSE,sha256=9AkLexxrmr0aBgSHiqxpJk9wgazpP1CTJyiDyr56J9k,1063
98
- flowerpower-0.11.6.13.dist-info/METADATA,sha256=aDlOA-x27j2YjpomvE0xrtb7MzOPo7L7ljz-rSMLE6c,21613
99
- flowerpower-0.11.6.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
100
- flowerpower-0.11.6.13.dist-info/entry_points.txt,sha256=61X11i5a2IwC9LBiP20XCDl5zMOigGCjMCx17B7bDbQ,52
101
- flowerpower-0.11.6.13.dist-info/top_level.txt,sha256=VraH4WtEUfSxs5L-rXwDQhzQb9eLHTUtgvmFZ2dAYnA,12
102
- flowerpower-0.11.6.13.dist-info/RECORD,,
97
+ flowerpower-0.11.6.14.dist-info/licenses/LICENSE,sha256=9AkLexxrmr0aBgSHiqxpJk9wgazpP1CTJyiDyr56J9k,1063
98
+ flowerpower-0.11.6.14.dist-info/METADATA,sha256=XbPfuXRqDDFH6pT7FgUBC_Z1CiOBAw-EhtFYlGQwPfI,21613
99
+ flowerpower-0.11.6.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
100
+ flowerpower-0.11.6.14.dist-info/entry_points.txt,sha256=61X11i5a2IwC9LBiP20XCDl5zMOigGCjMCx17B7bDbQ,52
101
+ flowerpower-0.11.6.14.dist-info/top_level.txt,sha256=VraH4WtEUfSxs5L-rXwDQhzQb9eLHTUtgvmFZ2dAYnA,12
102
+ flowerpower-0.11.6.14.dist-info/RECORD,,