From 6828e18a6a0d63f2203f5043bda0018925244188 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= <martin@v.loewis.de>
Date: Sat, 18 Oct 2003 09:55:08 +0000
Subject: [PATCH] Patch #825679: Clarify semantics of .isfoo on empty strings.
 Backported to 2.3.

---
 Doc/lib/libstdtypes.tex | 12 +++++++-----
 Objects/stringobject.c  | 25 +++++++++++++------------
 Objects/unicodeobject.c | 21 +++++++++++----------
 3 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/Doc/lib/libstdtypes.tex b/Doc/lib/libstdtypes.tex
index 531e385e9d9..ca9724dbdb4 100644
--- a/Doc/lib/libstdtypes.tex
+++ b/Doc/lib/libstdtypes.tex
@@ -613,7 +613,8 @@ is at least one character, false otherwise.
 \end{methoddesc}
 
 \begin{methoddesc}[string]{isdigit}{}
-Return true if there are only digit characters, false otherwise.
+Return true if all characters in the string are digits and there
+is at least one character, false otherwise.
 \end{methoddesc}
 
 \begin{methoddesc}[string]{islower}{}
@@ -623,13 +624,14 @@ there is at least one cased character, false otherwise.
 
 \begin{methoddesc}[string]{isspace}{}
 Return true if there are only whitespace characters in the string and
-the string is not empty, false otherwise.
+there is at least one character, false otherwise.
 \end{methoddesc}
 
 \begin{methoddesc}[string]{istitle}{}
-Return true if the string is a titlecased string: uppercase
-characters may only follow uncased characters and lowercase characters
-only cased ones.  Return false otherwise.
+Return true if the string is a titlecased string and there is at least one
+character, i.e. uppercase characters may only follow uncased
+characters and lowercase characters only cased ones.  Return false
+otherwise.
 \end{methoddesc}
 
 \begin{methoddesc}[string]{isupper}{}
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 04c9c9887a2..7143a815963 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -2733,10 +2733,10 @@ string_zfill(PyStringObject *self, PyObject *args)
 }
 
 PyDoc_STRVAR(isspace__doc__,
-"S.isspace() -> bool\n"
-"\n"
-"Return True if there are only whitespace characters in S,\n"
-"False otherwise.");
+"S.isspace() -> bool\n\
+\n\
+Return True if all characters in S are whitespace\n\
+and there is at least one character in S, False otherwise.");
 
 static PyObject*
 string_isspace(PyStringObject *self)
@@ -2766,7 +2766,7 @@ string_isspace(PyStringObject *self)
 PyDoc_STRVAR(isalpha__doc__,
 "S.isalpha() -> bool\n\
 \n\
-Return True if  all characters in S are alphabetic\n\
+Return True if all characters in S are alphabetic\n\
 and there is at least one character in S, False otherwise.");
 
 static PyObject*
@@ -2797,7 +2797,7 @@ string_isalpha(PyStringObject *self)
 PyDoc_STRVAR(isalnum__doc__,
 "S.isalnum() -> bool\n\
 \n\
-Return True if  all characters in S are alphanumeric\n\
+Return True if all characters in S are alphanumeric\n\
 and there is at least one character in S, False otherwise.");
 
 static PyObject*
@@ -2828,8 +2828,8 @@ string_isalnum(PyStringObject *self)
 PyDoc_STRVAR(isdigit__doc__,
 "S.isdigit() -> bool\n\
 \n\
-Return True if there are only digit characters in S,\n\
-False otherwise.");
+Return True if all characters in S are digits\n\
+and there is at least one character in S, False otherwise.");
 
 static PyObject*
 string_isdigit(PyStringObject *self)
@@ -2893,7 +2893,7 @@ string_islower(PyStringObject *self)
 PyDoc_STRVAR(isupper__doc__,
 "S.isupper() -> bool\n\
 \n\
-Return True if  all cased characters in S are uppercase and there is\n\
+Return True if all cased characters in S are uppercase and there is\n\
 at least one cased character in S, False otherwise.");
 
 static PyObject*
@@ -2927,9 +2927,10 @@ string_isupper(PyStringObject *self)
 PyDoc_STRVAR(istitle__doc__,
 "S.istitle() -> bool\n\
 \n\
-Return True if S is a titlecased string, i.e. uppercase characters\n\
-may only follow uncased characters and lowercase characters only cased\n\
-ones. Return False otherwise.");
+Return True if S is a titlecased string and there is at least one\n\
+character in S, i.e. uppercase characters may only follow uncased\n\
+characters and lowercase characters only cased ones. Return False\n\
+otherwise.");
 
 static PyObject*
 string_istitle(PyStringObject *self, PyObject *uncased)
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index f0480fbba7b..03559da9671 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -4897,7 +4897,7 @@ unicode_islower(PyUnicodeObject *self)
 PyDoc_STRVAR(isupper__doc__,
 "S.isupper() -> bool\n\
 \n\
-Return True if  all cased characters in S are uppercase and there is\n\
+Return True if all cased characters in S are uppercase and there is\n\
 at least one cased character in S, False otherwise.");
 
 static PyObject*
@@ -4931,9 +4931,10 @@ unicode_isupper(PyUnicodeObject *self)
 PyDoc_STRVAR(istitle__doc__,
 "S.istitle() -> bool\n\
 \n\
-Return True if S is a titlecased string, i.e. upper- and titlecase\n\
-characters may only follow uncased characters and lowercase characters\n\
-only cased ones. Return False otherwise.");
+Return True if S is a titlecased string and there is at least one\n\
+character in S, i.e. upper- and titlecase characters may only\n\
+follow uncased characters and lowercase characters only cased ones.\n\
+Return False otherwise.");
 
 static PyObject*
 unicode_istitle(PyUnicodeObject *self)
@@ -4978,8 +4979,8 @@ unicode_istitle(PyUnicodeObject *self)
 PyDoc_STRVAR(isspace__doc__,
 "S.isspace() -> bool\n\
 \n\
-Return True if there are only whitespace characters in S,\n\
-False otherwise.");
+Return True if all characters in S are whitespace\n\
+and there is at least one character in S, False otherwise.");
 
 static PyObject*
 unicode_isspace(PyUnicodeObject *self)
@@ -5007,7 +5008,7 @@ unicode_isspace(PyUnicodeObject *self)
 PyDoc_STRVAR(isalpha__doc__,
 "S.isalpha() -> bool\n\
 \n\
-Return True if  all characters in S are alphabetic\n\
+Return True if all characters in S are alphabetic\n\
 and there is at least one character in S, False otherwise.");
 
 static PyObject*
@@ -5036,7 +5037,7 @@ unicode_isalpha(PyUnicodeObject *self)
 PyDoc_STRVAR(isalnum__doc__,
 "S.isalnum() -> bool\n\
 \n\
-Return True if  all characters in S are alphanumeric\n\
+Return True if all characters in S are alphanumeric\n\
 and there is at least one character in S, False otherwise.");
 
 static PyObject*
@@ -5094,8 +5095,8 @@ unicode_isdecimal(PyUnicodeObject *self)
 PyDoc_STRVAR(isdigit__doc__,
 "S.isdigit() -> bool\n\
 \n\
-Return True if there are only digit characters in S,\n\
-False otherwise.");
+Return True if all characters in S are digits\n\
+and there is at least one character in S, False otherwise.");
 
 static PyObject*
 unicode_isdigit(PyUnicodeObject *self)
-- 
2.30.9