najaeda 0.1.7__cp313-cp313t-macosx_11_0_arm64.whl → 0.1.9__cp313-cp313t-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.
- najaeda/docs/.readthedocs.yaml +3 -14
- najaeda/docs/requirements.txt +7 -0
- najaeda/docs/source/api.rst +2 -2
- najaeda/docs/source/conf.py +21 -4
- najaeda/docs/source/equipotential.rst +15 -0
- najaeda/docs/source/examples.rst.in +66 -0
- najaeda/docs/source/index.rst +7 -1
- najaeda/docs/source/instance.rst +19 -0
- najaeda/docs/source/introduction.rst +53 -0
- najaeda/docs/source/net.rst +20 -0
- najaeda/docs/source/preprocessor.py +73 -0
- najaeda/docs/source/term.rst +20 -0
- najaeda/docs/source/visitors.rst +13 -0
- najaeda/instance_visitor.py +12 -20
- najaeda/libnaja_snl_python.dylib +0 -0
- najaeda/netlist.py +489 -121
- najaeda/stats.py +320 -0
- {najaeda-0.1.7.dist-info → najaeda-0.1.9.dist-info}/METADATA +9 -4
- najaeda-0.1.9.dist-info/RECORD +27 -0
- najaeda/docs/Makefile +0 -20
- najaeda/docs/conf.py +0 -26
- najaeda/docs/make.bat +0 -35
- najaeda-0.1.7.dist-info/RECORD +0 -20
- {najaeda-0.1.7.dist-info → najaeda-0.1.9.dist-info}/WHEEL +0 -0
- {najaeda-0.1.7.dist-info → najaeda-0.1.9.dist-info}/licenses/AUTHORS +0 -0
- {najaeda-0.1.7.dist-info → najaeda-0.1.9.dist-info}/licenses/LICENSE +0 -0
najaeda/stats.py
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2024 The Naja authors <https://github.com/najaeda/naja/blob/main/AUTHORS>
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from najaeda import netlist
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class DesignsStats:
|
|
10
|
+
def __init__(self):
|
|
11
|
+
self.blackboxes = dict()
|
|
12
|
+
self.hier_designs = dict()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class DesignStats:
|
|
16
|
+
def __init__(self):
|
|
17
|
+
self.name = ""
|
|
18
|
+
self.assigns = 0
|
|
19
|
+
self.flat_assigns = 0
|
|
20
|
+
self.basic_primitives = dict()
|
|
21
|
+
self.primitives = dict()
|
|
22
|
+
self.flat_basic_primitives = dict()
|
|
23
|
+
self.flat_primitives = dict()
|
|
24
|
+
self.blackboxes = dict()
|
|
25
|
+
self.flat_blackboxes = dict()
|
|
26
|
+
self.ins = dict()
|
|
27
|
+
self.flat_ins = dict()
|
|
28
|
+
self.terms = dict()
|
|
29
|
+
self.bit_terms = dict()
|
|
30
|
+
self.net_stats = dict()
|
|
31
|
+
|
|
32
|
+
def add_ins_stats(self, ins_stats):
|
|
33
|
+
self.flat_assigns += ins_stats.flat_assigns
|
|
34
|
+
for ins, nb in ins_stats.flat_ins.items():
|
|
35
|
+
self.flat_ins[ins] = self.flat_ins.get(ins, 0) + nb
|
|
36
|
+
for ins, nb in ins_stats.flat_blackboxes.items():
|
|
37
|
+
self.flat_blackboxes[ins] = self.flat_blackboxes.get(ins, 0) + nb
|
|
38
|
+
for primitive, nb in ins_stats.flat_primitives.items():
|
|
39
|
+
self.flat_primitives[primitive] = (
|
|
40
|
+
self.flat_primitives.get(primitive, 0) + nb
|
|
41
|
+
)
|
|
42
|
+
for primitive, nb in ins_stats.flat_basic_primitives.items():
|
|
43
|
+
self.flat_basic_primitives[primitive] = (
|
|
44
|
+
self.flat_basic_primitives.get(primitive, 0) + nb
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def is_basic_primitive(design):
|
|
49
|
+
return (
|
|
50
|
+
design.is_const0() or design.is_const1() or design.is_buf() or design.is_inv()
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
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():
|
|
60
|
+
model_id = ins.get_model_id()
|
|
61
|
+
if ins.is_assign():
|
|
62
|
+
design_stats.assigns += 1
|
|
63
|
+
design_stats.flat_assigns += 1
|
|
64
|
+
elif ins.is_primitive():
|
|
65
|
+
if is_basic_primitive(ins):
|
|
66
|
+
design_stats.basic_primitives[model_id] = (
|
|
67
|
+
design_stats.basic_primitives.get(model_id, 0) + 1
|
|
68
|
+
)
|
|
69
|
+
design_stats.flat_basic_primitives[model_id] = (
|
|
70
|
+
design_stats.flat_basic_primitives.get(model_id, 0) + 1
|
|
71
|
+
)
|
|
72
|
+
else:
|
|
73
|
+
design_stats.primitives[model_id] = (
|
|
74
|
+
design_stats.primitives.get(model_id, 0) + 1
|
|
75
|
+
)
|
|
76
|
+
design_stats.flat_primitives[model_id] = (
|
|
77
|
+
design_stats.flat_primitives.get(model_id, 0) + 1
|
|
78
|
+
)
|
|
79
|
+
elif ins.is_blackbox():
|
|
80
|
+
design_stats.blackboxes[model_id] = (
|
|
81
|
+
design_stats.blackboxes.get(model_id, 0) + 1
|
|
82
|
+
)
|
|
83
|
+
design_stats.flat_blackboxes[model_id] = (
|
|
84
|
+
design_stats.flat_blackboxes.get(model_id, 0) + 1
|
|
85
|
+
)
|
|
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])
|
|
89
|
+
else:
|
|
90
|
+
if model_id in designs_stats.hier_designs:
|
|
91
|
+
model_stats = designs_stats.hier_designs[model_id]
|
|
92
|
+
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():
|
|
105
|
+
if term.get_direction() == netlist.Term.INPUT:
|
|
106
|
+
design_stats.terms["inputs"] = design_stats.terms.get("inputs", 0) + 1
|
|
107
|
+
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
|
|
110
|
+
)
|
|
111
|
+
elif term.get_direction() == netlist.Term.OUTPUT:
|
|
112
|
+
design_stats.terms["outputs"] = design_stats.terms.get("outputs", 0) + 1
|
|
113
|
+
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
|
|
116
|
+
)
|
|
117
|
+
elif term.get_direction() == netlist.Term.INOUT:
|
|
118
|
+
design_stats.terms["inouts"] = design_stats.terms.get("inouts", 0) + 1
|
|
119
|
+
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
|
|
122
|
+
)
|
|
123
|
+
else:
|
|
124
|
+
design_stats.terms["unknowns"] = design_stats.terms.get("unknowns", 0) + 1
|
|
125
|
+
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
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def compute_design_net_stats(design, design_stats):
|
|
132
|
+
for net in design.get_flat_nets():
|
|
133
|
+
if net.is_const():
|
|
134
|
+
pass
|
|
135
|
+
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
|
|
138
|
+
)
|
|
139
|
+
design_stats.net_stats = dict(sorted(design_stats.net_stats.items()))
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def dump_instances(stats_file, title, instances):
|
|
143
|
+
if len(instances) == 0:
|
|
144
|
+
return
|
|
145
|
+
sorted_instances = sorted(
|
|
146
|
+
instances.items(), key=lambda item: netlist.get_model_name(item[0])
|
|
147
|
+
)
|
|
148
|
+
stats_file.write(title + " " + str(sum(j for i, j in sorted_instances)) + "\n")
|
|
149
|
+
line_char = 0
|
|
150
|
+
for instance in sorted_instances:
|
|
151
|
+
model_name = netlist.get_model_name(instance[0])
|
|
152
|
+
if line_char != 0:
|
|
153
|
+
stats_file.write(",")
|
|
154
|
+
line_char += 1
|
|
155
|
+
if line_char > 80:
|
|
156
|
+
stats_file.write("\n")
|
|
157
|
+
line_char = 0
|
|
158
|
+
elif line_char != 0:
|
|
159
|
+
stats_file.write(" ")
|
|
160
|
+
line_char += 1
|
|
161
|
+
instance_char = model_name + ":" + str(instance[1])
|
|
162
|
+
line_char += len(instance_char)
|
|
163
|
+
stats_file.write(instance_char)
|
|
164
|
+
stats_file.write("\n\n")
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def dump_blackboxes_stats(stats_file, design_stats):
|
|
168
|
+
if len(design_stats.blackboxes) > 0:
|
|
169
|
+
stats_file.write("*** BlackBoxes ***\n")
|
|
170
|
+
for bbox in design_stats.blackboxes.items():
|
|
171
|
+
design = bbox[0]
|
|
172
|
+
design_terms = bbox[1]
|
|
173
|
+
stats_file.write("*** " + design.getName() + " ***\n")
|
|
174
|
+
if len(design_terms) > 0:
|
|
175
|
+
stats_file.write("Terms: ")
|
|
176
|
+
first = True
|
|
177
|
+
for terms in design_terms.items():
|
|
178
|
+
if not first:
|
|
179
|
+
stats_file.write(", ")
|
|
180
|
+
else:
|
|
181
|
+
first = False
|
|
182
|
+
stats_file.write(terms[0] + ":" + str(terms[1]))
|
|
183
|
+
stats_file.write("\n")
|
|
184
|
+
stats_file.write("\n")
|
|
185
|
+
|
|
186
|
+
|
|
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
|
+
# def dump_pandas(designs_stats):
|
|
239
|
+
# import pandas
|
|
240
|
+
# import matplotlib.pyplot as plt
|
|
241
|
+
#
|
|
242
|
+
# #create a figures directory erase the previous one
|
|
243
|
+
# if os.path.exists('figures'):
|
|
244
|
+
# import shutil
|
|
245
|
+
# shutil.rmtree('figures')
|
|
246
|
+
# os.makedirs('figures')
|
|
247
|
+
#
|
|
248
|
+
# data = []
|
|
249
|
+
# for design, design_stats in designs_stats.hier_designs.items():
|
|
250
|
+
# data.append([
|
|
251
|
+
# design.getName(),
|
|
252
|
+
# sum(design_stats.terms.values()),
|
|
253
|
+
# sum(design_stats.bit_terms.values()),
|
|
254
|
+
# sum(design_stats.basic_primitives.values()),
|
|
255
|
+
# sum(design_stats.primitives.values()),
|
|
256
|
+
# sum(design_stats.blackboxes.values()),
|
|
257
|
+
# sum(design_stats.ins.values()),
|
|
258
|
+
# sum(design_stats.flat_ins.values()),
|
|
259
|
+
# sum(design_stats.flat_blackboxes.values()),
|
|
260
|
+
# sum(design_stats.flat_basic_primitives.values()),
|
|
261
|
+
# sum(design_stats.flat_primitives.values())])
|
|
262
|
+
# df = pandas.DataFrame(data, columns=[
|
|
263
|
+
# 'Design', 'Terms', 'Bit Terms',
|
|
264
|
+
# 'Basic Primitives', 'Primitives', 'Blackboxes', 'Instances',
|
|
265
|
+
# 'Flat Instances', 'Flat Blackboxes',
|
|
266
|
+
# 'Flat Basic Primitives', 'Flat Primitives'])
|
|
267
|
+
# df.to_csv('figures/designs_stats.csv', index=False)
|
|
268
|
+
#
|
|
269
|
+
# net_series = pandas.Series(design_stats.net_stats)
|
|
270
|
+
# nets_plot = net_series.plot(kind='bar',
|
|
271
|
+
# title='Number of nets with a given number of components for\n' + design.getName(),
|
|
272
|
+
# xlabel='number of components', ylabel='number of nets')
|
|
273
|
+
# nets_plot.set_yscale('log')
|
|
274
|
+
# nets_plot.xaxis.set_major_locator(plt.MaxNLocator(100))
|
|
275
|
+
# nets_figure = nets_plot.get_figure()
|
|
276
|
+
# nets_figure.tight_layout()
|
|
277
|
+
# nets_figure.savefig('figures/nets_' + design.getName() + '.png')
|
|
278
|
+
#
|
|
279
|
+
# flat_primitives_series = pandas.Series(design_stats.flat_primitives)
|
|
280
|
+
# primitives_plot = flat_primitives_series.plot(kind='bar',
|
|
281
|
+
# title='Number of primitives for\n' + design.getName(),
|
|
282
|
+
# xlabel='primitive', ylabel='number of flat instances')
|
|
283
|
+
# primitives_plot.set_yscale('log')
|
|
284
|
+
# primitives_figure = primitives_plot.get_figure()
|
|
285
|
+
# primitives_figure.tight_layout()
|
|
286
|
+
# primitives_figure.savefig('figures/flat_primitives_' + design.getName() + '.png')
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def 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)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def dump_constants(design, analyzed_models):
|
|
300
|
+
if design.isPrimitive():
|
|
301
|
+
return
|
|
302
|
+
if design in analyzed_models:
|
|
303
|
+
return
|
|
304
|
+
analyzed_models.add(design)
|
|
305
|
+
for bitnet in design.getBitNets():
|
|
306
|
+
if bitnet.isConstant():
|
|
307
|
+
message = f"In design {design.getName()}, \
|
|
308
|
+
constant net {bitnet.getName()} \
|
|
309
|
+
of type {bitnet.getTypeAsString()}"
|
|
310
|
+
logging.info(message)
|
|
311
|
+
if all(False for _ in bitnet.getComponents()):
|
|
312
|
+
logging.info(" with zero connections\n")
|
|
313
|
+
else:
|
|
314
|
+
logging.info(" connected to:\n")
|
|
315
|
+
for component in bitnet.getComponents():
|
|
316
|
+
logging.info(str(component) + "\n")
|
|
317
|
+
|
|
318
|
+
for ins in design.getInstances():
|
|
319
|
+
model = ins.getModel()
|
|
320
|
+
dump_constants(model, analyzed_models)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: najaeda
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
4
4
|
Summary: Naja EDA Python package
|
|
5
5
|
Author-Email: Naja Authors <contact@keplertech.io>
|
|
6
6
|
License: Apache License 2.0
|
|
@@ -54,6 +54,11 @@ Install Naja EDA using pip:
|
|
|
54
54
|
|
|
55
55
|
pip install najaeda
|
|
56
56
|
|
|
57
|
+
Documentation
|
|
58
|
+
-------------
|
|
59
|
+
|
|
60
|
+
Naja EDA online documentation is available `here <https://najaeda.readthedocs.io/en/latest/index.html>`_.
|
|
61
|
+
|
|
57
62
|
Examples
|
|
58
63
|
--------
|
|
59
64
|
|
|
@@ -92,7 +97,7 @@ easily extended in the future. Don't hesitate to reach out if you need help.
|
|
|
92
97
|
|
|
93
98
|
netlist.load_primitives('xilinx')
|
|
94
99
|
benchmarks = path.join('..','benchmarks')
|
|
95
|
-
top = netlist.load_verilog([path.join(benchmarks, 'verilog', '
|
|
100
|
+
top = netlist.load_verilog([path.join(benchmarks, 'verilog', 'vexriscv.v')])
|
|
96
101
|
|
|
97
102
|
Print all the instances in the netlist
|
|
98
103
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
@@ -114,7 +119,7 @@ also defining conditions for stopping or continuing exploration.
|
|
|
114
119
|
def print_instance(instance):
|
|
115
120
|
print(f"{instance}:{instance.get_model_name()}")
|
|
116
121
|
visitor_config = instance_visitor.VisitorConfig(callback=print_instance)
|
|
117
|
-
instance_visitor.
|
|
122
|
+
instance_visitor.visit(top, visitor_config)
|
|
118
123
|
|
|
119
124
|
Counting the Number of Leaves in a Netlist
|
|
120
125
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
@@ -138,7 +143,7 @@ This specific use case shows how to count the number of leaf instances in a netl
|
|
|
138
143
|
else:
|
|
139
144
|
leaves["count"] += 1
|
|
140
145
|
visitor_config = instance_visitor.VisitorConfig(callback=count_leaves, args=(leaves,))
|
|
141
|
-
instance_visitor.
|
|
146
|
+
instance_visitor.visit(top, visitor_config)
|
|
142
147
|
print(f"{top} leaves count")
|
|
143
148
|
print(f"nb_assigns={leaves['assigns']}")
|
|
144
149
|
print(f"nb constants={leaves['constants']}")
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
najaeda-0.1.9.dist-info/RECORD,,
|
|
2
|
+
najaeda-0.1.9.dist-info/WHEEL,sha256=WOiMFvo9bzNKIh5Rxx7xDwR4DzXJ4VAFWxSvvQdE_uA,115
|
|
3
|
+
najaeda-0.1.9.dist-info/METADATA,sha256=mLCLaVsZwtrgbmzHBHz5w9mjqDzjNev79QSgW4VD9I0,6854
|
|
4
|
+
najaeda-0.1.9.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
5
|
+
najaeda-0.1.9.dist-info/licenses/AUTHORS,sha256=7NYEGDAX_1QZvCCHfq8YVXC5ZbwH_pbNI8DcSmm70GU,377
|
|
6
|
+
najaeda/netlist.py,sha256=SYVF3z_koUwaRczDTVeDsVo9fT1OMw77R-1U3cLahk0,44955
|
|
7
|
+
najaeda/libnaja_snl_python.dylib,sha256=QKP4uRE-cKA-VTAq-CrNxbNfeqlQ391lxYyc_XeUGQU,808320
|
|
8
|
+
najaeda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
najaeda/libnaja_snl.dylib,sha256=AFqR64aX6KnzkX6lrLGCuscx2f5E07umNC_7E9cNrT0,574272
|
|
10
|
+
najaeda/snl.so,sha256=Og454YB20jBXM9_5w2YG0e-yDHX95KaJxdGK-6FvjW4,97888
|
|
11
|
+
najaeda/stats.py,sha256=FoNdmu7bf-Iy1RW1WO-4Ue-i7O7CRqEDbGAuyhfVxf4,12879
|
|
12
|
+
najaeda/instance_visitor.py,sha256=JMsPSQaWNiDjxS05rxg83a0PIsrOIuTi9G35hkwdibs,1530
|
|
13
|
+
najaeda/docs/requirements.txt,sha256=1XIBGTIplm2arC9HhDCfLuAjozGdVSXkqmOj8ybuT6U,121
|
|
14
|
+
najaeda/docs/.readthedocs.yaml,sha256=nN_Psro-YdfPcIiueZkJcZepts68g23rqVThhKnmVRw,790
|
|
15
|
+
najaeda/docs/source/index.rst,sha256=otNU_o72UQp2jEiF4ymADbfU8OeZqQme0K_JQz4kfSU,394
|
|
16
|
+
najaeda/docs/source/instance.rst,sha256=7B2IBB0p32Tb4qvOCE77OlrQaYpFADvmTlq1q8eyVqw,458
|
|
17
|
+
najaeda/docs/source/conf.py,sha256=iSeerg2pJlZlhtwkJ9edRRYrLEdx3R1p7GWi78dHP1o,2019
|
|
18
|
+
najaeda/docs/source/preprocessor.py,sha256=TK4LsTdNbv2dxkKQaJ7cEyo9PU5v_56vlrFCJYIPKf8,2625
|
|
19
|
+
najaeda/docs/source/term.rst,sha256=QKWT6u1xjEjusvcZYknKQ-M83ibohO5y1EYTQnnXqak,690
|
|
20
|
+
najaeda/docs/source/net.rst,sha256=i6YEir8ZOldSY8-UmPxgVJ4Ot3y-Q6seRkBr2H-KmXc,732
|
|
21
|
+
najaeda/docs/source/visitors.rst,sha256=KScCr7BytrhFxWfZPyYWIrr3CEJuk5Tx-LjEuDnnBaA,227
|
|
22
|
+
najaeda/docs/source/examples.rst.in,sha256=4ZStOA3N5VHbKZgdn2kaEQZL7wPoJwODS2E1BO54uFY,2091
|
|
23
|
+
najaeda/docs/source/equipotential.rst,sha256=0MDi-4fPEsX7K_ezWj5DB3mCalnhqN-sicYbQKYQfNc,335
|
|
24
|
+
najaeda/docs/source/introduction.rst,sha256=kE4qxEJCgcAswiT3rIJS21oBYIMg1cyT_rKmOzQgvsI,2095
|
|
25
|
+
najaeda/docs/source/api.rst,sha256=47VCPyF4Py_1cklZ3q9fmOMhqqI17rxwU_VUJETfCwY,151
|
|
26
|
+
najaeda/primitives/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
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/conf.py
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#...
|
|
2
|
-
#extensions = [
|
|
3
|
-
# "breathe",
|
|
4
|
-
# 'sphinx_rtd_theme',
|
|
5
|
-
#]
|
|
6
|
-
#...
|
|
7
|
-
|
|
8
|
-
project = 'najaeda'
|
|
9
|
-
copyright = '2023, The Naja authors'
|
|
10
|
-
author = 'The Naja authors'
|
|
11
|
-
|
|
12
|
-
html_theme = "sphinx_rtd_theme"
|
|
13
|
-
html_title = "najaeda Documentation"
|
|
14
|
-
|
|
15
|
-
breathe_default_project = "najaeda"
|
|
16
|
-
|
|
17
|
-
#import os
|
|
18
|
-
#if 'IN_READ_THE_DOCS' in os.environ:
|
|
19
|
-
# import subprocess
|
|
20
|
-
# #call doxygen from cmake
|
|
21
|
-
# subprocess.call('mkdir build', shell=True)
|
|
22
|
-
# subprocess.call('cd build; cmake ../.. -DBUILD_ONLY_DOC=ON', shell=True)
|
|
23
|
-
# subprocess.call('cd build; make docs', shell=True)
|
|
24
|
-
# subprocess.call('cd build/docs; pwd; ls -all', shell=True)
|
|
25
|
-
#
|
|
26
|
-
#breathe_projects = { "najaeda" : "./build/docs/xml/" }
|
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
|
najaeda-0.1.7.dist-info/RECORD
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
najaeda/netlist.py,sha256=_ojRBNwyvfcrsuoNRpCc1LCIo6uzFQSQcmaTR7qvOQc,34660
|
|
2
|
-
najaeda/libnaja_snl_python.dylib,sha256=5CZL5d8olzs7TAOe8LtajpoSd5k6UAUuXCvfnSLlzsI,741152
|
|
3
|
-
najaeda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
najaeda/libnaja_snl.dylib,sha256=AFqR64aX6KnzkX6lrLGCuscx2f5E07umNC_7E9cNrT0,574272
|
|
5
|
-
najaeda/snl.so,sha256=Og454YB20jBXM9_5w2YG0e-yDHX95KaJxdGK-6FvjW4,97888
|
|
6
|
-
najaeda/instance_visitor.py,sha256=2HnQ5y8-0tSOKd9nS4WYiypccQWLJgKfs84wp357Tls,1781
|
|
7
|
-
najaeda/docs/Makefile,sha256=4zv3TVkTACm6JBaKgTES3ZI9cETXgM6ULbZkXZP1as8,638
|
|
8
|
-
najaeda/docs/conf.py,sha256=XmqDjqssSJswFPmC7RhVS_dYKOjzML4UmrbhUowF78M,653
|
|
9
|
-
najaeda/docs/make.bat,sha256=L4I5T7uDUIjwGyMRJ-y9FoT61sxIyCuaYuJyLt8c-nA,804
|
|
10
|
-
najaeda/docs/.readthedocs.yaml,sha256=yP012ik240oBTMApJYBOvjhNzFDzsAI4vmqX1R7KDrA,988
|
|
11
|
-
najaeda/docs/source/index.rst,sha256=VBWfJySZ9v8mWfWt3kuSCZh7Gp0zUrFjXGQH7tZZfy0,323
|
|
12
|
-
najaeda/docs/source/conf.py,sha256=3qkykCg12ZYqawHl8VEg2Fti6rc3G-soGYM0L6zL3CU,1387
|
|
13
|
-
najaeda/docs/source/api.rst,sha256=H2Bw0JmHS9z-NhQARepmH74wsWHzjSVPbeXppSmtgCQ,141
|
|
14
|
-
najaeda/primitives/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
-
najaeda/primitives/xilinx.py,sha256=fuu4KxEIuC0ueCK4C_gds6hzgtJsLE3tjDtOHtY9McM,25947
|
|
16
|
-
najaeda-0.1.7.dist-info/RECORD,,
|
|
17
|
-
najaeda-0.1.7.dist-info/WHEEL,sha256=WOiMFvo9bzNKIh5Rxx7xDwR4DzXJ4VAFWxSvvQdE_uA,115
|
|
18
|
-
najaeda-0.1.7.dist-info/METADATA,sha256=4ac4lOScunYkRke1pZTzxQiLM3XwMGQxbekUHq2PMdw,6752
|
|
19
|
-
najaeda-0.1.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
20
|
-
najaeda-0.1.7.dist-info/licenses/AUTHORS,sha256=7NYEGDAX_1QZvCCHfq8YVXC5ZbwH_pbNI8DcSmm70GU,377
|
|
File without changes
|
|
File without changes
|
|
File without changes
|