




'''simple docstring'''




import re
import tempfile
from pathlib import Path

import pytest
import yaml

from datasets.utils.readme import ReadMe


# @pytest.fixture
# def example_yaml_structure():

a_      :		List[str]							      =       yaml.safe_load(
    """\
name: \"\"
allow_empty: false
allow_empty_text: true
subsections:
  - name: \"Dataset Card for X\" # First-level markdown heading
    allow_empty: false
    allow_empty_text: true
    subsections:
      - name: \"Table of Contents\"
        allow_empty: false
        allow_empty_text: false
        subsections: null
      - name: \"Dataset Description\"
        allow_empty: false
        allow_empty_text: false
        subsections:
          - name: \"Dataset Summary\"
            allow_empty: false
            allow_empty_text: false
            subsections: null
          - name: \"Supported Tasks and Leaderboards\"
            allow_empty: true
            allow_empty_text: true
            subsections: null
          - name: Languages
            allow_empty: false
            allow_empty_text: true
            subsections: null
"""
)


a_      :		int							      =       {
    """name""": """root""",
    """text""": """""",
    """is_empty_text""": True,
    """subsections""": [
        {
            """name""": """Dataset Card for My Dataset""",
            """text""": """""",
            """is_empty_text""": True,
            """subsections""": [
                {"""name""": """Table of Contents""", """text""": """Some text here.""", """is_empty_text""": False, """subsections""": []},
                {
                    """name""": """Dataset Description""",
                    """text""": """Some text here.""",
                    """is_empty_text""": False,
                    """subsections""": [
                        {
                            """name""": """Dataset Summary""",
                            """text""": """Some text here.""",
                            """is_empty_text""": False,
                            """subsections""": [],
                        },
                        {
                            """name""": """Supported Tasks and Leaderboards""",
                            """text""": """""",
                            """is_empty_text""": True,
                            """subsections""": [],
                        },
                        {"""name""": """Languages""", """text""": """Language Text""", """is_empty_text""": False, """subsections""": []},
                    ],
                },
            ],
        }
    ],
}


a_      :		List[str]							      =       """\
---
language:
- zh
- en
---

# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Supported Tasks and Leaderboards
### Languages
Language Text
"""


a_      :		str							      =       """\
---
language:
- zh
- en
---

# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
#### Extra Ignored Subsection
### Supported Tasks and Leaderboards
### Languages
Language Text
"""

a_      :		List[str]							      =       {
    """name""": """root""",
    """text""": """""",
    """is_empty_text""": True,
    """subsections""": [
        {
            """name""": """Dataset Card for My Dataset""",
            """text""": """""",
            """is_empty_text""": True,
            """subsections""": [
                {"""name""": """Table of Contents""", """text""": """Some text here.""", """is_empty_text""": False, """subsections""": []},
                {
                    """name""": """Dataset Description""",
                    """text""": """Some text here.""",
                    """is_empty_text""": False,
                    """subsections""": [
                        {
                            """name""": """Dataset Summary""",
                            """text""": """Some text here.""",
                            """is_empty_text""": False,
                            """subsections""": [
                                {
                                    """name""": """Extra Ignored Subsection""",
                                    """text""": """""",
                                    """is_empty_text""": True,
                                    """subsections""": [],
                                }
                            ],
                        },
                        {
                            """name""": """Supported Tasks and Leaderboards""",
                            """text""": """""",
                            """is_empty_text""": True,
                            """subsections""": [],
                        },
                        {"""name""": """Languages""", """text""": """Language Text""", """is_empty_text""": False, """subsections""": []},
                    ],
                },
            ],
        }
    ],
}

a_      :		str							      =       """\
---
---
# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Supported Tasks and Leaderboards
### Languages
Language Text
"""

a_      :		Tuple							      =       (
    """The following issues were found for the README at `{path}`:\n-\tEmpty YAML markers are present in the README."""
)

a_      :		List[Any]							      =       """\
# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Supported Tasks and Leaderboards
### Languages
Language Text
"""

a_      :		Dict							      =       (
    """The following issues were found for the README at `{path}`:\n-\tNo YAML markers are present in the README."""
)

a_      :		List[str]							      =       """\
---
# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Supported Tasks and Leaderboards
### Languages
Language Text
"""

a_      :		str							      =       """The following issues were found for the README at `{path}`:\n-\tOnly the start of YAML tags present in the README."""

a_      :		Optional[Any]							      =       """\
---
language:
- zh
- en
---

# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
### Supported Tasks and Leaderboards
### Languages
Language Text
"""
a_      :		int							      =       """The following issues were found for the README at `{path}`:\n-\tExpected some content in section `Dataset Summary` but it is empty.\n-\tExpected some text in section `Dataset Summary` but it is empty (text in subsections are ignored)."""


a_      :		Optional[Any]							      =       """\
---
language:
- zh
- en
---

# Dataset Card for My Dataset
"""
a_      :		List[Any]							      =       """The following issues were found for the README at `{path}`:\n-\tExpected some content in section `Dataset Card for My Dataset` but it is empty.\n-\tSection `Dataset Card for My Dataset` expected the following subsections: `Table of Contents`, `Dataset Description`. Found 'None'."""

a_      :		Any							      =       """\
---
language:
- zh
- en
---

# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Languages
Language Text
"""

a_      :		Optional[Any]							      =       """The following issues were found for the README at `{path}`:\n-\tSection `Dataset Description` is missing subsection: `Supported Tasks and Leaderboards`."""


a_      :		int							      =       """\
---
language:
- zh
- en
---

# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Supported Tasks and Leaderboards
### Languages
"""

a_      :		str							      =       """The following issues were found for the README at `{path}`:\n-\tExpected some content in section `Languages` but it is empty."""

a_      :		int							      =       """\
---
language:
- zh
- en
---

## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Supported Tasks and Leaderboards
### Languages
Language Text
"""
a_      :		List[Any]							      =       """The following issues were found for the README at `{path}`:\n-\tThe README has no first-level headings. One heading is expected. Skipping further validation for this README."""

a_      :		int							      =       """\
---
language:
- zh
- en
---

# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Supported Tasks and Leaderboards
### Languages
Language Text
# Dataset Card My Dataset
"""

a_      :		Optional[Any]							      =       """The following issues were found for the README at `{path}`:\n-\tThe README has several first-level headings: `Dataset Card for My Dataset`, `Dataset Card My Dataset`. Only one heading is expected. Skipping further validation for this README."""

a_      :		Dict							      =       """\
---
language:
- zh
- en
---

# Dataset Card My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Supported Tasks and Leaderboards
### Languages
Language Text
"""

a_      :		List[Any]							      =       """The following issues were found for the README at `{path}`:\n-\tNo first-level heading starting with `Dataset Card for` found in README. Skipping further validation for this README."""

a_      :		Optional[Any]							      =       """"""

a_      :		Tuple							      =       """The following issues were found for the README at `{path}`:\n-\tThe README has no first-level headings. One heading is expected. Skipping further validation for this README.\n-\tNo YAML markers are present in the README."""

a_      :		Optional[Any]							      =       """\
---
language:
- zh
- en
---

# Dataset Card for My Dataset
# Dataset Card for My Dataset
## Table of Contents
Some text here.
## Dataset Description
Some text here.
### Dataset Summary
Some text here.
### Supported Tasks and Leaderboards
### Languages
Language Text
"""

a_      :		Dict							      =       """The following issues were found while parsing the README at `{path}`:\n-\tMultiple sections with the same heading `Dataset Card for My Dataset` have been found. Please keep only one of these sections."""





@pytest.mark.parametrize(
    '''readme_md, expected_dict'''   ,       [
        (README_CORRECT, CORRECT_DICT),
        (README_CORRECT_FOUR_LEVEL, CORRECT_DICT_FOUR_LEVEL),
    ]   ,       )
def      a_							(      __snake_case							:			Tuple   ,       __snake_case							:			str   )							->						str:



       """simple docstring"""
       assert ReadMe.from_string(__snake_case   ,       __snake_case   ).to_dict() == expected_dict





@pytest.mark.parametrize(
    '''readme_md, expected_error'''   ,       [
        (README_NO_YAML, EXPECTED_ERROR_README_NO_YAML),
        (README_EMPTY_YAML, EXPECTED_ERROR_README_EMPTY_YAML),
        (README_INCORRECT_YAML, EXPECTED_ERROR_README_INCORRECT_YAML),
        (README_EMPTY, EXPECTED_ERROR_README_EMPTY),
        (README_NONE_SUBSECTION, EXPECTED_ERROR_README_NONE_SUBSECTION),
        (README_MISSING_FIRST_LEVEL, EXPECTED_ERROR_README_MISSING_FIRST_LEVEL),
        (README_MISSING_SUBSECTION, EXPECTED_ERROR_README_MISSING_SUBSECTION),
        (README_MISSING_TEXT, EXPECTED_ERROR_README_MISSING_TEXT),
        (README_WRONG_FIRST_LEVEL, EXPECTED_ERROR_README_WRONG_FIRST_LEVEL),
        (README_MULTIPLE_WRONG_FIRST_LEVEL, EXPECTED_ERROR_README_MULTIPLE_WRONG_FIRST_LEVEL),
        (README_MISSING_CONTENT, EXPECTED_ERROR_README_MISSING_CONTENT),
    ]   ,       )
def      a_							(      __snake_case							:			List[str]   ,       __snake_case							:			Union[str, Any]   )							->						Optional[int]:



       """simple docstring"""
       with pytest.raises(__snake_case   ,       match=re.escape(expected_error.format(path='''root'''   )   )   ):
              lowerCamelCase_							=ReadMe.from_string(__snake_case   ,       __snake_case   )
              readme.validate()





@pytest.mark.parametrize(
    '''readme_md, expected_error'''   ,       [
        (README_MULTIPLE_SAME_HEADING_1, EXPECTED_ERROR_README_MULTIPLE_SAME_HEADING_1),
    ]   ,       )
def      a_							(      __snake_case							:			Union[str, Any]   ,       __snake_case							:			Dict   )							->						List[str]:



       """simple docstring"""
       with pytest.raises(__snake_case   ,       match=re.escape(expected_error.format(path='''root'''   )   )   ):
              ReadMe.from_string(__snake_case   ,       __snake_case   )





@pytest.mark.parametrize(
    '''readme_md,'''   ,       [
        (README_MULTIPLE_SAME_HEADING_1),
    ]   ,       )
def      a_							(      __snake_case							:			Tuple   )							->						int:



       """simple docstring"""
       ReadMe.from_string(__snake_case   ,       __snake_case   ,       suppress_parsing_errors=__snake_case   )





@pytest.mark.parametrize(
    '''readme_md, expected_dict'''   ,       [
        (README_CORRECT, CORRECT_DICT),
        (README_CORRECT_FOUR_LEVEL, CORRECT_DICT_FOUR_LEVEL),
    ]   ,       )
def      a_							(      __snake_case							:			Tuple   ,       __snake_case							:			Tuple   )							->						Union[str, Any]:



       """simple docstring"""
       with tempfile.TemporaryDirectory() as tmp_dir:
              lowerCamelCase_							=Path(__snake_case   ) / '''README.md'''
              with open(__snake_case   ,       '''w+'''   ) as readme_file:
                     readme_file.write(__snake_case   )
              lowerCamelCase_							=ReadMe.from_readme(__snake_case   ,       __snake_case   ).to_dict()
              assert out["name"] == path
              assert out["text"] == ""
              assert out["is_empty_text"]
              assert out["subsections"] == expected_dict["subsections"]





@pytest.mark.parametrize(
    '''readme_md, expected_error'''   ,       [
        (README_NO_YAML, EXPECTED_ERROR_README_NO_YAML),
        (README_EMPTY_YAML, EXPECTED_ERROR_README_EMPTY_YAML),
        (README_INCORRECT_YAML, EXPECTED_ERROR_README_INCORRECT_YAML),
        (README_EMPTY, EXPECTED_ERROR_README_EMPTY),
        (README_NONE_SUBSECTION, EXPECTED_ERROR_README_NONE_SUBSECTION),
        (README_MISSING_FIRST_LEVEL, EXPECTED_ERROR_README_MISSING_FIRST_LEVEL),
        (README_MISSING_SUBSECTION, EXPECTED_ERROR_README_MISSING_SUBSECTION),
        (README_MISSING_TEXT, EXPECTED_ERROR_README_MISSING_TEXT),
        (README_WRONG_FIRST_LEVEL, EXPECTED_ERROR_README_WRONG_FIRST_LEVEL),
        (README_MULTIPLE_WRONG_FIRST_LEVEL, EXPECTED_ERROR_README_MULTIPLE_WRONG_FIRST_LEVEL),
        (README_MISSING_CONTENT, EXPECTED_ERROR_README_MISSING_CONTENT),
    ]   ,       )
def      a_							(      __snake_case							:			Union[str, Any]   ,       __snake_case							:			int   )							->						str:



       """simple docstring"""
       with tempfile.TemporaryDirectory() as tmp_dir:
              lowerCamelCase_							=Path(__snake_case   ) / '''README.md'''
              with open(__snake_case   ,       '''w+'''   ) as readme_file:
                     readme_file.write(__snake_case   )
              lowerCamelCase_							=expected_error.format(path=__snake_case   )
              with pytest.raises(__snake_case   ,       match=re.escape(__snake_case   )   ):
                     lowerCamelCase_							=ReadMe.from_readme(__snake_case   ,       __snake_case   )
                     readme.validate()





@pytest.mark.parametrize(
    '''readme_md, expected_error'''   ,       [
        (README_MULTIPLE_SAME_HEADING_1, EXPECTED_ERROR_README_MULTIPLE_SAME_HEADING_1),
    ]   ,       )
def      a_							(      __snake_case							:			List[Any]   ,       __snake_case							:			Union[str, Any]   )							->						List[Any]:



       """simple docstring"""
       with tempfile.TemporaryDirectory() as tmp_dir:
              lowerCamelCase_							=Path(__snake_case   ) / '''README.md'''
              with open(__snake_case   ,       '''w+'''   ) as readme_file:
                     readme_file.write(__snake_case   )
              lowerCamelCase_							=expected_error.format(path=__snake_case   )
              with pytest.raises(__snake_case   ,       match=re.escape(__snake_case   )   ):
                     ReadMe.from_readme(__snake_case   ,       __snake_case   )





@pytest.mark.parametrize(
    '''readme_md,'''   ,       [
        (README_MULTIPLE_SAME_HEADING_1),
    ]   ,       )
def      a_							(      __snake_case							:			List[Any]   )							->						List[str]:



       """simple docstring"""
       with tempfile.TemporaryDirectory() as tmp_dir:
              lowerCamelCase_							=Path(__snake_case   ) / '''README.md'''
              with open(__snake_case   ,       '''w+'''   ) as readme_file:
                     readme_file.write(__snake_case   )
              ReadMe.from_readme(__snake_case   ,       __snake_case   ,       suppress_parsing_errors=__snake_case   )








import os
import random
import sys

from . import cryptomath_module as cryptoMath  # noqa: N812
from . import rabin_miller as rabinMiller  # noqa: N812






def 							__lowercase   ( ):
							print('Making key files...'   )
							make_key_files('rsa'					,    1_0_2_4   )
							print('Key files generation successful.'   )






def 							__lowercase   ( __lowerCAmelCase							:				int   ):
							print('Generating prime p...'   )
							a__             =     rabinMiller.generate_large_prime(__lowerCAmelCase   )
							print('Generating prime q...'   )
							a__             =     rabinMiller.generate_large_prime(__lowerCAmelCase   )
							a__             =     p * q

							print('Generating e that is relatively prime to (p - 1) * (q - 1)...'   )
							while True:
														a__             =     random.randrange(2 ** (key_size - 1)					,    2 ** (key_size)   )
														if cryptoMath.gcd(__lowerCAmelCase					,    (p - 1) * (q - 1)   ) == 1:
																					break

							print('Calculating d that is mod inverse of e...'   )
							a__             =     cryptoMath.find_mod_inverse(__lowerCAmelCase					,    (p - 1) * (q - 1)   )

							a__             =     (n, e)
							a__             =     (n, d)
							return (public_key, private_key)






def 							__lowercase   ( __lowerCAmelCase							:				str					,    __lowerCAmelCase							:				int   ):
							if os.path.exists(F'{name}_pubkey.txt'   ) or os.path.exists(F'{name}_privkey.txt'   ):
														print('\nWARNING:'   )
														print(
														    F'"{name}_pubkey.txt" or "{name}_privkey.txt" already exists. \n'
														    'Use a different name or delete these files and re-run this program.'   )
														sys.exit()

							a__      ,					a__             =     generate_key(__lowerCAmelCase   )
							print(F'\nWriting public key to file {name}_pubkey.txt...'   )
							with open(F'{name}_pubkey.txt'					,    'w'   ) as out_file:
														out_file.write(F'{key_size},{public_key[0]},{public_key[1]}'   )

							print(F'Writing private key to file {name}_privkey.txt...'   )
							with open(F'{name}_privkey.txt'					,    'w'   ) as out_file:
														out_file.write(F'{key_size},{private_key[0]},{private_key[1]}'   )


if __name__ == "__main__":
						main()




