Ticket #4553: finitefieldelement_new.patch

File finitefieldelement_new.patch, 3.3 KB (added by John Palmieri, 14 years ago)

this replaces the other patch

  • sage/rings/finite_field_element.py

    # HG changeset patch
    # User J. H. Palmieri <palmieri@math.washington.edu>
    # Date 1227496568 28800
    # Node ID 96d40a2c344248b41867c9a853f173e314589bcb
    # Parent  f49926ad291bf39c47b5df40f97cc33c3b67f390
    methods for finite field elements
    
    diff -r f49926ad291b -r 96d40a2c3442 sage/rings/finite_field_element.py
    a b  
    477477        n = self.log(g)
    478478        return 'Z(%s)^%s'%(F.order(), n)
    479479
    480     def order(self):
    481         """
    482         Return the additive order of this finite field element.
    483         """
    484         if self.is_zero():
    485             return Integer(1)
    486         return self.parent().characteristic()
    487        
    488480    def _repr_(self):
    489481        return ("%s"%(self.__value.lift().lift())).replace('a',self.parent().variable_name())
    490482   
  • sage/structure/element.pyx

    diff -r f49926ad291b -r 96d40a2c3442 sage/structure/element.pyx
    a b  
    23992399                raise ValueError, "no nth root"
    24002400            else:
    24012401                return L[0][0]
     2402
     2403    def additive_order(self):
     2404        """
     2405        Return the additive order of this finite field element.
     2406
     2407        EXAMPLES:
     2408            sage: k.<a> = FiniteField(2^12, 'a')
     2409            sage: b = a^3 + a + 1
     2410            sage: b.additive_order()
     2411            2
     2412            sage: k(0).additive_order()
     2413            1
     2414        """
     2415        if self.is_zero():
     2416            from sage.rings.integer import Integer
     2417            return Integer(1)
     2418        return self.parent().characteristic()
     2419
     2420    def pth_power(self, int k = 1):
     2421        """
     2422        Return the $p^k$th power of self, where $p$ is the characteristic
     2423        of the field.
     2424       
     2425        INPUT:
     2426            k -- integer (default: 1, must fit in C int type)
     2427           
     2428        OUTPUT:
     2429            The $p^k$th power of self.
     2430
     2431        Note that if $k$ is negative, then this computes the appropriate root.
     2432       
     2433        EXAMPLES:
     2434            sage: F.<a> = GF(29^2)
     2435            sage: z = a^2 + 5*a + 1
     2436            sage: z.pth_power()
     2437            19*a + 20
     2438            sage: z.pth_power(10)
     2439            10*a + 28
     2440            sage: z.pth_power(-10) == z
     2441            True
     2442            sage: F.<b> = GF(2^12)
     2443            sage: y = b^3 + b + 1
     2444            sage: y == (y.pth_power(-3))^(2^3)
     2445            True
     2446            sage: y.pth_power(2)
     2447            b^7 + b^6 + b^5 + b^4 + b^3 + b
     2448        """
     2449        p = self.additive_order()
     2450        n = self.parent().degree()
     2451        return self**(p**(k % n))
     2452
     2453    frobenius = pth_power
     2454
     2455    def pth_root(self, int k = 1):
     2456        """
     2457        Return the $p^k$th root of self, where $p$ is the characteristic
     2458        of the field.
     2459       
     2460        INPUT:
     2461            k -- integer (default: 1, must fit in C int type)
     2462           
     2463        OUTPUT:
     2464            The $p^k$th root of self.
     2465
     2466        Note that if $k$ is negative, then this computes the appropriate power.
     2467       
     2468        EXAMPLES:
     2469            sage: F.<b> = GF(2^12)
     2470            sage: y = b^3 + b + 1
     2471            sage: y == (y.pth_root(3))^(2^3)
     2472            True
     2473            sage: y.pth_root(2)
     2474            b^11 + b^10 + b^9 + b^7 + b^5 + b^4 + b^2 + b
     2475        """
     2476        return self.pth_power(-k)
     2477
    24022478   
    24032479def is_AlgebraElement(x):
    24042480    """