pdd-cli 0.0.19__py3-none-any.whl → 0.0.21__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pdd-cli might be problematic. Click here for more details.

@@ -8,6 +8,8 @@
8
8
 
9
9
  % This prompt is run iteratively. Here are the current errors and past potential fix attempts, if any, from the unit test and verification program run(s): <errors>{errors}</errors>
10
10
 
11
+ % If the verfication program fails to run, the code_under_test and unit_test are unchanged from the previous iteration.
12
+
11
13
  <examples>
12
14
  <example_1>
13
15
  % Here is an example_unit_test for the example_code_under_test: <example_unit_test><include>context/fix_errors_from_unit_tests/1/test_conflicts_in_prompts.py</include></example_unit_test>
@@ -32,6 +34,7 @@
32
34
 
33
35
  % Here is the prompt that generated the example_code_under_test: <example_prompt><include>context/fix_errors_from_unit_tests/3/context_generator_python.prompt</include></example_prompt>
34
36
  </example_3>
37
+ <pdd>
35
38
 
36
39
  <example_4>
37
40
  % Here is an example_unit_test for the example_code_under_test: <example_unit_test><include>context/fix_errors_from_unit_tests/4/test_detect_change.py</include></example_unit_test>
@@ -48,15 +51,16 @@
48
51
 
49
52
  % Here is an example error/fix log showing how the issues were resolved: <example_error_fix_log><include>context/fix_errors_from_unit_tests/4/error.log</include></example_error_fix_log>
50
53
  </example_5>
54
+ </pdd>
51
55
  </examples>
52
56
 
53
57
  <instructions>
54
58
  % Follow these steps to solve these errors:
55
59
  Step 1. Compare the prompt to the code_under_test and explain differences, if any.
56
60
  Step 2. Compare the prompt to the unit_test and explain differences, if any.
57
- Step 3. For each prior attempted fix (if any), explain in a few paragraphs for each attempt why it might not have worked.
61
+ Step 3. For each prior attempted fix for the code_under_test and unit_test (if any), explain in a few paragraphs for each attempt why it might not have worked.
58
62
  Step 4. Write several paragraphs explaining the root cause of each of the errors and each of the warnings in the code_under_test and unit_test.
59
- Step 5. Explain in detail step by step how to solve each of the errors and warnings. For each error and warning, there should be several paragraphs description of the solution steps. Sometimes logging or print statements can help debug the code.
63
+ Step 5. Explain in detail step by step how to solve each of the errors and warnings. For each error and warning, there should be several paragraphs description of the solution steps. Sometimes logging or print statements can help debug the code in subsequent iterations.
60
64
  Step 6. Review the above steps and correct for any errors and warnings in the code under test or unit test.
61
- Step 7. For the code that need changes, write the corrected code_under_test and/or corrected unit_test in its/their entirety.
65
+ Step 7. For the code that need changes, write the complete instructions to correct code_under_test (surrounded by 'corrected_code_under_test' XML tags) and/or corrected unit_test (surrounded by 'corrected_unit_test' XML tags).
62
66
  </instructions>
@@ -1,8 +1,8 @@
1
- % You are an expert Software Test Engineer. Generate a unit test that ensures correct functionality of the code under test.
1
+ % You are an expert Software Test Engineer. Your goal is to generate a unit test that ensures correct functionality of the code under test.
2
2
 
3
- % Here a description of what the code is supposed to do and was the prompt that generated the code: ```{prompt_that_generated_code}```
3
+ % Here a description of what the code is supposed to do and was the prompt that generated the code: <prompt_that_generated_code>{prompt_that_generated_code}</prompt_that_generated_code>
4
4
 
5
- % Here is the code under test: ```{code}```
5
+ % Here is the code under test: <code_under_test>{code}</code_under_test>
6
6
 
7
7
  % Follow these rules:
8
8
  - The module name for the code under test will have the same name as the function name
@@ -10,4 +10,11 @@
10
10
  - Use individual test functions for each case to make it easier to identify which specific cases pass or fail.
11
11
  - Use the description of the functionality in the prompt to generate tests with useful tests with good code coverage.
12
12
  - The code might get regenerated by a LLM so focus the test on the functionality of the code, not the implementation details.
13
- <include>./context/test.prompt</include>
13
+ <include>./context/test.prompt</include>
14
+
15
+ <instructions>
16
+ 1. Carefully read the prompt that generated the code under test and determine what might be possible edge cases.
17
+ 2. For each edge case explain whether it is better to do the test using Z3 formal verification or unit tests.
18
+ 3. Develop a detailed test plan that will ensure the code under test is correct. This should involve both Z3 formal verification and unit tests.
19
+ 4. Write the unit tests and Z3 formal verification tests that are runnable as unit tests.
20
+ </instructions>
@@ -1,6 +1,7 @@
1
- % Here are some examples of splitting prompts:
2
- <examples>
3
1
  <pdd>
2
+ % Here are some examples of splitting prompts:
3
+ <examples>
4
+
4
5
  <example_1>
5
6
  <1_input_prompt><include>./context/split/1/initial_pdd_python.prompt</include></1_input_prompt>
6
7
  <1_input_code><include>./context/split/1/pdd.py</include></1_input_code>
@@ -40,7 +41,7 @@
40
41
  <5_sub_prompt><include>context/split/5/track_cost_python.prompt</include></5_sub_prompt>
41
42
  <5_modified_prompt><include>context/split/5/modified_cli_python.prompt</include></5_modified_prompt>
42
43
  </example_5>
43
- </pdd>
44
+
44
45
 
45
46
  <example_6>
46
47
  <6_input_prompt><include>context/split/6/cli_python.prompt</include></6_input_prompt>
@@ -57,8 +58,8 @@
57
58
  <7_sub_prompt><include>context/split/7/trace_main_python.prompt</include></7_sub_prompt>
58
59
  <7_modified_prompt><include>context/split/7/modified_cli_python.prompt</include></7_modified_prompt>
59
60
  </example_7>
60
-
61
61
  </examples>
62
+ </pdd>
62
63
 
63
64
  <context>
64
65
  % You are an expert LLM Prompt Engineer. Your goal is to split the input_prompt (a larger prompt) into a sub_prompt and modified_prompt (two smaller prompts) with no loss of functionality. This is to make it easier to generate and test the modules easier.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: pdd-cli
3
- Version: 0.0.19
3
+ Version: 0.0.21
4
4
  Summary: PDD (Prompt-Driven Development) Command Line Interface
5
5
  Author: Greg Tanaka
6
6
  Author-email: glt@alumni.caltech.edu
@@ -12,10 +12,11 @@ Keywords: prompt-driven development,code generation,AI,LLM,unit testing,software
12
12
  Classifier: Development Status :: 3 - Alpha
13
13
  Classifier: Intended Audience :: Developers
14
14
  Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3.11
15
16
  Classifier: Programming Language :: Python :: 3.12
16
17
  Classifier: Topic :: Software Development :: Code Generators
17
18
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
- Requires-Python: >=3.12
19
+ Requires-Python: >=3.11
19
20
  Description-Content-Type: text/x-rst
20
21
  License-File: LICENSE
21
22
  Requires-Dist: GitPython==3.1.44
@@ -39,8 +40,9 @@ Requires-Dist: rich==13.9.4
39
40
  Requires-Dist: semver==3.0.2
40
41
  Requires-Dist: setuptools==75.1.0
41
42
  Requires-Dist: python-Levenshtein
43
+ Dynamic: license-file
42
44
 
43
- .. image:: https://img.shields.io/badge/pdd--cli-v0.0.19-blue
45
+ .. image:: https://img.shields.io/badge/pdd--cli-v0.0.21-blue
44
46
  :alt: PDD-CLI Version
45
47
 
46
48
  PDD (Prompt-Driven Development) Command Line Interface
@@ -101,7 +103,7 @@ After installation, verify:
101
103
 
102
104
  pdd --version
103
105
 
104
- You'll see the current PDD version (e.g., 0.0.19).
106
+ You'll see the current PDD version (e.g., 0.0.21).
105
107
 
106
108
  Advanced Installation Tips
107
109
  --------------------------
@@ -1,12 +1,12 @@
1
1
  pdd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- pdd/auto_deps_main.py,sha256=2lZ-8WqzrPVMnzuVC-O7y1gazRLbY66fbmOdKnkYKNg,3630
2
+ pdd/auto_deps_main.py,sha256=NVLqL5FHxe2eorViXTuh8z2zH9Sb-b6MNN9aZ1hqevY,3552
3
3
  pdd/auto_include.py,sha256=aCa2QXDlOdKbh4vS3uDjWptkHB_Qv3QBNCbZe6mGWoo,6074
4
4
  pdd/auto_update.py,sha256=Pfav1hrqQIDjZIPuIvryBeM7k-Rc72feVUTJZPtigaU,2889
5
5
  pdd/bug_main.py,sha256=myKU9--QWdkV4Wf3mD2PoLPJFNgRjwf4z8s7TC28G_s,3720
6
6
  pdd/bug_to_unit_test.py,sha256=dsJNm6qAwx-m7RvFF5RquFJRzxzZGCWT4IKYnzVCUws,5569
7
7
  pdd/change.py,sha256=iqjWS5DrQ73yMkuUQlwIRIFlofmKdaK6t6-v3zHKL-4,4985
8
8
  pdd/change_main.py,sha256=yL_i1Ws5vt4vAkWiC826csNi2cHP6wKbwe_PfMqbbPY,11407
9
- pdd/cli.py,sha256=ss1X-yftpOmlA8Hqg9BSY3q-L5cEG6YDZlmMBdGCOlo,16593
9
+ pdd/cli.py,sha256=qg31tLRr344mX0UK80Ecz80iV6y6qt42cF--mTJcojE,16593
10
10
  pdd/cmd_test_main.py,sha256=aSCxRnSurg15AvPcJDAPp9xy8p_qqnjU1oV14Hi2R54,5301
11
11
  pdd/code_generator.py,sha256=n5akrX7VPe71X4RsD6kKqAVvzBLMlciJI4RtJA1PcgA,4375
12
12
  pdd/code_generator_main.py,sha256=G2eRBPXc1cGszkk0PbIPmJZHPaf_dw5d2yZbsvQZA3c,4793
@@ -17,15 +17,16 @@ pdd/construct_paths.py,sha256=8hxkTI_AF5XNpGR4JqCsF4olDBtL8NslXdOZGQt78WM,10039
17
17
  pdd/context_generator.py,sha256=xLquyM6h40Xqg_wcdowqobrLFyZpIvGrOCJD-OBuoy4,5798
18
18
  pdd/context_generator_main.py,sha256=TtsY3jHictdEjmB4cHyNwXmZW_LfHJp3KW3UXyzR2cU,2735
19
19
  pdd/continue_generation.py,sha256=hAVySc6oEsM_Zpj5AWBKEZqMWgoLlQBHcFtkAZ9sZ0E,5192
20
- pdd/crash_main.py,sha256=ZvOM-450KiTicSpqLIeJf52x6alx8t0Fq3C11LdQiZU,5464
20
+ pdd/crash_main.py,sha256=JFWEmFirHOAyUkHQ-IQJm6FJvSSARl1fPsGEW2urXg0,5198
21
21
  pdd/detect_change.py,sha256=ZtgGjGPrD0po-37TEzSbnzFyor7spXHjnT7G6NJ4aCI,5261
22
22
  pdd/detect_change_main.py,sha256=1Z4ymhjJaVr2aliGyqkqeqSmQ7QMgcl23p0wdsmBas0,3653
23
+ pdd/edit_file.py,sha256=-FhZ-KGKYkPbnt0zFiDnnosPLh3bbKmften0Ios4-90,35017
23
24
  pdd/find_section.py,sha256=lz_FPY4KDCRAGlL1pWVZiutUNv7E4KsDFK-ymDWA_Ec,962
24
25
  pdd/fix_code_loop.py,sha256=L0yxq2yAziPIyFGb8lIP2mvufu8a_gtc5nnN2LuMuKs,8596
25
26
  pdd/fix_code_module_errors.py,sha256=M6AnlR2jF5LI-nNg6gIO5LvSkxiaLIUGyTvfnUfe1cU,4625
26
- pdd/fix_error_loop.py,sha256=1_pW4MGy8FhLuq4RiGUBligev5IJg8Bs_-r2GaZN5Y8,17085
27
- pdd/fix_errors_from_unit_tests.py,sha256=8qCEyHZ6lUSBtV9vhQyhgAxDuhngmOy7vVy2HObckd0,8934
28
- pdd/fix_main.py,sha256=02OIViH12BcsykpDp4Osxw2ndEeThnNakMFkzdpYr48,5333
27
+ pdd/fix_error_loop.py,sha256=BBUROFjV6Hvp141ruDqkf-VeQti3Yx_8hxdTKLJMWcY,23983
28
+ pdd/fix_errors_from_unit_tests.py,sha256=vFQdEetg2VpfrQhXPa441ZJdmmBR3Z743545_lNWVA4,15978
29
+ pdd/fix_main.py,sha256=clQtPjZG4KztVGhqaAfG8m-HqfuK4OtLAwKFe2E66l4,12166
29
30
  pdd/generate_output_paths.py,sha256=zz42GTx9eGyWIYSl3jcWvtJRGnieC3eoPM6DIVcWz2k,7219
30
31
  pdd/generate_test.py,sha256=BwmRnjaPDTlxUqJZ37N3bxTBHlLPCZIR5i1bwrNNv54,4791
31
32
  pdd/get_comment.py,sha256=yuRtk68-SDkMaGzOSyIFdldRoymJBRSKjOYkr0narVc,2627
@@ -33,17 +34,18 @@ pdd/get_extension.py,sha256=ZSsbi7n-tFw-7RQX7c3pV1qWsRt72qS_3AlAYjV53jA,2393
33
34
  pdd/get_jwt_token.py,sha256=BGxqMh7qf2mG-TFw7JlV941O9XtrW22L_dRoS_UZNjM,11560
34
35
  pdd/get_language.py,sha256=yxyQqVEb5H3ep3Hc6XgAl3vMLTHD5OIs8ZSekB493GA,1438
35
36
  pdd/git_update.py,sha256=Ya7eI7YFtGIpT7FdziFJfnFkiZlj8I9Lh98lqtXfClc,2855
36
- pdd/increase_tests.py,sha256=ZsBWkUBtZIsFfqTw3gOJLaYZMhNNRIKd-vu8Tv_AZG0,3243
37
- pdd/insert_includes.py,sha256=bocHBAzs4MAudtIw-JjyHO0kYajwlOLS9jBzV33_LRU,5224
37
+ pdd/increase_tests.py,sha256=axOvM_F7pLRevWJsYe2W7d24OA7P-FaWShE4cotktNo,3424
38
+ pdd/insert_includes.py,sha256=UASoq_46UNL6l7VGB7DW2jb4kcWlP6Hbj2EWuh7210Q,5310
38
39
  pdd/install_completion.py,sha256=joTIKRkx0e6kRrXj9NXtMODnIG-G0Twt7wBmj8TirmE,5102
39
40
  pdd/llm_invoke.py,sha256=Yhpoom9Ptgl_hjfWOFA_AhNQE2VFy07J9qWiEuHTP4Y,17343
40
41
  pdd/load_prompt_template.py,sha256=4NH8_t5eon_vcyTznqtemJ_yAPkTJm_hSdTRgzj3qEQ,1907
42
+ pdd/mcp_config.json,sha256=D3ctWHlShvltbtH37zbYb6smVE0V80_lGjDKDIqsSBE,124
41
43
  pdd/pdd_completion.fish,sha256=rs-43fa3kcDBN1uy4oxiofLAWmaqW0U2j5Mu4wCHh5M,6121
42
44
  pdd/pdd_completion.sh,sha256=qurWrEksqptjryBZszxHv6i0MqgnIqJenMBDrzMgI98,4535
43
45
  pdd/pdd_completion.zsh,sha256=gav5kYLizpMLe9H_MK34sisgFx6LFDgfBW49nsg-5P0,12304
44
46
  pdd/postprocess.py,sha256=7Dt4C7hZZbqCpYK0LG2Ui_vIUYw9UTN3w5Wgd_JZYBs,4021
45
47
  pdd/postprocess_0.py,sha256=OW17GyCFLYErCyWh2tL4syuho3q2yFf2wyekQ4BLdPM,2168
46
- pdd/preprocess.py,sha256=7_mkREBFlWjIUIyZsYBlnCvIGtpVgPeToHUpaq_ZHC0,8177
48
+ pdd/preprocess.py,sha256=24Nwk-3H_X0EJyX52auf4JjLR9eDrAZ7YScvrgLEPKw,9520
47
49
  pdd/preprocess_main.py,sha256=dAgFGmjuJB1taZl31c1sY2jMGtQgjnWLbpeB7EFtojY,2977
48
50
  pdd/process_csv_change.py,sha256=10XTzVFQ0rE4lPSF93yhIW7VJmxmfe-hk1B7ui_qxJI,8415
49
51
  pdd/pytest_output.py,sha256=kmKiMHaQItrDVi_hTCtM5pfCgBuyZVEVRbxdchpS5CY,4796
@@ -58,7 +60,7 @@ pdd/update_main.py,sha256=5a4nsOOaAXULdk0BS9pj4blZ_QHBFeET37uaAqoJI2g,3912
58
60
  pdd/update_prompt.py,sha256=OdPRIAMu7OBx7E4SOU95hWgdtBY4oO8XOe1dvPChMlU,4351
59
61
  pdd/xml_tagger.py,sha256=NcyWacoXarRi6_16pchMhh1M7V-Gfz1cQImO_If2ia4,4241
60
62
  pdd/data/language_format.csv,sha256=xUTmFHXSBVBRfPV-NKG3oWo5_ped5ukP-ekFcIlVzJk,877
61
- pdd/data/llm_model.csv,sha256=wcdbyH82gCWf2yR5NHDUsU9C23sylOEqZ1bjJYStERI,1703
63
+ pdd/data/llm_model.csv,sha256=tOHyoa_Cl2GaRI-NjbeXgH116SsMZ8_IvoXs60CPGf0,1712
62
64
  pdd/prompts/auto_include_LLM.prompt,sha256=0t-Jmm5o6vVTmqsISTUiewqPT8bB389UZnJoHZvgtu4,13967
63
65
  pdd/prompts/bug_to_unit_test_LLM.prompt,sha256=--ysObDv9WzOEyJMuaKEdDHkRrR_1j0dmOtlAFr4YRg,1205
64
66
  pdd/prompts/change_LLM.prompt,sha256=W3sE6XZ2fb35XdqOykK1hDPtqkHSv9MZGD3sT8B8WjY,2083
@@ -78,11 +80,11 @@ pdd/prompts/extract_promptline_LLM.prompt,sha256=owIBRaF2bWwg3S64uyMKzOFMdvvmI_E
78
80
  pdd/prompts/extract_unit_code_fix_LLM.prompt,sha256=1gWS0-Qs6vMynNNqp1Xc-2hcsyH_NTLZPB1-lvyprm8,14143
79
81
  pdd/prompts/extract_xml_LLM.prompt,sha256=eRcHaL-khShpb7C1_b7wmBJHfo2Kh1Wvjo_aOcWZovU,561
80
82
  pdd/prompts/fix_code_module_errors_LLM.prompt,sha256=m-oqZ3cOkWbqke_l9z0Nmunf7NsnR9JWTNVVlfcteAY,1405
81
- pdd/prompts/fix_errors_from_unit_tests_LLM.prompt,sha256=xkQPMu2BumUmb_YFf7kPKpVqY4lI5ajlZsEKUaRZh-E,4779
82
- pdd/prompts/generate_test_LLM.prompt,sha256=y9SZ40zrRDOdp9DJnqq5_IMpsTORhAOphlo3QZlq7Ac,895
83
+ pdd/prompts/fix_errors_from_unit_tests_LLM.prompt,sha256=m42HdbfuHOOgDUFUcx6SMtzIvHAHdRZMNNPvQayR21c,5077
84
+ pdd/prompts/generate_test_LLM.prompt,sha256=3SuYPVOCl41ZliCq1DTg38OcQh7r3RrgIZZIGjxKaiI,1497
83
85
  pdd/prompts/increase_tests_LLM.prompt,sha256=rekFzLRuZy99KifEKNlmPYoQdl8wa04112mtCdIY6S8,955
84
86
  pdd/prompts/insert_includes_LLM.prompt,sha256=g-p2gXKENsqvfK5Q9FYbqFsIJ5CP7rbxmd4rROA-W80,1453
85
- pdd/prompts/split_LLM.prompt,sha256=vhDLSqrfftvbDRagb0IfQpotnC-2z-xwKxGRsppkpDM,6135
87
+ pdd/prompts/split_LLM.prompt,sha256=T6KH6JWaMxRE1aA-IaVNlb2e85NfkYKRxqgDZZb2aBQ,6140
86
88
  pdd/prompts/summarize_file_LLM.prompt,sha256=qb9K61XMVFy7hgGITglI37Xg7yLPAGQBm0rUBEqRnEc,387
87
89
  pdd/prompts/trace_LLM.prompt,sha256=XTPoQQpKrF7BtWkCJPIrinn448VyBGXJieibMsMP-y0,1231
88
90
  pdd/prompts/trim_results_LLM.prompt,sha256=w4aL0S7v7fPSi3L9XeQR3mUOgNv3hpTDqi4rOtu7L7I,4033
@@ -90,9 +92,9 @@ pdd/prompts/trim_results_start_LLM.prompt,sha256=WwFlOHha4wzMLtRHDMI6GtcNdl2toE8
90
92
  pdd/prompts/unfinished_prompt_LLM.prompt,sha256=-JgBpiPTQZdWOAwOG1XpfpD9waynFTAT3Jo84eQ4bTw,1543
91
93
  pdd/prompts/update_prompt_LLM.prompt,sha256=_lGaxeVP4oF8yGqiN6yj6UE0j79lxfGdjsYr5w5KSYk,1261
92
94
  pdd/prompts/xml_convertor_LLM.prompt,sha256=YGRGXJeg6EhM9690f-SKqQrKqSJjLFD51UrPOlO0Frg,2786
93
- pdd_cli-0.0.19.dist-info/LICENSE,sha256=-1bjYH-CEjGEQ8VixtnRYuu37kN6F9NxmZSDkBuUQ9o,1062
94
- pdd_cli-0.0.19.dist-info/METADATA,sha256=wVt-JMByU3bNoQ-k2wXPrndPc76_k8a7qtPpI7Pj3Ak,6809
95
- pdd_cli-0.0.19.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
96
- pdd_cli-0.0.19.dist-info/entry_points.txt,sha256=Kr8HtNVb8uHZtQJNH4DnF8j7WNgWQbb7_Pw5hECSR-I,36
97
- pdd_cli-0.0.19.dist-info/top_level.txt,sha256=xjnhIACeMcMeDfVNREgQZl4EbTni2T11QkL5r7E-sbE,4
98
- pdd_cli-0.0.19.dist-info/RECORD,,
95
+ pdd_cli-0.0.21.dist-info/licenses/LICENSE,sha256=-1bjYH-CEjGEQ8VixtnRYuu37kN6F9NxmZSDkBuUQ9o,1062
96
+ pdd_cli-0.0.21.dist-info/METADATA,sha256=n7ecGGMFKk9Indhz_gSLKV8J_dJadU4cZCvexxJ0tYw,6882
97
+ pdd_cli-0.0.21.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
98
+ pdd_cli-0.0.21.dist-info/entry_points.txt,sha256=Kr8HtNVb8uHZtQJNH4DnF8j7WNgWQbb7_Pw5hECSR-I,36
99
+ pdd_cli-0.0.21.dist-info/top_level.txt,sha256=xjnhIACeMcMeDfVNREgQZl4EbTni2T11QkL5r7E-sbE,4
100
+ pdd_cli-0.0.21.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5