cleaned the code a bit: put the method in utils.py
authorRami Rauch <rrauch@stanford.edu>
Thu, 28 Aug 2008 21:22:02 +0000 (21:22 +0000)
committerRami Rauch <rrauch@stanford.edu>
Thu, 28 Aug 2008 21:22:02 +0000 (21:22 +0000)
htswfrontend/htswfrontend/htsw_reports/models.py
htswfrontend/htswfrontend/htsw_reports/utils.py [new file with mode: 0644]

index cad61b42852b8015ffda4f0cabe5da8ef700277a..8554688d90dbef2d38f1e6d0e4a9803909d526be 100644 (file)
@@ -6,6 +6,7 @@ from htswfrontend.fctracker.models import *
 from htswfrontend.analys_track.models import *
 from htswfrontend.exp_track.models import *
 from string import *
+from htswfrontend.htsw_reports.utils import *
 import re
 ##from p1 import LibInfo
 from libinfopar import *
@@ -37,74 +38,7 @@ class ProgressReport(models.Model):
     return '%s<br/>%s' % (self.submitted_to_NCBI,varText)
   submit_to_NCBI.allow_tags = True
 
-  #REPS = ((1,1),(2,2),(3,3))
-  #replicate = models.PositiveSmallIntegerField(choices=REPS,verbose_name='Replicate Number')   
-  
-  ## -- Utility functions
-  def unique(self,s):
-    """Return a list of the elements in s, but without duplicates.
-    For example, unique([1,2,3,1,2,3]) is some permutation of [1,2,3],
-    unique("abcabc") some permutation of ["a", "b", "c"], and
-    unique(([1, 2], [2, 3], [1, 2])) some permutation of
-    [[2, 3], [1, 2]].
-    For best speed, all sequence elements should be hashable.  Then
-    unique() will usually work in linear time.
-    If not possible, the sequence elements should enjoy a total
-    ordering, and if list(s).sort() doesn't raise TypeError it's
-    assumed that they do enjoy a total ordering.  Then unique() will
-    usually work in O(N*log2(N)) time.
-    If that's not possible either, the sequence elements must support
-    equality-testing.  Then unique() will usually work in quadratic
-    time.
-    """
-
-    n = len(s)
-    if n == 0:
-        return []
-
-    # Try using a dict first, as that's the fastest and will usually
-    # work.  If it doesn't work, it will usually fail quickly, so it
-    # usually doesn't cost much to *try* it.  It requires that all the
-    # sequence elements be hashable, and support equality comparison.
-    u = {}
-    try:
-        for x in s:
-            u[x] = 1
-    except TypeError:
-        del u  # move on to the next method
-    else:
-        return u.keys()
-
-    # We can't hash all the elements.  Second fastest is to sort,
-    # which brings the equal elements together; then duplicates are
-    # easy to weed out in a single pass.
-    # NOTE:  Python's list.sort() was designed to be efficient in the
-    # presence of many duplicate elements.  This isn't true of all
-    # sort functions in all languages or libraries, so this approach
-    # is more effective in Python than it may be elsewhere.
-    try:
-        t = list(s)
-        t.sort()
-    except TypeError:
-        del t  # move on to the next method
-    else:
-        assert n > 0
-        last = t[0]
-        lasti = i = 1
-        while i < n:
-            if t[i] != last:
-                t[lasti] = last = t[i]
-                lasti += 1
-            i += 1
-        return t[:lasti]
-
-    # Brute force is all that's left.
-    u = []
-    for x in s:
-        if x not in u:
-            u.append(x)
-    return u
-
+  ## -- Utility functions <-- This method was transfered to untils.py
 
   ## --- LIBARAY PREPARATION SECTION 
   def getLibIds(self):
@@ -115,7 +49,7 @@ class ProgressReport(models.Model):
         arLibs.append(t.subject1.library_id)
       if t.subject2 is not None:
         arLibs.append(t.subject2.library_id)
-    arLibs = self.unique(arLibs)
+    arLibs = unique(arLibs)
     return arLibs #.sort()
 
   def getFCInfo(self,libid):   ## This is the haviest function 
@@ -179,7 +113,7 @@ class ProgressReport(models.Model):
         arRows.append('<li>'+rec.antibody.antibodies+' for <b>'+rec.antibody.antigene+'</b> (src:'+rec.antibody.source+', cat:'+rec.antibody.catalog+')</li>')
       except ObjectDoesNotExist:
         tstr += ""
-    tstr += "".join(self.unique(arRows))+'</ul>'
+    tstr += "".join(unique(arRows))+'</ul>'
     return tstr
   ab_batch.allow_tags = True
 
@@ -193,7 +127,7 @@ class ProgressReport(models.Model):
         arRows.append('<li><b>'+rec.cell_line.cellline_name+'</b> ('+rec.condition.condition_name+')</li>')
       except ObjectDoesNotExist:
         tstr += ""                                                                                                                               
-    tstr += "".join(self.unique(arRows))+'</ul>'
+    tstr += "".join(unique(arRows))+'</ul>'
     return tstr
   cell_line.allow_tags = True
 
@@ -208,7 +142,7 @@ class ProgressReport(models.Model):
         arRows.append('<li><b>'+rec.condition.condition_name+'</b></li>')
       except ObjectDoesNotExist:
         tstr += ""
-    tstr += "".join(self.unique(arRows))+'</ul>'
+    tstr += "".join(unique(arRows))+'</ul>'
     return tstr
   cell_harvest_batch.allow_tags = True
 
@@ -239,7 +173,7 @@ class ProgressReport(models.Model):
         arRows.append('<li><b>'+rec.library_id+'</b>: '+rec.library_name+'.<br/>Made By: '+rec.made_by+', On: '+ rec.creation_date.__str__()+'</li>')
       except ObjectDoesNotExist:
         tstr += ""
-    tstr += "".join(self.unique(arRows))+'</ul></div>'
+    tstr += "".join(unique(arRows))+'</ul></div>'
     return tstr
   library.allow_tags = True
 
@@ -300,3 +234,5 @@ class ProgressReport(models.Model):
     list_display = ('Study','ab_batch','cell_line','library','sequencing','aligned_reads','QPCR','submit_to_DCC','submit_to_NCBI','interactome_complete')
     ## list_filter = ('interactome_complete')
     
+
+#############################################
diff --git a/htswfrontend/htswfrontend/htsw_reports/utils.py b/htswfrontend/htswfrontend/htsw_reports/utils.py
new file mode 100644 (file)
index 0000000..7b2d1b8
--- /dev/null
@@ -0,0 +1,61 @@
+def unique(s):
+  """Return a list of the elements in s, but without duplicates.                                                                                                                                                                                             
+  For example, unique([1,2,3,1,2,3]) is some permutation of [1,2,3],                                                                                                                                                                                         
+  unique("abcabc") some permutation of ["a", "b", "c"], and                                                                                                                                                                                                  
+  unique(([1, 2], [2, 3], [1, 2])) some permutation of                                                                                                                                                                                                       
+  [[2, 3], [1, 2]].                                                                                                                                                                                                                                          
+  For best speed, all sequence elements should be hashable.  Then                                                                                                                                                                                            
+  unique() will usually work in linear time.                                                                                                                                                                                                                 
+  If not possible, the sequence elements should enjoy a total                                                                                                                                                                                                
+  ordering, and if list(s).sort() doesn't raise TypeError it's                                                                                                                                                                                               
+  assumed that they do enjoy a total ordering.  Then unique() will                                                                                                                                                                                           
+  usually work in O(N*log2(N)) time.                                                                                                                                                                                                                         
+  If that's not possible either, the sequence elements must support                                                                                                                                                                                          
+  equality-testing.  Then unique() will usually work in quadratic                                                                                                                                                                                            
+  time.                                                                                                                                                                                                                                                      
+  """
+
+  n = len(s)
+  if n == 0:
+      return []
+
+  # Try using a dict first, as that's the fastest and will usually                                                                                                                                                                                           
+  # work.  If it doesn't work, it will usually fail quickly, so it                                                                                                                                                                                           
+  # usually doesn't cost much to *try* it.  It requires that all the                                                                                                                                                                                         
+  # sequence elements be hashable, and support equality comparison.                                                                                                                                                                                          
+  u = {}
+  try:
+      for x in s:
+          u[x] = 1
+  except TypeError:
+      del u  # move on to the next method                                                                                                                                                                                                                    
+  else:
+      return u.keys()
+  # We can't hash all the elements.  Second fastest is to sort,                                                                                                                                                                                              
+  # which brings the equal elements together; then duplicates are                                                                                                                                                                                            
+  # easy to weed out in a single pass.                                                                                                                                                                                                                       
+  # NOTE:  Python's list.sort() was designed to be efficient in the                                                                                                                                                                                          
+  # presence of many duplicate elements.  This isn't true of all                                                                                                                                                                                             
+  # sort functions in all languages or libraries, so this approach                                                                                                                                                                                           
+  # is more effective in Python than it may be elsewhere.                                                                                                                                                                                                    
+  try:
+      t = list(s)
+      t.sort()
+  except TypeError:
+      del t  # move on to the next method                                                                                                                                                                                                                    
+  else:
+      assert n > 0
+      last = t[0]
+      lasti = i = 1
+      while i < n:
+          if t[i] != last:
+              t[lasti] = last = t[i]
+              lasti += 1
+          i += 1
+      return t[:lasti]
+  # Brute force is all that's left.                                                                                                                                                                                                                          
+  u = []
+  for x in s:
+      if x not in u:
+          u.append(x)
+  return u