You can subscribe to this list here.
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(115) |
Aug
(120) |
Sep
(137) |
Oct
(170) |
Nov
(461) |
Dec
(263) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
(120) |
Feb
(74) |
Mar
(35) |
Apr
(74) |
May
(245) |
Jun
(356) |
Jul
(240) |
Aug
(115) |
Sep
(78) |
Oct
(225) |
Nov
(98) |
Dec
(271) |
| 2009 |
Jan
(132) |
Feb
(84) |
Mar
(74) |
Apr
(56) |
May
(90) |
Jun
(79) |
Jul
(83) |
Aug
(296) |
Sep
(214) |
Oct
(76) |
Nov
(82) |
Dec
(66) |
| 2010 |
Jan
(46) |
Feb
(58) |
Mar
(51) |
Apr
(77) |
May
(58) |
Jun
(126) |
Jul
(128) |
Aug
(64) |
Sep
(50) |
Oct
(44) |
Nov
(48) |
Dec
(54) |
| 2011 |
Jan
(68) |
Feb
(52) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <jd...@us...> - 2010-01-16 22:08:33
|
Revision: 8085
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8085&view=rev
Author: jdh2358
Date: 2010-01-16 22:08:25 +0000 (Sat, 16 Jan 2010)
Log Message:
-----------
remove cxx emacs backupfiles
Removed Paths:
-------------
trunk/matplotlib/CXX/IndirectPythonInterface.cxx~
trunk/matplotlib/CXX/cxxextensions.c~
trunk/matplotlib/CXX/cxxsupport.cxx~
Deleted: trunk/matplotlib/CXX/IndirectPythonInterface.cxx~
===================================================================
--- trunk/matplotlib/CXX/IndirectPythonInterface.cxx~ 2010-01-16 22:07:53 UTC (rev 8084)
+++ trunk/matplotlib/CXX/IndirectPythonInterface.cxx~ 2010-01-16 22:08:25 UTC (rev 8085)
@@ -1,43 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-#include "CXX/WrapPython.h"
-
-#if PY_MAJOR_VERSION == 2
-#include "Src/Python2/IndirectPythonInterface.cxx"
-#else
-#include "Src/Python3/IndirectPythonInterface.cxx"
-#endif
Deleted: trunk/matplotlib/CXX/cxxextensions.c~
===================================================================
--- trunk/matplotlib/CXX/cxxextensions.c~ 2010-01-16 22:07:53 UTC (rev 8084)
+++ trunk/matplotlib/CXX/cxxextensions.c~ 2010-01-16 22:08:25 UTC (rev 8085)
@@ -1,43 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-#include "CXX/WrapPython.h"
-
-#if PY_MAJOR_VERSION == 2
-#include "Src/Python2/cxxextensions.c"
-#else
-#include "Src/Python3/cxxextensions.c"
-#endif
Deleted: trunk/matplotlib/CXX/cxxsupport.cxx~
===================================================================
--- trunk/matplotlib/CXX/cxxsupport.cxx~ 2010-01-16 22:07:53 UTC (rev 8084)
+++ trunk/matplotlib/CXX/cxxsupport.cxx~ 2010-01-16 22:08:25 UTC (rev 8085)
@@ -1,43 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-#include "CXX/WrapPython.h"
-
-#if PY_MAJOR_VERSION == 2
-#include "Src/Python2/cxxsupport.cxx"
-#else
-#include "Src/Python3/cxxsupport.cxx"
-#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jd...@us...> - 2010-01-16 22:08:01
|
Revision: 8084
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8084&view=rev
Author: jdh2358
Date: 2010-01-16 22:07:53 +0000 (Sat, 16 Jan 2010)
Log Message:
-----------
upgraded CXX to 6.1.1
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/CXX/Config.hxx
trunk/matplotlib/CXX/Exception.hxx
trunk/matplotlib/CXX/Extensions.hxx
trunk/matplotlib/CXX/IndirectPythonInterface.cxx
trunk/matplotlib/CXX/IndirectPythonInterface.hxx
trunk/matplotlib/CXX/Objects.hxx
trunk/matplotlib/CXX/Version.hxx
trunk/matplotlib/CXX/WrapPython.h
trunk/matplotlib/CXX/cxx_extensions.cxx
trunk/matplotlib/CXX/cxxextensions.c
trunk/matplotlib/CXX/cxxsupport.cxx
Added Paths:
-----------
trunk/matplotlib/CXX/IndirectPythonInterface.cxx~
trunk/matplotlib/CXX/Python2/
trunk/matplotlib/CXX/Python2/Config.hxx
trunk/matplotlib/CXX/Python2/CxxDebug.hxx
trunk/matplotlib/CXX/Python2/Exception.hxx
trunk/matplotlib/CXX/Python2/ExtensionModule.hxx
trunk/matplotlib/CXX/Python2/ExtensionOldType.hxx
trunk/matplotlib/CXX/Python2/ExtensionType.hxx
trunk/matplotlib/CXX/Python2/ExtensionTypeBase.hxx
trunk/matplotlib/CXX/Python2/Extensions.hxx
trunk/matplotlib/CXX/Python2/IndirectPythonInterface.cxx
trunk/matplotlib/CXX/Python2/IndirectPythonInterface.hxx
trunk/matplotlib/CXX/Python2/Objects.hxx
trunk/matplotlib/CXX/Python2/PythonType.hxx
trunk/matplotlib/CXX/Python2/cxx_extensions.cxx
trunk/matplotlib/CXX/Python2/cxxextensions.c
trunk/matplotlib/CXX/Python2/cxxsupport.cxx
trunk/matplotlib/CXX/Python3/
trunk/matplotlib/CXX/Python3/Config.hxx
trunk/matplotlib/CXX/Python3/CxxDebug.hxx
trunk/matplotlib/CXX/Python3/Exception.hxx
trunk/matplotlib/CXX/Python3/ExtensionModule.hxx
trunk/matplotlib/CXX/Python3/ExtensionOldType.hxx
trunk/matplotlib/CXX/Python3/ExtensionType.hxx
trunk/matplotlib/CXX/Python3/ExtensionTypeBase.hxx
trunk/matplotlib/CXX/Python3/Extensions.hxx
trunk/matplotlib/CXX/Python3/IndirectPythonInterface.cxx
trunk/matplotlib/CXX/Python3/IndirectPythonInterface.hxx
trunk/matplotlib/CXX/Python3/Objects.hxx
trunk/matplotlib/CXX/Python3/PythonType.hxx
trunk/matplotlib/CXX/Python3/cxx_extensions.cxx
trunk/matplotlib/CXX/Python3/cxxextensions.c
trunk/matplotlib/CXX/Python3/cxxsupport.cxx
trunk/matplotlib/CXX/cxxextensions.c~
trunk/matplotlib/CXX/cxxsupport.cxx~
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-01-16 19:20:03 UTC (rev 8083)
+++ trunk/matplotlib/CHANGELOG 2010-01-16 22:07:53 UTC (rev 8084)
@@ -1,3 +1,6 @@
+
+2010-01-16 Upgraded CXX to 6.1.1 - JDH
+
2009-01-16 Don't create minor ticks on top of existing major
ticks. Patch by Neil Crighton. -ADS
@@ -17,6 +20,7 @@
2009-01-11 Add add_click and pop_click methods in
BlockingContourLabeler. -JJL
+
2010-01-03 Added rcParams['axes.color_cycle'] - EF
2010-01-03 Added Pierre's qt4 formlayout editor and toolbar button - JDH
Modified: trunk/matplotlib/CXX/Config.hxx
===================================================================
--- trunk/matplotlib/CXX/Config.hxx 2010-01-16 19:20:03 UTC (rev 8083)
+++ trunk/matplotlib/CXX/Config.hxx 2010-01-16 22:07:53 UTC (rev 8084)
@@ -34,101 +34,10 @@
// DAMAGE.
//
//-----------------------------------------------------------------------------
+#include "CXX/WrapPython.h"
-#ifndef __PyCXX_config_hh__
-#define __PyCXX_config_hh__
-
-//
-// Microsoft VC++ 6.0 has no traits
-//
-#if defined( _MSC_VER )
-
-# define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1
-
-#elif defined( __GNUC__ )
-# if __GNUC__ >= 3
-# define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1
-# else
-# define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 0
-#endif
-
-//
-// Assume all other compilers do
-//
+#if PY_MAJOR_VERSION == 2
+#include "CXX/Python2/Config.hxx"
#else
-
-// Macros to deal with deficiencies in compilers
-# define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1
+#include "CXX/Python3/Config.hxx"
#endif
-
-#if STANDARD_LIBRARY_HAS_ITERATOR_TRAITS
-# define random_access_iterator_parent(itemtype) std::iterator<std::random_access_iterator_tag,itemtype,int>
-#else
-# define random_access_iterator_parent(itemtype) std::random_access_iterator<itemtype, int>
-#endif
-
-//
-// Which C++ standard is in use?
-//
-#if defined( _MSC_VER )
-# if _MSC_VER <= 1200
-// MSVC++ 6.0
-# define PYCXX_ISO_CPP_LIB 0
-# define STR_STREAM <strstream>
-# define TEMPLATE_TYPENAME class
-# else
-# define PYCXX_ISO_CPP_LIB 1
-# define STR_STREAM <sstream>
-# define TEMPLATE_TYPENAME typename
-# endif
-#elif defined( __GNUC__ )
-# if __GNUC__ >= 3
-# define PYCXX_ISO_CPP_LIB 1
-# define STR_STREAM <sstream>
-# define TEMPLATE_TYPENAME typename
-# else
-# define PYCXX_ISO_CPP_LIB 0
-# define STR_STREAM <strstream>
-# define TEMPLATE_TYPENAME class
-# endif
-#endif
-
-#if PYCXX_ISO_CPP_LIB
-# define STR_STREAM <sstream>
-# define OSTRSTREAM ostringstream
-# define EXPLICIT_TYPENAME typename
-# define EXPLICIT_CLASS class
-# define TEMPLATE_TYPENAME typename
-#else
-# define STR_STREAM <strstream>
-# define OSTRSTREAM ostrstream
-# define EXPLICIT_TYPENAME
-# define EXPLICIT_CLASS
-# define TEMPLATE_TYPENAME class
-#endif
-
-// before 2.5 Py_ssize_t was missing
-#ifndef PY_MAJOR_VERSION
-#error not defined PY_MAJOR_VERSION
-#endif
-#if PY_MAJOR_VERSION < 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5)
-typedef int Py_ssize_t;
-#endif
-
-// hash_map container usage selection
-// 1) if PYCXX_USING_STD_MAP is defined PyCXX will be using std::map<> container
-// implementation only.
-// 2) if compilers are used other than MS Visual Studio (7.1+) or GCC 3.x
-// STANDARD_LIBRARY_HAS_HASH_MAP must be defined before compilation to
-// make PyCXX using hash_map container.
-#if !defined( PYCXX_USING_STD_MAP )
- #if defined( _MSC_VER ) || defined( __INTEL_COMPILER ) || defined ( __ICC ) || (defined( __GNUC__ ) && ( __GNUC__ > 3 ))
- # define PYCXX_USING_HASH_MAP
- #else
- # if defined( STANDARD_LIBRARY_HAS_HASH_MAP ) && !defined( PYCXX_USING_HASH_MAP )
- # define PYCXX_USING_HASH_MAP
- # endif
- #endif
-#endif
-
-#endif // __PyCXX_config_hh__
Modified: trunk/matplotlib/CXX/Exception.hxx
===================================================================
--- trunk/matplotlib/CXX/Exception.hxx 2010-01-16 19:20:03 UTC (rev 8083)
+++ trunk/matplotlib/CXX/Exception.hxx 2010-01-16 22:07:53 UTC (rev 8084)
@@ -34,216 +34,10 @@
// DAMAGE.
//
//-----------------------------------------------------------------------------
-
-#ifndef __CXX_Exception_h
-#define __CXX_Exception_h
-
#include "CXX/WrapPython.h"
-#include "CXX/Version.hxx"
-#include "CXX/Config.hxx"
-#include "CXX/IndirectPythonInterface.hxx"
-#include <string>
-#include <iostream>
-
-// This mimics the Python structure, in order to minimize confusion
-namespace Py
-{
- class ExtensionExceptionType;
-
- class Object;
-
- class Exception
- {
- public:
- Exception( ExtensionExceptionType &exception, const std::string& reason );
- Exception( ExtensionExceptionType &exception, Object &reason );
-
- explicit Exception ()
- {}
-
- Exception (const std::string& reason)
- {
- PyErr_SetString (Py::_Exc_RuntimeError(), reason.c_str());
- }
-
- Exception (PyObject* exception, const std::string& reason)
- {
- PyErr_SetString (exception, reason.c_str());
- }
-
- Exception (PyObject* exception, Object &reason);
-
- void clear() // clear the error
- // technically but not philosophically const
- {
- PyErr_Clear();
- }
- };
-
-
- // Abstract
- class StandardError: public Exception
- {
- protected:
- explicit StandardError()
- {}
- };
-
- class LookupError: public StandardError
- {
- protected:
- explicit LookupError()
- {}
- };
-
- class ArithmeticError: public StandardError
- {
- protected:
- explicit ArithmeticError()
- {}
- };
-
- class EnvironmentError: public StandardError
- {
- protected:
- explicit EnvironmentError()
- {}
- };
-
- // Concrete
-
- class TypeError: public StandardError
- {
- public:
- TypeError (const std::string& reason)
- : StandardError()
- {
- PyErr_SetString (Py::_Exc_TypeError(),reason.c_str());
- }
- };
-
- class IndexError: public LookupError
- {
- public:
- IndexError (const std::string& reason)
- : LookupError()
- {
- PyErr_SetString (Py::_Exc_IndexError(), reason.c_str());
- }
- };
-
- class AttributeError: public StandardError
- {
- public:
- AttributeError (const std::string& reason)
- : StandardError()
- {
- PyErr_SetString (Py::_Exc_AttributeError(), reason.c_str());
- }
- };
-
- class NameError: public StandardError
- {
- public:
- NameError (const std::string& reason)
- : StandardError()
- {
- PyErr_SetString (Py::_Exc_NameError(), reason.c_str());
- }
- };
-
- class RuntimeError: public StandardError
- {
- public:
- RuntimeError (const std::string& reason)
- : StandardError()
- {
- PyErr_SetString (Py::_Exc_RuntimeError(), reason.c_str());
- }
- };
-
- class SystemError: public StandardError
- {
- public:
- SystemError (const std::string& reason)
- : StandardError()
- {
- PyErr_SetString (Py::_Exc_SystemError(),reason.c_str());
- }
- };
-
- class KeyError: public LookupError
- {
- public:
- KeyError (const std::string& reason)
- : LookupError()
- {
- PyErr_SetString (Py::_Exc_KeyError(),reason.c_str());
- }
- };
-
-
- class ValueError: public StandardError
- {
- public:
- ValueError (const std::string& reason)
- : StandardError()
- {
- PyErr_SetString (Py::_Exc_ValueError(), reason.c_str());
- }
- };
-
- class OverflowError: public ArithmeticError
- {
- public:
- OverflowError (const std::string& reason)
- : ArithmeticError()
- {
- PyErr_SetString (Py::_Exc_OverflowError(), reason.c_str());
- }
- };
-
- class ZeroDivisionError: public ArithmeticError
- {
- public:
- ZeroDivisionError (const std::string& reason)
- : ArithmeticError()
- {
- PyErr_SetString (Py::_Exc_ZeroDivisionError(), reason.c_str());
- }
- };
-
- class FloatingPointError: public ArithmeticError
- {
- public:
- FloatingPointError (const std::string& reason)
- : ArithmeticError()
- {
- PyErr_SetString (Py::_Exc_FloatingPointError(), reason.c_str());
- }
- };
-
- class MemoryError: public StandardError
- {
- public:
- MemoryError (const std::string& reason)
- : StandardError()
- {
- PyErr_SetString (Py::_Exc_MemoryError(), reason.c_str());
- }
- };
-
- class SystemExit: public StandardError
- {
- public:
- SystemExit (const std::string& reason)
- : StandardError()
- {
- PyErr_SetString (Py::_Exc_SystemExit(),reason.c_str());
- }
- };
-
-}// Py
-
+#if PY_MAJOR_VERSION == 2
+#include "CXX/Python2/Exception.hxx"
+#else
+#include "CXX/Python3/Exception.hxx"
#endif
Modified: trunk/matplotlib/CXX/Extensions.hxx
===================================================================
--- trunk/matplotlib/CXX/Extensions.hxx 2010-01-16 19:20:03 UTC (rev 8083)
+++ trunk/matplotlib/CXX/Extensions.hxx 2010-01-16 22:07:53 UTC (rev 8084)
@@ -34,895 +34,10 @@
// DAMAGE.
//
//-----------------------------------------------------------------------------
-
-#ifndef __CXX_Extensions__h
-#define __CXX_Extensions__h
-
-
-#ifdef _MSC_VER
-// disable warning C4786: symbol greater than 255 character,
-// okay to ignore
-#pragma warning(disable: 4786)
-#endif
-
#include "CXX/WrapPython.h"
-#include "CXX/Version.hxx"
-#include "CXX/Config.hxx"
-#include "CXX/Objects.hxx"
-extern "C"
-{
- extern PyObject py_object_initializer;
-}
-
-#include <vector>
-
-// std::map / hash_map selection and declarations ----------------------------
-#if !defined( PYCXX_USING_HASH_MAP )
-
-#include <map>
-
+#if PY_MAJOR_VERSION == 2
+#include "CXX/Python2/Extensions.hxx"
#else
-
-#if defined( __GNUC__) && !defined( _STLPORT_VERSION )
- #include <ext/hash_map>
-#else
- #include <hash_map>
+#include "CXX/Python3/Extensions.hxx"
#endif
-#if defined( _STLPORT_VERSION )
- #define __PYCXX_HASHMAP_NAMESPACE std
- using namespace std;
-#elif defined ( _MSC_VER ) && !defined( __INTEL_COMPILER ) && !defined( __ICC ) && !defined( __ICL ) && !defined( __ECC )
- #define __PYCXX_HASHMAP_NAMESPACE stdext
- using namespace stdext;
-#elif defined( __INTEL_COMPILER ) || defined( __ICC ) || defined( __ICL ) || defined( __ECC )
- #define __PYCXX_HASHMAP_NAMESPACE stdext
- using namespace stdext;
-#elif defined( __GNUC__ )
- #define __PYCXX_HASHMAP_NAMESPACE __gnu_cxx
- using namespace __gnu_cxx;
-#else
- #define __PYCXX_HASHMAP_NAMESPACE std
- using namespace std;
-#endif
-
-class __pycxx_str_hash_func
-{
-public:
- enum
- {
- // parameters for hash table
- bucket_size = 4, // 0 < bucket_size
- min_buckets = 8 // min_buckets = 2 ^^ N, 0 < N
- };
-
- // http://www.azillionmonkeys.com/qed/hash.html
- size_t operator()( const std::string &str ) const
- {
- const unsigned char * data = reinterpret_cast<const unsigned char *>( str.c_str() );
- int len = (int)str.length();
- unsigned int hash = len;
- unsigned int tmp;
- int rem;
-
- if (len <= 0 || data == NULL)
- return 0;
-
- rem = len & 3;
- len >>= 2;
-
- /* Main loop */
- for (;len > 0; len--)
- {
- hash += (data[1] << 8) | data[0];
- tmp = (((data[3] << 8) | data[2]) << 11) ^ hash;
- hash = (hash << 16) ^ tmp;
- data += 2*sizeof (unsigned short);
- hash += hash >> 11;
- }
-
- /* Handle end cases */
- switch (rem)
- {
- case 3: hash += (data[1] << 8) | data[0];
- hash ^= hash << 16;
- hash ^= data[sizeof (unsigned short)] << 18;
- hash += hash >> 11;
- break;
- case 2: hash += (data[1] << 8) | data[0];
- hash ^= hash << 11;
- hash += hash >> 17;
- break;
- case 1: hash += *data;
- hash ^= hash << 10;
- hash += hash >> 1;
- }
-
- /* Force "avalanching" of final 127 bits */
- hash ^= hash << 3;
- hash += hash >> 5;
- hash ^= hash << 4;
- hash += hash >> 17;
- hash ^= hash << 25;
- hash += hash >> 6;
-
- return hash;
- }
-
- bool operator()(const std::string &str_1, const std::string &str_2) const
- {
- // test if str_1 ordered before str_2
- return str_1 < str_2;
- }
-};
-#endif // PYCXX_USING_HASH_MAP
-// ----------------------------------------------------------------------
-
-namespace Py
-{
- class ExtensionModuleBase;
-
- // Make an Exception Type for use in raising custom exceptions
- class ExtensionExceptionType : public Object
- {
- public:
- ExtensionExceptionType();
- virtual ~ExtensionExceptionType();
-
- // call init to create the type
- void init( ExtensionModuleBase &module, const std::string& name, ExtensionExceptionType &parent );
- void init( ExtensionModuleBase &module, const std::string& name );
- };
-
-
- class MethodTable
- {
- public:
- MethodTable();
- virtual ~MethodTable();
-
- void add(const char* method_name, PyCFunction f, const char* doc="", int flag=1);
- PyMethodDef* table();
-
- protected:
- std::vector<PyMethodDef> t; // accumulator of PyMethodDef's
- PyMethodDef *mt; // Actual method table produced when full
-
- static PyMethodDef method (const char* method_name, PyCFunction f, int flags = 1, const char* doc="");
-
- private:
- //
- // prevent the compiler generating these unwanted functions
- //
- MethodTable(const MethodTable& m); //unimplemented
- void operator=(const MethodTable& m); //unimplemented
-
- }; // end class MethodTable
-
- extern "C"
- {
- typedef PyObject *(*method_varargs_call_handler_t)( PyObject *_self, PyObject *_args );
- typedef PyObject *(*method_keyword_call_handler_t)( PyObject *_self, PyObject *_args, PyObject *_dict );
- }
-
- template<class T>
- class MethodDefExt : public PyMethodDef
- {
- public:
- typedef Object (T::*method_varargs_function_t)( const Tuple &args );
- typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws );
-
- MethodDefExt
- (
- const char *_name,
- method_varargs_function_t _function,
- method_varargs_call_handler_t _handler,
- const char *_doc
- )
- {
- ext_meth_def.ml_name = const_cast<char *>(_name);
- ext_meth_def.ml_meth = _handler;
- ext_meth_def.ml_flags = METH_VARARGS;
- ext_meth_def.ml_doc = const_cast<char *>(_doc);
-
- ext_varargs_function = _function;
- ext_keyword_function = NULL;
- }
-
- MethodDefExt
- (
- const char *_name,
- method_keyword_function_t _function,
- method_keyword_call_handler_t _handler,
- const char *_doc
- )
- {
- ext_meth_def.ml_name = const_cast<char *>(_name);
- ext_meth_def.ml_meth = method_varargs_call_handler_t( _handler );
- ext_meth_def.ml_flags = METH_VARARGS|METH_KEYWORDS;
- ext_meth_def.ml_doc = const_cast<char *>(_doc);
-
- ext_varargs_function = NULL;
- ext_keyword_function = _function;
- }
-
- ~MethodDefExt()
- {}
-
- PyMethodDef ext_meth_def;
- method_varargs_function_t ext_varargs_function;
- method_keyword_function_t ext_keyword_function;
- };
-
- class ExtensionModuleBase
- {
- public:
- ExtensionModuleBase( const char *name );
- virtual ~ExtensionModuleBase();
-
- Module module(void) const; // only valid after initialize() has been called
- Dict moduleDictionary(void) const; // only valid after initialize() has been called
-
- virtual Object invoke_method_keyword( const std::string &_name, const Tuple &_args, const Dict &_keywords ) = 0;
- virtual Object invoke_method_varargs( const std::string &_name, const Tuple &_args ) = 0;
-
- const std::string &name() const;
- const std::string &fullName() const;
-
- protected:
- // Initialize the module
- void initialize( const char *module_doc );
-
- const std::string module_name;
- const std::string full_module_name;
- MethodTable method_table;
-
- private:
-
- //
- // prevent the compiler generating these unwanted functions
- //
- ExtensionModuleBase( const ExtensionModuleBase & ); //unimplemented
- void operator=( const ExtensionModuleBase & ); //unimplemented
-
- };
-
- extern "C" PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords );
- extern "C" PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args );
- extern "C" void do_not_dealloc( void * );
-
-
- template<TEMPLATE_TYPENAME T>
- class ExtensionModule : public ExtensionModuleBase
- {
- public:
- ExtensionModule( const char *name )
- : ExtensionModuleBase( name )
- {}
- virtual ~ExtensionModule()
- {}
-
- protected:
- typedef Object (T::*method_varargs_function_t)( const Tuple &args );
- typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws );
-
-#if defined( PYCXX_USING_HASH_MAP )
- typedef __PYCXX_HASHMAP_NAMESPACE::hash_map<std::string, MethodDefExt<T> *, __pycxx_str_hash_func> method_map_t;
-#else
- typedef std::map<std::string,MethodDefExt<T> *> method_map_t;
-#endif
-
- static void add_varargs_method( const char *name, method_varargs_function_t function, const char *doc="" )
- {
- method_map_t &mm = methods();
-
- MethodDefExt<T> *method_definition = new MethodDefExt<T>
- (
- name,
- function,
- method_varargs_call_handler,
- doc
- );
-
- mm[std::string( name )] = method_definition;
- }
-
- static void add_keyword_method( const char *name, method_keyword_function_t function, const char *doc="" )
- {
- method_map_t &mm = methods();
-
- MethodDefExt<T> *method_definition = new MethodDefExt<T>
- (
- name,
- function,
- method_keyword_call_handler,
- doc
- );
-
- mm[std::string( name )] = method_definition;
- }
-
- void initialize( const char *module_doc="" )
- {
- ExtensionModuleBase::initialize( module_doc );
- Dict dict( moduleDictionary() );
-
- //
- // put each of the methods into the modules dictionary
- // so that we get called back at the function in T.
- //
- method_map_t &mm = methods();
- EXPLICIT_TYPENAME method_map_t::const_iterator i;
-
- for( i=mm.begin(); i != mm.end(); ++i )
- {
- MethodDefExt<T> *method_definition = (*i).second;
-
- static PyObject *self = PyCObject_FromVoidPtr( this, do_not_dealloc );
-
- Tuple args( 2 );
- args[0] = Object( self );
- args[1] = String( (*i).first );
-
- PyObject *func = PyCFunction_New
- (
- &method_definition->ext_meth_def,
- new_reference_to( args )
- );
-
- dict[ (*i).first ] = Object( func );
- }
- }
-
- protected: // Tom Malcolmson reports that derived classes need access to these
-
- static method_map_t &methods(void)
- {
- static method_map_t *map_of_methods = NULL;
- if( map_of_methods == NULL )
- map_of_methods = new method_map_t;
-
- return *map_of_methods;
- }
-
-
- // this invoke function must be called from within a try catch block
- virtual Object invoke_method_keyword( const std::string &name, const Tuple &args, const Dict &keywords )
- {
- method_map_t &mm = methods();
- MethodDefExt<T> *meth_def = mm[ name ];
- if( meth_def == NULL )
- {
- std::string error_msg( "CXX - cannot invoke keyword method named " );
- error_msg += name;
- throw RuntimeError( error_msg );
- }
-
- // cast up to the derived class
- T *self = static_cast<T *>(this);
-
- return (self->*meth_def->ext_keyword_function)( args, keywords );
- }
-
- // this invoke function must be called from within a try catch block
- virtual Object invoke_method_varargs( const std::string &name, const Tuple &args )
- {
- method_map_t &mm = methods();
- MethodDefExt<T> *meth_def = mm[ name ];
- if( meth_def == NULL )
- {
- std::string error_msg( "CXX - cannot invoke varargs method named " );
- error_msg += name;
- throw RuntimeError( error_msg );
- }
-
- // cast up to the derived class
- T *self = static_cast<T *>(this);
-
- return (self->*meth_def->ext_varargs_function)( args );
- }
-
- private:
- //
- // prevent the compiler generating these unwanted functions
- //
- ExtensionModule( const ExtensionModule<T> & ); //unimplemented
- void operator=( const ExtensionModule<T> & ); //unimplemented
- };
-
-
- class PythonType
- {
- public:
- // if you define one sequence method you must define
- // all of them except the assigns
-
- PythonType (size_t base_size, int itemsize, const char *default_name );
- virtual ~PythonType ();
-
- const char *getName () const;
- const char *getDoc () const;
-
- PyTypeObject* type_object () const;
- PythonType & name (const char* nam);
- PythonType & doc (const char* d);
- PythonType & dealloc(void (*f)(PyObject*));
-
- PythonType & supportPrint(void);
- PythonType & supportGetattr(void);
- PythonType & supportSetattr(void);
- PythonType & supportGetattro(void);
- PythonType & supportSetattro(void);
- PythonType & supportCompare(void);
-#if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 1)
- PythonType & supportRichCompare(void);
-#endif
- PythonType & supportRepr(void);
- PythonType & supportStr(void);
- PythonType & supportHash(void);
- PythonType & supportCall(void);
- PythonType & supportIter(void);
-
- PythonType & supportSequenceType(void);
- PythonType & supportMappingType(void);
- PythonType & supportNumberType(void);
- PythonType & supportBufferType(void);
-
- protected:
- PyTypeObject *table;
- PySequenceMethods *sequence_table;
- PyMappingMethods *mapping_table;
- PyNumberMethods *number_table;
- PyBufferProcs *buffer_table;
-
- void init_sequence();
- void init_mapping();
- void init_number();
- void init_buffer();
-
- private:
- //
- // prevent the compiler generating these unwanted functions
- //
- PythonType (const PythonType& tb); // unimplemented
- void operator=(const PythonType& t); // unimplemented
-
- }; // end of PythonType
-
-
-
- // Class PythonExtension is what you inherit from to create
- // a new Python extension type. You give your class itself
- // as the template paramter.
-
- // There are two ways that extension objects can get destroyed.
- // 1. Their reference count goes to zero
- // 2. Someone does an explicit delete on a pointer.
- // In (1) the problem is to get the destructor called
- // We register a special deallocator in the Python type object
- // (see behaviors()) to do this.
- // In (2) there is no problem, the dtor gets called.
-
- // PythonExtension does not use the usual Python heap allocator,
- // instead using new/delete. We do the setting of the type object
- // and reference count, usually done by PyObject_New, in the
- // base class ctor.
-
- // This special deallocator does a delete on the pointer.
-
-
- class PythonExtensionBase : public PyObject
- {
- public:
- PythonExtensionBase();
- virtual ~PythonExtensionBase();
-
- public:
- virtual int print( FILE *, int );
- virtual Object getattr( const char * ) = 0;
- virtual int setattr( const char *, const Object & );
- virtual Object getattro( const Object & );
- virtual int setattro( const Object &, const Object & );
- virtual int compare( const Object & );
- virtual Object rich_compare( const Object &, int op );
- virtual Object repr();
- virtual Object str();
- virtual long hash();
- virtual Object call( const Object &, const Object & );
- virtual Object iter();
- virtual PyObject* iternext();
-
- // Sequence methods
- virtual int sequence_length();
- virtual Object sequence_concat( const Object & );
- virtual Object sequence_repeat( Py_ssize_t );
- virtual Object sequence_item( Py_ssize_t );
- virtual Object sequence_slice( Py_ssize_t, Py_ssize_t );
- virtual int sequence_ass_item( Py_ssize_t, const Object & );
- virtual int sequence_ass_slice( Py_ssize_t, Py_ssize_t, const Object & );
-
- // Mapping
- virtual int mapping_length();
- virtual Object mapping_subscript( const Object & );
- virtual int mapping_ass_subscript( const Object &, const Object & );
-
- // Number
- virtual int number_nonzero();
- virtual Object number_negative();
- virtual Object number_positive();
- virtual Object number_absolute();
- virtual Object number_invert();
- virtual Object number_int();
- virtual Object number_float();
- virtual Object number_long();
- virtual Object number_oct();
- virtual Object number_hex();
- virtual Object number_add( const Object & );
- virtual Object number_subtract( const Object & );
- virtual Object number_multiply( const Object & );
- virtual Object number_divide( const Object & );
- virtual Object number_remainder( const Object & );
- virtual Object number_divmod( const Object & );
- virtual Object number_lshift( const Object & );
- virtual Object number_rshift( const Object & );
- virtual Object number_and( const Object & );
- virtual Object number_xor( const Object & );
- virtual Object number_or( const Object & );
- virtual Object number_power( const Object &, const Object & );
-
- // Buffer
- virtual Py_ssize_t buffer_getreadbuffer( Py_ssize_t, void** );
- virtual Py_ssize_t buffer_getwritebuffer( Py_ssize_t, void** );
- virtual Py_ssize_t buffer_getsegcount( Py_ssize_t* );
-
- private:
- void missing_method( void );
- static PyObject *method_call_handler( PyObject *self, PyObject *args );
- };
-
- template<TEMPLATE_TYPENAME T>
- class PythonExtension: public PythonExtensionBase
- {
- public:
- static PyTypeObject* type_object()
- {
- return behaviors().type_object();
- }
-
- static int check( PyObject *p )
- {
- // is p like me?
- return p->ob_type == type_object();
- }
-
- static int check( const Object& ob )
- {
- return check( ob.ptr());
- }
-
-
- //
- // every object needs getattr implemented
- // to support methods
- //
- virtual Object getattr( const char *name )
- {
- return getattr_methods( name );
- }
-
- protected:
- explicit PythonExtension()
- : PythonExtensionBase()
- {
- #ifdef PyObject_INIT
- (void)PyObject_INIT( this, type_object() );
- #else
- ob_refcnt = 1;
- ob_type = type_object();
- #endif
-
- // every object must support getattr
- behaviors().supportGetattr();
- }
-
- virtual ~PythonExtension()
- {}
-
- static PythonType &behaviors()
- {
- static PythonType* p;
- if( p == NULL )
- {
-#if defined( _CPPRTTI ) || defined(__GNUG__)
- const char *default_name = (typeid ( T )).name();
-#else
- const char *default_name = "unknown";
-#endif
- p = new PythonType( sizeof( T ), 0, default_name );
- p->dealloc( extension_object_deallocator );
- }
-
- return *p;
- }
-
-
- typedef Object (T::*method_varargs_function_t)( const Tuple &args );
- typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws );
-
-#if defined( PYCXX_USING_HASH_MAP )
- typedef __PYCXX_HASHMAP_NAMESPACE::hash_map<std::string, MethodDefExt<T> *, __pycxx_str_hash_func> method_map_t;
-#else
- typedef std::map<std::string,MethodDefExt<T> *> method_map_t;
-#endif
-
- // support the default attributes, __name__, __doc__ and methods
- virtual Object getattr_default( const char *_name )
- {
- std::string name( _name );
-
- if( name == "__name__" && type_object()->tp_name != NULL )
- {
- return Py::String( type_object()->tp_name );
- }
- if( name == "__doc__" && type_object()->tp_doc != NULL )
- {
- return Py::String( type_object()->tp_doc );
- }
-
-// trying to fake out being a class for help()
-// else if( name == "__bases__" )
-// {
-// return Py::Tuple(0);
-// }
-// else if( name == "__module__" )
-// {
-// return Py::Nothing();
-// }
-// else if( name == "__dict__" )
-// {
-// return Py::Dict();
-// }
-
- return getattr_methods( _name );
- }
-
- // turn a name into function object
- virtual Object getattr_methods( const char *_name )
- {
- std::string name( _name );
-
- method_map_t &mm = methods();
-
- EXPLICIT_TYPENAME method_map_t::const_iterator i;
-
- if( name == "__methods__" )
- {
- List methods;
-
- for( i = mm.begin(); i != mm.end(); ++i )
- methods.append( String( (*i).first ) );
-
- return methods;
- }
-
- // see if name exists and get entry with method
- i = mm.find( name );
- if( i == mm.end() )
- throw AttributeError( name );
-
- Tuple self( 2 );
-
- self[0] = Object( this );
- self[1] = String( name );
-
- MethodDefExt<T> *method_definition = i->second;
-
- PyObject *func = PyCFunction_New( &method_definition->ext_meth_def, self.ptr() );
-
- return Object(func, true);
- }
-
- static void add_varargs_method( const char *name, method_varargs_function_t function, const char *doc="" )
- {
- method_map_t &mm = methods();
-
- // check that all methods added are unique
- EXPLICIT_TYPENAME method_map_t::const_iterator i;
- i = mm.find( name );
- if( i != mm.end() )
- throw AttributeError( name );
-
- MethodDefExt<T> *method_definition = new MethodDefExt<T>
- (
- name,
- function,
- method_varargs_call_handler,
- doc
- );
-
- mm[std::string( name )] = method_definition;
- }
-
- static void add_keyword_method( const char *name, method_keyword_function_t function, const char *doc="" )
- {
- method_map_t &mm = methods();
-
- // check that all methods added are unique
- EXPLICIT_TYPENAME method_map_t::const_iterator i;
- i = mm.find( name );
- if( i != mm.end() )
- throw AttributeError( name );
-
- MethodDefExt<T> *method_definition = new MethodDefExt<T>
- (
- name,
- function,
- method_keyword_call_handler,
- doc
- );
-
- mm[std::string( name )] = method_definition;
- }
-
- private:
- static method_map_t &methods(void)
- {
- static method_map_t *map_of_methods = NULL;
- if( map_of_methods == NULL )
- map_of_methods = new method_map_t;
-
- return *map_of_methods;
- }
-
- static PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords )
- {
- try
- {
- Tuple self_and_name_tuple( _self_and_name_tuple );
-
- PyObject *self_in_cobject = self_and_name_tuple[0].ptr();
- T *self = static_cast<T *>( self_in_cobject );
-
- String name( self_and_name_tuple[1] );
-
- method_map_t &mm = methods();
-
- EXPLICIT_TYPENAME method_map_t::const_iterator i;
- i = mm.find( name );
- if( i == mm.end() )
- return 0;
-
- MethodDefExt<T> *meth_def = i->second;
-
- Tuple args( _args );
-
- // _keywords may be NULL so be careful about the way the dict is created
- Dict keywords;
- if( _keywords != NULL )
- keywords = Dict( _keywords );
-
- Object result( (self->*meth_def->ext_keyword_function)( args, keywords ) );
-
- return new_reference_to( result.ptr() );
- }
- catch( Exception & )
- {
- return 0;
- }
- }
-
- static PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args )
- {
- try
- {
- Tuple self_and_name_tuple( _self_and_name_tuple );
-
- PyObject *self_in_cobject = self_and_name_tuple[0].ptr();
- T *self = static_cast<T *>( self_in_cobject );
-
- String name( self_and_name_tuple[1] );
-
- method_map_t &mm = methods();
-
- EXPLICIT_TYPENAME method_map_t::const_iterator i;
- i = mm.find( name );
- if( i == mm.end() )
- return 0;
-
- MethodDefExt<T> *meth_def = i->second;
-
- Tuple args( _args );
-
- Object result;
-
- // TMM: 7Jun'01 - Adding try & catch in case of STL debug-mode exceptions.
- #ifdef _STLP_DEBUG
- try
- {
- result = (self->*meth_def->ext_varargs_function)( args );
- }
- catch (std::__stl_debug_exception)
- {
- // throw cxx::RuntimeError( sErrMsg );
- throw cxx::RuntimeError( "Error message not set yet." );
- }
- #else
- result = (self->*meth_def->ext_varargs_function)( args );
- #endif // _STLP_DEBUG
-
- return new_reference_to( result.ptr() );
- }
- catch( Exception & )
- {
- return 0;
- }
- }
-
- static void extension_object_deallocator ( PyObject* t )
- {
- delete (T *)( t );
- }
-
- //
- // prevent the compiler generating these unwanted functions
- //
- explicit PythonExtension( const PythonExtension<T>& other );
- void operator=( const PythonExtension<T>& rhs );
- };
-
- //
- // ExtensionObject<T> is an Object that will accept only T's.
- //
- template<TEMPLATE_TYPENAME T>
- class ExtensionObject: public Object
- {
- public:
-
- explicit ExtensionObject ( PyObject *pyob )
- : Object( pyob )
- {
- validate();
- }
-
- ExtensionObject( const ExtensionObject<T>& other )
- : Object( *other )
- {
- validate();
- }
-
- ExtensionObject( const Object& other )
- : Object( *other )
- {
- validate();
- }
-
- ExtensionObject& operator= ( const Object& rhs )
- {
- return (*this = *rhs );
- }
-
- ExtensionObject& operator= ( PyObject* rhsp )
- {
- if( ptr() == rhsp )
- return *this;
- set( rhsp );
- return *this;
- }
-
- virtual bool accepts ( PyObject *pyob ) const
- {
- return ( pyob && T::check( pyob ));
- }
-
- //
- // Obtain a pointer to the PythonExtension object
- //
- T *extensionObject(void)
- {
- return static_cast<T *>( ptr() );
- }
- };
-
-} // Namespace Py
-// End of CXX_Extensions.h
-#endif
Modified: trunk/matplotlib/CXX/IndirectPythonInterface.cxx
===================================================================
--- trunk/matplotlib/CXX/IndirectPythonInterface.cxx 2010-01-16 19:20:03 UTC (rev 8083)
+++ trunk/matplotlib/CXX/IndirectPythonInterface.cxx 2010-01-16 22:07:53 UTC (rev 8084)
@@ -34,564 +34,10 @@
// DAMAGE.
//
//-----------------------------------------------------------------------------
+#include "CXX/WrapPython.h"
-#include "CXX/IndirectPythonInterface.hxx"
-
-namespace Py
-{
-bool _Buffer_Check( PyObject *op ) { return (op)->ob_type == _Buffer_Type(); }
-bool _CFunction_Check( PyObject *op ) { return (op)->ob_type == _CFunction_Type(); }
-bool _Class_Check( PyObject *op ) { return (op)->ob_type == _Class_Type(); }
-bool _CObject_Check( PyObject *op ) { return (op)->ob_type == _CObject_Type(); }
-bool _Complex_Check( PyObject *op ) { return (op)->ob_type == _Complex_Type(); }
-bool _Dict_Check( PyObject *op ) { return (op)->ob_type == _Dict_Type(); }
-bool _File_Check( PyObject *op ) { return (op)->ob_type == _File_Type(); }
-bool _Float_Check( PyObject *op ) { return (op)->ob_type == _Float_Type(); }
-bool _Function_Check( PyObject *op ) { return (op)->ob_type == _Function_Type(); }
-bool _Instance_Check( PyObject *op ) { return (op)->ob_type == _Instance_Type(); }
-bool _Boolean_Check( PyObject *op ) { return (op)->ob_type == _Bool_Type(); }
-bool _Int_Check( PyObject *op ) { return (op)->ob_type == _Int_Type(); }
-bool _List_Check( PyObject *o ) { return o->ob_type == _List_Type(); }
-bool _Long_Check( PyObject *op ) { return (op)->ob_type == _Long_Type(); }
-bool _Method_Check( PyObject *op ) { return (op)->ob_type == _Method_Type(); }
-bool _Module_Check( PyObject *op ) { return (op)->ob_type == _Module_Type(); }
-bool _Range_Check( PyObject *op ) { return (op)->ob_type == _Range_Type(); }
-bool _Slice_Check( PyObject *op ) { return (op)->ob_type == _Slice_Type(); }
-bool _String_Check( PyObject *o ) { return o->ob_type == _String_Type(); }
-bool _TraceBack_Check( PyObject *v ) { return (v)->ob_type == _TraceBack_Type(); }
-bool _Tuple_Check( PyObject *op ) { return (op)->ob_type == _Tuple_Type(); }
-bool _Type_Check( PyObject *op ) { return (op)->ob_type == _Type_Type(); }
-
-#if PY_MAJOR_VERSION >= 2
-bool _Unicode_Check( PyObject *op ) { return (op)->ob_type == _Unicode_Type(); }
-#endif
-
-
-
-#if defined(PY_WIN32_DELAYLOAD_PYTHON_DLL)
-
-#if defined(MS_WINDOWS)
-#include <windows.h>
-
-
-static HMODULE python_dll;
-
-static PyObject *ptr__Exc_ArithmeticError = NULL;
-static PyObject *ptr__Exc_AssertionError = NULL;
-static PyObject *ptr__Exc_AttributeError = NULL;
-static PyObject *ptr__Exc_EnvironmentError = NULL;
-static PyObject *ptr__Exc_EOFError = NULL;
-static PyObject *ptr__Exc_Exception = NULL;
-static PyObject *ptr__Exc_FloatingPointError = NULL;
-static PyObject *ptr__Exc_ImportError = NULL;
-static PyObject *ptr__Exc_IndexError = NULL;
-static PyObject *ptr__Exc_IOError = NULL;
-static PyObject *ptr__Exc_KeyboardInterrupt = NULL;
-static PyObject *ptr__Exc_KeyError = NULL;
-static PyObject *ptr__Exc_LookupError = NULL;
-static PyObject *ptr__Exc_MemoryError = NULL;
-static PyObject *ptr__Exc_MemoryErrorInst = NULL;
-static PyObject *ptr__Exc_NameError = NULL;
-static PyObject *ptr__Exc_NotImplementedError = NULL;
-static PyObject *ptr__Exc_OSError = NULL;
-static PyObject *ptr__Exc_OverflowError = NULL;
-static PyObject *ptr__Exc_RuntimeError = NULL;
-static PyObject *ptr__Exc_StandardError = NULL;
-static PyObject *ptr__Exc_SyntaxError = NULL;
-static PyObject *ptr__Exc_SystemError = NULL;
-static PyObject *ptr__Exc_SystemExit = NULL;
-static PyObject *ptr__Exc_TypeError = NULL;
-static PyObject *ptr__Exc_ValueError = NULL;
-static PyObject *ptr__Exc_ZeroDivisionError = NULL;
-
-#ifdef MS_WINDOWS
-static PyObject *ptr__Exc_WindowsError = NULL;
-#endif
-
-#if PY_MAJOR_VERSION >= 2
-static PyObject *ptr__Exc_IndentationError = NULL;
-static PyObject *ptr__Exc_TabError = NULL;
-static PyObject *ptr__Exc_UnboundLocalError = NULL;
-static PyObject *ptr__Exc_UnicodeError = NULL;
-#endif
-
-static PyObject *ptr__PyNone = NULL;
-
-static PyObject *ptr__PyFalse = NULL;
-static PyObject *ptr__PyTrue = NULL;
-
-static PyTypeObject *ptr__Buffer_Type = NULL;
-static PyTypeObject *ptr__CFunction_Type = NULL;
-static PyTypeObject *ptr__Class_Type = NULL;
-static PyTypeObject *ptr__CObject_Type = NULL;
-static PyTypeObject *ptr__Complex_Type = NULL;
-static PyTypeObject *ptr__Dict_Type = NULL;
-static PyTypeObject *ptr__File_Type = NULL;
-static PyTypeObject *ptr__Float_Type = NULL;
-static PyTypeObject *ptr__Function_Type = NULL;
-static PyTypeObject *ptr__Instance_Type = NULL;
-static PyTypeObject *ptr__Int_Type = NULL;
-static PyTypeObject *ptr__List_Type = NULL;
-static PyTypeObject *ptr__Long_Type = NULL;
-static PyTypeObject *ptr__Method_Type = NULL;
-static PyTypeObject *ptr__Module_Type = NULL;
-static PyTypeObject *ptr__Range_Type = NULL;
-static PyTypeObject *ptr__Slice_Type = NULL;
-static PyTypeObject *ptr__String_Type = NULL;
-static PyTypeObject *ptr__TraceBack_Type = NULL;
-static PyTypeObject *ptr__Tuple_Type = NULL;
-static PyTypeObject *ptr__Type_Type = NULL;
-
-#if PY_MAJOR_VERSION >= 2
-static PyTypeObject *ptr__Unicode_Type = NULL;
-#endif
-
-static int *ptr_Py_DebugFlag = NULL;
-static int *ptr_Py_InteractiveFlag = NULL;
-static int *ptr_Py_OptimizeFlag = NULL;
-static int *ptr_Py_NoSiteFlag = NULL;
-static int *ptr_Py_TabcheckFlag = NULL;
-static int *ptr_Py_VerboseFlag = NULL;
-
-#if PY_MAJOR_VERSION >= 2
-static int *ptr_Py_UnicodeFlag = NULL;
-#endif
-
-static char **ptr__Py_PackageContext = NULL;
-
-#ifdef Py_REF_DEBUG
-int *ptr_Py_RefTotal;
-#endif
-
-
-//--------------------------------------------------------------------------------
-class GetAddressException
-{
-public:
- GetAddressException( const char *_name )
- : name( _name )
- {}
- virtual ~GetAddressException() {}
- const char *name;
-};
-
-
-//--------------------------------------------------------------------------------
-static PyObject *GetPyObjectPointer_As_PyObjectPointer( const char *name )
-{
- FARPROC addr = GetProcAddress( python_dll, name );
- if( addr == NULL )
- throw GetAddressException( name );
-
- return *(PyObject **)addr;
-}
-
-static PyObject *GetPyObject_As_PyObjectPointer( const char *name )
-{
- FARPROC addr = GetProcAddress( python_dll, name );
- if( addr == NULL )
- throw GetAddressException( name );
-
- return (PyObject *)addr;
-}
-
-static PyTypeObject *GetPyTypeObjectPointer_As_PyTypeObjectPointer( const char *name )
-{
- FARPROC addr = GetProcAddress( python_dll, name );
- if( addr == NULL )
- throw GetAddressException( name );
-
- return *(PyTypeObject **)addr;
-}
-
-static PyTypeObject *GetPyTypeObject_As_PyTypeObjectPointer( const char *name )
-{
- FARPROC addr = GetProcAddress( python_dll, name );
- if( addr == NULL )
- throw GetAddressException( name );
-
- return (PyTypeObject *)addr;
-}
-
-static int *GetInt_as_IntPointer( const char *name )
-{
- FARPROC addr = GetProcAddress( python_dll, name );
- if( addr == NULL )
- throw GetAddressException( name );
-
- return (int *)addr;
-}
-
-static char **GetCharPointer_as_CharPointerPointer( const char *name )
-{
- FARPROC addr = GetProcAddress( python_dll, name );
- if( addr == NULL )
- throw GetAddressException( name );
-
- return (char **)addr;
-}
-
-
-#ifdef _DEBUG
-static const char python_dll_name_format[] = "PYTHON%1.1d%1.1d_D.DLL";
+#if PY_MAJOR_VERSION == 2
+#include "Python2/IndirectPythonInterface.cxx"
#else
-static const char python_dll_name_format[] = "PYTHON%1.1d%1.1d.DLL";
+#include "Python3/IndirectPythonInterface.cxx"
#endif
-
-//--------------------------------------------------------------------------------
-bool InitialisePythonIndirectInterface()
-{
- char python_dll_name[sizeof(python_dll_name_format)];
-
- sprintf( python_dll_name, python_dll_name_format, PY_MAJOR_VERSION, PY_MINOR_VERSION );
-
- python_dll = LoadLibrary( python_dll_name );
- if( python_dll == NULL )
- return false;
-
- try
-{
-#ifdef Py_REF_DEBUG
- ptr_Py_RefTotal = GetInt_as_IntPointer( "_Py_RefTotal" );
-#endif
- ptr_Py_DebugFlag = GetInt_as_IntPointer( "Py_DebugFlag" );
- ptr_Py_InteractiveFlag = GetInt_as_IntPointer( "Py_InteractiveFlag" );
- ptr_Py_OptimizeFlag = GetInt_as_IntPointer( "Py_OptimizeFlag" );
- ptr_Py_NoSiteFlag = GetInt_as_IntPointer( "Py_NoSiteFlag" );
- ptr_Py_TabcheckFlag = GetInt_as_IntPointer( "Py_TabcheckFlag" );
- ptr_Py_VerboseFlag = GetInt_as_IntPointer( "Py_VerboseFlag" );
-#if PY_MAJOR_VERSION >= 2
- ptr_Py_UnicodeFlag = GetInt_as_IntPointer( "Py_UnicodeFlag" );
-#endif
- ptr__Py_PackageContext = GetCharPointer_as_CharPointerPointer( "_Py_PackageContext" );
-
- ptr__Exc_ArithmeticError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_ArithmeticError" );
- ptr__Exc_AssertionError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_AssertionError" );
- ptr__Exc_AttributeError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_AttributeError" );
- ptr__Exc_EnvironmentError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_EnvironmentError" );
- ptr__Exc_EOFError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_EOFError" );
- ptr__Exc_Exception = GetPyObjectPointer_As_PyObjectPointer( "PyExc_Exception" );
- ptr__Exc_FloatingPointError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_FloatingPointError" );
- ptr__Exc_ImportError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_ImportError" );
- ptr__Exc_IndexError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_IndexError" );
- ptr__Exc_IOError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_IOError" );
- ptr__Exc_KeyboardInterrupt = GetPyObjectPointer_As_PyObjectPointer( "PyExc_KeyboardInterrupt" );
- ptr__Exc_KeyError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_KeyError" );
- ptr__Exc_LookupError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_LookupError" );
- ptr__Exc_MemoryError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_MemoryError" );
- ptr__Exc_MemoryErrorInst = GetPyObjectPointer_As_PyObjectPointer( "PyExc_MemoryErrorInst" );
- ptr__Exc_NameError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_NameError" );
- ptr__Exc_NotImplementedError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_NotImplementedError" );
- ptr__Exc_OSError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_OSError" );
- ptr__Exc_OverflowError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_OverflowError" );
- ptr__Exc_RuntimeError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_RuntimeError" );
- ptr__Exc_StandardError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_StandardError" );
- ptr__Exc_SyntaxError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_SyntaxError" );
- ptr__Exc_SystemError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_SystemError" );
- ptr__Exc_SystemExit = GetPyObjectPointer_As_PyObjectPointer( "PyExc_SystemExit" );
- ptr__Exc_TypeError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_TypeError" );
- ptr__Exc_ValueError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_ValueError" );
-#ifdef MS_WINDOWS
- ptr__Exc_WindowsError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_WindowsError" );
-#endif
- ptr__Exc_ZeroDivisionError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_ZeroDivisionError" );
-
-#if PY_MAJOR_VERSION >= 2
- ptr__Exc_IndentationError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_IndentationError" );
- ptr__Exc_TabError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_TabError" );
- ptr__Exc_UnboundLocalError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_UnboundLocalError" );
- ptr__Exc_UnicodeError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_UnicodeError" );
-#endif
- ptr__PyNone = GetPyObject_As_PyObjectPointer( "_Py_NoneStruct" );
-
- ptr__PyFalse = GetPyObject_As_PyObjectPointer( "_Py_ZeroStruct" );
- ptr__PyTrue = GetPyObject_As_PyObjectPointer( "_Py_TrueStruct" );
-
- ptr__Buffer_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyBuffer_Type" );
- ptr__CFunction_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyCFunction_Type" );
- ptr__Class_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyClass_Type" );
- ptr__CObject_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyCObject_Type" );
- ptr__Complex_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyComplex_Type" );
- ptr__Dict_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyDict_Type" );
- ptr__File_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyFile_Type" );
- ptr__Float_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyFloat_Type" );
- ptr__Function_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyFunction_Type" );
- ptr__Instance_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyInstance_Type" );
- ptr__Int_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyInt_Type" );
- ptr__List_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyList_Type" );
- ptr__Long_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyLong_Type" );
- ptr__Method_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyMethod_Type" );
- ptr__Module_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyModule_Type" );
- ptr__Range_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyRange_Type" );
- ptr__Slice_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PySlice_Type" );
- ptr__String_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyString_Type" );
- ptr__TraceBack_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyTraceBack_Type" );
- ptr__Tuple_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyTuple_Type" );
- ptr__Type_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyType_Type" );
-
-#if PY_MAJOR_VERSION >= 2
- ptr__Unicode_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyUnicode_Type" );
-#endif
-}
- catch( GetAddressException &e )
- {
- OutputDebugString( python_dll_name );
- OutputDebugString( " does not contain symbol ");
- OutputDebugString( e.name );
- OutputDebugString( "\n" );
-
- return false;
- }
-
- return true;
-}
-
-//
-// Wrap variables as function calls
-//
-PyObject * _Exc_ArithmeticError(){ return ptr__Exc_ArithmeticError; }
-PyObject * _Exc_AssertionError(){ return ptr__Exc_AssertionError; }
-PyObject * _Exc_AttributeError(){ return ptr__Exc_AttributeError; }
-PyObject * _Exc_EnvironmentError(){ return ptr__Exc_EnvironmentError; }
-PyObject * _Exc_EOFError() { return ptr__Exc_EOFError; }
-PyObject * _Exc_Exception() { return ptr__Exc_Exception; }
-PyObject * _Exc_FloatingPointError(){ return ptr__Exc_FloatingPointError; }
-PyObject * _Exc_ImportError() { return ptr__Exc_ImportError; }
-PyObject * _Exc_IndexError() { return ptr__Exc_IndexError; }
-PyObject * _Exc_IOError() { return ptr__Exc_IOError; }
-PyObject * _Exc_KeyboardInterrupt(){ return ptr__Exc_KeyboardInterrupt; }
-PyObject * _Exc_KeyError() { return ptr__Exc_KeyError; }
-PyObject * _Exc_LookupError() { return ptr__Exc_LookupError; }
-PyObject * _Exc_MemoryError() { return ptr__Exc_MemoryError; }
-PyObject * _Exc_MemoryErrorInst(){ return ptr__Exc_MemoryErrorInst; }
-PyObject * _Exc_NameError() { return ptr__Exc_NameError; }
-PyObject * _Exc_NotImplementedError(){ return ptr__Exc_NotImplementedError; }
-PyObject * _Exc_OSError() { return ptr__Exc_OSError; }
-PyObject * _Exc_OverflowError() { return ptr__Exc_OverflowError; }
-PyObject * _Exc_RuntimeError() { return ptr__Exc_RuntimeError; }
-PyObject * _Exc_StandardError() { return ptr__Exc_StandardError; }
-PyObject * _Exc_SyntaxError() { return ptr__Exc_SyntaxError; }
-PyObject * _Exc_SystemError() { return ptr__Exc_SystemError; }
-PyObject * _Exc_SystemExit() { return ptr__Exc_SystemExit; }
-PyObject * _Exc_TypeError() { return ptr__Exc_TypeError; }
-PyObject * _Exc_ValueError() { return ptr__Exc_ValueError; }
-#ifdef MS_WINDOWS
-PyObject * _Exc_WindowsError() { return ptr__Exc_WindowsError; }
-#endif
-PyObject * _Exc_ZeroDivisionError(){ return ptr__Exc_ZeroDivisionError; }
-
-#if PY_MAJOR_VERSION >= 2
-PyObject * _Exc_IndentationError(){ return ptr__Exc_IndentationError; }
-PyObject * _Exc_TabError() { return ptr__Exc_TabError; }
-PyObject * _Exc_UnboundLocalError(){ return ptr__Exc_UnboundLocalError; }
-PyObject * _Exc_UnicodeError() { return ptr__Exc_UnicodeError; }
-#endif
-
-//
-// wrap items in Object.h
-//
-PyObject * _None() { return ptr__PyNone; }
-
-PyObject * _False() { return ptr__PyFalse; }
-PyObject * _True() { return ptr__PyTrue; }
-
-PyTypeObject * _Buffer_Type() { return ptr__Buffer_Type; }
-PyTypeObject * _CFunction_Type(){ return ptr__CFunction_Type; }
-PyTypeObject * _Class_Type() { return ptr__Class_Type; }
-PyTypeObject * _CObject_Type() { return ptr__CObject_Type; }
-PyTypeObject * _Complex_Type() { return ptr__Complex_Type; }
-PyTypeObject * _Dict_Type() { return ptr__Dict_Type; }
-PyTypeObject * _File_Type() { return ptr__File_Type; }
-PyTypeObject * _Float_Type() { return ptr__Float_Type; }
-PyTypeObject * _Function_Type() { return ptr__Function_Type; }
-PyTypeObject * _Instance_Type() { return ptr__Instance_Type; }
-PyTypeObject * _Bool_Type() { return ptr__Bool_Type; }
-PyTypeObject * _Int_Type() { return ptr__Int_Type; }
-PyTypeObject * _List_Type() { return ptr__List_Type; }
-PyTypeObject * _Long_Type() { return ptr__Long_Type; }
-PyTypeObject * _Method_Type() { return ptr__Method_Type; }
-PyTypeObject * _Module_Type() { return ptr__Module_Type; }
-PyTypeObject * _Range_Type() { return ptr__Range_Type; }
-PyTypeObject * _Slice_Type() { return ptr__Slice_Type; }
-PyTypeObject * _String_Type() { return ptr__String_Type; }
-PyTypeObject * _TraceBack_Type(){ return ptr__TraceBack_Type; }
-PyTypeObject * _Tuple_Type() { return ptr__Tuple_Type; }
-PyTypeObject * _Type_Type() { return ptr__Type_Type; }
-
-#if PY_MAJOR_VERSION >= 2
-PyTypeObject * _Unicode_Type() { return ptr__Unicode_Type; }
-#endif
-
-char *__Py_PackageContext() { return *ptr__Py_PackageContext; }
-
-
-//
-// wrap the Python Flag variables
-//
-int &_Py_DebugFlag() { return *ptr_Py_DebugFlag; }
-int &_Py_InteractiveFlag() { return *ptr_Py_InteractiveFlag; }
-int &_Py_OptimizeFlag() { return *ptr_Py_OptimizeFlag; }
-int &_Py_NoSiteFlag() { return *ptr_Py_NoSiteFlag; }
-int &_Py_TabcheckFlag() { return *ptr_Py_TabcheckFlag; }
-int &_Py_VerboseFlag() { return *ptr_Py_VerboseFlag; }
-#if PY_MAJOR_VERSION >= 2
-int &_Py_UnicodeFlag() { return *ptr_Py_UnicodeFlag; }
-#endif
-
-void _XINCREF( PyObject *op )
-{
- // This function must match the contents of Py_XINCREF(op)
- if( op == NULL )
- return;
-
-#ifdef Py_REF_DEBUG
- (*ptr_Py_RefTotal)++;
-#endif
- (op)->ob_refcnt++;
-
-}
-
-void _XDECREF( PyObject *op )
-{
- // This function must match the contents of Py_XDECREF(op);
- if( op == NULL )
- return;
-
-#ifdef P...
[truncated message content] |
|
From: <as...@us...> - 2010-01-16 19:20:09
|
Revision: 8083
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8083&view=rev
Author: astraw
Date: 2010-01-16 19:20:03 +0000 (Sat, 16 Jan 2010)
Log Message:
-----------
Don't create minor ticks on top of existing major ticks (Neil Crighton).
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/lib/matplotlib/ticker.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-01-16 19:19:14 UTC (rev 8082)
+++ trunk/matplotlib/CHANGELOG 2010-01-16 19:20:03 UTC (rev 8083)
@@ -1,3 +1,6 @@
+2009-01-16 Don't create minor ticks on top of existing major
+ ticks. Patch by Neil Crighton. -ADS
+
2009-01-16 Ensure three minor ticks always drawn (SF# 2924245). Patch
by Neil Crighton. -ADS
Modified: trunk/matplotlib/lib/matplotlib/ticker.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/ticker.py 2010-01-16 19:19:14 UTC (rev 8082)
+++ trunk/matplotlib/lib/matplotlib/ticker.py 2010-01-16 19:20:03 UTC (rev 8083)
@@ -1334,10 +1334,15 @@
vmin, vmax = self.axis.get_view_interval()
if vmin > vmax:
vmin,vmax = vmax,vmin
+ locs = locs[(vmin < locs) & (locs < vmax)]
- return self.raise_if_exceeds(locs[(vmin < locs) & (locs < vmax)])
+ # don't create minor ticks on top of existing major ticks
+ diff = 0.5 * abs(locs[1] - locs[0])
+ locs = [l for l in locs if (np.abs(l - majorlocs) > diff).all()]
+ return self.raise_if_exceeds(np.array(locs))
+
class OldAutoLocator(Locator):
"""
On autoscale this class picks the best MultipleLocator to set the
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <as...@us...> - 2010-01-16 19:19:21
|
Revision: 8082
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8082&view=rev
Author: astraw
Date: 2010-01-16 19:19:14 +0000 (Sat, 16 Jan 2010)
Log Message:
-----------
Ensure three minor ticks always drawn (SF# 2924245). Patch by Neil Crighton.
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/lib/matplotlib/ticker.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-01-16 17:45:32 UTC (rev 8081)
+++ trunk/matplotlib/CHANGELOG 2010-01-16 19:19:14 UTC (rev 8082)
@@ -1,3 +1,6 @@
+2009-01-16 Ensure three minor ticks always drawn (SF# 2924245). Patch
+ by Neil Crighton. -ADS
+
2010-01-16 Applied patch by Ian Thomas to fix two contouring
problems: now contourf handles interior masked regions,
and the boundaries of line and filled contours coincide. - EF
Modified: trunk/matplotlib/lib/matplotlib/ticker.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/ticker.py 2010-01-16 17:45:32 UTC (rev 8081)
+++ trunk/matplotlib/lib/matplotlib/ticker.py 2010-01-16 19:19:14 UTC (rev 8082)
@@ -1320,15 +1320,13 @@
except IndexError:
raise ValueError('Need at least two major ticks to find minor '
'tick locations')
- # see whether major step should be divided by 5, 4 or 2. This
+ # see whether major step should be divided by 5, 4. This
# should cover most cases.
temp = float(('%e' % majorstep).split('e')[0])
if temp % 5 < 1e-10:
minorstep = majorstep / 5.
- elif temp % 2 < 1e-10:
- minorstep = majorstep / 4.
else:
- minorstep = majorstep / 2.
+ minorstep = majorstep / 4.
tmin = majorlocs[0] - majorstep
tmax = majorlocs[-1] + majorstep
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ef...@us...> - 2010-01-16 17:45:38
|
Revision: 8081
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8081&view=rev
Author: efiring
Date: 2010-01-16 17:45:32 +0000 (Sat, 16 Jan 2010)
Log Message:
-----------
Patch by Ian Thomas fixes 2 major cntr.c problems:
Now line contours coincide with filled contour boundaries,
and interior masked regions are handled correctly by contourf.
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/examples/pylab_examples/contourf_demo.py
trunk/matplotlib/src/cntr.c
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-01-11 19:55:26 UTC (rev 8080)
+++ trunk/matplotlib/CHANGELOG 2010-01-16 17:45:32 UTC (rev 8081)
@@ -1,10 +1,14 @@
-2009-01-11 The color of legend patch follows the rc parameters
+2010-01-16 Applied patch by Ian Thomas to fix two contouring
+ problems: now contourf handles interior masked regions,
+ and the boundaries of line and filled contours coincide. - EF
+
+2009-01-11 The color of legend patch follows the rc parameters
axes.facecolor and axes.edgecolor. -JJL
-2009-01-11 adjustable of Axes can be "box-forced" which allow
+2009-01-11 adjustable of Axes can be "box-forced" which allow
sharing axes. -JJL
-2009-01-11 Add add_click and pop_click methods in
+2009-01-11 Add add_click and pop_click methods in
BlockingContourLabeler. -JJL
2010-01-03 Added rcParams['axes.color_cycle'] - EF
Modified: trunk/matplotlib/examples/pylab_examples/contourf_demo.py
===================================================================
--- trunk/matplotlib/examples/pylab_examples/contourf_demo.py 2010-01-11 19:55:26 UTC (rev 8080)
+++ trunk/matplotlib/examples/pylab_examples/contourf_demo.py 2010-01-16 17:45:32 UTC (rev 8081)
@@ -3,35 +3,14 @@
origin = 'lower'
#origin = 'upper'
-# The following controls only interior masking.
-test_masking = False # There is a bug in filled contour masking with
- # interior masks.
+delta = 0.025
-if test_masking:
- # Use a coarse grid so only a few masked points are needed.
- delta = 0.5
-else:
- delta = 0.025
-
x = y = arange(-3.0, 3.01, delta)
X, Y = meshgrid(x, y)
Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10 * (Z1 - Z2)
-# interior badmask doesn't work yet for filled contours
-if test_masking:
- badmask = zeros(shape(Z))
-
- badmask[5,5] = 1
- badmask[5,6] = 1
- Z[5,5] = 0
- Z[5,6] = 0
-
- badmask[0,0] = 1
- Z[0,0] = 0
- Z = ma.array(Z, mask=badmask)
-
nr, nc = Z.shape
# put NaNs in one corner:
@@ -43,7 +22,11 @@
# mask another corner:
Z[:nr//6, :nc//6] = ma.masked
+# mask a circle in the middle:
+interior = sqrt((X**2) + (Y**2)) < 0.5
+Z[interior] = ma.masked
+
# We are using automatic selection of contour levels;
# this is usually not such a good idea, because they don't
# occur on nice boundaries, but we do it here for purposes
@@ -63,7 +46,7 @@
origin=origin,
hold='on')
-title('Nonsense (with 2 masked corners)')
+title('Nonsense (3 masked regions)')
xlabel('word length anomaly')
ylabel('sentence length anomaly')
@@ -87,7 +70,7 @@
colors = ('k',),
linewidths = (3,),
origin = origin)
-title('Listed colors (with 2 masked corners)')
+title('Listed colors (3 masked regions)')
clabel(CS4, fmt = '%2.1f', colors = 'w', fontsize=14)
colorbar(CS3)
Modified: trunk/matplotlib/src/cntr.c
===================================================================
--- trunk/matplotlib/src/cntr.c 2010-01-11 19:55:26 UTC (rev 8080)
+++ trunk/matplotlib/src/cntr.c 2010-01-16 17:45:32 UTC (rev 8081)
@@ -50,12 +50,14 @@
* The problem is that two disjoint curves cut through a saddle zone
* (I reject the alternative of connecting the opposite points to make
* a single self-intersecting curve, since those make ugly contour plots
- * -- I've tried it). The real problem with saddle zones is that you
- * need to communicate the connectivity decision you make back to the
- * calling routine, since for the next contour level, we need to tell
- * the contour tracer to make the same decision as on the previous
- * level. The input/output triangulation array is the solution to this
- * nasty problem.
+ * -- I've tried it). The solution is to determine the z value of the
+ * centre of the zone, which is the mean of the z values of the four
+ * corner points. If the centre z is higher than the contour level of
+ * interest and you are moving along the line with higher values on the
+ * left, turn right to leave the saddle zone. If the centre z is lower
+ * than the contour level turn left. Whether the centre z is higher
+ * than the 1 or 2 contour levels is stored in the saddle array so that
+ * it does not need to be recalculated in subsequent passes.
*
* Another complicating factor is that there may be logical holes in
* the mesh -- zones which do not exist. We want our contours to stop
@@ -175,6 +177,11 @@
* or not, z value 0, 1, or 2 -- is kept in a mesh sized data array */
typedef short Cdata;
+/* information to decide on correct contour direction in saddle zones
+ * is stored in a mesh sized array. Only those entries corresponding
+ * to saddle zones have nonzero values in this array. */
+typedef char Saddle;
+
/* here is the minimum structure required to tell where we are in the
* mesh sized data array */
typedef struct Csite Csite;
@@ -189,8 +196,8 @@
long count; /* count of start markers visited */
double zlevel[2]; /* contour levels, zlevel[1]<=zlevel[0]
* signals single level case */
- short *triangle; /* triangulation array for the mesh */
- char *reg; /* region array for the mesh (was int) */
+ Saddle *saddle; /* saddle zone information for the mesh */
+ char *reg; /* region array for the mesh (was int) */
Cdata *data; /* added by EF */
long edge0, left0; /* starting site on this curve for closure */
int level0; /* starting level for closure */
@@ -225,8 +232,6 @@
printf("\n");
}
-/* triangle only takes values of -1, 0, 1, so it could be a signed char. */
-/* most or all of the longs probably could be converted to ints with no loss */
/* the Cdata array consists of the following bits:
* Z_VALUE (2 bits) 0, 1, or 2 function value at point
@@ -243,6 +248,7 @@
* OPEN_END marks an i-edge start point whose other endpoint is
* on a boundary for the single level case
* ALL_DONE marks final start point
+ * SLIT_DN_VISITED this slit downstroke hasn't/has been visited in pass 2
*/
#define Z_VALUE 0x0003
#define ZONE_EX 0x0004
@@ -257,6 +263,7 @@
#define SLIT_DN 0x0800
#define OPEN_END 0x1000
#define ALL_DONE 0x2000
+#define SLIT_DN_VISITED 0x4000
/* some helpful macros to find points relative to a given directed
* edge -- points are designated 0, 1, 2, 3 CCW around zone with 0 and
@@ -272,6 +279,15 @@
enum {kind_zone, kind_edge1, kind_edge2,
kind_slit_up, kind_slit_down, kind_start_slit=16} point_kinds;
+/* Saddle zone array consists of the following bits:
+ * SADDLE_SET whether zone's saddle data has been set.
+ * SADDLE_GT0 whether z of centre of zone is higher than site->level[0].
+ * SADDLE_GT1 whether z of centre of zone is higher than site->level[1].
+ */
+#define SADDLE_SET 0x01
+#define SADDLE_GT0 0x02
+#define SADDLE_GT1 0x04
+
/* ------------------------------------------------------------------------ */
/* these actually mark points */
@@ -313,18 +329,17 @@
long left0 = site->left0;
int level0 = site->level0 == level;
int two_levels = site->zlevel[1] > site->zlevel[0];
- short *triangle = site->triangle;
+ Saddle* saddle = site->saddle;
const double *x = pass2 ? site->x : 0;
const double *y = pass2 ? site->y : 0;
- const double *z = pass2 ? site->z : 0;
- double zlevel = pass2 ? site->zlevel[level] : 0.0;
+ const double *z = site->z;
+ double zlevel = site->zlevel[level];
double *xcp = pass2 ? site->xcp : 0;
double *ycp = pass2 ? site->ycp : 0;
short *kcp = pass2 ? site->kcp : 0;
int z0, z1, z2, z3;
- int keep_left = 0; /* flag to try to minimize curvature in saddles */
int done = 0;
int n_kind;
@@ -402,29 +417,28 @@
{
if (z1 == z3)
{
- /* this is a saddle zone, need triangle to decide
- * -- set triangle if not already decided for this zone */
+ /* this is a saddle zone, determine whether to turn left or
+ * right depending on height of centre of zone relative to
+ * contour level. Set saddle[zone] if not already decided. */
long zone = edge + (left > 0 ? left : 0);
- if (triangle)
+ if (!(saddle[zone] & SADDLE_SET))
{
- if (!triangle[zone])
- {
- if (keep_left)
- triangle[zone] = jedge ? -1 : 1;
- else
- triangle[zone] = jedge ? 1 : -1;
- }
- if (triangle[zone] > 0 ? !jedge : jedge)
- goto bkwd;
+ saddle[zone] = SADDLE_SET;
+ double zcentre = (z[p0] + z[p0+left] + z[p1] + z[p1+left])/4.0;
+ if (zcentre > site->zlevel[0])
+ saddle[zone] |=
+ (two_levels && zcentre > site->zlevel[1])
+ ? SADDLE_GT0 | SADDLE_GT1 : SADDLE_GT0;
}
- else
- {
- if (keep_left)
- goto bkwd;
- }
+
+ int turnRight = level == 2 ? (saddle[zone] & SADDLE_GT1)
+ : (saddle[zone] & SADDLE_GT0);
+ if (z1 ^ (level == 2))
+ turnRight = !turnRight;
+ if (!turnRight)
+ goto bkwd;
}
/* bend forward (right along curve) */
- keep_left = 1;
jedge = !jedge;
edge = p1 + (left > 0 ? left : 0);
{
@@ -437,7 +451,6 @@
{
bkwd:
/* bend backward (left along curve) */
- keep_left = 0;
jedge = !jedge;
edge = p0 + (left > 0 ? left : 0);
{
@@ -590,17 +603,27 @@
if (n_kind) kcp[n_kind] += kind_start_slit;
return slit_cutter (site, 0, pass2);
}
+ if (fwd < 0 && level0 && left < 0)
+ {
+ if (n_kind) kcp[n_kind] += kind_start_slit;
+ return slit_cutter (site, 0, pass2);
+ }
return 3;
}
else if (pass2)
{
if (heads_up || (fwd < 0 && (data[edge] & SLIT_DN)))
{
- site->edge = edge;
- site->left = left;
- site->n = n + marked;
- if (n_kind) kcp[n_kind] += kind_start_slit;
- return slit_cutter (site, heads_up, pass2);
+ if (!heads_up && !(data[edge] & SLIT_DN_VISITED))
+ data[edge] |= SLIT_DN_VISITED;
+ else
+ {
+ site->edge = edge;
+ site->left = left;
+ site->n = n + marked;
+ if (n_kind) kcp[n_kind] += kind_start_slit;
+ return slit_cutter (site, heads_up, pass2);
+ }
}
}
else
@@ -1181,6 +1204,8 @@
/* place immediate stop mark if nothing found */
if (!count)
data[0] |= ALL_DONE;
+ else
+ for (i = 0; i < ijmax; ++i) site->saddle[i] = 0;
/* initialize site */
site->edge0 = site->edge00 = site->edge = 0;
@@ -1252,7 +1277,7 @@
if (site == NULL) return NULL;
site->data = NULL;
site->reg = NULL;
- site->triangle = NULL;
+ site->saddle = NULL;
site->xcp = NULL;
site->ycp = NULL;
site->kcp = NULL;
@@ -1268,7 +1293,6 @@
{
long ijmax = iMax * jMax;
long nreg = iMax * jMax + iMax + 1;
- long i;
site->imax = iMax;
site->jmax = jMax;
@@ -1278,21 +1302,20 @@
PyMem_Free(site);
return -1;
}
- site->triangle = (short *) PyMem_Malloc(sizeof(short) * ijmax);
- if (site->triangle == NULL)
+ site->saddle = (Saddle*) PyMem_Malloc(sizeof(Saddle) * ijmax);
+ if (site->saddle == NULL)
{
PyMem_Free(site->data);
PyMem_Free(site);
return -1;
}
- for (i = 0; i < ijmax; i++) site->triangle[i] = 0;
site->reg = NULL;
if (mask != NULL)
{
site->reg = (char *) PyMem_Malloc(sizeof(char) * nreg);
if (site->reg == NULL)
{
- PyMem_Free(site->triangle);
+ PyMem_Free(site->saddle);
PyMem_Free(site->data);
PyMem_Free(site);
return -1;
@@ -1311,7 +1334,7 @@
void cntr_del(Csite *site)
{
- PyMem_Free(site->triangle);
+ PyMem_Free(site->saddle);
PyMem_Free(site->reg);
PyMem_Free(site->data);
PyMem_Free(site);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lee...@us...> - 2010-01-11 19:55:35
|
Revision: 8080
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8080&view=rev
Author: leejjoon
Date: 2010-01-11 19:55:26 +0000 (Mon, 11 Jan 2010)
Log Message:
-----------
The color of legend patch follows the rc parameters axes.facecolor and axes.edgecolor
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/lib/matplotlib/legend.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-01-11 19:55:19 UTC (rev 8079)
+++ trunk/matplotlib/CHANGELOG 2010-01-11 19:55:26 UTC (rev 8080)
@@ -1,3 +1,6 @@
+2009-01-11 The color of legend patch follows the rc parameters
+ axes.facecolor and axes.edgecolor. -JJL
+
2009-01-11 adjustable of Axes can be "box-forced" which allow
sharing axes. -JJL
Modified: trunk/matplotlib/lib/matplotlib/legend.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/legend.py 2010-01-11 19:55:19 UTC (rev 8079)
+++ trunk/matplotlib/lib/matplotlib/legend.py 2010-01-11 19:55:26 UTC (rev 8080)
@@ -284,9 +284,11 @@
# We use FancyBboxPatch to draw a legend frame. The location
# and size of the box will be updated during the drawing time.
+
self.legendPatch = FancyBboxPatch(
xy=(0.0, 0.0), width=1., height=1.,
- facecolor='w', edgecolor='k',
+ facecolor=rcParams["axes.facecolor"],
+ edgecolor=rcParams["axes.edgecolor"],
mutation_scale=self._fontsize,
snap=True
)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lee...@us...> - 2010-01-11 19:55:25
|
Revision: 8079
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8079&view=rev
Author: leejjoon
Date: 2010-01-11 19:55:19 +0000 (Mon, 11 Jan 2010)
Log Message:
-----------
new 'bbox-forced' option for Axes.adjustable
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/lib/matplotlib/axes.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-01-11 19:54:58 UTC (rev 8078)
+++ trunk/matplotlib/CHANGELOG 2010-01-11 19:55:19 UTC (rev 8079)
@@ -1,3 +1,6 @@
+2009-01-11 adjustable of Axes can be "box-forced" which allow
+ sharing axes. -JJL
+
2009-01-11 Add add_click and pop_click methods in
BlockingContourLabeler. -JJL
Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py 2010-01-11 19:54:58 UTC (rev 8078)
+++ trunk/matplotlib/lib/matplotlib/axes.py 2010-01-11 19:55:19 UTC (rev 8079)
@@ -349,7 +349,7 @@
================ =========================================
Keyword Description
================ =========================================
- *adjustable* [ 'box' | 'datalim' ]
+ *adjustable* [ 'box' | 'datalim' | 'box-forced']
*alpha* float: the alpha transparency
*anchor* [ 'C', 'SW', 'S', 'SE', 'E', 'NE', 'N',
'NW', 'W' ]
@@ -947,13 +947,18 @@
*adjustable*
- ========= ============================
- value description
- ========= ============================
- 'box' change physical size of axes
- 'datalim' change xlim or ylim
- ========= ============================
+ ============ =====================================
+ value description
+ ============ =====================================
+ 'box' change physical size of axes
+ 'datalim' change xlim or ylim
+ 'box-forced' same as 'box', but axes can be shared
+ ============ =====================================
+ 'box' does not allow axes sharing, as this can cause
+ unintended side effect. For cases when sharing axes is
+ fine, use 'box-forced'.
+
*anchor*
===== =====================
@@ -984,9 +989,9 @@
def set_adjustable(self, adjustable):
"""
- ACCEPTS: [ 'box' | 'datalim' ]
+ ACCEPTS: [ 'box' | 'datalim' | 'box-forced']
"""
- if adjustable in ('box', 'datalim'):
+ if adjustable in ('box', 'datalim', 'box-forced'):
if self in self._shared_x_axes or self in self._shared_y_axes:
if adjustable == 'box':
raise ValueError(
@@ -1098,7 +1103,7 @@
figW,figH = self.get_figure().get_size_inches()
fig_aspect = figH/figW
- if self._adjustable == 'box':
+ if self._adjustable in ['box', 'box-forced']:
if aspect_scale_mode == "log":
box_aspect = A * self.get_data_ratio_log()
else:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lee...@us...> - 2010-01-11 19:55:07
|
Revision: 8078
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8078&view=rev
Author: leejjoon
Date: 2010-01-11 19:54:58 +0000 (Mon, 11 Jan 2010)
Log Message:
-----------
Add add_click and pop_click methods in BlockingContourLabeler.
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/lib/matplotlib/blocking_input.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-01-11 19:54:32 UTC (rev 8077)
+++ trunk/matplotlib/CHANGELOG 2010-01-11 19:54:58 UTC (rev 8078)
@@ -1,3 +1,6 @@
+2009-01-11 Add add_click and pop_click methods in
+ BlockingContourLabeler. -JJL
+
2010-01-03 Added rcParams['axes.color_cycle'] - EF
2010-01-03 Added Pierre's qt4 formlayout editor and toolbar button - JDH
Modified: trunk/matplotlib/lib/matplotlib/blocking_input.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/blocking_input.py 2010-01-11 19:54:32 UTC (rev 8077)
+++ trunk/matplotlib/lib/matplotlib/blocking_input.py 2010-01-11 19:54:58 UTC (rev 8078)
@@ -193,7 +193,7 @@
# consistent with matlab and sometimes quite useful, but will
# require the user to test how many points were actually
# returned before using data.
- self.fig.canvas.stop_event_loop(event)
+ self.fig.canvas.stop_event_loop()
def mouse_event_pop( self, event ):
"""
@@ -311,6 +311,12 @@
self.cs = cs
BlockingMouseInput.__init__(self, fig=cs.ax.figure )
+ def add_click(self, event):
+ self.button1(event)
+
+ def pop_click(self, event, index=-1):
+ self.button3(event)
+
def button1(self,event):
"""
This will be called if an event involving a button other than
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lee...@us...> - 2010-01-11 19:54:40
|
Revision: 8077
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8077&view=rev
Author: leejjoon
Date: 2010-01-11 19:54:32 +0000 (Mon, 11 Jan 2010)
Log Message:
-----------
Tk backend supports Figure.set_size_inches with the forward parameter.
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py
Modified: trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py 2010-01-11 19:23:13 UTC (rev 8076)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py 2010-01-11 19:54:32 UTC (rev 8077)
@@ -367,11 +367,24 @@
self.canvas.figure.show = lambda *args: self.show()
- def resize(self, event):
- width, height = event.width, event.height
- self.toolbar.configure(width=width) # , height=height)
+ def resize(self, width, height=None):
+ # before 09-12-22, the resize method takes a single *event*
+ # parameter. On the other hand, the resize method of other
+ # FigureManager class takes *width* and *height* parameter,
+ # which is used to change the size of the window. For the
+ # Figure.set_size_inches with forward=True work with Tk
+ # backend, I changed the function signature but tried to keep
+ # it backward compatible. -JJL
+ # when a single parameter is given, consider it as a event
+ if height is None:
+ width = width.width
+ else:
+ self.canvas._tkcanvas.master.geometry("%dx%d" % (width, height))
+ self.toolbar.configure(width=width)
+
+
def show(self):
"""
this function doesn't segfault but causes the
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <md...@us...> - 2010-01-11 19:23:20
|
Revision: 8076
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8076&view=rev
Author: mdboom
Date: 2010-01-11 19:23:13 +0000 (Mon, 11 Jan 2010)
Log Message:
-----------
Fix centering of mathtext markers (thanks, tcb)
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/lines.py
Modified: trunk/matplotlib/lib/matplotlib/lines.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/lines.py 2010-01-11 12:28:15 UTC (rev 8075)
+++ trunk/matplotlib/lib/matplotlib/lines.py 2010-01-11 19:23:13 UTC (rev 8076)
@@ -898,7 +898,7 @@
height = ymax - ymin
max_dim = max(width, height)
path_trans = Affine2D() \
- .translate(0.5 * -width, 0.5 * -height) \
+ .translate(-xmin + 0.5 * -width, -ymin + 0.5 * -height) \
.scale((renderer.points_to_pixels(self.get_markersize()) / max_dim))
rgbFace = self._get_rgb_face()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <js...@us...> - 2010-01-11 12:38:51
|
Revision: 8075
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8075&view=rev
Author: jswhit
Date: 2010-01-11 12:28:15 +0000 (Mon, 11 Jan 2010)
Log Message:
-----------
infer lat_0 from ymin,ymax if necessary
Modified Paths:
--------------
trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py
Modified: trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py
===================================================================
--- trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py 2010-01-04 22:58:43 UTC (rev 8074)
+++ trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py 2010-01-11 12:28:15 UTC (rev 8075)
@@ -775,6 +775,10 @@
self.lonmax = lons.max()
NPole = _geoslib.Point(self(0.,90.))
SPole = _geoslib.Point(self(0.,-90.))
+ if lat_0 is None:
+ lon_0, lat_0 =\
+ self(0.5*(self.xmin+self.xmax),
+ 0.5*(self.ymin+self.ymax),inverse=True)
Dateline = _geoslib.Point(self(180.,lat_0))
Greenwich = _geoslib.Point(self(0.,lat_0))
hasNP = NPole.within(self._boundarypolyxy)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <he...@us...> - 2010-01-04 22:58:50
|
Revision: 8074
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8074&view=rev
Author: heeres
Date: 2010-01-04 22:58:43 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
Add EngFormatter + example (Jason Heeris, Matthias Michler)
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/ticker.py
Added Paths:
-----------
trunk/matplotlib/examples/api/engineering_formatter.py
Added: trunk/matplotlib/examples/api/engineering_formatter.py
===================================================================
--- trunk/matplotlib/examples/api/engineering_formatter.py (rev 0)
+++ trunk/matplotlib/examples/api/engineering_formatter.py 2010-01-04 22:58:43 UTC (rev 8074)
@@ -0,0 +1,19 @@
+'''
+Demo to show use of the engineering Formatter.
+'''
+
+import matplotlib.pyplot as plt
+import numpy as np
+
+from matplotlib.ticker import EngFormatter
+
+ax = plt.subplot(111)
+ax.set_xscale('log')
+formatter = EngFormatter(unit='Hz', places=1)
+ax.xaxis.set_major_formatter(formatter)
+
+xs = np.logspace(1, 9, 100)
+ys = (0.8 + 0.4 * np.random.uniform(size=100)) * np.log10(xs)**2
+ax.plot(xs, ys)
+
+plt.show()
Modified: trunk/matplotlib/lib/matplotlib/ticker.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/ticker.py 2010-01-04 17:22:32 UTC (rev 8073)
+++ trunk/matplotlib/lib/matplotlib/ticker.py 2010-01-04 22:58:43 UTC (rev 8074)
@@ -118,6 +118,7 @@
from __future__ import division
+import decimal
import math
import numpy as np
from matplotlib import rcParams
@@ -507,23 +508,23 @@
is ``False``
"""
self._base = base+0.0
- self.labelOnlyBase=labelOnlyBase
+ self.labelOnlyBase = labelOnlyBase
self.decadeOnly = True
- def base(self,base):
+ def base(self, base):
'change the *base* for labeling - warning: should always match the base used for :class:`LogLocator`'
- self._base=base
+ self._base = base
- def label_minor(self,labelOnlyBase):
+ def label_minor(self, labelOnlyBase):
'switch on/off minor ticks labeling'
- self.labelOnlyBase=labelOnlyBase
+ self.labelOnlyBase = labelOnlyBase
def __call__(self, x, pos=None):
'Return the format for tick val *x* at position *pos*'
vmin, vmax = self.axis.get_view_interval()
d = abs(vmax - vmin)
- b=self._base
+ b = self._base
if x == 0.0:
return '0'
sign = np.sign(x)
@@ -533,13 +534,13 @@
if not isDecade and self.labelOnlyBase: s = ''
elif x>10000: s= '%1.0e'%x
elif x<1: s = '%1.0e'%x
- else : s = self.pprint_val(x,d)
+ else : s = self.pprint_val(x, d)
if sign == -1:
s = '-%s' % s
return self.fix_minus(s)
- def format_data(self,value):
+ def format_data(self, value):
self.labelOnlyBase = False
value = cbook.strip_math(self.__call__(value))
self.labelOnlyBase = True
@@ -554,14 +555,14 @@
return abs(x-n)<1e-10
def nearest_long(self, x):
- if x==0: return 0L
- elif x>0: return long(x+0.5)
+ if x == 0: return 0L
+ elif x > 0: return long(x+0.5)
else: return long(x-0.5)
def pprint_val(self, x, d):
#if the number is not too big and it's an int, format it as an
#int
- if abs(x)<1e4 and x==int(x): return '%d' % x
+ if abs(x) < 1e4 and x == int(x): return '%d' % x
if d < 1e-2: fmt = '%1.3e'
elif d < 1e-1: fmt = '%1.3f'
@@ -572,7 +573,7 @@
s = fmt % x
#print d, x, fmt, s
tup = s.split('e')
- if len(tup)==2:
+ if len(tup) == 2:
mantissa = tup[0].rstrip('0').rstrip('.')
sign = tup[1][0].replace('+', '')
exponent = tup[1][1:].lstrip('0')
@@ -645,11 +646,97 @@
if usetex:
s = r'$%s%d^{%d}$'% (sign_string, b, self.nearest_long(fx))
else:
- s = r'$\mathdefault{%s%d^{%d}}$'% (sign_string, b, self.nearest_long(fx))
+ s = r'$\mathdefault{%s%d^{%d}}$'% (sign_string, b,
+ self.nearest_long(fx))
return s
+class EngFormatter(Formatter):
+ """
+ Formats axis values using engineering prefixes to represent powers of 1000,
+ plus a specified unit, eg. 10 MHz instead of 1e7.
+ """
+ # The SI engineering prefixes
+ ENG_PREFIXES = {
+ -24: "y",
+ -21: "z",
+ -18: "a",
+ -15: "f",
+ -12: "p",
+ -9: "n",
+ -6: u"\u03bc", # Greek letter mu
+ -3: "m",
+ 0: "",
+ 3: "k",
+ 6: "M",
+ 9: "G",
+ 12: "T",
+ 15: "P",
+ 18: "E",
+ 21: "Z",
+ 24: "Y"
+ }
+
+ def __init__(self, unit="", places=None):
+ self.unit = unit
+ self.places = places
+
+ def __call__(self, x, pos=None):
+ s = "%s%s" % (self.format_eng(x), self.unit)
+ return self.fix_minus(s)
+
+ def format_eng(self, num):
+ """ Formats a number in engineering notation, appending a letter
+ representing the power of 1000 of the original number. Some examples:
+
+ >>> format_eng(0) for self.places = 0
+ '0'
+
+ >>> format_eng(1000000) for self.places = 1
+ '1.0 M'
+
+ >>> format_eng("-1e-6") for self.places = 2
+ u'-1.00 \u03bc'
+
+ @param num: the value to represent
+ @type num: either a numeric value or a string that can be converted to
+ a numeric value (as per decimal.Decimal constructor)
+
+ @return: engineering formatted string
+ """
+
+ dnum = decimal.Decimal(str(num))
+
+ sign = 1
+
+ if dnum < 0:
+ sign = -1
+ dnum = -dnum
+
+ if dnum != 0:
+ pow10 = decimal.Decimal(int(math.floor(dnum.log10()/3)*3))
+ else:
+ pow10 = decimal.Decimal(0)
+
+ pow10 = pow10.min(max(self.ENG_PREFIXES.keys()))
+ pow10 = pow10.max(min(self.ENG_PREFIXES.keys()))
+
+ prefix = self.ENG_PREFIXES[int(pow10)]
+
+ mant = sign*dnum/(10**pow10)
+
+ if self.places is None:
+ format_str = u"%g %s"
+ elif self.places == 0:
+ format_str = u"%i %s"
+ elif self.places > 0:
+ format_str = (u"%%.%if %%s" % self.places)
+
+ formatted = format_str % (mant, prefix)
+
+ return formatted.strip()
+
class Locator(TickHelper):
"""
Determine the tick locations;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <as...@us...> - 2010-01-04 17:22:39
|
Revision: 8073
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8073&view=rev
Author: astraw
Date: 2010-01-04 17:22:32 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
buildbot: debug documentation uploads
Modified Paths:
--------------
trunk/matplotlib/test/_buildbot_doc.sh
Modified: trunk/matplotlib/test/_buildbot_doc.sh
===================================================================
--- trunk/matplotlib/test/_buildbot_doc.sh 2010-01-04 15:08:52 UTC (rev 8072)
+++ trunk/matplotlib/test/_buildbot_doc.sh 2010-01-04 17:22:32 UTC (rev 8073)
@@ -2,13 +2,31 @@
set -e
TARGET=`pwd`/PYmpl
+echo "activating virtual environment"
source $TARGET/bin/activate
+echo "removing MPL config dir"
python -c "import shutil,matplotlib; x=matplotlib.get_configdir(); shutil.rmtree(x)"
+echo "calling 'easy_install sphinx'"
easy_install sphinx
+echo "calling 'cd doc'"
cd doc
+echo "calling 'python make.py clean'"
python make.py clean
+
+echo "calling 'python make.py all'"
python make.py all
+
+# SourceForce needs the below
+echo "configuring for upload to SourceForge"
+
+echo "Options +Indexes" > build/html/.htaccess
+
+chmod -R a+r build
+find build -type d | xargs chmod a+rx
+
+echo "listing built files"
+find build
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <md...@us...> - 2010-01-04 15:09:04
|
Revision: 8072
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8072&view=rev
Author: mdboom
Date: 2010-01-04 15:08:52 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
Clean docs before building them.
Modified Paths:
--------------
trunk/matplotlib/test/_buildbot_doc.sh
Modified: trunk/matplotlib/test/_buildbot_doc.sh
===================================================================
--- trunk/matplotlib/test/_buildbot_doc.sh 2010-01-04 14:32:39 UTC (rev 8071)
+++ trunk/matplotlib/test/_buildbot_doc.sh 2010-01-04 15:08:52 UTC (rev 8072)
@@ -10,4 +10,5 @@
cd doc
+python make.py clean
python make.py all
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <md...@us...> - 2010-01-04 14:32:50
|
Revision: 8071
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8071&view=rev
Author: mdboom
Date: 2010-01-04 14:32:39 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
Merged revisions 8070 via svnmerge from
https://matplotlib.svn.sf.net/svnroot/matplotlib/branches/v0_99_maint
........
r8070 | mdboom | 2010-01-04 09:28:57 -0500 (Mon, 04 Jan 2010) | 1 line
Fix doc 'clean'
........
Modified Paths:
--------------
trunk/matplotlib/doc/make.py
Property Changed:
----------------
trunk/matplotlib/
trunk/matplotlib/doc/pyplots/README
trunk/matplotlib/doc/sphinxext/gen_gallery.py
trunk/matplotlib/doc/sphinxext/gen_rst.py
trunk/matplotlib/examples/misc/multiprocess.py
trunk/matplotlib/examples/mplot3d/contour3d_demo.py
trunk/matplotlib/examples/mplot3d/contourf3d_demo.py
trunk/matplotlib/examples/mplot3d/polys3d_demo.py
trunk/matplotlib/examples/mplot3d/scatter3d_demo.py
trunk/matplotlib/examples/mplot3d/surface3d_demo.py
trunk/matplotlib/examples/mplot3d/wire3d_demo.py
trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py
trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py
trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png
Property changes on: trunk/matplotlib
___________________________________________________________________
Modified: svnmerge-integrated
- /branches/mathtex:1-7263 /branches/v0_99_maint:1-8068
+ /branches/mathtex:1-7263 /branches/v0_99_maint:1-8070
Modified: svn:mergeinfo
- /branches/v0_91_maint:5753-5771
/branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint:5753-5771
/branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Modified: trunk/matplotlib/doc/make.py
===================================================================
--- trunk/matplotlib/doc/make.py 2010-01-04 14:28:57 UTC (rev 8070)
+++ trunk/matplotlib/doc/make.py 2010-01-04 14:32:39 UTC (rev 8071)
@@ -67,13 +67,13 @@
def clean():
shutil.rmtree("build")
shutil.rmtree("examples")
- for pattern in ['doc/mpl_examples/api/*.png',
- 'doc/mpl_examples/pylab_examples/*.png',
- 'doc/mpl_examples/pylab_examples/*.pdf',
- 'doc/mpl_examples/units/*.png',
- 'doc/pyplots/tex_demo.png',
- 'doc/_static/matplotlibrc',
- 'doc/_templates/gallery.html']:
+ for pattern in ['mpl_examples/api/*.png',
+ 'mpl_examples/pylab_examples/*.png',
+ 'mpl_examples/pylab_examples/*.pdf',
+ 'mpl_examples/units/*.png',
+ 'pyplots/tex_demo.png',
+ '_static/matplotlibrc',
+ '_templates/gallery.html']:
for filename in glob.glob(pattern):
if os.path.exists(filename):
os.remove(filename)
Property changes on: trunk/matplotlib/doc/pyplots/README
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/pyplots/README:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/pyplots/README:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/doc/sphinxext/gen_gallery.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/sphinxext/gen_gallery.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/sphinxext/gen_gallery.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/doc/sphinxext/gen_rst.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/sphinxext/gen_rst.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/sphinxext/gen_rst.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/examples/misc/multiprocess.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/misc/log.py:5753-5771
/branches/v0_98_5_maint/examples/misc/log.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/misc/multiprocess.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/examples/misc/log.py:5753-5771
/branches/v0_98_5_maint/examples/misc/log.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/misc/multiprocess.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/examples/mplot3d/contour3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/contour.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contour.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/contour3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/examples/mplot3d/contour.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contour.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/contour3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/examples/mplot3d/contourf3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/contourf.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contourf.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/contourf3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/examples/mplot3d/contourf.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contourf.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/contourf3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/examples/mplot3d/polys3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/polys.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/polys.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/polys3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/examples/mplot3d/polys.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/polys.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/polys3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/examples/mplot3d/scatter3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/scatter.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/scatter.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/scatter3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/examples/mplot3d/scatter.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/scatter.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/scatter3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/examples/mplot3d/surface3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/surface.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/surface.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/surface3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/examples/mplot3d/surface.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/surface.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/surface3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/examples/mplot3d/wire3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/wire.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/wire.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/wire3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/examples/mplot3d/wire.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/wire.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/wire3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/mathmpl.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/mathmpl.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/only_directives.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/only_directives.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_99_maint/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png:7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
+ /branches/v0_99_maint/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png:7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068,8070
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <md...@us...> - 2010-01-04 14:29:07
|
Revision: 8070
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8070&view=rev
Author: mdboom
Date: 2010-01-04 14:28:57 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
Fix doc 'clean'
Modified Paths:
--------------
branches/v0_99_maint/doc/make.py
Modified: branches/v0_99_maint/doc/make.py
===================================================================
--- branches/v0_99_maint/doc/make.py 2010-01-04 14:27:02 UTC (rev 8069)
+++ branches/v0_99_maint/doc/make.py 2010-01-04 14:28:57 UTC (rev 8070)
@@ -67,13 +67,13 @@
def clean():
shutil.rmtree("build")
shutil.rmtree("examples")
- for pattern in ['doc/mpl_examples/api/*.png',
- 'doc/mpl_examples/pylab_examples/*.png',
- 'doc/mpl_examples/pylab_examples/*.pdf',
- 'doc/mpl_examples/units/*.png',
- 'doc/pyplots/tex_demo.png',
- 'doc/_static/matplotlibrc',
- 'doc/_templates/gallery.html']:
+ for pattern in ['mpl_examples/api/*.png',
+ 'mpl_examples/pylab_examples/*.png',
+ 'mpl_examples/pylab_examples/*.pdf',
+ 'mpl_examples/units/*.png',
+ 'pyplots/tex_demo.png',
+ '_static/matplotlibrc',
+ '_templates/gallery.html']:
for filename in glob.glob(pattern):
if os.path.exists(filename):
os.remove(filename)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <md...@us...> - 2010-01-04 14:27:15
|
Revision: 8069
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8069&view=rev
Author: mdboom
Date: 2010-01-04 14:27:02 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
Merged revisions 8068 via svnmerge from
https://matplotlib.svn.sf.net/svnroot/matplotlib/branches/v0_99_maint
........
r8068 | mdboom | 2010-01-04 09:14:38 -0500 (Mon, 04 Jan 2010) | 2 lines
Fix bug in PDF, PS, SVG and OS-X backends: do not simplify filled paths.
........
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py
trunk/matplotlib/lib/matplotlib/backends/backend_ps.py
trunk/matplotlib/lib/matplotlib/backends/backend_svg.py
trunk/matplotlib/src/_macosx.m
Property Changed:
----------------
trunk/matplotlib/
trunk/matplotlib/doc/pyplots/README
trunk/matplotlib/doc/sphinxext/gen_gallery.py
trunk/matplotlib/doc/sphinxext/gen_rst.py
trunk/matplotlib/examples/misc/multiprocess.py
trunk/matplotlib/examples/mplot3d/contour3d_demo.py
trunk/matplotlib/examples/mplot3d/contourf3d_demo.py
trunk/matplotlib/examples/mplot3d/polys3d_demo.py
trunk/matplotlib/examples/mplot3d/scatter3d_demo.py
trunk/matplotlib/examples/mplot3d/surface3d_demo.py
trunk/matplotlib/examples/mplot3d/wire3d_demo.py
trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py
trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py
trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png
Property changes on: trunk/matplotlib
___________________________________________________________________
Modified: svnmerge-integrated
- /branches/mathtex:1-7263 /branches/v0_99_maint:1-8057
+ /branches/mathtex:1-7263 /branches/v0_99_maint:1-8068
Modified: svn:mergeinfo
- /branches/v0_91_maint:5753-5771
/branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint:5753-5771
/branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/doc/pyplots/README
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/pyplots/README:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/pyplots/README:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/doc/sphinxext/gen_gallery.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/sphinxext/gen_gallery.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/sphinxext/gen_gallery.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/doc/sphinxext/gen_rst.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/sphinxext/gen_rst.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/doc/sphinxext/gen_rst.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/examples/misc/multiprocess.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/misc/log.py:5753-5771
/branches/v0_98_5_maint/examples/misc/log.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/misc/multiprocess.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/examples/misc/log.py:5753-5771
/branches/v0_98_5_maint/examples/misc/log.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/misc/multiprocess.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/examples/mplot3d/contour3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/contour.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contour.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/contour3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/examples/mplot3d/contour.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contour.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/contour3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/examples/mplot3d/contourf3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/contourf.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contourf.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/contourf3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/examples/mplot3d/contourf.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contourf.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/contourf3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/examples/mplot3d/polys3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/polys.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/polys.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/polys3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/examples/mplot3d/polys.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/polys.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/polys3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/examples/mplot3d/scatter3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/scatter.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/scatter.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/scatter3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/examples/mplot3d/scatter.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/scatter.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/scatter3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/examples/mplot3d/surface3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/surface.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/surface.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/surface3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/examples/mplot3d/surface.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/surface.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/surface3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/examples/mplot3d/wire3d_demo.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/examples/mplot3d/wire.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/wire.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/wire3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/examples/mplot3d/wire.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/wire.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
/branches/v0_99_maint/examples/mplot3d/wire3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Modified: trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2010-01-04 14:14:38 UTC (rev 8068)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2010-01-04 14:27:02 UTC (rev 8069)
@@ -1068,7 +1068,8 @@
# an API change
self.output(*self.pathOperations(
Path.hatch(hatch_style[2]),
- Affine2D().scale(sidelen)))
+ Affine2D().scale(sidelen),
+ simplify=False))
self.output(Op.stroke)
self.endStream()
@@ -1192,7 +1193,7 @@
def markerObject(self, path, trans, fillp, lw):
"""Return name of a marker XObject representing the given path."""
- pathops = self.pathOperations(path, trans)
+ pathops = self.pathOperations(path, trans, simplify=False)
key = (tuple(pathops), bool(fillp))
result = self.markers.get(key)
if result is None:
@@ -1221,10 +1222,11 @@
self.endStream()
@staticmethod
- def pathOperations(path, transform, clip=None):
+ def pathOperations(path, transform, clip=None, simplify=None):
cmds = []
last_points = None
- for points, code in path.iter_segments(transform, clip=clip):
+ for points, code in path.iter_segments(transform, clip=clip,
+ simplify=simplify):
if code == Path.MOVETO:
# This is allowed anywhere in the path
cmds.extend(points)
@@ -1250,9 +1252,11 @@
def writePath(self, path, transform, clip=False):
if clip:
clip = (0.0, 0.0, self.width * 72, self.height * 72)
+ simplify = path.should_simplify
else:
clip = None
- cmds = self.pathOperations(path, transform, clip)
+ simplify = False
+ cmds = self.pathOperations(path, transform, clip, simplify=simplify)
self.output(*cmds)
def reserveObject(self, name=''):
@@ -1969,7 +1973,7 @@
if self._clippath != clippath:
path, affine = clippath.get_transformed_path_and_affine()
cmds.extend(
- PdfFile.pathOperations(path, affine) +
+ PdfFile.pathOperations(path, affine, simplify=False) +
[Op.clip, Op.endpath])
return cmds
Modified: trunk/matplotlib/lib/matplotlib/backends/backend_ps.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2010-01-04 14:14:38 UTC (rev 8068)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2010-01-04 14:27:02 UTC (rev 8069)
@@ -251,7 +251,8 @@
0 setlinewidth
""" % locals())
self._pswriter.write(
- self._convert_path(Path.hatch(hatch), Affine2D().scale(72.0)))
+ self._convert_path(Path.hatch(hatch), Affine2D().scale(72.0),
+ simplify=False))
self._pswriter.write("""\
stroke
} bind
@@ -457,7 +458,7 @@
# unflip
im.flipud_out()
- def _convert_path(self, path, transform, clip=False):
+ def _convert_path(self, path, transform, clip=False, simplify=None):
ps = []
last_points = None
if clip:
@@ -465,7 +466,8 @@
self.height * 72.0)
else:
clip = None
- for points, code in path.iter_segments(transform, clip=clip):
+ for points, code in path.iter_segments(transform, clip=clip,
+ simplify=simplify):
if code == Path.MOVETO:
ps.append("%g %g m" % tuple(points))
elif code == Path.LINETO:
@@ -488,7 +490,8 @@
if id is None:
id = 'c%x' % len(self._clip_paths)
ps_cmd = ['/%s {' % id]
- ps_cmd.append(self._convert_path(clippath, clippath_transform))
+ ps_cmd.append(self._convert_path(clippath, clippath_transform,
+ simplify=False))
ps_cmd.extend(['clip', 'newpath', '} bind def\n'])
self._pswriter.write('\n'.join(ps_cmd))
self._clip_paths[(clippath, clippath_transform)] = id
@@ -498,9 +501,10 @@
"""
Draws a Path instance using the given affine transform.
"""
+ clip = (rgbFace is None and gc.get_hatch_path() is None)
+ simplify = path.should_simplify and clip
ps = self._convert_path(
- path, transform,
- clip=(rgbFace is None and gc.get_hatch_path() is None))
+ path, transform, clip=clip, simplify=simplify)
self._draw_ps(ps, gc, rgbFace)
def draw_markers(self, gc, marker_path, marker_trans, path, trans, rgbFace=None):
@@ -521,7 +525,8 @@
# construct the generic marker command:
ps_cmd = ['/o {', 'gsave', 'newpath', 'translate'] # dont want the translate to be global
- ps_cmd.append(self._convert_path(marker_path, marker_trans))
+ ps_cmd.append(self._convert_path(marker_path, marker_trans,
+ simplify=False))
if rgbFace:
ps_cmd.extend(['gsave', ps_color, 'fill', 'grestore'])
@@ -547,7 +552,7 @@
name = 'p%x_%x' % (self._path_collection_id, i)
ps_cmd = ['/%s {' % name,
'newpath', 'translate']
- ps_cmd.append(self._convert_path(path, transform))
+ ps_cmd.append(self._convert_path(path, transform, simplify=False))
ps_cmd.extend(['} bind def\n'])
write('\n'.join(ps_cmd))
path_codes.append(name)
Modified: trunk/matplotlib/lib/matplotlib/backends/backend_svg.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_svg.py 2010-01-04 14:14:38 UTC (rev 8068)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_svg.py 2010-01-04 14:27:02 UTC (rev 8069)
@@ -108,7 +108,8 @@
self._svgwriter.write(' width="%d" height="%d" >\n' % (HATCH_SIZE, HATCH_SIZE))
path_data = self._convert_path(
gc.get_hatch_path(),
- Affine2D().scale(HATCH_SIZE).scale(1.0, -1.0).translate(0, HATCH_SIZE))
+ Affine2D().scale(HATCH_SIZE).scale(1.0, -1.0).translate(0, HATCH_SIZE),
+ simplify=False)
if rgbFace is None:
fill = 'none'
else:
@@ -166,7 +167,7 @@
clippath, clippath_trans = gc.get_clip_path()
if clippath is not None:
clippath_trans = self._make_flip_transform(clippath_trans)
- path_data = self._convert_path(clippath, clippath_trans)
+ path_data = self._convert_path(clippath, clippath_trans, simplify=False)
path = '<path d="%s"/>' % path_data
elif cliprect is not None:
x, y, w, h = cliprect.bounds
@@ -217,7 +218,7 @@
.scale(1.0, -1.0)
.translate(0.0, self.height))
- def _convert_path(self, path, transform, clip=False):
+ def _convert_path(self, path, transform, clip=False, simplify=None):
path_data = []
appender = path_data.append
path_commands = self._path_commands
@@ -226,7 +227,8 @@
clip = (0.0, 0.0, self.width, self.height)
else:
clip = None
- for points, code in path.iter_segments(transform, clip=clip):
+ for points, code in path.iter_segments(transform, clip=clip,
+ simplify=simplify):
if code == Path.CLOSEPOLY:
segment = 'z'
else:
@@ -241,15 +243,18 @@
def draw_path(self, gc, path, transform, rgbFace=None):
trans_and_flip = self._make_flip_transform(transform)
+ clip = (rgbFace is None and gc.get_hatch_path() is None)
+ simplify = path.should_simplify and clip
path_data = self._convert_path(
- path, trans_and_flip,
- clip=(rgbFace is None and gc.get_hatch_path() is None))
+ path, trans_and_flip, clip=clip, simplify=simplify)
self._draw_svg_element('path', 'd="%s"' % path_data, gc, rgbFace)
def draw_markers(self, gc, marker_path, marker_trans, path, trans, rgbFace=None):
write = self._svgwriter.write
- key = self._convert_path(marker_path, marker_trans + Affine2D().scale(1.0, -1.0))
+ key = self._convert_path(marker_path,
+ marker_trans + Affine2D().scale(1.0, -1.0),
+ simplify=False)
name = self._markers.get(key)
if name is None:
name = 'm%s' % md5(key).hexdigest()
@@ -282,7 +287,7 @@
for i, (path, transform) in enumerate(self._iter_collection_raw_paths(
master_transform, paths, all_transforms)):
transform = Affine2D(transform.get_matrix()).scale(1.0, -1.0)
- d = self._convert_path(path, transform)
+ d = self._convert_path(path, transform, simplify=False)
name = 'coll%x_%x_%s' % (self._path_collection_id, i,
md5(d).hexdigest())
write('<path id="%s" d="%s"/>\n' % (name, d))
@@ -456,7 +461,7 @@
write('<defs>\n')
for char_id, glyph_path in glyph_map_new.iteritems():
path = Path(*glyph_path)
- path_data = self._convert_path(path, _flip)
+ path_data = self._convert_path(path, _flip, simplify=False)
path_element = '<path id="%s" d="%s"/>\n' % (char_id, ''.join(path_data))
write(path_element)
write('</defs>\n')
@@ -504,7 +509,7 @@
for char_id, glyph_path in glyph_map_new.iteritems():
char_id = self._adjust_char_id(char_id)
path = Path(*glyph_path)
- path_data = self._convert_path(path, None) #_flip)
+ path_data = self._convert_path(path, None, simplify=False) #_flip)
path_element = '<path id="%s" d="%s"/>\n' % (char_id, ''.join(path_data))
write(path_element)
write('</defs>\n')
@@ -535,7 +540,7 @@
for verts, codes in rects:
path = Path(verts, codes)
- path_data = self._convert_path(path, None)
+ path_data = self._convert_path(path, None, simplify=False)
path_element = '<path d="%s"/>\n' % (''.join(path_data))
svg.append(path_element)
Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/mathmpl.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/mathmpl.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/only_directives.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/only_directives.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245
/branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_99_maint/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png:7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057
+ /branches/v0_99_maint/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png:7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057,8068
Modified: trunk/matplotlib/src/_macosx.m
===================================================================
--- trunk/matplotlib/src/_macosx.m 2010-01-04 14:14:38 UTC (rev 8068)
+++ trunk/matplotlib/src/_macosx.m 2010-01-04 14:27:02 UTC (rev 8069)
@@ -539,7 +539,7 @@
return NULL;
}
CGContextSetAlpha(cr, alpha);
-
+
self->color[3] = alpha;
Py_INCREF(Py_None);
@@ -884,7 +884,7 @@
0,
rect,
QUANTIZE_AUTO,
- 1);
+ rgbFace == NULL);
if (!iterator)
{
PyErr_SetString(PyExc_RuntimeError,
@@ -961,7 +961,7 @@
0,
rect,
QUANTIZE_AUTO,
- 1);
+ 0);
if (!iterator)
{
Py_DECREF(hatchpath);
@@ -1146,14 +1146,14 @@
Py_DECREF(translation);
PyErr_SetString(PyExc_ValueError,
"transform_point did not return a NumPy array");
- return false;
+ return false;
}
if (PyArray_NDIM(translation)!=1 || PyArray_DIM(translation, 0)!=2)
{
Py_DECREF(translation);
PyErr_SetString(PyExc_ValueError,
"transform_point did not return an approriate array");
- return false;
+ return false;
}
tx = (CGFloat)(*(double*)PyArray_GETPTR1(translation, 0));
ty = (CGFloat)(*(double*)PyArray_GETPTR1(translation, 1));
@@ -1397,7 +1397,7 @@
Py_ssize_t Nlinestyles = PySequence_Size(linestyles);
Py_ssize_t Naa = PySequence_Size(antialiaseds);
if (N < Nlinestyles) Nlinestyles = N;
- if ((Nfacecolors == 0 && Nedgecolors == 0) || Np == 0) goto exit;
+ if ((Nfacecolors == 0 && Nedgecolors == 0) || Np == 0) goto exit;
/* Preset graphics context properties if possible */
if (Naa==1)
@@ -1641,7 +1641,7 @@
master.c = c;
master.d = d;
master.tx = tx;
- master.ty = ty;
+ master.ty = ty;
}
else
{
@@ -2255,7 +2255,7 @@
width = CTLineGetTypographicBounds(line, &ascent, &descent, NULL);
rect = CTLineGetImageBounds(line, cr);
-
+
CFRelease(line);
return Py_BuildValue("fff", width, rect.size.height, descent);
@@ -3022,7 +3022,7 @@
}
/* NSSize contains CGFloat; cannot use size directly */
if(!PyArg_ParseTuple(args, "u#dd",
- &characters, &n, &width, &height)) return NULL;
+ &characters, &n, &width, &height)) return NULL;
size.width = width;
size.height = height;
@@ -3036,7 +3036,7 @@
NSRect rect = [view bounds];
NSString* filename = [NSString stringWithCharacters: characters
- length: (unsigned)n];
+ length: (unsigned)n];
NSString* extension = [filename pathExtension];
/* Calling dataWithPDFInsideRect on the view causes its update status
@@ -3055,23 +3055,23 @@
if (! [extension isEqualToString: @"tiff"] &&
! [extension isEqualToString: @"tif"])
{
- NSBitmapImageFileType filetype;
- NSBitmapImageRep* bitmapRep = [NSBitmapImageRep imageRepWithData: data];
- if ([extension isEqualToString: @"bmp"])
- filetype = NSBMPFileType;
- else if ([extension isEqualToString: @"gif"])
- filetype = NSGIFFileType;
- else if ([extension isEqualToString: @"jpg"] ||
- [extension isEqualToString: @"jpeg"])
- filetype = NSJPEGFileType;
- else if ([extension isEqualToString: @"png"])
- filetype = NSPNGFileType;
- else
- { PyErr_SetString(PyExc_ValueError, "Unknown file type");
- return NULL;
- }
+ NSBitmapImageFileType filetype;
+ NSBitmapImageRep* bitmapRep = [NSBitmapImageRep imageRepWithData: data];
+ if ([extension isEqualToString: @"bmp"])
+ filetype = NSBMPFileType;
+ else if ([extension isEqualToString: @"gif"])
+ filetype = NSGIFFileType;
+ else if ([extension isEqualToString: @"jpg"] ||
+ [extension isEqualToString: @"jpeg"])
+ filetype = NSJPEGFileType;
+ else if ([extension isEqualToString: @"png"])
+ filetype = NSPNGFileType;
+ else
+ { PyErr_SetString(PyExc_ValueError, "Unknown file type");
+ return NULL;
+ }
- data = [bitmapRep representationUsingType:filetype properties:nil];
+ data = [bitmapRep representationUsingType:filetype properties:nil];
}
[data writeToFile: filename atomically: YES];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <md...@us...> - 2010-01-04 14:14:54
|
Revision: 8068
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8068&view=rev
Author: mdboom
Date: 2010-01-04 14:14:38 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
Fix bug in PDF, PS, SVG and OS-X backends: do not simplify filled paths.
Modified Paths:
--------------
branches/v0_99_maint/lib/matplotlib/backends/backend_pdf.py
branches/v0_99_maint/lib/matplotlib/backends/backend_ps.py
branches/v0_99_maint/lib/matplotlib/backends/backend_svg.py
branches/v0_99_maint/src/_macosx.m
Modified: branches/v0_99_maint/lib/matplotlib/backends/backend_pdf.py
===================================================================
--- branches/v0_99_maint/lib/matplotlib/backends/backend_pdf.py 2010-01-04 04:30:24 UTC (rev 8067)
+++ branches/v0_99_maint/lib/matplotlib/backends/backend_pdf.py 2010-01-04 14:14:38 UTC (rev 8068)
@@ -1043,7 +1043,8 @@
# an API change
self.output(*self.pathOperations(
Path.hatch(hatch_style[2]),
- Affine2D().scale(sidelen)))
+ Affine2D().scale(sidelen),
+ simplify=False))
self.output(Op.stroke)
self.endStream()
@@ -1124,7 +1125,7 @@
def markerObject(self, path, trans, fillp, lw):
"""Return name of a marker XObject representing the given path."""
- pathops = self.pathOperations(path, trans)
+ pathops = self.pathOperations(path, trans, simplify=False)
key = (tuple(pathops), bool(fillp))
result = self.markers.get(key)
if result is None:
@@ -1153,10 +1154,11 @@
self.endStream()
@staticmethod
- def pathOperations(path, transform, clip=None):
+ def pathOperations(path, transform, clip=None, simplify=None):
cmds = []
last_points = None
- for points, code in path.iter_segments(transform, clip=clip):
+ for points, code in path.iter_segments(transform, clip=clip,
+ simplify=simplify):
if code == Path.MOVETO:
cmds.extend(points)
cmds.append(Op.moveto)
@@ -1178,9 +1180,11 @@
def writePath(self, path, transform, clip=False):
if clip:
clip = (0.0, 0.0, self.width * 72, self.height * 72)
+ simplify = path.should_simplify
else:
clip = None
- cmds = self.pathOperations(path, transform, clip)
+ simplify = False
+ cmds = self.pathOperations(path, transform, clip, simplify=simplify)
self.output(*cmds)
def reserveObject(self, name=''):
@@ -1852,7 +1856,7 @@
if self._clippath != clippath:
path, affine = clippath.get_transformed_path_and_affine()
cmds.extend(
- PdfFile.pathOperations(path, affine) +
+ PdfFile.pathOperations(path, affine, simplify=False) +
[Op.clip, Op.endpath])
return cmds
Modified: branches/v0_99_maint/lib/matplotlib/backends/backend_ps.py
===================================================================
--- branches/v0_99_maint/lib/matplotlib/backends/backend_ps.py 2010-01-04 04:30:24 UTC (rev 8067)
+++ branches/v0_99_maint/lib/matplotlib/backends/backend_ps.py 2010-01-04 14:14:38 UTC (rev 8068)
@@ -248,7 +248,8 @@
0 setlinewidth
""" % locals())
self._pswriter.write(
- self._convert_path(Path.hatch(hatch), Affine2D().scale(72.0)))
+ self._convert_path(Path.hatch(hatch), Affine2D().scale(72.0),
+ simplify=False))
self._pswriter.write("""\
stroke
} bind
@@ -427,7 +428,7 @@
# unflip
im.flipud_out()
- def _convert_path(self, path, transform, clip=False):
+ def _convert_path(self, path, transform, clip=False, simplify=None):
ps = []
last_points = None
if clip:
@@ -435,7 +436,8 @@
self.height * 72.0)
else:
clip = None
- for points, code in path.iter_segments(transform, clip=clip):
+ for points, code in path.iter_segments(transform, clip=clip,
+ simplify=simplify):
if code == Path.MOVETO:
ps.append("%g %g m" % tuple(points))
elif code == Path.LINETO:
@@ -458,7 +460,8 @@
if id is None:
id = 'c%x' % len(self._clip_paths)
ps_cmd = ['/%s {' % id]
- ps_cmd.append(self._convert_path(clippath, clippath_transform))
+ ps_cmd.append(self._convert_path(clippath, clippath_transform,
+ simplify=False))
ps_cmd.extend(['clip', 'newpath', '} bind def\n'])
self._pswriter.write('\n'.join(ps_cmd))
self._clip_paths[(clippath, clippath_transform)] = id
@@ -468,9 +471,10 @@
"""
Draws a Path instance using the given affine transform.
"""
+ clip = (rgbFace is None and gc.get_hatch_path() is None)
+ simplify = path.should_simplify and clip
ps = self._convert_path(
- path, transform,
- clip=(rgbFace is None and gc.get_hatch_path() is None))
+ path, transform, clip=clip, simplify=simplify)
self._draw_ps(ps, gc, rgbFace)
def draw_markers(self, gc, marker_path, marker_trans, path, trans, rgbFace=None):
@@ -491,7 +495,8 @@
# construct the generic marker command:
ps_cmd = ['/o {', 'gsave', 'newpath', 'translate'] # dont want the translate to be global
- ps_cmd.append(self._convert_path(marker_path, marker_trans))
+ ps_cmd.append(self._convert_path(marker_path, marker_trans,
+ simplify=False))
if rgbFace:
ps_cmd.extend(['gsave', ps_color, 'fill', 'grestore'])
@@ -518,7 +523,7 @@
name = 'p%x_%x' % (self._path_collection_id, i)
ps_cmd = ['/%s {' % name,
'newpath', 'translate']
- ps_cmd.append(self._convert_path(path, transform))
+ ps_cmd.append(self._convert_path(path, transform, simplify=False))
ps_cmd.extend(['} bind def\n'])
write('\n'.join(ps_cmd))
path_codes.append(name)
Modified: branches/v0_99_maint/lib/matplotlib/backends/backend_svg.py
===================================================================
--- branches/v0_99_maint/lib/matplotlib/backends/backend_svg.py 2010-01-04 04:30:24 UTC (rev 8067)
+++ branches/v0_99_maint/lib/matplotlib/backends/backend_svg.py 2010-01-04 14:14:38 UTC (rev 8068)
@@ -101,7 +101,8 @@
self._svgwriter.write(' width="%d" height="%d" >\n' % (HATCH_SIZE, HATCH_SIZE))
path_data = self._convert_path(
gc.get_hatch_path(),
- Affine2D().scale(HATCH_SIZE).scale(1.0, -1.0).translate(0, HATCH_SIZE))
+ Affine2D().scale(HATCH_SIZE).scale(1.0, -1.0).translate(0, HATCH_SIZE),
+ simplify=False)
if rgbFace is None:
fill = 'none'
else:
@@ -159,7 +160,7 @@
clippath, clippath_trans = gc.get_clip_path()
if clippath is not None:
clippath_trans = self._make_flip_transform(clippath_trans)
- path_data = self._convert_path(clippath, clippath_trans)
+ path_data = self._convert_path(clippath, clippath_trans, simplify=False)
path = '<path d="%s"/>' % path_data
elif cliprect is not None:
x, y, w, h = cliprect.bounds
@@ -210,7 +211,7 @@
.scale(1.0, -1.0)
.translate(0.0, self.height))
- def _convert_path(self, path, transform, clip=False):
+ def _convert_path(self, path, transform, clip=False, simplify=None):
path_data = []
appender = path_data.append
path_commands = self._path_commands
@@ -219,7 +220,8 @@
clip = (0.0, 0.0, self.width, self.height)
else:
clip = None
- for points, code in path.iter_segments(transform, clip=clip):
+ for points, code in path.iter_segments(transform, clip=clip,
+ simplify=simplify):
if code == Path.CLOSEPOLY:
segment = 'z'
else:
@@ -234,15 +236,18 @@
def draw_path(self, gc, path, transform, rgbFace=None):
trans_and_flip = self._make_flip_transform(transform)
+ clip = (rgbFace is None and gc.get_hatch_path() is None)
+ simplify = path.should_simplify and clip
path_data = self._convert_path(
- path, trans_and_flip,
- clip=(rgbFace is None and gc.get_hatch_path() is None))
+ path, trans_and_flip, clip=clip, simplify=simplify)
self._draw_svg_element('path', 'd="%s"' % path_data, gc, rgbFace)
def draw_markers(self, gc, marker_path, marker_trans, path, trans, rgbFace=None):
write = self._svgwriter.write
- key = self._convert_path(marker_path, marker_trans + Affine2D().scale(1.0, -1.0))
+ key = self._convert_path(marker_path,
+ marker_trans + Affine2D().scale(1.0, -1.0),
+ simplify=False)
name = self._markers.get(key)
if name is None:
name = 'm%s' % md5(key).hexdigest()
@@ -276,7 +281,7 @@
for i, (path, transform) in enumerate(self._iter_collection_raw_paths(
master_transform, paths, all_transforms)):
transform = Affine2D(transform.get_matrix()).scale(1.0, -1.0)
- d = self._convert_path(path, transform)
+ d = self._convert_path(path, transform, simplify=False)
name = 'coll%x_%x_%s' % (self._path_collection_id, i,
md5(d).hexdigest())
write('<path id="%s" d="%s"/>\n' % (name, d))
Modified: branches/v0_99_maint/src/_macosx.m
===================================================================
--- branches/v0_99_maint/src/_macosx.m 2010-01-04 04:30:24 UTC (rev 8067)
+++ branches/v0_99_maint/src/_macosx.m 2010-01-04 14:14:38 UTC (rev 8068)
@@ -536,7 +536,7 @@
return NULL;
}
CGContextSetAlpha(cr, alpha);
-
+
self->color[3] = alpha;
Py_INCREF(Py_None);
@@ -881,7 +881,7 @@
0,
rect,
QUANTIZE_AUTO,
- 1);
+ rgbFace == NULL);
if (!iterator)
{
PyErr_SetString(PyExc_RuntimeError,
@@ -958,7 +958,7 @@
0,
rect,
QUANTIZE_AUTO,
- 1);
+ 0);
if (!iterator)
{
Py_DECREF(hatchpath);
@@ -1143,14 +1143,14 @@
Py_DECREF(translation);
PyErr_SetString(PyExc_ValueError,
"transform_point did not return a NumPy array");
- return false;
+ return false;
}
if (PyArray_NDIM(translation)!=1 || PyArray_DIM(translation, 0)!=2)
{
Py_DECREF(translation);
PyErr_SetString(PyExc_ValueError,
"transform_point did not return an approriate array");
- return false;
+ return false;
}
tx = (CGFloat)(*(double*)PyArray_GETPTR1(translation, 0));
ty = (CGFloat)(*(double*)PyArray_GETPTR1(translation, 1));
@@ -1261,7 +1261,7 @@
master.c = c;
master.d = d;
master.tx = tx;
- master.ty = ty;
+ master.ty = ty;
if (!ok) goto exit;
CGContextConcatCTM(cr, master);
}
@@ -1429,7 +1429,7 @@
Py_ssize_t Nlinestyles = PySequence_Size(linestyles);
Py_ssize_t Naa = PySequence_Size(antialiaseds);
if (N < Nlinestyles) Nlinestyles = N;
- if ((Nfacecolors == 0 && Nedgecolors == 0) || Np == 0) goto exit;
+ if ((Nfacecolors == 0 && Nedgecolors == 0) || Np == 0) goto exit;
/* Preset graphics context properties if possible */
if (Naa==1)
@@ -1674,7 +1674,7 @@
master.c = c;
master.d = d;
master.tx = tx;
- master.ty = ty;
+ master.ty = ty;
}
else
{
@@ -2288,7 +2288,7 @@
width = CTLineGetTypographicBounds(line, &ascent, &descent, NULL);
rect = CTLineGetImageBounds(line, cr);
-
+
CFRelease(line);
return Py_BuildValue("fff", width, rect.size.height, descent);
@@ -3044,7 +3044,7 @@
}
/* NSSize contains CGFloat; cannot use size directly */
if(!PyArg_ParseTuple(args, "u#dd",
- &characters, &n, &width, &height)) return NULL;
+ &characters, &n, &width, &height)) return NULL;
size.width = width;
size.height = height;
@@ -3058,7 +3058,7 @@
NSRect rect = [view bounds];
NSString* filename = [NSString stringWithCharacters: characters
- length: (unsigned)n];
+ length: (unsigned)n];
NSString* extension = [filename pathExtension];
/* Calling dataWithPDFInsideRect on the view causes its update status
@@ -3077,23 +3077,23 @@
if (! [extension isEqualToString: @"tiff"] &&
! [extension isEqualToString: @"tif"])
{
- NSBitmapImageFileType filetype;
- NSBitmapImageRep* bitmapRep = [NSBitmapImageRep imageRepWithData: data];
- if ([extension isEqualToString: @"bmp"])
- filetype = NSBMPFileType;
- else if ([extension isEqualToString: @"gif"])
- filetype = NSGIFFileType;
- else if ([extension isEqualToString: @"jpg"] ||
- [extension isEqualToString: @"jpeg"])
- filetype = NSJPEGFileType;
- else if ([extension isEqualToString: @"png"])
- filetype = NSPNGFileType;
- else
- { PyErr_SetString(PyExc_ValueError, "Unknown file type");
- return NULL;
- }
+ NSBitmapImageFileType filetype;
+ NSBitmapImageRep* bitmapRep = [NSBitmapImageRep imageRepWithData: data];
+ if ([extension isEqualToString: @"bmp"])
+ filetype = NSBMPFileType;
+ else if ([extension isEqualToString: @"gif"])
+ filetype = NSGIFFileType;
+ else if ([extension isEqualToString: @"jpg"] ||
+ [extension isEqualToString: @"jpeg"])
+ filetype = NSJPEGFileType;
+ else if ([extension isEqualToString: @"png"])
+ filetype = NSPNGFileType;
+ else
+ { PyErr_SetString(PyExc_ValueError, "Unknown file type");
+ return NULL;
+ }
- data = [bitmapRep representationUsingType:filetype properties:nil];
+ data = [bitmapRep representationUsingType:filetype properties:nil];
}
[data writeToFile: filename atomically: YES];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ef...@us...> - 2010-01-04 04:30:34
|
Revision: 8067
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8067&view=rev
Author: efiring
Date: 2010-01-04 04:30:24 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
Remove unnecessary private method.
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/axes.py
Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py 2010-01-04 02:22:26 UTC (rev 8066)
+++ trunk/matplotlib/lib/matplotlib/axes.py 2010-01-04 04:30:24 UTC (rev 8067)
@@ -150,11 +150,8 @@
def set_color_cycle(self, clist=None):
if clist is None:
clist = rcParams['axes.color_cycle']
- self._colors = itertools.cycle(clist)
+ self.color_cycle = itertools.cycle(clist)
- def _get_next_cycle_color(self):
- return self._colors.next()
-
def __call__(self, *args, **kwargs):
if self.axes.xaxis is not None and self.axes.yaxis is not None:
@@ -225,7 +222,7 @@
def _makeline(self, x, y, kw, kwargs):
kw = kw.copy() # Don't modify the original kw.
if not 'color' in kw:
- kw['color'] = self._get_next_cycle_color()
+ kw['color'] = self.color_cycle.next()
# (can't use setdefault because it always evaluates
# its second argument)
seg = mlines.Line2D(x, y,
@@ -239,7 +236,7 @@
try:
facecolor = kw['color']
except KeyError:
- facecolor = self._get_next_cycle_color()
+ facecolor = self.color_cycle.next()
seg = mpatches.Polygon(np.hstack(
(x[:,np.newaxis],y[:,np.newaxis])),
facecolor = facecolor,
@@ -4866,7 +4863,7 @@
if ecolor is None:
if l0 is None:
- ecolor = self._get_lines._get_next_cycle_color()
+ ecolor = self._get_lines.color_cycle.next()
else:
ecolor = l0.get_color()
@@ -7163,7 +7160,7 @@
if orientation == 'horizontal':
for m in n:
- color = self._get_lines._get_next_cycle_color()
+ color = self._get_lines.color_cycle.next()
patch = self.barh(bins[:-1]+boffset, m, height=width,
left=bottom, align='center', log=log,
color=color)
@@ -7174,7 +7171,7 @@
boffset += dw
elif orientation == 'vertical':
for m in n:
- color = self._get_lines._get_next_cycle_color()
+ color = self._get_lines.color_cycle.next()
patch = self.bar(bins[:-1]+boffset, m, width=width,
bottom=bottom, align='center', log=log,
color=color)
@@ -7219,7 +7216,7 @@
elif orientation != 'vertical':
raise ValueError, 'invalid orientation: %s' % orientation
- color = self._get_lines._get_next_cycle_color()
+ color = self._get_lines.color_cycle.next()
if fill:
patches.append( self.fill(x, y,
closed=False, facecolor=color) )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ef...@us...> - 2010-01-04 02:22:41
|
Revision: 8066
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8066&view=rev
Author: efiring
Date: 2010-01-04 02:22:26 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
Added rcParams['axes.color_cycle']
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/doc/api/api_changes.rst
trunk/matplotlib/examples/api/color_cycle.py
trunk/matplotlib/lib/matplotlib/axes.py
trunk/matplotlib/lib/matplotlib/rcsetup.py
trunk/matplotlib/matplotlibrc.template
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-01-03 21:07:05 UTC (rev 8065)
+++ trunk/matplotlib/CHANGELOG 2010-01-04 02:22:26 UTC (rev 8066)
@@ -1,3 +1,5 @@
+2010-01-03 Added rcParams['axes.color_cycle'] - EF
+
2010-01-03 Added Pierre's qt4 formlayout editor and toolbar button - JDH
2009-12-31 Add support for using math text as marker symbols (Thanks to tcb)
Modified: trunk/matplotlib/doc/api/api_changes.rst
===================================================================
--- trunk/matplotlib/doc/api/api_changes.rst 2010-01-03 21:07:05 UTC (rev 8065)
+++ trunk/matplotlib/doc/api/api_changes.rst 2010-01-04 02:22:26 UTC (rev 8066)
@@ -10,7 +10,11 @@
Changes beyond 0.99.x
=====================
-* You can now print several figures to one pdf file and modify the
+* There is a new rc parameter ``axes.color_cycle``, and the color
+ cycle is now independent of the rc parameter ``lines.color``.
+ :func:`matplotlib.Axes.set_default_color_cycle` is deprecated.
+
+* You can now print several figures to one pdf file and modify the
document information dictionary of a pdf file. See the docstrings
of the class :class:`matplotlib.backends.backend_pdf.PdfPages` for
more information.
Modified: trunk/matplotlib/examples/api/color_cycle.py
===================================================================
--- trunk/matplotlib/examples/api/color_cycle.py 2010-01-03 21:07:05 UTC (rev 8065)
+++ trunk/matplotlib/examples/api/color_cycle.py 2010-01-04 02:22:26 UTC (rev 8066)
@@ -13,7 +13,7 @@
mpl.rc('lines', linewidth=4)
fig = plt.figure()
-mpl.axes.set_default_color_cycle(['r', 'g', 'b', 'c'])
+mpl.rcParams['axes.color_cycle'] = ['r', 'g', 'b', 'c']
ax = fig.add_subplot(2,1,1)
ax.plot(yy)
ax.set_title('Changed default color cycle to rgbc')
Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py 2010-01-03 21:07:05 UTC (rev 8065)
+++ trunk/matplotlib/lib/matplotlib/axes.py 2010-01-04 02:22:26 UTC (rev 8066)
@@ -1,5 +1,7 @@
from __future__ import division, generators
import math, sys, warnings, datetime, new
+from operator import itemgetter
+import itertools
import numpy as np
from numpy import ma
@@ -31,7 +33,6 @@
import matplotlib.ticker as mticker
import matplotlib.transforms as mtransforms
-from operator import itemgetter
iterable = cbook.iterable
is_string_like = cbook.is_string_like
@@ -115,12 +116,19 @@
:class:`Axes` to which it will apply; it will
apply to all future axes.
- *clist* is a sequence of mpl color specifiers
+ *clist* is a sequence of mpl color specifiers.
+ See also: :meth:`~matplotlib.axes.Axes.set_color_cycle`.
+
+ .. Note:: Deprecated 2010/01/03.
+ Set rcParams['axes.color_cycle'] directly.
+
"""
- _process_plot_var_args.defaultColors = clist[:]
- rcParams['lines.color'] = clist[0]
+ rcParams['axes.color_cycle'] = clist
+ warnings.warn("Set rcParams['axes.color_cycle'] directly",
+ DeprecationWarning)
+
class _process_plot_var_args:
"""
@@ -134,42 +142,18 @@
an arbitrary number of *x*, *y*, *fmt* are allowed
"""
-
- defaultColors = ['b','g','r','c','m','y','k']
def __init__(self, axes, command='plot'):
self.axes = axes
self.command = command
- self._clear_color_cycle()
+ self.set_color_cycle()
- def _clear_color_cycle(self):
- self.colors = _process_plot_var_args.defaultColors[:]
- # if the default line color is a color format string, move it up
- # in the que
- try:
- ind = self.colors.index(rcParams['lines.color'])
- except ValueError:
- self.firstColor = rcParams['lines.color']
- else:
- self.colors[0], self.colors[ind] = self.colors[ind], self.colors[0]
- self.firstColor = self.colors[0]
+ def set_color_cycle(self, clist=None):
+ if clist is None:
+ clist = rcParams['axes.color_cycle']
+ self._colors = itertools.cycle(clist)
- self.Ncolors = len(self.colors)
-
- self.count = 0
-
- def set_color_cycle(self, clist):
- self.colors = clist[:]
- self.firstColor = self.colors[0]
- self.Ncolors = len(self.colors)
- self.count = 0
-
def _get_next_cycle_color(self):
- if self.count==0:
- color = self.firstColor
- else:
- color = self.colors[int(self.count % self.Ncolors)]
- self.count += 1
- return color
+ return self._colors.next()
def __call__(self, *args, **kwargs):
@@ -907,9 +891,10 @@
"""
Set the color cycle for any future plot commands on this Axes.
- clist is a list of mpl color specifiers.
+ *clist* is a list of mpl color specifiers.
"""
self._get_lines.set_color_cycle(clist)
+ self._get_patches_for_fill.set_color_cycle(clist)
def ishold(self):
Modified: trunk/matplotlib/lib/matplotlib/rcsetup.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/rcsetup.py 2010-01-03 21:07:05 UTC (rev 8065)
+++ trunk/matplotlib/lib/matplotlib/rcsetup.py 2010-01-04 02:22:26 UTC (rev 8066)
@@ -207,6 +207,14 @@
raise ValueError('%s does not look like a color arg%s'%(s, msg))
+def validate_colorlist(s):
+ 'return a list of colorspecs'
+ if type(s) is str:
+ return [validate_color(c.strip()) for c in s.split(',')]
+ else:
+ assert type(s) in [list, tuple]
+ return [validate_color(c) for c in s]
+
def validate_stringlist(s):
'return a list'
if type(s) is str:
@@ -440,6 +448,9 @@
# of the axis range is smaller than the
# first or larger than the second
'axes.unicode_minus' : [True, validate_bool],
+ 'axes.color_cycle' : [['b','g','r','c','m','y','k'],
+ validate_colorlist], # cycle of plot
+ # line colors
'polaraxes.grid' : [True, validate_bool], # display polar grid or not
'axes3d.grid' : [True, validate_bool], # display 3d grid
Modified: trunk/matplotlib/matplotlibrc.template
===================================================================
--- trunk/matplotlib/matplotlibrc.template 2010-01-03 21:07:05 UTC (rev 8065)
+++ trunk/matplotlib/matplotlibrc.template 2010-01-04 02:22:26 UTC (rev 8066)
@@ -161,11 +161,11 @@
#text.markup : 'plain' # Affects how text, such as titles and labels, are
# interpreted by default.
# 'plain': As plain, unformatted text
- # 'tex': As TeX-like text. Text between $'s will be
- # formatted as a TeX math expression.
- # This setting has no effect when text.usetex is True.
- # In that case, all text will be sent to TeX for
- # processing.
+ # 'tex': As TeX-like text. Text between $'s will be
+ # formatted as a TeX math expression.
+ # This setting has no effect when text.usetex is True.
+ # In that case, all text will be sent to TeX for
+ # processing.
#text.hinting : True # If True, text will be hinted, otherwise not. This only
# affects the Agg backend.
@@ -184,8 +184,8 @@
#mathtext.fontset : cm # Should be 'cm' (Computer Modern), 'stix',
# 'stixsans' or 'custom'
#mathtext.fallback_to_cm : True # When True, use symbols from the Computer Modern
- # fonts when a symbol can not be found in one of
- # the custom math fonts.
+ # fonts when a symbol can not be found in one of
+ # the custom math fonts.
#mathtext.default : it # The default font to use for math.
# Can be any of the LaTeX font names, including
@@ -211,6 +211,10 @@
# first or larger than the second
#axes.unicode_minus : True # use unicode for the minus symbol
# rather than hypen. See http://en.wikipedia.org/wiki/Plus_sign#Plus_sign
+#axes.color_cycle : b, g, r, c, m, y, k # color cycle for plot lines
+ # as list of string colorspecs:
+ # single letter, long name, or
+ # web-style hex
#polaraxes.grid : True # display grid on polar axes
#axes3d.grid : True # display grid on 3d axes
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jd...@us...> - 2010-01-03 21:07:16
|
Revision: 8065
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8065&view=rev
Author: jdh2358
Date: 2010-01-03 21:07:05 +0000 (Sun, 03 Jan 2010)
Log Message:
-----------
add qt editor icon
Added Paths:
-----------
trunk/matplotlib/lib/matplotlib/mpl-data/images/qt4_editor_options.svg
Added: trunk/matplotlib/lib/matplotlib/mpl-data/images/qt4_editor_options.svg
===================================================================
--- trunk/matplotlib/lib/matplotlib/mpl-data/images/qt4_editor_options.svg (rev 0)
+++ trunk/matplotlib/lib/matplotlib/mpl-data/images/qt4_editor_options.svg 2010-01-03 21:07:05 UTC (rev 8065)
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="120"
+ height="120"
+ id="svg3279"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ inkscape:export-filename="D:\options.png"
+ inkscape:export-xdpi="24"
+ inkscape:export-ydpi="24"
+ sodipodi:docname="options.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3281">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3225">
+ <stop
+ style="stop-color:#c6edff;stop-opacity:1;"
+ offset="0"
+ id="stop3227" />
+ <stop
+ style="stop-color:#c6edff;stop-opacity:0;"
+ offset="1"
+ id="stop3229" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3225"
+ id="linearGradient3231"
+ x1="34.77911"
+ y1="255.07245"
+ x2="478.66415"
+ y2="255.07245"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.2607424,0,0,0.2740635,193.06177,153.88471)" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective3287" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8"
+ inkscape:cx="27.69923"
+ inkscape:cy="76.846835"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1280"
+ inkscape:window-height="744"
+ inkscape:window-x="-4"
+ inkscape:window-y="-4" />
+ <metadata
+ id="metadata3284">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Calque 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-202.0841,-168.88732)">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#7c7b7b;stroke-width:7.20437145000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3269"
+ width="60.730881"
+ height="57.473782"
+ x="225.4445"
+ y="204.7301" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:24;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 217.26549,219.65401 L 243.94889,259.71592 C 243.94889,259.71592 250.13661,235.24455 275.57363,209.90924 C 297.31563,188.25414 311.15148,188.25414 311.15148,188.25414"
+ id="path3187"
+ sodipodi:nodetypes="ccsc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#10c928;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 217.34736,219.73677 L 244.03076,259.79868 C 244.03076,259.79868 250.21848,235.32731 275.6555,209.992 C 297.3975,188.3369 311.23335,188.3369 311.23335,188.3369"
+ id="path3279"
+ sodipodi:nodetypes="ccsc" />
+ </g>
+</svg>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jd...@us...> - 2010-01-03 18:30:11
|
Revision: 8064
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8064&view=rev
Author: jdh2358
Date: 2010-01-03 18:30:04 +0000 (Sun, 03 Jan 2010)
Log Message:
-----------
added qt4_editor dialog
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py
trunk/matplotlib/setup.py
Added Paths:
-----------
trunk/matplotlib/lib/matplotlib/backends/qt4_editor/
trunk/matplotlib/lib/matplotlib/backends/qt4_editor/__init__.py
trunk/matplotlib/lib/matplotlib/backends/qt4_editor/figureoptions.py
trunk/matplotlib/lib/matplotlib/backends/qt4_editor/formlayout.py
trunk/matplotlib/license/LICENSE_QT4_EDITOR
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-01-02 06:30:15 UTC (rev 8063)
+++ trunk/matplotlib/CHANGELOG 2010-01-03 18:30:04 UTC (rev 8064)
@@ -1,3 +1,5 @@
+2010-01-03 Added Pierre's qt4 formlayout editor and toolbar button - JDH
+
2009-12-31 Add support for using math text as marker symbols (Thanks to tcb)
- MGD
Modified: trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py 2010-01-02 06:30:15 UTC (rev 8063)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py 2010-01-03 18:30:04 UTC (rev 8064)
@@ -12,6 +12,7 @@
from matplotlib.figure import Figure
from matplotlib.mathtext import MathTextParser
from matplotlib.widgets import SubplotTool
+import matplotlib.backends.qt4_editor.figureoptions as figureoptions
try:
from PyQt4 import QtCore, QtGui, Qt
@@ -330,10 +331,16 @@
a = self.addAction(self._icon('subplots.png'), 'Subplots',
self.configure_subplots)
a.setToolTip('Configure subplots')
+
+ a = self.addAction(self._icon("qt4_editor_options.svg"),
+ 'Customize', self.edit_parameters)
+ a.setToolTip('Edit curves line and axes parameters')
+
a = self.addAction(self._icon('filesave.svg'), 'Save',
self.save_figure)
a.setToolTip('Save the figure')
+
self.buttons = {}
# Add the x,y location widget at the right side of the toolbar
@@ -352,6 +359,36 @@
# reference holder for subplots_adjust window
self.adj_window = None
+ def edit_parameters(self):
+ allaxes = self.canvas.figure.get_axes()
+ if len(allaxes) == 1:
+ axes = allaxes[0]
+ else:
+ titles = []
+ for axes in allaxes:
+ title = axes.get_title()
+ ylabel = axes.get_ylabel()
+ if title:
+ text = title
+ if ylabel:
+ text += ": "+ylabel
+ text += " (%s)"
+ elif ylabel:
+ text = "%s (%s)" % ylabel
+ else:
+ text = "%s"
+ titles.append(text % repr(axes))
+ item, ok = QtGui.QInputDialog.getItem(self, 'Customize',
+ 'Select axes:', titles,
+ 0, False)
+ if ok:
+ axes = allaxes[titles.index(unicode(item))]
+ else:
+ return
+
+ figureoptions.figure_edit(axes, self)
+
+
def dynamic_update( self ):
self.canvas.draw()
Added: trunk/matplotlib/lib/matplotlib/backends/qt4_editor/figureoptions.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/qt4_editor/figureoptions.py (rev 0)
+++ trunk/matplotlib/lib/matplotlib/backends/qt4_editor/figureoptions.py 2010-01-03 18:30:04 UTC (rev 8064)
@@ -0,0 +1,154 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright © 2009 Pierre Raybaut
+# Licensed under the terms of the MIT License
+# see the mpl licenses directory for a copy of the license
+
+"""Module that provides a GUI-based editor for matplotlib's figure options"""
+
+import os.path as osp
+
+import matplotlib.backends.qt4_editor.formlayout as formlayout
+from PyQt4.QtGui import QIcon
+
+def get_icon(name):
+ import matplotlib
+ basedir = osp.join(matplotlib.rcParams['datapath'], 'images')
+ return QIcon(osp.join(basedir, name))
+
+LINESTYLES = {
+ '-': 'Solid',
+ '--': 'Dashed',
+ '-.': 'DashDot',
+ ':': 'Dotted',
+ 'steps': 'Steps',
+ 'none': 'None',
+ }
+
+MARKERS = {
+ 'none': 'None',
+ 'o': 'circles',
+ '^': 'triangle_up',
+ 'v': 'triangle_down',
+ '<': 'triangle_left',
+ '>': 'triangle_right',
+ 's': 'square',
+ '+': 'plus',
+ 'x': 'cross',
+ '*': 'star',
+ 'D': 'diamond',
+ 'd': 'thin_diamond',
+ '1': 'tripod_down',
+ '2': 'tripod_up',
+ '3': 'tripod_left',
+ '4': 'tripod_right',
+ 'h': 'hexagon',
+ 'H': 'rotated_hexagon',
+ 'p': 'pentagon',
+ '|': 'vertical_line',
+ '_': 'horizontal_line',
+ '.': 'dots',
+ }
+
+COLORS = {'b': '#0000ff', 'g': '#00ff00', 'r': '#ff0000', 'c': '#ff00ff',
+ 'm': '#ff00ff', 'y': '#ffff00', 'k': '#000000', 'w': '#ffffff'}
+
+def col2hex(color):
+ """Convert matplotlib color to hex"""
+ return COLORS.get(color, color)
+
+def figure_edit(axes, parent=None):
+ """Edit matplotlib figure options"""
+ sep = (None, None) # separator
+
+ has_curve = len(axes.get_lines()) > 0
+
+ # Get / General
+ xmin, xmax = axes.get_xlim()
+ ymin, ymax = axes.get_ylim()
+ general = [('Title', axes.get_title()),
+ sep,
+ (None, "<b>X-Axis</b>"),
+ ('Min', xmin), ('Max', xmax),
+ ('Label', axes.get_xlabel()),
+ ('Scale', [axes.get_xscale(), 'linear', 'log']),
+ sep,
+ (None, "<b>Y-Axis</b>"),
+ ('Min', ymin), ('Max', ymax),
+ ('Label', axes.get_ylabel()),
+ ('Scale', [axes.get_yscale(), 'linear', 'log'])
+ ]
+
+ if has_curve:
+ # Get / Curves
+ linedict = {}
+ for line in axes.get_lines():
+ label = line.get_label()
+ if label == '_nolegend_':
+ continue
+ linedict[label] = line
+ curves = []
+ linestyles = LINESTYLES.items()
+ markers = MARKERS.items()
+ curvelabels = sorted(linedict.keys())
+ for label in curvelabels:
+ line = linedict[label]
+ curvedata = [
+ ('Label', label),
+ sep,
+ (None, '<b>Line</b>'),
+ ('Style', [line.get_linestyle()] + linestyles),
+ ('Width', line.get_linewidth()),
+ ('Color', col2hex(line.get_color())),
+ sep,
+ (None, '<b>Marker</b>'),
+ ('Style', [line.get_marker()] + markers),
+ ('Size', line.get_markersize()),
+ ('Facecolor', col2hex(line.get_markerfacecolor())),
+ ('Edgecolor', col2hex(line.get_markeredgecolor())),
+ ]
+ curves.append([curvedata, label, ""])
+
+ datalist = [(general, "Axes", "")]
+ if has_curve:
+ datalist.append((curves, "Curves", ""))
+ result = formlayout.fedit(datalist, title="Figure options", parent=parent,
+ icon=get_icon('qt4_editor_options.svg'))
+ if result is None:
+ return
+
+ if has_curve:
+ general, curves = result
+ else:
+ general, = result
+
+ # Set / General
+ title, xmin, xmax, xlabel, xscale, ymin, ymax, ylabel, yscale = general
+ axes.set_xscale(xscale)
+ axes.set_yscale(yscale)
+ axes.set_title(title)
+ axes.set_xlim(xmin, xmax)
+ axes.set_xlabel(xlabel)
+ axes.set_ylim(ymin, ymax)
+ axes.set_ylabel(ylabel)
+
+ if has_curve:
+ # Set / Curves
+ for index, curve in enumerate(curves):
+ line = linedict[curvelabels[index]]
+ label, linestyle, linewidth, color, \
+ marker, markersize, markerfacecolor, markeredgecolor = curve
+ line.set_label(label)
+ line.set_linestyle(linestyle)
+ line.set_linewidth(linewidth)
+ line.set_color(color)
+ if marker is not 'none':
+ line.set_marker(marker)
+ line.set_markersize(markersize)
+ line.set_markerfacecolor(markerfacecolor)
+ line.set_markeredgecolor(markeredgecolor)
+
+ # Redraw
+ figure = axes.get_figure()
+ figure.canvas.draw()
+
Added: trunk/matplotlib/lib/matplotlib/backends/qt4_editor/formlayout.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/qt4_editor/formlayout.py (rev 0)
+++ trunk/matplotlib/lib/matplotlib/backends/qt4_editor/formlayout.py 2010-01-03 18:30:04 UTC (rev 8064)
@@ -0,0 +1,487 @@
+# -*- coding: utf-8 -*-
+"""
+formlayout
+==========
+
+Module creating PyQt4 form dialogs/layouts to edit various type of parameters
+
+
+formlayout License Agreement (MIT License)
+------------------------------------------
+
+Copyright (c) 2009 Pierre Raybaut
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+"""
+
+__version__ = '1.0.5'
+__license__ = __doc__
+
+DEBUG = False
+
+import sys
+STDERR = sys.stderr
+
+try:
+ from PyQt4.QtGui import QFormLayout
+except ImportError:
+ raise ImportError, "Warning: formlayout requires PyQt4 >v4.3"
+
+from PyQt4.QtGui import (QWidget, QLineEdit, QComboBox, QLabel, QSpinBox, QIcon,
+ QStyle, QDialogButtonBox, QHBoxLayout, QVBoxLayout,
+ QDialog, QColor, QPushButton, QCheckBox, QColorDialog,
+ QPixmap, QTabWidget, QApplication, QStackedWidget,
+ QDateEdit, QDateTimeEdit, QFont, QFontComboBox,
+ QFontDatabase, QGridLayout)
+from PyQt4.QtCore import (Qt, SIGNAL, SLOT, QSize, QString,
+ pyqtSignature, pyqtProperty)
+from datetime import date
+
+
+class ColorButton(QPushButton):
+ """
+ Color choosing push button
+ """
+ __pyqtSignals__ = ("colorChanged(QColor)",)
+
+ def __init__(self, parent=None):
+ QPushButton.__init__(self, parent)
+ self.setFixedSize(20, 20)
+ self.setIconSize(QSize(12, 12))
+ self.connect(self, SIGNAL("clicked()"), self.chooseColor)
+ self._color = QColor()
+
+ def chooseColor(self):
+ rgba, valid = QColorDialog.getRgba(self._color.rgba(),
+ self.parentWidget())
+ if valid:
+ color = QColor.fromRgba(rgba)
+ self.setColor(color)
+
+ def color(self):
+ return self._color
+
+ @pyqtSignature("QColor")
+ def setColor(self, color):
+ if color != self._color:
+ self._color = color
+ self.emit(SIGNAL("colorChanged(QColor)"), self._color)
+ pixmap = QPixmap(self.iconSize())
+ pixmap.fill(color)
+ self.setIcon(QIcon(pixmap))
+
+ color = pyqtProperty("QColor", color, setColor)
+
+
+def text_to_qcolor(text):
+ """
+ Create a QColor from specified string
+ Avoid warning from Qt when an invalid QColor is instantiated
+ """
+ color = QColor()
+ if isinstance(text, QString):
+ text = str(text)
+ if not isinstance(text, (unicode, str)):
+ return color
+ if text.startswith('#') and len(text)==7:
+ correct = '#0123456789abcdef'
+ for char in text:
+ if char.lower() not in correct:
+ return color
+ elif text not in list(QColor.colorNames()):
+ return color
+ color.setNamedColor(text)
+ return color
+
+
+class ColorLayout(QHBoxLayout):
+ """Color-specialized QLineEdit layout"""
+ def __init__(self, color, parent=None):
+ QHBoxLayout.__init__(self)
+ assert isinstance(color, QColor)
+ self.lineedit = QLineEdit(color.name(), parent)
+ self.connect(self.lineedit, SIGNAL("textChanged(QString)"),
+ self.update_color)
+ self.addWidget(self.lineedit)
+ self.colorbtn = ColorButton(parent)
+ self.colorbtn.color = color
+ self.connect(self.colorbtn, SIGNAL("colorChanged(QColor)"),
+ self.update_text)
+ self.addWidget(self.colorbtn)
+
+ def update_color(self, text):
+ color = text_to_qcolor(text)
+ if color.isValid():
+ self.colorbtn.color = color
+
+ def update_text(self, color):
+ self.lineedit.setText(color.name())
+
+ def text(self):
+ return self.lineedit.text()
+
+
+def font_is_installed(font):
+ """Check if font is installed"""
+ return [fam for fam in QFontDatabase().families() if unicode(fam)==font]
+
+def tuple_to_qfont(tup):
+ """
+ Create a QFont from tuple:
+ (family [string], size [int], italic [bool], bold [bool])
+ """
+ if not isinstance(tup, tuple) or len(tup) != 4 \
+ or not font_is_installed(tup[0]) \
+ or not isinstance(tup[1], int) \
+ or not isinstance(tup[2], bool) \
+ or not isinstance(tup[3], bool):
+ return None
+ font = QFont()
+ family, size, italic, bold = tup
+ font.setFamily(family)
+ font.setPointSize(size)
+ font.setItalic(italic)
+ font.setBold(bold)
+ return font
+
+def qfont_to_tuple(font):
+ return (unicode(font.family()), int(font.pointSize()),
+ font.italic(), font.bold())
+
+
+class FontLayout(QGridLayout):
+ """Font selection"""
+ def __init__(self, value, parent=None):
+ QGridLayout.__init__(self)
+ font = tuple_to_qfont(value)
+ assert font is not None
+
+ # Font family
+ self.family = QFontComboBox(parent)
+ self.family.setCurrentFont(font)
+ self.addWidget(self.family, 0, 0, 1, -1)
+
+ # Font size
+ self.size = QComboBox(parent)
+ self.size.setEditable(True)
+ sizelist = range(6, 12) + range(12, 30, 2) + [36, 48, 72]
+ size = font.pointSize()
+ if size not in sizelist:
+ sizelist.append(size)
+ sizelist.sort()
+ self.size.addItems([str(s) for s in sizelist])
+ self.size.setCurrentIndex(sizelist.index(size))
+ self.addWidget(self.size, 1, 0)
+
+ # Italic or not
+ self.italic = QCheckBox(self.tr("Italic"), parent)
+ self.italic.setChecked(font.italic())
+ self.addWidget(self.italic, 1, 1)
+
+ # Bold or not
+ self.bold = QCheckBox(self.tr("Bold"), parent)
+ self.bold.setChecked(font.bold())
+ self.addWidget(self.bold, 1, 2)
+
+ def get_font(self):
+ font = self.family.currentFont()
+ font.setItalic(self.italic.isChecked())
+ font.setBold(self.bold.isChecked())
+ font.setPointSize(int(self.size.currentText()))
+ return qfont_to_tuple(font)
+
+
+class FormWidget(QWidget):
+ def __init__(self, data, comment="", parent=None):
+ super(FormWidget, self).__init__(parent)
+ from copy import deepcopy
+ self.data = deepcopy(data)
+ self.widgets = []
+ self.formlayout = QFormLayout(self)
+ if comment:
+ self.formlayout.addRow(QLabel(comment))
+ self.formlayout.addRow(QLabel(" "))
+ if DEBUG:
+ print "\n"+("*"*80)
+ print "DATA:", self.data
+ print "*"*80
+ print "COMMENT:", comment
+ print "*"*80
+ self.setup()
+
+ def setup(self):
+ for label, value in self.data:
+ if DEBUG:
+ print "value:", value
+ if label is None and value is None:
+ # Separator: (None, None)
+ self.formlayout.addRow(QLabel(" "), QLabel(" "))
+ self.widgets.append(None)
+ continue
+ elif label is None:
+ # Comment
+ self.formlayout.addRow(QLabel(value))
+ self.widgets.append(None)
+ continue
+ elif tuple_to_qfont(value) is not None:
+ field = FontLayout(value, self)
+ elif text_to_qcolor(value).isValid():
+ field = ColorLayout(QColor(value), self)
+ elif isinstance(value, (str, unicode)):
+ field = QLineEdit(value, self)
+ elif isinstance(value, (list, tuple)):
+ selindex = value.pop(0)
+ field = QComboBox(self)
+ if isinstance(value[0], (list, tuple)):
+ keys = [ key for key, _val in value ]
+ value = [ val for _key, val in value ]
+ else:
+ keys = value
+ field.addItems(value)
+ if selindex in value:
+ selindex = value.index(selindex)
+ elif selindex in keys:
+ selindex = keys.index(selindex)
+ elif not isinstance(selindex, int):
+ print >>STDERR, "Warning: '%s' index is invalid (label: " \
+ "%s, value: %s)" % (selindex, label, value)
+ selindex = 0
+ field.setCurrentIndex(selindex)
+ elif isinstance(value, bool):
+ field = QCheckBox(self)
+ field.setCheckState(Qt.Checked if value else Qt.Unchecked)
+ elif isinstance(value, float):
+ field = QLineEdit(repr(value), self)
+ elif isinstance(value, int):
+ field = QSpinBox(self)
+ field.setValue(value)
+ field.setMaximum(1e9)
+ elif isinstance(value, date):
+ if hasattr(value, 'hour'):
+ field = QDateTimeEdit(self)
+ field.setDateTime(value)
+ else:
+ field = QDateEdit(self)
+ field.setDate(value)
+ else:
+ field = QLineEdit(repr(value), self)
+ self.formlayout.addRow(label, field)
+ self.widgets.append(field)
+
+ def get(self):
+ valuelist = []
+ for index, (label, value) in enumerate(self.data):
+ field = self.widgets[index]
+ if label is None:
+ # Separator / Comment
+ continue
+ elif tuple_to_qfont(value) is not None:
+ value = field.get_font()
+ elif isinstance(value, (str, unicode)):
+ value = unicode(field.text())
+ elif isinstance(value, (list, tuple)):
+ index = int(field.currentIndex())
+ if isinstance(value[0], (list, tuple)):
+ value = value[index][0]
+ else:
+ value = value[index]
+ elif isinstance(value, bool):
+ value = field.checkState() == Qt.Checked
+ elif isinstance(value, float):
+ value = float(field.text())
+ elif isinstance(value, int):
+ value = int(field.value())
+ elif isinstance(value, date):
+ if hasattr(value, 'hour'):
+ value = field.dateTime().toPyDateTime()
+ else:
+ value = field.date().toPyDate()
+ else:
+ value = eval(str(field.text()))
+ valuelist.append(value)
+ return valuelist
+
+
+class FormComboWidget(QWidget):
+ def __init__(self, datalist, comment="", parent=None):
+ super(FormComboWidget, self).__init__(parent)
+ layout = QVBoxLayout()
+ self.setLayout(layout)
+ self.combobox = QComboBox()
+ layout.addWidget(self.combobox)
+
+ self.stackwidget = QStackedWidget(self)
+ layout.addWidget(self.stackwidget)
+ self.connect(self.combobox, SIGNAL("currentIndexChanged(int)"),
+ self.stackwidget, SLOT("setCurrentIndex(int)"))
+
+ self.widgetlist = []
+ for data, title, comment in datalist:
+ self.combobox.addItem(title)
+ widget = FormWidget(data, comment=comment, parent=self)
+ self.stackwidget.addWidget(widget)
+ self.widgetlist.append(widget)
+
+ def get(self):
+ return [ widget.get() for widget in self.widgetlist]
+
+
+class FormTabWidget(QWidget):
+ def __init__(self, datalist, comment="", parent=None):
+ super(FormTabWidget, self).__init__(parent)
+ layout = QVBoxLayout()
+ self.tabwidget = QTabWidget()
+ layout.addWidget(self.tabwidget)
+ self.setLayout(layout)
+ self.widgetlist = []
+ for data, title, comment in datalist:
+ if len(data[0])==3:
+ widget = FormComboWidget(data, comment=comment, parent=self)
+ else:
+ widget = FormWidget(data, comment=comment, parent=self)
+ index = self.tabwidget.addTab(widget, title)
+ self.tabwidget.setTabToolTip(index, comment)
+ self.widgetlist.append(widget)
+
+ def get(self):
+ return [ widget.get() for widget in self.widgetlist]
+
+
+class FormDialog(QDialog):
+ """Form Dialog"""
+ def __init__(self, data, title="", comment="",
+ icon=None, parent=None):
+ super(FormDialog, self).__init__(parent)
+
+ # Form
+ if isinstance(data[0][0], (list, tuple)):
+ self.formwidget = FormTabWidget(data, comment=comment,
+ parent=self)
+ elif len(data[0])==3:
+ self.formwidget = FormComboWidget(data, comment=comment,
+ parent=self)
+ else:
+ self.formwidget = FormWidget(data, comment=comment,
+ parent=self)
+ layout = QVBoxLayout()
+ layout.addWidget(self.formwidget)
+
+ # Button box
+ bbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+ self.connect(bbox, SIGNAL("accepted()"), SLOT("accept()"))
+ self.connect(bbox, SIGNAL("rejected()"), SLOT("reject()"))
+ layout.addWidget(bbox)
+
+ self.setLayout(layout)
+
+ self.setWindowTitle(title)
+ if not isinstance(icon, QIcon):
+ icon = QWidget().style().standardIcon(QStyle.SP_MessageBoxQuestion)
+ self.setWindowIcon(icon)
+
+ def accept(self):
+ self.data = self.formwidget.get()
+ QDialog.accept(self)
+
+ def reject(self):
+ self.data = None
+ QDialog.reject(self)
+
+ def get(self):
+ """Return form result"""
+ return self.data
+
+
+def fedit(data, title="", comment="", icon=None, parent=None):
+ """
+ Create form dialog and return result
+ (if Cancel button is pressed, return None)
+
+ data: datalist, datagroup
+
+ datalist: list/tuple of (field_name, field_value)
+ datagroup: list/tuple of (datalist *or* datagroup, title, comment)
+
+ -> one field for each member of a datalist
+ -> one tab for each member of a top-level datagroup
+ -> one page (of a multipage widget, each page can be selected with a combo
+ box) for each member of a datagroup inside a datagroup
+
+ Supported types for field_value:
+ - int, float, str, unicode, bool
+ - colors: in Qt-compatible text form, i.e. in hex format or name (red,...)
+ (automatically detected from a string)
+ - list/tuple:
+ * the first element will be the selected index (or value)
+ * the other elements can be couples (key, value) or only values
+ """
+
+ # Create a QApplication instance if no instance currently exists
+ # (e.g. if the module is used directly from the interpreter)
+ if QApplication.startingUp():
+ QApplication([])
+
+ dialog = FormDialog(data, title, comment, icon, parent)
+ if dialog.exec_():
+ return dialog.get()
+
+
+
+if __name__ == "__main__":
+
+ def create_datalist_example():
+ return [('str', 'this is a string'),
+ ('list', [0, '1', '3', '4']),
+ ('list2', ['--', ('none', 'None'), ('--', 'Dashed'),
+ ('-.', 'DashDot'), ('-', 'Solid'),
+ ('steps', 'Steps'), (':', 'Dotted')]),
+ ('float', 1.2),
+ (None, 'Other:'),
+ ('int', 12),
+ ('font', ('Arial', 10, False, True)),
+ ('color', '#123409'),
+ ('bool', True),
+ ('datetime', date(2010, 10, 10)),
+ ]
+
+ def create_datagroup_example():
+ datalist = create_datalist_example()
+ return ((datalist, "Category 1", "Category 1 comment"),
+ (datalist, "Category 2", "Category 2 comment"),
+ (datalist, "Category 3", "Category 3 comment"))
+
+ #--------- datalist example
+ datalist = create_datalist_example()
+ print "result:", fedit(datalist, title="Example",
+ comment="This is just an <b>example</b>.")
+
+ #--------- datagroup example
+ datagroup = create_datagroup_example()
+ print "result:", fedit(datagroup, "Global title")
+
+ #--------- datagroup inside a datagroup example
+ datalist = create_datalist_example()
+ datagroup = create_datagroup_example()
+ print "result:", fedit(((datagroup, "Title 1", "Tab 1 comment"),
+ (datalist, "Title 2", "Tab 2 comment"),
+ (datalist, "Title 3", "Tab 3 comment")),
+ "Global title")
Added: trunk/matplotlib/license/LICENSE_QT4_EDITOR
===================================================================
--- trunk/matplotlib/license/LICENSE_QT4_EDITOR (rev 0)
+++ trunk/matplotlib/license/LICENSE_QT4_EDITOR 2010-01-03 18:30:04 UTC (rev 8064)
@@ -0,0 +1,30 @@
+
+Module creating PyQt4 form dialogs/layouts to edit various type of parameters
+
+
+formlayout License Agreement (MIT License)
+------------------------------------------
+
+Copyright (c) 2009 Pierre Raybaut
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+"""
Modified: trunk/matplotlib/setup.py
===================================================================
--- trunk/matplotlib/setup.py 2010-01-02 06:30:15 UTC (rev 8063)
+++ trunk/matplotlib/setup.py 2010-01-03 18:30:04 UTC (rev 8064)
@@ -49,6 +49,7 @@
packages = [
'matplotlib',
'matplotlib.backends',
+ 'matplotlib.backends.qt4_editor',
'matplotlib.projections',
'matplotlib.testing',
'matplotlib.testing.jpl_units',
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ef...@us...> - 2010-01-02 06:30:21
|
Revision: 8063
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8063&view=rev
Author: efiring
Date: 2010-01-02 06:30:15 +0000 (Sat, 02 Jan 2010)
Log Message:
-----------
Include contourf examples in documentation
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/contour.py
Modified: trunk/matplotlib/lib/matplotlib/contour.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/contour.py 2010-01-02 05:20:47 UTC (rev 8062)
+++ trunk/matplotlib/lib/matplotlib/contour.py 2010-01-02 06:30:15 UTC (rev 8063)
@@ -987,9 +987,8 @@
signatures and return values are the same for both versions.
:func:`~matplotlib.pyplot.contourf` differs from the Matlab
- (TM) version in that it does not draw the polygon edges,
- because the contouring engine yields simply connected regions
- with branch cuts. To draw the edges, add line contours with
+ (TM) version in that it does not draw the polygon edges.
+ To draw edges, add line contours with
calls to :func:`~matplotlib.pyplot.contour`.
@@ -1142,9 +1141,11 @@
be removed. Chunking introduces artifacts at the chunk boundaries
unless *antialiased* is *False*.
- **Example:**
+ **Examples:**
.. plot:: mpl_examples/pylab_examples/contour_demo.py
+
+ .. plot:: mpl_examples/pylab_examples/contourf_demo.py
"""
def find_nearest_contour( self, x, y, indices=None, pixel=True ):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <as...@us...> - 2010-01-02 05:20:53
|
Revision: 8062
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8062&view=rev
Author: astraw
Date: 2010-01-02 05:20:47 +0000 (Sat, 02 Jan 2010)
Log Message:
-----------
buildbot: build docs
Modified Paths:
--------------
trunk/matplotlib/test/_buildbot_doc.sh
Modified: trunk/matplotlib/test/_buildbot_doc.sh
===================================================================
--- trunk/matplotlib/test/_buildbot_doc.sh 2010-01-02 05:10:08 UTC (rev 8061)
+++ trunk/matplotlib/test/_buildbot_doc.sh 2010-01-02 05:20:47 UTC (rev 8062)
@@ -2,14 +2,12 @@
set -e
TARGET=`pwd`/PYmpl
-TARGET_py=$TARGET/bin/python
+source $TARGET/bin/activate
-$TARGET_py -c "import shutil,matplotlib; x=matplotlib.get_configdir(); shutil.rmtree(x)"
+python -c "import shutil,matplotlib; x=matplotlib.get_configdir(); shutil.rmtree(x)"
-TARGET_easy_install=$TARGET/bin/easy_install
+easy_install sphinx
-$TARGET_easy_install sphinx
-
cd doc
-$TARGET_py make.py all
+python make.py all
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <as...@us...> - 2010-01-02 05:10:14
|
Revision: 8061
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8061&view=rev
Author: astraw
Date: 2010-01-02 05:10:08 +0000 (Sat, 02 Jan 2010)
Log Message:
-----------
fix docstring
Modified Paths:
--------------
trunk/matplotlib/test/_buildbot_test.py
Modified: trunk/matplotlib/test/_buildbot_test.py
===================================================================
--- trunk/matplotlib/test/_buildbot_test.py 2010-01-02 05:09:59 UTC (rev 8060)
+++ trunk/matplotlib/test/_buildbot_test.py 2010-01-02 05:10:08 UTC (rev 8061)
@@ -1,5 +1,4 @@
-"""This script will install matplotlib to a virtual environment to
-faciltate testing."""
+"""This script will test matplotlib in a virtual environment"""
import os, glob
from _buildbot_util import check_call
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|