edumatcher 0.1.5__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 (55) hide show
  1. edumatcher-0.1.5/PKG-INFO +146 -0
  2. edumatcher-0.1.5/README.md +124 -0
  3. edumatcher-0.1.5/pyproject.toml +159 -0
  4. edumatcher-0.1.5/src/edumatcher/__init__.py +0 -0
  5. edumatcher-0.1.5/src/edumatcher/ai_trader/__init__.py +5 -0
  6. edumatcher-0.1.5/src/edumatcher/ai_trader/main.py +475 -0
  7. edumatcher-0.1.5/src/edumatcher/ai_trader/personality.py +91 -0
  8. edumatcher-0.1.5/src/edumatcher/ai_trader/swarm.py +202 -0
  9. edumatcher-0.1.5/src/edumatcher/audit/__init__.py +0 -0
  10. edumatcher-0.1.5/src/edumatcher/audit/main.py +126 -0
  11. edumatcher-0.1.5/src/edumatcher/board/__init__.py +0 -0
  12. edumatcher-0.1.5/src/edumatcher/board/main.py +261 -0
  13. edumatcher-0.1.5/src/edumatcher/clearing/__init__.py +0 -0
  14. edumatcher-0.1.5/src/edumatcher/clearing/main.py +262 -0
  15. edumatcher-0.1.5/src/edumatcher/commands/__init__.py +16 -0
  16. edumatcher-0.1.5/src/edumatcher/commands/cli.py +261 -0
  17. edumatcher-0.1.5/src/edumatcher/commands/client.py +450 -0
  18. edumatcher-0.1.5/src/edumatcher/commands/console.py +757 -0
  19. edumatcher-0.1.5/src/edumatcher/config.py +37 -0
  20. edumatcher-0.1.5/src/edumatcher/engine/__init__.py +0 -0
  21. edumatcher-0.1.5/src/edumatcher/engine/auction.py +185 -0
  22. edumatcher-0.1.5/src/edumatcher/engine/circuit_breaker.py +119 -0
  23. edumatcher-0.1.5/src/edumatcher/engine/collar.py +139 -0
  24. edumatcher-0.1.5/src/edumatcher/engine/config_loader.py +896 -0
  25. edumatcher-0.1.5/src/edumatcher/engine/drop_copy.py +194 -0
  26. edumatcher-0.1.5/src/edumatcher/engine/main.py +2898 -0
  27. edumatcher-0.1.5/src/edumatcher/engine/order_book.py +1134 -0
  28. edumatcher-0.1.5/src/edumatcher/engine/persistence.py +113 -0
  29. edumatcher-0.1.5/src/edumatcher/gateway/__init__.py +0 -0
  30. edumatcher-0.1.5/src/edumatcher/gateway/main.py +1221 -0
  31. edumatcher-0.1.5/src/edumatcher/messaging/__init__.py +0 -0
  32. edumatcher-0.1.5/src/edumatcher/messaging/bus.py +67 -0
  33. edumatcher-0.1.5/src/edumatcher/models/__init__.py +0 -0
  34. edumatcher-0.1.5/src/edumatcher/models/clock.py +35 -0
  35. edumatcher-0.1.5/src/edumatcher/models/combo.py +172 -0
  36. edumatcher-0.1.5/src/edumatcher/models/instrument.py +25 -0
  37. edumatcher-0.1.5/src/edumatcher/models/message.py +726 -0
  38. edumatcher-0.1.5/src/edumatcher/models/mm_obligation.py +47 -0
  39. edumatcher-0.1.5/src/edumatcher/models/order.py +240 -0
  40. edumatcher-0.1.5/src/edumatcher/models/participant.py +26 -0
  41. edumatcher-0.1.5/src/edumatcher/models/price.py +98 -0
  42. edumatcher-0.1.5/src/edumatcher/models/quote.py +110 -0
  43. edumatcher-0.1.5/src/edumatcher/models/session.py +51 -0
  44. edumatcher-0.1.5/src/edumatcher/models/trade.py +111 -0
  45. edumatcher-0.1.5/src/edumatcher/orders/__init__.py +0 -0
  46. edumatcher-0.1.5/src/edumatcher/orders/main.py +200 -0
  47. edumatcher-0.1.5/src/edumatcher/py.typed +0 -0
  48. edumatcher-0.1.5/src/edumatcher/scheduler/__init__.py +0 -0
  49. edumatcher-0.1.5/src/edumatcher/scheduler/main.py +194 -0
  50. edumatcher-0.1.5/src/edumatcher/stats/__init__.py +0 -0
  51. edumatcher-0.1.5/src/edumatcher/stats/main.py +473 -0
  52. edumatcher-0.1.5/src/edumatcher/ticker/__init__.py +0 -0
  53. edumatcher-0.1.5/src/edumatcher/ticker/main.py +335 -0
  54. edumatcher-0.1.5/src/edumatcher/viewer/__init__.py +0 -0
  55. edumatcher-0.1.5/src/edumatcher/viewer/main.py +160 -0
@@ -0,0 +1,146 @@
1
+ Metadata-Version: 2.4
2
+ Name: edumatcher
3
+ Version: 0.1.5
4
+ Summary: Educational multi-process trading system with order matching
5
+ License: MIT
6
+ Keywords: finance,exchange,matching-engine,trading,education,learning,order-matching,market-microstructure
7
+ Author: Johan Persson
8
+ Author-email: johan162@gmail.com
9
+ Requires-Python: >=3.13,<4.0
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Python :: 3.14
14
+ Requires-Dist: orjson (>=3.11.9,<4.0.0)
15
+ Requires-Dist: prompt_toolkit (>=3.0,<4.0)
16
+ Requires-Dist: pyyaml (>=6.0.3,<7.0.0)
17
+ Requires-Dist: pyzmq (>=27.1.0,<28.0.0)
18
+ Requires-Dist: rich (>=15.0.0,<16.0.0)
19
+ Project-URL: Repository, https://github.com/johan162/EduMatcher
20
+ Description-Content-Type: text/markdown
21
+
22
+ # EduMatcher
23
+
24
+ **Learn how real trading systems work. Build it from first principles.**
25
+
26
+ | Category | Link |
27
+ | ----------------- | ------------ |
28
+ | **Package** | [![PyPI version](https://img.shields.io/pypi/v/edumatcher.svg)](https://pypi.org/project/edumatcher/) [![Python 3.13+](https://img.shields.io/badge/python-3.13+-blue.svg)](https://www.python.org/downloads/) |
29
+ | **Documentation** | [![Documentation](https://img.shields.io/badge/docs-mkdocs-blue)](https://johan162.github.io/EduMatcher/) |
30
+ | **License** | [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) |
31
+ | **Release** | [![GitHub release](https://img.shields.io/github/v/release/johan162/edumatcher?include_prereleases)](https://github.com/johan162/edumatcher/releases) |
32
+ | **CI/CD** | [![Coverage](https://img.shields.io/badge/coverage-84%25-brightgreen.svg)](coverage.svg) |
33
+ | **Code Quality** | [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Checked with mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/) [![Linting: flake8](https://img.shields.io/badge/linting-flake8-yellowgreen)](https://flake8.pycqa.org/) |
34
+ | Repo URL | [![GitHub](https://img.shields.io/badge/GitHub-100000?style=flat-square&logo=github&logoColor=white)](https://github.com/johan162/edumatcher) |
35
+
36
+ EduMatcher is an educational trading system that teaches market microstructure,
37
+ matching logic, and exchange architecture through runnable code.
38
+
39
+ Unlike toy examples, it is designed to be both understandable and fast.
40
+
41
+ ## Why EduMatcher?
42
+
43
+ - Real exchange mechanics: order books, auctions, clearing, and risk controls
44
+ - Multi-process architecture: gateway, engine, audit, clearing, stats, and tooling
45
+ - Performance-aware implementation: ~60,000 orders/second with microsecond latency
46
+ - Practical protocol design: ALF (ALmost Fix) command language for gateway order entry
47
+ - Strong engineering discipline: type hints, linting, and high test coverage
48
+
49
+ ## Key Features
50
+
51
+ - Complete lifecycle: order entry, matching, clearing, and audit trail
52
+ - Rich order support: MARKET, LIMIT, STOP, STOP_LIMIT, IOC/FOK, ICEBERG, combo, OCO
53
+ - Market mechanisms: opening/closing auctions and circuit breakers
54
+ - Config-driven behavior via `engine_config.yaml` which acts as reference data for EduMatcher
55
+ - Message-based process boundaries with strong observability
56
+ - Implement real risk controls such as prioce-collar, kill-switch, circuit-breaker, and mass-cancel
57
+
58
+ ## Key Limitations
59
+
60
+ - No spread-order books
61
+ - No implied (synthetic) orders
62
+ - No primary-secondary site failover
63
+ - No load balancing
64
+ - Limited replay for participants that lose the connection
65
+ - No index calculations
66
+
67
+ ## Performance
68
+
69
+ EduMatcher does not aim to match venues like NYSE or LSE, but it is still
70
+ fast for a pure Python educational project.
71
+
72
+
73
+ ### Latency (engine-only, n=1,000 each)
74
+
75
+ | Order type | min (µs) | median (µs) | P80 (µs) | P90 (µs) | max (µs) |
76
+ | ---------- | -------: | ----------: | -------: | -------: | -------: |
77
+ | Limit | 8.1 | 8.5 | 9.6 | 10.0 | 18 |
78
+ | Market | 8.1 | 8.5 | 8.8 | 9.3 | 45 |
79
+
80
+ ### Throughput
81
+
82
+ | Metric | Value |
83
+ | ------------- | --------------------------------------------------- |
84
+ | **Max TPS** | ~60,000 orders/second |
85
+ | **Order mix** | 20% Market, 30% aggressive Limit, 50% passive Limit |
86
+
87
+ *Performance note:* price-collar and circuit-breaker checks run in the hot path
88
+ for every match. They are required for realistic risk control and add measurable cost.
89
+
90
+
91
+
92
+ ## Explore the Code
93
+
94
+ Start with these key areas:
95
+
96
+ - **[src/edumatcher/engine/](src/edumatcher/engine/)** — Core matching logic and order book
97
+ - **[src/edumatcher/gateway/](src/edumatcher/gateway/)** — Message handling and order validation
98
+ - **[src/edumatcher/clearing/](src/edumatcher/clearing/)** — Trade settlement and P&L calculation
99
+
100
+ ## Documentation
101
+
102
+ Full docs: [EduMatcher Documentation](https://johan162.github.io/edumatcher/)
103
+
104
+ Additional references:
105
+
106
+ - [How an Exchange Works](https://johan162.github.io/how-exchange-works/). This is a generic
107
+ document meant for SW developers with no previous financial experience. Reading this document
108
+ will give the necessary background both in finance and the core workings of an exchange.
109
+ - [ALF Protocol Appendix](https://johan162.github.io/user-guide/20-app-alf-protocol.md). `ALF`
110
+ is the Gatewauy human protocol used to send in orders vi the `ALF` gateway. It is a drastically
111
+ simplified `FIX` inspired protocol (`ALF` = `ALmost Fix`)
112
+ - [Glossary](https://johan162.github.io/glossary/). An extensiv glossary with all commonly used
113
+ financial terms used in these documents.
114
+
115
+
116
+ ## Who It's For
117
+
118
+ - Computer science students learning systems design and concurrency
119
+ - Finance students learning market microstructure and trading mechanics
120
+ - Developers building exchange technology or trading systems
121
+ - Anyone curious about how modern markets actually work
122
+
123
+
124
+ ## Contributing
125
+
126
+ This is an educational project. If you find bugs, improve the documentation, or make other enhancements PRs are welcome!
127
+
128
+
129
+ ## Citation
130
+
131
+ If you use this tool in teaching or courses, please cite:
132
+
133
+ ```text
134
+ @software{edumatcher,
135
+ title = {EduMatcher},
136
+ author = {Johan Persson},
137
+ year = {2026},
138
+ url = {https://github.com/johan162/edumatcher},
139
+ version = {0.1.5}
140
+ }
141
+ ```
142
+
143
+ ## License
144
+
145
+ MIT License - see [LICENSE](LICENSE).
146
+
@@ -0,0 +1,124 @@
1
+ # EduMatcher
2
+
3
+ **Learn how real trading systems work. Build it from first principles.**
4
+
5
+ | Category | Link |
6
+ | ----------------- | ------------ |
7
+ | **Package** | [![PyPI version](https://img.shields.io/pypi/v/edumatcher.svg)](https://pypi.org/project/edumatcher/) [![Python 3.13+](https://img.shields.io/badge/python-3.13+-blue.svg)](https://www.python.org/downloads/) |
8
+ | **Documentation** | [![Documentation](https://img.shields.io/badge/docs-mkdocs-blue)](https://johan162.github.io/EduMatcher/) |
9
+ | **License** | [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) |
10
+ | **Release** | [![GitHub release](https://img.shields.io/github/v/release/johan162/edumatcher?include_prereleases)](https://github.com/johan162/edumatcher/releases) |
11
+ | **CI/CD** | [![Coverage](https://img.shields.io/badge/coverage-84%25-brightgreen.svg)](coverage.svg) |
12
+ | **Code Quality** | [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Checked with mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/) [![Linting: flake8](https://img.shields.io/badge/linting-flake8-yellowgreen)](https://flake8.pycqa.org/) |
13
+ | Repo URL | [![GitHub](https://img.shields.io/badge/GitHub-100000?style=flat-square&logo=github&logoColor=white)](https://github.com/johan162/edumatcher) |
14
+
15
+ EduMatcher is an educational trading system that teaches market microstructure,
16
+ matching logic, and exchange architecture through runnable code.
17
+
18
+ Unlike toy examples, it is designed to be both understandable and fast.
19
+
20
+ ## Why EduMatcher?
21
+
22
+ - Real exchange mechanics: order books, auctions, clearing, and risk controls
23
+ - Multi-process architecture: gateway, engine, audit, clearing, stats, and tooling
24
+ - Performance-aware implementation: ~60,000 orders/second with microsecond latency
25
+ - Practical protocol design: ALF (ALmost Fix) command language for gateway order entry
26
+ - Strong engineering discipline: type hints, linting, and high test coverage
27
+
28
+ ## Key Features
29
+
30
+ - Complete lifecycle: order entry, matching, clearing, and audit trail
31
+ - Rich order support: MARKET, LIMIT, STOP, STOP_LIMIT, IOC/FOK, ICEBERG, combo, OCO
32
+ - Market mechanisms: opening/closing auctions and circuit breakers
33
+ - Config-driven behavior via `engine_config.yaml` which acts as reference data for EduMatcher
34
+ - Message-based process boundaries with strong observability
35
+ - Implement real risk controls such as prioce-collar, kill-switch, circuit-breaker, and mass-cancel
36
+
37
+ ## Key Limitations
38
+
39
+ - No spread-order books
40
+ - No implied (synthetic) orders
41
+ - No primary-secondary site failover
42
+ - No load balancing
43
+ - Limited replay for participants that lose the connection
44
+ - No index calculations
45
+
46
+ ## Performance
47
+
48
+ EduMatcher does not aim to match venues like NYSE or LSE, but it is still
49
+ fast for a pure Python educational project.
50
+
51
+
52
+ ### Latency (engine-only, n=1,000 each)
53
+
54
+ | Order type | min (µs) | median (µs) | P80 (µs) | P90 (µs) | max (µs) |
55
+ | ---------- | -------: | ----------: | -------: | -------: | -------: |
56
+ | Limit | 8.1 | 8.5 | 9.6 | 10.0 | 18 |
57
+ | Market | 8.1 | 8.5 | 8.8 | 9.3 | 45 |
58
+
59
+ ### Throughput
60
+
61
+ | Metric | Value |
62
+ | ------------- | --------------------------------------------------- |
63
+ | **Max TPS** | ~60,000 orders/second |
64
+ | **Order mix** | 20% Market, 30% aggressive Limit, 50% passive Limit |
65
+
66
+ *Performance note:* price-collar and circuit-breaker checks run in the hot path
67
+ for every match. They are required for realistic risk control and add measurable cost.
68
+
69
+
70
+
71
+ ## Explore the Code
72
+
73
+ Start with these key areas:
74
+
75
+ - **[src/edumatcher/engine/](src/edumatcher/engine/)** — Core matching logic and order book
76
+ - **[src/edumatcher/gateway/](src/edumatcher/gateway/)** — Message handling and order validation
77
+ - **[src/edumatcher/clearing/](src/edumatcher/clearing/)** — Trade settlement and P&L calculation
78
+
79
+ ## Documentation
80
+
81
+ Full docs: [EduMatcher Documentation](https://johan162.github.io/edumatcher/)
82
+
83
+ Additional references:
84
+
85
+ - [How an Exchange Works](https://johan162.github.io/how-exchange-works/). This is a generic
86
+ document meant for SW developers with no previous financial experience. Reading this document
87
+ will give the necessary background both in finance and the core workings of an exchange.
88
+ - [ALF Protocol Appendix](https://johan162.github.io/user-guide/20-app-alf-protocol.md). `ALF`
89
+ is the Gatewauy human protocol used to send in orders vi the `ALF` gateway. It is a drastically
90
+ simplified `FIX` inspired protocol (`ALF` = `ALmost Fix`)
91
+ - [Glossary](https://johan162.github.io/glossary/). An extensiv glossary with all commonly used
92
+ financial terms used in these documents.
93
+
94
+
95
+ ## Who It's For
96
+
97
+ - Computer science students learning systems design and concurrency
98
+ - Finance students learning market microstructure and trading mechanics
99
+ - Developers building exchange technology or trading systems
100
+ - Anyone curious about how modern markets actually work
101
+
102
+
103
+ ## Contributing
104
+
105
+ This is an educational project. If you find bugs, improve the documentation, or make other enhancements PRs are welcome!
106
+
107
+
108
+ ## Citation
109
+
110
+ If you use this tool in teaching or courses, please cite:
111
+
112
+ ```text
113
+ @software{edumatcher,
114
+ title = {EduMatcher},
115
+ author = {Johan Persson},
116
+ year = {2026},
117
+ url = {https://github.com/johan162/edumatcher},
118
+ version = {0.1.5}
119
+ }
120
+ ```
121
+
122
+ ## License
123
+
124
+ MIT License - see [LICENSE](LICENSE).
@@ -0,0 +1,159 @@
1
+ # Setup poetry configuration
2
+ # poetry config virtualenvs.in-project true
3
+ # poetry install --with dev,docs
4
+
5
+ [build-system]
6
+ requires = ["poetry-core"]
7
+ build-backend = "poetry.core.masonry.api"
8
+
9
+ [tool.poetry]
10
+ name = "edumatcher"
11
+ version = "0.1.5"
12
+ description = "Educational multi-process trading system with order matching"
13
+ authors = ["Johan Persson <johan162@gmail.com>"]
14
+ readme = "README.md"
15
+ packages = [{include = "edumatcher", from = "src"}]
16
+ keywords = ["finance", "exchange", "matching-engine", "trading", "education", "learning", "order-matching", "market-microstructure"]
17
+ license = "MIT"
18
+ repository = "https://github.com/johan162/EduMatcher"
19
+
20
+ [tool.poetry.dependencies]
21
+ python = "^3.13"
22
+ pyzmq = "^27.1.0"
23
+ rich = "^15.0.0"
24
+ prompt_toolkit = "^3.0"
25
+ pyyaml = "^6.0.3"
26
+ orjson = "^3.11.9"
27
+
28
+ [tool.poetry.group.dev.dependencies]
29
+ mkdocs = "^1.6"
30
+ mkdocs-material = "^9.0"
31
+ pytest = "^9.0.3"
32
+ types-PyYAML = "^6.0"
33
+ pytest-cov = "^7.1.0"
34
+ pytest-xdist = ">=3.8.0"
35
+ twine = ">=6.2.0"
36
+ types-tabulate = "^0.10.0.20260308"
37
+ pyright = "^1.1.409"
38
+ flake8 = "^7.3.0"
39
+ black = "^26.3.1"
40
+ mypy = "^1.20.2"
41
+
42
+
43
+
44
+ [tool.poetry.group.docs.dependencies]
45
+ mkdocs = ">=1.5.0"
46
+ mkdocs-material = ">=9.7.6"
47
+ mkdocstrings = {extras = ["python"], version = ">=0.22.0"}
48
+
49
+ [tool.poetry.scripts]
50
+ pm-engine = "edumatcher.engine.main:main"
51
+ pm-gateway = "edumatcher.gateway.main:main"
52
+ pm-viewer = "edumatcher.viewer.main:main"
53
+ pm-board = "edumatcher.board.main:main"
54
+ pm-orders = "edumatcher.orders.main:main"
55
+ pm-audit = "edumatcher.audit.main:main"
56
+ pm-clearing = "edumatcher.clearing.main:main"
57
+ pm-stats = "edumatcher.stats.main:main"
58
+ pm-ticker = "edumatcher.ticker.main:main"
59
+ pm-scheduler = "edumatcher.scheduler.main:main"
60
+ pm-ai-trader = "edumatcher.ai_trader.main:main"
61
+ pm-admin = "edumatcher.commands.console:main"
62
+ pm-admin-cli = "edumatcher.commands.cli:main"
63
+ pm-ai-swarm = "edumatcher.ai_trader.swarm:main"
64
+
65
+ [tool.pytest.ini_options]
66
+ testpaths = ["tests"]
67
+ python_files = ["test_*.py"]
68
+ python_classes = ["Test*"]
69
+ python_functions = ["test_*"]
70
+ markers = [
71
+ "perf: performance / benchmarking tests (deselect with '-m not perf')",
72
+ ]
73
+ addopts = [
74
+ "--strict-markers",
75
+ "-m",
76
+ "not heavy and not probabilistic and not probabilistic_full",
77
+ "--cov=edumatcher",
78
+ "--cov-report=term-missing",
79
+ "--cov-report=html",
80
+ "--cov-report=xml",
81
+ ]
82
+
83
+ [tool.coverage.run]
84
+ source = ["src"]
85
+ omit = ["*/tests/*", "*/test_*.py"]
86
+
87
+ [tool.coverage.report]
88
+ exclude_lines = [
89
+ "pragma: no cover",
90
+ "def __repr__",
91
+ "raise AssertionError",
92
+ "raise NotImplementedError",
93
+ "if __name__ == .__main__.:",
94
+ "if TYPE_CHECKING:",
95
+ "class .*\\bProtocol\\):",
96
+ "@(abc\\.)?abstractmethod",
97
+ ]
98
+
99
+ [tool.black]
100
+ line-length = 88
101
+ target-version = ["py313"]
102
+
103
+ [tool.mypy]
104
+ python_version = "3.13"
105
+ strict = true
106
+ warn_return_any = true
107
+ warn_unused_configs = true
108
+ disallow_untyped_defs = true
109
+ disallow_untyped_calls = true
110
+ disallow_any_generics = true
111
+ disallow_incomplete_defs = true
112
+ check_untyped_defs = true
113
+ no_implicit_optional = true
114
+ warn_redundant_casts = true
115
+ warn_unused_ignores = true
116
+ warn_no_return = true
117
+ show_error_codes = true
118
+
119
+ [[tool.mypy.overrides]]
120
+ module = "yaml"
121
+ ignore_missing_imports = true
122
+
123
+ [[tool.mypy.overrides]]
124
+ module = "scipy.*"
125
+ ignore_missing_imports = true
126
+
127
+ [[tool.mypy.overrides]]
128
+ module = "tests.*"
129
+ disallow_untyped_defs = false
130
+ disallow_untyped_calls = false
131
+ disallow_incomplete_defs = false
132
+ disallow_untyped_decorators = false
133
+ warn_return_any = false
134
+ check_untyped_defs = false
135
+ disable_error_code = ["arg-type", "assignment", "call-overload", "type-arg"]
136
+
137
+
138
+ [tool.pyright]
139
+ pythonVersion = "3.13"
140
+ venvPath = "."
141
+ venv = ".venv"
142
+ typeCheckingMode = "strict"
143
+ reportMissingTypeStubs = false
144
+ reportUnknownMemberType = false
145
+ reportUnknownArgumentType = false
146
+ reportUnknownVariableType = false
147
+ reportUnknownParameterType = false
148
+ reportMissingParameterType = false
149
+ reportUntypedFunctionDecorator = false
150
+ reportUntypedBaseClass = false
151
+ reportUnknownLambdaType = false
152
+ executionEnvironments = [
153
+ { root = "tests", reportPrivateUsage = false, reportUnusedVariable = false, reportUnusedFunction = false, reportUnusedImport = false, reportMissingTypeArgument = false, reportArgumentType = false, reportOptionalOperand = false, reportOptionalMemberAccess = false, reportOperatorIssue = false, reportAttributeAccessIssue = false, reportCallIssue = false, reportReturnType = false },
154
+ { root = "tools", reportUnusedImport = false, reportMissingTypeArgument = false, reportArgumentType = false, reportOptionalMemberAccess = false },
155
+ { root = "src" },
156
+ ]
157
+
158
+
159
+
File without changes
@@ -0,0 +1,5 @@
1
+ """AI trader process package."""
2
+
3
+ from edumatcher.ai_trader.personality import PersonalityProfile, get_profile
4
+
5
+ __all__ = ["PersonalityProfile", "get_profile"]