pyedb 0.51.2__tar.gz → 0.52.0__tar.gz

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 pyedb might be problematic. Click here for more details.

Files changed (290) hide show
  1. {pyedb-0.51.2 → pyedb-0.52.0}/PKG-INFO +4 -4
  2. {pyedb-0.51.2 → pyedb-0.52.0}/pyproject.toml +3 -3
  3. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/__init__.py +1 -1
  4. pyedb-0.52.0/src/pyedb/configuration/configuration.py +461 -0
  5. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/padstacks_data.py +8 -2
  6. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/layout_validation.py +3 -13
  7. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/stackup.py +4 -3
  8. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/edb.py +35 -1
  9. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/materials.py +7 -7
  10. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/pin_pair_model.py +1 -1
  11. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/net/differential_pair.py +2 -1
  12. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/source_excitations.py +10 -10
  13. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/edb.py +86 -173
  14. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/edb_init.py +4 -2
  15. pyedb-0.52.0/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  16. pyedb-0.51.2/src/pyedb/configuration/configuration.py +0 -615
  17. pyedb-0.51.2/src/pyedb/grpc/database/__init__.py +0 -1
  18. {pyedb-0.51.2 → pyedb-0.52.0}/LICENSE +0 -0
  19. {pyedb-0.51.2 → pyedb-0.52.0}/README.md +0 -0
  20. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/common/__init__.py +0 -0
  21. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/common/nets.py +0 -0
  22. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/component_libraries/ansys_components.py +0 -0
  23. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/__init__.py +0 -0
  24. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_boundaries.py +0 -0
  25. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_common.py +0 -0
  26. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_components.py +0 -0
  27. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_data.py +0 -0
  28. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_general.py +0 -0
  29. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_modeler.py +0 -0
  30. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_nets.py +0 -0
  31. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_operations.py +0 -0
  32. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_package_definition.py +0 -0
  33. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_padstacks.py +0 -0
  34. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_pin_groups.py +0 -0
  35. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_ports_sources.py +0 -0
  36. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_s_parameter_models.py +0 -0
  37. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_setup.py +0 -0
  38. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_spice_models.py +0 -0
  39. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/configuration/cfg_stackup.py +0 -0
  40. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/__init__.py +0 -0
  41. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/clr_module.py +0 -0
  42. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/Variables.py +0 -0
  43. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/__init__.py +0 -0
  44. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/__init__.py +0 -0
  45. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/connectable.py +0 -0
  46. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/__init__.py +0 -0
  47. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/component.py +0 -0
  48. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/hierarchy_obj.py +0 -0
  49. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/model.py +0 -0
  50. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/netlist_model.py +0 -0
  51. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/pin_pair_model.py +0 -0
  52. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/s_parameter_model.py +0 -0
  53. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/hierarchy/spice_model.py +0 -0
  54. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/layout.py +0 -0
  55. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/layout_obj.py +0 -0
  56. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/primitive/__init__.py +0 -0
  57. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/primitive/bondwire.py +0 -0
  58. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/primitive/path.py +0 -0
  59. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/primitive/primitive.py +0 -0
  60. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/__init__.py +0 -0
  61. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/bundle_terminal.py +0 -0
  62. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/edge_terminal.py +0 -0
  63. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/padstack_instance_terminal.py +0 -0
  64. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +0 -0
  65. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/point_terminal.py +0 -0
  66. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/terminal/terminal.py +0 -0
  67. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/cell/voltage_regulator.py +0 -0
  68. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/components.py +0 -0
  69. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/__init__.py +0 -0
  70. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/component_def.py +0 -0
  71. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/component_model.py +0 -0
  72. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/definition_obj.py +0 -0
  73. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/definitions.py +0 -0
  74. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/definition/package_def.py +0 -0
  75. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/dotnet/__init__.py +0 -0
  76. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/dotnet/database.py +0 -0
  77. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/dotnet/primitive.py +0 -0
  78. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/__init__.py +0 -0
  79. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/control_file.py +0 -0
  80. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/design_options.py +0 -0
  81. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/edbvalue.py +0 -0
  82. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/hfss_extent_info.py +0 -0
  83. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/layer_data.py +0 -0
  84. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/nets_data.py +0 -0
  85. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/ports.py +0 -0
  86. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/primitives_data.py +0 -0
  87. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/raptor_x_simulation_setup_data.py +0 -0
  88. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/simulation_configuration.py +0 -0
  89. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/sources.py +0 -0
  90. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/utilities.py +0 -0
  91. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/edb_data/variables.py +0 -0
  92. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/general.py +0 -0
  93. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/geometry/__init__.py +0 -0
  94. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/geometry/point_data.py +0 -0
  95. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/geometry/polygon_data.py +0 -0
  96. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/hfss.py +0 -0
  97. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/layout_obj_instance.py +0 -0
  98. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/materials.py +0 -0
  99. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/modeler.py +0 -0
  100. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/net_class.py +0 -0
  101. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/nets.py +0 -0
  102. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/padstack.py +0 -0
  103. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/__init__.py +0 -0
  104. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/__init__.py +0 -0
  105. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  106. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/mesh_operation.py +0 -0
  107. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/settings.py +0 -0
  108. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/sim_setup_info.py +0 -0
  109. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/simulation_settings.py +0 -0
  110. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/siw_dc_ir_settings.py +0 -0
  111. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/data/sweep_data.py +0 -0
  112. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/io/__init__.py +0 -0
  113. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/sim_setup_data/io/siwave.py +0 -0
  114. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/siwave.py +0 -0
  115. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/__init__.py +0 -0
  116. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/heatsink.py +0 -0
  117. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/hfss_simulation_setup.py +0 -0
  118. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/obj_base.py +0 -0
  119. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/simulation_setup.py +0 -0
  120. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/dotnet/database/utilities/siwave_simulation_setup.py +0 -0
  121. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/edb_logger.py +0 -0
  122. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/exceptions.py +0 -0
  123. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/extensions/__init__.py +0 -0
  124. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/extensions/via_design_backend.py +0 -0
  125. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/__init__.py +0 -0
  126. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/constants.py +0 -0
  127. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/data_handlers.py +0 -0
  128. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/design_types.py +0 -0
  129. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/filesystem.py +0 -0
  130. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/general_methods.py +0 -0
  131. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/plot.py +0 -0
  132. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/process.py +0 -0
  133. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/generic/settings.py +0 -0
  134. {pyedb-0.51.2/src/pyedb/grpc/database/definition → pyedb-0.52.0/src/pyedb/grpc/database}/__init__.py +0 -0
  135. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/components.py +0 -0
  136. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/control_file.py +0 -0
  137. {pyedb-0.51.2/src/pyedb/grpc/database/geometry → pyedb-0.52.0/src/pyedb/grpc/database/definition}/__init__.py +0 -0
  138. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/component_def.py +0 -0
  139. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/component_model.py +0 -0
  140. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/component_pin.py +0 -0
  141. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/n_port_component_model.py +0 -0
  142. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/package_def.py +0 -0
  143. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definition/padstack_def.py +0 -0
  144. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/definitions.py +0 -0
  145. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/general.py +0 -0
  146. {pyedb-0.51.2/src/pyedb/grpc/database/hierarchy → pyedb-0.52.0/src/pyedb/grpc/database/geometry}/__init__.py +0 -0
  147. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/geometry/arc_data.py +0 -0
  148. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/geometry/point_3d_data.py +0 -0
  149. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/geometry/point_data.py +0 -0
  150. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/geometry/polygon_data.py +0 -0
  151. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hfss.py +0 -0
  152. {pyedb-0.51.2/src/pyedb/grpc/database/layers → pyedb-0.52.0/src/pyedb/grpc/database/hierarchy}/__init__.py +0 -0
  153. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/component.py +0 -0
  154. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/model.py +0 -0
  155. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/netlist_model.py +0 -0
  156. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/pingroup.py +0 -0
  157. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/s_parameter_model.py +0 -0
  158. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/hierarchy/spice_model.py +0 -0
  159. {pyedb-0.51.2/src/pyedb/grpc/database/layout → pyedb-0.52.0/src/pyedb/grpc/database/layers}/__init__.py +0 -0
  160. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layers/layer.py +0 -0
  161. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layers/stackup_layer.py +0 -0
  162. {pyedb-0.51.2/src/pyedb/grpc/database/net → pyedb-0.52.0/src/pyedb/grpc/database/layout}/__init__.py +0 -0
  163. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layout/cell.py +0 -0
  164. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layout/layout.py +0 -0
  165. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layout/voltage_regulator.py +0 -0
  166. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/layout_validation.py +0 -0
  167. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/modeler.py +0 -0
  168. {pyedb-0.51.2/src/pyedb/grpc/database/ports → pyedb-0.52.0/src/pyedb/grpc/database/net}/__init__.py +0 -0
  169. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/net/extended_net.py +0 -0
  170. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/net/net.py +0 -0
  171. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/net/net_class.py +0 -0
  172. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/nets.py +0 -0
  173. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/padstacks.py +0 -0
  174. {pyedb-0.51.2/src/pyedb/grpc/database/simulation_setup → pyedb-0.52.0/src/pyedb/grpc/database/ports}/__init__.py +0 -0
  175. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/ports/ports.py +0 -0
  176. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/__init__.py +0 -0
  177. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/bondwire.py +0 -0
  178. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/circle.py +0 -0
  179. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/padstack_instance.py +0 -0
  180. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/path.py +0 -0
  181. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/polygon.py +0 -0
  182. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/primitive.py +0 -0
  183. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/primitive/rectangle.py +0 -0
  184. {pyedb-0.51.2/src/pyedb/grpc/database/terminal → pyedb-0.52.0/src/pyedb/grpc/database/simulation_setup}/__init__.py +0 -0
  185. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/adaptive_frequency.py +0 -0
  186. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +0 -0
  187. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +0 -0
  188. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +0 -0
  189. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_general_settings.py +0 -0
  190. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_settings_options.py +0 -0
  191. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +0 -0
  192. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +0 -0
  193. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +0 -0
  194. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/mesh_operation.py +0 -0
  195. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +0 -0
  196. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +0 -0
  197. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +0 -0
  198. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +0 -0
  199. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +0 -0
  200. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +0 -0
  201. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/simulation_setup/sweep_data.py +0 -0
  202. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/siwave.py +0 -0
  203. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/stackup.py +0 -0
  204. {pyedb-0.51.2/src/pyedb/ipc2581 → pyedb-0.52.0/src/pyedb/grpc/database/terminal}/__init__.py +0 -0
  205. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/bundle_terminal.py +0 -0
  206. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/edge_terminal.py +0 -0
  207. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/padstack_instance_terminal.py +0 -0
  208. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/pingroup_terminal.py +0 -0
  209. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/point_terminal.py +0 -0
  210. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/terminal/terminal.py +0 -0
  211. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/__init__.py +0 -0
  212. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/constants.py +0 -0
  213. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/heat_sink.py +0 -0
  214. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/hfss_extent_info.py +0 -0
  215. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/layout_statistics.py +0 -0
  216. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/rlc.py +0 -0
  217. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/sources.py +0 -0
  218. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/sweep_data_distribution.py +0 -0
  219. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/database/utility/xml_control_file.py +0 -0
  220. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/grpc/rpc_session.py +0 -0
  221. {pyedb-0.51.2/src/pyedb/ipc2581/bom → pyedb-0.52.0/src/pyedb/ipc2581}/__init__.py +0 -0
  222. {pyedb-0.51.2/src/pyedb/ipc2581/content → pyedb-0.52.0/src/pyedb/ipc2581/bom}/__init__.py +0 -0
  223. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
  224. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
  225. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
  226. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
  227. {pyedb-0.51.2/src/pyedb/ipc2581/ecad → pyedb-0.52.0/src/pyedb/ipc2581/content}/__init__.py +0 -0
  228. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/color.py +0 -0
  229. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/content.py +0 -0
  230. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
  231. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
  232. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
  233. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
  234. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
  235. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/fill.py +0 -0
  236. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
  237. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
  238. {pyedb-0.51.2/src/pyedb/ipc2581/ecad/cad_data → pyedb-0.52.0/src/pyedb/ipc2581/ecad}/__init__.py +0 -0
  239. {pyedb-0.51.2/src/pyedb/misc → pyedb-0.52.0/src/pyedb/ipc2581/ecad/cad_data}/__init__.py +0 -0
  240. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
  241. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
  242. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
  243. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
  244. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
  245. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
  246. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
  247. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
  248. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
  249. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
  250. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
  251. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
  252. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
  253. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
  254. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
  255. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
  256. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
  257. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
  258. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
  259. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
  260. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
  261. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
  262. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
  263. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
  264. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
  265. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
  266. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/history_record.py +0 -0
  267. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
  268. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
  269. {pyedb-0.51.2/src/pyedb/misc/siw_feature_config → pyedb-0.52.0/src/pyedb/misc}/__init__.py +0 -0
  270. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
  271. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/downloads.py +0 -0
  272. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/misc.py +0 -0
  273. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
  274. {pyedb-0.51.2/src/pyedb/misc/siw_feature_config/emc → pyedb-0.52.0/src/pyedb/misc/siw_feature_config}/__init__.py +0 -0
  275. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
  276. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
  277. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
  278. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
  279. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
  280. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/fd_xtalk_scan_config.py +0 -0
  281. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/impedance_scan_config.py +0 -0
  282. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/net.py +0 -0
  283. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/pins.py +0 -0
  284. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py +0 -0
  285. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py +0 -0
  286. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/misc/utilities.py +0 -0
  287. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/modeler/geometry_operators.py +0 -0
  288. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/siwave.py +0 -0
  289. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/siwave_core/icepak.py +0 -0
  290. {pyedb-0.51.2 → pyedb-0.52.0}/src/pyedb/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyedb
3
- Version: 0.51.2
3
+ Version: 0.52.0
4
4
  Summary: Higher-Level Pythonic Ansys Electronics Data Base
5
5
  Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
6
6
  Maintainer-email: PyEDB developers <simon.vandenbrouck@ansys.com>
@@ -26,10 +26,10 @@ Requires-Dist: Rtree >= 1.2.0
26
26
  Requires-Dist: toml == 0.10.2
27
27
  Requires-Dist: shapely
28
28
  Requires-Dist: scikit-rf
29
- Requires-Dist: ansys-edb-core
30
- Requires-Dist: ansys-api-edb
29
+ Requires-Dist: ansys-edb-core>=0.2.0.dev0
30
+ Requires-Dist: ansys-api-edb>=0.2.0.dev0
31
31
  Requires-Dist: psutil
32
- Requires-Dist: ansys-sphinx-theme>=0.10.0,<1.4 ; extra == "doc"
32
+ Requires-Dist: ansys-sphinx-theme>=1.0.0,<1.5 ; extra == "doc"
33
33
  Requires-Dist: imageio>=2.30.0,<2.37 ; extra == "doc"
34
34
  Requires-Dist: ipython>=8.13.0,<8.32 ; extra == "doc"
35
35
  Requires-Dist: jupyterlab>=4.0.0,<4.4 ; extra == "doc"
@@ -36,8 +36,8 @@ dependencies = [
36
36
  "toml == 0.10.2",
37
37
  "shapely",
38
38
  "scikit-rf",
39
- "ansys-edb-core",
40
- "ansys-api-edb",
39
+ "ansys-edb-core>=0.2.0.dev0",
40
+ "ansys-api-edb>=0.2.0.dev0",
41
41
  "psutil",
42
42
  ]
43
43
 
@@ -52,7 +52,7 @@ tests = [
52
52
  "shapely"
53
53
  ]
54
54
  doc = [
55
- "ansys-sphinx-theme>=0.10.0,<1.4",
55
+ "ansys-sphinx-theme>=1.0.0,<1.5",
56
56
  "imageio>=2.30.0,<2.37",
57
57
  "ipython>=8.13.0,<8.32",
58
58
  "jupyterlab>=4.0.0,<4.4",
@@ -44,7 +44,7 @@ deprecation_warning()
44
44
  #
45
45
 
46
46
  pyedb_path = os.path.dirname(__file__)
47
- __version__ = "0.51.2"
47
+ __version__ = "0.52.0"
48
48
  version = __version__
49
49
 
50
50
  #
@@ -0,0 +1,461 @@
1
+ # Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
2
+ # SPDX-License-Identifier: MIT
3
+ #
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+ from datetime import datetime
23
+ import json
24
+ import os
25
+ from pathlib import Path
26
+ import warnings
27
+
28
+ import toml
29
+
30
+ from pyedb.configuration.cfg_data import CfgData
31
+ from pyedb.dotnet.database.definition.package_def import PackageDef
32
+
33
+
34
+ class Configuration:
35
+ """Enables export and import of a JSON configuration file that can be applied to a new or existing design."""
36
+
37
+ def __init__(self, pedb):
38
+ self._pedb = pedb
39
+
40
+ self._components = self._pedb.components.instances
41
+ self.data = {}
42
+ self._s_parameter_library = ""
43
+ self._spice_model_library = ""
44
+ self.cfg_data = CfgData(self._pedb)
45
+
46
+ def load(self, config_file, append=True, apply_file=False, output_file=None, open_at_the_end=True):
47
+ """Import configuration settings from a configure file.
48
+
49
+ Parameters
50
+ ----------
51
+ config_file : str, dict
52
+ Full path to configure file in JSON or TOML format. Dictionary is also supported.
53
+ append : bool, optional
54
+ Whether if the new file will append to existing properties or the properties will be cleared before import.
55
+ Default is ``True`` to keep stored properties
56
+ apply_file : bool, optional
57
+ Whether to apply the file after the load or not. Default is ``False``.
58
+ output_file : str, optional
59
+ Full path to the new aedb folder where the configured project will be saved.
60
+ open_at_the_end : bool, optional
61
+ Whether to keep the new generated file opened at the end. Default is ``True``.
62
+
63
+ Returns
64
+ -------
65
+ dict
66
+ Config dictionary.
67
+ """
68
+ if isinstance(config_file, dict):
69
+ data = config_file
70
+ else:
71
+ config_file = str(config_file)
72
+ if os.path.isfile(config_file):
73
+ with open(config_file, "r") as f:
74
+ if config_file.endswith(".json"):
75
+ data = json.load(f)
76
+ elif config_file.endswith(".toml"):
77
+ data = toml.load(f)
78
+ else: # pragma: no cover
79
+ raise RuntimeError(f"File {config_file} does not exist.")
80
+
81
+ if not append: # pragma: no cover
82
+ self.data = {}
83
+ for k, v in data.items():
84
+ if k in self.data:
85
+ if isinstance(v, list):
86
+ self.data[k].extend(v)
87
+ elif isinstance(v, dict): # pragma: no cover
88
+ self.data[k].update(v)
89
+ else: # pragma: no cover
90
+ self.data[k] = v
91
+ else:
92
+ self.data[k] = v
93
+
94
+ self.cfg_data = CfgData(self._pedb, **self.data)
95
+
96
+ if apply_file:
97
+ original_file = self._pedb.edbpath
98
+ if output_file:
99
+ self._pedb.save_edb_as(output_file)
100
+ self.run()
101
+ if output_file and not open_at_the_end:
102
+ self._pedb.save_edb()
103
+ self._pedb.close_edb()
104
+ self._pedb.edbpath = original_file
105
+ self._pedb.open_edb()
106
+ return self.cfg_data
107
+
108
+ def run(self, **kwargs):
109
+ """Apply configuration settings to the current design"""
110
+ if kwargs.get("fix_padstack_def"):
111
+ warnings.warn("fix_padstack_def is deprecated.", DeprecationWarning)
112
+
113
+ if self.cfg_data.variables:
114
+ self.cfg_data.variables.apply()
115
+
116
+ if self.cfg_data.general:
117
+ self.cfg_data.general.apply()
118
+
119
+ # Configure boundary settings
120
+ now = datetime.now()
121
+ if self.cfg_data.boundaries:
122
+ self.cfg_data.boundaries.apply()
123
+ self._pedb.logger.info(f"Updating boundaries finished. Time lapse {datetime.now() - now}")
124
+ now = datetime.now()
125
+
126
+ # Configure nets
127
+ if self.cfg_data.nets:
128
+ self.cfg_data.nets.apply()
129
+ self._pedb.logger.info(f"Updating nets finished. Time lapse {datetime.now() - now}")
130
+ now = datetime.now()
131
+
132
+ # Configure components
133
+ self.cfg_data.components.apply()
134
+ self._pedb.logger.info(f"Updating components finished. Time lapse {datetime.now() - now}")
135
+ now = datetime.now()
136
+
137
+ # Configure pin groups
138
+ self.cfg_data.pin_groups.apply()
139
+ self._pedb.logger.info(f"Creating pin groups finished. Time lapse {datetime.now() - now}")
140
+ now = datetime.now()
141
+
142
+ # Configure sources
143
+ self.cfg_data.sources.apply()
144
+ self._pedb.logger.info(f"Placing sources finished. Time lapse {datetime.now() - now}")
145
+ now = datetime.now()
146
+
147
+ # Configure setup
148
+ self.cfg_data.setups.apply()
149
+ self._pedb.logger.info(f"Creating setups finished. Time lapse {datetime.now() - now}")
150
+ now = datetime.now()
151
+
152
+ # Configure stackup
153
+ self.configuration_stackup()
154
+ self._pedb.logger.info(f"Updating stackup finished. Time lapse {datetime.now() - now}")
155
+ now = datetime.now()
156
+
157
+ # Configure padstacks
158
+ if self.cfg_data.padstacks:
159
+ self.cfg_data.padstacks.apply()
160
+ self._pedb.logger.info(f"Applying padstacks finished. Time lapse {datetime.now() - now}")
161
+ now = datetime.now()
162
+
163
+ # Configure S-parameter
164
+ self.cfg_data.s_parameters.apply()
165
+ self._pedb.logger.info(f"Applying S-parameters finished. Time lapse {datetime.now() - now}")
166
+ now = datetime.now()
167
+
168
+ # Configure SPICE models
169
+ for spice_model in self.cfg_data.spice_models:
170
+ spice_model.apply()
171
+ self._pedb.logger.info(f"Assigning Spice models finished. Time lapse {datetime.now() - now}")
172
+ now = datetime.now()
173
+
174
+ # Configure package definitions
175
+ self.cfg_data.package_definitions.apply()
176
+ self._pedb.logger.info(f"Applying package definitions finished. Time lapse {datetime.now() - now}")
177
+ now = datetime.now()
178
+
179
+ # Modeler
180
+ self.cfg_data.modeler.apply()
181
+
182
+ # Configure ports
183
+ self.cfg_data.ports.apply()
184
+ self._pedb.logger.info(f"Placing ports finished. Time lapse {datetime.now() - now}")
185
+ now = datetime.now()
186
+
187
+ # Configure probes
188
+ self.cfg_data.probes.apply()
189
+ self._pedb.logger.info(f"Placing probes finished. Time lapse {datetime.now() - now}")
190
+
191
+ # Configure operations
192
+ self.cfg_data.operations.apply()
193
+
194
+ return True
195
+
196
+ def configuration_stackup(self):
197
+ temp_pdef_data = {}
198
+ for pdef_name, pdef in self._pedb.padstacks.definitions.items():
199
+ pdef_edb_object = pdef._padstack_def_data
200
+ temp_pdef_data[pdef_name] = pdef_edb_object
201
+
202
+ temp_p_inst_layer_map = {}
203
+ for p_inst in self._pedb.layout.padstack_instances:
204
+ temp_p_inst_layer_map[p_inst.id] = p_inst._edb_object.GetLayerMap()
205
+
206
+ self.cfg_data.stackup.apply()
207
+
208
+ for pdef_name, pdef_data in temp_pdef_data.items():
209
+ pdef = self._pedb.padstacks.definitions[pdef_name]
210
+ pdef._padstack_def_data = pdef_data
211
+
212
+ for p_inst in self._pedb.layout.padstack_instances:
213
+ p_inst._edb_object.SetLayerMap(temp_p_inst_layer_map[p_inst.id])
214
+
215
+ def _load_stackup(self):
216
+ """Imports stackup information from json."""
217
+ data = self.data["stackup"]
218
+ materials = data.get("materials")
219
+
220
+ if materials:
221
+ edb_materials = {i.lower(): i for i, _ in self._pedb.materials.materials.items()}
222
+ for mat in materials:
223
+ name = mat["name"].lower()
224
+ if name in edb_materials:
225
+ self._pedb.materials.delete_material(edb_materials[name])
226
+ for mat in materials:
227
+ self._pedb.materials.add_material(**mat)
228
+
229
+ layers = data.get("layers")
230
+
231
+ if layers:
232
+ input_signal_layers = [i for i in layers if i["type"].lower() == "signal"]
233
+ if not len(input_signal_layers) == len(self._pedb.stackup.signal_layers):
234
+ self._pedb.logger.error("Input signal layer count do not match.")
235
+ return False
236
+
237
+ removal_list = []
238
+ lc_signal_layers = []
239
+ for name, obj in self._pedb.stackup.all_layers.items():
240
+ if obj.type == "dielectric":
241
+ removal_list.append(name)
242
+ elif obj.type == "signal":
243
+ lc_signal_layers.append(obj.id)
244
+ for l in removal_list:
245
+ self._pedb.stackup.remove_layer(l)
246
+
247
+ # update all signal layers
248
+ id_name = {i[0]: i[1] for i in self._pedb.stackup.layers_by_id}
249
+ signal_idx = 0
250
+ for l in layers:
251
+ if l["type"] == "signal":
252
+ layer_id = lc_signal_layers[signal_idx]
253
+ layer_name = id_name[layer_id]
254
+ self._pedb.stackup.layers[layer_name].update(**l)
255
+ signal_idx = signal_idx + 1
256
+
257
+ # add all dielectric layers. Dielectric layers must be added last. Otherwise,
258
+ # dielectric layer will occupy signal and document layer id.
259
+ prev_layer_clone = None
260
+ l = layers.pop(0)
261
+ if l["type"] == "signal":
262
+ prev_layer_clone = self._pedb.stackup.layers[l["name"]]
263
+ else:
264
+ prev_layer_clone = self._pedb.stackup.add_layer_top(**l)
265
+ for idx, l in enumerate(layers):
266
+ if l["type"] == "dielectric":
267
+ prev_layer_clone = self._pedb.stackup.add_layer_below(base_layer_name=prev_layer_clone.name, **l)
268
+ elif l["type"] == "signal":
269
+ prev_layer_clone = self._pedb.stackup.layers[l["name"]]
270
+
271
+ def _load_package_def(self):
272
+ """Imports package definition information from JSON."""
273
+ comps = self._pedb.components.instances
274
+ for pkgd in self.data["package_definitions"]:
275
+ name = pkgd["name"]
276
+ if name in self._pedb.definitions.package:
277
+ self._pedb.definitions.package[name].delete()
278
+ extent_bounding_box = pkgd.get("extent_bounding_box", None)
279
+ if extent_bounding_box:
280
+ package_def = PackageDef(self._pedb, name=name, extent_bounding_box=extent_bounding_box)
281
+ else:
282
+ package_def = PackageDef(self._pedb, name=name, component_part_name=pkgd["component_definition"])
283
+ package_def.maximum_power = pkgd["maximum_power"]
284
+ package_def.therm_cond = pkgd["therm_cond"]
285
+ package_def.theta_jb = pkgd["theta_jb"]
286
+ package_def.theta_jc = pkgd["theta_jc"]
287
+ package_def.height = pkgd["height"]
288
+
289
+ heatsink = pkgd.get("heatsink", None)
290
+ if heatsink:
291
+ package_def.set_heatsink(
292
+ heatsink["fin_base_height"],
293
+ heatsink["fin_height"],
294
+ heatsink["fin_orientation"],
295
+ heatsink["fin_spacing"],
296
+ heatsink["fin_thickness"],
297
+ )
298
+
299
+ comp_def_name = pkgd["component_definition"]
300
+ comp_def = self._pedb.definitions.component[comp_def_name]
301
+
302
+ comp_list = dict()
303
+ if pkgd["apply_to_all"]:
304
+ comp_list.update(
305
+ {refdes: comp for refdes, comp in comp_def.components.items() if refdes not in pkgd["components"]}
306
+ )
307
+ else:
308
+ comp_list.update(
309
+ {refdes: comp for refdes, comp in comp_def.components.items() if refdes in pkgd["components"]}
310
+ )
311
+ for _, i in comp_list.items():
312
+ i.package_def = name
313
+
314
+ def get_data_from_db(self, **kwargs):
315
+ """Get configuration data from layout.
316
+
317
+ Parameters
318
+ ----------
319
+ stackup
320
+
321
+ Returns
322
+ -------
323
+
324
+ """
325
+ self._pedb.logger.info("Getting data from layout database.")
326
+ data = {}
327
+ if kwargs.get("general", False):
328
+ data["general"] = self.cfg_data.general.get_data_from_db()
329
+ if kwargs.get("stackup", False):
330
+ data["stackup"] = self.cfg_data.stackup.get_data_from_db()
331
+ if kwargs.get("package_definitions", False):
332
+ data["package_definitions"] = self.cfg_data.package_definitions.get_data_from_db()
333
+ if kwargs.get("setups", False):
334
+ setups = self.cfg_data.setups
335
+ setups.retrieve_parameters_from_edb()
336
+ data["setups"] = setups.to_dict()
337
+ if kwargs.get("sources", False):
338
+ data["sources"] = self.cfg_data.sources.get_data_from_db()
339
+ if kwargs.get("ports", False):
340
+ data["ports"] = self.cfg_data.ports.get_data_from_db()
341
+ if kwargs.get("components", False) or kwargs.get("s_parameters", False):
342
+ self.cfg_data.components.retrieve_parameters_from_edb()
343
+ components = []
344
+ for i in self.cfg_data.components.components:
345
+ if i.type == "io":
346
+ components.append(i.get_attributes())
347
+ components.append(i.get_attributes())
348
+
349
+ if kwargs.get("components", False):
350
+ data["components"] = components
351
+ elif kwargs.get("s_parameters", False):
352
+ data["s_parameters"] = self.cfg_data.s_parameters.get_data_from_db(components)
353
+ if kwargs.get("nets", False):
354
+ data["nets"] = self.cfg_data.nets.get_data_from_db()
355
+ if kwargs.get("pin_groups", False):
356
+ data["pin_groups"] = self.cfg_data.pin_groups.get_data_from_db()
357
+ if kwargs.get("operations", False):
358
+ data["operations"] = self.cfg_data.operations.get_data_from_db()
359
+ if kwargs.get("padstacks", False):
360
+ self.cfg_data.padstacks.retrieve_parameters_from_edb()
361
+ definitions = []
362
+ for i in self.cfg_data.padstacks.definitions:
363
+ definitions.append(i.get_attributes())
364
+ instances = []
365
+ for i in self.cfg_data.padstacks.instances:
366
+ instances.append(i.get_attributes())
367
+ data["padstacks"] = dict()
368
+ data["padstacks"]["definitions"] = definitions
369
+ data["padstacks"]["instances"] = instances
370
+
371
+ if kwargs.get("boundaries", False):
372
+ data["boundaries"] = self.cfg_data.boundaries.get_data_from_db()
373
+
374
+ return data
375
+
376
+ def export(
377
+ self,
378
+ file_path,
379
+ stackup=True,
380
+ package_definitions=False,
381
+ setups=True,
382
+ sources=True,
383
+ ports=True,
384
+ nets=True,
385
+ pin_groups=True,
386
+ operations=True,
387
+ components=True,
388
+ boundaries=True,
389
+ s_parameters=True,
390
+ padstacks=True,
391
+ general=True,
392
+ ):
393
+ """Export the configuration data from layout to a file.
394
+
395
+ Parameters
396
+ ----------
397
+ file_path : str, Path
398
+ File path to export the configuration data.
399
+ stackup : bool
400
+ Whether to export stackup or not.
401
+ package_definitions : bool
402
+ Whether to export package definitions or not.
403
+ setups : bool
404
+ Whether to export setups or not.
405
+ sources : bool
406
+ Whether to export sources or not.
407
+ ports : bool
408
+ Whether to export ports or not.
409
+ nets : bool
410
+ Whether to export nets.
411
+ pin_groups : bool
412
+ Whether to export pin groups.
413
+ operations : bool
414
+ Whether to export operations.
415
+ components : bool
416
+ Whether to export component.
417
+ boundaries : bool
418
+ Whether to export boundaries.
419
+ s_parameters : bool
420
+ Whether to export s_parameters.
421
+ padstacks : bool
422
+ Whether to export padstacks.
423
+ general : bool
424
+ Whether to export general information.
425
+ Returns
426
+ -------
427
+ bool
428
+ """
429
+ data = self.get_data_from_db(
430
+ stackup=stackup,
431
+ package_definitions=package_definitions,
432
+ setups=setups,
433
+ sources=sources,
434
+ ports=ports,
435
+ nets=nets,
436
+ pin_groups=pin_groups,
437
+ operations=operations,
438
+ components=components,
439
+ boundaries=boundaries,
440
+ s_parameters=s_parameters,
441
+ padstacks=padstacks,
442
+ general=general,
443
+ )
444
+
445
+ file_path = file_path if isinstance(file_path, Path) else Path(file_path)
446
+ file_path = file_path.with_suffix(".json") if file_path.suffix == "" else file_path
447
+
448
+ for comp in data["components"]:
449
+ for key, value in comp.items():
450
+ try:
451
+ json.dumps(value)
452
+ print(f"Key '{key}' is serializable.")
453
+ except TypeError as e:
454
+ print(f"Key '{key}' failed: {e}")
455
+
456
+ with open(file_path, "w") as f:
457
+ if file_path.suffix == ".json":
458
+ json.dump(data, f, ensure_ascii=False, indent=4)
459
+ else:
460
+ toml.dump(data, f)
461
+ return True if os.path.isfile(file_path) else False
@@ -1807,8 +1807,14 @@ class EDBPadstackInstance(Primitive):
1807
1807
 
1808
1808
  val = String("")
1809
1809
  _, name = self._edb_padstackinstance.GetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, val)
1810
- name = str(name).strip("'")
1811
- return name
1810
+ aedt_name = str(name).strip("'")
1811
+ if aedt_name == "":
1812
+ if self.is_pin and self.component:
1813
+ aedt_name = f"{self.component.name}-{self.component_pin}"
1814
+ elif self.component_pin:
1815
+ aedt_name = self.component_pin
1816
+ self.aedt_name = aedt_name
1817
+ return aedt_name
1812
1818
 
1813
1819
  @aedt_name.setter
1814
1820
  def aedt_name(self, value):
@@ -22,7 +22,6 @@
22
22
 
23
23
  import re
24
24
 
25
- from pyedb.dotnet.clr_module import String
26
25
  from pyedb.dotnet.database.edb_data.padstacks_data import EDBPadstackInstance
27
26
  from pyedb.dotnet.database.edb_data.primitives_data import Primitive
28
27
  from pyedb.generic.general_methods import generate_unique_name
@@ -325,21 +324,12 @@ class LayoutValidation:
325
324
  return
326
325
 
327
326
  def padstacks_no_name(self, fix=False):
327
+ """Find and fix padstacks without aedt_name."""
328
328
  pds = self._pedb.layout.padstack_instances
329
329
  counts = 0
330
- via_count = 1
331
330
  for obj in pds:
332
- val = String("")
333
- _, name = obj._edb_object.GetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, val)
334
- name = str(name).strip("'")
335
- if name == "":
331
+ if obj.aedt_name == "":
336
332
  counts += 1
337
333
  if fix:
338
- if not obj.component:
339
- obj._edb_object.SetProductProperty(self._pedb.edb_api.ProductId.Designer, 11, f"Via{via_count}")
340
- via_count = via_count + 1
341
- else:
342
- obj._edb_object.SetProductProperty(
343
- self._pedb.edb_api.ProductId.Designer, 11, f"{obj.component.name}-{obj.component_pin}"
344
- )
334
+ obj.aedt_name = f"via_{obj.id}"
345
335
  self._pedb._logger.info(f"Found {counts}/{len(pds)} padstacks have no name.")
@@ -2234,7 +2234,7 @@ class Stackup(LayerCollection):
2234
2234
  material.loss_tanget = material_properties["DielectricLossTangent"]
2235
2235
  return True
2236
2236
 
2237
- def _import_xml(self, file_path, rename=False):
2237
+ def _import_xml(self, file_path):
2238
2238
  """Read external xml file and convert into json file.
2239
2239
  You can use xml file to import layer stackup but using json file is recommended.
2240
2240
  see :class:`pyedb.dotnet.database.edb_data.simulation_configuration.SimulationConfiguration´ class to
@@ -2304,7 +2304,8 @@ class Stackup(LayerCollection):
2304
2304
  layers.append(layer)
2305
2305
  stackup_dict["layers"] = layers
2306
2306
  cfg = {"stackup": stackup_dict}
2307
- return self._pedb.configuration.load(cfg, apply_file=True)
2307
+ self._pedb.configuration.load(cfg)
2308
+ return self._pedb.configuration.run()
2308
2309
 
2309
2310
  def _export_xml(self, file_path):
2310
2311
  """Export stackup information to an external XMLfile.
@@ -2391,7 +2392,7 @@ class Stackup(LayerCollection):
2391
2392
  elif file_path.endswith(".json"):
2392
2393
  return self._import_json(file_path, rename=rename)
2393
2394
  elif file_path.endswith(".xml"):
2394
- return self._import_xml(file_path, rename=rename)
2395
+ return self._import_xml(file_path)
2395
2396
  else:
2396
2397
  return False
2397
2398
 
@@ -1238,7 +1238,7 @@ class Edb(Database):
1238
1238
  return self._core_primitives
1239
1239
 
1240
1240
  @property
1241
- def layout(self):
1241
+ def layout(self) -> Layout:
1242
1242
  """Layout object.
1243
1243
 
1244
1244
  Returns
@@ -4735,3 +4735,37 @@ class Edb(Database):
4735
4735
  return self.variables[variable_name]
4736
4736
  else:
4737
4737
  return False
4738
+
4739
+ def compare(self, input_file, results=""):
4740
+ """Compares current open database with another one.
4741
+
4742
+ Parameters
4743
+ ----------
4744
+ input_file : str
4745
+ Path to the edb file.
4746
+ results: str, optional
4747
+ Path to directory in which results will be saved. If no path is given, a new "_compare_results"
4748
+ directory will be created with the same naming and path as the .aedb folder.
4749
+ Returns
4750
+ -------
4751
+ bool
4752
+ ``True`` when successful, ``False`` when failed.
4753
+ """
4754
+ self.save()
4755
+ if not results:
4756
+ results = self.edbpath[:-5] + "_compare_results"
4757
+ os.mkdir(results)
4758
+ command = os.path.join(self.base_path, "EDBDiff.exe")
4759
+ if is_linux:
4760
+ mono_path = os.path.join(self.base_path, "common/mono/Linux64/bin/mono")
4761
+ cmd_input = [mono_path, command, input_file, self.edbpath, results]
4762
+ else:
4763
+ cmd_input = [command, input_file, self.edbpath, results]
4764
+ subprocess.run(cmd_input)
4765
+
4766
+ if not os.path.exists(os.path.join(results, "EDBDiff.csv")):
4767
+ self.logger.error("Comparison execution failed")
4768
+ return False
4769
+ else:
4770
+ self.logger.info("Comparison correctly completed")
4771
+ return True