Repository: joke2k/faker

Issue:
Locales for cs_CZ fake.name_male() shows a female name
Looking at the very last example [here](https://faker.readthedocs.io/en/latest/locales/cs_CZ.html#faker-providers-misc). The name is actually a female name.

```
fake.name_male()
# 'Ing. Sára Mašková CSc.'
```


Discussion:
Thank you for the report @quapka ! could you submit a PR to fix the issue?
Yes I can, I did no have time at the moment of writing this issue.
Hmm, I've forked the code and search for the problem, but could not find it. I glimpsed over `/faker/providers/person/cs_CZ/__init__.py` and it looks alright.

It can be only a mistake in the docs maybe? I'm unsure how the
```
fake.name_male()
# 'Ing. Sára Mašková CSc.'
```
actually ends up there though.
I do not speak Czech, but I can tell the following output is a female name:

from faker import Faker
fake_cs_cZ = Faker('cs_CZ')
fake_cs_cZ.name_male()
'Emilie Poláková
fake_cs_cZ.name_male()
'Hana Říhová'

name_male() and name_female() requires the provider to contain `formats_male` and `formats_female`.  See
[`https://github.com/joke2k/faker/blob/master/faker/providers/person/en_US/__init__.py`](https://github.com/joke2k/faker/blob/master/faker/providers/person/en_US/__init__.py) for an example.

Resolving patch:
diff --git a/faker/providers/person/cs_CZ/__init__.py b/faker/providers/person/cs_CZ/__init__.py
--- a/faker/providers/person/cs_CZ/__init__.py
+++ b/faker/providers/person/cs_CZ/__init__.py
@@ -1,26 +1,26 @@
 # coding=utf-8
 from __future__ import unicode_literals
+from collections import OrderedDict
 from .. import Provider as PersonProvider
 
 
 class Provider(PersonProvider):
-    formats = (
-        '{{first_name_male}} {{last_name_male}}',
-        '{{first_name_male}} {{last_name_male}}',
-        '{{first_name_male}} {{last_name_male}}',
-        '{{first_name_male}} {{last_name_male}}',
-        '{{first_name_male}} {{last_name_male}}',
-        '{{first_name_female}} {{last_name_female}}',
-        '{{first_name_female}} {{last_name_female}}',
-        '{{first_name_female}} {{last_name_female}}',
-        '{{first_name_female}} {{last_name_female}}',
-        '{{first_name_female}} {{last_name_female}}',
-        '{{prefix_male}} {{first_name_male}} {{last_name_male}}',
-        '{{prefix_female}} {{first_name_female}} {{last_name_female}}',
-        '{{first_name_male}} {{last_name_male}} {{suffix}}',
-        '{{first_name_female}} {{last_name_female}} {{suffix}}',
-        '{{prefix_male}} {{first_name_male}} {{last_name_male}} {{suffix}}',
-        '{{prefix_female}} {{first_name_female}} {{last_name_female}} {{suffix}}')
+    formats_female = OrderedDict((
+        ('{{first_name_female}} {{last_name_female}}', 0.97),
+        ('{{prefix_female}} {{first_name_female}} {{last_name_female}}', 0.015),
+        ('{{first_name_female}} {{last_name_female}} {{suffix}}', 0.02),
+        ('{{prefix_female}} {{first_name_female}} {{last_name_female}} {{suffix}}', 0.005)
+    ))
+
+    formats_male = OrderedDict((
+        ('{{first_name_male}} {{last_name_male}}', 0.97),
+        ('{{prefix_male}} {{first_name_male}} {{last_name_male}}', 0.015),
+        ('{{first_name_male}} {{last_name_male}} {{suffix}}', 0.02),
+        ('{{prefix_male}} {{first_name_male}} {{last_name_male}} {{suffix}}', 0.005)
+    ))
+
+    formats = formats_male.copy()
+    formats.update(formats_female)
 
     first_names_male = (
         'Adam',


Test patch:
diff --git a/tests/providers/test_person.py b/tests/providers/test_person.py
--- a/tests/providers/test_person.py
+++ b/tests/providers/test_person.py
@@ -12,6 +12,7 @@
 from faker.providers.person.fi_FI import Provider as FiProvider
 from faker.providers.person.ne_NP import Provider as NeProvider
 from faker.providers.person.sv_SE import Provider as SvSEProvider
+from faker.providers.person.cs_CZ import Provider as CsCZProvider
 from faker.providers.person.pl_PL import (
     checksum_identity_card_number as pl_checksum_identity_card_number,
 )
@@ -201,3 +202,49 @@ def test_identity_card_number_checksum(self):
     def test_identity_card_number(self):
         for _ in range(100):
             self.assertTrue(re.search(r'^[A-Z]{3}\d{6}$', self.factory.identity_card_number()))
+
+
+class TestCsCZ(unittest.TestCase):
+
+    def setUp(self):
+        self.factory = Faker('cs_CZ')
+
+    def test_name_male(self):
+        male_name = self.factory.name_male()
+        name_parts = male_name.split(" ")
+        first_name, last_name = "", ""
+        if len(name_parts) == 2:
+            first_name = name_parts[0]
+            last_name = name_parts[1]
+        elif len(name_parts) == 4:
+            first_name = name_parts[1]
+            last_name = name_parts[2]
+        elif len(name_parts) == 3:
+            if name_parts[-1] in CsCZProvider.suffixes:
+                first_name = name_parts[0]
+                last_name = name_parts[1]
+            else:
+                first_name = name_parts[1]
+                last_name = name_parts[2]
+        self.assertIn(first_name, CsCZProvider.first_names_male)
+        self.assertIn(last_name, CsCZProvider.last_names_male)
+
+    def test_name_female(self):
+        female_name = self.factory.name_female()
+        name_parts = female_name.split(" ")
+        first_name, last_name = "", ""
+        if len(name_parts) == 2:
+            first_name = name_parts[0]
+            last_name = name_parts[1]
+        elif len(name_parts) == 4:
+            first_name = name_parts[1]
+            last_name = name_parts[2]
+        elif len(name_parts) == 3:
+            if name_parts[-1] in CsCZProvider.suffixes:
+                first_name = name_parts[0]
+                last_name = name_parts[1]
+            else:
+                first_name = name_parts[1]
+                last_name = name_parts[2]
+        self.assertIn(first_name, CsCZProvider.first_names_female)
+        self.assertIn(last_name, CsCZProvider.last_names_female)