corebridge 0.3.2__tar.gz → 0.3.4__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: corebridge
3
- Version: 0.3.2
3
+ Version: 0.3.4
4
4
  Summary: Bridge for Stactics AICore
5
5
  Home-page: https://github.com/fenke/corebridge
6
6
  Author: Fenke Meijer
@@ -0,0 +1 @@
1
+ __version__ = "0.3.4"
@@ -87,4 +87,6 @@ d = { 'settings': { 'branch': 'main',
87
87
  'corebridge.rscript.run_rscript_nowait': ( 'rscriptbridge.html#run_rscript_nowait',
88
88
  'corebridge/rscript.py'),
89
89
  'corebridge.rscript.run_rscript_wait': ('rscriptbridge.html#run_rscript_wait', 'corebridge/rscript.py'),
90
+ 'corebridge.rscript.snake_case_to_camel_case': ( 'rscriptbridge.html#snake_case_to_camel_case',
91
+ 'corebridge/rscript.py'),
90
92
  'corebridge.rscript.unpack_assets': ('rscriptbridge.html#unpack_assets', 'corebridge/rscript.py')}}}
@@ -89,6 +89,7 @@ def __init__(self:AICoreModule,
89
89
  *args, **kwargs):
90
90
 
91
91
  self.init_time = datetime.datetime.now(datetime.UTC)
92
+ self.aicorebridge_version = __version__
92
93
  self._init_processor(processor)
93
94
 
94
95
  self.init_args = args
@@ -128,6 +129,7 @@ def infer(self:AICoreModule, data:dict, *_, **kwargs):
128
129
 
129
130
  msg=[
130
131
  f"Startup time: {self.init_time.isoformat()}",
132
+ f"Corebridge version: {self.aicorebridge_version}",
131
133
  f"{self.processor.__name__}({self.processor_signature})",
132
134
  f"init_args: {self.init_args}, init_kwargs: {self.init_kwargs}",
133
135
  ]
@@ -6,7 +6,7 @@ __all__ = ['syslog', 'read_chunk_size', 'RScriptProcess', 'get_asset_path', 'get
6
6
  'calc_hash_from_flowobject', 'calc_hash_from_files', 'calc_hash_from_input_files',
7
7
  'calc_hash_from_data_files', 'check_script_inputs', 'check_script_output', 'generate_checksum_file',
8
8
  'run_rscript_wait', 'run_rscript_nowait', 'release_script_lock', 'AICoreRScriptModule',
9
- 'recursive_flatten_nested_data']
9
+ 'snake_case_to_camel_case', 'recursive_flatten_nested_data']
10
10
 
11
11
  # %% ../nbs/02_rscriptbridge.ipynb 4
12
12
  import os, logging, json, hashlib
@@ -19,6 +19,7 @@ from functools import reduce
19
19
  from collections import namedtuple
20
20
  from fastcore.basics import patch_to, patch
21
21
 
22
+ import corebridge
22
23
  from .core import *
23
24
 
24
25
 
@@ -412,6 +413,8 @@ class AICoreRScriptModule(AICoreModuleBase):
412
413
  *args, **kwargs):
413
414
 
414
415
  super().__init__(save_dir, assets_dir, *args, **kwargs)
416
+
417
+ self.corebridge_version = corebridge.__version__
415
418
 
416
419
  self.flow_mapping = flow_mapping
417
420
  self.cran_repo = cran_repo
@@ -500,9 +503,14 @@ def update_flow(self:AICoreRScriptModule):
500
503
 
501
504
 
502
505
  # %% ../nbs/02_rscriptbridge.ipynb 125
506
+ def snake_case_to_camel_case(snake_case:str) -> str:
507
+ splittext = snake_case.split('_')
508
+ return ''.join([x.capitalize() if n > 0 else x for x,n in zip(splittext, range(len(splittext)))])
509
+
503
510
  def recursive_flatten_nested_data(
504
511
  data:dict,
505
- column_prefix:str='') -> dict:
512
+ column_prefix:str='',
513
+ camel_case=False) -> dict:
506
514
 
507
515
  if isinstance(data, np.ndarray):
508
516
  return {column_prefix:data}
@@ -511,7 +519,7 @@ def recursive_flatten_nested_data(
511
519
  return reduce(
512
520
  lambda R, X: dict(**R, **X) if R else X,
513
521
  [
514
- recursive_flatten_nested_data(value, f"{column_prefix}_{i+1}_")
522
+ recursive_flatten_nested_data(value, f"{column_prefix}_{i+1}_", camel_case)
515
523
  for i, value in enumerate(data)
516
524
 
517
525
  ],
@@ -529,7 +537,9 @@ def recursive_flatten_nested_data(
529
537
  [
530
538
  recursive_flatten_nested_data(
531
539
  value,
532
- f"{column_prefix}{str(key).capitalize()}")
540
+ snake_case_to_camel_case(column_prefix+'_'+str(key)) if camel_case else column_prefix+'_'+str(key),
541
+ camel_case
542
+ )
533
543
  for key, value in data.items()
534
544
  ],
535
545
  {}
@@ -538,9 +548,12 @@ def recursive_flatten_nested_data(
538
548
  else:
539
549
  key = list(data.keys())[0]
540
550
  value = data[key]
541
- column_name = f"{column_prefix}{str(key).capitalize()}" if column_prefix else str(key)
551
+ if column_prefix:
552
+ column_name = snake_case_to_camel_case(column_prefix+'_'+str(key)) if camel_case else column_prefix+'_'+str(key)
553
+ else:
554
+ column_name = snake_case_to_camel_case(str(key)) if camel_case else str(key)
542
555
  return recursive_flatten_nested_data(
543
- value, column_name,
556
+ value, column_name, camel_case
544
557
  )
545
558
 
546
559
 
@@ -558,15 +571,20 @@ def write_uploaded_data(
558
571
  df.reset_index().to_csv(csv_filename, index=False, date_format='%Y-%m-%d %H:%M:%S')
559
572
 
560
573
  @patch
561
- def read_data(self:AICoreRScriptModule, tag:str=None, **kwargs):
574
+ def read_data(self:AICoreRScriptModule, tag:str=None, camel_case=False, **kwargs):
575
+
562
576
  rdata_filename = self.get_save_path(self.data_files_map.get(tag, tag))
563
577
  converted = rdata.read_rda(rdata_filename)
564
578
 
565
- flattened = recursive_flatten_nested_data(converted)
579
+ flattened = recursive_flatten_nested_data(converted, camel_case=camel_case)
566
580
  df = pd.DataFrame(flattened)
567
- df.set_index( pd.DatetimeIndex(df['ensemble_predTime']), inplace=True)
581
+ syslog.debug(f"Read {df.shape[0]} rows from {rdata_filename} for {tag} (camel_case={camel_case})")
582
+
583
+ time_column = [k for k,v in df.dtypes.to_dict().items() if 'float' not in str(v)][0]
584
+ df.set_index( pd.DatetimeIndex(df[time_column]), inplace=True)
568
585
  df.index.name = 'time'
569
- df.drop('ensemble_predTime', axis=1, inplace=True)
586
+ df.drop(time_column, axis=1, inplace=True)
587
+
570
588
  return df
571
589
 
572
590
 
@@ -576,10 +594,6 @@ def infer(
576
594
  self:AICoreRScriptModule,
577
595
  data:dict,
578
596
  *_,
579
- writeTag:str=None,
580
- readTag:str=None,
581
- timezone:str='UTC',
582
- recordformat:str='records',
583
597
  **kwargs):
584
598
 
585
599
  """
@@ -590,11 +604,17 @@ def infer(
590
604
 
591
605
  msg=[
592
606
  f"Startup time: {self.init_time.isoformat()}",
607
+ f"Corebridge version: {self.corebridge_version}",
593
608
  f"init_args: {self.init_args}, init_kwargs: {self.init_kwargs}",
594
609
  ]
595
610
 
596
611
  msg += self.update_flow()
597
612
  # Pickup params, pop those that are not intended for the processor
613
+ writeTag = kwargs.pop('writeTag', None)
614
+ readTag = kwargs.pop('readTag', None)
615
+ camelCase = bool(kwargs.pop('camelCase', False))
616
+ msg.append(f"writeTag: {writeTag}, readTag: {readTag}, camelCase: {camelCase}")
617
+
598
618
  lastSeen = kwargs.pop('lastSeen', False)
599
619
  recordformat = kwargs.pop('format', "records").lower()
600
620
  timezone = kwargs.get('timezone', 'UTC')
@@ -613,7 +633,7 @@ def infer(
613
633
  self.write_uploaded_data(df, writeTag)
614
634
 
615
635
  if readTag:
616
- result = self.read_data(readTag)
636
+ result = self.read_data(readTag, camel_case=camelCase)
617
637
 
618
638
  if reversed:
619
639
  result = result[::-1]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: corebridge
3
- Version: 0.3.2
3
+ Version: 0.3.4
4
4
  Summary: Bridge for Stactics AICore
5
5
  Home-page: https://github.com/fenke/corebridge
6
6
  Author: Fenke Meijer
@@ -5,7 +5,7 @@
5
5
  ### Python library ###
6
6
  repo = corebridge
7
7
  lib_name = %(repo)s
8
- version = 0.3.2
8
+ version = 0.3.4
9
9
  min_python = 3.10
10
10
  license = apache2
11
11
  black_formatting = False
@@ -1 +0,0 @@
1
- __version__ = "0.3.2"
File without changes
File without changes
File without changes
File without changes
File without changes