I've outlined a process and given some sloppy code (I suggest you finish it, debug and post it as an answer when you are done).
I think of this in three major steps, (1) iterate through the parcels (2) iterate through parcel's neighbors (3) split the last parcel if necessary. The third step is the hardest and I don't have a solution to that yet. Here is what I have so far:
import os
import arcpy
from arcpy import da
#da.SearchCursor is new as of 10.1 and is faster
parcels = "C:\Users\ln88615\Documents\GIS_data\cadastral_computation\mask2.shp"
parcels2 = path + "cpymask2.shp"
path = os.path.dirname(parcels)
parcelPoints = path + "tempPnts.shp"
outPnt = path + "tempPnt.shp"
pnts_layer = "points"
parcel_layer = "parcel"
distanceTable = "distance"
#I've assumed this was your area field
area_field = "Matr"
thresholdArea = 1234
arcpy.FeatureToPoint_management(parcels_layer, parcelPoints)
The center points are to determine neighbors later. Select by location doesn't work as well since it will limit you to only those that border and you want to order your list as well, which distance is a good criteria for. Now you are ready to loop through the parcels
with arcpy.da.SearchCursor(parcels, ["FID", "area_field"]) as cursor:
for row in cursor:
area = row[1]
if int(area) < thresholdArea:
totalArea= int(area)
#create layer for selected parcel
sltqry = '"FID"=' + row[0]
arcpy.MakeFeatureLayer_management(parcels, parcel_layer)
arcpy.SelectLayerByAttribute_management(parcel_layer, "NEW_SELECTION", sltqry)
#(2) Within the above loop, you need to iterate through neighbor parcels.
#Select point inside current parcel, must use layer
arcpy.MakeFeatureLayer_management(parcelpoints, pnts_layer)
arcpy.SelectLayerByLocation(pnts_layer, "WITHIN", parcel_layer)
#It should do the select using the selection, if not create a FC after the select by attribute like:
#arcpy.CopyFeatures_management(parcel_layer, path + "parcel.shp")
#I created a new FC for the selection but PointDistance_analysis may take it more directly
arcpy.CopyFeatures_management(pnts_layer, outPnt)
#calculate distance to all other points, limit parcelPoints if it is long
arcpy.PointDistance_analysis(outPnt, parcelPoints, distanceTable)
#The first entry is its distance to itself so remove it or skip it in the next loop
You want to Join the distances back to the original parcels. Your table has IDs from the points which should still correspond to the ones from the parcels. Depending on how these are stored (it didn't look like you were using a gbd) you may or may not be able to rely on ID's matching. Look at your data and consider adding a "parcel_ID" to the points if need be.
JoinField_management(parcels, "FID", distanceTable, "FID", "DISTANCE")
#Sort the parcels by the distance, search cursor may do this
arcpy.Sort_management(parcels, parcels2, "DISTANCE")
neighborList = arcpy.da.SearchCursor(parcels2, ["DISTANCE", "area_field"])
for neighbor in neighborList:
if TotalArea<thresholdArea:
area2 = neighbor[1]
updateArea = totalArea + int(area2)
totalArea = updateArea
if totalArea>thresholdArea:
# (3) Do Split Function
#outside the neighbor loop remove the join
arcpy.RemoveJoin_management (parcels)
elseif int(area) > thresholdArea:
# (3) Do Split Function