Coder Social home page Coder Social logo

Boolean subtraction errors about gdspy HOT 20 CLOSED

heitzmann avatar heitzmann commented on September 28, 2024
Boolean subtraction errors

from gdspy.

Comments (20)

rosivda avatar rosivda commented on September 28, 2024

@heitzmann Unfortunately the above issue is holding up our migration to 1.1.1 (from 1.0). Was there some other reason to change the boolean code? We have not experienced any errors in gdspy 1.0.

from gdspy.

heitzmann avatar heitzmann commented on September 28, 2024

Hello @okianus and @rosivda,

The problem seems to have been the last update on the external library we use, which introduced the bug on their side. I've updated gdspy again to include the newest version, and the example you provided is working correctly for me.

I'm releasing a bugfix version 1.1.2. Please, let me know if the problem persists and thanks for the report!

from gdspy.

rosivda avatar rosivda commented on September 28, 2024

@heitzmann Thanks for your quick fix. We will do the installation and verification of 1.1.2 shortly and will let you know how it goes. Since we rely on gdspy for our production builds, we have almost finished creating an automated testing framework that validates the integrity of all our binary artifacts as we transition from one release of gdspy to the next. This is related to issue #24 and is based on SHA-1 hashing of binary .gds files. Because of the sheer size of our libraries, we are likely to detect a wide range of bugs and inconsistencies between the releases (though not able to pass judgment about the significance of observed differences).

from gdspy.

rosivda avatar rosivda commented on September 28, 2024

@heitzmann After testing many geometries, we have concluded that, unfortunately, the offset algorithm still has issues (1.1.2 tested, the issue may have existed previously). It is not a frequent error and does not prevent us from effectively using gdspy but it does occur. The picture below shows the original structures in cyan and the resultant offset operation in black (small offset was applied) - obviously incorrect. Unfortunately, these errors are embedded into large layouts. We are currently working on isolating the issue to a simplest presentable case that can be acted on. I am also testing a few theories about what circumstances trigger this and we will be reporting on this as we tackle this issue.

offset

from gdspy.

okianus avatar okianus commented on September 28, 2024

@heitzmann Below is an example that illustrates the offset problem described by @rosivda above. It creates a few waveguide structures, and enlarges them by a small amount. Please note that the exact manifestation of the errors differs, depending on how much of the input structure is included in the example, but you can see an example of the type of errors that we observe in the output file. Thank you for your help with this.

Example of offset error:

import gdspy
import numpy as np

# structure coordinates
poly_stuctures = [
    np.array([[-7770.333,  3098.327],
       [-7771.369,  3100.531],
       [-7772.402,  3102.737],
       [-7773.431,  3104.944],
       [-7774.456,  3107.153],
       [-7775.478,  3109.364],
       [-7776.495,  3111.576],
       [-7777.509,  3113.791],
       [-7778.518,  3116.007],
       [-7779.524,  3118.225],
       [-7780.526,  3120.444],
       [-7781.525,  3122.666],
       [-7782.519,  3124.889],
       [-7783.509,  3127.113],
       [-7784.496,  3129.34 ],
       [-7785.479,  3131.568],
       [-7786.458,  3133.798],
       [-7787.433,  3136.03 ],
       [-7788.404,  3138.263],
       [-7789.371,  3140.498],
       [-7790.334,  3142.735],
       [-7791.294,  3144.973],
       [-7792.25 ,  3147.213],
       [-7793.201,  3149.455],
       [-7794.149,  3151.698],
       [-7795.093,  3153.943],
       [-7796.033,  3156.19 ],
       [-7796.969,  3158.438],
       [-7797.901,  3160.688],
       [-7798.829,  3162.939],
       [-7799.754,  3165.192],
       [-7800.674,  3167.447],
       [-7801.591,  3169.703],
       [-7802.503,  3171.961],
       [-7803.412,  3174.221],
       [-7804.317,  3176.482],
       [-7805.218,  3178.744],
       [-7806.114,  3181.008],
       [-7807.007,  3183.274],
       [-7807.896,  3185.541],
       [-7808.781,  3187.81 ],
       [-7809.663,  3190.08 ],
       [-7810.54 ,  3192.352],
       [-7811.413,  3194.626],
       [-7812.282,  3196.901],
       [-7813.148,  3199.177],
       [-7814.009,  3201.455],
       [-7814.866,  3203.734],
       [-7815.72 ,  3206.015],
       [-7816.569,  3208.298],
       [-7817.415,  3210.581],
       [-7818.256,  3212.867],
       [-7819.094,  3215.153],
       [-7819.927,  3217.442],
       [-7820.757,  3219.731],
       [-7821.583,  3222.022],
       [-7822.404,  3224.315],
       [-7823.222,  3226.609],
       [-7824.036,  3228.904],
       [-7824.845,  3231.201],
       [-7825.651,  3233.499],
       [-7826.453,  3235.799],
       [-7827.25 ,  3238.1  ],
       [-7828.044,  3240.402],
       [-7828.834,  3242.706],
       [-7829.62 ,  3245.011],
       [-7830.401,  3247.317],
       [-7831.179,  3249.625],
       [-7831.953,  3251.934],
       [-7832.722,  3254.245],
       [-7833.488,  3256.557],
       [-7834.25 ,  3258.87 ],
       [-7835.007,  3261.184],
       [-7835.761,  3263.5  ],
       [-7836.51 ,  3265.817],
       [-7837.256,  3268.136],
       [-7837.997,  3270.455],
       [-7838.735,  3272.776],
       [-7839.468,  3275.099],
       [-7840.198,  3277.422],
       [-7840.923,  3279.747],
       [-7841.644,  3282.073],
       [-7842.362,  3284.4  ],
       [-7843.075,  3286.729],
       [-7843.784,  3289.059],
       [-7844.489,  3291.39 ],
       [-7845.19 ,  3293.722],
       [-7845.887,  3296.055],
       [-7846.58 ,  3298.39 ],
       [-7847.269,  3300.726],
       [-7847.954,  3303.063],
       [-7848.635,  3305.401],
       [-7849.312,  3307.74 ],
       [-7849.984,  3310.081],
       [-7850.653,  3312.423],
       [-7851.317,  3314.766],
       [-7851.978,  3317.11 ],
       [-7852.634,  3319.455],
       [-7853.287,  3321.801],
       [-7850.01 ,  3322.709],
       [-7849.359,  3320.368],
       [-7848.704,  3318.029],
       [-7848.046,  3315.691],
       [-7847.383,  3313.353],
       [-7846.716,  3311.017],
       [-7846.045,  3308.682],
       [-7845.37 ,  3306.349],
       [-7844.69 ,  3304.016],
       [-7844.007,  3301.685],
       [-7843.32 ,  3299.355],
       [-7842.629,  3297.026],
       [-7841.933,  3294.698],
       [-7841.234,  3292.371],
       [-7840.531,  3290.046],
       [-7839.823,  3287.722],
       [-7839.112,  3285.399],
       [-7838.396,  3283.077],
       [-7837.676,  3280.757],
       [-7836.953,  3278.438],
       [-7836.225,  3276.12 ],
       [-7835.494,  3273.803],
       [-7834.758,  3271.488],
       [-7834.018,  3269.174],
       [-7833.274,  3266.861],
       [-7832.527,  3264.549],
       [-7831.775,  3262.239],
       [-7831.019,  3259.93 ],
       [-7830.259,  3257.623],
       [-7829.496,  3255.317],
       [-7828.728,  3253.012],
       [-7827.956,  3250.708],
       [-7827.18 ,  3248.406],
       [-7826.4  ,  3246.105],
       [-7825.617,  3243.806],
       [-7824.829,  3241.507],
       [-7824.037,  3239.211],
       [-7823.241,  3236.915],
       [-7822.442,  3234.621],
       [-7821.638,  3232.329],
       [-7820.83 ,  3230.037],
       [-7820.018,  3227.748],
       [-7819.203,  3225.459],
       [-7818.383,  3223.172],
       [-7817.559,  3220.887],
       [-7816.732,  3218.603],
       [-7815.9  ,  3216.32 ],
       [-7815.065,  3214.039],
       [-7814.225,  3211.759],
       [-7813.382,  3209.481],
       [-7812.534,  3207.204],
       [-7811.683,  3204.929],
       [-7810.828,  3202.655],
       [-7809.968,  3200.382],
       [-7809.105,  3198.111],
       [-7808.238,  3195.842],
       [-7807.367,  3193.574],
       [-7806.492,  3191.308],
       [-7805.613,  3189.043],
       [-7804.73 ,  3186.78 ],
       [-7803.843,  3184.518],
       [-7802.952,  3182.258],
       [-7802.058,  3179.999],
       [-7801.159,  3177.742],
       [-7800.256,  3175.486],
       [-7799.35 ,  3173.232],
       [-7798.44 ,  3170.98 ],
       [-7797.525,  3168.729],
       [-7796.607,  3166.48 ],
       [-7795.685,  3164.232],
       [-7794.759,  3161.986],
       [-7793.829,  3159.742],
       [-7792.895,  3157.499],
       [-7791.958,  3155.258],
       [-7791.016,  3153.019],
       [-7790.07 ,  3150.781],
       [-7789.121,  3148.544],
       [-7788.168,  3146.31 ],
       [-7787.211,  3144.077],
       [-7786.25 ,  3141.846],
       [-7785.285,  3139.616],
       [-7784.316,  3137.388],
       [-7783.343,  3135.162],
       [-7782.367,  3132.937],
       [-7781.386,  3130.715],
       [-7780.402,  3128.494],
       [-7779.414,  3126.274],
       [-7778.422,  3124.056],
       [-7777.426,  3121.841],
       [-7776.427,  3119.626],
       [-7775.423,  3117.414],
       [-7774.416,  3115.203],
       [-7773.405,  3112.994],
       [-7772.39 ,  3110.787],
       [-7771.371,  3108.581],
       [-7770.348,  3106.378],
       [-7769.322,  3104.176],
       [-7768.291,  3101.976],
       [-7767.257,  3099.777]]),
np.array([[-7853.287,  3321.801],
       [-7853.935,  3324.149],
       [-7854.579,  3326.497],
       [-7855.219,  3328.847],
       [-7855.855,  3331.198],
       [-7856.487,  3333.55 ],
       [-7857.115,  3335.903],
       [-7857.738,  3338.257],
       [-7858.358,  3340.612],
       [-7858.974,  3342.968],
       [-7859.585,  3345.326],
       [-7860.192,  3347.684],
       [-7860.796,  3350.043],
       [-7861.395,  3352.404],
       [-7861.99 ,  3354.765],
       [-7862.581,  3357.128],
       [-7863.168,  3359.492],
       [-7863.75 ,  3361.856],
       [-7864.329,  3364.222],
       [-7864.903,  3366.588],
       [-7865.474,  3368.956],
       [-7866.04 ,  3371.324],
       [-7866.602,  3373.694],
       [-7867.16 ,  3376.064],
       [-7867.714,  3378.436],
       [-7868.264,  3380.808],
       [-7868.81 ,  3383.182],
       [-7869.351,  3385.556],
       [-7869.889,  3387.931],
       [-7870.422,  3390.308],
       [-7870.951,  3392.685],
       [-7867.632,  3393.421],
       [-7867.104,  3391.049],
       [-7866.572,  3388.679],
       [-7866.036,  3386.309],
       [-7865.495,  3383.941],
       [-7864.951,  3381.573],
       [-7864.403,  3379.206],
       [-7863.85 ,  3376.841],
       [-7863.293,  3374.476],
       [-7862.733,  3372.112],
       [-7862.168,  3369.749],
       [-7861.599,  3367.387],
       [-7861.026,  3365.027],
       [-7860.448,  3362.667],
       [-7859.867,  3360.308],
       [-7859.282,  3357.95 ],
       [-7858.692,  3355.593],
       [-7858.099,  3353.238],
       [-7857.501,  3350.883],
       [-7856.899,  3348.529],
       [-7856.293,  3346.176],
       [-7855.683,  3343.825],
       [-7855.069,  3341.474],
       [-7854.451,  3339.125],
       [-7853.829,  3336.776],
       [-7853.203,  3334.429],
       [-7852.572,  3332.083],
       [-7851.938,  3329.738],
       [-7851.299,  3327.394],
       [-7850.657,  3325.051],
       [-7850.01 ,  3322.709]]),
np.array([[-7788.425,  3089.797],
       [-7789.476,  3092.032],
       [-7790.524,  3094.269],
       [-7791.567,  3096.508],
       [-7792.607,  3098.749],
       [-7793.643,  3100.991],
       [-7794.675,  3103.235],
       [-7795.703,  3105.481],
       [-7796.727,  3107.729],
       [-7797.748,  3109.978],
       [-7798.764,  3112.23 ],
       [-7799.777,  3114.483],
       [-7800.785,  3116.737],
       [-7801.79 ,  3118.994],
       [-7802.79 ,  3121.252],
       [-7803.787,  3123.512],
       [-7804.78 ,  3125.774],
       [-7805.769,  3128.038],
       [-7806.754,  3130.303],
       [-7807.735,  3132.57 ],
       [-7808.712,  3134.838],
       [-7809.685,  3137.109],
       [-7810.654,  3139.38 ],
       [-7811.62 ,  3141.654],
       [-7812.581,  3143.93 ],
       [-7813.538,  3146.207],
       [-7814.492,  3148.485],
       [-7815.441,  3150.765],
       [-7816.387,  3153.047],
       [-7817.328,  3155.331],
       [-7818.266,  3157.616],
       [-7819.199,  3159.903],
       [-7820.129,  3162.192],
       [-7821.055,  3164.482],
       [-7821.976,  3166.773],
       [-7822.894,  3169.067],
       [-7823.808,  3171.362],
       [-7824.717,  3173.658],
       [-7825.623,  3175.956],
       [-7826.525,  3178.256],
       [-7827.422,  3180.557],
       [-7828.316,  3182.86 ],
       [-7829.206,  3185.164],
       [-7830.091,  3187.47 ],
       [-7830.973,  3189.777],
       [-7831.851,  3192.086],
       [-7832.724,  3194.396],
       [-7833.594,  3196.708],
       [-7834.46 ,  3199.022],
       [-7835.321,  3201.337],
       [-7836.179,  3203.653],
       [-7837.032,  3205.971],
       [-7837.882,  3208.291],
       [-7838.727,  3210.611],
       [-7839.569,  3212.934],
       [-7840.406,  3215.258],
       [-7841.24 ,  3217.583],
       [-7842.069,  3219.909],
       [-7842.894,  3222.238],
       [-7843.715,  3224.567],
       [-7844.533,  3226.898],
       [-7845.346,  3229.231],
       [-7846.155,  3231.564],
       [-7846.96 ,  3233.9  ],
       [-7847.761,  3236.236],
       [-7848.558,  3238.574],
       [-7849.351,  3240.914],
       [-7850.139,  3243.254],
       [-7850.924,  3245.596],
       [-7851.705,  3247.94 ],
       [-7852.481,  3250.285],
       [-7853.254,  3252.631],
       [-7854.022,  3254.978],
       [-7854.787,  3257.327],
       [-7855.547,  3259.677],
       [-7856.303,  3262.029],
       [-7857.055,  3264.382],
       [-7857.803,  3266.736],
       [-7858.547,  3269.091],
       [-7859.287,  3271.448],
       [-7860.023,  3273.806],
       [-7860.754,  3276.165],
       [-7861.482,  3278.526],
       [-7862.205,  3280.887],
       [-7862.924,  3283.25 ],
       [-7863.64 ,  3285.615],
       [-7864.351,  3287.98 ],
       [-7865.058,  3290.347],
       [-7865.761,  3292.715],
       [-7866.459,  3295.084],
       [-7867.154,  3297.454],
       [-7867.845,  3299.826],
       [-7868.531,  3302.199],
       [-7869.213,  3304.573],
       [-7869.891,  3306.948],
       [-7870.565,  3309.324],
       [-7871.235,  3311.702],
       [-7871.901,  3314.081],
       [-7872.563,  3316.46 ],
       [-7869.286,  3317.368],
       [-7868.626,  3314.994],
       [-7867.962,  3312.621],
       [-7867.294,  3310.249],
       [-7866.621,  3307.879],
       [-7865.945,  3305.509],
       [-7865.264,  3303.141],
       [-7864.579,  3300.774],
       [-7863.89 ,  3298.408],
       [-7863.197,  3296.043],
       [-7862.5  ,  3293.68 ],
       [-7861.799,  3291.317],
       [-7861.094,  3288.956],
       [-7860.384,  3286.596],
       [-7859.671,  3284.238],
       [-7858.953,  3281.88 ],
       [-7858.232,  3279.524],
       [-7857.506,  3277.169],
       [-7856.776,  3274.816],
       [-7856.042,  3272.463],
       [-7855.304,  3270.112],
       [-7854.562,  3267.763],
       [-7853.816,  3265.414],
       [-7853.065,  3263.067],
       [-7852.311,  3260.721],
       [-7851.553,  3258.377],
       [-7850.79 ,  3256.033],
       [-7850.024,  3253.691],
       [-7849.253,  3251.351],
       [-7848.478,  3249.012],
       [-7847.699,  3246.674],
       [-7846.917,  3244.337],
       [-7846.13 ,  3242.002],
       [-7845.339,  3239.668],
       [-7844.544,  3237.336],
       [-7843.745,  3235.005],
       [-7842.942,  3232.675],
       [-7842.134,  3230.347],
       [-7841.323,  3228.02 ],
       [-7840.508,  3225.695],
       [-7839.689,  3223.371],
       [-7838.865,  3221.048],
       [-7838.038,  3218.727],
       [-7837.207,  3216.407],
       [-7836.371,  3214.089],
       [-7835.532,  3211.772],
       [-7834.688,  3209.457],
       [-7833.841,  3207.143],
       [-7832.989,  3204.831],
       [-7832.134,  3202.52 ],
       [-7831.274,  3200.211],
       [-7830.411,  3197.903],
       [-7829.543,  3195.596],
       [-7828.672,  3193.291],
       [-7827.796,  3190.988],
       [-7826.916,  3188.686],
       [-7826.033,  3186.386],
       [-7825.145,  3184.087],
       [-7824.254,  3181.79 ],
       [-7823.358,  3179.494],
       [-7822.459,  3177.2  ],
       [-7821.555,  3174.907],
       [-7820.648,  3172.617],
       [-7819.736,  3170.327],
       [-7818.821,  3168.039],
       [-7817.901,  3165.753],
       [-7816.978,  3163.468],
       [-7816.05 ,  3161.185],
       [-7815.119,  3158.904],
       [-7814.184,  3156.624],
       [-7813.245,  3154.346],
       [-7812.301,  3152.07 ],
       [-7811.354,  3149.795],
       [-7810.403,  3147.522],
       [-7809.448,  3145.25 ],
       [-7808.489,  3142.98 ],
       [-7807.526,  3140.712],
       [-7806.559,  3138.445],
       [-7805.588,  3136.18 ],
       [-7804.613,  3133.917],
       [-7803.635,  3131.656],
       [-7802.652,  3129.396],
       [-7801.666,  3127.138],
       [-7800.675,  3124.882],
       [-7799.681,  3122.627],
       [-7798.682,  3120.374],
       [-7797.68 ,  3118.123],
       [-7796.674,  3115.874],
       [-7795.664,  3113.626],
       [-7794.65 ,  3111.38 ],
       [-7793.632,  3109.136],
       [-7792.61 ,  3106.894],
       [-7791.585,  3104.653],
       [-7790.555,  3102.414],
       [-7789.522,  3100.177],
       [-7788.485,  3097.942],
       [-7787.443,  3095.709],
       [-7786.398,  3093.477],
       [-7785.349,  3091.247]]),
np.array([[-7872.563,  3316.46 ],
       [-7873.22 ,  3318.841],
       [-7873.873,  3321.223],
       [-7874.523,  3323.607],
       [-7875.168,  3325.991],
       [-7875.809,  3328.377],
       [-7876.445,  3330.763],
       [-7877.078,  3333.151],
       [-7877.706,  3335.54 ],
       [-7878.331,  3337.929],
       [-7878.951,  3340.32 ],
       [-7879.567,  3342.712],
       [-7880.179,  3345.106],
       [-7880.786,  3347.5  ],
       [-7881.39 ,  3349.895],
       [-7881.989,  3352.291],
       [-7882.585,  3354.688],
       [-7883.176,  3357.087],
       [-7883.763,  3359.486],
       [-7884.345,  3361.887],
       [-7884.924,  3364.288],
       [-7885.498,  3366.69 ],
       [-7886.068,  3369.094],
       [-7886.634,  3371.498],
       [-7887.196,  3373.903],
       [-7887.754,  3376.31 ],
       [-7888.307,  3378.717],
       [-7888.856,  3381.125],
       [-7889.402,  3383.534],
       [-7889.942,  3385.944],
       [-7890.479,  3388.356],
       [-7887.16 ,  3389.091],
       [-7886.624,  3386.686],
       [-7886.085,  3384.282],
       [-7885.541,  3381.878],
       [-7884.993,  3379.476],
       [-7884.441,  3377.074],
       [-7883.885,  3374.674],
       [-7883.324,  3372.274],
       [-7882.759,  3369.876],
       [-7882.191,  3367.478],
       [-7881.618,  3365.081],
       [-7881.04 ,  3362.686],
       [-7880.459,  3360.291],
       [-7879.874,  3357.898],
       [-7879.284,  3355.505],
       [-7878.69 ,  3353.113],
       [-7878.092,  3350.723],
       [-7877.49 ,  3348.333],
       [-7876.884,  3345.945],
       [-7876.274,  3343.558],
       [-7875.659,  3341.171],
       [-7875.04 ,  3338.786],
       [-7874.418,  3336.402],
       [-7873.791,  3334.019],
       [-7873.159,  3331.637],
       [-7872.524,  3329.256],
       [-7871.885,  3326.876],
       [-7871.241,  3324.497],
       [-7870.594,  3322.12 ],
       [-7869.942,  3319.743],
       [-7869.286,  3317.368]]),
np.array([[-8670.333,  3058.327],
       [-8671.369,  3060.531],
       [-8672.402,  3062.737],
       [-8673.431,  3064.944],
       [-8674.456,  3067.153],
       [-8675.478,  3069.364],
       [-8676.495,  3071.576],
       [-8677.509,  3073.791],
       [-8678.518,  3076.007],
       [-8679.524,  3078.225],
       [-8680.526,  3080.444],
       [-8681.525,  3082.666],
       [-8682.519,  3084.889],
       [-8683.509,  3087.113],
       [-8684.496,  3089.34 ],
       [-8685.479,  3091.568],
       [-8686.458,  3093.798],
       [-8687.433,  3096.03 ],
       [-8688.404,  3098.263],
       [-8689.371,  3100.498],
       [-8690.334,  3102.735],
       [-8691.294,  3104.973],
       [-8692.25 ,  3107.213],
       [-8693.201,  3109.455],
       [-8694.149,  3111.698],
       [-8695.093,  3113.943],
       [-8696.033,  3116.19 ],
       [-8696.969,  3118.438],
       [-8697.901,  3120.688],
       [-8698.829,  3122.939],
       [-8699.754,  3125.192],
       [-8700.674,  3127.447],
       [-8701.591,  3129.703],
       [-8702.503,  3131.961],
       [-8703.412,  3134.221],
       [-8704.317,  3136.482],
       [-8705.218,  3138.744],
       [-8706.114,  3141.008],
       [-8707.007,  3143.274],
       [-8707.896,  3145.541],
       [-8708.781,  3147.81 ],
       [-8709.663,  3150.08 ],
       [-8710.54 ,  3152.352],
       [-8711.413,  3154.626],
       [-8712.282,  3156.901],
       [-8713.148,  3159.177],
       [-8714.009,  3161.455],
       [-8714.866,  3163.734],
       [-8715.72 ,  3166.015],
       [-8716.569,  3168.298],
       [-8717.415,  3170.581],
       [-8718.256,  3172.867],
       [-8719.094,  3175.153],
       [-8719.927,  3177.442],
       [-8720.757,  3179.731],
       [-8721.583,  3182.022],
       [-8722.404,  3184.315],
       [-8723.222,  3186.609],
       [-8724.036,  3188.904],
       [-8724.845,  3191.201],
       [-8725.651,  3193.499],
       [-8726.453,  3195.799],
       [-8727.25 ,  3198.1  ],
       [-8728.044,  3200.402],
       [-8728.834,  3202.706],
       [-8729.62 ,  3205.011],
       [-8730.401,  3207.317],
       [-8731.179,  3209.625],
       [-8731.953,  3211.934],
       [-8732.722,  3214.245],
       [-8733.488,  3216.557],
       [-8734.25 ,  3218.87 ],
       [-8735.007,  3221.184],
       [-8735.761,  3223.5  ],
       [-8736.51 ,  3225.817],
       [-8737.256,  3228.136],
       [-8737.997,  3230.455],
       [-8738.735,  3232.776],
       [-8739.468,  3235.099],
       [-8740.198,  3237.422],
       [-8740.923,  3239.747],
       [-8741.644,  3242.073],
       [-8742.362,  3244.4  ],
       [-8743.075,  3246.729],
       [-8743.784,  3249.059],
       [-8744.489,  3251.39 ],
       [-8745.19 ,  3253.722],
       [-8745.887,  3256.055],
       [-8746.58 ,  3258.39 ],
       [-8747.269,  3260.726],
       [-8747.954,  3263.063],
       [-8748.635,  3265.401],
       [-8749.312,  3267.74 ],
       [-8749.984,  3270.081],
       [-8750.653,  3272.423],
       [-8751.317,  3274.766],
       [-8751.978,  3277.11 ],
       [-8752.634,  3279.455],
       [-8753.287,  3281.801],
       [-8750.01 ,  3282.709],
       [-8749.359,  3280.368],
       [-8748.704,  3278.029],
       [-8748.046,  3275.691],
       [-8747.383,  3273.353],
       [-8746.716,  3271.017],
       [-8746.045,  3268.682],
       [-8745.37 ,  3266.349],
       [-8744.69 ,  3264.016],
       [-8744.007,  3261.685],
       [-8743.32 ,  3259.355],
       [-8742.629,  3257.026],
       [-8741.933,  3254.698],
       [-8741.234,  3252.371],
       [-8740.531,  3250.046],
       [-8739.823,  3247.722],
       [-8739.112,  3245.399],
       [-8738.396,  3243.077],
       [-8737.676,  3240.757],
       [-8736.953,  3238.438],
       [-8736.225,  3236.12 ],
       [-8735.494,  3233.803],
       [-8734.758,  3231.488],
       [-8734.018,  3229.174],
       [-8733.274,  3226.861],
       [-8732.527,  3224.549],
       [-8731.775,  3222.239],
       [-8731.019,  3219.93 ],
       [-8730.259,  3217.623],
       [-8729.496,  3215.317],
       [-8728.728,  3213.012],
       [-8727.956,  3210.708],
       [-8727.18 ,  3208.406],
       [-8726.4  ,  3206.105],
       [-8725.617,  3203.806],
       [-8724.829,  3201.507],
       [-8724.037,  3199.211],
       [-8723.241,  3196.915],
       [-8722.442,  3194.621],
       [-8721.638,  3192.329],
       [-8720.83 ,  3190.037],
       [-8720.018,  3187.748],
       [-8719.203,  3185.459],
       [-8718.383,  3183.172],
       [-8717.559,  3180.887],
       [-8716.732,  3178.603],
       [-8715.9  ,  3176.32 ],
       [-8715.065,  3174.039],
       [-8714.225,  3171.759],
       [-8713.382,  3169.481],
       [-8712.534,  3167.204],
       [-8711.683,  3164.929],
       [-8710.828,  3162.655],
       [-8709.968,  3160.382],
       [-8709.105,  3158.111],
       [-8708.238,  3155.842],
       [-8707.367,  3153.574],
       [-8706.492,  3151.308],
       [-8705.613,  3149.043],
       [-8704.73 ,  3146.78 ],
       [-8703.843,  3144.518],
       [-8702.952,  3142.258],
       [-8702.058,  3139.999],
       [-8701.159,  3137.742],
       [-8700.256,  3135.486],
       [-8699.35 ,  3133.232],
       [-8698.44 ,  3130.98 ],
       [-8697.525,  3128.729],
       [-8696.607,  3126.48 ],
       [-8695.685,  3124.232],
       [-8694.759,  3121.986],
       [-8693.829,  3119.742],
       [-8692.895,  3117.499],
       [-8691.958,  3115.258],
       [-8691.016,  3113.019],
       [-8690.07 ,  3110.781],
       [-8689.121,  3108.544],
       [-8688.168,  3106.31 ],
       [-8687.211,  3104.077],
       [-8686.25 ,  3101.846],
       [-8685.285,  3099.616],
       [-8684.316,  3097.388],
       [-8683.343,  3095.162],
       [-8682.367,  3092.937],
       [-8681.386,  3090.715],
       [-8680.402,  3088.494],
       [-8679.414,  3086.274],
       [-8678.422,  3084.056],
       [-8677.426,  3081.841],
       [-8676.427,  3079.626],
       [-8675.423,  3077.414],
       [-8674.416,  3075.203],
       [-8673.405,  3072.994],
       [-8672.39 ,  3070.787],
       [-8671.371,  3068.581],
       [-8670.348,  3066.378],
       [-8669.322,  3064.176],
       [-8668.291,  3061.976],
       [-8667.257,  3059.777]]),
np.array([[-8753.287,  3281.801],
       [-8753.935,  3284.149],
       [-8754.579,  3286.497],
       [-8755.219,  3288.847],
       [-8755.855,  3291.198],
       [-8756.487,  3293.55 ],
       [-8757.115,  3295.903],
       [-8757.738,  3298.257],
       [-8758.358,  3300.612],
       [-8758.974,  3302.968],
       [-8759.585,  3305.326],
       [-8760.192,  3307.684],
       [-8760.796,  3310.043],
       [-8761.395,  3312.404],
       [-8761.99 ,  3314.765],
       [-8762.581,  3317.128],
       [-8763.168,  3319.492],
       [-8763.75 ,  3321.856],
       [-8764.329,  3324.222],
       [-8764.903,  3326.588],
       [-8765.474,  3328.956],
       [-8766.04 ,  3331.324],
       [-8766.602,  3333.694],
       [-8767.16 ,  3336.064],
       [-8767.714,  3338.436],
       [-8768.264,  3340.808],
       [-8768.81 ,  3343.182],
       [-8769.351,  3345.556],
       [-8769.889,  3347.931],
       [-8770.422,  3350.308],
       [-8770.951,  3352.685],
       [-8767.632,  3353.421],
       [-8767.104,  3351.049],
       [-8766.572,  3348.679],
       [-8766.036,  3346.309],
       [-8765.495,  3343.941],
       [-8764.951,  3341.573],
       [-8764.403,  3339.206],
       [-8763.85 ,  3336.841],
       [-8763.293,  3334.476],
       [-8762.733,  3332.112],
       [-8762.168,  3329.749],
       [-8761.599,  3327.387],
       [-8761.026,  3325.027],
       [-8760.448,  3322.667],
       [-8759.867,  3320.308],
       [-8759.282,  3317.95 ],
       [-8758.692,  3315.593],
       [-8758.099,  3313.238],
       [-8757.501,  3310.883],
       [-8756.899,  3308.529],
       [-8756.293,  3306.176],
       [-8755.683,  3303.825],
       [-8755.069,  3301.474],
       [-8754.451,  3299.125],
       [-8753.829,  3296.776],
       [-8753.203,  3294.429],
       [-8752.572,  3292.083],
       [-8751.938,  3289.738],
       [-8751.299,  3287.394],
       [-8750.657,  3285.051],
       [-8750.01 ,  3282.709]]),
np.array([[-8688.425,  3049.797],
       [-8689.476,  3052.032],
       [-8690.524,  3054.269],
       [-8691.567,  3056.508],
       [-8692.607,  3058.749],
       [-8693.643,  3060.991],
       [-8694.675,  3063.235],
       [-8695.703,  3065.481],
       [-8696.727,  3067.729],
       [-8697.748,  3069.978],
       [-8698.764,  3072.23 ],
       [-8699.777,  3074.483],
       [-8700.785,  3076.737],
       [-8701.79 ,  3078.994],
       [-8702.79 ,  3081.252],
       [-8703.787,  3083.512],
       [-8704.78 ,  3085.774],
       [-8705.769,  3088.038],
       [-8706.754,  3090.303],
       [-8707.735,  3092.57 ],
       [-8708.712,  3094.838],
       [-8709.685,  3097.109],
       [-8710.654,  3099.38 ],
       [-8711.62 ,  3101.654],
       [-8712.581,  3103.93 ],
       [-8713.538,  3106.207],
       [-8714.492,  3108.485],
       [-8715.441,  3110.765],
       [-8716.387,  3113.047],
       [-8717.328,  3115.331],
       [-8718.266,  3117.616],
       [-8719.199,  3119.903],
       [-8720.129,  3122.192],
       [-8721.055,  3124.482],
       [-8721.976,  3126.773],
       [-8722.894,  3129.067],
       [-8723.808,  3131.362],
       [-8724.717,  3133.658],
       [-8725.623,  3135.956],
       [-8726.525,  3138.256],
       [-8727.422,  3140.557],
       [-8728.316,  3142.86 ],
       [-8729.206,  3145.164],
       [-8730.091,  3147.47 ],
       [-8730.973,  3149.777],
       [-8731.851,  3152.086],
       [-8732.724,  3154.396],
       [-8733.594,  3156.708],
       [-8734.46 ,  3159.022],
       [-8735.321,  3161.337],
       [-8736.179,  3163.653],
       [-8737.032,  3165.971],
       [-8737.882,  3168.291],
       [-8738.727,  3170.611],
       [-8739.569,  3172.934],
       [-8740.406,  3175.258],
       [-8741.24 ,  3177.583],
       [-8742.069,  3179.909],
       [-8742.894,  3182.238],
       [-8743.715,  3184.567],
       [-8744.533,  3186.898],
       [-8745.346,  3189.231],
       [-8746.155,  3191.564],
       [-8746.96 ,  3193.9  ],
       [-8747.761,  3196.236],
       [-8748.558,  3198.574],
       [-8749.351,  3200.914],
       [-8750.139,  3203.254],
       [-8750.924,  3205.596],
       [-8751.705,  3207.94 ],
       [-8752.481,  3210.285],
       [-8753.254,  3212.631],
       [-8754.022,  3214.978],
       [-8754.787,  3217.327],
       [-8755.547,  3219.677],
       [-8756.303,  3222.029],
       [-8757.055,  3224.382],
       [-8757.803,  3226.736],
       [-8758.547,  3229.091],
       [-8759.287,  3231.448],
       [-8760.023,  3233.806],
       [-8760.754,  3236.165],
       [-8761.482,  3238.526],
       [-8762.205,  3240.887],
       [-8762.924,  3243.25 ],
       [-8763.64 ,  3245.615],
       [-8764.351,  3247.98 ],
       [-8765.058,  3250.347],
       [-8765.761,  3252.715],
       [-8766.459,  3255.084],
       [-8767.154,  3257.454],
       [-8767.845,  3259.826],
       [-8768.531,  3262.199],
       [-8769.213,  3264.573],
       [-8769.891,  3266.948],
       [-8770.565,  3269.324],
       [-8771.235,  3271.702],
       [-8771.901,  3274.081],
       [-8772.563,  3276.46 ],
       [-8769.286,  3277.368],
       [-8768.626,  3274.994],
       [-8767.962,  3272.621],
       [-8767.294,  3270.249],
       [-8766.621,  3267.879],
       [-8765.945,  3265.509],
       [-8765.264,  3263.141],
       [-8764.579,  3260.774],
       [-8763.89 ,  3258.408],
       [-8763.197,  3256.043],
       [-8762.5  ,  3253.68 ],
       [-8761.799,  3251.317],
       [-8761.094,  3248.956],
       [-8760.384,  3246.596],
       [-8759.671,  3244.238],
       [-8758.953,  3241.88 ],
       [-8758.232,  3239.524],
       [-8757.506,  3237.169],
       [-8756.776,  3234.816],
       [-8756.042,  3232.463],
       [-8755.304,  3230.112],
       [-8754.562,  3227.763],
       [-8753.816,  3225.414],
       [-8753.065,  3223.067],
       [-8752.311,  3220.721],
       [-8751.553,  3218.377],
       [-8750.79 ,  3216.033],
       [-8750.024,  3213.691],
       [-8749.253,  3211.351],
       [-8748.478,  3209.012],
       [-8747.699,  3206.674],
       [-8746.917,  3204.337],
       [-8746.13 ,  3202.002],
       [-8745.339,  3199.668],
       [-8744.544,  3197.336],
       [-8743.745,  3195.005],
       [-8742.942,  3192.675],
       [-8742.134,  3190.347],
       [-8741.323,  3188.02 ],
       [-8740.508,  3185.695],
       [-8739.689,  3183.371],
       [-8738.865,  3181.048],
       [-8738.038,  3178.727],
       [-8737.207,  3176.407],
       [-8736.371,  3174.089],
       [-8735.532,  3171.772],
       [-8734.688,  3169.457],
       [-8733.841,  3167.143],
       [-8732.989,  3164.831],
       [-8732.134,  3162.52 ],
       [-8731.274,  3160.211],
       [-8730.411,  3157.903],
       [-8729.543,  3155.596],
       [-8728.672,  3153.291],
       [-8727.796,  3150.988],
       [-8726.916,  3148.686],
       [-8726.033,  3146.386],
       [-8725.145,  3144.087],
       [-8724.254,  3141.79 ],
       [-8723.358,  3139.494],
       [-8722.459,  3137.2  ],
       [-8721.555,  3134.907],
       [-8720.648,  3132.617],
       [-8719.736,  3130.327],
       [-8718.821,  3128.039],
       [-8717.901,  3125.753],
       [-8716.978,  3123.468],
       [-8716.05 ,  3121.185],
       [-8715.119,  3118.904],
       [-8714.184,  3116.624],
       [-8713.245,  3114.346],
       [-8712.301,  3112.07 ],
       [-8711.354,  3109.795],
       [-8710.403,  3107.522],
       [-8709.448,  3105.25 ],
       [-8708.489,  3102.98 ],
       [-8707.526,  3100.712],
       [-8706.559,  3098.445],
       [-8705.588,  3096.18 ],
       [-8704.613,  3093.917],
       [-8703.635,  3091.656],
       [-8702.652,  3089.396],
       [-8701.666,  3087.138],
       [-8700.675,  3084.882],
       [-8699.681,  3082.627],
       [-8698.682,  3080.374],
       [-8697.68 ,  3078.123],
       [-8696.674,  3075.874],
       [-8695.664,  3073.626],
       [-8694.65 ,  3071.38 ],
       [-8693.632,  3069.136],
       [-8692.61 ,  3066.894],
       [-8691.585,  3064.653],
       [-8690.555,  3062.414],
       [-8689.522,  3060.177],
       [-8688.485,  3057.942],
       [-8687.443,  3055.709],
       [-8686.398,  3053.477],
       [-8685.349,  3051.247]]),
np.array([[-8772.563,  3276.46 ],
       [-8773.22 ,  3278.841],
       [-8773.873,  3281.223],
       [-8774.523,  3283.607],
       [-8775.168,  3285.991],
       [-8775.809,  3288.377],
       [-8776.445,  3290.763],
       [-8777.078,  3293.151],
       [-8777.706,  3295.54 ],
       [-8778.331,  3297.929],
       [-8778.951,  3300.32 ],
       [-8779.567,  3302.712],
       [-8780.179,  3305.106],
       [-8780.786,  3307.5  ],
       [-8781.39 ,  3309.895],
       [-8781.989,  3312.291],
       [-8782.585,  3314.688],
       [-8783.176,  3317.087],
       [-8783.763,  3319.486],
       [-8784.345,  3321.887],
       [-8784.924,  3324.288],
       [-8785.498,  3326.69 ],
       [-8786.068,  3329.094],
       [-8786.634,  3331.498],
       [-8787.196,  3333.903],
       [-8787.754,  3336.31 ],
       [-8788.307,  3338.717],
       [-8788.856,  3341.125],
       [-8789.402,  3343.534],
       [-8789.942,  3345.944],
       [-8790.479,  3348.356],
       [-8787.16 ,  3349.091],
       [-8786.624,  3346.686],
       [-8786.085,  3344.282],
       [-8785.541,  3341.878],
       [-8784.993,  3339.476],
       [-8784.441,  3337.074],
       [-8783.885,  3334.674],
       [-8783.324,  3332.274],
       [-8782.759,  3329.876],
       [-8782.191,  3327.478],
       [-8781.618,  3325.081],
       [-8781.04 ,  3322.686],
       [-8780.459,  3320.291],
       [-8779.874,  3317.898],
       [-8779.284,  3315.505],
       [-8778.69 ,  3313.113],
       [-8778.092,  3310.723],
       [-8777.49 ,  3308.333],
       [-8776.884,  3305.945],
       [-8776.274,  3303.558],
       [-8775.659,  3301.171],
       [-8775.04 ,  3298.786],
       [-8774.418,  3296.402],
       [-8773.791,  3294.019],
       [-8773.159,  3291.637],
       [-8772.524,  3289.256],
       [-8771.885,  3286.876],
       [-8771.241,  3284.497],
       [-8770.594,  3282.12 ],
       [-8769.942,  3279.743],
       [-8769.286,  3277.368]]),
np.array([[-9653.287,  3241.801],
       [-9653.935,  3244.149],
       [-9654.579,  3246.497],
       [-9655.219,  3248.847],
       [-9655.855,  3251.198],
       [-9656.487,  3253.55 ],
       [-9657.115,  3255.903],
       [-9657.738,  3258.257],
       [-9658.358,  3260.612],
       [-9658.974,  3262.968],
       [-9659.585,  3265.326],
       [-9660.192,  3267.684],
       [-9660.796,  3270.043],
       [-9661.395,  3272.404],
       [-9661.99 ,  3274.765],
       [-9662.581,  3277.128],
       [-9663.168,  3279.492],
       [-9663.75 ,  3281.856],
       [-9664.329,  3284.222],
       [-9664.903,  3286.588],
       [-9665.474,  3288.956],
       [-9666.04 ,  3291.324],
       [-9666.602,  3293.694],
       [-9667.16 ,  3296.064],
       [-9667.714,  3298.436],
       [-9668.264,  3300.808],
       [-9668.81 ,  3303.182],
       [-9669.351,  3305.556],
       [-9669.889,  3307.931],
       [-9670.422,  3310.308],
       [-9670.951,  3312.685],
       [-9667.632,  3313.421],
       [-9667.104,  3311.049],
       [-9666.572,  3308.679],
       [-9666.036,  3306.309],
       [-9665.495,  3303.941],
       [-9664.951,  3301.573],
       [-9664.403,  3299.206],
       [-9663.85 ,  3296.841],
       [-9663.293,  3294.476],
       [-9662.733,  3292.112],
       [-9662.168,  3289.749],
       [-9661.599,  3287.387],
       [-9661.026,  3285.027],
       [-9660.448,  3282.667],
       [-9659.867,  3280.308],
       [-9659.282,  3277.95 ],
       [-9658.692,  3275.593],
       [-9658.099,  3273.238],
       [-9657.501,  3270.883],
       [-9656.899,  3268.529],
       [-9656.293,  3266.176],
       [-9655.683,  3263.825],
       [-9655.069,  3261.474],
       [-9654.451,  3259.125],
       [-9653.829,  3256.776],
       [-9653.203,  3254.429],
       [-9652.572,  3252.083],
       [-9651.938,  3249.738],
       [-9651.299,  3247.394],
       [-9650.657,  3245.051],
       [-9650.01 ,  3242.709]]),
np.array([[-9671.257,  3312.617],
       [-9671.816,  3315.129],
       [-9672.38 ,  3317.641],
       [-9672.948,  3320.151],
       [-9673.52 ,  3322.661],
       [-9674.097,  3325.169],
       [-9674.678,  3327.676],
       [-9675.264,  3330.183],
       [-9675.854,  3332.688],
       [-9676.448,  3335.192],
       [-9677.047,  3337.696],
       [-9677.65 ,  3340.198],
       [-9678.257,  3342.699],
       [-9678.869,  3345.199],
       [-9679.485,  3347.698],
       [-9680.105,  3350.196],
       [-9680.73 ,  3352.693],
       [-9681.36 ,  3355.189],
       [-9681.993,  3357.684],
       [-9682.631,  3360.177],
       [-9683.273,  3362.67 ],
       [-9683.92 ,  3365.161],
       [-9684.571,  3367.651],
       [-9685.226,  3370.14 ],
       [-9685.886,  3372.628],
       [-9686.55 ,  3375.115],
       [-9687.218,  3377.6  ],
       [-9687.891,  3380.085],
       [-9688.568,  3382.568],
       [-9689.249,  3385.05 ],
       [-9689.935,  3387.531],
       [-9690.625,  3390.011],
       [-9691.319,  3392.489],
       [-9692.018,  3394.966],
       [-9692.721,  3397.442],
       [-9693.428,  3399.917],
       [-9694.14 ,  3402.391],
       [-9694.856,  3404.863],
       [-9695.576,  3407.334],
       [-9696.3  ,  3409.804],
       [-9697.029,  3412.272],
       [-9697.762,  3414.739],
       [-9698.5  ,  3417.205],
       [-9699.242,  3419.67 ],
       [-9699.988,  3422.133],
       [-9700.738,  3424.595],
       [-9701.493,  3427.056],
       [-9702.252,  3429.516],
       [-9703.015,  3431.974],
       [-9703.783,  3434.43 ],
       [-9704.554,  3436.886],
       [-9705.331,  3439.34 ],
       [-9706.111,  3441.793],
       [-9706.896,  3444.244],
       [-9707.685,  3446.694],
       [-9708.478,  3449.143],
       [-9709.275,  3451.59 ],
       [-9710.077,  3454.036],
       [-9710.883,  3456.48 ],
       [-9711.694,  3458.923],
       [-9712.508,  3461.365],
       [-9713.327,  3463.805],
       [-9714.15 ,  3466.243],
       [-9714.977,  3468.681],
       [-9715.809,  3471.117],
       [-9716.645,  3473.551],
       [-9717.485,  3475.984],
       [-9718.329,  3478.415],
       [-9719.178,  3480.845],
       [-9720.031,  3483.274],
       [-9720.888,  3485.701],
       [-9721.749,  3488.126],
       [-9722.614,  3490.55 ],
       [-9723.484,  3492.973],
       [-9724.358,  3495.394],
       [-9725.236,  3497.813],
       [-9726.119,  3500.231],
       [-9727.005,  3502.647],
       [-9727.896,  3505.062],
       [-9728.791,  3507.475],
       [-9729.691,  3509.887],
       [-9730.594,  3512.297],
       [-9731.502,  3514.705],
       [-9732.414,  3517.112],
       [-9733.33 ,  3519.518],
       [-9734.25 ,  3521.921],
       [-9735.175,  3524.323],
       [-9736.103,  3526.724],
       [-9737.036,  3529.123],
       [-9737.973,  3531.52 ],
       [-9738.915,  3533.916],
       [-9739.86 ,  3536.31 ],
       [-9740.81 ,  3538.702],
       [-9741.763,  3541.092],
       [-9742.721,  3543.481],
       [-9743.683,  3545.869],
       [-9744.65 ,  3548.254],
       [-9745.62 ,  3550.638],
       [-9746.595,  3553.02 ],
       [-9743.449,  3554.311],
       [-9742.472,  3551.923],
       [-9741.499,  3549.534],
       [-9740.531,  3547.142],
       [-9739.567,  3544.75 ],
       [-9738.606,  3542.355],
       [-9737.65 ,  3539.959],
       [-9736.699,  3537.561],
       [-9735.751,  3535.162],
       [-9734.808,  3532.761],
       [-9733.868,  3530.358],
       [-9732.933,  3527.953],
       [-9732.003,  3525.547],
       [-9731.076,  3523.14 ],
       [-9730.154,  3520.731],
       [-9729.235,  3518.32 ],
       [-9728.321,  3515.907],
       [-9727.412,  3513.493],
       [-9726.506,  3511.077],
       [-9725.605,  3508.66 ],
       [-9724.708,  3506.241],
       [-9723.815,  3503.821],
       [-9722.926,  3501.399],
       [-9722.041,  3498.976],
       [-9721.161,  3496.551],
       [-9720.285,  3494.124],
       [-9719.413,  3491.696],
       [-9718.546,  3489.267],
       [-9717.683,  3486.836],
       [-9716.824,  3484.403],
       [-9715.969,  3481.969],
       [-9715.118,  3479.533],
       [-9714.272,  3477.096],
       [-9713.43 ,  3474.658],
       [-9712.592,  3472.218],
       [-9711.759,  3469.776],
       [-9710.929,  3467.333],
       [-9710.104,  3464.889],
       [-9709.284,  3462.443],
       [-9708.467,  3459.996],
       [-9707.655,  3457.548],
       [-9706.847,  3455.098],
       [-9706.044,  3452.646],
       [-9705.244,  3450.193],
       [-9704.449,  3447.739],
       [-9703.658,  3445.283],
       [-9702.872,  3442.826],
       [-9702.09 ,  3440.368],
       [-9701.312,  3437.908],
       [-9700.538,  3435.447],
       [-9699.769,  3432.985],
       [-9699.004,  3430.521],
       [-9698.243,  3428.056],
       [-9697.487,  3425.59 ],
       [-9696.735,  3423.122],
       [-9695.987,  3420.653],
       [-9695.243,  3418.182],
       [-9694.504,  3415.711],
       [-9693.769,  3413.238],
       [-9693.039,  3410.764],
       [-9692.313,  3408.288],
       [-9691.591,  3405.811],
       [-9690.873,  3403.333],
       [-9690.16 ,  3400.854],
       [-9689.451,  3398.374],
       [-9688.746,  3395.892],
       [-9688.046,  3393.409],
       [-9687.35 ,  3390.925],
       [-9686.659,  3388.44 ],
       [-9685.971,  3385.953],
       [-9685.288,  3383.465],
       [-9684.61 ,  3380.976],
       [-9683.936,  3378.486],
       [-9683.266,  3375.995],
       [-9682.6  ,  3373.502],
       [-9681.939,  3371.009],
       [-9681.282,  3368.514],
       [-9680.63 ,  3366.018],
       [-9679.982,  3363.521],
       [-9679.338,  3361.023],
       [-9678.698,  3358.523],
       [-9678.063,  3356.023],
       [-9677.433,  3353.521],
       [-9676.806,  3351.019],
       [-9676.185,  3348.515],
       [-9675.567,  3346.01 ],
       [-9674.954,  3343.504],
       [-9674.345,  3340.997],
       [-9673.741,  3338.489],
       [-9673.141,  3335.98 ],
       [-9672.545,  3333.47 ],
       [-9671.954,  3330.959],
       [-9671.367,  3328.447],
       [-9670.784,  3325.934],
       [-9670.206,  3323.42 ],
       [-9669.632,  3320.904],
       [-9669.063,  3318.388],
       [-9668.498,  3315.871],
       [-9667.937,  3313.353]]),
np.array([[-9672.563,  3236.46 ],
       [-9673.22 ,  3238.841],
       [-9673.873,  3241.223],
       [-9674.523,  3243.607],
       [-9675.168,  3245.991],
       [-9675.809,  3248.377],
       [-9676.445,  3250.763],
       [-9677.078,  3253.151],
       [-9677.706,  3255.54 ],
       [-9678.331,  3257.929],
       [-9678.951,  3260.32 ],
       [-9679.567,  3262.712],
       [-9680.179,  3265.106],
       [-9680.786,  3267.5  ],
       [-9681.39 ,  3269.895],
       [-9681.989,  3272.291],
       [-9682.585,  3274.688],
       [-9683.176,  3277.087],
       [-9683.763,  3279.486],
       [-9684.345,  3281.887],
       [-9684.924,  3284.288],
       [-9685.498,  3286.69 ],
       [-9686.068,  3289.094],
       [-9686.634,  3291.498],
       [-9687.196,  3293.903],
       [-9687.754,  3296.31 ],
       [-9688.307,  3298.717],
       [-9688.856,  3301.125],
       [-9689.402,  3303.534],
       [-9689.942,  3305.944],
       [-9690.479,  3308.356],
       [-9687.16 ,  3309.091],
       [-9686.624,  3306.686],
       [-9686.085,  3304.282],
       [-9685.541,  3301.878],
       [-9684.993,  3299.476],
       [-9684.441,  3297.074],
       [-9683.885,  3294.674],
       [-9683.324,  3292.274],
       [-9682.759,  3289.876],
       [-9682.191,  3287.478],
       [-9681.618,  3285.081],
       [-9681.04 ,  3282.686],
       [-9680.459,  3280.291],
       [-9679.874,  3277.898],
       [-9679.284,  3275.505],
       [-9678.69 ,  3273.113],
       [-9678.092,  3270.723],
       [-9677.49 ,  3268.333],
       [-9676.884,  3265.945],
       [-9676.274,  3263.558],
       [-9675.659,  3261.171],
       [-9675.04 ,  3258.786],
       [-9674.418,  3256.402],
       [-9673.791,  3254.019],
       [-9673.159,  3251.637],
       [-9672.524,  3249.256],
       [-9671.885,  3246.876],
       [-9671.241,  3244.497],
       [-9670.594,  3242.12 ],
       [-9669.942,  3239.743],
       [-9669.286,  3237.368]]),
np.array([[-9690.789,  3308.287],
       [-9691.326,  3310.7  ],
       [-9691.867,  3313.112],
       [-9692.413,  3315.523],
       [-9692.963,  3317.933],
       [-9693.517,  3320.343],
       [-9694.075,  3322.751],
       [-9694.637,  3325.158],
       [-9695.204,  3327.565],
       [-9695.775,  3329.97 ],
       [-9696.35 ,  3332.374],
       [-9696.929,  3334.778],
       [-9697.512,  3337.18 ],
       [-9698.1  ,  3339.581],
       [-9698.692,  3341.981],
       [-9699.288,  3344.381],
       [-9699.888,  3346.779],
       [-9700.492,  3349.176],
       [-9701.101,  3351.572],
       [-9701.713,  3353.967],
       [-9702.33 ,  3356.361],
       [-9702.951,  3358.754],
       [-9703.577,  3361.146],
       [-9704.206,  3363.536],
       [-9704.84 ,  3365.926],
       [-9705.477,  3368.314],
       [-9706.119,  3370.702],
       [-9706.765,  3373.088],
       [-9707.416,  3375.473],
       [-9708.07 ,  3377.857],
       [-9708.729,  3380.24 ],
       [-9709.391,  3382.621],
       [-9710.058,  3385.002],
       [-9710.729,  3387.381],
       [-9711.404,  3389.759],
       [-9712.084,  3392.136],
       [-9712.767,  3394.512],
       [-9713.455,  3396.886],
       [-9714.147,  3399.26 ],
       [-9714.843,  3401.632],
       [-9715.543,  3404.003],
       [-9716.247,  3406.373],
       [-9716.955,  3408.741],
       [-9717.668,  3411.108],
       [-9718.384,  3413.474],
       [-9719.105,  3415.839],
       [-9719.83 ,  3418.202],
       [-9720.559,  3420.565],
       [-9721.292,  3422.926],
       [-9722.029,  3425.285],
       [-9722.77 ,  3427.644],
       [-9723.516,  3430.001],
       [-9724.265,  3432.356],
       [-9725.019,  3434.711],
       [-9725.777,  3437.064],
       [-9726.539,  3439.416],
       [-9727.305,  3441.766],
       [-9728.075,  3444.115],
       [-9728.849,  3446.463],
       [-9729.627,  3448.81 ],
       [-9730.41 ,  3451.155],
       [-9731.196,  3453.498],
       [-9731.987,  3455.841],
       [-9732.781,  3458.182],
       [-9733.58 ,  3460.521],
       [-9734.383,  3462.859],
       [-9735.19 ,  3465.196],
       [-9736.001,  3467.531],
       [-9736.816,  3469.865],
       [-9737.635,  3472.198],
       [-9738.458,  3474.529],
       [-9739.285,  3476.858],
       [-9740.116,  3479.187],
       [-9740.952,  3481.513],
       [-9741.791,  3483.839],
       [-9742.635,  3486.162],
       [-9743.482,  3488.485],
       [-9744.334,  3490.805],
       [-9745.19 ,  3493.125],
       [-9746.049,  3495.443],
       [-9746.913,  3497.759],
       [-9747.781,  3500.074],
       [-9748.653,  3502.387],
       [-9749.528,  3504.699],
       [-9750.408,  3507.009],
       [-9751.292,  3509.318],
       [-9752.18 ,  3511.625],
       [-9753.072,  3513.93 ],
       [-9753.968,  3516.235],
       [-9754.868,  3518.537],
       [-9755.772,  3520.838],
       [-9756.68 ,  3523.137],
       [-9757.592,  3525.435],
       [-9758.508,  3527.731],
       [-9759.428,  3530.026],
       [-9760.352,  3532.319],
       [-9761.281,  3534.61 ],
       [-9762.213,  3536.9  ],
       [-9763.149,  3539.188],
       [-9760.003,  3540.478],
       [-9759.065,  3538.184],
       [-9758.13 ,  3535.889],
       [-9757.2  ,  3533.592],
       [-9756.274,  3531.294],
       [-9755.351,  3528.994],
       [-9754.433,  3526.692],
       [-9753.519,  3524.389],
       [-9752.609,  3522.084],
       [-9751.703,  3519.778],
       [-9750.8  ,  3517.47 ],
       [-9749.902,  3515.16 ],
       [-9749.008,  3512.849],
       [-9748.118,  3510.536],
       [-9747.232,  3508.222],
       [-9746.35 ,  3505.906],
       [-9745.472,  3503.589],
       [-9744.598,  3501.27 ],
       [-9743.728,  3498.95 ],
       [-9742.862,  3496.628],
       [-9742.001,  3494.304],
       [-9741.143,  3491.979],
       [-9740.289,  3489.653],
       [-9739.44 ,  3487.325],
       [-9738.594,  3484.996],
       [-9737.753,  3482.665],
       [-9736.915,  3480.333],
       [-9736.082,  3477.999],
       [-9735.253,  3475.664],
       [-9734.428,  3473.327],
       [-9733.607,  3470.989],
       [-9732.79 ,  3468.65 ],
       [-9731.977,  3466.309],
       [-9731.168,  3463.966],
       [-9730.363,  3461.622],
       [-9729.563,  3459.277],
       [-9728.766,  3456.931],
       [-9727.974,  3454.583],
       [-9727.185,  3452.234],
       [-9726.401,  3449.883],
       [-9725.621,  3447.531],
       [-9724.845,  3445.177],
       [-9724.073,  3442.823],
       [-9723.305,  3440.466],
       [-9722.541,  3438.109],
       [-9721.782,  3435.75 ],
       [-9721.026,  3433.39 ],
       [-9720.275,  3431.029],
       [-9719.528,  3428.666],
       [-9718.785,  3426.302],
       [-9718.046,  3423.937],
       [-9717.311,  3421.57 ],
       [-9716.58 ,  3419.202],
       [-9715.853,  3416.833],
       [-9715.131,  3414.463],
       [-9714.413,  3412.091],
       [-9713.699,  3409.718],
       [-9712.989,  3407.344],
       [-9712.283,  3404.969],
       [-9711.581,  3402.592],
       [-9710.883,  3400.214],
       [-9710.19 ,  3397.835],
       [-9709.501,  3395.455],
       [-9708.815,  3393.073],
       [-9708.134,  3390.691],
       [-9707.458,  3388.307],
       [-9706.785,  3385.922],
       [-9706.117,  3383.536],
       [-9705.452,  3381.148],
       [-9704.792,  3378.76 ],
       [-9704.136,  3376.37 ],
       [-9703.484,  3373.979],
       [-9702.837,  3371.587],
       [-9702.193,  3369.194],
       [-9701.554,  3366.8  ],
       [-9700.919,  3364.405],
       [-9700.288,  3362.008],
       [-9699.661,  3359.611],
       [-9699.039,  3357.212],
       [-9698.42 ,  3354.813],
       [-9697.806,  3352.412],
       [-9697.196,  3350.01 ],
       [-9696.59 ,  3347.607],
       [-9695.989,  3345.203],
       [-9695.391,  3342.798],
       [-9694.798,  3340.392],
       [-9694.209,  3337.985],
       [-9693.624,  3335.577],
       [-9693.044,  3333.168],
       [-9692.467,  3330.758],
       [-9691.895,  3328.347],
       [-9691.327,  3325.935],
       [-9690.763,  3323.522],
       [-9690.204,  3321.108],
       [-9689.649,  3318.693],
       [-9689.097,  3316.277],
       [-9688.551,  3313.86 ],
       [-9688.008,  3311.442],
       [-9687.469,  3309.023]]),
np.array([[-10553.287,   3201.801],
       [-10553.935,   3204.149],
       [-10554.579,   3206.497],
       [-10555.219,   3208.847],
       [-10555.855,   3211.198],
       [-10556.487,   3213.55 ],
       [-10557.115,   3215.903],
       [-10557.738,   3218.257],
       [-10558.358,   3220.612],
       [-10558.974,   3222.968],
       [-10559.585,   3225.326],
       [-10560.192,   3227.684],
       [-10560.796,   3230.043],
       [-10561.395,   3232.404],
       [-10561.99 ,   3234.765],
       [-10562.581,   3237.128],
       [-10563.168,   3239.492],
       [-10563.75 ,   3241.856],
       [-10564.329,   3244.222],
       [-10564.903,   3246.588],
       [-10565.474,   3248.956],
       [-10566.04 ,   3251.324],
       [-10566.602,   3253.694],
       [-10567.16 ,   3256.064],
       [-10567.714,   3258.436],
       [-10568.264,   3260.808],
       [-10568.81 ,   3263.182],
       [-10569.351,   3265.556],
       [-10569.889,   3267.931],
       [-10570.422,   3270.308],
       [-10570.951,   3272.685],
       [-10567.632,   3273.421],
       [-10567.104,   3271.049],
       [-10566.572,   3268.679],
       [-10566.036,   3266.309],
       [-10565.495,   3263.941],
       [-10564.951,   3261.573],
       [-10564.403,   3259.206],
       [-10563.85 ,   3256.841],
       [-10563.293,   3254.476],
       [-10562.733,   3252.112],
       [-10562.168,   3249.749],
       [-10561.599,   3247.387],
       [-10561.026,   3245.027],
       [-10560.448,   3242.667],
       [-10559.867,   3240.308],
       [-10559.282,   3237.95 ],
       [-10558.692,   3235.593],
       [-10558.099,   3233.238],
       [-10557.501,   3230.883],
       [-10556.899,   3228.529],
       [-10556.293,   3226.176],
       [-10555.683,   3223.825],
       [-10555.069,   3221.474],
       [-10554.451,   3219.125],
       [-10553.829,   3216.776],
       [-10553.203,   3214.429],
       [-10552.572,   3212.083],
       [-10551.938,   3209.738],
       [-10551.299,   3207.394],
       [-10550.657,   3205.051],
       [-10550.01 ,   3202.709]]),
np.array([[-10571.265,   3272.615],
       [-10571.795,   3274.997],
       [-10572.33 ,   3277.378],
       [-10572.868,   3279.758],
       [-10573.411,   3282.137],
       [-10573.958,   3284.515],
       [-10574.509,   3286.893],
       [-10575.064,   3289.269],
       [-10575.623,   3291.644],
       [-10576.187,   3294.018],
       [-10576.754,   3296.392],
       [-10577.326,   3298.764],
       [-10577.902,   3301.135],
       [-10578.482,   3303.505],
       [-10579.066,   3305.875],
       [-10579.654,   3308.243],
       [-10580.247,   3310.61 ],
       [-10580.843,   3312.976],
       [-10581.444,   3315.341],
       [-10582.048,   3317.706],
       [-10582.657,   3320.069],
       [-10583.27 ,   3322.43 ],
       [-10583.888,   3324.791],
       [-10584.509,   3327.151],
       [-10585.134,   3329.51 ],
       [-10585.764,   3331.867],
       [-10586.397,   3334.224],
       [-10587.035,   3336.579],
       [-10587.677,   3338.934],
       [-10588.323,   3341.287],
       [-10588.973,   3343.639],
       [-10589.627,   3345.99 ],
       [-10590.285,   3348.339],
       [-10590.948,   3350.688],
       [-10591.614,   3353.035],
       [-10592.285,   3355.382],
       [-10592.96 ,   3357.727],
       [-10593.638,   3360.071],
       [-10594.321,   3362.413],
       [-10595.008,   3364.755],
       [-10595.699,   3367.095],
       [-10596.394,   3369.434],
       [-10597.093,   3371.772],
       [-10597.797,   3374.109],
       [-10598.504,   3376.444],
       [-10599.215,   3378.779],
       [-10599.931,   3381.112],
       [-10600.65 ,   3383.443],
       [-10601.374,   3385.774],
       [-10602.102,   3388.103],
       [-10602.833,   3390.431],
       [-10603.569,   3392.757],
       [-10604.309,   3395.083],
       [-10605.053,   3397.407],
       [-10605.801,   3399.73 ],
       [-10606.553,   3402.051],
       [-10607.309,   3404.371],
       [-10608.069,   3406.69 ],
       [-10608.834,   3409.007],
       [-10609.602,   3411.324],
       [-10610.374,   3413.638],
       [-10611.15 ,   3415.952],
       [-10611.931,   3418.264],
       [-10612.715,   3420.575],
       [-10613.503,   3422.884],
       [-10614.296,   3425.192],
       [-10615.092,   3427.498],
       [-10615.893,   3429.804],
       [-10616.697,   3432.107],
       [-10617.506,   3434.41 ],
       [-10618.318,   3436.711],
       [-10619.135,   3439.01 ],
       [-10619.956,   3441.308],
       [-10620.78 ,   3443.605],
       [-10621.609,   3445.9  ],
       [-10622.441,   3448.194],
       [-10623.278,   3450.486],
       [-10624.119,   3452.777],
       [-10624.963,   3455.066],
       [-10625.812,   3457.354],
       [-10626.664,   3459.641],
       [-10627.521,   3461.926],
       [-10628.382,   3464.209],
       [-10629.246,   3466.491],
       [-10630.115,   3468.771],
       [-10630.987,   3471.05 ],
       [-10631.864,   3473.328],
       [-10632.744,   3475.604],
       [-10633.628,   3477.878],
       [-10634.517,   3480.151],
       [-10635.409,   3482.422],
       [-10636.306,   3484.691],
       [-10637.206,   3486.959],
       [-10638.11 ,   3489.226],
       [-10639.018,   3491.491],
       [-10639.93 ,   3493.754],
       [-10640.846,   3496.016],
       [-10641.766,   3498.276],
       [-10642.69 ,   3500.535],
       [-10639.545,   3501.825],
       [-10638.619,   3499.561],
       [-10637.696,   3497.295],
       [-10636.778,   3495.028],
       [-10635.864,   3492.759],
       [-10634.953,   3490.489],
       [-10634.047,   3488.217],
       [-10633.144,   3485.943],
       [-10632.246,   3483.668],
       [-10631.351,   3481.391],
       [-10630.461,   3479.113],
       [-10629.574,   3476.833],
       [-10628.692,   3474.552],
       [-10627.813,   3472.269],
       [-10626.938,   3469.984],
       [-10626.068,   3467.698],
       [-10625.201,   3465.411],
       [-10624.338,   3463.122],
       [-10623.48 ,   3460.831],
       [-10622.625,   3458.54 ],
       [-10621.774,   3456.246],
       [-10620.928,   3453.951],
       [-10620.085,   3451.655],
       [-10619.246,   3449.357],
       [-10618.412,   3447.057],
       [-10617.581,   3444.757],
       [-10616.755,   3442.454],
       [-10615.932,   3440.151],
       [-10615.113,   3437.846],
       [-10614.299,   3435.539],
       [-10613.488,   3433.231],
       [-10612.682,   3430.922],
       [-10611.88 ,   3428.611],
       [-10611.081,   3426.299],
       [-10610.287,   3423.985],
       [-10609.496,   3421.67 ],
       [-10608.71 ,   3419.354],
       [-10607.928,   3417.036],
       [-10607.15 ,   3414.717],
       [-10606.376,   3412.397],
       [-10605.605,   3410.075],
       [-10604.839,   3407.752],
       [-10604.077,   3405.427],
       [-10603.32 ,   3403.102],
       [-10602.566,   3400.775],
       [-10601.816,   3398.446],
       [-10601.07 ,   3396.117],
       [-10600.328,   3393.786],
       [-10599.591,   3391.453],
       [-10598.857,   3389.12 ],
       [-10598.128,   3386.785],
       [-10597.402,   3384.449],
       [-10596.681,   3382.111],
       [-10595.964,   3379.773],
       [-10595.251,   3377.433],
       [-10594.542,   3375.092],
       [-10593.837,   3372.749],
       [-10593.136,   3370.406],
       [-10592.439,   3368.061],
       [-10591.746,   3365.715],
       [-10591.058,   3363.368],
       [-10590.373,   3361.019],
       [-10589.693,   3358.67 ],
       [-10589.017,   3356.319],
       [-10588.344,   3353.967],
       [-10587.676,   3351.614],
       [-10587.012,   3349.26 ],
       [-10586.352,   3346.904],
       [-10585.697,   3344.547],
       [-10585.045,   3342.19 ],
       [-10584.398,   3339.831],
       [-10583.754,   3337.471],
       [-10583.115,   3335.11 ],
       [-10582.48 ,   3332.747],
       [-10581.849,   3330.384],
       [-10581.222,   3328.02 ],
       [-10580.599,   3325.654],
       [-10579.98 ,   3323.288],
       [-10579.366,   3320.92 ],
       [-10578.755,   3318.551],
       [-10578.149,   3316.181],
       [-10577.547,   3313.81 ],
       [-10576.949,   3311.438],
       [-10576.355,   3309.065],
       [-10575.765,   3306.691],
       [-10575.18 ,   3304.316],
       [-10574.598,   3301.94 ],
       [-10574.021,   3299.563],
       [-10573.448,   3297.185],
       [-10572.879,   3294.806],
       [-10572.314,   3292.426],
       [-10571.754,   3290.045],
       [-10571.197,   3287.663],
       [-10570.645,   3285.28 ],
       [-10570.097,   3282.896],
       [-10569.553,   3280.511],
       [-10569.013,   3278.126],
       [-10568.477,   3275.739],
       [-10567.945,   3273.351]]),
np.array([[ -7768.372,   3319.339],
       [-10613.225,   3319.339],
       [-10613.225,   3322.739],
       [ -7768.372,   3322.739]]),
np.array([[-10613.225,   3319.339],
       [-10692.121,   3319.339],
       [-10692.121,   3322.739],
       [-10613.225,   3322.739]]),
np.array([[-8322.304,  3245.166],
       [-8324.77 ,  3245.852],
       [-8327.237,  3246.534],
       [-8329.705,  3247.212],
       [-8332.174,  3247.885],
       [-8334.644,  3248.554],
       [-8337.116,  3249.218],
       [-8339.589,  3249.878],
       [-8342.063,  3250.534],
       [-8344.538,  3251.186],
       [-8347.014,  3251.833],
       [-8349.491,  3252.476],
       [-8351.97 ,  3253.115],
       [-8354.449,  3253.749],
       [-8356.93 ,  3254.379],
       [-8359.412,  3255.005],
       [-8361.894,  3255.626],
       [-8364.378,  3256.243],
       [-8366.863,  3256.856],
       [-8369.349,  3257.464],
       [-8371.837,  3258.068],
       [-8374.325,  3258.668],
       [-8376.814,  3259.263],
       [-8379.304,  3259.854],
       [-8381.795,  3260.441],
       [-8384.288,  3261.023],
       [-8386.781,  3261.601],
       [-8389.275,  3262.175],
       [-8391.771,  3262.744],
       [-8394.267,  3263.309],
       [-8396.764,  3263.869],
       [-8399.262,  3264.425],
       [-8401.762,  3264.977],
       [-8404.262,  3265.525],
       [-8406.763,  3266.068],
       [-8409.265,  3266.606],
       [-8411.768,  3267.141],
       [-8414.272,  3267.671],
       [-8416.777,  3268.196],
       [-8419.283,  3268.717],
       [-8421.789,  3269.234],
       [-8424.297,  3269.747],
       [-8426.805,  3270.255],
       [-8429.315,  3270.758],
       [-8431.825,  3271.258],
       [-8434.336,  3271.753],
       [-8436.848,  3272.243],
       [-8439.361,  3272.729],
       [-8441.874,  3273.211],
       [-8444.389,  3273.689],
       [-8446.904,  3274.162],
       [-8449.42 ,  3274.63 ],
       [-8451.937,  3275.094],
       [-8454.455,  3275.554],
       [-8456.974,  3276.01 ],
       [-8459.493,  3276.461],
       [-8462.013,  3276.907],
       [-8464.534,  3277.349],
       [-8467.056,  3277.787],
       [-8469.578,  3278.221],
       [-8472.101,  3278.65 ],
       [-8474.625,  3279.074],
       [-8477.15 ,  3279.495],
       [-8479.675,  3279.91 ],
       [-8482.202,  3280.322],
       [-8484.728,  3280.729],
       [-8487.256,  3281.131],
       [-8489.784,  3281.53 ],
       [-8492.313,  3281.923],
       [-8494.843,  3282.313],
       [-8497.373,  3282.698],
       [-8499.904,  3283.078],
       [-8502.436,  3283.454],
       [-8504.968,  3283.826],
       [-8507.501,  3284.193],
       [-8510.034,  3284.556],
       [-8512.568,  3284.914],
       [-8515.103,  3285.268],
       [-8517.639,  3285.618],
       [-8520.175,  3285.963],
       [-8522.711,  3286.304],
       [-8525.249,  3286.64 ],
       [-8527.786,  3286.972],
       [-8530.325,  3287.299],
       [-8532.864,  3287.622],
       [-8535.403,  3287.941],
       [-8537.943,  3288.255],
       [-8540.484,  3288.565],
       [-8543.025,  3288.87 ],
       [-8545.567,  3289.171],
       [-8548.109,  3289.467],
       [-8550.652,  3289.759],
       [-8553.195,  3290.047],
       [-8555.738,  3290.33 ],
       [-8558.283,  3290.608],
       [-8560.827,  3290.883],
       [-8563.372,  3291.152],
       [-8565.918,  3291.418],
       [-8568.464,  3291.679],
       [-8568.121,  3295.061],
       [-8565.569,  3294.8  ],
       [-8563.017,  3294.534],
       [-8560.466,  3294.263],
       [-8557.915,  3293.989],
       [-8555.365,  3293.709],
       [-8552.816,  3293.426],
       [-8550.267,  3293.137],
       [-8547.718,  3292.845],
       [-8545.17 ,  3292.548],
       [-8542.622,  3292.246],
       [-8540.075,  3291.94 ],
       [-8537.529,  3291.63 ],
       [-8534.983,  3291.315],
       [-8532.438,  3290.996],
       [-8529.893,  3290.672],
       [-8527.348,  3290.344],
       [-8524.805,  3290.011],
       [-8522.262,  3289.674],
       [-8519.719,  3289.332],
       [-8517.177,  3288.987],
       [-8514.636,  3288.636],
       [-8512.095,  3288.281],
       [-8509.555,  3287.922],
       [-8507.016,  3287.558],
       [-8504.477,  3287.19 ],
       [-8501.939,  3286.818],
       [-8499.401,  3286.441],
       [-8496.865,  3286.059],
       [-8494.328,  3285.674],
       [-8491.793,  3285.283],
       [-8489.258,  3284.889],
       [-8486.724,  3284.49 ],
       [-8484.191,  3284.086],
       [-8481.658,  3283.678],
       [-8479.126,  3283.266],
       [-8476.595,  3282.849],
       [-8474.064,  3282.428],
       [-8471.534,  3282.002],
       [-8469.005,  3281.572],
       [-8466.477,  3281.138],
       [-8463.95 ,  3280.699],
       [-8461.423,  3280.256],
       [-8458.897,  3279.808],
       [-8456.372,  3279.356],
       [-8453.847,  3278.899],
       [-8451.324,  3278.438],
       [-8448.801,  3277.973],
       [-8446.279,  3277.503],
       [-8443.758,  3277.029],
       [-8441.237,  3276.551],
       [-8438.718,  3276.068],
       [-8436.199,  3275.581],
       [-8433.681,  3275.089],
       [-8431.165,  3274.593],
       [-8428.649,  3274.092],
       [-8426.133,  3273.588],
       [-8423.619,  3273.078],
       [-8421.106,  3272.565],
       [-8418.593,  3272.047],
       [-8416.082,  3271.524],
       [-8413.571,  3270.997],
       [-8411.061,  3270.466],
       [-8408.552,  3269.931],
       [-8406.044,  3269.391],
       [-8403.538,  3268.847],
       [-8401.032,  3268.298],
       [-8398.527,  3267.745],
       [-8396.023,  3267.187],
       [-8393.519,  3266.626],
       [-8391.017,  3266.059],
       [-8388.516,  3265.489],
       [-8386.016,  3264.914],
       [-8383.517,  3264.335],
       [-8381.019,  3263.751],
       [-8378.522,  3263.163],
       [-8376.026,  3262.571],
       [-8373.531,  3261.974],
       [-8371.037,  3261.373],
       [-8368.544,  3260.768],
       [-8366.052,  3260.158],
       [-8363.562,  3259.544],
       [-8361.072,  3258.925],
       [-8358.583,  3258.303],
       [-8356.096,  3257.675],
       [-8353.609,  3257.044],
       [-8351.124,  3256.408],
       [-8348.64 ,  3255.768],
       [-8346.157,  3255.124],
       [-8343.675,  3254.475],
       [-8341.194,  3253.822],
       [-8338.714,  3253.164],
       [-8336.236,  3252.502],
       [-8333.759,  3251.836],
       [-8331.282,  3251.166],
       [-8328.807,  3250.491],
       [-8326.334,  3249.812],
       [-8323.861,  3249.129],
       [-8321.39 ,  3248.441]]),
np.array([[-8568.464,  3291.679],
       [-8571.011,  3291.935],
       [-8573.558,  3292.187],
       [-8576.105,  3292.434],
       [-8578.653,  3292.678],
       [-8581.201,  3292.916],
       [-8583.75 ,  3293.15 ],
       [-8586.299,  3293.38 ],
       [-8588.848,  3293.605],
       [-8591.398,  3293.826],
       [-8593.948,  3294.043],
       [-8596.499,  3294.255],
       [-8599.05 ,  3294.462],
       [-8601.601,  3294.665],
       [-8604.153,  3294.864],
       [-8606.705,  3295.058],
       [-8609.257,  3295.248],
       [-8611.81 ,  3295.433],
       [-8614.363,  3295.613],
       [-8616.917,  3295.79 ],
       [-8619.47 ,  3295.962],
       [-8622.024,  3296.129],
       [-8624.578,  3296.292],
       [-8627.133,  3296.45 ],
       [-8629.688,  3296.604],
       [-8632.243,  3296.754],
       [-8634.798,  3296.899],
       [-8637.353,  3297.04 ],
       [-8639.909,  3297.176],
       [-8642.465,  3297.308],
       [-8645.021,  3297.435],
       [-8647.578,  3297.558],
       [-8650.135,  3297.676],
       [-8652.691,  3297.79 ],
       [-8655.248,  3297.899],
       [-8657.806,  3298.004],
       [-8660.363,  3298.105],
       [-8662.921,  3298.201],
       [-8665.479,  3298.292],
       [-8668.036,  3298.379],
       [-8670.595,  3298.462],
       [-8673.153,  3298.54 ],
       [-8675.711,  3298.614],
       [-8678.27 ,  3298.683],
       [-8680.828,  3298.748],
       [-8683.387,  3298.808],
       [-8685.946,  3298.864],
       [-8688.505,  3298.915],
       [-8691.063,  3298.962],
       [-8693.623,  3299.005],
       [-8696.182,  3299.043],
       [-8698.741,  3299.076],
       [-8701.3  ,  3299.105],
       [-8703.859,  3299.13 ],
       [-8706.419,  3299.15 ],
       [-8708.978,  3299.166],
       [-8711.537,  3299.177],
       [-8714.097,  3299.183],
       [-8716.656,  3299.186],
       [-8716.656,  3302.586],
       [-8714.091,  3302.583],
       [-8711.526,  3302.577],
       [-8708.96 ,  3302.565],
       [-8706.395,  3302.55 ],
       [-8703.83 ,  3302.53 ],
       [-8701.264,  3302.505],
       [-8698.699,  3302.476],
       [-8696.134,  3302.442],
       [-8693.569,  3302.404],
       [-8691.004,  3302.362],
       [-8688.439,  3302.315],
       [-8685.874,  3302.263],
       [-8683.31 ,  3302.207],
       [-8680.745,  3302.147],
       [-8678.181,  3302.082],
       [-8675.616,  3302.013],
       [-8673.052,  3301.939],
       [-8670.488,  3301.86 ],
       [-8667.924,  3301.778],
       [-8665.36 ,  3301.69 ],
       [-8662.796,  3301.598],
       [-8660.233,  3301.502],
       [-8657.669,  3301.402],
       [-8655.106,  3301.296],
       [-8652.543,  3301.187],
       [-8649.98 ,  3301.073],
       [-8647.418,  3300.954],
       [-8644.855,  3300.831],
       [-8642.293,  3300.703],
       [-8639.731,  3300.571],
       [-8637.17 ,  3300.435],
       [-8634.608,  3300.294],
       [-8632.047,  3300.148],
       [-8629.486,  3299.998],
       [-8626.925,  3299.844],
       [-8624.365,  3299.685],
       [-8621.805,  3299.522],
       [-8619.245,  3299.354],
       [-8616.685,  3299.182],
       [-8614.126,  3299.005],
       [-8611.567,  3298.824],
       [-8609.008,  3298.638],
       [-8606.45 ,  3298.448],
       [-8603.892,  3298.254],
       [-8601.335,  3298.055],
       [-8598.777,  3297.851],
       [-8596.22 ,  3297.643],
       [-8593.664,  3297.431],
       [-8591.108,  3297.214],
       [-8588.552,  3296.992],
       [-8585.997,  3296.767],
       [-8583.442,  3296.536],
       [-8580.887,  3296.302],
       [-8578.333,  3296.062],
       [-8575.779,  3295.819],
       [-8573.226,  3295.571],
       [-8570.673,  3295.318],
       [-8568.121,  3295.061]]),
np.array([[ -8716.656,   3299.339],
       [-10613.225,   3299.339],
       [-10613.225,   3302.739],
       [ -8716.656,   3302.739]]),
np.array([[-10613.225,   3299.339],
       [-10692.121,   3299.339],
       [-10692.121,   3302.739],
       [-10613.225,   3302.739]]),
np.array([[-9252.223,  3222.657],
       [-9254.804,  3223.375],
       [-9257.386,  3224.089],
       [-9259.969,  3224.798],
       [-9262.553,  3225.502],
       [-9265.138,  3226.203],
       [-9267.725,  3226.898],
       [-9270.313,  3227.589],
       [-9272.902,  3228.276],
       [-9275.493,  3228.958],
       [-9278.084,  3229.635],
       [-9280.677,  3230.308],
       [-9283.271,  3230.976],
       [-9285.866,  3231.64 ],
       [-9288.462,  3232.3  ],
       [-9291.059,  3232.954],
       [-9293.658,  3233.605],
       [-9296.257,  3234.25 ],
       [-9298.858,  3234.892],
       [-9301.46 ,  3235.528],
       [-9304.063,  3236.16 ],
       [-9306.667,  3236.788],
       [-9309.272,  3237.411],
       [-9311.878,  3238.029],
       [-9314.485,  3238.643],
       [-9317.094,  3239.253],
       [-9319.703,  3239.858],
       [-9322.314,  3240.458],
       [-9324.925,  3241.054],
       [-9327.538,  3241.645],
       [-9330.151,  3242.231],
       [-9332.766,  3242.813],
       [-9335.381,  3243.391],
       [-9337.998,  3243.964],
       [-9340.616,  3244.532],
       [-9343.234,  3245.096],
       [-9345.854,  3245.655],
       [-9348.474,  3246.21 ],
       [-9351.096,  3246.76 ],
       [-9353.718,  3247.305],
       [-9356.342,  3247.846],
       [-9358.966,  3248.382],
       [-9361.591,  3248.914],
       [-9364.218,  3249.441],
       [-9366.845,  3249.964],
       [-9369.473,  3250.482],
       [-9372.102,  3250.995],
       [-9374.732,  3251.504],
       [-9377.362,  3252.008],
       [-9379.994,  3252.508],
       [-9382.626,  3253.003],
       [-9385.26 ,  3253.493],
       [-9387.894,  3253.979],
       [-9390.529,  3254.46 ],
       [-9393.165,  3254.937],
       [-9395.801,  3255.409],
       [-9398.439,  3255.877],
       [-9401.077,  3256.339],
       [-9403.716,  3256.798],
       [-9406.356,  3257.251],
       [-9408.997,  3257.7  ],
       [-9411.638,  3258.145],
       [-9414.281,  3258.584],
       [-9416.924,  3259.02 ],
       [-9419.567,  3259.45 ],
       [-9422.212,  3259.876],
       [-9424.857,  3260.297],
       [-9427.503,  3260.714],
       [-9430.15 ,  3261.126],
       [-9432.797,  3261.534],
       [-9435.445,  3261.937],
       [-9438.094,  3262.335],
       [-9440.744,  3262.728],
       [-9443.394,  3263.117],
       [-9446.045,  3263.502],
       [-9448.696,  3263.882],
       [-9451.348,  3264.257],
       [-9454.001,  3264.627],
       [-9456.655,  3264.993],
       [-9459.309,  3265.354],
       [-9461.964,  3265.711],
       [-9464.619,  3266.063],
       [-9467.275,  3266.41 ],
       [-9469.932,  3266.753],
       [-9472.589,  3267.091],
       [-9475.247,  3267.424],
       [-9477.905,  3267.753],
       [-9480.564,  3268.077],
       [-9483.223,  3268.396],
       [-9485.883,  3268.711],
       [-9488.544,  3269.021],
       [-9491.205,  3269.327],
       [-9493.867,  3269.628],
       [-9496.529,  3269.924],
       [-9499.192,  3270.216],
       [-9501.855,  3270.503],
       [-9504.518,  3270.785],
       [-9507.183,  3271.063],
       [-9509.847,  3271.336],
       [-9509.504,  3274.718],
       [-9506.833,  3274.445],
       [-9504.163,  3274.166],
       [-9501.493,  3273.884],
       [-9498.824,  3273.596],
       [-9496.156,  3273.304],
       [-9493.488,  3273.007],
       [-9490.82 ,  3272.705],
       [-9488.153,  3272.399],
       [-9485.487,  3272.088],
       [-9482.821,  3271.773],
       [-9480.155,  3271.452],
       [-9477.491,  3271.128],
       [-9474.826,  3270.798],
       [-9472.163,  3270.464],
       [-9469.5  ,  3270.125],
       [-9466.837,  3269.782],
       [-9464.175,  3269.434],
       [-9461.514,  3269.081],
       [-9458.853,  3268.724],
       [-9456.193,  3268.361],
       [-9453.534,  3267.995],
       [-9450.875,  3267.624],
       [-9448.217,  3267.248],
       [-9445.56 ,  3266.867],
       [-9442.903,  3266.482],
       [-9440.247,  3266.092],
       [-9437.592,  3265.698],
       [-9434.937,  3265.298],
       [-9432.283,  3264.895],
       [-9429.63 ,  3264.486],
       [-9426.977,  3264.073],
       [-9424.325,  3263.656],
       [-9421.674,  3263.233],
       [-9419.024,  3262.806],
       [-9416.374,  3262.375],
       [-9413.725,  3261.939],
       [-9411.077,  3261.498],
       [-9408.43 ,  3261.053],
       [-9405.783,  3260.603],
       [-9403.138,  3260.148],
       [-9400.493,  3259.689],
       [-9397.848,  3259.225],
       [-9395.205,  3258.756],
       [-9392.563,  3258.283],
       [-9389.921,  3257.806],
       [-9387.28 ,  3257.323],
       [-9384.64 ,  3256.836],
       [-9382.001,  3256.345],
       [-9379.363,  3255.849],
       [-9376.725,  3255.348],
       [-9374.089,  3254.843],
       [-9371.453,  3254.333],
       [-9368.818,  3253.818],
       [-9366.184,  3253.299],
       [-9363.551,  3252.775],
       [-9360.919,  3252.247],
       [-9358.288,  3251.714],
       [-9355.658,  3251.177],
       [-9353.029,  3250.635],
       [-9350.401,  3250.088],
       [-9347.773,  3249.537],
       [-9345.147,  3248.981],
       [-9342.522,  3248.42 ],
       [-9339.897,  3247.855],
       [-9337.274,  3247.286],
       [-9334.651,  3246.712],
       [-9332.03 ,  3246.133],
       [-9329.41 ,  3245.549],
       [-9326.79 ,  3244.962],
       [-9324.172,  3244.369],
       [-9321.555,  3243.772],
       [-9318.938,  3243.17 ],
       [-9316.323,  3242.564],
       [-9313.709,  3241.954],
       [-9311.096,  3241.338],
       [-9308.484,  3240.718],
       [-9305.873,  3240.094],
       [-9303.263,  3239.465],
       [-9300.655,  3238.832],
       [-9298.047,  3238.193],
       [-9295.44 ,  3237.551],
       [-9292.835,  3236.904],
       [-9290.231,  3236.252],
       [-9287.628,  3235.596],
       [-9285.026,  3234.935],
       [-9282.425,  3234.27 ],
       [-9279.825,  3233.6  ],
       [-9277.227,  3232.925],
       [-9274.63 ,  3232.246],
       [-9272.034,  3231.563],
       [-9269.439,  3230.875],
       [-9266.845,  3230.182],
       [-9264.253,  3229.485],
       [-9261.662,  3228.784],
       [-9259.072,  3228.077],
       [-9256.483,  3227.367],
       [-9253.895,  3226.652],
       [-9251.309,  3225.932]]),
np.array([[-9509.847,  3271.336],
       [-9512.512,  3271.604],
       [-9515.178,  3271.868],
       [-9517.844,  3272.127],
       [-9520.51 ,  3272.381],
       [-9523.177,  3272.631],
       [-9525.845,  3272.876],
       [-9528.512,  3273.117],
       [-9531.181,  3273.352],
       [-9533.849,  3273.583],
       [-9536.518,  3273.81 ],
       [-9539.188,  3274.032],
       [-9541.857,  3274.249],
       [-9544.528,  3274.461],
       [-9547.198,  3274.669],
       [-9549.869,  3274.872],
       [-9552.54 ,  3275.071],
       [-9555.212,  3275.265],
       [-9557.884,  3275.454],
       [-9560.556,  3275.638],
       [-9563.228,  3275.818],
       [-9565.901,  3275.994],
       [-9568.575,  3276.164],
       [-9571.248,  3276.33 ],
       [-9573.922,  3276.491],
       [-9576.596,  3276.648],
       [-9579.27 ,  3276.799],
       [-9581.945,  3276.947],
       [-9584.619,  3277.089],
       [-9587.294,  3277.227],
       [-9589.97 ,  3277.36 ],
       [-9592.645,  3277.489],
       [-9595.321,  3277.613],
       [-9597.997,  3277.732],
       [-9600.673,  3277.846],
       [-9603.349,  3277.956],
       [-9606.026,  3278.061],
       [-9608.703,  3278.162],
       [-9611.379,  3278.258],
       [-9614.057,  3278.349],
       [-9616.734,  3278.435],
       [-9619.411,  3278.517],
       [-9622.089,  3278.594],
       [-9624.766,  3278.667],
       [-9627.444,  3278.734],
       [-9630.122,  3278.797],
       [-9632.8  ,  3278.856],
       [-9635.478,  3278.91 ],
       [-9638.156,  3278.959],
       [-9640.834,  3279.003],
       [-9643.512,  3279.043],
       [-9646.191,  3279.078],
       [-9648.869,  3279.108],
       [-9651.548,  3279.134],
       [-9654.226,  3279.155],
       [-9656.905,  3279.171],
       [-9659.583,  3279.183],
       [-9662.262,  3279.19 ],
       [-9664.941,  3279.192],
       [-9664.941,  3282.592],
       [-9662.256,  3282.59 ],
       [-9659.571,  3282.583],
       [-9656.887,  3282.571],
       [-9654.202,  3282.555],
       [-9651.518,  3282.534],
       [-9648.834,  3282.508],
       [-9646.149,  3282.478],
       [-9643.465,  3282.443],
       [-9640.781,  3282.403],
       [-9638.097,  3282.358],
       [-9635.412,  3282.309],
       [-9632.729,  3282.255],
       [-9630.045,  3282.197],
       [-9627.361,  3282.133],
       [-9624.677,  3282.065],
       [-9621.994,  3281.993],
       [-9619.31 ,  3281.915],
       [-9616.627,  3281.833],
       [-9613.944,  3281.747],
       [-9611.261,  3281.655],
       [-9608.578,  3281.559],
       [-9605.895,  3281.459],
       [-9603.213,  3281.353],
       [-9600.531,  3281.243],
       [-9597.849,  3281.128],
       [-9595.167,  3281.009],
       [-9592.485,  3280.885],
       [-9589.804,  3280.756],
       [-9587.122,  3280.623],
       [-9584.441,  3280.485],
       [-9581.761,  3280.342],
       [-9579.08 ,  3280.194],
       [-9576.4  ,  3280.042],
       [-9573.72 ,  3279.885],
       [-9571.04 ,  3279.724],
       [-9568.361,  3279.557],
       [-9565.682,  3279.386],
       [-9563.003,  3279.211],
       [-9560.325,  3279.031],
       [-9557.647,  3278.846],
       [-9554.969,  3278.656],
       [-9552.291,  3278.462],
       [-9549.614,  3278.263],
       [-9546.937,  3278.059],
       [-9544.261,  3277.851],
       [-9541.585,  3277.638],
       [-9538.909,  3277.42 ],
       [-9536.234,  3277.198],
       [-9533.559,  3276.971],
       [-9530.884,  3276.739],
       [-9528.21 ,  3276.503],
       [-9525.537,  3276.262],
       [-9522.863,  3276.017],
       [-9520.19 ,  3275.766],
       [-9517.518,  3275.511],
       [-9514.846,  3275.252],
       [-9512.175,  3274.987],
       [-9509.504,  3274.718]]),
np.array([[ -9664.941,   3279.339],
       [-10613.225,   3279.339],
       [-10613.225,   3282.739],
       [ -9664.941,   3282.739]]),
np.array([[-10613.225,   3279.339],
       [-10692.121,   3279.339],
       [-10692.121,   3282.739],
       [-10613.225,   3282.739]])]

# construct the cell structure
cell = gdspy.Cell('CELL')
cell.add(gdspy.PolygonSet(poly_stuctures))

# offset the structure
poly_offset = gdspy.offset(gdspy.CellReference(cell), distance=0.35, layer=1, join_first=True, precision=0.0001)
cell_offset = gdspy.Cell('CELL_OFFSET')
cell_offset.add(poly_offset)

# write the result to gds file
gdspy.write_gds('offset_test_output.gds', cells=[cell, cell_offset])

from gdspy.

explorer2011 avatar explorer2011 commented on September 28, 2024

Just a small comment - applying various geometrical operations to arbitrary complex layouts is a challenging task. Doing simple things on simple layouts (like sizing a rectangle) is simple, but doing this on geometries containing very small angles, or acute angles, or holes, etc. is non-trivial. The best software for this sort of things, in my opinion, is Calibre (from Mentor Graphics - now part of Siemens).

I tried to do resizing (you call it offsetting) of your example in another tool (klayout) - it avoided the problems that gdspy had (apparently, algorithms bugs), but had some other issues (narrow inward triangular cuts caused by two neighboring edges that are almost parallel).

In one of my previous companies, we had out own computational geometry library, and we had to continuously improve it until all issues were resolved (and new issues were showing up for some new unusual geometries in GDS files).

One unrelated note - you have some (I guess - unintended) jogs at the polygon fracture edges...

from gdspy.

rosivda avatar rosivda commented on September 28, 2024

@explorer2011 With regard to building generic algorithms to handle arbitrary geometries – I agree, no mean feat! Gdspy handles the absolute majority of cases correctly, but in some corner cases (roughly, <1 per 100,000 structures), residual issues need to be worked out. We all come from backgrounds where we used various layout tools – and certainly have an option of applying them here as well. From our experience, however, we have not been happier to have built our integrated design framework on top of python/gdspy and have cut out all the other layout dependencies from our workflow. This allowed us to fully automate our design and fabrication cycle and collaborate more effectively in spite of running on different OSs and hardware.
The “jogs” that you may have observed are intended. Our waveguide rendering tool compensates for the displacement of the mode in a curved waveguide relative to the waveguide center. In cases when the curvature of the waveguide changes abruptly, the renderer will produce a kink in the waveguide to align the modes in the waveguides with different curvatures.

from gdspy.

explorer2011 avatar explorer2011 commented on September 28, 2024

Agreed, simplicity and ease of use is the king...

from gdspy.

heitzmann avatar heitzmann commented on September 28, 2024

It seems that the problem is in fact in the fracture code, not offset.
If I use max_points=1e300 the problem stops. I have to check the code and see if I find the bug... I don't know how hard that will be, so it could take a while. @okianus, thanks for the example!

from gdspy.

rosivda avatar rosivda commented on September 28, 2024

@heitzmann I have an observation - please take it with a grain of salt. I observe errors occurring only in the regions where a densely sampled structure ( such as a curved waveguide) intersects a very sparsely sampled structure (such as a very elongated rectangle only defined by its corners). @okianus 's example falls into that category.

from gdspy.

aeberspaecher avatar aeberspaecher commented on September 28, 2024

I have seen errors with fracturing for issue #9 as well. Unfortunately I still cannot provide test data.

from gdspy.

rosivda avatar rosivda commented on September 28, 2024

@heitzmann I would like to add another piece of info. In order for us to overcome the above errors, we introduce a minute inclination in what should have been perfectly horizontal waveguides. This breaks the symmetry and allows gdspy to execute without errors.

from gdspy.

heitzmann avatar heitzmann commented on September 28, 2024

Sorry, I've been quite busy and this is a complex issue probably with the _chop algorithm for heavily degenerate polygons.

The simplest solution I can think of is to use the boolean C extension library to robustly do the fracturing of the polygons. This adds another precision setting for all functions depending on fractures, but I guess it's a fair price for having the correct result.

The changes are included in commit 693dfd8 (branch next). I'll leave the issue open until this fix is properly tested.

In the future I might add a _chop function in C to speed up a little compared to the current version.

from gdspy.

Miakatt avatar Miakatt commented on September 28, 2024

Hi. Was this issue properly resolved and tested?
I've been having problems with GDS designed developed in PICWriter which uses gdspy. Some designs crash the e-beam during writing and I suspect it has something to do with loops in the grating couplers.

from gdspy.

heitzmann avatar heitzmann commented on September 28, 2024

Hi @Miakatt, indeed this has been resolved. The _chop function is performed by the library clipper (C extension, external dependency), in which we haven't found any bugs so far. Do you have any more information on the issue? Or maybe an example gds file where the crash occurs (as minimal as possible, so we can investigate)?

from gdspy.

Miakatt avatar Miakatt commented on September 28, 2024

Hi @heitzmann. I am using a Raith Voyager E-beam. My designs are created in PICWriter (https://github.com/DerekK88/PICwriter) in which I create a cladding layer (1), a top layer (2) and a mask layer (layer 3). Layer 3 is what I write with the E-Beam.
This is done with the PICwriter Toolkit call to build_mask. This function does the boolean operation in gdspy:

  if wgt.resist=='+':
        cell.add(gdspy.fast_boolean(pWG, pCLAD, 'xor', precision=0.001, max_points=199, layer=fl, datatype=fd))
    elif wgt.resist=='-':
        cell.add(gdspy.fast_boolean(pWG, pCLAD, 'and', precision=0.001, max_points=199, layer=fl, datatype=fd))

I run the pattern through the Raith consistency check. It shows some errors, but these are usually extremely small features/corners that the E-beam can't write. Our expert says that these errors shouldn't be a problem in practice.

I've included a link GDS of one of the patterns that locked up. It failed on the bottom-most grating coupler. I can't say at exactly which position, but it looked to be at the GC itself, not the waveguide.

https://www.dropbox.com/s/thnkmcm7sil4mhs/GC_Sweep_straight_endfire_lock-up.gds?dl=0

I converted the pattern to ASCII in the Raith software and tried again, but it stopped writing at the same point.

The GDS has 11 grating couplers of varying periodicity. I could provide a single GC, but I know this particular file failed twice. To determine if a more minimalist example also fails will require a lot of work as it only fails during writing in the ebeam.

We're talking to a Raith engineer today, so hopefully they can look in to this too.

from gdspy.

Miakatt avatar Miakatt commented on September 28, 2024

For completeness, I've provided a png of the grating coupler area I think was the point of failure.
I wonder if the issue is due to the joint in the GC, and shortening the grating region may prevent the lock-up.
I shall let you know if we get any useful information from Raith.

straight_gc

from gdspy.

heitzmann avatar heitzmann commented on September 28, 2024

The shapes look fine to me in KLayout... could it be that the problem is in the 4nm strip at the last grating tooth? Or maybe the shape is just too complex for the Raith software... in that case, maybe chop the taper part out, than chop the teeth from the outer cladding to avoid creating holes?

from gdspy.

rosivda avatar rosivda commented on September 28, 2024

@Miakatt FYI, I have looked at your coupler layout using our custom .gds viewer. I am not able to observe a problem or what could be causing it. As you may be aware, during ebeam writing, gds file typically gets flattened by the writing software to a base structure that is a trapezoid. We have encountered cases when the flattened structure exploded to several Gb causing the ebeam buffer overflowing. The type of structure that you are showing, unless a part of a much more complex layout, should be ok.

from gdspy.

Miakatt avatar Miakatt commented on September 28, 2024

@heitzmann, @rosivda . Thank you for taking the time to look in to this. I am also able to view the layout in various third party software (KLayout, Layout Editor, MEEP etc) as well as the Raith Voyager viewer/editor. The issue does seem to be related to how the Voyager writing software interprets the .gds file. I wasn't aware of the 'explosive' memory requirements during writing. This is interesting, as the task manager shows a flat 5GB RAM usage, even though there is 32GB available. So, maybe it's a local issue?

I'm told that other users of the E-beam are doing more complex layouts (designed in Matlab) with no issues. I don't know the details of these files as I'm an commercial user of the University's facilities. They may be complex, but very modular/repetitive, and therefore not so complex for the Voyager software to compose.

I will need to look in to this and also see what Raith come back with. For now, it looks like the issue is either with them, or a more local problem. Thank you again for checking the example gds. I will post back when I get more information.

from gdspy.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.