Changeset 7231:9a53ba484dcb
- Timestamp:
- 10/29/07 13:44:57 (6 years ago)
- Branch:
- default
- Children:
- 7232:e054455cbf30, 7233:6c1e61faebf2
- Location:
- sage
- Files:
-
- 12 edited
-
algebras/free_algebra_element.py (modified) (1 diff)
-
calculus/calculus.py (modified) (2 diffs)
-
misc/latex.py (modified) (2 diffs)
-
misc/preparser.py (modified) (1 diff)
-
monoids/free_monoid_element.py (modified) (3 diffs)
-
rings/laurent_series_ring_element.pyx (modified) (3 diffs)
-
rings/polynomial/multi_polynomial_ring_generic.pyx (modified) (5 diffs)
-
rings/polynomial/polynomial_element.pyx (modified) (1 diff)
-
rings/polynomial/polynomial_ring.py (modified) (1 diff)
-
rings/power_series_ring.py (modified) (2 diffs)
-
rings/power_series_ring_element.pyx (modified) (2 diffs)
-
structure/parent_gens.pyx (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
sage/algebras/free_algebra_element.py
r7195 r7231 86 86 sage: latex(-x+3*y^20*z) 87 87 \left(-1\right)x + 3y^{20}z 88 sage: alpha,beta,gamma=FreeAlgebra(ZZ,3,'alpha,beta,gamma').gens() 89 sage: latex(alpha-beta) 90 \alpha + \left(-1\right)\beta 88 91 """ 89 92 v = self.__monomial_coefficients.items() -
sage/calculus/calculus.py
r7147 r7231 225 225 226 226 import operator 227 from sage.misc.latex import latex, latex_vari fy227 from sage.misc.latex import latex, latex_variable_name 228 228 from sage.structure.sage_object import SageObject 229 229 … … 3290 3290 except AttributeError: 3291 3291 pass 3292 a = self._name 3293 if len(a) > 1: 3294 m = re.search('(\d|[.,])+$',a) 3295 if m is None: 3296 a = latex_varify(a) 3297 else: 3298 b = a[:m.start()] 3299 a = '%s_{%s}'%(latex_varify(b), a[m.start():]) 3300 3301 self.__latex = a 3302 return a 3292 self.__latex = latex_variable_name(self._name) 3293 return self.__latex 3303 3294 3304 3295 def _maxima_init_(self): -
sage/misc/latex.py
r6141 r7231 604 604 'omega', 605 605 'Omega'] 606 607 606 608 607 def latex_varify(a): … … 613 612 else: 614 613 return '\\mbox{%s}'%a 615 614 616 615 def latex_variable_name(x): 617 616 """ 618 617 Return latex version of a variable name. 619 620 The rule is this: 621 x393 --> x_{393} 622 I.e., always replace the last numeric part by _{number}. 623 """ 624 import re 625 # * The "\d" means "decimal digit" 626 # * The "+" means "1 or more" 627 # * The "$" means "at the end of the line" 628 m = re.search('\d+$',x) 629 if m is None: 630 return x 631 return '%s_{%s}'%(latex_varify(x[:m.start()]), x[m.start():]) 618 619 Here are some guiding principles for usage of this function: 620 1) If the variable is a single letter, that is the latex version. 621 2) If the variable name is suffixed by a number, we put the number in the subscript. 622 3) If the variable name contains an '_' we start the subscript at the underscore. 623 Note that #3 trumps rule #2. 624 4) If a component of the variable is a greek letter, escape it properly. 625 5) Recurse nicely with subscripts. 626 627 Refer to the examples section for how these rules might play out in practice. 628 629 EXAMPLES: 630 sage: import sage.misc.latex as latex_module 631 sage: latex_variable_name = latex_module.latex_variable_name 632 sage: latex_variable_name('a') 633 'a' 634 sage: latex_variable_name('abc') 635 '\\mbox{abc}' 636 sage: latex_variable_name('sigma') 637 '\\sigma' 638 sage: latex_variable_name('sigma_k') 639 '\\sigma_{k}' 640 sage: latex_variable_name('sigma389') 641 '\\sigma_{389}' 642 sage: latex_variable_name('beta_00') 643 '\\beta_{00}' 644 sage: latex_variable_name('Omega84') 645 '\\Omega_{84}' 646 sage: latex_variable_name('sigma_alpha') 647 '\\sigma_{\\alpha}' 648 sage: latex_variable_name('nothing1') 649 '\\mbox{nothing}_{1}' 650 sage: latex_variable_name('nothing_abc') 651 '\\mbox{nothing}_{\\mbox{abc}}' 652 sage: latex_variable_name('alpha_beta_gamma12') 653 '\\alpha_{\\beta_{\\gamma_{12}}}' 654 655 AUTHORS: 656 -- Joel B. Mohler -- drastic rewrite and many doc-tests 657 """ 658 underscore = x.find("_") 659 if underscore == -1: 660 import re 661 # * The "\d|[.,]" means "decimal digit" or period or comma 662 # * The "+" means "1 or more" 663 # * The "$" means "at the end of the line" 664 m = re.search('(\d|[.,])+$',x) 665 if m is None: 666 prefix = x 667 suffix = None 668 else: 669 prefix = x[:m.start()] 670 suffix = x[m.start():] 671 else: 672 prefix = x[:underscore] 673 suffix = x[underscore+1:] 674 if suffix and len(suffix) > 0: 675 # handle the suffix specially because it very well might be numeric 676 # I use strip to avoid using regex's -- It makes it a bit faster (and the code is more comprehensible to non-regex'ed people) 677 if suffix.strip("1234567890")!="": 678 suffix = latex_variable_name(suffix) # recurse to deal with recursive subscripts 679 return '%s_{%s}'%(latex_varify(prefix), suffix) 680 else: 681 return latex_varify(prefix) -
sage/misc/preparser.py
r6510 r7231 475 475 gen_list = [s.strip() for s in line[i+2:gen_end].split(',')] 476 476 for g in gen_list: 477 if not g.isalnum() or len(g) == 0 or not g[0].isalpha():477 if (not g.isalnum() and not g.replace("_","").isalnum()) or len(g) == 0 or not g[0].isalpha(): 478 478 raise SyntaxError, "variable name (='%s') must be alpha-numeric and begin with a letter"%g 479 479 -
sage/monoids/free_monoid_element.py
r7206 r7231 26 26 from sage.rings.integer import Integer 27 27 from sage.structure.element import MonoidElement 28 from sage.misc.latex import latex, latex_vari fy28 from sage.misc.latex import latex, latex_variable_name 29 29 30 30 def is_FreeMonoidElement(x): … … 121 121 sage: z = F([(0,5),(1,2),(0,10),(0,2),(1,2)]) 122 122 sage: z._latex_() 123 ' \\mbox{a0}^{5}\\mbox{a1}^{2}\\mbox{a0}^{12}\\mbox{a1}^{2}'123 'a_{0}^{5}a_{1}^{2}a_{0}^{12}a_{1}^{2}' 124 124 sage: F, (alpha,beta,gamma) = FreeMonoid(3, 'alpha,beta,gamma').objgens() 125 125 sage: latex(alpha*beta*gamma) … … 128 128 s = "" 129 129 v = self._element_list 130 x = self.parent(). variable_names()130 x = self.parent().latex_variable_names() 131 131 for i in range(len(v)): 132 132 g = x[int(v[i][0])] 133 133 e = v[i][1] 134 134 if e == 1: 135 s += "%s"%( latex_varify(g),)136 else: 137 s += "%s^{%s}"%( latex_varify(g),e)135 s += "%s"%(g,) 136 else: 137 s += "%s^{%s}"%(g,e) 138 138 if len(s) == 0: s = "1" 139 139 return s -
sage/rings/laurent_series_ring_element.pyx
r6990 r7231 234 234 sage: f = (17/2)*x^-2 + x + x^2 + 3*x^4 + O(x^7) 235 235 sage: latex(f) 236 \frac{\frac{17}{2}}{x^{2}} + x + x^{2} + 3x^{4} + O( \text{x}^{7})236 \frac{\frac{17}{2}}{x^{2}} + x + x^{2} + 3x^{4} + O(x^{7}) 237 237 """ 238 238 if self.is_zero(): … … 245 245 valuation = self.__n 246 246 m = len(v) 247 X = self._parent. variable_name()247 X = self._parent.latex_variable_names()[0] 248 248 atomic_repr = self._parent.base_ring().is_atomic_repr() 249 249 first = True … … 280 280 bigoh = "O(1)" 281 281 elif pr == 1: 282 bigoh = "O(%s)"% sage.misc.latex.latex(self._parent.variable_name())282 bigoh = "O(%s)"%(X,) 283 283 else: 284 bigoh = "O(%s^{%s})"%( sage.misc.latex.latex(self._parent.variable_name()),pr)284 bigoh = "O(%s^{%s})"%(X,pr) 285 285 if s == " ": 286 286 return bigoh -
sage/rings/polynomial/multi_polynomial_ring_generic.pyx
r6606 r7231 7 7 from sage.rings.integer_ring import ZZ 8 8 from sage.rings.polynomial.polydict import PolyDict 9 from sage.misc.latex import latex_variable_name 9 10 import multi_polynomial_element 10 11 import polynomial_ring … … 208 209 209 210 def _latex_(self): 210 vars = str(self.latex_variable_names()).replace('\n','').replace("'",'') 211 return "%s[%s]"%(sage.misc.latex.latex(self.base_ring()), vars[1:-1]) 212 211 vars = ', '.join(self.latex_variable_names()) 212 return "%s[%s]"%(sage.misc.latex.latex(self.base_ring()), vars) 213 213 214 214 def _ideal_class_(self): … … 382 382 raise NotImplementedError 383 383 384 def latex_variable_names(self):385 """386 Returns the list of variable names suitable for latex output.387 388 All '_SOMETHING' substrings are replaced by '_{SOMETHING}' recursively389 so that subscripts of subscripts work.390 391 EXAMPLES:392 sage: R, x = PolynomialRing(QQ,'x',12).objgens()393 sage: x394 (x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11)395 sage: print R.latex_variable_names ()396 ['x_{0}', 'x_{1}', 'x_{2}', 'x_{3}', 'x_{4}', 'x_{5}', 'x_{6}', 'x_{7}', 'x_{8}', 'x_{9}', 'x_{10}', 'x_{11}']397 sage: f = x[0]^3 + 15/3 * x[1]^10398 sage: print latex(f)399 5 x_{1}^{10} + x_{0}^{3}400 """401 if self._latex_names is not None:402 return self._latex_names403 names = []404 for g in self.variable_names():405 i = len(g)-1406 while i >= 0 and g[i].isdigit():407 i -= 1408 if i < len(g)-1:409 g = '%s_{%s}'%(g[:i+1], g[i+1:])410 names.append(g)411 self._latex_names = names412 return names413 414 384 def __reduce__(self): 415 385 """ … … 420 390 names = self.variable_names() 421 391 order = self.term_order() 422 392 423 393 return unpickle_MPolynomialRing_generic_v1,(base_ring, n, names, order) 424 394 … … 427 397 r""" 428 398 Return a random polynomial in this polynomial ring. 429 399 430 400 INPUT: 431 401 degree -- maximum total degree of resulting polynomial -
sage/rings/polynomial/polynomial_element.pyx
r6990 r7231 888 888 r = reversed(xrange(m)) 889 889 if name is None: 890 name = self.parent(). variable_name()890 name = self.parent().latex_variable_names()[0] 891 891 atomic_repr = self.parent().base_ring().is_atomic_repr() 892 892 for n in reversed(xrange(m)): -
sage/rings/polynomial/polynomial_ring.py
r7177 r7231 378 378 379 379 def _latex_(self): 380 return "%s[%s]"%(latex.latex(self.base_ring()), latex.latex(self.variable_name())) 381 380 """ 381 EXAMPLES: 382 sage: S.<alpha12>=ZZ[] 383 sage: latex(S) 384 \mathbf{Z}[\alpha_{12}] 385 """ 386 return "%s[%s]"%(latex.latex(self.base_ring()), self.latex_variable_names()[0]) 387 382 388 def __set_polynomial_class(self, cls=None): 383 389 from sage.rings.padics.padic_ring_capped_relative import pAdicRingCappedRelative -
sage/rings/power_series_ring.py
r7000 r7231 59 59 sage: R.<t> = PowerSeriesRing(QQ, sparse=True) 60 60 sage: latex(-2/3*(1/t^3) + 1/t + 3/5*t^2 + O(t^5)) 61 \frac{-\frac{2}{3}}{t^{3}} + \frac{1}{t} + \frac{3}{5}t^{2} + O( \text{t}^{5})61 \frac{-\frac{2}{3}}{t^{3}} + \frac{1}{t} + \frac{3}{5}t^{2} + O(t^{5}) 62 62 sage: S = parent(1/t); S 63 63 Sparse Laurent Series Ring in t over Rational Field … … 279 279 sage: latex(R) 280 280 \mathbf{F}_{17}[[y]] 281 """ 282 return "%s[[%s]]"%(latex.latex(self.base_ring()), self.variable_name()) 281 sage: R = GF(17)[['y12']] 282 sage: latex(R) 283 \mathbf{F}_{17}[[y_{12}]] 284 """ 285 return "%s[[%s]]"%(latex.latex(self.base_ring()), self.latex_variable_names()[0]) 283 286 284 287 def __call__(self, f, prec=infinity, check=True): -
sage/rings/power_series_ring_element.pyx
r6990 r7231 473 473 v = self.list() 474 474 m = len(v) 475 X = self._parent. variable_name()475 X = self._parent.latex_variable_names()[0] 476 476 atomic_repr = self._parent.base_ring().is_atomic_repr() 477 477 first = True … … 504 504 bigoh = "O(1)" 505 505 elif self._prec == 1: 506 bigoh = "O(%s)"% sage.misc.latex.latex(self._parent.gen())506 bigoh = "O(%s)"%(X,) 507 507 else: 508 bigoh = "O(%s^{%s})"%( sage.misc.latex.latex(self._parent.gen()),self._prec)508 bigoh = "O(%s^{%s})"%(X,self._prec) 509 509 if s == " ": 510 510 return bigoh -
sage/structure/parent_gens.pyx
r6778 r7231 58 58 59 59 import sage.misc.defaults 60 import sage.misc.latex 60 from sage.misc.latex import latex_variable_name 61 61 import gens_py 62 62 import parent … … 121 121 if len(N) == 0: 122 122 raise ValueError, "variable name must be nonempty" 123 if not N.isalnum(): 123 if not N.isalnum() and not N.replace("_","").isalnum(): 124 # We must be alphanumeric, but we make an exception for non-leading '_' characters. 124 125 raise ValueError, "variable names must be alphanumeric, but one is '%s' which is not."%N 125 126 if not N[0].isalpha(): … … 377 378 378 379 def latex_variable_names(self): 380 """ 381 Returns the list of variable names suitable for latex output. 382 383 All '_SOMETHING' substrings are replaced by '_{SOMETHING}' recursively 384 so that subscripts of subscripts work. 385 386 EXAMPLES: 387 sage: R, x = PolynomialRing(QQ,'x',12).objgens() 388 sage: x 389 (x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11) 390 sage: print R.latex_variable_names () 391 ['x_{0}', 'x_{1}', 'x_{2}', 'x_{3}', 'x_{4}', 'x_{5}', 'x_{6}', 'x_{7}', 'x_{8}', 'x_{9}', 'x_{10}', 'x_{11}'] 392 sage: f = x[0]^3 + 15/3 * x[1]^10 393 sage: print latex(f) 394 5 x_{1}^{10} + x_{0}^{3} 395 """ 379 396 if self._latex_names != None: 380 397 return self._latex_names 381 398 # Compute the latex versions of the variable names. 382 self._latex_names = [] 383 for x in self.variable_names(): 384 self._latex.append(sage.misc.latex.latex_variable_name(x)) 399 self._latex_names = [latex_variable_name(x) for x in self.variable_names()] 385 400 return self._latex_names 386 401
Note: See TracChangeset
for help on using the changeset viewer.
