################################################################################################
# Copyright 2022 GlobalFoundries PDK Authors
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an 'AS IS' BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################################################

if BEOL

    #====================================================
    #----------------- Metal1 Slotting ------------------
    #====================================================

    # Rule MSLOT.1_M1 : Maximum metal1 width without slotting 
    logger.info('Executing rule MSLOT.1_M1') 
    mslot1_m1 = metal1.not(metal1.width(30.01.um).polygons(0.001)).not_interacting(metal1_slot)
    mslot1_m1.output('MSLOT.1_M1','MSLOT.1_M1 : Maximum metal1 width without slotting ')
    mslot1_m1.forget 

    # Rule MSLOT.2_M1  : Minimum metal1 slot width (slot layers)
    logger.info('Executing rule MSLOT.2_M1')
    mslot2_m1 = metal1_slot.width(2.0.um).polygons(0.001)
    mslot2_m1.output('MSLOT.2_M1','MSLOT.2_M1  : Minimum metal1 slot width (slot layers)') 
    mslot2_m1.forget

    # Rule MSLOT.3a_M1 : Minimum  metal1 Slot length (slot mark layers) 
    logger.info('Executing rule MSLOT.3a_M1')
    mslot3a_m1 = metal1_slot.with_bbox_max(nil,10.um)
    mslot3a_m1.output('MSLOT.3a_M1','MSLOT.3a_M1 : Minimum Slot length (slot mark layers) ')
    mslot3a_m1.forget

    # Rule MSLOT.3b_M1 : Maximum  metal1 Slot length (slot mark layers) is 250 um
    logger.info('Executing rule MSLOT.3b_M1')
    mslot3b_m1 = metal1_slot.with_bbox_max(250.001,nil)
    mslot3b_m1.output('MSLOT.3b_M1','MSLOT.3b_M1 : Maximum Slot length (slot mark layers) is 250 um')
    mslot3b_m1.forget

    # Rule MSLOT.4a_M1 : Minimum metal1 Slot space (slot mark layers) is 10 um
    logger.info('Executing rule MSLOT.4a_M1')
    mslot4a_m1 = metal1_slot.space(10.um).polygons(0.001)
    mslot4a_m1.output('MSLOT.4a_M1','MSLOT.4a_M1 : Minimum metal1 Slot space (slot mark layers) is 10 um')
    mslot4a_m1.forget


    if metal1_slot.count() > 1 
    # Rule MSLOT.4b_M1 : Maximum metal1 Slot space (slot mark layers) is 30 um
    logger.info('Executing rule MSLOT.4b_M1')
    mslot4b_m1 = metal1_slot.not_interacting(metal1_slot.space(30.001.um).polygons(0.001))
    mslot4b_m1.output('MSLOT.4b_M1','MSLOT.4b_M1 : Maximum metal1 Slot space (slot mark layers) is 30µm')
    mslot4b_m1.forget
    end 

    # Rule MSLOT.5_M1 : Minimum metal1 slot (slot mark layers) to metal1 edge spacing is 10 um 
    logger.info('Executing rule MSLOT.5_M1')
    mslot5_m1_l1 = metal1.enclosing(metal1_slot,10.0.um).polygons(0.001)
    mslot5_m1_l2 = metal1_slot.not_inside(metal1)
    mslot5_m1 = mslot5_m1_l1.or(mslot5_m1_l2)
    mslot5_m1.output('MSLOT.5_M1','MSLOT.5_M1 : Minimum metal1 slot (slot mark layers) to metal1 edge spacing is 10 um')
    mslot5_m1_l1.forget
    mslot5_m1_l2.forget
    mslot5_m1.forget

    # Rule MSLOT.7_M1 : Minimum space from via1 to metal1 slot is 0.2 um
    logger.info('Executing rule MSLOT.7_M1')
    mslot7_m1 = via1.separation(metal1_slot,0.2.um).polygons(0.001).or(via1.not_outside(metal1_slot))
    mslot7_m1.output('MSLOT.7_M1','MSLOT.7_M1 : Minimum space from via1 to metal1 slot is 0.2 um') 
    mslot7_m1.forget

    # Rule MSLOT.8_M1 : Minimum space from contact to metal1 slot is 0.2 um
    logger.info('Executing rule MSLOT.8_M1')
    mslot8_m1 = contact.separation(metal1_slot,0.2.um).polygons(0.001).or(contact.not_outside(metal1_slot))
    mslot8_m1.output('MSLOT.8_M1','MSLOT.8_M1 : Minimum space from contact to metal1 slot is 0.2 um')
    mslot8_m1.forget

    # Rule MSLOT.10_M1 : Slot mark layer (metal1 slot) on the metal1 hole are not allowed
    logger.info('Executing rule MSLOT.10_M1')
    mslot10_m1 = metal1_slot.interacting(metal1.holes)
    mslot10_m1.output('MSLOT.10_M1','MSLOT.10_M1 : Slot mark layer (metal1 slot) on the metal1 hole are not allowed')
    mslot10_m1.forget    

end #BEOL
