docs: def load(self,cache_genotype=False,cache_phenotype=True):
          """load data file
          
          Args:
              cache_genotype:     load genotypes fully into memory (default: False)
              cache_phenotype:    load phentopyes fully intro memry (default: True)        
          """
          self.f = h5py.File(self.file_name,'r')
          self.pheno = self.f['phenotype']
          self.geno  = self.f['genotype']
          #TODO: load all row and column headers for genotype and phenotype
  
          #parse out thse we alwasy need for convenience
          self.genoM = self.geno['matrix']
  
          self.phenoM = self.pheno['matrix']
          self.sample_ID = self.geno['row_header']['sample_ID'][:]
          self.genoChrom = self.geno['col_header']['chrom'][:]
          self.genoPos   = self.geno['col_header']['pos'][:]
          if 'pos_cum' in list(self.geno['col_header'].keys()):
              self.genoPos_cum   = self.geno['col_header']['pos_cum'][:]
          else:
              self.genoPos_cum = None
          self.phenotype_ID = self.pheno['col_header']['phenotype_ID'][:]
  
  
          #cache?
          if cache_genotype:
              self.genoM = self.genoM[:]
          if cache_phenotype:
              self.phenoM = self.phenoM[:]
      
          # Additional pheno col header
          headers = list(self.pheno['col_header'].keys())
          if 'gene_ID' in headers:
              self.eqtl = True
              self.geneID = self.pheno['col_header']['gene_ID'][:]
              self.gene_pos = SP.array([self.pheno['col_header']['gene_chrom'][:],self.pheno['col_header']['gene_start'][:],self.pheno['col_header']['gene_end']],dtype='int').T
              self.geneIDs= list(set(self.geneID))
          else:
              self.eqtl = False
          if 'environment' in headers:
              self.E  = self.pheno['col_header/environment'][:]
              self.Es = list(set(self.E))
          else:
              self.E = None
  
          #dimensions
          self.N = self.genoM.shape[0]
          self.S = self.genoM.shape[1]
          self.P = self.phenoM.shape[1]
          assert (self.genoM.shape[0]==self.phenoM.shape[0]), 'dimension missmatch'