pyedb 0.13.dev0__py3-none-any.whl → 0.14.1__py3-none-any.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 pyedb might be problematic. Click here for more details.

Files changed (75) hide show
  1. pyedb/__init__.py +1 -1
  2. pyedb/configuration/cfg_common.py +0 -5
  3. pyedb/configuration/cfg_components.py +0 -2
  4. pyedb/configuration/cfg_operations.py +0 -2
  5. pyedb/configuration/cfg_package_definition.py +0 -2
  6. pyedb/configuration/cfg_ports_sources.py +14 -11
  7. pyedb/configuration/cfg_stackup.py +0 -7
  8. pyedb/configuration/configuration.py +0 -6
  9. pyedb/dotnet/application/Variables.py +4 -40
  10. pyedb/dotnet/edb.py +27 -82
  11. pyedb/dotnet/edb_core/{edb_data/components_data.py → cell/hierarchy/component.py} +13 -133
  12. pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -3
  13. pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +30 -0
  14. pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +105 -0
  15. pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +34 -0
  16. pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +34 -0
  17. pyedb/dotnet/edb_core/cell/layout.py +137 -0
  18. pyedb/dotnet/edb_core/cell/layout_obj.py +2 -4
  19. pyedb/dotnet/edb_core/cell/primitive.py +199 -1
  20. pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +52 -0
  21. pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +50 -0
  22. pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +88 -0
  23. pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +59 -0
  24. pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +73 -0
  25. pyedb/dotnet/edb_core/{edb_data/terminals.py → cell/terminal/terminal.py} +33 -242
  26. pyedb/dotnet/edb_core/components.py +10 -56
  27. pyedb/dotnet/edb_core/definition/component_def.py +1 -8
  28. pyedb/dotnet/edb_core/definition/component_model.py +0 -2
  29. pyedb/dotnet/edb_core/definition/definitions.py +0 -2
  30. pyedb/dotnet/edb_core/definition/package_def.py +7 -5
  31. pyedb/dotnet/edb_core/edb_data/control_file.py +0 -3
  32. pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -5
  33. pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +4 -9
  34. pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -7
  35. pyedb/dotnet/edb_core/edb_data/nets_data.py +2 -5
  36. pyedb/dotnet/edb_core/edb_data/padstacks_data.py +11 -29
  37. pyedb/dotnet/edb_core/edb_data/ports.py +4 -4
  38. pyedb/dotnet/edb_core/edb_data/primitives_data.py +3 -26
  39. pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +13 -20
  40. pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +3 -11
  41. pyedb/dotnet/edb_core/edb_data/sources.py +12 -17
  42. pyedb/dotnet/edb_core/general.py +1 -6
  43. pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -3
  44. pyedb/dotnet/edb_core/hfss.py +1 -33
  45. pyedb/dotnet/edb_core/layout.py +0 -35
  46. pyedb/dotnet/edb_core/layout_validation.py +1 -3
  47. pyedb/dotnet/edb_core/materials.py +1 -22
  48. pyedb/dotnet/edb_core/net_class.py +0 -8
  49. pyedb/dotnet/edb_core/nets.py +4 -29
  50. pyedb/dotnet/edb_core/padstack.py +76 -30
  51. pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +72 -0
  52. pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +287 -0
  53. pyedb/dotnet/edb_core/{edb_data/hfss_simulation_setup_data.py → sim_setup_data/data/settings.py} +174 -878
  54. pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +509 -0
  55. pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
  56. pyedb/dotnet/edb_core/{edb_data/siwave_simulation_setup_data.py → sim_setup_data/io/siwave.py} +0 -341
  57. pyedb/dotnet/edb_core/siwave.py +5 -33
  58. pyedb/dotnet/edb_core/stackup.py +4 -51
  59. pyedb/dotnet/edb_core/utilities/simulation_setup.py +613 -366
  60. pyedb/generic/data_handlers.py +1 -9
  61. pyedb/generic/general_methods.py +3 -53
  62. pyedb/generic/plot.py +1 -2
  63. pyedb/ipc2581/ecad/cad_data/layer_feature.py +1 -7
  64. pyedb/ipc2581/ecad/cad_data/package.py +1 -4
  65. pyedb/ipc2581/ecad/cad_data/path.py +1 -3
  66. pyedb/ipc2581/ecad/cad_data/polygon.py +1 -6
  67. pyedb/ipc2581/ecad/cad_data/step.py +1 -10
  68. pyedb/ipc2581/ipc2581.py +8 -15
  69. pyedb/modeler/geometry_operators.py +164 -67
  70. pyedb/siwave.py +25 -32
  71. {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/METADATA +2 -2
  72. {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/RECORD +75 -61
  73. /pyedb/dotnet/edb_core/cell/{__init__.py → terminal/__init__.py} +0 -0
  74. {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/LICENSE +0 -0
  75. {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/WHEEL +0 -0
@@ -24,7 +24,7 @@ import re
24
24
 
25
25
  from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
26
26
  from pyedb.dotnet.edb_core.edb_data.primitives_data import EDBPrimitives
27
- from pyedb.generic.general_methods import generate_unique_name, pyedb_function_handler
27
+ from pyedb.generic.general_methods import generate_unique_name
28
28
 
29
29
 
30
30
  class LayoutValidation:
@@ -33,7 +33,6 @@ class LayoutValidation:
33
33
  def __init__(self, pedb):
34
34
  self._pedb = pedb
35
35
 
36
- @pyedb_function_handler()
37
36
  def dc_shorts(self, net_list=None, fix=False):
38
37
  """Find DC shorts on layout.
39
38
 
@@ -121,7 +120,6 @@ class LayoutValidation:
121
120
  # i.net = temp_name
122
121
  return dc_shorts
123
122
 
124
- @pyedb_function_handler()
125
123
  def disjoint_nets(
126
124
  self,
127
125
  net_list=None,
@@ -35,7 +35,7 @@ from pyedb import Edb
35
35
  from pyedb.dotnet.clr_module import _clr
36
36
  from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
37
37
  from pyedb.exceptions import MaterialModelException
38
- from pyedb.generic.general_methods import is_ironpython, pyedb_function_handler
38
+ from pyedb.generic.general_methods import is_ironpython
39
39
 
40
40
  logger = logging.getLogger(__name__)
41
41
 
@@ -378,7 +378,6 @@ class Material(object):
378
378
  material_property_id = self.__edb_definition.MaterialPropertyId.ThermalExpansionCoefficient
379
379
  self.__material_def.SetProperty(material_property_id, edb_value)
380
380
 
381
- @pyedb_function_handler()
382
381
  def to_dict(self):
383
382
  """Convert material into dictionary."""
384
383
  self.__load_all_properties()
@@ -387,7 +386,6 @@ class Material(object):
387
386
  res.update(self.__properties.model_dump())
388
387
  return res
389
388
 
390
- @pyedb_function_handler()
391
389
  def update(self, input_dict: dict):
392
390
  if input_dict:
393
391
  # Update attributes
@@ -412,7 +410,6 @@ class Material(object):
412
410
  elif self.__dc_model:
413
411
  self.__material_def.SetDielectricMaterialModel(self.__edb_value(None))
414
412
 
415
- @pyedb_function_handler()
416
413
  def __edb_value(self, value):
417
414
  """Convert a value to an EDB value.
418
415
 
@@ -422,13 +419,11 @@ class Material(object):
422
419
  """
423
420
  return self.__edb.edb_value(value)
424
421
 
425
- @pyedb_function_handler()
426
422
  def __load_all_properties(self):
427
423
  """Load all properties of the material."""
428
424
  for property in self.__properties.model_dump().keys():
429
425
  _ = getattr(self, property)
430
426
 
431
- @pyedb_function_handler()
432
427
  def __property_value(self, material_property_id):
433
428
  """Get property value from a material property id."""
434
429
  if is_ironpython: # pragma: no cover
@@ -496,7 +491,6 @@ class Materials(object):
496
491
  """
497
492
  return self.__edb.edb_value(value)
498
493
 
499
- @pyedb_function_handler()
500
494
  def add_material(self, name: str, **kwargs):
501
495
  """Add a new material.
502
496
 
@@ -531,7 +525,6 @@ class Materials(object):
531
525
 
532
526
  return material
533
527
 
534
- @pyedb_function_handler()
535
528
  def add_conductor_material(self, name, conductivity, **kwargs):
536
529
  """Add a new conductor material.
537
530
 
@@ -553,7 +546,6 @@ class Materials(object):
553
546
 
554
547
  return material
555
548
 
556
- @pyedb_function_handler()
557
549
  def add_dielectric_material(self, name, permittivity, dielectric_loss_tangent, **kwargs):
558
550
  """Add a new dielectric material in library.
559
551
 
@@ -577,7 +569,6 @@ class Materials(object):
577
569
 
578
570
  return material
579
571
 
580
- @pyedb_function_handler()
581
572
  def add_djordjevicsarkar_dielectric(
582
573
  self,
583
574
  name,
@@ -635,7 +626,6 @@ class Materials(object):
635
626
  except MaterialModelException:
636
627
  raise ValueError("Use realistic values to define DS model.")
637
628
 
638
- @pyedb_function_handler()
639
629
  def add_debye_material(
640
630
  self,
641
631
  name,
@@ -703,7 +693,6 @@ class Materials(object):
703
693
  except MaterialModelException:
704
694
  raise ValueError("Use realistic values to define Debye model.")
705
695
 
706
- @pyedb_function_handler()
707
696
  def add_multipole_debye_material(
708
697
  self,
709
698
  name,
@@ -768,7 +757,6 @@ class Materials(object):
768
757
  except MaterialModelException:
769
758
  raise ValueError("Use realistic values to define Multipole Debye model.")
770
759
 
771
- @pyedb_function_handler()
772
760
  def __add_dielectric_material_model(self, name, material_model):
773
761
  """Add a dielectric material model.
774
762
 
@@ -791,7 +779,6 @@ class Materials(object):
791
779
  return material
792
780
  raise MaterialModelException("Set dielectric material model failed.")
793
781
 
794
- @pyedb_function_handler()
795
782
  def duplicate(self, material_name, new_material_name):
796
783
  """Duplicate a material from the database.
797
784
 
@@ -820,7 +807,6 @@ class Materials(object):
820
807
 
821
808
  return new_material
822
809
 
823
- @pyedb_function_handler()
824
810
  def delete_material(self, material_name):
825
811
  """Remove a material from the database."""
826
812
  material_def = self.__edb_definition.MaterialDef.FindByName(self.__edb.active_db, material_name)
@@ -828,7 +814,6 @@ class Materials(object):
828
814
  raise ValueError(f"Cannot find material {material_name}.")
829
815
  material_def.Delete()
830
816
 
831
- @pyedb_function_handler()
832
817
  def update_material(self, material_name, input_dict):
833
818
  """Update material attributes."""
834
819
  if material_name not in self.materials:
@@ -847,7 +832,6 @@ class Materials(object):
847
832
  material.update(attributes_input_dict)
848
833
  return material
849
834
 
850
- @pyedb_function_handler()
851
835
  def load_material(self, material: dict):
852
836
  """Load material."""
853
837
  if material:
@@ -868,7 +852,6 @@ class Materials(object):
868
852
  material_dlt = material["dielectric_loss_tangent"]
869
853
  self.add_dielectric_material(material_name, material_permittivity, material_dlt)
870
854
 
871
- @pyedb_function_handler()
872
855
  def material_property_to_id(self, property_name):
873
856
  """Convert a material property name to a material property ID.
874
857
 
@@ -910,7 +893,6 @@ class Materials(object):
910
893
  else:
911
894
  return property_name_to_id["InvalidProperty"]
912
895
 
913
- @pyedb_function_handler()
914
896
  def load_amat(self, amat_file):
915
897
  """Load materials from an AMAT file.
916
898
 
@@ -944,7 +926,6 @@ class Materials(object):
944
926
  self.__edb.logger.warning(f"Material {material_name} already exist and was not loaded from AMAT file.")
945
927
  return True
946
928
 
947
- @pyedb_function_handler()
948
929
  def iterate_materials_in_amat(self, amat_file=None):
949
930
  """Iterate over material description in an AMAT file.
950
931
 
@@ -1019,7 +1000,6 @@ class Materials(object):
1019
1000
  material_description["name"] = match.group(1)
1020
1001
  in_material_def = True
1021
1002
 
1022
- @pyedb_function_handler()
1023
1003
  def read_materials(self, amat_file):
1024
1004
  """Read materials from an AMAT file.
1025
1005
 
@@ -1043,7 +1023,6 @@ class Materials(object):
1043
1023
 
1044
1024
  return res
1045
1025
 
1046
- @pyedb_function_handler()
1047
1026
  def read_syslib_material(self, material_name):
1048
1027
  """Read a specific material from syslib AMAT file.
1049
1028
 
@@ -29,7 +29,6 @@ from pyedb.dotnet.edb_core.edb_data.nets_data import (
29
29
  EDBExtendedNetData,
30
30
  EDBNetClassData,
31
31
  )
32
- from pyedb.generic.general_methods import pyedb_function_handler
33
32
 
34
33
 
35
34
  class EdbCommon:
@@ -51,7 +50,6 @@ class EdbCommon:
51
50
  """EDB logger."""
52
51
  return self._pedb.logger
53
52
 
54
- @pyedb_function_handler()
55
53
  def __getitem__(self, name):
56
54
  """Get a net from the EDB project.
57
55
 
@@ -97,7 +95,6 @@ class EdbNetClasses(EdbCommon, object):
97
95
  net_classes[net_class.GetName()] = EDBNetClassData(self._pedb, net_class)
98
96
  return net_classes
99
97
 
100
- @pyedb_function_handler()
101
98
  def create(self, name, net):
102
99
  # type: (str, str|list)->EDBNetClassData
103
100
  """Create a new net class.
@@ -154,7 +151,6 @@ class EdbExtendedNets(EdbCommon, object):
154
151
  nets[extended_net.GetName()] = EDBExtendedNetData(self._pedb, extended_net)
155
152
  return nets
156
153
 
157
- @pyedb_function_handler()
158
154
  def create(self, name, net):
159
155
  # type: (str, str|list)->EDBExtendedNetData
160
156
  """Create a new Extended net.
@@ -183,7 +179,6 @@ class EdbExtendedNets(EdbCommon, object):
183
179
 
184
180
  return self.items[name]
185
181
 
186
- @pyedb_function_handler()
187
182
  def auto_identify_signal(self, resistor_below=10, inductor_below=1, capacitor_above=1e-9, exception_list=None):
188
183
  # type: (int | float, int | float, int |float, list) -> list
189
184
  """Get extended signal net and associated components.
@@ -218,7 +213,6 @@ class EdbExtendedNets(EdbCommon, object):
218
213
  resistor_below, inductor_below, capacitor_above, exception_list, True, True
219
214
  )
220
215
 
221
- @pyedb_function_handler()
222
216
  def auto_identify_power(self, resistor_below=10, inductor_below=1, capacitor_above=1, exception_list=None):
223
217
  # type: (int | float, int | float, int |float, list) -> list
224
218
  """Get all extended power nets and their associated components.
@@ -282,7 +276,6 @@ class EdbDifferentialPairs(EdbCommon, object):
282
276
  diff_pairs[diff_pair.GetName()] = EDBDifferentialPairData(self._pedb, diff_pair)
283
277
  return diff_pairs
284
278
 
285
- @pyedb_function_handler()
286
279
  def create(self, name, net_p, net_n):
287
280
  # type: (str, str, str) -> EDBDifferentialPairData
288
281
  """
@@ -309,7 +302,6 @@ class EdbDifferentialPairs(EdbCommon, object):
309
302
 
310
303
  return self.items[name]
311
304
 
312
- @pyedb_function_handler()
313
305
  def auto_identify(self, positive_differentiator="_P", negative_differentiator="_N"):
314
306
  """Auto identify differential pairs by naming conversion.
315
307
 
@@ -29,11 +29,7 @@ import warnings
29
29
 
30
30
  from pyedb.dotnet.edb_core.edb_data.nets_data import EDBNetsData
31
31
  from pyedb.generic.constants import CSS4_COLORS
32
- from pyedb.generic.general_methods import (
33
- generate_unique_name,
34
- is_ironpython,
35
- pyedb_function_handler,
36
- )
32
+ from pyedb.generic.general_methods import generate_unique_name, is_ironpython
37
33
  from pyedb.modeler.geometry_operators import GeometryOperators
38
34
 
39
35
 
@@ -47,7 +43,6 @@ class EdbNets(object):
47
43
  >>> edb_nets = edbapp.nets
48
44
  """
49
45
 
50
- @pyedb_function_handler()
51
46
  def __getitem__(self, name):
52
47
  """Get a net from the Edb project.
53
48
 
@@ -65,7 +60,6 @@ class EdbNets(object):
65
60
  self._pedb.logger.error("Component or definition not found.")
66
61
  return
67
62
 
68
- @pyedb_function_handler()
69
63
  def __contains__(self, name):
70
64
  """Determine if a net is named ``name`` or not.
71
65
 
@@ -125,11 +119,7 @@ class EdbNets(object):
125
119
  dict[str, :class:`pyedb.dotnet.edb_core.edb_data.nets_data.EDBNetsData`]
126
120
  Dictionary of nets.
127
121
  """
128
-
129
- temp = {}
130
- for net in self._layout.nets:
131
- temp[net.name] = EDBNetsData(net.api_object, self._pedb)
132
- return temp
122
+ return self._pedb.modeler.nets
133
123
 
134
124
  @property
135
125
  def netlist(self):
@@ -183,7 +173,7 @@ class EdbNets(object):
183
173
  """
184
174
  nets = {}
185
175
  for net, value in self.nets.items():
186
- if not value.IsPowerGround():
176
+ if not value.is_power_ground:
187
177
  nets[net] = value
188
178
  return nets
189
179
 
@@ -198,11 +188,10 @@ class EdbNets(object):
198
188
  """
199
189
  nets = {}
200
190
  for net, value in self.nets.items():
201
- if value.IsPowerGround():
191
+ if value.is_power_ground:
202
192
  nets[net] = value
203
193
  return nets
204
194
 
205
- @pyedb_function_handler()
206
195
  def eligible_power_nets(self, threshold=0.3):
207
196
  """Return a list of nets calculated by area to be eligible for PWR/Ground net classification.
208
197
  It uses the same algorithm implemented in SIwave.
@@ -257,7 +246,6 @@ class EdbNets(object):
257
246
  self._comps_by_nets_dict[n] = [comp]
258
247
  return self._comps_by_nets_dict
259
248
 
260
- @pyedb_function_handler()
261
249
  def generate_extended_nets(
262
250
  self,
263
251
  resistor_below=10,
@@ -469,7 +457,6 @@ class EdbNets(object):
469
457
  # fmt: on
470
458
  return x, y
471
459
 
472
- @pyedb_function_handler()
473
460
  def get_plot_data(
474
461
  self,
475
462
  nets=None,
@@ -778,7 +765,6 @@ class EdbNets(object):
778
765
  else:
779
766
  return objects_lists
780
767
 
781
- @pyedb_function_handler()
782
768
  def classify_nets(self, power_nets=None, signal_nets=None):
783
769
  """Reassign power/ground or signal nets based on list of nets.
784
770
 
@@ -810,7 +796,6 @@ class EdbNets(object):
810
796
  self.nets[net].net_object.SetIsPowerGround(False)
811
797
  return True
812
798
 
813
- @pyedb_function_handler()
814
799
  def plot(
815
800
  self,
816
801
  nets=None,
@@ -888,7 +873,6 @@ class EdbNets(object):
888
873
  show=show,
889
874
  )
890
875
 
891
- @pyedb_function_handler()
892
876
  def is_power_gound_net(self, netname_list):
893
877
  """Determine if one of the nets in a list is power or ground.
894
878
 
@@ -910,7 +894,6 @@ class EdbNets(object):
910
894
  return True
911
895
  return False
912
896
 
913
- @pyedb_function_handler()
914
897
  def get_dcconnected_net_list(self, ground_nets=["GND"], res_value=0.001):
915
898
  """Get the nets connected to the direct current through inductors.
916
899
 
@@ -961,7 +944,6 @@ class EdbNets(object):
961
944
 
962
945
  return dcconnected_net_list
963
946
 
964
- @pyedb_function_handler()
965
947
  def get_powertree(self, power_net_name, ground_nets):
966
948
  """Retrieve the power tree.
967
949
 
@@ -1021,14 +1003,12 @@ class EdbNets(object):
1021
1003
  ]
1022
1004
  return component_list, component_list_columns, net_group
1023
1005
 
1024
- @pyedb_function_handler()
1025
1006
  def get_net_by_name(self, net_name):
1026
1007
  """Find a net by name."""
1027
1008
  edb_net = self._edb.cell.net.find_by_name(self._active_layout, net_name)
1028
1009
  if edb_net is not None:
1029
1010
  return edb_net
1030
1011
 
1031
- @pyedb_function_handler()
1032
1012
  def delete_nets(self, netlist):
1033
1013
  """Delete one or more nets from EDB.
1034
1014
 
@@ -1053,7 +1033,6 @@ class EdbNets(object):
1053
1033
  warnings.warn("Use :func:`delete` method instead.", DeprecationWarning)
1054
1034
  return self.delete(netlist=netlist)
1055
1035
 
1056
- @pyedb_function_handler()
1057
1036
  def delete(self, netlist):
1058
1037
  """Delete one or more nets from EDB.
1059
1038
 
@@ -1086,7 +1065,6 @@ class EdbNets(object):
1086
1065
  nets_deleted.append(i.name)
1087
1066
  return nets_deleted
1088
1067
 
1089
- @pyedb_function_handler()
1090
1068
  def find_or_create_net(self, net_name="", start_with="", contain="", end_with=""):
1091
1069
  """Find or create the net with the given name in the layout.
1092
1070
 
@@ -1161,7 +1139,6 @@ class EdbNets(object):
1161
1139
  nets_found = [self.nets[net].net_object for net in list(self.nets.keys()) if contain in net.lower()]
1162
1140
  return nets_found
1163
1141
 
1164
- @pyedb_function_handler()
1165
1142
  def is_net_in_component(self, component_name, net_name):
1166
1143
  """Check if a net belongs to a component.
1167
1144
 
@@ -1185,7 +1162,6 @@ class EdbNets(object):
1185
1162
  return True
1186
1163
  return False
1187
1164
 
1188
- @pyedb_function_handler()
1189
1165
  def find_and_fix_disjoint_nets(
1190
1166
  self, net_list=None, keep_only_main_net=False, clean_disjoints_less_than=0.0, order_by_area=False
1191
1167
  ):
@@ -1221,7 +1197,6 @@ class EdbNets(object):
1221
1197
  net_list, keep_only_main_net, clean_disjoints_less_than, order_by_area
1222
1198
  )
1223
1199
 
1224
- @pyedb_function_handler()
1225
1200
  def merge_nets_polygons(self, net_names_list):
1226
1201
  """Convert paths from net into polygons, evaluate all connected polygons and perform the merge.
1227
1202