Patch #825679: Clarify semantics of .isfoo on empty strings.
Backported to 2.3.
diff --git a/Doc/lib/libstdtypes.tex b/Doc/lib/libstdtypes.tex
index 531e385..ca9724d 100644
--- a/Doc/lib/libstdtypes.tex
+++ b/Doc/lib/libstdtypes.tex
@@ -613,7 +613,8 @@
 \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 @@
 
 \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 04c9c98..7143a81 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -2733,10 +2733,10 @@
 }
 
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 f0480fb..03559da 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -4897,7 +4897,7 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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)