├── 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 | --------------------------------------------------------------------------------