Hello,
         This is the draft of the proposal
https://github.com/amitjamadagni/Knots/wiki/Knot-theory-implementation. Any
comments on this would be really helpful. Thanks.


On Sat, Mar 15, 2014 at 5:43 PM, Amit Jamadagni <[email protected]>wrote:

> Hello,
> I drafted the initial proposal on Github Wiki page (the link which I
> shared previously and then we had the prototype discussion, sorry as I am
> unable to provide the link again as I am currently editing the same page)
> and I would like to mention that I did not post it on melange. I will post
> it on melange as soon as possible with all the edits. Thanks.
>
>
> On Sat, Mar 15, 2014 at 4:29 PM, Miguel Angel Marco <
> [email protected]> wrote:
>
>> Do you already have a draft of your proposal? I would suggest you to
>> write it in the google melange site. That way we could make comments based
>> on the proposal itself.
>>
>> El sábado, 15 de marzo de 2014 11:11:31 UTC+1, Amit Jamadagni escribió:
>>>
>>> Hello,
>>>
>>>         Thanks for the insight and help. I have been working on my
>>> prototypes and have tried to add methods for other representations as well.
>>> I would like to post it once I am all done with it. Any other comments on
>>> the previously posted outline of the proposal would be helpful. It would be
>>> great if you could comment on whether I am in the right direction or if not
>>> mention the changes so that it would help me in making a good proposal.
>>> Thanks.
>>>
>>>
>>> On Fri, Mar 14, 2014 at 6:35 PM, Miguel Angel Marco <
>>> [email protected]> wrote:
>>>
>>>> I like more something like:
>>>>
>>>> class Link:
>>>>     def __init__(self, input=None, gauss_code=None, dt_code=None,...):
>>>>         if type(input) == sage.groups.braid.Braid:
>>>>             self._braid = braid
>>>>             self._gauss_code = None
>>>>             self.dt_code = None
>>>>         elif gauss_code!=None:
>>>>             self._braid = None
>>>>             self._gauss_code = gauss_code
>>>>             self.dt_code = None
>>>> ...
>>>>
>>>>     def gauss_code(self):
>>>>         if self._gauss_code == None:
>>>>             self._gauss_code= (code to compute the gauss code from the
>>>> available data)
>>>>        return self._gauss_code
>>>>
>>>>
>>>> And so on. No need to create classes that the user will not use.
>>>>
>>>> Even, if we decide to use different formats for DT codes and gauss
>>>> codes, we wouldn't even need to use special parameters, we could see if the
>>>> input is one or the other by looking into its format.
>>>>
>>>> The main idea is that we will be implementing a few possible
>>>> representations for a link... but there might be others that could be
>>>> implemented in the future (polygonal curves in the space, tangles, some
>>>> kind of codification in a planar graph...). I do not think that creating a
>>>> class for each representation is a good idea. That would force to touch all
>>>> the code in the future.
>>>>
>>>> Maybe it is a matter of personal taste, but i really prefear to have
>>>> only one class. But if somebody has some other insights, i would like to
>>>> hear about it.
>>>>
>>>> El viernes, 14 de marzo de 2014 10:43:21 UTC+1, Amit Jamadagni escribió:
>>>>>
>>>>> Can we have something like this :
>>>>>
>>>>> class Link:
>>>>>         def __init__(self, value, input):
>>>>>                 self.value = value
>>>>>                 self.input = input
>>>>>                  if(self.value == "braidword"):
>>>>>                         self.a = Braidword()
>>>>>                 if(self.value == "DTCode"):
>>>>>                         self.b = DTCode
>>>>>
>>>>>         def braid2dt(self):
>>>>>                 return self.a.braid2dt
>>>>>
>>>>> class Braidword():
>>>>>     def braid2dt(self):
>>>>>
>>>>>     <Other Methods>
>>>>>
>>>>> class DTCode():
>>>>>    <Methods>
>>>>>
>>>>>         Similarly other methods from braidword and dtcode would be get
>>>>> defined under link class and would be called from their respective 
>>>>> classes.
>>>>> This would allow the user to have Link as input and as well others (even
>>>>> though others might not be of help, they would act as base classes for
>>>>> link).This would allow particular method from a class and not any method
>>>>> from any class. Everything again here will be discrete, the classes would
>>>>> be retained but Link would be having all the methods from the other
>>>>> representations and in addition some special ones which can be taken from
>>>>> Spherogram. Any comments on this would be helpful. Thanks.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Mar 14, 2014 at 2:05 AM, Amit Jamadagni 
>>>>> <[email protected]>wrote:
>>>>>
>>>>>> Hello,
>>>>>>         Yes I got the idea of what you have mentioned. For an update
>>>>>> I have started working on editing my prototype which would make link as 
>>>>>> the
>>>>>> main class. I would update it once I am done with it concretely. Any 
>>>>>> other
>>>>>> comments on the implementation details would be of great help. Thanks.
>>>>>>
>>>>>>
>>>>>> On Thu, Mar 13, 2014 at 2:50 PM, Miguel Angel Marco <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> I think that, for the user, it makes much more sense to have just
>>>>>>> one class (Link), that can be created from a braid, a DT code, a Gauss
>>>>>>> Code, or a list of 3d points. Then it is up to the class init method to
>>>>>>> initialize the object in different ways deppending on the type of the
>>>>>>> input. That is, if the input is a braid, then use the procedure to
>>>>>>> initialize the object from a braid word. If the input has the format of 
>>>>>>> a
>>>>>>> DT code, then proceed accordingly, and so on. If it is not possible to
>>>>>>> distinguish from the format of the input, then maybe a keyword could be
>>>>>>> used, as
>>>>>>>
>>>>>>> sage:  Link(gauss_code=[-1, 3, -2, 1, -3, 2])
>>>>>>>
>>>>>>> or
>>>>>>>
>>>>>>> sage: Link(dt_code = [4, 8, 10, -14, 2, -16, -18, -6, -12])
>>>>>>>
>>>>>>> and so on. But i definitely not like the idea of the user needing to
>>>>>>> use different functions to create the same class of objects. Think of 
>>>>>>> what
>>>>>>> happens with plot, for instance. You can call it on a symbollic 
>>>>>>> expression,
>>>>>>> a string, a polynomial, a function... and the user doesn't have to care
>>>>>>> about it. Something similar happens with permutations and many other
>>>>>>> classes.
>>>>>>>
>>>>>>> For instance, if say, the link is created from a gauss code, then
>>>>>>> the constructor initializes the atribute _gauss_code and leaves the 
>>>>>>> rest as
>>>>>>> None. Then, the method to compute the DT code would first check which
>>>>>>> atributes are already defined, and, if _dt_code is None, compute it from
>>>>>>> the available atributes, and then initialize _dt_code to its value.
>>>>>>>
>>>>>>> I hope what i wrote makes sense to you.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> El miércoles, 12 de marzo de 2014 22:03:45 UTC+1, Amit Jamadagni
>>>>>>> escribió:
>>>>>>>>
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>>         I feel that taking making the inputs discrete class would
>>>>>>>> allow the user to choose over the input rather than always asking him 
>>>>>>>> to
>>>>>>>> use the already present braid implementation. Here in this case we can
>>>>>>>> directly call it as braidwords rather than calling the Braid group 
>>>>>>>> first
>>>>>>>> and then the braid word presentation and then passing it onto as a 
>>>>>>>> input
>>>>>>>> for link. As I have mentioned in the proposal we could have separate
>>>>>>>> classes for Gauss code and DT codes directly allowing the user to work 
>>>>>>>> on
>>>>>>>> this. I have just had a view at implementation of Spherogram links, 
>>>>>>>> they
>>>>>>>> have taken PD as input and have methods defined for properties of 
>>>>>>>> various
>>>>>>>> crossings such as rotation ...(I may be completely wrong here so please
>>>>>>>> correct me). I feel having classes for each representation would give
>>>>>>>> freedom to the user and also calculate more properties relating to the
>>>>>>>> input.  I do not intend to say we must keep it as a separate entity, I
>>>>>>>> would like to mention that we can construct it in such a way that we 
>>>>>>>> can
>>>>>>>> have both these approaches working rather than just the approach 
>>>>>>>> mentioned,
>>>>>>>> so that the user has the freedom to compute things in a more direct 
>>>>>>>> manner.
>>>>>>>> These are my thoughts, but please correct me if I am going wrong. 
>>>>>>>> Thanks.
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Mar 13, 2014 at 1:45 AM, Amit Jamadagni <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Hello,
>>>>>>>>>          Thanks for the review.  I have seen the braid.py in
>>>>>>>>> groups in Sage and would like to make that as a starting point. I 
>>>>>>>>> will have
>>>>>>>>> a look at it and try to bring it in the prototypes. I have also 
>>>>>>>>> mentioned
>>>>>>>>> that it would be my start point. I have started going through 
>>>>>>>>> Spherogram
>>>>>>>>> and would add the inputs from it as well. Any other comments would be
>>>>>>>>> really helpful in making it more perfect. Thanks.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Mar 13, 2014 at 1:37 AM, Miguel Angel Marco <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> At a very first glance, i would like to mention that sage already
>>>>>>>>>> has a class for braids, so i think it woul be better to have 
>>>>>>>>>> something like
>>>>>>>>>> this:
>>>>>>>>>>
>>>>>>>>>> sage: B=BraidGroup(2)
>>>>>>>>>> sage: b=B([1,1,1])
>>>>>>>>>> sage L=Link(b)
>>>>>>>>>> ...
>>>>>>>>>>
>>>>>>>>>> That way we could also accept gauss/DT codes to create the Link.
>>>>>>>>>>
>>>>>>>>>>  Also, i strongly recommend you to take a look at spherogram,
>>>>>>>>>> since it already implements a class for links.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> El miércoles, 12 de marzo de 2014 16:04:48 UTC+1, Amit Jamadagni
>>>>>>>>>> escribió:
>>>>>>>>>>>
>>>>>>>>>>> Hello,
>>>>>>>>>>>
>>>>>>>>>>>       I have drafted a proposal which still has a lot to add,
>>>>>>>>>>> this is in between the totally finished and a rough outline. I 
>>>>>>>>>>> would need
>>>>>>>>>>> some reviews and comments on it. Thanks.
>>>>>>>>>>>
>>>>>>>>>>> https://github.com/amitjamadagni/Knots/wiki/Knot-theory-impl
>>>>>>>>>>> ementation
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Tue, Mar 11, 2014 at 2:46 PM, Miguel Angel Marco <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Well we should check in which cases it is faster to convert
>>>>>>>>>>>> from one representation to another and then compute the invariant, 
>>>>>>>>>>>> or
>>>>>>>>>>>> directly use another method to compute the invariant from a 
>>>>>>>>>>>> different
>>>>>>>>>>>> representation. My intuition tells me that the traduction between 
>>>>>>>>>>>> different
>>>>>>>>>>>> representations will be very fast compared to the computation of 
>>>>>>>>>>>> the
>>>>>>>>>>>> invariant... but it wouldn't hurt to run some benchmarks.
>>>>>>>>>>>>
>>>>>>>>>>>> I don't think that having two different methods to compute,
>>>>>>>>>>>> say, the knot group, from the braid representation and from the DT 
>>>>>>>>>>>> code
>>>>>>>>>>>> would really mean a duplication problem: they would be two 
>>>>>>>>>>>> different
>>>>>>>>>>>> methods that do different things.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> El lunes, 10 de marzo de 2014 19:58:06 UTC+1, Amit Jamadagni
>>>>>>>>>>>> escribió:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Hello,
>>>>>>>>>>>>>
>>>>>>>>>>>>>      Thanks for the review of the outline. I meant a separate
>>>>>>>>>>>>> class in the sense we could avoid code duplication to the extent 
>>>>>>>>>>>>> possible.
>>>>>>>>>>>>> We define a method in the link class for the invariant, when 
>>>>>>>>>>>>> called would
>>>>>>>>>>>>> refer to the class of invariants rather than defining each 
>>>>>>>>>>>>> invariant for
>>>>>>>>>>>>> every representation. I guess we can define the invariants for 
>>>>>>>>>>>>> the one kind
>>>>>>>>>>>>> of representation and any when an invariant is called from the 
>>>>>>>>>>>>> other
>>>>>>>>>>>>> representation we could convert this into the one where we have 
>>>>>>>>>>>>> the
>>>>>>>>>>>>> invariant defined and then return the answer.
>>>>>>>>>>>>>
>>>>>>>>>>>>> For example :
>>>>>>>>>>>>>
>>>>>>>>>>>>> We define for the braid word representation and it is easy to
>>>>>>>>>>>>> get the Alexander polynomial from this. So given any other 
>>>>>>>>>>>>> representation
>>>>>>>>>>>>> we could convert it to braid word and then get the Alexanders 
>>>>>>>>>>>>> polynomial
>>>>>>>>>>>>> (So for instance if the user inputs the DT code we can convert it 
>>>>>>>>>>>>> to braid
>>>>>>>>>>>>> word and then get the invariant from it rather than writing an 
>>>>>>>>>>>>> algorithm to
>>>>>>>>>>>>> calculate from the given representation, I do not say it is not 
>>>>>>>>>>>>> possible
>>>>>>>>>>>>> but in some cases, anyways your views on it would be really  
>>>>>>>>>>>>> helpful) .
>>>>>>>>>>>>> Similarly if from other presentations we can get some other 
>>>>>>>>>>>>> invariants
>>>>>>>>>>>>> quickly we can convert the given input to the present one and 
>>>>>>>>>>>>> then get the
>>>>>>>>>>>>> invariant.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Amit.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Mon, Mar 10, 2014 at 3:16 PM, Miguel Angel Marco <
>>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> I don't really see why having a separate class for the
>>>>>>>>>>>>>> invariants is better than just having methods in the Link class 
>>>>>>>>>>>>>> that
>>>>>>>>>>>>>> produce those invariants. I mean, i think that the user would 
>>>>>>>>>>>>>> expect
>>>>>>>>>>>>>> something like:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> sage: L=Link("some entry")
>>>>>>>>>>>>>> sage: type(L)
>>>>>>>>>>>>>> <class of links>
>>>>>>>>>>>>>> sage: L.alexander_polynomial()
>>>>>>>>>>>>>> t^(-1) + 1 + t
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> No need to have something like:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> sage: L=Link("some entry")
>>>>>>>>>>>>>> sage: type(L)
>>>>>>>>>>>>>> <class of links>
>>>>>>>>>>>>>> sage: LI=L.invariants()
>>>>>>>>>>>>>> sage: type(LI)
>>>>>>>>>>>>>> <class of link invariants>
>>>>>>>>>>>>>> sage: LI.alexander_polynomial()
>>>>>>>>>>>>>> t^(-1) + 1 + t
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> In spherogram (which is a part of snappy) there is already
>>>>>>>>>>>>>> something similar to that. It can be taken as a basis to start 
>>>>>>>>>>>>>> with.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> By the way, i do consider that besides gauss/DT codes or
>>>>>>>>>>>>>> braids, another way to enter a knot could be a list of points in 
>>>>>>>>>>>>>> space
>>>>>>>>>>>>>> (such that the knot is the piecewise linear curve defined by 
>>>>>>>>>>>>>> them). This
>>>>>>>>>>>>>> kind of input can appear in real life applications, so it would 
>>>>>>>>>>>>>> be good to
>>>>>>>>>>>>>> give support to it.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> El lunes, 10 de marzo de 2014 09:26:43 UTC+1, Amit Jamadagni
>>>>>>>>>>>>>> escribió:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hello,
>>>>>>>>>>>>>>>        I have started working on my proposal and I would
>>>>>>>>>>>>>>> like to present my ideas of implementation. With my 
>>>>>>>>>>>>>>> understanding I see two
>>>>>>>>>>>>>>> phases to the project one which plays around with various 
>>>>>>>>>>>>>>> representations
>>>>>>>>>>>>>>> and conversion between them and then a separate class of 
>>>>>>>>>>>>>>> invariants which
>>>>>>>>>>>>>>> would form the second phase(But both would be worked on 
>>>>>>>>>>>>>>> simultaneously, the
>>>>>>>>>>>>>>> phase split is only to make two as independent as possible). I 
>>>>>>>>>>>>>>> would like
>>>>>>>>>>>>>>> to start of with the representation part as there seems to be 
>>>>>>>>>>>>>>> work done
>>>>>>>>>>>>>>> with respect to braid groups. We start with the  braid word as 
>>>>>>>>>>>>>>> the input
>>>>>>>>>>>>>>> for the knot and then calculate the Seifert Matrix and then 
>>>>>>>>>>>>>>> Alexander's
>>>>>>>>>>>>>>> polynomial from this matrix. So once an invariant is calculated 
>>>>>>>>>>>>>>> we can move
>>>>>>>>>>>>>>> to the others from this (For reference we can use
>>>>>>>>>>>>>>> http://mathworld.wolfram.com/AlexanderPolynomial.html. A
>>>>>>>>>>>>>>> list of total implementation of presentation as well as 
>>>>>>>>>>>>>>> invariants is given
>>>>>>>>>>>>>>> in http://www.indiana.edu/~knotinfo/ out of which we can
>>>>>>>>>>>>>>> try to achieve as much as possible taking into consideration the
>>>>>>>>>>>>>>> feasibility. Then once we are done with the  braid word 
>>>>>>>>>>>>>>> representation I
>>>>>>>>>>>>>>> would like to implement the Vogel's algorithm which takes in 
>>>>>>>>>>>>>>> the Gauss Code
>>>>>>>>>>>>>>> and generates the braid word. So this would be a layer above 
>>>>>>>>>>>>>>> the initial
>>>>>>>>>>>>>>> layer as the user can input either the Gauss Code or Briad word 
>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>> similarly this would linked to the Invariants class. Gauss code 
>>>>>>>>>>>>>>> being
>>>>>>>>>>>>>>> closely related to DT code we can use the above implementation 
>>>>>>>>>>>>>>> to generate
>>>>>>>>>>>>>>> the DT Code. The presentations which remain are the Planar 
>>>>>>>>>>>>>>> Diagram
>>>>>>>>>>>>>>> presentation, Arc presentations, Conway notation (This is in 
>>>>>>>>>>>>>>> comparison to
>>>>>>>>>>>>>>> http://katlas.org/wiki/The_Mathematica_Package_KnotTheory%60)
>>>>>>>>>>>>>>> for which I have to find a way in order to convert 
>>>>>>>>>>>>>>> between.Finally there is
>>>>>>>>>>>>>>> the fox algorithm from which we can move to the Alexander's 
>>>>>>>>>>>>>>> polynomial. I
>>>>>>>>>>>>>>> am yet to see the partial differential implementation in Sage 
>>>>>>>>>>>>>>> which might
>>>>>>>>>>>>>>> be useful for this implementation. This would come under the 
>>>>>>>>>>>>>>> presentation
>>>>>>>>>>>>>>> part. So to summarize it,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>                                                   class
>>>>>>>>>>>>>>> Various presentations ==============  class of invariants
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>         |
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>         |
>>>>>>>>>>>>>>>                                                        inter
>>>>>>>>>>>>>>> conversion between
>>>>>>>>>>>>>>>                                                        one
>>>>>>>>>>>>>>> presentation to other ---------------------------- >same here
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>         |
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>         |
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  More generally this would
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  help in taking the input for ========> This could be extended 
>>>>>>>>>>>>>>> to present
>>>>>>>>>>>>>>> the various diagrams.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>  various computations
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> * I feel taking in the input would be the most difficult
>>>>>>>>>>>>>>> part  even though we would provide with a lot of options, I 
>>>>>>>>>>>>>>> guess user
>>>>>>>>>>>>>>> would be more interested in giving in a input which is as 
>>>>>>>>>>>>>>> compact as
>>>>>>>>>>>>>>> possible.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I understand the need to focus more on the invariants and I
>>>>>>>>>>>>>>> will try to add (mainly the algorithms) as much as possible in 
>>>>>>>>>>>>>>> the coming
>>>>>>>>>>>>>>> days.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Finally to test the above implementation we can use the
>>>>>>>>>>>>>>> already present software which I would like to list in order to 
>>>>>>>>>>>>>>> what goes
>>>>>>>>>>>>>>> for what.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 1. For the Siefert Matrix we have the site
>>>>>>>>>>>>>>> http://www.maths.ed.ac.uk/~s0681349/SeifertMatrix/#alph
>>>>>>>>>>>>>>> abetical
>>>>>>>>>>>>>>> 2. For Vogel's algorithm we have the GAP implementation ( I
>>>>>>>>>>>>>>> still have to go through this).
>>>>>>>>>>>>>>> 3. For braid to DT code we can use knotscape to test the
>>>>>>>>>>>>>>> code.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I hope the above outline would take around 4 - 5 weeks with
>>>>>>>>>>>>>>> everything in place (Considering the documentation, test cases, 
>>>>>>>>>>>>>>> code
>>>>>>>>>>>>>>> including a part of the invariants). The rest of the remaining 
>>>>>>>>>>>>>>> weeks if
>>>>>>>>>>>>>>> everything goes according to plan would be implementing the 
>>>>>>>>>>>>>>> other
>>>>>>>>>>>>>>> invariants.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I have seen through Spherogram which has a very good
>>>>>>>>>>>>>>> implementation of links. I am still in the process of reading 
>>>>>>>>>>>>>>> the entire
>>>>>>>>>>>>>>> material and would integrate parts of it once I am thoroughly 
>>>>>>>>>>>>>>> done with it.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> This is an outline on which I would like to build my
>>>>>>>>>>>>>>> proposal. Any comments or further inputs would be of great help 
>>>>>>>>>>>>>>> in making
>>>>>>>>>>>>>>> this project successful.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Amit.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>  --
>>>>>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>>>>>> Google Groups "sage-gsoc" group.
>>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from
>>>>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>>>>> To post to this group, send email to [email protected]
>>>>>>>>>>>>>> .
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Visit this group at http://groups.google.com/group/sage-gsoc.
>>>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>  --
>>>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>>>> Google Groups "sage-gsoc" group.
>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from
>>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>>> To post to this group, send email to [email protected].
>>>>>>>>>>>> Visit this group at http://groups.google.com/group/sage-gsoc.
>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  --
>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>> Google Groups "sage-gsoc" group.
>>>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>>>> send an email to [email protected].
>>>>>>>>>> To post to this group, send email to [email protected].
>>>>>>>>>> Visit this group at http://groups.google.com/group/sage-gsoc.
>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>  --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "sage-gsoc" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to [email protected].
>>>>>>> To post to this group, send email to [email protected].
>>>>>>> Visit this group at http://groups.google.com/group/sage-gsoc.
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>>
>>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "sage-gsoc" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/sage-gsoc.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  --
>> You received this message because you are subscribed to the Google Groups
>> "sage-gsoc" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/sage-gsoc.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-gsoc" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-gsoc.
For more options, visit https://groups.google.com/d/optout.

Reply via email to