From 65b773d491685d4db2f0dbb5678c28c19a656740 Mon Sep 17 00:00:00 2001 From: Jae-Joon Lee Date: Sat, 17 Sep 2011 22:24:41 +0900 Subject: [PATCH 1/8] fix GridSpec.update to update axes position only for axes assocaited with the gridspec --- lib/matplotlib/gridspec.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/matplotlib/gridspec.py b/lib/matplotlib/gridspec.py index 9367cb485bde..f6f8ceb84846 100644 --- a/lib/matplotlib/gridspec.py +++ b/lib/matplotlib/gridspec.py @@ -233,14 +233,17 @@ def update(self, **kwargs): if not isinstance(ax, SubplotBase): # Check if sharing a subplots axis if ax._sharex is not None and isinstance(ax._sharex, SubplotBase): - ax._sharex.update_params() - ax.set_position(ax._sharex.figbox) + if ax._sharex.get_subplotspec().get_gridspec() == self: + ax._sharex.update_params() + ax.set_position(ax._sharex.figbox) elif ax._sharey is not None and isinstance(ax._sharey,SubplotBase): - ax._sharey.update_params() - ax.set_position(ax._sharey.figbox) + if ax._sharey.get_subplotspec().get_gridspec() == self: + ax._sharey.update_params() + ax.set_position(ax._sharey.figbox) else: - ax.update_params() - ax.set_position(ax.figbox) + if ax.get_subplotspec().get_gridspec() == self: + ax.update_params() + ax.set_position(ax.figbox) @@ -287,7 +290,7 @@ def tight_layout(self, fig, renderer=None, pad=1.2, h_pad=None, w_pad=None, rect subplot_list = [] num1num2_list = [] subplot_dict = {} - + for ax in fig.axes: locator = ax.get_axes_locator() if hasattr(locator, "get_subplotspec"): @@ -340,7 +343,7 @@ def tight_layout(self, fig, renderer=None, pad=1.2, h_pad=None, w_pad=None, rect pad=pad, h_pad=h_pad, w_pad=w_pad, rect=(left, bottom, right, top)) - + self.update(**kwargs) From 85a26dca55c788c97bbf312b0732db222df55530 Mon Sep 17 00:00:00 2001 From: Damon McDougall Date: Wed, 28 Sep 2011 10:52:51 -0400 Subject: [PATCH 2/8] Added Carey Rappaport's CMRmap This colour map is great for colour images but is also ideal for rendering these images in black and white. Suitable for publications. --- lib/matplotlib/_cm.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/lib/matplotlib/_cm.py b/lib/matplotlib/_cm.py index fc92aef278f9..49afb24208e1 100644 --- a/lib/matplotlib/_cm.py +++ b/lib/matplotlib/_cm.py @@ -1736,6 +1736,36 @@ def gfunc32(x): (1.0, 0.150232812, 0.150232812)] } +# Implementation of Carey Rappaport's CMRmap. +# See `A Color Map for Effective Black-and-White Rendering of Color-Scale Images' by Carey Rappaport +# http://www.mathworks.com/matlabcentral/fileexchange/2662-cmrmap-m +_CMRmap_data = {'red' : ( (0.000, 0.00, 0.00), + (0.125, 0.15, 0.15), + (0.250, 0.30, 0.30), + (0.375, 0.60, 0.60), + (0.500, 1.00, 1.00), + (0.625, 0.90, 0.90), + (0.750, 0.90, 0.90), + (0.875, 0.90, 0.90), + (1.000, 1.00, 1.00) ), + 'green' : ( (0.000, 0.00, 0.00), + (0.125, 0.15, 0.15), + (0.250, 0.15, 0.15), + (0.375, 0.20, 0.20), + (0.500, 0.25, 0.25), + (0.625, 0.50, 0.50), + (0.750, 0.75, 0.75), + (0.875, 0.90, 0.90), + (1.000, 1.00, 1.00) ), + 'blue': ( (0.000, 0.00, 0.00), + (0.125, 0.50, 0.50), + (0.250, 0.75, 0.75), + (0.375, 0.50, 0.50), + (0.500, 0.15, 0.15), + (0.625, 0.00, 0.00), + (0.750, 0.10, 0.10), + (0.875, 0.50, 0.50), + (1.000, 1.00, 1.00) )} datad = { 'afmhot': _afmhot_data, @@ -1744,6 +1774,7 @@ def gfunc32(x): 'binary': _binary_data, 'bwr': _bwr_data, 'brg': _brg_data, + 'CMRmap': _CMRmap_data, 'cool': _cool_data, 'copper': _copper_data, 'cubehelix': _cubehelix_data, From 404a8d82c67ed12f0b247559a4a34376437601f8 Mon Sep 17 00:00:00 2001 From: jdh2358 Date: Thu, 6 Oct 2011 10:01:09 -0500 Subject: [PATCH 3/8] merge v1.1.x into master --- lib/matplotlib/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index fa4d0084a7cd..316022ce0541 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -99,7 +99,7 @@ """ from __future__ import generators -__version__ = '1.1.0' +__version__ = '1.1.x' import os, re, shutil, subprocess, sys, warnings import distutils.sysconfig From 9d0c4baa109d0f7ceac8d9e7a7e5a475c1fc27a0 Mon Sep 17 00:00:00 2001 From: Tony S Yu Date: Sun, 9 Oct 2011 12:10:49 -0400 Subject: [PATCH 4/8] Add missing qt4 key bindings --- lib/matplotlib/backends/backend_qt4.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/backends/backend_qt4.py b/lib/matplotlib/backends/backend_qt4.py index 277f0d82f6f3..3dbb1bbf54b5 100644 --- a/lib/matplotlib/backends/backend_qt4.py +++ b/lib/matplotlib/backends/backend_qt4.py @@ -120,7 +120,28 @@ class FigureCanvasQT( QtGui.QWidget, FigureCanvasBase ): keyvald = { QtCore.Qt.Key_Control : 'control', QtCore.Qt.Key_Shift : 'shift', QtCore.Qt.Key_Alt : 'alt', - QtCore.Qt.Key_Return : 'enter' + QtCore.Qt.Key_Return : 'enter', + QtCore.Qt.Key_Left : 'left', + QtCore.Qt.Key_Up : 'up', + QtCore.Qt.Key_Right : 'right', + QtCore.Qt.Key_Down : 'down', + QtCore.Qt.Key_Escape : 'escape', + QtCore.Qt.Key_F1 : 'f1', + QtCore.Qt.Key_F2 : 'f2', + QtCore.Qt.Key_F3 : 'f3', + QtCore.Qt.Key_F4 : 'f4', + QtCore.Qt.Key_F5 : 'f5', + QtCore.Qt.Key_F6 : 'f6', + QtCore.Qt.Key_F7 : 'f7', + QtCore.Qt.Key_F8 : 'f8', + QtCore.Qt.Key_F9 : 'f9', + QtCore.Qt.Key_F10 : 'f10', + QtCore.Qt.Key_F11 : 'f11', + QtCore.Qt.Key_F12 : 'f12', + QtCore.Qt.Key_Home : 'home', + QtCore.Qt.Key_End : 'end', + QtCore.Qt.Key_PageUp : 'pageup', + QtCore.Qt.Key_PageDown : 'pagedown', } # left 1, middle 2, right 3 buttond = {1:1, 2:3, 4:2} From 78ed37c76cbf8920def023b51d16b4a5398c32a6 Mon Sep 17 00:00:00 2001 From: jdh2358 Date: Tue, 11 Oct 2011 12:32:46 -0500 Subject: [PATCH 5/8] bumb version string; change python 2.4 to 2.6 dependency --- INSTALL | 6 +++--- doc/devel/coding_guide.rst | 3 +-- doc/users/whats_new.rst | 2 +- lib/matplotlib/__init__.py | 2 +- setup.py | 4 ++-- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/INSTALL b/INSTALL index 08fc3ab05629..119bf99a8896 100644 --- a/INSTALL +++ b/INSTALL @@ -54,7 +54,7 @@ Next, we need to get matplotlib installed. We provide prebuilt binaries for OS X and Windows on the matplotlib `download `_ page. Click on the latest release of the "matplotlib" package, choose your python -version (e.g., 2.5, 2.6 or 2.7) and your platform (macosx or win32). +version (e.g., 2.6 or 2.7) and your platform (macosx or win32). If you have any problems, please check the :ref:`installing-faq`, search using Google, and/or post a question to the `mailing list `_. @@ -179,8 +179,8 @@ libraries themselves. This does not build matplotlib, but it does get the install the build dependencies, which will make building from source easier. -:term:`python` 2.4 (or later but not python3) - matplotlib requires python 2.4 or later (`download `__) +:term:`python` 2.6 (or later but not python3) + matplotlib requires python 2.6 or later (`download `__) :term:`numpy` 1.1 (or later) array support for python (`download diff --git a/doc/devel/coding_guide.rst b/doc/devel/coding_guide.rst index 0c71085acad2..34ea7ca6f7e2 100644 --- a/doc/devel/coding_guide.rst +++ b/doc/devel/coding_guide.rst @@ -17,8 +17,7 @@ in mind. and consider posting to `matplotlib-devel `_ -* Are your changes python2.4 compatible? We still support 2.4, so - avoid features new to 2.5 +* Are your changes python2.6 compatible? We support python2.6 and later * Can you pass :file:`examples/tests/backend_driver.py`? This is our poor man's unit test. diff --git a/doc/users/whats_new.rst b/doc/users/whats_new.rst index 4d293b802086..d066ee326709 100644 --- a/doc/users/whats_new.rst +++ b/doc/users/whats_new.rst @@ -9,7 +9,7 @@ This page just covers the highlights -- for the full story, see the .. note:: Matplotlib version 1.1 is the last major release compatible with Python - versions 2.4 to 2.7. The next major release will support + versions 2.4 to 2.7. matplotlib 1.2 and later require versions 2.6, 2.7, and 3.1 and higher. .. _whats-new-1-1: diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index 316022ce0541..2ca24a66e0fa 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -99,7 +99,7 @@ """ from __future__ import generators -__version__ = '1.1.x' +__version__ = '1.2.x' import os, re, shutil, subprocess, sys, warnings import distutils.sysconfig diff --git a/setup.py b/setup.py index 2f138218881d..31241ce78759 100644 --- a/setup.py +++ b/setup.py @@ -28,8 +28,8 @@ import sys major, minor1, minor2, s, tmp = sys.version_info -if major==2 and minor1<4 or major<2: - raise SystemExit("""matplotlib requires Python 2.4 or later.""") +if major==2 and minor1<6 or major<2: + raise SystemExit("""matplotlib requires Python 2.6 or later.""") import glob from distutils.core import setup From aad1d26000e75b4b60e5d8f271ba941c4934a6c3 Mon Sep 17 00:00:00 2001 From: jdh2358 Date: Tue, 11 Oct 2011 12:45:12 -0500 Subject: [PATCH 6/8] added pytz 2011k --- lib/pytz/__init__.py | 10 ++++++- lib/pytz/tests/test_tzinfo.py | 2 +- lib/pytz/tzinfo.py | 37 ++++++++++++++++++++++-- lib/pytz/zoneinfo/Africa/Cairo | Bin 9371 -> 1901 bytes lib/pytz/zoneinfo/Africa/Casablanca | Bin 558 -> 586 bytes lib/pytz/zoneinfo/Africa/Dar_es_Salaam | Bin 229 -> 229 bytes lib/pytz/zoneinfo/Africa/Juba | Bin 0 -> 669 bytes lib/pytz/zoneinfo/Africa/Kampala | Bin 269 -> 269 bytes lib/pytz/zoneinfo/Africa/Nairobi | Bin 269 -> 269 bytes lib/pytz/zoneinfo/America/Goose_Bay | Bin 3203 -> 3193 bytes lib/pytz/zoneinfo/America/Havana | Bin 2411 -> 2411 bytes lib/pytz/zoneinfo/America/Kralendijk | Bin 0 -> 194 bytes lib/pytz/zoneinfo/America/Lower_Princes | Bin 0 -> 194 bytes lib/pytz/zoneinfo/America/Metlakatla | Bin 2264 -> 717 bytes lib/pytz/zoneinfo/America/Resolute | Bin 8554 -> 1916 bytes lib/pytz/zoneinfo/America/Santiago | Bin 9227 -> 9227 bytes lib/pytz/zoneinfo/America/St_Johns | Bin 3648 -> 3638 bytes lib/pytz/zoneinfo/Asia/Anadyr | Bin 1931 -> 1183 bytes lib/pytz/zoneinfo/Asia/Gaza | Bin 2285 -> 1534 bytes lib/pytz/zoneinfo/Asia/Hebron | Bin 0 -> 1562 bytes lib/pytz/zoneinfo/Asia/Irkutsk | Bin 1967 -> 1203 bytes lib/pytz/zoneinfo/Asia/Istanbul | Bin 2721 -> 2721 bytes lib/pytz/zoneinfo/Asia/Kamchatka | Bin 1915 -> 1167 bytes lib/pytz/zoneinfo/Asia/Krasnoyarsk | Bin 1946 -> 1182 bytes lib/pytz/zoneinfo/Asia/Magadan | Bin 1947 -> 1183 bytes lib/pytz/zoneinfo/Asia/Novokuznetsk | Bin 1968 -> 1220 bytes lib/pytz/zoneinfo/Asia/Novosibirsk | Bin 1944 -> 1196 bytes lib/pytz/zoneinfo/Asia/Omsk | Bin 1946 -> 1182 bytes lib/pytz/zoneinfo/Asia/Sakhalin | Bin 1961 -> 1213 bytes lib/pytz/zoneinfo/Asia/Vladivostok | Bin 1961 -> 1197 bytes lib/pytz/zoneinfo/Asia/Yakutsk | Bin 1946 -> 1183 bytes lib/pytz/zoneinfo/Asia/Yekaterinburg | Bin 2000 -> 1252 bytes lib/pytz/zoneinfo/Atlantic/Stanley | Bin 1993 -> 1965 bytes lib/pytz/zoneinfo/Canada/Newfoundland | Bin 3648 -> 3638 bytes lib/pytz/zoneinfo/Chile/Continental | Bin 9227 -> 9227 bytes lib/pytz/zoneinfo/Chile/EasterIsland | Bin 8989 -> 8989 bytes lib/pytz/zoneinfo/Cuba | Bin 2411 -> 2411 bytes lib/pytz/zoneinfo/Egypt | Bin 9371 -> 1901 bytes lib/pytz/zoneinfo/Europe/Istanbul | Bin 2721 -> 2721 bytes lib/pytz/zoneinfo/Europe/Kaliningrad | Bin 2233 -> 1494 bytes lib/pytz/zoneinfo/Europe/Kiev | Bin 2057 -> 1316 bytes lib/pytz/zoneinfo/Europe/Minsk | Bin 2067 -> 1328 bytes lib/pytz/zoneinfo/Europe/Moscow | Bin 2226 -> 1464 bytes lib/pytz/zoneinfo/Europe/Samara | Bin 2078 -> 1330 bytes lib/pytz/zoneinfo/Europe/Simferopol | Bin 2113 -> 1372 bytes lib/pytz/zoneinfo/Europe/Uzhgorod | Bin 2077 -> 1336 bytes lib/pytz/zoneinfo/Europe/Volgograd | Bin 1982 -> 1234 bytes lib/pytz/zoneinfo/Europe/Zaporozhye | Bin 2085 -> 1344 bytes lib/pytz/zoneinfo/Pacific/Apia | Bin 268 -> 343 bytes lib/pytz/zoneinfo/Pacific/Easter | Bin 8989 -> 8989 bytes lib/pytz/zoneinfo/Turkey | Bin 2721 -> 2721 bytes lib/pytz/zoneinfo/W-SU | Bin 2226 -> 1464 bytes lib/pytz/zoneinfo/iso3166.tab | 10 +++++-- lib/pytz/zoneinfo/zone.tab | 12 +++++--- 54 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 lib/pytz/zoneinfo/Africa/Juba create mode 100644 lib/pytz/zoneinfo/America/Kralendijk create mode 100644 lib/pytz/zoneinfo/America/Lower_Princes create mode 100644 lib/pytz/zoneinfo/Asia/Hebron diff --git a/lib/pytz/__init__.py b/lib/pytz/__init__.py index f6bcf100d5a5..c4a3462740ae 100644 --- a/lib/pytz/__init__.py +++ b/lib/pytz/__init__.py @@ -9,7 +9,7 @@ ''' # The Olson database is updated several times a year. -OLSON_VERSION = '2011c' +OLSON_VERSION = '2011k' VERSION = OLSON_VERSION # Version format for a patch release - only one so far. #VERSION = OLSON_VERSION + '.2' @@ -544,6 +544,7 @@ def _test(): 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', + 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', @@ -658,10 +659,12 @@ def _test(): 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', + 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', + 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', @@ -772,6 +775,7 @@ def _test(): 'Asia/Dushanbe', 'Asia/Gaza', 'Asia/Harbin', + 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', @@ -1118,6 +1122,7 @@ def _test(): 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', + 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', @@ -1220,9 +1225,11 @@ def _test(): 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', + 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', + 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', @@ -1325,6 +1332,7 @@ def _test(): 'Asia/Dushanbe', 'Asia/Gaza', 'Asia/Harbin', + 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', diff --git a/lib/pytz/tests/test_tzinfo.py b/lib/pytz/tests/test_tzinfo.py index c4da6b58a07d..d8e5ddf33397 100644 --- a/lib/pytz/tests/test_tzinfo.py +++ b/lib/pytz/tests/test_tzinfo.py @@ -21,7 +21,7 @@ # I test for expected version to ensure the correct version of pytz is # actually being tested. -EXPECTED_VERSION='2011c' +EXPECTED_VERSION='2011k' fmt = '%Y-%m-%d %H:%M:%S %Z%z' diff --git a/lib/pytz/tzinfo.py b/lib/pytz/tzinfo.py index 2be4fb8425df..1bb57c250039 100644 --- a/lib/pytz/tzinfo.py +++ b/lib/pytz/tzinfo.py @@ -107,10 +107,33 @@ def localize(self, dt, is_dst=False): return dt.replace(tzinfo=self) def normalize(self, dt, is_dst=False): - '''Correct the timezone information on the given datetime''' + '''Correct the timezone information on the given datetime. + + This is normally a no-op, as StaticTzInfo timezones never have + ambiguous cases to correct: + + >>> from pytz import timezone + >>> gmt = timezone('GMT') + >>> isinstance(gmt, StaticTzInfo) + True + >>> dt = datetime(2011, 5, 8, 1, 2, 3, tzinfo=gmt) + >>> gmt.normalize(dt) is dt + True + + The supported method of converting between timezones is to use + datetime.astimezone(). Currently normalize() also works: + + >>> la = timezone('America/Los_Angeles') + >>> dt = la.localize(datetime(2011, 5, 7, 1, 2, 3)) + >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' + >>> gmt.normalize(dt).strftime(fmt) + '2011-05-07 08:02:03 GMT (+0000)' + ''' + if dt.tzinfo is self: + return dt if dt.tzinfo is None: raise ValueError('Naive time - no tzinfo set') - return dt.replace(tzinfo=self) + return dt.astimezone(self) def __repr__(self): return '' % (self.zone,) @@ -192,6 +215,16 @@ def normalize(self, dt): >>> before = eastern.normalize(before) >>> before.strftime(fmt) '2002-10-27 01:50:00 EDT (-0400)' + + The supported method of converting between timezones is to use + datetime.astimezone(). Currently, normalize() also works: + + >>> th = timezone('Asia/Bangkok') + >>> am = timezone('Europe/Amsterdam') + >>> dt = th.localize(datetime(2011, 5, 7, 1, 2, 3)) + >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' + >>> am.normalize(dt).strftime(fmt) + '2011-05-06 20:02:03 CEST (+0200)' ''' if dt.tzinfo is None: raise ValueError('Naive time - no tzinfo set') diff --git a/lib/pytz/zoneinfo/Africa/Cairo b/lib/pytz/zoneinfo/Africa/Cairo index 0b0f374d52c4b7f1a819ce489da42c97a94443ca..d3730dfbc1d2c88298e08b2362b9d6de80a0cc5a 100644 GIT binary patch delta 51 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 JN`qi&`CsM}iS_^h diff --git a/lib/pytz/zoneinfo/Africa/Casablanca b/lib/pytz/zoneinfo/Africa/Casablanca index 28ab6bcc93a383298ad6ce72bc0955020b406e17..77b88cffa389c297821a5faf9d379cc72bcfe68a 100644 GIT binary patch delta 60 zcmZ3-a*AbwGNbfFl^hP=={p+yOnN>{oFF;*Eu;0sM?mq(Y>XEK7=QpI38E1S907%A B6w3er delta 38 ocmX@bvW{hfGNa@~m7K{RfYjy~M#;$nj29prOE#`>*AN3P00R09jsO4v diff --git a/lib/pytz/zoneinfo/Africa/Dar_es_Salaam b/lib/pytz/zoneinfo/Africa/Dar_es_Salaam index 3b81079f23bdc794780e3eea8d5a9c13f88c0819..720d76c8300f94058c0948bd257bd6ee59c56070 100644 GIT binary patch delta 57 qcmaFL_>^&ixyThpCPoGZl`9NDpk=_o!oZ-mX5s<4iJ8tgq*MWi91Pw7 delta 57 qcmaFL_>^&ixyWNiCPoGZl`9NDpk=_o!oZ+5cj5uLiJ8tgq*MWkRt(+% diff --git a/lib/pytz/zoneinfo/Africa/Juba b/lib/pytz/zoneinfo/Africa/Juba new file mode 100644 index 0000000000000000000000000000000000000000..20284ff94b9bb40c738448781e8191b492d73305 GIT binary patch literal 669 zcmcK1%_~Gv7=ZCJpJuKZjIS}wQO8*c zZH?&g_J>54DmH4W5*vH9@d+b!-M&uvQ<79=>#1Jxp7wOT#3gl`(&?KQX*e6VjTbS~ zw7aP@`_HDia&B8z?@jA$(YDQ8n)c$d&h{Oej?|IOB{od%?M`>TA4r#-)A@&WDO^?U z=uXKGhkkh?N)=ArjaC0($lW~et0ZTYo?i&m^kkV=ph|9kuiy_EKHaLN;AfWuNP=WR z(ja+|L`Wti6_N`{hGeVh(jobfgh)mtC6W_KieyF7B6*R-NMSdZ>%@{J#Mv`&O#D}UAtG(eI9RQH)3Pu0` delta 29 dcmeBW>SdZ>&6qsVMv`&v#D}UAtG(eI9RQJm3Pu0` diff --git a/lib/pytz/zoneinfo/Africa/Nairobi b/lib/pytz/zoneinfo/Africa/Nairobi index 933be64c1cfbb326c6d3ac5dd27c4f197181c1d8..72676bb987d485a91f0cf7386ce9f104130f49d8 100644 GIT binary patch delta 29 dcmeBW>SdZ>&3I*^jU?lmi4RpLR(r!aIsl++3q}9{ delta 29 dcmeBW>SdZ>&G>ktjU?mTi4RpLR(r!aIsl;o3q}9{ diff --git a/lib/pytz/zoneinfo/America/Goose_Bay b/lib/pytz/zoneinfo/America/Goose_Bay index 49ee49fda6a44bc104d37aa64bfb80868df6e173..f2a981849d1d546ed15149f2684a77eb99cd53c2 100644 GIT binary patch delta 663 zcmW;JKS-NV6o&E72832D4izkjkVO|8%peFA?B*WCOxof z`wFj&#<%qCa<9C5v7-H%78xkd>R@YF1}|fpsS8QwIHE(PMH%{0q1lTg8U9*t6C)?* zW;FNIzW;e>#yYR;_}aGl(D=`O99uOLm3wxwZP-lS|J7X6isa6Ab-F4m(+BJN`8FnB z3ZHc5G$OO}T{^d4A@k{%n*Vk!yQxsPl*c9mP2S}GUye|^apy!rQDK}E>H zNo|ljxky2RSW7qw;t(wn;^5@V^0$CO!9~+WR6;de1{mR-8%lSE2Uh?@Qm;OYJ}XA_FT0 zHZH&SOlthX4u0D(LoI*o@Y13gsrqg|45iHI!_Rgs7Bgel+d5G#GI6x3lSNUP+(~Qt zDwL18Hk~>s6wTD>^p8u)bUfDV>R;JP+*X2hh@VXh0DZFkDWD;bSAgBlew&4f+AR8e&q2H?XUi{XB=V474 PdD<9>R7NU8|8e&Q3ohoQ diff --git a/lib/pytz/zoneinfo/America/Havana b/lib/pytz/zoneinfo/America/Havana index f34e63a3a25e3bb45d854af2e213b4a380633238..b519c0947008a2f2704901487fd714bcbf7caba9 100644 GIT binary patch delta 25 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 diff --git a/lib/pytz/zoneinfo/America/Santiago b/lib/pytz/zoneinfo/America/Santiago index 453d78741e3ef7aa91a8cbfc6c75c609138ce411..a8cafe6a88993c1e006477f10b9e7dfabcc5a43a 100644 GIT binary patch delta 37 ncmeD7==RufmXZA!yMbRo(}B%b7)@BYfgA=P01F7S|BwLy{s;_{ delta 37 ncmeD7==RufmXUq>qYZu&WgIqNVKiao267mH04yNP{zC=;9Hb4Q diff --git a/lib/pytz/zoneinfo/America/St_Johns b/lib/pytz/zoneinfo/America/St_Johns index f5d2855c5b80a7c4d3c79d0f22c24c32e1eda161..27416c3797327dd0451404b37be7e866b46af759 100644 GIT binary patch delta 681 zcmW;JKS)COxui>p2MQ^#4gX?iDz|ME|ISeb_+v=w-m zn>siq6$jFEI5a#MA#TqgM}r6=qGOau&-?i;uOH9$eSh|9cWb}iEY0p#N=IKzJJ&Ac z@q-%enmd#yx2`naotOB(q9$6_Bys%L>g{hve;nD~>zsMIU9iuJbEa=)%RVpknEuqV z9oT3!FWNVC@O?st?k{OF9g|dLQimVa$nbfart7aH{i{Jo%8D|w6V}m_JsJCS*T%;W zj?6@++`jx$Fq7S4LOD`e2qw{16I>g#<&QA>ojCNI)c_*M&r4dRDs&3~FmSNGSxGY9~RcnhchrxM~-%ABkwI*4j4)wSK>T)z%CKI<_@f zHwSSnwIJ#yLAr`a7pIWn(4_<{oIwym&vWkbyZ3JI^FNH{qd#jaG6(;pXCSIiH-F2s z_Od=-IFJ|jike7nN#goMds|ne*A#4D-KOdLmAC!nCG&E3$G$4`n}KZB4j#9gAsMx= zx9^+b?sa|hsZB6}jD|sm`*bN{yOsC`$UYM#m~oWbAuM$N%ig#J8I^@$M{d zCKvwNsl6RDojkQOpR;DRb< z;B_647GBo_X@Yb?+8})}LnK}Zg~URFA<>XZ8n zWPT7DiH!tDq9fsv_{adr2wpb?GKSX;f{fyI!yw}z0|h}t5U>(ISPEGSSq%MZ=i&NX cFMvKLbeWQ2+n{ diff --git a/lib/pytz/zoneinfo/Asia/Anadyr b/lib/pytz/zoneinfo/Asia/Anadyr index a49b1688a55250be04ace8c43c507342bbddef5f..2841a6376d9f9694ab79586449398d15a57d20a5 100644 GIT binary patch delta 164 zcmeC?pU*i#T#$=_fdPa;zyXN4HfpdiPGYiWWSv~fWTwf$u;Ks%i;r&zgQK4#m?_1OW&WL}D{)^A{!-Cb(HfM4QD0vP;*{hzkI3ixxuw delta 880 zcmb`_Pe_w-9LMozHOP%H1<^W0bQ`+nhB!|$b_jyfG`C^tT2{Jpv%a;I&05bTDUu*t zmq_p+VTbS!MW8ni>TP%s=@3Lv&_Uu$i6?`8?+3bhlAiJK`tclg_`H8pp7A5k>#9AL zW%2S1o7c18bGz*JcQtx`=&N*$?`UV@k6y@p(ys6qjh$W6cdq7ezqjDv6M*50Ly&9>PYsrXSKXF+4TTkjhg-_GR z4{G{{S8wco*PClwI{0}_Gc)D5W>>z+(BpZ%^=4IWr(dXyy_Gv1b8@%;spNtaa_@9j zhO2Ti5_qB`8kcc-5@M*(!Zls8jpdFD?09k?^64{rpN< zSGbgOAN{wKW$iWH``<420h=Y+57`je5!n*i6WJ8m71>>LQl2O=UNk(fwOBq|aX ziHihAA|s(4O>88%qlu1$$I%8;p941lxdq5gKyCy6ryJqpznsS#ZI8xIg+hj|n7^$l P&>RT*+d@HXZ1VmENi6%T diff --git a/lib/pytz/zoneinfo/Asia/Gaza b/lib/pytz/zoneinfo/Asia/Gaza index 043a06ce737149130cb1bb2608d1a46ad0301965..063ed39e8d8c3c2a85331edad4ed6797109c0097 100644 GIT binary patch delta 83 zcmaDW_>X&nGGoj}l{iKz!3&~wvGd&bAIfp4`@*k!Y j#@Nk?%=?&_1TRchWK-n^$}#`}Sj9*7*vU;C!Hir0$MGP| delta 802 zcmZ|MOGs2v9LMo{FAa%B<{~IMw&(?hb9IO*G-wf7KAOyQ)G23Do2G}A$7+1^@IpkJ z2$Wk?aEQT0xCt@|B4`R15x7W*Hc=sMYE%7P1W_Q}?|`f59uA+&S^mBY%f6M4Zm>ru zH>PYaEcG+L=NfViy78fF_H{p>jon;n_IIt&O#@+dpni)qx0R@a<;$fdI?1lbbr%Jb8dZJpRXJ@7o42VmRvL0&sX)pkBk|dPV1pJb!K>ckG}Zyn7VYMM=syp ztFH9!mXV=ymxVTY!8}&*F%dEo zG8HlxG8r-(G95Bs!C*pUMr2B4PGnMKR%BZA*q0wRMs`NFM)pQFM|MZHNA@omG(b8O z3{oIDkR(VJBu#*4(T4{bA)Sy`NH3%r(hX^c^g|jV9Sa66k)B9Xq$|?avRum|Fb_mV vLL;$};7D{o7E1cLQ1L%^A{1X;TieoF5!>oU-EEasHC2&{ShX8*qs4y#g@ydh diff --git a/lib/pytz/zoneinfo/Asia/Hebron b/lib/pytz/zoneinfo/Asia/Hebron new file mode 100644 index 0000000000000000000000000000000000000000..841779271fe09b6cc431c49c162960bde52a47f8 GIT binary patch literal 1562 zcmZ|PTS(JU0LStF++4a*U{F+4R$AF*wX9ZlGtGG`r`{}TiHgdd)I_;&+-$I?;C2u zy^~WSKLW3#KL&$V-#B-;@6$7@zb`BLYi6#UwD-758mO1ay=}r%yHHNN_ft(e+9fA9 z4vJK9)}C_knwVO2Q%>7dBGOX5GQG?%rd!$e4DS~;<9)N7+1{iw9ysk;Z#%^7x>Pym z&Q>+|s6+bB6{vZYb@u!{vy{K^k@UBWPz$!?i_Dw`u`n+~ESh>rEKc``fa9R~`eJ$M;s(34+^b5D z{IV>^-z&ip=W;oRy&MUNT=Bj&^vtqm`yKkvJ8_DB;l0beCYvWCW6y)ZkQEHB4_QTd z`qrAmxAY0cpU?>X5jUq&-@G3)sL#H;#p97VA(KL8g-i>X7cwzqX2{f#xgnE7W@psX zL*{4H6GUc+Oc9wQGD&2X$TX38A`?YsicA%mD>7MRwnjZ&WWGi{VPwY0l=-DFXQQ4p zGHYbo$h?t>BQr;)j?5jIJTiM^`pEo|1dt4jIt3&LBnc!7Bn>1FBoQPNBo!nVBpIX5 z21y6W2T2IY2uTUa$*7Y;vO>}_>b#J|kj#+Oklc{uknE83ko=GYkqnU(ksOgEkt~fm zO(ahwQ6y6&RU}s=StMH|U8By|s1yDtTW3O?E73LVmEd%9#rxLKGd+eDepIYpU2?49 dB=aQJaEd9}wXTGcDsWI>^<^W)ap#dZQMB!_0&qMG+%KL6~LEXlmK`kxe<1spX`WT?wLs z2G5Ey9$MHqp{*B@rP+?jmRrB@uy(sQa8%bl~tioaOT`ls;QKwb_i!ZgGrz z=xJOI53JIrTbty_(XG;)EtbUgGD$XkmX?aI(pvReT7NA_+qzHMwm2j0Kj*dM`5ig- zKCj0gO>5`eO+DdGY3go9yHdm2J#j;N;z{l8?3a@p>$Gq8K{@3lBwZPi^p{#W{W~OQ z-mI7Yr5}>Xue3<^Rk@zM{!s=VFYCGVOBuZOPKTO4=y2bho{zoI3;XWtNa&&FA_d7U zyE)5x8GCs3cFD6ZcYP^?$d-%bFU;lm-HW zlYyZ3#Oyb@!gmuYas&RM1X2Sjf>c4uAa#&JNF}6{)vtvVv-;JLa!5U-Ao>+u`yeGB z_~bfKQaMk^6rX#Fa;mXflPwTf=q+VgG_|XgiM9Z zg-mAkXG5m5`tub=OaNz~2vYz6 diff --git a/lib/pytz/zoneinfo/Asia/Kamchatka b/lib/pytz/zoneinfo/Asia/Kamchatka index 0c5a85dbb8cc8f5d1693fe434559a30c4ce660cd..090bf488957b2fa56419a25c2b378ea9b5ce366c 100644 GIT binary patch delta 114 zcmey(*UvdYT#%E2fdPa;zyXLkH)^mjPGYiWWSPv%ZotC8u;RdEYj#N{Muy3InB*~) bZ+^qX!i1?_m=RO9uYl&()jwjEC2c=di=){d;=)U(S^GjN9RG z@bV0r*ZsE0<+K_X^7K;gHwiu7)28Tuy`0?E=E|=cu3y(k{s)bg%xQG*mA2%qNz3O6 zz4CWfuC6BZ+Ez+hUp$c5N?fj6T@s(EksI+kxtWS-Td-K#V?pgG$d=CPLhW)FY2sX# zCVqJI*8X?Bz41%Czieo7J`>TNk2}))a9R6af08?iX_bjL(jQuqyPc0@!2e9{)%M6> z?tl#WCUr<7GMv+`!<$ty^82EWE}xbA8J~_luh7(Du8xm*)q3(r)4N&0%9E##@=KSw z{OOlYZ~DEn;P7PcemY$zEEZ%pWIJR(WJ6>}WJ_dEWK(2UTeB^)udUe_*%{dy*&EH~ zmVID&J}^EK0EvKvKw=<4kSItPBn}eD)QGNZ#r6%NKpO!kZ%lV#aWI2c$M7z!E~IVW#qa$|JZ{DX;u39F+<&)Vgbf+Omt)-ndMumLKX^`dgjRH|qTLPF+jBTi4r1+WqsDbw9YK zp4T(B=juc2y?@F2f@$lYEZW}wGd3_jrF2u;_VpIDf7MnS+|;cDkpX2^ZdB&e79IRk zqeD;E=d2WuL6DBWFJ=ck{0eXP#?h;)5McezaqQvvyq1?8LSkmS1$sM&pk) z`t7_G7F<{1<**gMOlZtn?c|G$PF>Dv{7$n@7n2GuL{*CUO(j*#pYvq>brHYH^U@<; zMXBs>_w)C@`jL5o=RTG})yk@=AXp)LcG0?C0S!J%?c8D2=k19^}{NG2o|k_$vqZ diff --git a/lib/pytz/zoneinfo/Asia/Magadan b/lib/pytz/zoneinfo/Asia/Magadan index 98674195508ab6407dc8e32f7c85e616c299c820..e3c76b57f59f590e82cae053dafd15140a0c6322 100644 GIT binary patch delta 73 zcmbQuKc91gGNZ#r6%NKpO!kZ%lV#aWI2c$M7*-r$b$&Jxr^A9EtCajXmoLs(+ K?jgE{MqB`P-4JpB delta 807 zcmbu+&r8#B9LMo}Q(}%N4^ns#2|Yxvxnb%lhKGJYt}M4<>YQmhbu-^(6Sda&k|c#t z&5Id$5Ya=}A`$fF!Mu$Q5*-2w3Oan}Wd=%2FAyR9OZ>vhgm zm|e0iS?LdZmivh9G9P7-I!Ga;5>g7Og%m@oA>|xRJ*1$csfd(BY9d9^RJEOhv^t*7 diff --git a/lib/pytz/zoneinfo/Asia/Novokuznetsk b/lib/pytz/zoneinfo/Asia/Novokuznetsk index 76bace90fb08d5ae7de8bbe571bccf8d516626bc..f78c1f88bf659dc263bc62a3eccd1d77f1c9507f 100644 GIT binary patch delta 123 zcmdnMe}r>_xF9zJ0|N+yfCCV7Z`5F6oWx|$$TeAm-G+sMA*o>UdL}gS8 z(cog?Acs~2ZC^-4MASi)h6ZsF2WilnqJHm3+?t~2c<%M^4A1a+|JKr1uFhp&_qbdx zZmyWQJ*)YtmR+^nEY;crp({kw7(?} z&kps`r=&FRebL7Yo7(d6t+v|B8lIolw(zXB#}}oeY*0H}rlc#UPP8@qw4)gt85|iM86M5} zw(~#%UQhukfz&{XAXShuNFAgQQVA*LXlfzFkZMRd>|3(4oCgZ>f{I8LP`a%1CKPQyVGnXsRRSalF9f=Yb=D90TMiAjbj!(~-#MTNjt7syYN37 z8WM+=3Wr0|B5?bH5D`%hQaCh(OE`#wW=q)b{e!mff#1D;JlyiUKNnCYH z{Gm7AtxCuCrrv!1Q9Iwh)GjZh@u&0J9beR2sTb07bzFNpAIt6HChe;lkbd8oB#LSz z@v~6|{sd+4LqvwY2V{69zePsgU(`GE$1?gVN5>L7GX7{^CmN3QZr_&P3xCteYwJ37 zZbOryFOoc1*6F~SOmC%hWnuj6|E^OVdj%}HvtRUXWAiMLoO>9A`~R-QfGZXiA3 zmZu+P75@8t$N686H^1GSGah+}f`mchAc2rbNGK#05)6rEHQ|tWRud43h=fF9q6zBR z3sreRS)?vf7^#euMrtF)k?Kf!q`uWGfUJNlfvkbUD_*|6unI3&23ZGL2w4eP3Rw$T z3|S3X4q4A?7DQIGnkA7nakkV<%7s~xX_0x6iSe|VOZbC*vg_(&(M#p#w>cWDjfAd* N!ok|IFkX&i{{@Q>;&A`~ diff --git a/lib/pytz/zoneinfo/Asia/Omsk b/lib/pytz/zoneinfo/Asia/Omsk index f47337f62f5a5a3e2d2bf540a6599d61a6eb2b22..a3dbb4bb1c5ad68e460fde645e3303b804932535 100644 GIT binary patch delta 72 zcmbQmKaX>QGNZ#r6%NKpO!kZ%lV#aWI2c$M7?KJYIVW#qa$|JZ{DX;u39F14$ delta 806 zcmbu+%S)6|7{~EBBJnDrEfQDeLQ&9h8W}BIh|fY>NaJnB`(?~a<7M(vji@=kD{~VP zOq&XFQ!xt>tq9sZAV@@%izr&Oh&Iu}T69@Sp6~k)wCIKNehz2(`##9Imw&s&BzH?4 zTX`}4E*J>Qo8 zcY8Xp`AP?$J<=g}OJjG|bvU-6mr@U9q+w1+2XD$)afgoAPsn9wR^mm?693vR6GwiT zd>N9dPkAz(Dd?2MeuZ9H|06SxPwH&^qs*-x>U`TTy*hrN*McAPdeak4o_e7Rfw!{o z~zLlFv+Lijg#g2?8h?5I>^=Yh diff --git a/lib/pytz/zoneinfo/Asia/Sakhalin b/lib/pytz/zoneinfo/Asia/Sakhalin index b1fda9ac7ca3f25eba81b3f9fb4e765335069819..f5105a363cfd6639e28553307f40229e09de5967 100644 GIT binary patch delta 117 zcmZ33x*Utm(e cRKJ;#nTH9B1`$TEnP7q|*wH&g*U*p)07`xm5C8xG delta 801 zcma)(OGs2<7>3^?6^;zuh@v1Af)cdph-7UfgItN1nsKtcm1a|oQ&~1RQ+B=<(V~dx z2-Qkjgh&@k!kxGhX;Uu5RjzYo5z?j>{m)tErU(9cKMu2co|)L>mM6Qm#U$|{?_TUf zWvLgmyxFJL+;?kxv{5Hd$8{?EP06}drJ6peedmJGRj-x)HKmRn^VYF6rZa1kc6K_i z&c%n;HU8APKjy3_7`EQARy)_5w)3Nd>N|GS`ny|np?r@G)cd+vdPJGM+m%__txJE_ zbb0=_u6$imc4E0*gL6ME_h436UoG0T%u8LrKW#&8Gj?O(x!v@~ZMd;$x3=E1eBzn% zKl*KCb3r2ujaFFgRPp@*yZyOdcV3*(=(}>=E$mnD*i-0x4PnEE_&;w`IONrZZ@r4} zi&wGU$5ctYB)|?%052?V06%~uz!TsK@C7)F)_DWmMeF6421K*S286Rn2gC#Nqjdp*2tWuR24p9K<>(*^2VsCXEP;SXETLFpu>@m@#uAPt zUbHSCOT=hhNS2sTta3#;s0x$?>H>w~e=1i-|Kz7EdAuogu*P?jOjS46CJrb3>gF1s IJycuv7l9(mZ~y=R diff --git a/lib/pytz/zoneinfo/Asia/Vladivostok b/lib/pytz/zoneinfo/Asia/Vladivostok index 514489555fb29d07c65db45a44725e5c7ba38fe5..1cae6d0fd9880e7de01c294cbecf820dde247f9f 100644 GIT binary patch delta 73 zcmZ3b$(PY#^M57|CajWLoLpf( Kjv=~+hFk!YToD=o delta 764 zcma)(O-NK>7)GC46O17i5m7<7FbYz}EB3cB3365blsZ|aQ>jfgj`pL2GiCQ}5iOF4 zu28M4MTlt8AMT`8NSlxlSGlg0Mu?jt`p#Xr?!d=+`IhH-RWz~bQJFXRc6Zzh8m7wB zm|eD}kqtU|x>%<&-_?9@NiD}et99F)lI4?1uD(;-)>&&?7}c4T2|GKTQ~Ue_J2&>& zIzD8rGZ?VcXrrA^CGEm+uP)Xewyur_b(ik6o*G}5;)j&pwMFS4J9PQaimuH5*41wd z%8W0zs`t|`%ijN}zL)dXpMIfh_onT7(~RBdd1^QPF&n5W*x=^7mP117<&>^M6b{R8s(==VCY15{a)rQU=Uywo% zQg2unyBLA#!K_G%ZXF_oP&!mzqC<2Dgz{jW68t>B|A2?S@cBMIe2%Z@g7=|M{dVTX z36JeGtyIg|;XQ4hJ1pnUmr6_ekHqW$Ng}!>ttH>2t@4eu{e3I#M?P!&m&ekv`&uu& zx+9&R=Cy0#ktWy1^`bMa-4Bv_sk={mCUer;7}3kgF6lc~q5Y>D-E$#xpDWMjx>MJoBdDpR_LkT4$o>v?rS!< zDA}D69X&K7qaWis_G?gb&+Bx2Gb$7FEi$=UB~xRy;@tB|K43TILxn{Lo*}!|V|y)Y zO0B~DvK_HAFMr#f0>?5R%OL9@3n42ZOCf6^iy^Ba%ek8MkOf`MipY}4n#iJPR(0G9 z)AGQ)$i&FZ$kfQ($mGcE$n?nkNCH=r0ZD=6K$2j3$=P-5zO#LRXU!N$F~GB1th|AcdbxF9bB0|N+yfCCWoZq#65oWx|$$TQi3-GhaJAtYgP9lHh}BS--pVAHr+ VoSB6QQ>PfJPOeB-?+{%xE&v>b4|)Iq delta 815 zcma*kO-NKx7>Dt>YN9fwEmR1jg%FYBIH7|ggtQO?vtD(yvC^@09L@2obnt7uix9#> zg0V#)gqtvkD3ulx2|qX z9G)R_+;7jNSoYOdU2?70ukyHBYOmKxU9?c@OG_khB~u!5bEL80k2LP?Nih4k2EVRL z)6Q?b@$S9c{PJ0EJ^!Z7ON-iKFKcM#skVk@^>%zg?o>=@Tl0*xpJ~HJ$RU7s$=-Hklyp3iTP=xUkvJUk}7FHUJ+V4l29jsi@ zp{$P@^KM9N`=t(__#ngjNJqBjWb{psj;%eA@n=&Ke;t;Ik*L_yRg&;n6^W4L{^z77 zqSocavUT=w24{=^O|zJjl#*ogH~SzPAv+;kA$uX4A-f^lA^SO+4Uruk&6dcX$fn4y zXtuST3j_0lk&&U1v5~=%(UIYi@sR*X1SEu`iGc(`q99?gd*04>E(GEQk&sYGEF>5b z4GD+DLjocZk&uoiCKA-qL`A~lXo0EAg~CW>q%=|+k5c?RA09p#O_kMwLcjT~4|r;d Py?(FHQ**(GMa3BhjM(jY diff --git a/lib/pytz/zoneinfo/Atlantic/Stanley b/lib/pytz/zoneinfo/Atlantic/Stanley index 4cb6097cbeb0e9abef40c8b640dd82863f50273b..d7da723f7ec8215c55ce3fcf827deabc0dd49203 100644 GIT binary patch delta 37 tcmX@fzm|W3GGpaN6&c3O9*mxhlP5D}Fjj5;!(_v>*@IP#X>tO4CII6E3vU1b delta 57 zcmZ3>f0BQKGGp~d6&Xf$-&MsI{E~$?+cSDGPHtz)VyxNxiOGhE8zjyE1Ryz0R%xcm HPVCtL7i)COxui>p2MQ^#4gX?iDz|ME|ISeb_+v=w-m zn>siq6$jFEI5a#MA#TqgM}r6=qGOau&-?i;uOH9$eSh|9cWb}iEY0p#N=IKzJJ&Ac z@q-%enmd#yx2`naotOB(q9$6_Bys%L>g{hve;nD~>zsMIU9iuJbEa=)%RVpknEuqV z9oT3!FWNVC@O?st?k{OF9g|dLQimVa$nbfart7aH{i{Jo%8D|w6V}m_JsJCS*T%;W zj?6@++`jx$Fq7S4LOD`e2qw{16I>g#<&QA>ojCNI)c_*M&r4dRDs&3~FmSNGSxGY9~RcnhchrxM~-%ABkwI*4j4)wSK>T)z%CKI<_@f zHwSSnwIJ#yLAr`a7pIWn(4_<{oIwym&vWkbyZ3JI^FNH{qd#jaG6(;pXCSIiH-F2s z_Od=-IFJ|jike7nN#goMds|ne*A#4D-KOdLmAC!nCG&E3$G$4`n}KZB4j#9gAsMx= zx9^+b?sa|hsZB6}jD|sm`*bN{yOsC`$UYM#m~oWbAuM$N%ig#J8I^@$M{d zCKvwNsl6RDojkQOpR;DRb< z;B_647GBo_X@Yb?+8})}LnK}Zg~URFA<>XZ8n zWPT7DiH!tDq9fsv_{adr2wpb?GKSX;f{fyI!yw}z0|h}t5U>(ISPEGSSq%MZ=i&NX cFMvKLbeWQ2+n{ diff --git a/lib/pytz/zoneinfo/Chile/Continental b/lib/pytz/zoneinfo/Chile/Continental index 453d78741e3ef7aa91a8cbfc6c75c609138ce411..a8cafe6a88993c1e006477f10b9e7dfabcc5a43a 100644 GIT binary patch delta 37 ncmeD7==RufmXZA!yMbRo(}B%b7)@BYfgA=P01F7S|BwLy{s;_{ delta 37 ncmeD7==RufmXUq>qYZu&WgIqNVKiao267mH04yNP{zC=;9Hb4Q diff --git a/lib/pytz/zoneinfo/Chile/EasterIsland b/lib/pytz/zoneinfo/Chile/EasterIsland index 4a3cf389c390148b4293a85c15f1cc9e11f84abc..1f7bae5373b932a230b0922e7a76f373bb70596b 100644 GIT binary patch delta 37 ncmbR1HrH*#L`L>w>;`@TO$Rp5V4Tmw4dgHY0a(C^?Y0a6{(cO$ delta 37 ncmbR1HrH*#L`L@Mk2d&ClyTTRgK<6!H;}^s1YiLtw%alQ9U2Y9 diff --git a/lib/pytz/zoneinfo/Cuba b/lib/pytz/zoneinfo/Cuba index f34e63a3a25e3bb45d854af2e213b4a380633238..b519c0947008a2f2704901487fd714bcbf7caba9 100644 GIT binary patch delta 25 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 JN`qi&`CsM}iS_^h diff --git a/lib/pytz/zoneinfo/Europe/Istanbul b/lib/pytz/zoneinfo/Europe/Istanbul index a7c16e76d1743ccdf5f8b7e6f8ef761e23456cb1..864099556bc9875b7e9258af6c3b221d84c68eae 100644 GIT binary patch delta 25 ecmZ1|x=?fjBNKD~-3gmnnD()P8AsXgFaZF0fC={i delta 25 dcmZ1|x=?fjBNKC9kHBUYrhTkn#!>b=OaNz~2vYz6 diff --git a/lib/pytz/zoneinfo/Europe/Kaliningrad b/lib/pytz/zoneinfo/Europe/Kaliningrad index 98ebee9aad004b739691cfc3aa49201a975c26b4..fa6bab8620370007ccb2a308c44b84ba8b596286 100644 GIT binary patch delta 159 zcmdlfc#V6q1G6%xF9QPuKM>1p)G=Y4Y{KNj$TxW#QwSRagO&k<)MPGZDPcF)5TF7^ zMj!zsK{VrJLuNHm0U#fQLBJ1)L2RYXIm`u2lUvw*8Tlu(b3{SRk(->zA*T&72h|{u NUSz-pRHSRn1porG64L+x delta 842 zcmZ9JOGs2<7>2(yIaX$-i$R#kqD3tlXEcp25Vbk2Je4_KveYR}tuZf^qNbe>gDAT5 zN7QasWsp%MLYrt+f)FjFHeFUl5kv&hrl9}%SK!8@oG%YD_nH> zX39&Oo6-165zoVgXD6mQvLUw0e&X19dpwst?ThqBLSCT>qKcslq70%9q7I@Dq7b6d z(W->#bhJt#S{Z5~dYM)1{@;1#1+E#s8O|BrA?_LeAq^NEAT1z09BmUw7f2gOADEpC z1NT5DMk`1!Ml(n^Mmt77MngtNMoUIdN86Oq)zP+P^o66FY-C1gNNh-ONOb7Jf65EY wx@h5|%QxlGW^*-Kw!?mJL3w_*a0R}fF5m3?b?HPd~-Cf750urV-b88FCAKF%a3=jIv$ zQpv~&#*82u27nx(d3-=F2!nt#5QErin>Cpwm?pnub7JJ3oXGA6F;HppdUhpssDW5b O1PU^80Tt*Pa{&Omo)T^V delta 869 zcmajdO-NKx7>Dt>auFLUUV~xWG=go4ZaSt?izJF}wa6)((X7$z%a3vz(`uTr>;^$! zM7(f=a1kVkxCkkAGG=JT@e_El{?a7*{+dNjQ$r}c5j`wFC?`iwo^LZ zt7JLPqhIyd)@O3O>y4hM9+RHtY3;3e zqJ67X`@Y=M{=dU|@^wj1eaz^mdd)@b$)?1j;J!0^cUNB|@P5(0^V1VN%8VURdh69|cfghFEBz*La6 z7ozcia7a8PAQBM?iNr*LB2kgBNL;H4j6}AY&`4|?S#OGSp*m6?sgJw?Xy1Yz?)LDC uTfXGE?xw;IZp~)?_@CFnJd65%X2V9`PiMTAhT5juWL<;TQlGT9#^@r{rR5#~ diff --git a/lib/pytz/zoneinfo/Europe/Minsk b/lib/pytz/zoneinfo/Europe/Minsk index 6a45115571f2e2d4fec5ab364bc02d01e056930e..ba9971c6313838b0bd33ca5c8703d22a4b7d6bf1 100644 GIT binary patch delta 170 zcmbO%uz_oWxF`<;0|N+yfC~_V*h(991Q;g^FgY`FPwr%LVq;*?GGLIKe2`sE#?3VZ zq>_;lgnwG?wF%yiG#g~Z)#|rj% zmp@GgUUXo>=)s;=IdrpMYa532aCd{&ZEn`={;gVHwo`M-)tZ}6Xk&bfG`{oo$gfp$ zbo#R%oBb`vM;A%c)JJKKK1s`+7t-4DN=^*F*ONQOrLF0?wy(V*r?!u3N9iN&TysS` zzg*X@Kka(@bzaYW*sJ-mOucr$Y?HIs(%SPdl-{nDdhY5v>8nl2`HrP>p)!z*;aBMo ze#$_4i4OdjmBAHrIyf^eh3{{)IC)Ply?v}h_osCD$!)z{xU12vJ~i9C-KN(I{<+0Q zyAo3sr9j!!& zNJlFZB9tK&B9>XX?*BW(e84ipG{ZK-IK(=`Jj6bu0Hgw>grltiDFUeiDFgFkQN}$e z#Ha)*#i#`-#;C?9$Ee3B$f(FD>1b;*iaOe=jIyw}!RBQohGd4MhUA7WdCuQsM*P@+ r&NmPIeP+&2)bPg(?RhUO7KYi4Rbg0{O=hZ7n^G0YOl1X3SI7PW>qFJt diff --git a/lib/pytz/zoneinfo/Europe/Moscow b/lib/pytz/zoneinfo/Europe/Moscow index cf001a555feac1deb3f67ed9a6c0fb5ebfce8c96..6068f8b9e584385eb1096c4f9603da74aa3e4095 100644 GIT binary patch delta 72 zcmdlaxPyCwGNaE%6${46229?JJd-yv`EW4sGB8*;FbYnN=1`lg&1}x-yE&P;fN63y ZyALDpAJjiSbkzCBl!3jJTziw2 z>mTc7Fdu7^q1UZ?W3E!N%O~~bz&?@thjlnvp||>f>+M>jBMl$)PU$Bd4gZo+eWhb1 z?`7=W6CMBhQYKdBb#gN&Q%lP-{cKid#^=OY>=U=kG`cwx_{S}D^CliJL7(qf#8>S8 zF==!6c}Ia1I6m)C1gV0QLFyodkV;4?q!v=l>QzI^S-pBlL8Ky561|#^eUOw7vLb1b zyhvgsGm;v~jU-31Bk8SPeq;h<24o5x%sVmrU=lu<1(^n!2bl<&37HC+3z-a=4VljB z&4)~A^=3q-#EBYjPabTF?22rQ?2C5exBKI6slV{Qx7^@~ delta 878 zcmb`_J4{ny7>Dt;IFO216A3PaFnOWYLL-_GQWzLWEK*x4AeFo2T3&7qS5F);m>6TM z3l6d&gE63lurNxT(18#VaB^XRyaQ@9A>n(@MB+v~&FSyt3}^U1-$(ab&&%8k9*4uh z&6P5@XX#3&)2e#dT=ts05mDU{mWVu^XrN$mGUsmr;lbz8rr z{^wb3SlN~boBP^0cc}5@ulms1(x%r-+T66NEmIrP8hoQ|@kMFRpVW@BSMn%xRuXx` zlGvM&&ZC%geThr=_uJC55UiEn^{DpE6i9NuMEg54M4n#KfpESKcKp?$BBu^l?&^r= zho*dgB&DBqG{+ma_54E&$;%z72t}_4%zq^64F!BR NeSUAK$d5My?qdk7_nrU% diff --git a/lib/pytz/zoneinfo/Europe/Simferopol b/lib/pytz/zoneinfo/Europe/Simferopol index ebb63b4450b0ac035c09d064ab515eb016850ff1..08efa510178f2dcf5ef4d6ebb9e5f4bae7cc355d 100644 GIT binary patch delta 170 zcmX>oaEEJx_+$-c9!@s~1_oXrR@$f|!8loh$(503@?<6tHUr;t8^QoG TR2^z4R#Sn3j9fqky2e}p=n)j6 delta 882 zcmbW#J!n%=7>DtDO9s8E@>U4xVhXw_#x}K9J6Lq^R);29lh$fl>sLRtG1{sn>4$d^ zM2g4@SC9^Zf|L$YlvW)aL=kb2;!;%5#Ysd&P$>?A=Q-daP9_|FCpVDc|Ky$bL^K|& zbR37nYs?((iF?UvH^|(%rF)7+*?Z-pw(XzPeT81lZY^l8b(glsGun|{uN_M%?TocZ z=j&B^;Kw>S_~5(d7d`2^StZ@`pXE^SO?s{^$l;zvIWqA{k8Xb`$GTtY@tP^=ZJyP> zW%spzwQB#z>pJjjSWmnt>&f>y9h}LxYvK8joVwhs#p$e^9;neXml|cLZJP}D#pP^$ zLeBX=<$RSRBXuzy`T9XhE0?tN>Y0?kyw%aW(=xX3NXMt1>cs2~y->cb!PP*+ovt4S zuJ`wecu_AJPP)6pH*TWZY~Z@~z@L}v>e}Vw=FpEOpv!1O7VbNNHL@uQVywy6htZ_C6Ss)QLCwnl(m|=NMRh^U@~(dHIf@ij$}uh zz7%QM60Q87clbDxiL|D34*!lOe()cE5A)3P{oKY)zMst{(+#zawW+#>WV$|OZ=1c} D7kk`W diff --git a/lib/pytz/zoneinfo/Europe/Uzhgorod b/lib/pytz/zoneinfo/Europe/Uzhgorod index 7032ab9b34f97640d1ef631dc4cc790abeeed606..00584c1fca222e39b8e11198c7e7df60cf4eeaf5 100644 GIT binary patch delta 170 zcmbO$u!C!Y_+%+&9!?hq1_oXrmfNT!z&Kfe$(fO7awn4q8v}!u0fW@!i%e27ZmuB= z42+CGMIeF^%mQ*ifN?S-v!o~=kOjgZ;0nYbw$f&OW(}sv|Jhs^c_&x0`*DE{l=JZo VVE`Gb4mK2rsUSPJfC_Ytxd5^16q5h| delta 834 zcmZ9}O-NK>6o>J9Wr!L~j=?Y@q>DC2la89yLTORAS~ycSS2HIw&98DA(@LBvyFm~U z5eIG%E~J7G7a>Jog1d-l5knh^7HwKZLmB==G1TBubuIFfuYUGBz?eGCDFmGCmRjiGYN#nixnBBnlD+#}Rcu7A1z?{30JJtOOkd-!|9HtX0c&HFf=KD!w*!C=?>1 z>9SqC*&ZU4BD&bE@MIz)VR`D(rT8Cu!9ei&4jlv!4m|UD80Pf-ZDzhd^&~&n=ka(r zJmcp0R?b;oyYb}%X-b5(`B7ZLR}*q&uufX4nk7VPU7hdr=G?m63O(2E*s|O%n$@0~r_!5|lz8Eo z#J|r--+om3*J5&Kw^{~Lp;j6E7}25mVo5Ar)ZxB#k%t935-!rwo_~6`!mDGKzv_6- zH=PLV$%KB;$&+7Xa^r@+LQCJjN5C`cG24iX57goHw3A;DZtG$fp>iH8J4A|fHt#I)TD zMfpHgq%2YwDU4J`N+Y$A;z)I*ysN2?EP$+lEP(?lJLFzigb%EOEQ73rEQG9tEQPFv zEQYLxEaz(0Ll$&3D3zH(VBGV%C;&Bs~@YDY%E80{aIUh9dmWaP07^n=C M`x`3Cu`HN%0CV5>q5uE@ diff --git a/lib/pytz/zoneinfo/Europe/Zaporozhye b/lib/pytz/zoneinfo/Europe/Zaporozhye index 2ccf8998b24f3493e68670c5d08c51ad759bf7f6..899fa88b63116211b2d2c8793772bbc6538106d3 100644 GIT binary patch delta 170 zcmZ1~aDZ!q_+&X|9!?hq1_oXrR@$f|z&Kfe$(fO7awn4q8v}!u0fXG+i%fEIZmuCf z1q_UgV9W@jVF1XPATG)WhKA(VYU9W2w`U;udGA^Du4p_~ z={OFDSJ52qi3dq>gUr2Ky1P)2Jy$Mh`@YM%H$R}+&3X0Pc4|jFqn*k1+PRq0uGkLg zdb>)yf7HnS$KN%#5S0TrtEA`AXXy>TN#C`y9PC?=LsOsh@YW~N-}73JR8Px5>zocQ zo!6l?szV>I>+r8}J^HGs$KLxoGMnqr{L3*peyLRpGg%oOuGSM5n`ErLMaBo?ax|mLU{UDPo7j^Q@3n_kir=|Nda;E%L&rUzrsks|^u6Rd-tAU0s?zV8$ zmA}rC@VvV#EW3%-=3jSRd*IK@b#>jclKHg4oV5>|D{3kNzGEL`BV;FJD`YQZGh{bp zJ7hnr*$~;$YPLl7L^efsMYC;SFAU5BMn;B4#zqE5Mn{H6#zz7m5s(m869Wl?L_xyf z$ZU|a7XtBsNJuCo77`4JhJ-`nApwzyNJy)Ri3GKps7P2WZ7_AYP#CFf8OEkNG8&j_8op5Tlj4@kQ4+N0m2}_0mSSRXK5+}O#tyhrhsXn eNgx_(8Vk@gwuz_Z(2WD~85p?2gF|!;jky5#{V0*C2xKoo4qKt)^fnh@f0|P|03_DkNaEPHH7Xbb`67&E7 diff --git a/lib/pytz/zoneinfo/Pacific/Easter b/lib/pytz/zoneinfo/Pacific/Easter index 4a3cf389c390148b4293a85c15f1cc9e11f84abc..1f7bae5373b932a230b0922e7a76f373bb70596b 100644 GIT binary patch delta 37 ncmbR1HrH*#L`L>w>;`@TO$Rp5V4Tmw4dgHY0a(C^?Y0a6{(cO$ delta 37 ncmbR1HrH*#L`L@Mk2d&ClyTTRgK<6!H;}^s1YiLtw%alQ9U2Y9 diff --git a/lib/pytz/zoneinfo/Turkey b/lib/pytz/zoneinfo/Turkey index a7c16e76d1743ccdf5f8b7e6f8ef761e23456cb1..864099556bc9875b7e9258af6c3b221d84c68eae 100644 GIT binary patch delta 25 ecmZ1|x=?fjBNKD~-3gmnnD()P8AsXgFaZF0fC={i delta 25 dcmZ1|x=?fjBNKC9kHBUYrhTkn#!>b=OaNz~2vYz6 diff --git a/lib/pytz/zoneinfo/W-SU b/lib/pytz/zoneinfo/W-SU index cf001a555feac1deb3f67ed9a6c0fb5ebfce8c96..6068f8b9e584385eb1096c4f9603da74aa3e4095 100644 GIT binary patch delta 72 zcmdlaxPyCwGNaE%6${46229?JJd-yv`EW4sGB8*;FbYnN=1`lg&1}x-yE&P;fN63y ZyALDpAJjiSbkzCBl!3jJTziw2 z>mTc7Fdu7^q1UZ?W3E!N%O~~bz&?@thjlnvp||>f>+M>jBMl$)PU$Bd4gZo+eWhb1 z?`7=W6CMBhQYKdBb#gN&Q%lP-{cKid#^=OY>=U=kG`cwx_{S}D^CliJL7(qf#8>S8 zF==!6c}Ia1I6m)C1gV0QLFyodkV;4?q!v=l>QzI^S-pBlL8Ky561|#^eUOw7vLb1b zyhvgsGm;v~jU-31Bk8SPeq;h<24o5x%sVmrU=lu<1(^n!2bl<&37HC+3z-a=4VljB z&4)~A^=3q-#EBYjPabTF?22rQ?2C5exBKI6slV{Qx7^ -# @(#)iso3166.tab 8.6 +# @(#)iso3166.tab 8.11 # This file is in the public domain, so clarified as of # 2009-05-17 by Arthur David Olson. # ISO 3166 alpha-2 country codes @@ -21,6 +21,9 @@ # # Lines beginning with `#' are comments. # +# From Arthur David Olson (2011-08-17): +# Resynchronized today with the ISO 3166 site (adding SS for South Sudan). +# #country- #code country name AD Andorra @@ -30,7 +33,6 @@ AG Antigua & Barbuda AI Anguilla AL Albania AM Armenia -AN Netherlands Antilles AO Angola AQ Antarctica AR Argentina @@ -53,6 +55,7 @@ BL St Barthelemy BM Bermuda BN Brunei BO Bolivia +BQ Bonaire Sint Eustatius & Saba BR Brazil BS Bahamas BT Bhutan @@ -75,6 +78,7 @@ CO Colombia CR Costa Rica CU Cuba CV Cape Verde +CW Curacao CX Christmas Island CY Cyprus CZ Czech Republic @@ -229,8 +233,10 @@ SM San Marino SN Senegal SO Somalia SR Suriname +SS South Sudan ST Sao Tome & Principe SV El Salvador +SX Sint Maarten SY Syria SZ Swaziland TC Turks & Caicos Is diff --git a/lib/pytz/zoneinfo/zone.tab b/lib/pytz/zoneinfo/zone.tab index 03a93a43585c..f197b948dd97 100644 --- a/lib/pytz/zoneinfo/zone.tab +++ b/lib/pytz/zoneinfo/zone.tab @@ -1,5 +1,5 @@ #
-# @(#)zone.tab	8.41
+# @(#)zone.tab	8.49
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 #
@@ -32,7 +32,6 @@ AG	+1703-06148	America/Antigua
 AI	+1812-06304	America/Anguilla
 AL	+4120+01950	Europe/Tirane
 AM	+4011+04430	Asia/Yerevan
-AN	+1211-06900	America/Curacao
 AO	-0848+01314	Africa/Luanda
 AQ	-7750+16636	Antarctica/McMurdo	McMurdo Station, Ross Island
 AQ	-9000+00000	Antarctica/South_Pole	Amundsen-Scott Station, South Pole
@@ -87,6 +86,7 @@ BL	+1753-06251	America/St_Barthelemy
 BM	+3217-06446	Atlantic/Bermuda
 BN	+0456+11455	Asia/Brunei
 BO	-1630-06809	America/La_Paz
+BQ	+120903-0681636	America/Kralendijk
 BR	-0351-03225	America/Noronha	Atlantic islands
 BR	-0127-04829	America/Belem	Amapa, E Para
 BR	-0343-03830	America/Fortaleza	NE Brazil (MA, PI, CE, RN, PB)
@@ -120,7 +120,7 @@ CA	+4901-08816	America/Nipigon	Eastern Time - Ontario & Quebec - places that did
 CA	+4823-08915	America/Thunder_Bay	Eastern Time - Thunder Bay, Ontario
 CA	+6344-06828	America/Iqaluit	Eastern Time - east Nunavut - most locations
 CA	+6608-06544	America/Pangnirtung	Eastern Time - Pangnirtung, Nunavut
-CA	+744144-0944945	America/Resolute	Eastern Standard Time - Resolute, Nunavut
+CA	+744144-0944945	America/Resolute	Central Standard Time - Resolute, Nunavut
 CA	+484531-0913718	America/Atikokan	Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
 CA	+624900-0920459	America/Rankin_Inlet	Central Time - central Nunavut
 CA	+4953-09709	America/Winnipeg	Central Time - Manitoba & west Ontario
@@ -155,6 +155,7 @@ CO	+0436-07405	America/Bogota
 CR	+0956-08405	America/Costa_Rica
 CU	+2308-08222	America/Havana
 CV	+1455-02331	Atlantic/Cape_Verde
+CW	+1211-06900	America/Curacao
 CX	-1025+10543	Indian/Christmas
 CY	+3510+03322	Asia/Nicosia
 CZ	+5005+01426	Europe/Prague
@@ -318,7 +319,8 @@ PL	+5215+02100	Europe/Warsaw
 PM	+4703-05620	America/Miquelon
 PN	-2504-13005	Pacific/Pitcairn
 PR	+182806-0660622	America/Puerto_Rico
-PS	+3130+03428	Asia/Gaza
+PS	+3130+03428	Asia/Gaza	Gaza Strip
+PS	+313200+0350542	Asia/Hebron	West Bank
 PT	+3843-00908	Europe/Lisbon	mainland
 PT	+3238-01654	Atlantic/Madeira	Madeira Islands
 PT	+3744-02540	Atlantic/Azores	Azores
@@ -360,8 +362,10 @@ SM	+4355+01228	Europe/San_Marino
 SN	+1440-01726	Africa/Dakar
 SO	+0204+04522	Africa/Mogadishu
 SR	+0550-05510	America/Paramaribo
+SS	+0451+03136	Africa/Juba
 ST	+0020+00644	Africa/Sao_Tome
 SV	+1342-08912	America/El_Salvador
+SX	+180305-0630250	America/Lower_Princes
 SY	+3330+03618	Asia/Damascus
 SZ	-2618+03106	Africa/Mbabane
 TC	+2128-07108	America/Grand_Turk

From c459dc5d07bba454b1ac5d97a6b21048e9f01a64 Mon Sep 17 00:00:00 2001
From: Paul Ivanov 
Date: Mon, 24 Oct 2011 23:02:43 -0700
Subject: [PATCH 7/8] added support for \operatorname (closes #553)

I started with the version of the related code written by Freddie
Witherden and committed to (the now abandoned?) mathtex spinoff project
which didn't makes its way back to matplotlib. However, that code:
http://code.google.com/p/mathtex/source/detail?r=75 allowed only to
lower- and upper-case letters to be used inside of \operatorname.

I have improved it to allow the usage of any simple character -
including the insertion of spaces - such that $\operator{arg\,max}$
actually inserts a space between arg max
---
 CHANGELOG                  |  4 ++++
 lib/matplotlib/mathtext.py | 19 +++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/CHANGELOG b/CHANGELOG
index 9f5c700bafaa..1369718afb92 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+2011-10-25 added support for \operatorname to mathtext,
+           including the ability to insert spaces, such as
+           $\operatorname{arg\,max}$ - PI
+
 2011-08-18 Change api of Axes.get_tightbbox and add an optional
            keyword parameter *call_axes_locator*. - JJL
 
diff --git a/lib/matplotlib/mathtext.py b/lib/matplotlib/mathtext.py
index f9dd615d8e41..df849b491c17 100644
--- a/lib/matplotlib/mathtext.py
+++ b/lib/matplotlib/mathtext.py
@@ -2269,6 +2269,12 @@ def __init__(self):
                     + (group | Error("Expected \overline{value}"))
                     ).setParseAction(self.overline).setName("overline")
 
+        operatorname = Group(
+                        Suppress(Literal(r"\operatorname"))
+                     + ((start_group + ZeroOrMore(simple)  + end_group)
+                        | Error("Expected \operatorname{value}"))
+                     ).setParseAction(self.operatorname).setName("operatorname")
+
         placeable   <<(function
                      ^ (c_over_c | symbol)
                      ^ accent
@@ -2279,6 +2285,7 @@ def __init__(self):
                      ^ genfrac
                      ^ sqrt
                      ^ overline
+                     ^ operatorname
                      )
 
         simple      <<(space
@@ -2578,6 +2585,18 @@ def function(self, s, loc, toks):
         hlist.function_name = toks[0]
         return hlist
 
+    def operatorname(self, s, loc, toks):
+        self.push_state()
+        state = self.get_state()
+        state.font = 'rm'
+        # Change the font of Chars, but leave Kerns alone
+        for c in toks[0]:
+            if isinstance(c,Char):
+                c.font = 'rm'
+                c._update_metrics()
+        self.pop_state()
+        return Hlist(toks[0])
+
     def start_group(self, s, loc, toks):
         self.push_state()
         # Deal with LaTeX-style font tokens

From 9fbeb22b0321969f524e9fdcd9a2b8f7e1e37f46 Mon Sep 17 00:00:00 2001
From: Michael Droettboom 
Date: Wed, 26 Oct 2011 11:00:09 -0400
Subject: [PATCH 8/8] Major overhaul of the mathtext parser to get better error
 messages out of it.  Has the side benefit of being faster.

---
 lib/matplotlib/mathtext.py                    | 441 ++++++++---------
 .../test_mathtext/mathtext_cm_66.pdf          | Bin 0 -> 6727 bytes
 .../test_mathtext/mathtext_cm_66.png          | Bin 0 -> 1359 bytes
 .../test_mathtext/mathtext_cm_66.svg          | 203 ++++++++
 .../test_mathtext/mathtext_cm_67.pdf          | Bin 0 -> 13707 bytes
 .../test_mathtext/mathtext_cm_67.png          | Bin 0 -> 3097 bytes
 .../test_mathtext/mathtext_cm_67.svg          | 459 ++++++++++++++++++
 .../test_mathtext/mathtext_stix_66.pdf        | Bin 0 -> 6293 bytes
 .../test_mathtext/mathtext_stix_66.png        | Bin 0 -> 1342 bytes
 .../test_mathtext/mathtext_stix_66.svg        | 155 ++++++
 .../test_mathtext/mathtext_stix_67.pdf        | Bin 0 -> 10634 bytes
 .../test_mathtext/mathtext_stix_67.png        | Bin 0 -> 2769 bytes
 .../test_mathtext/mathtext_stix_67.svg        | 321 ++++++++++++
 .../test_mathtext/mathtext_stixsans_66.pdf    | Bin 0 -> 4482 bytes
 .../test_mathtext/mathtext_stixsans_66.png    | Bin 0 -> 1310 bytes
 .../test_mathtext/mathtext_stixsans_66.svg    | 117 +++++
 .../test_mathtext/mathtext_stixsans_67.pdf    | Bin 0 -> 10213 bytes
 .../test_mathtext/mathtext_stixsans_67.png    | Bin 0 -> 2664 bytes
 .../test_mathtext/mathtext_stixsans_67.svg    | 254 ++++++++++
 lib/matplotlib/tests/test_mathtext.py         |  39 +-
 20 files changed, 1768 insertions(+), 221 deletions(-)
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.pdf
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.png
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.svg
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_67.pdf
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_67.png
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_67.svg
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.pdf
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.png
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.svg
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.pdf
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.png
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.svg
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.pdf
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.png
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.svg
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_67.pdf
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_67.png
 create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_67.svg

diff --git a/lib/matplotlib/mathtext.py b/lib/matplotlib/mathtext.py
index df849b491c17..6b93032f4dba 100644
--- a/lib/matplotlib/mathtext.py
+++ b/lib/matplotlib/mathtext.py
@@ -33,7 +33,7 @@
 from matplotlib.pyparsing import Combine, Group, Optional, Forward, \
     Literal, OneOrMore, ZeroOrMore, ParseException, Empty, \
     ParseResults, Suppress, oneOf, StringEnd, ParseFatalException, \
-    FollowedBy, Regex, ParserElement
+    FollowedBy, Regex, ParserElement, QuotedString, ParseBaseException
 # Enable packrat parsing
 ParserElement.enablePackrat()
 
@@ -2046,7 +2046,7 @@ def Error(msg):
     Helper class to raise parser errors.
     """
     def raise_error(s, loc, toks):
-        raise ParseFatalException(msg + "\n" + s)
+        raise ParseFatalException(s, loc, msg)
 
     empty = Empty()
     empty.setParseAction(raise_error)
@@ -2123,219 +2123,209 @@ class Parser(object):
       liminf sin cos exp limsup sinh cosh gcd ln sup cot hom log tan
       coth inf max tanh""".split())
 
-    _ambiDelim = set(r"""
+    _ambi_delim = set(r"""
       | \| / \backslash \uparrow \downarrow \updownarrow \Uparrow
       \Downarrow \Updownarrow .""".split())
 
-    _leftDelim = set(r"( [ { < \lfloor \langle \lceil".split())
+    _left_delim = set(r"( [ { < \lfloor \langle \lceil".split())
 
-    _rightDelim = set(r") ] } > \rfloor \rangle \rceil".split())
+    _right_delim = set(r") ] } > \rfloor \rangle \rceil".split())
 
     def __init__(self):
         # All forward declarations are here
-        font = Forward().setParseAction(self.font).setName("font")
-        latexfont = Forward()
-        subsuper = Forward().setParseAction(self.subsuperscript).setName("subsuper")
-        placeable = Forward().setName("placeable")
-        simple = Forward().setName("simple")
-        autoDelim = Forward().setParseAction(self.auto_sized_delimiter)
-        self._expression = Forward().setParseAction(self.finish).setName("finish")
-
-        float        = Regex(r"[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)")
-
-        lbrace       = Literal('{').suppress()
-        rbrace       = Literal('}').suppress()
-        start_group  = (Optional(latexfont) - lbrace)
-        start_group.setParseAction(self.start_group)
-        end_group    = rbrace.copy()
-        end_group.setParseAction(self.end_group)
-
-        bslash       = Literal('\\')
-
-        accent       = oneOf(self._accent_map.keys() +
-                             list(self._wide_accents))
-
-        function     = oneOf(list(self._function_names))
-
-        fontname     = oneOf(list(self._fontnames))
-        latex2efont  = oneOf(['math' + x for x in self._fontnames])
-
-        space        =(FollowedBy(bslash)
-                     + oneOf([r'\ ',
-                              r'\/',
-                              r'\,',
-                              r'\;',
-                              r'\quad',
-                              r'\qquad',
-                              r'\!'])
-                      ).setParseAction(self.space).setName('space')
-
-        customspace  =(Literal(r'\hspace')
-                     - (( lbrace
-                        - float
-                        - rbrace
-                       ) | Error(r"Expected \hspace{n}"))
-                     ).setParseAction(self.customspace).setName('customspace')
-
-        unicode_range = u"\U00000080-\U0001ffff"
-        symbol       =(Regex(UR"([a-zA-Z0-9 +\-*/<>=:,.;!\?&'@()\[\]|%s])|(\\[%%${}\[\]_|])" % unicode_range)
-                     | (Combine(
-                         bslash
-                       + oneOf(tex2uni.keys())
-                       ) + FollowedBy(Regex("[^a-zA-Z]")))
-                     ).setParseAction(self.symbol).leaveWhitespace()
-
-        c_over_c     =(Suppress(bslash)
-                     + oneOf(self._char_over_chars.keys())
-                     ).setParseAction(self.char_over_chars)
-
-        accent       = Group(
-                         Suppress(bslash)
-                       + accent
-                       - placeable
-                     ).setParseAction(self.accent).setName("accent")
-
-        function     =(Suppress(bslash)
-                     + function
-                     ).setParseAction(self.function).setName("function")
-
-        group        = Group(
-                         start_group
-                       + ZeroOrMore(
-                           autoDelim
-                         ^ simple)
-                       - end_group
-                     ).setParseAction(self.group).setName("group")
-
-        font        <<(Suppress(bslash)
-                     + fontname)
-
-        latexfont   <<(Suppress(bslash)
-                     + latex2efont)
-
-        frac         = Group(
-                       Suppress(Literal(r"\frac"))
-                     + ((group + group)
-                        | Error(r"Expected \frac{num}{den}"))
-                     ).setParseAction(self.frac).setName("frac")
-
-        stackrel     = Group(
-                       Suppress(Literal(r"\stackrel"))
-                     + ((group + group)
-                        | Error(r"Expected \stackrel{num}{den}"))
-                     ).setParseAction(self.stackrel).setName("stackrel")
-
-
-        binom        = Group(
-                       Suppress(Literal(r"\binom"))
-                     + ((group + group)
-                        | Error(r"Expected \binom{num}{den}"))
-                     ).setParseAction(self.binom).setName("binom")
-
-        ambiDelim    = oneOf(list(self._ambiDelim))
-        leftDelim    = oneOf(list(self._leftDelim))
-        rightDelim   = oneOf(list(self._rightDelim))
-        rightDelimSafe = oneOf(list(self._rightDelim - set(['}'])))
-        genfrac      = Group(
-                       Suppress(Literal(r"\genfrac"))
-                     + ((Suppress(Literal('{')) +
-                         oneOf(list(self._ambiDelim | self._leftDelim | set(['']))) +
-                         Suppress(Literal('}')) +
-                         Suppress(Literal('{')) +
-                         oneOf(list(self._ambiDelim |
-                                    (self._rightDelim - set(['}'])) |
-                                    set(['', r'\}']))) +
-                         Suppress(Literal('}')) +
-                         Suppress(Literal('{')) +
-                         Regex("[0-9]*(\.?[0-9]*)?") +
-                         Suppress(Literal('}')) +
-                         group + group + group)
-                        | Error(r"Expected \genfrac{ldelim}{rdelim}{rulesize}{style}{num}{den}"))
-                     ).setParseAction(self.genfrac).setName("genfrac")
-
-        sqrt         = Group(
-                       Suppress(Literal(r"\sqrt"))
-                     + Optional(
-                         Suppress(Literal("["))
-                       - Regex("[0-9]+")
-                       - Suppress(Literal("]")),
-                         default = None
-                       )
-                     + (group | Error("Expected \sqrt{value}"))
-                     ).setParseAction(self.sqrt).setName("sqrt")
-
-        overline    = Group(
-                      Suppress(Literal(r"\overline"))
-                    + (group | Error("Expected \overline{value}"))
-                    ).setParseAction(self.overline).setName("overline")
-
-        operatorname = Group(
-                        Suppress(Literal(r"\operatorname"))
-                     + ((start_group + ZeroOrMore(simple)  + end_group)
-                        | Error("Expected \operatorname{value}"))
-                     ).setParseAction(self.operatorname).setName("operatorname")
-
-        placeable   <<(function
-                     ^ (c_over_c | symbol)
-                     ^ accent
-                     ^ group
-                     ^ frac
-                     ^ stackrel
-                     ^ binom
-                     ^ genfrac
-                     ^ sqrt
-                     ^ overline
-                     ^ operatorname
-                     )
-
-        simple      <<(space
-                     | customspace
-                     | font
-                     | subsuper
-                     )
-
-        subsuperop   = oneOf(["_", "^"])
-
-        subsuper    << Group(
-                         ( Optional(placeable)
-                         + OneOrMore(
-                             subsuperop
+        accent           = Forward()
+        ambi_delim       = Forward()
+        auto_delim       = Forward()
+        binom            = Forward()
+        bslash           = Forward()
+        c_over_c         = Forward()
+        customspace      = Forward()
+        end_group        = Forward()
+        float_literal    = Forward()
+        font             = Forward()
+        frac             = Forward()
+        function         = Forward()
+        genfrac          = Forward()
+        group            = Forward()
+        int_literal      = Forward()
+        latexfont        = Forward()
+        lbracket         = Forward()
+        left_delim       = Forward()
+        lbrace           = Forward()
+        main             = Forward()
+        math             = Forward()
+        math_string      = Forward()
+        non_math         = Forward()
+        operatorname     = Forward()
+        overline         = Forward()
+        placeable        = Forward()
+        rbrace           = Forward()
+        rbracket         = Forward()
+        required_group   = Forward()
+        right_delim      = Forward()
+        right_delim_safe = Forward()
+        simple           = Forward()
+        simple_group     = Forward()
+        single_symbol    = Forward()
+        space            = Forward()
+        sqrt             = Forward()
+        stackrel         = Forward()
+        start_group      = Forward()
+        subsuper         = Forward()
+        subsuperop       = Forward()
+        symbol           = Forward()
+        symbol_name      = Forward()
+        token            = Forward()
+        unknown_symbol   = Forward()
+
+        # Set names on everything -- very useful for debugging
+        for key, val in locals().items():
+            if key != 'self':
+                val.setName(key)
+
+        float_literal << Regex(r"[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)")
+        int_literal   << Regex("[-+]?[0-9]+")
+
+        lbrace        << Literal('{').suppress()
+        rbrace        << Literal('}').suppress()
+        lbracket      << Literal('[').suppress()
+        rbracket      << Literal(']').suppress()
+        bslash        << Literal('\\')
+
+        space         << oneOf(self._space_widths.keys())
+        customspace   << (Suppress(Literal(r'\hspace'))
+                          - ((lbrace + float_literal + rbrace)
+                            | Error(r"Expected \hspace{n}")))
+
+        unicode_range =  u"\U00000080-\U0001ffff"
+        single_symbol << Regex(UR"([a-zA-Z0-9 +\-*/<>=:,.;!\?&'@()\[\]|%s])|(\\[%%${}\[\]_|])" %
+                               unicode_range)
+        symbol_name   << (Combine(bslash + oneOf(tex2uni.keys())) +
+                          FollowedBy(Regex("[^A-Za-z]").leaveWhitespace() | StringEnd()))
+        symbol        << (single_symbol | symbol_name).leaveWhitespace()
+
+        c_over_c      << Suppress(bslash) + oneOf(self._char_over_chars.keys())
+
+        accent        << Group(
+                             Suppress(bslash)
+                           + oneOf(self._accent_map.keys() + list(self._wide_accents))
                            - placeable
-                           )
                          )
-                       | placeable
-                     )
-
-        autoDelim   <<(Suppress(Literal(r"\left"))
-                     + ((leftDelim | ambiDelim) | Error("Expected a delimiter"))
-                     + Group(
-                         OneOrMore(
-                            autoDelim
-                          ^ simple))
-                     + Suppress(Literal(r"\right"))
-                     + ((rightDelim | ambiDelim) | Error("Expected a delimiter"))
-                     )
-
-        math         = OneOrMore(
-                       autoDelim
-                     ^ simple
-                     ).setParseAction(self.math).setName("math")
-
-        math_delim   = ~bslash + Literal('$')
-
-        non_math     = Regex(r"(?:(?:\\[$])|[^$])*"
-                     ).setParseAction(self.non_math).setName("non_math").leaveWhitespace()
-
-        self._expression << (
-            non_math
-          + ZeroOrMore(
-                Suppress(math_delim)
-              + Optional(math)
-              + (Suppress(math_delim)
-                 | Error("Expected end of math '$'"))
-              + non_math
-            )
-          ) + StringEnd()
+
+        function      << Suppress(bslash) + oneOf(list(self._function_names))
+
+        start_group   << Optional(latexfont) + lbrace
+        end_group     << rbrace.copy()
+        simple_group  << Group(lbrace + ZeroOrMore(token) + rbrace)
+        required_group<< Group(lbrace + OneOrMore(token) + rbrace)
+        group         << Group(start_group + ZeroOrMore(token) + end_group)
+
+        font          << Suppress(bslash) + oneOf(list(self._fontnames))
+        latexfont     << Suppress(bslash) + oneOf(['math' + x for x in self._fontnames])
+
+        frac          << Group(
+                             Suppress(Literal(r"\frac"))
+                           - ((required_group + required_group) | Error(r"Expected \frac{num}{den}"))
+                         )
+
+        stackrel      << Group(
+                             Suppress(Literal(r"\stackrel"))
+                           - ((required_group + required_group) | Error(r"Expected \stackrel{num}{den}"))
+                         )
+
+        binom         << Group(
+                             Suppress(Literal(r"\binom"))
+                           - ((required_group + required_group) | Error(r"Expected \binom{num}{den}"))
+                         )
+
+        ambi_delim    << oneOf(list(self._ambi_delim))
+        left_delim    << oneOf(list(self._left_delim))
+        right_delim   << oneOf(list(self._right_delim))
+        right_delim_safe << oneOf(list(self._right_delim - set(['}'])) + [r'\}'])
+
+        genfrac       << Group(
+                             Suppress(Literal(r"\genfrac"))
+                           - (((lbrace + Optional(ambi_delim | left_delim, default='') + rbrace)
+                           +   (lbrace + Optional(ambi_delim | right_delim_safe, default='') + rbrace)
+                           +   (lbrace + float_literal + rbrace)
+                           +   simple_group + required_group + required_group)
+                           | Error(r"Expected \genfrac{ldelim}{rdelim}{rulesize}{style}{num}{den}"))
+                         )
+
+        sqrt          << Group(
+                             Suppress(Literal(r"\sqrt"))
+                           - ((Optional(lbracket + int_literal + rbracket, default=None)
+                              + required_group)
+                           | Error("Expected \sqrt{value}"))
+                         )
+
+        overline      << Group(
+                             Suppress(Literal(r"\overline"))
+                           - (required_group | Error("Expected \overline{value}"))
+                         )
+
+        unknown_symbol<< Combine(bslash + Regex("[A-Za-z]*"))
+
+        operatorname  << Group(
+                             Suppress(Literal(r"\operatorname"))
+                           - ((lbrace + ZeroOrMore(simple | unknown_symbol) + rbrace)
+                              | Error("Expected \operatorname{value}"))
+                         )
+
+        placeable     << ( symbol # Must be first
+                         | c_over_c
+                         | function
+                         | accent
+                         | group
+                         | frac
+                         | stackrel
+                         | binom
+                         | genfrac
+                         | sqrt
+                         | overline
+                         | operatorname
+                         )
+
+        simple        << ( space
+                         | customspace
+                         | font
+                         | subsuper
+                         )
+
+        subsuperop    << oneOf(["_", "^"])
+
+        subsuper      << Group(
+                             (Optional(placeable) + OneOrMore(subsuperop - placeable))
+                           | placeable
+                         )
+
+        token         << ( simple
+                         | auto_delim
+                         | unknown_symbol # Must be last
+                         )
+
+        auto_delim    << (Suppress(Literal(r"\left"))
+                          - ((left_delim | ambi_delim) | Error("Expected a delimiter"))
+                          + Group(ZeroOrMore(simple | auto_delim))
+                          + Suppress(Literal(r"\right"))
+                          - ((right_delim | ambi_delim) | Error("Expected a delimiter"))
+                         )
+
+        math          << OneOrMore(token)
+
+        math_string   << QuotedString('$', '\\', unquoteResults=False)
+
+        non_math      << Regex(r"(?:(?:\\[$])|[^$])*").leaveWhitespace()
+
+        main          << (non_math + ZeroOrMore(math_string + non_math)) + StringEnd()
+
+        # Set actions
+        for key, val in locals().items():
+            if hasattr(self, key):
+                val.setParseAction(getattr(self, key))
+
+        self._expression = main
+        self._math_expression = math
 
         self.clear()
 
@@ -2357,7 +2347,7 @@ def parse(self, s, fonts_object, fontsize, dpi):
         self._state_stack = [self.State(fonts_object, 'default', 'rm', fontsize, dpi)]
         try:
             self._expression.parseString(s)
-        except ParseException, err:
+        except ParseBaseException, err:
             raise ValueError("\n".join([
                         "",
                         err.line,
@@ -2418,11 +2408,15 @@ def push_state(self):
         """
         self._state_stack.append(self.get_state().copy())
 
-    def finish(self, s, loc, toks):
+    def main(self, s, loc, toks):
         #~ print "finish", toks
         self._expr = Hlist(toks)
         return [self._expr]
 
+    def math_string(self, s, loc, toks):
+        # print "math_string", toks[0][1:-1]
+        return self._math_expression.parseString(toks[0][1:-1])
+
     def math(self, s, loc, toks):
         #~ print "math", toks
         hlist = Hlist(toks)
@@ -2465,7 +2459,7 @@ def space(self, s, loc, toks):
         return [box]
 
     def customspace(self, s, loc, toks):
-        return [self._make_space(float(toks[1]))]
+        return [self._make_space(float(toks[0]))]
 
     def symbol(self, s, loc, toks):
         # print "symbol", toks
@@ -2475,7 +2469,7 @@ def symbol(self, s, loc, toks):
         try:
             char = Char(c, self.get_state())
         except ValueError:
-            raise ParseFatalException("Unknown symbol: %s" % c)
+            raise ParseFatalException(s, loc, "Unknown symbol: %s" % c)
 
         if c in self._spaced_symbols:
             return [Hlist( [self._make_space(0.2),
@@ -2488,6 +2482,11 @@ def symbol(self, s, loc, toks):
                            do_kern = False)]
         return [char]
 
+    def unknown_symbol(self, s, loc, toks):
+        # print "symbol", toks
+        c = toks[0]
+        raise ParseFatalException(s, loc, "Unknown symbol: %s" % c)
+
     _char_over_chars = {
         # The first 2 entires in the tuple are (font, char, sizescale) for
         # the two symbols under and over.  The third element is the space
@@ -2495,7 +2494,7 @@ def symbol(self, s, loc, toks):
         r'AA' : (  ('rm', 'A', 1.0), (None, '\circ', 0.5), 0.0),
     }
 
-    def char_over_chars(self, s, loc, toks):
+    def c_over_c(self, s, loc, toks):
         sym = toks[0]
         state = self.get_state()
         thickness = state.font_output.get_underline_thickness(
@@ -2591,7 +2590,7 @@ def operatorname(self, s, loc, toks):
         state.font = 'rm'
         # Change the font of Chars, but leave Kerns alone
         for c in toks[0]:
-            if isinstance(c,Char):
+            if isinstance(c, Char):
                 c.font = 'rm'
                 c._update_metrics()
         self.pop_state()
@@ -2607,6 +2606,7 @@ def start_group(self, s, loc, toks):
     def group(self, s, loc, toks):
         grp = Hlist(toks[0])
         return [grp]
+    required_group = simple_group = group
 
     def end_group(self, s, loc, toks):
         self.pop_state()
@@ -2635,9 +2635,9 @@ def is_slanted(self, nucleus):
             return nucleus.is_slanted()
         return False
 
-    def subsuperscript(self, s, loc, toks):
+    def subsuper(self, s, loc, toks):
         assert(len(toks)==1)
-        # print 'subsuperscript', toks
+        # print 'subsuper', toks
 
         nucleus = None
         sub = None
@@ -2900,8 +2900,12 @@ def overline(self, s, loc, toks):
 
     def _auto_sized_delimiter(self, front, middle, back):
         state = self.get_state()
-        height = max([x.height for x in middle])
-        depth = max([x.depth for x in middle])
+        if len(middle):
+            height = max([x.height for x in middle])
+            depth = max([x.depth for x in middle])
+        else:
+            height = 0
+            depth = 0
         parts = []
         # \left. and \right. aren't supposed to produce any symbols
         if front != '.':
@@ -2912,9 +2916,8 @@ def _auto_sized_delimiter(self, front, middle, back):
         hlist = Hlist(parts)
         return hlist
 
-
-    def auto_sized_delimiter(self, s, loc, toks):
-        #~ print "auto_sized_delimiter", toks
+    def auto_delim(self, s, loc, toks):
+        #~ print "auto_delim", toks
         front, middle, back = toks
 
         return self._auto_sized_delimiter(front, middle.asList(), back)
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..49f5ce3ebeac17df2e1d9371385fffd2b4c22b2a
GIT binary patch
literal 6727
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
Jxp=#>{tZ&-B31wZ

literal 0
HcmV?d00001

diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.png
new file mode 100644
index 0000000000000000000000000000000000000000..32f24662bc7f1c0d2183412af0c4c4eca597968c
GIT binary patch
literal 1359
zcmd5+jWgS49RIOSQR=MQN-Wbmv>n5g2p5_TJ<>#VUY14zAvB8^L=pbYN)j(
z%o2hiYfM;3Bm|jS0~>2@21Xt0_c1UX%Lu|mn*+%+|E>_MEz-gW84zT1<48@Op&M_5
zGg?f@*U>q=^;g(J8P#z}TPzu5g`F%3<_-?~z)Fjx+~ME&+yeJx3je%=t;08#mxm)u
zIozP}>sBsLDA#d+)m7Bl7d#pF!|4*9^(-_k#|GRCn9vCKqJxbP)PHz<9D+W!wT3R){`ZDGV$ue(s-ez_7dO;BE32zl7!1az?y=E?z4vc|
zXJ%$zDiq}n4Gp-O08#svc78}DW}u8lBSDm&G%IFQed6|Q^t2>zmqXv)sBdm|%~%>6
z(J0zf8mgjJGx;
zbQ>ymls|MpZoVG4?}J3zjI{RG-e@#o)xDdOkk#Fp{&_oTzLdWoIoqSMD4z$?xKgQ<
zqV7hdrlwY)vVY(#fO~}AoI6YM+S-kc4IIzUE2;s9;e6(oc4mkTZ&CHs*Sq|D5`Kjf
zjmIw=^cqq2yZEgQb(JthaqtF{kG}m!KagwaWA7!IhX+OL7>-_}AitG#gg_xE3_38a@5oH)G%U}=iJ@RMNb8qVc;4JhP;D){{+ch
zW77J{L?c0*m+O%r=G~c>E>1Q@CqG1(DACnOh7_f@-&?
zzUo|??L&dRa59+;iuc&-rj#!fBIsLdBctV>-sua&s_slTBy|=S9v&V`B%c>
zyvee$YE*XmKX1pKF-#^CAXI+hv+8F^w$U}zw;IhT2;3EAF(Sv?%?}kvZ0htC0&vV;@&Et;

literal 0
HcmV?d00001

diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.svg
new file mode 100644
index 000000000000..7b61d5effb40
--- /dev/null
+++ b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.svg
@@ -0,0 +1,203 @@
+
+
+
+
+ 
+  
+ 
+ 
+  
+   
+  
+  
+   
+   
+    
+    
+    
+    
+   
+   
+    
+    
+    
+    
+   
+  
+ 
+
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_67.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_67.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..8f931ae304c95e57f43867bf39fb6381a39a7381
GIT binary patch
literal 13707
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

literal 0
HcmV?d00001

diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_67.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_67.svg
new file mode 100644
index 000000000000..f12093272eff
--- /dev/null
+++ b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_67.svg
@@ -0,0 +1,459 @@
+
+
+
+
+ 
+  
+ 
+ 
+  
+   
+  
+  
+   
+   
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+   
+   
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+   
+  
+ 
+
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..2c8fc05e1fa42791f30b1e39fd149b9de89d1ab6
GIT binary patch
literal 6293
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
jEXrtv!;Ra~x-3o$4-B1H5b8viRO

literal 0
HcmV?d00001

diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6c6344552a4427255b25a7b2c590f941e5136eb
GIT binary patch
literal 1342
zcmeAS@N?(olHy`uVBq!ia0y~yVB!U`y*b!`yFLNoKk6ba8o
zIw^?@ryMzSNasd{S8$lwsho(;-qtDYy{t1O{GVz{FY2^8l5*;Dg~yKntBpv!Mp?%loa_o|g)tFJOJ{1N{z@s62+;lI2KGedxj2?K-cz%!oA
zKU~X@ka2fkt#$ain3L`N@2rxmmrmwA6Fb
z@9*!QA8clS`TF(g*Vor?E`EN_#MD&P^WOgY`P$*@QvUq-7`ZXYweH`anU|OQFJHS>
zx3{K9gx}xZo_=w0@#gaP_x4nO*8{5XUmA3>jaPb8?eA|_u3dX}VxscP
z_wUbNTN{1((j|~x%Y#;?+}@V^^4+_0GYpf99vo==^6eX+i?hGK|GRs8XHQo5e|EH6
z+_K_BLfqb}sWXk!yVxWSX05uKRl0+p@y~nPnjZ$;;`)B^@$p(yy(T?5)XKeb{rdAa
zHYS72zr8(w`O>ATo<(0@UEQ*E>(a%Gm95L(oOp6_a`DGUM|I-&+3elBm)T$I-_xI;
zpU*VS4*T}@_VjPxzWL0tD2#Z<^3UeqWd`LdTeGhl)&Kj`nBXx9$V@vqNp)xC=QN-b
zo}HU(z2W+;TeAuuAA1V)lB9iIjamM^Iiah=Qm?Ozl{C-0vjC_`(l~9&!i9=cy<80r
z+;7Qf5PWracX{QP7lC#E|NYIczQ3>5d(xdfmBk6US5^c@Zb)#f`}1R>ie=T83@abzc5`!jbKT?X>*Imm^N)|eFW|@cXKDwV#KLQ9A}9CD+b`R_yZXYfUTO17
zckawldHL#<)Ryl*K0Y=vH($Pfy}ti^yR+}^?gmEY+&wivjbvqIo7dTvy@{Bn8$Ase
z%lt284#c+uU6yrmk!xmF)~RE?(wBi2&zm<-#;Qa^Sk33esj1qa5IsFzpFie5FaW=N
z|DFys?dOMw&V2HAb5t_(^8Bi+t6#l-9lSQ|^ViqcOG-%>4ZGzrMaU2ByF>v(5EQO-(J!-^ILo_39EZSe@JX
zQcq9Q-C6Q7XqoTqX)2cW|7yOyzdwI-`uSzsx0~-SdwXhS@N%QdPfviBrQY3D8o8q&
zahcD|Nmo~gr@y?k^stSt!Ic_Y#(L)b`}=&Ioe$UF`Tgf-@xJ>1^E@Z3@vaG7ef7$f
zD^Gxa`uXMMUE#_5)?+J@XhCx;oex7Ib6`
c3dRX}rzRWA%Mu?C0}DU~Pgg&ebxsLQ0GWe%vH$=8

literal 0
HcmV?d00001

diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.svg
new file mode 100644
index 000000000000..d6de7e425c6f
--- /dev/null
+++ b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.svg
@@ -0,0 +1,155 @@
+
+
+
+
+ 
+  
+ 
+ 
+  
+   
+  
+  
+   
+   
+    
+    
+    
+    
+   
+   
+    
+    
+    
+    
+   
+  
+ 
+
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..4b1893c6b4cd5b49985492dd27aa3d3d8e0d8555
GIT binary patch
literal 10634
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

literal 0
HcmV?d00001

diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.png
new file mode 100644
index 0000000000000000000000000000000000000000..71d7922248d8fb4cdf700acbe5f47761cb4f6f28
GIT binary patch
literal 2769
zcmcImi9eL<9)D4YGdVX~B+??&k>zHIEG5z~sKyw^l3mBxvP44D$+48>Fxi>x!we>S
zLza`{Ff_=%gk&enWQk$MeY*GaxqrdE@8?~f_xXI@_j!Kb<@fu=+%YqP2}lY+5ClWq
zHn;~t+%PaU;pYYS&B*Ex;BmxXA7Q}{j!=G=Xz+f__qMe^1PM9*xVVb-NWVgmfIq_E
zhDC7J>cmqddRwNQIXt(}sG)3W`9METp>D&-ThT37|3dvit18YKcf}pfzFUU1wozkE
z=S3nl>U=*)oUKo)xqI2s@OB;JjAtTqhWjW+K9{1V=y#Mh$#IyZ)^#;Xz4`q9``*aN
z2yMM5VP9NHcOg`_eReyfksE?e8vf;C4)%tGMSz_<@aJ-YIsFGZF5Q-^-KY0o6|9tvwCJSk*GV0;#F=lG~GD@#rBZVl?=zJdA+gxZLFhZgFo7GN3hbsC!
z%CL8=WeT=Fpd>Ofa%(X^fm~Ook>fV`?s5K3|L`zrZOuDdHw;TMe=S|{+C-PNc#c8T
z8DGb`yOU0wIN?$?svkeY3=VA`9vFB4jsY51T4)5XgJg7cbni1BJ`r(o($3B!o$UeC
z%rdE=!Ny#VUG3IGEE}X?RvN!g_OrHEYFxX-0s{hem$j~4oAbR2K3NzJpZ}0PRv$>2
z@6J9I5GyFID6gq${rK_Yq=M2?h1E|qf7{KY$`$;u7S+V0q&&NZM+iy#qw;XLguhJP
zC%>28&Fn{rzTBHpTRY=El(%oKqJ(6IGJTqsC|z{=$9YC3&sZkIZFQ{1Bqk>2MtgL8
z{7{i;=BtzxIfOA1X@SF0y0bK|%FYWNKC2x%*q
z>&BnHR`l!{SDAeywr@jb&;50nr5OqJWan$*c{Nql2ScUSTwdY|RyiC__ykzs#(t1i
zb|;;F*WR9(m&XaJwY_&QDIAFQAw#0&uW5tZ4jI89N|y?&EzbUWLPNrf7Xs->IkbgE
zF#y?~iV+l3xMO3JS>DVEL9~u57=^e2+22!9QNh-FTK95LD3qwMaQ=r6$mW$QH-_ZH
zeL4IF@M_Vs)+nKsj>L1U=_nZy2?af4hXXoMRX<=z;*}G|DZr~b8|_m%QBqZ-Cg`(
zY*Ul&=;|X^7nkDdYKx?;J`*Llp57Goho$`&x?xvEI;VXXNW}TA_x_CK}y3E#5MFRuw{7AP_ME
zf`S(iK*+K4dDm*py{aAY&;xLXb=__
z7P)fe%9X&CvN{fK=IO?td}EcaFQ6l)~!IqbgZ*XL!*zl!T+%Bzk`i`GpCCD0T?%h&90BBE;5xP2A
zUsQA}X!7xb0aBtx6a>55WBV@n?y&unvd*rqy8GZBSbF7WcHvQu3BcYQZ
zr-OBj6jM$5Ho7A?9L^tV1V?~(2ng@kPc5n~YsbzYL8dNw^X3l5E-;xG`VBFac`h?E
z6BwpI(|>-kP5i!vr)OzMNXYD?2G<(w^C4Arb#h~)9h1qd#Fnvu&I0>QHGcnu=7Lh4
z3%U4FPdR%ex9%)BWsnRkVA!{@lwhvSj2J4nqkR49IpqkbMAX#O$l`!P$Yk;WNZ~i5
zj+ammK}LQp-J
zj52B0+0rq
zNk_-dC|-)WUrHhwfs#7b5JWw{L~Z6IwN7sc{&ZOSkY>vQJ```gtcw|9FsVCh6QCYl1?Iy29V?Mk5D{@CY=5;5)H+;m2FRvm)>XG)FqqWW
zBMu*|eudtT+$QN~Fx;#a#9+sdvl?^AWo4$D^9(`j{(*r4kVgjx27KQL<5gyUL<@=m
zrL+`TQBhG3tQa_K7qq9lva-_8VeilR(YC&IDd7$|Y-3YXG-x$?GoquX4~4a*6V{dG
zA>|i8aC}M>*fW3r{JCGl#2C$=hl|JM%ezunz8jmq}wF8SSwbkOBN2tzZ2a(##2{smR6PX_=1

literal 0
HcmV?d00001

diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.svg
new file mode 100644
index 000000000000..d0bfafd18933
--- /dev/null
+++ b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_67.svg
@@ -0,0 +1,321 @@
+
+
+
+
+ 
+  
+ 
+ 
+  
+   
+  
+  
+   
+   
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+   
+   
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+   
+  
+ 
+
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..ebb19238ee20ac9edb701dea6498490333fdec7b
GIT binary patch
literal 4482
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

literal 0
HcmV?d00001

diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.svg
new file mode 100644
index 000000000000..81fdc24a16ab
--- /dev/null
+++ b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.svg
@@ -0,0 +1,117 @@
+
+
+
+
+ 
+  
+ 
+ 
+  
+   
+  
+  
+   
+   
+    
+    
+    
+    
+   
+   
+    
+    
+    
+    
+   
+  
+ 
+
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_67.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_67.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..3e0b0d5768a1ff8575367086ffab0d1cbaf8c465
GIT binary patch
literal 10213
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

literal 0
HcmV?d00001

diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_67.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_67.png
new file mode 100644
index 0000000000000000000000000000000000000000..f18cba313e4d8d134936cfcb29158762f7217cac
GIT binary patch
literal 2664
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
+
+
+
+ 
+  
+ 
+ 
+  
+   
+  
+  
+   
+   
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+   
+   
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+   
+  
+ 
+
diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py
index 84973ed289a8..63689cd27157 100644
--- a/lib/matplotlib/tests/test_mathtext.py
+++ b/lib/matplotlib/tests/test_mathtext.py
@@ -2,6 +2,7 @@
 import matplotlib
 from matplotlib.testing.decorators import image_comparison, knownfailureif
 import matplotlib.pyplot as plt
+from matplotlib import mathtext
 
 math_tests = [
     r'$a+b+\dots+\dot{s}+\ldots$',
@@ -46,7 +47,6 @@
     r'$\widehat{abc}\widetilde{def}$',
     r'$\Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma \Upsilon \Phi \Psi \Omega$',
     r'$\alpha \beta \gamma \delta \epsilon \zeta \eta \theta \iota \lambda \mu \nu \xi \pi \kappa \rho \sigma \tau \upsilon \phi \chi \psi$',
-    # r'$\operatorname{cos} x$',
 
     # The examples prefixed by 'mmltt' are from the MathML torture test here:
         # http://www.mozilla.org/projects/mathml/demo/texvsmml.xhtml
@@ -59,7 +59,6 @@
     r'${a}_{0}+\frac{1}{{a}_{1}+\frac{1}{{a}_{2}+\frac{1}{{a}_{3}+\frac{1}{{a}_{4}}}}}$',
     r'$\binom{n}{k/2}$',
     r'$\binom{p}{2}{x}^{2}{y}^{p-2}-\frac{1}{1-x}\frac{1}{1-{x}^{2}}$',
-    # 'mmltt10'    : r'$\sum _{\genfrac{}{}{0}{}{0\leq i\leq m}{0