code: def machado_et_al_2009_matrix(cvd_type, severity):
      
  
      assert 0 <= severity <= 100
  
      fraction = severity % 10
  
      low = int(severity - fraction)
      high = low + 10
      assert low <= severity <= high
  
      low_matrix = np.asarray(MACHADO_ET_AL_MATRICES[cvd_type][low])
      if severity == 100:
          # Don't try interpolating between 100 and 110, there is no 110...
          return low_matrix
      high_matrix = np.asarray(MACHADO_ET_AL_MATRICES[cvd_type][high])
      return ((1 - fraction / 10.0) * low_matrix
              + fraction / 10.0 * high_matrix)
docs: Retrieve a matrix for simulating anomalous color vision.
  
      :param cvd_type: One of "protanomaly", "deuteranomaly", or "tritanomaly".
      :param severity: A value between 0 and 100.
  
      :returns: A 3x3 CVD simulation matrix as computed by Machado et al
               (2009).
  
      These matrices were downloaded from:
  
        http://www.inf.ufrgs.br/~oliveira/pubs_files/CVD_Simulation/CVD_Simulation.html
  
      which is supplementary data from :cite:`Machado-CVD`.
  
      If severity is a multiple of 10, then simply returns the matrix from that
      webpage. For other severities, performs linear interpolation.