diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py index 84de637..c99b1f8 100644 --- a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py +++ b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py @@ -1,85 +1,7 @@ import proforma.ProFormaForm as ProFormaForm from statistics import mean -myAMI_1P1 = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } - -myProFormaP1 = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P1) -myAMI_1P1rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } - -myProFormaP1rep = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P1rep) myAMI_1P2 = {'Affordable 1': ['Studio', 0.06, 400, 1150], 'Affordable 2': ['1-Bed', 0.18, 600, 1250], @@ -92,17 +14,17 @@ myProFormaP2 = ProFormaForm.ProForma(verbose= False, exportToExcel= False, yrs = 3, - start_year = 2034, + start_year = 2032, lot_area= 839831, - equity = 0.70, + equity = 0.75, net_loss_factor= 0.15, - landscape_gross_sqft= 0, + landscape_gross_sqft= 47000, existingBuildingFloorArea=0, existingBuildingPurchase=0, residential_gross_sqft= 188000, commercial_gross_sqft= 49210, manufacturing_gross_sqft=0, - community_gross_sqft= 8100, + community_gross_sqft= 24335, avgUnitSize_residential= 600, avgUnitSize_commercial= 2000, avgUnitSize_manufacturing=0, @@ -115,208 +37,9 @@ manufacturing_rent=0, community_cost= 275, community_rent= 60000, - hard_cost=250, - soft_cost=107, + hard_cost= 206, + soft_cost= 88, land_cost=1, - landscape_cost=0, + landscape_cost= 50, residential_AMI=myAMI_1P2) -myAMI_1P2rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } - -myProFormaP2rep = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P2rep) - -myAMI_1P3 = {'Affordable 1': ['Studio', 0.08, 400, 1150], - 'Affordable 2': ['1-Bed', 0.28, 600, 1250], - 'Affordable 3': ['2-Bed', 0.24, 800, 1500], - 'Market 1': ['Studio', 0.06, 400, 3200], - 'Market 2': ['1-Bed', 0.18, 600, 4000], - 'Market 3': ['2-Bed', 0.16, 800, 5700], - } - -myProFormaP3 = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P3) - -myAMI_1P3rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } - -myProFormaP3rep = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P3rep) - -myAMI_1P4 = {'Affordable 1': ['Studio', 0.10, 400, 1150], - 'Affordable 2': ['1-Bed', 0.32, 600, 1250], - 'Affordable 3': ['2-Bed', 0.28, 800, 1500], - 'Market 1': ['Studio', 0.04, 400, 3200], - 'Market 2': ['1-Bed', 0.14, 600, 4000], - 'Market 3': ['2-Bed', 0.12, 800, 5700], - } - -myProFormaP4 = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P4) - -myAMI_1P4rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } - -myProFormaP4rep = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P4rep) \ No newline at end of file diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructure.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructure.cpython-310.pyc index 54d3583..84ec119 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructure.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructure.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructureHelper.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructureHelper.cpython-310.pyc index 77924bb..92b72f0 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructureHelper.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructureHelper.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CostHelper.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CostHelper.cpython-310.pyc index 69e751a..8732e17 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CostHelper.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CostHelper.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Costs.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Costs.cpython-310.pyc index 367466e..7440dc0 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Costs.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Costs.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Inputs.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Inputs.cpython-310.pyc index 5bdceea..d3ff8f7 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Inputs.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Inputs.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/InputsAssumptions.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/InputsAssumptions.cpython-310.pyc index 4c9098d..b88934c 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/InputsAssumptions.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/InputsAssumptions.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/OtherRates.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/OtherRates.cpython-310.pyc index a7658ea..330ebd5 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/OtherRates.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/OtherRates.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Proceeds.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Proceeds.cpython-310.pyc index fe09ee0..11e62ac 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Proceeds.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Proceeds.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/ProceedsHelper.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/ProceedsHelper.cpython-310.pyc index 06ed305..1e6cc7f 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/ProceedsHelper.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/ProceedsHelper.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Totals.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Totals.cpython-310.pyc index 460d51b..53e9dbd 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Totals.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/Totals.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/Results.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/Results.cpython-310.pyc index 7e204b0..2569e77 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/Results.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/Results.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsHelper.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsHelper.cpython-310.pyc index 1ff2751..cfe0f32 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsHelper.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsHelper.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsMetricHelper.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsMetricHelper.cpython-310.pyc index 82e1769..7b16576 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsMetricHelper.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsMetricHelper.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Schedule/__pycache__/ScheduleDataFrame.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Schedule/__pycache__/ScheduleDataFrame.cpython-310.pyc index b778332..4cdbd9c 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Schedule/__pycache__/ScheduleDataFrame.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Schedule/__pycache__/ScheduleDataFrame.cpython-310.pyc differ diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/__pycache__/ProFormaForm.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/__pycache__/ProFormaForm.cpython-310.pyc index 226f5c5..d485554 100644 Binary files a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/__pycache__/ProFormaForm.cpython-310.pyc and b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/__pycache__/ProFormaForm.cpython-310.pyc differ diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore b/Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml b/Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml new file mode 100644 index 0000000..74d515a --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml new file mode 100644 index 0000000..a4652f3 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml new file mode 100644 index 0000000..cb032cd --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml new file mode 100644 index 0000000..4fce1d8 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py b/Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py new file mode 100644 index 0000000..1fcfaa3 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py @@ -0,0 +1 @@ +''' test ''' diff --git a/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py new file mode 100644 index 0000000..c7410f6 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py @@ -0,0 +1,172 @@ +import DevelopmentCostsInputs as devCost + +#0.StartingAssumptions# + +def TotalGrossZoningFloorArea(residZFA, comZFA, manZFA): + totalGZFA = [residZFA,comZFA,manZFA] + sumGZFA = sum(totalGZFA) +##for i in totalGZFA- how would we be able to it that way but print what each one is only one time## + print("ResidentialZoningFloorArea") + print(residZFA) + print("CommercialZoningFloorArea") + print(comZFA) + print("ManufacturingZoningFloorArea") + print(manZFA) + return sumGZFA + +def InacuracyFloorLoss(myTotalGZFA, InacFact): + floorLoss = myTotalGZFA * InacFact + print("InaccuracyFactor") + print(InacFact) + return floorLoss + +def TotalZoningFloorArea(myTotalGZFA, LossFact): + totalZFA = myTotalGZFA - (myTotalGZFA * LossFact) + print("NetLossFactor") + print(LossFact) + return totalZFA + +myTotalGZFA = TotalGrossZoningFloorArea(residZFA= devCost.ResidentialZoningFloorArea, + comZFA= devCost.CommercialZoningFloorArea, + manZFA= devCost.ManufacturingZoningFloorArea) +print("InitialTotalGrossZoningFloorArea") +print(myTotalGZFA) + +myFloorLoss = InacuracyFloorLoss(myTotalGZFA= myTotalGZFA, + InacFact= devCost.InacuracyFactor) +print("Inacuracy+/-FloorLoss") +print(myFloorLoss) + +myTotalZFA = TotalZoningFloorArea(myTotalGZFA= myTotalGZFA, + LossFact= devCost.NetLossFactor) +print("FinalTotalZoningFloorArea") +print(myTotalZFA) + +#A.DevelopmentCosts# + +def LandPurchaseCost(landCost, lotArea): + totalPurchCost = landCost * lotArea + print("LandCost") + print(landCost) + print("LotArea") + print(lotArea) + return totalPurchCost + +def ResidentialCost(residZFA, residCost): + totalResidCost = residZFA * residCost + print("ResidentialCostpsf") + print(residCost) + return totalResidCost + +def CommercialCost(comZFA, comCost): + totalComCost = comZFA * comCost + print("CommercialCostpsf") + print(comCost) + return totalComCost + +def ManufacturingCost(manZFA, manCost): + totalManCost = manZFA * manCost + print("ManufacturingCostpsf") + print(manCost) + return totalManCost + +def HardCost(myTotalGZFA, hardCost): + totalHardCost = myTotalGZFA * hardCost + print("HardCostpsf") + print(hardCost) + return totalHardCost + +def SoftCost(myTotalGZFA, softCost): + totalSoftCost = myTotalGZFA * softCost + print("SoftCostpsf") + print(softCost) + return totalSoftCost + +def TotalDevelopmentCost(BuildPurch, mytotalPurchCost, mytotalResidCost, mytotalComCost, mytotalManCost, mytotalHardCost, mytotalSoftCost): + totalDevCost = [BuildPurch, mytotalPurchCost, mytotalResidCost, mytotalComCost, mytotalManCost, mytotalHardCost, mytotalSoftCost] + sumDevCost: int = sum(totalDevCost) + print("ExistingBuildingPurchase") + print(BuildPurch) + return sumDevCost + +mytotalPurchCost = LandPurchaseCost(landCost= devCost.LandCostpsf, + lotArea= devCost.LotArea) +print("TotalLandPurchaseCost") +print(mytotalPurchCost) + +mytotalResidCost = ResidentialCost(residZFA= devCost.ResidentialZoningFloorArea, + residCost= devCost.ResidentialCostpsf) +print("TotalResidentialCost") +print(mytotalResidCost) + +mytotalComCost = CommercialCost(comZFA= devCost.CommercialZoningFloorArea, + comCost= devCost.CommercialCostpsf) +print("TotalCommercialCost") +print(mytotalComCost) + +mytotalManCost = ManufacturingCost(manZFA= devCost.ManufacturingZoningFloorArea, + manCost= devCost.ManufacturingCostpsf) +print("TotalManufacturingCost") +print(mytotalManCost) + +mytotalHardCost = HardCost(myTotalGZFA= myTotalGZFA, + hardCost= devCost.HardCostpsf) +print("TotalHardCost") +print(mytotalHardCost) + +mytotalSoftCost = SoftCost(myTotalGZFA= myTotalGZFA, + softCost= devCost.SoftCostpsf) +print("TotalSoftCost") +print(mytotalSoftCost) + +myTotalDevCost = TotalDevelopmentCost(BuildPurch= devCost.ExistingBuildingPurchase, + mytotalPurchCost= mytotalPurchCost, + mytotalResidCost= mytotalResidCost, + mytotalComCost= mytotalComCost, + mytotalManCost= mytotalManCost, + mytotalHardCost= mytotalHardCost, + mytotalSoftCost= mytotalSoftCost) +print("TotalDevelopmentCost") +print(myTotalDevCost) + +#B.CapitalStructure# + +def Equity(myTotalDevCost, EqPerc): + totalEq = myTotalDevCost * EqPerc + print("EquityPercentage") + print(EqPerc) + return totalEq + +def Debt(myTotalDevCost, mytotalEq): + totalDebt = myTotalDevCost - mytotalEq + return totalDebt + +def DebtService(mytotalDebt, DebtServPerc): + totalDebtServ = mytotalDebt * DebtServPerc + print("DebtServicePercentage") + print(DebtServPerc) + return totalDebtServ + +mytotalEq = Equity(myTotalDevCost= myTotalDevCost, + EqPerc= devCost.EquityPercentage) +print("TotalEquity") +print(mytotalEq) + +mytotalDebt = Debt(myTotalDevCost= myTotalDevCost, + mytotalEq= mytotalEq) +print("TotalDebt") +print(mytotalDebt) + +mytotalDebtServ = DebtService(mytotalDebt= mytotalDebt, + DebtServPerc= devCost.DebtServicePercentage) +print("TotalDebtServicingCost") +print(mytotalDebtServ) + +#C.ProjectedResidentialProceeds# + +#ResidentialExpenses# + +#Depreciation# + + + diff --git a/Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py b/Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py new file mode 100644 index 0000000..440ffc2 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py @@ -0,0 +1,41 @@ +#0.StartingAssumptions# +DevelopmentTimeline = 11 +LotArea = 10375 +ExistingBuildingFloorArea = 132420.00 ##instead of hard coding can input from Built Area from Profile Information. whose code would that be?## +ResidentialFAR = 7.52 +CommercialFAR = 1.00 +ManufacturingFAR = 0.00 +ResidentialZoningFloorArea = 100000.00 +CommercialZoningFloorArea = 100000.00 +ManufacturingZoningFloorArea = 100000.00 +InacuracyFactor = 0.03 +NetLossFactor = 0.15 + +#A.DevelopmentCosts# +ResidentialCostpsf = 500.00 +CommercialCostpsf = 500.00 +ManufacturingCostpsf = 500.00 +HardCostpsf = 200.00 +SoftCostpsf = 200.00 +LandCostpsf = 50 +ExistingBuildingPurchase = 0 + +#B.CapitalStructure# +DebtPercentage = 0.65 +EquityPercentage = 0.35 +DebtServicePercentage = 0.0688 + +#C.ProjectedResidentialProceeds# +AverageMarketRateUnitSizepsf = 900.00 +MarketRateRentpyr = 12000.00 +ResidentialVacancyRate = 0.05 +IncomeExpenseEscalation = 0.02 + +#ResidentialExpenses# +OperationalExpensespsf = 6.50 +RealEstateTaxespsf = 2.50 +ReplacementReservepsf = 1.00 + +#Depreciation# +ResidentailDepreciationinyrs = 27.5 + diff --git a/Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py b/Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py new file mode 100644 index 0000000..752f422 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py @@ -0,0 +1,9 @@ +#Manufacturing Constants + +marketRateRent = 12000 +manufacturingVacancyRate = .05 +manufacturingIncome = 100000 +operationalExpensesPerSqft = 3 +realEstateTaxesPerSqft = 1 +replacementReservesPerSqft = .50 +manufacturingDepreciationInYears = 39 \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/OtherRates.py b/Spring/Teams/Towers in the Soup/ProForma/OtherRates.py new file mode 100644 index 0000000..0255598 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/OtherRates.py @@ -0,0 +1,30 @@ +"""Attributes""" + +'''Import from Legacies py file''' +import DevCosts_CapitalStruc +DC = DevCosts_CapitalStruc + +annualIncreaseInExpenses = .02 +annualPublicSubsidiesIncrease = .02 +capRateAtSale = .06 +salesExpense = .05 +ordinaryIncomeTax = .35 +depreciationRecapture = .25 +capitalGainsTax = .2 +discountRate = 0 +interestRate = .05 + + +loanAmount = DC.myTotalDevCost #TODO: import from Car legacies -> DC.totalDevelopmentCost? + +debtService = DC.mytotalDebtServ #TODO: import from Car legacies -> CS.debtService? + +def constantLoanRate(loanAmount, debtService): + return debtService / loanAmount +constantRate = constantLoanRate(loanAmount, debtService) +print(constantRate) + + +'''print(constantLoanRate())''' +print(loanAmount) +print(debtService) \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py new file mode 100644 index 0000000..c9be1bc --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py @@ -0,0 +1,17 @@ +ProfileInformation = { + Date= + Team= + Portfolio= + Lot Area= + Lot Depth= + Land Use= + Easements= + BBL= + BIN= + Zoning District= + BuiltFAR= + ExistingBuildings= + YearBuilt= + BuiltArea= + BuildingUse= +} \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py new file mode 100644 index 0000000..1a0f7b9 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py @@ -0,0 +1,98 @@ +# Global Constants +constructionCostPerSqFt = 362 +studioSqFt = 400 +oneBedroomSqFt = 575 +twoBedroomSqFt = 775 +threeBedroomSqFt = 950 +numberStudios = 20 +numberOneBedrooms = 20 +numberTwoBedrooms = 40 +numberThreeBedrooms = 20 +affordableRentPerSqft = 1 +marketRentPerSqft = 3 +i = .03 +n = 1 + +def userInput(): + userInput = input("What percentage of housing would you like to be affordable? ") + try: + userInputNumber = int(userInput) + if 0 < userInputNumber < 101: + return tidsProforma(userInputNumber) + elif userInputNumber > 100: + print("You can't have more than 100% of anything. Who taught you math?") + elif userInputNumber == 0: + print("Why did you enter zero? Do you hate poor people?") + elif userInputNumber < 0: + print("You entered a negative number. That's not possible.") + except ValueError: + print("You didn't put and integer... Stop Trying to break my program!") + +def tidsProforma(userInputNumberAffordable): + print("Towers In The Soup") + print("Pro Forma") + + percentAffordable = userInputNumberAffordable + percentMarketRate = 100 - percentAffordable + + development_totalSqFt = totalSqft() + affordable_totalSqFt = totalAffordableSqft(development_totalSqFt, percentAffordable) + market_totalSqFt = totalMarketSqft(development_totalSqFt, percentMarketRate) + construction_expenses = totalConstructionExpense(development_totalSqFt, constructionCostPerSqFt) + affordable_rent = affordableRent(affordable_totalSqFt, affordableRentPerSqft) + market_rent = marketRent(market_totalSqFt, marketRentPerSqft) + total_rent_income = totalRentalIncome(affordable_rent, market_rent) + payment_output = annualFinancingPayment(construction_expenses, i, n) + profitability_output = profitability(total_rent_income, payment_output) + + print("######"*10) + print("Amount of percent affordable: " + str(percentAffordable) + "%") + print("Amount of market rate: {0}%".format(percentMarketRate)) + print("Amount of affordable -> {0}% | Amount of market rate -> {1}%".format(percentAffordable, percentMarketRate)) + print(development_totalSqFt) + print("######" * 10) + print("The profitability output of your development is: {0}".format(profitability_output)) + print("annual payments are: {0}" .format(payment_output)) + print(total_rent_income * 12) + +def totalSqft(): + #Python Collection + #{} or [] or () + return (studioSqFt * numberStudios) + (oneBedroomSqFt * numberOneBedrooms) + (twoBedroomSqFt * numberTwoBedrooms) + (threeBedroomSqFt * numberThreeBedrooms) + + +def numberOfUnits(): + return numberStudios + numberOneBedrooms + numberTwoBedrooms + numberThreeBedrooms + + +def totalAffordableSqft(total_sqft,percentAffordable): + return total_sqft * percentAffordable/100 + + +def totalMarketSqft(total_sqft,percentMarketRate): + return total_sqft * percentMarketRate/100 + + +def totalConstructionExpense(total_sqft, constructionCostPerSqFt): + return total_sqft * constructionCostPerSqFt + + +def annualFinancingPayment(construction_expenses, i, n): + return construction_expenses/(1 + pow((1 + i), -n) / i) + #annual financing payment for loan + principle + + +def affordableRent(affordable_sqft, affordableRentPerSqft): + return affordable_sqft * affordableRentPerSqft + + +def marketRent(market_sqft, marketRentPerSqft): + return market_sqft * marketRentPerSqft + + +def totalRentalIncome(affordable_rent, market_rent): + return affordable_rent + market_rent + + +def profitability(total_rental_income, payment_output): + return (total_rental_income * 12) - payment_output \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py b/Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py new file mode 100644 index 0000000..66a6486 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py @@ -0,0 +1,31 @@ +#Proceeds_Constants + +'''Residential Constants''' +res_avgMarketRateUnitSize = 900 +res_marketRateRent = 12000 +res_vacancyRate = .05 +res_approxunits = 94 +res_incomeExpenseEscalation = .02 +res_operationalExpenses = 6.50 +res_realEstateTaxes = 2.50 +res_replacementReserve = 1.00 +res_depreciation = -1545455 + +'''Commercial Constants''' +com_marketRateRent = 12000 +com_vacancyRate = .10 +com_operationalExpenses = 6.50 +com_realEstateTaxes = 2.50 +com_replacementReserve = 1.00 +com_depreciation = -1089744 + +'''Manufacturing Constants''' + +manu_marketRateRent = 12000 +manu_vacancyRate = .05 +manu_income = 100000 +manu_operationalExpenses = 3 +manu_realEstateTaxes = 1 +manu_replacementReserves = .50 +manu_Depreciation = 39 + diff --git a/Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py b/Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py new file mode 100644 index 0000000..093c937 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py @@ -0,0 +1,119 @@ + +import Starting_Assumptions as SA +import Proceeds_Constants as PC + + +def common_area_and_circulation (zoningFloorArea, netLossFactor): + return zoningFloorArea * netLossFactor + +resCommonAreaCirculation = common_area_and_circulation(SA.residentialZoningFloorArea, SA.netLossFactor) +comCommonAreaCirculation = common_area_and_circulation(SA.commercialZoningFloorArea, SA.netLossFactor) +manuCommonAreaCirculation = common_area_and_circulation(SA.manufacturingZoningFloorArea, SA.netLossFactor) + +print(resCommonAreaCirculation) +print(comCommonAreaCirculation) +print(manuCommonAreaCirculation) + + +def net_area (zoningFloorArea, common_area_and_circulation): + return zoningFloorArea - common_area_and_circulation + +resNetArea = net_area(SA.residentialZoningFloorArea, resCommonAreaCirculation) +comNetArea = net_area(SA.residentialZoningFloorArea, comCommonAreaCirculation) +manuNetArea = net_area(SA.residentialZoningFloorArea, manuCommonAreaCirculation) + +print(resNetArea) +print(comNetArea) +print(manuNetArea) + + +def approximate_units (resNetArea, avgmarketRateUnitSize): + return resNetArea / avgmarketRateUnitSize + +print(approximate_units) + + +def total_income (approxUnits, marketRateRent): + return approxUnits * marketRateRent + +resTotalIncome = total_income(PC.res_approxunits, PC.res_marketRateRent) +comTotalIncome = total_income(comNetArea, PC.com_marketRateRent) + +manuTotalIncome = SA.manufacturingZoningFloorArea + + +print(resTotalIncome) +print(comTotalIncome) +print(manuTotalIncome) + + +def total_vacancy (vacancyRate, total_income): + return vacancyRate * total_income + +resTotalVacancy = total_vacancy(PC.res_vacancyRate, resTotalIncome) +comTotalVacancy = total_vacancy(PC.com_vacancyRate, comTotalIncome) +manuTotalVacancy = total_vacancy(PC.manu_vacancyRate, manuTotalIncome) + +print(resTotalVacancy) +print(comTotalVacancy) +print(manuTotalVacancy) + + +def operational_expenses (operationalExpenses, net_area): + return operationalExpenses * net_area + +resOperationalExpenses = operational_expenses(PC.res_operationalExpenses, resNetArea) +comOperationalExpenses = operational_expenses(PC.com_operationalExpenses, comNetArea) +manuOperationalExpenses = operational_expenses(PC.manu_operationalExpenses, manuNetArea) + +print(resOperationalExpenses) +print(comOperationalExpenses) +print(manuOperationalExpenses) + + +def real_estate_taxes (realestateTaxes, net_area): + return realestateTaxes * net_area + +resRealEstateTaxes = real_estate_taxes(PC.res_realEstateTaxes, resNetArea) +comRealEstateTaxes = real_estate_taxes(PC.com_realEstateTaxes, comNetArea) +manuRealEstateTaxes = real_estate_taxes(PC.manu_realEstateTaxes, manuNetArea) + +print(resRealEstateTaxes) +print(comRealEstateTaxes) +print(manuRealEstateTaxes) + + +def replacement_reserve (zoningFloorArea, replacementReserve): + return zoningFloorArea * replacementReserve + +resReplacementReserve = replacement_reserve(SA.residentialZoningFloorArea, PC.res_replacementReserve) +comReplacementReserve = replacement_reserve(SA.commercialZoningFloorArea, PC.com_replacementReserve) +manuReplacementReserve = replacement_reserve(SA.manufacturingZoningFloorArea, PC.manu_replacementReserves) + +print(resReplacementReserve) +print(comReplacementReserve) +print(manuReplacementReserve) + + +def total_cost (net_area, devCost): + return (net_area * devCost) + +resTotalCost = replacement_reserve(resNetArea, SA.resDevCost) +comTotalCost = replacement_reserve(comNetArea, SA.comDevCost) +manuTotalCost = replacement_reserve(manuNetArea, SA.ManuDevCost) + +print (resTotalCost) +print(comTotalCost) +print(manuTotalCost) + + +def depreciation (total_cost, depreciation): + return (-1 * (total_cost / depreciation)) + +resDepreciation = replacement_reserve(resTotalCost, PC.res_depreciation) +comDepreciation = replacement_reserve(comTotalCost, PC.com_depreciation) +manuDepreciation = replacement_reserve(manuTotalCost, PC.manu_Depreciation) + +print(resDepreciation) +print(comDepreciation) +print(manuDepreciation) \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py b/Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py new file mode 100644 index 0000000..ec61c7e --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py @@ -0,0 +1,21 @@ +#Starting Assumptions Constants + +devTimeline = 11 +lotArea = 10375 +existingBuildingFloorArea = 0 +residentialFAR = 7.52 +commercialFAR = 1.00 +manufacturingFAR = 1.00 +residentialZoningFloorArea = 100000 +commercialZoningFloorArea = 100000 +manufacturingZoningFloorArea = 100000 +airRightsSqft = 0 +innacuracyFactor = .03 +inaccuracyFloorLoss = 9000 +netLossFactor = .15 + + +#Development Costs +resDevCost = 500 +comDevCost = 500 +ManuDevCost = 500 diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevCosts_CapitalStruc.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevCosts_CapitalStruc.cpython-310.pyc new file mode 100644 index 0000000..210177a Binary files /dev/null and b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevCosts_CapitalStruc.cpython-310.pyc differ diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevelopmentCostsInputs.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevelopmentCostsInputs.cpython-310.pyc new file mode 100644 index 0000000..a0bdbb3 Binary files /dev/null and b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevelopmentCostsInputs.cpython-310.pyc differ diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Manufacturing_Constants.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Manufacturing_Constants.cpython-310.pyc new file mode 100644 index 0000000..20883a5 Binary files /dev/null and b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Manufacturing_Constants.cpython-310.pyc differ diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/ProForma_ROI.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/ProForma_ROI.cpython-310.pyc new file mode 100644 index 0000000..8b0bcb1 Binary files /dev/null and b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/ProForma_ROI.cpython-310.pyc differ diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Proceeds_Constants.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Proceeds_Constants.cpython-310.pyc new file mode 100644 index 0000000..70790fc Binary files /dev/null and b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Proceeds_Constants.cpython-310.pyc differ diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Starting_Assumptions.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Starting_Assumptions.cpython-310.pyc new file mode 100644 index 0000000..fd9494c Binary files /dev/null and b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Starting_Assumptions.cpython-310.pyc differ diff --git a/Spring/Teams/Towers in the Soup/ProForma/main.py b/Spring/Teams/Towers in the Soup/ProForma/main.py new file mode 100644 index 0000000..25dac2b --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/main.py @@ -0,0 +1,9 @@ +import Projected_Proceeds +import Proceeds_Constants +import Starting_Assumptions +import DevelopmentCostsInputs +import DevelopmentCostsInputs + +if __name__ == "__main__": + +