├── LICENSE
├── composer.json
├── composer.lock
├── phpcs.xml
├── phpunit.xml
└── src
└── Bayes.php
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2017 friends@niiknow.org
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "niiknow/bayes",
3 | "description": "a machine learning lib",
4 | "keywords": [
5 | "bayes",
6 | "lib",
7 | "library",
8 | "niiknow",
9 | "naive-bayes-classifier",
10 | "naive-bayes",
11 | "naive-bayes-algorithm",
12 | "naivebayes",
13 | "naive",
14 | "machine-learning",
15 | "machine-learning-algorithm",
16 | "classifier",
17 | "php-ml",
18 | "php",
19 | "php-library",
20 | "naive-bayes-classification"
21 | ],
22 | "license": "MIT",
23 | "authors": [{
24 | "name": "Tom Noogen",
25 | "email": "friends@niiknow.org"
26 | }],
27 | "type": "library",
28 | "require": {
29 | "php": ">=7.4"
30 | },
31 | "require-dev": {
32 | "phpunit/phpunit": "^9.5.0"
33 | },
34 | "autoload": {
35 | "psr-4": {
36 | "Niiknow\\": "src/"
37 | }
38 | },
39 | "autoload-dev": {
40 | "psr-4": {
41 | "Tests\\": "tests/"
42 | }
43 | },
44 | "config": {
45 | "prefer-install": "dist"
46 | },
47 | "minimum-stability": "dev",
48 | "prefer-stable": true,
49 | "scripts": {
50 | "test": [
51 | "phpunit tests/*.php"
52 | ]
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "d58b5f2e6ea08c6a4b7b78369a50d903",
8 | "packages": [],
9 | "packages-dev": [
10 | {
11 | "name": "doctrine/instantiator",
12 | "version": "1.4.1",
13 | "source": {
14 | "type": "git",
15 | "url": "https://github.com/doctrine/instantiator.git",
16 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
17 | },
18 | "dist": {
19 | "type": "zip",
20 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
21 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
22 | "shasum": ""
23 | },
24 | "require": {
25 | "php": "^7.1 || ^8.0"
26 | },
27 | "require-dev": {
28 | "doctrine/coding-standard": "^9",
29 | "ext-pdo": "*",
30 | "ext-phar": "*",
31 | "phpbench/phpbench": "^0.16 || ^1",
32 | "phpstan/phpstan": "^1.4",
33 | "phpstan/phpstan-phpunit": "^1",
34 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
35 | "vimeo/psalm": "^4.22"
36 | },
37 | "type": "library",
38 | "autoload": {
39 | "psr-4": {
40 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
41 | }
42 | },
43 | "notification-url": "https://packagist.org/downloads/",
44 | "license": [
45 | "MIT"
46 | ],
47 | "authors": [
48 | {
49 | "name": "Marco Pivetta",
50 | "email": "ocramius@gmail.com",
51 | "homepage": "https://ocramius.github.io/"
52 | }
53 | ],
54 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
55 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
56 | "keywords": [
57 | "constructor",
58 | "instantiate"
59 | ],
60 | "support": {
61 | "issues": "https://github.com/doctrine/instantiator/issues",
62 | "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
63 | },
64 | "funding": [
65 | {
66 | "url": "https://www.doctrine-project.org/sponsorship.html",
67 | "type": "custom"
68 | },
69 | {
70 | "url": "https://www.patreon.com/phpdoctrine",
71 | "type": "patreon"
72 | },
73 | {
74 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
75 | "type": "tidelift"
76 | }
77 | ],
78 | "time": "2022-03-03T08:28:38+00:00"
79 | },
80 | {
81 | "name": "myclabs/deep-copy",
82 | "version": "1.11.0",
83 | "source": {
84 | "type": "git",
85 | "url": "https://github.com/myclabs/DeepCopy.git",
86 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
87 | },
88 | "dist": {
89 | "type": "zip",
90 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
91 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
92 | "shasum": ""
93 | },
94 | "require": {
95 | "php": "^7.1 || ^8.0"
96 | },
97 | "conflict": {
98 | "doctrine/collections": "<1.6.8",
99 | "doctrine/common": "<2.13.3 || >=3,<3.2.2"
100 | },
101 | "require-dev": {
102 | "doctrine/collections": "^1.6.8",
103 | "doctrine/common": "^2.13.3 || ^3.2.2",
104 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
105 | },
106 | "type": "library",
107 | "autoload": {
108 | "files": [
109 | "src/DeepCopy/deep_copy.php"
110 | ],
111 | "psr-4": {
112 | "DeepCopy\\": "src/DeepCopy/"
113 | }
114 | },
115 | "notification-url": "https://packagist.org/downloads/",
116 | "license": [
117 | "MIT"
118 | ],
119 | "description": "Create deep copies (clones) of your objects",
120 | "keywords": [
121 | "clone",
122 | "copy",
123 | "duplicate",
124 | "object",
125 | "object graph"
126 | ],
127 | "support": {
128 | "issues": "https://github.com/myclabs/DeepCopy/issues",
129 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
130 | },
131 | "funding": [
132 | {
133 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
134 | "type": "tidelift"
135 | }
136 | ],
137 | "time": "2022-03-03T13:19:32+00:00"
138 | },
139 | {
140 | "name": "nikic/php-parser",
141 | "version": "v4.13.2",
142 | "source": {
143 | "type": "git",
144 | "url": "https://github.com/nikic/PHP-Parser.git",
145 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
146 | },
147 | "dist": {
148 | "type": "zip",
149 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
150 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
151 | "shasum": ""
152 | },
153 | "require": {
154 | "ext-tokenizer": "*",
155 | "php": ">=7.0"
156 | },
157 | "require-dev": {
158 | "ircmaxell/php-yacc": "^0.0.7",
159 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
160 | },
161 | "bin": [
162 | "bin/php-parse"
163 | ],
164 | "type": "library",
165 | "extra": {
166 | "branch-alias": {
167 | "dev-master": "4.9-dev"
168 | }
169 | },
170 | "autoload": {
171 | "psr-4": {
172 | "PhpParser\\": "lib/PhpParser"
173 | }
174 | },
175 | "notification-url": "https://packagist.org/downloads/",
176 | "license": [
177 | "BSD-3-Clause"
178 | ],
179 | "authors": [
180 | {
181 | "name": "Nikita Popov"
182 | }
183 | ],
184 | "description": "A PHP parser written in PHP",
185 | "keywords": [
186 | "parser",
187 | "php"
188 | ],
189 | "support": {
190 | "issues": "https://github.com/nikic/PHP-Parser/issues",
191 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
192 | },
193 | "time": "2021-11-30T19:35:32+00:00"
194 | },
195 | {
196 | "name": "phar-io/manifest",
197 | "version": "2.0.3",
198 | "source": {
199 | "type": "git",
200 | "url": "https://github.com/phar-io/manifest.git",
201 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
202 | },
203 | "dist": {
204 | "type": "zip",
205 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
206 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
207 | "shasum": ""
208 | },
209 | "require": {
210 | "ext-dom": "*",
211 | "ext-phar": "*",
212 | "ext-xmlwriter": "*",
213 | "phar-io/version": "^3.0.1",
214 | "php": "^7.2 || ^8.0"
215 | },
216 | "type": "library",
217 | "extra": {
218 | "branch-alias": {
219 | "dev-master": "2.0.x-dev"
220 | }
221 | },
222 | "autoload": {
223 | "classmap": [
224 | "src/"
225 | ]
226 | },
227 | "notification-url": "https://packagist.org/downloads/",
228 | "license": [
229 | "BSD-3-Clause"
230 | ],
231 | "authors": [
232 | {
233 | "name": "Arne Blankerts",
234 | "email": "arne@blankerts.de",
235 | "role": "Developer"
236 | },
237 | {
238 | "name": "Sebastian Heuer",
239 | "email": "sebastian@phpeople.de",
240 | "role": "Developer"
241 | },
242 | {
243 | "name": "Sebastian Bergmann",
244 | "email": "sebastian@phpunit.de",
245 | "role": "Developer"
246 | }
247 | ],
248 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
249 | "support": {
250 | "issues": "https://github.com/phar-io/manifest/issues",
251 | "source": "https://github.com/phar-io/manifest/tree/2.0.3"
252 | },
253 | "time": "2021-07-20T11:28:43+00:00"
254 | },
255 | {
256 | "name": "phar-io/version",
257 | "version": "3.2.1",
258 | "source": {
259 | "type": "git",
260 | "url": "https://github.com/phar-io/version.git",
261 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
262 | },
263 | "dist": {
264 | "type": "zip",
265 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
266 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
267 | "shasum": ""
268 | },
269 | "require": {
270 | "php": "^7.2 || ^8.0"
271 | },
272 | "type": "library",
273 | "autoload": {
274 | "classmap": [
275 | "src/"
276 | ]
277 | },
278 | "notification-url": "https://packagist.org/downloads/",
279 | "license": [
280 | "BSD-3-Clause"
281 | ],
282 | "authors": [
283 | {
284 | "name": "Arne Blankerts",
285 | "email": "arne@blankerts.de",
286 | "role": "Developer"
287 | },
288 | {
289 | "name": "Sebastian Heuer",
290 | "email": "sebastian@phpeople.de",
291 | "role": "Developer"
292 | },
293 | {
294 | "name": "Sebastian Bergmann",
295 | "email": "sebastian@phpunit.de",
296 | "role": "Developer"
297 | }
298 | ],
299 | "description": "Library for handling version information and constraints",
300 | "support": {
301 | "issues": "https://github.com/phar-io/version/issues",
302 | "source": "https://github.com/phar-io/version/tree/3.2.1"
303 | },
304 | "time": "2022-02-21T01:04:05+00:00"
305 | },
306 | {
307 | "name": "phpdocumentor/reflection-common",
308 | "version": "2.2.0",
309 | "source": {
310 | "type": "git",
311 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
312 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
313 | },
314 | "dist": {
315 | "type": "zip",
316 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
317 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
318 | "shasum": ""
319 | },
320 | "require": {
321 | "php": "^7.2 || ^8.0"
322 | },
323 | "type": "library",
324 | "extra": {
325 | "branch-alias": {
326 | "dev-2.x": "2.x-dev"
327 | }
328 | },
329 | "autoload": {
330 | "psr-4": {
331 | "phpDocumentor\\Reflection\\": "src/"
332 | }
333 | },
334 | "notification-url": "https://packagist.org/downloads/",
335 | "license": [
336 | "MIT"
337 | ],
338 | "authors": [
339 | {
340 | "name": "Jaap van Otterdijk",
341 | "email": "opensource@ijaap.nl"
342 | }
343 | ],
344 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
345 | "homepage": "http://www.phpdoc.org",
346 | "keywords": [
347 | "FQSEN",
348 | "phpDocumentor",
349 | "phpdoc",
350 | "reflection",
351 | "static analysis"
352 | ],
353 | "support": {
354 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
355 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
356 | },
357 | "time": "2020-06-27T09:03:43+00:00"
358 | },
359 | {
360 | "name": "phpdocumentor/reflection-docblock",
361 | "version": "5.3.0",
362 | "source": {
363 | "type": "git",
364 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
365 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
366 | },
367 | "dist": {
368 | "type": "zip",
369 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
370 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
371 | "shasum": ""
372 | },
373 | "require": {
374 | "ext-filter": "*",
375 | "php": "^7.2 || ^8.0",
376 | "phpdocumentor/reflection-common": "^2.2",
377 | "phpdocumentor/type-resolver": "^1.3",
378 | "webmozart/assert": "^1.9.1"
379 | },
380 | "require-dev": {
381 | "mockery/mockery": "~1.3.2",
382 | "psalm/phar": "^4.8"
383 | },
384 | "type": "library",
385 | "extra": {
386 | "branch-alias": {
387 | "dev-master": "5.x-dev"
388 | }
389 | },
390 | "autoload": {
391 | "psr-4": {
392 | "phpDocumentor\\Reflection\\": "src"
393 | }
394 | },
395 | "notification-url": "https://packagist.org/downloads/",
396 | "license": [
397 | "MIT"
398 | ],
399 | "authors": [
400 | {
401 | "name": "Mike van Riel",
402 | "email": "me@mikevanriel.com"
403 | },
404 | {
405 | "name": "Jaap van Otterdijk",
406 | "email": "account@ijaap.nl"
407 | }
408 | ],
409 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
410 | "support": {
411 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
412 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
413 | },
414 | "time": "2021-10-19T17:43:47+00:00"
415 | },
416 | {
417 | "name": "phpdocumentor/type-resolver",
418 | "version": "1.6.1",
419 | "source": {
420 | "type": "git",
421 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
422 | "reference": "77a32518733312af16a44300404e945338981de3"
423 | },
424 | "dist": {
425 | "type": "zip",
426 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
427 | "reference": "77a32518733312af16a44300404e945338981de3",
428 | "shasum": ""
429 | },
430 | "require": {
431 | "php": "^7.2 || ^8.0",
432 | "phpdocumentor/reflection-common": "^2.0"
433 | },
434 | "require-dev": {
435 | "ext-tokenizer": "*",
436 | "psalm/phar": "^4.8"
437 | },
438 | "type": "library",
439 | "extra": {
440 | "branch-alias": {
441 | "dev-1.x": "1.x-dev"
442 | }
443 | },
444 | "autoload": {
445 | "psr-4": {
446 | "phpDocumentor\\Reflection\\": "src"
447 | }
448 | },
449 | "notification-url": "https://packagist.org/downloads/",
450 | "license": [
451 | "MIT"
452 | ],
453 | "authors": [
454 | {
455 | "name": "Mike van Riel",
456 | "email": "me@mikevanriel.com"
457 | }
458 | ],
459 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
460 | "support": {
461 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
462 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
463 | },
464 | "time": "2022-03-15T21:29:03+00:00"
465 | },
466 | {
467 | "name": "phpspec/prophecy",
468 | "version": "v1.15.0",
469 | "source": {
470 | "type": "git",
471 | "url": "https://github.com/phpspec/prophecy.git",
472 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
473 | },
474 | "dist": {
475 | "type": "zip",
476 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
477 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
478 | "shasum": ""
479 | },
480 | "require": {
481 | "doctrine/instantiator": "^1.2",
482 | "php": "^7.2 || ~8.0, <8.2",
483 | "phpdocumentor/reflection-docblock": "^5.2",
484 | "sebastian/comparator": "^3.0 || ^4.0",
485 | "sebastian/recursion-context": "^3.0 || ^4.0"
486 | },
487 | "require-dev": {
488 | "phpspec/phpspec": "^6.0 || ^7.0",
489 | "phpunit/phpunit": "^8.0 || ^9.0"
490 | },
491 | "type": "library",
492 | "extra": {
493 | "branch-alias": {
494 | "dev-master": "1.x-dev"
495 | }
496 | },
497 | "autoload": {
498 | "psr-4": {
499 | "Prophecy\\": "src/Prophecy"
500 | }
501 | },
502 | "notification-url": "https://packagist.org/downloads/",
503 | "license": [
504 | "MIT"
505 | ],
506 | "authors": [
507 | {
508 | "name": "Konstantin Kudryashov",
509 | "email": "ever.zet@gmail.com",
510 | "homepage": "http://everzet.com"
511 | },
512 | {
513 | "name": "Marcello Duarte",
514 | "email": "marcello.duarte@gmail.com"
515 | }
516 | ],
517 | "description": "Highly opinionated mocking framework for PHP 5.3+",
518 | "homepage": "https://github.com/phpspec/prophecy",
519 | "keywords": [
520 | "Double",
521 | "Dummy",
522 | "fake",
523 | "mock",
524 | "spy",
525 | "stub"
526 | ],
527 | "support": {
528 | "issues": "https://github.com/phpspec/prophecy/issues",
529 | "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
530 | },
531 | "time": "2021-12-08T12:19:24+00:00"
532 | },
533 | {
534 | "name": "phpunit/php-code-coverage",
535 | "version": "9.2.15",
536 | "source": {
537 | "type": "git",
538 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
539 | "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
540 | },
541 | "dist": {
542 | "type": "zip",
543 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
544 | "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
545 | "shasum": ""
546 | },
547 | "require": {
548 | "ext-dom": "*",
549 | "ext-libxml": "*",
550 | "ext-xmlwriter": "*",
551 | "nikic/php-parser": "^4.13.0",
552 | "php": ">=7.3",
553 | "phpunit/php-file-iterator": "^3.0.3",
554 | "phpunit/php-text-template": "^2.0.2",
555 | "sebastian/code-unit-reverse-lookup": "^2.0.2",
556 | "sebastian/complexity": "^2.0",
557 | "sebastian/environment": "^5.1.2",
558 | "sebastian/lines-of-code": "^1.0.3",
559 | "sebastian/version": "^3.0.1",
560 | "theseer/tokenizer": "^1.2.0"
561 | },
562 | "require-dev": {
563 | "phpunit/phpunit": "^9.3"
564 | },
565 | "suggest": {
566 | "ext-pcov": "*",
567 | "ext-xdebug": "*"
568 | },
569 | "type": "library",
570 | "extra": {
571 | "branch-alias": {
572 | "dev-master": "9.2-dev"
573 | }
574 | },
575 | "autoload": {
576 | "classmap": [
577 | "src/"
578 | ]
579 | },
580 | "notification-url": "https://packagist.org/downloads/",
581 | "license": [
582 | "BSD-3-Clause"
583 | ],
584 | "authors": [
585 | {
586 | "name": "Sebastian Bergmann",
587 | "email": "sebastian@phpunit.de",
588 | "role": "lead"
589 | }
590 | ],
591 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
592 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
593 | "keywords": [
594 | "coverage",
595 | "testing",
596 | "xunit"
597 | ],
598 | "support": {
599 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
600 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
601 | },
602 | "funding": [
603 | {
604 | "url": "https://github.com/sebastianbergmann",
605 | "type": "github"
606 | }
607 | ],
608 | "time": "2022-03-07T09:28:20+00:00"
609 | },
610 | {
611 | "name": "phpunit/php-file-iterator",
612 | "version": "3.0.6",
613 | "source": {
614 | "type": "git",
615 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
616 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
617 | },
618 | "dist": {
619 | "type": "zip",
620 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
621 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
622 | "shasum": ""
623 | },
624 | "require": {
625 | "php": ">=7.3"
626 | },
627 | "require-dev": {
628 | "phpunit/phpunit": "^9.3"
629 | },
630 | "type": "library",
631 | "extra": {
632 | "branch-alias": {
633 | "dev-master": "3.0-dev"
634 | }
635 | },
636 | "autoload": {
637 | "classmap": [
638 | "src/"
639 | ]
640 | },
641 | "notification-url": "https://packagist.org/downloads/",
642 | "license": [
643 | "BSD-3-Clause"
644 | ],
645 | "authors": [
646 | {
647 | "name": "Sebastian Bergmann",
648 | "email": "sebastian@phpunit.de",
649 | "role": "lead"
650 | }
651 | ],
652 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
653 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
654 | "keywords": [
655 | "filesystem",
656 | "iterator"
657 | ],
658 | "support": {
659 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
660 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
661 | },
662 | "funding": [
663 | {
664 | "url": "https://github.com/sebastianbergmann",
665 | "type": "github"
666 | }
667 | ],
668 | "time": "2021-12-02T12:48:52+00:00"
669 | },
670 | {
671 | "name": "phpunit/php-invoker",
672 | "version": "3.1.1",
673 | "source": {
674 | "type": "git",
675 | "url": "https://github.com/sebastianbergmann/php-invoker.git",
676 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
677 | },
678 | "dist": {
679 | "type": "zip",
680 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
681 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
682 | "shasum": ""
683 | },
684 | "require": {
685 | "php": ">=7.3"
686 | },
687 | "require-dev": {
688 | "ext-pcntl": "*",
689 | "phpunit/phpunit": "^9.3"
690 | },
691 | "suggest": {
692 | "ext-pcntl": "*"
693 | },
694 | "type": "library",
695 | "extra": {
696 | "branch-alias": {
697 | "dev-master": "3.1-dev"
698 | }
699 | },
700 | "autoload": {
701 | "classmap": [
702 | "src/"
703 | ]
704 | },
705 | "notification-url": "https://packagist.org/downloads/",
706 | "license": [
707 | "BSD-3-Clause"
708 | ],
709 | "authors": [
710 | {
711 | "name": "Sebastian Bergmann",
712 | "email": "sebastian@phpunit.de",
713 | "role": "lead"
714 | }
715 | ],
716 | "description": "Invoke callables with a timeout",
717 | "homepage": "https://github.com/sebastianbergmann/php-invoker/",
718 | "keywords": [
719 | "process"
720 | ],
721 | "support": {
722 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
723 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
724 | },
725 | "funding": [
726 | {
727 | "url": "https://github.com/sebastianbergmann",
728 | "type": "github"
729 | }
730 | ],
731 | "time": "2020-09-28T05:58:55+00:00"
732 | },
733 | {
734 | "name": "phpunit/php-text-template",
735 | "version": "2.0.4",
736 | "source": {
737 | "type": "git",
738 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
739 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
740 | },
741 | "dist": {
742 | "type": "zip",
743 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
744 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
745 | "shasum": ""
746 | },
747 | "require": {
748 | "php": ">=7.3"
749 | },
750 | "require-dev": {
751 | "phpunit/phpunit": "^9.3"
752 | },
753 | "type": "library",
754 | "extra": {
755 | "branch-alias": {
756 | "dev-master": "2.0-dev"
757 | }
758 | },
759 | "autoload": {
760 | "classmap": [
761 | "src/"
762 | ]
763 | },
764 | "notification-url": "https://packagist.org/downloads/",
765 | "license": [
766 | "BSD-3-Clause"
767 | ],
768 | "authors": [
769 | {
770 | "name": "Sebastian Bergmann",
771 | "email": "sebastian@phpunit.de",
772 | "role": "lead"
773 | }
774 | ],
775 | "description": "Simple template engine.",
776 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
777 | "keywords": [
778 | "template"
779 | ],
780 | "support": {
781 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
782 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
783 | },
784 | "funding": [
785 | {
786 | "url": "https://github.com/sebastianbergmann",
787 | "type": "github"
788 | }
789 | ],
790 | "time": "2020-10-26T05:33:50+00:00"
791 | },
792 | {
793 | "name": "phpunit/php-timer",
794 | "version": "5.0.3",
795 | "source": {
796 | "type": "git",
797 | "url": "https://github.com/sebastianbergmann/php-timer.git",
798 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
799 | },
800 | "dist": {
801 | "type": "zip",
802 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
803 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
804 | "shasum": ""
805 | },
806 | "require": {
807 | "php": ">=7.3"
808 | },
809 | "require-dev": {
810 | "phpunit/phpunit": "^9.3"
811 | },
812 | "type": "library",
813 | "extra": {
814 | "branch-alias": {
815 | "dev-master": "5.0-dev"
816 | }
817 | },
818 | "autoload": {
819 | "classmap": [
820 | "src/"
821 | ]
822 | },
823 | "notification-url": "https://packagist.org/downloads/",
824 | "license": [
825 | "BSD-3-Clause"
826 | ],
827 | "authors": [
828 | {
829 | "name": "Sebastian Bergmann",
830 | "email": "sebastian@phpunit.de",
831 | "role": "lead"
832 | }
833 | ],
834 | "description": "Utility class for timing",
835 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
836 | "keywords": [
837 | "timer"
838 | ],
839 | "support": {
840 | "issues": "https://github.com/sebastianbergmann/php-timer/issues",
841 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
842 | },
843 | "funding": [
844 | {
845 | "url": "https://github.com/sebastianbergmann",
846 | "type": "github"
847 | }
848 | ],
849 | "time": "2020-10-26T13:16:10+00:00"
850 | },
851 | {
852 | "name": "phpunit/phpunit",
853 | "version": "9.5.20",
854 | "source": {
855 | "type": "git",
856 | "url": "https://github.com/sebastianbergmann/phpunit.git",
857 | "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
858 | },
859 | "dist": {
860 | "type": "zip",
861 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
862 | "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
863 | "shasum": ""
864 | },
865 | "require": {
866 | "doctrine/instantiator": "^1.3.1",
867 | "ext-dom": "*",
868 | "ext-json": "*",
869 | "ext-libxml": "*",
870 | "ext-mbstring": "*",
871 | "ext-xml": "*",
872 | "ext-xmlwriter": "*",
873 | "myclabs/deep-copy": "^1.10.1",
874 | "phar-io/manifest": "^2.0.3",
875 | "phar-io/version": "^3.0.2",
876 | "php": ">=7.3",
877 | "phpspec/prophecy": "^1.12.1",
878 | "phpunit/php-code-coverage": "^9.2.13",
879 | "phpunit/php-file-iterator": "^3.0.5",
880 | "phpunit/php-invoker": "^3.1.1",
881 | "phpunit/php-text-template": "^2.0.3",
882 | "phpunit/php-timer": "^5.0.2",
883 | "sebastian/cli-parser": "^1.0.1",
884 | "sebastian/code-unit": "^1.0.6",
885 | "sebastian/comparator": "^4.0.5",
886 | "sebastian/diff": "^4.0.3",
887 | "sebastian/environment": "^5.1.3",
888 | "sebastian/exporter": "^4.0.3",
889 | "sebastian/global-state": "^5.0.1",
890 | "sebastian/object-enumerator": "^4.0.3",
891 | "sebastian/resource-operations": "^3.0.3",
892 | "sebastian/type": "^3.0",
893 | "sebastian/version": "^3.0.2"
894 | },
895 | "require-dev": {
896 | "ext-pdo": "*",
897 | "phpspec/prophecy-phpunit": "^2.0.1"
898 | },
899 | "suggest": {
900 | "ext-soap": "*",
901 | "ext-xdebug": "*"
902 | },
903 | "bin": [
904 | "phpunit"
905 | ],
906 | "type": "library",
907 | "extra": {
908 | "branch-alias": {
909 | "dev-master": "9.5-dev"
910 | }
911 | },
912 | "autoload": {
913 | "files": [
914 | "src/Framework/Assert/Functions.php"
915 | ],
916 | "classmap": [
917 | "src/"
918 | ]
919 | },
920 | "notification-url": "https://packagist.org/downloads/",
921 | "license": [
922 | "BSD-3-Clause"
923 | ],
924 | "authors": [
925 | {
926 | "name": "Sebastian Bergmann",
927 | "email": "sebastian@phpunit.de",
928 | "role": "lead"
929 | }
930 | ],
931 | "description": "The PHP Unit Testing framework.",
932 | "homepage": "https://phpunit.de/",
933 | "keywords": [
934 | "phpunit",
935 | "testing",
936 | "xunit"
937 | ],
938 | "support": {
939 | "issues": "https://github.com/sebastianbergmann/phpunit/issues",
940 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20"
941 | },
942 | "funding": [
943 | {
944 | "url": "https://phpunit.de/sponsors.html",
945 | "type": "custom"
946 | },
947 | {
948 | "url": "https://github.com/sebastianbergmann",
949 | "type": "github"
950 | }
951 | ],
952 | "time": "2022-04-01T12:37:26+00:00"
953 | },
954 | {
955 | "name": "sebastian/cli-parser",
956 | "version": "1.0.1",
957 | "source": {
958 | "type": "git",
959 | "url": "https://github.com/sebastianbergmann/cli-parser.git",
960 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
961 | },
962 | "dist": {
963 | "type": "zip",
964 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
965 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
966 | "shasum": ""
967 | },
968 | "require": {
969 | "php": ">=7.3"
970 | },
971 | "require-dev": {
972 | "phpunit/phpunit": "^9.3"
973 | },
974 | "type": "library",
975 | "extra": {
976 | "branch-alias": {
977 | "dev-master": "1.0-dev"
978 | }
979 | },
980 | "autoload": {
981 | "classmap": [
982 | "src/"
983 | ]
984 | },
985 | "notification-url": "https://packagist.org/downloads/",
986 | "license": [
987 | "BSD-3-Clause"
988 | ],
989 | "authors": [
990 | {
991 | "name": "Sebastian Bergmann",
992 | "email": "sebastian@phpunit.de",
993 | "role": "lead"
994 | }
995 | ],
996 | "description": "Library for parsing CLI options",
997 | "homepage": "https://github.com/sebastianbergmann/cli-parser",
998 | "support": {
999 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
1000 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
1001 | },
1002 | "funding": [
1003 | {
1004 | "url": "https://github.com/sebastianbergmann",
1005 | "type": "github"
1006 | }
1007 | ],
1008 | "time": "2020-09-28T06:08:49+00:00"
1009 | },
1010 | {
1011 | "name": "sebastian/code-unit",
1012 | "version": "1.0.8",
1013 | "source": {
1014 | "type": "git",
1015 | "url": "https://github.com/sebastianbergmann/code-unit.git",
1016 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
1017 | },
1018 | "dist": {
1019 | "type": "zip",
1020 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
1021 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
1022 | "shasum": ""
1023 | },
1024 | "require": {
1025 | "php": ">=7.3"
1026 | },
1027 | "require-dev": {
1028 | "phpunit/phpunit": "^9.3"
1029 | },
1030 | "type": "library",
1031 | "extra": {
1032 | "branch-alias": {
1033 | "dev-master": "1.0-dev"
1034 | }
1035 | },
1036 | "autoload": {
1037 | "classmap": [
1038 | "src/"
1039 | ]
1040 | },
1041 | "notification-url": "https://packagist.org/downloads/",
1042 | "license": [
1043 | "BSD-3-Clause"
1044 | ],
1045 | "authors": [
1046 | {
1047 | "name": "Sebastian Bergmann",
1048 | "email": "sebastian@phpunit.de",
1049 | "role": "lead"
1050 | }
1051 | ],
1052 | "description": "Collection of value objects that represent the PHP code units",
1053 | "homepage": "https://github.com/sebastianbergmann/code-unit",
1054 | "support": {
1055 | "issues": "https://github.com/sebastianbergmann/code-unit/issues",
1056 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
1057 | },
1058 | "funding": [
1059 | {
1060 | "url": "https://github.com/sebastianbergmann",
1061 | "type": "github"
1062 | }
1063 | ],
1064 | "time": "2020-10-26T13:08:54+00:00"
1065 | },
1066 | {
1067 | "name": "sebastian/code-unit-reverse-lookup",
1068 | "version": "2.0.3",
1069 | "source": {
1070 | "type": "git",
1071 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
1072 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
1073 | },
1074 | "dist": {
1075 | "type": "zip",
1076 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
1077 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
1078 | "shasum": ""
1079 | },
1080 | "require": {
1081 | "php": ">=7.3"
1082 | },
1083 | "require-dev": {
1084 | "phpunit/phpunit": "^9.3"
1085 | },
1086 | "type": "library",
1087 | "extra": {
1088 | "branch-alias": {
1089 | "dev-master": "2.0-dev"
1090 | }
1091 | },
1092 | "autoload": {
1093 | "classmap": [
1094 | "src/"
1095 | ]
1096 | },
1097 | "notification-url": "https://packagist.org/downloads/",
1098 | "license": [
1099 | "BSD-3-Clause"
1100 | ],
1101 | "authors": [
1102 | {
1103 | "name": "Sebastian Bergmann",
1104 | "email": "sebastian@phpunit.de"
1105 | }
1106 | ],
1107 | "description": "Looks up which function or method a line of code belongs to",
1108 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
1109 | "support": {
1110 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
1111 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
1112 | },
1113 | "funding": [
1114 | {
1115 | "url": "https://github.com/sebastianbergmann",
1116 | "type": "github"
1117 | }
1118 | ],
1119 | "time": "2020-09-28T05:30:19+00:00"
1120 | },
1121 | {
1122 | "name": "sebastian/comparator",
1123 | "version": "4.0.6",
1124 | "source": {
1125 | "type": "git",
1126 | "url": "https://github.com/sebastianbergmann/comparator.git",
1127 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
1128 | },
1129 | "dist": {
1130 | "type": "zip",
1131 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
1132 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
1133 | "shasum": ""
1134 | },
1135 | "require": {
1136 | "php": ">=7.3",
1137 | "sebastian/diff": "^4.0",
1138 | "sebastian/exporter": "^4.0"
1139 | },
1140 | "require-dev": {
1141 | "phpunit/phpunit": "^9.3"
1142 | },
1143 | "type": "library",
1144 | "extra": {
1145 | "branch-alias": {
1146 | "dev-master": "4.0-dev"
1147 | }
1148 | },
1149 | "autoload": {
1150 | "classmap": [
1151 | "src/"
1152 | ]
1153 | },
1154 | "notification-url": "https://packagist.org/downloads/",
1155 | "license": [
1156 | "BSD-3-Clause"
1157 | ],
1158 | "authors": [
1159 | {
1160 | "name": "Sebastian Bergmann",
1161 | "email": "sebastian@phpunit.de"
1162 | },
1163 | {
1164 | "name": "Jeff Welch",
1165 | "email": "whatthejeff@gmail.com"
1166 | },
1167 | {
1168 | "name": "Volker Dusch",
1169 | "email": "github@wallbash.com"
1170 | },
1171 | {
1172 | "name": "Bernhard Schussek",
1173 | "email": "bschussek@2bepublished.at"
1174 | }
1175 | ],
1176 | "description": "Provides the functionality to compare PHP values for equality",
1177 | "homepage": "https://github.com/sebastianbergmann/comparator",
1178 | "keywords": [
1179 | "comparator",
1180 | "compare",
1181 | "equality"
1182 | ],
1183 | "support": {
1184 | "issues": "https://github.com/sebastianbergmann/comparator/issues",
1185 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
1186 | },
1187 | "funding": [
1188 | {
1189 | "url": "https://github.com/sebastianbergmann",
1190 | "type": "github"
1191 | }
1192 | ],
1193 | "time": "2020-10-26T15:49:45+00:00"
1194 | },
1195 | {
1196 | "name": "sebastian/complexity",
1197 | "version": "2.0.2",
1198 | "source": {
1199 | "type": "git",
1200 | "url": "https://github.com/sebastianbergmann/complexity.git",
1201 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
1202 | },
1203 | "dist": {
1204 | "type": "zip",
1205 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
1206 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
1207 | "shasum": ""
1208 | },
1209 | "require": {
1210 | "nikic/php-parser": "^4.7",
1211 | "php": ">=7.3"
1212 | },
1213 | "require-dev": {
1214 | "phpunit/phpunit": "^9.3"
1215 | },
1216 | "type": "library",
1217 | "extra": {
1218 | "branch-alias": {
1219 | "dev-master": "2.0-dev"
1220 | }
1221 | },
1222 | "autoload": {
1223 | "classmap": [
1224 | "src/"
1225 | ]
1226 | },
1227 | "notification-url": "https://packagist.org/downloads/",
1228 | "license": [
1229 | "BSD-3-Clause"
1230 | ],
1231 | "authors": [
1232 | {
1233 | "name": "Sebastian Bergmann",
1234 | "email": "sebastian@phpunit.de",
1235 | "role": "lead"
1236 | }
1237 | ],
1238 | "description": "Library for calculating the complexity of PHP code units",
1239 | "homepage": "https://github.com/sebastianbergmann/complexity",
1240 | "support": {
1241 | "issues": "https://github.com/sebastianbergmann/complexity/issues",
1242 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
1243 | },
1244 | "funding": [
1245 | {
1246 | "url": "https://github.com/sebastianbergmann",
1247 | "type": "github"
1248 | }
1249 | ],
1250 | "time": "2020-10-26T15:52:27+00:00"
1251 | },
1252 | {
1253 | "name": "sebastian/diff",
1254 | "version": "4.0.4",
1255 | "source": {
1256 | "type": "git",
1257 | "url": "https://github.com/sebastianbergmann/diff.git",
1258 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
1259 | },
1260 | "dist": {
1261 | "type": "zip",
1262 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
1263 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
1264 | "shasum": ""
1265 | },
1266 | "require": {
1267 | "php": ">=7.3"
1268 | },
1269 | "require-dev": {
1270 | "phpunit/phpunit": "^9.3",
1271 | "symfony/process": "^4.2 || ^5"
1272 | },
1273 | "type": "library",
1274 | "extra": {
1275 | "branch-alias": {
1276 | "dev-master": "4.0-dev"
1277 | }
1278 | },
1279 | "autoload": {
1280 | "classmap": [
1281 | "src/"
1282 | ]
1283 | },
1284 | "notification-url": "https://packagist.org/downloads/",
1285 | "license": [
1286 | "BSD-3-Clause"
1287 | ],
1288 | "authors": [
1289 | {
1290 | "name": "Sebastian Bergmann",
1291 | "email": "sebastian@phpunit.de"
1292 | },
1293 | {
1294 | "name": "Kore Nordmann",
1295 | "email": "mail@kore-nordmann.de"
1296 | }
1297 | ],
1298 | "description": "Diff implementation",
1299 | "homepage": "https://github.com/sebastianbergmann/diff",
1300 | "keywords": [
1301 | "diff",
1302 | "udiff",
1303 | "unidiff",
1304 | "unified diff"
1305 | ],
1306 | "support": {
1307 | "issues": "https://github.com/sebastianbergmann/diff/issues",
1308 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
1309 | },
1310 | "funding": [
1311 | {
1312 | "url": "https://github.com/sebastianbergmann",
1313 | "type": "github"
1314 | }
1315 | ],
1316 | "time": "2020-10-26T13:10:38+00:00"
1317 | },
1318 | {
1319 | "name": "sebastian/environment",
1320 | "version": "5.1.4",
1321 | "source": {
1322 | "type": "git",
1323 | "url": "https://github.com/sebastianbergmann/environment.git",
1324 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
1325 | },
1326 | "dist": {
1327 | "type": "zip",
1328 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
1329 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
1330 | "shasum": ""
1331 | },
1332 | "require": {
1333 | "php": ">=7.3"
1334 | },
1335 | "require-dev": {
1336 | "phpunit/phpunit": "^9.3"
1337 | },
1338 | "suggest": {
1339 | "ext-posix": "*"
1340 | },
1341 | "type": "library",
1342 | "extra": {
1343 | "branch-alias": {
1344 | "dev-master": "5.1-dev"
1345 | }
1346 | },
1347 | "autoload": {
1348 | "classmap": [
1349 | "src/"
1350 | ]
1351 | },
1352 | "notification-url": "https://packagist.org/downloads/",
1353 | "license": [
1354 | "BSD-3-Clause"
1355 | ],
1356 | "authors": [
1357 | {
1358 | "name": "Sebastian Bergmann",
1359 | "email": "sebastian@phpunit.de"
1360 | }
1361 | ],
1362 | "description": "Provides functionality to handle HHVM/PHP environments",
1363 | "homepage": "http://www.github.com/sebastianbergmann/environment",
1364 | "keywords": [
1365 | "Xdebug",
1366 | "environment",
1367 | "hhvm"
1368 | ],
1369 | "support": {
1370 | "issues": "https://github.com/sebastianbergmann/environment/issues",
1371 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
1372 | },
1373 | "funding": [
1374 | {
1375 | "url": "https://github.com/sebastianbergmann",
1376 | "type": "github"
1377 | }
1378 | ],
1379 | "time": "2022-04-03T09:37:03+00:00"
1380 | },
1381 | {
1382 | "name": "sebastian/exporter",
1383 | "version": "4.0.4",
1384 | "source": {
1385 | "type": "git",
1386 | "url": "https://github.com/sebastianbergmann/exporter.git",
1387 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
1388 | },
1389 | "dist": {
1390 | "type": "zip",
1391 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
1392 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
1393 | "shasum": ""
1394 | },
1395 | "require": {
1396 | "php": ">=7.3",
1397 | "sebastian/recursion-context": "^4.0"
1398 | },
1399 | "require-dev": {
1400 | "ext-mbstring": "*",
1401 | "phpunit/phpunit": "^9.3"
1402 | },
1403 | "type": "library",
1404 | "extra": {
1405 | "branch-alias": {
1406 | "dev-master": "4.0-dev"
1407 | }
1408 | },
1409 | "autoload": {
1410 | "classmap": [
1411 | "src/"
1412 | ]
1413 | },
1414 | "notification-url": "https://packagist.org/downloads/",
1415 | "license": [
1416 | "BSD-3-Clause"
1417 | ],
1418 | "authors": [
1419 | {
1420 | "name": "Sebastian Bergmann",
1421 | "email": "sebastian@phpunit.de"
1422 | },
1423 | {
1424 | "name": "Jeff Welch",
1425 | "email": "whatthejeff@gmail.com"
1426 | },
1427 | {
1428 | "name": "Volker Dusch",
1429 | "email": "github@wallbash.com"
1430 | },
1431 | {
1432 | "name": "Adam Harvey",
1433 | "email": "aharvey@php.net"
1434 | },
1435 | {
1436 | "name": "Bernhard Schussek",
1437 | "email": "bschussek@gmail.com"
1438 | }
1439 | ],
1440 | "description": "Provides the functionality to export PHP variables for visualization",
1441 | "homepage": "https://www.github.com/sebastianbergmann/exporter",
1442 | "keywords": [
1443 | "export",
1444 | "exporter"
1445 | ],
1446 | "support": {
1447 | "issues": "https://github.com/sebastianbergmann/exporter/issues",
1448 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
1449 | },
1450 | "funding": [
1451 | {
1452 | "url": "https://github.com/sebastianbergmann",
1453 | "type": "github"
1454 | }
1455 | ],
1456 | "time": "2021-11-11T14:18:36+00:00"
1457 | },
1458 | {
1459 | "name": "sebastian/global-state",
1460 | "version": "5.0.5",
1461 | "source": {
1462 | "type": "git",
1463 | "url": "https://github.com/sebastianbergmann/global-state.git",
1464 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
1465 | },
1466 | "dist": {
1467 | "type": "zip",
1468 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
1469 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
1470 | "shasum": ""
1471 | },
1472 | "require": {
1473 | "php": ">=7.3",
1474 | "sebastian/object-reflector": "^2.0",
1475 | "sebastian/recursion-context": "^4.0"
1476 | },
1477 | "require-dev": {
1478 | "ext-dom": "*",
1479 | "phpunit/phpunit": "^9.3"
1480 | },
1481 | "suggest": {
1482 | "ext-uopz": "*"
1483 | },
1484 | "type": "library",
1485 | "extra": {
1486 | "branch-alias": {
1487 | "dev-master": "5.0-dev"
1488 | }
1489 | },
1490 | "autoload": {
1491 | "classmap": [
1492 | "src/"
1493 | ]
1494 | },
1495 | "notification-url": "https://packagist.org/downloads/",
1496 | "license": [
1497 | "BSD-3-Clause"
1498 | ],
1499 | "authors": [
1500 | {
1501 | "name": "Sebastian Bergmann",
1502 | "email": "sebastian@phpunit.de"
1503 | }
1504 | ],
1505 | "description": "Snapshotting of global state",
1506 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
1507 | "keywords": [
1508 | "global state"
1509 | ],
1510 | "support": {
1511 | "issues": "https://github.com/sebastianbergmann/global-state/issues",
1512 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
1513 | },
1514 | "funding": [
1515 | {
1516 | "url": "https://github.com/sebastianbergmann",
1517 | "type": "github"
1518 | }
1519 | ],
1520 | "time": "2022-02-14T08:28:10+00:00"
1521 | },
1522 | {
1523 | "name": "sebastian/lines-of-code",
1524 | "version": "1.0.3",
1525 | "source": {
1526 | "type": "git",
1527 | "url": "https://github.com/sebastianbergmann/lines-of-code.git",
1528 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
1529 | },
1530 | "dist": {
1531 | "type": "zip",
1532 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
1533 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
1534 | "shasum": ""
1535 | },
1536 | "require": {
1537 | "nikic/php-parser": "^4.6",
1538 | "php": ">=7.3"
1539 | },
1540 | "require-dev": {
1541 | "phpunit/phpunit": "^9.3"
1542 | },
1543 | "type": "library",
1544 | "extra": {
1545 | "branch-alias": {
1546 | "dev-master": "1.0-dev"
1547 | }
1548 | },
1549 | "autoload": {
1550 | "classmap": [
1551 | "src/"
1552 | ]
1553 | },
1554 | "notification-url": "https://packagist.org/downloads/",
1555 | "license": [
1556 | "BSD-3-Clause"
1557 | ],
1558 | "authors": [
1559 | {
1560 | "name": "Sebastian Bergmann",
1561 | "email": "sebastian@phpunit.de",
1562 | "role": "lead"
1563 | }
1564 | ],
1565 | "description": "Library for counting the lines of code in PHP source code",
1566 | "homepage": "https://github.com/sebastianbergmann/lines-of-code",
1567 | "support": {
1568 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
1569 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
1570 | },
1571 | "funding": [
1572 | {
1573 | "url": "https://github.com/sebastianbergmann",
1574 | "type": "github"
1575 | }
1576 | ],
1577 | "time": "2020-11-28T06:42:11+00:00"
1578 | },
1579 | {
1580 | "name": "sebastian/object-enumerator",
1581 | "version": "4.0.4",
1582 | "source": {
1583 | "type": "git",
1584 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
1585 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
1586 | },
1587 | "dist": {
1588 | "type": "zip",
1589 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
1590 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
1591 | "shasum": ""
1592 | },
1593 | "require": {
1594 | "php": ">=7.3",
1595 | "sebastian/object-reflector": "^2.0",
1596 | "sebastian/recursion-context": "^4.0"
1597 | },
1598 | "require-dev": {
1599 | "phpunit/phpunit": "^9.3"
1600 | },
1601 | "type": "library",
1602 | "extra": {
1603 | "branch-alias": {
1604 | "dev-master": "4.0-dev"
1605 | }
1606 | },
1607 | "autoload": {
1608 | "classmap": [
1609 | "src/"
1610 | ]
1611 | },
1612 | "notification-url": "https://packagist.org/downloads/",
1613 | "license": [
1614 | "BSD-3-Clause"
1615 | ],
1616 | "authors": [
1617 | {
1618 | "name": "Sebastian Bergmann",
1619 | "email": "sebastian@phpunit.de"
1620 | }
1621 | ],
1622 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
1623 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
1624 | "support": {
1625 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
1626 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
1627 | },
1628 | "funding": [
1629 | {
1630 | "url": "https://github.com/sebastianbergmann",
1631 | "type": "github"
1632 | }
1633 | ],
1634 | "time": "2020-10-26T13:12:34+00:00"
1635 | },
1636 | {
1637 | "name": "sebastian/object-reflector",
1638 | "version": "2.0.4",
1639 | "source": {
1640 | "type": "git",
1641 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
1642 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
1643 | },
1644 | "dist": {
1645 | "type": "zip",
1646 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
1647 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
1648 | "shasum": ""
1649 | },
1650 | "require": {
1651 | "php": ">=7.3"
1652 | },
1653 | "require-dev": {
1654 | "phpunit/phpunit": "^9.3"
1655 | },
1656 | "type": "library",
1657 | "extra": {
1658 | "branch-alias": {
1659 | "dev-master": "2.0-dev"
1660 | }
1661 | },
1662 | "autoload": {
1663 | "classmap": [
1664 | "src/"
1665 | ]
1666 | },
1667 | "notification-url": "https://packagist.org/downloads/",
1668 | "license": [
1669 | "BSD-3-Clause"
1670 | ],
1671 | "authors": [
1672 | {
1673 | "name": "Sebastian Bergmann",
1674 | "email": "sebastian@phpunit.de"
1675 | }
1676 | ],
1677 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
1678 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
1679 | "support": {
1680 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
1681 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
1682 | },
1683 | "funding": [
1684 | {
1685 | "url": "https://github.com/sebastianbergmann",
1686 | "type": "github"
1687 | }
1688 | ],
1689 | "time": "2020-10-26T13:14:26+00:00"
1690 | },
1691 | {
1692 | "name": "sebastian/recursion-context",
1693 | "version": "4.0.4",
1694 | "source": {
1695 | "type": "git",
1696 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
1697 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
1698 | },
1699 | "dist": {
1700 | "type": "zip",
1701 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
1702 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
1703 | "shasum": ""
1704 | },
1705 | "require": {
1706 | "php": ">=7.3"
1707 | },
1708 | "require-dev": {
1709 | "phpunit/phpunit": "^9.3"
1710 | },
1711 | "type": "library",
1712 | "extra": {
1713 | "branch-alias": {
1714 | "dev-master": "4.0-dev"
1715 | }
1716 | },
1717 | "autoload": {
1718 | "classmap": [
1719 | "src/"
1720 | ]
1721 | },
1722 | "notification-url": "https://packagist.org/downloads/",
1723 | "license": [
1724 | "BSD-3-Clause"
1725 | ],
1726 | "authors": [
1727 | {
1728 | "name": "Sebastian Bergmann",
1729 | "email": "sebastian@phpunit.de"
1730 | },
1731 | {
1732 | "name": "Jeff Welch",
1733 | "email": "whatthejeff@gmail.com"
1734 | },
1735 | {
1736 | "name": "Adam Harvey",
1737 | "email": "aharvey@php.net"
1738 | }
1739 | ],
1740 | "description": "Provides functionality to recursively process PHP variables",
1741 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1742 | "support": {
1743 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
1744 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
1745 | },
1746 | "funding": [
1747 | {
1748 | "url": "https://github.com/sebastianbergmann",
1749 | "type": "github"
1750 | }
1751 | ],
1752 | "time": "2020-10-26T13:17:30+00:00"
1753 | },
1754 | {
1755 | "name": "sebastian/resource-operations",
1756 | "version": "3.0.3",
1757 | "source": {
1758 | "type": "git",
1759 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
1760 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
1761 | },
1762 | "dist": {
1763 | "type": "zip",
1764 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
1765 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
1766 | "shasum": ""
1767 | },
1768 | "require": {
1769 | "php": ">=7.3"
1770 | },
1771 | "require-dev": {
1772 | "phpunit/phpunit": "^9.0"
1773 | },
1774 | "type": "library",
1775 | "extra": {
1776 | "branch-alias": {
1777 | "dev-master": "3.0-dev"
1778 | }
1779 | },
1780 | "autoload": {
1781 | "classmap": [
1782 | "src/"
1783 | ]
1784 | },
1785 | "notification-url": "https://packagist.org/downloads/",
1786 | "license": [
1787 | "BSD-3-Clause"
1788 | ],
1789 | "authors": [
1790 | {
1791 | "name": "Sebastian Bergmann",
1792 | "email": "sebastian@phpunit.de"
1793 | }
1794 | ],
1795 | "description": "Provides a list of PHP built-in functions that operate on resources",
1796 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
1797 | "support": {
1798 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
1799 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
1800 | },
1801 | "funding": [
1802 | {
1803 | "url": "https://github.com/sebastianbergmann",
1804 | "type": "github"
1805 | }
1806 | ],
1807 | "time": "2020-09-28T06:45:17+00:00"
1808 | },
1809 | {
1810 | "name": "sebastian/type",
1811 | "version": "3.0.0",
1812 | "source": {
1813 | "type": "git",
1814 | "url": "https://github.com/sebastianbergmann/type.git",
1815 | "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
1816 | },
1817 | "dist": {
1818 | "type": "zip",
1819 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
1820 | "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
1821 | "shasum": ""
1822 | },
1823 | "require": {
1824 | "php": ">=7.3"
1825 | },
1826 | "require-dev": {
1827 | "phpunit/phpunit": "^9.5"
1828 | },
1829 | "type": "library",
1830 | "extra": {
1831 | "branch-alias": {
1832 | "dev-master": "3.0-dev"
1833 | }
1834 | },
1835 | "autoload": {
1836 | "classmap": [
1837 | "src/"
1838 | ]
1839 | },
1840 | "notification-url": "https://packagist.org/downloads/",
1841 | "license": [
1842 | "BSD-3-Clause"
1843 | ],
1844 | "authors": [
1845 | {
1846 | "name": "Sebastian Bergmann",
1847 | "email": "sebastian@phpunit.de",
1848 | "role": "lead"
1849 | }
1850 | ],
1851 | "description": "Collection of value objects that represent the types of the PHP type system",
1852 | "homepage": "https://github.com/sebastianbergmann/type",
1853 | "support": {
1854 | "issues": "https://github.com/sebastianbergmann/type/issues",
1855 | "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
1856 | },
1857 | "funding": [
1858 | {
1859 | "url": "https://github.com/sebastianbergmann",
1860 | "type": "github"
1861 | }
1862 | ],
1863 | "time": "2022-03-15T09:54:48+00:00"
1864 | },
1865 | {
1866 | "name": "sebastian/version",
1867 | "version": "3.0.2",
1868 | "source": {
1869 | "type": "git",
1870 | "url": "https://github.com/sebastianbergmann/version.git",
1871 | "reference": "c6c1022351a901512170118436c764e473f6de8c"
1872 | },
1873 | "dist": {
1874 | "type": "zip",
1875 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
1876 | "reference": "c6c1022351a901512170118436c764e473f6de8c",
1877 | "shasum": ""
1878 | },
1879 | "require": {
1880 | "php": ">=7.3"
1881 | },
1882 | "type": "library",
1883 | "extra": {
1884 | "branch-alias": {
1885 | "dev-master": "3.0-dev"
1886 | }
1887 | },
1888 | "autoload": {
1889 | "classmap": [
1890 | "src/"
1891 | ]
1892 | },
1893 | "notification-url": "https://packagist.org/downloads/",
1894 | "license": [
1895 | "BSD-3-Clause"
1896 | ],
1897 | "authors": [
1898 | {
1899 | "name": "Sebastian Bergmann",
1900 | "email": "sebastian@phpunit.de",
1901 | "role": "lead"
1902 | }
1903 | ],
1904 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
1905 | "homepage": "https://github.com/sebastianbergmann/version",
1906 | "support": {
1907 | "issues": "https://github.com/sebastianbergmann/version/issues",
1908 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
1909 | },
1910 | "funding": [
1911 | {
1912 | "url": "https://github.com/sebastianbergmann",
1913 | "type": "github"
1914 | }
1915 | ],
1916 | "time": "2020-09-28T06:39:44+00:00"
1917 | },
1918 | {
1919 | "name": "symfony/polyfill-ctype",
1920 | "version": "v1.25.0",
1921 | "source": {
1922 | "type": "git",
1923 | "url": "https://github.com/symfony/polyfill-ctype.git",
1924 | "reference": "30885182c981ab175d4d034db0f6f469898070ab"
1925 | },
1926 | "dist": {
1927 | "type": "zip",
1928 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
1929 | "reference": "30885182c981ab175d4d034db0f6f469898070ab",
1930 | "shasum": ""
1931 | },
1932 | "require": {
1933 | "php": ">=7.1"
1934 | },
1935 | "provide": {
1936 | "ext-ctype": "*"
1937 | },
1938 | "suggest": {
1939 | "ext-ctype": "For best performance"
1940 | },
1941 | "type": "library",
1942 | "extra": {
1943 | "branch-alias": {
1944 | "dev-main": "1.23-dev"
1945 | },
1946 | "thanks": {
1947 | "name": "symfony/polyfill",
1948 | "url": "https://github.com/symfony/polyfill"
1949 | }
1950 | },
1951 | "autoload": {
1952 | "files": [
1953 | "bootstrap.php"
1954 | ],
1955 | "psr-4": {
1956 | "Symfony\\Polyfill\\Ctype\\": ""
1957 | }
1958 | },
1959 | "notification-url": "https://packagist.org/downloads/",
1960 | "license": [
1961 | "MIT"
1962 | ],
1963 | "authors": [
1964 | {
1965 | "name": "Gert de Pagter",
1966 | "email": "BackEndTea@gmail.com"
1967 | },
1968 | {
1969 | "name": "Symfony Community",
1970 | "homepage": "https://symfony.com/contributors"
1971 | }
1972 | ],
1973 | "description": "Symfony polyfill for ctype functions",
1974 | "homepage": "https://symfony.com",
1975 | "keywords": [
1976 | "compatibility",
1977 | "ctype",
1978 | "polyfill",
1979 | "portable"
1980 | ],
1981 | "support": {
1982 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
1983 | },
1984 | "funding": [
1985 | {
1986 | "url": "https://symfony.com/sponsor",
1987 | "type": "custom"
1988 | },
1989 | {
1990 | "url": "https://github.com/fabpot",
1991 | "type": "github"
1992 | },
1993 | {
1994 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1995 | "type": "tidelift"
1996 | }
1997 | ],
1998 | "time": "2021-10-20T20:35:02+00:00"
1999 | },
2000 | {
2001 | "name": "theseer/tokenizer",
2002 | "version": "1.2.1",
2003 | "source": {
2004 | "type": "git",
2005 | "url": "https://github.com/theseer/tokenizer.git",
2006 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
2007 | },
2008 | "dist": {
2009 | "type": "zip",
2010 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
2011 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
2012 | "shasum": ""
2013 | },
2014 | "require": {
2015 | "ext-dom": "*",
2016 | "ext-tokenizer": "*",
2017 | "ext-xmlwriter": "*",
2018 | "php": "^7.2 || ^8.0"
2019 | },
2020 | "type": "library",
2021 | "autoload": {
2022 | "classmap": [
2023 | "src/"
2024 | ]
2025 | },
2026 | "notification-url": "https://packagist.org/downloads/",
2027 | "license": [
2028 | "BSD-3-Clause"
2029 | ],
2030 | "authors": [
2031 | {
2032 | "name": "Arne Blankerts",
2033 | "email": "arne@blankerts.de",
2034 | "role": "Developer"
2035 | }
2036 | ],
2037 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2038 | "support": {
2039 | "issues": "https://github.com/theseer/tokenizer/issues",
2040 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
2041 | },
2042 | "funding": [
2043 | {
2044 | "url": "https://github.com/theseer",
2045 | "type": "github"
2046 | }
2047 | ],
2048 | "time": "2021-07-28T10:34:58+00:00"
2049 | },
2050 | {
2051 | "name": "webmozart/assert",
2052 | "version": "1.10.0",
2053 | "source": {
2054 | "type": "git",
2055 | "url": "https://github.com/webmozarts/assert.git",
2056 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
2057 | },
2058 | "dist": {
2059 | "type": "zip",
2060 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
2061 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
2062 | "shasum": ""
2063 | },
2064 | "require": {
2065 | "php": "^7.2 || ^8.0",
2066 | "symfony/polyfill-ctype": "^1.8"
2067 | },
2068 | "conflict": {
2069 | "phpstan/phpstan": "<0.12.20",
2070 | "vimeo/psalm": "<4.6.1 || 4.6.2"
2071 | },
2072 | "require-dev": {
2073 | "phpunit/phpunit": "^8.5.13"
2074 | },
2075 | "type": "library",
2076 | "extra": {
2077 | "branch-alias": {
2078 | "dev-master": "1.10-dev"
2079 | }
2080 | },
2081 | "autoload": {
2082 | "psr-4": {
2083 | "Webmozart\\Assert\\": "src/"
2084 | }
2085 | },
2086 | "notification-url": "https://packagist.org/downloads/",
2087 | "license": [
2088 | "MIT"
2089 | ],
2090 | "authors": [
2091 | {
2092 | "name": "Bernhard Schussek",
2093 | "email": "bschussek@gmail.com"
2094 | }
2095 | ],
2096 | "description": "Assertions to validate method input/output with nice error messages.",
2097 | "keywords": [
2098 | "assert",
2099 | "check",
2100 | "validate"
2101 | ],
2102 | "support": {
2103 | "issues": "https://github.com/webmozarts/assert/issues",
2104 | "source": "https://github.com/webmozarts/assert/tree/1.10.0"
2105 | },
2106 | "time": "2021-03-09T10:59:23+00:00"
2107 | }
2108 | ],
2109 | "aliases": [],
2110 | "minimum-stability": "dev",
2111 | "stability-flags": [],
2112 | "prefer-stable": true,
2113 | "prefer-lowest": false,
2114 | "platform": {
2115 | "php": ">=7.3"
2116 | },
2117 | "platform-dev": [],
2118 | "plugin-api-version": "2.3.0"
2119 | }
2120 |
--------------------------------------------------------------------------------
/phpcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 | Coding Standards
11 |
12 |
20 | src
21 |
22 |
28 | */tests/*
29 |
30 |
38 |
39 |
40 |
41 |
42 |
46 |
47 |
48 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ./src
6 |
7 |
8 |
9 |
10 | ./tests/
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/Bayes.php:
--------------------------------------------------------------------------------
1 | options = $options;
93 | $this->reset();
94 | }
95 |
96 | /**
97 | * Identify the category of the provided text parameter.
98 | *
99 | * @param string $text
100 | * @return string the category or null
101 | */
102 | public function categorize($text)
103 | {
104 | $that = $this;
105 | $maxProbability = -INF;
106 | $chosenCategory = null;
107 |
108 | if ($that->totalDocuments > 0) {
109 | $probabilities = $that->probabilities($text);
110 |
111 | // iterate thru our categories to find the one with max probability
112 | // for this text
113 | foreach ($probabilities as $category => $logProbability) {
114 | if ($logProbability > $maxProbability) {
115 | $maxProbability = $logProbability;
116 | $chosenCategory = $category;
117 | }
118 | }
119 | }
120 |
121 | return $chosenCategory;
122 | }
123 |
124 | /**
125 | * Build a frequency hashmap where
126 | * - the keys are the entries in `tokens`
127 | * - the values are the frequency of each entry in `tokens`
128 | *
129 | * @param array $tokens array of string
130 | * @return array hashmap of token frequency
131 | */
132 | public function frequencyTable($tokens)
133 | {
134 | $frequencyTable = [];
135 | foreach ($tokens as $token) {
136 | if (!isset($frequencyTable[$token])) {
137 | $frequencyTable[$token] = 1;
138 | } else {
139 | $frequencyTable[$token]++;
140 | }
141 | }
142 |
143 | return $frequencyTable;
144 | }
145 |
146 | /**
147 | * Deserialize from json
148 | *
149 | * @param object $json string or array
150 | * @return Bayes
151 | */
152 | public function fromJson($json)
153 | {
154 | $result = $json;
155 |
156 | // deserialize from json
157 | if (is_string($json)) {
158 | $result = json_decode($json, true);
159 | }
160 |
161 | $this->reset();
162 |
163 | // deserialize from json
164 | foreach ($this->STATE_KEYS as $k) {
165 | if (isset($result[$k])) {
166 | $this->{$k} = $result[$k];
167 | }
168 | }
169 |
170 | return $this;
171 | }
172 |
173 | /**
174 | * Make sure the category exists in dictionary
175 | *
176 | * @param string $categoryName
177 | * @return Bayes
178 | */
179 | public function initializeCategory($categoryName)
180 | {
181 | if (!isset($this->categories[$categoryName])) {
182 | $this->docCount[$categoryName] = 0;
183 | $this->wordCount[$categoryName] = 0;
184 | $this->wordFrequencyCount[$categoryName] = [];
185 | $this->categories[$categoryName] = true;
186 | }
187 |
188 | return $this;
189 | }
190 |
191 | /**
192 | * Teach your classifier
193 | *
194 | * @param string $text
195 | * @param string $category
196 | * @return Bayes
197 | */
198 | public function learn($text, $category)
199 | {
200 | $that = $this;
201 |
202 | // initialize category data structures if we've never seen this category
203 | $that->initializeCategory($category);
204 |
205 | // update our count of how many documents mapped to this category
206 | $that->docCount[$category]++;
207 |
208 | // update the total number of documents we have learned from
209 | $that->totalDocuments++;
210 |
211 | // normalize the text into a word array
212 | $tokens = ($that->tokenizer)($text);
213 |
214 | // get a frequency count for each token in the text
215 | $frequencyTable = $that->frequencyTable($tokens);
216 |
217 | // Update vocabulary and word frequency count for this category
218 | foreach ($frequencyTable as $token => $frequencyInText) {
219 | // add this word to our vocabulary if not already existing
220 | if (!isset($that->vocabulary[$token])) {
221 | $that->vocabulary[$token] = true;
222 | $that->vocabularySize++;
223 | }
224 |
225 | // update the frequency information for this word in this category
226 | if (!isset($that->wordFrequencyCount[$category][$token])) {
227 | $that->wordFrequencyCount[$category][$token] = $frequencyInText;
228 | } else {
229 | $that->wordFrequencyCount[$category][$token] += $frequencyInText;
230 | }
231 |
232 | // update the count of all words we have seen mapped to this category
233 | $that->wordCount[$category] += $frequencyInText;
234 | }
235 |
236 | return $that;
237 | }
238 |
239 | /**
240 | * Extract the probabilities for each known category
241 | *
242 | * @param string $text
243 | * @return array probabilities by category or null
244 | */
245 | public function probabilities($text)
246 | {
247 | $that = $this;
248 | $probabilities = [];
249 |
250 | if ($that->totalDocuments > 0) {
251 | $tokens = ($that->tokenizer)($text);
252 | $frequencyTable = $that->frequencyTable($tokens);
253 |
254 | // for this text
255 | // iterate thru our categories to find the one with max probability
256 | foreach ($that->categories as $category => $value) {
257 | $categoryProbability = $that->docCount[$category] / $that->totalDocuments;
258 | $logProbability = log($categoryProbability);
259 | foreach ($frequencyTable as $token => $frequencyInText) {
260 | $tokenProbability = $that->tokenProbability($token, $category);
261 |
262 | // determine the log of the P( w | c ) for this word
263 | $logProbability += $frequencyInText * log($tokenProbability);
264 | }
265 |
266 | $probabilities[$category] = $logProbability;
267 | }
268 | }
269 |
270 | return $probabilities;
271 | }
272 |
273 | /**
274 | * Reset the bayes class
275 | *
276 | * @return Bayes
277 | */
278 | public function reset()
279 | {
280 | if (!$this->options) {
281 | $this->options = [];
282 | }
283 |
284 | // set default tokenizer
285 | $this->tokenizer = function ($text) {
286 | // convert everything to lowercase
287 | $text = mb_strtolower($text);
288 |
289 | // split the words
290 | preg_match_all('/[[:alpha:]]+/u', $text, $matches);
291 |
292 | // first match list of words
293 |
294 | return $matches[0];
295 | };
296 |
297 | if (isset($this->options['tokenizer'])) {
298 | $this->tokenizer = $this->options['tokenizer'];
299 | }
300 |
301 | $this->categories = [];
302 | $this->docCount = [];
303 | $this->totalDocuments = 0;
304 | $this->vocabulary = [];
305 | $this->vocabularySize = 0;
306 | $this->wordCount = [];
307 | $this->wordFrequencyCount = [];
308 |
309 | return $this;
310 | }
311 |
312 | /**
313 | * Serialize to json
314 | *
315 | * @return string the json string
316 | */
317 | public function toJson()
318 | {
319 | $result = [];
320 |
321 | // serialize to json
322 | foreach ($this->STATE_KEYS as $k) {
323 | $result[$k] = $this->{$k};
324 | }
325 |
326 | return json_encode($result);
327 | }
328 |
329 | /**
330 | * Calculate the probability that a `token` belongs to a `category`
331 | *
332 | * @param string $token
333 | * @param string $category
334 | * @return number the probability
335 | */
336 | public function tokenProbability($token, $category)
337 | {
338 | // how many times this word has occurred in documents mapped to this category
339 | $wordFrequencyCount = 0;
340 | if (isset($this->wordFrequencyCount[$category][$token])) {
341 | $wordFrequencyCount = $this->wordFrequencyCount[$category][$token];
342 | }
343 |
344 | // what is the count of all words that have ever been mapped to this category
345 | $wordCount = $this->wordCount[$category];
346 |
347 | // use laplace Add-1 Smoothing equation
348 |
349 | return ($wordFrequencyCount + 1) / ($wordCount + $this->vocabularySize);
350 | }
351 | }
352 |
--------------------------------------------------------------------------------