Is the code it uses for multiplication in free_algebra_element.py under 
devel/sage/sage/algebras? If so, I'm pretty sure for multiplication at 
least it should be possible to do better. Is there a way I can mess around 
with the _mul_ function easily? 

On Tuesday, July 9, 2013 11:46:18 PM UTC-4, broken_symlink wrote:
>
> I've done some profiling of my code and it seems that my main slowdowns 
> are coming from multiplication and addition of free algebra elements. Is 
> there anyway I can make it go faster? I would like to do some more 
> complicated computations but currently my code has been running for half an 
> hour and still hasn't produced any results. I plan on parallelizing it in a 
> few places, but was wondering if I could do anything about this as well. I 
> tried compiling phi_ext_sk down to c with cython and added type hints in a 
> few places but it didn't help. 
>
> Specifically, here is what I get.
>
>    307                                                   """
>    308                                                   phi_b_ext returns 
> phi_b_ext(a_ij)
>    309                                                   """
>    310                                           
>    311        32        37956   1186.1      0.2          e = 
> self.phi_ext_sk(self.w[0], a)
>    312                                           
>    313       416          431      1.0      0.0          for i in 
> self.w[1:]:
>    314       384          229      0.6      0.0              new_e = 0
>    315     10152        11593      1.1      0.1              for k, v in 
> e._FreeAlgebraElement__monomial_coefficients.iteritems():
>    316      9768        14406      1.5      0.1                  new_g = 1
>    317     58800       158459      2.7      0.7                  for g, p 
> in k:
>    318     49032      6465240    131.9     30.0                      g1 = 
> self.phi_ext_sk(i, g)
>    319     49032      7820633    159.5     36.3                      new_g 
> = new_g*g1
>    320     49032        47335      1.0      0.2                      if p 
> != 1:
>    321                                                                     
>             print "POW!!!!"
>    322      9768      2818386    288.5     13.1                  new_g = 
> v*new_g
>    323      9768      4146233    424.5     19.3                  new_e = 
> new_e + new_g
>    324       384         6524     17.0      0.0              e = new_e
>    325                                           
>    326        32           16      0.5      0.0          return e
>
> Function: phi_ext_sk at line 253                                           
>                                                                             
>                 [4/681]
> Total time: 6.70627 s
>
> Line #      Hits         Time  Per Hit   % Time  Line Contents
> ==============================================================
>    253                                               @profile
>    254                                               def phi_ext_sk(self, 
> k, a):
>    255                                                   """
>    256                                                   phi_ext_sk 
> returns phi^ext_sigma_z(a_xy) 
>    257                                                   """
>    258                                           
>    259     49064      3622876     73.8     54.0          i, j = 
> self.gdicta[a]
>    260                                           
>    261     49064        46425      0.9      0.7          if k > 0:
>    262                                           
>    263     49064        34162      0.7      0.5              if i == k + 1:
>    264     12004         8191      0.7      0.1                  if j != k 
> and j != k + 1:
>    265      8460         8997      1.1      0.1                     
>  return self.astar[k, j]
>    266                                                           else:
>    267      3544         3904      1.1      0.1                     
>  return self.astar[k, k+1]
>    268     37060        23978      0.6      0.4              elif j == k + 
> 1:
>    269     12004         8038      0.7      0.1                  if i != k 
> and i != k + 1:
>    270      8460         9035      1.1      0.1                     
>  return self.astar[i, k]
>    271                                                           else:
>    272      3544         3927      1.1      0.1                     
>  return self.astar[k+1, k]
>    273     25056        16273      0.6      0.2              elif i == k 
> and j != k and j != k + 1:
>    274      7016       685746     97.7     10.2                  return 
> -1*self.astar[k+1, j]-self.astar[k+1, k]* \
>    275      7016       760791    108.4     11.3                     
>  self.astar[k, j]
>    276     18040        12076      0.7      0.2              elif j == k 
> and i != k and i != k + 1:
>    277      7016       681617     97.2     10.2                  return 
> -1*self.astar[i, k+1]-self.astar[i, k]* \
>    278      7016       759046    108.2     11.3                     
>  self.astar[k, k+1]
>    279     11024         9371      0.9      0.1              elif i != k 
> and i != k+1 and j != k and j != k+1:
>    280     11024        11820      1.1      0.2                  return 
> self.astar[i, j]
>
> https://github.com/syamajala/KnotContactHomology/blob/master/braids.py
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to