code: public void setCacheMode(CacheMode cacheMode)
      {
          if(cacheMode == null)
          {
              fullCache = null;
              partialCache = null;
              availableRow = null;
              return;
          }
          this.cacheMode = cacheMode;
  
          if(vecs != null)
              accelCache = kernel.getAccelerationCache(vecs);
          evalCount = 0;
          cacheEvictions = 0;
  
          final int N = vecs == null ? 0 : vecs.size();
  
          if(cacheMode == CacheMode.FULL && vecs != null)
          {
              fullCache = new double[N][];
              for(int i = 0; i < N; i++)
              {
                  fullCache[i] = new double[N-i];
                  Arrays.fill(fullCache[i], Double.NaN);
              }
  
              //Switched to lazy init, hence NaN above
  //            for(int i = 0; i < N; i++)
  //                for(int j = i; j < N; j++)
  //                    fullCache[i][j-i] = k(i, j);
          }
          else if(cacheMode == CacheMode.ROWS && vecs != null)
          {
              partialCache = new ConcurrentCacheLRU<Integer, double[]>(cacheConst);
          }
          else if(cacheMode == CacheMode.NONE)
              fullCache = null;
      }
docs: Calling this sets the method of caching that will be used. <br>
  This is called called by the implementing class to initialize and clear
  the caches. Calling this with the current cache mode will initialize the
  caches. Once training is complete, call again with {@code null} to
  deinitialize the caches.
  
  @param cacheMode