Commit Graph

460 Commits

Author SHA1 Message Date
65466a5986 Force keyword args in more cases 2021-06-18 18:46:05 -07:00
21ef4207df Enable repetition arg for other Polygon constructors 2021-06-18 18:45:40 -07:00
78a4416f4c Fix wrap_repeated_shapes 2021-06-15 16:11:55 -07:00
0d733bdc6f Breaking change: Use string-valued ptypes, with default value 'unk' 2021-06-15 15:23:20 -07:00
jan
44b08a8dae bump version to 2.5 2021-03-26 10:34:30 -07:00
jan
e2fdd5a347 make klamath the default gdsii reader/writer, and install it automatically
python-gdsii code is now under masque.file.python_gdsii
2021-03-26 10:34:02 -07:00
jan
689312cc87 don't include newlines in version string 2021-03-26 10:29:48 -07:00
jan
5b84a436a0 Make flatten() work in-place on all subpatterns (avoid copies and repeated calls). Also fix a bug around identifier generation introduced in a5900f6ad. 2021-03-22 11:29:50 -07:00
8ad4082f6d Fix offset complaining if it gets a Vec3 2021-03-08 17:11:33 -08:00
a5900f6ade BREAKING change shape identifers generated when flattening 2021-03-08 17:10:42 -08:00
db4148a0ff Don't trash label identifiers 2021-03-08 17:10:42 -08:00
7225fd5715 add traceback to port type warnings 2021-03-08 17:10:42 -08:00
jan
1dc7d5bd56 2-element paths are not polygons 2021-02-13 15:47:04 -08:00
jan
5aa41f5e12 fix reading lwpolylines 2021-02-13 15:47:04 -08:00
939ad5451c enable pickling of LockableImpl 2021-01-08 21:21:17 -08:00
88d42807be label axes in visualization 2021-01-08 21:20:03 -08:00
29ee13a8ab fix comment 2020-12-20 20:43:02 -08:00
cf2413f9e3 remove_colinear_vertices implementation assumes no duplicate vertices, so we need to remove them first 2020-12-20 20:42:50 -08:00
bce3d9f37c Avoid placing duplicate vertices when polygonizing an arc 2020-12-20 20:40:59 -08:00
0fce7fd099 bump version to v2.4 2020-12-05 14:52:55 -08:00
479e0c3c2e fix mirroring for rotated ports/devices 2020-12-05 14:50:16 -08:00
b7383a30ca fix mirroring across y for arcs and ellipses 2020-12-05 14:49:57 -08:00
177f9952a5 Add builder submodule, Device and Port definitions, and DeviceLibrary 2020-11-09 22:09:47 -08:00
ad51801c5d minor fixes to rotate() 2020-11-09 22:06:44 -08:00
6c4fe0e9e4 Add octagon constructor 2020-11-09 22:06:19 -08:00
8e1c05cf73 add mirror2d() to Rotatable 2020-11-09 22:05:56 -08:00
09a5e4a2db type-related fixes and improvements 2020-11-09 22:04:04 -08:00
4308bdeb56 Add parent class MasqueError and use it for traits and all other exceptions 2020-11-09 21:59:28 -08:00
3653a33534 add implementation notes 2020-11-09 21:55:46 -08:00
6402c6242e add full_load option to load_library 2020-11-02 20:57:29 -08:00
6ead7231a8 make raw_mode an arg to read()` 2020-11-02 20:56:56 -08:00
74a0a4f7d2 bump version to 2.3 2020-11-01 19:46:25 -08:00
ccb42e220f cosmetic and doc changes 2020-11-01 19:45:57 -08:00
b9322be77f move VERSION into a .py file that gets directly parsed by setup.py
avoids possible issues with pyinstaller
2020-11-01 19:45:31 -08:00
1b400605b1 use addsp() to consolidate some existing code 2020-11-01 19:35:12 -08:00
3a9eca91b5 add addsp() convenience function to Pattern 2020-11-01 19:34:47 -08:00
517a6dec98 remove duplicate setattr definition
already set by LockableImpl
2020-11-01 19:34:25 -08:00
2bc03cbbf4 improve some more type annotations using TypeVar 2020-11-01 19:33:43 -08:00
eb11f31960 improve type hints for Library 2020-10-26 19:58:25 -07:00
f364970403 style and type fixes (per flake8)
could potentially fix some bugs in `Library` class and dxf reader
2020-10-16 19:00:50 -07:00
f6ad272c2c bump version to v2.2 2020-10-10 19:12:56 -07:00
7ed3b26b02 skip assignment in dfs() to avoid PatternLockedError on unmodified patterns 2020-10-10 19:12:17 -07:00
5bc82b9d49 __iter__ should actually return an iterator 2020-10-10 19:11:52 -07:00
0f35eb5e58 fix dxf reader 2020-10-10 19:11:35 -07:00
4a7e20d6ba improve type annotations in dxf writer 2020-10-10 19:11:22 -07:00
c23c391d83 disable locking for annotations
until I can find a better way to do it
2020-10-10 19:10:17 -07:00
08cf7ca4b1 avoid calling to_polygons on Polygons (for speed) 2020-09-29 01:01:10 -07:00
de4726955b add load_libraryfile convenience wrapper 2020-09-29 01:00:37 -07:00
ce5d386a24 Determine if an existing file is gzipped based on magic bytes, not suffix 2020-09-29 00:57:47 -07:00
03a359e446 add more dict-like methods 2020-09-28 23:49:42 -07:00
b873a5ddf3 make __getitem__ call get_primary rather than the other way around
this makes subclassing easier
2020-09-28 23:49:33 -07:00
682a99470f Bump version to 2.1 2020-09-26 17:41:08 -07:00
aa5696d884 Add Library management functionality 2020-09-26 17:37:23 -07:00
7cad46fa46 add klamath-based gds read/write 2020-09-26 17:35:05 -07:00
c6684936cf Improve docs, error messages, and type annotations 2020-09-26 17:33:46 -07:00
84f811e9d1 move clean_vertices functionality out into a common function 2020-09-26 17:32:12 -07:00
0e4b6828df Disable height warning for DXF 2020-09-26 17:24:04 -07:00
a02dfdc982 remove dependency list from top-level comment 2020-09-26 00:44:56 -07:00
f51144ae6a misc doc/import/typing fixes 2020-09-20 16:32:17 -07:00
3f59168cec Use chain() instead of adding lists 2020-09-20 16:32:17 -07:00
5f72fe318f Loosen requirements from List to Sequence 2020-09-20 16:32:17 -07:00
64fbd08cac don't attempt to set structure properties 2020-09-20 16:32:17 -07:00
c4dfd06a42 improve type annotations 2020-09-20 16:32:17 -07:00
f996a1629f limit number of arguments on more functions 2020-09-20 16:32:17 -07:00
0e04633f61 Force use of keyword args on most constructors 2020-09-20 16:32:17 -07:00
2a8e43cbcd bump version to 2.0 2020-09-20 16:32:17 -07:00
49a3b4e322 add support for annotations
and other fixes
2020-09-20 16:32:17 -07:00
ea21353d2e fix incorrect variable name 2020-09-20 16:32:17 -07:00
e330c34a0c import layer_t at top level 2020-09-20 16:32:17 -07:00
92a3b9b72e documentation fixes/updates 2020-09-20 16:32:17 -07:00
e7c8708f7f prefer f-strings 2020-09-20 16:32:17 -07:00
3ec28d4720 typo fixes 2020-09-20 16:32:17 -07:00
b845b0f7bc move shape conversions to their own functions, and use raw mode 2020-09-20 16:32:17 -07:00
352c03c0ae remove use_dtype_as_dose arg 2020-09-20 16:32:17 -07:00
cbb5462fcb spelling fix and wrong import 2020-09-20 16:32:17 -07:00
b4a19a3176 fix @abstractmethod on wrong function 2020-09-20 16:32:17 -07:00
d14182998b various fixes 2020-09-20 16:32:17 -07:00
b98553a770 set repetition on subpattern 2020-09-20 16:32:17 -07:00
99ded5c113 Don't bother checking that dose is a scalar 2020-09-20 16:32:17 -07:00
f57ccc073d add raw arg, which skips setter funcs 2020-09-20 16:32:17 -07:00
7ce601dc1d Enable repeated shapes in gdsii and oasis 2020-09-20 16:32:17 -07:00
629a6a9ba2 enable per-shape repetitions 2020-09-20 16:32:16 -07:00
ad6fa88e53 Expect name to still be a string after disambiguation
Check that encode('ascii') doesn't make it zero-length, but don't
actually return the encoded form.
2020-09-20 16:32:16 -07:00
794ebb6b37 repetition related fixup 2020-09-20 16:32:16 -07:00
bab40474a0 Add repetitions and split up code into traits 2020-09-20 16:32:16 -07:00
d4fbdd8d27 add fast-path for 0-degree rotations 2020-08-11 01:19:15 -07:00
0fa073b488 Make sure linspace gets an integer number of points 2020-07-21 20:38:38 -07:00
89bd1e6abe only add new_children (marginally faster) 2020-07-12 03:50:32 -07:00
a4b5776208 Don't return early, since we add patterns to memo before they've been checked 2020-07-12 03:50:19 -07:00
0589fbb1b8 bump version to v1.5 2020-07-08 18:42:39 -07:00
1ae9225130 add rename() method for Pattern 2020-07-08 18:36:19 -07:00
f3a1db30c5 Fix order of rotation/mirror/offset when calling as_pattern() on repetitions 2020-07-08 18:36:14 -07:00
53d2a9ca1a Only swap between tuple/list if actually necessary 2020-05-23 19:39:48 -07:00
07ee25e735 add subpatterns_by_id() 2020-05-23 19:39:03 -07:00
1976c6e684 Add recursive arg to referenced_patterns_by_id 2020-05-23 19:38:48 -07:00
09615eaea6 use set() to remove any duplicates in patterns 2020-05-23 19:38:17 -07:00
e401f37993 Improve documentation on disambiguate_pattern_names 2020-05-23 19:37:55 -07:00
778e54c895 bump version to v1.4 2020-05-19 01:01:31 -07:00
f204d917c9 Add basic support for OASIS and update setup/docs for OASIS and DXF support 2020-05-19 01:00:00 -07:00
6e957d761a newline 2020-05-19 00:29:30 -07:00
1bb4bd6bb7 add py.typed to enable type checking for downstream 2020-05-19 00:15:51 -07:00
8082743e17 move dose2dtype() into masque.file.utils, add dtype2dose(), and add a note that use_dtype_as_dose 2020-05-19 00:13:50 -07:00
1b0b056bf9 break out build() which returns the gdsii.library.Library object 2020-05-19 00:03:29 -07:00
d7a8bd7e0d Allow b_count=None 2020-05-17 23:00:25 -07:00
22b2834d55 Documentation improvements 2020-05-17 22:59:54 -07:00
f9fb7ccad3 move gdsii import below standard packages 2020-05-17 17:22:50 -07:00
5bd1e85d89 add experimental support for dxf 2020-05-17 14:13:01 -07:00
f260fe1374 comment fixup 2020-05-17 14:12:38 -07:00
8a404a2602 Allow setting subpattern identifier in constructors 2020-05-17 14:12:27 -07:00
8302286a7a allow using a string for the layer
Can't use it in gdsii, but no reason to forbit it in masque...
2020-05-17 14:11:47 -07:00
247b31a9d6 Don't include None in referenced_patterns_by_id() by default 2020-05-17 14:05:19 -07:00
5c6c10d2be fix repetition __repr__ 2020-05-12 14:17:50 -07:00
f312f50751 some typing clarifications 2020-05-12 14:17:35 -07:00
ee8f015172 add subpattern_t type (generalizattion of SubPattern and GridRepetition) 2020-05-12 14:17:17 -07:00
6b09fc0c20 make section comments more prominent 2020-05-11 20:31:35 -07:00
a440f2e256 add Shape.set_layer() 2020-05-11 20:31:21 -07:00
c236fdb81b Add __repr__ methods to most objects`
These are closer to what __str__ should be and will likely change in the
future.
2020-05-11 20:31:07 -07:00
c79eee2a8c Stricter locking (lock contained ndarrays and turn lists into tuples) 2020-05-11 19:29:00 -07:00
79990e3806 cosmetic changes 2020-05-11 19:10:00 -07:00
157df47884 Improve type annotations based on mypy errors 2020-05-11 19:09:35 -07:00
bd4085365f Path should create a Path, not a Polygon 2020-05-11 19:04:25 -07:00
9bfb3bef9f avoid unnecessarily nested classes
Still provide a class variable for convenience
2020-05-11 19:03:55 -07:00
d33afc2bfd disambiguate some variable names 2020-05-11 19:01:02 -07:00
f8e347c997 fix scale -> scale_by 2020-05-11 19:00:25 -07:00
8493364e9c Use a tuple for .identifier 2020-05-11 18:59:47 -07:00
00394a62f0 Formally allow instances to point to None (i.e. an 'empty' pattern) 2020-05-11 18:58:57 -07:00
f8c49cdb5e Add setter/getter for .pattern to catch wrong types 2020-05-11 18:52:17 -07:00
fa8fc52dd6 Improve consistency of ndarray members 2020-05-11 18:49:30 -07:00
9fa527ea11 improve handling of patterns with no bounding box 2020-05-11 18:42:31 -07:00
334633662e Remove extra __author__ declarations 2020-05-11 18:41:13 -07:00
df179c9233 Improve type annotations for layer 2020-05-11 18:39:02 -07:00
95ab0934b7 bump version to v1.3 2020-03-14 15:54:20 -07:00
e9244055c6 Add type check for SubPattern's pattern arg 2020-03-14 15:53:35 -07:00
a4f556c3b3 clarify docs for referenced_patterns_by_id() 2020-03-14 15:53:05 -07:00
e684bd0e40 add Pattern.find_toplevel()
Topological sort for lists of Pattern objects, useful for finding top
cell of gds
2020-03-14 15:52:49 -07:00
9f27a5093a add Pattern.referenced_patterns_by_name() 2020-03-14 15:52:10 -07:00
jan
5adabfd25a Docstring format change
(new param and return format)
Also some minor code formatting fixes in utils
2020-02-17 21:02:53 -08:00
jan
20981f10b9 Fix error name
InvalidDataError -> PatternError
2020-02-16 18:17:28 -08:00
jan
a930c65d42 fix gridrepetition mirror 2020-02-10 10:09:07 -08:00
2a53d8ef4d bump version to 1.2 2020-02-07 23:49:53 -08:00
0db70d2c50 Change GridRepetition rotation/mirrored/scale properties so that they consistently apply only to the individual instances; the rotate()/mirror()/scale_by() functions apply to the full array. Add *_elements() versions of the functions 2020-02-07 23:01:14 -08:00
64b8e4dec8 Fix duplicates in gds with multiple top-level cells
Since the different patterns we are handed might reference the same
Patterns, we have to deepcopy the entire list at once so that we
don't make multiple copies of them.
2020-01-07 22:17:00 -08:00
jan
5ba67af816 bump version to 1.1 2019-12-31 13:56:18 -08:00
25c9e591cb shapes: unlock before modifying during deepcopy 2019-12-13 21:18:31 -08:00
f2e6548d21 fix locking issue in __deepcopy__ 2019-12-13 21:18:31 -08:00
e0db621595 allow locking of all objects 2019-12-13 21:18:31 -08:00
09711116a7 allow more freedom in pattern names (e.g. names which violate spec, longer suffixes, filter warning, etc) 2019-12-12 01:48:36 -08:00
df9c4b52f4 add some todos 2019-12-12 01:48:24 -08:00
fcc4770534 Mirroring fix for gdsii import 2019-12-11 21:16:31 -08:00
97b7eda21a Force repetition counts to be integers 2019-12-06 22:28:11 -08:00
f3669f2dfd fixup mirroring for subpatterns 2019-12-06 22:19:16 -08:00
4bc51f765f custom __copy__ for SubPattern and GridRepetition
the difference between copy/deepcopy should be whether a copy is made of
the contained pattern
2019-12-06 22:19:11 -08:00
7b0a567625 .mirrored should be an ndarray 2019-12-04 23:30:46 -08:00
bece3136be Bump version number to 1.0
Note MAJOR incompatibilities with previous version, including
- order of Pattern() args
- save format
- i/o functions
2019-09-30 23:54:21 -07:00
f471374b68 Use separate VERSION file 2019-09-27 21:03:52 -07:00
2259e7987b don't rename shape.to_polygons() args 2019-06-09 23:59:55 -07:00
e5f28a7a92 Fix Pattern.get_bounds() 2019-06-09 23:57:54 -07:00
6801ee7fc0 Account for rotation/mirror in Pattern.dfs() 2019-05-25 12:41:51 -07:00
b5bd7cd9c8 Pattern.get_bounds() should return None if it's empty
s
2019-05-25 12:41:30 -07:00
49982f1207 Add newlines to long log messages 2019-05-25 12:40:17 -07:00
jan
dcd8324eb4 Use to_polygons() for bounds calculation for simple path shapes 2019-05-20 21:06:28 -07:00
jan
2c9af3f63f Simplify normalize_mirror 2019-05-20 21:04:31 -07:00
jan
0ab5674fb9 strans needs starting value (0) 2019-05-20 21:04:07 -07:00
02c3d300e0 Wrap long lines (cosmetic) 2019-05-18 15:05:38 -07:00
75b42f6b63 Use normalize_mirror for all 2d-to-1d mirroring 2019-05-18 15:05:30 -07:00
194a90fe7a Add Pattern.dfs()
Depth-first traversal with hierarchy and transform tracking
2019-05-18 15:05:05 -07:00
76f213a7ce use .identifier instead of the dynamically-created .ref_name 2019-05-17 20:51:53 -07:00
ca80b14ee4 Fix text get_bounds
was addressing list using numpy slices
2019-05-17 01:20:10 -07:00
67c9b510cb Rename svg functions to reflect their gds counterparts
Backwards incompatible!
2019-05-17 01:16:18 -07:00
503a77925e Move away from __dict__ style save/load
Incompatible with previous versions, but necessary given the move to
__slots__.

Also use pickle.HIGHEST_PROTOCOL
2019-05-17 00:44:10 -07:00
28084dfe45 Make name the first argument to Pattern() init
Major incompatibility with previous versions!!
2019-05-17 00:42:55 -07:00
a154555902 Add TODO noting that polygon mirroring could be normalized 2019-05-17 00:42:14 -07:00
f00d283c56 Add missing imports 2019-05-17 00:41:43 -07:00
032c410b43 Add mirror_x to extrinsic properties
It's not implemented for Polygon shapes, since I haven't thought about
how to normalize those for reflection yet
2019-05-17 00:41:26 -07:00
2e54cf1080 initialize identifier for text shapes 2019-05-17 00:39:56 -07:00
16c6bfc70a Cosmetic changes to argument lists 2019-05-17 00:39:46 -07:00
58353b7884 Remove orphaned comment 2019-05-17 00:38:20 -07:00
38f64f7c62 Use __slots__ for class members
Also use the other sort of type hints for instance variables
2019-05-17 00:37:56 -07:00
0b962999b2 Add arbitrary identifier for labels and subpattern/repetition 2019-05-17 00:34:01 -07:00
703c1aa6d8 Custom deepcopy for labels 2019-05-17 00:32:51 -07:00
17451cd995 Force dose2dtype to accept only a list of patterns
Backwards incompatible, just like the rest of the gdsii rework
2019-05-17 00:30:32 -07:00
1ef8518c60 Fix dose2dtype
Was broken during gdsii refactor
2019-05-17 00:28:46 -07:00
a6a3ae797c Fix Pattern.scale_by() for labels
Label offsets weren't being scaled.
2019-05-15 23:51:51 -07:00
4bd5542ce9 Clarify warning when adding suffix 2019-05-15 23:51:17 -07:00
3ff9a8a506 Shorten long names when writing
Maybe turn this into an option later?
2019-05-15 23:51:00 -07:00
376cbcce26 Use buffered IO
free ~10% speedup on read, probably similar on write
2019-05-15 23:50:31 -07:00
a461446059 Custom deepcopy() implementations to help speed things up 2019-05-15 00:19:37 -07:00
94410dffc9 Fix clockwise (to-perp) path bends 2019-05-15 00:18:43 -07:00
2909b25fd7 Missing args for commit bc43be48bc (cap_extensions) 2019-05-15 00:17:40 -07:00
a44a7c176e Add type hints 2019-05-15 00:14:35 -07:00
bc43be48bc Implement SquareCustom end-caps and gds output 2019-05-15 00:14:17 -07:00
d5665f54a7 Comment and type hint updates 2019-05-15 00:12:34 -07:00
b8b848c28f add Pattern.is_empty() 2019-05-15 00:11:44 -07:00
0bbcf3823a Fix .gz suffix detection 2019-05-15 00:11:28 -07:00
347716ec6e Give shapes unique path-like identifiers when flattening 2019-05-13 23:55:42 -07:00
9ab1372c7b Allow shapes to carry an arbitrary identifier (Tuple) 2019-05-13 23:55:14 -07:00
380393dbc3 Fix mirror axis for arrays 2019-05-07 00:58:39 -07:00
5741b38ca6 fixup remove_colinear_vertices 2019-05-06 21:07:53 -07:00
ee6699a7de fix alternate polygon constructors 2019-04-20 15:44:45 -07:00
0018891200 handle defaults for path params 2019-04-20 15:42:42 -07:00