1#![doc(
50 html_playground_url = "https://play.rust-lang.org",
57)]
58#![deny(
74 anonymous_parameters,
77 bare_trait_objects,
78 elided_lifetimes_in_paths, missing_debug_implementations,
81 trivial_numeric_casts,
84 unstable_features,
86 unused_extern_crates,
87 unused_import_braces,
88 unreachable_pub, unused_results, variant_size_differences,
92 clippy::all,
94 clippy::restriction,
95 clippy::pedantic,
96 clippy::nursery,
97 clippy::cargo
98)]
99#![allow(
100 clippy::arbitrary_source_item_ordering,
102 clippy::allow_attributes_without_reason,
103 clippy::default_numeric_fallback,
104 clippy::pattern_type_mismatch, clippy::too_long_first_doc_paragraph,
106 clippy::partial_pub_fields,
107 clippy::single_char_lifetime_names,
108 clippy::while_let_on_iterator,
109 clippy::iter_over_hash_type,
110 clippy::separated_literal_suffix,
111 clippy::single_call_fn,
112 clippy::pub_use,
113 clippy::or_fun_call,
114 clippy::pub_with_shorthand,
115 clippy::ignored_unit_patterns,
116 clippy::mod_module_files,
117 clippy::todo,
118 clippy::unreachable,
119 clippy::missing_trait_methods,
120 clippy::min_ident_chars,
121 clippy::missing_docs_in_private_items,
122 clippy::blanket_clippy_restriction_lints, clippy::implicit_return, clippy::module_name_repetitions, clippy::multiple_crate_versions, clippy::panic, clippy::panic_in_result_fn,
128 clippy::missing_errors_doc, clippy::exhaustive_structs,
130 clippy::exhaustive_enums,
131 clippy::missing_panics_doc, clippy::print_stdout,
133 clippy::absolute_paths,
134 clippy::use_debug,
135 clippy::question_mark_used,
136 clippy::used_underscore_binding,
137)]
138#![warn(
139 clippy::manual_map,
140 clippy::shadow_reuse,
141 clippy::option_if_let_else,
142 clippy::wildcard_enum_match_arm,
143 clippy::needless_return,
144 clippy::same_name_method,
145 clippy::missing_inline_in_public_items,
146 clippy::doc_markdown,
147 dead_code,
148 missing_copy_implementations, unused_qualifications,
152)]
153#![cfg_attr(
154 test,
155 allow(
156 dead_code,
157 unused,
158 unused_imports,
159 unused_results,
160 clippy::trivially_copy_pass_by_ref,
161 clippy::shadow_unrelated,
162 clippy::default_numeric_fallback,
163 clippy::unreadable_literal,
164 clippy::type_complexity,
165 clippy::unwrap_used,
166 clippy::expect_used,
167 clippy::too_many_lines,
168 clippy::float_arithmetic,
169 clippy::non_ascii_literal,
170 clippy::must_use_candidate,
171 clippy::needless_raw_strings,
172 clippy::cast_possible_truncation,
173 clippy::as_conversions,
174 clippy::needless_raw_string_hashes,
175 clippy::indexing_slicing,
176 clippy::arithmetic_side_effects,
177 clippy::field_reassign_with_default,
178 clippy::undocumented_unsafe_blocks,
179 clippy::or_fun_call,
180 )
181)]
182#[expect(unused_imports)]
183#[cfg(not(feature = "tracing"))]
184use log::{debug, error, info, trace, warn};
185#[expect(unused_imports)]
186#[cfg(feature = "tracing")]
187use tracing::{debug, error, info, trace, warn};
188
189#[cfg(any(feature = "lut_template", feature = "py"))]
190extern crate alloc;
191pub use biodivine_lib_bdd;
192pub use strum::IntoEnumIterator;
193pub mod cell;
195pub use cell::Cell;
196pub mod common;
198pub mod expression;
200pub mod internal_power;
202pub use internal_power::{InternalPower, InternalPowerId};
203pub mod library;
205pub mod table;
207pub use library::Library;
208pub mod pin;
212pub use pin::{Pin, PinId};
213pub mod timing;
215pub use timing::{Timing, TimingId};
216#[cfg(feature = "py")]
217mod py;
218pub mod units;
219pub use mut_set::{Item, MutSetExt};
220
221pub mod ast;
222pub use ast::Group;
223
224pub mod ccsn;
226mod ctx;
227pub use ctx::{Ctx, DefaultCtx};
228
229#[cfg(test)]
230#[test]
231fn demo() {
232 use crate::{DefaultCtx, Library, MutSetExt as _, PinId};
233 use std::{
234 fs::File,
235 io::{BufWriter, Write as _},
236 };
237 static TEMPLATE: &str = r#"
238library(demo) {
239 time_unit : "1ps";
240 voltage_unit : "10mV";
241 current_unit : "1uA";
242 operating_conditions ( typical ) {
243 process : 1;
244 voltage : 1.1;
245 }
246 lu_table_template(delay_template_4x5) {
247 variable_1 : total_output_net_capacitance;
248 variable_2 : input_net_transition;
249 index_1 ("1000.0, 1001.0, 1002.0, 1003.0");
250 index_2 ("1000.0, 1001.0, 1002.0, 1003.0, 1004.0");
251 }
252 cell (DFF) {
253 pin (D) {}
254 pin (CK) {}
255 pin (Q) {}
256 }
257}"#;
258 let mut library = Library::<DefaultCtx>::parse_lib(TEMPLATE, None).unwrap();
259 library.cell.get_mut("DFF").map(|cell_dff| {
261 cell_dff
262 .pin
263 .get_mut(&PinId::from("CK"))
264 .map(|pin_ck| pin_ck.clock = Some(true))
265 });
266 println!("{library}");
268 let out_file = File::create("demo.lib").unwrap();
270 let mut writer = BufWriter::new(out_file);
271 write!(&mut writer, "{library}").unwrap();
272}