from LIBERTY import *

library = Library("test")

# Attributes
library.addAttribute("default_inout_pin_cap",  Attribute.Type.Double, "0.011")
library.addAttribute("default_wire_load_mode", Attribute.Type.String, "enclosed")
library.addAttribute("time_unit",              Attribute.Type.Unit,   "1", "ns")
library.addAttribute("capacitive_load_unit",   Attribute.Type.Unit,   "1", "pf")

# WireLoads
library.addWireLoad("medium")
wireLoad = library.getWireLoad("medium")
wireLoad.addAttribute("slope",         Attribute.Type.Double, "200")
wireLoad.addAttribute("fanout_length", Attribute.Type.Pair,   "1", "200")

# WireLoadSelection
library.addWireLoadSelection("medium")
wireLoadSelection = library.getWireLoadSelection()
wireLoadSelection.addWireLoadArea(0, 500, "small")

# Cells
library.addCell("inv")
cell = library.getCell("inv")
cell.addAttribute("area",           Attribute.Type.Double, "1")
cell.addAttribute("cell_footprint", Attribute.Type.String, "inv")

# Pins
cell.addPin("e")
pin = cell.getPin("e")
pin.addAttribute("direction",   Attribute.Type.String, "input")
pin.addAttribute("capacitance", Attribute.Type.Double, "0.008")

cell.addPin("s")
pin = cell.getPin("s")
pin.addAttribute("direction", Attribute.Type.String, "output")
pin.addAttribute("function",  Attribute.Type.String, "i'")

# Timing
pin.addTiming()
timing = pin.getTimings()[-1]
timing.addAttribute("timing_sense",   Attribute.Type.String, "negative_unate")
timing.addAttribute("related_pin",    Attribute.Type.String, "e")
timing.addAttribute("intrinsic_rise", Attribute.Type.Double, "0.101")

# Write
library.writeToFile("testDrive.lib")