swmmio Core Objects

class swmmio.core.Model(in_file_path, crs=None, include_rpt=True)[source]

Bases: object

Class representing a complete SWMM model incorporating its INP and RPT files and data

initialize a swmmio.Model object by pointing it to a directory containing a single INP (and optionally an RPT file with matching filename) or by pointing it directly to an .inp file.

>>> # initialize a model object by passing the path to an INP file
>>> from swmmio.tests.data import MODEL_FULL_FEATURES_XY
>>> m = Model(MODEL_FULL_FEATURES_XY)
>>> # access sections of inp via the Model.inp object
>>> m.inp.junctions 
      InvertElev  MaxDepth  InitDepth  SurchargeDepth  PondedArea
Name
J3         6.547        15          0               0           0
1         17.000         0          0               0           0
2         17.000         0          0               0           0
3         16.500         0          0               0           0
4         16.000         0          0               0           0
5         15.000         0          0               0           0
J2        13.000        15          0               0           0
>>> m.inp.coordinates 
                X            Y
Name
J3    2748073.306  1117746.087
1     2746913.127  1118559.809
2     2747728.148  1118449.164
3     2747242.131  1118656.381
4     2747345.325  1118499.807
5     2747386.555  1118362.817
J2    2747514.212  1118016.207
J4    2748515.571  1117763.466
J1    2747402.678  1118092.704

Access composite sections of the model that merge together sensible sections of the inp into one dataframe. The Model.links.dataframe section, for example, returns a dataframe containing PUMPS, CONDUITS, WEIRS, and ORIFICES joined with XSECTIONS, COORDINATES and the Link Flow Summary (if there is an rpt file found).

>>> m.links.dataframe[['InletNode', 'OutletNode', 'Length', 'Roughness', 'Geom1']] 
      InletNode OutletNode  Length  Roughness  Geom1
Name
C1:C2        J1         J2  244.63       0.01    1.0
C2.1         J2         J3  666.00       0.01    1.0
1:4           1          4  400.00       0.01    1.0
4:5           4          5  400.00       0.01    1.0
5:J1          5         J1  400.00       0.01    1.0
3:4           3          4  400.00       0.01    1.0
2:5           2          5  400.00       0.01    1.0
C3           J3         J4     NaN        NaN    5.0
C2           J2         J3     NaN        NaN    NaN
>>> # return all conduits (drop coords for clarity)
>>> from swmmio.examples import jersey
>>> jersey.nodes.dataframe[['InvertElev', 'MaxDepth', 'InitDepth', 'SurchargeDepth', 'PondedArea']] 
      InvertElev  MaxDepth  InitDepth  SurchargeDepth  PondedArea
Name
J3         6.547      15.0        0.0             0.0         0.0
1         17.000       0.0        0.0             0.0         0.0
2         17.000       0.0        0.0             0.0         0.0
3         16.500       0.0        0.0             0.0         0.0
4         16.000       0.0        0.0             0.0         0.0
5         15.000       0.0        0.0             0.0         0.0
J2        13.000      15.0        0.0             0.0         0.0
J4         0.000       NaN        NaN             NaN         NaN
J1        13.392       NaN        0.0             NaN         0.0
conduits()[source]

collect all useful and available data related model conduits and organize in one dataframe.

export_to_shapefile(shpdir, prj=None)[source]

export the model data into a shapefile. element_type dictates which type of data will be included.

default projection is PA State Plane - untested on other cases

Create a DataFrame containing all link objects in the model including conduits, pumps, weirs, and orifices.

Returns

dataframe containing all link objects in the model

Return type

pd.DataFrame

>>> from swmmio.examples import philly
>>> philly.links.dataframe.loc['J1-025.1']  
InletNode                                                       J1-025
OutletNode                                                      J1-026
Length                                                      309.456216
Roughness                                                        0.014
InOffset                                                             0
OutOffset                                                          0.0
InitFlow                                                             0
MaxFlow                                                              0
Shape                                                         CIRCULAR
Geom1                                                             1.25
Geom2                                                                0
Geom3                                                                0
Geom4                                                                0
Barrels                                                              1
coords        [(2746229.223, 1118867.764), (2746461.473, 1118663.257)]
Name: J1-025.1, dtype: object
property network

Networkx MultiDiGraph representation of the model

Returns

Networkx MultiDiGraph representation of model

Return type

networkx.MultiDiGraph

property nodes

Collect all useful and available data related model nodes and organize in one dataframe.

Returns

dataframe containing all node objects in the model

Return type

pd.DataFrame

>>> from swmmio.examples import jersey
>>> jersey.nodes.dataframe['InvertElev']
Name
J3     6.547
1     17.000
2     17.000
3     16.500
4     16.000
5     15.000
J2    13.000
J4     0.000
J1    13.392
Name: InvertElev, dtype: float64
property orifices

collect all useful and available data related model orifices and organize in one dataframe.

property pumps

Collect all useful and available data related model pumps and organize in one dataframe.

Returns

dataframe containing all pumps objects in the model

Return type

pd.DataFrame

>>> import swmmio
>>> from swmmio.tests.data import MODEL_FULL_FEATURES_XY
>>> model = swmmio.Model(MODEL_FULL_FEATURES_XY)
>>> pumps = model.pumps.dataframe
>>> pumps[['PumpCurve', 'InitStatus']]  
     PumpCurve InitStatus
Name
C2    P1_Curve         ON
rpt_is_valid(verbose=False)[source]

Return true if the .rpt file exists and has a revision date more recent than the .inp file. If the inp has an modified date later than the rpt, assume that the rpt should be regenerated

property subcatchments

collect all useful and available data related subcatchments and organize in one dataframe.

to_crs(*args, **kwargs)[source]

Convert coordinate reference system of the model coordinates

Parameters

target_crs – coordinate reference system to reproject

Returns

True

>>> import swmmio
>>> m = swmmio.Model(MODEL_FULL_FEATURES_XY, crs="EPSG:2272")
>>> m.to_crs("EPSG:4326") # convert to WGS84 web mercator
>>> m.inp.coordinates.round(5)  
             X         Y
Name
J3   -74.86642  42.36596
1    -74.87061  42.36829
2    -74.86762  42.36792
3    -74.86939  42.36853
4    -74.86902  42.36809
5    -74.86889  42.36771
J2   -74.86846  42.36675
J4   -74.86479  42.36597
J1   -74.86886  42.36697
>>> m.inp.vertices.round(5)  
              X         Y
Name
C1:C2 -74.86870  42.36683
C2.1  -74.86803  42.36627
C2.1  -74.86731  42.36597
to_geojson(target_path=None)[source]

Return a GeoJSON representation of the entire model :param target_path: target path of geojson (optional) :return: GeoJSON representation of model

property weirs

collect all useful and available data related model weirs and organize in one dataframe.

class swmmio.core.inp(file_path)[source]

Bases: swmmio.core.SWMMIOFile

property buildup

Get/set buildup section of the INP file.

Examples:

>>> from swmmio.examples import walnut
>>> walnut.inp.buildup[['Pollutant', 'Function', 'Normalizer']] 
            Pollutant Function Normalizer
LandUse
Residential      Lead     NONE       AREA
Residential       TSS      SAT       AREA
Undeveloped      Lead     NONE       AREA
Undeveloped       TSS      SAT       AREA
property conduits

Get/set conduits section of the INP file.

Returns

Conduits section of the INP file

Return type

pandas.DataFrame

Examples:

>>> import swmmio
>>> from swmmio.tests.data import MODEL_FULL_FEATURES__NET_PATH
>>> model = swmmio.Model(MODEL_FULL_FEATURES__NET_PATH)
>>> model.inp.conduits[['InletNode', 'OutletNode', 'Length', 'Roughness']] 
      InletNode OutletNode  Length  Roughness
Name
C1:C2        J1         J2  244.63      0.01
C2.1         J2         J3  666.00      0.01
1             1          4  400.00      0.01
2             4          5  400.00      0.01
3             5         J1  400.00      0.01
4             3          4  400.00      0.01
5             2          5  400.00      0.01
property coordinates

Get/set coordinates section of model :return: dataframe of model coordinates

property coverages

Get/set coverages section of the INP file.

Examples:

>>> from swmmio.examples import walnut
>>> walnut.inp.coverages 
                  LandUse  Percent
Subcatchment
1             Residential    100.0
2             Residential     50.0
2             Undeveloped     50.0
3             Residential    100.0
4             Residential     50.0
4             Undeveloped     50.0
5             Residential    100.0
6             Undeveloped    100.0
7             Undeveloped    100.0
8             Undeveloped    100.0
property curves

get/set curves section of model :return: multi-index dataframe of model curves

property dwf

Get/set DWF section of model :return: dataframe of model DWF section

property evaporation

get/set evaporation section of model

Returns

dataframe of evaporation section in inp file

Examples:

>>> from swmmio.examples import walnut
>>> walnut.inp.evaporation 
         Value
Key
CONSTANT   0.0
DRY_ONLY    NO
property files

Get/set files section of the INP file.

Returns

files section of the INP file

Return type

pandas.DataFrame

property headers

Return all headers and associated column names found in the INP file.

property hydrographs

Get/set hydrographs section of the INP file.

Examples:

>>> from swmmio.examples import walnut
>>> walnut.inp.hydrographs 
            RainGage/Month
Hydrograph
Hydrograph1            TS1
property infiltration

Get/set infiltration section of the INP file.

>>> import swmmio
>>> from swmmio.tests.data import MODEL_FULL_FEATURES__NET_PATH
>>> m = swmmio.Model(MODEL_FULL_FEATURES__NET_PATH)
>>> m.inp.infiltration  
              MaxRate  MinRate  Decay  DryTime  MaxInfil
Subcatchment
S1                3.0      0.5      4        7         0
S2                3.0      0.5      4        7         0
S3                3.0      0.5      4        7         0
S4                3.0      0.5      4        7         0
property inflows

Get/set inflows section of model

Returns

dataframe of nodes with inflows

>>> from swmmio.examples import jersey
>>> jersey.inp.inflows[['Constituent', 'Mfactor', 'Baseline']]  
     Constituent  Mfactor  Baseline
Node
J3          Flow      1.0         1
J2          FLOW      1.0         1
J1          FLOW      1.0         1
property junctions

Get/set junctions section of the INP file.

Returns

junctions section of the INP file

Return type

pandas.DataFrame

Examples:

>>> import swmmio
>>> from swmmio.tests.data import MODEL_FULL_FEATURES__NET_PATH
>>> model = swmmio.Model(MODEL_FULL_FEATURES__NET_PATH)
>>> model.inp.junctions 
      InvertElev  MaxDepth  InitDepth  SurchargeDepth  PondedArea
Name
J3         6.547        15          0               0           0
1         17.000         0          0               0           0
2         17.000         0          0               0           0
3         16.500         0          0               0           0
4         16.000         0          0               0           0
5         15.000         0          0               0           0
J2        13.000        15          0               0           0
property landuses

Get/set landuses section of the INP file.

Examples:

>>> from swmmio.examples import walnut
>>> walnut.inp.landuses 
             CleaningInterval  FractionAvailable  LastCleaned
Name
Residential                 0                  0            0
Undeveloped                 0                  0            0
property loadings

Get/set loadings section of the INP file.

property options

Get/set options section of the INP file.

Returns

options section of the INP file

Return type

pandas.DataFrame

>>> import swmmio
>>> from swmmio.tests.data import MODEL_FULL_FEATURES_XY
>>> model = swmmio.Model(MODEL_FULL_FEATURES_XY)
>>> model.inp.options.loc['INFILTRATION']
Value    HORTON
Name: INFILTRATION, dtype: object
>>> model.inp.headers['[INFILTRATION]']
['Subcatchment', 'MaxRate', 'MinRate', 'Decay', 'DryTime', 'MaxInfil']
>>> model.inp.options.loc['INFILTRATION', 'Value'] = 'GREEN_AMPT'
>>> model.inp.headers['[INFILTRATION]']
['Subcatchment', 'Suction', 'HydCon', 'IMDmax', 'Param4', 'Param5']
property orifices

Get/set orifices section of the INP file.

property outfalls

Get/set outfalls section of the INP file.

Returns

outfalls section of the INP file

Return type

pandas.DataFrame

Examples:

>>> import swmmio
>>> from swmmio.tests.data import MODEL_FULL_FEATURES__NET_PATH
>>> model = swmmio.Model(MODEL_FULL_FEATURES__NET_PATH)
>>> model.inp.outfalls  
      InvertElev OutfallType StageOrTimeseries
Name
J4             0        FREE                NO
property pollutants

get/set pollutants section of model

Returns

dataframe of pollutants section in inp file

Examples: The walnut example model contains two entries in the POLLUTANTS section, one of which is TSS. Below we show how to retrieve this information, by accessing the TSS index of the pollutants dataframe:

>>> from swmmio.examples import walnut
>>> walnut.inp.pollutants.loc['TSS'] 
MassUnits           MG/L
RainConcen           0.0
GWConcen             0.0
I&IConcen              0
DecayCoeff           0.0
SnowOnly              NO
CoPollutName           *
CoPollutFraction     0.0
DWFConcen              0
InitConcen             0
Name: TSS, dtype: object
property polygons

get/set polygons section of model :return: dataframe of model coordinates

property pumps

Get/set pumps section of the INP file.

property raingages

get/set raingages section of model

Returns

dataframe of raingages in the model

Examples:

>>> from swmmio.examples import philly
>>> philly.inp.raingages 
       RainType TimeIntrvl  SnowCatch  DataSource DataSourceName
Name
RG1   INTENSITY       1:00        1.0  TIMESERIES   design-storm
property rdii

Get/set RDII section of the INP file.

Examples:

>>> from swmmio.examples import walnut
>>> walnut.inp.rdii 
     UnitHydrograph  SewerArea
Node
13      Hydrograph1  58.944186
14      Hydrograph1  58.944186
property report

Get/set report section of the INP file.

Returns

report section of the INP file

Return type

pandas.DataFrame

>>> from swmmio.examples import jersey
>>> jersey.inp.report  
              Status
Param
INPUT            YES
CONTROLS         YES
SUBCATCHMENTS   NONE
NODES            ALL
LINKS           NONE
save(target_path=None)[source]

Save the inp file to disk. File will be overwritten unless a target_path is provided

Parameters

target_path – optional path to new inp file

Returns

None

>>> from swmmio.examples import philly
>>> philly.inp.save('copy-of-philly.inp')
property storage

Get/set storage section of the INP file.

Returns

storage section of the INP file

Return type

pandas.DataFrame

Examples:

property subareas

Get/set subareas section of the INP file.

property subcatchments

Get/set subcatchments section of the INP file.

Returns

subcatchments section of the INP file

Return type

pandas.DataFrame

Examples:

property tags

Get/set tags section of the INP file.

property timeseries

get/set timeseries section of model :return: multi-index dataframe of model curves

trim_to_nodes(node_ids)[source]
validate()[source]

Detect and remove invalid model elements

Returns

None

property vertices

get/set vertices section of model :return: dataframe of model coordinates

property washoff

Get/set washoff section of the INP file.

Examples:

>>> from swmmio.examples import walnut
>>> walnut.inp.washoff[['Pollutant', 'Function']] 
            Pollutant Function
LandUse
Residential      Lead      EMC
Residential       TSS      EXP
Undeveloped      Lead      EMC
Undeveloped       TSS      EXP
property weirs

Get/set weirs section of the INP file.

property xsections

Get/set pumps section of the INP file.

class swmmio.core.rpt(filePath)[source]

Bases: swmmio.core.SWMMIOFile

An accessible SWMM .rpt object

>>> from swmmio.tests.data import RPT_FULL_FEATURES
>>> report = rpt(RPT_FULL_FEATURES)
>>> report.link_flow_summary.loc['C1:C2']
Type        CONDUIT
MaxQ           2.45
MaxDay            0
MaxHr         10:19
MaxV           6.23
MaxQPerc       1.32
MaxDPerc        0.5
Name: C1:C2, dtype: object
property cross_section_summary

Return values for the Cross Section Summary description

property headers

Return all section headers and associated column names found in the RPT file.

Return values for the Link Flow Summary description

Return values for the Link Results description

Return values for the Link Summary description

property node_depth_summary

Return values for the Node Depth Summary description

property node_flooding_summary

Return values for the Node Flooding Summary description

property node_inflow_summary

Return values for the Node Inflow Summary description

property node_results

Return values for the Node Results description

property node_summary

Return values for the Node Summary description

property node_surcharge_summary

Return values for the Node Surcharge Summary description

property storage_volume_summary

Return values for the Storage Volume Summary description

property subcatchment_results

Return values for the Subcatchment Results description

property subcatchment_runoff_summary

Return values for the Subcatchment Runoff Summary description

property subcatchment_summary

Return values for the Subcatchment Summary description