najaeda 0.1.8__cp311-cp311-macosx_11_0_arm64.whl → 0.1.11__cp311-cp311-macosx_11_0_arm64.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.

Potentially problematic release.


This version of najaeda might be problematic. Click here for more details.

@@ -0,0 +1,32 @@
1
+ # SPDX-FileCopyrightText: 2023 The Naja authors <https://github.com/najaeda/naja/blob/main/AUTHORS>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ import argparse
6
+ import pandas as pd
7
+
8
+ if __name__ == "__main__":
9
+ parser = argparse.ArgumentParser(
10
+ description="Load JSON and generate statistics using Pandas."
11
+ )
12
+ parser.add_argument("json_file", type=str, help="Path to the input JSON file.")
13
+ parser.add_argument(
14
+ "--output",
15
+ type=str,
16
+ default="design_stats.png",
17
+ help="Optional: Save computed statistics to this JSON file.",
18
+ )
19
+ args = parser.parse_args()
20
+
21
+ df = pd.read_json(args.json_file)
22
+ pandas_data = pd.DataFrame(df.set_index("Name"))
23
+ plot = pandas_data.plot.bar(y=["terms", "nets", "instances"], stacked=True)
24
+
25
+ # Customize plot
26
+ plot.set_title("Design Statistics", fontsize=16, fontweight="bold")
27
+ plot.set_xlabel("Design Name", fontsize=12)
28
+ plot.set_ylabel("Count", fontsize=12)
29
+
30
+ plot_figure = plot.get_figure()
31
+ plot_figure.tight_layout()
32
+ plot_figure.savefig(args.output)
najaeda/snl.so CHANGED
Binary file
najaeda/stats.py CHANGED
@@ -3,16 +3,121 @@
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
5
  import logging
6
+ import json
7
+
6
8
  from najaeda import netlist
7
9
 
8
10
 
9
- class DesignsStats:
11
+ class InstancesStats:
10
12
  def __init__(self):
11
13
  self.blackboxes = dict()
12
- self.hier_designs = dict()
14
+ self.hier_instances = dict()
15
+
16
+ def dump_instance_stats_text(self, instance, stats_files):
17
+ dumped_models = set()
18
+ self.__dump_instance_stats_text(instance, stats_files, dumped_models)
19
+
20
+ def __dump_stats(self, file, value_name, value):
21
+ file.write(f"{value_name}: {value} \n")
22
+
23
+ def __dump_terms_stats_text(self, instance_stats, file):
24
+ file.write("Terms: ")
25
+ first = True
26
+ for terms in instance_stats.terms.items():
27
+ if not first:
28
+ file.write(", ")
29
+ else:
30
+ first = False
31
+ file.write(terms[0] + ":" + str(terms[1]))
32
+ file.write("\n")
33
+
34
+ def __dump_instances(self, stats_file, title, instances):
35
+ if len(instances) == 0:
36
+ return
37
+ sorted_instances = sorted(
38
+ instances.items(), key=lambda item: netlist.get_model_name(item[0])
39
+ )
40
+ stats_file.write(title + " " + str(sum(j for i, j in sorted_instances)) + "\n")
41
+ line_char = 0
42
+ for instance in sorted_instances:
43
+ model_name = netlist.get_model_name(instance[0])
44
+ if line_char != 0:
45
+ stats_file.write(",")
46
+ line_char += 1
47
+ if line_char > 80:
48
+ stats_file.write("\n")
49
+ line_char = 0
50
+ elif line_char != 0:
51
+ stats_file.write(" ")
52
+ line_char += 1
53
+ instance_char = model_name + ":" + str(instance[1])
54
+ line_char += len(instance_char)
55
+ stats_file.write(instance_char)
56
+ stats_file.write("\n\n")
57
+
58
+ def __dump_instance_stats_text(self, instance, file, dumped_models):
59
+ if instance.is_primitive() or instance.is_blackbox():
60
+ return
61
+ # Only dump once each model
62
+ model_id = instance.get_model_id()
63
+ if model_id in dumped_models:
64
+ return
65
+ dumped_models.add(model_id)
66
+
67
+ file.write("*** " + instance.get_name() + " ***\n")
13
68
 
69
+ instance_stats = self.hier_instances.get(model_id)
70
+ if instance_stats is None:
71
+ print(
72
+ "Cannot find " + str(instance.get_model_name()) + " in instance_stats"
73
+ )
74
+ raise
75
+
76
+ if len(instance_stats.terms) > 0:
77
+ self.__dump_terms_stats_text(instance_stats, file)
78
+
79
+ # self.__dump_instances(stats_file, "Instances:", design_stats.ins)
80
+ nb_primitives = sum(instance_stats.basic_primitives.values()) + sum(
81
+ instance_stats.primitives.values()
82
+ )
83
+ if nb_primitives > 1:
84
+ self.__dump_stats(file, "Primitives", nb_primitives)
85
+
86
+ self.__dump_instances(
87
+ file, "Simple Primitives:", instance_stats.basic_primitives
88
+ )
89
+ self.__dump_instances(file, "Other Primitives:", instance_stats.primitives)
90
+ self.__dump_instances(file, "Blackboxes:", instance_stats.blackboxes)
91
+
92
+ if instance_stats.assigns > 0:
93
+ self.__dump_stats(file, "Assigns", instance_stats.assigns)
94
+
95
+ self.__dump_instances(file, "Flat Instances:", instance_stats.flat_ins)
96
+ self.__dump_instances(file, "Flat Blackboxes:", instance_stats.flat_blackboxes)
97
+
98
+ nb_primitives = sum(instance_stats.flat_basic_primitives.values()) + sum(
99
+ instance_stats.flat_primitives.values()
100
+ )
101
+ if nb_primitives > 1:
102
+ self.__dump_stats(file, "Flat Primitives", nb_primitives)
103
+
104
+ self.__dump_instances(
105
+ file, "Flat Simple Primitives:", instance_stats.flat_basic_primitives
106
+ )
107
+ self.__dump_instances(
108
+ file, "Flat Other Primitives:", instance_stats.flat_primitives
109
+ )
14
110
 
15
- class DesignStats:
111
+ if instance_stats.flat_assigns > 0:
112
+ self.__dump_stats(file, "Flat Assigns", instance_stats.flat_assigns)
113
+
114
+ file.write("\n")
115
+
116
+ for child_instance in instance.get_child_instances():
117
+ self.__dump_instance_stats_text(child_instance, file, dumped_models)
118
+
119
+
120
+ class InstanceStats:
16
121
  def __init__(self):
17
122
  self.name = ""
18
123
  self.assigns = 0
@@ -51,92 +156,96 @@ def is_basic_primitive(design):
51
156
  )
52
157
 
53
158
 
54
- def compute_design_stats(design, designs_stats):
55
- if design.get_model_id() in designs_stats.hier_designs:
56
- return designs_stats.hier_designs.get(design.get_model_id())
57
- design_stats = DesignStats()
58
- design_stats.name = design.get_model_name()
59
- for ins in design.get_child_instances():
159
+ def compute_instance_stats(instance, instances_stats):
160
+ if instance.get_model_id() in instances_stats.hier_instances:
161
+ return instances_stats.hier_instances.get(instance.get_model_id())
162
+ instance_stats = InstanceStats()
163
+ instance_stats.name = instance.get_model_name()
164
+ for ins in instance.get_child_instances():
60
165
  model_id = ins.get_model_id()
61
166
  if ins.is_assign():
62
- design_stats.assigns += 1
63
- design_stats.flat_assigns += 1
167
+ instance_stats.assigns += 1
168
+ instance_stats.flat_assigns += 1
64
169
  elif ins.is_primitive():
65
170
  if is_basic_primitive(ins):
66
- design_stats.basic_primitives[model_id] = (
67
- design_stats.basic_primitives.get(model_id, 0) + 1
171
+ instance_stats.basic_primitives[model_id] = (
172
+ instance_stats.basic_primitives.get(model_id, 0) + 1
68
173
  )
69
- design_stats.flat_basic_primitives[model_id] = (
70
- design_stats.flat_basic_primitives.get(model_id, 0) + 1
174
+ instance_stats.flat_basic_primitives[model_id] = (
175
+ instance_stats.flat_basic_primitives.get(model_id, 0) + 1
71
176
  )
72
177
  else:
73
- design_stats.primitives[model_id] = (
74
- design_stats.primitives.get(model_id, 0) + 1
178
+ instance_stats.primitives[model_id] = (
179
+ instance_stats.primitives.get(model_id, 0) + 1
75
180
  )
76
- design_stats.flat_primitives[model_id] = (
77
- design_stats.flat_primitives.get(model_id, 0) + 1
181
+ instance_stats.flat_primitives[model_id] = (
182
+ instance_stats.flat_primitives.get(model_id, 0) + 1
78
183
  )
79
184
  elif ins.is_blackbox():
80
- design_stats.blackboxes[model_id] = (
81
- design_stats.blackboxes.get(model_id, 0) + 1
185
+ instance_stats.blackboxes[model_id] = (
186
+ instance_stats.blackboxes.get(model_id, 0) + 1
82
187
  )
83
- design_stats.flat_blackboxes[model_id] = (
84
- design_stats.flat_blackboxes.get(model_id, 0) + 1
188
+ instance_stats.flat_blackboxes[model_id] = (
189
+ instance_stats.flat_blackboxes.get(model_id, 0) + 1
85
190
  )
86
- if model_id not in designs_stats.blackboxes:
87
- designs_stats.blackboxes[model_id] = dict()
88
- compute_design_terms(model_id, designs_stats.blackboxes[model_id])
191
+ if model_id not in instance_stats.blackboxes:
192
+ instance_stats.blackboxes[model_id] = dict()
193
+ compute_instance_terms(model_id, instance_stats.blackboxes[model_id])
89
194
  else:
90
- if model_id in designs_stats.hier_designs:
91
- model_stats = designs_stats.hier_designs[model_id]
195
+ if model_id in instances_stats.hier_instances:
196
+ model_stats = instances_stats.hier_instances[model_id]
92
197
  else:
93
- model_stats = compute_design_stats(ins, designs_stats)
94
- design_stats.ins[model_id] = design_stats.ins.get(model_id, 0) + 1
95
- design_stats.flat_ins[model_id] = design_stats.flat_ins.get(model_id, 0) + 1
96
- design_stats.add_ins_stats(model_stats)
97
- compute_design_terms(design, design_stats)
98
- compute_design_net_stats(design, design_stats)
99
- designs_stats.hier_designs[design.get_model_id()] = design_stats
100
- return design_stats
101
-
102
-
103
- def compute_design_terms(design, design_stats):
104
- for term in design.get_terms():
198
+ model_stats = compute_instance_stats(ins, instances_stats)
199
+ instance_stats.ins[model_id] = instance_stats.ins.get(model_id, 0) + 1
200
+ instance_stats.flat_ins[model_id] = (
201
+ instance_stats.flat_ins.get(model_id, 0) + 1
202
+ )
203
+ instance_stats.add_ins_stats(model_stats)
204
+ compute_instance_terms(instance, instance_stats)
205
+ compute_instance_net_stats(instance, instance_stats)
206
+ instances_stats.hier_instances[instance.get_model_id()] = instance_stats
207
+ return instance_stats
208
+
209
+
210
+ def compute_instance_terms(instance, instance_stats):
211
+ for term in instance.get_terms():
105
212
  if term.get_direction() == netlist.Term.INPUT:
106
- design_stats.terms["inputs"] = design_stats.terms.get("inputs", 0) + 1
213
+ instance_stats.terms["inputs"] = instance_stats.terms.get("inputs", 0) + 1
107
214
  bit_terms = sum(1 for _ in term.get_bits())
108
- design_stats.bit_terms["inputs"] = (
109
- design_stats.bit_terms.get("inputs", 0) + bit_terms
215
+ instance_stats.bit_terms["inputs"] = (
216
+ instance_stats.bit_terms.get("inputs", 0) + bit_terms
110
217
  )
111
218
  elif term.get_direction() == netlist.Term.OUTPUT:
112
- design_stats.terms["outputs"] = design_stats.terms.get("outputs", 0) + 1
219
+ instance_stats.terms["outputs"] = instance_stats.terms.get("outputs", 0) + 1
113
220
  bit_terms = sum(1 for _ in term.get_bits())
114
- design_stats.bit_terms["outputs"] = (
115
- design_stats.bit_terms.get("outputs", 0) + bit_terms
221
+ instance_stats.bit_terms["outputs"] = (
222
+ instance_stats.bit_terms.get("outputs", 0) + bit_terms
116
223
  )
117
224
  elif term.get_direction() == netlist.Term.INOUT:
118
- design_stats.terms["inouts"] = design_stats.terms.get("inouts", 0) + 1
225
+ instance_stats.terms["inouts"] = instance_stats.terms.get("inouts", 0) + 1
119
226
  bit_terms = sum(1 for _ in term.get_bits())
120
- design_stats.bit_terms["inouts"] = (
121
- design_stats.bit_terms.get("inouts", 0) + bit_terms
227
+ instance_stats.bit_terms["inouts"] = (
228
+ instance_stats.bit_terms.get("inouts", 0) + bit_terms
122
229
  )
123
230
  else:
124
- design_stats.terms["unknowns"] = design_stats.terms.get("unknowns", 0) + 1
231
+ instance_stats.terms["unknowns"] = (
232
+ instance_stats.terms.get("unknowns", 0) + 1
233
+ )
125
234
  bit_terms = sum(1 for _ in term.get_bits())
126
- design_stats.bit_terms["unknowns"] = (
127
- design_stats.bit_terms.get("unknowns", 0) + bit_terms
235
+ instance_stats.bit_terms["unknowns"] = (
236
+ instance_stats.bit_terms.get("unknowns", 0) + bit_terms
128
237
  )
129
238
 
130
239
 
131
- def compute_design_net_stats(design, design_stats):
132
- for net in design.get_flat_nets():
240
+ def compute_instance_net_stats(instance, instance_stats):
241
+ for net in instance.get_flat_nets():
133
242
  if net.is_const():
134
243
  pass
135
244
  nb_components = sum(1 for c in net.get_terms())
136
- design_stats.net_stats[nb_components] = (
137
- design_stats.net_stats.get(nb_components, 0) + 1
245
+ instance_stats.net_stats[nb_components] = (
246
+ instance_stats.net_stats.get(nb_components, 0) + 1
138
247
  )
139
- design_stats.net_stats = dict(sorted(design_stats.net_stats.items()))
248
+ instance_stats.net_stats = dict(sorted(instance_stats.net_stats.items()))
140
249
 
141
250
 
142
251
  def dump_instances(stats_file, title, instances):
@@ -184,57 +293,6 @@ def dump_blackboxes_stats(stats_file, design_stats):
184
293
  stats_file.write("\n")
185
294
 
186
295
 
187
- def dump_stats(design, stats_file, designs_stats, dumped_models):
188
- if design.is_primitive() or design.is_blackbox():
189
- return
190
- if design in dumped_models:
191
- return
192
- dumped_models.add(design)
193
- stats_file.write("*** " + design.get_name() + " ***\n")
194
- design_stats = designs_stats.hier_designs.get(design.get_model_id())
195
- if design_stats is None:
196
- print("Cannot find " + str(design) + " in design_stats")
197
- raise
198
- if len(design_stats.terms) > 0:
199
- stats_file.write("Terms: ")
200
- first = True
201
- for terms in design_stats.terms.items():
202
- if not first:
203
- stats_file.write(", ")
204
- else:
205
- first = False
206
- stats_file.write(terms[0] + ":" + str(terms[1]))
207
- stats_file.write("\n")
208
-
209
- dump_instances(stats_file, "Instances:", design_stats.ins)
210
- nb_primitives = sum(design_stats.basic_primitives.values()) + sum(
211
- design_stats.primitives.values()
212
- )
213
- if nb_primitives > 1:
214
- stats_file.write("Primitives: " + str(nb_primitives) + "\n")
215
- dump_instances(stats_file, "Simple Primitives:", design_stats.basic_primitives)
216
- dump_instances(stats_file, "Other Primitives:", design_stats.primitives)
217
- dump_instances(stats_file, "Blackboxes:", design_stats.blackboxes)
218
- if design_stats.assigns > 0:
219
- stats_file.write("Assigns: " + str(design_stats.assigns) + "\n")
220
- dump_instances(stats_file, "Flat Instances:", design_stats.flat_ins)
221
- dump_instances(stats_file, "Flat Blackboxes:", design_stats.flat_blackboxes)
222
- nb_primitives = sum(design_stats.flat_basic_primitives.values()) + sum(
223
- design_stats.flat_primitives.values()
224
- )
225
- if nb_primitives > 1:
226
- stats_file.write("Flat Primitives: " + str(nb_primitives) + "\n")
227
- dump_instances(
228
- stats_file, "Flat Simple Primitives:", design_stats.flat_basic_primitives
229
- )
230
- dump_instances(stats_file, "Flat Other Primitives:", design_stats.flat_primitives)
231
- if design_stats.flat_assigns > 0:
232
- stats_file.write("Flat Assigns: " + str(design_stats.flat_assigns) + "\n")
233
- stats_file.write("\n")
234
- for ins in design.get_child_instances():
235
- dump_stats(ins, stats_file, designs_stats, dumped_models)
236
-
237
-
238
296
  # def dump_pandas(designs_stats):
239
297
  # import pandas
240
298
  # import matplotlib.pyplot as plt
@@ -286,14 +344,51 @@ def dump_stats(design, stats_file, designs_stats, dumped_models):
286
344
  # primitives_figure.savefig('figures/flat_primitives_' + design.getName() + '.png')
287
345
 
288
346
 
289
- def compute_and_dump_design_stats(design, stats_file, with_pandas=False):
290
- designs_stats = DesignsStats()
291
- compute_design_stats(design, designs_stats)
292
- dumped_models = set()
293
- dump_stats(design, stats_file, designs_stats, dumped_models)
294
- dump_blackboxes_stats(stats_file, designs_stats)
295
- # if with_pandas:
296
- # dump_pandas(designs_stats)
347
+ def convert_instance_stats_to_json(instance_stats):
348
+ json_top = list()
349
+ for _, value in instance_stats.hier_instances.items():
350
+ nb_primitives = sum(value.basic_primitives.values())
351
+ +sum(value.primitives.values())
352
+ nb_terms = sum(value.terms.values())
353
+ nb_nets = sum(value.net_stats.keys())
354
+ nb_ins = sum(value.ins.values()) + nb_primitives
355
+ json_top.append(
356
+ {
357
+ "Name": value.name,
358
+ "primitives": nb_primitives,
359
+ "instances": nb_ins,
360
+ "terms": nb_terms,
361
+ "nets": nb_nets,
362
+ # "primitives": value.primitives,
363
+ # "flat_basic_primitives": value.flat_basic_primitives,
364
+ # "flat_primitives": value.flat_primitives,
365
+ # "blackboxes": value.blackboxes,
366
+ # "flat_blackboxes": value.flat_blackboxes,
367
+ # "ins": value.ins,
368
+ # "flat_ins": value.flat_ins,
369
+ # "terms": value.terms,
370
+ # "bit_terms": value.bit_terms,
371
+ # "net_stats": value.net_stats,
372
+ }
373
+ )
374
+ return json_top
375
+
376
+
377
+ def dump_instance_stats_json(instance, stats_file):
378
+ # stats_files = [(InstanceStats.ReportType.JSON, stats_file)]
379
+ # stats_file.write("[\n")
380
+ # dump_instance_stats(design, stats_files)
381
+ # stats_file.write("]")
382
+ instances_stats = InstancesStats()
383
+ compute_instance_stats(instance, instances_stats)
384
+ json_dict = convert_instance_stats_to_json(instances_stats)
385
+ json.dump(json_dict, stats_file, indent=4)
386
+
387
+
388
+ def dump_instance_stats_text(instance, file):
389
+ instances_stats = InstancesStats()
390
+ compute_instance_stats(instance, instances_stats)
391
+ instances_stats.dump_instance_stats_text(instance, file)
297
392
 
298
393
 
299
394
  def dump_constants(design, analyzed_models):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: najaeda
3
- Version: 0.1.8
3
+ Version: 0.1.11
4
4
  Summary: Naja EDA Python package
5
5
  Author-Email: Naja Authors <contact@keplertech.io>
6
6
  License: Apache License 2.0
@@ -119,7 +119,7 @@ also defining conditions for stopping or continuing exploration.
119
119
  def print_instance(instance):
120
120
  print(f"{instance}:{instance.get_model_name()}")
121
121
  visitor_config = instance_visitor.VisitorConfig(callback=print_instance)
122
- instance_visitor.Visitor(top).visit(top, visitor_config)
122
+ instance_visitor.visit(top, visitor_config)
123
123
 
124
124
  Counting the Number of Leaves in a Netlist
125
125
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -143,7 +143,7 @@ This specific use case shows how to count the number of leaf instances in a netl
143
143
  else:
144
144
  leaves["count"] += 1
145
145
  visitor_config = instance_visitor.VisitorConfig(callback=count_leaves, args=(leaves,))
146
- instance_visitor.Visitor(top).visit(top, visitor_config)
146
+ instance_visitor.visit(top, visitor_config)
147
147
  print(f"{top} leaves count")
148
148
  print(f"nb_assigns={leaves['assigns']}")
149
149
  print(f"nb constants={leaves['constants']}")
@@ -158,8 +158,14 @@ This example demonstrates how to perform Dead Logic Elimination (DLE) on a netli
158
158
  def apply_dle(top):
159
159
  # Trace back from design outputs
160
160
  visited = set()
161
- output_terms = top.get_flat_output_terms()
162
- for termToTrace in output_terms:
161
+ traced_terms = top.get_flat_output_terms()
162
+ for leaf in top.get_leaf_children():
163
+ atrributes = list(leaf.get_attributes())
164
+ for attr in atrributes:
165
+ if attr.get_name() == 'DONT_TOUCH' or attr.get_name() == 'KEEP' or attr.get_name() == 'preserve' or attr.get_name() == 'noprune':
166
+ for term in leaf.get_flat_input_terms():
167
+ traced_terms.append(term)
168
+ for termToTrace in traced_terms:
163
169
  queue = deque([termToTrace])
164
170
  while queue:
165
171
  term = queue.popleft()
@@ -174,8 +180,8 @@ This example demonstrates how to perform Dead Logic Elimination (DLE) on a netli
174
180
  input_terms = instance.get_flat_input_terms()
175
181
  queue.extend(input_terms)
176
182
 
177
- leaf_children = top.get_leaf_children()
178
- to_delete = [leaf for leaf in leaf_children if leaf not in instances]
183
+
184
+ to_delete = [leaf for leaf in top.get_leaf_children() if leaf not in instances]
179
185
  for leaf in to_delete:
180
186
  leaf.delete()
181
187
  return to_delete
@@ -0,0 +1,28 @@
1
+ najaeda-0.1.11.dist-info/RECORD,,
2
+ najaeda-0.1.11.dist-info/WHEEL,sha256=vqMBchNIsmW0K9HInUQuY_xePW9YD3coNJy6G1Yfto8,114
3
+ najaeda-0.1.11.dist-info/METADATA,sha256=Kl445PNmMAaclhm5MqkBms6A5AmGvDpGs8aFr36wyMw,7218
4
+ najaeda-0.1.11.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
5
+ najaeda-0.1.11.dist-info/licenses/AUTHORS,sha256=7NYEGDAX_1QZvCCHfq8YVXC5ZbwH_pbNI8DcSmm70GU,377
6
+ najaeda/netlist.py,sha256=xutSwtSsMHtXefn8vG1JVMUm_XZMOv_6wQfxywDvF8U,46275
7
+ najaeda/libnaja_snl_python.dylib,sha256=KLVe7IXlR2eCydK6XTI3ASHJDg8qkZD8kroyXV00BG0,825616
8
+ najaeda/pandas_stats.py,sha256=yOb4ka965U7rN4D6AwvSGmRyeT_O7Ed-5cmT8BFbfeo,1070
9
+ najaeda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ najaeda/libnaja_snl.dylib,sha256=Vnih_WkRfWljfXKCkqkDY43NQ7RtHgCI7-YfS7i0vQY,574176
11
+ najaeda/snl.so,sha256=DjnPH0vqcGKKdGaZDmeDq9r6_8m9w2AwxODv0LTcDqE,98272
12
+ najaeda/stats.py,sha256=xWiIHa-S9yCHgAjyi6fVtx9C96o9v4MkYU7x5GdRKwA,16250
13
+ najaeda/instance_visitor.py,sha256=JMsPSQaWNiDjxS05rxg83a0PIsrOIuTi9G35hkwdibs,1530
14
+ najaeda/docs/requirements.txt,sha256=1XIBGTIplm2arC9HhDCfLuAjozGdVSXkqmOj8ybuT6U,121
15
+ najaeda/docs/.readthedocs.yaml,sha256=nN_Psro-YdfPcIiueZkJcZepts68g23rqVThhKnmVRw,790
16
+ najaeda/docs/source/index.rst,sha256=otNU_o72UQp2jEiF4ymADbfU8OeZqQme0K_JQz4kfSU,394
17
+ najaeda/docs/source/instance.rst,sha256=7B2IBB0p32Tb4qvOCE77OlrQaYpFADvmTlq1q8eyVqw,458
18
+ najaeda/docs/source/conf.py,sha256=iSeerg2pJlZlhtwkJ9edRRYrLEdx3R1p7GWi78dHP1o,2019
19
+ najaeda/docs/source/preprocessor.py,sha256=TK4LsTdNbv2dxkKQaJ7cEyo9PU5v_56vlrFCJYIPKf8,2625
20
+ najaeda/docs/source/term.rst,sha256=QKWT6u1xjEjusvcZYknKQ-M83ibohO5y1EYTQnnXqak,690
21
+ najaeda/docs/source/net.rst,sha256=i6YEir8ZOldSY8-UmPxgVJ4Ot3y-Q6seRkBr2H-KmXc,732
22
+ najaeda/docs/source/visitors.rst,sha256=KScCr7BytrhFxWfZPyYWIrr3CEJuk5Tx-LjEuDnnBaA,227
23
+ najaeda/docs/source/examples.rst.in,sha256=4ZStOA3N5VHbKZgdn2kaEQZL7wPoJwODS2E1BO54uFY,2091
24
+ najaeda/docs/source/equipotential.rst,sha256=0MDi-4fPEsX7K_ezWj5DB3mCalnhqN-sicYbQKYQfNc,335
25
+ najaeda/docs/source/introduction.rst,sha256=kE4qxEJCgcAswiT3rIJS21oBYIMg1cyT_rKmOzQgvsI,2095
26
+ najaeda/docs/source/api.rst,sha256=47VCPyF4Py_1cklZ3q9fmOMhqqI17rxwU_VUJETfCwY,151
27
+ najaeda/primitives/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ najaeda/primitives/xilinx.py,sha256=fuu4KxEIuC0ueCK4C_gds6hzgtJsLE3tjDtOHtY9McM,25947
najaeda/docs/Makefile DELETED
@@ -1,20 +0,0 @@
1
- # Minimal makefile for Sphinx documentation
2
- #
3
-
4
- # You can set these variables from the command line, and also
5
- # from the environment for the first two.
6
- SPHINXOPTS ?=
7
- SPHINXBUILD ?= sphinx-build
8
- SOURCEDIR = source
9
- BUILDDIR = build
10
-
11
- # Put it first so that "make" without argument is like "make help".
12
- help:
13
- @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
-
15
- .PHONY: help Makefile
16
-
17
- # Catch-all target: route all unknown targets to Sphinx using the new
18
- # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19
- %: Makefile
20
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
najaeda/docs/make.bat DELETED
@@ -1,35 +0,0 @@
1
- @ECHO OFF
2
-
3
- pushd %~dp0
4
-
5
- REM Command file for Sphinx documentation
6
-
7
- if "%SPHINXBUILD%" == "" (
8
- set SPHINXBUILD=sphinx-build
9
- )
10
- set SOURCEDIR=source
11
- set BUILDDIR=build
12
-
13
- %SPHINXBUILD% >NUL 2>NUL
14
- if errorlevel 9009 (
15
- echo.
16
- echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
17
- echo.installed, then set the SPHINXBUILD environment variable to point
18
- echo.to the full path of the 'sphinx-build' executable. Alternatively you
19
- echo.may add the Sphinx directory to PATH.
20
- echo.
21
- echo.If you don't have Sphinx installed, grab it from
22
- echo.https://www.sphinx-doc.org/
23
- exit /b 1
24
- )
25
-
26
- if "%1" == "" goto help
27
-
28
- %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29
- goto end
30
-
31
- :help
32
- %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33
-
34
- :end
35
- popd
@@ -1,25 +0,0 @@
1
- najaeda-0.1.8.dist-info/RECORD,,
2
- najaeda-0.1.8.dist-info/WHEEL,sha256=vqMBchNIsmW0K9HInUQuY_xePW9YD3coNJy6G1Yfto8,114
3
- najaeda-0.1.8.dist-info/METADATA,sha256=Gs7f1HbI7hS--g6TbdjGTvnIa85u8WDsmFnAHdslz2g,6880
4
- najaeda-0.1.8.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
5
- najaeda-0.1.8.dist-info/licenses/AUTHORS,sha256=7NYEGDAX_1QZvCCHfq8YVXC5ZbwH_pbNI8DcSmm70GU,377
6
- najaeda/netlist.py,sha256=xcn-v5Vhjt1di8yDJV5T9SKpKIkyXKRnodBzP50RiCw,37044
7
- najaeda/libnaja_snl_python.dylib,sha256=QPhv3dnV7usAOptZ1r3E2xXvQBF8Jd0OtljA0x69X84,808208
8
- najaeda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- najaeda/libnaja_snl.dylib,sha256=AFqR64aX6KnzkX6lrLGCuscx2f5E07umNC_7E9cNrT0,574272
10
- najaeda/snl.so,sha256=d9W9rNMzNl0T88DpH7thDuP3NK6nyVgJYXYKx3Uxm7I,97888
11
- najaeda/stats.py,sha256=9taIJ2ns8E8W_Cm9xThq9-S6Gr6TMPb7qLTJPfx4jFk,12891
12
- najaeda/instance_visitor.py,sha256=2HnQ5y8-0tSOKd9nS4WYiypccQWLJgKfs84wp357Tls,1781
13
- najaeda/docs/requirements.txt,sha256=1XIBGTIplm2arC9HhDCfLuAjozGdVSXkqmOj8ybuT6U,121
14
- najaeda/docs/Makefile,sha256=4zv3TVkTACm6JBaKgTES3ZI9cETXgM6ULbZkXZP1as8,638
15
- najaeda/docs/make.bat,sha256=L4I5T7uDUIjwGyMRJ-y9FoT61sxIyCuaYuJyLt8c-nA,804
16
- najaeda/docs/.readthedocs.yaml,sha256=TL2hK9gR25hw-7_gMeywIqBikAP0mVPRB-O4wGfrdPU,900
17
- najaeda/docs/source/index.rst,sha256=nYkctDLuoue7UMQi5gV-PARChvJDb_3P4e_9NTqzJtc,367
18
- najaeda/docs/source/instance.rst,sha256=uqyHR7dN9po3sN_APC3C8vk7W2MT0ca49memgtFpzCk,517
19
- najaeda/docs/source/conf.py,sha256=GIJ89oFBSXucgDBXLcyyWC-cU_lC3GvfswnmLxm9pVM,1387
20
- najaeda/docs/source/term.rst,sha256=Xh4xis6lR_Oe26Qm3vCt7ziU3PR0cKBBGO8OmCHWt0M,341
21
- najaeda/docs/source/net.rst,sha256=QNkCZp1bp8_h_fUcf4jwPF4DByZmMtiSb56gOki0wSI,331
22
- najaeda/docs/source/equipotential.rst,sha256=1wG1sbwexs9JhxxSY2z9XucsLE0SfopVK7VIty0r3mw,431
23
- najaeda/docs/source/api.rst,sha256=P_-1jiVrIajvFCqP1Wx2W1l6a4T2RHXlWG00rls1qF0,159
24
- najaeda/primitives/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- najaeda/primitives/xilinx.py,sha256=fuu4KxEIuC0ueCK4C_gds6hzgtJsLE3tjDtOHtY9McM,25947