Coverage for qpdk / __init__.py: 86%

29 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-14 10:27 +0000

1"""Quantum pdk.""" 

2 

3import importlib 

4import inspect 

5import pkgutil 

6from functools import lru_cache, partial 

7 

8import gdsfactory as gf 

9from gdsfactory.cross_section import get_cross_sections 

10from gdsfactory.get_factories import get_cells 

11from gdsfactory.pdk import Pdk 

12 

13import qpdk.samples 

14from qpdk import cells, config, helper, tech 

15from qpdk.config import PATH 

16from qpdk.logger import logger 

17from qpdk.tech import ( 

18 LAYER, 

19 LAYER_CONNECTIVITY, 

20 LAYER_STACK, 

21 LAYER_VIEWS, 

22 routing_strategies, 

23) 

24 

25gf.CONF.layer_error_path = LAYER.ERROR_PATH 

26 

27try: 

28 from .models import models as _models 

29except ImportError as e: 

30 logger.info( 

31 "QPDK model dependencies (pip install qpdk[models]) not installed. No models will be set in PDK." 

32 ) 

33 logger.debug(f"Reason for missing models: {e!r}") 

34 _models = {} 

35 

36# _models = get_models() 

37_cells = get_cells(cells) 

38_cross_sections = get_cross_sections(tech) 

39 

40 

41@lru_cache 

42def get_pdk() -> Pdk: 

43 """Return Quantum PDK.""" 

44 return Pdk( 

45 name="qpdk", 

46 cells=_cells, 

47 cross_sections=_cross_sections, # type: ignore 

48 layers=LAYER, 

49 layer_stack=LAYER_STACK, 

50 layer_views=LAYER_VIEWS, 

51 models=_models, 

52 routing_strategies=routing_strategies, 

53 connectivity=LAYER_CONNECTIVITY, 

54 ) 

55 

56 

57PDK = get_pdk() 

58 

59# Get all functions from qpdk.samples module that are component generators 

60sample_functions = { 

61 f"{modname}.{name}": obj 

62 for importer, modname, ispkg in pkgutil.walk_packages( 

63 qpdk.samples.__path__, qpdk.samples.__name__ + "." 

64 ) 

65 for name, obj in inspect.getmembers(importlib.import_module(modname)) 

66 if (inspect.isfunction(obj) or isinstance(obj, partial)) 

67 and not name.startswith("_") 

68 # Compare .func if exists (for partials), otherwise obj itself 

69 and getattr(obj, "func", obj).__module__ == modname 

70} 

71 

72__all__ = [ 

73 "LAYER", 

74 "LAYER_STACK", 

75 "LAYER_VIEWS", 

76 "PATH", 

77 "cells", 

78 "config", 

79 "helper", 

80 "logger", 

81 "tech", 

82] 

83__version__ = "0.3.0"