triggerflow 0.2.4__py3-none-any.whl → 0.2.6__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.
triggerflow/core.py CHANGED
@@ -458,8 +458,7 @@ class TriggerModel:
458
458
  )
459
459
 
460
460
 
461
- if shutil.which("vivado") is not None:
462
- build_ugt_model(
461
+ build_ugt_model(
463
462
  templates_dir=self.subsystem_cfg.get("templates_dir", Path("templates")),
464
463
  firmware_dir=self.workspace_manager.workspace / "firmware",
465
464
  compiler = self.compiler,
@@ -478,12 +477,7 @@ class TriggerModel:
478
477
  object_features=self.subsystem_cfg.get("object_features"),
479
478
  global_features=self.subsystem_cfg.get("global_features")
480
479
  )
481
- else:
482
- warnings.warn(
483
- "Vivado executable not found on the system PATH. "
484
- "Skipping FW build. ",
485
- UserWarning
486
- )
480
+
487
481
 
488
482
 
489
483
  self.workspace_manager.add_artifact("firmware", self.workspace_manager.workspace / "firmware")
@@ -1,12 +1,15 @@
1
1
  from pathlib import Path
2
- import shutil
2
+ import shutil, warnings
3
3
  import pkg_resources
4
4
  from jinja2 import Template
5
5
  import re
6
6
 
7
- def _render_template(template_file: str, output_file: Path, context: dict):
8
- with open(template_file, "r") as f:
9
- template_text = f.read()
7
+
8
+ def _render_template(template_name: str, output_file: Path, context: dict):
9
+ template_bytes = pkg_resources.resource_string(
10
+ "triggerflow" , template_name
11
+ )
12
+ template_text = template_bytes.decode('utf-8')
10
13
 
11
14
  template = Template(template_text)
12
15
  rendered = template.render(**context)
@@ -108,20 +111,29 @@ def build_ugt_model(
108
111
 
109
112
  out_path = firmware_dir / "firmware/model-gt.cpp"
110
113
 
111
- _render_template(f"{templates_dir}/model-gt.cpp", out_path, context)
114
+ _render_template("templates/model-gt.cpp", out_path, context)
112
115
 
113
116
  out_path = firmware_dir / "firmware/build_ugt.tcl"
114
- _render_template(f"{templates_dir}/build_ugt.tcl", out_path, context_tcl)
117
+ _render_template("templates/build_ugt.tcl", out_path, context_tcl)
115
118
 
116
- shutil.copy(f"{templates_dir}/data_types.h", firmware_dir / "firmware")
117
-
118
-
119
- subprocess.run(
120
- ["vitis_hls", "-f", "build_ugt.tcl"],
121
- cwd=firmware_dir/"firmware",
122
- check=True
119
+ shutil.copy(
120
+ pkg_resources.resource_filename("triggerflow", "templates/data_types.h"),
121
+ firmware_dir / "firmware"
123
122
  )
124
123
 
124
+ if shutil.which("vivado") is not None:
125
+ subprocess.run(
126
+ ["vitis_hls", "-f", "build_ugt.tcl"],
127
+ cwd=firmware_dir/"firmware",
128
+ check=True
129
+ )
130
+ else:
131
+ warnings.warn(
132
+ "Vivado executable not found on the system PATH. "
133
+ "Skipping FW build. ",
134
+ UserWarning
135
+ )
136
+
125
137
 
126
138
 
127
139
 
@@ -15,18 +15,18 @@ class {{MODEL_NAME}}_emulator : public hls4mlEmulator::Model {
15
15
  private:
16
16
  typedef {{UNSCALED_TYPE}} unscaled_t;
17
17
  static const int N_INPUT_SIZE = {{N_INPUTS}};
18
+ static const int N_OUTPUT_SIZE = {{N_OUTPUTS}};
18
19
 
19
20
  unscaled_t _unscaled_input[N_INPUT_SIZE];
20
- {{MODEL_NAME}}::input_t _scaled_input;
21
- {{MODEL_NAME}}::result_t _result;
21
+ {{MODEL_NAME}}::input_t _scaled_input[N_INPUT_SIZE];
22
+ {{MODEL_NAME}}::result_t _result[N_OUTPUT_SIZE];
22
23
 
23
- // Scale the raw input array to the model input type
24
- virtual void _scaleNNInputs(unscaled_t unscaled[N_INPUT_SIZE], {{MODEL_NAME}}::input_t &scaled)
24
+ virtual void _scaleNNInputs(unscaled_t unscaled[N_INPUT_SIZE], {{MODEL_NAME}}::input_t scaled[N_INPUT_SIZE])
25
25
  {
26
26
  for (int i = 0; i < N_INPUT_SIZE; i++)
27
27
  {
28
28
  unscaled_t tmp0 = unscaled[i] - hls4ml_{{MODEL_NAME}}::ad_offsets[i];
29
- {{UNSCALED_TYPE}} tmp1 = tmp0 >> hls4ml_{{MODEL_NAME}}::ad_shift[i];
29
+ {{MODEL_NAME}}::input_t tmp1 = tmp0 >> hls4ml_{{MODEL_NAME}}::ad_shift[i];
30
30
  scaled[i] = tmp1;
31
31
  }
32
32
  }
@@ -41,13 +41,14 @@ public:
41
41
  }
42
42
 
43
43
  virtual void predict() {
44
- // Call the io_parallel model function; pass pointers
45
- {{MODEL_NAME}}::{{MODEL_NAME}}_project(&_scaled_input, &_result);
44
+ {{MODEL_NAME}}::{{MODEL_NAME}}_project(_scaled_input, _result);
46
45
  }
47
46
 
48
47
  virtual void read_result(std::any result) {
49
48
  {{MODEL_NAME}}::result_t *result_p = std::any_cast<{{MODEL_NAME}}::result_t*>(result);
50
- *result_p = _result;
49
+ for (int i = 0; i < N_OUTPUT_SIZE; i++) {
50
+ result_p[i] = _result[i];
51
+ }
51
52
  }
52
53
  };
53
54
 
@@ -57,4 +58,4 @@ extern "C" hls4mlEmulator::Model* create_model() {
57
58
 
58
59
  extern "C" void destroy_model(hls4mlEmulator::Model* m) {
59
60
  delete m;
60
- }
61
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: triggerflow
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: Utilities for ML models targeting hardware triggers
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -6,10 +6,10 @@ trigger_loader/loader.py,sha256=wMkeZ3k36wpxt-B8OpKOa6j7z0-fnJUqQ-5AbVjNpBM,5158
6
6
  trigger_loader/processor.py,sha256=cvBfYmvcr4FLzOHgGE50oy7EkFzFaV80Z_66amqfsEY,7724
7
7
  triggerflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  triggerflow/cli.py,sha256=ZNQb3XQN8Ir6Hp6KX_ugec9bm2kqxLNZ0KdVGJmnqFA,4498
9
- triggerflow/core.py,sha256=QMU_zuWrYXuZekB7z8Q90Cuaga3B_uuDnYOPthQGdps,22465
9
+ triggerflow/core.py,sha256=WlIYCKzd2NQJlr8Rw2t9zFvvNPZUlWMEIgkU-ov2E3E,22228
10
10
  triggerflow/mlflow_wrapper.py,sha256=yCaIS-H7oC2KxnExj24ka9ylF4A1wgzRIpc7Y43ervI,10667
11
11
  triggerflow/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- triggerflow/interfaces/uGT.py,sha256=UBCK0WtF-MUkI9mWrulOdExtDXgwKPsHDS4C-FXIgMs,3637
12
+ triggerflow/interfaces/uGT.py,sha256=aPIYorMrISie1-BSUr-ywWF5AvHruGhGx4ibg21sCMs,4014
13
13
  triggerflow/starter/.gitignore,sha256=tH2z_M-tPM9MLWC2wPz1Z43Dq-wdVmb_kVYtrLT3tN4,2052
14
14
  triggerflow/starter/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  triggerflow/starter/cookiecutter.json,sha256=neplzXvVe3g6OVqYD8M2olfmjRKNr1UKqmflzP3j1UY,259
@@ -93,10 +93,10 @@ triggerflow/templates/data_types.h,sha256=m7_jLsRixSVjp8auxHZUUNAcSO777C5TTZl__9
93
93
  triggerflow/templates/makefile,sha256=A-aetsLC51Bop0T_-yPY8Z8Hg29ApN4YPvKx_jjPuHw,970
94
94
  triggerflow/templates/makefile_version,sha256=6kFc_u2oiM9l2rH7RK_BLzdZu1ZEK8PQTQKGBLRY0v4,328
95
95
  triggerflow/templates/model-gt.cpp,sha256=qZwuTtsvrKB_mOB-HDb2uOD7mDo4-20EjFiQzRjMdPo,2969
96
- triggerflow/templates/model_template.cpp,sha256=jMNRcO7NgC6I9Wd2BV3Bim-P1qPsAl_oeVQ8KofQGEw,1807
96
+ triggerflow/templates/model_template.cpp,sha256=FrZ3Dw229UnCrOUGddlbA4cKfkMeRz6N_iiulM86WWY,1854
97
97
  triggerflow/templates/scales.h,sha256=MFcB5S0DEvfzHuUhyZqILR0O4ktugOG-fLnuCDUUewM,373
98
- triggerflow-0.2.4.dist-info/METADATA,sha256=wa26vICKVPibMc7wxqLiJiwn-apZoMxBxAFqKDGA-II,5535
99
- triggerflow-0.2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
100
- triggerflow-0.2.4.dist-info/entry_points.txt,sha256=5QSV9YDseB_FqgVh9q10BdL4b1I6t68rGwPLXgVL60g,53
101
- triggerflow-0.2.4.dist-info/top_level.txt,sha256=cX0jkuM9tfxGp002ZBQ1AYgx-6D_NgBtomgPL0WA9bE,43
102
- triggerflow-0.2.4.dist-info/RECORD,,
98
+ triggerflow-0.2.6.dist-info/METADATA,sha256=T0U9b15Ix3bY5Y-MXPX9QY05JcUMKpVf2plxeIQwtMo,5535
99
+ triggerflow-0.2.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
100
+ triggerflow-0.2.6.dist-info/entry_points.txt,sha256=5QSV9YDseB_FqgVh9q10BdL4b1I6t68rGwPLXgVL60g,53
101
+ triggerflow-0.2.6.dist-info/top_level.txt,sha256=cX0jkuM9tfxGp002ZBQ1AYgx-6D_NgBtomgPL0WA9bE,43
102
+ triggerflow-0.2.6.dist-info/RECORD,,