Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/ein16/synth/d2/obj_apply.py
ViewVC logotype

Diff of /branches/ein16/synth/d2/obj_apply.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4410, Fri Aug 12 18:28:32 2016 UTC revision 4411, Fri Aug 12 18:28:57 2016 UTC
# Line 173  Line 173 
173  # note need to check if field for correct  # note need to check if field for correct
174  def applyUnaryOp(op1,ityps):  def applyUnaryOp(op1,ityps):
175      ityp1=ityps[0]      ityp1=ityps[0]
176      print "itype1", ityp1.name      #print "itype1", ityp1.name
177      k = ityp1.k      k = ityp1.k
178      dim = ityp1.dim      dim = ityp1.dim
179      ashape = ityp1.shape      ashape = ityp1.shape
180      name =  "op1 "+op1.name+"("+ityp1.name+")"      name =  "op1 "+op1.name+"("+ityp1.name+")"
181      print "apply unary op", name, ashape      #print "apply unary op", name, ashape
182      def same():      def same():
183          return (true, ityp1)          return (true, ityp1)
184      def err():      def err():
185          return (false, name)          return (false, name)
186      def mkTyp(shape):      def mkTyp(shape):
187          print "mark-a"          #print "mark-a"
188          (tf, rty1) = shapeToTyhelper(shape, dim)          (tf, rty1) = shapeToTyhelper(shape, dim)
189          if(tf):          if(tf):
190              print "mark-b"              #print "mark-b"
191              rtn1 = fty.convertTy(rty1, k)              rtn1 = fty.convertTy(rty1, k)
192              return (true, rtn1)              return (true, rtn1)
193          else:          else:
             print "mark-c"  
194              return err()              return err()
195    
196      def mkTyp_deductk(shape):      def mkTyp_deductk(shape):
# Line 212  Line 211 
211          else:          else:
212              return same() #type unaffected by operation              return same() #type unaffected by operation
213      elif(op_norm==op1):            # apply op_norm      elif(op_norm==op1):            # apply op_norm
214          print "norm "  
215          return mkTyp([])          return mkTyp([])
216      elif (op_negationT==op1):      elif (op_negationT==op1):
   
217          return same() #type unaffected by operation          return same() #type unaffected by operation
218        elif(op_jacob==op1):            # apply op_jacob
219            if(not fty.is_Field(ityp1)):
220                return err()
221            if(fty.is_Vector(ityp1)):
222                [n1] = ashape
223                if(n1==2 and dim==2):
224                    return mkTyp_deductk([2,2])
225                elif(n1==3 and dim==3):
226                    return mkTyp_deductk([3,3])
227                else:
228                    return err()
229            elif(fty.is_Matrix(ityp1)):
230                [n1,n2] = ashape
231                if(n1==n2 and n2==dim):
232                    if(dim==2):
233                        return mkTyp_deductk([2,2,2])
234                    elif(dim==3):
235                        return mkTyp_deductk([3,3,3])
236                    else:
237                        return err()
238                else:
239                    return err()
240            else:
241                return err()
242      elif(fty.is_Scalar(ityp1)):      elif(fty.is_Scalar(ityp1)):
243          if(op_sqrt==op1):          if(op_sqrt==op1):
244              return same()              return same()
# Line 251  Line 273 
273                  return mkTyp_deductk([3])                  return mkTyp_deductk([3])
274              else:              else:
275                  return err()                  return err()
276          elif(op_jacob==op1):            # apply op_jacob          #elif(op_jacob==op1):            # apply op_jacob
277              if(not fty.is_Field(ityp1)):          #   if(not fty.is_Field(ityp1)):
278                  return err()          #        return err()
279              if(n1==2 and dim==2):          #if(n1==2 and dim==2):
280                  return mkTyp_deductk([2,2])          #               return mkTyp_deductk([2,2])
281              elif(n1==3 and dim==3):          #           elif(n1==3 and dim==3):
282                  return mkTyp_deductk([3,3])          #               return mkTyp_deductk([3,3])
283              else:          #           else:
284                  return err()          #               return err()
285          elif(op_divergence==op1):          elif(op_divergence==op1):
286              if(not fty.is_Field(ityp1)):              if(not fty.is_Field(ityp1)):
287                  return err()                  return err()
# Line 277  Line 299 
299          elif(op_transpose==op1):            # apply op_tranpose          elif(op_transpose==op1):            # apply op_tranpose
300              return mkTyp([m, n])              return mkTyp([m, n])
301          elif((op_trace==op1) or (op_det==op1)):          elif((op_trace==op1) or (op_det==op1)):
302              if(n==m and n>1):              if(n==m and (n==2 or n==3)):
303                  return mkTyp([])                  return mkTyp([])
304              else:              else:
305                  return err()                  return err()
306            elif(op_inverse==op1):            # apply op_inverse_d2
307                return same()
308          else:          else:
309              return err()              return err()
310      elif(fty.is_Ten3(ityp1)):      elif(fty.is_Ten3(ityp1)):
# Line 308  Line 332 
332      ashape = fty.get_shape(ityp1)      ashape = fty.get_shape(ityp1)
333      bshape = fty.get_shape(ityp2)      bshape = fty.get_shape(ityp2)
334      name += "("+ityp1.name+","+ityp2.name+")"      name += "("+ityp1.name+","+ityp2.name+")"
335      print "\ninside bin app:", name      #print "\ninside bin app:", name
336      (tf, fldty) = find_field(ityp1,ityp2) # assures same dimension for both fields      (tf, fldty) = find_field(ityp1,ityp2) # assures same dimension for both fields
337      if(not tf):      if(not tf):
338          return (false, "not the same dimension")          return (false, "not the same dimension")
# Line 383  Line 407 
407                  n = len(ashape)                  n = len(ashape)
408                  if(n==2):                  if(n==2):
409                      if(ashape==bshape):                      if(ashape==bshape):
410                          print "same shape"                          #print "same shape"
411                          return mkTyp([])                          return mkTyp([])
412                      else:                      else:
413                          print "not the same shape"                          #print "not the same shape"
414                          return err()                          return err()
415                  else:                  else:
416                      return err()                      return err()
# Line 405  Line 429 
429  ##################################################################################################  ##################################################################################################
430  # apply unary and binary operator  # apply unary and binary operator
431  def get_tshape(opr1, ishape):  def get_tshape(opr1, ishape):
432      print "getting tshape of", opr1.name,"arg0=", ishape[0].name      #print "getting tshape of", opr1.name,"arg0=", ishape[0].name
433      arity=opr1.arity      arity=opr1.arity
434      if(arity==1):      if(arity==1):
435          return applyUnaryOp(opr1,ishape)          return applyUnaryOp(opr1,ishape)
# Line 449  Line 473 
473      def set_innerApp(shape):      def set_innerApp(shape):
474          return mkApply_fld(name, opr_inner, shape, inputfile, tshape1)          return mkApply_fld(name, opr_inner, shape, inputfile, tshape1)
475      def set_outerApp(lhs, rhs, shape):      def set_outerApp(lhs, rhs, shape):
476            #print "set_outerApp", tshape2.name
477          #return  mkApply_opr(name, opr_outer, lhs, rhs, shape)          #return  mkApply_opr(name, opr_outer, lhs, rhs, shape)
478          # apply(name, opr1,lhs, rhs, otypertn, false, true)          # apply(name, opr1,lhs, rhs, otypertn, false, true)
479          return apply(name, opr_outer,lhs, rhs, tshape2, false, true)          return apply(name, opr_outer,lhs, rhs, tshape2, false, true)
# Line 460  Line 485 
485          return mk_Field(id, ishape, k, inputfile, dim)          return mk_Field(id, ishape, k, inputfile, dim)
486    
487      if (outer_arity==1): # both are unary operators      if (outer_arity==1): # both are unary operators
488            #print "outer arity=1"
489          (z1, coeffs, otype1) =  set_innerApp(ishape)          (z1, coeffs, otype1) =  set_innerApp(ishape)
490          z2 = set_outerApp(z1, None, [otype1])          z2 = set_outerApp(z1, None, [otype1])
491          return (z2, coeffs)          return (z2, coeffs)

Legend:
Removed from v.4410  
changed lines
  Added in v.4411

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0