diff --git a/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py b/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py
index cde275e..7a159ba 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py
+++ b/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py
@@ -1,5 +1,5 @@
 """
-Copyright 2016 Open Networking Foundation (ONF)
+Copyright 2016 Open Networking Foundation ( ONF )
 
 Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
 the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
@@ -8,7 +8,7 @@
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 2 of the License, or
-    (at your option) any later version.
+    ( at your option ) any later version.
 
     TestON is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,29 +18,29 @@
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
-
-'''
+"""
     Wrapper function for SCPFswitchLat test
     Assign switch and capture openflow package
     remove switch and caputer openflow package
     calculate latency
-'''
+"""
 import time
 import json
 
+
 def getTimestampFromLog( index, searchTerm ):
-    '''
+    """
     Get timestamp value of the search term from log.
     Args:
         index: the index of cli
         searchTerm: the key term of timestamp
 
-    '''
+    """
     lines = main.Cluster.active( index ).CLI.logSearch( mode='last', searchTerm=searchTerm )
     try:
-        assert lines != None
-        logString = lines[ len ( lines ) - 1 ]
-        #get the target value
+        assert lines is not None
+        logString = lines[ len( lines ) - 1 ]
+        # get the target value
         line = logString.split( "time = " )
         key = line[ 1 ].split( " " )
         return int( key[ 0 ] )
@@ -51,13 +51,14 @@
         main.log.warn( "Search Term Not Found" )
         return 0
 
+
 def processPackage( package ):
-    '''
+    """
     split package information to dictionary
     Args:
         package: Package String
 
-    '''
+    """
     pacakge = package.split( " " )
     dic = {}
     for s in pacakge:
@@ -68,28 +69,30 @@
             continue
     return dic
 
+
 def findSeqBySeqAck( seq, packageList ):
-    '''
+    """
     Find specific Seq of package in packageList
     Args:
         seq: seq from last TCP package
         packageList: find package in packageList
 
-    '''
+    """
     for l in packageList:
         temp = processPackage( l )
         tA = temp[ 'Ack' ]
         if int( seq ) + 1 == int( tA ):
             return temp[ 'Seq' ]
 
+
 def arrangeTsharkFile( switchStatus, keyTerm ):
-    '''
+    """
     Arrange different tshark messeage from overall file to different specific files
     Args:
         switchStatus: switch up or down
         keyTerm: A dictionary that store the path name as value and the searchTerm as key
 
-    '''
+    """
     with open( main.tsharkResultPath[ switchStatus ][ 'ALL' ], 'r' ) as resultFile:
         resultText = resultFile.readlines()
         resultFile.close()
@@ -102,13 +105,14 @@
                     outputfile.write( line )
                     outputfile.close()
 
+
 def checkResult( result1, result2, result3 ):
-    '''
+    """
     Check if the inputs meet the requirement
     Returns:
             1 means the results are right, 0 means the results are wrong
 
-    '''
+    """
     result = check( result1 ) + check( result2 ) + check( result3 )
     if result < 3:
         # if any result is wrong, increase the main wrong number
@@ -118,32 +122,34 @@
         return 0
     return 1
 
+
 def check( result ):
-    '''
+    """
     Check the single input.
     Returns:
             1 means the input is good, 0 means the input is wrong
 
-    '''
+    """
     if result < int( main.resultRange[ 'Min' ] ) or result > int( main.resultRange[ 'Max' ] ):
         main.log.debug( str( result ) + " is not meet the requirement" )
         return 0
     return 1
 
+
 def checkTotalWrongNum():
-    '''
+    """
     Check if the total wrong number is bigger than the max wrong number. If it is, then exit the
     test.
 
-    '''
+    """
     # if there are too many wrongs in this test, then exit
-    if main.wrong['totalWrong'] > main.maxWrong:
+    if main.wrong[ 'totalWrong' ] > main.maxWrong:
         main.log.error( "The total wrong number exceeds %d, test terminated" % main.maxWrong )
         main.cleanAndExit()
 
-def captureOfPack( main, deviceName, ofPack, switchStatus, resultDict, warmup ):
-    '''
 
+def captureOfPack( main, deviceName, ofPack, switchStatus, resultDict, warmup ):
+    """
     Args:
         main: TestON class
         deviceName: device name
@@ -152,7 +158,7 @@
         resultDict: dictionary to contain result
         warmup: warm up boolean
 
-    '''
+    """
     main.log.debug( "TOTAL WRONG: " + str( main.wrong ) )
     for d in ofPack[ switchStatus ]:
         main.log.info( "Clean up Tshark" )
@@ -168,14 +174,14 @@
         cleanTerm = ofPack[ switchStatus ][ d ].replace( '\\', '' )
         keyTerm[ cleanTerm ] = d
     # Delete the last '|'
-    grepString = grepString[:-1]
+    grepString = grepString[ :-1 ]
     # open tshark
     main.log.info( "starting tshark capture" )
     main.ONOSbench.tsharkGrep( grepString, main.tsharkResultPath[ switchStatus ][ 'ALL' ], grepOptions='-E' )
     if switchStatus == 'up':
         # if up, assign switch to controller
         time.sleep( main.measurementSleep )
-        main.log.info( 'Assigning {} to controller'.format( deviceName ))
+        main.log.info( 'Assigning {} to controller'.format( deviceName ) )
         main.Mininet1.assignSwController( sw=deviceName, ip=main.Cluster.active( 0 ).ipAddress )
         time.sleep( main.measurementSleep )
     if switchStatus == 'down':
@@ -208,8 +214,8 @@
                 main.log.info( "Capture result:" + resultText )
                 resultText = resultText.strip()
                 resultText = resultText.split( " " )
-                if len(resultText) > 1:
-                    tempResultDict[d]= int( ( float( resultText[ 1 ] ) * 1000 ) )
+                if len( resultText ) > 1:
+                    tempResultDict[ d ] = int( ( float( resultText[ 1 ] ) * 1000 ) )
                 resultFile.close()
     elif switchStatus == 'down':
         # if state is down, we should capture Fin/Ack and ACK package
@@ -220,7 +226,7 @@
             resultFile.close()
         FinAckSeq = processPackage( FinAckText )[ 'Seq' ]
         FinAckOFseq = findSeqBySeqAck( FinAckSeq, resultText )
-        if FinAckOFseq == None:
+        if FinAckOFseq is None:
             main.log.warn( "Tshark Result was incorrect!" )
             main.log.warn( resultText )
             main.wrong[ 'TsharkValueIncorrect' ] += 1
@@ -269,7 +275,7 @@
                 return
             if not warmup:
                 resultDict[ switchStatus ][ d ][ 'T_F' ].append( T_Ftemp )
-                resultDict[ switchStatus ][ d ][ 'F_R' ].append( F_Rtemp  )
+                resultDict[ switchStatus ][ d ][ 'F_R' ].append( F_Rtemp )
                 resultDict[ switchStatus ][ d ][ 'RQ_RR' ].append( RQ_RRtemp )
 
             main.log.info( "{} TCP to Feature: {}".format( d, str( T_Ftemp ) ) )
@@ -284,7 +290,7 @@
             # get onos metrics timestamps
             try:
                 response = json.loads( main.Cluster.active( i - 1 ).CLI.topologyEventsMetrics() )
-                DeviceTime = getTimestampFromLog( i - 1, searchTerm=main.searchTerm[switchStatus] )
+                DeviceTime = getTimestampFromLog( i - 1, searchTerm=main.searchTerm[ switchStatus ] )
                 main.log.info( "ONOS{} device Event timestamp: {}".format( i, "%.2f" % DeviceTime ) )
                 GraphTime = int( response.get( "topologyGraphEventTimestamp" ).get( "value" ) )
                 main.log.info( "ONOS{} Graph Event timestamp: {}".format( i, GraphTime ) )
@@ -331,14 +337,14 @@
                     checkTotalWrongNum()
                     break
                 if not warmup and check == 1:
-                    resultDict[ switchStatus ][ 'node' + str( i )][ 'RR_D' ].append( RR_Dtemp )
-                    resultDict[ switchStatus ][ 'node' + str( i )][ 'D_G' ].append( D_Gtemp )
-                    resultDict[ switchStatus ][ 'node' + str( i )][ 'E_E' ].append( E_Etemp )
+                    resultDict[ switchStatus ][ 'node' + str( i ) ][ 'RR_D' ].append( RR_Dtemp )
+                    resultDict[ switchStatus ][ 'node' + str( i ) ][ 'D_G' ].append( D_Gtemp )
+                    resultDict[ switchStatus ][ 'node' + str( i ) ][ 'E_E' ].append( E_Etemp )
             else:
-                main.wrong['checkResultIncorrect'] += 1
+                main.wrong[ 'checkResultIncorrect' ] += 1
                 main.wrong[ 'totalWrong' ] += 1
                 checkTotalWrongNum()
-                main.log.debug("Skip this iteration due to the None Devicetime")
+                main.log.debug( "Skip this iteration due to the None Devicetime" )
 
     if switchStatus == "down":
         # down Latency
@@ -389,7 +395,7 @@
                     check = checkResult( A_Dtemp, D_Gtemp, E_Etemp )
                     if check == 1:
                         main.log.info( "ACK to device: {}".format( A_Dtemp ) )
-                        main.log.info( "Device to Graph: {}".format( D_Gtemp )  )
+                        main.log.info( "Device to Graph: {}".format( D_Gtemp ) )
                         main.log.info( "End to End: {}".format( E_Etemp ) )
                         main.log.info( "================================================" )
                 except KeyError:
@@ -417,8 +423,7 @@
                     resultDict[ switchStatus ][ 'node' + str( i ) ][ 'E_E' ].append( E_Etemp )
 
             else:
-                main.wrong['checkResultIncorrect'] += 1
-                main.wrong['totalWrong'] += 1
+                main.wrong[ 'checkResultIncorrect' ] += 1
+                main.wrong[ 'totalWrong' ] += 1
                 checkTotalWrongNum()
-                main.log.debug("Skip this iteration due to the None Devicetime")
-
+                main.log.debug( "Skip this iteration due to the None Devicetime" )
