docs: def add_detection_pattern(self, m):
          """This method add the detection patterns to the QR code. This lets
          the scanner orient the pattern. It is required for all QR codes.
          The detection pattern consists of three boxes located at the upper
          left, upper right, and lower left corners of the matrix. Also, two
          special lines called the timing pattern is also necessary. Finally,
          a single black pixel is added just above the lower left black box.
          """
  
          #Draw outer black box
          for i in range(7):
              inv = -(i+1)
              for j in [0,6,-1,-7]:
                  m[j][i] = 1
                  m[i][j] = 1
                  m[inv][j] = 1
                  m[j][inv] = 1
  
          #Draw inner white box
          for i in range(1, 6):
              inv = -(i+1)
              for j in [1, 5, -2, -6]:
                  m[j][i] = 0
                  m[i][j] = 0
                  m[inv][j] = 0
                  m[j][inv] = 0
  
          #Draw inner black box
          for i in range(2, 5):
              for j in range(2, 5):
                  inv = -(i+1)
                  m[i][j] = 1
                  m[inv][j] = 1
                  m[j][inv] = 1
  
          #Draw white border
          for i in range(8):
              inv = -(i+1)
              for j in [7, -8]:
                  m[i][j] = 0
                  m[j][i] = 0
                  m[inv][j] = 0
                  m[j][inv] = 0
  
          #To keep the code short, it draws an extra box
          #in the lower right corner, this removes it.
          for i in range(-8, 0):
              for j in range(-8, 0):
                  m[i][j] = ' '
  
          #Add the timing pattern
          bit = itertools.cycle([1,0])
          for i in range(8, (len(m)-8)):
              b = next(bit)
              m[i][6] = b
              m[6][i] = b
  
          #Add the extra black pixel
          m[-8][8] = 1