coconut-develop 3.1.2.post0.dev8__tar.gz → 3.1.2.post0.dev9__tar.gz

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.
Files changed (91) hide show
  1. coconut_develop-3.1.2.post0.dev9/.claude/settings.local.json +10 -0
  2. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/CLAUDE.md +7 -3
  3. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/PKG-INFO +1 -1
  4. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/compiler/grammar.py +12 -7
  5. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/root.py +1 -1
  6. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/agnostic/primary_2.coco +2 -0
  7. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/extras.coco +2 -0
  8. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut_develop.egg-info/SOURCES.txt +1 -0
  9. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/CONTRIBUTING.md +0 -0
  10. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/DOCS.md +0 -0
  11. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/FAQ.md +0 -0
  12. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/HELP.md +0 -0
  13. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/LICENSE.txt +0 -0
  14. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/MANIFEST.in +0 -0
  15. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/README.rst +0 -0
  16. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/__coconut__/__init__.py +0 -0
  17. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/__coconut__/__init__.pyi +0 -0
  18. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/__coconut__/py.typed +0 -0
  19. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/_coconut/__init__.py +0 -0
  20. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/_coconut/__init__.pyi +0 -0
  21. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/_coconut/py.typed +0 -0
  22. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/__coconut__.py +0 -0
  23. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/__coconut__.pyi +0 -0
  24. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/__init__.py +0 -0
  25. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/__init__.pyi +0 -0
  26. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/__main__.py +0 -0
  27. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/_pyparsing.py +0 -0
  28. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/api.py +0 -0
  29. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/api.pyi +0 -0
  30. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/command/__init__.py +0 -0
  31. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/command/__init__.pyi +0 -0
  32. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/command/cli.py +0 -0
  33. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/command/command.py +0 -0
  34. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/command/command.pyi +0 -0
  35. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/command/mypy.py +0 -0
  36. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/command/resources/zcoconut.pth +0 -0
  37. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/command/util.py +0 -0
  38. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/command/watch.py +0 -0
  39. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/compiler/__init__.py +0 -0
  40. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/compiler/compiler.py +0 -0
  41. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/compiler/header.py +0 -0
  42. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/compiler/matching.py +0 -0
  43. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/compiler/templates/header.py_template +0 -0
  44. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/compiler/util.py +0 -0
  45. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/constants.py +0 -0
  46. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/convenience.py +0 -0
  47. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/convenience.pyi +0 -0
  48. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/exceptions.py +0 -0
  49. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/highlighter.py +0 -0
  50. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/icoconut/__init__.py +0 -0
  51. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/icoconut/__main__.py +0 -0
  52. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/icoconut/coconut/kernel.json +0 -0
  53. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/icoconut/coconut_py/kernel.json +0 -0
  54. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/icoconut/coconut_py2/kernel.json +0 -0
  55. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/icoconut/coconut_py3/kernel.json +0 -0
  56. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/icoconut/embed.py +0 -0
  57. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/icoconut/root.py +0 -0
  58. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/integrations.py +0 -0
  59. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/main.py +0 -0
  60. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/py.typed +0 -0
  61. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/requirements.py +0 -0
  62. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/terminal.py +0 -0
  63. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/__init__.py +0 -0
  64. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/__main__.py +0 -0
  65. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/constants_test.py +0 -0
  66. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/main_test.py +0 -0
  67. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/agnostic/__init__.coco +0 -0
  68. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/agnostic/__main__.coco +0 -0
  69. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/agnostic/main.coco +0 -0
  70. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/agnostic/primary_1.coco +0 -0
  71. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/agnostic/specific.coco +0 -0
  72. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/agnostic/suite.coco +0 -0
  73. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/agnostic/tutorial.coco +0 -0
  74. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/agnostic/util.coco +0 -0
  75. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/non_strict/non_strict_test.coco +0 -0
  76. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/target_2/py2_test.coco +0 -0
  77. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/target_3/py3_test.coco +0 -0
  78. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/target_311/py311_test.coco +0 -0
  79. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/target_35/py35_test.coco +0 -0
  80. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/target_36/py36_test.coco +0 -0
  81. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/target_38/py38_test.coco +0 -0
  82. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/cocotest/target_sys/target_sys_test.coco +0 -0
  83. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/importable.coco +0 -0
  84. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/runnable.coco +0 -0
  85. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/tests/src/runner.coco +0 -0
  86. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/coconut/util.py +0 -0
  87. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/conf.py +0 -0
  88. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/pyproject.toml +0 -0
  89. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/setup.cfg +0 -0
  90. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/setup.py +0 -0
  91. {coconut_develop-3.1.2.post0.dev8 → coconut_develop-3.1.2.post0.dev9}/xontrib/coconut.py +0 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(cat:*)",
5
+ "Bash(make test-tests:*)",
6
+ "Bash(python -m coconut:*)",
7
+ "Bash(make test:*)"
8
+ ]
9
+ }
10
+ }
@@ -3,7 +3,6 @@
3
3
  This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
4
 
5
5
  ## Project Overview
6
-
7
6
  Coconut is a functional programming language that compiles to Python. It adds features like pattern matching, algebraic data types, partial application, pipeline operators, and lazy evaluation on top of Python syntax. The compiler performs one-pass compilation using PyParsing.
8
7
 
9
8
  ## Common Commands
@@ -14,12 +13,18 @@ make dev # Install development environment with all dependencies and pr
14
13
  ```
15
14
 
16
15
  ### Testing
16
+
17
+ Tests can take a long time, especially when recompiling everything, so make sure to run them with a long timeout.
18
+
17
19
  ```bash
18
20
  make test # Recompile all test files and run them (should be used whenever testing any changes to the compiler itself)
19
21
  make test-tests # Just recompile changed test files and run them (much faster, but should only be used when the change being tested is just a change to the tests themselves)
20
22
  ```
21
23
 
22
- Tests can take a long time, especially when recompiling everything, so make sure to run them with a long timeout.
24
+ ### Running Coconut Code Directly
25
+ ```bash
26
+ python -m coconut -c "your code here" # Compile and execute Coconut code passed as a string
27
+ ```
23
28
 
24
29
  ## Architecture
25
30
 
@@ -68,6 +73,5 @@ To add tests: write Coconut code with `assert` statements in the appropriate `.c
68
73
  - **Author attribution**: Add yourself to "Authors:" in module docstrings when modifying files
69
74
 
70
75
  ## Branches
71
-
72
76
  - `master` - Stable releases
73
77
  - `develop` - Active development (default branch for contributions)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coconut-develop
3
- Version: 3.1.2.post0.dev8
3
+ Version: 3.1.2.post0.dev9
4
4
  Summary: Simple, elegant, Pythonic functional programming.
5
5
  Home-page: http://coconut-lang.org
6
6
  Author: Evan Hubinger
@@ -807,7 +807,7 @@ class Grammar(object):
807
807
  dubbackslash = Literal("\\\\")
808
808
  backslash = disambiguate_literal("\\", ["\\\\"])
809
809
  dubquestion = Literal("??")
810
- questionmark = disambiguate_literal("?", ["??"])
810
+ questionmark = disambiguate_literal("?", ["??", "?\u21a6", "?*"])
811
811
  bang = disambiguate_literal("!", ["!="])
812
812
 
813
813
  kwds = keydefaultdict(partial(base_keyword, explicit_prefix=colon))
@@ -1311,13 +1311,18 @@ class Grammar(object):
1311
1311
 
1312
1312
  list_expr = Forward()
1313
1313
  list_expr_ref = testlist_star_namedexpr_tokens
1314
+ array_literal_item = (
1315
+ attach(comprehension_expr, add_bracks_handle)
1316
+ | namedexpr_test + ~comma
1317
+ | list_expr
1318
+ )
1319
+ # require at least one multisemicolon for array_literal to match
1320
+ array_literal_contents = (
1321
+ ZeroOrMore(array_literal_item)
1322
+ + OneOrMore(multisemicolon + ZeroOrMore(array_literal_item))
1323
+ )
1314
1324
  array_literal = attach(
1315
- lbrack.suppress() + OneOrMore(
1316
- multisemicolon
1317
- | attach(comprehension_expr, add_bracks_handle)
1318
- | namedexpr_test + ~comma
1319
- | list_expr
1320
- ) + rbrack.suppress(),
1325
+ lbrack.suppress() + array_literal_contents + rbrack.suppress(),
1321
1326
  array_literal_handle,
1322
1327
  )
1323
1328
  list_item = (
@@ -26,7 +26,7 @@ import sys as _coconut_sys
26
26
  VERSION = "3.1.2"
27
27
  VERSION_NAME = None
28
28
  # False for release, int >= 1 for develop
29
- DEVELOP = 8
29
+ DEVELOP = 9
30
30
  ALPHA = False # for pre releases rather than post releases
31
31
 
32
32
  assert DEVELOP is False or DEVELOP >= 1, "DEVELOP must be False or an int >= 1"
@@ -505,6 +505,8 @@ def primary_test_2() -> bool:
505
505
  return (untyped_memoized_func(1), untyped_memoized_func(1.0))
506
506
  return x
507
507
  assert untyped_memoized_func() |> map$(type) |> tuple == (int, float)
508
+ assert -1 ?↦ abs == 1
509
+ assert None ?↦ abs is None
508
510
 
509
511
  with process_map.multiple_sequential_calls(): # type: ignore
510
512
  assert map((+), range(3), range(4)$[:-1], strict=True) |> list == [0, 2, 4] == process_map((+), range(3), range(4)$[:-1], strict=True) |> list # type: ignore
@@ -278,6 +278,8 @@ def f() =
278
278
  }"""'''), CoconutSyntaxError, err_has="parsing failed for format string expression")
279
279
  assert_raises(-> parse("if a = b: pass"), CoconutParseError, err_has="misplaced assignment")
280
280
  assert_raises(-> parse("while a == b"), CoconutParseError, err_has="misplaced newline")
281
+ # implicit coefficient followed by subscript in list should be a parse error, not internal error
282
+ assert_raises(-> parse("[(0)foo[0] for _ in [0]]"), CoconutParseError)
281
283
 
282
284
  try:
283
285
  parse("""
@@ -10,6 +10,7 @@ conf.py
10
10
  pyproject.toml
11
11
  setup.cfg
12
12
  setup.py
13
+ .claude/settings.local.json
13
14
  __coconut__/__init__.py
14
15
  __coconut__/__init__.pyi
15
16
  __coconut__/py.typed