You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2026/06/02 12:37:15 UTC
(tinkerpop) branch TINKERPOP-3158 updated (63173b1300 -> 53a5eb8899)
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a change to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
discard 63173b1300 distance calc and search by embedded
discard 5ef7429af5 tx working with vector on commit
discard c9eb7e8fa1 Resize index
discard 6b0300338f docs and imports
discard 2c178e9144 Add ServiceRegistry for vector search with call()
discard 4928c66999 return distances with element
discard b9fbce8977 vector search in transaction graph
discard f689f8ddf2 Intro vector search via HNSW
add ddef305a7d CTR Update to 4.0.0-SNAPSHOT
add 16d8dc02fc CTR fix Gremlin.version() test
add 8d8fe70324 Merge branch '3.7-dev'
add 016ff380eb Merge branch '3.7-dev'
add 9661646e97 Merge branch '3.7-dev'
add e37a94698b Merge branch '3.7-dev'
add 4a82e5b9f4 Update Dev and Future docs for 4.0.x development (#2313)
add fa8a122344 Merge branch '3.7-dev'
add a2f0ece49e Merge branch '3.7-dev'
add df24c45e96 Merge branch '3.7-dev'
add 35ac4963f7 Merge branch '3.7-dev'
add 1e9e18d5d8 Merge branch '3.7-dev'
add 648e26e898 Merge branch '3.6-dev'
add a6acd2889a Merge branch '3.7-dev'
add 670dc224bf Merge branch '3.7-dev'
add 8c755b0773 Merge branch '3.7-dev'
add d984b061b6 Add support for deserializing to set in gremlin-javascript.
add e266dd96b8 Merge pull request #2280
add 1954396171 Merge branch '3.7-dev'
add 2c300f642f Merge branch '3.7-dev'
add f045b92794 Merge branch '3.7-dev'
add b19b5b251a Merge branch '3.7-dev'
add a74410e126 Merge branch '3.7-dev'
add 338b5bde44 Merge branch '3.7-dev'
add 5d32698542 Merge branch '3.7-dev'
add a975ec636c Merge branch '3.7-dev'
add 5656aff5f8 CTR TINKERPOP-2991 for 4.x
add e65dcb9358 Bump prettier from 3.0.1 to 3.1.0 in /docs/gremlint (#2340)
add d8320d05c2 Bump @types/node from 20.8.7 to 20.9.0 in /docs/gremlint (#2333)
add 15e1c1b22c Merge branch '3.7-dev'
add 846761004e [TINKERPOP-2877] Added integer overflow checks (#2344)
add 29e2be5e8f Merge branch '3.7-dev'
add bbe22cf3d9 Merge branch '3.7-dev'
add b962403f98 Merge branch '3.7-dev'
add e077b86daa Merge branch '3.7-dev'
add 39de4eff1a CTR Retarget dependabot to 3.6-dev
add d0648caeaa CTR Fix build failure from merge of TINKERPOP-2830
add c0439b21ba Merge branch '3.7-dev'
add 49e7ce956c Merge branch '3.7-dev'
add 6d17c674c8 Merge branch '3.7-dev'
add e0f6ada5c8 Merge branch '3.7-dev'
add 133eb47702 TINKERPOP-3017 Added AnonymousTraversalSource.with()
add 095718617e Merge pull request #2366 from apache/TINKERPOP-3017
add b3adfafa95 TINKERPOP-2981 Removed deprecated code around AbstractAuthenticationHandler CTR
add d484001b44 CTR update website for 3.5.8/3.6.6/3.7.1 release
add 0d98e809fb Merge branch '3.7-dev'
add 0e05ffb266 Merge branch '3.7-dev'
add 73325c3ac2 Merge branch '3.7-dev'
add f4cffb87b6 Bump @types/node from 20.9.0 to 20.10.3 in /docs/gremlint (#2374)
add 4eb89c3551 Bump gh-pages from 6.0.0 to 6.1.0 in /docs/gremlint (#2356)
add 73ee22f0cf Merge branch '3.7-dev'
add a5ffbebb52 Merge branch '3.7-dev'
add 6493d68dc9 Merge branch '3.7-dev'
add 93bada28ea Merge branch '3.7-dev'
add 84d6247180 Merge branch '3.7-dev'
add 89d43790c4 fix .net test CTR
add 95787a2c30 Merge branch '3.7-dev'
add e8a61e0273 Bump compile-testing to 0.21.0 CTR
add ebbcf32a9a Merge branch '3.7-dev'
add a45ea15808 Merge branch '3.7-dev'
add 39b0728462 Merge branch '3.7-dev'
add bad6cb29fc Merge branch '3.7-dev'
add 442a3acd39 Merge branch '3.7-dev'
add 95405bc138 Bumped to commons-collections4 CTR
add cabf821f0f Fixed broken dependency for neo4j CTR
add 5ec257f5ea Merge branch '3.7-dev'
add 0cd78443b3 Merge branch '3.7-dev'
add 6405e102ae CTR fix python test failure
add 0d43110833 Merge branch '3.7-dev'
add 307ebbcbcd CTR Update examples to use new with() syntax when creating g
add fdf8ee5227 Merge branch '3.7-dev'
add 7740cb1527 Merge branch '3.7-dev'
add 7f35052834 CTR add a few new gremlin pictures
add ffc6f2209a Merge branch '3.7-dev'
add 76b29896e9 Revert "CTR Update examples to use new with() syntax when creating g"
add 45fe5d0349 Merge branch '3.7-dev'
add 87aa30f1ce Merge branch '3.7-dev'
add 403a2404e9 Merge branch '3.7-dev'
add 54e58bec6d Merge branch '3.7-dev'
add 3f37c0ff99 Merge branch '3.7-dev'
add dc5b190ec3 Merge branch '3.7-dev'
add 62a3935152 Replace `none()` with `discard()` (#2377)
add e8b9532fc0 Implement list filtering `none()` step (#2385)
add a7781f56be CTR docs/gremlint dependabots
add a056d082cf Merge branch '3.7-dev'
add 26ae70807e Merge branch '3.7-dev'
add e1dacc3024 Merge branch '3.7-dev'
add ef7ade2fdd Merge branch '3.7-dev'
add 69c99146c3 Merge branch '3.7-dev'
add 5760f1cdd4 Merge branch '3.7-dev'
add b8da3cd40e Merge branch '3.7-dev'
add 8bfdf50778 Merge branch '3.7-dev'
add 6d99fca4bc Merge branch '3.7-dev'
add 936258e052 Regenerate tests after merge CTR
add 573ff8e8bd Merge branch '3.7-dev'
add c32d0cdf4c Merge branch '3.7-dev'
add 963bece33c Loosen error message validation a bit by ignoring case.
add b282194056 Merge branch '3.7-dev'
add b837fc7eb2 Merge branch '3.7-dev'
add fae51e87e7 Merge branch '3.7-dev'
add 55a7b7f256 Merge branch '3.7-dev'
add c56e91738a Merge branch '3.7-dev'
add 9c9266b350 Bump org.codehaus.mojo:exec-maven-plugin from 1.2.1 to 3.1.1
add 2d9fabf3bc Merge branch 'pr-2353'
add 2d32517b3b Merge branch '3.7-dev'
add 9c1c9fa033 Merge branch '3.7-dev'
add 546d219c6d Merge branch '3.7-dev'
add a8b6b1bf96 Merge branch '3.7-dev'
add 2370cfca18 TINKERPOP-2862 Added withoutStrategies syntax to grammar
add 8e8d7f16a1 Merge pull request #2483 from apache/TINKERPOP-2862
add d3d971b0d6 Merge branch '3.7-dev'
add ada49fa41d Merge branch '3.7-dev'
add a8f90ea959 Remove gremlin-archetype (#2486)
add 98236ba70a Squash of 3 docs/gremlint dependabots
add 83e66fdc5a Merge branch '3.7-dev'
add 77e4f71647 Merge branch '3.7-dev'
add 03e9f24f06 Merge branch '3.7-dev'
add d52b0b1217 Merge branch '3.7-dev'
add 615027de37 Merge branch '3.7-dev'
add f3c551f538 Merge branch '3.7-dev'
add 6bd2c92f63 CTR add missing require to gremlin-js SetSerializer
add cc43fbf57a Merge branch '3.7-dev'
add bd5d4f77ad Merge branch '3.7-dev'
add 6c01291d06 Merge branch '3.7-dev'
add 0771f34afc Merge branch '3.7-dev'
add 3015f37043 TINKERPOP-3056 Consistently promoting matched/created edge/vertex
add 2dbdd31039 Merge branch '3.7-dev'
add 8b51edae3f Merge branch '3.7-dev'
add 5030f68d64 feat: TypeScript integration (#2515)
add 07c1c3ea61 Enabled withoutStrategies grammar tests CTR
add 4c3d048977 Merge branch '3.7-dev'
add b0c4a7d57f Disable LazyBarrierStrategy for failing JDK8 test (#2536)
add 72e825ddb1 Merge branch '3.7-dev'
add d174572f3f Merge branch '3.7-dev'
add 8c6998159e Merge branch '3.7-dev'
add 1d1efb9872 Merge branch '3.7-dev'
add d6e942d7c8 CTR js test fix
add c97e707249 Merge branch '3.7-dev'
add c85d92ac33 CTR update website for 3.6.7/3.7.2 release
add 054590c5df Merge branch '3.7-dev'
add ac40c74429 Merge branch '3.7-dev'
add d841b8c25d Merge branch '3.7-dev'
add e3ced38b21 Merge branch '3.7-dev'
add 8bb5d16acd Merge branch '3.7-dev'
add d333ed0212 Merge branch '3.7-dev'
add 82fe33939a Merge branch '3.7-dev'
add 66e5a47ffd Merge branch '3.7-dev'
add 9abcc918b9 Merge branch '3.7-dev'
add 459f32cfe3 Merge branch '3.7-dev'
add 5af9e42587 Merge branch '3.7-dev'
add 09f821f1ca Merge branch '3.7-dev'
add a12ae55e93 Merge branch '3.7-dev'
add 2bd81d6145 Merge branch '3.7-dev'
add cf6669a142 Merge branch '3.7-dev'
add a4adbde129 Merge branch '3.7-dev'
add 84d1005fb4 Merge branch '3.7-dev'
add 04eed23511 Merge branch '3.7-dev'
add bac6c3b570 Merge branch '3.7-dev'
add 3409f4aec8 Merge branch '3.7-dev'
add 71a2b2544e Merge branch '3.7-dev'
add def315086d Merge branch '3.7-dev'
add 2dd560b4e3 Merge branch '3.7-dev'
add 55aa78aa5d TINKERPOP-3028 Translators using grammar
add ef962b1dbd Merge pull request #2640 from apache/TINKERPOP-3028
add 75a32d6efd CTR minor docs update
add 89aa5dbbf1 Merge branch '3.7-dev'
add 580cfa146e CTR Squashed docs/gremlint dependabots
add ae9a5c42df Merge branch '3.7-dev'
add 8fc71d880d Merge branch '3.7-dev'
add 13cab682f4 Merge branch '3.7-dev'
add e84e749ef2 Merge branch '3.7-dev'
add af5fd86963 refactor: improve graph structures TypeScript definitions (#2599)
add bb4fccdb3a CTR add CHANGELOG entry for PR #2599
add 9bddde4be3 Merge branch '3.7-dev'
add 93674cd3c0 Merge branch '3.7-dev'
add 05078b8d47 TINKERPOP-3023 Addeed Set syntax in grammar
add a088008af8 Merge pull request #2662 from apache/TINKERPOP-3023
add 1af09242b3 Merge branch '3.7-dev'
add 9592a02587 Merge branch '3.7-dev'
add 2b3b743b0d Merge branch '3.7-dev'
add e9f6aac856 Merge branch '3.7-dev'
add 0835701409 Merge branch '3.7-dev'
add 38c05d80b8 Merge branch '3.7-dev'
add d8089a1d43 Merge branch '3.7-dev'
add e6e6e9beac Merge branch '3.7-dev'
add 14ce7be463 fix java feature test tag CTR
add f4b636ced2 Merge branch '3.7-dev'
add 2bfd44b97f Merge branch '3.7-dev'
add 5697d0735d Merge branch '3.7-dev'
add 93879c826d Merge branch '3.7-dev'
add 14604a563a Merge branch '3.7-dev'
add 418d049939 Merge branch '3.7-dev'
add cd07120f79 Merge remote-tracking branch 'origin/3.7-dev'
add 54926bdee0 Merge branch '3.7-dev'
add dafc54e4d9 Renamed steps around "merge" for better consistency.
add c1e07eb316 Merge pull request #2725 from apache/merge-rename
add b37e35cf47 TINKERPOP-3083 Change SplitGlobalStep and SplitLocalStep to use a new StringUtil.split utility method which will split the given string into a list of individual string characters if the given separator is an empty string. (#2741)
add fd040c94a6 Merge branch '3.7-dev'
add eec15c5c05 Merge branch '3.7-dev'
add a6ba1d97c3 Merge branch '3.7-dev'
add e49856e23c Merge branch '3.7-dev'
add a5a28f82f6 Merge branch '3.7-dev'
add d4b4486b76 Merge branch '3.7-dev'
add add365b6e0 Merge branch '3.7-dev'
add a99b58cc48 CTR fix serializer test failures from merging
add b4d62b2020 Merge branch '3.7-dev'
add 38b7a6b872 Merge branch '3.7-dev'
add b7c9ddda16 Merge branch '3.7-dev'
add dd41ffbe6b Merge branch '3.7-dev'
add 0a63d135e9 Merge branch '3.7-dev'
add a6777d0c83 Merge branch '3.7-dev'
add 537e1cc745 Merge branch '3.7-dev'
add f53903b02b Merge branch '3.7-dev'
add acd118134e Merge branch '3.7-dev'
add 6c43815561 TINKERPOP-3088 Retain lower common type for sum() global
add f8f791018d Merge pull request #2827 from apache/TINKERPOP-3088
add 443046c2f0 Bump gh-pages from 6.1.1 to 6.2.0 in /docs/gremlint (#2825)
add e59665d87c Bump @types/node from 20.14.2 to 22.7.5 in /docs/gremlint (#2815)
add 8bb5ddffa9 Bump @testing-library/jest-dom from 6.4.2 to 6.5.0 in /docs/gremlint (#2745)
add 23247e8421 Merge branch '3.7-dev'
add aefddd68e5 Merge branch '3.7-dev'
add e81d9abeaf CTR fix js translator tests after merge
add a0050ab9ea Merge branch '3.7-dev'
add fd529c6f50 CTR Fix python headers cannot accept list
add 2f756b6268 Bump github.com/nicksnyder/go-i18n/v2 from 2.4.0 to 2.4.1 in /gremlin-go (#2828)
add 47e6625f47 Bump Polly from 8.4.1 to 8.4.2 in /gremlin-dotnet (#2796)
add c8c425bc40 Bump xunit from 2.9.0 to 2.9.2 in /gremlin-dotnet (#2795)
add b882e6d18c Merge branch '3.7-dev'
add 342e9e717d Merge branch '3.7-dev'
add 62fb6d6ee6 Merge branch '3.7-dev'
add a87ebf2d52 fix flaky tests in ParametersTest (#2820)
add fbe7bd8ea1 Merge branch '3.7-dev'
add 49829884a5 Merge branch '3.7-dev'
add 8d3117e427 Merge branch '3.7-dev'
add 0c67e69057 Merge branch '3.7-dev'
add 148afd2ed0 Merge branch '3.7-dev'
add 7843e708df Merge branch '3.7-dev'
add 18046b69b2 CTR Update Site for 3.6.8/3.7.3 releases
add 8c78021dea Merge branch '3.7-dev'
add 02b8a8cc30 Enabled sack()/BigInteger/BigDecimal tests CTR
add aa327ace6f chore(gremlinpython): remove async_timeout for python 3.11 and newer (#2851)
add c2a04407a1 Merge branch '3.7-dev'
add 6fccb0df48 Revert "Merge branch '3.7-dev'"
add a06ac45626 Revert "Merge branch '3.7-dev'"
add 14ce65f208 Revert "Merge branch '3.7-dev'"
add 26cdee14da Revert "Merge branch '3.7-dev'"
add 4955947ffe Revert "Parallel Authentication Fix (#2551)"
add 0828b9d7b4 Add chunked transfer encoding to HTTP Channelizer.
add acf1d551a9 Remove the UnifiedChannelizer/UnifiedHandler and associated classes.
add 947ba1a846 draft for GraphSON4 and GraphBinary streaming draft (#2531)
add f2b845095b Add HTTP request checker and return error for non-POST requests
add 9e9d2a7d5e requestmessage serde with graphson/graphbinary
add f72acf71ae Fixes for g when not present, test issues, incorrect streaming.
add 6518617717 streaming untyped graphson (#2535)
add 30b4a1bbee Remove the OpProcessors and related classes.
add b2a2015ecb Remove WebSockets from the server.
add 8940192900 HttpGremlinEndpointHandler cleanup (#2540)
add e485b0f228 Minimal changes to get gremlin-driver working with integration tests (#2543)
add 9e7711f58c Split HTTP endpoint into several handlers and update to use RequestMessageV4 (#2550)
add fb650f6267 draft java driver (#2557)
add 57e3a729f0 update response format (#2564)
add 5a339c2bc8 Introduce Netty handler for managing request IDs.
add 752749c13e Add back evaluationTimeout and materializeProperties
add e971d8eb49 Remove RequestId from RequestMessageV4 CTR
add bd0d1c1688 Renamed "evaluationTimeout" to "timeoutMs" in RequestMessageV4.
add ab62fd7cb9 http error handling (#2570)
add 9e79ef0121 ResponseStatusCode removal (#2572)
add 1bde8474b8 fix some tests (#2574)
add dfccae7c4b requestId removal (#2575)
add 0d55689129 Create MessageSerializerV4s and remove MessageSerializer. (#2576)
add 0fea708c9b Update IO tests to test MessageSerializerV4. (#2586)
add e5a4a40e44 Minor cleanup of items related to HTTP CTR.
add 1dca72c481 Remove user agent from HTTP request body.
add 410cbbc8c8 Replace message in trailers with exception CTR.
add d993d66c1a Remove CHUNKING_NOT_SUPPORTED state CTR.
add b50a8be4fa Revert GraphManager changes added in TINKERPOP-2806 CTR.
add 2703523a39 Change GraphSONv4 response to have message and exception for error responses only CTR
add c8501a5a30 connection pooling (#2582)
add 766c86a7db driver error handling (#2594)
add 96b4c9b13b Replace ResponseResult with ResponseResultV4. (#2595)
add 22e8d86291 Remove RequestId from RequestMessageV4 CTR.
add 0659cf5007 Fix incorrect ResponseMessage in TextPlainMessageSerializerV4Test CTR
add 0dcbb791c7 sigv4 auth client implementation (#2601)
add 31d7703f8c remove debugging info from client CTR
add a248f51c62 cleanup
add 0eecae5443 rename tokens CTR
add d07531cc28 rework remote console (#2611)
add fcee57bcb1 remove ConnectionHelper CTR
add bda0651d0f Re-enable certain tests and add fixes. (#2621)
add c450f2ad51 Fix gremlin-util tests CTR.
add 0a0fa481bc Re-enable and fix shouldBlowTheWorkQueueSize test CTR.
add 03af022dc7 Check for server pipelining CTR.
add b5de92d1b9 Prevent Java driver channel from being reused too early CTR.
add a1524baf02 Update console test to use line separator CTR
add 5a01c06654 Updated tests that depended on PARTIAL_CONTENT status CTR
add 074ca00b84 Bytecode removal from Java GLV (#2648)
add 4e37d292ae Fix GremlinLang clone.
add d471a563b0 fix tests after merge CTR
add bf7fc93f87 cleanup CTR
add 652e98395f Python driver basic connectivity to HTTP server (#2657)
add cc409dc7e3 Bytecode removal from server (#2661)
add 1a0b50334d Add support for HTTP content compression.
add acd4defdd3 Small updates after master rebase CTR.
add 2f1c99c7b1 Add support for HTTP chunked transfer in gremlin-python (#2686)
add 12cc3c830a cleanup for ResponseMessageV4 (#2698)
add e9f1c6ee5c Added Set handling to GremlinLang (#2705)
add 8aad0bc72a Bytecode removal in gremlin-python (#2702)
add 8dd090c7db Remove v4 suffix CTR
add 6d537134e4 implement pluggable auth in python with basic and sigv4 as reference (#2731)
add 580346aa6e update tests in docker and enable feature tests in gremlin-python over HTTP (#2756)
add 1b2e543c5f Update io Model to reflect v4 serialization types (#2758)
add 53e929b698 Fix console integration tests (#2759)
add 469172b5b7 CTR Disable github actions for Go, JS, and .Net
add 49c653b46d Java driver - renamed maxContentLength to maxResponseContentLength, changed int to long to allow for higher max value, increased default value to Integer.MAX_VALUE as the size check is now done against the total response size instead of previous web socket frame size, and changed zero to be acceptable value which disables the response size check. Gremlin server - renamed maxContentLength to maxRequestContentLength and updated documentation for clarity. (#2749)
add 181905cb53 Fixed failing GremlinServerSslIntegrateTest.shouldEnableSslAndFailIfCiphersDontMatch by reinstating the previous WebSocket channelizer logic that waited for the handshake to complete after the channel connects. If the handshake fails then a ConnectionException is thrown. (#2753)
add 2cdfbb0ddd Update IO documentation for V4 serializers. (#2769)
add 9e8126de1c Update GraphSON IO documentation with updated label, updated type prefix, empty properties and edge properties.
add 62c473d076 Add v4 versions of GraphSON serializers CTR
add c62d2c5428 Updates to Strategy Construction for TP4 (#2781)
add a455b3236a Custom Strategy Construction (#2806)
add fe9909b078 Revert change to code value in GraphSONv4 CTR.
add 6a1d9cc941 Merge pull request #2790
add 4ebd6f60e5 Make properties optional in GraphSONv4 again CTR
add b9a23d6808 CTR Fix ignores for SeedStrategy feature tests
add 0549a0ac01 Update `DateTime` serializer according to GraphBinaryV4 IO specs (#2776)
add 2b9dc4dfbd Update serializers for `label` as a singleton list of string according to GraphBinaryV4 IO spec. (#2780)
add a521e94e88 Added ordered `value_flag` `0x02` to Map serializers in Java and Python drivers according to GraphBinaryV4 IO spec. (#2779)
add c9825d7283 Fix typename for datetime in GraphSON example CTR
add 99f39e2975 Fix NullPointerException being thrown by outbound encoder. (#2800)
add 39e50e8733 CTR Fix Python Translator for withoutStrategies()
add dfb2428204 Update response message serialization with `{bulked}` flag to indicate bulked result data (#2826)
add d87bf303c5 Updated BulkSet and List serializers in Java and Python to implement list `bulk` flag in GraphBinaryV4 IO spec (#2821)
add 9582aa673c Add data list back to result object in GraphSONv4.
add 6b72e98652 Update GraphSONv4 format for edge's vertex reference.
add 698c563403 Update RequestInterceptor to better work with HTTP. (#2799)
add 0523392d51 Temporarily disable remote tx from Java driver CTR
add dfaccc7b33 Update g:DateTime definition in GraphSONv4 documentation CTR.
add ae76c17e1e Rename GraphSONv4 g:OffsetDateTime to g:DateTime CTR
add 55f7e180c9 Re-enable GraphSON message serializer for debugging. (#2836)
add 22e94ac224 Update GraphSONv4 RequestMessage documentation CTR
add 2d73a08546 enable basic GraphSONV4 connectivity in python
add f7b4f56768 Added request interceptor to gremlin-python. (#2849)
add b856745e7b Update BulkSet GraphSONv4 serialization. (#2861)
add 191849d7e2 Remove Traverser serializers for GraphSON/GraphBinary V4 (#2862)
add 5cea695c45 Re-enable feature test of GraphSONv4 CTR
add 7b3caefcf0 Update GraphSONV4 extended types, element, and datetime in gremlin-python (#2854)
add 68c3bd02d6 Changed connection pooling to reflect having switched from long lived web socket connections to short lived http connections: (#2860)
add 6ddd11431b Remove unsupported types in GraphSONv4 from core. (#2874)
add 774ef0e076 Add signal that bytes were read in HttpGremlinResponseDecoder CTR
add 6c7a31fd6d change from streaming deserialization to aggregating data and make graphson class naming consistent (#2873)
add c3e29aad63 update bigdecimal in statics to be consistent with server definition (#2875)
add 0d1635b194 CTR remove unsupported types in GraphSONv4 in gremlin-python
add 048ec39e3b Make gremlin-python feature tests use gremlin-lang
add 1a3914acc8 Undo CHANGELOG reverts and small comment changes CTR
add d0533aec2d Merge pull request #2880
add cfd68897ea Updated SigV4 interceptor to use the latest version of software.amazon.awssdk and removed old dependency on aws-java-sdk-core. Since latest version of SignedRequest has headers that support multiple values for the same header via Map<String,List> I added validation checks that the expected signed headers only have 1 value. Removed jackson dependency from gremlin-console as it is no longer needed.
add 666233674b Update SigV4 interceptor to use latest aws sdk version (#2884)
add 06b2322656 Merge branch '3.7-dev'
add 248c8567b0 Merge branch '3.7-dev'
add 1e874c8bbd CTR Update dependabot and PR template to reflect 3.6-dev inactivity
add 8e04fbaeee Merge branch '3.7-dev'
add 33fe594530 CTR feature test file updates in .net and go
add cd6bcee936 CTR minor update in gremlin-python error handling and test setup
add 11f6702919 CTR remove examples and add warning to unsupported GLVs and transactions
add 142ce3290d CTR update gremlin-python documentation
add ad230ba83c Merge branch '3.7-dev'
add 842f452642 Merge branch '3.7-dev'
add 81ed3c94d6 Merge branch '3.7-dev'
add e6104ad277 CTR disable unimplemented GLVs in maven build
add b5f9cf06e4 Merge branch '3.7-dev'
add f139af6df3 TINKERPOP-2959 Enums can't be variables in grammar
add 8712feb981 Merge pull request #2906 from apache/TINKERPOP-2959-enumfix
add 038ba3b8cb TINKERPOP-2959 valueMap will not take variable for boolean arg CTR
add 56c72f600c CTR make DRC remote traversal request the server to bulk results by default, and update token naming to be format-consistent
add 0b70b4c9ed Merge branch '3.7-dev'
add 0eef27f7fc Update Python Feature Tests to always run gremlin-lang CTR
add ec8d718aa4 Create gremlins-wildest-dreams.png
add 2dbe5cb32d Create gremlin-fine.png
add 6e5f00d32c Update documentation around TinkerPop HTTP API and serializers.
add adc953ff0d Merge pull request #2908
add 68d175f575 CTR updates in docs to remove :remote in console, gephi plugin, bytecode instances, deprecate neo4j to enable docs building.
add 7b1cc8d205 Update inaccurate information in documentation CTR.
add 3b5b174bfb Merge branch '3.7-dev'
add 3d938531e8 restructure changelog to archive old versions to de-clutter
add 995fbb448e Merge pull request #2938 from apache/archive-past-changelogs
add 8ebcc28f3c TINKERPOP-2959 Allow parameters to work for primitives
add 68866d1b2b TINKERPOP-2959 Restrict Arguments in Grammar
add f6273a5beb TINKERPOP-2959 Anonymous traversal tests
add f7711ada7a TINKERPOP-2959 Add additional feature tests for GValue
add d16b706f64 TINKERPOP-2959 GValue fixes, cleanup, and docs
add af04d8fa33 Upgrade docs for console plugin changes CTR
add acda218f73 Added note about the test framework CTR
add 087b307091 Merge branch '3.7-dev'
add 6a534d1ddf Allow for floating point rounding errors in Java Feature test assertions CTR
add 977291b55b Avoid the issue of connections not being released.
add 4310db2777 Merge pull request #2915
add df4727227a Merge branch '3.7-dev'
add e093151527 Promote gremlin-lang as default over gremlin-groovy (#2966)
add cf42186207 Merge branch '3.7-dev'
add 1f57d22b24 Update translator reference docs CTR
add 24394dc635 CTR remove unused test dependency from gremlin-driver
add 7824c4e764 CTR minor docs fixes
add 12f2ea5ee6 Updated major version to be retrieved dynamically on gremlin console and server. Also added unit test for new method added in Gremlin.java. Updated ImportGremlinPluginTest to accommodate added method. (#2982)
add d9ab91229d Make range() and related steps parameterizable (#2981)
add 6b2fa5ec36 CTR update NOTICE files
add 6d11275ebe Change server response to 400 for malformed queries (#2983)
add e84f29e15f CTR rename milestone to beta in docs, fix docker image architectures
add b7110d2a71 CTR Fix Javadocs Build Errors
add 4188f6d62d TinkerPop 4.0.0-beta.1 release
add 2276772bdf CTR update site and minor docs fix for 4.0.0-beta.1
add 85cd98cc8b CTR update version to 4.0.0-SNAPSHOT
add 78623dbe45 Use .on and .off for unexpected-response listener (#2969)
add b5da6de777 Merge branch '3.7-dev'
add 1e1f3cf1ac Update graphson.asciidoc
add 25b5cf147b Bump spark/hadoop to latest versions.
add 35bd47e47a Merge pull request #2980 from apache/olap-bump
add e7758bec29 Merge branch '3.7-dev'
add 200116f633 Merge branch '3.7-dev'
add 885ed7d3c4 Merge branch '3.7-dev'
add 6d02ebb476 Merge branch '3.7-dev'
add c7a4d56d50 CTR update docs/gremlint dependencies
add da6b2163fc Bumped jansi to 2.4.1
add ac74d4ae10 Fixed integration test warnings for gremlin-console
add 3f623eabf1 Merge branch '3.7-dev'
add c814694633 Merge branch '3.7-dev'
add e316656655 Merge branch '3.7-dev'
add 501984ec1b Added Translator infrastructure to core imports CTR
add f171d4f1a6 Revised text/formatting in CHANGELOG and upgrade docs CTR
add 4e8751f613 Bumped ivy/groovy and removed groovy-json.
add c91fe71ab5 Merge branch '3.7-dev'
add c266b70f07 Removed commons-logging direct dependency
add b89e2a00b7 Merge branch '3.7-dev'
add 84e92d5fd1 Bumped slf4j and other logging related infrastructure.
add 04e5666ae8 Merge pull request #2999 from apache/slf4j-bump
add 04ae983917 Add to Configuration changes section of 4.x.x upgrade documentation CTR
add 470256da85 Merge branch '3.7-dev'
add 6a52c2f381 TINKERPOP-3130 Allowed none() as anonymous and chained
add 0b3f168eac Merge pull request #3024 from apache/TINKERPOP-3130-master
add 7b105009e3 Merge remote-tracking branch 'origin/3.7-dev'
add ab2628d40f Regenerate test files after merge CTR
add e0e79c5dfb Merge branch '3.7-dev'
add a6dc5b9121 CTR: Reduce Dependabot activity
add 0ff08d7389 CTR fix dependabot ignore cases
add 31fac9e5ab Merge branch '3.7-dev'
add 1ecb2c3b5d Merge branch '3.7-dev'
add 04e1226e2f Merge branch '3.7-dev'
add 17959f3335 Merge branch '3.7-dev'
add 46fe38c78b Merge branch '3.7-dev'
add 5c6af2594e Merge branch '3.7-dev'
add da23c33478 Merge branch '3.7-dev'
add ad3b751bb0 Merge branch '3.7-dev'
add 6cc4e7be2e Merge branch '3.7-dev'
add 9efe02675d Merge branch '3.7-dev'
add 9a7e603bf3 Merge branch '3.7-dev'
add 38fabbb6b5 Merge branch '3.7-dev'
add 4dde995ee6 Merge branch '3.8-dev'
add b2b592cc71 Golang driver replace websockets with http (#3059)
add 7004c4eca7 Bump org.codehaus.gmavenplus:gmavenplus-plugin from 2.1.0 to 4.1.1
add 98c82eb5ff Merge branch '3.8-dev'
add efe1b1ead5 Merge branch '3.8-dev'
add 00e9176f4d Update changelog/upgrade docs after backport merge CTR
add 3958d5f9a5 Merge branch '3.8-dev'
add 08c0fab828 Merge branch '3.8-dev'
add a6b017e20a Merge branch '3.8-dev'
add 4f27528cfb Merge branch '3.8-dev'
add e1a5eab414 Merge branch '3.8-dev'
add 79528ea76e Merge branch '3.8-dev'
add 0fc776dbf2 Merge branch '3.8-dev'
add 4317779308 Merge branch '3.8-dev'
add c4e48dee7a Merge branch '3.8-dev'
add 54173c8b13 Merge branch '3.8-dev'
add cb6e62e774 Merge branch '3.8-dev'
add 30dca96891 Fix connection pool bug which can cause delays in obtaining a connection (#3079)
add 49cad097f3 Merge branch '3.8-dev'
add 9829c01291 Merge branch '3.8-dev'
add ad663adc6f CTR add back the accidentally removed @ts-ignore for linter
add 9cc25e05a3 Merge branch '3.8-dev'
add fa4a72ac42 Merge branch '3.8-dev'
add 5e4e10b520 Merge branch '3.8-dev'
add 259217b14d Merge branch '3.8-dev'
add c299ddf632 Merge branch '3.8-dev'
add d1eb4a12c5 Merge branch '3.8-dev'
add fec315ff72 Merge branch '3.8-dev'
add 21c784161b Merge branch '3.8-dev'
add e6ac3ec0c8 Merge branch '3.8-dev'
add 007fd228a9 [TINKERPOP-3149] Prevent multiple by modulators for sack step and changed GroupCount.feature test to verify the error message received. (#3102)
add a97db03618 TINKERPOP-3148 Prevent multiple by modulators from being used for the dedup step by throwing IllegalStateException if modulateBy is called more than once. (#3105)
add a9c9066921 [TINKERPOP-3146] Support hot reloading of SSL certificates (#3078)
add e3e5c97a44 Merge branch '3.8-dev'
add 35a1eac8bc TINKERPOP-3023 Implement UUID in gremlin-lang which should have two forms: UUID() and UUID(“uuid”) (#3112)
add 32a7fa51a1 Merge branch '3.8-dev'
add 746fd637d5 Rename grammar types to improve descriptiveness and consistency (#3103)
add e67d491d7f Merge branch '3.8-dev'
add b1bda549b3 CTR: Fix gremlin-driver integration tests
add 8f25b748cf [TINKERPOP-3146] Support hot reloading of SSL certificates (#3078)
add 24b4f80ac3 CTR fix byte in GraphBinary io docs
add 47cb62f206 Merge branch '3.7-dev' into 3.8-dev
add 96991cd5a9 Merge branch '3.8-dev'
add f422d780ca TINKERPOP-3150 Prevent sample step from having multiple by modulators… (#3114)
add 4dc2deccb7 TINKERPOP-3147 Prevent aggregate step from having multiple by modulators (#3113)
add 12aa078b38 CTR update docs for changes to multiple `by()` modulators for certain steps.
add 3b984f33f0 Merge branch '3.8-dev'
add 25c25c3102 proposal: eager vs. lazy execution in TP4
add 84bb1d6520 Merge branch '3.8-dev'
add 2fa4472f70 Java Dependency Updates:
add 7d1ae97595 Merge branch '3.8-dev'
add f66fa39d54 Added DateTime ontop of the existing datetime in Grammar (#3116)
add 5b1c2e9c20 Merge branch '3.8-dev'
add 1db5c1fd75 Fixed 4.0.0 references in 3.8.0 line introduced in backports CTR
add 90ac7e8973 Merge branch '3.8-dev'
add 1915b21880 gitignore update CTR
add 67bac5acda Merge branch '3.7-dev' into 3.8-dev
add 88b3d8e7a0 Merge branch '3.8-dev'
add 46af7f4b99 Added some docs on tree() about lazy/eager evaluation forms CTR
add 58b257d15e Merge branch '3.7-dev' into 3.8-dev
add b86ae2663f Merge branch '3.8-dev'
add 43406f3f99 Add proposal for asNumber() step (#3122)
add 4c9f7f8ba9 Merge branch '3.8-dev'
add caea33dd68 SEO improvements to help the TinkerPop website rank better (#3120)
add 5a02b675d6 CTR: Relocate robots.txt and sitemap.xml to correct directory
add 8b5ef0aaac CTR fix rat plugin exclusions
add 9c7a54c939 TINKERPOP-3115 Better handle overflows with sum() (#3121)
add eeb989c6df Merge branch '3.8-dev'
add 2ac1eb9480 getScopingInfo utility added (#3118)
add 3a48401d83 getScopingInfo utility added (#3118)
add 6c04598637 Merge branch '3.7-dev' into 3.8-dev
add 1e6dd6b8a7 Merge branch '3.8-dev'
add 83cfa702d8 TINKERPOP-3167 Fixed NPE when borrowing a connection
add 2ba7aa37f5 Merge branch '3.7-dev' into 3.8-dev
add 9d9536ff44 Merge branch '3.8-dev'
add 5a6b8b37ee Align with Aerospike's new branding (#3141)
add 196edc1d04 add asBool() step proposal (#3135)
add b812c8b1d7 .NET error logging improvement (cherry-picking to 3.7-dev from #3134)
add 61bcf0cefb Merge branch '3.7-dev' into 3.8-dev
add 2f5234810b Merge branch '3.8-dev'
add c39e4cebb3 Added javadoc for TraverserRequirement
add b23c9f69d3 Merge branch '3.7-dev' into 3.8-dev
add 1e2012b99a Merge branch '3.8-dev'
add 86f784bb63 TINKERPOP-3135 Removed reference to plugins config property
add 644750d03d Merge branch '3.7-dev' into 3.8-dev
add 519d9685e3 Merge branch '3.8-dev'
add 019b860464 Minor updates to TinkerGraph docs CTR
add 84c498c554 Merge branch '3.7-dev' into 3.8-dev
add 0b7fd04508 Merge branch '3.8-dev'
add c4557a657a Clarified docs around fail() and transactions CTR
add 610b127334 Merge branch '3.7-dev' into 3.8-dev
add 22284c53cd Merge branch '3.8-dev'
add 0ed74b105b TINKERPOP-3067 Fixed incomplete shading for jackson multi-release
add 692c6fc299 Merge branch '3.7-dev' into 3.8-dev
add 67d0a78065 Merge branch '3.8-dev'
add 86cb67fd34 Simplified compiler plugin setup
add bc96444635 Merge branch '3.7-dev' into 3.8-dev
add 8c5f629ad8 Merge branch '3.8-dev'
add f8dd8c1ba0 TINKERPOP-3023 Expand type syntax in grammar in 3.8 - Remove Vertex (#3133)
add fbbbc9611a Merge branch '3.8-dev'
add 0c9b8bf759 TINKERPOP-3163 fixed CallStep serialization (#3140)
add c288fab685 Increase default max_content_length/max_msg_size in gremlin-python from 4MB to 10MB (#3142)
add aee9a68d57 TINKERPOP-3162 fixed JDK 17 field accessor in gremlin-console (#3151)
add c52dc724b6 Merge branch '3.7-dev' into 3.8-dev
add 5aa1b60c52 Merge branch '3.8-dev'
add 9153d501e3 TINKERPOP-3100 Fix problem in recursive calls to Traversal lock()
add 98ffa44fc2 TINKERPOP-3100 Fix problem in recursive calls to Traversal lock()
add ca3820a009 Merge branch '3.7-dev' into 3.8-dev
add 924c0fd3d3 Merge branch '3.8-dev'
add ca5544dade Merge branch '3.7-dev' into 3.8-dev
add a5bc79dba3 Merge branch '3.8-dev'
add 39cb7011fa Only include STJ on net standard (#3123)
add 00622c5d02 Only include STJ on net standard (#3123)
add d6f20d09d9 Added a tip block to "getting started" tutorial (#3156)
add 0c1b0fdbf8 Merge branch '3.7-dev' into 3.8-dev
add 6144a2b0e8 Merge branch '3.8-dev'
add d7229ab0cf Editing Upgrade Docs CTR
add 13529bbbde Merge branch '3.8-dev'
add bbf7bdb521 Corrected documentation to only use one by modulator for valueMap example as it is no longer supported.
add 00b1e04390 Merge branch 'pr-3158' into 3.8-dev
add 0c3959d43e Merge branch '3.8-dev'
add 7b3f394bcc Update java language version to 11 (#3155)
add df24318025 Merge branch '3.8-dev'
add f9245f1c43 TINKERPOP-3141 (#3161)
add b8f7c24789 TINKERPOP-2647 improved plugin error message in Gremlin Console (#3160)
add eff6a62a4c Merge branch '3.7-dev' into 3.8-dev
add 5d38595e1b Merge branch '3.8-dev'
add f8f70762c6 TINKERPOP-3023 Expand type syntax in grammar - Remove Vertex - TP4 (#3138)
add ffd1828e8c TINKERPOP-3168 Deprecated UnifiedChannelizer
add 43e771e6a9 Merge branch 'TINKERPOP-3168' into 3.8-dev
add ea69c04e7d Merge branch '3.8-dev'
add bef494a9f9 Updated jquery/prism versions
add ab058d61fb Added/removed active/inactive branches for codeql scans CTR
add dbec670931 TINKERPOP-3100 Add better tests/benchmarks around lock()
add d664c5706f Merge branch 'TINKERPOP-3100' into 3.8-dev
add fea8ba40ea Merge branch '3.8-dev'
add cede190993 TINKERPOP-3154 Added docs/tests for subgraph() CTR
add 999aacae5f Merge branch '3.7-dev' into 3.8-dev
add c604e4c716 Merge branch '3.8-dev'
add 16255f5686 TINKERPOP-3040 Fixed limitation in multi-line parsing. (#3162)
add db369864ab Transaction reads should not interfere with add/update/delete (#3163)
add 1ef460a654 TINKERPOP-3177: Fix configuration of sessions in Go Client (#3164)
add 9c6de5928e Merge branch '3.7-dev' into 3.8-dev
add f616441abf Merge branch '3.8-dev'
add 9809784349 CTR: TINKERPOP-3138 Fixed default `enableCompression` setting to be `false` instead of `undefined` in `gremlin-javascript`
add 2968f5e86a Merge branch '3.7-dev' into 3.8-dev
add b3a3fd7685 Merge branch '3.8-dev'
add 01c97efa72 Upgraded node from version 18 to 20. (#3165)
add 3f41356a09 Upgrade go to version 1.24. (#3166)
add 7b6f8378ad Merge branch '3.7-dev' into 3.8-dev
add db7fd68a49 Merge branch '3.8-dev'
add d6b80bd724 Implement asBool() step (#3154)
add 0505aca7b0 Merge branch '3.8-dev'
add 0a55908b81 CTR fix missed typescript definition for asBool
add c904af80fa https://issues.apache.org/jira/browse/TINKERPOP-3174 (#3169)
add 33b483388f Merge branch '3.7-dev' into 3.8-dev
add 54641b2a90 Merge branch '3.8-dev'
add 5df609d1a5 CTR fix docker platform for arm image building
add 54e48d8575 Merge branch '3.7-dev' into 3.8-dev
add 8fc5b9be3b Merge branch '3.8-dev'
add 6b29a6659e Backported 62a3935152354eea54f2cfadc39edf10ebe2005d from 4.x
add 343eef4a85 Backported e8b9532fc0ec811460e97ebf5e00b8b9ec9192ac from 4.x
add 8e26f77d55 Backported more discard() steps from 4.x
add f57584be9a Merge branch '3.8-dev'
add d3a6421790 Minor text changes after merge of discard/none backport to 3.8 CTR
add 2fee31568f javadoc on discard() CTR
add 16bc514f03 Merge branch '3.8-dev'
add df775b0c78 TINKERPOP-3178 choose semantics consistency improvements
add aa15e39449 Merge branch '3.8-dev'
add 14b6f105b0 Removed ResultQueue#aggregatedResult
add 1fda8cdaac Merge branch '3.8-dev'
add 93ec874926 Update website for 3.7.4 releases CTR
add fa698ba2ab TinkerPop 3.7.4 release
add 50e840d4d4 Update to 3.7.5-SNAPSHOT CTR
add 5e33db4820 Merge branch '3.7-dev' into 3.8-dev
add 0983734620 Merge branch '3.8-dev'
add 1925202525 Backport a note on gherkin test filtering CTR
add 2e757ac8aa Merge branch '3.7-dev' into 3.8-dev
add a493eb207a Merge branch '3.8-dev'
add 77806039e3 Remove P.getOriginalValue() (#3183)
add 68af68b883 Deparameterize feature tests (#3186)
add 515eabfaa2 CTR cleanup python test
add 4b26a63608 Merge branch '3.8-dev'
add dd13f1ed84 TINKERPOP-3181 Improved host availability on initialization.
add 2cbea9f6b3 Merge branch 'TINKERPOP-3181' into 3.7-dev
add 3d8a33ce07 Merge branch '3.7-dev' into 3.8-dev
add 814bc57e81 Merge branch '3.8-dev'
add eebf47ec27 Updated changelog CTR
add e89695c652 GValue and Antlr Parsing Cache (#3157)
add 4790c500b4 Merge branch '3.8-dev'
add 544ed90ce0 TINKERPOP-2491 Remove auto unfold of single item results for range, limit, tail local scope steps (#3184)
add 6787836721 Merge branch '3.8-dev'
add 3ddf400820 Fixed up property order tests CTR
add 3d7960dd08 Merge branch '3.7-dev' into 3.8-dev
add 049816a2b3 Merge branch '3.8-dev'
add a20f3861f7 Tests for repeat().times(0) and semantics clarity CTR
add a1f16803c2 Merge branch '3.7-dev' into 3.8-dev
add 8ca4c5458a Merge branch '3.8-dev'
add 6aad19195e Change tail feature test to use valueMap instead of inject as to not be affected by GLV map ordering (#3193)
add b0ff859882 Merge branch '3.8-dev'
add 482475e814 Bumped Mockito to latest CTR
add 60946882ac Merge branch '3.8-dev'
add d5f4a29535 Fix NPE in dateDiff exception message & fix bullet list formatting in semantics doc CTR
add 5e652982c6 Merge branch '3.7-dev' into 3.8-dev
add 0756e673e2 Merge branch '3.8-dev'
add 6eb0bef934 Added getter to DifferenceStep CTR
add ab3d4192b4 Merge branch '3.7-dev' into 3.8-dev
add 20413ce46c Merge branch '3.8-dev'
add 7341ab79d6 Backported rename of steps related to "merge" from 4.0
add 74e7da16d0 Merge branch '3.8-dev'
add 705bcb2873 Minor fix to changelog after backport of changes to 3.8-dev CTR
add d4eb94fa6b Bump actions/checkout from 4 to 5
add b342a92a46 Merge branch 'pr-3182' into 3.7-dev
add 26658e2404 Bump actions/setup-java from 4 to 5
add 4518e35d66 Merge branch 'pr-3192' into 3.7-dev
add 391281022e Merge branch '3.7-dev' into 3.8-dev
add 04e00b82d5 Merge branch '3.8-dev'
add 7a4c89ad18 Added getter for valueTraversal on DifferenceStep CTR
add 3284acaf0b Merge branch '3.7-dev' into 3.8-dev
add 5030841548 Merge branch '3.8-dev'
add c53c452f4b TINKERPOP-3182 Fixed inconsistency in Path GraphSON serialization
add 19b66a6fb5 Merge branch '3.7-dev' into 3.8-dev
add fa76d3bb0f Merge branch '3.8-dev'
add ec6385b10b TINKERPOP-3182 Prevented detachment for Path for GraphSON CTR
add 069d633e02 Fix compile problem in gremlin-javascript CTR
add d45cd95af1 Changed detatchment logic after TINKERPOP-3182
add fadcd60542 Merge branch '3.7-dev' into 3.8-dev
add 25f0e15cda Merge branch '3.8-dev'
add ca58a971dc TINKERPOP-3166 Implement asNumber() step (#3153)
add 32dc384732 Merge branch '3.8-dev'
add b92ce72db4 Bump and rename sslcontext-kicktart to ayza
add 56e0662929 Merge branch '3.7-dev' into 3.8-dev
add ba6740ecbb Add caffeine dependency to javadoc generation CTR
add c04df4ed97 Merge branch '3.8-dev'
add 8889ea239c fix K_DISCARD in master CTR
add cb5f9ebc4f TINKERPOP-2821 Remove request routing via host in RequestMessage CTR.
add dff09d415d Backport 3015f370431aa890492c33f94fa31138a0099d92 to 3.8-dev CTR
add 1c26cc5436 Merge branch '3.8-dev'
add 83b86a9548 CTR fixed .NET integration & feature tests build issues, added parameter casting for range steps in .net translator visitor
add 73a20f2e7c Merge branch '3.8-dev'
add 7294ae70d3 CTR Fix UUID arg handling in GremlinLang
add 3a142ae52c GValue and Antlr Parsing Cache (#3157)
add a543fceefe [TINKERPOP-3173] Simplify comparability semantics (#3195)
add 6687d59d8a Merge branch '3.8-dev'
add 9a3896d913 Tests for custom strategies in grammar CTR
add ca91e9c195 Merge branch '3.8-dev'
add 4637f82c00 GValueReductionStrategy moved from finalization to optimization
add 8c95cf3780 Remove recursion in GValue reduction strategies and added provider specific one
add 5ee753a6aa Fixed clone for placeholder step
add a1bda3eaec Merge branch '3.8-dev'
add 9509d87ffa Fixed formatting in upgrade docs CTR
add 26962082ba Merge branch '3.7-dev' into 3.8-dev
add 07976dfb8f Fixed formatting in upgrade docs CTR
add 40811d074e Merge branch '3.8-dev'
add e39d795177 Refinements to GValue (#3205)
add e317bdfea6 Merge branch '3.8-dev'
add f6e5a6c804 CTR: add gremlin serialization images
add e2cc4ea409 Switched `gremlin-net` byte serializers to signed bytes (`sbyte`) to be consistent with IO doc (#3206)
add 6f767e9e1b [TINKERPOP-2234] - Proposal for Type Predicate & Type Enum (#3207)
add 46511ae70b Merge branch '3.8-dev'
add ac7f0ffdbe CTR update `asString()` semantics to throw `IllegalArgumentException` with `null` inputs for casting step consistency
add 8a406426c0 CTR fix & re-order `asString()` in semantics doc
add a52d2b3184 Merge branch '3.8-dev'
add 3ef6975de0 Fix TraversalParent implementations for Placeholder steps (#3209)
add 09fa0111d2 Added Air Routes to the distribution as a sample dataset
add e2cb0005a0 Merge branch 'airroutes' into 3.8-dev
add 33ad6d1d2b Merge branch '3.8-dev'
add ca14991983 Consolidate interfaces into step contracts (#3214)
add 9744310b2f Merge branch '3.8-dev'
add e8b011f308 CTR Fix overrides of clone() in GValue, GValueManager, GValueConstantTraversal, and StepPlaceholder classes
add fcedded171 Merge branch '3.8-dev'
add 8826af68c9 Created min distribution for tinkergraph-gremlin
add c140ed6718 Merge branch '3.8-dev'
add bc685f60c0 Upgrade netty to 4.1.125.Final (GHSA-3p8m-j85q-pgmj) (#3197)
add 6c338e590d Merge branch '3.7-dev' into 3.8-dev
add 5320defab2 Merge branch '3.8-dev'
add 0c9e24175c Update NOTICE files Netty version to 4.1.125.Final. (#3219)
add 712d1d3cd6 Merge branch '3.7-dev' into 3.8-dev
add 7d4cfcfb38 Merge branch '3.8-dev'
add a6f77163ff https://issues.apache.org/jira/browse/TINKERPOP-3192 (#3212)
add a18ee9fd30 Merge branch '3.8-dev'
add fbf13c3a73 CTR fix merge of python feature test script from 3.8-dev to master by regenerating using translators from master branch.
add e8eda57bc1 Modified test which is meant to validate client script subission with simple traversal works to use a simplified traversal as it had ex posed an unrelated bug with usage of inject in repeat without the RepeatUnrollStrategy automatically unrolling it. Created https://issues.apache.org/jira/browse/TINKERPOP-3194 to address the issue. CTR to fix the master branch build. See also https://github.com/apache/tinkerpop/pull/3212.
add 24de8eac50 Modified test which is meant to validate client script subission with simple traversal works to use a simplified traversal as it had ex posed an unrelated bug with usage of inject in repeat without the RepeatUnrollStrategy automatically unrolling it. Created https://issues.apache.org/jira/browse/TINKERPOP-3194 to address the issue. CTR to fix the master branch build. See also https://issues.apache.org/jira/browse/TINKERPOP-3194.
add f68caa9321 Modified test which is meant to validate long response to use a different traversal as it had exposed an unrelated bug with usage of inject in repeat without the RepeatUnrollStrategy automatically unrolling it. Created https://issues.apache.org/jira/browse/TINKERPOP-3194 to address the issue. CTR to fix the master branch build. See also https://issues.apache.org/jira/browse/TINKERPOP-3194.
add 70a97c9023 Fixed bug in cloning on DateDiffStep CTR
add 05177e58ec Merge branch '3.8-dev'
add 54d3218f98 [TINKERPOP-3193] Decouple non with()-related configs from Configuring/Parameterizing interfaces (#3215)
add 9606a87d5f Merge branch '3.8-dev'
add b869bd405a CTR misc GValue cleanups
add b67511190d Merge branch '3.8-dev'
add 8acad0445d CTR fix branches section of dev docs
add 9597095223 Merge branch '3.7-dev' into 3.8-dev
add 0749f7de83 Merge branch '3.8-dev'
add e5b2a165c7 CTR Update TinkerGraphStep and TinkerGraphStepStrategy to operate on GraphStepContract
add 2a42652841 CTR Update TinkerGraphStep and TinkerGraphStepStrategy to operate on GraphStepContract
add d4a48bee9b CTR: Update CONCRETE_STEPS list for all step contracts
add c186c05eee Merge branch '3.8-dev'
add c3c3baa51a CTR: Docs updates for strategies to reflect GValue awareness
add 384e9a730c Merge branch '3.8-dev'
add c0962da323 Added missing test annotations
add e124db136d Merge branch '3.7-dev' into 3.8-dev
add b9231dbbd1 Merge branch '3.8-dev'
add 0516a7d5b8 TINKERPOP-3195 Prevent SupplyingBarrier Steps inside RepeatStep
add c67536fafe Merge branch '3.8-dev'
add 8dc2e26b44 Fixed bug where InlineFilterStrategy could add extra has()
add 47badd72fd Merge branch '3.8-dev'
add c44bd5ccc4 Gremlin 3.8.0 CTR
add 9da20bb6cc Merge branch '3.8-dev'
add 470ba524c8 Spelling fix CTR
add 15b74eda03 Merge branch '3.8-dev'
add eebb8f8396 Fix Four Flaky Tests in gremlin-core (#3221)
add 38594b92da Fix WebSocket API inconsistency causing "this._ws.on is not a function" error (#3204)
add de99ce6263 Add root-level GLV examples and fix existing example issues (#3218)
add e6dbd372d9 Merge branch '3.7-dev' into 3.8-dev
add 899ee057f5 Merge branch '3.8-dev'
add fb20adf9c0 TINKERPOP-3199 Updated build system to work with setuptools>=60
add dfc9874302 Merge branch '3.7-dev' into 3.8-dev
add 52937a1f0a Merge branch '3.8-dev'
add f67ba022a8 Changed ApplyStrategiesBenchmark to apply default strategies (#3236)
add 3716457d8b Merge branch '3.8-dev'
add a795d38afc Clean up gremlin-python docker-compose after move to newer setuptools CTR
add f2bd35e5d8 Merge branch '3.7-dev' into 3.8-dev
add c6d15112e7 Merge branch '3.8-dev'
add b688a06980 Improved GHA setup by centralizing build exclusions
add ea930ff08e Merge branch '3.8-dev'
add ebdd8ff585 Proposal of new declarative match step
add 366f92de5c Revise declarative match step specification
add a63b67c7b1 Merge branch 'pr-3232' into 3.8-dev
add 05bc01ac4d Added match() proposal to index CTR
add cc6eb1e0f3 Merge branch '3.8-dev'
add 3770aef258 Dropped gremlin-archetype from GHA - no longer on master CTR
add 4bb6f322b0 Port gremlin-mcp from kpritam/gremlin-mcp
add 49552ebe27 TinkerPop prefers the use of the term vertex over node.
add 6c3137733a Adjusted packaging for TinkerPop official use
add 2e5e503616 TinkerPop prefers edges to relationships in its naming
add 6dee48d569 Added asciidoc for gremlin-mcp
add 74f844fa80 Bumped back to SNAPSHOT
add 151c2b7caf Restructured gremlin-mcp to match TinkerPop standards under Maven
add c675200d25 Cleaned up around denylist and better documented enum
add 094cc316f0 Remove import tool from gremlin-mcp.
add 3ae6aa9e88 Improved tool definitions
add 87556f11c1 Made the label term more consistently used for vertices/edges
add b33b915d5a Fixed authentication setup for gremlin-mcp
add fcc3b131df Removed the export tool
add 32a825f614 Renamed all configurations with a GREMLIN_MCP prefix.
add 8bb3a6e435 Made including schema counts false by default
add 1469f19659 Removed duplicate keyword in packaging
add 2992adc693 Added validation to Gremlin passed to the execute query tool
add 5e0255afd6 Many small adjustments to clean up and improve tests
add 3d94ba7dbf Added gremlin-mcp to GHA
add ac854d7268 Merge branch '3.8-dev'
add 939ac79fa0 Bump to 4.0.0-SNAPSHOT for gremlin-mcp CTR
add 044c7db243 Clarify parameterization for match queries
add fa3159a860 Merge branch 'pr-3245' into 3.8-dev
add 2178eff591 Merge branch '3.8-dev'
add ec1f544377 [TINKERPOP-3186] - Align Element.properties type for python and javascript (#3242)
add 7bf19dfb1f Disallow the use of `choose().option(Traversal, v)` (#3244)
add 76a76c109d Remove `has(key, traversal)` in 3.8.0 (#3243)
add 87c3381a0a Merge branch '3.8-dev'
add 6b5c24d20c CTR fix gremlin-javascript build issue
add a64ed7220e Change range in repeat to track counters per iteration (#3241)
add f50294137f Merge branch '3.8-dev'
add e7a7d97661 Fix master build (#3249)
add ddf21eec3b [TINKERPOP-2491] Fix docs by adding missing unfolds (#3250)
add afb6b72aad [TINKERPOP-3202] Improve performance of RangeGlobalStep (#3251)
add e5738c9e92 Merge branch '3.8-dev'
add 65a438a89e Minor formatting to changelog CTR
add 2c3f31fdab Merge branch '3.8-dev'
add e515cc5bb0 Added P.typeOf() predicate, which recognized a new set of GType enum token, String as registered in the GlobalTypeCache, as well as Class in Java/Groovy usage. (#3211)
add 3bd2bbef44 Merge branch '3.8-dev'
add 57ed0467ac CTR backport refactored typeOf() implementation for P & CompareType from TP 4.0
add 078cc05b01 Merge branch '3.8-dev'
add 2bfd1d7c5d CTR doc fixes for doc generation
add 0f46d71be2 Merge branch '3.8-dev'
add fa89176741 TINKERPOP-3196 Split bulked traversers for LocalStep (#3246)
add 8d86ff6542 TINKERPOP-3200 Make repeat() act as a global parent (#3247)
add 13ea5e3832 Merge branch '3.8-dev'
add baba903ffc Removed `AggregateLocalStep`, `aggregate(Scope, String)`, and `store()` in favor of using `local(aggregate(String))` for lazy aggregation. Updated relevant docs and added additional feature tests. (#3233)
add a9249b5ec2 Merge branch '3.8-dev'
add c778125311 [TINKERPOP-3207] Add Barriers to GroupSideEffect, GroupCountSideEffect, TreeSideEffect, and Subgraph Steps (#3254)
add fbb11383ff Merge branch '3.8-dev'
add bf7447d4a9 CTR fix es-lint error
add b45df463d6 regenerate feature test files
add 49456ebe48 Prevent inject in repeat (#3253)
add 537aed6f50 Merge branch '3.8-dev'
add 7ddb70f1d0 Updated Air Routes to the 1.0 version.
add 58e9304b60 Merge branch '3.8-dev'
add 0e7c2c6a25 TINKERPOP-3201 Fix tail inside repeat (#3248)
add 442f24126b Merge branch '3.8-dev'
add 7eaecf4264 CTR deprecate has(key, traversal)
add bedcb12834 Merge branch '3.7-dev' into 3.8-dev
add 16cf94e0d8 Merge branch '3.8-dev'
add 76598e16e5 CTR fix bug in `asNumber()` where for `longValue()` method, BigDecimal needs to be truncated before calling `longValueExact()` or else it throws
add 8bde216128 Merge branch '3.8-dev'
add 54c4271637 CTR Update equals and hashCode on step placeholders
add 3a6e5c46e9 Merge branch '3.8-dev'
add 0b2e77e7f3 Remove GenericArgument from from() and to() (#3252)
add 274c0bdece Merge branch '3.8-dev'
add c41cd330a8 CTR Fix OLAP-Spark-Yarn docs example
add fec7210b5c Merge branch '3.8-dev'
add 054aa2807b [TINKERPOP-3202] Added order to range feature tests for better predictability of results. (#3255)
add a55ed7173b Merge branch '3.8-dev'
add 074d634ac0 [TINKERPOP-3186] - Align Element.properties type for dotnet (#3257)
add 0ac0710e52 Fixed `statics.BigDecimal` in `gremlin-python` to properly calculate `scale` and `unscaled_value`, and added `value` attribute to return a `decimal.Decimal` representation. Updated `GraphSON` in `gremlin-python` to return `statics.BigDecimal` instead of `decimal.Decimal` for consistency with `GraphBinary`. (#3256)
add 17be1a73f9 Merge branch '3.8-dev'
add f8b7c4d10d CTR remove leftover print statement in python
add 5ffa20adb5 Merge branch '3.8-dev'
add 980e2c3cbd Added by('name') modulator to order() for better predictability of output of feature tests. (#3260)
add e65b64b423 Merge branch '3.8-dev'
add ff5296ca79 Renamed root level glv-examples to gremlin-examples for consistency. (#3261)
add ae5c1cbe68 Merge branch '3.7-dev' into 3.8-dev
add 6c592f9cf2 Merge branch '3.8-dev'
add e754180a2d Add missing anonymous traversal steps in python and javascript CTR
add a4d648945f Merge branch '3.7-dev' into 3.8-dev
add dbfe47544d Merge branch '3.8-dev'
add 56ef1f07e6 Add by modulator to order of RepeatUnrollStrategy feature tests. (#3265)
add 4adf43fc19 Merge branch '3.8-dev'
add d9956f7ffe Change 3.8.0 upgrade documentation structure CTR.
add 209acd3ee7 Merge branch '3.8-dev'
add ecc89d434e Fixed typo in gremlin-archetype log file name (#3266)
add 25e19d234c Merge branch '3.8-dev'
add b63373a1b2 Merge changelog.
add 61bc9ade31 CTR Add semantics docs for group(), tree(), and subgraph()
add bb1e3534a0 Merge branch '3.8-dev'
add 7c9b886da6 Update PuppyGraph logo CTR
add cd39cd7e58 Merge branch '3.8-dev'
add 599e51436c Fix flaky TraversalExplanationTest (#3259)
add 3b774fac18 Merge branch '3.8-dev'
add f08f428842 Upgrade Go to version 1.25. (#3268)
add 14ca1b4d0c Merge branch '3.8-dev'
add 727cdfa041 Change Concat.feature to order by name (#3270)
add de14838a30 Merge branch '3.8-dev'
add b1967c4a7d Fixed empty-sample-secure.groovy to work with COMPILE_STATIC (#3262)
add 755d428a1f Merge branch '3.7-dev' into 3.8-dev
add 5e4cc5755d Merge branch '3.8-dev'
add 01a1ca5b30 Upgrade go version to 1.25 for workflow. (#3271)
add cf5bea4560 Merge branch '3.8-dev'
add 5f696a4651 Coding agent prompt for 3.8.0 risk assessment CTR
add 435afaa7bd Merge branch '3.8-dev'
add e76da02131 Platform independent way of parsing of asciiTree in StepDefinition#parseTree method was added. (#3269)
add 65abf127ef Merge branch '3.8-dev'
add 3cfb322a2b Update upgrade risk assessment prompt CTR
add 1fde6b592c Merge branch '3.8-dev'
add e6877d0caf Made SeedStrategy constructor private and edited upgrade docs
add 0fac891b24 Merge branch '3.8-dev'
add 07104b2194 Fixed SeedStrategy in tests CTR
add 34f48a54da Merge branch '3.8-dev'
add 87a9032442 Minor 3.7.5 docs fix CTR
add 827d703ef3 Merge branch '3.7-dev' into 3.8-dev
add f421483008 Merge branch '3.8-dev'
add 60f284047e [TINKERPOP-3212] Date manipulation consistency (#3267)
add fff6cb5cef Merge branch '3.8-dev'
add 2bb5fcce25 Upgrade python to 3.10 (#3272)
add 639a8a8e65 Merge branch '3.8-dev'
add aea480543a Fix sample in repeat computer algorithm to retain sample size (#3273)
add 573edb8cec Merge branch '3.8-dev'
add dee83b3335 Add Support for Node 22 and 24 (#3119)
add 5bd0137f6e Merge branch '3.8-dev'
add 3f92b1da83 Added runtime documentation
add 8312f69fcf Merge branch '3.7-dev' into 3.8-dev
add 04e120607f JDK8 support dropped at 3.8.0
add 7aabfdc17d Merge branch '3.8-dev'
add c697ad97d9 Add missing runtime information for 3.8.0 to gremlin-variants.asciidoc CTR
add 1fc3b9a506 Merge branch '3.8-dev'
add de7cd6e6a3 Missed a breaking change backported from mergeV/E to 3.8 CTR
add a0d4574db9 Merge branch '3.8-dev'
add cdfef2c280 Add warning in the-traversal about potential change to coalesce/flatMap CTR
add 8cdadb6548 Add missing tests for flatMap and repeat CTR
add a600a7e627 Merge branch '3.8-dev'
add ed72a0101e Fixed bug where specifying label when using Cardinality arg with mergeV caused validatin error as the label would be treated as having cardinality CTR
add e50e8c8603 Merge branch '3.8-dev'
add eeeb273951 Remove ignores for GLV feature tests that either no longer exist or now pass (#3275)
add 4b161f1eeb Merge branch '3.8-dev'
add f0040853da Update CHANGELOG and upgrade documentation for 3.7.5 CTR
add 4a24ef9fc2 Merge branch '3.7-dev' into 3.8-dev
add 8e8a579083 Merge branch '3.8-dev'
add 902ab8694a Updated changelog and upgrade docs for release. (#3277)
add 0b9daaa7af Merge branch '3.8-dev'
add 85449b08d7 Deflake tests in GraphSONTypedCompatibilityTest, GraphSONUntypedCompatibilityTest and GraphBinaryCompatibilityTest (#3237)
add 337dc22af1 Merge branch '3.7-dev' into 3.8-dev
add 2176865d47 Merge branch '3.8-dev'
add 743fd1d7d0 Fix for JavaTranslator handling of has with null last argument (#3278)
add f4bf2b1b4f Merge branch '3.8-dev'
add 876827c849 Various upgrade doc fixes for 3.8.0. (#3279)
add 6d7b72aeca Merge branch '3.8-dev'
add a735e4149a fix source release exclusions
add b05a285009 TinkerPop 3.7.5 release
add 56422ce9e4 Merge branch '3.7-dev' into 3.8-dev
add 532d83604e Add gremlin-mcp exclusions to source-release
add f9056af1f7 TinkerPop 3.8.0 release
add c346a504a5 Merge branch '3.8-dev'
add 3c3a9d6a96 CTR add committer to homepage.
add d359950f1e CTR update site for 3.7.5/3.8.0 Release
add 0c35874449 CTR: fix upgrade docs link formatting
add 3f7c775c8e CTR: Update version to 3.7.6-SNAPSHOT
add 02022ca673 Merge branch '3.7-dev' into 3.8-dev
add 9bb4207765 CTR: Update version to 3.8.1-SNAPSHOT
add a2cb73faf3 Merge branch '3.8-dev'
add 2df5882969 CTR Update PR template
add c97d963c1a Integrate Python driver examples into automated build process (master) (#3280)
add 7e2451bdea Add __.V() wrapping for Vertex objects in to() and from() methods (#3281)
add 2c3ef383bb added gremlin-mcp to website CTR
add 81da13df55 CTR Update Docs and site
add 2cd2748aa4 Integrate Python driver examples into automated build process (#3231)
add 59b68cf5c5 Merge branch '3.7-dev' into 3.8-dev
add 1f998c3171 Expanded error handling in addE tying to from/to vertex resolution CTR
add 2d81a9a141 Merge branch '3.8-dev'
add b305bc9a29 CTR logging docs for javascript
add 903aa50c49 Merge branch '3.7-dev' into 3.8-dev
add 5a0c1c0506 Merge branch '3.8-dev'
add 3bdb5bd6cf Remove GremlinServerSessionIntegrateWithUnifiedChannelizerTest CTR
add ebdec97482 Merge branch '3.7-dev' into 3.8-dev
add 0a6b53ae4a Merge branch '3.8-dev'
add 4f88964daa TINKERPOP-3213 Add SessionedChildClient (#3258)
add 53959cc41c TINKERPOP-3217 Add server option to close Session automatically. (#3284)
add 987f294765 Merge branch '3.7-dev' into 3.8-dev
add b38469469f Merge branch '3.8-dev'
add 234d578028 TINKERPOP-3218 Fix bug in pre-repeat emit()/until() (#3288)
add d4f0356c43 Merge branch '3.8-dev'
add 61c37a1e24 Integrate JavaScript examples into CI build (#3240)
add 786b29710f Merge branch '3.7-dev' into 3.8-dev
add 0051eee147 Merge branch '3.8-dev'
add d2e620fa03 Add feature tests for local-emit-repeat scenario CTR
add ecd7f77edb Merge branch '3.8-dev'
add 0f90b39e03 TINKERPOP-3223 Fixed bug in SubgraphStrategy
add 4fa0324f2c Merge branch '3.7-dev' into 3.8-dev
add 4a90f3da7f Merge branch '3.8-dev'
add 51169585c4 Kept initial argument on same line as step for gremlint
add f7116ebca8 Add gremlint to gremlin-mcp
add 7fcc2610aa Merge branch 'gremlint-v2' into 3.8-dev
add 0a1e8f398b Merge branch '3.8-dev'
add cad9022e76 Remove gremlin-mcp from gremlin-java codeql check for GHA CTR
add 0833258a5a TINKERPOP-3219 Expose serialization functions for alternative transport protocols in gremlin-go (#3285)
add c8665d6852 Integrate Go driver examples into automated build process (#3239)
add 8aad40518b Merge branch '3.7-dev' into 3.8-dev
add 2553564678 Merge branch '3.8-dev'
add 008584d6b3 TINKERPOP-3222 Fixed bug in ReservedKeysVerificationStrategy
add 25c4ddf58d Merge branch '3.7-dev' into 3.8-dev
add 61b3a890b2 Merge branch '3.8-dev'
add 274fc53287 Add integration testing for session connection reuse CTR.
add fef4732034 Merge branch '3.7-dev' into 3.8-dev
add ad00cdcda5 Merge branch '3.8-dev'
add 47baf67bd1 CTR Fix test dependence on specific format of java.version property
add 716b049e8c Merge branch '3.8-dev'
add f52f8d2b93 CTR Minor fixes to JS imports, exports, and serializers
add 06286b23b9 CTR JS import fixes
add cebd8e389d Update Java GLV examples (#3295)
add e8446d2c0a Integrate .NET driver examples into automated build process (#3293)
add a46fd77fbc Merge branch '3.7-dev' into 3.8-dev
add 9a24bcf4db Merge branch '3.8-dev'
add f8bb719766 Replaced Bytecode with GremlinLang & updated GraphBinary serializer to 4.0 spec. Contains various code updates & fixes to enable HTTP connection & tests. (#3292)
add e69bb8cff2 Bumped to Caffeine 3.2.3 and Guice 6.0.0
add 77b1abf620 Bumped commons dependencies CTR
add 8f1c279063 TINKERPOP-3136 Removed deprecated/redundant Gremlin testing
add 4ebe155c12 Merge pull request #3298 from apache/TINKERPOP-3136
add fa48185f69 TINKERPOP-2063 Added subgraph support to python
add 90844ed478 Merge pull request #3296 from apache/TINKERPOP-2063
add aaf341486d Add a public getter for parameter items for ProductStep
add 447071bbcf Merge branch 'pr-3300' into 3.7-dev
add 61379f146f Merge branch '3.7-dev' into 3.8-dev
add 8891298d14 Merge branch '3.8-dev'
add 2e206deda7 TINKERPOP-2699 Enabled a test
add 7885a89465 Added gherkin tags for storing map,list,set CTR
add 88ff817369 Merge branch '3.8-dev'
add 8a84469b17 Added test tags for uuid/date CTR
add 3efae2fe84 Merge branch '3.8-dev'
add 334e124eb3 Go GLV added HTTP streaming & interceptors (#3299)
add 49c50c13fb Added AGENTS.md
add e27b5e871c Merge branch '3.7-dev' into 3.8-dev
add d35aa999b2 Merge branch '3.8-dev'
add 6427e798c3 Added dev docs around AGENTS.md CTR
add dff47e7ef2 Merge branch '3.7-dev' into 3.8-dev
add 4f9fc68d69 Merge branch '3.8-dev'
add 54cbdc4552 TINKERPOP-2992 Fixed orderability bug on OffsetDateTime
add 77ccbf9c0d Merge branch 'TINKERPOP-2992' into 3.8-dev
add 5d18f21b49 Merge branch '3.8-dev'
add da29461e05 Bump actions/cache from 4 to 5 (#3286)
add 0d696a6a17 Bump actions/checkout from 5 to 6 (#3282)
add f607268f26 Bump github/codeql-action from 3 to 4 (#3235)
add e8c5e00fc9 Merge branch '3.7-dev' into 3.8-dev
add 23c0e51c7c Merge branch '3.8-dev'
add 3a747fa9d0 Add .venv to ignores CTR
add 4ce4cdb58a Restructured gremlin-python testing
add 73e784f55d Merge branch '3.7-dev' into 3.8-dev
add 9507778ac9 Merge branch '3.8-dev'
add b63eff5f5c Added AGENTS.md to gremlin-python
add 9f6faf0d89 Merge branch '3.7-dev' into 3.8-dev
add 2c7c45b433 Merge branch '3.8-dev'
add 920bce40cf Test refactoring
add 0c2ddfa9b1 Removed /dist for gremlin-python
add a5bc8bc5ed Merge branch '3.7-dev' into 3.8-dev
add 35c066bb42 Merge branch '3.8-dev'
add faf56dd475 Fix mistakes and inconsistencies in GraphBinary4 specification CTR.
add 26881ebdc5 Added support for property assertion
add b6ad7feaf2 Replace Bytecode with GremlinLang in JavaScript GLV (#3307)
add 27d9b8bb50 Fixed build issues with hadoop-gremlin CTR
add 3ceadaa72e Added hadoop-gremlin to GHA CTR
add 1477090b8c Merge branch '3.7-dev' into 3.8-dev
add 27b6234d9f Merge branch '3.8-dev'
add 33826a6224 Used proper module exclusion for hadoop GHA CTR
add 0d6a2d6763 Merge branch '3.8-dev'
add 04eff85624 Run feature and integration tests in parallel for hadoop GHA CTR
add 0a31d99f80 Merge branch '3.7-dev' into 3.8-dev
add 176d1e210c Merge branch '3.8-dev'
add 748ef64bf9 Remove duplicate testing covered in feature tests CTR
add 098e58c3b6 Merge branch '3.8-dev'
add fbd35ed382 Commented out the hadoop-standard build
add 19386f64c4 Merge branch '3.8-dev'
add 964d6f4b52 Fixed issue with Gremlin semantics around comparability
add f80c374530 Merge branch 'comparator-fix' into 3.8-dev
add afb0882f0f Merge branch '3.8-dev'
add 8f4182e812 TINKERPOP-3119 Added better pythonic access for properties
add bed0829505 Merge pull request #3308 from apache/TINKERPOP-3119
add 5295c62eaa Added a point about final usage as a code style CTR
add 766c70a3a2 Merge branch '3.7-dev' into 3.8-dev
add a92102e779 Merge branch '3.8-dev'
add d0e2d4349a Mentioned need to have ASF license in files CTR
add 34d32f4009 Merge branch '3.7-dev' into 3.8-dev
add cbeee14949 Merge branch '3.8-dev'
add b2816c5669 Preserve BulkSet in P
add 02584bdf60 Merge branch '3.8-dev'
add 629fe5a18d Tightened up AGENTS.md CTR
add 91be2a8528 Merge branch '3.7-dev' into 3.8-dev
add 3535f428c0 Merge branch '3.8-dev'
add 1aaba16e2f Updated URL to Practical Gremlin for Second Edition CTR
add 06532a53fd Merge branch '3.8-dev'
add 500e2b2750 Bumped to antlr 4.13.2 CTR
add 92f10e1c95 Added claude to gitignore CTR
add 5a075e5c18 Merge branch '3.7-dev' into 3.8-dev
add 9ac17810f6 Merge branch '3.8-dev'
add d3865e5b18 Add changes from v1 section to the GraphBinary specification CTR
add c070d3354a Explicit use of Cardinality for sideEffect test CTR
add 3a214ce90e Merge branch '3.8-dev'
add 544d34439c Fix Merge typecode in graphbinary specification CTR
add 1671d38f9f CTR update dotnet docker test set up to avoid masking build errors
add 6b99e214c8 Merge branch '3.7-dev' into 3.8-dev
add 8b45a6ff04 CTR dotnet fix regex parsing for Gremlin.cs generation to resolve build failure & update examples
add 890209fb49 Merge branch '3.8-dev'
add 4ac34ee026 Pin gremlin-javascript to patch versions.
add 297376f337 Merge branch '3.8-dev'
add b22038a20a Remove grunt dependency for straight jsdoc usage
add b606b20c14 Merge branch '3.7-dev' into 3.8-dev
add a855ac9111 Merge branch '3.8-dev'
add 995d48e299 Updated eslint dependency for gremlin-javascript CTR
add 796162e146 Updated cucumber to latest version CTR
add d10f8dc7fd Merge branch '3.7-dev' into 3.8-dev
add 3937cee5b5 Merge branch '3.8-dev'
add ad74eccabc Removed duplicate cucumber declaration CTR
add 991753b507 Update JS driver to GraphBinary4 (#3312)
add 5547f4e048 Fixed up licenses for gremlin-javascript
add 83c6fb9175 Merge branch '3.7-dev' into 3.8-dev
add 2661049a5c Merge branch '3.8-dev'
add 7c3a7ecd17 update index.html (#3314)
add 1c8ad966f0 TINKERPOP-3235 Fixed mergeE validation of static onCreate overrides
add 750f0811d1 Merge branch '3.7-dev' into 3.8-dev
add a892813dcd Merge branch '3.8-dev'
add 390741df8d Removed licenses for javascript
add b1f161e2ed Merge branch '3.7-dev' into 3.8-dev
add 01199bce81 Merge branch '3.8-dev'
add 32b7000415 License normalization CTR
add 725bd97475 Merge branch '3.7-dev' into 3.8-dev
add 57dc5514e0 Merge branch '3.8-dev'
add 159bd6c63d License header normalization CTR
add fd2c4b4a1d Added license header fix utility CTR
add a49bd2d53e Deprecated LANGUAGE translator for CANONICAL
add b2443ccf4a License file normalization CTR
add a80eaeb2ac Merge branch '3.7-dev' into 3.8-dev
add a1406b1095 Merge branch '3.8-dev'
add 71da803899 Add gremlin-mcp to dependabot CTR
add 45196e7f52 Changed copyright to 2026 CTR
add 97322b59d6 Merge branch '3.7-dev' into 3.8-dev
add 3a00724d6a Updated copyright to 2026 CTR
add cc51de3d6f Merge branch '3.8-dev'
add 6290b41905 TINKERPOP-3214 Fixed bug in VertexProperty id generation
add 81073eac4e Merge branch '3.7-dev' into 3.8-dev
add 3fde8bf60a Merge branch '3.8-dev'
add 884e28ba48 CTR fix examples to run on master with HTTP
add 3488e32081 Replace WebSocket with HTTP in JS GLV (#3330)
add 802e84d4d6 Removed build directory from python - accidentally pushed CTR
add c80e8fb353 Merge branch '3.7-dev' into 3.8-dev
add 9ac58c2259 Merge branch '3.8-dev'
add 6474532b90 Improved AGENTS.md to better set the license header CTR
add c34749f48d Merge branch '3.7-dev' into 3.8-dev
add e9b00d3825 Merge branch '3.8-dev'
add b75f82cab5 backport gremlin-js node 22+ compatibility changes from 3.8 to 3.7 (#3333)
add a1cfb49245 Merge branch '3.7-dev' into 3.8-dev
add 17060bc6b3 Merge branch '3.8-dev'
add 5d86993f7e Enable .NET driver over HTTP for 4.0.0 (#3338)
add 899ab62e18 Add HTTP transaction support to gremlin-server (#3328)
add ad32d33b00 Merge ResultQueue into ResultSet to simplify result handling
add baf9477c69 Add HTTP transaction support to gremlin-driver
add e9540e3514 [TINKERPOP-3236] Expand grammar argument types for coin and pagerank steps to numericArgument (#3331)
add e54ae50e4c TINKERPOP-3210 Fix cap() step mid-traversal in OLAP (#3332)
add a112cae9f5 Merge branch '3.7-dev' into 3.8-dev
add ddfb1b6db3 Merge branch '3.8-dev'
add faa14f4027 Added Translator infrastructure to gremlin-javascript
add 5707946983 Added translator tool to gremlin-mcp
add 319d53ec43 Added docs for gremlin-mcp and javascript translator
add b42047ee29 Bumped to typescript for gremlint
add 76dbaf7b45 Fix string replace() escaping in GroovyTranslateVisitor (tinkerpop-fy3)
add 013831f55d Harden patch-antlr4ng.js and pin antlr4ng to exact version (tinkerpop-8s2)
add 499700426f Better defined canonical form for llm normalization in gremlin-mcp
add c9e207224b Added extra translator tests to cover tx/terminal steps
add 164c2a71d4 Merge pull request #3336 from apache/js-translator
add f0daf38371 CTR: Update gremlin-python docker health-check to use gremlin-lang
add f59eee536f Migrate JS packages to npm workspaces, enabling semver gremlin dep in gremlin-mcp
add f4f693760d Consolidate JS Maven modules under gremlin-js/ parent
add d72dc666a7 Merge pull request #3341 from apache/js-multi
add 7a9c35cf64 Bumped to typescript for gremlint
add b0b726a1c8 Upgrade gremlint tooling and align eslint versions across workspace (tinkerpop-850)
add f2585713aa Bumped to node 22 as a minimum CTR
add 3d5e1b8f78 Removed unified handler testing
add 8aaac87a0c Modernized some references in the documentation CTR
add a55c1bfb4e Add Request Interceptors for Javascript (#3337)
add 74cfcbdccd Fix Docker health check requests for GLV integration tests
add 1aa60dafbe Uses newer GHA for .NET to avoid node 20 which EOL CTR
add 4ce4717925 Add custom type serializer API for gremlin-go (#3335)
add 3c5ef59a1f Merge branch '3.8-dev'
add 6ddc578bc7 Updated dependabot given gremlin-js workspace.
add 06e03bae51 Add GremlinLang number type suffixes and fix Long deserialization in JS GLV (#3340)
add da1619db75 Update order of operation for request interceptor and serialization in gremlin-go (#3358)
add 6861dfa17c CTR updated reference and upgrade docs for go and .net GLVs
add 4fc72204a2 Migrate docs/gremlint from Create React App to Vite
add 5ef1d32fc8 CTR Fix incorrect handling of Traverser in traversal.hasNext() in JS
add c4bf62c645 TINKERPOP-3227 Add documentation around reuseConnectionsForSessions CTR
add 9dbf97c904 Merge branch '3.8-dev'
add 9b65ded6d5 Remove neo4j-gremlin module deprecated in 3.7.0
add 5f7639048d Merge pull request #3368 from apache/neo4j-remove
add 4728b38eaa Add remote transaction upgrade documentation CTR
add 4f07629333 CTR updated imports from commons.collections to newer commons.collections4
add 69e2f02fa8 Update 4.0-beta2 upgrade/gremlin-variants documentation CTR
add b215dda0ae Minor doc fixes/improvements CTR
add 190927ec7f Merge branch '3.7-dev' into 3.8-dev
add 27e941f3ce Merge branch '3.8-dev'
add 343f9cb6bd Minor doc fixes CTR
add 71b37904b9 Merge branch '3.8-dev'
add 5ed69594f7 Minor docs updates CTR
add f3b1f6cdc9 Remove Lambda classes and GraphSON from .Net as only GraphBinary4 is kept in 4.0 (#3369)
add 81b5628d77 Update Graph Binary version implementation from 1 to 4 (#3370)
add c7ddc90e79 Fix misc GremlinLang and GraphBinary issues in Go (#3371)
add 8a1b2c8aa7 Rename GraphBinary4 serializer BYTEBUFFER to BINARY in gremlin-driver CTR
add 47a555b358 coerce set into list when it contains non-hashable elements for python (#3359)
add d73b824330 Merge branch '3.7-dev' into 3.8-dev
add b575e979df Merge branch '3.8-dev'
add fde92e7792 TINKERPOP-3230 Add logging for missing fields in GraphSON response CTR
add 7a87893d1d Merge branch '3.7-dev' into 3.8-dev
add d468061bba Merge branch '3.8-dev'
add 9dc362e603 CTR update license/notice, fix publish-docs.sh, & update gremlin files
add 940aea08b3 Merge branch '3.7-dev' into 3.8-dev
add f9e36b767a Merge branch '3.8-dev'
add a6cd9a3dab CTR Upgrade Go runtime to Go 1.25 as 1.24 has past end of life
add 6da07aee09 Merge branch '3.7-dev' into 3.8-dev
add a718b3a8fd Bump codecov/codecov-action from 5 to 6 (#3367)
add 0099a7f77f Bump actions/setup-go from 5 to 6 (#3200)
add 19357ff7be Merge branch '3.7-dev' into 3.8-dev
add c65697746d Merge branch '3.8-dev'
add 9924ab35ae Misc GremlinLang and ResultSet fixes (#3373)
add 485a67382d Add transactions to HTTP API section in provider documentation CTR
add 2722cef70f Update GraphSON4 specification and fix mistakes in Java implementation CTR
add e0a65c729f Minor fixes to README.md files CTR
add 50aa9700f7 Merge branch '3.8-dev'
add d1f0fcedb5 Fix test assertion needed from 2722cef70f25 change CTR
add 3c1aea1a5d Gdotv rebrand (#3374)
add 8e286c5d97 Update session reuse and Python set deserialization documentation CTR
add 0db826ae68 Merge branch '3.7-dev' into 3.8-dev
add e679b6c315 CTR small fixes to mcp reference doc and upgrade docs
add 5ad09cb842 Merge branch '3.8-dev'
add c1f943e513 CTR Modernize JS README and examples for TP4, and update JS Upgrade Docs
add 82b3db5eaa Migrate from JSDoc to TypeDoc (#3375)
add 9f85e9123d CTR Modernize gremlin-go README
add f7c5c864c0 CTR Update go README
add d80b9be720 Merge branch '3.7-dev' into 3.8-dev
add 84221d761c Merge branch '3.8-dev'
add 2ea8ad05f8 Update HTTP remote transactions documentation CTR
add c168078853 CTR Update gremlin-javascript reference docs
add ca05acf3db Update beta warnings in documentation CTR
add 7178a2edcc Update WebSocket mentions in documentation CTR
add 1fe5bcd75a CTR make spark/hadoop docs placeholders & reformat glv in upgrade docs
add c7659d71b7 TinkerPop 3.7.6 release
add 646c03503f Merge branch '3.7-dev' into 3.8-dev
add 5e218532b9 TinkerPop 3.8.1 release
add 92c5d9cda3 Merge branch '3.8-dev'
add e507f0813c Fixed bad npm reference in README for gremlin-mcp CTR
add 371dedcb7d TinkerPop 4.0.0-beta.2 release
add 7e9ddf3d0d CTR update go module version from v3 to v4 for 4.0.0-beta.2 release
add 2c425c0f84 CTR update to 3.7.7-SNAPSHOT
add d08008e18c Merge branch '3.7-dev' into 3.8-dev
add d2c77a7596 CTR update to 3.8.2-SNAPSHOT
add 9615c7e869 Merge branch '3.8-dev'
add 0874de2ee6 CTR update homepage for release and update to 4.0.0-SNAPSHOT post-release
add 37e085ae2e CTR update PR template
add 41a90083a8 CTR add LinkedIn link to site
add 352312a8d3 Add splitByElement() to Gherkin step definitions for nested collection parsing
add 10378a7bb6 docs
add 7fe79e7aa8 Added tinkerpop-dev skills based on Agent Skills standard
add 7711c14b07 Improved agent skills definitions.
add 59a2d02397 Merge pull request #3380 from apache/agent-skills
add 751cf3e728 Added to .gitignore CTR
add 9959310019 Add splitByElement() to Gherkin step definitions for nested collection parsing
add 6a95ff5a7b docs
add 3e5ca4e4dd Added saftey rules to AGENTS.md CTR
add 73d09b5f86 Merge branch '3.7-dev' into 3.8-dev
add 992eabd928 Merge branch '3.8-dev'
add cdab3784c0 CTR update Future doc
add bc9621f75c Merge branch '3.8-dev'
add c29ce6e154 CTR Fix generate-modern-readonly.groovy
add 7e9615ef3b TINKERPOP-3225 conjoin has incorrect null handling (#3372)
add fae1dcc362 Merge branch '3.7-dev' into 3.8-dev
add 9509d4f92d Fix GHA exclusions for GLVs (#3378)
add e3be426d50 Merge branch '3.8-dev'
add 72d6881362 GO support for escaped characters (#3381)
add aa383872be CTR: Pin more-itertools for 3.9 compatibility in GHA
add f4516e4370 CTR Bump commons-beanutils to 1.11.0 (CVE-2025-48734)
add 0f02480e94 Merge branch '3.7-dev' into 3.8-dev
add b08a6f0f71 Merge branch '3.8-dev'
add 66662ca166 Add gremlator: client-side Gremlin query translator SPA
add 6d0172d5c4 Upgraded gremlator to vite and better matched gremlint
add 8b3d94778c Merge pull request #3382 from apache/gremlator
add d03f568d35 CTR Regen feature test files
add 485f3a6da1 Merge branch '3.8-dev'
add 247201c9d0 Clean up and upgrade gremlin-js dependencies CTR
add 2bd0280c8e docs/gremlint and docs/gremlator dependency upgrade CTR
add 157b213776 TINKERPOP-3233 Added escaped characters to docs (#3383)
add e63871b437 Aligned AGENTS.md better with ASF AI contribution guidelines
add 8a2ddccebd Merge pull request #3398 from apache/agentsmd
add 02391db5d2 Updated AGENTS.md with language aligning to ASF AI usage guidance
add a4d852495e Merge branch '3.7-dev' into 3.8-dev
add c8689be517 Merge branch '3.8-dev'
add bec044ea00 CTR Add Configuring to GraphStepPlaceholder and VertexStepPlaceholder
add 72b34a3476 Add getOldChar() and getNewChar() getters to ReplaceGlobalStep and ReplaceLocalStep (#3400)
add 9fb1700a5d Merge branch '3.8-dev'
add eb276fdbbd Added basic bootstrap for beads
add 0531cbb7d0 Fix bulking behavior in gremlin-go for TP 4.0 (#3397)
add 62bd6dad66 Response Streaming in JS (#3395)
add 3e0641a322 CTR Fix ClassCastException when numeric request fields are deserialized as Integer
add cbffc7a140 Clarify Assisted-by trailer format in AGENTS.md
add 3ad5a83983 Merge pull request #3417 from L0Lmaker/improvement/agents-md-assisted-by-clarity
add 51ec5bc98d TINKERPOP-3153 Add Char, Duration, Binary support to gremlin-lang.
add 0f592d4007 Streaming support for Python (#3396)
add 2195ef59cd Bump @eslint/js from 9.39.4 to 10.0.1 in /gremlin-js (#3408)
add 2d477fd709 Bump eslint from 9.39.4 to 10.3.0 in /gremlin-js (#3409)
add 2e7d0dd4a1 Upgrade build tooling for docs/gremlint and docs/gremlator CTR
add 30129ad373 Support Streaming in .NET (#3403)
add d6861d18a9 Bump @types/node from 22.19.17 to 25.6.0 in /gremlin-js (#3387)
add c9a4a75250 TINKERPOP-3107 Remove Groovy dependency from default server initialization (#3384)
add 4350b722fc Add testing and docs for supported Python versions (#3421)
add 10047009c2 CTR add kiro to gitignore
add 6546a08642 Merge branch '3.7-dev' into 3.8-dev
add 622fc77b5e Merge branch '3.8-dev'
add be866cd411 Fix null map key parsing in GenericLiteralVisitor
add 182daa37b1 TINKERPOP-3247 Convert request bindings to gremlin-lang string format
add 39ce320d7c Merge pull request #3402 from apache/stringify-params
add 8e7f8fbf92 Add byte buffer to improve gremlin-python performance (#3422)
add 9eca2f5b31 [TINKERPOP-3249] Remove sparql-gremlin (#3426)
add c1e7b6afcb Refactor JS CI jobs to use matrix strategy and add Node 26 (#3425)
add 6d0e2c259d Merge branch '3.7-dev' into 3.8-dev
add 7175989121 Merge branch '3.8-dev'
add d396815e4c TINKERPOP-3244 Add NextN(n) to Traversal in gremlin-go
add ec32b0c4d5 TINKERPOP-3244 Wire NextN(n) into Go translators and document divergence
add 584ada5d4d TINKERPOP-3244 Mention Go translator updates in CHANGELOG entry
add a28cd1f2f1 Merge branch 'master' into improvement/TINKERPOP-3244-go-next-n
add 40fa3ef90d [TINKERPOP-3244] Add NextN(n) to Traversal in gremlin-go (#3416)
add c11d71b30d Add streaming HTTP response support to gremlin-driver (#3419)
add cf0118a45c Add typed numeric wrappers and precise number mode to gremlin-javascript (#3427)
add d129283e08 Fix Flaky .Net and server tests (#3431)
add 8e49072e9f Fixed issues with dangling docker infrastructure (#3435)
add ec6830fadd [INFRA] Set up default rulesets for default and release branches (#3429)
add 86a0612c85 Fix port binding race between sequential GLV integration test runs
new 36e90a1261 Intro vector search via HNSW
new 91fac89656 vector search in transaction graph
new 00fb9a57e5 return distances with element
new 74774f2349 Add ServiceRegistry for vector search with call()
new 8bd6f8a3cf docs and imports
new 566c19621b Resize index
new 852a9a00e7 tx working with vector on commit
new d0e8403eb8 distance calc and search by embedded
new 2e405b33ac Cleaned up docs
new 53a5eb8899 Moved Tinker vector search index to 4.0.0
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (63173b1300)
\
N -- N -- N refs/heads/TINKERPOP-3158 (53a5eb8899)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 10 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.asf.yaml | 14 +-
.github/dependabot.yml | 70 +-
.github/pull_request_template.md | 4 +-
.github/workflows/build-test.yml | 229 +-
.github/workflows/codeql.yml | 26 +-
.gitignore | 20 +-
.mailmap | 18 +-
.skills/tinkerpop-dev/SKILL.md | 164 +
.skills/tinkerpop-dev/references/beads-workflow.md | 234 +
.skills/tinkerpop-dev/references/build-dotnet.md | 97 +
.skills/tinkerpop-dev/references/build-go.md | 111 +
.skills/tinkerpop-dev/references/build-java.md | 67 +
.../tinkerpop-dev/references/build-javascript.md | 171 +
.skills/tinkerpop-dev/references/build-python.md | 127 +
.../references/dev-environment-setup.md | 140 +
.skills/tinkerpop-dev/references/documentation.md | 45 +
.skills/tinkerpop-dev/references/gremlin-mcp.md | 159 +
.skills/tinkerpop-dev/scripts/check-env.sh | 153 +
AGENTS.md | 73 +
CHANGELOG.asciidoc | 5597 +-
CONTRIBUTING.asciidoc | 25 -
CONTRIBUTING.md | 115 +
LICENSE | 2 +-
NOTICE | 2 +-
README.asciidoc | 73 -
README.md | 152 +
bin/agent-setup.sh | 200 +
bin/asf-license-header.txt | 16 +
bin/beads-bootstrap.sh | 92 +
bin/fix-license-headers.py | 526 +
bin/generate-home.sh | 16 +-
bin/publish-docs.awk | 2 +-
bin/publish-docs.sh | 12 +-
bin/publish-home.awk | 2 +-
bin/run-examples.sh | 12 +-
bin/update-current-docs.sh | 2 +-
bin/validate-distribution.sh | 2 +-
data/air-routes.json | 3749 +
data/air-routes.kryo | Bin 0 -> 3405490 bytes
data/air-routes.xml | 277709 ++++++++++++++++++
data/script-input.groovy | 2 +-
docker/Dockerfile | 5 +-
docker/build.sh | 7 +-
docker/gremlin-server/docker-entrypoint.sh | 15 +-
docker/gremlin-server/gremlin-console-jaas.conf | 2 +-
.../gremlin-server-integration-krb5.yaml | 48 +-
.../gremlin-server-integration-secure.yaml | 56 +-
.../gremlin-server/gremlin-server-integration.yaml | 57 +-
docker/gremlin-server/krb5.conf | 13 +-
docker/gremlin-test-server/Dockerfile | 2 +-
docker/gremlin-test-server/krb5.conf | 13 +-
docker/scripts/build.sh | 8 +-
docs/archive/changelogs/changelog-3.0.x.asciidoc | 793 +
docs/archive/changelogs/changelog-3.1.x.asciidoc | 629 +
docs/archive/changelogs/changelog-3.2.x.asciidoc | 1138 +
docs/archive/changelogs/changelog-3.3.x.asciidoc | 779 +
docs/archive/changelogs/changelog-3.4.x.asciidoc | 802 +
docs/archive/changelogs/changelog-3.5.x.asciidoc | 750 +
docs/archive/changelogs/changelog-3.6.x.asciidoc | 515 +
docs/gremlator/.gitignore | 20 +
{gremlint => docs/gremlator}/.prettierrc | 0
{gremlint => docs/gremlator}/LICENSE | 0
docs/gremlator/README.md | 62 +
docs/gremlator/index.html | 38 +
docs/gremlator/package-lock.json | 5097 +
docs/gremlator/package.json | 57 +
docs/{gremlint => gremlator}/public/favicon.ico | Bin
docs/gremlator/public/manifest.json | 15 +
docs/gremlator/public/robots.txt | 20 +
docs/gremlator/src/App.tsx | 54 +
docs/gremlator/src/components/ErrorAlert.tsx | 64 +
docs/gremlator/src/components/Footer.tsx | 46 +
docs/gremlator/src/components/LanguageTabs.tsx | 69 +
docs/gremlator/src/components/Navigator.tsx | 60 +
docs/gremlator/src/components/QueryInput.tsx | 104 +
.../gremlator/src/components/TranslationResult.tsx | 104 +
docs/gremlator/src/index.tsx | 27 +
docs/gremlator/src/store/actions.ts | 20 +
docs/gremlator/src/store/index.ts | 22 +
docs/gremlator/src/store/initialState.ts | 31 +
docs/gremlator/src/store/reducers.ts | 59 +
docs/gremlator/src/store/types.ts | 57 +
docs/gremlator/src/views/QueryTranslator/index.tsx | 76 +
docs/gremlator/tsconfig.json | 31 +
docs/{gremlint => gremlator}/tslint.json | 0
docs/gremlator/vite.config.ts | 51 +
docs/gremlint/.gitignore | 5 +-
docs/gremlint/README.md | 32 +-
docs/gremlint/config-overrides.js | 26 -
docs/gremlint/index.html | 37 +
docs/gremlint/package-lock.json | 36489 +--
docs/gremlint/package.json | 61 +-
docs/gremlint/public/index.html | 60 -
docs/gremlint/public/robots.txt | 2 +-
docs/gremlint/src/App.css | 2 +-
docs/gremlint/src/App.test.tsx | 9 +-
docs/gremlint/src/App.tsx | 2 +-
docs/gremlint/src/components/CenteredContainer.tsx | 2 +-
docs/gremlint/src/components/CodePreview.tsx | 2 +-
docs/gremlint/src/components/FadeIn.tsx | 2 +-
docs/gremlint/src/components/Footer.tsx | 9 +-
docs/gremlint/src/components/LoadingAnimation.tsx | 2 +-
docs/gremlint/src/components/NavigationButton.tsx | 2 +-
docs/gremlint/src/components/Navigator.tsx | 2 +-
docs/gremlint/src/components/Paragraph.tsx | 2 +-
docs/gremlint/src/components/QueryInput.tsx | 2 +-
docs/gremlint/src/components/Spacer.ts | 2 +-
docs/gremlint/src/components/StyleGuideRule.tsx | 2 +-
docs/gremlint/src/components/TextButton.tsx | 2 +-
docs/gremlint/src/components/Title.tsx | 2 +-
docs/gremlint/src/components/Toggle.tsx | 2 +-
docs/gremlint/src/components/View.tsx | 2 +-
docs/gremlint/src/index.css | 2 +-
docs/gremlint/src/index.tsx | 9 +-
docs/gremlint/src/libs/reduced-state/dispatch.ts | 2 +-
docs/gremlint/src/libs/reduced-state/index.ts | 2 +-
.../src/libs/reduced-state/reducedState.ts | 2 +-
docs/gremlint/src/libs/reduced-state/types.ts | 2 +-
.../src/libs/reduced-state/useReducedState.ts | 2 +-
docs/gremlint/src/react-app-env.d.ts | 4 +-
docs/gremlint/src/reportWebVitals.ts | 18 +-
docs/gremlint/src/router.ts | 2 +-
docs/gremlint/src/setupTests.ts | 2 +-
docs/gremlint/src/store/actions.ts | 2 +-
docs/gremlint/src/store/index.ts | 2 +-
docs/gremlint/src/store/initialState.ts | 2 +-
docs/gremlint/src/store/reducers.ts | 2 +-
docs/gremlint/src/store/routines.ts | 2 +-
docs/gremlint/src/store/types.ts | 2 +-
docs/gremlint/src/styleVariables.ts | 2 +-
.../src/views/QueryFormatter/AdvancedOptions.tsx | 2 +-
docs/gremlint/src/views/QueryFormatter/index.tsx | 2 +-
docs/gremlint/src/views/StyleGuide/index.tsx | 2 +-
docs/gremlint/src/views/StyleGuide/rules.ts | 2 +-
docs/gremlint/tsconfig.json | 17 +-
docs/gremlint/vite.config.ts | 45 +
docs/javadoc/overview.html | 26 +-
docs/preprocessor/awk/cleanup.awk | 2 +-
docs/preprocessor/awk/ignore.awk | 2 +-
docs/preprocessor/awk/init-code-blocks.awk | 4 +-
docs/preprocessor/awk/language-variants.awk | 2 +-
docs/preprocessor/awk/prepare.awk | 2 +-
docs/preprocessor/awk/prettify.awk | 2 +-
docs/preprocessor/awk/progressbar.awk | 2 +-
docs/preprocessor/awk/progressbar.groovy.template | 2 +-
docs/preprocessor/awk/tabify.awk | 2 +-
docs/preprocessor/install-plugins.groovy | 2 +-
docs/preprocessor/install-plugins.sh | 2 +-
docs/preprocessor/preprocess-file.sh | 15 +-
docs/preprocessor/preprocess.sh | 7 +-
docs/sass/tabs.scss | 2 +-
docs/site/home/benefits-use-cases.html | 198 +-
docs/site/home/community.html | 245 +-
docs/site/home/css/prism.css | 4 +-
docs/site/home/download.html | 768 +-
docs/site/home/gremlin.html | 151 +-
docs/site/home/img/linkedin-logo.svg | 18 +
docs/site/home/img/providers/25.png | Bin 7887 -> 3782 bytes
docs/site/home/img/providers/26.png | Bin 2508 -> 2496 bytes
docs/site/home/img/providers/puppy-graph.png | Bin 41130 -> 0 bytes
docs/site/home/index.html | 224 +-
docs/site/home/js/jquery-1.11.1.js | 639 -
docs/site/home/js/jquery-1.12.4.min.js | 5 +
docs/site/home/js/prism.js | 59 +-
docs/site/home/providers.html | 232 +-
docs/site/home/robots.txt | 6 +
docs/site/home/sitemap.xml | 39 +
docs/src/dev/developer/administration.asciidoc | 24 +-
docs/src/dev/developer/contributing.asciidoc | 48 +-
.../dev/developer/development-environment.asciidoc | 177 +-
docs/src/dev/developer/for-committers.asciidoc | 203 +-
docs/src/dev/developer/index.asciidoc | 26 +-
docs/src/dev/developer/meetings.asciidoc | 201 -
docs/src/dev/developer/release.asciidoc | 86 +-
docs/src/dev/future/index.asciidoc | 76 +-
.../dev/future/proposal-3-remove-closures.asciidoc | 24 +-
.../dev/future/proposal-arrow-flight-2.asciidoc | 24 +-
.../src/dev/future/proposal-asbool-step-7.asciidoc | 72 +
.../dev/future/proposal-asnumber-step-6.asciidoc | 180 +
.../proposal-declarative-match-step-9.asciidoc | 158 +
docs/src/dev/future/proposal-equality-1.asciidoc | 24 +-
docs/src/dev/future/proposal-scoping-5.asciidoc | 191 +
.../src/dev/future/proposal-transaction-4.asciidoc | 25 +-
.../dev/future/proposal-type-predicate-8.asciidoc | 265 +
docs/src/dev/io/graphbinary.asciidoc | 729 +-
docs/src/dev/io/graphml.asciidoc | 24 +-
docs/src/dev/io/graphson.asciidoc | 7857 +-
docs/src/dev/io/gryo.asciidoc | 24 +-
docs/src/dev/io/index.asciidoc | 24 +-
docs/src/dev/provider/gremlin-semantics.asciidoc | 676 +-
docs/src/dev/provider/index.asciidoc | 691 +-
docs/src/dev/provider/policies.asciidoc | 24 +-
docs/src/docinfo.html | 26 +-
docs/src/index.asciidoc | 33 +-
docs/src/recipes/anti-patterns.asciidoc | 30 +-
docs/src/recipes/appendix.asciidoc | 28 +-
docs/src/recipes/between-vertices.asciidoc | 24 +-
docs/src/recipes/centrality.asciidoc | 28 +-
docs/src/recipes/collections.asciidoc | 56 +-
docs/src/recipes/connected-components.asciidoc | 26 +-
docs/src/recipes/cycle-detection.asciidoc | 24 +-
docs/src/recipes/duplicate-edge.asciidoc | 24 +-
docs/src/recipes/duplicate-vertex.asciidoc | 24 +-
docs/src/recipes/edge-move.asciidoc | 24 +-
docs/src/recipes/element-existence.asciidoc | 24 +-
docs/src/recipes/if-then-based-grouping.asciidoc | 24 +-
docs/src/recipes/index.asciidoc | 24 +-
docs/src/recipes/looping.asciidoc | 24 +-
docs/src/recipes/olap-spark-yarn.asciidoc | 29 +-
.../recipes/operating-on-dropped-elements.asciidoc | 24 +-
docs/src/recipes/pagination.asciidoc | 24 +-
docs/src/recipes/recommendation.asciidoc | 32 +-
docs/src/recipes/shortest-path.asciidoc | 32 +-
docs/src/recipes/style-guide.asciidoc | 24 +-
.../src/recipes/traversal-component-reuse.asciidoc | 24 +-
docs/src/recipes/traversal-induced-values.asciidoc | 24 +-
docs/src/recipes/tree.asciidoc | 24 +-
docs/src/reference/acknowledgements.asciidoc | 24 +-
docs/src/reference/compilers.asciidoc | 435 -
docs/src/reference/conclusion.asciidoc | 24 +-
docs/src/reference/gremlin-applications.asciidoc | 1476 +-
docs/src/reference/gremlin-variants.asciidoc | 1416 +-
.../reference/implementations-hadoop-end.asciidoc | 31 +-
.../implementations-hadoop-start.asciidoc | 37 +-
docs/src/reference/implementations-intro.asciidoc | 24 +-
docs/src/reference/implementations-neo4j.asciidoc | 350 -
docs/src/reference/implementations-spark.asciidoc | 41 +-
.../reference/implementations-tinkergraph.asciidoc | 109 +-
docs/src/reference/index.asciidoc | 26 +-
docs/src/reference/intro.asciidoc | 133 +-
docs/src/reference/preface.asciidoc | 24 +-
docs/src/reference/the-graph.asciidoc | 24 +-
docs/src/reference/the-graphcomputer.asciidoc | 24 +-
docs/src/reference/the-traversal.asciidoc | 989 +-
docs/src/tutorials/getting-started/index.asciidoc | 34 +-
.../gremlin-language-variants/index.asciidoc | 24 +-
docs/src/tutorials/gremlins-anatomy/index.asciidoc | 24 +-
.../tutorials/the-gremlin-console/index.asciidoc | 27 +-
docs/src/upgrade/appendix.asciidoc | 26 +-
docs/src/upgrade/index.asciidoc | 38 +-
docs/src/upgrade/release-3.0.x-incubating.asciidoc | 46 +-
docs/src/upgrade/release-3.1.x-incubating.asciidoc | 68 +-
docs/src/upgrade/release-3.2.x-incubating.asciidoc | 141 +-
docs/src/upgrade/release-3.3.x.asciidoc | 59 +-
docs/src/upgrade/release-3.4.x.asciidoc | 57 +-
docs/src/upgrade/release-3.5.x.asciidoc | 65 +-
docs/src/upgrade/release-3.6.x.asciidoc | 55 +-
docs/src/upgrade/release-3.7.x.asciidoc | 414 +-
docs/src/upgrade/release-3.8.0.asciidoc | 1843 +
docs/src/upgrade/release-3.8.1.asciidoc | 142 +
docs/src/upgrade/release-3.8.2.asciidoc | 24 +
docs/src/upgrade/release-3.8.x.asciidoc | 401 -
docs/src/upgrade/release-4.x.x.asciidoc | 1468 +
docs/static/images/gremlin-67.png | Bin 0 -> 188285 bytes
docs/static/images/gremlin-calendar.png | Bin 0 -> 186220 bytes
docs/static/images/gremlin-deserialized-portal.png | Bin 0 -> 108766 bytes
docs/static/images/gremlin-fine.png | Bin 0 -> 907322 bytes
docs/static/images/gremlin-serialized-portal.png | Bin 0 -> 185002 bytes
docs/static/images/gremlin-serialized.png | Bin 0 -> 133695 bytes
docs/static/images/gremlin-serialized2.png | Bin 0 -> 150231 bytes
docs/static/images/gremlin-string.png | Bin 0 -> 224663 bytes
docs/static/images/gremlin-tag.png | Bin 0 -> 112202 bytes
docs/static/images/gremlin-with-collection.png | Bin 0 -> 215192 bytes
docs/static/images/gremlins-wildest-dreams.png | Bin 0 -> 201941 bytes
docs/static/images/neo4j-ha.png | Bin 108249 -> 0 bytes
docs/stylesheets/tinkerpop-base.css | 2 +-
docs/stylesheets/tinkerpop.css | 2 +-
docs/upgrade/README.md | 39 +
docs/upgrade/java/README.md | 82 +
docs/upgrade/java/bin/gremlin-dev.sh | 206 +
docs/upgrade/java/pom.xml | 154 +
.../apache/tinkerpop/example/cmdb/Application.java | 29 +
.../example/cmdb/api/AlertController.java | 43 +
.../example/cmdb/api/DeploymentController.java | 43 +
.../example/cmdb/api/HealthController.java | 44 +
.../example/cmdb/api/IncidentController.java | 43 +
.../example/cmdb/api/ServiceController.java | 50 +
.../example/cmdb/config/GremlinClientConfig.java | 83 +
.../example/cmdb/config/GremlinClientFactory.java | 66 +
.../tinkerpop/example/cmdb/domain/PathDto.java | 28 +
.../example/cmdb/errors/ApiException.java | 32 +
.../example/cmdb/errors/ErrorHandler.java | 40 +
.../example/cmdb/graph/GremlinGateway.java | 53 +
.../tinkerpop/example/cmdb/graph/MappingUtils.java | 55 +
.../example/cmdb/graph/TraversalBuilders.java | 101 +
.../example/cmdb/service/AlertService.java | 57 +
.../example/cmdb/service/DeploymentService.java | 40 +
.../example/cmdb/service/IncidentService.java | 43 +
.../example/cmdb/service/ServiceGraphService.java | 44 +
.../java/src/main/resources/application.yml | 30 +
.../tinkerpop/example/cmdb/it/DataLoader.java | 41 +
.../tinkerpop/example/cmdb/it/ServiceIT.java | 256 +
.../example/cmdb/unit/AlertServiceTest.java | 68 +
.../example/cmdb/unit/DeploymentServiceTest.java | 45 +
.../example/cmdb/unit/ErrorHandlerTest.java | 49 +
.../example/cmdb/unit/HealthControllerTest.java | 56 +
.../example/cmdb/unit/IncidentServiceTest.java | 47 +
.../example/cmdb/unit/ServiceGraphServiceTest.java | 56 +
.../java/src/test/resources/application-test.yml | 25 +
docs/upgrade/prompts/sample-report.md | 153 +
docs/upgrade/prompts/upgrade-3.8.0-helper.md | 45 +
docs/upgrade/spec/cmdb-data.gremlin | 167 +
docs/upgrade/spec/spec.md | 424 +
gremlin-annotations/pom.xml | 64 +-
.../gremlin/process/traversal/dsl/GremlinDsl.java | 2 +-
.../process/traversal/dsl/GremlinDslProcessor.java | 18 +-
.../process/traversal/dsl/ProcessorException.java | 2 +-
.../traversal/dsl/GremlinDslProcessorTest.java | 2 +-
.../dsl/SocialPackageTraversalSourceDsl.java | 4 +-
.../process/traversal/dsl/RemoteDslTraversal.java | 2 +-
.../traversal/dsl/SocialMoveTraversalDsl.java | 2 +-
.../dsl/SocialNoDefaultMethodsTraversalDsl.java | 2 +-
.../traversal/dsl/SocialPackageTraversalDsl.java | 2 +-
.../process/traversal/dsl/SocialTraversalDsl.java | 2 +-
gremlin-archetype/gremlin-archetype-dsl/pom.xml | 59 -
.../META-INF/maven/archetype-metadata.xml | 38 -
.../resources/archetype-resources/README.asciidoc | 32 -
.../src/main/resources/archetype-resources/pom.xml | 95 -
.../src/main/java/SocialTraversalDsl.java | 76 -
.../src/main/java/SocialTraversalSourceDsl.java | 72 -
.../src/test/java/SocialDslTest.java | 58 -
.../projects/standard/archetype.properties | 21 -
.../src/test/resources/projects/standard/goal.txt | 1 -
gremlin-archetype/gremlin-archetype-server/pom.xml | 59 -
.../META-INF/maven/archetype-metadata.xml | 47 -
.../resources/archetype-resources/README.asciidoc | 66 -
.../archetype-resources/conf/logback-test.xml | 26 -
.../resources/archetype-resources/conf/logback.xml | 26 -
.../conf/tinkergraph-empty.properties | 18 -
.../src/main/resources/archetype-resources/pom.xml | 105 -
.../scripts/generate-modern.groovy | 33 -
.../archetype-resources/src/main/java/App.java | 43 -
.../archetype-resources/src/main/java/Service.java | 65 -
.../src/test/java/ServiceTest.java | 84 -
.../src/test/resources/gremlin-server.yaml | 41 -
.../projects/standard/archetype.properties | 21 -
.../src/test/resources/projects/standard/goal.txt | 1 -
.../gremlin-archetype-tinkergraph/pom.xml | 59 -
.../META-INF/maven/archetype-metadata.xml | 38 -
.../resources/archetype-resources/README.asciidoc | 32 -
.../src/main/resources/archetype-resources/pom.xml | 89 -
.../archetype-resources/src/main/java/App.java | 79 -
.../archetype-resources/src/test/java/AppTest.java | 40 -
.../projects/standard/archetype.properties | 21 -
.../src/test/resources/projects/standard/goal.txt | 1 -
gremlin-archetype/pom.xml | 73 -
gremlin-console/bin/gremlin.sh | 2 +-
gremlin-console/conf/neo4j-standalone.properties | 24 -
gremlin-console/conf/remote-graph.properties | 8 +-
gremlin-console/conf/remote-objects.yaml | 37 -
gremlin-console/conf/remote-secure.yaml | 11 +-
gremlin-console/conf/remote-sigv4.yaml | 31 +
gremlin-console/conf/remote.yaml | 7 +-
gremlin-console/conf/tinkergraph-gryo.properties | 2 +-
gremlin-console/pom.xml | 21 +-
gremlin-console/src/main/bin/gremlin-java8.bat | 59 -
gremlin-console/src/main/bin/gremlin.sh | 3 +-
gremlin-console/src/main/ext/plugins.txt | 2 +-
.../tinkerpop/gremlin/console/Colorizer.groovy | 2 +-
.../tinkerpop/gremlin/console/Console.groovy | 24 +-
.../tinkerpop/gremlin/console/ConsoleFs.groovy | 2 +-
.../gremlin/console/GremlinGroovysh.groovy | 135 +-
.../tinkerpop/gremlin/console/Mediator.groovy | 42 +-
.../tinkerpop/gremlin/console/PluggedIn.groovy | 14 +-
.../tinkerpop/gremlin/console/Preferences.groovy | 2 +-
.../console/commands/BytecodeCommand.groovy | 126 -
.../gremlin/console/commands/ClsCommand.groovy | 2 +-
.../console/commands/GremlinSetCommand.groovy | 2 +-
.../gremlin/console/commands/InstallCommand.groovy | 2 +-
.../gremlin/console/commands/PluginCommand.groovy | 2 +-
.../gremlin/console/commands/RemoteCommand.groovy | 136 -
.../gremlin/console/commands/SubmitCommand.groovy | 43 -
.../console/commands/UninstallCommand.groovy | 2 +-
.../console/jsr223/GephiRemoteAcceptor.groovy | 371 -
.../GephiTraversalVisualizationStrategy.groovy | 121 -
.../console/jsr223/DriverGremlinPlugin.java | 99 -
.../console/jsr223/DriverRemoteAcceptor.java | 281 -
.../gremlin/console/jsr223/GephiGremlinPlugin.java | 42 -
.../console/jsr223/RemoteGremlinPlugin.java | 58 +
.../console/jsr223/UtilitiesGremlinPlugin.java | 2 +-
...g.apache.tinkerpop.gremlin.jsr223.GremlinPlugin | 5 +-
.../console/commands/BytecodeCommand.properties | 20 -
.../gremlin/console/commands/ClsCommand.properties | 2 +-
.../console/commands/GremlinSetCommand.properties | 2 +-
.../console/commands/InstallCommand.properties | 2 +-
.../console/commands/PluginCommand.properties | 2 +-
.../console/commands/RemoteCommand.properties | 19 -
.../console/commands/SubmitCommand.properties | 19 -
.../console/commands/UninstallCommand.properties | 2 +-
.../jsr223/UtilitiesGremlinPluginScript.groovy | 2 +-
gremlin-console/src/main/static/LICENSE | 10 +-
gremlin-console/src/main/static/NOTICE | 29 +-
.../src/main/static/licenses/reactive-streams | 18 +
.../gremlin/console/GremlinGroovyshTest.groovy | 141 +-
.../AbstractGremlinServerIntegrationTest.java | 4 +-
.../jsr223/DriverRemoteAcceptorIntegrateTest.java | 181 -
.../console/jsr223/DriverRemoteAcceptorTest.java | 136 -
.../jsr223/GephiRemoteAcceptorIntegrateTest.java | 178 -
.../jsr223/MockGroovyGremlinShellEnvironment.java | 2 +-
.../console/jsr223/UtilitiesGremlinPluginTest.java | 6 +-
gremlin-console/src/test/python/docker/Dockerfile | 2 +-
gremlin-console/src/test/python/setup.cfg | 2 +-
gremlin-console/src/test/python/setup.py | 13 +-
gremlin-console/src/test/python/tests/__init__.py | 2 +-
.../src/test/python/tests/test_console.py | 22 +-
gremlin-console/src/test/python/x-printed.script | 2 +-
gremlin-console/src/test/python/x.script | 2 +-
gremlin-console/src/test/python/y-printed.script | 2 +-
gremlin-console/src/test/python/y.script | 2 +-
gremlin-console/src/test/python/z-printed.script | 2 +-
gremlin-console/src/test/python/z.script | 2 +-
.../console/jsr223/gremlin-server-integration.yaml | 21 +-
.../gremlin/console/jsr223/remote-graph.properties | 35 +
.../tinkerpop/gremlin/console/jsr223/remote.yaml | 2 +-
.../console/jsr223/tinkergraph-empty.properties | 2 +-
gremlin-core/pom.xml | 22 +-
.../gremlin/jsr223/AbstractGremlinPlugin.java | 2 +-
.../jsr223/AbstractGremlinScriptEngineFactory.java | 2 +-
.../gremlin/jsr223/BindingsCustomizer.java | 2 +-
.../gremlin/jsr223/BindingsGremlinPlugin.java | 76 -
.../jsr223/CachedGremlinScriptEngineManager.java | 13 +-
.../gremlin/jsr223/ConcurrentBindings.java | 2 +-
.../gremlin/jsr223/CoreGremlinPlugin.java | 2 +-
.../tinkerpop/gremlin/jsr223/CoreImports.java | 33 +-
.../tinkerpop/gremlin/jsr223/Customizer.java | 2 +-
.../gremlin/jsr223/DefaultBindingsCustomizer.java | 2 +-
.../jsr223/DefaultGremlinScriptEngineManager.java | 30 +-
.../gremlin/jsr223/DefaultImportCustomizer.java | 2 +-
.../gremlin/jsr223/DefaultScriptCustomizer.java | 2 +-
.../gremlin/jsr223/GremlinLangCustomizer.java | 43 +
.../gremlin/jsr223/GremlinLangPlugin.java | 71 +
.../gremlin/jsr223/GremlinLangScriptEngine.java | 118 +-
.../jsr223/GremlinLangScriptEngineFactory.java | 2 +-
.../tinkerpop/gremlin/jsr223/GremlinPlugin.java | 2 +-
.../gremlin/jsr223/GremlinScriptChecker.java | 2 +-
.../gremlin/jsr223/GremlinScriptContext.java | 2 +-
.../gremlin/jsr223/GremlinScriptEngine.java | 31 +-
.../gremlin/jsr223/GremlinScriptEngineFactory.java | 2 +-
.../gremlin/jsr223/GremlinScriptEngineManager.java | 2 +-
.../tinkerpop/gremlin/jsr223/ImportCustomizer.java | 2 +-
.../gremlin/jsr223/ImportGremlinPlugin.java | 2 +-
.../tinkerpop/gremlin/jsr223/JavaTranslator.java | 392 -
.../gremlin/jsr223/LazyBindingsCustomizer.java | 2 +-
.../tinkerpop/gremlin/jsr223/ScriptCustomizer.java | 2 +-
.../gremlin/jsr223/ScriptEngineCache.java | 2 +-
.../gremlin/jsr223/ScriptFileGremlinPlugin.java | 2 +-
.../jsr223/SingleGremlinScriptEngineManager.java | 2 +-
.../gremlin/jsr223/TranslatorCustomizer.java | 38 -
.../gremlin/jsr223/VariableResolverCustomizer.java | 40 +
.../gremlin/jsr223/VariableResolverPlugin.java | 95 +
.../gremlin/jsr223/console/ConsoleCustomizer.java | 37 -
.../jsr223/console/GremlinShellEnvironment.java | 2 +-
.../gremlin/jsr223/console/RemoteAcceptor.java | 83 -
.../gremlin/jsr223/console/RemoteException.java | 60 -
.../gremlin/language/grammar/ArgumentVisitor.java | 209 +-
.../grammar/DefaultGremlinBaseVisitor.java | 136 +-
.../language/grammar/GenericLiteralVisitor.java | 215 +-
.../grammar/GraphTraversalSourceVisitor.java | 2 +-
.../language/grammar/GremlinAntlrToJava.java | 12 +-
.../language/grammar/GremlinErrorListener.java | 2 +-
.../language/grammar/GremlinParserException.java | 2 +-
.../language/grammar/GremlinQueryParser.java | 110 +-
.../grammar/NestedTraversalSourceListVisitor.java | 2 +-
.../language/grammar/NoOpTerminalVisitor.java | 16 +-
.../language/grammar/ParameterMapVisitor.java | 102 +
.../grammar/ParseTreeContextCastHelper.java | 6 +-
.../language/grammar/StructureElementVisitor.java | 38 -
.../grammar/TerminalMethodToBytecodeVisitor.java | 22 +-
.../language/grammar/TraversalEnumParser.java | 28 +-
.../language/grammar/TraversalMethodVisitor.java | 438 +-
.../grammar/TraversalPredicateVisitor.java | 53 +-
.../language/grammar/TraversalRootVisitor.java | 2 +-
.../grammar/TraversalSourceSelfMethodVisitor.java | 25 +-
.../grammar/TraversalSourceSpawnMethodVisitor.java | 57 +-
.../language/grammar/TraversalSourceTxVisitor.java | 2 +-
.../language/grammar/TraversalStrategyVisitor.java | 4 +-
.../grammar/TraversalTerminalMethodVisitor.java | 2 +-
.../gremlin/language/grammar/VariableResolver.java | 39 +-
.../grammar/VariableResolverException.java | 2 +-
.../language/grammar/WithOptionsVisitor.java | 2 +-
.../translator/AbstractTranslateVisitor.java | 2 +-
.../translator/AnonymizedTranslatorVisitor.java | 30 +-
.../translator/DotNetTranslateVisitor.java | 353 +-
.../language/translator/GoTranslateVisitor.java | 140 +-
.../language/translator/GremlinTranslator.java | 2 +-
.../translator/GroovyTranslateVisitor.java | 188 +-
.../language/translator/JavaTranslateVisitor.java | 82 +-
.../translator/JavascriptTranslateVisitor.java | 67 +-
.../translator/PythonTranslateVisitor.java | 101 +-
.../language/translator/TranslateVisitor.java | 47 +-
.../gremlin/language/translator/Translation.java | 2 +-
.../gremlin/language/translator/Translator.java | 10 +-
.../language/translator/TranslatorException.java | 2 +-
.../gremlin/process/computer/Computer.java | 2 +-
.../gremlin/process/computer/ComputerResult.java | 2 +-
.../gremlin/process/computer/GraphComputer.java | 2 +-
.../gremlin/process/computer/GraphFilter.java | 2 +-
.../gremlin/process/computer/KeyValue.java | 2 +-
.../gremlin/process/computer/MapReduce.java | 2 +-
.../tinkerpop/gremlin/process/computer/Memory.java | 2 +-
.../gremlin/process/computer/MemoryComputeKey.java | 2 +-
.../gremlin/process/computer/MessageCombiner.java | 2 +-
.../gremlin/process/computer/MessageScope.java | 2 +-
.../gremlin/process/computer/Messenger.java | 2 +-
.../gremlin/process/computer/ProgramPhase.java | 2 +-
.../gremlin/process/computer/VertexComputeKey.java | 2 +-
.../gremlin/process/computer/VertexProgram.java | 2 +-
.../process/computer/clone/CloneVertexProgram.java | 2 +-
.../connected/ConnectedComponentVertexProgram.java | 2 +-
.../peerpressure/ClusterCountMapReduce.java | 2 +-
.../peerpressure/ClusterPopulationMapReduce.java | 2 +-
.../peerpressure/PeerPressureVertexProgram.java | 2 +-
.../ranking/pagerank/PageRankMapReduce.java | 2 +-
.../ranking/pagerank/PageRankMessageCombiner.java | 2 +-
.../ranking/pagerank/PageRankVertexProgram.java | 2 +-
.../search/path/ShortestPathVertexProgram.java | 2 +-
.../process/computer/traversal/MasterExecutor.java | 2 +-
.../traversal/MemoryTraversalSideEffects.java | 9 +-
.../computer/traversal/TraversalVertexProgram.java | 11 +-
.../TraversalVertexProgramMessageCombiner.java | 2 +-
.../process/computer/traversal/WorkerExecutor.java | 2 +-
.../lambda/HaltedTraversersCountTraversal.java | 2 +-
.../computer/traversal/step/VertexComputing.java | 2 +-
.../traversal/step/map/ComputerResultStep.java | 2 +-
.../traversal/step/map/ConnectedComponent.java | 2 +-
.../map/ConnectedComponentVertexProgramStep.java | 2 +-
.../computer/traversal/step/map/PageRank.java | 2 +-
.../step/map/PageRankVertexProgramStep.java | 2 +-
.../computer/traversal/step/map/PeerPressure.java | 2 +-
.../step/map/PeerPressureVertexProgramStep.java | 2 +-
.../step/map/ProgramVertexProgramStep.java | 2 +-
.../computer/traversal/step/map/ShortestPath.java | 2 +-
.../step/map/ShortestPathVertexProgramStep.java | 2 +-
.../step/map/TraversalVertexProgramStep.java | 2 +-
.../traversal/step/map/VertexProgramStep.java | 2 +-
.../strategy/VertexProgramInterceptor.java | 2 +-
.../strategy/decoration/VertexProgramStrategy.java | 6 +-
.../finalization/ComputerFinalizationStrategy.java | 2 +-
.../strategy/optimization/GraphFilterStrategy.java | 2 +-
.../MessagePassingReductionStrategy.java | 13 +-
.../VertexProgramRestrictionStrategy.java | 2 +-
.../util/AbstractVertexProgramBuilder.java | 2 +-
.../process/computer/util/ComputerGraph.java | 2 +-
.../computer/util/DefaultComputerResult.java | 2 +-
.../gremlin/process/computer/util/EmptyMemory.java | 2 +-
.../process/computer/util/GraphComputerHelper.java | 2 +-
.../process/computer/util/ImmutableMemory.java | 2 +-
.../gremlin/process/computer/util/MapMemory.java | 2 +-
.../process/computer/util/MapReducePool.java | 2 +-
.../process/computer/util/MemoryHelper.java | 2 +-
.../process/computer/util/SingleMessenger.java | 2 +-
.../process/computer/util/StaticMapReduce.java | 2 +-
.../process/computer/util/StaticVertexProgram.java | 2 +-
.../process/computer/util/VertexProgramHelper.java | 2 +-
.../process/computer/util/VertexProgramPool.java | 2 +-
.../process/remote/EmbeddedRemoteConnection.java | 20 +-
.../gremlin/process/remote/RemoteConnection.java | 8 +-
.../process/remote/RemoteConnectionException.java | 2 +-
.../remote/traversal/AbstractRemoteTraversal.java | 17 +-
.../remote/traversal/AbstractRemoteTraverser.java | 2 +-
.../remote/traversal/DefaultRemoteTraverser.java | 2 +-
.../remote/traversal/EmbeddedRemoteTraversal.java | 2 +-
.../process/remote/traversal/RemoteTraversal.java | 6 +-
.../process/remote/traversal/RemoteTraverser.java | 2 +-
.../remote/traversal/step/map/RemoteStep.java | 12 +-
.../strategy/decoration/RemoteStrategy.java | 2 +-
.../traversal/AnonymousTraversalSource.java | 12 +-
.../gremlin/process/traversal/Bindings.java | 80 -
.../gremlin/process/traversal/Bytecode.java | 344 -
.../gremlin/process/traversal/Compare.java | 67 +-
.../gremlin/process/traversal/CompareType.java | 116 +
.../gremlin/process/traversal/Contains.java | 22 +-
.../tinkerpop/gremlin/process/traversal/DT.java | 2 +-
.../gremlin/process/traversal/Failure.java | 11 +-
.../tinkerpop/gremlin/process/traversal/GType.java | 106 +
.../gremlin/process/traversal/GValueManager.java | 210 +
.../gremlin/process/traversal/GraphOp.java | 26 +-
.../gremlin/process/traversal/GremlinLang.java | 618 +
.../traversal/GremlinTypeErrorException.java | 40 -
.../tinkerpop/gremlin/process/traversal/IO.java | 2 +-
.../tinkerpop/gremlin/process/traversal/Merge.java | 2 +-
.../tinkerpop/gremlin/process/traversal/NotP.java | 120 +
.../gremlin/process/traversal/Operator.java | 2 +-
.../tinkerpop/gremlin/process/traversal/Order.java | 2 +-
.../tinkerpop/gremlin/process/traversal/P.java | 272 +-
.../gremlin/process/traversal/PBiPredicate.java | 9 +-
.../tinkerpop/gremlin/process/traversal/Path.java | 2 +-
.../tinkerpop/gremlin/process/traversal/Pick.java | 17 +-
.../tinkerpop/gremlin/process/traversal/Pop.java | 2 +-
.../gremlin/process/traversal/SackFunctions.java | 2 +-
.../tinkerpop/gremlin/process/traversal/Scope.java | 2 +-
.../gremlin/process/traversal/Script.java | 2 +-
.../tinkerpop/gremlin/process/traversal/Step.java | 2 +-
.../tinkerpop/gremlin/process/traversal/Text.java | 13 +-
.../tinkerpop/gremlin/process/traversal/TextP.java | 100 +-
.../gremlin/process/traversal/Translator.java | 361 -
.../gremlin/process/traversal/Traversal.java | 47 +-
.../process/traversal/TraversalSideEffects.java | 2 +-
.../gremlin/process/traversal/TraversalSource.java | 36 +-
.../process/traversal/TraversalStrategies.java | 12 +-
.../process/traversal/TraversalStrategy.java | 51 +-
.../gremlin/process/traversal/Traverser.java | 21 +-
.../process/traversal/TraverserGenerator.java | 2 +-
.../traversal/dsl/graph/DefaultGraphTraversal.java | 2 +-
.../traversal/dsl/graph/GraphTraversal.java | 1561 +-
.../traversal/dsl/graph/GraphTraversalSource.java | 217 +-
.../gremlin/process/traversal/dsl/graph/__.java | 330 +-
.../traversal/lambda/AbstractLambdaTraversal.java | 26 +-
.../lambda/CardinalityValueTraversal.java | 17 +-
.../process/traversal/lambda/ColumnTraversal.java | 2 +-
.../traversal/lambda/ConstantTraversal.java | 17 +-
.../traversal/lambda/FunctionTraverser.java | 2 +-
.../traversal/lambda/GValueConstantTraversal.java | 87 +
.../traversal/lambda/IdentityTraversal.java | 2 +-
.../process/traversal/lambda/LoopTraversal.java | 2 +-
.../traversal/lambda/PredicateTraversal.java | 6 +-
.../traversal/lambda/PredicateTraverser.java | 2 +-
.../process/traversal/lambda/TokenTraversal.java | 2 +-
.../process/traversal/lambda/TrueTraversal.java | 2 +-
.../process/traversal/lambda/ValueTraversal.java | 2 +-
.../gremlin/process/traversal/step/Barrier.java | 2 +-
.../process/traversal/step/ByModulating.java | 2 +-
.../gremlin/process/traversal/step/Bypassing.java | 2 +-
.../process/traversal/step/ComparatorHolder.java | 2 +-
.../process/traversal/step/Configuring.java | 5 +-
.../gremlin/process/traversal/step/Deleting.java | 2 +-
.../process/traversal/step/FilteringBarrier.java | 2 +-
.../process/traversal/step/FromToModulating.java | 2 +-
.../gremlin/process/traversal/step/GValue.java | 379 +
.../process/traversal/step/GValueHolder.java | 45 +
.../gremlin/process/traversal/step/Generating.java | 2 +-
.../process/traversal/step/GraphComputing.java | 2 +-
.../gremlin/process/traversal/step/Grouping.java | 2 +-
.../process/traversal/step/HasContainerHolder.java | 45 +-
.../process/traversal/step/LambdaHolder.java | 2 +-
.../process/traversal/step/LocalBarrier.java | 2 +-
.../gremlin/process/traversal/step/MapReducer.java | 2 +-
.../process/traversal/step/MemoryComputing.java | 2 +-
.../gremlin/process/traversal/step/Mutating.java | 4 +-
.../process/traversal/step/Parameterizing.java | 2 +-
.../process/traversal/step/PathProcessor.java | 2 +-
.../process/traversal/step/PopContaining.java | 103 +
.../gremlin/process/traversal/step/Profiling.java | 2 +-
.../process/traversal/step/ProfilingAware.java | 2 +-
.../process/traversal/step/PropertiesHolder.java | 32 +
.../gremlin/process/traversal/step/Ranging.java | 6 +-
.../process/traversal/step/ReadWriting.java | 2 +-
.../gremlin/process/traversal/step/Scoping.java | 22 +-
.../gremlin/process/traversal/step/Seedable.java | 2 +-
.../process/traversal/step/SideEffectCapable.java | 2 +-
.../process/traversal/step/TimesModulating.java | 2 +-
.../traversal/step/TraversalOptionParent.java | 2 +-
.../process/traversal/step/TraversalParent.java | 42 +-
.../gremlin/process/traversal/step/Writing.java | 2 +-
.../process/traversal/step/branch/BranchStep.java | 36 +-
.../process/traversal/step/branch/ChooseStep.java | 98 +-
.../process/traversal/step/branch/LocalStep.java | 25 +-
.../traversal/step/branch/OptionalStep.java | 2 +-
.../process/traversal/step/branch/RepeatStep.java | 64 +-
.../process/traversal/step/branch/UnionStep.java | 2 +-
.../process/traversal/step/filter/AllStep.java | 14 +-
.../process/traversal/step/filter/AndStep.java | 15 +-
.../process/traversal/step/filter/AnyStep.java | 14 +-
.../traversal/step/filter/BinaryReductionStep.java | 29 -
.../traversal/step/filter/ClassFilterStep.java | 2 +-
.../process/traversal/step/filter/CoinStep.java | 26 +-
.../traversal/step/filter/ConnectiveStep.java | 2 +-
.../traversal/step/filter/DedupGlobalStep.java | 13 +-
.../process/traversal/step/filter/DiscardStep.java | 43 +
.../process/traversal/step/filter/DropStep.java | 16 +-
.../process/traversal/step/filter/FilterStep.java | 24 +-
.../process/traversal/step/filter/HasStep.java | 4 +-
.../process/traversal/step/filter/IsStep.java | 6 +-
.../traversal/step/filter/IsStepContract.java | 50 +
.../traversal/step/filter/IsStepPlaceholder.java | 109 +
.../traversal/step/filter/LambdaFilterStep.java | 2 +-
.../process/traversal/step/filter/NoneStep.java | 77 +-
.../process/traversal/step/filter/NotStep.java | 2 +-
.../process/traversal/step/filter/OrStep.java | 15 +-
.../traversal/step/filter/PathFilterStep.java | 2 +-
.../traversal/step/filter/RangeGlobalStep.java | 148 +-
.../step/filter/RangeGlobalStepContract.java | 111 +
.../step/filter/RangeGlobalStepPlaceholder.java | 167 +
.../traversal/step/filter/SampleGlobalStep.java | 60 +-
.../traversal/step/filter/TailGlobalStep.java | 44 +-
.../step/filter/TailGlobalStepContract.java | 72 +
.../step/filter/TailGlobalStepPlaceholder.java | 139 +
.../traversal/step/filter/TimeLimitStep.java | 2 +-
.../traversal/step/filter/TraversalFilterStep.java | 4 +-
.../traversal/step/filter/WherePredicateStep.java | 10 +-
.../traversal/step/filter/WhereTraversalStep.java | 12 +-
.../step/map/AbstractAddEdgeStepPlaceholder.java | 206 +
.../map/AbstractAddElementStepPlaceholder.java | 394 +
.../step/map/AbstractAddVertexStepPlaceholder.java | 85 +
.../map/AbstractMergeElementStepPlaceholder.java | 325 +
.../traversal/step/map/AddEdgeStartStep.java | 163 +-
.../step/map/AddEdgeStartStepPlaceholder.java | 62 +
.../process/traversal/step/map/AddEdgeStep.java | 160 +-
.../traversal/step/map/AddEdgeStepContract.java | 109 +
.../traversal/step/map/AddEdgeStepPlaceholder.java | 62 +
.../traversal/step/map/AddElementStepContract.java | 62 +
.../traversal/step/map/AddVertexStartStep.java | 115 +-
.../step/map/AddVertexStartStepPlaceholder.java | 56 +
.../process/traversal/step/map/AddVertexStep.java | 110 +-
.../traversal/step/map/AddVertexStepContract.java | 36 +
.../step/map/AddVertexStepPlaceholder.java | 52 +
.../process/traversal/step/map/AsBoolStep.java | 61 +
.../process/traversal/step/map/AsDateStep.java | 2 +-
.../process/traversal/step/map/AsNumberStep.java | 114 +
.../traversal/step/map/AsStringGlobalStep.java | 6 +-
.../traversal/step/map/AsStringLocalStep.java | 9 +-
.../process/traversal/step/map/CallStep.java | 40 +-
.../traversal/step/map/CallStepContract.java | 58 +
.../traversal/step/map/CallStepPlaceholder.java | 269 +
.../process/traversal/step/map/CoalesceStep.java | 2 +-
.../process/traversal/step/map/CombineStep.java | 17 +-
.../process/traversal/step/map/ConcatStep.java | 2 +-
.../process/traversal/step/map/ConjoinStep.java | 23 +-
.../process/traversal/step/map/ConstantStep.java | 20 +-
.../traversal/step/map/CountGlobalStep.java | 2 +-
.../process/traversal/step/map/CountLocalStep.java | 2 +-
.../process/traversal/step/map/DateAddStep.java | 2 +-
.../process/traversal/step/map/DateDiffStep.java | 17 +-
.../process/traversal/step/map/DedupLocalStep.java | 10 +-
.../process/traversal/step/map/DifferenceStep.java | 22 +-
.../process/traversal/step/map/DisjunctStep.java | 16 +-
.../traversal/step/map/EdgeOtherVertexStep.java | 2 +-
.../process/traversal/step/map/EdgeVertexStep.java | 2 +-
.../process/traversal/step/map/ElementMapStep.java | 2 +-
.../process/traversal/step/map/ElementStep.java | 2 +-
.../process/traversal/step/map/FlatMapStep.java | 2 +-
.../process/traversal/step/map/FoldStep.java | 2 +-
.../process/traversal/step/map/FormatStep.java | 11 +-
.../process/traversal/step/map/GraphStep.java | 21 +-
.../traversal/step/map/GraphStepContract.java | 53 +
.../traversal/step/map/GraphStepPlaceholder.java | 200 +
.../process/traversal/step/map/GroupCountStep.java | 2 +-
.../process/traversal/step/map/GroupStep.java | 2 +-
.../process/traversal/step/map/HasNextStep.java | 2 +-
.../gremlin/process/traversal/step/map/IdStep.java | 2 +-
.../process/traversal/step/map/IndexStep.java | 2 +-
.../process/traversal/step/map/IntersectStep.java | 17 +-
.../traversal/step/map/LTrimGlobalStep.java | 2 +-
.../process/traversal/step/map/LTrimLocalStep.java | 2 +-
.../process/traversal/step/map/LabelStep.java | 2 +-
.../step/map/LambdaCollectingBarrierStep.java | 2 +-
.../traversal/step/map/LambdaFlatMapStep.java | 2 +-
.../process/traversal/step/map/LambdaMapStep.java | 2 +-
.../traversal/step/map/LengthGlobalStep.java | 2 +-
.../traversal/step/map/LengthLocalStep.java | 2 +-
.../process/traversal/step/map/LoopsStep.java | 2 +-
.../process/traversal/step/map/MapStep.java | 2 +-
.../process/traversal/step/map/MatchStep.java | 10 +-
.../process/traversal/step/map/MathStep.java | 10 +-
.../process/traversal/step/map/MaxGlobalStep.java | 2 +-
.../process/traversal/step/map/MaxLocalStep.java | 2 +-
.../process/traversal/step/map/MeanGlobalStep.java | 2 +-
.../process/traversal/step/map/MeanLocalStep.java | 2 +-
.../process/traversal/step/map/MergeEdgeStep.java | 29 +-
.../step/map/MergeEdgeStepPlaceholder.java | 147 +
.../traversal/step/map/MergeElementStep.java | 448 +
.../process/traversal/step/map/MergeStep.java | 426 +-
.../traversal/step/map/MergeStepContract.java | 104 +
.../traversal/step/map/MergeVertexStep.java | 24 +-
.../step/map/MergeVertexStepPlaceholder.java | 117 +
.../process/traversal/step/map/MinGlobalStep.java | 2 +-
.../process/traversal/step/map/MinLocalStep.java | 2 +-
.../traversal/step/map/NoOpBarrierStep.java | 2 +-
.../traversal/step/map/OrderGlobalStep.java | 2 +-
.../process/traversal/step/map/OrderLocalStep.java | 2 +-
.../process/traversal/step/map/PathStep.java | 2 +-
.../process/traversal/step/map/ProductStep.java | 21 +-
.../process/traversal/step/map/ProjectStep.java | 2 +-
.../process/traversal/step/map/PropertiesStep.java | 2 +-
.../traversal/step/map/PropertyKeyStep.java | 2 +-
.../traversal/step/map/PropertyMapStep.java | 2 +-
.../traversal/step/map/PropertyValueStep.java | 2 +-
.../traversal/step/map/RTrimGlobalStep.java | 2 +-
.../process/traversal/step/map/RTrimLocalStep.java | 2 +-
.../process/traversal/step/map/RangeLocalStep.java | 54 +-
.../traversal/step/map/RangeLocalStepContract.java | 70 +
.../step/map/RangeLocalStepPlaceholder.java | 149 +
.../traversal/step/map/ReplaceGlobalStep.java | 10 +-
.../traversal/step/map/ReplaceLocalStep.java | 10 +-
.../process/traversal/step/map/ReverseStep.java | 2 +-
.../process/traversal/step/map/SackStep.java | 2 +-
.../traversal/step/map/SampleLocalStep.java | 10 +-
.../process/traversal/step/map/ScalarMapStep.java | 2 +-
.../process/traversal/step/map/SelectOneStep.java | 14 +-
.../process/traversal/step/map/SelectStep.java | 15 +-
.../traversal/step/map/SplitGlobalStep.java | 2 +-
.../process/traversal/step/map/SplitLocalStep.java | 2 +-
.../traversal/step/map/SubstringGlobalStep.java | 2 +-
.../traversal/step/map/SubstringLocalStep.java | 2 +-
.../process/traversal/step/map/SumGlobalStep.java | 2 +-
.../process/traversal/step/map/SumLocalStep.java | 2 +-
.../process/traversal/step/map/TailLocalStep.java | 16 +-
.../traversal/step/map/TailLocalStepContract.java | 38 +
.../step/map/TailLocalStepPlaceholder.java | 111 +
.../traversal/step/map/ToLowerGlobalStep.java | 2 +-
.../traversal/step/map/ToLowerLocalStep.java | 2 +-
.../traversal/step/map/ToUpperGlobalStep.java | 2 +-
.../traversal/step/map/ToUpperLocalStep.java | 2 +-
.../traversal/step/map/TraversalFlatMapStep.java | 2 +-
.../traversal/step/map/TraversalMapStep.java | 2 +-
.../traversal/step/map/TraversalMergeStep.java | 126 -
.../traversal/step/map/TraversalSelectStep.java | 16 +-
.../process/traversal/step/map/TreeStep.java | 2 +-
.../process/traversal/step/map/TrimGlobalStep.java | 2 +-
.../process/traversal/step/map/TrimLocalStep.java | 2 +-
.../process/traversal/step/map/UnfoldStep.java | 2 +-
.../process/traversal/step/map/VertexStep.java | 20 +-
.../traversal/step/map/VertexStepContract.java | 57 +
.../traversal/step/map/VertexStepPlaceholder.java | 231 +
.../traversal/step/sideEffect/AddPropertyStep.java | 75 +-
.../step/sideEffect/AddPropertyStepContract.java | 71 +
.../sideEffect/AddPropertyStepPlaceholder.java | 329 +
.../step/sideEffect/AggregateGlobalStep.java | 185 -
.../step/sideEffect/AggregateLocalStep.java | 125 -
.../traversal/step/sideEffect/AggregateStep.java | 187 +
.../traversal/step/sideEffect/FailStep.java | 2 +-
.../step/sideEffect/GroupCountSideEffectStep.java | 4 +-
.../step/sideEffect/GroupSideEffectStep.java | 4 +-
.../traversal/step/sideEffect/IdentityStep.java | 2 +-
.../traversal/step/sideEffect/InjectStep.java | 25 +-
.../process/traversal/step/sideEffect/IoStep.java | 2 +-
.../step/sideEffect/LambdaSideEffectStep.java | 2 +-
.../step/sideEffect/ProfileSideEffectStep.java | 2 +-
.../traversal/step/sideEffect/SackValueStep.java | 5 +-
.../step/sideEffect/SideEffectBarrierStep.java | 99 +
.../step/sideEffect/SideEffectCapStep.java | 2 +-
.../traversal/step/sideEffect/SideEffectStep.java | 2 +-
.../traversal/step/sideEffect/StartStep.java | 2 +-
.../traversal/step/sideEffect/SubgraphStep.java | 4 +-
.../step/sideEffect/TraversalSideEffectStep.java | 2 +-
.../step/sideEffect/TreeSideEffectStep.java | 4 +-
.../process/traversal/step/util/AbstractStep.java | 3 +-
.../process/traversal/step/util/BulkSet.java | 2 +-
.../traversal/step/util/CollectingBarrierStep.java | 2 +-
.../traversal/step/util/ComputerAwareStep.java | 2 +-
.../step/util/ElementFunctionComparator.java | 2 +-
.../step/util/ElementValueComparator.java | 2 +-
.../process/traversal/step/util/EmptyPath.java | 2 +-
.../process/traversal/step/util/EmptyStep.java | 2 +-
.../step/util/ExpandableStepIterator.java | 2 +-
.../traversal/step/util/FunctionComparator.java | 2 +-
.../process/traversal/step/util/GValueHelper.java | 90 +
.../process/traversal/step/util/HasContainer.java | 2 +-
.../process/traversal/step/util/ImmutablePath.java | 2 +-
.../process/traversal/step/util/MapHelper.java | 2 +-
.../process/traversal/step/util/MutablePath.java | 2 +-
.../process/traversal/step/util/Parameters.java | 15 +-
.../process/traversal/step/util/ProfileStep.java | 2 +-
.../traversal/step/util/ReducingBarrierStep.java | 2 +-
.../traversal/step/util/RequirementsStep.java | 2 +-
.../traversal/step/util/StringLocalStep.java | 2 +-
.../traversal/step/util/SupplyingBarrierStep.java | 2 +-
.../gremlin/process/traversal/step/util/Tree.java | 4 +-
.../process/traversal/step/util/WithOptions.java | 2 +-
.../step/util/event/CallbackRegistry.java | 2 +-
.../step/util/event/ConsoleMutationListener.java | 2 +-
.../process/traversal/step/util/event/Event.java | 2 +-
.../traversal/step/util/event/EventCallback.java | 2 +-
.../traversal/step/util/event/EventUtil.java | 2 +-
.../step/util/event/ListCallbackRegistry.java | 2 +-
.../step/util/event/MutationListener.java | 2 +-
.../strategy/AbstractTraversalStrategy.java | 2 +-
.../traversal/strategy/TraversalStrategyProxy.java | 47 +-
.../strategy/decoration/ConnectiveStrategy.java | 2 +-
.../strategy/decoration/ElementIdStrategy.java | 29 +-
.../strategy/decoration/EventStrategy.java | 16 +-
.../decoration/HaltedTraverserStrategy.java | 2 +-
.../strategy/decoration/OptionsStrategy.java | 2 +-
.../strategy/decoration/PartitionStrategy.java | 65 +-
.../strategy/decoration/RequirementsStrategy.java | 2 +-
.../strategy/decoration/SackStrategy.java | 2 +-
.../strategy/decoration/SeedStrategy.java | 8 +-
.../strategy/decoration/SideEffectStrategy.java | 12 +-
.../strategy/decoration/SubgraphStrategy.java | 50 +-
.../finalization/MatchAlgorithmStrategy.java | 2 +-
.../strategy/finalization/ProfileStrategy.java | 2 +-
.../finalization/ReferenceElementStrategy.java | 2 +-
.../optimization/AdjacentToIncidentStrategy.java | 21 +-
.../ByModulatorOptimizationStrategy.java | 10 +-
.../strategy/optimization/CountStrategy.java | 26 +-
.../strategy/optimization/EarlyLimitStrategy.java | 38 +-
.../optimization/FilterRankingStrategy.java | 2 +-
.../optimization/GValueReductionStrategy.java | 74 +
.../optimization/IdentityRemovalStrategy.java | 4 +-
.../optimization/IncidentToAdjacentStrategy.java | 33 +-
.../optimization/InlineFilterStrategy.java | 102 +-
.../strategy/optimization/LazyBarrierStrategy.java | 20 +-
.../optimization/MatchPredicateStrategy.java | 6 +-
.../strategy/optimization/OrderLimitStrategy.java | 13 +-
.../optimization/PathProcessorStrategy.java | 26 +-
.../optimization/PathRetractionStrategy.java | 10 +-
.../optimization/ProductiveByStrategy.java | 2 +-
.../optimization/RepeatUnrollStrategy.java | 55 +-
.../provider/ProviderGValueReductionStrategy.java | 58 +
.../strategy/util/StepOutputArityPredictor.java | 2 +-
.../AbstractWarningVerificationStrategy.java | 2 +-
.../verification/ComputerVerificationStrategy.java | 2 +-
.../EdgeLabelVerificationStrategy.java | 14 +-
.../verification/LambdaRestrictionStrategy.java | 2 +-
.../strategy/verification/ReadOnlyStrategy.java | 2 +-
.../ReservedKeysVerificationStrategy.java | 36 +-
.../verification/StandardVerificationStrategy.java | 21 +-
.../verification/VerificationException.java | 2 +-
.../translator/AnonymizingTypeTranslator.java | 183 -
.../traversal/translator/DotNetTranslator.java | 607 -
.../traversal/translator/GolangTranslator.java | 404 -
.../traversal/translator/GroovyTranslator.java | 482 -
.../traversal/translator/JavascriptTranslator.java | 415 -
.../traversal/translator/PythonTranslator.java | 490 -
.../traverser/B_LP_NL_O_P_S_SE_SL_Traverser.java | 97 +-
.../B_LP_NL_O_P_S_SE_SL_TraverserGenerator.java | 2 +-
.../traverser/B_LP_NL_O_S_SE_SL_Traverser.java | 101 +-
.../B_LP_NL_O_S_SE_SL_TraverserGenerator.java | 2 +-
.../traverser/B_LP_O_P_S_SE_SL_Traverser.java | 2 +-
.../B_LP_O_P_S_SE_SL_TraverserGenerator.java | 2 +-
.../traverser/B_LP_O_S_SE_SL_Traverser.java | 2 +-
.../B_LP_O_S_SE_SL_TraverserGenerator.java | 2 +-
.../traverser/B_NL_O_S_SE_SL_Traverser.java | 100 +-
.../B_NL_O_S_SE_SL_TraverserGenerator.java | 2 +-
.../traversal/traverser/B_O_S_SE_SL_Traverser.java | 72 +-
.../traverser/B_O_S_SE_SL_TraverserGenerator.java | 2 +-
.../process/traversal/traverser/B_O_Traverser.java | 2 +-
.../traverser/B_O_TraverserGenerator.java | 2 +-
.../traverser/LP_NL_O_OB_P_S_SE_SL_Traverser.java | 102 +-
.../LP_NL_O_OB_P_S_SE_SL_TraverserGenerator.java | 2 +-
.../traverser/LP_NL_O_OB_S_SE_SL_Traverser.java | 102 +-
.../LP_NL_O_OB_S_SE_SL_TraverserGenerator.java | 2 +-
.../traverser/LP_O_OB_P_S_SE_SL_Traverser.java | 2 +-
.../LP_O_OB_P_S_SE_SL_TraverserGenerator.java | 2 +-
.../traverser/LP_O_OB_S_SE_SL_Traverser.java | 2 +-
.../LP_O_OB_S_SE_SL_TraverserGenerator.java | 2 +-
.../traverser/NL_O_OB_S_SE_SL_Traverser.java | 102 +-
.../NL_O_OB_S_SE_SL_TraverserGenerator.java | 2 +-
.../traversal/traverser/NL_SL_Traverser.java | 247 +
.../traverser/O_OB_S_SE_SL_Traverser.java | 85 +-
.../traverser/O_OB_S_SE_SL_TraverserGenerator.java | 2 +-
.../process/traversal/traverser/O_Traverser.java | 2 +-
.../traversal/traverser/ProjectedTraverser.java | 7 +-
.../traverser/TraverserGeneratorFactory.java | 2 +-
.../traversal/traverser/TraverserRequirement.java | 42 +-
.../traverser/util/AbstractTraverser.java | 29 +-
.../util/DefaultTraverserGeneratorFactory.java | 2 +-
.../traversal/traverser/util/DummyTraverser.java | 2 +-
.../traversal/traverser/util/EmptyTraverser.java | 2 +-
.../traverser/util/IndexedTraverserSet.java | 13 +-
.../traversal/traverser/util/LabelledCounter.java | 6 +-
.../traversal/traverser/util/TraverserSet.java | 2 +-
.../traversal/util/AbstractExplanation.java | 2 +-
.../gremlin/process/traversal/util/AndP.java | 15 +-
.../process/traversal/util/BytecodeHelper.java | 456 -
.../process/traversal/util/ConnectiveP.java | 28 +-
.../process/traversal/util/DefaultTraversal.java | 52 +-
.../traversal/util/DefaultTraversalMetrics.java | 2 +-
.../util/DefaultTraversalSideEffects.java | 2 +-
.../traversal/util/DefaultTraversalStrategies.java | 2 +-
.../process/traversal/util/DepthComparator.java | 2 +-
.../process/traversal/util/EmptyTraversal.java | 44 +-
.../traversal/util/EmptyTraversalSideEffects.java | 2 +-
.../traversal/util/EmptyTraversalStrategies.java | 2 +-
.../traversal/util/FastNoSuchElementException.java | 2 +-
.../traversal/util/ImmutableExplanation.java | 2 +-
.../process/traversal/util/ImmutableMetrics.java | 2 +-
.../process/traversal/util/ListFunction.java | 18 +-
.../gremlin/process/traversal/util/Metrics.java | 2 +-
.../process/traversal/util/MutableMetrics.java | 2 +-
.../gremlin/process/traversal/util/OrP.java | 16 +-
.../gremlin/process/traversal/util/PathUtil.java | 2 +-
.../process/traversal/util/PureTraversal.java | 8 +-
.../process/traversal/util/ScriptTraversal.java | 2 +-
.../process/traversal/util/SideEffectHelper.java | 2 +-
.../process/traversal/util/StepPosition.java | 2 +-
.../traversal/util/TraversalClassFunction.java | 2 +-
.../traversal/util/TraversalExplanation.java | 2 +-
.../process/traversal/util/TraversalHelper.java | 425 +-
.../util/TraversalInterruptedException.java | 2 +-
.../process/traversal/util/TraversalMatrix.java | 2 +-
.../process/traversal/util/TraversalMetrics.java | 2 +-
.../traversal/util/TraversalObjectFunction.java | 2 +-
.../process/traversal/util/TraversalProduct.java | 2 +-
.../process/traversal/util/TraversalRing.java | 2 +-
.../traversal/util/TraversalSourceFactory.java | 2 +-
.../process/traversal/util/TraversalUtil.java | 2 +-
.../apache/tinkerpop/gremlin/structure/Column.java | 2 +-
.../tinkerpop/gremlin/structure/Direction.java | 2 +-
.../apache/tinkerpop/gremlin/structure/Edge.java | 2 +-
.../tinkerpop/gremlin/structure/Element.java | 2 +-
.../apache/tinkerpop/gremlin/structure/Graph.java | 29 +-
.../tinkerpop/gremlin/structure/Property.java | 2 +-
.../tinkerpop/gremlin/structure/PropertyType.java | 2 +-
.../org/apache/tinkerpop/gremlin/structure/T.java | 2 +-
.../tinkerpop/gremlin/structure/Transaction.java | 2 +-
.../apache/tinkerpop/gremlin/structure/Vertex.java | 2 +-
.../gremlin/structure/VertexProperty.java | 5 +-
.../gremlin/structure/io/AbstractIoRegistry.java | 2 +-
.../tinkerpop/gremlin/structure/io/Buffer.java | 2 +-
.../gremlin/structure/io/BufferFactory.java | 2 +-
.../gremlin/structure/io/GraphMigrator.java | 2 +-
.../gremlin/structure/io/GraphReader.java | 2 +-
.../gremlin/structure/io/GraphWriter.java | 2 +-
.../apache/tinkerpop/gremlin/structure/io/Io.java | 2 +-
.../tinkerpop/gremlin/structure/io/IoCore.java | 2 +-
.../tinkerpop/gremlin/structure/io/IoRegistry.java | 2 +-
.../tinkerpop/gremlin/structure/io/Mapper.java | 2 +-
.../tinkerpop/gremlin/structure/io/Storage.java | 2 +-
.../gremlin/structure/io/binary/DataType.java | 44 +-
.../gremlin/structure/io/binary/GraphBinaryIo.java | 2 +-
.../structure/io/binary/GraphBinaryMapper.java | 2 +-
.../structure/io/binary/GraphBinaryReader.java | 2 +-
.../structure/io/binary/GraphBinaryWriter.java | 22 +-
.../gremlin/structure/io/binary/Marker.java | 41 +
.../structure/io/binary/TypeSerializer.java | 2 +-
.../io/binary/TypeSerializerRegistry.java | 109 +-
.../io/binary/types/BigDecimalSerializer.java | 2 +-
.../io/binary/types/BigIntegerSerializer.java | 2 +-
.../io/binary/types/BinarySerializer.java | 51 +
.../io/binary/types/BindingSerializer.java | 49 -
.../io/binary/types/BulkSetSerializer.java | 13 +-
.../io/binary/types/ByteBufferSerializer.java | 51 -
.../io/binary/types/ByteCodeSerializer.java | 90 -
.../structure/io/binary/types/CharSerializer.java | 2 +-
.../structure/io/binary/types/ClassSerializer.java | 47 -
.../io/binary/types/CollectionSerializer.java | 2 +-
.../io/binary/types/CustomTypeSerializer.java | 2 +-
.../structure/io/binary/types/DateSerializer.java | 54 -
.../io/binary/types/DateTimeSerializer.java | 56 +
.../io/binary/types/DurationSerializer.java | 2 +-
.../structure/io/binary/types/EdgeSerializer.java | 24 +-
.../structure/io/binary/types/EnumSerializer.java | 15 +-
.../structure/io/binary/types/GraphSerializer.java | 21 +-
.../io/binary/types/InetAddressSerializer.java | 56 -
.../io/binary/types/InstantSerializer.java | 46 -
.../io/binary/types/LambdaSerializer.java | 59 -
.../structure/io/binary/types/ListSerializer.java | 27 +-
.../io/binary/types/LocalDateSerializer.java | 46 -
.../io/binary/types/LocalDateTimeSerializer.java | 50 -
.../io/binary/types/LocalTimeSerializer.java | 46 -
.../io/binary/types/MapEntrySerializer.java | 2 +-
.../structure/io/binary/types/MapSerializer.java | 31 +-
.../io/binary/types/MetricsSerializer.java | 67 -
.../io/binary/types/MonthDaySerializer.java | 46 -
.../io/binary/types/OffsetDateTimeSerializer.java | 51 -
.../io/binary/types/OffsetTimeSerializer.java | 51 -
.../structure/io/binary/types/PSerializer.java | 18 +-
.../structure/io/binary/types/PathSerializer.java | 6 +-
.../io/binary/types/PeriodSerializer.java | 46 -
.../io/binary/types/PropertySerializer.java | 2 +-
.../structure/io/binary/types/SetSerializer.java | 2 +-
.../io/binary/types/SimpleTypeSerializer.java | 17 +-
.../io/binary/types/SingleTypeSerializer.java | 7 +-
.../io/binary/types/StringSerializer.java | 2 +-
.../io/binary/types/TransformSerializer.java | 2 +-
.../types/TraversalExplanationSerializer.java | 2 +-
.../binary/types/TraversalMetricsSerializer.java | 53 -
.../binary/types/TraversalStrategySerializer.java | 68 -
.../io/binary/types/TraverserSerializer.java | 51 -
.../structure/io/binary/types/TreeSerializer.java | 2 +-
.../structure/io/binary/types/UUIDSerializer.java | 2 +-
.../io/binary/types/VertexPropertySerializer.java | 12 +-
.../io/binary/types/VertexSerializer.java | 15 +-
.../io/binary/types/YearMonthSerializer.java | 46 -
.../io/binary/types/ZoneOffsetSerializer.java | 47 -
.../io/binary/types/ZonedDateTimeSerializer.java | 51 -
.../gremlin/structure/io/graphml/GraphMLIo.java | 2 +-
.../structure/io/graphml/GraphMLMapper.java | 2 +-
.../structure/io/graphml/GraphMLReader.java | 2 +-
.../structure/io/graphml/GraphMLTokens.java | 2 +-
.../structure/io/graphml/GraphMLWriter.java | 4 +-
.../structure/io/graphml/GraphMLWriterHelper.java | 2 +-
.../graphson/AbstractGraphSONTypeSerializer.java | 2 +-
.../io/graphson/AbstractObjectDeserializer.java | 2 +-
.../gremlin/structure/io/graphson/GraphSONIo.java | 2 +-
.../structure/io/graphson/GraphSONMapper.java | 37 +-
.../structure/io/graphson/GraphSONModule.java | 190 +-
.../structure/io/graphson/GraphSONReader.java | 4 +-
.../io/graphson/GraphSONSerializerProvider.java | 2 +-
.../io/graphson/GraphSONSerializersV1.java | 7 +-
.../io/graphson/GraphSONSerializersV2.java | 18 +-
.../io/graphson/GraphSONSerializersV3.java | 16 +-
.../io/graphson/GraphSONSerializersV4.java | 691 +
.../structure/io/graphson/GraphSONTokens.java | 2 +-
.../io/graphson/GraphSONTypeDeserializer.java | 5 +-
.../io/graphson/GraphSONTypeIdResolver.java | 2 +-
.../io/graphson/GraphSONTypeResolverBuilder.java | 14 +-
.../io/graphson/GraphSONTypeSerializerV2.java | 2 +-
.../io/graphson/GraphSONTypeSerializerV3.java | 2 +-
.../io/graphson/GraphSONTypeSerializerV4.java | 142 +
.../structure/io/graphson/GraphSONUtil.java | 2 +-
.../structure/io/graphson/GraphSONVersion.java | 5 +-
.../structure/io/graphson/GraphSONWriter.java | 2 +-
.../structure/io/graphson/GraphSONXModuleV2.java | 2 +-
.../structure/io/graphson/GraphSONXModuleV3.java | 2 +-
.../structure/io/graphson/GraphSONXModuleV4.java | 106 +
.../io/graphson/JavaTimeSerializersV1.java | 2 +-
.../io/graphson/JavaTimeSerializersV2.java | 2 +-
.../io/graphson/JavaTimeSerializersV3.java | 2 +-
.../io/graphson/JavaTimeSerializersV4.java | 130 +
.../io/graphson/JavaUtilSerializersV1.java | 2 +-
.../io/graphson/JavaUtilSerializersV2.java | 2 +-
.../io/graphson/JavaUtilSerializersV3.java | 2 +-
.../io/graphson/JavaUtilSerializersV4.java | 199 +
.../structure/io/graphson/JsonParserConcat.java | 2 +-
.../io/graphson/LegacyGraphSONReader.java | 2 +-
.../io/graphson/TinkerPopJacksonModule.java | 2 +-
.../io/graphson/ToStringGraphSONSerializer.java | 2 +-
.../io/graphson/TraversalSerializersV2.java | 149 +-
.../io/graphson/TraversalSerializersV3.java | 153 +-
.../io/graphson/TraversalSerializersV4.java | 102 +
.../gremlin/structure/io/graphson/TypeInfo.java | 2 +-
.../io/gryo/AbstractGryoClassResolver.java | 2 +-
.../structure/io/gryo/GryoClassResolverV1.java | 5 +-
.../structure/io/gryo/GryoClassResolverV3.java | 5 +-
.../gremlin/structure/io/gryo/GryoIo.java | 2 +-
.../gremlin/structure/io/gryo/GryoMapper.java | 2 +-
.../gremlin/structure/io/gryo/GryoPool.java | 2 +-
.../gremlin/structure/io/gryo/GryoReader.java | 2 +-
.../structure/io/gryo/GryoSerializersV1.java | 85 +-
.../structure/io/gryo/GryoSerializersV3.java | 85 +-
.../gremlin/structure/io/gryo/GryoTypeReg.java | 2 +-
.../gremlin/structure/io/gryo/GryoVersion.java | 40 +-
.../gremlin/structure/io/gryo/GryoWriter.java | 2 +-
.../structure/io/gryo/JavaTimeSerializers.java | 2 +-
.../structure/io/gryo/TypeRegistration.java | 2 +-
.../gremlin/structure/io/gryo/UtilSerializers.java | 2 +-
.../io/gryo/VertexByteArrayInputStream.java | 2 +-
.../structure/io/gryo/VertexTerminator.java | 2 +-
.../structure/io/gryo/kryoshim/InputShim.java | 2 +-
.../structure/io/gryo/kryoshim/KryoShim.java | 2 +-
.../io/gryo/kryoshim/KryoShimService.java | 2 +-
.../io/gryo/kryoshim/KryoShimServiceLoader.java | 2 +-
.../structure/io/gryo/kryoshim/OutputShim.java | 2 +-
.../structure/io/gryo/kryoshim/SerializerShim.java | 2 +-
.../structure/io/gryo/kryoshim/package-info.java | 2 +-
.../gryo/kryoshim/shaded/ShadedInputAdapter.java | 2 +-
.../io/gryo/kryoshim/shaded/ShadedKryoAdapter.java | 2 +-
.../gryo/kryoshim/shaded/ShadedOutputAdapter.java | 2 +-
.../kryoshim/shaded/ShadedSerializerAdapter.java | 2 +-
.../io/gryo/kryoshim/shaded/package-info.java | 2 +-
.../structure/io/util/IoRegistryHelper.java | 2 +-
.../gremlin/structure/service/Service.java | 2 +-
.../gremlin/structure/service/ServiceRegistry.java | 2 +-
.../util/AbstractThreadLocalTransaction.java | 2 +-
.../util/AbstractThreadedTransaction.java | 2 +-
.../structure/util/AbstractTransaction.java | 2 +-
.../gremlin/structure/util/Attachable.java | 2 +-
.../gremlin/structure/util/CloseableIterator.java | 2 +-
.../gremlin/structure/util/Comparators.java | 2 +-
.../structure/util/DefaultCloseableIterator.java | 2 +-
.../gremlin/structure/util/ElementHelper.java | 12 +-
.../gremlin/structure/util/FeatureDescriptor.java | 2 +-
.../gremlin/structure/util/GraphFactory.java | 2 +-
.../gremlin/structure/util/GraphFactoryClass.java | 2 +-
.../structure/util/GraphVariableHelper.java | 2 +-
.../tinkerpop/gremlin/structure/util/Host.java | 2 +-
.../gremlin/structure/util/StringFactory.java | 7 +-
.../gremlin/structure/util/TemporaryException.java | 2 +-
.../structure/util/TransactionException.java | 2 +-
.../structure/util/detached/DetachedEdge.java | 2 +-
.../structure/util/detached/DetachedElement.java | 2 +-
.../structure/util/detached/DetachedFactory.java | 2 +-
.../structure/util/detached/DetachedPath.java | 2 +-
.../structure/util/detached/DetachedProperty.java | 2 +-
.../structure/util/detached/DetachedVertex.java | 2 +-
.../util/detached/DetachedVertexProperty.java | 2 +-
.../gremlin/structure/util/empty/EmptyGraph.java | 2 +-
.../structure/util/empty/EmptyProperty.java | 2 +-
.../structure/util/empty/EmptyVertexProperty.java | 2 +-
.../structure/util/keyed/KeyedProperty.java | 2 +-
.../structure/util/keyed/KeyedVertexProperty.java | 2 +-
.../structure/util/reference/ReferenceEdge.java | 2 +-
.../structure/util/reference/ReferenceElement.java | 2 +-
.../structure/util/reference/ReferenceFactory.java | 2 +-
.../structure/util/reference/ReferencePath.java | 2 +-
.../util/reference/ReferenceProperty.java | 2 +-
.../structure/util/reference/ReferenceVertex.java | 2 +-
.../util/reference/ReferenceVertexProperty.java | 2 +-
.../structure/util/star/DirectionalStarGraph.java | 2 +-
.../gremlin/structure/util/star/StarGraph.java | 2 +-
.../util/star/StarGraphGraphSONDeserializer.java | 2 +-
.../util/star/StarGraphGraphSONSerializerV1.java | 2 +-
.../util/star/StarGraphGraphSONSerializerV2.java | 2 +-
.../util/star/StarGraphGraphSONSerializerV3.java | 2 +-
.../util/star/StarGraphGraphSONSerializerV4.java | 165 +
.../util/star/StarGraphGryoSerializer.java | 2 +-
.../structure/util/star/StarGraphSerializer.java | 2 +-
.../structure/util/wrapped/WrappedEdge.java | 2 +-
.../structure/util/wrapped/WrappedElement.java | 2 +-
.../structure/util/wrapped/WrappedGraph.java | 2 +-
.../structure/util/wrapped/WrappedProperty.java | 2 +-
.../structure/util/wrapped/WrappedVariables.java | 2 +-
.../structure/util/wrapped/WrappedVertex.java | 2 +-
.../util/wrapped/WrappedVertexProperty.java | 2 +-
.../tinkerpop/gremlin/util/CollectionUtil.java | 42 +-
.../tinkerpop/gremlin/util/DatetimeHelper.java | 2 +-
.../tinkerpop/gremlin/util/ExceptionHelper.java | 2 +-
.../org/apache/tinkerpop/gremlin/util/Gremlin.java | 9 +-
.../util/GremlinDisabledListDelimiterHandler.java | 2 +-
.../gremlin/util/GremlinValueComparator.java | 108 +-
.../apache/tinkerpop/gremlin/util/MultiMap.java | 2 +-
.../tinkerpop/gremlin/util/NumberHelper.java | 282 +-
.../apache/tinkerpop/gremlin/util/Serializer.java | 2 +-
.../apache/tinkerpop/gremlin/util/StringUtil.java | 2 +-
.../apache/tinkerpop/gremlin/util/SystemUtil.java | 2 +-
.../apache/tinkerpop/gremlin/util/TestSupport.java | 2 +-
.../apache/tinkerpop/gremlin/util/TimeUtil.java | 2 +-
.../gremlin/util/function/ArrayListSupplier.java | 2 +-
.../gremlin/util/function/BulkSetSupplier.java | 2 +-
.../gremlin/util/function/ChainedComparator.java | 2 +-
.../gremlin/util/function/ConstantSupplier.java | 2 +-
.../function/DefaultTraversalMetricsSupplier.java | 2 +-
.../gremlin/util/function/FunctionUtils.java | 2 +-
.../gremlin/util/function/HashMapSupplier.java | 2 +-
.../gremlin/util/function/HashSetSupplier.java | 2 +-
.../tinkerpop/gremlin/util/function/Lambda.java | 2 +-
.../gremlin/util/function/MeanNumberSupplier.java | 2 +-
.../gremlin/util/function/MultiComparator.java | 2 +-
.../util/function/MutableMetricsSupplier.java | 2 +-
.../gremlin/util/function/ScriptEngineLambda.java | 2 +-
.../gremlin/util/function/ThrowingBiConsumer.java | 2 +-
.../gremlin/util/function/ThrowingBiFunction.java | 2 +-
.../gremlin/util/function/ThrowingConsumer.java | 2 +-
.../gremlin/util/function/ThrowingFunction.java | 2 +-
.../gremlin/util/function/ThrowingSupplier.java | 2 +-
.../gremlin/util/function/TraversableLambda.java | 2 +-
.../util/function/TraverserSetSupplier.java | 2 +-
.../gremlin/util/function/TreeSupplier.java | 2 +-
.../gremlin/util/function/TriConsumer.java | 2 +-
.../gremlin/util/function/TriFunction.java | 2 +-
.../util/iterator/AbortiveMultiIterator.java | 2 +-
.../gremlin/util/iterator/ArrayIterator.java | 2 +-
.../gremlin/util/iterator/DoubleIterator.java | 2 +-
.../gremlin/util/iterator/EmptyIterator.java | 2 +-
.../gremlin/util/iterator/IteratorUtils.java | 4 +-
.../gremlin/util/iterator/MultiIterator.java | 2 +-
.../gremlin/util/iterator/SingleIterator.java | 2 +-
.../util/iterator/StoreIteratorCounter.java | 2 +-
.../src/main/resources/tp2-to-tp3-graphml.xslt | 30 +-
.../org/apache/tinkerpop/gremlin/AssertHelper.java | 2 +-
.../apache/tinkerpop/gremlin/TestDataBuilder.java | 48 +
.../jsr223/DefaultImportCustomizerTest.java | 2 +-
.../jsr223/DefaultScriptCustomizerTest.java | 2 +-
.../jsr223/GremlinLangScriptEngineTest.java | 66 +-
.../gremlin/jsr223/GremlinScriptCheckerTest.java | 2 +-
.../gremlin/jsr223/ImportGremlinPluginTest.java | 9 +-
.../gremlin/jsr223/ScriptEngineCacheTest.java | 5 +-
.../jsr223/ScriptFileGremlinPluginTest.java | 2 +-
.../jsr223/SingleScriptEngineManagerTest.java | 7 +-
.../gremlin/jsr223/VariableResolverPluginTest.java | 117 +
.../language/grammar/ArgumentVisitorTest.java | 104 +-
.../grammar/ComplexTraversalMethodVisitorTest.java | 2 +-
.../grammar/GeneralLiteralVisitorTest.java | 232 +-
.../grammar/GraphTraversalSourceVisitorTest.java | 5 +-
.../language/grammar/GremlinQueryParserTest.java | 34 +-
.../language/grammar/ParameterMapVisitorTest.java | 271 +
.../grammar/StructureElementVisitorTest.java | 48 -
.../language/grammar/TraversalEnumParserTest.java | 2 +-
.../grammar/TraversalMethodVisitorTest.java | 45 +-
.../grammar/TraversalPredicateVisitorTest.java | 2 +-
.../language/grammar/TraversalRootVisitorTest.java | 1505 +-
.../TraversalSourceSelfMethodVisitorTest.java | 6 +-
.../grammar/TraversalSourceSpawnVisitorTest.java | 2 +-
.../grammar/TraversalSourceTxVisitorTest.java | 2 +-
.../grammar/TraversalStrategyVisitorTest.java | 138 +-
.../language/translator/GremlinTranslatorTest.java | 522 +-
.../gremlin/process/TraversalStrategiesTest.java | 4 +-
.../gremlin/process/computer/GraphFilterTest.java | 2 +-
.../optimization/GraphFilterStrategyTest.java | 2 +-
.../MessagePassingReductionStrategyTest.java | 6 +-
.../VertexProgramRestrictionStrategyTest.java | 2 +-
.../remote/EmbeddedRemoteConnectionTest.java | 47 +
.../gremlin/process/traversal/BytecodeTest.java | 272 -
.../gremlin/process/traversal/CardinalityTest.java | 2 +-
.../gremlin/process/traversal/CompareTest.java | 237 +-
.../gremlin/process/traversal/ConnectiveTest.java | 81 +-
.../process/traversal/ContainsBulkSetTest.java | 11 +-
.../gremlin/process/traversal/ContainsTest.java | 2 +-
.../process/traversal/GValueManagerTest.java | 309 +
.../gremlin/process/traversal/GremlinLangTest.java | 599 +
.../process/traversal/OperatorExceptionTest.java | 2 +-
.../gremlin/process/traversal/OperatorTest.java | 2 +-
.../gremlin/process/traversal/OrderTest.java | 30 +-
.../gremlin/process/traversal/PBulkSetTest.java | 115 +
.../tinkerpop/gremlin/process/traversal/PTest.java | 237 +-
.../gremlin/process/traversal/PathTest.java | 2 +-
.../gremlin/process/traversal/ScopeTest.java | 2 +-
.../gremlin/process/traversal/TraversalTest.java | 14 +-
.../dsl/graph/GraphTraversalSourceTest.java | 40 +-
.../traversal/dsl/graph/GraphTraversalTest.java | 154 +-
.../traversal/lambda/ConstantTraversalTest.java | 2 +-
.../traversal/lambda/TokenTraversalTest.java | 2 +-
.../traversal/lambda/ValueTraversalTest.java | 2 +-
.../process/traversal/step/GValueStepTest.java | 75 +
.../gremlin/process/traversal/step/GValueTest.java | 632 +
.../gremlin/process/traversal/step/StepTest.java | 2 +-
.../traversal/step/TraversalParentTest.java | 996 +
.../traversal/step/branch/BranchStepTest.java | 2 +-
.../traversal/step/branch/ChooseStepTest.java | 12 +-
.../traversal/step/branch/LocalStepTest.java | 24 +-
.../traversal/step/branch/OptionalStepTest.java | 2 +-
.../traversal/step/branch/RepeatStepTest.java | 2 +-
.../traversal/step/branch/UnionStepTest.java | 2 +-
.../process/traversal/step/filter/AllStepTest.java | 2 +-
.../process/traversal/step/filter/AndStepTest.java | 2 +-
.../process/traversal/step/filter/AnyStepTest.java | 2 +-
.../traversal/step/filter/CoinStepTest.java | 2 +-
.../traversal/step/filter/DedupGlobalStepTest.java | 28 +-
.../traversal/step/filter/DropStepTest.java | 2 +-
.../process/traversal/step/filter/HasStepTest.java | 85 +-
.../process/traversal/step/filter/IsStepTest.java | 63 +-
.../step/filter/LambdaFilterStepTest.java | 2 +-
.../traversal/step/filter/NoneStepTest.java | 90 +
.../process/traversal/step/filter/NotStepTest.java | 2 +-
.../process/traversal/step/filter/OrStepTest.java | 2 +-
.../traversal/step/filter/PathFilterStepTest.java | 2 +-
.../traversal/step/filter/RangeGlobalStepTest.java | 125 +-
.../step/filter/SampleGlobalStepTest.java | 80 +-
.../traversal/step/filter/TailGlobalStepTest.java | 54 +-
.../traversal/step/filter/TimeLimitStepTest.java | 2 +-
.../traversal/step/filter/WhereStepTest.java | 35 +-
.../traversal/step/map/AddEdgeStartStepTest.java | 242 +
.../traversal/step/map/AddEdgeStepTest.java | 306 +-
.../traversal/step/map/AddVertexStartStepTest.java | 190 +
.../traversal/step/map/AddVertexStepTest.java | 332 +-
.../process/traversal/step/map/AsBoolStepTest.java | 81 +
.../process/traversal/step/map/AsDateStepTest.java | 2 +-
.../traversal/step/map/AsNumberStepTest.java | 424 +
.../traversal/step/map/AsStringGlobalStepTest.java | 10 +-
.../traversal/step/map/AsStringLocalStepTest.java | 8 +-
.../process/traversal/step/map/CallStepTest.java | 220 +
.../traversal/step/map/CoalesceStepTest.java | 2 +-
.../traversal/step/map/CombineStepTest.java | 2 +-
.../process/traversal/step/map/ConcatStepTest.java | 2 +-
.../traversal/step/map/ConjoinStepTest.java | 7 +-
.../traversal/step/map/CountGlobalStepTest.java | 2 +-
.../traversal/step/map/CountLocalStepTest.java | 2 +-
.../traversal/step/map/DateAddStepTest.java | 5 +-
.../traversal/step/map/DateDiffStepTest.java | 36 +-
.../traversal/step/map/DedupLocalStepTest.java | 2 +-
.../traversal/step/map/DifferenceStepTest.java | 2 +-
.../traversal/step/map/DisjunctStepTest.java | 2 +-
.../step/map/EdgeOtherVertexStepTest.java | 2 +-
.../traversal/step/map/EdgeVertexStepTest.java | 2 +-
.../traversal/step/map/ElementMapStepTest.java | 2 +-
.../process/traversal/step/map/FoldStepTest.java | 2 +-
.../process/traversal/step/map/FormatStepTest.java | 19 +-
.../process/traversal/step/map/GraphStepTest.java | 72 +-
.../traversal/step/map/GroupCountStepTest.java | 2 +-
.../process/traversal/step/map/GroupStepTest.java | 2 +-
.../process/traversal/step/map/IdStepTest.java | 2 +-
.../process/traversal/step/map/IndexStepTest.java | 2 +-
.../traversal/step/map/IntersectStepTest.java | 2 +-
.../traversal/step/map/LTrimGlobalStepTest.java | 2 +-
.../traversal/step/map/LTrimLocalStepTest.java | 2 +-
.../process/traversal/step/map/LabelStepTest.java | 2 +-
.../step/map/LambdaCollectingBarrierStepTest.java | 2 +-
.../traversal/step/map/LambdaFlatMapStepTest.java | 2 +-
.../traversal/step/map/LambdaMapStepTest.java | 2 +-
.../traversal/step/map/LengthGlobalStepTest.java | 2 +-
.../traversal/step/map/LengthLocalStepTest.java | 2 +-
.../process/traversal/step/map/LoopsStepTest.java | 2 +-
.../process/traversal/step/map/MatchStepTest.java | 23 +-
.../process/traversal/step/map/MathStepTest.java | 23 +-
.../traversal/step/map/MaxGlobalStepTest.java | 2 +-
.../traversal/step/map/MaxLocalStepTest.java | 2 +-
.../traversal/step/map/MeanGlobalStepTest.java | 2 +-
.../traversal/step/map/MeanLocalStepTest.java | 2 +-
.../traversal/step/map/MergeEdgeStepTest.java | 186 +-
.../process/traversal/step/map/MergeStepTest.java | 65 +
.../traversal/step/map/MergeVertexStepTest.java | 201 +-
.../traversal/step/map/MinGlobalStepTest.java | 2 +-
.../traversal/step/map/MinLocalStepTest.java | 2 +-
.../traversal/step/map/NoOpBarrierStepTest.java | 2 +-
.../traversal/step/map/OrderGlobalStepTest.java | 2 +-
.../traversal/step/map/OrderLocalStepTest.java | 2 +-
.../process/traversal/step/map/PathStepTest.java | 2 +-
.../traversal/step/map/ProductStepTest.java | 2 +-
.../traversal/step/map/ProjectStepTest.java | 2 +-
.../traversal/step/map/PropertiesStepTest.java | 2 +-
.../traversal/step/map/PropertyKeyStepTest.java | 2 +-
.../traversal/step/map/PropertyMapStepTest.java | 2 +-
.../traversal/step/map/PropertyValueStepTest.java | 2 +-
.../traversal/step/map/RTrimGlobalStepTest.java | 2 +-
.../traversal/step/map/RTrimLocalStepTest.java | 2 +-
.../traversal/step/map/RangeLocalStepTest.java | 173 +-
.../traversal/step/map/ReplaceGlobalStepTest.java | 2 +-
.../traversal/step/map/ReplaceLocalStepTest.java | 2 +-
.../traversal/step/map/ReverseStepTest.java | 2 +-
.../process/traversal/step/map/SackStepTest.java | 2 +-
.../traversal/step/map/SampleLocalStepTest.java | 2 +-
.../traversal/step/map/SelectOneStepTest.java | 50 +-
.../process/traversal/step/map/SelectStepTest.java | 52 +-
.../traversal/step/map/SplitGlobalStepTest.java | 2 +-
.../traversal/step/map/SplitLocalStepTest.java | 2 +-
.../step/map/SubstringGlobalStepTest.java | 2 +-
.../traversal/step/map/SubstringLocalStepTest.java | 2 +-
.../traversal/step/map/SumGlobalStepTest.java | 2 +-
.../traversal/step/map/SumLocalStepTest.java | 2 +-
.../traversal/step/map/TailLocalStepTest.java | 54 +-
.../traversal/step/map/ToLowerGlobalStepTest.java | 2 +-
.../traversal/step/map/ToLowerLocalStepTest.java | 2 +-
.../traversal/step/map/ToUpperGlobalStepTest.java | 2 +-
.../traversal/step/map/ToUpperLocalStepTest.java | 2 +-
.../traversal/step/map/TraversalMergeStepTest.java | 65 -
.../step/map/TraversalSelectStepTest.java | 56 +
.../process/traversal/step/map/TreeStepTest.java | 2 +-
.../traversal/step/map/TrimGlobalStepTest.java | 2 +-
.../traversal/step/map/TrimLocalStepTest.java | 2 +-
.../process/traversal/step/map/UnfoldStepTest.java | 2 +-
.../process/traversal/step/map/VertexStepTest.java | 106 +-
.../step/sideEffect/AddPropertyStepTest.java | 127 +-
.../step/sideEffect/AggregateGlobalStepTest.java | 40 -
.../step/sideEffect/AggregateLocalStepTest.java | 40 -
.../step/sideEffect/AggregateStepTest.java | 40 +
.../sideEffect/GroupCountSideEffectStepTest.java | 2 +-
.../step/sideEffect/GroupSideEffectStepTest.java | 2 +-
.../step/sideEffect/IdentityStepTest.java | 2 +-
.../traversal/step/sideEffect/InjectStepTest.java | 2 +-
.../step/sideEffect/LambdaSideEffectStepTest.java | 2 +-
.../step/sideEffect/ProfileSideEffectStepTest.java | 2 +-
.../step/sideEffect/SackValueStepTest.java | 8 +-
.../step/sideEffect/SideEffectCapStepTest.java | 2 +-
.../step/sideEffect/SubgraphStepTest.java | 2 +-
.../step/sideEffect/TreeSideEffectStepTest.java | 2 +-
.../process/traversal/step/util/BulkSetTest.java | 2 +-
.../traversal/step/util/ParametersTest.java | 3 +-
.../process/traversal/step/util/TreeTest.java | 2 +-
.../traversal/strategy/GValueManagerVerifier.java | 330 +
.../strategy/GValueManagerVerifierTest.java | 223 +
.../strategy/TraversalStrategyProxyTest.java | 64 +
.../decoration/ConnectiveStrategyTest.java | 184 +-
.../decoration/ElementIdStrategyConfigTest.java | 2 +-
.../decoration/ElementIdStrategyTraverseTest.java | 27 +-
.../strategy/decoration/EventStrategyTest.java | 10 +-
.../HaltedTraverserStrategyConfigTest.java | 2 +-
.../decoration/OptionsStrategyConfigTest.java | 2 +-
.../strategy/decoration/OptionsStrategyTest.java | 2 +-
.../decoration/PartitionStrategyConfigTest.java | 2 +-
.../strategy/decoration/PartitionStrategyTest.java | 195 +-
.../strategy/decoration/SackStrategyTest.java | 2 +-
.../decoration/SeedStrategyConfigTest.java | 2 +-
.../decoration/SubgraphStrategyConfigTest.java | 2 +-
.../strategy/decoration/SubgraphStrategyTest.java | 117 +-
.../decoration/VertexProgramStrategyTest.java | 8 +-
.../MatchAlgorithmStrategyConfigTest.java | 2 +-
.../finalization/ReferenceElementStrategyTest.java | 2 +-
.../AdjacentToIncidentStrategyTest.java | 166 +-
.../ByModulatorOptimizationStrategyTest.java | 22 +-
.../strategy/optimization/CountStrategyTest.java | 400 +-
.../optimization/EarlyLimitStrategyTest.java | 334 +-
...lterRankingStrategyCacheInitializationTest.java | 2 +-
.../optimization/FilterRankingStrategyTest.java | 416 +-
.../optimization/GValueReductionStrategyTest.java | 269 +
.../optimization/IdentityRemovalStrategyTest.java | 22 +-
.../IncidentToAdjacentStrategyTest.java | 163 +-
.../optimization/InlineFilterStrategyTest.java | 268 +-
.../optimization/LazyBarrierStrategyTest.java | 15 +-
.../optimization/MatchPredicateStrategyTest.java | 7 +-
.../optimization/OrderLimitStrategyTest.java | 111 +-
.../optimization/PathProcessorStrategyTest.java | 208 +-
.../optimization/PathRetractionStrategyTest.java | 14 +-
.../ProductiveByStrategyConfigTest.java | 2 +-
.../optimization/ProductiveByStrategyTest.java | 13 +-
.../optimization/RepeatUnrollStrategyTest.java | 206 +-
.../ProviderGValueReductionStrategyTest.java | 254 +
.../ComputerVerificationStrategyTest.java | 7 +-
.../EdgeLabelVerificationStrategyConfigTest.java | 2 +-
.../EdgeLabelVerificationStrategyTest.java | 13 +-
.../LambdaRestrictionStrategyTest.java | 7 +-
.../verification/ReadOnlyStrategyTest.java | 7 +-
...ReservedKeysVerificationStrategyConfigTest.java | 2 +-
.../ReservedKeysVerificationStrategyTest.java | 21 +-
.../StandardVerificationStrategyTest.java | 18 +-
.../translator/AnonymizingTypeTranslatorTest.java | 145 -
.../traversal/translator/DotNetTranslatorTest.java | 353 -
.../traversal/translator/GolangTranslatorTest.java | 157 -
.../traversal/translator/GroovyTranslatorTest.java | 373 -
.../translator/JavascriptTranslatorTest.java | 220 -
.../ParameterizedGroovyTranslatorTest.java | 367 -
.../traversal/translator/PythonTranslatorTest.java | 189 -
.../B_LP_NL_O_P_S_SE_SL_TraverserTest.java | 28 +
.../traverser/B_LP_NL_O_S_SE_SL_TraverserTest.java | 28 +
.../traverser/B_LP_O_P_S_SE_SL_TraverserTest.java | 28 +
.../traverser/B_LP_O_S_SE_SL_TraverserTest.java | 28 +
.../traverser/B_NL_O_S_SE_SL_TraverserTest.java | 28 +
.../traverser/B_O_S_SE_SL_TraverserTest.java | 27 +
.../LP_NL_O_OB_P_S_SE_SL_TraverserTest.java | 28 +
.../LP_NL_O_OB_S_SE_SL_TraverserTest.java | 28 +
.../traverser/LP_O_OB_P_S_SE_SL_TraverserTest.java | 28 +
.../traverser/LP_O_OB_S_SE_SL_TraverserTest.java | 28 +
.../traverser/NL_O_OB_S_SE_SL_TraverserTest.java | 28 +
.../traversal/traverser/NL_TraverserTest.java | 158 +
.../traverser/O_OB_S_SE_SL_TraverserTest.java | 28 +
.../traversal/traverser/SL_TraverserTest.java | 135 +
.../util/DefaultTraverserGeneratorFactoryTest.java | 2 +-
.../traverser/util/EmptyTraverserTest.java | 2 +-
.../traverser/util/IndexedTraverserSetTest.java | 2 +-
.../util/TraverserSetImplementationTest.java | 2 +-
.../process/traversal/util/BytecodeHelperTest.java | 157 -
.../util/DefaultTraversalMetricsTest.java | 2 +-
.../util/DefaultTraversalSideEffectsTest.java | 2 +-
.../util/DefaultTraversalStrategiesTest.java | 2 +-
.../traversal/util/DefaultTraversalTest.java | 97 +-
.../process/traversal/util/StepPositionTest.java | 2 +-
.../traversal/util/TraversalExplanationTest.java | 73 +-
.../traversal/util/TraversalHelperTest.java | 310 +-
.../tinkerpop/gremlin/structure/DirectionTest.java | 2 +-
.../gremlin/structure/FeaturesConventionTest.java | 2 +-
.../gremlin/structure/GraphHiddenTest.java | 2 +-
.../apache/tinkerpop/gremlin/structure/TTest.java | 2 +-
.../gremlin/structure/io/GraphMigratorTest.java | 2 +-
.../tinkerpop/gremlin/structure/io/IoCoreTest.java | 2 +-
.../gremlin/structure/io/IoRegistryTest.java | 2 +-
.../apache/tinkerpop/gremlin/structure/io/IoX.java | 2 +-
.../gremlin/structure/io/IoXIoRegistry.java | 2 +-
.../apache/tinkerpop/gremlin/structure/io/IoY.java | 2 +-
.../gremlin/structure/io/IoYIoRegistry.java | 2 +-
.../io/graphson/AbstractGraphSONTest.java | 2 +-
.../graphson/GraphSONMapperEmbeddedTypeTest.java | 194 +-
.../GraphSONMapperPartialEmbeddedTypeTest.java | 56 +-
.../structure/io/graphson/GraphSONMapperTest.java | 48 +-
.../io/graphson/GraphSONStreamConstraintsTest.java | 2 +-
.../structure/io/graphson/GraphSONTokensTest.java | 2 +-
.../structure/io/graphson/GraphSONUtilTest.java | 2 +-
.../gremlin/structure/io/gryo/GryoMapperTest.java | 10 +-
.../gremlin/structure/io/gryo/GryoPoolTest.java | 2 +-
.../structure/io/gryo/GryoReaderWriterTest.java | 2 +-
.../structure/util/CloseableIteratorTest.java | 2 +-
.../gremlin/structure/util/ComparatorsTest.java | 2 +-
.../gremlin/structure/util/ElementHelperTest.java | 2 +-
.../gremlin/structure/util/GraphFactoryTest.java | 12 +-
.../structure/util/GraphVariableHelperTest.java | 2 +-
.../gremlin/structure/util/StringFactoryTest.java | 2 +-
.../util/detached/DetachedFactoryTest.java | 2 +-
.../util/reference/ReferenceFactoryTest.java | 2 +-
.../tinkerpop/gremlin/util/CollectionUtilTest.java | 112 +-
.../tinkerpop/gremlin/util/DatetimeHelperTest.java | 2 +-
.../apache/tinkerpop/gremlin/util/GremlinTest.java | 24 +-
.../tinkerpop/gremlin/util/MultiMapTest.java | 2 +-
.../tinkerpop/gremlin/util/NumberHelperTest.java | 285 +-
.../tinkerpop/gremlin/util/SerializerTest.java | 2 +-
.../tinkerpop/gremlin/util/StringUtilTest.java | 2 +-
.../tinkerpop/gremlin/util/SystemUtilTest.java | 2 +-
.../tinkerpop/gremlin/util/TimeUtilTest.java | 2 +-
.../util/function/ArrayListSupplierTest.java | 2 +-
.../gremlin/util/function/BulkSetSupplierTest.java | 2 +-
.../util/function/ConstantSupplierTest.java | 2 +-
.../gremlin/util/function/FunctionUtilsTest.java | 2 +-
.../gremlin/util/function/HashMapSupplierTest.java | 2 +-
.../gremlin/util/function/HashSetSupplierTest.java | 2 +-
.../util/function/MeanNumberSupplierTest.java | 2 +-
.../gremlin/util/function/MultiComparatorTest.java | 2 +-
.../util/function/ScriptEngineLambdaTest.java | 2 +-
.../util/function/TraverserSetSupplierTest.java | 2 +-
.../gremlin/util/function/TreeSupplierTest.java | 2 +-
.../gremlin/util/function/TriConsumerTest.java | 2 +-
.../gremlin/util/function/TriFunctionTest.java | 2 +-
.../util/iterator/AbortiveMultiIteratorTest.java | 2 +-
.../gremlin/util/iterator/ArrayIteratorTest.java | 2 +-
.../gremlin/util/iterator/DoubleIteratorTest.java | 2 +-
.../gremlin/util/iterator/EmptyIteratorTest.java | 2 +-
.../gremlin/util/iterator/IteratorUtilsTest.java | 2 +-
.../gremlin/util/iterator/MultiIteratorTest.java | 2 +-
.../gremlin/util/iterator/SingleIteratorTest.java | 2 +-
.../gremlin/structure/util/mockgraph.properties | 2 +-
.../Examples/BasicGremlin/BasicGremlin.cs | 25 +-
.../Examples/BasicGremlin/BasicGremlin.csproj | 2 +-
gremlin-dotnet/Examples/Connections/Connections.cs | 58 +-
.../Examples/Connections/Connections.csproj | 2 +-
.../Examples/ModernTraversals/ModernTraversals.cs | 18 +-
.../ModernTraversals/ModernTraversals.csproj | 2 +-
gremlin-dotnet/NOTICE | 2 +-
gremlin-dotnet/README.md | 6 +-
gremlin-dotnet/build/generate.groovy | 34 +-
gremlin-dotnet/docker-compose.yml | 33 +-
gremlin-dotnet/pom.xml | 2 +-
.../Gremlin.Net.Template.csproj | 2 +-
.../Gremlin.Net.Template.nuspec | 2 +-
gremlin-dotnet/src/Gremlin.Net.Template/Program.cs | 2 +-
gremlin-dotnet/src/Gremlin.Net.Template/README.md | 2 +-
gremlin-dotnet/src/Gremlin.Net.Template/Service.cs | 2 +-
gremlin-dotnet/src/Gremlin.Net/Driver/Auth.cs | 194 +
.../src/Gremlin.Net/Driver/Connection.cs | 469 +-
.../src/Gremlin.Net/Driver/ConnectionFactory.cs | 49 -
.../src/Gremlin.Net/Driver/ConnectionPool.cs | 298 -
.../Gremlin.Net/Driver/ConnectionPoolSettings.cs | 146 -
.../src/Gremlin.Net/Driver/ConnectionSettings.cs | 94 +
.../Gremlin.Net/Driver/CopyOnWriteCollection.cs | 2 +-
.../Driver/Exceptions/ConnectionClosedException.cs | 65 -
.../Exceptions/ConnectionPoolBusyException.cs | 60 -
.../Exceptions/NoConnectionAvailableException.cs | 56 -
.../Driver/Exceptions/ResponseException.cs | 27 +-
.../Exceptions/ServerUnavailableException.cs | 45 -
.../src/Gremlin.Net/Driver/GremlinClient.cs | 217 +-
.../Gremlin.Net/Driver/GremlinClientExtensions.cs | 35 +-
.../src/Gremlin.Net/Driver/GremlinServer.cs | 30 +-
.../src/Gremlin.Net/Driver/HttpRequestContext.cs | 93 +
.../src/Gremlin.Net/Driver/IClientWebSocket.cs | 43 -
.../src/Gremlin.Net/Driver/IConnection.cs | 39 -
.../src/Gremlin.Net/Driver/IConnectionFactory.cs | 30 -
.../src/Gremlin.Net/Driver/IGremlinClient.cs | 2 +-
.../src/Gremlin.Net/Driver/IMessageSerializer.cs | 21 +-
gremlin-dotnet/src/Gremlin.Net/Driver/Log.cs | 18 +-
.../Gremlin.Net/Driver/Messages/RequestMessage.cs | 212 +-
.../Gremlin.Net/Driver/Messages/ResponseMessage.cs | 62 -
.../Gremlin.Net/Driver/Messages/ResponseResult.cs | 56 -
.../Gremlin.Net/Driver/Messages/ResponseStatus.cs | 72 -
.../Driver/Messages/ResponseStatusCode.cs | 157 -
.../src/Gremlin.Net/Driver/ProxyClientWebSocket.cs | 81 -
.../src/Gremlin.Net/Driver/ProxyConnection.cs | 67 -
.../Driver/Remote/DriverRemoteConnection.cs | 98 +-
.../Driver/Remote/DriverRemoteTraversal.cs | 14 +-
.../ResponseHandlerForSingleRequestMessage.cs | 65 -
gremlin-dotnet/src/Gremlin.Net/Driver/ResultSet.cs | 123 +-
.../Gremlin.Net/Driver/StreamingResponseContext.cs | 71 +
gremlin-dotnet/src/Gremlin.Net/Driver/Tokens.cs | 57 +-
.../src/Gremlin.Net/Driver/WebSocketConnection.cs | 157 -
.../src/Gremlin.Net/Driver/WebSocketSettings.cs | 58 -
gremlin-dotnet/src/Gremlin.Net/Gremlin.Net.csproj | 16 +-
.../Process/Remote/IRemoteConnection.cs | 8 +-
.../Gremlin.Net/Process/Remote/RemoteStrategy.cs | 4 +-
.../Process/Remote/RemoteTransaction.cs | 4 +-
.../Process/Traversal/AnonymousTraversalSource.cs | 4 +-
.../src/Gremlin.Net/Process/Traversal/Barrier.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/Binding.cs | 80 -
.../src/Gremlin.Net/Process/Traversal/Bindings.cs | 73 -
.../src/Gremlin.Net/Process/Traversal/Bytecode.cs | 180 -
.../Gremlin.Net/Process/Traversal/Cardinality.cs | 2 +-
.../Process/Traversal/CardinalityValue.cs | 55 +-
.../src/Gremlin.Net/Process/Traversal/Column.cs | 2 +-
.../Process/Traversal/ConnectedComponent.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/DT.cs | 2 +-
.../Process/Traversal/DefaultTraversal.cs | 258 +-
.../src/Gremlin.Net/Process/Traversal/Direction.cs | 2 +-
.../Gremlin.Net/Process/Traversal/EnumWrapper.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/GType.cs | 112 +
.../src/Gremlin.Net/Process/Traversal/GValue.cs | 128 +
.../src/Gremlin.Net/Process/Traversal/GraphOp.cs | 18 +-
.../Process/Traversal/GraphSONVersion.cs | 2 +-
.../Process/Traversal/GraphTraversal.cs | 636 +-
.../Process/Traversal/GraphTraversalSource.cs | 196 +-
.../Gremlin.Net/Process/Traversal/GremlinLang.cs | 798 +
.../Gremlin.Net/Process/Traversal/GryoVersion.cs | 2 +-
.../Gremlin.Net/Process/Traversal/IBiFunction.cs | 2 +-
.../Process/Traversal/IBinaryOperator.cs | 2 +-
.../Gremlin.Net/Process/Traversal/IComparator.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/IConsumer.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/IFunction.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/IO.cs | 2 +-
.../Gremlin.Net/Process/Traversal/IPredicate.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/ISupplier.cs | 2 +-
.../Gremlin.Net/Process/Traversal/ITraversal.cs | 45 +-
.../Process/Traversal/ITraversalStrategy.cs | 2 +-
.../Process/Traversal/IUnaryOperator.cs | 2 +-
.../Gremlin.Net/Process/Traversal/Instruction.cs | 95 -
.../src/Gremlin.Net/Process/Traversal/Lambda.cs | 84 -
.../src/Gremlin.Net/Process/Traversal/Merge.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/Operator.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/Order.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/P.cs | 8 +-
.../src/Gremlin.Net/Process/Traversal/PageRank.cs | 2 +-
.../Gremlin.Net/Process/Traversal/PeerPressure.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/Pick.cs | 5 +-
.../src/Gremlin.Net/Process/Traversal/Pop.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/Scope.cs | 2 +-
.../Gremlin.Net/Process/Traversal/ShortestPath.cs | 2 +-
.../Strategy/AbstractTraversalStrategy.cs | 4 +-
.../Strategy/Decoration/ConnectiveStrategy.cs | 2 +-
.../Strategy/Decoration/ElementIdStrategy.cs | 2 +-
.../Strategy/Decoration/HaltedTraverserStrategy.cs | 2 +-
.../Strategy/Decoration/OptionsStrategy.cs | 2 +-
.../Strategy/Decoration/PartitionStrategy.cs | 2 +-
.../Traversal/Strategy/Decoration/SeedStrategy.cs | 2 +-
.../Strategy/Decoration/SubgraphStrategy.cs | 2 +-
.../Strategy/Decoration/VertexProgramStrategy.cs | 2 +-
.../Finalization/ComputerFinalizationStrategy.cs | 2 +-
.../Finalization/MatchAlgorithmStrategy.cs | 2 +-
.../Strategy/Finalization/ProfileStrategy.cs | 2 +-
.../Finalization/ReferenceElementStrategy.cs | 2 +-
.../Optimization/AdjacentToIncidentStrategy.cs | 2 +-
.../ByModulatorOptimizationStrategy.cs | 6 +-
.../Strategy/Optimization/CountStrategy.cs | 2 +-
.../Strategy/Optimization/EarlyLimitStrategy.cs | 2 +-
.../Strategy/Optimization/FilterRankingStrategy.cs | 2 +-
.../Strategy/Optimization/GraphFilterStrategy.cs | 2 +-
.../Optimization/IdentityRemovalStrategy.cs | 2 +-
.../Optimization/IncidentToAdjacentStrategy.cs | 2 +-
.../Strategy/Optimization/InlineFilterStrategy.cs | 2 +-
.../Strategy/Optimization/LazyBarrierStrategy.cs | 2 +-
.../Optimization/MatchPredicateStrategy.cs | 2 +-
.../MessagePassingReductionStrategy.cs | 2 +-
.../Strategy/Optimization/OrderLimitStrategy.cs | 2 +-
.../Strategy/Optimization/PathProcessorStrategy.cs | 2 +-
.../Optimization/PathRetractionStrategy.cs | 2 +-
.../Strategy/Optimization/ProductiveByStrategy.cs | 2 +-
.../Strategy/Optimization/RepeatUnrollStrategy.cs | 2 +-
.../Verification/ComputerVerificationStrategy.cs | 2 +-
.../Verification/EdgeLabelVerificationStrategy.cs | 2 +-
.../Verification/LambdaRestrictionStrategy.cs | 2 +-
.../Strategy/Verification/ReadOnlyStrategy.cs | 2 +-
.../ReservedKeysVerificationStrategy.cs | 2 +-
.../Verification/StandardVerificationStrategy.cs | 2 +-
.../VertexProgramRestrictionStrategy.cs | 2 +-
.../Process/Traversal/StringBasedLambda.cs | 61 -
.../src/Gremlin.Net/Process/Traversal/T.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/TextP.cs | 2 +-
.../Traversal/Translator/GroovyTranslator.cs | 207 -
.../src/Gremlin.Net/Process/Traversal/Traverser.cs | 2 +-
.../Gremlin.Net/Process/Traversal/WithOptions.cs | 2 +-
.../src/Gremlin.Net/Process/Traversal/__.cs | 76 +-
gremlin-dotnet/src/Gremlin.Net/Process/Utils.cs | 23 +-
.../src/Gremlin.Net/Properties/AssemblyInfo.cs | 2 +-
gremlin-dotnet/src/Gremlin.Net/Structure/Edge.cs | 2 +-
.../src/Gremlin.Net/Structure/Element.cs | 6 +-
gremlin-dotnet/src/Gremlin.Net/Structure/Graph.cs | 2 +-
.../Structure/IO/GraphBinary/DataType.cs | 167 -
.../IO/GraphBinary/GraphBinaryMessageSerializer.cs | 91 -
.../Structure/IO/GraphBinary/GraphBinaryReader.cs | 107 -
.../Structure/IO/GraphBinary/GraphBinaryWriter.cs | 150 -
.../Structure/IO/GraphBinary/ITypeSerializer.cs | 102 -
.../IO/GraphBinary/RequestMessageSerializer.cs | 58 -
.../IO/GraphBinary/ResponseMessageSerializer.cs | 77 -
.../Structure/IO/GraphBinary/StreamExtensions.cs | 258 -
.../IO/GraphBinary/TypeSerializerRegistry.cs | 331 -
.../IO/GraphBinary/Types/ArraySerializer.cs | 65 -
.../IO/GraphBinary/Types/BigDecimalSerializer.cs | 95 -
.../IO/GraphBinary/Types/BigIntegerSerializer.cs | 62 -
.../IO/GraphBinary/Types/BindingSerializer.cs | 61 -
.../IO/GraphBinary/Types/BulkSetSerializer.cs | 76 -
.../IO/GraphBinary/Types/ByteBufferSerializer.cs | 61 -
.../IO/GraphBinary/Types/ByteCodeSerializer.cs | 117 -
.../IO/GraphBinary/Types/CharSerializer.cs | 87 -
.../IO/GraphBinary/Types/ClassSerializer.cs | 61 -
.../IO/GraphBinary/Types/CustomTypeSerializer.cs | 67 -
.../IO/GraphBinary/Types/DateTimeSerializer.cs | 67 -
.../IO/GraphBinary/Types/DurationSerializer.cs | 61 -
.../IO/GraphBinary/Types/EdgeSerializer.cs | 85 -
.../IO/GraphBinary/Types/EnumSerializer.cs | 143 -
.../Structure/IO/GraphBinary/Types/GremlinType.cs | 49 -
.../IO/GraphBinary/Types/LambdaSerializer.cs | 68 -
.../IO/GraphBinary/Types/ListSerializer.cs | 70 -
.../IO/GraphBinary/Types/MapSerializer.cs | 76 -
.../GraphBinary/Types/OffsetDateTimeSerializer.cs | 80 -
.../Structure/IO/GraphBinary/Types/PSerializer.cs | 112 -
.../IO/GraphBinary/Types/PathSerializer.cs | 74 -
.../IO/GraphBinary/Types/PropertySerializer.cs | 68 -
.../IO/GraphBinary/Types/SetSerializer.cs | 77 -
.../IO/GraphBinary/Types/SimpleTypeSerializer.cs | 125 -
.../IO/GraphBinary/Types/SingleTypeSerializer.cs | 122 -
.../IO/GraphBinary/Types/StringSerializer.cs | 62 -
.../IO/GraphBinary/Types/TraversalSerializer.cs | 60 -
.../Types/TraversalStrategySerializer.cs | 62 -
.../IO/GraphBinary/Types/TraverserSerializer.cs | 60 -
.../IO/GraphBinary/Types/TypeSerializer.cs | 72 -
.../IO/GraphBinary/Types/UuidSerializer.cs | 111 -
.../GraphBinary/Types/VertexPropertySerializer.cs | 77 -
.../IO/GraphBinary/Types/VertexSerializer.cs | 66 -
.../Structure/IO/GraphBinary4/DataType.cs | 143 +
.../GraphBinary4/GraphBinary4MessageSerializer.cs | 75 +
.../Structure/IO/GraphBinary4/GraphBinaryReader.cs | 96 +
.../Structure/IO/GraphBinary4/GraphBinaryWriter.cs | 139 +
.../Structure/IO/GraphBinary4/ITypeSerializer.cs | 102 +
.../Structure/IO/GraphBinary4/Marker.cs | 86 +
.../IO/GraphBinary4/RequestMessageSerializer.cs | 60 +
.../IO/GraphBinary4/ResponseSerializer.cs | 109 +
.../Structure/IO/GraphBinary4/StreamExtensions.cs | 290 +
.../IO/GraphBinary4/TypeSerializerRegistry.cs | 219 +
.../IO/GraphBinary4/Types/ArraySerializer.cs | 65 +
.../IO/GraphBinary4/Types/BigDecimalSerializer.cs | 95 +
.../IO/GraphBinary4/Types/BigIntegerSerializer.cs | 62 +
.../IO/GraphBinary4/Types/BinarySerializer.cs | 61 +
.../IO/GraphBinary4/Types/CharSerializer.cs | 87 +
.../IO/GraphBinary4/Types/DateTimeSerializer.cs | 78 +
.../IO/GraphBinary4/Types/DurationSerializer.cs | 63 +
.../IO/GraphBinary4/Types/EdgeSerializer.cs | 89 +
.../IO/GraphBinary4/Types/EnumSerializer.cs | 93 +
.../IO/GraphBinary4/Types/ListSerializer.cs | 95 +
.../IO/GraphBinary4/Types/MapSerializer.cs | 76 +
.../IO/GraphBinary4/Types/PathSerializer.cs | 74 +
.../IO/GraphBinary4/Types/PropertySerializer.cs | 68 +
.../IO/GraphBinary4/Types/SetSerializer.cs | 77 +
.../IO/GraphBinary4/Types/SimpleTypeSerializer.cs | 143 +
.../IO/GraphBinary4/Types/SingleTypeSerializer.cs | 133 +
.../IO/GraphBinary4/Types/StringSerializer.cs | 62 +
.../IO/GraphBinary4/Types/UuidSerializer.cs | 111 +
.../GraphBinary4/Types/VertexPropertySerializer.cs | 78 +
.../IO/GraphBinary4/Types/VertexSerializer.cs | 68 +
.../IO/GraphSON/BigIntegerDeserializer.cs | 39 -
.../Structure/IO/GraphSON/BigIntegerSerializer.cs | 37 -
.../Structure/IO/GraphSON/BindingSerializer.cs | 42 -
.../Structure/IO/GraphSON/BulkSetSerializer.cs | 48 -
.../IO/GraphSON/ByteBufferDeserializer.cs | 38 -
.../Structure/IO/GraphSON/ByteBufferSerializer.cs | 36 -
.../Structure/IO/GraphSON/ByteConverter.cs | 33 -
.../Structure/IO/GraphSON/BytecodeSerializer.cs | 58 -
.../Structure/IO/GraphSON/CharConverter.cs | 39 -
.../Structure/IO/GraphSON/ClassSerializer.cs | 47 -
.../Structure/IO/GraphSON/DTDeserializer.cs | 38 -
.../Structure/IO/GraphSON/DateDeserializer.cs | 38 -
.../Structure/IO/GraphSON/DecimalConverter.cs | 46 -
.../Structure/IO/GraphSON/DirectionDeserializer.cs | 39 -
.../Structure/IO/GraphSON/DoubleConverter.cs | 72 -
.../Structure/IO/GraphSON/DurationDeserializer.cs | 40 -
.../Structure/IO/GraphSON/DurationSerializer.cs | 38 -
.../Structure/IO/GraphSON/EdgeDeserializer.cs | 59 -
.../Structure/IO/GraphSON/EdgeSerializer.cs | 45 -
.../Structure/IO/GraphSON/EnumSerializer.cs | 37 -
.../Structure/IO/GraphSON/FloatConverter.cs | 33 -
.../IO/GraphSON/GraphSON2MessageSerializer.cs | 43 -
.../Structure/IO/GraphSON/GraphSON2Reader.cs | 50 -
.../Structure/IO/GraphSON/GraphSON2Writer.cs | 51 -
.../IO/GraphSON/GraphSON3MessageSerializer.cs | 43 -
.../Structure/IO/GraphSON/GraphSON3Reader.cs | 68 -
.../Structure/IO/GraphSON/GraphSON3Writer.cs | 68 -
.../IO/GraphSON/GraphSONMessageSerializer.cs | 100 -
.../Structure/IO/GraphSON/GraphSONReader.cs | 152 -
.../Structure/IO/GraphSON/GraphSONTokens.cs | 32 -
.../Structure/IO/GraphSON/GraphSONUtil.cs | 83 -
.../Structure/IO/GraphSON/GraphSONWriter.cs | 179 -
.../Structure/IO/GraphSON/IGraphSONDeserializer.cs | 41 -
.../Structure/IO/GraphSON/IGraphSONSerializer.cs | 41 -
.../Structure/IO/GraphSON/Int16Converter.cs | 35 -
.../Structure/IO/GraphSON/Int32Converter.cs | 34 -
.../Structure/IO/GraphSON/Int64Converter.cs | 34 -
.../Structure/IO/GraphSON/LambdaSerializer.cs | 43 -
.../Structure/IO/GraphSON/ListSerializer.cs | 54 -
.../Structure/IO/GraphSON/MapSerializer.cs | 64 -
.../Structure/IO/GraphSON/MergeDeserializer.cs | 38 -
.../Structure/IO/GraphSON/NumberConverter.cs | 56 -
.../IO/GraphSON/OffsetDateTimeDeserializer.cs | 37 -
.../IO/GraphSON/OffsetDateTimeSerializer.cs | 37 -
.../Structure/IO/GraphSON/PSerializer.cs | 45 -
.../Structure/IO/GraphSON/Path3Deserializer.cs | 47 -
.../Structure/IO/GraphSON/PathDeserializer.cs | 46 -
.../Structure/IO/GraphSON/PropertyDeserializer.cs | 40 -
.../Structure/IO/GraphSON/PropertySerializer.cs | 67 -
.../IO/GraphSON/RequestMessageSerializer.cs | 43 -
.../Structure/IO/GraphSON/SetSerializer.cs | 47 -
.../Structure/IO/GraphSON/TDeserializer.cs | 38 -
.../Structure/IO/GraphSON/TextPSerializer.cs | 45 -
.../Structure/IO/GraphSON/TraversalSerializer.cs | 38 -
.../IO/GraphSON/TraversalStrategySerializer.cs | 42 -
.../Structure/IO/GraphSON/TraverserReader.cs | 38 -
.../Structure/IO/GraphSON/UuidDeserializer.cs | 39 -
.../Structure/IO/GraphSON/UuidSerializer.cs | 37 -
.../Structure/IO/GraphSON/VertexDeserializer.cs | 50 -
.../IO/GraphSON/VertexPropertyDeserializer.cs | 50 -
.../IO/GraphSON/VertexPropertySerializer.cs | 46 -
.../Structure/IO/GraphSON/VertexSerializer.cs | 41 -
.../Structure/IO/SerializationTokens.cs | 18 +-
gremlin-dotnet/src/Gremlin.Net/Structure/Path.cs | 2 +-
.../src/Gremlin.Net/Structure/Property.cs | 2 +-
gremlin-dotnet/src/Gremlin.Net/Structure/Vertex.cs | 2 +-
.../src/Gremlin.Net/Structure/VertexProperty.cs | 2 +-
gremlin-dotnet/src/index.md | 2 +-
gremlin-dotnet/src/pom.xml | 2 +-
.../CompressionBenchmarks.cs | 126 +-
.../MessageSerializerBenchmarks.cs | 116 +-
.../test/Gremlin.Net.Benchmarks/Program.cs | 2 +-
.../test/Gremlin.Net.Benchmarks/TestMessages.cs | 1487 +-
.../Gremlin.Net.IntegrationTest/ConfigProvider.cs | 2 +-
.../Docs/Dev/Provider/IndexTests.cs | 91 -
.../Docs/Reference/GremlinApplicationsTests.cs | 4 +-
.../Docs/Reference/GremlinVariantsDsl.cs | 2 +-
.../Docs/Reference/GremlinVariantsDslTests.cs | 2 +-
.../Docs/Reference/GremlinVariantsTests.cs | 32 +-
.../Docs/Reference/IntroTests.cs | 2 +-
.../Docs/Upgrade/Release35Tests.cs | 6 +-
.../Driver/AuthIntegrationTests.cs | 102 +
.../Driver/ConnectionPoolTests.cs | 91 -
.../Driver/DriverRemoteConnectionTests.cs | 24 +-
.../Driver/GremlinClientAuthenticationTests.cs | 119 -
.../GremlinClientBehaviorIntegrationTests.cs | 133 -
.../Driver/GremlinClientTests.cs | 176 +-
.../Driver/MessagesTests.cs | 96 +-
.../Driver/MockedLoggerExtensions.cs | 2 +-
.../Driver/PropertyDeserializationTests.cs | 63 +-
.../Gherkin/Attributes/BddAttribute.cs | 2 +-
.../Gherkin/Attributes/GivenAttribute.cs | 2 +-
.../Gherkin/Attributes/ThenAttribute.cs | 2 +-
.../Gherkin/Attributes/WhenAttribute.cs | 2 +-
.../Gherkin/CommonSteps.cs | 187 +-
.../Gherkin/DeepEqualityExtensions.cs | 190 +-
.../Gherkin/GherkinTestRunner.cs | 26 +-
.../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 1340 +-
.../Gherkin/IgnoreException.cs | 9 +-
.../Gherkin/ScenarioData.cs | 125 +-
.../Gherkin/StepDefinition.cs | 2 +-
.../Process/Remote/RemoteStrategyTests.cs | 48 +-
.../BytecodeGeneration/BytecodeGenerationTests.cs | 116 -
.../BytecodeGeneration/StrategiesTests.cs | 162 -
.../Traversal/DriverRemoteConnection/EnumTests.cs | 2 +-
.../GraphTraversalSourceTests.cs | 12 +-
.../DriverRemoteConnection/GraphTraversalTests.cs | 94 +-
.../GraphTraversalTransactionTests.cs | 8 +-
.../DriverRemoteConnection/PredicateTests.cs | 2 +-
.../RemoteConnectionFactory.cs | 9 +-
.../DriverRemoteConnection/StrategiesTests.cs | 2 +-
.../Process/Traversal/GraphSONWriterTests.cs | 64 -
.../GremlinLangGenerationTests.cs | 94 +
.../GremlinLangGeneration/StrategiesTests.cs | 121 +
.../Util/RequestMessageProvider.cs | 25 +-
.../Util/SocketServerSettings.cs | 2 +-
.../ServiceTests.cs | 2 +-
.../test/Gremlin.Net.UnitTest/Driver/AuthTests.cs | 245 +
.../Driver/ConnectionPoolSettingsTests.cs | 70 -
.../Driver/ConnectionPoolTests.cs | 394 -
.../Gremlin.Net.UnitTest/Driver/ConnectionTests.cs | 1265 +-
.../Driver/CopyOnWriteCollectionTests.cs | 2 +-
.../Driver/DriverRemoteConnectionTests.cs | 174 +-
.../Driver/GraphSONMessageSerializerTests.cs | 75 -
.../Driver/GremlinClientTests.cs | 60 +-
.../Driver/GremlinServerTests.cs | 26 +-
.../Driver/HttpRequestContextTests.cs | 131 +
.../Driver/Messages/RequestMessageTests.cs | 119 +
.../Driver/RequestMessageBuilderTests.cs | 11 +-
.../Gremlin.Net.UnitTest/Driver/ResultSetTests.cs | 328 +
.../Process/Remote/RemoteTransactionTests.cs | 19 +-
.../Process/Traversal/BytecodeTests.cs | 190 -
.../Process/Traversal/CardinalityValueTests.cs | 2 +-
.../Process/Traversal/GraphTraversalSourceTests.cs | 32 +-
.../Process/Traversal/GremlinLangTests.cs | 1092 +
.../Process/Traversal/PredicateTests.cs | 2 +-
.../Process/Traversal/Strategy/StrategyTests.cs | 2 +-
.../Process/Traversal/TestTraversal.cs | 27 +-
.../Process/Traversal/TestTraversalStrategy.cs | 6 +-
.../Traversal/Translator/GroovyTranslatorTests.cs | 506 -
.../Process/Traversal/TraversalTests.cs | 186 +-
.../Process/Traversal/TraverserTests.cs | 2 +-
.../Gremlin.Net.UnitTest/Structure/EdgeTests.cs | 2 +-
.../GraphBinaryMessageSerializerTests.cs | 98 -
.../Structure/IO/GraphBinary/GraphBinaryTests.cs | 918 -
.../IO/GraphBinary/Types/Sample/SamplePerson.cs | 59 -
.../Types/Sample/SamplePersonSerializer.cs | 160 -
.../Types/Sample/SamplePersonSerializerTests.cs | 128 -
.../GraphBinary4MessageSerializerTests.cs | 89 +
.../Structure/IO/GraphBinary4/GraphBinary4Tests.cs | 794 +
.../Structure/IO/GraphBinary4/Model.cs | 210 +
.../GraphBinary4/RequestMessageSerializerTests.cs | 93 +
.../IO/GraphBinary4/ResponseSerializerTests.cs | 258 +
.../Structure/IO/GraphBinary4/RoundTripTests.cs | 364 +
.../IO/GraphBinary4/StreamExtensionsTests.cs | 382 +
.../StreamingDeserializerRoundTripTests.cs | 669 +
.../IO/GraphSON/BytecodeGraphSONSerializerTests.cs | 169 -
.../IO/GraphSON/GraphSON3MessageSerializerTests.cs | 58 -
.../Structure/IO/GraphSON/GraphSONReaderTests.cs | 677 -
.../Structure/IO/GraphSON/GraphSONWriterTests.cs | 619 -
.../Structure/IO/GraphSON/TestClass.cs | 30 -
.../Structure/IO/GraphSON/TestUtils.cs | 36 -
.../Gremlin.Net.UnitTest/Structure/PathTests.cs | 2 +-
.../Structure/PropertyTests.cs | 2 +-
.../Structure/VertexPropertyTests.cs | 2 +-
.../Gremlin.Net.UnitTest/Structure/VertexTests.cs | 2 +-
gremlin-dotnet/test/pom.xml | 57 +-
gremlin-driver/pom.xml | 41 +-
.../src/main/java/examples/BasicGremlin.java | 30 +-
.../src/main/java/examples/Connections.java | 31 +-
.../src/main/java/examples/ModernTraversals.java | 27 +-
.../tinkerpop/gremlin/driver/AuthProperties.java | 70 -
.../tinkerpop/gremlin/driver/Channelizer.java | 258 +-
.../apache/tinkerpop/gremlin/driver/Client.java | 565 +-
.../apache/tinkerpop/gremlin/driver/Cluster.java | 547 +-
.../tinkerpop/gremlin/driver/Connection.java | 172 +-
.../gremlin/driver/ConnectionFactory.java | 8 +-
.../tinkerpop/gremlin/driver/ConnectionPool.java | 289 +-
.../apache/tinkerpop/gremlin/driver/Handler.java | 282 -
.../gremlin/driver/HandshakeInterceptor.java | 38 -
.../org/apache/tinkerpop/gremlin/driver/Host.java | 25 +-
.../tinkerpop/gremlin/driver/HttpRequest.java | 136 +
.../gremlin/driver/LoadBalancingStrategy.java | 2 +-
.../gremlin/driver/RemoteTransaction.java | 36 +
.../gremlin/driver/RequestInterceptor.java | 17 +-
.../tinkerpop/gremlin/driver/RequestOptions.java | 169 +-
.../tinkerpop/gremlin/driver/RequestSubmitter.java | 61 +
.../gremlin/driver/RequestSubmitterAsync.java | 67 +
.../apache/tinkerpop/gremlin/driver/Result.java | 4 +-
.../tinkerpop/gremlin/driver/ResultQueue.java | 163 -
.../apache/tinkerpop/gremlin/driver/ResultSet.java | 141 +-
.../apache/tinkerpop/gremlin/driver/Settings.java | 187 +-
.../apache/tinkerpop/gremlin/driver/UserAgent.java | 2 +-
.../apache/tinkerpop/gremlin/driver/auth/Auth.java | 56 +
.../tinkerpop/gremlin/driver/auth/Basic.java | 44 +
.../tinkerpop/gremlin/driver/auth/Sigv4.java | 209 +
.../driver/exception/ConnectionException.java | 2 +-
.../driver/exception/NoHostAvailableException.java | 2 +-
.../driver/exception/ResponseException.java | 56 +-
.../driver/handler/GremlinResponseHandler.java | 141 +
.../handler/HttpContentDecompressionHandler.java | 103 +
.../driver/handler/HttpGremlinRequestEncoder.java | 117 +-
.../driver/handler/HttpGremlinResponseDecoder.java | 70 +-
.../handler/HttpGremlinResponseStreamDecoder.java | 119 +
.../handler/HttpStreamingResponseHandler.java | 242 +
.../driver/handler/IdleConnectionHandler.java | 49 +
.../driver/handler/InactiveChannelHandler.java | 55 +
.../driver/handler/WebSocketClientHandler.java | 161 -
.../handler/WebSocketGremlinRequestEncoder.java | 65 -
.../handler/WebSocketGremlinResponseDecoder.java | 56 -
.../interceptor/PayloadSerializingInterceptor.java | 73 +
.../driver/remote/DriverRemoteConnection.java | 41 +-
.../driver/remote/DriverRemoteTransaction.java | 174 -
.../driver/remote/DriverRemoteTraversal.java | 8 +-
.../driver/remote/HttpRemoteTransaction.java | 320 +
.../driver/remote/TransactionRemoteConnection.java | 112 +
.../gremlin/driver/simple/AbstractClient.java | 34 +-
.../gremlin/driver/simple/SimpleClient.java | 9 +-
.../gremlin/driver/simple/SimpleHttpClient.java | 165 +
.../gremlin/driver/simple/WebSocketClient.java | 140 -
.../driver/stream/ByteBufQueueInputStream.java | 137 +
.../stream/GraphBinaryStreamResponseReader.java | 105 +
.../gremlin/driver/stream/InputStreamBuffer.java | 311 +
.../driver/util/ConfigurationEvaluator.java | 57 +-
.../gremlin/driver/util/ProfilingApplication.java | 25 +-
gremlin-driver/src/main/static/LICENSE | 7 +-
gremlin-driver/src/main/static/NOTICE | 23 +-
.../src/main/static/licenses/reactive-streams | 18 +
.../gremlin/driver/AbstractResultQueueTest.java | 108 -
.../gremlin/driver/AbstractResultSetTest.java | 103 +
.../gremlin/driver/ClusterBuilderTest.java | 22 +-
.../gremlin/driver/ClusterConfigTest.java | 34 +-
.../tinkerpop/gremlin/driver/ClusterTest.java | 143 +
.../gremlin/driver/ConnectionPoolTest.java | 99 +
.../apache/tinkerpop/gremlin/driver/HostTest.java | 6 +-
.../tinkerpop/gremlin/driver/MockClientTest.java | 2 +-
.../gremlin/driver/RequestMessageTest.java | 69 -
.../tinkerpop/gremlin/driver/ResultQueueTest.java | 297 -
.../gremlin/driver/ResultSetQueuingTest.java | 291 +
.../tinkerpop/gremlin/driver/ResultSetTest.java | 75 +-
.../tinkerpop/gremlin/driver/ResultTest.java | 2 +-
.../gremlin/driver/SerializationExceptionTest.java | 2 +-
.../tinkerpop/gremlin/driver/SettingsTest.java | 34 +-
.../tinkerpop/gremlin/driver/TokensTest.java | 2 +-
.../WebSocketClientBehaviorIntegrateTest.java | 601 -
.../tinkerpop/gremlin/driver/auth/Sigv4Test.java | 127 +
.../handler/ByteBufQueueInputStreamTest.java | 95 +
.../GraphBinaryStreamResponseReaderTest.java | 226 +
.../HttpContentDecompressionHandlerTest.java | 222 +
.../HttpGremlinResponseStreamDecoderTest.java | 137 +
.../handler/HttpStreamingResponseHandlerTest.java | 207 +
.../driver/handler/IdleConnectionHandlerTest.java | 57 +
.../driver/handler/InputStreamBufferTest.java | 94 +
.../driver/remote/DriverRemoteConnectionTest.java | 12 +-
.../tinkerpop/gremlin/util/PerformanceTest.java | 252 -
gremlin-examples/README.md | 30 +
.../gremlin-dotnet/BasicGremlin/BasicGremlin.cs | 58 +
.../BasicGremlin/BasicGremlin.csproj | 30 +
.../gremlin-dotnet/Connections/Connections.cs | 75 +
.../gremlin-dotnet/Connections/Connections.csproj | 30 +
.../gremlin-dotnet}/Examples.sln | 0
.../ModernTraversals/ModernTraversals.cs | 74 +
.../ModernTraversals/ModernTraversals.csproj | 30 +
gremlin-examples/gremlin-go/basic_gremlin.go | 72 +
gremlin-examples/gremlin-go/connections.go | 80 +
gremlin-examples/gremlin-go/go.mod | 29 +
gremlin-examples/gremlin-go/go.sum | 22 +
gremlin-examples/gremlin-go/modern_traversals.go | 78 +
gremlin-examples/gremlin-java/BasicGremlin.java | 64 +
gremlin-examples/gremlin-java/Connections.java | 118 +
.../gremlin-java/ModernTraversals.java | 78 +
gremlin-examples/gremlin-java/pom.xml | 91 +
.../gremlin-javascript}/.gitignore | 0
.../gremlin-javascript/basic-gremlin.js | 54 +
gremlin-examples/gremlin-javascript/connections.js | 65 +
.../gremlin-javascript/modern-traversals.js | 71 +
.../gremlin-javascript/package-lock.json | 220 +
gremlin-examples/gremlin-javascript/package.json | 14 +
gremlin-examples/gremlin-python/basic_gremlin.py | 56 +
gremlin-examples/gremlin-python/connections.py | 103 +
.../gremlin-python/modern_traversals.py | 69 +
gremlin-examples/gremlin-python/requirements.txt | 18 +
gremlin-go/NOTICE | 2 +-
gremlin-go/README.md | 8 +-
gremlin-go/build/generate.groovy | 87 +-
gremlin-go/design.md | 123 +-
gremlin-go/docker-compose.yml | 31 +-
gremlin-go/driver/README.md | 22 +-
gremlin-go/driver/anonymousTraversal.go | 38 +-
gremlin-go/driver/auth.go | 119 +
gremlin-go/driver/authInfo.go | 95 -
gremlin-go/driver/auth_test.go | 114 +
gremlin-go/driver/bytecode.go | 182 -
gremlin-go/driver/bytecode_test.go | 159 -
gremlin-go/driver/client.go | 189 +-
gremlin-go/driver/client_test.go | 320 +-
gremlin-go/driver/connection.go | 401 +-
gremlin-go/driver/connectionPool.go | 175 -
gremlin-go/driver/connectionPool_test.go | 134 -
gremlin-go/driver/connection_test.go | 1376 +-
gremlin-go/driver/cucumber/cucumberSteps_test.go | 517 +-
gremlin-go/driver/cucumber/cucumberWorld.go | 72 +-
gremlin-go/driver/cucumber/gremlin.go | 1024 +-
gremlin-go/driver/driverRemoteConnection.go | 185 +-
gremlin-go/driver/driverRemoteConnection_test.go | 24 +-
gremlin-go/driver/error_codes.go | 29 +-
gremlin-go/driver/gValue.go | 55 +
gremlin-go/driver/gValue_test.go | 87 +
gremlin-go/driver/gorillaTransporter.go | 207 -
gremlin-go/driver/gorillaTransporter_test.go | 163 -
gremlin-go/driver/graph.go | 2 +-
gremlin-go/driver/graphBinary.go | 1454 -
gremlin-go/driver/graphBinaryDeserializer.go | 645 +
gremlin-go/driver/graphBinaryDeserializer_test.go | 506 +
gremlin-go/driver/graphBinarySerializer.go | 579 +
gremlin-go/driver/graphBinarySerializer_test.go | 537 +
gremlin-go/driver/graphBinary_test.go | 359 -
gremlin-go/driver/graphTraversal.go | 392 +-
gremlin-go/driver/graphTraversalSource.go | 85 +-
gremlin-go/driver/graphTraversalSource_test.go | 32 +-
gremlin-go/driver/graph_test.go | 2 +-
gremlin-go/driver/gremlinlang.go | 638 +
gremlin-go/driver/gremlinlang_test.go | 860 +
gremlin-go/driver/interceptor.go | 113 +
gremlin-go/driver/interceptor_test.go | 450 +
gremlin-go/driver/logger.go | 23 +-
gremlin-go/driver/marker.go | 46 +
gremlin-go/driver/performance/performanceSuite.go | 13 +-
gremlin-go/driver/protocol.go | 199 -
gremlin-go/driver/protocol_test.go | 91 -
gremlin-go/driver/request.go | 209 +-
gremlin-go/driver/requestOptions.go | 47 +-
gremlin-go/driver/requestOptions_test.go | 45 +-
gremlin-go/driver/request_test.go | 71 +-
gremlin-go/driver/resources/error-messages/en.json | 9 +-
.../driver/resources/logger-messages/en.json | 19 +-
gremlin-go/driver/resources/resources.go | 2 +-
gremlin-go/driver/response.go | 30 +-
gremlin-go/driver/result.go | 12 +-
gremlin-go/driver/resultSet.go | 119 +-
gremlin-go/driver/resultSet_test.go | 46 +-
gremlin-go/driver/result_test.go | 27 +-
gremlin-go/driver/serializer.go | 365 +-
gremlin-go/driver/serializer_test.go | 158 +-
gremlin-go/driver/strategies.go | 131 +-
gremlin-go/driver/strategies_test.go | 101 +-
gremlin-go/driver/translator.go | 365 -
gremlin-go/driver/translator_test.go | 723 -
gremlin-go/driver/transporter.go | 40 -
gremlin-go/driver/transporterFactory.go | 53 -
gremlin-go/driver/traversal.go | 317 +-
gremlin-go/driver/traversal_test.go | 967 +-
gremlin-go/driver/user_agent.go | 6 +-
gremlin-go/examples/basic_gremlin.go | 31 +-
gremlin-go/examples/connections.go | 47 +-
gremlin-go/examples/go.mod | 17 +-
gremlin-go/examples/go.sum | 62 +-
gremlin-go/examples/modern_traversals.go | 28 +-
gremlin-go/go.mod | 40 +-
gremlin-go/go.sum | 65 +-
gremlin-go/pom.xml | 57 +-
gremlin-go/run.sh | 4 +-
gremlin-groovy/pom.xml | 24 +-
.../ast/AmbiguousMethodASTTransformation.groovy | 2 +-
.../groovy/jsr223/ast/GremlinASTChecker.groovy | 2 +-
.../groovy/jsr223/ast/InterpreterMode.groovy | 2 +-
.../ast/InterpreterModeASTTransformation.groovy | 2 +-
.../ast/RepeatASTTransformationCustomizer.groovy | 4 +-
.../ast/VarAsBindingASTTransformation.groovy | 160 -
.../customizer/AbstractSandboxExtension.groovy | 2 +-
.../jsr223/customizer/FileSandboxExtension.groovy | 2 +-
.../customizer/PropertyExpressionEvaluator.groovy | 2 +-
.../groovy/jsr223/customizer/SandboxHelper.groovy | 2 +-
.../customizer/SimpleSandboxExtension.groovy | 2 +-
.../customizer/TinkerPopSandboxExtension.groovy | 2 +-
.../gremlin/groovy/loaders/GremlinLoader.groovy | 2 +-
.../gremlin/groovy/loaders/ObjectLoader.groovy | 2 +-
.../gremlin/groovy/loaders/StepLoader.groovy | 2 +-
.../gremlin/groovy/loaders/StrategyLoader.groovy | 2 +-
.../gremlin/groovy/loaders/SugarLoader.groovy | 2 +-
.../gremlin/groovy/util/DependencyGrabber.groovy | 4 +-
.../gremlin/groovy/util/MetaRegistryUtil.groovy | 2 +-
.../gremlin/groovy/engine/GremlinExecutor.java | 78 +-
.../jsr223/CompilationOptionsCustomizer.java | 2 +-
.../jsr223/CompileStaticGroovyCustomizer.java | 2 +-
.../jsr223/ConfigurationGroovyCustomizer.java | 2 +-
.../groovy/jsr223/GremlinGroovyClassLoader.java | 2 +-
.../groovy/jsr223/GremlinGroovyScriptEngine.java | 46 +-
.../jsr223/GremlinGroovyScriptEngineFactory.java | 2 +-
.../groovy/jsr223/GroovyCompilerGremlinPlugin.java | 2 +-
.../gremlin/groovy/jsr223/GroovyCustomizer.java | 2 +-
.../groovy/jsr223/ImportGroovyCustomizer.java | 2 +-
.../jsr223/InterpreterModeGroovyCustomizer.java | 2 +-
.../groovy/jsr223/ManagedConcurrentValueMap.java | 2 +-
.../gremlin/groovy/jsr223/SugarGremlinPlugin.java | 2 +-
.../jsr223/ThreadInterruptGroovyCustomizer.java | 2 +-
.../jsr223/TimedInterruptGroovyCustomizer.java | 2 +-
.../jsr223/TimedInterruptTimeoutException.java | 2 +-
.../groovy/jsr223/TypeCheckedGroovyCustomizer.java | 2 +-
.../credential/CredentialGraphGremlinPlugin.java | 2 +-
.../dsl/credential/CredentialGraphTokens.java | 2 +-
.../dsl/credential/CredentialTraversalDsl.java | 2 +-
.../credential/CredentialTraversalSourceDsl.java | 2 +-
.../tinkerpop/gremlin/groovy/util/Artifact.java | 2 +-
.../gremlin/groovy/loaders/SugarLoaderTest.groovy | 2 +-
.../gremlin/groovy/util/SugarTestHelper.groovy | 2 +-
.../engine/GremlinExecutorOverGraphTest.java | 2 +-
.../gremlin/groovy/engine/GremlinExecutorTest.java | 2 +-
.../groovy/jsr223/BaseScriptForTesting.java | 2 +-
.../ConfigurationCustomizerProviderTest.java | 2 +-
...inGroovyScriptEngineCompilationOptionsTest.java | 2 +-
...GremlinGroovyScriptEngineCompileStaticTest.java | 2 +-
.../GremlinGroovyScriptEngineConfigTest.java | 2 +-
.../GremlinGroovyScriptEngineFileSandboxTest.java | 2 +-
.../GremlinGroovyScriptEngineIntegrateTest.java | 2 +-
.../GremlinGroovyScriptEngineOverGraphTest.java | 2 +-
...linGroovyScriptEngineSandboxedStandardTest.java | 2 +-
.../jsr223/GremlinGroovyScriptEngineTest.java | 191 +-
...emlinGroovyScriptEngineThreadInterruptTest.java | 2 +-
...remlinGroovyScriptEngineTimedInterruptTest.java | 2 +-
...mlinGroovyScriptEngineTinkerPopSandboxTest.java | 2 +-
.../GremlinGroovyScriptEngineTypeCheckedTest.java | 2 +-
.../jsr223/GroovyCompilerGremlinPluginTest.java | 2 +-
.../groovy/jsr223/GroovyScriptEngineSetup.java | 2 +-
.../jsr223/GroovyTranslatorComputerProvider.java | 40 -
.../GroovyTranslatorProcessComputerTest.java | 32 -
.../GroovyTranslatorProcessStandardTest.java | 32 -
.../groovy/jsr223/GroovyTranslatorProvider.java | 108 -
...ameterizedGroovyTranslatorComputerProvider.java | 40 -
...terizedGroovyTranslatorProcessComputerTest.java | 32 -
...terizedGroovyTranslatorProcessStandardTest.java | 32 -
.../ParameterizedGroovyTranslatorProvider.java | 108 -
.../groovy/jsr223/PrecompiledExtensions.java | 2 +-
.../groovy/jsr223/ast/GremlinASTCheckerTest.java | 2 +-
.../dsl/credential/CredentialTraversalDslTest.java | 2 +-
.../gremlin/groovy/util/ArtifactTest.java | 2 +-
.../util/DependencyGrabberIntegrateTest.java | 2 +-
.../GremlinGroovyScriptEngineIntegrateTest.java | 2 +-
.../jsr223/GroovyGremlinScriptEngineTest.java | 2 +-
.../gremlin/util/TinkerGraphProvider.java | 206 -
.../groovy/engine/GremlinExecutorInit.groovy | 2 +-
gremlin-javascript/build/generate.groovy | 130 -
gremlin-javascript/examples/browser/index.css | 30 -
gremlin-javascript/examples/browser/index.html | 32 -
gremlin-javascript/examples/browser/index.js | 92 -
gremlin-javascript/examples/browser/utils.js | 74 -
gremlin-javascript/examples/browser/yarn.lock | 1498 -
gremlin-javascript/examples/node/basic-gremlin.js | 51 -
gremlin-javascript/examples/node/connections.js | 65 -
.../examples/node/modern-traversals.js | 69 -
gremlin-javascript/examples/node/package-lock.json | 47 -
gremlin-javascript/examples/node/package.json | 14 -
gremlin-javascript/pom.xml | 364 -
.../javascript/gremlin-javascript/.eslintrc.js | 154 -
.../main/javascript/gremlin-javascript/.gitignore | 7 -
.../main/javascript/gremlin-javascript/.npmignore | 26 -
.../javascript/gremlin-javascript/.prettierrc.js | 29 -
.../javascript/gremlin-javascript/Gruntfile.js | 35 -
.../src/main/javascript/gremlin-javascript/NOTICE | 5 -
.../main/javascript/gremlin-javascript/README.md | 149 -
.../gremlin-javascript/docker-compose.yml | 65 -
.../main/javascript/gremlin-javascript/index.js | 96 -
.../lib/driver/auth/authenticator.js | 38 -
.../driver/auth/mechanisms/sasl-mechanism-base.js | 52 -
.../driver/auth/mechanisms/sasl-mechanism-plain.js | 106 -
.../driver/auth/plain-text-sasl-authenticator.js | 55 -
.../lib/driver/auth/sasl-authenticator.js | 49 -
.../gremlin-javascript/lib/driver/client.js | 199 -
.../gremlin-javascript/lib/driver/connection.js | 452 -
.../lib/driver/driver-remote-connection.js | 142 -
.../lib/driver/remote-connection.js | 147 -
.../lib/driver/response-error.js | 47 -
.../gremlin-javascript/lib/driver/result-set.js | 83 -
.../lib/process/anonymous-traversal.js | 87 -
.../gremlin-javascript/lib/process/bytecode.js | 124 -
.../lib/process/graph-traversal.js | 1857 -
.../gremlin-javascript/lib/process/transaction.js | 100 -
.../gremlin-javascript/lib/process/translator.js | 121 -
.../lib/process/traversal-strategy.js | 415 -
.../gremlin-javascript/lib/process/traversal.js | 524 -
.../gremlin-javascript/lib/structure/graph.js | 190 -
.../lib/structure/io/binary/GraphBinary.js | 110 -
.../structure/io/binary/internals/AnySerializer.js | 100 -
.../io/binary/internals/ArraySerializer.js | 137 -
.../io/binary/internals/BigIntegerSerializer.js | 153 -
.../io/binary/internals/BooleanSerializer.js | 105 -
.../io/binary/internals/BulkSetSerializer.js | 126 -
.../io/binary/internals/ByteBufferSerializer.js | 126 -
.../io/binary/internals/ByteSerializer.js | 97 -
.../io/binary/internals/BytecodeSerializer.js | 250 -
.../io/binary/internals/ClassSerializer.js | 60 -
.../lib/structure/io/binary/internals/DataType.js | 99 -
.../io/binary/internals/DateSerializer.js | 105 -
.../io/binary/internals/DoubleSerializer.js | 101 -
.../io/binary/internals/EdgeSerializer.js | 216 -
.../io/binary/internals/EnumSerializer.js | 151 -
.../io/binary/internals/FloatSerializer.js | 101 -
.../io/binary/internals/GraphBinaryReader.js | 82 -
.../io/binary/internals/GraphBinaryWriter.js | 85 -
.../structure/io/binary/internals/IntSerializer.js | 114 -
.../io/binary/internals/LambdaSerializer.js | 71 -
.../io/binary/internals/LongSerializer.js | 109 -
.../io/binary/internals/LongSerializerNg.js | 104 -
.../structure/io/binary/internals/MapSerializer.js | 155 -
.../internals/NumberSerializationStrategy.js | 68 -
.../binary/internals/OffsetDateTimeSerializer.js | 151 -
.../structure/io/binary/internals/PSerializer.js | 152 -
.../io/binary/internals/PathSerializer.js | 124 -
.../io/binary/internals/PropertySerializer.js | 142 -
.../structure/io/binary/internals/SetSerializer.js | 134 -
.../io/binary/internals/ShortSerializer.js | 101 -
.../io/binary/internals/StringSerializer.js | 116 -
.../io/binary/internals/TextPSerializer.js | 146 -
.../internals/TraversalStrategySerializer.js | 69 -
.../io/binary/internals/TraverserSerializer.js | 124 -
.../binary/internals/UnspecifiedNullSerializer.js | 77 -
.../io/binary/internals/UuidSerializer.js | 121 -
.../binary/internals/VertexPropertySerializer.js | 176 -
.../io/binary/internals/VertexSerializer.js | 139 -
.../lib/structure/io/binary/internals/utils.js | 61 -
.../lib/structure/io/graph-serializer.js | 303 -
.../lib/structure/io/type-serializers.js | 547 -
.../javascript/gremlin-javascript/lib/utils.js | 130 -
.../javascript/gremlin-javascript/licenses/chai | 21 -
.../gremlin-javascript/package-lock.json | 7109 -
.../javascript/gremlin-javascript/package.json | 64 -
.../test/cucumber/element-comparison.js | 123 -
.../test/cucumber/feature-steps.js | 480 -
.../gremlin-javascript/test/cucumber/gremlin.js | 1688 -
.../gremlin-javascript/test/cucumber/world.js | 176 -
.../javascript/gremlin-javascript/test/helper.js | 126 -
.../test/integration/client-behavior-tests.js | 105 -
.../test/integration/client-tests.js | 317 -
.../test/integration/remote-connection-tests.js | 64 -
.../test/integration/sasl-authentication-tests.js | 119 -
.../test/integration/session-client-tests.js | 79 -
.../test/integration/socket-connection-tests.js | 118 -
.../test/integration/traversal-test.js | 380 -
.../gremlin-javascript/test/unit/bytecode-test.js | 59 -
.../gremlin-javascript/test/unit/client-test.js | 85 -
.../test/unit/element-comparison-test.js | 299 -
.../gremlin-javascript/test/unit/exports-test.js | 89 -
.../test/unit/graphbinary/AnySerializer-test.js | 619 -
.../graphbinary/ArraySerializerTestTemplate.js | 151 -
.../unit/graphbinary/BigIntegerSerializer-test.js | 200 -
.../unit/graphbinary/BooleanSerializer-test.js | 141 -
.../unit/graphbinary/BulkSetSerializer-test.js | 158 -
.../unit/graphbinary/ByteBufferSerializer-test.js | 155 -
.../test/unit/graphbinary/ByteSerializer-test.js | 118 -
.../unit/graphbinary/BytecodeSerializer-test.js | 213 -
.../test/unit/graphbinary/ClassSerializer-test.js | 89 -
.../test/unit/graphbinary/DateSerializer-test.js | 25 -
.../unit/graphbinary/DateSerializerTestTemplate.js | 149 -
.../test/unit/graphbinary/DoubleSerializer-test.js | 152 -
.../test/unit/graphbinary/EdgeSerializer-test.js | 170 -
.../test/unit/graphbinary/EnumSerializer-test.js | 172 -
.../test/unit/graphbinary/FloatSerializer-test.js | 123 -
.../unit/graphbinary/GraphBinaryReader-test.js | 129 -
.../unit/graphbinary/GraphBinaryWriter-test.js | 86 -
.../test/unit/graphbinary/IntSerializer-test.js | 148 -
.../test/unit/graphbinary/LambdaSerializer-test.js | 95 -
.../test/unit/graphbinary/ListSerializer-test.js | 25 -
.../test/unit/graphbinary/LongSerializer-test.js | 145 -
.../test/unit/graphbinary/LongSerializerNg-test.js | 133 -
.../test/unit/graphbinary/MapSerializer-test.js | 215 -
.../test/unit/graphbinary/PSerializer-test.js | 197 -
.../test/unit/graphbinary/PathSerializer-test.js | 152 -
.../unit/graphbinary/PropertySerializer-test.js | 141 -
.../test/unit/graphbinary/SetSerializer-test.js | 25 -
.../unit/graphbinary/SetSerializerTestTemplate.js | 149 -
.../test/unit/graphbinary/ShortSerializer-test.js | 122 -
.../test/unit/graphbinary/StringSerializer-test.js | 25 -
.../graphbinary/StringSerializerTestTemplate.js | 169 -
.../test/unit/graphbinary/TextPSerializer-test.js | 143 -
.../unit/graphbinary/TimestampSerializer-test.js | 25 -
.../TraversalStrategySerializer-test.js | 100 -
.../unit/graphbinary/TraverserSerializer-test.js | 132 -
.../graphbinary/UnspecifiedNullSerializer-test.js | 102 -
.../test/unit/graphbinary/UuidSerializer-test.js | 148 -
.../graphbinary/VertexPropertySerializer-test.js | 143 -
.../test/unit/graphbinary/VertexSerializer-test.js | 149 -
.../test/unit/graphbinary/utils.js | 40 -
.../gremlin-javascript/test/unit/graphson-test.js | 271 -
.../test/unit/result-set-test.js | 94 -
.../test/unit/structure-types-test.js | 87 -
.../test/unit/translator-test.js | 145 -
.../test/unit/traversal-strategy-test.js | 51 -
.../gremlin-javascript/test/unit/traversal-test.js | 329 -
gremlin-js/gremlin-javascript/.gitignore | 9 +
gremlin-js/gremlin-javascript/.mocharc.json | 5 +
gremlin-js/gremlin-javascript/.npmignore | 26 +
.../gremlin-javascript/.nvmrc | 0
gremlin-js/gremlin-javascript/.prettierrc.cjs | 31 +
.../gremlin-javascript/LICENSE | 0
gremlin-js/gremlin-javascript/NOTICE | 5 +
gremlin-js/gremlin-javascript/README.md | 163 +
gremlin-js/gremlin-javascript/docker-compose.yml | 75 +
gremlin-js/gremlin-javascript/eslint.config.mjs | 159 +
.../examples/browser/.gitignore | 0
.../examples/browser/.yarnrc.yml | 0
.../gremlin-javascript/examples/browser/index.css | 30 +
.../gremlin-javascript/examples/browser/index.html | 32 +
.../gremlin-javascript/examples/browser/index.ts | 96 +
.../examples/browser/package.json | 0
.../gremlin-javascript/examples/browser/utils.ts | 74 +
.../gremlin-javascript/examples/browser/yarn.lock | 1498 +
.../gremlin-javascript}/examples/node/.gitignore | 0
.../examples/node/basic-gremlin.js | 55 +
.../examples/node/connections.js | 61 +
.../examples/node/modern-traversals.js | 74 +
.../examples/node/package-lock.json | 50 +
.../gremlin-javascript/examples/node/package.json | 14 +
gremlin-js/gremlin-javascript/lib/driver/auth.ts | 81 +
gremlin-js/gremlin-javascript/lib/driver/client.ts | 154 +
.../gremlin-javascript/lib/driver/connection.ts | 325 +
.../lib/driver/driver-remote-connection.ts | 127 +
.../lib/driver/remote-connection.ts | 116 +
.../lib/driver/request-message.ts | 224 +
.../lib/driver/response-error.ts | 55 +
.../gremlin-javascript/lib/driver/result-set.ts | 86 +
gremlin-js/gremlin-javascript/lib/index.ts | 104 +
.../gremlin-javascript/lib/language/index.ts | 31 +
.../gremlin-javascript/lib/language/package.json | 1 +
.../translator/AnonymizedTranslateVisitor.ts | 172 +
.../language/translator/DotNetTranslateVisitor.ts | 919 +
.../lib/language/translator/GoTranslateVisitor.ts | 426 +
.../lib/language/translator/GremlinTranslator.ts | 110 +
.../language/translator/GroovyTranslateVisitor.ts | 321 +
.../language/translator/JavaTranslateVisitor.ts | 287 +
.../translator/JavascriptTranslateVisitor.ts | 246 +
.../language/translator/PythonTranslateVisitor.ts | 354 +
.../lib/language/translator/TranslateVisitor.ts | 452 +
.../lib/language/translator/Translation.ts | 45 +
.../lib/language/translator/Translator.ts | 46 +
.../lib/language/translator/TranslatorException.ts | 28 +
.../lib/process/anonymous-traversal.ts | 81 +
.../lib/process/graph-traversal.ts | 1907 +
.../gremlin-javascript/lib/process/gremlin-lang.ts | 233 +
.../gremlin-javascript/lib/process/transaction.ts | 74 +
.../lib/process/traversal-strategy.ts | 368 +
.../gremlin-javascript/lib/process/traversal.ts | 592 +
.../gremlin-javascript/lib/structure/graph.ts | 195 +
.../lib/structure/io/binary/GraphBinary.js | 180 +
.../structure/io/binary/internals/AnySerializer.js | 101 +
.../io/binary/internals/ArraySerializer.js | 120 +
.../io/binary/internals/BigIntegerSerializer.js | 129 +
.../io/binary/internals/BinarySerializer.js | 102 +
.../io/binary/internals/BooleanSerializer.js | 86 +
.../io/binary/internals/ByteSerializer.js | 79 +
.../lib/structure/io/binary/internals/DataType.js | 67 +
.../io/binary/internals/DateTimeSerializer.js | 137 +
.../io/binary/internals/DoubleSerializer.js | 83 +
.../io/binary/internals/EdgeSerializer.js | 155 +
.../io/binary/internals/EnumSerializer.js | 128 +
.../io/binary/internals/FloatSerializer.js | 83 +
.../io/binary/internals/GraphBinaryReader.js | 187 +
.../io/binary/internals/GraphBinaryWriter.js | 91 +
.../structure/io/binary/internals/IntSerializer.js | 106 +
.../io/binary/internals/LongSerializer.js | 88 +
.../structure/io/binary/internals/MapSerializer.js | 119 +
.../io/binary/internals/MarkerSerializer.js | 60 +
.../internals/NumberSerializationStrategy.js | 102 +
.../io/binary/internals/PathSerializer.js | 98 +
.../io/binary/internals/PropertySerializer.js | 105 +
.../structure/io/binary/internals/SetSerializer.js | 115 +
.../io/binary/internals/ShortSerializer.js | 83 +
.../structure/io/binary/internals/StreamReader.js | 203 +
.../io/binary/internals/StringSerializer.js | 94 +
.../io/binary/internals/StubSerializer.js | 32 +
.../binary/internals/UnspecifiedNullSerializer.js | 50 +
.../io/binary/internals/UuidSerializer.js | 103 +
.../binary/internals/VertexPropertySerializer.js | 121 +
.../io/binary/internals/VertexSerializer.js | 106 +
.../lib/structure/io/binary/internals/utils.js | 56 +
gremlin-js/gremlin-javascript/lib/utils.ts | 266 +
gremlin-js/gremlin-javascript/package.json | 104 +
gremlin-js/gremlin-javascript/pom.xml | 356 +
.../scripts/groovy/generate.groovy | 140 +
.../gremlin-javascript/scripts/patch-antlr4ng.js | 89 +
.../test/cucumber/element-comparison.js | 117 +
.../test/cucumber/feature-steps.js | 545 +
.../gremlin-javascript/test/cucumber/gremlin.js | 2188 +
.../gremlin-javascript/test/cucumber/world.js | 188 +
gremlin-js/gremlin-javascript/test/helper.js | 66 +
.../test/integration/auth-tests.js | 81 +
.../test/integration/client-tests.js | 211 +
.../test/integration/remote-connection-tests.js | 76 +
.../test/integration/socket-connection-tests.js | 187 +
.../test/integration/traversal-test.js | 436 +
.../gremlin-javascript/test/unit/auth-test.js | 122 +
.../gremlin-javascript/test/unit/client-test.js | 54 +
.../test/unit/element-comparison-test.js | 298 +
.../gremlin-javascript/test/unit/exports-test.js | 94 +
.../unit/graphbinary/GraphBinaryReader-test.js | 533 +
.../unit/graphbinary/GraphBinaryWriter-test.js | 122 +
.../test/unit/graphbinary/StreamReader-test.js | 215 +
.../unit/graphbinary/async-deserialize-test.js | 285 +
.../test/unit/graphbinary/error-cases-test.js | 543 +
.../test/unit/graphbinary/model-test.js | 259 +
.../test/unit/graphbinary/model.js | 204 +
.../test/unit/graphbinary/null-handling-test.js | 232 +
.../test/unit/graphbinary/precise-mode-test.js | 521 +
.../test/unit/graphbinary/type-detection-test.js | 398 +
.../test/unit/graphbinary/typed-number-test.js | 212 +
.../test/unit/gremlin-lang-test.js | 629 +
.../test/unit/result-set-test.js | 93 +
.../test/unit/structure-types-test.js | 127 +
.../test/unit/translator/corpus-test.js | 158 +
.../unit/translator/gremlin-translator-test.js | 678 +
.../test/unit/traversal-strategy-test.js | 49 +
.../gremlin-javascript/test/unit/traversal-test.js | 279 +
gremlin-js/gremlin-javascript/tsconfig.json | 10 +
gremlin-js/gremlin-javascript/tsconfig.test.json | 7 +
gremlin-js/gremlin-mcp/.env.example | 51 +
gremlin-js/gremlin-mcp/.gitignore | 64 +
gremlin-js/gremlin-mcp/.npmignore | 78 +
gremlin-js/gremlin-mcp/.prettierignore | 31 +
gremlin-js/gremlin-mcp/.prettierrc | 13 +
gremlin-js/gremlin-mcp/LICENSE | 201 +
gremlin-js/gremlin-mcp/NOTICE | 5 +
gremlin-js/gremlin-mcp/README.md | 534 +
gremlin-js/gremlin-mcp/eslint.config.js | 46 +
gremlin-js/gremlin-mcp/jest.config.js | 41 +
gremlin-js/gremlin-mcp/package.json | 97 +
gremlin-js/gremlin-mcp/pom.xml | 257 +
.../gremlin-mcp/scripts/generate-step-names.js | 99 +
gremlin-js/gremlin-mcp/src/config.ts | 281 +
gremlin-js/gremlin-mcp/src/connectivity-state.ts | 68 +
gremlin-js/gremlin-mcp/src/constants.ts | 67 +
gremlin-js/gremlin-mcp/src/errors.ts | 154 +
gremlin-js/gremlin-mcp/src/gremlin/client.ts | 40 +
gremlin-js/gremlin-mcp/src/gremlin/connection.ts | 194 +
.../gremlin-mcp/src/gremlin/edge-patterns.ts | 188 +
.../gremlin-mcp/src/gremlin/models/graph-schema.ts | 159 +
gremlin-js/gremlin-mcp/src/gremlin/models/index.ts | 27 +
.../gremlin-mcp/src/gremlin/models/query-result.ts | 143 +
.../gremlin-mcp/src/gremlin/property-analyzer.ts | 208 +
gremlin-js/gremlin-mcp/src/gremlin/query-utils.ts | 232 +
.../gremlin-mcp/src/gremlin/schema-assembly.ts | 284 +
gremlin-js/gremlin-mcp/src/gremlin/schema-cache.ts | 138 +
.../gremlin-mcp/src/gremlin/schema-generator.ts | 192 +
gremlin-js/gremlin-mcp/src/gremlin/schema.ts | 76 +
gremlin-js/gremlin-mcp/src/gremlin/service.ts | 226 +
gremlin-js/gremlin-mcp/src/gremlin/types.ts | 71 +
gremlin-js/gremlin-mcp/src/handlers/resources.ts | 149 +
.../gremlin-mcp/src/handlers/tool-patterns.ts | 109 +
gremlin-js/gremlin-mcp/src/handlers/tools.ts | 416 +
gremlin-js/gremlin-mcp/src/server.ts | 451 +
gremlin-js/gremlin-mcp/src/translator/index.ts | 72 +
gremlin-js/gremlin-mcp/src/translator/llm.ts | 81 +
.../src/translator/normalizers/shared.ts | 69 +
gremlin-js/gremlin-mcp/src/translator/stepNames.ts | 305 +
.../gremlin-mcp/src/utils/result-metadata.ts | 92 +
gremlin-js/gremlin-mcp/src/utils/result-parser.ts | 225 +
gremlin-js/gremlin-mcp/src/utils/type-guards.ts | 63 +
gremlin-js/gremlin-mcp/tests/config.test.ts | 284 +
gremlin-js/gremlin-mcp/tests/edge-patterns.test.ts | 255 +
.../gremlin-mcp/tests/gremlint-format.test.ts | 66 +
.../tests/integration/mcp-integration.test.ts | 278 +
gremlin-js/gremlin-mcp/tests/models.test.ts | 193 +
.../gremlin-mcp/tests/property-analyzer.test.ts | 149 +
gremlin-js/gremlin-mcp/tests/query-utils.test.ts | 121 +
.../tests/resource-read.integration.test.ts | 145 +
gremlin-js/gremlin-mcp/tests/resources.test.ts | 133 +
.../gremlin-mcp/tests/schema-assembly.test.ts | 383 +
gremlin-js/gremlin-mcp/tests/setup.ts | 36 +
gremlin-js/gremlin-mcp/tsconfig.json | 46 +
{gremlint => gremlin-js/gremlint}/.gitignore | 0
{docs => gremlin-js}/gremlint/.prettierrc | 0
{docs => gremlin-js}/gremlint/LICENSE | 0
{gremlint => gremlin-js/gremlint}/NOTICE | 0
gremlin-js/gremlint/README.md | 115 +
gremlin-js/gremlint/eslint.config.js | 34 +
{gremlint => gremlin-js/gremlint}/jestconfig.json | 0
gremlin-js/gremlint/package.json | 54 +
gremlin-js/gremlint/pom.xml | 233 +
.../__tests__/closureIndentation.test.ts | 340 +
.../curlyBracketMultilineWrapping.test.ts | 171 +
.../__tests__/curlyBracketWrapping.test.ts | 111 +
.../formatQuery/__tests__/defaultConfig.test.ts | 78 +
.../determineWhatPartsOfCodeAreGremlin.test.ts | 124 +
.../__tests__/dotsAfterLineBreaks.test.ts | 59 +
.../invalidIndentationAndMaxLineLength.test.ts | 30 +
.../src/formatQuery/__tests__/layoutUtils.test.ts | 68 +
.../formatQuery/__tests__/maxLineLength.test.ts | 70 +
.../__tests__/modulatorIndentation.test.ts | 867 +
.../__tests__/modulatorWrapping.test.ts | 128 +
.../__tests__/multipleQueriesAtOnce.test.ts | 68 +
.../__tests__/nonGremlinIndentation.test.ts | 79 +
.../__tests__/nonMethodIndentation.test.ts | 40 +
gremlin-js/gremlint/src/formatQuery/consts.ts | 35 +
.../formatQuery/formatSyntaxTrees/formatClosure.ts | 119 +
.../formatQuery/formatSyntaxTrees/formatMethod.ts | 182 +
.../formatSyntaxTrees/formatNonGremlin.ts | 30 +
.../formatQuery/formatSyntaxTrees/formatString.ts | 31 +
.../formatTraversal/getStepGroups/index.ts | 58 +
.../getStepGroups/reduceFirstStepInStepGroup.ts | 70 +
.../getStepGroups/reduceLastStepInStepGroup.ts | 76 +
.../getStepGroups/reduceMiddleStepInStepGroup.ts | 58 +
.../getStepGroups/reduceSingleStepInStepGroup.ts | 81 +
.../formatTraversal/getStepGroups/utils.ts | 124 +
.../formatSyntaxTrees/formatTraversal/index.ts | 95 +
.../formatQuery/formatSyntaxTrees/formatWord.ts | 33 +
.../src/formatQuery/formatSyntaxTrees/index.ts | 49 +
.../src/formatQuery/formatSyntaxTrees/utils.ts | 73 +
gremlin-js/gremlint/src/formatQuery/index.ts | 54 +
gremlin-js/gremlint/src/formatQuery/layoutUtils.ts | 49 +
.../__tests__/extractGremlinQueries.test.ts | 564 +
.../parseToSyntaxTrees/extractGremlinQueries.ts | 173 +
.../src/formatQuery/parseToSyntaxTrees/index.ts | 391 +
.../recreateQueryOnelinerFromSyntaxTree.ts | 80 +
.../recreateQueryStringFromFormattedSyntaxTrees.ts | 98 +
gremlin-js/gremlint/src/formatQuery/types.ts | 170 +
gremlin-js/gremlint/src/formatQuery/utils.ts | 40 +
gremlin-js/gremlint/src/index.ts | 20 +
{gremlint => gremlin-js/gremlint}/tsconfig.json | 0
gremlin-js/package-lock.json | 13053 +
gremlin-js/package.json | 9 +
gremlin-js/pom.xml | 108 +
gremlin-language/pom.xml | 2 +-
gremlin-language/src/main/antlr4/Gremlin.g4 | 529 +-
.../language/corpus/DocumentationReader.java | 10 +-
.../gremlin/language/corpus/FeatureReader.java | 2 +-
.../gremlin/language/corpus/GrammarReader.java | 2 +-
.../language/corpus/DocumentationReaderTest.java | 2 +-
.../gremlin/language/corpus/FeatureReaderTest.java | 2 +-
.../language/grammar/AbstractGrammarTest.java | 2 +-
.../gremlin/language/grammar/BasicGrammarTest.java | 2 +-
.../language/grammar/GremlinErrorListener.java | 2 +-
.../language/grammar/NegativeGrammarTest.java | 2 +-
.../language/grammar/ReferenceGrammarTest.java | 8 +-
.../src/test/resources/gremlin-values.txt | 5 -
.../test/resources/incorrect-gremlin-values.txt | 4 +-
.../src/test/resources/incorrect-traversals.txt | 1 -
gremlin-python/build/generate.groovy | 13 +-
gremlin-python/docker-compose.yml | 93 +-
gremlin-python/pom.xml | 39 +-
gremlin-python/src/main/python/MANIFEST.in | 2 +-
gremlin-python/src/main/python/NOTICE | 2 +-
gremlin-python/src/main/python/README.rst | 2 +-
.../src/main/python/examples/basic_gremlin.py | 19 +-
.../src/main/python/examples/connections.py | 65 +-
.../src/main/python/examples/modern_traversals.py | 18 +-
.../src/main/python/examples/requirements.txt | 14 +-
.../src/main/python/gremlin_python/__init__.py | 3 +-
.../main/python/gremlin_python/driver/__init__.py | 2 +-
.../gremlin_python/driver/aiohttp/__init__.py | 2 +-
.../gremlin_python/driver/aiohttp/transport.py | 220 +-
.../src/main/python/gremlin_python/driver/auth.py | 55 +
.../main/python/gremlin_python/driver/client.py | 141 +-
.../python/gremlin_python/driver/connection.py | 98 +-
.../driver/driver_remote_connection.py | 157 +-
.../main/python/gremlin_python/driver/protocol.py | 259 -
.../gremlin_python/driver/remote_connection.py | 14 +-
.../main/python/gremlin_python/driver/request.py | 8 +-
.../main/python/gremlin_python/driver/resultset.py | 34 +-
.../python/gremlin_python/driver/serializer.py | 313 +-
.../main/python/gremlin_python/driver/transport.py | 45 -
.../main/python/gremlin_python/driver/useragent.py | 4 +-
.../main/python/gremlin_python/process/__init__.py | 2 +-
.../gremlin_python/process/anonymous_traversal.py | 2 +-
.../gremlin_python/process/graph_traversal.py | 865 +-
.../python/gremlin_python/process/strategies.py | 2 +-
.../python/gremlin_python/process/translator.py | 297 -
.../python/gremlin_python/process/traversal.py | 623 +-
.../src/main/python/gremlin_python/statics.py | 51 +-
.../python/gremlin_python/structure/__init__.py | 6 +-
.../main/python/gremlin_python/structure/graph.py | 36 +-
.../python/gremlin_python/structure/io/__init__.py | 6 +-
.../gremlin_python/structure/io/graphbinaryV1.py | 1207 -
.../gremlin_python/structure/io/graphbinaryV4.py | 924 +
.../gremlin_python/structure/io/graphsonV2d0.py | 685 -
.../gremlin_python/structure/io/graphsonV3d0.py | 802 -
.../python/gremlin_python/structure/io/util.py | 40 +-
gremlin-python/src/main/python/pyproject.toml | 83 +
.../src/main/python/radish/feature_steps.py | 379 -
gremlin-python/src/main/python/radish/gremlin.py | 1659 -
gremlin-python/src/main/python/radish/terrain.py | 104 -
gremlin-python/src/main/python/radish/utils.py | 62 -
gremlin-python/src/main/python/setup.cfg | 22 -
gremlin-python/src/main/python/setup.py | 91 -
gremlin-python/src/main/python/tests/__init__.py | 20 -
gremlin-python/src/main/python/tests/conftest.py | 371 -
.../src/main/python/tests/driver/__init__.py | 20 -
.../src/main/python/tests/driver/test_client.py | 517 -
.../tests/driver/test_driver_remote_connection.py | 310 -
.../driver/test_driver_remote_connection_http.py | 235 -
.../test_driver_remote_connection_threaded.py | 98 -
.../main/python/tests/driver/test_serializer.py | 45 -
.../driver/test_web_socket_client_behavior.py | 125 -
.../src/main/python/tests/feature/feature_steps.py | 522 +
.../src/main/python/tests/feature/gremlin.py | 2160 +
.../src/main/python/tests/feature/terrain.py | 111 +
.../src/main/python/tests/feature/utils.py | 85 +
.../src/main/python/tests/integration/__init__.py | 18 +
.../src/main/python/tests/integration/conftest.py | 217 +
.../python/tests/integration/driver/__init__.py | 18 +
.../python/tests/integration/driver/test_auth.py | 66 +
.../python/tests/integration/driver/test_client.py | 556 +
.../driver/test_driver_remote_connection.py | 291 +
.../test_driver_remote_connection_threaded.py | 99 +
.../tests/integration/driver/test_serializer.py | 27 +
.../driver/test_web_socket_client_behavior.py | 100 +
.../python/tests/integration/process/__init__.py | 18 +
.../python/tests/integration/process/test_dsl.py | 79 +
.../tests/integration/process/test_traversal.py | 418 +
.../python/tests/integration/structure/__init__.py | 18 +
.../tests/integration/structure/io/__init__.py | 18 +
.../structure/io/test_functionalityio.py | 189 +
.../src/main/python/tests/process/__init__.py | 20 -
.../src/main/python/tests/process/test_dsl.py | 79 -
.../main/python/tests/process/test_strategies.py | 121 -
.../main/python/tests/process/test_translator.py | 458 -
.../main/python/tests/process/test_traversal.py | 441 -
.../src/main/python/tests/structure/__init__.py | 20 -
.../src/main/python/tests/structure/io/__init__.py | 20 -
.../tests/structure/io/test_functionalityio.py | 230 -
.../tests/structure/io/test_graphbinaryV1.py | 260 -
.../python/tests/structure/io/test_graphsonV2d0.py | 553 -
.../python/tests/structure/io/test_graphsonV3d0.py | 570 -
.../main/python/tests/structure/io/test_util.py | 37 -
.../src/main/python/tests/structure/test_graph.py | 111 -
.../src/main/python/tests/test_statics.py | 65 -
.../src/main/python/tests/unit/__init__.py | 18 +
.../src/main/python/tests/unit/driver/__init__.py | 18 +
.../tests/unit/driver/test_http_streaming.py | 1366 +
.../src/main/python/tests/unit/process/__init__.py | 18 +
.../python/tests/unit/process/test_gremlin_lang.py | 581 +
.../python/tests/unit/process/test_strategies.py | 106 +
.../main/python/tests/unit/structure/__init__.py | 18 +
.../python/tests/unit/structure/io/__init__.py | 18 +
.../main/python/tests/unit/structure/io/model.py | 155 +
.../tests/unit/structure/io/test_graphbinaryV4.py | 318 +
.../unit/structure/io/test_graphbinaryv4model.py | 304 +
.../python/tests/unit/structure/io/test_util.py | 37 +
.../main/python/tests/unit/structure/test_graph.py | 184 +
.../src/main/python/tests/unit/test_statics.py | 83 +
gremlin-server/conf/gremlin-server-airroutes.yaml | 43 +
gremlin-server/conf/gremlin-server-classic.yaml | 10 +-
.../conf/gremlin-server-modern-readonly.yaml | 14 +-
gremlin-server/conf/gremlin-server-modern.yaml | 21 +-
gremlin-server/conf/gremlin-server-neo4j.yaml | 64 -
.../conf/gremlin-server-rest-modern.yaml | 10 +-
.../conf/gremlin-server-rest-secure.yaml | 12 +-
gremlin-server/conf/gremlin-server-secure.yaml | 14 +-
gremlin-server/conf/gremlin-server-spark.yaml | 8 +-
.../conf/gremlin-server-transaction.yaml | 13 +-
gremlin-server/conf/gremlin-server.yaml | 19 +-
gremlin-server/conf/logback.xml | 1 -
gremlin-server/conf/neo4j-empty.properties | 46 -
.../conf/tinkergraph-credentials.properties | 2 +-
gremlin-server/conf/tinkergraph-empty.properties | 2 +-
gremlin-server/conf/tinkergraph-service.properties | 2 +-
.../conf/tinkertransactiongraph-empty.properties | 2 +-
.../conf/tinkertransactiongraph-service.properties | 2 +-
gremlin-server/data/README.asciidoc | 24 +-
gremlin-server/pom.xml | 26 +-
gremlin-server/scripts/empty-sample-secure.groovy | 10 +-
gremlin-server/scripts/empty-sample.groovy | 2 +-
gremlin-server/scripts/generate-classic.groovy | 2 +-
.../scripts/generate-modern-readonly.groovy | 4 +-
gremlin-server/scripts/generate-modern.groovy | 2 +-
gremlin-server/scripts/load-sample.groovy | 2 +-
gremlin-server/scripts/spark.groovy | 2 +-
.../gremlin/server/AbstractChannelizer.java | 164 +-
.../tinkerpop/gremlin/server/Channelizer.java | 2 +-
.../apache/tinkerpop/gremlin/server/Context.java | 220 +-
.../tinkerpop/gremlin/server/GraphManager.java | 33 +-
.../tinkerpop/gremlin/server/GremlinServer.java | 36 +-
.../tinkerpop/gremlin/server/OpProcessor.java | 52 -
.../gremlin/server/ProcessingException.java | 37 +
.../apache/tinkerpop/gremlin/server/Settings.java | 233 +-
.../gremlin/server/auth/AllowAllAuthenticator.java | 2 +-
.../gremlin/server/auth/AuthenticatedUser.java | 2 +-
.../server/auth/AuthenticationException.java | 2 +-
.../gremlin/server/auth/Authenticator.java | 18 +-
.../gremlin/server/auth/Krb5Authenticator.java | 2 +-
.../gremlin/server/auth/SimpleAuthenticator.java | 2 +-
.../server/authz/AuthorizationException.java | 2 +-
.../tinkerpop/gremlin/server/authz/Authorizer.java | 25 +-
.../gremlin/server/channel/HttpChannelizer.java | 38 +-
.../gremlin/server/channel/UnifiedChannelizer.java | 86 -
.../server/channel/WebSocketChannelizer.java | 151 -
.../server/channel/WsAndHttpChannelizer.java | 59 -
.../handler/AbstractAuthenticationHandler.java | 10 +-
.../gremlin/server/handler/AbstractSession.java | 882 -
.../tinkerpop/gremlin/server/handler/Frame.java | 48 -
.../server/handler/FrameMessageSizeEstimator.java | 93 -
.../handler/GremlinResponseFrameEncoder.java | 108 -
.../handler/HttpBasicAuthenticationHandler.java | 48 +-
.../handler/HttpBasicAuthorizationHandler.java | 47 +-
.../handler/HttpContentCompressionHandler.java | 89 +
.../server/handler/HttpGremlinEndpointHandler.java | 921 +-
.../gremlin/server/handler/HttpHandlerUtil.java | 314 +-
.../server/handler/HttpRequestCheckingHandler.java | 58 +
.../server/handler/HttpRequestIdHandler.java | 80 +
.../server/handler/HttpRequestMessageDecoder.java | 215 +
.../server/handler/HttpUserAgentHandler.java | 7 +-
.../gremlin/server/handler/MultiTaskSession.java | 316 -
.../gremlin/server/handler/OpExecutorHandler.java | 85 -
.../gremlin/server/handler/OpSelectorHandler.java | 113 -
.../SaslAndHttpBasicAuthenticationHandler.java | 75 -
.../server/handler/SaslAuthenticationHandler.java | 235 -
.../gremlin/server/handler/ServerSerializers.java | 46 -
.../tinkerpop/gremlin/server/handler/Session.java | 84 -
.../gremlin/server/handler/SessionException.java | 43 -
.../gremlin/server/handler/SessionTask.java | 42 -
.../gremlin/server/handler/SingleTaskSession.java | 99 -
.../tinkerpop/gremlin/server/handler/StateKey.java | 37 +-
.../gremlin/server/handler/TransactionManager.java | 179 +
.../gremlin/server/handler/UnifiedHandler.java | 356 -
.../server/handler/UnmanagedTransaction.java | 182 +
.../handler/WebSocketAuthorizationHandler.java | 110 -
.../server/handler/WebSocketHandlerUtil.java | 39 -
.../handler/WsAndHttpChannelizerHandler.java | 118 -
.../handler/WsGremlinBinaryRequestDecoder.java | 94 -
.../handler/WsGremlinCloseRequestDecoder.java | 92 -
.../handler/WsGremlinResponseFrameEncoder.java | 44 -
.../handler/WsGremlinTextRequestDecoder.java | 78 -
.../gremlin/server/handler/WsUserAgentHandler.java | 75 -
.../server/jsr223/GremlinServerGremlinPlugin.java | 2 +-
.../gremlin/server/op/AbstractEvalOpProcessor.java | 367 -
.../gremlin/server/op/AbstractOpProcessor.java | 374 -
.../tinkerpop/gremlin/server/op/OpLoader.java | 89 -
.../gremlin/server/op/OpProcessorException.java | 37 -
.../gremlin/server/op/session/Session.java | 273 -
.../server/op/session/SessionOpProcessor.java | 764 -
.../server/op/standard/StandardOpProcessor.java | 163 -
.../server/op/traversal/TraversalOpProcessor.java | 500 -
.../gremlin/server/util/CheckedGraphManager.java | 2 +-
.../gremlin/server/util/DefaultGraphManager.java | 7 +-
.../server/util/DefaultTemporaryException.java | 2 +-
.../gremlin/server/util/ExceptionHelper.java | 2 +-
.../gremlin/server/util/GremlinError.java | 253 +
.../gremlin/server/util/GremlinServerInstall.java | 2 +-
.../gremlin/server/util/LifeCycleHook.java | 38 +-
.../gremlin/server/util/MetricManager.java | 2 +-
.../util/SSLStoreFilesModificationWatcher.java | 124 +
.../gremlin/server/util/ServerGremlinExecutor.java | 147 +-
.../server/util/TextPlainMessageSerializer.java | 71 +-
.../gremlin/server/util/ThreadFactoryUtil.java | 2 +-
.../server/util/TinkerFactoryDataLoader.java | 102 +
.../gremlin/server/util/TraverserIterator.java | 2 +-
...org.apache.tinkerpop.gremlin.server.OpProcessor | 3 -
gremlin-server/src/main/static/LICENSE | 9 +-
gremlin-server/src/main/static/NOTICE | 8 +-
.../driver/ClientConnectionIntegrateTest.java | 122 +-
.../gremlin/driver/remote/AbstractFeatureTest.java | 2 +-
.../driver/remote/AbstractRemoteGraphProvider.java | 256 -
.../remote/GraphBinaryGroovyRemoteFeatureTest.java | 51 +
...BinaryGroovyRemoteParameterizedFeatureTest.java | 51 +
.../GraphBinaryLangBulkedRemoteFeatureTest.java | 51 +
.../remote/GraphBinaryLangRemoteFeatureTest.java | 51 +
...phBinaryLangRemoteParameterizedFeatureTest.java | 51 +
.../GraphBinaryRemoteComputerFeatureTest.java | 2 +-
.../remote/GraphBinaryRemoteFeatureTest.java | 51 -
.../GraphBinaryRemoteGraphComputerProvider.java | 152 -
.../remote/GraphBinaryRemoteGraphProvider.java | 30 -
.../remote/GraphSONLangRemoteFeatureTest.java | 51 +
...GraphSONLangRemoteParameterizedFeatureTest.java | 51 +
.../remote/GraphSONRemoteComputerFeatureTest.java | 2 +-
.../driver/remote/GraphSONRemoteFeatureTest.java | 51 -
.../GraphSONRemoteGraphComputerProvider.java | 151 -
.../driver/remote/GraphSONRemoteGraphProvider.java | 30 -
.../gremlin/driver/remote/RemoteWorld.java | 112 +-
.../jsr223/GremlinGroovyScriptTestEngine.java | 50 +
.../GremlinGroovyScriptTestEngineFactory.java | 47 +
.../GraphBinaryRemoteGraphProcessComputerTest.java | 34 -
.../GraphBinaryRemoteGraphProcessStandardTest.java | 33 -
.../GraphSONRemoteGraphProcessComputerTest.java | 34 -
.../GraphSONRemoteGraphProcessStandardTest.java | 33 -
.../AbstractGremlinServerIntegrationTest.java | 29 +-
.../gremlin/server/BaseScriptForTesting.java | 2 +-
.../server/ClientWithOptionsIntegrateTest.java | 14 +-
.../tinkerpop/gremlin/server/ContextTest.java | 145 +-
.../gremlin/server/GremlinDriverIntegrateTest.java | 1143 +-
.../GremlinDriverTransactionIntegrateTest.java | 650 +
.../server/GremlinResultSetIntegrateTest.java | 71 +-
.../server/GremlinServerAuditLogIntegrateTest.java | 153 +-
.../server/GremlinServerAuthIntegrateTest.java | 223 +-
.../server/GremlinServerAuthKrb5IntegrateTest.java | 248 -
.../server/GremlinServerAuthzIntegrateTest.java | 327 +-
.../server/GremlinServerConfigIntegrateTest.java | 98 +
.../server/GremlinServerHttpIntegrateTest.java | 941 +-
.../GremlinServerHttpTransactionIntegrateTest.java | 757 +
.../gremlin/server/GremlinServerIntegrateTest.java | 942 +-
.../GremlinServerSerializationIntegrateTest.java | 122 +-
.../server/GremlinServerSessionIntegrateTest.java | 722 -
...SessionIntegrateWithUnifiedChannelizerTest.java | 61 -
.../GremlinServerShutdownIntegrationTest.java | 2 +-
.../server/GremlinServerSslIntegrateTest.java | 71 +-
.../server/GremlinSessionTxIntegrateTest.java | 406 -
.../gremlin/server/HttpDriverIntegrateTest.java | 592 +-
.../tinkerpop/gremlin/server/KdcFixtureTest.java | 2 +-
.../tinkerpop/gremlin/server/ServerTestHelper.java | 39 +-
.../tinkerpop/gremlin/server/SettingsTest.java | 90 +-
.../server/StreamingResponseIntegrateTest.java | 239 +
.../gremlin/server/TestClientFactory.java | 21 +-
.../server/auth/SimpleAuthenticatorTest.java | 2 +-
.../tinkerpop/gremlin/server/authz/AllowList.java | 2 +-
.../gremlin/server/authz/AllowListAuthorizer.java | 73 +-
.../gremlin/server/authz/AuthorizerTest.java | 198 +-
...tractGremlinServerChannelizerIntegrateTest.java | 76 +-
.../channel/HttpChannelizerIntegrateTest.java | 6 +-
.../server/channel/HttpTestChannelizer.java | 2 +-
.../gremlin/server/channel/TestChannelizer.java | 2 +-
.../channel/UnifiedChannelizerIntegrateTest.java | 57 -
.../server/channel/UnifiedTestChannelizer.java | 48 -
.../channel/WebSocketChannelizerIntegrateTest.java | 56 -
.../server/channel/WebSocketTestChannelizer.java | 48 -
.../channel/WsAndHttpChannelizerIntegrateTest.java | 58 -
.../server/channel/WsAndHttpTestChannelizer.java | 49 -
.../handler/HttpContentCompressionHandlerTest.java | 208 +
.../server/handler/HttpHandlerUtilTest.java | 165 -
.../server/handler/HttpRequestIdHandlerTest.java | 82 +
.../handler/HttpRequestMessageDecoderTest.java | 338 +
.../GraphManagerNotificationsTest.java | 93 -
.../notifications/ProviderGraphManagerHelper.java | 77 -
.../server/op/AbstractEvalOpProcessorTest.java | 70 -
.../gremlin/server/op/AbstractOpProcessorTest.java | 54 -
.../server/util/CheckedGraphManagerTest.java | 4 +-
.../server/util/DefaultGraphManagerTest.java | 2 +-
.../gremlin/server/util/ExceptionTestUtils.java | 2 +-
.../util/SSLStoreFilesModificationWatcherTest.java | 65 +
.../server/util/ServerGremlinExecutorTest.java | 172 +
.../util/TextPlainMessageSerializerTest.java | 20 +-
.../server/util/TinkerFactoryDataLoaderTest.java | 236 +
.../io.cucumber.core.backend.ObjectFactory | 9 +-
...erpop.gremlin.jsr223.GremlinScriptEngineFactory | 1 +
.../src/test/resources/conf/remote-objects.yaml | 5 +-
gremlin-server/src/test/resources/logback-test.xml | 6 +-
...ate-shouldRebindTraversalSourceVariables.groovy | 2 +-
.../gremlin/server/gremlin-console-jaas.conf | 2 +-
.../gremlin/server/gremlin-server-integration.yaml | 48 +-
.../gremlin-server-with-traversal-sources.yaml | 26 +
gremlin-server/src/test/scripts/README.asciidoc | 24 +-
.../src/test/scripts/generate-all.groovy | 72 -
.../src/test/scripts/init-functions.groovy | 20 +
.../src/test/scripts/neo4j-empty.properties | 33 -
.../src/test/scripts/test-server-start.groovy | 120 -
.../src/test/scripts/test-server-stop.groovy | 2 +-
.../src/test/scripts/tinkergraph-empty.properties | 2 +-
.../tinkertransactiongraph-empty.properties | 2 +-
gremlin-shaded/pom.xml | 33 +-
gremlin-shaded/src/main/static/NOTICE | 2 +-
gremlin-test/build/generate-translator-data.groovy | 56 +
gremlin-test/pom.xml | 64 +-
.../gremlin/AbstractFileGraphProvider.java | 2 +-
.../tinkerpop/gremlin/AbstractGraphProvider.java | 5 +-
.../tinkerpop/gremlin/AbstractGremlinSuite.java | 2 +-
.../tinkerpop/gremlin/AbstractGremlinTest.java | 2 +-
.../tinkerpop/gremlin/ExceptionCoverage.java | 2 +-
.../tinkerpop/gremlin/ExceptionCoverageSet.java | 2 +-
.../tinkerpop/gremlin/FeatureRequirement.java | 2 +-
.../tinkerpop/gremlin/FeatureRequirementSet.java | 2 +-
.../tinkerpop/gremlin/FeatureRequirements.java | 2 +-
.../org/apache/tinkerpop/gremlin/GraphHelper.java | 2 +-
.../org/apache/tinkerpop/gremlin/GraphManager.java | 2 +-
.../apache/tinkerpop/gremlin/GraphProvider.java | 2 +-
.../tinkerpop/gremlin/GraphProviderClass.java | 2 +-
.../apache/tinkerpop/gremlin/LoadGraphWith.java | 2 +-
.../org/apache/tinkerpop/gremlin/TestHelper.java | 2 +-
.../algorithm/generator/AbstractGenerator.java | 2 +-
.../algorithm/generator/AbstractGeneratorTest.java | 2 +-
.../algorithm/generator/CommunityGenerator.java | 2 +-
.../generator/CommunityGeneratorTest.java | 2 +-
.../algorithm/generator/CopyDistribution.java | 2 +-
.../gremlin/algorithm/generator/Distribution.java | 2 +-
.../algorithm/generator/DistributionGenerator.java | 2 +-
.../generator/DistributionGeneratorTest.java | 2 +-
.../gremlin/algorithm/generator/Generator.java | 2 +-
.../algorithm/generator/NormalDistribution.java | 2 +-
.../algorithm/generator/PowerLawDistribution.java | 2 +-
.../algorithm/generator/SizableIterable.java | 2 +-
.../gremlin/features/AbstractGuiceFactory.java | 2 +-
.../tinkerpop/gremlin/features/IsInMatcher.java | 2 +-
.../gremlin/features/IsPathEqualToMatcher.java | 2 +-
.../tinkerpop/gremlin/features/StepDefinition.java | 298 +-
.../tinkerpop/gremlin/features/TestFiles.java | 3 +-
.../apache/tinkerpop/gremlin/features/World.java | 16 +-
.../gremlin/jsr223/BindingsScriptEngineTest.java | 115 -
.../CachedGremlinScriptEngineManagerTest.java | 2 +-
.../jsr223/GremlinEnabledScriptEngineTest.java | 92 +-
.../gremlin/jsr223/GremlinScriptEngineSuite.java | 3 +-
.../gremlin/jsr223/MockGremlinScriptEngine.java | 9 +-
.../jsr223/MockGremlinScriptEngineFactory.java | 2 +-
.../gremlin/jsr223/ScriptEngineLambdaTest.java | 2 +-
.../gremlin/jsr223/ScriptEngineToTest.java | 2 +-
.../process/AbstractGremlinProcessTest.java | 2 +-
.../gremlin/process/GremlinProcessRunner.java | 2 +-
.../tinkerpop/gremlin/process/IgnoreEngine.java | 2 +-
.../gremlin/process/ProcessComputerSuite.java | 311 -
.../process/ProcessEmbeddedComputerSuite.java | 18 +-
.../process/ProcessEmbeddedStandardSuite.java | 14 +-
.../process/ProcessLimitedComputerSuite.java | 38 -
.../process/ProcessLimitedStandardSuite.java | 37 -
.../gremlin/process/ProcessStandardSuite.java | 308 -
.../process/computer/GraphComputerTest.java | 2 +-
.../computer/clone/CloneVertexProgramTest.java | 2 +-
.../pagerank/PageRankVertexProgramTest.java | 2 +-
.../search/path/ShortestPathTestHelper.java | 2 +-
.../search/path/ShortestPathVertexProgramTest.java | 2 +-
.../process/traversal/CoreTraversalTest.java | 11 +-
.../gremlin/process/traversal/TraversalEngine.java | 2 +-
.../TraversalInterruptionComputerTest.java | 2 +-
.../traversal/TraversalInterruptionTest.java | 2 +-
.../process/traversal/step/ComplexTest.java | 370 -
.../process/traversal/step/LambdaStepTest.java | 21 +-
.../process/traversal/step/OrderabilityTest.java | 529 -
.../traversal/step/TernaryBooleanLogicsTest.java | 340 -
.../process/traversal/step/branch/BranchTest.java | 129 -
.../process/traversal/step/branch/ChooseTest.java | 212 -
.../process/traversal/step/branch/LocalTest.java | 284 -
.../traversal/step/branch/OptionalTest.java | 166 -
.../process/traversal/step/branch/RepeatTest.java | 591 -
.../process/traversal/step/branch/UnionTest.java | 212 -
.../process/traversal/step/filter/AndTest.java | 126 -
.../process/traversal/step/filter/CoinTest.java | 84 -
.../traversal/step/filter/CyclicPathTest.java | 100 -
.../process/traversal/step/filter/DedupTest.java | 513 -
.../process/traversal/step/filter/DropTest.java | 140 -
.../process/traversal/step/filter/FilterTest.java | 125 -
.../process/traversal/step/filter/HasTest.java | 1328 -
.../process/traversal/step/filter/IsTest.java | 126 -
.../process/traversal/step/filter/OrTest.java | 93 -
.../process/traversal/step/filter/RangeTest.java | 464 -
.../process/traversal/step/filter/SampleTest.java | 162 -
.../traversal/step/filter/SimplePathTest.java | 109 -
.../process/traversal/step/filter/TailTest.java | 315 -
.../process/traversal/step/filter/WhereTest.java | 556 -
.../process/traversal/step/map/AddEdgeTest.java | 371 -
.../process/traversal/step/map/AddVertexTest.java | 408 -
.../process/traversal/step/map/CoalesceTest.java | 174 -
.../traversal/step/map/ConnectedComponentTest.java | 160 -
.../process/traversal/step/map/ConstantTest.java | 94 -
.../process/traversal/step/map/CountTest.java | 205 -
.../process/traversal/step/map/EdgeTest.java | 159 -
.../process/traversal/step/map/ElementMapTest.java | 187 -
.../process/traversal/step/map/FlatMapTest.java | 61 -
.../process/traversal/step/map/FoldTest.java | 105 -
.../process/traversal/step/map/GraphTest.java | 122 -
.../process/traversal/step/map/IndexTest.java | 144 -
.../process/traversal/step/map/LoopsTest.java | 154 -
.../process/traversal/step/map/MapTest.java | 85 -
.../process/traversal/step/map/MatchTest.java | 14 +-
.../process/traversal/step/map/MathTest.java | 162 -
.../process/traversal/step/map/MaxTest.java | 249 -
.../process/traversal/step/map/MeanTest.java | 221 -
.../process/traversal/step/map/MergeEdgeTest.java | 271 -
.../traversal/step/map/MergeVertexTest.java | 222 -
.../process/traversal/step/map/MinTest.java | 266 -
.../process/traversal/step/map/OrderTest.java | 606 -
.../process/traversal/step/map/PageRankTest.java | 281 -
.../process/traversal/step/map/PathTest.java | 271 -
.../traversal/step/map/PeerPressureTest.java | 120 -
.../process/traversal/step/map/ProfileTest.java | 2 +-
.../process/traversal/step/map/ProgramTest.java | 5 +-
.../process/traversal/step/map/ProjectTest.java | 148 -
.../process/traversal/step/map/PropertiesTest.java | 159 -
.../process/traversal/step/map/ReadTest.java | 185 -
.../process/traversal/step/map/SelectTest.java | 1246 -
.../traversal/step/map/ShortestPathTest.java | 353 -
.../process/traversal/step/map/SumTest.java | 243 -
.../process/traversal/step/map/UnfoldTest.java | 88 -
.../process/traversal/step/map/ValueMapTest.java | 418 -
.../process/traversal/step/map/VertexTest.java | 833 -
.../process/traversal/step/map/WriteTest.java | 183 -
.../traversal/step/sideEffect/AggregateTest.java | 315 -
.../traversal/step/sideEffect/ExplainTest.java | 2 +-
.../traversal/step/sideEffect/GroupCountTest.java | 351 -
.../traversal/step/sideEffect/GroupTest.java | 630 -
.../traversal/step/sideEffect/InjectTest.java | 239 -
.../traversal/step/sideEffect/SackTest.java | 212 -
.../step/sideEffect/SideEffectCapTest.java | 98 -
.../traversal/step/sideEffect/SideEffectTest.java | 96 -
.../traversal/step/sideEffect/StoreTest.java | 136 -
.../traversal/step/sideEffect/SubgraphTest.java | 148 -
.../traversal/step/sideEffect/TreeTest.java | 211 -
.../decoration/ElementIdStrategyProcessTest.java | 2 +-
.../decoration/EventStrategyProcessTest.java | 2 +-
.../decoration/PartitionStrategyProcessTest.java | 518 -
.../decoration/SeedStrategyProcessTest.java | 105 -
.../decoration/SubgraphStrategyProcessTest.java | 576 -
.../strategy/decoration/TranslationStrategy.java | 154 -
.../decoration/TranslationStrategyProcessTest.java | 70 -
.../EarlyLimitStrategyProcessTest.java | 4 +-
.../IncidentToAdjacentStrategyProcessTest.java | 2 +-
.../verification/ReadOnlyStrategyProcessTest.java | 122 -
.../tinkerpop/gremlin/server/KdcFixture.java | 2 +-
.../tinkerpop/gremlin/structure/EdgeTest.java | 4 +-
.../gremlin/structure/FeatureSupportTest.java | 2 +-
.../gremlin/structure/GraphConstructionTest.java | 2 +-
.../tinkerpop/gremlin/structure/GraphTest.java | 2 +-
.../gremlin/structure/MockSerializable.java | 2 +-
.../tinkerpop/gremlin/structure/PropertyTest.java | 2 +-
.../tinkerpop/gremlin/structure/RemoteGraph.java | 26 +-
.../gremlin/structure/SerializationTest.java | 31 +-
.../gremlin/structure/StructureStandardSuite.java | 2 +-
.../structure/TransactionMultiThreadedTest.java | 2 +-
.../gremlin/structure/TransactionTest.java | 2 +-
.../tinkerpop/gremlin/structure/VariablesTest.java | 2 +-
.../gremlin/structure/VertexPropertyTest.java | 2 +-
.../tinkerpop/gremlin/structure/VertexTest.java | 2 +-
.../gremlin/structure/io/IoCustomTest.java | 2 +-
.../tinkerpop/gremlin/structure/io/IoEdgeTest.java | 2 +-
.../gremlin/structure/io/IoGraphTest.java | 2 +-
.../gremlin/structure/io/IoPropertyTest.java | 2 +-
.../tinkerpop/gremlin/structure/io/IoTest.java | 2 +-
.../gremlin/structure/io/IoVertexTest.java | 2 +-
.../io/graphbinary/GraphBinaryResourceAccess.java | 22 +
.../io/graphml/GraphMLResourceAccess.java | 2 +-
.../io/graphson/GraphSONResourceAccess.java | 2 +-
.../structure/io/gryo/GryoResourceAccess.java | 2 +-
.../gremlin/structure/io/gryo/ToyIoRegistry.java | 2 +-
.../gremlin/structure/io/gryo/ToyPoint.java | 2 +-
.../gremlin/structure/io/gryo/ToyTriangle.java | 2 +-
.../structure/io/script/ScriptResourceAccess.java | 2 +-
.../gremlin/structure/io/util/CustomId.java | 2 +-
.../structure/util/detached/DetachedEdgeTest.java | 2 +-
.../structure/util/detached/DetachedGraphTest.java | 2 +-
.../util/detached/DetachedPropertyTest.java | 2 +-
.../util/detached/DetachedVertexPropertyTest.java | 2 +-
.../util/detached/DetachedVertexTest.java | 2 +-
.../util/reference/ReferenceEdgeTest.java | 2 +-
.../util/reference/ReferenceGraphTest.java | 2 +-
.../reference/ReferenceVertexPropertyTest.java | 2 +-
.../util/reference/ReferenceVertexTest.java | 2 +-
.../gremlin/structure/util/star/StarGraphTest.java | 2 +-
.../tinkerpop/gremlin/jsr223/bindings-init.groovy | 2 +-
.../gremlin/language/translator/translations.json | 44491 +++
.../structure/io/graphbinary/edge-property-v4.gbin | Bin
.../structure/io/graphbinary/empty-binary-v4.gbin | Bin 0 -> 6 bytes
.../io/graphbinary/empty-bulklist-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/empty-list-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/empty-map-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/empty-path-v4.gbin | Bin 0 -> 14 bytes
.../structure/io/graphbinary/empty-set-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/false-boolean-v4.gbin | Bin 0 -> 3 bytes
.../io/graphbinary/forever-duration-v4.gbin | Bin 0 -> 14 bytes
.../gremlin/structure/io/graphbinary/id-t-v4.gbin | Bin 0 -> 10 bytes
.../structure/io/graphbinary/max-byte-v4.gbin | Bin 0 -> 3 bytes
.../structure/io/graphbinary/max-double-v4.gbin | Bin 0 -> 10 bytes
.../structure/io/graphbinary/max-float-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/max-int-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/max-long-v4.gbin | Bin 0 -> 10 bytes
.../io/graphbinary/max-offsetdatetime-v4.gbin | Bin 0 -> 20 bytes
.../structure/io/graphbinary/max-short-v4.gbin | Bin 0 -> 4 bytes
.../io/graphbinary/meta-vertexproperty-v4.gbin | Bin 0 -> 61 bytes
.../structure/io/graphbinary/min-byte-v4.gbin | Bin 0 -> 3 bytes
.../structure/io/graphbinary/min-double-v4.gbin | Bin 0 -> 10 bytes
.../structure/io/graphbinary/min-float-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/min-int-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/min-long-v4.gbin | Bin 0 -> 10 bytes
.../io/graphbinary/min-offsetdatetime-v4.gbin | Bin 0 -> 20 bytes
.../structure/io/graphbinary/min-short-v4.gbin | Bin 0 -> 4 bytes
.../structure/io/graphbinary/mixed-string-v4.gbin | Bin 0 -> 15 bytes
.../io/graphbinary/multi-byte-char-v4.gbin | Bin 0 -> 4 bytes
.../structure/io/graphbinary/nan-double-v4.gbin | Bin 0 -> 10 bytes
.../structure/io/graphbinary/nan-float-v4.gbin | Bin 0 -> 6 bytes
.../io/graphbinary/neg-bigdecimal-v4.gbin | Bin 0 -> 25 bytes
.../io/graphbinary/neg-biginteger-v4.gbin | Bin 0 -> 21 bytes
.../io/graphbinary/neg-inf-double-v4.gbin | Bin 0 -> 10 bytes
.../structure/io/graphbinary/neg-inf-float-v4.gbin | Bin 0 -> 6 bytes
.../io/graphbinary/neg-max-double-v4.gbin | Bin 0 -> 10 bytes
.../structure/io/graphbinary/neg-max-float-v4.gbin | Bin 0 -> 6 bytes
.../io/graphbinary/neg-min-double-v4.gbin | Bin 0 -> 10 bytes
.../structure/io/graphbinary/neg-min-float-v4.gbin | Bin 0 -> 6 bytes
.../io/graphbinary/neg-zero-double-v4.gbin | Bin 0 -> 10 bytes
.../io/graphbinary/neg-zero-float-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/nil-uuid-v4.gbin | Bin 0 -> 18 bytes
.../structure/io/graphbinary/no-prop-edge-v4.gbin | Bin 0 -> 80 bytes
.../io/graphbinary/no-prop-vertex-v4.gbin | Bin 0 -> 30 bytes
.../structure/io/graphbinary/null-property-v4.gbin | Bin 0 -> 10 bytes
.../structure/io/graphbinary/out-direction-v4.gbin | Bin
.../io/graphbinary/pos-bigdecimal-v4.gbin | Bin 0 -> 25 bytes
.../io/graphbinary/pos-biginteger-v4.gbin | Bin
.../io/graphbinary/pos-inf-double-v4.gbin | Bin 0 -> 10 bytes
.../structure/io/graphbinary/pos-inf-float-v4.gbin | Bin 0 -> 6 bytes
.../structure/io/graphbinary/prop-path-v4.gbin | Bin 0 -> 635 bytes
.../set-cardinality-vertexproperty-v4.gbin | Bin 0 -> 78 bytes
.../io/graphbinary/single-byte-char-v4.gbin | Bin 0 -> 3 bytes
.../io/graphbinary/single-byte-string-v4.gbin | Bin 0 -> 9 bytes
.../io/graphbinary/specified-uuid-v4.gbin | Bin
.../structure/io/graphbinary/str-binary-v4.gbin | Bin
.../structure/io/graphbinary/tinker-graph-v4.gbin | Bin 0 -> 2504 bytes
.../io/graphbinary/traversal-edge-v4.gbin | Bin 0 -> 99 bytes
.../io/graphbinary/traversal-path-v4.gbin | Bin 0 -> 126 bytes
.../io/graphbinary/traversal-tree-v4.gbin | Bin 0 -> 176 bytes
.../io/graphbinary/traversal-vertex-v4.gbin | Bin 0 -> 441 bytes
.../graphbinary/traversal-vertexproperty-v4.gbin | Bin 0 -> 45 bytes
.../structure/io/graphbinary/true-boolean-v4.gbin | Bin 0 -> 3 bytes
.../io/graphbinary/unspecified-null-v4.gbin | 1 +
.../structure/io/graphbinary/var-bulklist-v4.gbin | Bin 0 -> 43 bytes
.../structure/io/graphbinary/var-type-list-v4.gbin | Bin 0 -> 29 bytes
.../structure/io/graphbinary/var-type-map-v4.gbin | Bin 0 -> 99 bytes
.../structure/io/graphbinary/var-type-set-v4.gbin | Bin 0 -> 29 bytes
.../structure/io/graphbinary/zero-duration-v4.gbin | Bin 0 -> 14 bytes
.../gremlin/structure/io/graphml/graphml-1.1.xsd | 24 +-
.../io/graphson/edge-property-v4-no-types.json | 4 +
.../structure/io/graphson/edge-property-v4.json | 0
.../structure/io/graphson/empty-binary-v4.json | 4 +
.../structure/io/graphson/empty-bulklist-v4.json | 4 +
.../structure/io/graphson/empty-list-v4.json | 4 +
.../structure/io/graphson/empty-map-v4.json | 4 +
.../structure/io/graphson/empty-path-v4.json | 13 +
.../structure/io/graphson/empty-set-v4.json | 4 +
.../structure/io/graphson/false-boolean-v4.json | 1 +
.../structure/io/graphson/forever-duration-v4.json | 4 +
.../gremlin/structure/io/graphson/id-t-v4.json | 4 +
.../gremlin/structure/io/graphson/max-byte-v4.json | 4 +
.../structure/io/graphson/max-double-v4.json | 4 +
.../structure/io/graphson/max-float-v4.json | 4 +
.../gremlin/structure/io/graphson/max-int-v4.json | 4 +
.../gremlin/structure/io/graphson/max-long-v4.json | 4 +
.../io/graphson/max-offsetdatetime-v4.json | 4 +
.../structure/io/graphson/max-short-v4.json | 4 +
.../io/graphson/meta-vertexproperty-v4.json | 14 +
.../gremlin/structure/io/graphson/min-byte-v4.json | 4 +
.../structure/io/graphson/min-double-v4.json | 4 +
.../structure/io/graphson/min-float-v4.json | 4 +
.../gremlin/structure/io/graphson/min-int-v4.json | 4 +
.../gremlin/structure/io/graphson/min-long-v4.json | 4 +
.../io/graphson/min-offsetdatetime-v4.json | 4 +
.../structure/io/graphson/min-short-v4.json | 4 +
.../structure/io/graphson/mixed-string-v4.json | 1 +
.../structure/io/graphson/multi-byte-char-v4.json | 4 +
.../structure/io/graphson/nan-double-v4.json | 4 +
.../structure/io/graphson/nan-float-v4.json | 4 +
.../structure/io/graphson/neg-bigdecimal-v4.json | 4 +
.../structure/io/graphson/neg-biginteger-v4.json | 4 +
.../structure/io/graphson/neg-inf-double-v4.json | 4 +
.../structure/io/graphson/neg-inf-float-v4.json | 4 +
.../structure/io/graphson/neg-max-double-v4.json | 4 +
.../structure/io/graphson/neg-max-float-v4.json | 4 +
.../structure/io/graphson/neg-min-double-v4.json | 4 +
.../structure/io/graphson/neg-min-float-v4.json | 4 +
.../structure/io/graphson/neg-zero-double-v4.json | 4 +
.../structure/io/graphson/neg-zero-float-v4.json | 4 +
.../gremlin/structure/io/graphson/nil-uuid-v4.json | 4 +
.../structure/io/graphson/no-prop-edge-v4.json | 24 +
.../structure/io/graphson/no-prop-vertex-v4.json | 10 +
.../structure/io/graphson/null-property-v4.json | 7 +
.../structure/io/graphson/out-direction-v4.json | 0
.../structure/io/graphson/pos-bigdecimal-v4.json | 4 +
.../structure/io/graphson/pos-biginteger-v4.json | 4 +
.../structure/io/graphson/pos-inf-double-v4.json | 4 +
.../structure/io/graphson/pos-inf-float-v4.json | 4 +
.../structure/io/graphson/prop-path-v4.json | 165 +
.../set-cardinality-vertexproperty-v4.json | 17 +
.../structure/io/graphson/single-byte-char-v4.json | 4 +
.../io/graphson/single-byte-string-v4.json | 1 +
.../structure/io/graphson/specified-uuid-v4.json | 0
.../structure/io/graphson/str-binary-v4.json | 4 +
.../structure/io/graphson/tinker-graph-v4.json | 885 +
.../io/graphson/traversal-edge-v4-no-types.json | 16 +
.../structure/io/graphson/traversal-edge-v4.json | 36 +
.../io/graphson/traversal-path-v4-no-types.json | 16 +
.../structure/io/graphson/traversal-path-v4.json | 49 +
.../structure/io/graphson/traversal-tree-v4.json | 60 +
.../io/graphson/traversal-vertex-v4-no-types.json | 39 +
.../structure/io/graphson/traversal-vertex-v4.json | 100 +
.../traversal-vertexproperty-v4-no-types.json | 5 +
.../io/graphson/traversal-vertexproperty-v4.json | 11 +
.../structure/io/graphson/true-boolean-v4.json | 1 +
.../structure/io/graphson/unspecified-null-v4.json | 1 +
.../structure/io/graphson/var-bulklist-v4.json | 4 +
.../structure/io/graphson/var-type-list-v4.json | 7 +
.../structure/io/graphson/var-type-map-v4.json | 25 +
.../structure/io/graphson/var-type-set-v4.json | 7 +
.../structure/io/graphson/zero-duration-v4.json | 4 +
.../io/script/script-input-grateful-dead.groovy | 2 +-
.../structure/io/script/script-input.groovy | 2 +-
.../io/script/script-output-grateful-dead.groovy | 2 +-
.../structure/io/script/script-output.groovy | 2 +-
.../gremlin/test/features/branch/Branch.feature | 2 +-
.../gremlin/test/features/branch/Choose.feature | 564 +-
.../gremlin/test/features/branch/Local.feature | 91 +-
.../gremlin/test/features/branch/Optional.feature | 2 +-
.../gremlin/test/features/branch/Repeat.feature | 650 +-
.../gremlin/test/features/branch/Union.feature | 32 +-
.../gremlin/test/features/data/BigDecimal.feature | 151 +
.../gremlin/test/features/data/BigInt.feature | 151 +
.../gremlin/test/features/data/Binary.feature | 83 +
.../gremlin/test/features/data/Byte.feature | 132 +
.../gremlin/test/features/data/Char.feature | 83 +
.../gremlin/test/features/data/DateTime.feature | 139 +
.../gremlin/test/features/data/Double.feature | 189 +
.../gremlin/test/features/data/Duration.feature | 119 +
.../gremlin/test/features/data/Float.feature | 148 +
.../gremlin/test/features/data/Int.feature | 144 +
.../gremlin/test/features/data/List.feature | 173 +
.../gremlin/test/features/data/Long.feature | 111 +
.../gremlin/test/features/data/Map.feature | 150 +
.../gremlin/test/features/data/Set.feature | 165 +
.../gremlin/test/features/data/Short.feature | 119 +
.../gremlin/test/features/data/UUID.feature | 165 +
.../gremlin/test/features/filter/Aggregate.feature | 37 +
.../gremlin/test/features/filter/All.feature | 18 +-
.../gremlin/test/features/filter/And.feature | 2 +-
.../gremlin/test/features/filter/Any.feature | 18 +-
.../gremlin/test/features/filter/Coin.feature | 20 +-
.../test/features/filter/CyclicPath.feature | 2 +-
.../gremlin/test/features/filter/Dedup.feature | 13 +-
.../gremlin/test/features/filter/Discard.feature | 109 +
.../gremlin/test/features/filter/Drop.feature | 2 +-
.../gremlin/test/features/filter/Filter.feature | 2 +-
.../gremlin/test/features/filter/Has.feature | 94 +-
.../gremlin/test/features/filter/HasId.feature | 45 +-
.../gremlin/test/features/filter/HasKey.feature | 2 +-
.../gremlin/test/features/filter/HasLabel.feature | 47 +-
.../gremlin/test/features/filter/HasNot.feature | 2 +-
.../gremlin/test/features/filter/HasValue.feature | 2 +-
.../gremlin/test/features/filter/Is.feature | 41 +-
.../gremlin/test/features/filter/None.feature | 121 +-
.../gremlin/test/features/filter/Not.feature | 61 +
.../gremlin/test/features/filter/Or.feature | 5 +-
.../gremlin/test/features/filter/Range.feature | 391 +-
.../gremlin/test/features/filter/Sample.feature | 49 +-
.../test/features/filter/SimplePath.feature | 2 +-
.../gremlin/test/features/filter/Tail.feature | 110 +-
.../gremlin/test/features/filter/TypeOf.feature | 281 +
.../test/features/filter/TypeOfGraph.feature | 143 +
.../gremlin/test/features/filter/Where.feature | 49 +-
.../integrated/AdjacentToIncidentStrategy.feature | 2 +-
.../ByModulatorOptimizationStrategy.feature | 2 +-
.../ComputerFinalizationStrategy.feature | 2 +-
.../ComputerVerificationStrategy.feature | 2 +-
.../features/integrated/ConnectiveStrategy.feature | 2 +-
.../test/features/integrated/CountStrategy.feature | 2 +-
.../features/integrated/EarlyLimitStrategy.feature | 14 +-
.../EdgeLabelVerificationStrategy.feature | 2 +-
.../features/integrated/ElementIdStrategy.feature | 2 +-
.../integrated/FilterRankingStrategy.feature | 2 +-
.../integrated/GraphFilterStrategy.feature | 2 +-
.../integrated/HaltedTraverserStrategy.feature | 2 +-
.../integrated/IdentityRemovalStrategy.feature | 2 +-
.../integrated/IncidentToAdjacentStrategy.feature | 2 +-
.../integrated/InlineFilterStrategy.feature | 2 +-
.../integrated/LambdaRestrictionStrategy.feature | 2 +-
.../integrated/LazyBarrierStrategy.feature | 2 +-
.../integrated/MatchAlgorithmStrategy.feature | 2 +-
.../integrated/MatchPredicateStrategy.feature | 2 +-
.../MessagePassingReductionStrategy.feature | 2 +-
.../test/features/integrated/Miscellaneous.feature | 5 +-
.../features/integrated/OptionsStrategy.feature | 2 +-
.../features/integrated/OrderLimitStrategy.feature | 2 +-
.../features/integrated/PartitionStrategy.feature | 2 +-
.../integrated/PathProcessorStrategy.feature | 2 +-
.../integrated/PathRetractionStrategy.feature | 2 +-
.../gremlin/test/features/integrated/Paths.feature | 13 +-
.../integrated/ProductiveByStrategy.feature | 2 +-
.../features/integrated/ProfileStrategy.feature | 2 +-
.../features/integrated/ReadOnlyStrategy.feature | 2 +-
.../features/integrated/Recommendation.feature | 6 +-
.../integrated/ReferenceElementStrategy.feature | 2 +-
.../integrated/RepeatUnrollStrategy.feature | 233 +-
.../ReservedKeysVerificationStrategy.feature | 2 +-
.../test/features/integrated/SeedStrategy.feature | 2 +-
.../StandardVerificationStrategy.feature | 2 +-
.../features/integrated/SubgraphStrategy.feature | 19 +-
.../VertexProgramRestrictionStrategy.feature | 2 +-
.../integrated/VertexProgramStrategy.feature | 2 +-
.../gremlin/test/features/map/AddEdge.feature | 164 +-
.../gremlin/test/features/map/AddVertex.feature | 115 +-
.../gremlin/test/features/map/AsBool.feature | 202 +
.../gremlin/test/features/map/AsDate.feature | 36 +-
.../gremlin/test/features/map/AsNumber.feature | 349 +
.../gremlin/test/features/map/AsString.feature | 28 +-
.../gremlin/test/features/map/Call.feature | 3 +-
.../gremlin/test/features/map/Coalesce.feature | 2 +-
.../gremlin/test/features/map/Combine.feature | 29 +-
.../gremlin/test/features/map/Concat.feature | 16 +-
.../gremlin/test/features/map/Conjoin.feature | 37 +-
.../test/features/map/ConnectedComponent.feature | 2 +-
.../gremlin/test/features/map/Constant.feature | 2 +-
.../gremlin/test/features/map/Count.feature | 2 +-
.../gremlin/test/features/map/DateAdd.feature | 21 +-
.../gremlin/test/features/map/DateDiff.feature | 53 +-
.../gremlin/test/features/map/Difference.feature | 32 +-
.../gremlin/test/features/map/Disjunct.feature | 29 +-
.../gremlin/test/features/map/Edge.feature | 190 +-
.../gremlin/test/features/map/Element.feature | 14 +-
.../gremlin/test/features/map/ElementMap.feature | 2 +-
.../gremlin/test/features/map/FlatMap.feature | 16 +-
.../gremlin/test/features/map/Fold.feature | 26 +-
.../gremlin/test/features/map/Format.feature | 2 +-
.../gremlin/test/features/map/Index.feature | 2 +-
.../gremlin/test/features/map/Intersect.feature | 26 +-
.../gremlin/test/features/map/LTrim.feature | 8 +-
.../gremlin/test/features/map/Length.feature | 5 +-
.../gremlin/test/features/map/Loops.feature | 2 +-
.../gremlin/test/features/map/Map.feature | 2 +-
.../gremlin/test/features/map/Match.feature | 2 +-
.../gremlin/test/features/map/Math.feature | 9 +-
.../gremlin/test/features/map/Max.feature | 2 +-
.../gremlin/test/features/map/Mean.feature | 9 +-
.../gremlin/test/features/map/Merge.feature | 35 +-
.../gremlin/test/features/map/MergeEdge.feature | 364 +-
.../gremlin/test/features/map/MergeVertex.feature | 167 +-
.../gremlin/test/features/map/Min.feature | 5 +-
.../gremlin/test/features/map/Order.feature | 2 +-
.../gremlin/test/features/map/PageRank.feature | 2 +-
.../gremlin/test/features/map/Path.feature | 2 +-
.../gremlin/test/features/map/PeerPressure.feature | 2 +-
.../gremlin/test/features/map/Product.feature | 26 +-
.../gremlin/test/features/map/Project.feature | 2 +-
.../gremlin/test/features/map/Properties.feature | 79 +-
.../gremlin/test/features/map/RTrim.feature | 8 +-
.../gremlin/test/features/map/Replace.feature | 5 +-
.../gremlin/test/features/map/Reverse.feature | 5 +-
.../gremlin/test/features/map/Select.feature | 11 +-
.../gremlin/test/features/map/ShortestPath.feature | 8 +-
.../gremlin/test/features/map/Split.feature | 5 +-
.../gremlin/test/features/map/Substring.feature | 5 +-
.../gremlin/test/features/map/Sum.feature | 81 +-
.../gremlin/test/features/map/ToLower.feature | 8 +-
.../gremlin/test/features/map/ToUpper.feature | 22 +-
.../gremlin/test/features/map/Trim.feature | 8 +-
.../gremlin/test/features/map/Unfold.feature | 2 +-
.../gremlin/test/features/map/ValueMap.feature | 2 +-
.../gremlin/test/features/map/Vertex.feature | 142 +-
.../test/features/semantics/Comparability.feature | 415 +-
.../test/features/semantics/Equality.feature | 42 +-
.../test/features/semantics/Orderability.feature | 149 +-
.../test/features/sideEffect/Aggregate.feature | 515 +-
.../gremlin/test/features/sideEffect/Fail.feature | 2 +-
.../gremlin/test/features/sideEffect/Group.feature | 78 +-
.../test/features/sideEffect/GroupCount.feature | 40 +-
.../test/features/sideEffect/Inject.feature | 40 +-
.../gremlin/test/features/sideEffect/Read.feature | 2 +-
.../gremlin/test/features/sideEffect/Sack.feature | 247 +-
.../test/features/sideEffect/SideEffect.feature | 14 +-
.../test/features/sideEffect/SideEffectCap.feature | 6 +-
.../gremlin/test/features/sideEffect/Store.feature | 95 -
.../test/features/sideEffect/Subgraph.feature | 21 +-
.../gremlin/test/features/sideEffect/Tree.feature | 37 +-
.../gremlin/test/features/sideEffect/Write.feature | 52 +-
gremlin-test/src/main/static/NOTICE | 2 +-
.../gremlin/process/FeatureCoverageTest.java | 212 -
.../gremlin/structure/ExceptionCoverageTest.java | 2 +-
gremlin-tools/gremlin-benchmark/README.asciidoc | 24 +-
gremlin-tools/gremlin-benchmark/pom.xml | 2 +-
.../benchmark/util/AbstractBenchmarkBase.java | 4 +-
.../benchmark/util/AbstractGraphBenchmark.java | 2 +-
.../util/AbstractGraphMutateBenchmark.java | 2 +-
.../driver/GraphBinaryReaderWriterBenchmark.java | 30 +-
.../gremlin/driver/GraphSONMapperBenchmark.java | 34 +-
.../gremlin/driver/SerializationBenchmark.java | 51 +-
.../gremlin/process/ApplyStrategiesBenchmark.java | 150 +
.../gremlin/process/GraphMutateBenchmark.java | 2 +-
.../gremlin/process/GraphTraversalBenchmark.java | 2 +-
.../gremlin/process/RangeTraversalBenchmark.java | 54 +
.../process/TraversalConstructionBenchmark.java | 10 +-
.../gremlin/process/TraversalLockBenchmark.java | 135 +
.../jsr223/GremlinGroovyScriptEngineBenchmark.java | 2 +-
.../jsr223/GremlinScriptCheckerBenchmark.java | 2 +-
.../tinkerpop/jsr223/JavaTranslatorBenchmark.java | 76 -
gremlin-tools/gremlin-coverage/pom.xml | 7 +-
.../conf/test-ws-gremlin.yaml | 4 -
gremlin-tools/gremlin-socket-server/pom.xml | 12 +-
.../gremlin/socket/server/SimpleSocketServer.java | 2 +-
.../gremlin/socket/server/SocketServerRunner.java | 11 +-
.../socket/server/SocketServerSettings.java | 8 +-
.../gremlin/socket/server/TestChannelizers.java | 105 -
.../gremlin/socket/server/TestHandlers.java | 2 +-
.../socket/server/TestWSGremlinInitializer.java | 201 -
gremlin-tools/pom.xml | 2 +-
gremlin-util/pom.xml | 6 +-
.../tinkerpop/gremlin/util/MessageSerializer.java | 30 +-
.../org/apache/tinkerpop/gremlin/util/Tokens.java | 79 +-
.../gremlin/util/message/RequestMessage.java | 207 +-
.../gremlin/util/message/ResponseMessage.java | 119 +-
.../gremlin/util/message/ResponseResult.java | 21 +-
.../gremlin/util/message/ResponseStatus.java | 25 +-
.../gremlin/util/message/ResponseStatusCode.java | 195 -
.../ser/AbstractGraphSONMessageSerializerV1.java | 229 -
.../ser/AbstractGraphSONMessageSerializerV2.java | 306 -
.../ser/AbstractGraphSONMessageSerializerV4.java | 505 +
.../util/ser/AbstractMessageSerializer.java | 4 +-
.../util/ser/GraphBinaryMessageSerializerV1.java | 276 -
.../util/ser/GraphBinaryMessageSerializerV4.java | 332 +
.../util/ser/GraphSONMessageSerializerV1.java | 125 -
.../util/ser/GraphSONMessageSerializerV2.java | 136 -
.../util/ser/GraphSONMessageSerializerV3.java | 138 -
.../util/ser/GraphSONMessageSerializerV4.java | 63 +
.../ser/GraphSONUntypedMessageSerializerV1.java | 126 -
.../ser/GraphSONUntypedMessageSerializerV2.java | 129 -
.../ser/GraphSONUntypedMessageSerializerV3.java | 128 -
.../ser/GraphSONUntypedMessageSerializerV4.java | 66 +
.../gremlin/util/ser/MessageTextSerializer.java | 42 -
.../tinkerpop/gremlin/util/ser/NettyBuffer.java | 2 +-
.../gremlin/util/ser/NettyBufferFactory.java | 2 +-
.../util/ser/RequestMessageGryoSerializer.java | 57 -
.../util/ser/ResponseMessageGryoSerializer.java | 67 -
.../tinkerpop/gremlin/util/ser/SerTokens.java | 27 +-
.../gremlin/util/ser/SerializationException.java | 2 +-
.../tinkerpop/gremlin/util/ser/Serializers.java | 58 +-
.../util/ser/binary/RequestMessageSerializer.java | 57 +-
.../util/ser/binary/ResponseMessageSerializer.java | 89 -
.../structure/io/AbstractCompatibilityTest.java | 38 +-
.../io/AbstractTypedCompatibilityTest.java | 882 +-
.../io/AbstractUntypedCompatibilityTest.java | 250 +-
.../tinkerpop/gremlin/structure/io/Model.java | 286 +-
.../graphbinary/GraphBinaryCompatibilityTest.java | 20 +-
.../graphson/GraphSONTypedCompatibilityTest.java | 38 +-
.../graphson/GraphSONUntypedCompatibilityTest.java | 38 +-
.../util/MockitoHamcrestMatcherAdapter.java | 2 +-
.../gremlin/util/message/RequestMessageTest.java | 170 +
.../util/message/ResponseStatusCodeTest.java | 36 -
.../AbstractGraphSONMessageSerializerV1Test.java | 53 -
.../AbstractGraphSONMessageSerializerV2Test.java | 53 -
.../AbstractGraphSONMessageSerializerV4Test.java | 52 +
.../gremlin/util/ser/AbstractRoundTripTest.java | 126 +-
.../util/ser/GraphSONMessageSerializerV1Test.java | 335 -
.../util/ser/GraphSONMessageSerializerV2Test.java | 628 -
.../GraphSONMessageSerializerV3RoundTripTest.java | 59 -
.../util/ser/GraphSONMessageSerializerV3Test.java | 419 -
.../GraphSONMessageSerializerV4RoundTripTest.java | 59 +
.../util/ser/GraphSONMessageSerializerV4Test.java | 278 +
.../GraphSONUntypedMessageSerializerV1Test.java | 512 -
.../GraphSONUntypedMessageSerializerV2Test.java | 479 -
.../GraphSONUntypedMessageSerializerV3Test.java | 471 -
.../GraphSONUntypedMessageSerializerV4Test.java | 166 +
.../gremlin/util/ser/NettyBufferFactoryTest.java | 2 +-
.../binary/GraphBinaryMessageSerializerV1Test.java | 279 -
.../binary/GraphBinaryMessageSerializerV4Test.java | 223 +
.../GraphBinaryReaderWriterRoundTripTest.java | 2 +-
.../util/ser/binary/MessageSerializerTest.java | 190 +
.../ser/binary/TypeSerializerFailureTests.java | 13 +-
.../ser/binary/TypeSerializerRegistryTest.java | 2 +-
.../util/ser/binary/types/CharSerializerTest.java | 2 +-
.../util/ser/binary/types/sample/SamplePerson.java | 2 +-
.../types/sample/SamplePersonSerializer.java | 2 +-
.../types/sample/SamplePersonSerializerTest.java | 24 +-
.../structure/io/graphbinary/barrier-v1.gbin | Bin 16 -> 0 bytes
.../structure/io/graphbinary/bigdecimal-v1.gbin | Bin 25 -> 0 bytes
.../structure/io/graphbinary/binding-v1.gbin | Bin 13 -> 0 bytes
.../structure/io/graphbinary/bulkset-v1.gbin | Bin 43 -> 0 bytes
.../gremlin/structure/io/graphbinary/byte-v1.gbin | Bin 3 -> 0 bytes
.../structure/io/graphbinary/bytecode-v1.gbin | Bin 80 -> 0 bytes
.../structure/io/graphbinary/cardinality-v1.gbin | Bin 12 -> 0 bytes
.../gremlin/structure/io/graphbinary/char-v1.gbin | Bin 3 -> 0 bytes
.../gremlin/structure/io/graphbinary/class-v1.gbin | Bin 18 -> 0 bytes
.../structure/io/graphbinary/column-v1.gbin | Bin 12 -> 0 bytes
.../gremlin/structure/io/graphbinary/date-v1.gbin | Bin 10 -> 0 bytes
.../structure/io/graphbinary/double-v1.gbin | Bin 10 -> 0 bytes
.../structure/io/graphbinary/duration-v1.gbin | Bin 14 -> 0 bytes
.../gremlin/structure/io/graphbinary/edge-v1.gbin | Bin 81 -> 0 bytes
.../gremlin/structure/io/graphbinary/float-v1.gbin | Bin 6 -> 0 bytes
.../structure/io/graphbinary/inetaddress-v1.gbin | Bin 10 -> 0 bytes
.../structure/io/graphbinary/instant-v1.gbin | Bin 14 -> 0 bytes
.../structure/io/graphbinary/integer-v1.gbin | Bin 6 -> 0 bytes
.../structure/io/graphbinary/lambda-v1.gbin | Bin 40 -> 0 bytes
.../gremlin/structure/io/graphbinary/list-v1.gbin | Bin 27 -> 0 bytes
.../structure/io/graphbinary/localdate-v1.gbin | Bin 8 -> 0 bytes
.../structure/io/graphbinary/localdatetime-v1.gbin | Bin 16 -> 0 bytes
.../structure/io/graphbinary/localtime-v1.gbin | Bin 10 -> 0 bytes
.../gremlin/structure/io/graphbinary/long-v1.gbin | Bin 10 -> 0 bytes
.../gremlin/structure/io/graphbinary/map-v1.gbin | Bin 75 -> 0 bytes
.../structure/io/graphbinary/metrics-v1.gbin | Bin 307 -> 0 bytes
.../structure/io/graphbinary/monthday-v1.gbin | Bin 4 -> 0 bytes
.../io/graphbinary/offsetdatetime-v1.gbin | Bin 20 -> 0 bytes
.../structure/io/graphbinary/offsettime-v1.gbin | Bin 14 -> 0 bytes
.../structure/io/graphbinary/operator-v1.gbin | Bin 11 -> 0 bytes
.../gremlin/structure/io/graphbinary/order-v1.gbin | Bin 15 -> 0 bytes
.../gremlin/structure/io/graphbinary/p-v1.gbin | Bin 18 -> 0 bytes
.../gremlin/structure/io/graphbinary/pand-v1.gbin | Bin 49 -> 0 bytes
.../gremlin/structure/io/graphbinary/path-v1.gbin | Bin 96 -> 0 bytes
.../structure/io/graphbinary/period-v1.gbin | Bin 14 -> 0 bytes
.../gremlin/structure/io/graphbinary/pick-v1.gbin | Bin 11 -> 0 bytes
.../gremlin/structure/io/graphbinary/pop-v1.gbin | Bin 11 -> 0 bytes
.../gremlin/structure/io/graphbinary/por-v1.gbin | Bin 64 -> 0 bytes
.../structure/io/graphbinary/pwithin-v1.gbin | Bin 22 -> 0 bytes
.../structure/io/graphbinary/pwithout-v1.gbin | Bin 29 -> 0 bytes
.../gremlin/structure/io/graphbinary/scope-v1.gbin | Bin 13 -> 0 bytes
.../gremlin/structure/io/graphbinary/set-v1.gbin | Bin 27 -> 0 bytes
.../gremlin/structure/io/graphbinary/short-v1.gbin | Bin 4 -> 0 bytes
.../gremlin/structure/io/graphbinary/t-v1.gbin | Bin 13 -> 0 bytes
.../gremlin/structure/io/graphbinary/textp-v1.gbin | Bin 29 -> 0 bytes
.../structure/io/graphbinary/timestamp-v1.gbin | Bin 10 -> 0 bytes
.../structure/io/graphbinary/tinkergraph-v1.gbin | Bin 2264 -> 0 bytes
.../io/graphbinary/traversalmetrics-v1.gbin | Bin 593 -> 0 bytes
.../structure/io/graphbinary/traverser-v1.gbin | Bin 415 -> 0 bytes
.../structure/io/graphbinary/vertex-v1.gbin | Bin 405 -> 0 bytes
.../io/graphbinary/vertexproperty-v1.gbin | Bin 35 -> 0 bytes
.../gremlin/structure/io/graphbinary/year-v1.gbin | Bin 6 -> 0 bytes
.../structure/io/graphbinary/yearmonth-v1.gbin | Bin 7 -> 0 bytes
.../structure/io/graphbinary/zoneddatetime-v1.gbin | Bin 20 -> 0 bytes
.../structure/io/graphbinary/zoneoffset-v1.gbin | Bin 6 -> 0 bytes
.../authenticationchallenge-v1-no-types.json | 1 -
.../authenticationchallenge-v2-no-types.json | 1 -
.../io/graphson/authenticationchallenge-v2.json | 12 -
.../authenticationchallenge-v3-no-types.json | 1 -
.../io/graphson/authenticationchallenge-v3.json | 18 -
.../authenticationresponse-v1-no-types.json | 1 -
.../authenticationresponse-v2-no-types.json | 1 -
.../io/graphson/authenticationresponse-v2.json | 9 -
.../authenticationresponse-v3-no-types.json | 1 -
.../io/graphson/authenticationresponse-v3.json | 9 -
.../gremlin/structure/io/graphson/barrier-v2.json | 4 -
.../gremlin/structure/io/graphson/barrier-v3.json | 4 -
.../structure/io/graphson/bigdecimal-v2.json | 4 -
.../structure/io/graphson/bigdecimal-v3.json | 4 -
.../structure/io/graphson/biginteger-v2.json | 4 -
.../structure/io/graphson/biginteger-v3.json | 4 -
.../gremlin/structure/io/graphson/binding-v2.json | 10 -
.../gremlin/structure/io/graphson/binding-v3.json | 10 -
.../gremlin/structure/io/graphson/bulkset-v2.json | 1 -
.../gremlin/structure/io/graphson/bulkset-v3.json | 10 -
.../gremlin/structure/io/graphson/byte-v2.json | 4 -
.../gremlin/structure/io/graphson/byte-v3.json | 4 -
.../structure/io/graphson/bytebuffer-v2.json | 4 -
.../structure/io/graphson/bytebuffer-v3.json | 4 -
.../gremlin/structure/io/graphson/bytecode-v2.json | 6 -
.../gremlin/structure/io/graphson/bytecode-v3.json | 6 -
.../structure/io/graphson/cardinality-v2.json | 4 -
.../structure/io/graphson/cardinality-v3.json | 4 -
.../gremlin/structure/io/graphson/char-v2.json | 4 -
.../gremlin/structure/io/graphson/char-v3.json | 4 -
.../gremlin/structure/io/graphson/class-v2.json | 4 -
.../gremlin/structure/io/graphson/class-v3.json | 4 -
.../gremlin/structure/io/graphson/column-v2.json | 4 -
.../gremlin/structure/io/graphson/column-v3.json | 4 -
.../gremlin/structure/io/graphson/date-v2.json | 4 -
.../gremlin/structure/io/graphson/date-v3.json | 4 -
.../structure/io/graphson/direction-v3.json | 4 -
.../gremlin/structure/io/graphson/double-v2.json | 4 -
.../gremlin/structure/io/graphson/double-v3.json | 4 -
.../gremlin/structure/io/graphson/duration-v2.json | 4 -
.../gremlin/structure/io/graphson/duration-v3.json | 4 -
.../structure/io/graphson/edge-v1-no-types.json | 1 -
.../structure/io/graphson/edge-v2-no-types.json | 1 -
.../gremlin/structure/io/graphson/edge-v2.json | 32 -
.../structure/io/graphson/edge-v3-no-types.json | 1 -
.../gremlin/structure/io/graphson/edge-v3.json | 32 -
.../gremlin/structure/io/graphson/float-v2.json | 4 -
.../gremlin/structure/io/graphson/float-v3.json | 4 -
.../structure/io/graphson/inetaddress-v2.json | 4 -
.../structure/io/graphson/inetaddress-v3.json | 4 -
.../gremlin/structure/io/graphson/instant-v2.json | 4 -
.../gremlin/structure/io/graphson/instant-v3.json | 4 -
.../gremlin/structure/io/graphson/integer-v2.json | 4 -
.../gremlin/structure/io/graphson/integer-v3.json | 4 -
.../gremlin/structure/io/graphson/lambda-v2.json | 8 -
.../gremlin/structure/io/graphson/lambda-v3.json | 8 -
.../gremlin/structure/io/graphson/list-v3.json | 7 -
.../structure/io/graphson/localdate-v2.json | 4 -
.../structure/io/graphson/localdate-v3.json | 4 -
.../structure/io/graphson/localdatetime-v2.json | 4 -
.../structure/io/graphson/localdatetime-v3.json | 4 -
.../structure/io/graphson/localtime-v2.json | 4 -
.../structure/io/graphson/localtime-v3.json | 4 -
.../gremlin/structure/io/graphson/long-v2.json | 4 -
.../gremlin/structure/io/graphson/long-v3.json | 4 -
.../gremlin/structure/io/graphson/map-v3.json | 25 -
.../gremlin/structure/io/graphson/metrics-v2.json | 54 -
.../gremlin/structure/io/graphson/metrics-v3.json | 52 -
.../gremlin/structure/io/graphson/monthday-v2.json | 4 -
.../gremlin/structure/io/graphson/monthday-v3.json | 4 -
.../structure/io/graphson/offsetdatetime-v2.json | 4 -
.../structure/io/graphson/offsetdatetime-v3.json | 4 -
.../structure/io/graphson/offsettime-v2.json | 4 -
.../structure/io/graphson/offsettime-v3.json | 4 -
.../gremlin/structure/io/graphson/operator-v2.json | 4 -
.../gremlin/structure/io/graphson/operator-v3.json | 4 -
.../gremlin/structure/io/graphson/order-v2.json | 4 -
.../gremlin/structure/io/graphson/order-v3.json | 4 -
.../gremlin/structure/io/graphson/p-v2.json | 10 -
.../gremlin/structure/io/graphson/p-v3.json | 10 -
.../gremlin/structure/io/graphson/pand-v2.json | 25 -
.../gremlin/structure/io/graphson/pand-v3.json | 25 -
.../structure/io/graphson/path-v1-no-types.json | 1 -
.../structure/io/graphson/path-v2-no-types.json | 1 -
.../gremlin/structure/io/graphson/path-v2.json | 34 -
.../structure/io/graphson/path-v3-no-types.json | 1 -
.../gremlin/structure/io/graphson/path-v3.json | 49 -
.../gremlin/structure/io/graphson/period-v2.json | 4 -
.../gremlin/structure/io/graphson/period-v3.json | 4 -
.../gremlin/structure/io/graphson/pick-v2.json | 4 -
.../gremlin/structure/io/graphson/pick-v3.json | 4 -
.../gremlin/structure/io/graphson/pop-v2.json | 4 -
.../gremlin/structure/io/graphson/pop-v3.json | 4 -
.../gremlin/structure/io/graphson/por-v2.json | 31 -
.../gremlin/structure/io/graphson/por-v3.json | 34 -
.../io/graphson/property-v1-no-types.json | 1 -
.../io/graphson/property-v2-no-types.json | 1 -
.../io/graphson/property-v3-no-types.json | 1 -
.../gremlin/structure/io/graphson/property-v3.json | 10 -
.../gremlin/structure/io/graphson/pwithin-v2.json | 10 -
.../gremlin/structure/io/graphson/pwithin-v3.json | 13 -
.../gremlin/structure/io/graphson/pwithout-v2.json | 13 -
.../gremlin/structure/io/graphson/pwithout-v3.json | 16 -
.../gremlin/structure/io/graphson/scope-v2.json | 4 -
.../gremlin/structure/io/graphson/scope-v3.json | 4 -
.../io/graphson/sessionclose-v1-no-types.json | 1 -
.../io/graphson/sessionclose-v2-no-types.json | 1 -
.../structure/io/graphson/sessionclose-v2.json | 8 -
.../io/graphson/sessionclose-v3-no-types.json | 1 -
.../structure/io/graphson/sessionclose-v3.json | 9 -
.../io/graphson/sessioneval-v1-no-types.json | 1 -
.../io/graphson/sessioneval-v2-no-types.json | 1 -
.../structure/io/graphson/sessioneval-v2.json | 16 -
.../io/graphson/sessioneval-v3-no-types.json | 1 -
.../structure/io/graphson/sessioneval-v3.json | 15 -
.../graphson/sessionevalaliased-v1-no-types.json | 1 -
.../graphson/sessionevalaliased-v2-no-types.json | 1 -
.../io/graphson/sessionevalaliased-v2.json | 19 -
.../graphson/sessionevalaliased-v3-no-types.json | 1 -
.../io/graphson/sessionevalaliased-v3.json | 18 -
.../io/graphson/sessionlesseval-v1-no-types.json | 1 -
.../io/graphson/sessionlesseval-v2-no-types.json | 1 -
.../structure/io/graphson/sessionlesseval-v2.json | 15 -
.../io/graphson/sessionlesseval-v3-no-types.json | 1 -
.../structure/io/graphson/sessionlesseval-v3.json | 15 -
.../sessionlessevalaliased-v1-no-types.json | 1 -
.../sessionlessevalaliased-v2-no-types.json | 1 -
.../io/graphson/sessionlessevalaliased-v2.json | 18 -
.../sessionlessevalaliased-v3-no-types.json | 1 -
.../io/graphson/sessionlessevalaliased-v3.json | 18 -
.../gremlin/structure/io/graphson/set-v3.json | 7 -
.../gremlin/structure/io/graphson/short-v2.json | 4 -
.../gremlin/structure/io/graphson/short-v3.json | 4 -
.../io/graphson/standardresult-v1-no-types.json | 1 -
.../io/graphson/standardresult-v2-no-types.json | 1 -
.../structure/io/graphson/standardresult-v2.json | 111 -
.../io/graphson/standardresult-v3-no-types.json | 1 -
.../structure/io/graphson/standardresult-v3.json | 120 -
.../gremlin/structure/io/graphson/t-v2.json | 4 -
.../gremlin/structure/io/graphson/t-v3.json | 4 -
.../gremlin/structure/io/graphson/textp-v2.json | 7 -
.../gremlin/structure/io/graphson/textp-v3.json | 7 -
.../structure/io/graphson/timestamp-v2.json | 4 -
.../structure/io/graphson/timestamp-v3.json | 4 -
.../structure/io/graphson/tinkergraph-v2.json | 829 -
.../structure/io/graphson/tinkergraph-v3.json | 829 -
.../structure/io/graphson/traversalmetrics-v2.json | 114 -
.../structure/io/graphson/traversalmetrics-v3.json | 109 -
.../structure/io/graphson/traverser-v2.json | 109 -
.../structure/io/graphson/traverser-v3.json | 109 -
.../gremlin/structure/io/graphson/uuid-v3.json | 4 -
.../structure/io/graphson/vertex-v1-no-types.json | 1 -
.../structure/io/graphson/vertex-v2-no-types.json | 1 -
.../gremlin/structure/io/graphson/vertex-v2.json | 100 -
.../structure/io/graphson/vertex-v3-no-types.json | 1 -
.../gremlin/structure/io/graphson/vertex-v3.json | 100 -
.../io/graphson/vertexproperty-v1-no-types.json | 1 -
.../io/graphson/vertexproperty-v2-no-types.json | 1 -
.../structure/io/graphson/vertexproperty-v2.json | 11 -
.../io/graphson/vertexproperty-v3-no-types.json | 1 -
.../structure/io/graphson/vertexproperty-v3.json | 11 -
.../gremlin/structure/io/graphson/year-v2.json | 4 -
.../gremlin/structure/io/graphson/year-v3.json | 4 -
.../structure/io/graphson/yearmonth-v2.json | 4 -
.../structure/io/graphson/yearmonth-v3.json | 4 -
.../structure/io/graphson/zoneddatetime-v2.json | 4 -
.../structure/io/graphson/zoneddatetime-v3.json | 4 -
.../structure/io/graphson/zoneoffset-v2.json | 4 -
.../structure/io/graphson/zoneoffset-v3.json | 4 -
gremlint/README.md | 115 -
gremlint/package-lock.json | 11089 -
gremlint/package.json | 53 -
gremlint/pom.xml | 223 -
.../__tests__/closureIndentation.test.ts | 349 -
.../curlyBracketMultilineWrapping.test.ts | 171 -
.../__tests__/curlyBracketWrapping.test.ts | 111 -
.../formatQuery/__tests__/defaultConfig.test.ts | 79 -
.../determineWhatPartsOfCodeAreGremlin.test.ts | 125 -
.../__tests__/dotsAfterLineBreaks.test.ts | 61 -
.../invalidIndentationAndMaxLineLength.test.ts | 31 -
.../formatQuery/__tests__/maxLineLength.test.ts | 70 -
.../__tests__/modulatorIndentation.test.ts | 841 -
.../__tests__/modulatorWrapping.test.ts | 128 -
.../__tests__/multipleQueriesAtOnce.test.ts | 68 -
.../__tests__/nonGremlinIndentation.test.ts | 79 -
.../__tests__/nonMethodIndentation.test.ts | 40 -
gremlint/src/formatQuery/consts.ts | 35 -
.../formatQuery/formatSyntaxTrees/formatClosure.ts | 89 -
.../formatQuery/formatSyntaxTrees/formatMethod.ts | 102 -
.../formatSyntaxTrees/formatNonGremlin.ts | 30 -
.../formatQuery/formatSyntaxTrees/formatString.ts | 31 -
.../formatTraversal/getStepGroups/index.ts | 58 -
.../getStepGroups/reduceFirstStepInStepGroup.ts | 70 -
.../getStepGroups/reduceLastStepInStepGroup.ts | 76 -
.../getStepGroups/reduceMiddleStepInStepGroup.ts | 58 -
.../getStepGroups/reduceSingleStepInStepGroup.ts | 81 -
.../formatTraversal/getStepGroups/utils.ts | 124 -
.../formatSyntaxTrees/formatTraversal/index.ts | 87 -
.../formatQuery/formatSyntaxTrees/formatWord.ts | 33 -
.../src/formatQuery/formatSyntaxTrees/index.ts | 49 -
.../src/formatQuery/formatSyntaxTrees/utils.ts | 73 -
gremlint/src/formatQuery/index.ts | 54 -
.../__tests__/extractGremlinQueries.test.ts | 564 -
.../parseToSyntaxTrees/extractGremlinQueries.ts | 173 -
.../src/formatQuery/parseToSyntaxTrees/index.ts | 391 -
.../recreateQueryOnelinerFromSyntaxTree.ts | 75 -
.../recreateQueryStringFromFormattedSyntaxTrees.ts | 97 -
gremlint/src/formatQuery/types.ts | 169 -
gremlint/src/formatQuery/utils.ts | 40 -
gremlint/src/index.ts | 20 -
gremlint/tslint.json | 6 -
hadoop-gremlin/README.md | 102 +-
hadoop-gremlin/conf/hadoop-graphson.properties | 2 +-
.../conf/hadoop-grateful-gryo.properties | 2 +-
hadoop-gremlin/conf/hadoop-gryo.properties | 2 +-
hadoop-gremlin/conf/hadoop-script.properties | 2 +-
hadoop-gremlin/pom.xml | 63 +-
.../apache/tinkerpop/gremlin/hadoop/Constants.java | 2 +-
.../gremlin/hadoop/jsr223/HadoopGremlinPlugin.java | 15 +-
.../hadoop/jsr223/HadoopRemoteAcceptor.java | 131 -
.../computer/AbstractHadoopGraphComputer.java | 2 +-
.../process/computer/GraphFilterInputFormat.java | 2 +-
.../process/computer/GraphFilterRecordReader.java | 2 +-
.../hadoop/process/computer/HadoopCombine.java | 2 +-
.../gremlin/hadoop/process/computer/HadoopMap.java | 2 +-
.../hadoop/process/computer/HadoopReduce.java | 2 +-
.../process/computer/PersistResultGraphAware.java | 2 +-
.../computer/mapreduce/MapReduceGraphComputer.java | 2 +-
.../traversal/step/sideEffect/HadoopIoStep.java | 2 +-
.../traversal/strategy/HadoopIoStrategy.java | 2 +-
.../computer/util/ComputerSubmissionHelper.java | 5 +-
.../process/computer/util/MapReduceHelper.java | 2 +-
.../hadoop/structure/HadoopConfiguration.java | 7 +-
.../gremlin/hadoop/structure/HadoopEdge.java | 2 +-
.../gremlin/hadoop/structure/HadoopElement.java | 2 +-
.../gremlin/hadoop/structure/HadoopGraph.java | 92 +-
.../gremlin/hadoop/structure/HadoopProperty.java | 2 +-
.../gremlin/hadoop/structure/HadoopVertex.java | 2 +-
.../hadoop/structure/HadoopVertexProperty.java | 2 +-
.../hadoop/structure/io/CommonFileInputFormat.java | 2 +-
.../structure/io/CommonFileOutputFormat.java | 2 +-
.../hadoop/structure/io/FileSystemStorage.java | 2 +-
.../hadoop/structure/io/GraphFilterAware.java | 2 +-
.../hadoop/structure/io/HadoopEdgeIterator.java | 2 +-
.../hadoop/structure/io/HadoopElementIterator.java | 2 +-
.../hadoop/structure/io/HadoopPoolShimService.java | 2 +-
.../gremlin/hadoop/structure/io/HadoopPools.java | 2 +-
.../structure/io/HadoopPoolsConfigurable.java | 2 +-
.../hadoop/structure/io/HadoopVertexIterator.java | 2 +-
.../hadoop/structure/io/HiddenFileFilter.java | 2 +-
.../hadoop/structure/io/InputOutputHelper.java | 2 +-
.../hadoop/structure/io/ObjectWritable.java | 2 +-
.../structure/io/ObjectWritableComparator.java | 2 +-
.../structure/io/ObjectWritableIterator.java | 2 +-
.../gremlin/hadoop/structure/io/TextIterator.java | 2 +-
.../hadoop/structure/io/VertexWritable.java | 2 +-
.../structure/io/VertexWritableIterator.java | 2 +-
.../structure/io/graphson/GraphSONInputFormat.java | 2 +-
.../io/graphson/GraphSONOutputFormat.java | 2 +-
.../io/graphson/GraphSONRecordReader.java | 2 +-
.../io/graphson/GraphSONRecordWriter.java | 2 +-
.../hadoop/structure/io/gryo/GryoInputFormat.java | 2 +-
.../hadoop/structure/io/gryo/GryoOutputFormat.java | 2 +-
.../hadoop/structure/io/gryo/GryoRecordReader.java | 2 +-
.../hadoop/structure/io/gryo/GryoRecordWriter.java | 2 +-
.../structure/io/script/ScriptInputFormat.java | 2 +-
.../structure/io/script/ScriptOutputFormat.java | 2 +-
.../structure/io/script/ScriptRecordReader.java | 2 +-
.../structure/io/script/ScriptRecordWriter.java | 2 +-
.../gremlin/hadoop/structure/util/ConfUtil.java | 2 +-
.../hadoop/HadoopGraphFeatureIntegrateTest.java | 18 +-
.../gremlin/hadoop/HadoopGraphProvider.java | 2 +-
.../hadoop/jsr223/HadoopGremlinPluginTest.java | 2 +-
.../HadoopGraphProcessStandardIntegrateTest.java | 6 +-
.../computer/AbstractHadoopGraphComputerTest.java | 2 +-
.../HadoopGraphStructureStandardTest.java | 2 +-
.../hadoop/structure/io/ObjectWritableTest.java | 2 +-
.../structure/io/RecordReaderWriterTest.java | 2 +-
.../hadoop/structure/io/VertexWritableTest.java | 2 +-
.../graphson/GraphSONV2RecordReaderWriterTest.java | 2 +-
.../graphson/GraphSONV3RecordReaderFilterTest.java | 2 +-
.../graphson/GraphSONV3RecordReaderWriterTest.java | 2 +-
.../GraphSONXModuleV2RecordReaderWriterTest.java | 2 +-
.../GraphSONXModuleV3RecordReaderWriterTest.java | 2 +-
.../io/gryo/GryoRecordReaderFilterTest.java | 2 +-
.../io/gryo/GryoRecordReaderWriterTest.java | 2 +-
.../io/script/ScriptRecordReaderWriterTest.java | 2 +-
.../io.cucumber.core.backend.ObjectFactory | 1 +
.../src/test/resources/cucumber.properties | 1 -
.../src/test/resources/log4j-silent.properties | 2 +-
.../src/test/resources/log4j-test.properties | 2 +-
neo4j-gremlin/pom.xml | 255 -
.../gremlin/neo4j/jsr223/Neo4jGremlinPlugin.java | 77 -
.../gremlin/neo4j/process/traversal/LabelP.java | 62 -
.../traversal/step/sideEffect/CypherStartStep.java | 46 -
.../traversal/step/sideEffect/Neo4jGraphStep.java | 163 -
.../optimization/Neo4jGraphStepStrategy.java | 70 -
.../neo4j/process/util/Neo4jCypherIterator.java | 66 -
.../gremlin/neo4j/structure/Neo4jEdge.java | 134 -
.../gremlin/neo4j/structure/Neo4jElement.java | 83 -
.../gremlin/neo4j/structure/Neo4jGraph.java | 530 -
.../neo4j/structure/Neo4jGraphVariables.java | 178 -
.../gremlin/neo4j/structure/Neo4jHelper.java | 68 -
.../gremlin/neo4j/structure/Neo4jProperty.java | 96 -
.../gremlin/neo4j/structure/Neo4jVertex.java | 219 -
.../neo4j/structure/Neo4jVertexProperty.java | 139 -
...g.apache.tinkerpop.gremlin.jsr223.GremlinPlugin | 1 -
.../gremlin/neo4j/AbstractNeo4jGraphProvider.java | 166 -
.../gremlin/neo4j/AbstractNeo4jGremlinTest.java | 47 -
.../tinkerpop/gremlin/neo4j/NativeNeo4jSuite.java | 49 -
.../gremlin/neo4j/Neo4jGraphFeatureTest.java | 198 -
.../gremlin/neo4j/Neo4jGraphNativeNeo4jTest.java | 31 -
.../gremlin/neo4j/Neo4jGraphProvider.java | 42 -
.../neo4j/process/NativeNeo4jCypherCheck.java | 226 -
.../process/Neo4jGraphProcessStandardTest.java | 33 -
.../optimization/Neo4jGraphStepStrategyTest.java | 139 -
.../neo4j/structure/NativeNeo4jIndexCheck.java | 275 -
.../neo4j/structure/NativeNeo4jStructureCheck.java | 242 -
.../structure/Neo4jGraphStructureStandardTest.java | 32 -
.../src/test/resources/cucumber.properties | 1 -
.../src/test/resources/logback-silent.xml | 28 -
neo4j-gremlin/src/test/resources/logback-test.xml | 28 -
pom.xml | 329 +-
source-release.xml | 35 +-
spark-gremlin/pom.xml | 85 +-
.../io/gryo/CompactBufferSerializer.groovy | 2 +-
.../io/gryo/GryoDeserializationStream.groovy | 2 +-
.../gremlin/spark/jsr223/SparkGremlinPlugin.java | 2 +-
.../spark/process/computer/CombineIterator.java | 2 +-
.../spark/process/computer/MapIterator.java | 2 +-
.../spark/process/computer/MemoryAccumulator.java | 2 +-
.../spark/process/computer/ReduceIterator.java | 2 +-
.../spark/process/computer/SparkExecutor.java | 2 +-
.../spark/process/computer/SparkGraphComputer.java | 2 +-
.../spark/process/computer/SparkMemory.java | 2 +-
.../spark/process/computer/SparkMessenger.java | 2 +-
.../process/computer/payload/MessagePayload.java | 2 +-
.../spark/process/computer/payload/Payload.java | 2 +-
.../computer/payload/ViewIncomingPayload.java | 2 +-
.../computer/payload/ViewOutgoingPayload.java | 2 +-
.../process/computer/payload/ViewPayload.java | 2 +-
.../strategy/SparkVertexProgramInterceptor.java | 2 +-
.../optimization/SparkInterceptorStrategy.java | 2 +-
.../optimization/SparkSingleIterationStrategy.java | 2 +-
.../SparkCloneVertexProgramInterceptor.java | 2 +-
.../interceptor/SparkStarBarrierInterceptor.java | 2 +-
.../tinkerpop/gremlin/spark/structure/Spark.java | 2 +-
.../gremlin/spark/structure/io/InputFormatRDD.java | 2 +-
.../spark/structure/io/InputOutputHelper.java | 2 +-
.../gremlin/spark/structure/io/InputRDD.java | 2 +-
.../gremlin/spark/structure/io/InputRDDFormat.java | 2 +-
.../spark/structure/io/OutputFormatRDD.java | 2 +-
.../gremlin/spark/structure/io/OutputRDD.java | 2 +-
.../spark/structure/io/PersistedInputRDD.java | 2 +-
.../spark/structure/io/PersistedOutputRDD.java | 2 +-
.../spark/structure/io/SparkContextStorage.java | 2 +-
.../gremlin/spark/structure/io/SparkIOUtil.java | 2 +-
.../spark/structure/io/gryo/GryoRegistrator.java | 2 +-
.../structure/io/gryo/GryoSerializationStream.java | 2 +-
.../spark/structure/io/gryo/GryoSerializer.java | 2 +-
.../structure/io/gryo/GryoSerializerInstance.java | 2 +-
.../io/gryo/ObjectWritableSerializer.java | 2 +-
.../spark/structure/io/gryo/Tuple2Serializer.java | 2 +-
.../spark/structure/io/gryo/Tuple3Serializer.java | 2 +-
.../io/gryo/VertexWritableSerializer.java | 2 +-
.../structure/io/gryo/WrappedArraySerializer.java | 2 +-
.../kryoshim/unshaded/UnshadedInputAdapter.java | 2 +-
.../kryoshim/unshaded/UnshadedKryoAdapter.java | 2 +-
.../kryoshim/unshaded/UnshadedKryoShimService.java | 2 +-
.../kryoshim/unshaded/UnshadedOutputAdapter.java | 2 +-
.../unshaded/UnshadedSerializerAdapter.java | 2 +-
.../gremlin/hadoop/HadoopGremlinSuite.java | 2 +-
.../structure/io/AbstractIoRegistryCheck.java | 2 +-
.../hadoop/structure/io/AbstractStorageCheck.java | 2 +-
.../structure/io/FileSystemStorageCheck.java | 2 +-
.../tinkerpop/gremlin/spark/AbstractSparkTest.java | 2 +-
.../spark/SparkGraphFeatureIntegrateTest.java | 33 +-
.../spark/SparkGremlinGryoSerializerTest.java | 2 +-
.../tinkerpop/gremlin/spark/SparkGremlinSuite.java | 2 +-
.../tinkerpop/gremlin/spark/SparkGremlinTest.java | 2 +-
.../gremlin/spark/SparkHadoopGremlinTest.java | 2 +-
.../process/computer/CombineIteratorTest.java | 2 +-
.../spark/process/computer/LocalPropertyTest.java | 2 +-
.../SparkGraphComputerProcessIntegrateTest.java | 10 +-
...erializerGraphComputerProcessIntegrateTest.java | 6 +-
.../SparkHadoopGraphGryoSerializerProvider.java | 2 +-
.../process/computer/SparkHadoopGraphProvider.java | 10 +-
.../spark/process/computer/SparkMessengerTest.java | 2 +-
.../optimization/SparkInterceptorStrategyTest.java | 4 +-
.../SparkSingleIterationStrategyTest.java | 2 +-
.../SparkCloneVertexProgramInterceptorTest.java | 2 +-
.../gremlin/spark/structure/SparkTest.java | 2 +-
.../spark/structure/io/ExampleInputRDD.java | 2 +-
.../spark/structure/io/ExampleOutputRDD.java | 2 +-
.../spark/structure/io/InputOutputRDDTest.java | 2 +-
.../gremlin/spark/structure/io/InputRDDTest.java | 2 +-
.../gremlin/spark/structure/io/OutputRDDTest.java | 2 +-
.../io/PersistedInputOutputRDDIntegrateTest.java | 2 +-
.../structure/io/SparkContextStorageCheck.java | 2 +-
.../spark/structure/io/SparkIoRegistryCheck.java | 2 +-
.../spark/structure/io/SparkRDDLoadTest.java | 2 +-
.../spark/structure/io/ToyGraphInputRDD.java | 2 +-
.../io/gryo/GryoSerializerIntegrateTest.java | 2 +-
.../gremlin/spark/util/SugarTestHelper.java | 2 +-
.../io.cucumber.core.backend.ObjectFactory | 1 +
.../src/test/resources/cucumber.properties | 1 -
.../src/test/resources/log4j-silent.properties | 2 +-
.../src/test/resources/log4j-test.properties | 2 +-
sparql-gremlin/pom.xml | 63 -
.../apache/tinkerpop/gremlin/sparql/Prefixes.java | 65 -
.../gremlin/sparql/SparqlToGremlinCompiler.java | 318 -
.../tinkerpop/gremlin/sparql/TraversalBuilder.java | 83 -
.../gremlin/sparql/WhereTraversalBuilder.java | 128 -
.../gremlin/sparql/jsr223/SparqlGremlinPlugin.java | 63 -
.../dsl/sparql/DefaultSparqlTraversal.java | 55 -
.../traversal/dsl/sparql/SparqlTraversal.java | 62 -
.../dsl/sparql/SparqlTraversalSource.java | 182 -
.../process/traversal/strategy/SparqlStrategy.java | 89 -
...g.apache.tinkerpop.gremlin.jsr223.GremlinPlugin | 1 -
.../tinkerpop/gremlin/sparql/PrefixesTest.java | 67 -
.../dsl/sparql/SparqlTraversalSourceTest.java | 189 -
.../src/test/resources/logback-silent.xml | 26 -
sparql-gremlin/src/test/resources/logback-test.xml | 26 -
tinkergraph-gremlin/pom.xml | 30 +-
.../jsr223/TinkerGraphGremlinPlugin.java | 4 +-
.../process/computer/TinkerGraphComputer.java | 2 +-
.../process/computer/TinkerGraphComputerView.java | 2 +-
.../process/computer/TinkerMapEmitter.java | 2 +-
.../tinkergraph/process/computer/TinkerMemory.java | 2 +-
.../process/computer/TinkerMessageBoard.java | 2 +-
.../process/computer/TinkerMessenger.java | 2 +-
.../process/computer/TinkerReduceEmitter.java | 2 +-
.../process/computer/TinkerWorkerMemory.java | 2 +-
.../process/computer/TinkerWorkerPool.java | 2 +-
.../traversal/step/map/TinkerCountGlobalStep.java | 2 +-
.../traversal/step/sideEffect/TinkerGraphStep.java | 26 +-
.../optimization/TinkerGraphCountStrategy.java | 6 +-
.../optimization/TinkerGraphStepStrategy.java | 10 +-
.../services/TinkerDegreeCentralityFactory.java | 2 +-
.../services/TinkerServiceRegistry.java | 2 +-
.../services/TinkerTextSearchFactory.java | 2 +-
.../tinkergraph/structure/AbstractTinkerGraph.java | 30 +-
.../tinkergraph/structure/AbstractTinkerIndex.java | 2 +-
.../gremlin/tinkergraph/structure/TinkerEdge.java | 2 +-
.../tinkergraph/structure/TinkerElement.java | 2 +-
.../structure/TinkerElementContainer.java | 23 +-
.../tinkergraph/structure/TinkerFactory.java | 33 +-
.../gremlin/tinkergraph/structure/TinkerGraph.java | 8 +-
.../tinkergraph/structure/TinkerGraphIterator.java | 2 +-
.../structure/TinkerGraphVariables.java | 2 +-
.../tinkergraph/structure/TinkerHelper.java | 2 +-
.../gremlin/tinkergraph/structure/TinkerIndex.java | 2 +-
.../tinkergraph/structure/TinkerIndexHelper.java | 2 +-
.../tinkergraph/structure/TinkerIoRegistryV1.java | 2 +-
.../tinkergraph/structure/TinkerIoRegistryV2.java | 2 +-
.../tinkergraph/structure/TinkerIoRegistryV3.java | 2 +-
.../tinkergraph/structure/TinkerIoRegistryV4.java | 216 +
.../tinkergraph/structure/TinkerProperty.java | 2 +-
.../tinkergraph/structure/TinkerTransaction.java | 2 +-
.../structure/TinkerTransactionGraph.java | 18 +-
.../structure/TinkerTransactionIndex.java | 2 +-
.../tinkergraph/structure/TinkerVertex.java | 5 +-
.../structure/TinkerVertexProperty.java | 3 +-
.../gremlin/tinkergraph/structure/air-routes.kryo | Bin 0 -> 3405490 bytes
.../TinkerGraphAllowNullFeatureTest.java | 2 +-
.../TinkerGraphComputerFeatureTest.java | 2 +-
.../tinkergraph/TinkerGraphFeatureTest.java | 2 +-
.../TinkerGraphParameterizedFeatureTest.java | 52 +
.../gremlin/tinkergraph/TinkerGraphProvider.java | 2 +-
.../tinkergraph/TinkerGraphUUIDProvider.java | 2 +-
.../tinkergraph/TinkerShuffleGraphFeatureTest.java | 2 +-
...TinkerTransactionGraphAllowNullFeatureTest.java | 2 +-
.../TinkerTransactionGraphComputerFeatureTest.java | 2 +-
.../TinkerTransactionGraphFeatureTest.java | 2 +-
.../TinkerTransactionGraphProvider.java | 2 +-
.../tinkerpop/gremlin/tinkergraph/TinkerWorld.java | 58 +-
.../TinkerGraphGremlinLangScriptEngineTest.java | 728 +
.../process/TinkerGraphComputerProvider.java | 2 +-
.../TinkerGraphNoStrategyComputerProvider.java | 2 +-
...raphNoStrategyProcessComputerIntegrateTest.java | 6 +-
...raphNoStrategyProcessStandardIntegrateTest.java | 6 +-
.../process/TinkerGraphNoStrategyProvider.java | 6 +-
.../process/TinkerGraphProcessComputerTest.java | 6 +-
.../process/TinkerGraphProcessStandardTest.java | 6 +-
.../step/sideEffect/TinkerGraphIoStepTest.java | 2 +-
.../step/sideEffect/TinkerGraphStepTest.java | 77 +-
.../decoration/HaltedTraverserStrategyTest.java | 2 +-
.../strategy/decoration/OptionsStrategyTest.java | 2 +-
.../optimization/TinkerGraphCountStrategyTest.java | 2 +-
.../optimization/TinkerGraphStepStrategyTest.java | 15 +-
.../tinkergraph/structure/IdManagerTest.java | 2 +-
.../structure/IoDataGenerationTest.java | 2 +-
.../TinkerGraphGraphSONSerializerV2Test.java | 2 +-
.../structure/TinkerGraphGryoSerializerV1Test.java | 2 +-
.../structure/TinkerGraphGryoSerializerV2Test.java | 2 +-
.../structure/TinkerGraphGryoSerializerV3Test.java | 2 +-
.../structure/TinkerGraphIdManagerTest.java | 118 +-
.../tinkergraph/structure/TinkerGraphPlayTest.java | 48 +-
.../TinkerGraphRepeatRangeGlobalTest.java | 769 +
.../structure/TinkerGraphServiceTest.java | 2 +-
.../TinkerGraphStructureStandardTest.java | 2 +-
.../tinkergraph/structure/TinkerGraphTest.java | 40 +-
.../tinkergraph/structure/TinkerShuffleEdge.java | 2 +-
.../tinkergraph/structure/TinkerShuffleGraph.java | 4 +-
.../structure/TinkerShuffleGraphTest.java | 2 +-
.../tinkergraph/structure/TinkerShuffleVertex.java | 2 +-
.../structure/TinkerShuffleVertexProperty.java | 2 +-
...inkerTransactionGraphStructureStandardTest.java | 2 +-
.../structure/TinkerTransactionGraphTest.java | 453 +-
...tractTinkerGraphGraphSONTranslatorProvider.java | 189 -
.../structure/io/graphson/GraphSONTranslator.java | 89 -
...aphGraphSONv2TranslatorProcessComputerTest.java | 34 -
...aphGraphSONv2TranslatorProcessStandardTest.java | 34 -
...aphGraphSONv3TranslatorProcessComputerTest.java | 34 -
...aphGraphSONv3TranslatorProcessStandardTest.java | 34 -
.../structure/io/gryo/GryoTranslator.java | 68 -
.../TinkerGraphGryoTranslatorComputerProvider.java | 42 -
...nkerGraphGryoTranslatorProcessComputerTest.java | 33 -
...nkerGraphGryoTranslatorProcessStandardTest.java | 33 -
.../io/gryo/TinkerGraphGryoTranslatorProvider.java | 109 -
.../io.cucumber.core.backend.ObjectFactory | 1 +
4100 files changed, 513169 insertions(+), 217050 deletions(-)
create mode 100644 .skills/tinkerpop-dev/SKILL.md
create mode 100644 .skills/tinkerpop-dev/references/beads-workflow.md
create mode 100644 .skills/tinkerpop-dev/references/build-dotnet.md
create mode 100644 .skills/tinkerpop-dev/references/build-go.md
create mode 100644 .skills/tinkerpop-dev/references/build-java.md
create mode 100644 .skills/tinkerpop-dev/references/build-javascript.md
create mode 100644 .skills/tinkerpop-dev/references/build-python.md
create mode 100644 .skills/tinkerpop-dev/references/dev-environment-setup.md
create mode 100644 .skills/tinkerpop-dev/references/documentation.md
create mode 100644 .skills/tinkerpop-dev/references/gremlin-mcp.md
create mode 100755 .skills/tinkerpop-dev/scripts/check-env.sh
create mode 100644 AGENTS.md
delete mode 100644 CONTRIBUTING.asciidoc
create mode 100644 CONTRIBUTING.md
delete mode 100644 README.asciidoc
create mode 100644 README.md
create mode 100755 bin/agent-setup.sh
create mode 100644 bin/asf-license-header.txt
create mode 100755 bin/beads-bootstrap.sh
create mode 100755 bin/fix-license-headers.py
create mode 100644 data/air-routes.json
create mode 100644 data/air-routes.kryo
create mode 100644 data/air-routes.xml
create mode 100644 docs/archive/changelogs/changelog-3.0.x.asciidoc
create mode 100644 docs/archive/changelogs/changelog-3.1.x.asciidoc
create mode 100644 docs/archive/changelogs/changelog-3.2.x.asciidoc
create mode 100644 docs/archive/changelogs/changelog-3.3.x.asciidoc
create mode 100644 docs/archive/changelogs/changelog-3.4.x.asciidoc
create mode 100644 docs/archive/changelogs/changelog-3.5.x.asciidoc
create mode 100644 docs/archive/changelogs/changelog-3.6.x.asciidoc
create mode 100644 docs/gremlator/.gitignore
rename {gremlint => docs/gremlator}/.prettierrc (100%)
rename {gremlint => docs/gremlator}/LICENSE (100%)
create mode 100644 docs/gremlator/README.md
create mode 100644 docs/gremlator/index.html
create mode 100644 docs/gremlator/package-lock.json
create mode 100644 docs/gremlator/package.json
copy docs/{gremlint => gremlator}/public/favicon.ico (100%)
create mode 100644 docs/gremlator/public/manifest.json
create mode 100644 docs/gremlator/public/robots.txt
create mode 100644 docs/gremlator/src/App.tsx
create mode 100644 docs/gremlator/src/components/ErrorAlert.tsx
create mode 100644 docs/gremlator/src/components/Footer.tsx
create mode 100644 docs/gremlator/src/components/LanguageTabs.tsx
create mode 100644 docs/gremlator/src/components/Navigator.tsx
create mode 100644 docs/gremlator/src/components/QueryInput.tsx
create mode 100644 docs/gremlator/src/components/TranslationResult.tsx
create mode 100644 docs/gremlator/src/index.tsx
create mode 100644 docs/gremlator/src/store/actions.ts
create mode 100644 docs/gremlator/src/store/index.ts
create mode 100644 docs/gremlator/src/store/initialState.ts
create mode 100644 docs/gremlator/src/store/reducers.ts
create mode 100644 docs/gremlator/src/store/types.ts
create mode 100644 docs/gremlator/src/views/QueryTranslator/index.tsx
create mode 100644 docs/gremlator/tsconfig.json
copy docs/{gremlint => gremlator}/tslint.json (100%)
create mode 100644 docs/gremlator/vite.config.ts
delete mode 100644 docs/gremlint/config-overrides.js
create mode 100644 docs/gremlint/index.html
delete mode 100644 docs/gremlint/public/index.html
create mode 100644 docs/gremlint/vite.config.ts
create mode 100644 docs/site/home/img/linkedin-logo.svg
delete mode 100644 docs/site/home/img/providers/puppy-graph.png
delete mode 100644 docs/site/home/js/jquery-1.11.1.js
create mode 100644 docs/site/home/js/jquery-1.12.4.min.js
create mode 100644 docs/site/home/robots.txt
create mode 100644 docs/site/home/sitemap.xml
delete mode 100644 docs/src/dev/developer/meetings.asciidoc
create mode 100644 docs/src/dev/future/proposal-asbool-step-7.asciidoc
create mode 100644 docs/src/dev/future/proposal-asnumber-step-6.asciidoc
create mode 100644 docs/src/dev/future/proposal-declarative-match-step-9.asciidoc
create mode 100644 docs/src/dev/future/proposal-scoping-5.asciidoc
create mode 100644 docs/src/dev/future/proposal-type-predicate-8.asciidoc
delete mode 100644 docs/src/reference/compilers.asciidoc
delete mode 100644 docs/src/reference/implementations-neo4j.asciidoc
create mode 100644 docs/src/upgrade/release-3.8.0.asciidoc
create mode 100644 docs/src/upgrade/release-3.8.1.asciidoc
create mode 100644 docs/src/upgrade/release-3.8.2.asciidoc
create mode 100644 docs/src/upgrade/release-4.x.x.asciidoc
create mode 100644 docs/static/images/gremlin-67.png
create mode 100644 docs/static/images/gremlin-calendar.png
create mode 100644 docs/static/images/gremlin-deserialized-portal.png
create mode 100644 docs/static/images/gremlin-fine.png
create mode 100644 docs/static/images/gremlin-serialized-portal.png
create mode 100644 docs/static/images/gremlin-serialized.png
create mode 100644 docs/static/images/gremlin-serialized2.png
create mode 100644 docs/static/images/gremlin-string.png
create mode 100644 docs/static/images/gremlin-tag.png
create mode 100644 docs/static/images/gremlin-with-collection.png
create mode 100644 docs/static/images/gremlins-wildest-dreams.png
delete mode 100644 docs/static/images/neo4j-ha.png
create mode 100644 docs/upgrade/README.md
create mode 100644 docs/upgrade/java/README.md
create mode 100755 docs/upgrade/java/bin/gremlin-dev.sh
create mode 100644 docs/upgrade/java/pom.xml
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/Application.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/api/AlertController.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/api/DeploymentController.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/api/HealthController.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/api/IncidentController.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/api/ServiceController.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/config/GremlinClientConfig.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/config/GremlinClientFactory.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/domain/PathDto.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/errors/ApiException.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/errors/ErrorHandler.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/graph/GremlinGateway.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/graph/MappingUtils.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/graph/TraversalBuilders.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/service/AlertService.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/service/DeploymentService.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/service/IncidentService.java
create mode 100644 docs/upgrade/java/src/main/java/org/apache/tinkerpop/example/cmdb/service/ServiceGraphService.java
create mode 100644 docs/upgrade/java/src/main/resources/application.yml
create mode 100644 docs/upgrade/java/src/test/java/org/apache/tinkerpop/example/cmdb/it/DataLoader.java
create mode 100644 docs/upgrade/java/src/test/java/org/apache/tinkerpop/example/cmdb/it/ServiceIT.java
create mode 100644 docs/upgrade/java/src/test/java/org/apache/tinkerpop/example/cmdb/unit/AlertServiceTest.java
create mode 100644 docs/upgrade/java/src/test/java/org/apache/tinkerpop/example/cmdb/unit/DeploymentServiceTest.java
create mode 100644 docs/upgrade/java/src/test/java/org/apache/tinkerpop/example/cmdb/unit/ErrorHandlerTest.java
create mode 100644 docs/upgrade/java/src/test/java/org/apache/tinkerpop/example/cmdb/unit/HealthControllerTest.java
create mode 100644 docs/upgrade/java/src/test/java/org/apache/tinkerpop/example/cmdb/unit/IncidentServiceTest.java
create mode 100644 docs/upgrade/java/src/test/java/org/apache/tinkerpop/example/cmdb/unit/ServiceGraphServiceTest.java
create mode 100644 docs/upgrade/java/src/test/resources/application-test.yml
create mode 100644 docs/upgrade/prompts/sample-report.md
create mode 100644 docs/upgrade/prompts/upgrade-3.8.0-helper.md
create mode 100644 docs/upgrade/spec/cmdb-data.gremlin
create mode 100644 docs/upgrade/spec/spec.md
delete mode 100644 gremlin-archetype/gremlin-archetype-dsl/pom.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-dsl/src/main/resources/META-INF/maven/archetype-metadata.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-dsl/src/main/resources/archetype-resources/README.asciidoc
delete mode 100644 gremlin-archetype/gremlin-archetype-dsl/src/main/resources/archetype-resources/pom.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-dsl/src/main/resources/archetype-resources/src/main/java/SocialTraversalDsl.java
delete mode 100644 gremlin-archetype/gremlin-archetype-dsl/src/main/resources/archetype-resources/src/main/java/SocialTraversalSourceDsl.java
delete mode 100644 gremlin-archetype/gremlin-archetype-dsl/src/main/resources/archetype-resources/src/test/java/SocialDslTest.java
delete mode 100644 gremlin-archetype/gremlin-archetype-dsl/src/test/resources/projects/standard/archetype.properties
delete mode 100644 gremlin-archetype/gremlin-archetype-dsl/src/test/resources/projects/standard/goal.txt
delete mode 100644 gremlin-archetype/gremlin-archetype-server/pom.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/META-INF/maven/archetype-metadata.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/README.asciidoc
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/conf/logback-test.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/conf/logback.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/conf/tinkergraph-empty.properties
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/pom.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/scripts/generate-modern.groovy
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/src/main/java/App.java
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/src/main/java/Service.java
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/src/test/java/ServiceTest.java
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/main/resources/archetype-resources/src/test/resources/gremlin-server.yaml
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/test/resources/projects/standard/archetype.properties
delete mode 100644 gremlin-archetype/gremlin-archetype-server/src/test/resources/projects/standard/goal.txt
delete mode 100644 gremlin-archetype/gremlin-archetype-tinkergraph/pom.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/META-INF/maven/archetype-metadata.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/archetype-resources/README.asciidoc
delete mode 100644 gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/archetype-resources/pom.xml
delete mode 100644 gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/archetype-resources/src/main/java/App.java
delete mode 100644 gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/archetype-resources/src/test/java/AppTest.java
delete mode 100644 gremlin-archetype/gremlin-archetype-tinkergraph/src/test/resources/projects/standard/archetype.properties
delete mode 100644 gremlin-archetype/gremlin-archetype-tinkergraph/src/test/resources/projects/standard/goal.txt
delete mode 100644 gremlin-archetype/pom.xml
delete mode 100644 gremlin-console/conf/neo4j-standalone.properties
delete mode 100644 gremlin-console/conf/remote-objects.yaml
create mode 100644 gremlin-console/conf/remote-sigv4.yaml
delete mode 100644 gremlin-console/src/main/bin/gremlin-java8.bat
delete mode 100644 gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/BytecodeCommand.groovy
delete mode 100644 gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/RemoteCommand.groovy
delete mode 100644 gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/commands/SubmitCommand.groovy
delete mode 100644 gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/jsr223/GephiRemoteAcceptor.groovy
delete mode 100644 gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/jsr223/GephiTraversalVisualizationStrategy.groovy
delete mode 100644 gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverGremlinPlugin.java
delete mode 100644 gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverRemoteAcceptor.java
delete mode 100644 gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/GephiGremlinPlugin.java
create mode 100644 gremlin-console/src/main/java/org/apache/tinkerpop/gremlin/console/jsr223/RemoteGremlinPlugin.java
delete mode 100644 gremlin-console/src/main/resources/org/apache/tinkerpop/gremlin/console/commands/BytecodeCommand.properties
delete mode 100644 gremlin-console/src/main/resources/org/apache/tinkerpop/gremlin/console/commands/RemoteCommand.properties
delete mode 100644 gremlin-console/src/main/resources/org/apache/tinkerpop/gremlin/console/commands/SubmitCommand.properties
create mode 100644 gremlin-console/src/main/static/licenses/reactive-streams
delete mode 100644 gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverRemoteAcceptorIntegrateTest.java
delete mode 100644 gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/jsr223/DriverRemoteAcceptorTest.java
delete mode 100644 gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/jsr223/GephiRemoteAcceptorIntegrateTest.java
create mode 100644 gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/jsr223/remote-graph.properties
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/BindingsGremlinPlugin.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangCustomizer.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinLangPlugin.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/TranslatorCustomizer.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverCustomizer.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverPlugin.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/ConsoleCustomizer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/RemoteAcceptor.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/RemoteException.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ParameterMapVisitor.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/StructureElementVisitor.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bindings.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CompareType.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GType.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GValueManager.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinTypeErrorException.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/NotP.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Translator.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/GValueConstantTraversal.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValueHolder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/PopContaining.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/PropertiesHolder.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/BinaryReductionStep.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DiscardStep.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddEdgeStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddVertexStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractMergeElementStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddElementStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AsBoolStep.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AsNumberStep.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CallStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CallStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeVertexStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepPlaceholder.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TraversalMergeStep.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStepPlaceholder.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStepContract.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStepPlaceholder.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateGlobalStep.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateLocalStep.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStep.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectBarrierStep.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/GValueHelper.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/GValueReductionStrategy.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/provider/ProviderGValueReductionStrategy.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/AnonymizingTypeTranslator.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslator.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GolangTranslator.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GroovyTranslator.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/JavascriptTranslator.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslator.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/NL_SL_Traverser.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelper.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/Marker.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BinarySerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/BindingSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteBufferSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ByteCodeSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ClassSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/DateSerializer.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/DateTimeSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/InetAddressSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/InstantSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LambdaSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalDateSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalDateTimeSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/LocalTimeSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MetricsSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/MonthDaySerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/OffsetDateTimeSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/OffsetTimeSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/PeriodSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalMetricsSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraversalStrategySerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/TraverserSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/YearMonthSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ZoneOffsetSerializer.java
delete mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/binary/types/ZonedDateTimeSerializer.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV4.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializerV4.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONXModuleV4.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV4.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV4.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV4.java
create mode 100644 gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV4.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/TestDataBuilder.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/VariableResolverPluginTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ParameterMapVisitorTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/StructureElementVisitorTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/remote/EmbeddedRemoteConnectionTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GValueManagerTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PBulkSetTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValueStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValueTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParentTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/NoneStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStartStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AsBoolStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AsNumberStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CallStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStepTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TraversalMergeStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TraversalSelectStepTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateGlobalStepTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateLocalStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateStepTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/GValueManagerVerifier.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/GValueManagerVerifierTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyProxyTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/GValueReductionStrategyTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/provider/ProviderGValueReductionStrategyTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/AnonymizingTypeTranslatorTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslatorTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GolangTranslatorTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/GroovyTranslatorTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/JavascriptTranslatorTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/ParameterizedGroovyTranslatorTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/PythonTranslatorTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_P_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_NL_O_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_P_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_NL_O_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_P_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_NL_O_OB_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/NL_O_OB_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/NL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_OB_S_SE_SL_TraverserTest.java
create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/SL_TraverserTest.java
delete mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelperTest.java
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/Auth.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionFactory.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPool.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionPoolSettings.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/ConnectionSettings.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ConnectionClosedException.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ConnectionPoolBusyException.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/NoConnectionAvailableException.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ServerUnavailableException.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/HttpRequestContext.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/IClientWebSocket.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/IConnection.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/IConnectionFactory.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseMessage.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseResult.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseStatus.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/Messages/ResponseStatusCode.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/ProxyClientWebSocket.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/ProxyConnection.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/ResponseHandlerForSingleRequestMessage.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/StreamingResponseContext.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/WebSocketConnection.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Driver/WebSocketSettings.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Binding.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bindings.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Bytecode.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GType.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GValue.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Instruction.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Lambda.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/StringBasedLambda.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Translator/GroovyTranslator.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/DataType.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryMessageSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryReader.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/GraphBinaryWriter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/ITypeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/RequestMessageSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/ResponseMessageSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/StreamExtensions.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/TypeSerializerRegistry.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ArraySerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BigDecimalSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BigIntegerSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BindingSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/BulkSetSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ByteBufferSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ByteCodeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/CharSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ClassSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/CustomTypeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/DateTimeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/DurationSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/EdgeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/EnumSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/GremlinType.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/LambdaSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/ListSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/MapSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/OffsetDateTimeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PathSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/PropertySerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SetSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SimpleTypeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/SingleTypeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/StringSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraversalSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraversalStrategySerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TraverserSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/TypeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/UuidSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/VertexPropertySerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary/Types/VertexSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/DataType.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/GraphBinary4MessageSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/GraphBinaryReader.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/GraphBinaryWriter.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/ITypeSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Marker.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/RequestMessageSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/ResponseSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/StreamExtensions.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/TypeSerializerRegistry.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/ArraySerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/BigDecimalSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/BigIntegerSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/BinarySerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/CharSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/DateTimeSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/DurationSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/EdgeSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/EnumSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/ListSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/MapSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/PathSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/PropertySerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/SetSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/SimpleTypeSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/SingleTypeSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/StringSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/UuidSerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/VertexPropertySerializer.cs
create mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphBinary4/Types/VertexSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/BigIntegerDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/BigIntegerSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/BindingSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/BulkSetSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/ByteBufferDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/ByteBufferSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/ByteConverter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/BytecodeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/CharConverter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/ClassSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/DTDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/DateDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/DecimalConverter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/DirectionDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/DoubleConverter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/DurationDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/DurationSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/EdgeDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/EdgeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/EnumSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/FloatConverter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSON2MessageSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSON2Reader.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSON2Writer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSON3MessageSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSON3Reader.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSON3Writer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONMessageSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONReader.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONTokens.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONUtil.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/IGraphSONDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/IGraphSONSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/Int16Converter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/Int32Converter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/Int64Converter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/LambdaSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/ListSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/MapSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/MergeDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/NumberConverter.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/OffsetDateTimeDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/OffsetDateTimeSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/PSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/Path3Deserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/PathDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/PropertyDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/PropertySerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/RequestMessageSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/SetSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TextPSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TraversalSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TraversalStrategySerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TraverserReader.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/UuidDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/UuidSerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/VertexDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/VertexPropertyDeserializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/VertexPropertySerializer.cs
delete mode 100644 gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/VertexSerializer.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Docs/Dev/Provider/IndexTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/AuthIntegrationTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/ConnectionPoolTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientAuthenticationTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Driver/GremlinClientBehaviorIntegrationTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/StrategiesTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/GraphSONWriterTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/GremlinLangGeneration/GremlinLangGenerationTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/GremlinLangGeneration/StrategiesTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Driver/AuthTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Driver/ConnectionPoolSettingsTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Driver/ConnectionPoolTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Driver/GraphSONMessageSerializerTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Driver/HttpRequestContextTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Driver/Messages/RequestMessageTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Driver/ResultSetTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/BytecodeTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/GremlinLangTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/Translator/GroovyTranslatorTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary/GraphBinaryMessageSerializerTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary/GraphBinaryTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary/Types/Sample/SamplePerson.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary/Types/Sample/SamplePersonSerializer.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary/Types/Sample/SamplePersonSerializerTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary4/GraphBinary4MessageSerializerTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary4/GraphBinary4Tests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary4/Model.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary4/RequestMessageSerializerTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary4/ResponseSerializerTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary4/RoundTripTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary4/StreamExtensionsTests.cs
create mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphBinary4/StreamingDeserializerRoundTripTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/BytecodeGraphSONSerializerTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/GraphSON3MessageSerializerTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/GraphSONReaderTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/GraphSONWriterTests.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/TestClass.cs
delete mode 100644 gremlin-dotnet/test/Gremlin.Net.UnitTest/Structure/IO/GraphSON/TestUtils.cs
delete mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/AuthProperties.java
delete mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Handler.java
delete mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/HandshakeInterceptor.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/HttpRequest.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/RemoteTransaction.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/RequestSubmitter.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/RequestSubmitterAsync.java
delete mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultQueue.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/auth/Auth.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/auth/Basic.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/auth/Sigv4.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/GremlinResponseHandler.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/HttpContentDecompressionHandler.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/HttpGremlinResponseStreamDecoder.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/HttpStreamingResponseHandler.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/IdleConnectionHandler.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/InactiveChannelHandler.java
delete mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketClientHandler.java
delete mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinRequestEncoder.java
delete mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/handler/WebSocketGremlinResponseDecoder.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/interceptor/PayloadSerializingInterceptor.java
delete mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTransaction.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/HttpRemoteTransaction.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/TransactionRemoteConnection.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/simple/SimpleHttpClient.java
delete mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/simple/WebSocketClient.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/stream/ByteBufQueueInputStream.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/stream/GraphBinaryStreamResponseReader.java
create mode 100644 gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/stream/InputStreamBuffer.java
create mode 100644 gremlin-driver/src/main/static/licenses/reactive-streams
delete mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/AbstractResultQueueTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/AbstractResultSetTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ClusterTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ConnectionPoolTest.java
delete mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/RequestMessageTest.java
delete mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultQueueTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetQueuingTest.java
delete mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/WebSocketClientBehaviorIntegrateTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/auth/Sigv4Test.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/handler/ByteBufQueueInputStreamTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/handler/GraphBinaryStreamResponseReaderTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/handler/HttpContentDecompressionHandlerTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/handler/HttpGremlinResponseStreamDecoderTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/handler/HttpStreamingResponseHandlerTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/handler/IdleConnectionHandlerTest.java
create mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/handler/InputStreamBufferTest.java
delete mode 100644 gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/util/PerformanceTest.java
create mode 100644 gremlin-examples/README.md
create mode 100644 gremlin-examples/gremlin-dotnet/BasicGremlin/BasicGremlin.cs
create mode 100644 gremlin-examples/gremlin-dotnet/BasicGremlin/BasicGremlin.csproj
create mode 100644 gremlin-examples/gremlin-dotnet/Connections/Connections.cs
create mode 100644 gremlin-examples/gremlin-dotnet/Connections/Connections.csproj
copy {gremlin-dotnet/Examples => gremlin-examples/gremlin-dotnet}/Examples.sln (100%)
create mode 100644 gremlin-examples/gremlin-dotnet/ModernTraversals/ModernTraversals.cs
create mode 100644 gremlin-examples/gremlin-dotnet/ModernTraversals/ModernTraversals.csproj
create mode 100644 gremlin-examples/gremlin-go/basic_gremlin.go
create mode 100644 gremlin-examples/gremlin-go/connections.go
create mode 100644 gremlin-examples/gremlin-go/go.mod
create mode 100644 gremlin-examples/gremlin-go/go.sum
create mode 100644 gremlin-examples/gremlin-go/modern_traversals.go
create mode 100644 gremlin-examples/gremlin-java/BasicGremlin.java
create mode 100644 gremlin-examples/gremlin-java/Connections.java
create mode 100644 gremlin-examples/gremlin-java/ModernTraversals.java
create mode 100644 gremlin-examples/gremlin-java/pom.xml
copy {gremlin-javascript/examples/node => gremlin-examples/gremlin-javascript}/.gitignore (100%)
create mode 100644 gremlin-examples/gremlin-javascript/basic-gremlin.js
create mode 100644 gremlin-examples/gremlin-javascript/connections.js
create mode 100644 gremlin-examples/gremlin-javascript/modern-traversals.js
create mode 100644 gremlin-examples/gremlin-javascript/package-lock.json
create mode 100644 gremlin-examples/gremlin-javascript/package.json
create mode 100644 gremlin-examples/gremlin-python/basic_gremlin.py
create mode 100644 gremlin-examples/gremlin-python/connections.py
create mode 100644 gremlin-examples/gremlin-python/modern_traversals.py
create mode 100644 gremlin-examples/gremlin-python/requirements.txt
create mode 100644 gremlin-go/driver/auth.go
delete mode 100644 gremlin-go/driver/authInfo.go
create mode 100644 gremlin-go/driver/auth_test.go
delete mode 100644 gremlin-go/driver/bytecode.go
delete mode 100644 gremlin-go/driver/bytecode_test.go
delete mode 100644 gremlin-go/driver/connectionPool.go
delete mode 100644 gremlin-go/driver/connectionPool_test.go
create mode 100644 gremlin-go/driver/gValue.go
create mode 100644 gremlin-go/driver/gValue_test.go
delete mode 100644 gremlin-go/driver/gorillaTransporter.go
delete mode 100644 gremlin-go/driver/gorillaTransporter_test.go
delete mode 100644 gremlin-go/driver/graphBinary.go
create mode 100644 gremlin-go/driver/graphBinaryDeserializer.go
create mode 100644 gremlin-go/driver/graphBinaryDeserializer_test.go
create mode 100644 gremlin-go/driver/graphBinarySerializer.go
create mode 100644 gremlin-go/driver/graphBinarySerializer_test.go
delete mode 100644 gremlin-go/driver/graphBinary_test.go
create mode 100644 gremlin-go/driver/gremlinlang.go
create mode 100644 gremlin-go/driver/gremlinlang_test.go
create mode 100644 gremlin-go/driver/interceptor.go
create mode 100644 gremlin-go/driver/interceptor_test.go
create mode 100644 gremlin-go/driver/marker.go
delete mode 100644 gremlin-go/driver/protocol.go
delete mode 100644 gremlin-go/driver/protocol_test.go
delete mode 100644 gremlin-go/driver/translator.go
delete mode 100644 gremlin-go/driver/translator_test.go
delete mode 100644 gremlin-go/driver/transporter.go
delete mode 100644 gremlin-go/driver/transporterFactory.go
delete mode 100644 gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/jsr223/ast/VarAsBindingASTTransformation.groovy
delete mode 100644 gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorComputerProvider.java
delete mode 100644 gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorProcessComputerTest.java
delete mode 100644 gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorProcessStandardTest.java
delete mode 100644 gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorProvider.java
delete mode 100644 gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ParameterizedGroovyTranslatorComputerProvider.java
delete mode 100644 gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ParameterizedGroovyTranslatorProcessComputerTest.java
delete mode 100644 gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ParameterizedGroovyTranslatorProcessStandardTest.java
delete mode 100644 gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ParameterizedGroovyTranslatorProvider.java
delete mode 100644 gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/util/TinkerGraphProvider.java
delete mode 100644 gremlin-javascript/build/generate.groovy
delete mode 100644 gremlin-javascript/examples/browser/index.css
delete mode 100644 gremlin-javascript/examples/browser/index.html
delete mode 100644 gremlin-javascript/examples/browser/index.js
delete mode 100644 gremlin-javascript/examples/browser/utils.js
delete mode 100644 gremlin-javascript/examples/browser/yarn.lock
delete mode 100644 gremlin-javascript/examples/node/basic-gremlin.js
delete mode 100644 gremlin-javascript/examples/node/connections.js
delete mode 100644 gremlin-javascript/examples/node/modern-traversals.js
delete mode 100644 gremlin-javascript/examples/node/package-lock.json
delete mode 100644 gremlin-javascript/examples/node/package.json
delete mode 100644 gremlin-javascript/pom.xml
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/.eslintrc.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/.gitignore
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/.npmignore
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/.prettierrc.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/Gruntfile.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/NOTICE
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/README.md
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/docker-compose.yml
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/index.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/auth/authenticator.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/auth/mechanisms/sasl-mechanism-base.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/auth/mechanisms/sasl-mechanism-plain.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/auth/plain-text-sasl-authenticator.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/auth/sasl-authenticator.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/client.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/connection.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/remote-connection.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/response-error.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/result-set.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/anonymous-traversal.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/bytecode.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/transaction.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/translator.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal-strategy.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/GraphBinary.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/AnySerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/ArraySerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/BigIntegerSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/BooleanSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/BulkSetSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/ByteBufferSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/ByteSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/BytecodeSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/ClassSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/DataType.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/DateSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/DoubleSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/EdgeSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/EnumSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/FloatSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/GraphBinaryReader.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/GraphBinaryWriter.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/IntSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/LambdaSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/LongSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/LongSerializerNg.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/MapSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/NumberSerializationStrategy.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/OffsetDateTimeSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/PSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/PathSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/PropertySerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/SetSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/ShortSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/StringSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/TextPSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/TraversalStrategySerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/TraverserSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/UnspecifiedNullSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/UuidSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/VertexPropertySerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/VertexSerializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/utils.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/graph-serializer.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/type-serializers.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/lib/utils.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/licenses/chai
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/package-lock.json
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/package.json
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/element-comparison.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/world.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/helper.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/client-behavior-tests.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/client-tests.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/sasl-authentication-tests.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/session-client-tests.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/socket-connection-tests.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/bytecode-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/client-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/element-comparison-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/exports-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/AnySerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/ArraySerializerTestTemplate.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/BigIntegerSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/BooleanSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/BulkSetSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/ByteBufferSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/ByteSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/BytecodeSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/ClassSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/DateSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/DateSerializerTestTemplate.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/DoubleSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EdgeSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/EnumSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/FloatSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/GraphBinaryReader-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/GraphBinaryWriter-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/IntSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/LambdaSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/ListSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/LongSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/LongSerializerNg-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/MapSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/PSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/PathSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/PropertySerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/SetSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/SetSerializerTestTemplate.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/ShortSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/StringSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/StringSerializerTestTemplate.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/TextPSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/TimestampSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/TraversalStrategySerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/TraverserSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/UnspecifiedNullSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/UuidSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/VertexPropertySerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/VertexSerializer-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphbinary/utils.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/graphson-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/result-set-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/structure-types-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/translator-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/traversal-strategy-test.js
delete mode 100644 gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/traversal-test.js
create mode 100644 gremlin-js/gremlin-javascript/.gitignore
create mode 100644 gremlin-js/gremlin-javascript/.mocharc.json
create mode 100644 gremlin-js/gremlin-javascript/.npmignore
rename {gremlin-javascript/src/main/javascript => gremlin-js}/gremlin-javascript/.nvmrc (100%)
create mode 100644 gremlin-js/gremlin-javascript/.prettierrc.cjs
rename {gremlin-javascript/src/main/javascript => gremlin-js}/gremlin-javascript/LICENSE (100%)
create mode 100644 gremlin-js/gremlin-javascript/NOTICE
create mode 100644 gremlin-js/gremlin-javascript/README.md
create mode 100644 gremlin-js/gremlin-javascript/docker-compose.yml
create mode 100644 gremlin-js/gremlin-javascript/eslint.config.mjs
rename {gremlin-javascript => gremlin-js/gremlin-javascript}/examples/browser/.gitignore (100%)
rename {gremlin-javascript => gremlin-js/gremlin-javascript}/examples/browser/.yarnrc.yml (100%)
create mode 100644 gremlin-js/gremlin-javascript/examples/browser/index.css
create mode 100644 gremlin-js/gremlin-javascript/examples/browser/index.html
create mode 100644 gremlin-js/gremlin-javascript/examples/browser/index.ts
rename {gremlin-javascript => gremlin-js/gremlin-javascript}/examples/browser/package.json (100%)
create mode 100644 gremlin-js/gremlin-javascript/examples/browser/utils.ts
create mode 100644 gremlin-js/gremlin-javascript/examples/browser/yarn.lock
rename {gremlin-javascript => gremlin-js/gremlin-javascript}/examples/node/.gitignore (100%)
create mode 100644 gremlin-js/gremlin-javascript/examples/node/basic-gremlin.js
create mode 100644 gremlin-js/gremlin-javascript/examples/node/connections.js
create mode 100644 gremlin-js/gremlin-javascript/examples/node/modern-traversals.js
create mode 100644 gremlin-js/gremlin-javascript/examples/node/package-lock.json
create mode 100644 gremlin-js/gremlin-javascript/examples/node/package.json
create mode 100644 gremlin-js/gremlin-javascript/lib/driver/auth.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/driver/client.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/driver/connection.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/driver/driver-remote-connection.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/driver/remote-connection.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/driver/request-message.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/driver/response-error.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/driver/result-set.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/index.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/index.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/package.json
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/AnonymizedTranslateVisitor.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/DotNetTranslateVisitor.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/GoTranslateVisitor.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/GremlinTranslator.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/GroovyTranslateVisitor.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/JavaTranslateVisitor.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/JavascriptTranslateVisitor.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/PythonTranslateVisitor.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/TranslateVisitor.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/Translation.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/Translator.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/language/translator/TranslatorException.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/process/anonymous-traversal.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/process/graph-traversal.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/process/gremlin-lang.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/process/transaction.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/process/traversal-strategy.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/process/traversal.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/graph.ts
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/GraphBinary.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/AnySerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/ArraySerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/BigIntegerSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/BinarySerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/BooleanSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/ByteSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/DataType.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/DateTimeSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/DoubleSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/EdgeSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/EnumSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/FloatSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/GraphBinaryReader.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/GraphBinaryWriter.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/IntSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/LongSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/MapSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/MarkerSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/NumberSerializationStrategy.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/PathSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/PropertySerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/SetSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/ShortSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/StreamReader.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/StringSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/StubSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/UnspecifiedNullSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/UuidSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/VertexPropertySerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/VertexSerializer.js
create mode 100644 gremlin-js/gremlin-javascript/lib/structure/io/binary/internals/utils.js
create mode 100644 gremlin-js/gremlin-javascript/lib/utils.ts
create mode 100644 gremlin-js/gremlin-javascript/package.json
create mode 100644 gremlin-js/gremlin-javascript/pom.xml
create mode 100644 gremlin-js/gremlin-javascript/scripts/groovy/generate.groovy
create mode 100644 gremlin-js/gremlin-javascript/scripts/patch-antlr4ng.js
create mode 100644 gremlin-js/gremlin-javascript/test/cucumber/element-comparison.js
create mode 100644 gremlin-js/gremlin-javascript/test/cucumber/feature-steps.js
create mode 100644 gremlin-js/gremlin-javascript/test/cucumber/gremlin.js
create mode 100644 gremlin-js/gremlin-javascript/test/cucumber/world.js
create mode 100644 gremlin-js/gremlin-javascript/test/helper.js
create mode 100644 gremlin-js/gremlin-javascript/test/integration/auth-tests.js
create mode 100644 gremlin-js/gremlin-javascript/test/integration/client-tests.js
create mode 100644 gremlin-js/gremlin-javascript/test/integration/remote-connection-tests.js
create mode 100644 gremlin-js/gremlin-javascript/test/integration/socket-connection-tests.js
create mode 100644 gremlin-js/gremlin-javascript/test/integration/traversal-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/auth-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/client-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/element-comparison-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/exports-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/GraphBinaryReader-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/GraphBinaryWriter-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/StreamReader-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/async-deserialize-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/error-cases-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/model-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/model.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/null-handling-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/precise-mode-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/type-detection-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/graphbinary/typed-number-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/gremlin-lang-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/result-set-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/structure-types-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/translator/corpus-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/translator/gremlin-translator-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/traversal-strategy-test.js
create mode 100644 gremlin-js/gremlin-javascript/test/unit/traversal-test.js
create mode 100644 gremlin-js/gremlin-javascript/tsconfig.json
create mode 100644 gremlin-js/gremlin-javascript/tsconfig.test.json
create mode 100644 gremlin-js/gremlin-mcp/.env.example
create mode 100644 gremlin-js/gremlin-mcp/.gitignore
create mode 100644 gremlin-js/gremlin-mcp/.npmignore
create mode 100644 gremlin-js/gremlin-mcp/.prettierignore
create mode 100644 gremlin-js/gremlin-mcp/.prettierrc
create mode 100644 gremlin-js/gremlin-mcp/LICENSE
create mode 100644 gremlin-js/gremlin-mcp/NOTICE
create mode 100644 gremlin-js/gremlin-mcp/README.md
create mode 100644 gremlin-js/gremlin-mcp/eslint.config.js
create mode 100644 gremlin-js/gremlin-mcp/jest.config.js
create mode 100644 gremlin-js/gremlin-mcp/package.json
create mode 100644 gremlin-js/gremlin-mcp/pom.xml
create mode 100644 gremlin-js/gremlin-mcp/scripts/generate-step-names.js
create mode 100644 gremlin-js/gremlin-mcp/src/config.ts
create mode 100644 gremlin-js/gremlin-mcp/src/connectivity-state.ts
create mode 100644 gremlin-js/gremlin-mcp/src/constants.ts
create mode 100644 gremlin-js/gremlin-mcp/src/errors.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/client.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/connection.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/edge-patterns.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/models/graph-schema.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/models/index.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/models/query-result.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/property-analyzer.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/query-utils.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/schema-assembly.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/schema-cache.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/schema-generator.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/schema.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/service.ts
create mode 100644 gremlin-js/gremlin-mcp/src/gremlin/types.ts
create mode 100644 gremlin-js/gremlin-mcp/src/handlers/resources.ts
create mode 100644 gremlin-js/gremlin-mcp/src/handlers/tool-patterns.ts
create mode 100644 gremlin-js/gremlin-mcp/src/handlers/tools.ts
create mode 100644 gremlin-js/gremlin-mcp/src/server.ts
create mode 100644 gremlin-js/gremlin-mcp/src/translator/index.ts
create mode 100644 gremlin-js/gremlin-mcp/src/translator/llm.ts
create mode 100644 gremlin-js/gremlin-mcp/src/translator/normalizers/shared.ts
create mode 100644 gremlin-js/gremlin-mcp/src/translator/stepNames.ts
create mode 100644 gremlin-js/gremlin-mcp/src/utils/result-metadata.ts
create mode 100644 gremlin-js/gremlin-mcp/src/utils/result-parser.ts
create mode 100644 gremlin-js/gremlin-mcp/src/utils/type-guards.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/config.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/edge-patterns.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/gremlint-format.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/integration/mcp-integration.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/models.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/property-analyzer.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/query-utils.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/resource-read.integration.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/resources.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/schema-assembly.test.ts
create mode 100644 gremlin-js/gremlin-mcp/tests/setup.ts
create mode 100644 gremlin-js/gremlin-mcp/tsconfig.json
rename {gremlint => gremlin-js/gremlint}/.gitignore (100%)
copy {docs => gremlin-js}/gremlint/.prettierrc (100%)
copy {docs => gremlin-js}/gremlint/LICENSE (100%)
rename {gremlint => gremlin-js/gremlint}/NOTICE (100%)
create mode 100644 gremlin-js/gremlint/README.md
create mode 100644 gremlin-js/gremlint/eslint.config.js
rename {gremlint => gremlin-js/gremlint}/jestconfig.json (100%)
create mode 100644 gremlin-js/gremlint/package.json
create mode 100644 gremlin-js/gremlint/pom.xml
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/closureIndentation.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/curlyBracketMultilineWrapping.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/curlyBracketWrapping.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/defaultConfig.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/determineWhatPartsOfCodeAreGremlin.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/dotsAfterLineBreaks.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/invalidIndentationAndMaxLineLength.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/layoutUtils.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/maxLineLength.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/modulatorIndentation.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/modulatorWrapping.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/multipleQueriesAtOnce.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/nonGremlinIndentation.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/__tests__/nonMethodIndentation.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/consts.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatClosure.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatMethod.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatNonGremlin.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatString.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/index.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/reduceFirstStepInStepGroup.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/reduceLastStepInStepGroup.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/reduceMiddleStepInStepGroup.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/reduceSingleStepInStepGroup.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/utils.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/index.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/formatWord.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/index.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/formatSyntaxTrees/utils.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/index.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/layoutUtils.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/parseToSyntaxTrees/__tests__/extractGremlinQueries.test.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/parseToSyntaxTrees/extractGremlinQueries.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/parseToSyntaxTrees/index.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/recreateQueryOnelinerFromSyntaxTree.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/recreateQueryStringFromFormattedSyntaxTrees.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/types.ts
create mode 100644 gremlin-js/gremlint/src/formatQuery/utils.ts
create mode 100644 gremlin-js/gremlint/src/index.ts
rename {gremlint => gremlin-js/gremlint}/tsconfig.json (100%)
create mode 100644 gremlin-js/package-lock.json
create mode 100644 gremlin-js/package.json
create mode 100644 gremlin-js/pom.xml
create mode 100644 gremlin-python/src/main/python/gremlin_python/driver/auth.py
delete mode 100644 gremlin-python/src/main/python/gremlin_python/driver/protocol.py
delete mode 100644 gremlin-python/src/main/python/gremlin_python/driver/transport.py
delete mode 100755 gremlin-python/src/main/python/gremlin_python/process/translator.py
delete mode 100644 gremlin-python/src/main/python/gremlin_python/structure/io/graphbinaryV1.py
create mode 100644 gremlin-python/src/main/python/gremlin_python/structure/io/graphbinaryV4.py
delete mode 100644 gremlin-python/src/main/python/gremlin_python/structure/io/graphsonV2d0.py
delete mode 100644 gremlin-python/src/main/python/gremlin_python/structure/io/graphsonV3d0.py
create mode 100644 gremlin-python/src/main/python/pyproject.toml
delete mode 100644 gremlin-python/src/main/python/radish/feature_steps.py
delete mode 100644 gremlin-python/src/main/python/radish/gremlin.py
delete mode 100644 gremlin-python/src/main/python/radish/terrain.py
delete mode 100644 gremlin-python/src/main/python/radish/utils.py
delete mode 100644 gremlin-python/src/main/python/setup.cfg
delete mode 100644 gremlin-python/src/main/python/setup.py
delete mode 100644 gremlin-python/src/main/python/tests/__init__.py
delete mode 100644 gremlin-python/src/main/python/tests/conftest.py
delete mode 100644 gremlin-python/src/main/python/tests/driver/__init__.py
delete mode 100644 gremlin-python/src/main/python/tests/driver/test_client.py
delete mode 100644 gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
delete mode 100644 gremlin-python/src/main/python/tests/driver/test_driver_remote_connection_http.py
delete mode 100644 gremlin-python/src/main/python/tests/driver/test_driver_remote_connection_threaded.py
delete mode 100644 gremlin-python/src/main/python/tests/driver/test_serializer.py
delete mode 100644 gremlin-python/src/main/python/tests/driver/test_web_socket_client_behavior.py
create mode 100644 gremlin-python/src/main/python/tests/feature/feature_steps.py
create mode 100644 gremlin-python/src/main/python/tests/feature/gremlin.py
create mode 100644 gremlin-python/src/main/python/tests/feature/terrain.py
create mode 100644 gremlin-python/src/main/python/tests/feature/utils.py
create mode 100644 gremlin-python/src/main/python/tests/integration/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/integration/conftest.py
create mode 100644 gremlin-python/src/main/python/tests/integration/driver/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/integration/driver/test_auth.py
create mode 100644 gremlin-python/src/main/python/tests/integration/driver/test_client.py
create mode 100644 gremlin-python/src/main/python/tests/integration/driver/test_driver_remote_connection.py
create mode 100644 gremlin-python/src/main/python/tests/integration/driver/test_driver_remote_connection_threaded.py
create mode 100644 gremlin-python/src/main/python/tests/integration/driver/test_serializer.py
create mode 100644 gremlin-python/src/main/python/tests/integration/driver/test_web_socket_client_behavior.py
create mode 100644 gremlin-python/src/main/python/tests/integration/process/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/integration/process/test_dsl.py
create mode 100644 gremlin-python/src/main/python/tests/integration/process/test_traversal.py
create mode 100644 gremlin-python/src/main/python/tests/integration/structure/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/integration/structure/io/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/integration/structure/io/test_functionalityio.py
delete mode 100644 gremlin-python/src/main/python/tests/process/__init__.py
delete mode 100644 gremlin-python/src/main/python/tests/process/test_dsl.py
delete mode 100644 gremlin-python/src/main/python/tests/process/test_strategies.py
delete mode 100644 gremlin-python/src/main/python/tests/process/test_translator.py
delete mode 100644 gremlin-python/src/main/python/tests/process/test_traversal.py
delete mode 100644 gremlin-python/src/main/python/tests/structure/__init__.py
delete mode 100644 gremlin-python/src/main/python/tests/structure/io/__init__.py
delete mode 100644 gremlin-python/src/main/python/tests/structure/io/test_functionalityio.py
delete mode 100644 gremlin-python/src/main/python/tests/structure/io/test_graphbinaryV1.py
delete mode 100644 gremlin-python/src/main/python/tests/structure/io/test_graphsonV2d0.py
delete mode 100644 gremlin-python/src/main/python/tests/structure/io/test_graphsonV3d0.py
delete mode 100644 gremlin-python/src/main/python/tests/structure/io/test_util.py
delete mode 100644 gremlin-python/src/main/python/tests/structure/test_graph.py
delete mode 100644 gremlin-python/src/main/python/tests/test_statics.py
create mode 100644 gremlin-python/src/main/python/tests/unit/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/unit/driver/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/unit/driver/test_http_streaming.py
create mode 100644 gremlin-python/src/main/python/tests/unit/process/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/unit/process/test_gremlin_lang.py
create mode 100644 gremlin-python/src/main/python/tests/unit/process/test_strategies.py
create mode 100644 gremlin-python/src/main/python/tests/unit/structure/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/unit/structure/io/__init__.py
create mode 100644 gremlin-python/src/main/python/tests/unit/structure/io/model.py
create mode 100644 gremlin-python/src/main/python/tests/unit/structure/io/test_graphbinaryV4.py
create mode 100644 gremlin-python/src/main/python/tests/unit/structure/io/test_graphbinaryv4model.py
create mode 100644 gremlin-python/src/main/python/tests/unit/structure/io/test_util.py
create mode 100644 gremlin-python/src/main/python/tests/unit/structure/test_graph.py
create mode 100644 gremlin-python/src/main/python/tests/unit/test_statics.py
create mode 100644 gremlin-server/conf/gremlin-server-airroutes.yaml
delete mode 100644 gremlin-server/conf/gremlin-server-neo4j.yaml
delete mode 100644 gremlin-server/conf/neo4j-empty.properties
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/OpProcessor.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/ProcessingException.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/channel/UnifiedChannelizer.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/channel/WebSocketChannelizer.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/channel/WsAndHttpChannelizer.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/AbstractSession.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/Frame.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/FrameMessageSizeEstimator.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/GremlinResponseFrameEncoder.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpContentCompressionHandler.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpRequestCheckingHandler.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpRequestIdHandler.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/HttpRequestMessageDecoder.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/MultiTaskSession.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/OpExecutorHandler.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/OpSelectorHandler.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAndHttpBasicAuthenticationHandler.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/ServerSerializers.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/Session.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SessionException.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SessionTask.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SingleTaskSession.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/TransactionManager.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/UnifiedHandler.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/UnmanagedTransaction.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WebSocketAuthorizationHandler.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WebSocketHandlerUtil.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsAndHttpChannelizerHandler.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinBinaryRequestDecoder.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinCloseRequestDecoder.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinResponseFrameEncoder.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsGremlinTextRequestDecoder.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/WsUserAgentHandler.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/OpLoader.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/OpProcessorException.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/Session.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/session/SessionOpProcessor.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/standard/StandardOpProcessor.java
delete mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/GremlinError.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/SSLStoreFilesModificationWatcher.java
create mode 100644 gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TinkerFactoryDataLoader.java
delete mode 100644 gremlin-server/src/main/resources/META-INF/services/org.apache.tinkerpop.gremlin.server.OpProcessor
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/AbstractRemoteGraphProvider.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryGroovyRemoteFeatureTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryGroovyRemoteParameterizedFeatureTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryLangBulkedRemoteFeatureTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryLangRemoteFeatureTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryLangRemoteParameterizedFeatureTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryRemoteFeatureTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryRemoteGraphComputerProvider.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphBinaryRemoteGraphProvider.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphSONLangRemoteFeatureTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphSONLangRemoteParameterizedFeatureTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphSONRemoteFeatureTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphSONRemoteGraphComputerProvider.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/GraphSONRemoteGraphProvider.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptTestEngine.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptTestEngineFactory.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/process/remote/GraphBinaryRemoteGraphProcessComputerTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/process/remote/GraphBinaryRemoteGraphProcessStandardTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/process/remote/GraphSONRemoteGraphProcessComputerTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/process/remote/GraphSONRemoteGraphProcessStandardTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverTransactionIntegrateTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerAuthKrb5IntegrateTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerConfigIntegrateTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpTransactionIntegrateTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerSessionIntegrateWithUnifiedChannelizerTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinSessionTxIntegrateTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/StreamingResponseIntegrateTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/channel/UnifiedChannelizerIntegrateTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/channel/UnifiedTestChannelizer.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/channel/WebSocketChannelizerIntegrateTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/channel/WebSocketTestChannelizer.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/channel/WsAndHttpChannelizerIntegrateTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/channel/WsAndHttpTestChannelizer.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/handler/HttpContentCompressionHandlerTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/handler/HttpHandlerUtilTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/handler/HttpRequestIdHandlerTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/handler/HttpRequestMessageDecoderTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/notifications/GraphManagerNotificationsTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/notifications/ProviderGraphManagerHelper.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessorTest.java
delete mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessorTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/SSLStoreFilesModificationWatcherTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutorTest.java
create mode 100644 gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/TinkerFactoryDataLoaderTest.java
create mode 100644 gremlin-server/src/test/resources/META-INF/services/org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngineFactory
create mode 100644 gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-with-traversal-sources.yaml
delete mode 100644 gremlin-server/src/test/scripts/generate-all.groovy
create mode 100644 gremlin-server/src/test/scripts/init-functions.groovy
delete mode 100644 gremlin-server/src/test/scripts/neo4j-empty.properties
delete mode 100644 gremlin-server/src/test/scripts/test-server-start.groovy
create mode 100644 gremlin-test/build/generate-translator-data.groovy
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/BindingsScriptEngineTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessLimitedComputerSuite.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessLimitedStandardSuite.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ComplexTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/OrderabilityTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/TernaryBooleanLogicsTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/ChooseTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/OptionalTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/UnionTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/AndTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CoinTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/CyclicPathTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DropTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/OrTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SimplePathTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CoalesceTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConnectedComponentTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConstantTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CountTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/EdgeTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ElementMapTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FlatMapTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/FoldTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/IndexTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/LoopsTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MaxTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeVertexTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MinTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PageRankTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PathTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PeerPressureTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProjectTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ReadTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ShortestPathTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/UnfoldTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ValueMapTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/WriteTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupCountTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/TreeTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SeedStrategyProcessTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategyProcessTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategyProcessTest.java
delete mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyProcessTest.java
create mode 100644 gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphbinary/GraphBinaryResourceAccess.java
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/language/translator/translations.json
rename gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/property-v1.gbin => gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/edge-property-v4.gbin (100%)
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/empty-binary-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/empty-bulklist-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/empty-list-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/empty-map-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/empty-path-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/empty-set-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/false-boolean-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/forever-duration-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/id-t-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/max-byte-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/max-double-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/max-float-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/max-int-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/max-long-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/max-offsetdatetime-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/max-short-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/meta-vertexproperty-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/min-byte-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/min-double-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/min-float-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/min-int-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/min-long-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/min-offsetdatetime-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/min-short-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/mixed-string-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/multi-byte-char-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/nan-double-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/nan-float-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-bigdecimal-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-biginteger-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-inf-double-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-inf-float-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-max-double-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-max-float-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-min-double-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-min-float-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-zero-double-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/neg-zero-float-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/nil-uuid-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/no-prop-edge-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/no-prop-vertex-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/null-property-v4.gbin
rename gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/direction-v1.gbin => gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/out-direction-v4.gbin (100%)
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/pos-bigdecimal-v4.gbin
rename gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/biginteger-v1.gbin => gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/pos-biginteger-v4.gbin (100%)
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/pos-inf-double-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/pos-inf-float-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/prop-path-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/set-cardinality-vertexproperty-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/single-byte-char-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/single-byte-string-v4.gbin
rename gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/uuid-v1.gbin => gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/specified-uuid-v4.gbin (100%)
rename gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/bytebuffer-v1.gbin => gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/str-binary-v4.gbin (100%)
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/tinker-graph-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/traversal-edge-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/traversal-path-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/traversal-tree-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/traversal-vertex-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/traversal-vertexproperty-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/true-boolean-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/unspecified-null-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/var-bulklist-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/var-type-list-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/var-type-map-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/var-type-set-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/zero-duration-v4.gbin
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/edge-property-v4-no-types.json
rename gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/property-v2.json => gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/edge-property-v4.json (100%)
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-binary-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-bulklist-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-list-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-map-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-path-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/empty-set-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/false-boolean-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/forever-duration-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/id-t-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/max-byte-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/max-double-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/max-float-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/max-int-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/max-long-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/max-offsetdatetime-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/max-short-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/meta-vertexproperty-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/min-byte-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/min-double-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/min-float-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/min-int-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/min-long-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/min-offsetdatetime-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/min-short-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/mixed-string-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/multi-byte-char-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/nan-double-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/nan-float-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-bigdecimal-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-biginteger-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-inf-double-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-inf-float-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-max-double-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-max-float-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-min-double-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-min-float-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-zero-double-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/neg-zero-float-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/nil-uuid-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/no-prop-edge-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/no-prop-vertex-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/null-property-v4.json
rename gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/direction-v2.json => gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/out-direction-v4.json (100%)
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pos-bigdecimal-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pos-biginteger-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pos-inf-double-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pos-inf-float-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/prop-path-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/set-cardinality-vertexproperty-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/single-byte-char-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/single-byte-string-v4.json
rename gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/uuid-v2.json => gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/specified-uuid-v4.json (100%)
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/str-binary-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinker-graph-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversal-edge-v4-no-types.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversal-edge-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversal-path-v4-no-types.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversal-path-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversal-tree-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversal-vertex-v4-no-types.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversal-vertex-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversal-vertexproperty-v4-no-types.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversal-vertexproperty-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/true-boolean-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/unspecified-null-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-bulklist-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-type-list-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-type-map-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/var-type-set-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/zero-duration-v4.json
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigDecimal.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/BigInt.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Binary.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Byte.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Char.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/DateTime.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Double.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Duration.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Float.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Int.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/List.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Long.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Map.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Set.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/Short.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/data/UUID.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Aggregate.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Discard.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Not.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/TypeOf.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/TypeOfGraph.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AsBool.feature
create mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AsNumber.feature
delete mode 100644 gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/sideEffect/Store.feature
delete mode 100644 gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
create mode 100644 gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/process/ApplyStrategiesBenchmark.java
create mode 100644 gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/process/RangeTraversalBenchmark.java
create mode 100644 gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalLockBenchmark.java
delete mode 100644 gremlin-tools/gremlin-benchmark/src/main/java/org/apache/tinkerpop/jsr223/JavaTranslatorBenchmark.java
delete mode 100644 gremlin-tools/gremlin-socket-server/src/main/java/org/apache/tinkerpop/gremlin/socket/server/TestChannelizers.java
delete mode 100644 gremlin-tools/gremlin-socket-server/src/main/java/org/apache/tinkerpop/gremlin/socket/server/TestWSGremlinInitializer.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatusCode.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV1.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV2.java
create mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV1.java
create mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphBinaryMessageSerializerV4.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV1.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV2.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV3.java
create mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV1.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV2.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV3.java
create mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/MessageTextSerializer.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/RequestMessageGryoSerializer.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/ResponseMessageGryoSerializer.java
delete mode 100644 gremlin-util/src/main/java/org/apache/tinkerpop/gremlin/util/ser/binary/ResponseMessageSerializer.java
create mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/message/RequestMessageTest.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/message/ResponseStatusCodeTest.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV1Test.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV2Test.java
create mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/AbstractGraphSONMessageSerializerV4Test.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV1Test.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV2Test.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV3RoundTripTest.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV3Test.java
create mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4RoundTripTest.java
create mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONMessageSerializerV4Test.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV1Test.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV2Test.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV3Test.java
create mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/GraphSONUntypedMessageSerializerV4Test.java
delete mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV1Test.java
create mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/GraphBinaryMessageSerializerV4Test.java
create mode 100644 gremlin-util/src/test/java/org/apache/tinkerpop/gremlin/util/ser/binary/MessageSerializerTest.java
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/barrier-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/bigdecimal-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/binding-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/bulkset-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/byte-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/bytecode-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/cardinality-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/char-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/class-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/column-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/date-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/double-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/duration-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/edge-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/float-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/inetaddress-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/instant-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/integer-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/lambda-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/list-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/localdate-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/localdatetime-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/localtime-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/long-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/map-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/metrics-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/monthday-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/offsetdatetime-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/offsettime-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/operator-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/order-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/p-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/pand-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/path-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/period-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/pick-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/pop-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/por-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/pwithin-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/pwithout-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/scope-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/set-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/short-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/t-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/textp-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/timestamp-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/tinkergraph-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/traversalmetrics-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/traverser-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/vertex-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/vertexproperty-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/year-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/yearmonth-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/zoneddatetime-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphbinary/zoneoffset-v1.gbin
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationchallenge-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationchallenge-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationchallenge-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationchallenge-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationchallenge-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationresponse-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationresponse-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationresponse-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationresponse-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/authenticationresponse-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/barrier-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/barrier-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/bigdecimal-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/bigdecimal-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/biginteger-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/biginteger-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/binding-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/binding-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/bulkset-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/bulkset-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/byte-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/byte-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/bytebuffer-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/bytebuffer-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/bytecode-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/bytecode-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/cardinality-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/cardinality-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/char-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/char-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/class-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/class-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/column-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/column-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/date-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/date-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/direction-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/double-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/double-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/duration-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/duration-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/edge-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/edge-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/edge-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/edge-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/edge-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/float-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/float-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/inetaddress-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/inetaddress-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/instant-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/instant-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/integer-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/integer-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/lambda-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/lambda-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/list-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/localdate-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/localdate-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/localdatetime-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/localdatetime-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/localtime-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/localtime-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/long-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/long-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/map-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/metrics-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/metrics-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/monthday-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/monthday-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/offsetdatetime-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/offsetdatetime-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/offsettime-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/offsettime-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/operator-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/operator-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/order-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/order-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/p-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/p-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pand-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pand-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/path-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/path-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/path-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/path-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/path-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/period-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/period-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pick-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pick-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pop-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pop-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/por-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/por-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/property-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/property-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/property-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/property-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pwithin-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pwithin-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pwithout-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/pwithout-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/scope-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/scope-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionclose-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionclose-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionclose-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionclose-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionclose-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessioneval-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessioneval-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessioneval-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessioneval-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessioneval-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionevalaliased-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionevalaliased-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionevalaliased-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionevalaliased-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionevalaliased-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlesseval-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlesseval-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlesseval-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlesseval-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlesseval-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlessevalaliased-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlessevalaliased-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlessevalaliased-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlessevalaliased-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/sessionlessevalaliased-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/set-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/short-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/short-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/standardresult-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/standardresult-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/standardresult-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/standardresult-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/standardresult-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/t-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/t-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/textp-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/textp-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/timestamp-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/timestamp-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkergraph-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkergraph-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversalmetrics-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traversalmetrics-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traverser-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/traverser-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/uuid-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertex-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertex-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertex-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertex-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertex-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertexproperty-v1-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertexproperty-v2-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertexproperty-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertexproperty-v3-no-types.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/vertexproperty-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/year-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/year-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/yearmonth-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/yearmonth-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/zoneddatetime-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/zoneddatetime-v3.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/zoneoffset-v2.json
delete mode 100644 gremlin-util/src/test/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/zoneoffset-v3.json
delete mode 100644 gremlint/README.md
delete mode 100644 gremlint/package-lock.json
delete mode 100644 gremlint/package.json
delete mode 100644 gremlint/pom.xml
delete mode 100644 gremlint/src/formatQuery/__tests__/closureIndentation.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/curlyBracketMultilineWrapping.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/curlyBracketWrapping.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/defaultConfig.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/determineWhatPartsOfCodeAreGremlin.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/dotsAfterLineBreaks.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/invalidIndentationAndMaxLineLength.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/maxLineLength.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/modulatorIndentation.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/modulatorWrapping.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/multipleQueriesAtOnce.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/nonGremlinIndentation.test.ts
delete mode 100644 gremlint/src/formatQuery/__tests__/nonMethodIndentation.test.ts
delete mode 100644 gremlint/src/formatQuery/consts.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatClosure.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatMethod.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatNonGremlin.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatString.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/index.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/reduceFirstStepInStepGroup.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/reduceLastStepInStepGroup.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/reduceMiddleStepInStepGroup.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/reduceSingleStepInStepGroup.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/getStepGroups/utils.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatTraversal/index.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/formatWord.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/index.ts
delete mode 100644 gremlint/src/formatQuery/formatSyntaxTrees/utils.ts
delete mode 100644 gremlint/src/formatQuery/index.ts
delete mode 100644 gremlint/src/formatQuery/parseToSyntaxTrees/__tests__/extractGremlinQueries.test.ts
delete mode 100644 gremlint/src/formatQuery/parseToSyntaxTrees/extractGremlinQueries.ts
delete mode 100644 gremlint/src/formatQuery/parseToSyntaxTrees/index.ts
delete mode 100644 gremlint/src/formatQuery/recreateQueryOnelinerFromSyntaxTree.ts
delete mode 100644 gremlint/src/formatQuery/recreateQueryStringFromFormattedSyntaxTrees.ts
delete mode 100644 gremlint/src/formatQuery/types.ts
delete mode 100644 gremlint/src/formatQuery/utils.ts
delete mode 100644 gremlint/src/index.ts
delete mode 100644 gremlint/tslint.json
delete mode 100644 hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/jsr223/HadoopRemoteAcceptor.java
create mode 100644 hadoop-gremlin/src/test/resources/META-INF/services/io.cucumber.core.backend.ObjectFactory
delete mode 100644 hadoop-gremlin/src/test/resources/cucumber.properties
delete mode 100644 neo4j-gremlin/pom.xml
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/jsr223/Neo4jGremlinPlugin.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/LabelP.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/step/sideEffect/CypherStartStep.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/step/sideEffect/Neo4jGraphStep.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/strategy/optimization/Neo4jGraphStepStrategy.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/process/util/Neo4jCypherIterator.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jEdge.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jElement.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraph.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraphVariables.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jHelper.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jProperty.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jVertex.java
delete mode 100644 neo4j-gremlin/src/main/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jVertexProperty.java
delete mode 100644 neo4j-gremlin/src/main/resources/META-INF/services/org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/AbstractNeo4jGraphProvider.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/AbstractNeo4jGremlinTest.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/NativeNeo4jSuite.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/Neo4jGraphFeatureTest.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/Neo4jGraphNativeNeo4jTest.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/Neo4jGraphProvider.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/process/NativeNeo4jCypherCheck.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/process/Neo4jGraphProcessStandardTest.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/process/traversal/strategy/optimization/Neo4jGraphStepStrategyTest.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/structure/NativeNeo4jIndexCheck.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/structure/NativeNeo4jStructureCheck.java
delete mode 100644 neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/structure/Neo4jGraphStructureStandardTest.java
delete mode 100644 neo4j-gremlin/src/test/resources/cucumber.properties
delete mode 100644 neo4j-gremlin/src/test/resources/logback-silent.xml
delete mode 100644 neo4j-gremlin/src/test/resources/logback-test.xml
create mode 100644 spark-gremlin/src/test/resources/META-INF/services/io.cucumber.core.backend.ObjectFactory
delete mode 100644 spark-gremlin/src/test/resources/cucumber.properties
delete mode 100644 sparql-gremlin/pom.xml
delete mode 100644 sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/Prefixes.java
delete mode 100644 sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java
delete mode 100644 sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/TraversalBuilder.java
delete mode 100644 sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/WhereTraversalBuilder.java
delete mode 100644 sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/jsr223/SparqlGremlinPlugin.java
delete mode 100644 sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/DefaultSparqlTraversal.java
delete mode 100644 sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversal.java
delete mode 100644 sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java
delete mode 100644 sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java
delete mode 100644 sparql-gremlin/src/main/resources/META-INF/services/org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin
delete mode 100644 sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/PrefixesTest.java
delete mode 100644 sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java
delete mode 100644 sparql-gremlin/src/test/resources/logback-silent.xml
delete mode 100644 sparql-gremlin/src/test/resources/logback-test.xml
create mode 100644 tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV4.java
create mode 100644 tinkergraph-gremlin/src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure/air-routes.kryo
create mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/TinkerGraphParameterizedFeatureTest.java
create mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinLangScriptEngineTest.java
create mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphRepeatRangeGlobalTest.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessComputerTest.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv2TranslatorProcessStandardTest.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessComputerTest.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONv3TranslatorProcessStandardTest.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/gryo/GryoTranslator.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/gryo/TinkerGraphGryoTranslatorComputerProvider.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/gryo/TinkerGraphGryoTranslatorProcessComputerTest.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/gryo/TinkerGraphGryoTranslatorProcessStandardTest.java
delete mode 100644 tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/gryo/TinkerGraphGryoTranslatorProvider.java
(tinkerpop) 05/10: docs and imports
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 8bd6f8a3cf88137f7f838e7ba65cb1fc17a2427f
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Tue May 6 12:56:08 2025 -0400
docs and imports
---
CHANGELOG.asciidoc | 4 +-
.../reference/implementations-tinkergraph.asciidoc | 162 +++++++++++++++++++++
docs/src/upgrade/release-3.8.x.asciidoc | 0
.../jsr223/TinkerGraphGremlinPlugin.java | 8 +
4 files changed, 173 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index e312807286..fd480a703e 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
[[release-4-0-0]]
=== TinkerPop 4.0.0 (Release Date: NOT OFFICIALLY RELEASED YET)
+* Added vector search to TinkerGraph.
+* Renamed the regex based seach service in TinkerGraph to `tinker.search.text`.
* Added typed numeric wrappers and `preciseNumbers` connection option to `gremlin-javascript` for explicit control over numeric type serialization and deserialization.
* Added `NextN(n)` to `Traversal` in `gremlin-go` for batched result iteration, providing API parity with `next(n)` in the Java, Python, and .NET GLVs, and updated the Go translators in `gremlin-core` and `gremlin-javascript` to emit `NextN(n)` for the batched form.
* Added Gremlator, a single page web application, that translates Gremlin into various programming languages like Javascript and Python.
@@ -83,7 +85,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
* Replace `WebSocket` with `HTTP` (non-streaming) in `gremlin-dotnet`.
* Added `MimeType` to `IMessageSerializer` and split client option to allow separate request and response serialization in `gremlin-dotnet`.
* Added `RequestInterceptor` to `gremlin-dotnet` with `auth` reference implementations.
-* Added streaming deserialization to `gremlin-dotnet`, results are now deserialized incrementally from the HTTP response stream via `IAsyncEnumerable<T>`.
+* Added streaming deserialization to `gremlin-dotnet`, results are now deserialized incrementally from the HTTP response stream via `IAsyncEnumerable<T>`.
* Target framework for `gremlin-dotnet` updated to `net8.0`.
* Bumped minimum Node.js version for `gremlin-javascript` from 20 to 22.
* Removed `mimeType` connection option in `gremlin-javascript` in favor of direct use of `reader` and `writer` options.
diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc b/docs/src/reference/implementations-tinkergraph.asciidoc
index 41e3e9b451..c5aeeafa49 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -219,6 +219,168 @@ g.io("data/tinkerpop-crew.kryo").read().iterate()
g.V().properties()
----
+=== Indices
+
+Indices are a critical component of graph databases that significantly improve query performance by allowing for quick
+lookups of elements based on their properties. Without indices, graph traversals would need to scan through all
+elements to find those matching specific criteria, which becomes increasingly inefficient as the graph grows in size.
+
+TinkerGraph supports two types of indices:
+
+1. *Key-based Indices*: Traditional indices that enable fast lookups of vertices or edges based on property values.
+2. *Vector Indices*: Specialized indices for similarity search that find elements with vector embeddings similar to a
+query vector.
+
+==== Key-based Indices
+
+Key-based indices are the standard way to improve lookup performance in TinkerGraph. They're simple to create and use:
+
+[gremlin-groovy]
+----
+graph.createIndex("name", Vertex.class) <1>
+g.addV("person").property("name", "marko").property("age", 29).iterate()
+g.addV("person").property("name", "vadas").property("age", 27).iterate()
+g.addV("person").property("name", "josh").property("age", 32).iterate()
+g.V().has("name", "marko").next() <2>
+----
+
+<1> Create an index on the "name" property for vertices.
+<2> Query using the index - this will be much faster than a full scan.
+
+You can also create indices for edge properties:
+
+[gremlin-groovy]
+----
+graph.createIndex("weight", Edge.class) <1>
+marko = g.V().has("name", "marko").next()
+vadas = g.V().has("name", "vadas").next()
+g.addE("knows").from(marko).to(vadas).property("weight", 0.5).iterate()
+g.E().has("weight", 0.5).next() <2>
+----
+
+<1> Create an index on the "weight" property for edges.
+<2> Query using the index - this will be much faster than a full scan.
+
+To check which properties are indexed for a particular element class:
+
+[gremlin-groovy]
+----
+graph.getIndexedKeys(Vertex.class) <1>
+graph.getIndexedKeys(Edge.class) <2>
+----
+
+<1> Get all indexed keys for vertices.
+<2> Get all indexed keys for edges.
+
+To drop an index when it's no longer needed:
+
+[gremlin-groovy]
+----
+graph.dropIndex("name", Vertex.class)
+----
+
+==== Vector Indices
+
+Vector indices enable similarity search based on vector embeddings. Vector search allows you to find elements that are
+conceptually similar rather than just matching on exact property values. Vector search works by representing elements as
+points in a high-dimensional space, where proximity indicates similarity. TinkerGraph implements vector search using
+HNSW (Hierarchical Navigable Small World), an algorithm for approximate nearest neighbor search that provides excellent
+performance for high-dimensional vector data.
+
+To use vector indices in TinkerGraph, you need to:
+
+1. Create a vector index with a specified dimension
+2. Add elements with vector embeddings
+3. Perform searches using either direct graph methods or the `call()` step
+
+Here's a complete example:
+
+[gremlin-groovy]
+----
+graph.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graph)) <1>
+indexConfig = [:]
+indexConfig.put(TinkerVectorIndex.CONFIG_DIMENSION, 3) <2>
+graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
+g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate()
+g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate()
+g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate()
+g.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate()
+params = [key: "embedding", topK: 2] <3>
+g.V().has("name", "Alice").call("tinker.search.vector.topKByElement", params).toList()
+----
+
+<1> Register the vector search service.
+<2> Configuration for the vector index that defines the embedding dimension of size 3.
+<3> Specify the property key containing the embedding and number of results to return.
+
+The `call()` step returns a list of maps, each containing:
+
+* `distance`: The similarity score between the query vector and the result
+* `element`: The vertex or edge that matches the query
+
+Vector indices can also be created for edges:
+
+[gremlin-groovy]
+----
+graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig)
+alice = g.V().has("name", "Alice").next()
+bob = g.V().has("name", "Bob").next()
+charlie = g.V().has("name", "Charlie").next()
+g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate()
+g.addE("knows").from(bob).to(charlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate()
+params = [key: "embedding"]
+g.E().has("embedding", new float[]{1.0f, 0.0f, 0.0f}).call("tinker.search.vector.topKByElement", params).toList()
+----
+
+TinkerGraph supports various distance functions for vector similarity search:
+
+* `COSINE`: Measures the cosine of the angle between two vectors (default)
+* `EUCLIDEAN`: Measures the straight-line distance between two points
+* `MANHATTAN`: Measures the sum of absolute differences between coordinates
+* `INNER_PRODUCT`: Measures the dot product of two vectors
+* `BRAY_CURTIS`: Measures the Bray-Curtis dissimilarity
+* `CANBERRA`: Measures the weighted Manhattan distance
+* `CORRELATION`: Measures the correlation distance
+
+You can specify the distance function when creating the vector index:
+
+[gremlin-groovy]
+----
+indexConfig = [:]
+indexConfig.put(TinkerVectorIndex.CONFIG_DIMENSION, 3)
+indexConfig.put(TinkerVectorIndex.CONFIG_DISTANCE_TYPE, TinkerIndexType.Vector.EUCLIDEAN)
+graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
+----
+
+There are several configuration options that can be used to fine-tune the performance and behavior of vector indices.
+These options are specified when creating a vector index:
+
+[width="100%",cols="2,5,2",options="header"]
+|=========================================================
+|Configuration Option |Description |Default Value
+|`CONFIG_DIMENSION` |The dimension of the vector embeddings. This is a required parameter and must match the length of the vector embeddings stored in the graph. |N/A (Required)
+|`CONFIG_DISTANCE_TYPE` |The distance function to use for similarity calculations. Must be one of the `TinkerIndexType.Vector` enum values (COSINE, EUCLIDEAN, MANHATTAN, INNER_PRODUCT, BRAY_CURTIS, CANBERRA, CORRELATION). |COSINE
+|`CONFIG_M` |The maximum number of connections per node in the HNSW graph. Higher values provide better search quality at the cost of increased memory usage and index build time. |16
+|`CONFIG_EF_CONSTRUCTION` |The size of the dynamic candidate list during index construction. Higher values improve index quality at the cost of longer build times. |200
+|`CONFIG_EF` |The size of the dynamic candidate list during search. Higher values improve search accuracy at the cost of slower search times. |10
+|`CONFIG_MAX_ITEMS` |The maximum number of items that can be stored in the index. |100
+|=========================================================
+
+Here's an example of creating a vector index with custom configuration options:
+
+[gremlin-groovy]
+----
+// create a vector index with custom configuration
+indexConfig = [:]
+indexConfig.put(TinkerVectorIndex.CONFIG_DIMENSION, 128)
+indexConfig.put(TinkerVectorIndex.CONFIG_DISTANCE_TYPE, TinkerIndexType.Vector.COSINE)
+indexConfig.put(TinkerVectorIndex.CONFIG_M, 32)
+indexConfig.put(TinkerVectorIndex.CONFIG_EF_CONSTRUCTION, 300)
+indexConfig.put(TinkerVectorIndex.CONFIG_EF, 20)
+indexConfig.put(TinkerVectorIndex.CONFIG_MAX_ITEMS, 1000)
+graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
+----
+
[[tinkergraph-gremlin-tx]]
=== Transactions
diff --git a/docs/src/upgrade/release-3.8.x.asciidoc b/docs/src/upgrade/release-3.8.x.asciidoc
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
index 007db18352..b346cc570f 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
@@ -28,6 +28,10 @@ import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerMemory;
import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerMessenger;
import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerReduceEmitter;
import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerWorkerPool;
+import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerDegreeCentralityFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerServiceRegistry;
+import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerTextSearchFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerEdge;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerElement;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
@@ -59,6 +63,10 @@ public final class TinkerGraphGremlinPlugin extends AbstractGremlinPlugin {
TinkerIoRegistryV2.class,
TinkerIoRegistryV3.class,
TinkerIoRegistryV4.class,
+ TinkerVectorSearchFactory.class,
+ TinkerTextSearchFactory.class,
+ TinkerDegreeCentralityFactory.class,
+ TinkerServiceRegistry.TinkerServiceFactory.class,
TinkerProperty.class,
TinkerVertex.class,
TinkerVertexProperty.class,
(tinkerpop) 02/10: vector search in transaction graph
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 91fac89656576dbb1a69a43c4dc58e25ad753dbb
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Fri May 2 09:50:11 2025 -0400
vector search in transaction graph
---
.../tinkergraph/structure/AbstractTinkerGraph.java | 140 ++++++++++++++-
.../structure/AbstractTinkerVectorIndex.java | 54 ++++++
.../gremlin/tinkergraph/structure/TinkerGraph.java | 127 +-------------
.../tinkergraph/structure/TinkerTransaction.java | 27 ++-
.../structure/TinkerTransactionGraph.java | 44 +----
...ionalIndex.java => TinkerTransactionIndex.java} | 4 +-
...ndex.java => TinkerTransactionVectorIndex.java} | 81 ++++++---
.../tinkergraph/structure/TinkerVectorIndex.java | 11 +-
.../structure/TinkerGraphVectorIndexTest.java | 188 +++++++++++++++------
.../structure/TinkerTransactionGraphTest.java | 18 +-
10 files changed, 429 insertions(+), 265 deletions(-)
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java
index ef2f65af01..5ace0fd93a 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java
@@ -37,9 +37,11 @@ import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerServiceRegistry;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -72,8 +74,8 @@ public abstract class AbstractTinkerGraph implements Graph {
protected TinkerGraphComputerView graphComputerView = null;
protected AbstractTinkerIndex<TinkerVertex> vertexIndex = null;
protected AbstractTinkerIndex<TinkerEdge> edgeIndex = null;
- protected TinkerVectorIndex<TinkerVertex> vertexVectorIndex = null;
- protected TinkerVectorIndex<TinkerEdge> edgeVectorIndex = null;
+ protected AbstractTinkerVectorIndex<TinkerVertex> vertexVectorIndex = null;
+ protected AbstractTinkerVectorIndex<TinkerEdge> edgeVectorIndex = null;
protected IdManager<Vertex> vertexIdManager;
protected IdManager<Edge> edgeIdManager;
@@ -292,6 +294,64 @@ public abstract class AbstractTinkerGraph implements Graph {
return configuration;
}
+ ///////////// Vector Search /////////////////
+
+ /**
+ * Find the nearest vertices to the given vector in the vector index for the specified property key.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of vertices sorted by distance
+ */
+ public List<Vertex> findNearestVertices(final String key, final float[] vector, final int k) {
+ if (null == this.vertexVectorIndex)
+ throw new IllegalStateException("Vector index not created for vertices on key: '" + key + "'");
+ return new ArrayList<>(this.vertexVectorIndex.findNearest(key, vector, k));
+ }
+
+ /**
+ * Find the nearest vertices to the given vector in the vector index for the specified property key.
+ * Uses the default number of nearest neighbors.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of vertices sorted by distance
+ */
+ public List<Vertex> findNearestVertices(final String key, final float[] vector) {
+ if (null == this.vertexVectorIndex)
+ throw new IllegalStateException("Vector index not created for vertices on key: '" + key + "'");
+ return new ArrayList<>(this.vertexVectorIndex.findNearest(key, vector));
+ }
+
+ /**
+ * Find the nearest edges to the given vector in the vector index for the specified property key.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of edges sorted by distance
+ */
+ public List<Edge> findNearestEdges(final String key, final float[] vector, final int k) {
+ if (null == this.edgeVectorIndex)
+ throw new IllegalStateException("Vector index not created for edges on key: '" + key + "'");
+ return new ArrayList<>(this.edgeVectorIndex.findNearest(key, vector, k));
+ }
+
+ /**
+ * Find the nearest edges to the given vector in the vector index for the specified property key.
+ * Uses the default number of nearest neighbors.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of edges sorted by distance
+ */
+ public List<Edge> findNearestEdges(final String key, final float[] vector) {
+ if (null == this.edgeVectorIndex)
+ throw new IllegalStateException("Vector index not created for edges on key: '" + key + "'");
+ return new ArrayList<>(this.edgeVectorIndex.findNearest(key, vector));
+ }
+
///////////// Utility methods ///////////////
protected abstract void addOutEdge(final TinkerVertex vertex, final String label, final Edge edge);
@@ -392,6 +452,82 @@ public abstract class AbstractTinkerGraph implements Graph {
///////////// GRAPH SPECIFIC INDEXING METHODS ///////////////
+ /**
+ * Provides a mechanism to internally construct an {@link AbstractTinkerIndex} of the appropriate type for a
+ * particular implementation of this class.
+ */
+ protected abstract <E extends Element> AbstractTinkerIndex<E> constructTinkerIndex(final TinkerIndexType indexType,
+ final Class<E> elementClass);
+
+ /**
+ * Create an index for said element class ({@link Vertex} or {@link Edge}) and said property key.
+ * Whenever an element has the specified key mutated, the index is updated.
+ * When the index is created, all existing elements are indexed to ensure that they are captured by the index.
+ *
+ * @param key the property key to index
+ * @param elementClass the element class to index
+ * @param <E> The type of the element class
+ */
+ public <E extends Element> void createIndex(final String key, final Class<E> elementClass) {
+ createIndex(TinkerIndexType.DEFAULT, key, elementClass, Collections.emptyMap());
+ }
+
+ /**
+ * Create an index for said element class ({@link Vertex} or {@link Edge}) and said property key with the specified index type.
+ * Whenever an element has the specified key mutated, the index is updated.
+ * When the index is created, all existing elements are indexed to ensure that they are captured by the index.
+ *
+ * @param indexType the type of the index
+ * @param key the property key to index
+ * @param elementClass the element class to index
+ * @param configuration the configuration options
+ * @param <E> The type of the element class
+ */
+ public <E extends Element> void createIndex(final TinkerIndexType indexType, final String key,
+ final Class<E> elementClass, final Map<String, Object> configuration) {
+ if (TinkerIndexType.VECTOR == indexType) {
+ if (Vertex.class.isAssignableFrom(elementClass)) {
+ if (null == this.vertexVectorIndex) this.vertexVectorIndex = (AbstractTinkerVectorIndex<TinkerVertex>) constructTinkerIndex(TinkerIndexType.VECTOR, TinkerVertex.class);
+ this.vertexVectorIndex.createIndex(key, configuration);
+ } else if (Edge.class.isAssignableFrom(elementClass)) {
+ if (null == this.edgeVectorIndex) this.edgeVectorIndex = (AbstractTinkerVectorIndex<TinkerEdge>) constructTinkerIndex(TinkerIndexType.VECTOR, TinkerEdge.class);
+ this.edgeVectorIndex.createIndex(key, configuration);
+ } else {
+ throw new IllegalArgumentException("Class is not indexable: " + elementClass);
+ }
+ } else {
+ // Create a standard index
+ if (Vertex.class.isAssignableFrom(elementClass)) {
+ if (null == this.vertexIndex) this.vertexIndex = constructTinkerIndex(TinkerIndexType.DEFAULT, TinkerVertex.class);
+ this.vertexIndex.createIndex(key);
+ } else if (Edge.class.isAssignableFrom(elementClass)) {
+ if (null == this.edgeIndex) this.edgeIndex = constructTinkerIndex(TinkerIndexType.DEFAULT, TinkerEdge.class);
+ this.edgeIndex.createIndex(key);
+ } else {
+ throw new IllegalArgumentException("Class is not indexable: " + elementClass);
+ }
+ }
+ }
+
+ /**
+ * Drop the index for the specified element class ({@link Vertex} or {@link Edge}) and key.
+ *
+ * @param key the property key to stop indexing
+ * @param elementClass the element class of the index to drop
+ * @param <E> The type of the element class
+ */
+ public <E extends Element> void dropIndex(final String key, final Class<E> elementClass) {
+ if (Vertex.class.isAssignableFrom(elementClass)) {
+ if (null != this.vertexIndex) this.vertexIndex.dropIndex(key);
+ if (null != this.vertexVectorIndex) this.vertexVectorIndex.dropIndex(key);
+ } else if (Edge.class.isAssignableFrom(elementClass)) {
+ if (null != this.edgeIndex) this.edgeIndex.dropIndex(key);
+ if (null != this.edgeVectorIndex) this.edgeVectorIndex.dropIndex(key);
+ } else {
+ throw new IllegalArgumentException("Class is not indexable: " + elementClass);
+ }
+ }
+
/**
* Return all the keys currently being index for said element class ({@link Vertex} or {@link Edge}).
*
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java
new file mode 100644
index 0000000000..3a4e67cb25
--- /dev/null
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+
+import org.apache.tinkerpop.gremlin.structure.Element;
+
+import java.util.List;
+/**
+ * Base class for representing a vector index for performing nearest neighbor searches.
+ *
+ * @param <T> the type of elements stored in the vector index
+ */
+public abstract class AbstractTinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T> {
+
+ protected AbstractTinkerVectorIndex(final AbstractTinkerGraph graph, final Class<T> indexClass) {
+ super(graph, indexClass);
+ }
+
+ /**
+ * Searches for nearest neighbors in the vector index.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of elements sorted by distance
+ */
+ public abstract List<T> findNearest(final String key, final float[] vector, final int k);
+
+ /**
+ * Searches for nearest neighbors in the vector index with the default k.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of elements sorted by distance
+ */
+ public abstract List<T> findNearest(final String key, final float[] vector);
+
+}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
index a54df6a858..177378b620 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
@@ -372,130 +372,9 @@ public class TinkerGraph extends AbstractTinkerGraph {
}
- ///////////// GRAPH SPECIFIC INDEXING METHODS ///////////////
-
- /**
- * Create a default index for said element class ({@link Vertex} or {@link Edge}) and said property key.
- * Whenever an element has the specified key mutated, the index is updated.
- * When the index is created, all existing elements are indexed to ensure that they are captured by the index.
- *
- * @param key the property key to index
- * @param elementClass the element class to index
- * @param <E> The type of the element class
- */
- public <E extends Element> void createIndex(final String key, final Class<E> elementClass) {
- createIndex(TinkerIndexType.DEFAULT, key, elementClass, Collections.emptyMap());
- }
-
- /**
- * Create an index for said element class ({@link Vertex} or {@link Edge}) and said property key with the given
- * configuration options. Whenever an element has the specified key mutated, the index is updated. When the index
- * is created, all existing elements are indexed to ensure that they are captured by the index.
- *
- * @param indexType the type of the index
- * @param key the property key to index
- * @param elementClass the element class to index
- * @param configuration the configuration options
- * @param <E> The type of the element class
- */
- public <E extends Element> void createIndex(final TinkerIndexType indexType, final String key,
- final Class<E> elementClass, final Map<String, Object> configuration) {
- if (TinkerIndexType.VECTOR == indexType) {
- if (Vertex.class.isAssignableFrom(elementClass)) {
- if (null == this.vertexVectorIndex) this.vertexVectorIndex = new TinkerVectorIndex<>(this, TinkerVertex.class);
- this.vertexVectorIndex.createIndex(key, configuration);
- } else if (Edge.class.isAssignableFrom(elementClass)) {
- if (null == this.edgeVectorIndex) this.edgeVectorIndex = new TinkerVectorIndex<>(this, TinkerEdge.class);
- this.edgeVectorIndex.createIndex(key, configuration);
- } else {
- throw new IllegalArgumentException("Class is not indexable: " + elementClass);
- }
- } else {
- // Create a standard index
- if (Vertex.class.isAssignableFrom(elementClass)) {
- if (null == this.vertexIndex) this.vertexIndex = new TinkerIndex<>(this, TinkerVertex.class);
- this.vertexIndex.createIndex(key);
- } else if (Edge.class.isAssignableFrom(elementClass)) {
- if (null == this.edgeIndex) this.edgeIndex = new TinkerIndex<>(this, TinkerEdge.class);
- this.edgeIndex.createIndex(key);
- } else {
- throw new IllegalArgumentException("Class is not indexable: " + elementClass);
- }
- }
- }
-
- /**
- * Drop the index for the specified element class ({@link Vertex} or {@link Edge}) and key.
- *
- * @param key the property key to stop indexing
- * @param elementClass the element class of the index to drop
- * @param <E> The type of the element class
- */
- public <E extends Element> void dropIndex(final String key, final Class<E> elementClass) {
- if (Vertex.class.isAssignableFrom(elementClass)) {
- if (null != this.vertexIndex) this.vertexIndex.dropIndex(key);
- if (null != this.vertexVectorIndex) this.vertexVectorIndex.dropIndex(key);
- } else if (Edge.class.isAssignableFrom(elementClass)) {
- if (null != this.edgeIndex) this.edgeIndex.dropIndex(key);
- if (null != this.edgeVectorIndex) this.edgeVectorIndex.dropIndex(key);
- } else {
- throw new IllegalArgumentException("Class is not indexable: " + elementClass);
- }
- }
-
- /**
- * Find the nearest vertices to the given vector in the vector index for the specified property key.
- *
- * @param key the property key
- * @param vector the query vector
- * @param k the number of nearest neighbors to return
- * @return a list of vertices sorted by distance
- */
- public List<Vertex> findNearestVertices(final String key, final float[] vector, final int k) {
- if (null == this.vertexVectorIndex)
- return Collections.emptyList();
- return new ArrayList<>(this.vertexVectorIndex.findNearest(key, vector, k));
- }
-
- /**
- * Find the nearest vertices to the given vector in the vector index for the specified property key.
- * Uses the default number of nearest neighbors.
- *
- * @param key the property key
- * @param vector the query vector
- * @return a list of vertices sorted by distance
- */
- public List<Vertex> findNearestVertices(final String key, final float[] vector) {
- if (null == this.vertexVectorIndex)
- return Collections.emptyList();
- return new ArrayList<>(this.vertexVectorIndex.findNearest(key, vector));
- }
-
- /**
- * Find the nearest edges to the given vector in the vector index for the specified property key.
- *
- * @param key the property key
- * @param vector the query vector
- * @param k the number of nearest neighbors to return
- * @return a list of edges sorted by distance
- */
- public List<Edge> findNearestEdges(final String key, final float[] vector, final int k) {
- if (null == this.edgeVectorIndex)
- return Collections.emptyList();
- return new ArrayList<>(this.edgeVectorIndex.findNearest(key, vector, k));
+ @Override
+ protected <E extends Element> AbstractTinkerIndex<E> constructTinkerIndex(final TinkerIndexType indexType, final Class<E> elementClass) {
+ return indexType == TinkerIndexType.VECTOR ? new TinkerVectorIndex<E>(this, elementClass) : new TinkerIndex<E>(this, elementClass);
}
- /**
- * Find the nearest edges to the given vector in the vector index for the specified property key.
- * Uses the default number of nearest neighbors.
- *
- * @param key the property key
- * @param vector the query vector
- * @return a list of edges sorted by distance
- */
- public List<Edge> findNearestEdges(final String key, final float[] vector) {
- if (null == this.edgeVectorIndex)
- return Collections.emptyList();
- return new ArrayList<>(this.edgeVectorIndex.findNearest(key, vector));
- }
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransaction.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransaction.java
index 4cf8b50fca..b214849249 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransaction.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransaction.java
@@ -19,7 +19,6 @@
package org.apache.tinkerpop.gremlin.tinkergraph.structure;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.structure.Transaction;
import org.apache.tinkerpop.gremlin.structure.util.AbstractThreadLocalTransaction;
import org.apache.tinkerpop.gremlin.structure.util.TransactionException;
@@ -176,11 +175,15 @@ final class TinkerTransaction extends AbstractThreadLocalTransaction {
throw new TransactionException(TX_CONFLICT);
// update indices
- final TinkerTransactionalIndex vertexIndex = (TinkerTransactionalIndex) graph.vertexIndex;
+ final TinkerTransactionIndex vertexIndex = (TinkerTransactionIndex) graph.vertexIndex;
if (vertexIndex != null) vertexIndex.commit(changedVertices);
- final TinkerTransactionalIndex edgeIndex = (TinkerTransactionalIndex) graph.edgeIndex;
+ final TinkerTransactionIndex edgeIndex = (TinkerTransactionIndex) graph.edgeIndex;
if (edgeIndex != null) edgeIndex.commit(changedEdges);
+ // update vector indices
+ if (graph.vertexVectorIndex != null) ((TinkerTransactionVectorIndex) graph.vertexVectorIndex).commit(changedVertices);
+ if (graph.edgeVectorIndex != null) ((TinkerTransactionVectorIndex) graph.edgeVectorIndex).commit(changedEdges);
+
// commit all changes
changedVertices.forEach(v -> v.commit(txVersion));
changedEdges.forEach(e -> e.commit(txVersion));
@@ -190,11 +193,15 @@ final class TinkerTransaction extends AbstractThreadLocalTransaction {
changedEdges.forEach(e -> e.rollback());
// also revert indices update
- final TinkerTransactionalIndex vertexIndex = (TinkerTransactionalIndex) graph.vertexIndex;
+ final TinkerTransactionIndex vertexIndex = (TinkerTransactionIndex) graph.vertexIndex;
if (vertexIndex != null) vertexIndex.rollback();
- final TinkerTransactionalIndex edgeIndex = (TinkerTransactionalIndex) graph.edgeIndex;
+ final TinkerTransactionIndex edgeIndex = (TinkerTransactionIndex) graph.edgeIndex;
if (edgeIndex != null) edgeIndex.rollback();
+ // revert vector indices update
+ if (graph.vertexVectorIndex != null) ((TinkerTransactionVectorIndex) graph.vertexVectorIndex).rollback();
+ if (graph.edgeVectorIndex != null) ((TinkerTransactionVectorIndex) graph.edgeVectorIndex).rollback();
+
throw ex;
} finally {
// remove elements from graph if not used in other tx's
@@ -234,10 +241,14 @@ final class TinkerTransaction extends AbstractThreadLocalTransaction {
if (null != changedEdges) changedEdges.forEach(e -> e.rollback());
// rollback indices
- final TinkerTransactionalIndex vertexIndex = (TinkerTransactionalIndex) graph.vertexIndex;
+ final TinkerTransactionIndex vertexIndex = (TinkerTransactionIndex) graph.vertexIndex;
if (vertexIndex != null) vertexIndex.rollback();
- final TinkerTransactionalIndex edgeIndex = (TinkerTransactionalIndex) graph.edgeIndex;
- if (vertexIndex != null) edgeIndex.rollback();
+ final TinkerTransactionIndex edgeIndex = (TinkerTransactionIndex) graph.edgeIndex;
+ if (edgeIndex != null) edgeIndex.rollback();
+
+ // rollback vector indices
+ if (graph.vertexVectorIndex != null) ((TinkerTransactionVectorIndex) graph.vertexVectorIndex).rollback();
+ if (graph.edgeVectorIndex != null) ((TinkerTransactionVectorIndex) graph.edgeVectorIndex).rollback();
// cleanup unused containers
if (null != changedVertices)
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java
index f4cd761a2c..6b53a43f96 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java
@@ -35,8 +35,10 @@ import org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.strategy.optim
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerServiceRegistry;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -461,44 +463,8 @@ public final class TinkerTransactionGraph extends AbstractTinkerGraph {
}
-
- /////////////// GRAPH SPECIFIC INDEXING METHODS ///////////////
-
- /**
- * Create an index for said element class ({@link Vertex} or {@link Edge}) and said property key.
- * Whenever an element has the specified key mutated, the index is updated.
- * When the index is created, all existing elements are indexed to ensure that they are captured by the index.
- *
- * @param key the property key to index
- * @param elementClass the element class to index
- * @param <E> The type of the element class
- */
- public <E extends Element> void createIndex(final String key, final Class<E> elementClass) {
- if (Vertex.class.isAssignableFrom(elementClass)) {
- if (null == this.vertexIndex) this.vertexIndex = new TinkerTransactionalIndex<>(this, TinkerVertex.class);
- this.vertexIndex.createIndex(key);
- } else if (Edge.class.isAssignableFrom(elementClass)) {
- if (null == this.edgeIndex) this.edgeIndex = new TinkerTransactionalIndex<>(this, TinkerEdge.class);
- this.edgeIndex.createIndex(key);
- } else {
- throw new IllegalArgumentException("Class is not indexable: " + elementClass);
- }
- }
-
- /**
- * Drop the index for the specified element class ({@link Vertex} or {@link Edge}) and key.
- *
- * @param key the property key to stop indexing
- * @param elementClass the element class of the index to drop
- * @param <E> The type of the element class
- */
- public <E extends Element> void dropIndex(final String key, final Class<E> elementClass) {
- if (Vertex.class.isAssignableFrom(elementClass)) {
- if (null != this.vertexIndex) this.vertexIndex.dropIndex(key);
- } else if (Edge.class.isAssignableFrom(elementClass)) {
- if (null != this.edgeIndex) this.edgeIndex.dropIndex(key);
- } else {
- throw new IllegalArgumentException("Class is not indexable: " + elementClass);
- }
+ @Override
+ protected <E extends Element> AbstractTinkerIndex<E> constructTinkerIndex(final TinkerIndexType indexType, final Class<E> elementClass) {
+ return indexType == TinkerIndexType.VECTOR ? new TinkerTransactionVectorIndex(this, elementClass) : new TinkerTransactionIndex(this, elementClass);
}
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionalIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionIndex.java
similarity index 97%
rename from tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionalIndex.java
rename to tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionIndex.java
index 0edfdaaaa3..cc1bc7521d 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionalIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionIndex.java
@@ -32,13 +32,13 @@ import java.util.stream.Collectors;
/**
* @author Valentyn Kahamlyk
*/
-final class TinkerTransactionalIndex<T extends TinkerElement> extends AbstractTinkerIndex<T> {
+final class TinkerTransactionIndex<T extends TinkerElement> extends AbstractTinkerIndex<T> {
protected Map<String, Map<Object, Set<TinkerElementContainer<T>>>> index = new ConcurrentHashMap<>();
protected ThreadLocal<Map<String, Map<Object, Set<T>>>> txIndex =
ThreadLocal.withInitial(() -> new ConcurrentHashMap<>());
- public TinkerTransactionalIndex(final TinkerTransactionGraph graph, final Class<T> indexClass) {
+ public TinkerTransactionIndex(final TinkerTransactionGraph graph, final Class<T> indexClass) {
super(graph, indexClass);
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java
similarity index 81%
copy from tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
copy to tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java
index a31c4148cd..111d4fcb7b 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java
@@ -18,13 +18,10 @@
*/
package org.apache.tinkerpop.gremlin.tinkergraph.structure;
-import com.github.jelmerk.hnswlib.core.DistanceFunction;
-import com.github.jelmerk.hnswlib.core.DistanceFunctions;
import com.github.jelmerk.hnswlib.core.Item;
import com.github.jelmerk.hnswlib.core.SearchResult;
import com.github.jelmerk.hnswlib.core.hnsw.HnswIndex;
import com.github.jelmerk.hnswlib.core.Index;
-import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -33,15 +30,16 @@ import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
- * A vector index implementation for TinkerGraph using hnswlib.
+ * A vector index implementation for TinkerTransactionGraph using hnswlib.
*
* @param <T> the element type (Vertex or Edge)
*/
-final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T> {
+final class TinkerTransactionVectorIndex<T extends TinkerElement> extends AbstractTinkerVectorIndex<T> {
/**
* Map of property key to vector index
@@ -103,18 +101,13 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T>
*/
public static final String CONFIG_DISTANCE_FUNCTION = "distanceFunction";
- /**
- * Configuration key for the default number of nearest neighbors to return
- */
- public static final String CONFIG_DEFAULT_K = "defaultK";
-
/**
* Creates a new vector index for the specified graph and element class.
*
* @param graph the graph
* @param indexClass the element class
*/
- public TinkerVectorIndex(final TinkerGraph graph, final Class<T> indexClass) {
+ public TinkerTransactionVectorIndex(final TinkerTransactionGraph graph, final Class<T> indexClass) {
super(graph, indexClass);
}
@@ -202,18 +195,25 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T>
this.vectorIndices.put(key, index);
// Index existing elements
- (Vertex.class.isAssignableFrom(this.indexClass) ?
- ((TinkerGraph) this.graph).vertices.values().parallelStream() :
- ((TinkerGraph) this.graph).edges.values().parallelStream())
- .map(e -> new Object[]{((T) e).property(key), e})
- .filter(a -> ((Property) a[0]).isPresent())
- .forEach(a -> {
- // values for the key that don't match the dimensions of the index won't be added
- final Object value = ((Property) a[0]).value();
+ final Map elements =
+ Vertex.class.isAssignableFrom(indexClass) ?
+ ((TinkerTransactionGraph) graph).getVertices() :
+ ((TinkerTransactionGraph) graph).getEdges();
+
+ for (Object element : elements.values()) {
+ TinkerElementContainer container = (TinkerElementContainer) element;
+ Object e = container.get();
+ if (e != null && indexClass.isInstance(e)) {
+ T tinkerElement = (T) e;
+ Property property = tinkerElement.property(key);
+ if (property.isPresent()) {
+ Object value = property.value();
if (value instanceof float[] && ((float[]) value).length == dimension) {
- this.addToIndex(key, (float[]) value, (T) a[1]);
+ this.addToIndex(key, (float[]) value, tinkerElement);
}
- });
+ }
+ }
+ }
}
/**
@@ -225,7 +225,7 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T>
*/
public void addToIndex(final String key, final float[] vector, final T element) {
if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
- return;
+ throw new IllegalArgumentException("The key '" + key + "' is not indexed");
final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
final ElementItem item = new ElementItem(element.id(), vector, element);
@@ -242,7 +242,7 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T>
*/
public List<T> findNearest(final String key, final float[] vector, final int k) {
if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
- return Collections.emptyList();
+ throw new IllegalArgumentException("The key '" + key + "' is not indexed");
final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
final List<SearchResult<ElementItem, Float>> nearest = index.findNearest(vector, k);
@@ -380,4 +380,39 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T>
updateIndex(key, (float[]) newValue, element);
}
}
+
+ /**
+ * Commit changes to the index.
+ *
+ * @param updatedElements the set of updated elements
+ */
+ public void commit(final Set<TinkerElementContainer> updatedElements) {
+ for (final TinkerElementContainer container : updatedElements) {
+ Object element = container.get();
+ if (element != null && !container.isDeleted() && indexClass.isInstance(element)) {
+ T tinkerElement = (T) element;
+ for (String key : this.indexedKeys) {
+ Property property = tinkerElement.property(key);
+ if (property.isPresent() && property.value() instanceof float[]) {
+ updateIndex(key, (float[]) property.value(), tinkerElement);
+ }
+ }
+ } else if (container.isDeleted()) {
+ Object oldElement = container.getUnmodified();
+ if (oldElement != null && indexClass.isInstance(oldElement)) {
+ T tinkerOldElement = (T) oldElement;
+ for (String key : this.indexedKeys) {
+ removeFromIndex(key, tinkerOldElement);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Rollback changes to the index.
+ */
+ public void rollback() {
+ // No specific action needed for rollback in the current implementation
+ }
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
index a31c4148cd..f280d0a3fb 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
@@ -18,8 +18,6 @@
*/
package org.apache.tinkerpop.gremlin.tinkergraph.structure;
-import com.github.jelmerk.hnswlib.core.DistanceFunction;
-import com.github.jelmerk.hnswlib.core.DistanceFunctions;
import com.github.jelmerk.hnswlib.core.Item;
import com.github.jelmerk.hnswlib.core.SearchResult;
import com.github.jelmerk.hnswlib.core.hnsw.HnswIndex;
@@ -41,7 +39,7 @@ import java.util.stream.Collectors;
*
* @param <T> the element type (Vertex or Edge)
*/
-final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T> {
+final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorIndex<T> {
/**
* Map of property key to vector index
@@ -103,11 +101,6 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T>
*/
public static final String CONFIG_DISTANCE_FUNCTION = "distanceFunction";
- /**
- * Configuration key for the default number of nearest neighbors to return
- */
- public static final String CONFIG_DEFAULT_K = "defaultK";
-
/**
* Creates a new vector index for the specified graph and element class.
*
@@ -242,7 +235,7 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T>
*/
public List<T> findNearest(final String key, final float[] vector, final int k) {
if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
- return Collections.emptyList();
+ throw new IllegalArgumentException("The key '" + key + "' is not indexed");
final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
final List<SearchResult<ElementItem, Float>> nearest = index.findNearest(vector, k);
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
index 6b8267be55..0b1d63af86 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
@@ -20,55 +20,75 @@ package org.apache.tinkerpop.gremlin.tinkergraph.structure;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
/**
* Tests for TinkerGraph vector index functionality.
*/
+@RunWith(Parameterized.class)
public class TinkerGraphVectorIndexTest {
- private static final Map<String,Object> indexConfig = new HashMap<String,Object>() {{
+ protected static final Map<String,Object> indexConfig = new HashMap<String,Object>() {{
put(TinkerVectorIndex.CONFIG_DIMENSION, 3);
}};
+ @Parameterized.Parameter
+ public AbstractTinkerGraph graph;
+
+ @Parameterized.Parameters
+ public static Collection<Object[]> data() {
+ return Arrays.asList(new Object[][]{
+ {TinkerGraph.open()},
+ {TinkerTransactionGraph.open()}
+ });
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ graph.clear();
+ tryCommitChanges(graph);
+ }
+
@Test
public void shouldCreateEdgeVectorIndex() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
- graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
- assertThat(graph.getIndexedKeys(Edge.class), hasItem("embedding"));
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+ assertThat(graph.getIndexedKeys(Edge.class).contains("embedding"), is(true));
}
@Test
public void shouldCreateVectorIndex() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
- graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
- assertThat(graph.getIndexedKeys(Vertex.class), hasItem("embedding"));
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ assertThat(graph.getIndexedKeys(Vertex.class).contains("embedding"), is(true));
}
@Test
public void shouldFindNearestVertices() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate();
g.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
+ tryCommitChanges(graph);
+
graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
@@ -80,15 +100,16 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldUpdateVectorIndex() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
+ tryCommitChanges(graph);
graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
// Update a vertex property
g.V().has("name", "Bob").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
+ tryCommitChanges(graph);
final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
assertNotNull(nearest);
@@ -99,16 +120,17 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldRemoveFromVectorIndex() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate();
+ tryCommitChanges(graph);
graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
// Remove a vertex
g.V().has("name", "Bob").drop().iterate();
+ tryCommitChanges(graph);
final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{0.0f, 1.0f, 0.0f}, 2);
assertNotNull(nearest);
@@ -118,28 +140,27 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldDropVectorIndex() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
+ tryCommitChanges(graph);
graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
- assertThat(graph.getIndexedKeys(Vertex.class), hasItem("embedding"));
+ assertThat(graph.getIndexedKeys(Vertex.class).contains("embedding"), is(true));
// Drop index
graph.dropIndex("embedding", Vertex.class);
- assertThat(graph.getIndexedKeys(Vertex.class), not(hasItem("embedding")));
+ assertThat(graph.getIndexedKeys(Vertex.class).contains("embedding"), is(false));
- // Search for nearest neighbors should return empty list
- final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
- assertNotNull(nearest);
- assertEquals(0, nearest.size());
+ try {
+ graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ fail("Should have thrown exception since the index was removed");
+ } catch (IllegalArgumentException ex) { }
}
@Test
public void shouldFindNearestEdges() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
final Vertex alice = g.addV("person").property("name", "Alice").next();
final Vertex bob = g.addV("person").property("name", "Bob").next();
final Vertex charlie = g.addV("person").property("name", "Charlie").next();
@@ -148,6 +169,7 @@ public class TinkerGraphVectorIndexTest {
g.addE("knows").from(bob).to(charlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 0.6f).iterate();
g.addE("knows").from(charlie).to(dave).property("embedding", new float[]{0.0f, 0.0f, 1.0f}).property("strength", 0.7f).iterate();
g.addE("knows").from(alice).to(dave).property("embedding", new float[]{0.9f, 0.1f, 0.0f}).property("strength", 0.9f).iterate();
+ tryCommitChanges(graph);
graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
@@ -160,17 +182,18 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldUpdateEdgeVectorIndex() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
final Vertex alice = g.addV("person").property("name", "Alice").next();
final Vertex bob = g.addV("person").property("name", "Bob").next();
g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).property("strength", 0.8f).iterate();
final Edge edge = g.addE("knows").from(bob).to(alice).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 0.6f).next();
+ tryCommitChanges(graph);
graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
// Update an edge property
g.E(edge.id()).property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
+ tryCommitChanges(graph);
final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
assertNotNull(nearest);
@@ -181,19 +204,20 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldRemoveEdgeFromVectorIndex() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
final Vertex alice = g.addV("person").property("name", "Alice").next();
final Vertex bob = g.addV("person").property("name", "Bob").next();
final Vertex charlie = g.addV("person").property("name", "Charlie").next();
g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).property("strength", 0.8f).iterate();
final Edge edge = g.addE("knows").from(bob).to(charlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 0.6f).next();
g.addE("knows").from(charlie).to(alice).property("embedding", new float[]{0.0f, 0.0f, 1.0f}).property("strength", 0.7f).iterate();
+ tryCommitChanges(graph);
- graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
// Remove an edge
g.E(edge.id()).drop().iterate();
+ tryCommitChanges(graph);
final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{0.0f, 1.0f, 0.0f}, 2);
assertNotNull(nearest);
@@ -203,47 +227,113 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldDropEdgeVectorIndex() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
final Vertex alice = g.addV("person").property("name", "Alice").next();
final Vertex bob = g.addV("person").property("name", "Bob").next();
g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).property("strength", 0.8f).iterate();
g.addE("knows").from(bob).to(alice).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 0.6f).iterate();
+ tryCommitChanges(graph);
graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
- assertThat(graph.getIndexedKeys(Edge.class), hasItem("embedding"));
+ assertThat(graph.getIndexedKeys(Edge.class).contains("embedding"), is(true));
// Drop index
graph.dropIndex("embedding", Edge.class);
- assertThat(graph.getIndexedKeys(Edge.class), not(hasItem("embedding")));
+ assertThat(graph.getIndexedKeys(Edge.class).contains("embedding"), is(false));
- // Search for nearest neighbors should return empty list
- final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
- assertNotNull(nearest);
- assertEquals(0, nearest.size());
+ try {
+ graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ fail("Should have thrown exception since the index was removed");
+ } catch (IllegalArgumentException ex) { }
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowExceptionWhenVectorDimensionExceedsConfigured() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
// Create a vector index with dimension 3
- graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
// Try to add a vertex with a vector of dimension 4 (exceeds configured dimension 3)
g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f, 0.0f}).iterate();
+ tryCommitChanges(graph);
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowExceptionWhenVectorDimensionIsSmallerThanConfigured() {
- final TinkerGraph graph = TinkerGraph.open();
- final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final GraphTraversalSource g = traversal().with(graph);
// Create a vector index with dimension 3
- graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
// Try to add a vertex with a vector of dimension 2 (smaller than configured dimension 3)
g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f}).iterate();
+ tryCommitChanges(graph);
+ }
+
+ @Test
+ public void shouldRollbackVectorIndexChanges() {
+ final GraphTraversalSource g = traversal().with(graph);
+ g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
+ tryCommitChanges(graph);
+
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+
+ // Update a vertex property but rollback
+ g.V().has("name", "Bob").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
+ tryRollbackChanges(graph);
+
+ // Bob's embedding should still be [0.0f, 1.0f, 0.0f]
+ final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{0.0f, 1.0f, 0.0f}, 1);
+ assertNotNull(nearest);
+ assertEquals(1, nearest.size());
+ assertEquals("Bob", nearest.get(0).value("name"));
+ }
+
+ @Test
+ public void shouldHandleEmptyGraphForNearestVertices() {
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(0, nearest.size());
+ }
+
+ @Test
+ public void shouldHandleEmptyGraphForNearestEdges() {
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+ final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(0, nearest.size());
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void shouldThrowExceptionWhenIndexNotCreatedForNearestVertices() {
+ graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void shouldThrowExceptionWhenIndexNotCreatedForNearestEdges() {
+ graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void shouldThrowExceptionWhenIndexNotCreatedForNearestVerticesNoDefaultCount() {
+ graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f});
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void shouldThrowExceptionWhenIndexNotCreatedForNearestEdgesNoDefaultCount() {
+ graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f});
+ }
+
+ private void tryCommitChanges(final Graph graph) {
+ if (graph.features().graph().supportsTransactions())
+ graph.tx().commit();
+ }
+
+ private void tryRollbackChanges(final Graph graph) {
+ if (graph.features().graph().supportsTransactions())
+ graph.tx().rollback();
}
-}
+}
\ No newline at end of file
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraphTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraphTest.java
index 5df8de254f..338693eaae 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraphTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraphTest.java
@@ -399,7 +399,7 @@ public class TinkerTransactionGraphTest {
countElementsInNewThreadTx(g, 2, 0);
final Map<Object, Set<TinkerElementContainer<?>>> index =
- (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionalIndex) g.vertexIndex).index.get("test-property");
+ (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionIndex) g.vertexIndex).index.get("test-property");
assertNotNull(index);
// should be only vertex vid in set
assertEquals(1, index.get(1).size());
@@ -441,7 +441,7 @@ public class TinkerTransactionGraphTest {
countElementsInNewThreadTx(g, 2, 0);
final Map<Object, Set<TinkerElementContainer<?>>> index =
- (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionalIndex) g.vertexIndex).index.get("test-property");
+ (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionIndex) g.vertexIndex).index.get("test-property");
assertNotNull(index);
// should be only vertex vid in set
assertEquals(1, index.get(AbstractTinkerIndex.IndexedNull.instance()).size());
@@ -481,7 +481,7 @@ public class TinkerTransactionGraphTest {
countElementsInNewThreadTx(g, 0, 0);
final Map<Object, Set<TinkerElementContainer<?>>> index =
- (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionalIndex) g.vertexIndex).index.get("test-property");
+ (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionIndex) g.vertexIndex).index.get("test-property");
assertNotNull(index);
// should be only vertex vid in set
assertEquals(0, index.size());
@@ -520,7 +520,7 @@ public class TinkerTransactionGraphTest {
countElementsInNewThreadTx(g, 1, 0);
final Map<Object, Set<TinkerElementContainer<?>>> index =
- (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionalIndex) g.vertexIndex).index.get("test-property");
+ (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionIndex) g.vertexIndex).index.get("test-property");
assertNotNull(index);
// should be only vertex vid in set
assertEquals(0, index.size());
@@ -560,7 +560,7 @@ public class TinkerTransactionGraphTest {
countElementsInNewThreadTx(g, 2, 1);
final Map<Object, Set<TinkerElementContainer<?>>> index =
- (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionalIndex) g.edgeIndex).index.get("test-property");
+ (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionIndex) g.edgeIndex).index.get("test-property");
assertNotNull(index);
// should be only vertex vid in set
assertEquals(1, index.size());
@@ -606,7 +606,7 @@ public class TinkerTransactionGraphTest {
countElementsInNewThreadTx(g, 2, 1);
final Map<Object, Set<TinkerElementContainer<?>>> index =
- (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionalIndex) g.edgeIndex).index.get("test-property");
+ (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionIndex) g.edgeIndex).index.get("test-property");
assertNotNull(index);
// should be only vertex vid in set
assertEquals(1, index.size());
@@ -649,7 +649,7 @@ public class TinkerTransactionGraphTest {
countElementsInNewThreadTx(g, 2, 0);
final Map<Object, Set<TinkerElementContainer<?>>> index =
- (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionalIndex) g.edgeIndex).index.get("test-property");
+ (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionIndex) g.edgeIndex).index.get("test-property");
assertNotNull(index);
// should be only vertex vid in set
assertEquals(0, index.size());
@@ -690,7 +690,7 @@ public class TinkerTransactionGraphTest {
countElementsInNewThreadTx(g, 2, 1);
final Map<Object, Set<TinkerElementContainer<?>>> index =
- (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionalIndex) g.edgeIndex).index.get("test-property");
+ (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionIndex) g.edgeIndex).index.get("test-property");
assertNotNull(index);
// should be only vertex vid in set
assertEquals(1, index.size());
@@ -738,7 +738,7 @@ public class TinkerTransactionGraphTest {
countElementsInNewThreadTx(g, 2, 1);
final Map<Object, Set<TinkerElementContainer<?>>> index =
- (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionalIndex) g.edgeIndex).index.get("test-property");
+ (Map<Object, Set<TinkerElementContainer<?>>>) ((TinkerTransactionIndex) g.edgeIndex).index.get("test-property");
assertNotNull(index);
// should be only vertex vid in set
assertEquals(0, index.size());
(tinkerpop) 08/10: distance calc and search by embedded
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit d0e8403eb8be80328eecfab440174623b86aedff
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Thu May 8 11:23:33 2025 -0400
distance calc and search by embedded
---
CHANGELOG.asciidoc | 5 +-
.../reference/implementations-tinkergraph.asciidoc | 29 +-
.../jsr223/TinkerGraphGremlinPlugin.java | 4 +-
...ctory.java => TinkerVectorDistanceFactory.java} | 67 +++--
...ava => TinkerVectorSearchByElementFactory.java} | 11 +-
...a => TinkerVectorSearchByEmbeddingFactory.java} | 55 ++--
.../structure/TinkerGraphServiceTest.java | 319 ++++++++++++++++++++-
7 files changed, 400 insertions(+), 90 deletions(-)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index fd480a703e..9dd2581256 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,8 +25,9 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
[[release-4-0-0]]
=== TinkerPop 4.0.0 (Release Date: NOT OFFICIALLY RELEASED YET)
-* Added vector search to TinkerGraph.
-* Renamed the regex based seach service in TinkerGraph to `tinker.search.text`.
+* Added vector indexing to TinkerGraph with search services for `tinker.search.vector.topKByElement` and `tinker.search.vector.topKByEmbedding`.
+* Added vector distance calculation functions for TinkerGraph.
+* Renamed the regex based search service in TinkerGraph to `tinker.search.text`.
* Added typed numeric wrappers and `preciseNumbers` connection option to `gremlin-javascript` for explicit control over numeric type serialization and deserialization.
* Added `NextN(n)` to `Traversal` in `gremlin-go` for batched result iteration, providing API parity with `next(n)` in the Java, Python, and .NET GLVs, and updated the Go translators in `gremlin-core` and `gremlin-javascript` to emit `NextN(n)` for the batched form.
* Added Gremlator, a single page web application, that translates Gremlin into various programming languages like Javascript and Python.
diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc b/docs/src/reference/implementations-tinkergraph.asciidoc
index 6cdcfd30eb..daec3aa12b 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -297,20 +297,28 @@ Here's a complete example:
[gremlin-groovy]
----
-graph.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graph)) <1>
-indexConfig = [dimension: 3] <2>
+graph.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graph)) <1>
+graph.getServiceRegistry().registerService(new TinkerVectorSearchByEmbeddingFactory(graph)) <2>
+indexConfig = [dimension: 3] <3>
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate()
g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate()
g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate()
g.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate()
-params = [key: "embedding", topK: 2] <3>
-g.V().has("name", "Alice").call("tinker.search.vector.topKByElement", params).toList()
+byElementParams = [key: "embedding", topK: 2] <4>
+g.V().has("name", "Alice").call("tinker.search.vector.topKByElement", byElementParams).toList() <5>
+byElementParams = [key: "embedding", topK: 2, element: "vertex"] <6>
+embedding = new float[]{1.0f, 0.0f, 0.0f}
+g.inject([embedding]).unfold().call("tinker.search.vector.topKByEmbedding", params).toList() <7>
----
-<1> Register the vector search service.
-<2> Configuration for the vector index that defines the embedding dimension of size 3.
-<3> Specify the property key containing the embedding and number of results to return.
+<1> Register the vector search service for "topKByElement".
+<2> Register the vector search service for "topKByEmbedding".
+<3> Configuration for the vector index that defines the embedding dimension of size 3.
+<4> Specify the property key containing the embedding and number of results to return.
+<5> Search the vector index for vertices like "Alice".
+<6> Specify the property key containing the embedding, number of results to return, and the index type to search (i.e. either "vertex" or "edge").
+<7> Given an embedding, search the "vertex" index.
The `call()` step returns a list of maps, each containing:
@@ -321,7 +329,7 @@ Vector indices can also be created for edges:
[gremlin-groovy]
----
-graph.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graph))
+graph.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graph))
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig)
alice = g.V().has("name", "Alice").next()
bob = g.V().has("name", "Bob").next()
@@ -346,7 +354,7 @@ You can specify the distance function when creating the vector index:
[gremlin-groovy]
----
-graph.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graph))
+graph.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graph))
indexConfig = [dimension: 3, distanceType: TinkerIndexType.Vector.EUCLIDEAN]
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
----
@@ -386,6 +394,9 @@ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig
TIP: Constants for all the configuration values can be found in `TinkerVectorIndex`. They are prefixed with "CONFIG_".
For example, "dimension" can be referenced as `TinkerVectorIndex.CONFIG_DIMENSION`.
+Note that the distance functions can be used directly with the `TinkerVectorDistanceFactory` service. It allows
+calculation of the distance between the elements
+
[[tinkergraph-gremlin-tx]]
=== Transactions
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
index b346cc570f..0ce178d90c 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
@@ -31,7 +31,7 @@ import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerWorkerPoo
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerDegreeCentralityFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerServiceRegistry;
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerTextSearchFactory;
-import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchByElementFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerEdge;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerElement;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
@@ -63,7 +63,7 @@ public final class TinkerGraphGremlinPlugin extends AbstractGremlinPlugin {
TinkerIoRegistryV2.class,
TinkerIoRegistryV3.class,
TinkerIoRegistryV4.class,
- TinkerVectorSearchFactory.class,
+ TinkerVectorSearchByElementFactory.class,
TinkerTextSearchFactory.class,
TinkerDegreeCentralityFactory.class,
TinkerServiceRegistry.TinkerServiceFactory.class,
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorDistanceFactory.java
similarity index 53%
copy from tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
copy to tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorDistanceFactory.java
index b0a793a814..5c00cbbdfb 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorDistanceFactory.java
@@ -18,29 +18,29 @@
*/
package org.apache.tinkerpop.gremlin.tinkergraph.services;
+import com.github.jelmerk.hnswlib.core.DistanceFunction;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.service.Service;
import org.apache.tinkerpop.gremlin.structure.util.CloseableIterator;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.AbstractTinkerGraph;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIndexElement;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIndexType;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
-import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.KEY;
-import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.TOP_K;
+import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorDistanceFactory.Params.KEY;
+import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorDistanceFactory.Params.DISTANCE_FUNCTION;
import static org.apache.tinkerpop.gremlin.util.CollectionUtil.asMap;
/**
- * Service to utilize a {@code TinkerVertexIndex} to do a vector search.
+ * Service to calculate distance between elements in a {@link Path}
*/
-public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServiceFactory<Element, Map<String, Object>> implements Service<Element, Map<String, Object>> {
+public class TinkerVectorDistanceFactory extends TinkerServiceRegistry.TinkerServiceFactory<Path, Float> implements Service<Path, Float> {
- public static final String NAME = "tinker.search.vector.topKByElement";
+ public static final String NAME = "tinker.vector.distance";
public interface Params {
/**
@@ -48,17 +48,17 @@ public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServi
*/
String KEY = "key";
/**
- * Number of results to return
+ * The distance function to use.
*/
- String TOP_K = "topK";
+ String DISTANCE_FUNCTION = "distanceFunction";
Map DESCRIBE = asMap(
KEY, "Specify they key storing the embedding for the vector search",
- TOP_K, "Number of results to return (optional, defaults to 10)"
+ DISTANCE_FUNCTION, "The distance function to use in the calculation as specified by the TinkerIndexType.Vector name (optional, defaults to \"COSINE\")"
);
}
- public TinkerVectorSearchFactory(final AbstractTinkerGraph graph) {
+ public TinkerVectorDistanceFactory(final AbstractTinkerGraph graph) {
super(graph, NAME);
}
@@ -78,7 +78,7 @@ public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServi
}
@Override
- public Service<Element, Map<String, Object>> createService(final boolean isStart, final Map params) {
+ public Service<Path, Float> createService(final boolean isStart, final Map params) {
if (isStart) {
throw new UnsupportedOperationException(Exceptions.cannotStartTraversal);
}
@@ -87,33 +87,38 @@ public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServi
throw new IllegalArgumentException("The parameter map must contain the key where the embedding is: " + KEY);
}
+ if (params.containsKey(DISTANCE_FUNCTION)) {
+ try {
+ TinkerIndexType.Vector.valueOf(params.get(DISTANCE_FUNCTION).toString());
+ } catch (IllegalArgumentException ex) {
+ throw new IllegalArgumentException("Invalid value for " + DISTANCE_FUNCTION + ". Must be a valid TinkerIndexType.Vector.", ex);
+ }
+ }
+
return this;
}
@Override
- public CloseableIterator<Map<String,Object>> execute(final ServiceCallContext ctx, final Traverser.Admin<Element> in, final Map params) {
+ public CloseableIterator<Float> execute(final ServiceCallContext ctx, final Traverser.Admin<Path> in, final Map params) {
final String key = (String) params.get(KEY);
- // add 1 because we always filter 1 out of the index because it will return a match on itself
- final int k = (int) params.getOrDefault(TOP_K, 10) + 1;
- final Element e = in.get();
+ final TinkerIndexType.Vector vector = TinkerIndexType.Vector.valueOf(
+ params.getOrDefault(Params.DISTANCE_FUNCTION, TinkerIndexType.Vector.COSINE).toString());
+ final DistanceFunction<float[], Float> distanceFunction = vector.getDistanceFunction();
- // if the current element does not have the specified key, then return no results
- if (!e.keys().contains(key))
- return CloseableIterator.empty();
+ final Path path = in.get();
+ final int pathLength = path.size();
+ final Element start = path.get(0);
+ final Element end = path.get(pathLength - 1);
- final float[] embedding = e.value(key);
- if (e instanceof Vertex) {
- return CloseableIterator.of(graph.findNearestVertices(key, embedding, k).stream()
- .filter(tie -> !tie.getElement().equals(e))
- .map(TinkerIndexElement::toMap).iterator());
- } else if (e instanceof Edge) {
- return CloseableIterator.of(graph.findNearestEdges(key, embedding, k).stream()
- .filter(tie -> !tie.getElement().equals(e))
- .map(TinkerIndexElement::toMap).iterator());
- } else {
+ // if the elements do not have the specified key, then return no results because there's nothing we can
+ // calculate distance on
+ if (!start.keys().contains(key) || !end.keys().contains(key))
return CloseableIterator.empty();
- }
+
+ final float[] startEmbedding = start.value(key);
+ final float[] endEmbedding = end.value(key);
+ return CloseableIterator.of(Collections.singleton(distanceFunction.distance(startEmbedding, endEmbedding)).iterator());
}
@Override
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchByElementFactory.java
similarity index 91%
copy from tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
copy to tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchByElementFactory.java
index b0a793a814..2542b0980e 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchByElementFactory.java
@@ -31,14 +31,15 @@ import java.util.Collections;
import java.util.Map;
import java.util.Set;
-import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.KEY;
-import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.TOP_K;
+import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchByElementFactory.Params.KEY;
+import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchByElementFactory.Params.TOP_K;
import static org.apache.tinkerpop.gremlin.util.CollectionUtil.asMap;
/**
- * Service to utilize a {@code TinkerVertexIndex} to do a vector search.
+ * Service to utilize a {@code TinkerVertexIndex} to do a vector search using an embedding from a supplied vertex
+ * or edge.
*/
-public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServiceFactory<Element, Map<String, Object>> implements Service<Element, Map<String, Object>> {
+public class TinkerVectorSearchByElementFactory extends TinkerServiceRegistry.TinkerServiceFactory<Element, Map<String, Object>> implements Service<Element, Map<String, Object>> {
public static final String NAME = "tinker.search.vector.topKByElement";
@@ -58,7 +59,7 @@ public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServi
);
}
- public TinkerVectorSearchFactory(final AbstractTinkerGraph graph) {
+ public TinkerVectorSearchByElementFactory(final AbstractTinkerGraph graph) {
super(graph, NAME);
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchByEmbeddingFactory.java
similarity index 65%
rename from tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
rename to tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchByEmbeddingFactory.java
index b0a793a814..45d3f3025a 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchByEmbeddingFactory.java
@@ -18,29 +18,29 @@
*/
package org.apache.tinkerpop.gremlin.tinkergraph.services;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.service.Service;
import org.apache.tinkerpop.gremlin.structure.util.CloseableIterator;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.AbstractTinkerGraph;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIndexElement;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
-import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.KEY;
-import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.TOP_K;
+import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchByElementFactory.Params.KEY;
+import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchByElementFactory.Params.TOP_K;
+import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchByEmbeddingFactory.Params.ELEMENT;
import static org.apache.tinkerpop.gremlin.util.CollectionUtil.asMap;
/**
- * Service to utilize a {@code TinkerVertexIndex} to do a vector search.
+ * Service to utilize a {@code TinkerVertexIndex} to do a vector search using a specified embedding.
*/
-public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServiceFactory<Element, Map<String, Object>> implements Service<Element, Map<String, Object>> {
+public class TinkerVectorSearchByEmbeddingFactory extends TinkerServiceRegistry.TinkerServiceFactory<Float[], Map<String, Object>> implements Service<Float[], Map<String, Object>> {
- public static final String NAME = "tinker.search.vector.topKByElement";
+ public static final String NAME = "tinker.search.vector.topKByEmbedding";
public interface Params {
/**
@@ -51,14 +51,19 @@ public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServi
* Number of results to return
*/
String TOP_K = "topK";
+ /**
+ * Specify whether the search should be for a "vertex" or "edge"
+ */
+ String ELEMENT = "element";
Map DESCRIBE = asMap(
KEY, "Specify they key storing the embedding for the vector search",
- TOP_K, "Number of results to return (optional, defaults to 10)"
+ TOP_K, "Number of results to return (optional, defaults to 10)",
+ ELEMENT, "Specify whether the search should be for a \"vertex\" or \"edge\""
);
}
- public TinkerVectorSearchFactory(final AbstractTinkerGraph graph) {
+ public TinkerVectorSearchByEmbeddingFactory(final AbstractTinkerGraph graph) {
super(graph, NAME);
}
@@ -78,38 +83,37 @@ public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServi
}
@Override
- public Service<Element, Map<String, Object>> createService(final boolean isStart, final Map params) {
+ public Service<Float[], Map<String, Object>> createService(final boolean isStart, final Map params) {
if (isStart) {
throw new UnsupportedOperationException(Exceptions.cannotStartTraversal);
}
if (!params.containsKey(KEY)) {
- throw new IllegalArgumentException("The parameter map must contain the key where the embedding is: " + KEY);
+ throw new IllegalArgumentException("The parameter map must contain the key specifying where the embedding is: " + KEY);
+ }
+
+ if (!params.containsKey(ELEMENT) || !Arrays.asList("vertex", "edge").contains(params.get(ELEMENT))) {
+ throw new IllegalArgumentException("The parameter map must contain a key: " + ELEMENT + " with a value of \"vertex\" or \"edge\"");
}
return this;
}
@Override
- public CloseableIterator<Map<String,Object>> execute(final ServiceCallContext ctx, final Traverser.Admin<Element> in, final Map params) {
+ public CloseableIterator<Map<String,Object>> execute(final ServiceCallContext ctx, final Traverser.Admin<Float[]> in, final Map params) {
final String key = (String) params.get(KEY);
+ final int k = (int) params.getOrDefault(TOP_K, 10);
+ final Object traverserObject = in.get();
- // add 1 because we always filter 1 out of the index because it will return a match on itself
- final int k = (int) params.getOrDefault(TOP_K, 10) + 1;
- final Element e = in.get();
+ final float[] embedding = traverserObject instanceof Float[] ?
+ ArrayUtils.toPrimitive((Float[]) traverserObject) : (float[]) traverserObject;
- // if the current element does not have the specified key, then return no results
- if (!e.keys().contains(key))
- return CloseableIterator.empty();
-
- final float[] embedding = e.value(key);
- if (e instanceof Vertex) {
+ final String elementType = (String) params.get(ELEMENT);
+ if ("vertex".equals(elementType)) {
return CloseableIterator.of(graph.findNearestVertices(key, embedding, k).stream()
- .filter(tie -> !tie.getElement().equals(e))
.map(TinkerIndexElement::toMap).iterator());
- } else if (e instanceof Edge) {
+ } else if ("edge".equals(elementType)) {
return CloseableIterator.of(graph.findNearestEdges(key, embedding, k).stream()
- .filter(tie -> !tie.getElement().equals(e))
.map(TinkerIndexElement::toMap).iterator());
} else {
return CloseableIterator.empty();
@@ -120,4 +124,3 @@ public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServi
public void close() {}
}
-
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphServiceTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphServiceTest.java
index e44e9362f6..4daeee171e 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphServiceTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphServiceTest.java
@@ -30,7 +30,9 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerDegreeCentralityFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerServiceRegistry;
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerTextSearchFactory;
-import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorDistanceFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchByElementFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchByEmbeddingFactory;
import org.apache.tinkerpop.gremlin.util.function.TriFunction;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
@@ -61,7 +63,6 @@ import static org.apache.tinkerpop.gremlin.util.CollectionUtil.asMap;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
-
/**
* Demonstration of Service API.
*
@@ -455,7 +456,7 @@ public class TinkerGraphServiceTest {
@Test
public void g_V_callXvector_topKByVertex_key_embeddingX() {
final TinkerGraph graf = TinkerGraph.open();
- graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graf));
graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
final GraphTraversalSource gv = graf.traversal();
@@ -467,7 +468,7 @@ public class TinkerGraphServiceTest {
final Map<String,Object> m = new HashMap<String,Object>() {{
put("key", "embedding");
}};
- final List<Object> list = gv.V(vAlice).call(TinkerVectorSearchFactory.NAME, m).toList();
+ final List<Object> list = gv.V(vAlice).call(TinkerVectorSearchByElementFactory.NAME, m).toList();
final List<Map<String,Object>> expected = new ArrayList<>();
expected.add(asMap("distance", 0.006116271f, "element", vDave));
@@ -485,7 +486,7 @@ public class TinkerGraphServiceTest {
@Test
public void g_E_callXvector_topKByEdge_key_embeddingX() {
final TinkerGraph graf = TinkerGraph.open();
- graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graf));
graf.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
final GraphTraversalSource gv = graf.traversal();
@@ -500,7 +501,7 @@ public class TinkerGraphServiceTest {
final Map<String, Object> m = new HashMap<String, Object>() {{
put("key", "embedding");
}};
- final List<Object> list = gv.E(e1).call(TinkerVectorSearchFactory.NAME, m).toList();
+ final List<Object> list = gv.E(e1).call(TinkerVectorSearchByElementFactory.NAME, m).toList();
final List<Map<String, Object>> expected = new ArrayList<>();
expected.add(asMap("distance", 0.29289323f, "element", e3));
@@ -517,7 +518,7 @@ public class TinkerGraphServiceTest {
@Test
public void g_V_callXvector_topKByVertex_key_embedding_topK_1X() {
final TinkerGraph graf = TinkerGraph.open();
- graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graf));
graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
final GraphTraversalSource gv = graf.traversal();
@@ -530,7 +531,7 @@ public class TinkerGraphServiceTest {
put("key", "embedding");
put("topK", 1);
}};
- final List<Object> list = gv.V(vAlice).call(TinkerVectorSearchFactory.NAME, m).toList();
+ final List<Object> list = gv.V(vAlice).call(TinkerVectorSearchByElementFactory.NAME, m).toList();
final List<Map<String,Object>> expected = new ArrayList<>();
expected.add(asMap("distance", 0.006116271f, "element", vDave));
@@ -546,7 +547,7 @@ public class TinkerGraphServiceTest {
@Test(expected = IllegalArgumentException.class)
public void g_V_callXvector_missing_keyX() {
final TinkerGraph graf = TinkerGraph.open();
- graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graf));
graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
final GraphTraversalSource gv = graf.traversal();
@@ -554,13 +555,13 @@ public class TinkerGraphServiceTest {
// Missing key parameter should cause a IllegalArgumentException when trying to access it
final Map<String,Object> emptyParams = new HashMap<>();
- gv.V(vAlice).call(TinkerVectorSearchFactory.NAME, emptyParams).toList();
+ gv.V(vAlice).call(TinkerVectorSearchByElementFactory.NAME, emptyParams).toList();
}
@Test
public void g_V_callXvector_nonexistent_propertyX() {
final TinkerGraph graf = TinkerGraph.open();
- graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graf));
graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
final GraphTraversalSource gv = graf.traversal();
@@ -571,13 +572,13 @@ public class TinkerGraphServiceTest {
put("key", "embedding");
}};
- assertEquals(0, gv.V(vAlice).call(TinkerVectorSearchFactory.NAME, params).count().next().intValue());
+ assertEquals(0, gv.V(vAlice).call(TinkerVectorSearchByElementFactory.NAME, params).count().next().intValue());
}
@Test
public void g_V_properties_callXvector_nonexistent_propertyX() {
final TinkerGraph graf = TinkerGraph.open();
- graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graf));
graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
final GraphTraversalSource gv = graf.traversal();
@@ -588,7 +589,296 @@ public class TinkerGraphServiceTest {
}};
// Referencing things other than vertex or edge should return no results
- assertEquals(0, gv.V(vAlice).properties().call(TinkerVectorSearchFactory.NAME, params).count().next().intValue());
+ assertEquals(0, gv.V(vAlice).properties().call(TinkerVectorSearchByElementFactory.NAME, params).count().next().intValue());
+ }
+
+ @Test
+ public void g_V_callXvector_topKByEmbedding_vertexX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByEmbeddingFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ final Vertex vAlice = gv.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob").property("embedding", new float[]{0.05f, 1.0f, 0.0f}).next();
+ final Vertex vCharlie = gv.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).next();
+ final Vertex vDave = gv.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).next();
+
+ final Map<String,Object> m = new HashMap<String,Object>() {{
+ put("key", "embedding");
+ put("element", "vertex");
+ }};
+
+ // Create an embedding to search with
+ final Float[] searchEmbedding = new Float[]{1.0f, 0.0f, 0.0f};
+
+ final List<Object> list = gv.inject(0).constant(searchEmbedding).call(TinkerVectorSearchByEmbeddingFactory.NAME, m).toList();
+
+ final List<Map<String,Object>> expected = new ArrayList<>();
+ expected.add(asMap("distance", 0.0f, "element", vAlice));
+ expected.add(asMap("distance", 0.006116271f, "element", vDave));
+ expected.add(asMap("distance", 0.9500624f, "element", vBob));
+ expected.add(asMap("distance", 1.0f, "element", vCharlie));
+
+ // Use a custom comparison to ensure the lists are equal
+ assertEquals(expected.size(), list.size());
+ for (int i = 0; i < expected.size(); i++) {
+ assertEquals(expected.get(i).get("distance"), ((Map) list.get(i)).get("distance"));
+ assertEquals(expected.get(i).get("element"), ((Map) list.get(i)).get("element"));
+ }
+ }
+
+ @Test
+ public void g_E_callXvector_topKByEmbedding_edgeX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByEmbeddingFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ final Vertex vAlice = gv.addV("person").property("name", "Alice").next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob").next();
+ final Vertex vCharlie = gv.addV("person").property("name", "Charlie").next();
+
+ final Edge e1 = gv.addE("knows").from(vAlice).to(vBob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Edge e2 = gv.addE("knows").from(vAlice).to(vCharlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).next();
+ final Edge e3 = gv.addE("knows").from(vBob).to(vCharlie).property("embedding", new float[]{0.5f, 0.5f, 0.0f}).next();
+
+ final Map<String, Object> m = new HashMap<String, Object>() {{
+ put("key", "embedding");
+ put("element", "edge");
+ }};
+
+ // Create an embedding to search with
+ final Float[] searchEmbedding = new Float[]{1.0f, 0.0f, 0.0f};
+
+ final List<Object> list = gv.inject(0).constant(searchEmbedding).call(TinkerVectorSearchByEmbeddingFactory.NAME, m).toList();
+
+ final List<Map<String, Object>> expected = new ArrayList<>();
+ expected.add(asMap("distance", 0.0f, "element", e1));
+ expected.add(asMap("distance", 0.29289323f, "element", e3));
+ expected.add(asMap("distance", 1.0f, "element", e2));
+
+ // Use a custom comparison to ensure the lists are equal
+ assertEquals(expected.size(), list.size());
+ for (int i = 0; i < expected.size(); i++) {
+ assertEquals(expected.get(i).get("distance"), ((Map) list.get(i)).get("distance"));
+ assertEquals(expected.get(i).get("element"), ((Map) list.get(i)).get("element"));
+ }
+ }
+
+ @Test
+ public void g_V_callXvector_topKByEmbedding_vertex_topK_1X() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByEmbeddingFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ final Vertex vAlice = gv.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob").property("embedding", new float[]{0.05f, 1.0f, 0.0f}).next();
+ final Vertex vCharlie = gv.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).next();
+ final Vertex vDave = gv.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).next();
+
+ final Map<String,Object> m = new HashMap<String,Object>() {{
+ put("key", "embedding");
+ put("element", "vertex");
+ put("topK", 1);
+ }};
+
+ // Create an embedding to search with
+ final Float[] searchEmbedding = new Float[]{1.0f, 0.0f, 0.0f};
+
+ final List<Object> list = gv.inject(0).constant(searchEmbedding).call(TinkerVectorSearchByEmbeddingFactory.NAME, m).toList();
+
+ final List<Map<String,Object>> expected = new ArrayList<>();
+ expected.add(asMap("distance", 0.0f, "element", vAlice));
+
+ // Use a custom comparison to ensure the lists are equal
+ assertEquals(expected.size(), list.size());
+ for (int i = 0; i < expected.size(); i++) {
+ assertEquals(expected.get(i).get("distance"), ((Map) list.get(i)).get("distance"));
+ assertEquals(expected.get(i).get("element"), ((Map) list.get(i)).get("element"));
+ }
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void g_V_callXvector_topKByEmbedding_missing_keyX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByEmbeddingFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ // Create an embedding to search with
+ final Float[] searchEmbedding = new Float[]{1.0f, 0.0f, 0.0f};
+
+ // Missing key parameter should cause a IllegalArgumentException when trying to access it
+ final Map<String,Object> params = new HashMap<String,Object>() {{
+ put("element", "vertex");
+ }};
+ gv.inject(0).constant(searchEmbedding).call(TinkerVectorSearchByEmbeddingFactory.NAME, params).toList();
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void g_V_callXvector_topKByEmbedding_missing_elementX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByEmbeddingFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ // Create an embedding to search with
+ final Float[] searchEmbedding = new Float[]{1.0f, 0.0f, 0.0f};
+
+ // Missing element parameter should cause a IllegalArgumentException
+ final Map<String,Object> params = new HashMap<String,Object>() {{
+ put("key", "embedding");
+ }};
+ gv.inject(0).constant(searchEmbedding).call(TinkerVectorSearchByEmbeddingFactory.NAME, params).toList();
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void g_V_callXvector_topKByEmbedding_invalid_elementX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchByEmbeddingFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ // Create an embedding to search with
+ final Float[] searchEmbedding = new Float[]{1.0f, 0.0f, 0.0f};
+
+ // Invalid element parameter should cause a IllegalArgumentException
+ final Map<String,Object> params = new HashMap<String,Object>() {{
+ put("key", "embedding");
+ put("element", "invalid");
+ }};
+ gv.inject(0).constant(searchEmbedding).call(TinkerVectorSearchByEmbeddingFactory.NAME, params).toList();
+ }
+
+ @Test
+ public void g_path_callXvector_distanceX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorDistanceFactory(graf));
+ final GraphTraversalSource gv = graf.traversal();
+
+ // Create vertices with embeddings
+ final Vertex vAlice = gv.addV("person").property("name", "Alice")
+ .property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob")
+ .property("embedding", new float[]{0.0f, 1.0f, 0.0f}).next();
+ final Vertex vCharlie = gv.addV("person").property("name", "Charlie")
+ .property("embedding", new float[]{0.0f, 0.0f, 1.0f}).next();
+
+ // Create edges to connect vertices
+ gv.addE("knows").from(vAlice).to(vBob).next();
+ gv.addE("knows").from(vBob).to(vCharlie).next();
+
+ // Test path with Alice -> Bob
+ final Map<String, Object> params = new HashMap<String, Object>() {{
+ put("key", "embedding");
+ }};
+
+ // Path from Alice to Bob - cosine distance should be 1.0 (orthogonal vectors)
+ final Float aliceToBobDistance = (Float) gv.V(vAlice).outE().inV().path().call(TinkerVectorDistanceFactory.NAME, params).next();
+ assertEquals(1.0f, aliceToBobDistance, 0.0001f);
+
+ // Path from Alice to Charlie - cosine distance should be 1.0 (orthogonal vectors)
+ final Float aliceToCharlieDistance = (Float) gv.V(vAlice).out().out().path().call(TinkerVectorDistanceFactory.NAME, params).next();
+ assertEquals(1.0f, aliceToCharlieDistance, 0.0001f);
+
+ // Path from Bob to Charlie - cosine distance should be 1.0 (orthogonal vectors)
+ final Float bobToCharlieDistance = (Float) gv.V(vBob).out().path().call(TinkerVectorDistanceFactory.NAME, params).next();
+ assertEquals(1.0f, bobToCharlieDistance, 0.0001f);
+ }
+
+ @Test
+ public void g_path_callXvector_distance_with_different_distance_functionX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorDistanceFactory(graf));
+ final GraphTraversalSource gv = graf.traversal();
+
+ // Create vertices with embeddings
+ final Vertex vAlice = gv.addV("person").property("name", "Alice")
+ .property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob")
+ .property("embedding", new float[]{0.0f, 1.0f, 0.0f}).next();
+
+ // Create edge to connect vertices
+ gv.addE("knows").from(vAlice).to(vBob).next();
+
+ // Test with EUCLIDEAN distance function
+ final Map<String, Object> params = new HashMap<String, Object>() {{
+ put("key", "embedding");
+ put("distanceFunction", "EUCLIDEAN");
+ }};
+
+ // Path from Alice to Bob - Euclidean distance should be sqrt(2) = 1.414...
+ final Float aliceToBobDistance = (Float) gv.V(vAlice).outE().inV().path().call(TinkerVectorDistanceFactory.NAME, params).next();
+ assertEquals(1.4142f, aliceToBobDistance, 0.0001f);
+ }
+
+ @Test
+ public void g_path_callXvector_distance_missing_embeddingX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorDistanceFactory(graf));
+ final GraphTraversalSource gv = graf.traversal();
+
+ // Create vertices, one without embedding
+ final Vertex vAlice = gv.addV("person").property("name", "Alice")
+ .property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob").next(); // No embedding
+
+ // Create edge to connect vertices
+ gv.addE("knows").from(vAlice).to(vBob).next();
+
+ // Test path with Alice -> Bob where Bob has no embedding
+ final Map<String, Object> params = new HashMap<String, Object>() {{
+ put("key", "embedding");
+ }};
+
+ // Should return empty result since Bob doesn't have the embedding
+ final List<Object> results = gv.V(vAlice).outE().inV().path().call(TinkerVectorDistanceFactory.NAME, params).toList();
+ assertEquals(0, results.size());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void g_path_callXvector_distance_missing_keyX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorDistanceFactory(graf));
+ final GraphTraversalSource gv = graf.traversal();
+
+ // Create vertices with embeddings
+ final Vertex vAlice = gv.addV("person").property("name", "Alice")
+ .property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob")
+ .property("embedding", new float[]{0.0f, 1.0f, 0.0f}).next();
+
+ // Create edge to connect vertices
+ gv.addE("knows").from(vAlice).to(vBob).next();
+
+ // Missing key parameter should cause an IllegalArgumentException
+ final Map<String, Object> emptyParams = new HashMap<>();
+ gv.V(vAlice).outE().inV().path().call(TinkerVectorDistanceFactory.NAME, emptyParams).next();
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void g_path_callXvector_distance_invalid_distance_functionX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorDistanceFactory(graf));
+ final GraphTraversalSource gv = graf.traversal();
+
+ // Create vertices with embeddings
+ final Vertex vAlice = gv.addV("person").property("name", "Alice")
+ .property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob")
+ .property("embedding", new float[]{0.0f, 1.0f, 0.0f}).next();
+
+ // Create edge to connect vertices
+ gv.addE("knows").from(vAlice).to(vBob).next();
+
+ // Invalid distance function should cause an IllegalArgumentException
+ final Map<String, Object> params = new HashMap<String, Object>() {{
+ put("key", "embedding");
+ put("distanceFunction", "INVALID_FUNCTION");
+ }};
+ gv.V(vAlice).outE().inV().path().call(TinkerVectorDistanceFactory.NAME, params).next();
}
private String toResultString(final Traversal traversal) {
@@ -604,5 +894,4 @@ public class TinkerGraphServiceTest {
assertEquals("Did not produce exactly one result", 1, result.size());
assertEquals(expected, result.get(0));
}
-
}
(tinkerpop) 07/10: tx working with vector on commit
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 852a9a00e7b90dcd94c731b3780422883f55eaa5
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Wed May 7 19:11:04 2025 -0400
tx working with vector on commit
---
.../structure/TinkerTransactionGraph.java | 2 -
.../structure/TinkerTransactionVectorIndex.java | 79 ++++++++++++++++++----
.../tinkergraph/structure/TinkerVectorIndex.java | 3 +-
.../structure/TinkerGraphVectorIndexTest.java | 10 ---
4 files changed, 66 insertions(+), 28 deletions(-)
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java
index 6b53a43f96..39ad815099 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java
@@ -35,10 +35,8 @@ import org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.strategy.optim
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerServiceRegistry;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java
index 864a8242ba..8b39bad366 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java
@@ -22,6 +22,7 @@ import com.github.jelmerk.hnswlib.core.Item;
import com.github.jelmerk.hnswlib.core.SearchResult;
import com.github.jelmerk.hnswlib.core.hnsw.HnswIndex;
import com.github.jelmerk.hnswlib.core.Index;
+import com.github.jelmerk.hnswlib.core.hnsw.SizeLimitExceededException;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -46,6 +47,11 @@ final class TinkerTransactionVectorIndex<T extends TinkerElement> extends Abstra
*/
protected Map<String, Index<Object, float[], ElementItem, Float>> vectorIndices = new ConcurrentHashMap<>();
+ /**
+ * Map of property key to growth rate
+ */
+ private final Map<String, Double> growthRates = new ConcurrentHashMap<>();
+
/**
* Default number of nearest neighbors to return
*/
@@ -69,7 +75,12 @@ final class TinkerTransactionVectorIndex<T extends TinkerElement> extends Abstra
/**
* Default maximum number of items in the index
*/
- private static final int DEFAULT_MAX_ITEMS = 100;
+ private static final int DEFAULT_MAX_ITEMS = 10000;
+
+ /**
+ * Default growth rate for the index when it reaches capacity (10%)
+ */
+ private static final double DEFAULT_GROWTH_RATE = 0.1;
/**
* Configuration key for the dimension of the vector
@@ -101,6 +112,11 @@ final class TinkerTransactionVectorIndex<T extends TinkerElement> extends Abstra
*/
public static final String CONFIG_DISTANCE_FUNCTION = "distanceFunction";
+ /**
+ * Configuration key for the growth rate of the index when it reaches capacity
+ */
+ public static final String CONFIG_GROWTH_RATE = "growthRate";
+
/**
* Creates a new vector index for the specified graph and element class.
*
@@ -183,6 +199,15 @@ final class TinkerTransactionVectorIndex<T extends TinkerElement> extends Abstra
}
}
+ double growthRate = DEFAULT_GROWTH_RATE;
+ if (configuration.containsKey(CONFIG_GROWTH_RATE)) {
+ final Object growthObj = configuration.get(CONFIG_GROWTH_RATE);
+ if (growthObj instanceof Number) {
+ growthRate = ((Number) growthObj).doubleValue();
+ }
+ }
+ this.growthRates.put(key, growthRate);
+
// Create a new HNSW index for this property key
final Index<Object, float[], ElementItem, Float> index = HnswIndex
.newBuilder(dimension, vector.getDistanceFunction(), Float::compare, maxItems)
@@ -303,7 +328,7 @@ final class TinkerTransactionVectorIndex<T extends TinkerElement> extends Abstra
// If the element is not in the index, just ignore the exception
}
final ElementItem item = new ElementItem(element.id(), newValue, element);
- index.add(item);
+ addWithResize(key, index, item);
}
/**
@@ -366,26 +391,17 @@ final class TinkerTransactionVectorIndex<T extends TinkerElement> extends Abstra
@Override
public void remove(final String key, final Object value, final T element) {
- // For vector indices, we use removeFromIndex
- if (value instanceof float[]) {
- removeFromIndex(key, element);
- }
+ // only make changes to index tx close
}
@Override
public void removeElement(final T element) {
- if (this.indexClass.isAssignableFrom(element.getClass())) {
- for (String key : this.indexedKeys) {
- removeFromIndex(key, element);
- }
- }
+ // only make changes to index tx close
}
@Override
public void autoUpdate(final String key, final Object newValue, final Object oldValue, final T element) {
- if (this.indexedKeys.contains(key) && newValue instanceof float[]) {
- updateIndex(key, (float[]) newValue, element);
- }
+ // only make changes to index tx close
}
/**
@@ -422,4 +438,39 @@ final class TinkerTransactionVectorIndex<T extends TinkerElement> extends Abstra
public void rollback() {
// No specific action needed for rollback in the current implementation
}
+
+ /**
+ * Helper method to add an item to the index with automatic resizing if needed.
+ *
+ * @param key the property key
+ * @param index the vector index
+ * @param item the item to add
+ */
+ private void addWithResize(final String key, final Index<Object, float[], ElementItem, Float> index,
+ final ElementItem item) {
+ try {
+ index.add(item);
+ } catch (SizeLimitExceededException e) {
+ // Get the growth rate for this index
+ final Double growthRate = this.growthRates.getOrDefault(key, 0.0d);
+
+ // If growth rate is 0 or not set, rethrow the exception
+ if (growthRate <= 0) {
+ throw e;
+ }
+
+ // Calculate new size based on growth rate
+ final int currentSize = ((HnswIndex<Object, float[], ElementItem, Float>) index).getMaxItemCount();
+ final int newSize = currentSize + (int) Math.ceil(currentSize * growthRate);
+
+ // Resize the index
+ ((HnswIndex<Object, float[], ElementItem, Float>) index).resize(newSize);
+
+ // Try adding the item again
+ index.add(item);
+ } catch (Exception e) {
+ // If it's not a size limit exception, rethrow it
+ throw e;
+ }
+ }
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
index becbaad03f..0a4c17e5b1 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
@@ -43,7 +43,7 @@ import java.util.stream.Collectors;
final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorIndex<T> {
/**
- * Map of property key to vector index
+ * Map of the property key to vector index
*/
private final Map<String, Index<Object, float[], ElementItem, Float>> vectorIndices = new ConcurrentHashMap<>();
@@ -412,7 +412,6 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
}
}
-
/**
* A class that wraps an element with its vector for use in the HNSW index.
*/
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
index f84806283b..b3fbfe8e80 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
@@ -508,11 +508,6 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldGrowIndexWhenCapacityReached() {
- // Skip this test for TinkerTransactionGraph as it handles transactions differently
- if (graph instanceof TinkerTransactionGraph) {
- return;
- }
-
final GraphTraversalSource g = traversal().with(graph);
// Create a small index with only 5 items capacity and 50% growth rate
@@ -551,11 +546,6 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldThrowExceptionWhenGrowthRateIsZero() {
- // Skip this test for TinkerTransactionGraph as it handles transactions differently
- if (graph instanceof TinkerTransactionGraph) {
- return;
- }
-
final GraphTraversalSource g = traversal().with(graph);
// Create a small index with only 5 items capacity and 0 growth rate
(tinkerpop) 09/10: Cleaned up docs
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 2e405b33acc3030ef65daa266746ace1deed64dc
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Thu May 8 13:19:53 2025 -0400
Cleaned up docs
---
.../reference/implementations-tinkergraph.asciidoc | 48 +++++++++++++---------
1 file changed, 28 insertions(+), 20 deletions(-)
diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc b/docs/src/reference/implementations-tinkergraph.asciidoc
index daec3aa12b..76d53e0f21 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -306,10 +306,10 @@ g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f,
g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate()
g.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate()
byElementParams = [key: "embedding", topK: 2] <4>
-g.V().has("name", "Alice").call("tinker.search.vector.topKByElement", byElementParams).toList() <5>
+g.V().has("name", "Alice").call("tinker.search.vector.topKByElement", byElementParams) <5>
byElementParams = [key: "embedding", topK: 2, element: "vertex"] <6>
embedding = new float[]{1.0f, 0.0f, 0.0f}
-g.inject([embedding]).unfold().call("tinker.search.vector.topKByEmbedding", params).toList() <7>
+g.inject([embedding]).unfold().call("tinker.search.vector.topKByEmbedding", params) <7>
----
<1> Register the vector search service for "topKByElement".
@@ -325,20 +325,7 @@ The `call()` step returns a list of maps, each containing:
* `distance`: The similarity score between the query vector and the result
* `element`: The vertex or edge that matches the query
-Vector indices can also be created for edges:
-
-[gremlin-groovy]
-----
-graph.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graph))
-graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig)
-alice = g.V().has("name", "Alice").next()
-bob = g.V().has("name", "Bob").next()
-charlie = g.V().has("name", "Charlie").next()
-g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate()
-g.addE("knows").from(bob).to(charlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate()
-params = [key: "embedding"]
-g.E().has("embedding", new float[]{1.0f, 0.0f, 0.0f}).call("tinker.search.vector.topKByElement", params).toList()
-----
+TIP: Vector indices can also be created for edges.
TinkerGraph supports various distance functions for vector similarity search:
@@ -352,9 +339,8 @@ TinkerGraph supports various distance functions for vector similarity search:
You can specify the distance function when creating the vector index:
-[gremlin-groovy]
+[source,groovy]
----
-graph.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graph))
indexConfig = [dimension: 3, distanceType: TinkerIndexType.Vector.EUCLIDEAN]
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
----
@@ -376,7 +362,7 @@ These options are specified when creating a vector index:
Here's an example of creating a vector index with custom configuration options:
-[gremlin-groovy]
+[source,groovy]
----
graph.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graph))
indexConfig = [
@@ -395,7 +381,29 @@ TIP: Constants for all the configuration values can be found in `TinkerVectorInd
For example, "dimension" can be referenced as `TinkerVectorIndex.CONFIG_DIMENSION`.
Note that the distance functions can be used directly with the `TinkerVectorDistanceFactory` service. It allows
-calculation of the distance between the elements
+calculation of the distance between the starting and ending elements in a `Path`.
+
+[gremlin-groovy]
+----
+graph.getServiceRegistry().registerService(new TinkerVectorDistanceFactory(graph))
+g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).as('a').
+ addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).as('b').
+ addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).as('c').
+ addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).as('d').
+ addE('knows').from('a').to('b').
+ addE('knows').from('b').to('c').
+ addE('knows').from('b').to('d').
+ addE('knows').from('c').to('d').iterate()
+params = [key: "embedding", distanceFunction: "COSINE"]
+g.V().has('name','Alice').out().out().path()
+g.V().has('name','Alice').out().out().path().
+ project('path','distance').
+ by().
+ by(call('tinker.vector.distance', params))
+----
+
+In the example above, the `Path` object is projected to a `Map` that has the `Path` itself and the vector distance
+between the start and end vertex of the path.
[[tinkergraph-gremlin-tx]]
=== Transactions
(tinkerpop) 04/10: Add ServiceRegistry for vector search with call()
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 74774f2349fbc7d95c6a552fa443a98cbaacb130
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Tue May 6 10:59:07 2025 -0400
Add ServiceRegistry for vector search with call()
---
.../gremlin/structure/service/ServiceRegistry.java | 2 +-
.../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 22 +--
gremlin-go/driver/cucumber/gremlin.go | 22 +--
.../gremlin-javascript/test/cucumber/gremlin.js | 22 +--
.../src/main/python/tests/feature/gremlin.py | 22 +--
.../gremlin/test/features/map/Call.feature | 38 ++---
.../services/TinkerVectorSearchFactory.java | 39 +++--
.../tinkergraph/structure/AbstractTinkerIndex.java | 2 +-
.../structure/AbstractTinkerVectorIndex.java | 2 +-
.../gremlin/tinkergraph/structure/TinkerGraph.java | 1 -
.../tinkergraph/structure/TinkerIndexElement.java | 5 +
.../structure/TinkerGraphServiceTest.java | 184 ++++++++++++++++++---
12 files changed, 262 insertions(+), 99 deletions(-)
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/service/ServiceRegistry.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/service/ServiceRegistry.java
index eb33e5968d..c22769da20 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/service/ServiceRegistry.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/service/ServiceRegistry.java
@@ -86,7 +86,7 @@ public class ServiceRegistry implements DirectoryService, AutoCloseable {
* {@link DirectoryService} execution. List or describe the registered callable services.
*/
@Override
- public CloseableIterator execute(ServiceCallContext ctx, final Map params) {
+ public CloseableIterator execute(final ServiceCallContext ctx, final Map params) {
final boolean verbose = (boolean) params.getOrDefault(Params.VERBOSE, false);
final String serviceName = (String) params.get(Params.SERVICE);
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index bf88cfccfa..dea9f08911 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -1023,18 +1023,18 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
{"g_V_hasLabelXpersonX_valuesXageX_asString_concatX_years_oldX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasLabel("person").Values<object>("age").AsString().Concat(" years old")}},
{"g_call", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>()}},
{"g_callXlistX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>((string) "--list")}},
- {"g_callXlistX_withXstring_stringX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>((string) "--list").With("service", "tinker.search")}},
- {"g_callXlistX_withXstring_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>((string) "--list").With("service", __.Constant<object>("tinker.search"))}},
+ {"g_callXlistX_withXstring_stringX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>((string) "--list").With("service", "tinker.search.text")}},
+ {"g_callXlistX_withXstring_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>((string) "--list").With("service", __.Constant<object>("tinker.search.text"))}},
{"g_callXlist_mapX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("--list", (IDictionary<object, object>) p["xx1"])}},
- {"g_callXlist_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("--list", (ITraversal) __.Project<object>("service").By(__.Constant<object>("tinker.search")))}},
- {"g_callXlist_map_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("--list", (IDictionary<object, object>) p["xx1"], (ITraversal) __.Project<object>("service").By(__.Constant<object>("tinker.search")))}},
- {"g_callXsearch_mapX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search", (IDictionary<object, object>) p["xx1"]).Element()}},
- {"g_callXsearch_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search", (ITraversal) __.Project<object>("search").By(__.Constant<object>("vada"))).Element()}},
- {"g_callXsearchX_withXstring_stringX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>((string) "tinker.search").With("search", "vada").Element()}},
- {"g_callXsearchX_withXstring_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>((string) "tinker.search").With("search", __.Constant<object>("vada")).Element()}},
- {"g_callXsearch_mapX_withXstring_VertexX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search", (IDictionary<object, object>) p["xx1"]).With("type", "Vertex").Element()}},
- {"g_callXsearch_mapX_withXstring_EdgeX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search", (IDictionary<object, object>) p["xx1"]).With("type", "Edge").Element()}},
- {"g_callXsearch_mapX_withXstring_VertexPropertyX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search", (IDictionary<object, object>) p["xx1"]).With("type", "VertexProperty").Element()}},
+ {"g_callXlist_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("--list", (ITraversal) __.Project<object>("service").By(__.Constant<object>("tinker.search.text")))}},
+ {"g_callXlist_map_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("--list", (IDictionary<object, object>) p["xx1"], (ITraversal) __.Project<object>("service").By(__.Constant<object>("tinker.search.text")))}},
+ {"g_callXsearch_mapX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search.text", (IDictionary<object, object>) p["xx1"]).Element()}},
+ {"g_callXsearch_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search.text", (ITraversal) __.Project<object>("search").By(__.Constant<object>("vada"))).Element()}},
+ {"g_callXsearchX_withXstring_stringX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>((string) "tinker.search.text").With("search", "vada").Element()}},
+ {"g_callXsearchX_withXstring_traversalX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>((string) "tinker.search.text").With("search", __.Constant<object>("vada")).Element()}},
+ {"g_callXsearch_mapX_withXstring_VertexX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search.text", (IDictionary<object, object>) p["xx1"]).With("type", "Vertex").Element()}},
+ {"g_callXsearch_mapX_withXstring_EdgeX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search.text", (IDictionary<object, object>) p["xx1"]).With("type", "Edge").Element()}},
+ {"g_callXsearch_mapX_withXstring_VertexPropertyX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Call<object>("tinker.search.text", (IDictionary<object, object>) p["xx1"]).With("type", "VertexProperty").Element()}},
{"g_V_callXdcX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().As("v").Call<object>((string) "tinker.degree.centrality").Project<object>("vertex", "degree").By(__.Select<object>("v")).By()}},
{"g_V_whereXcallXdcXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Where(__.Call<object>((string) "tinker.degree.centrality").Is(3))}},
{"g_V_callXdcX_withXdirection_OUTX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().As("v").Call<object>((string) "tinker.degree.centrality").With("direction", Direction.Out).Project<object>("vertex", "degree").By(__.Select<object>("v")).By()}},
diff --git a/gremlin-go/driver/cucumber/gremlin.go b/gremlin-go/driver/cucumber/gremlin.go
index 2c821d785d..69cf17e947 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -993,18 +993,18 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[
"g_V_hasLabelXpersonX_valuesXageX_asString_concatX_years_oldX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasLabel("person").Values("age").AsString().Concat(" years old")}},
"g_call": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call()}},
"g_callXlistX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list")}},
- "g_callXlistX_withXstring_stringX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list").With("service", "tinker.search")}},
- "g_callXlistX_withXstring_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list").With("service", gremlingo.T__.Constant("tinker.search"))}},
+ "g_callXlistX_withXstring_stringX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list").With("service", "tinker.search.text")}},
+ "g_callXlistX_withXstring_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list").With("service", gremlingo.T__.Constant("tinker.search.text"))}},
"g_callXlist_mapX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list", p["xx1"])}},
- "g_callXlist_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list", gremlingo.T__.Project("service").By(gremlingo.T__.Constant("tinker.search")))}},
- "g_callXlist_map_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list", p["xx1"], gremlingo.T__.Project("service").By(gremlingo.T__.Constant("tinker.search")))}},
- "g_callXsearch_mapX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search", p["xx1"]).Element()}},
- "g_callXsearch_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search", gremlingo.T__.Project("search").By(gremlingo.T__.Constant("vada"))).Element()}},
- "g_callXsearchX_withXstring_stringX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search").With("search", "vada").Element()}},
- "g_callXsearchX_withXstring_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search").With("search", gremlingo.T__.Constant("vada")).Element()}},
- "g_callXsearch_mapX_withXstring_VertexX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search", p["xx1"]).With("type", "Vertex").Element()}},
- "g_callXsearch_mapX_withXstring_EdgeX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search", p["xx1"]).With("type", "Edge").Element()}},
- "g_callXsearch_mapX_withXstring_VertexPropertyX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search", p["xx1"]).With("type", "VertexProperty").Element()}},
+ "g_callXlist_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list", gremlingo.T__.Project("service").By(gremlingo.T__.Constant("tinker.search.text")))}},
+ "g_callXlist_map_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("--list", p["xx1"], gremlingo.T__.Project("service").By(gremlingo.T__.Constant("tinker.search.text")))}},
+ "g_callXsearch_mapX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search.text", p["xx1"]).Element()}},
+ "g_callXsearch_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search.text", gremlingo.T__.Project("search").By(gremlingo.T__.Constant("vada"))).Element()}},
+ "g_callXsearchX_withXstring_stringX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search.text").With("search", "vada").Element()}},
+ "g_callXsearchX_withXstring_traversalX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search.text").With("search", gremlingo.T__.Constant("vada")).Element()}},
+ "g_callXsearch_mapX_withXstring_VertexX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search.text", p["xx1"]).With("type", "Vertex").Element()}},
+ "g_callXsearch_mapX_withXstring_EdgeX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search.text", p["xx1"]).With("type", "Edge").Element()}},
+ "g_callXsearch_mapX_withXstring_VertexPropertyX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Call("tinker.search.text", p["xx1"]).With("type", "VertexProperty").Element()}},
"g_V_callXdcX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().As("v").Call("tinker.degree.centrality").Project("vertex", "degree").By(gremlingo.T__.Select("v")).By()}},
"g_V_whereXcallXdcXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Where(gremlingo.T__.Call("tinker.degree.centrality").Is(3))}},
"g_V_callXdcX_withXdirection_OUTX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().As("v").Call("tinker.degree.centrality").With("direction", gremlingo.Direction.Out).Project("vertex", "degree").By(gremlingo.T__.Select("v")).By()}},
diff --git a/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js b/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js
index dccd1a3cf3..93f2902667 100644
--- a/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js
+++ b/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js
@@ -1024,18 +1024,18 @@ const gremlins = {
g_V_hasLabelXpersonX_valuesXageX_asString_concatX_years_oldX: [function({g}) { return g.V().hasLabel("person").values("age").asString().concat(" years old") }],
g_call: [function({g}) { return g.call() }],
g_callXlistX: [function({g}) { return g.call("--list") }],
- g_callXlistX_withXstring_stringX: [function({g}) { return g.call("--list").with_("service", "tinker.search") }],
- g_callXlistX_withXstring_traversalX: [function({g}) { return g.call("--list").with_("service", __.constant("tinker.search")) }],
+ g_callXlistX_withXstring_stringX: [function({g}) { return g.call("--list").with_("service", "tinker.search.text") }],
+ g_callXlistX_withXstring_traversalX: [function({g}) { return g.call("--list").with_("service", __.constant("tinker.search.text")) }],
g_callXlist_mapX: [function({g, xx1}) { return g.call("--list", xx1) }],
- g_callXlist_traversalX: [function({g}) { return g.call("--list", __.project("service").by(__.constant("tinker.search"))) }],
- g_callXlist_map_traversalX: [function({g, xx1}) { return g.call("--list", xx1, __.project("service").by(__.constant("tinker.search"))) }],
- g_callXsearch_mapX: [function({g, xx1}) { return g.call("tinker.search", xx1).element() }],
- g_callXsearch_traversalX: [function({g}) { return g.call("tinker.search", __.project("search").by(__.constant("vada"))).element() }],
- g_callXsearchX_withXstring_stringX: [function({g}) { return g.call("tinker.search").with_("search", "vada").element() }],
- g_callXsearchX_withXstring_traversalX: [function({g}) { return g.call("tinker.search").with_("search", __.constant("vada")).element() }],
- g_callXsearch_mapX_withXstring_VertexX: [function({g, xx1}) { return g.call("tinker.search", xx1).with_("type", "Vertex").element() }],
- g_callXsearch_mapX_withXstring_EdgeX: [function({g, xx1}) { return g.call("tinker.search", xx1).with_("type", "Edge").element() }],
- g_callXsearch_mapX_withXstring_VertexPropertyX: [function({g, xx1}) { return g.call("tinker.search", xx1).with_("type", "VertexProperty").element() }],
+ g_callXlist_traversalX: [function({g}) { return g.call("--list", __.project("service").by(__.constant("tinker.search.text"))) }],
+ g_callXlist_map_traversalX: [function({g, xx1}) { return g.call("--list", xx1, __.project("service").by(__.constant("tinker.search.text"))) }],
+ g_callXsearch_mapX: [function({g, xx1}) { return g.call("tinker.search.text", xx1).element() }],
+ g_callXsearch_traversalX: [function({g}) { return g.call("tinker.search.text", __.project("search").by(__.constant("vada"))).element() }],
+ g_callXsearchX_withXstring_stringX: [function({g}) { return g.call("tinker.search.text").with_("search", "vada").element() }],
+ g_callXsearchX_withXstring_traversalX: [function({g}) { return g.call("tinker.search.text").with_("search", __.constant("vada")).element() }],
+ g_callXsearch_mapX_withXstring_VertexX: [function({g, xx1}) { return g.call("tinker.search.text", xx1).with_("type", "Vertex").element() }],
+ g_callXsearch_mapX_withXstring_EdgeX: [function({g, xx1}) { return g.call("tinker.search.text", xx1).with_("type", "Edge").element() }],
+ g_callXsearch_mapX_withXstring_VertexPropertyX: [function({g, xx1}) { return g.call("tinker.search.text", xx1).with_("type", "VertexProperty").element() }],
g_V_callXdcX: [function({g}) { return g.V().as("v").call("tinker.degree.centrality").project("vertex", "degree").by(__.select("v")).by() }],
g_V_whereXcallXdcXX: [function({g}) { return g.V().where(__.call("tinker.degree.centrality").is(3)) }],
g_V_callXdcX_withXdirection_OUTX: [function({g}) { return g.V().as("v").call("tinker.degree.centrality").with_("direction", Direction.OUT).project("vertex", "degree").by(__.select("v")).by() }],
diff --git a/gremlin-python/src/main/python/tests/feature/gremlin.py b/gremlin-python/src/main/python/tests/feature/gremlin.py
index 9cd84e34ff..91521ddeca 100644
--- a/gremlin-python/src/main/python/tests/feature/gremlin.py
+++ b/gremlin-python/src/main/python/tests/feature/gremlin.py
@@ -998,18 +998,18 @@ world.gremlins = {
'g_V_hasLabelXpersonX_valuesXageX_asString_concatX_years_oldX': [(lambda g:g.V().has_label('person').values('age').as_string().concat(' years old'))],
'g_call': [(lambda g:g.call())],
'g_callXlistX': [(lambda g:g.call('--list'))],
- 'g_callXlistX_withXstring_stringX': [(lambda g:g.call('--list').with_('service', 'tinker.search'))],
- 'g_callXlistX_withXstring_traversalX': [(lambda g:g.call('--list').with_('service', __.constant('tinker.search')))],
+ 'g_callXlistX_withXstring_stringX': [(lambda g:g.call('--list').with_('service', 'tinker.search.text'))],
+ 'g_callXlistX_withXstring_traversalX': [(lambda g:g.call('--list').with_('service', __.constant('tinker.search.text')))],
'g_callXlist_mapX': [(lambda g, xx1=None:g.call('--list', xx1))],
- 'g_callXlist_traversalX': [(lambda g:g.call('--list', __.project('service').by(__.constant('tinker.search'))))],
- 'g_callXlist_map_traversalX': [(lambda g, xx1=None:g.call('--list', xx1, __.project('service').by(__.constant('tinker.search'))))],
- 'g_callXsearch_mapX': [(lambda g, xx1=None:g.call('tinker.search', xx1).element())],
- 'g_callXsearch_traversalX': [(lambda g:g.call('tinker.search', __.project('search').by(__.constant('vada'))).element())],
- 'g_callXsearchX_withXstring_stringX': [(lambda g:g.call('tinker.search').with_('search', 'vada').element())],
- 'g_callXsearchX_withXstring_traversalX': [(lambda g:g.call('tinker.search').with_('search', __.constant('vada')).element())],
- 'g_callXsearch_mapX_withXstring_VertexX': [(lambda g, xx1=None:g.call('tinker.search', xx1).with_('type', 'Vertex').element())],
- 'g_callXsearch_mapX_withXstring_EdgeX': [(lambda g, xx1=None:g.call('tinker.search', xx1).with_('type', 'Edge').element())],
- 'g_callXsearch_mapX_withXstring_VertexPropertyX': [(lambda g, xx1=None:g.call('tinker.search', xx1).with_('type', 'VertexProperty').element())],
+ 'g_callXlist_traversalX': [(lambda g:g.call('--list', __.project('service').by(__.constant('tinker.search.text'))))],
+ 'g_callXlist_map_traversalX': [(lambda g, xx1=None:g.call('--list', xx1, __.project('service').by(__.constant('tinker.search.text'))))],
+ 'g_callXsearch_mapX': [(lambda g, xx1=None:g.call('tinker.search.text', xx1).element())],
+ 'g_callXsearch_traversalX': [(lambda g:g.call('tinker.search.text', __.project('search').by(__.constant('vada'))).element())],
+ 'g_callXsearchX_withXstring_stringX': [(lambda g:g.call('tinker.search.text').with_('search', 'vada').element())],
+ 'g_callXsearchX_withXstring_traversalX': [(lambda g:g.call('tinker.search.text').with_('search', __.constant('vada')).element())],
+ 'g_callXsearch_mapX_withXstring_VertexX': [(lambda g, xx1=None:g.call('tinker.search.text', xx1).with_('type', 'Vertex').element())],
+ 'g_callXsearch_mapX_withXstring_EdgeX': [(lambda g, xx1=None:g.call('tinker.search.text', xx1).with_('type', 'Edge').element())],
+ 'g_callXsearch_mapX_withXstring_VertexPropertyX': [(lambda g, xx1=None:g.call('tinker.search.text', xx1).with_('type', 'VertexProperty').element())],
'g_V_callXdcX': [(lambda g:g.V().as_('v').call('tinker.degree.centrality').project('vertex', 'degree').by(__.select('v')).by())],
'g_V_whereXcallXdcXX': [(lambda g:g.V().where(__.call('tinker.degree.centrality').is_(3)))],
'g_V_callXdcX_withXdirection_OUTX': [(lambda g:g.V().as_('v').call('tinker.degree.centrality').with_('direction', Direction.OUT).project('vertex', 'degree').by(__.select('v')).by())],
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Call.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Call.feature
index 3afb97e2ba..fcb7a6420d 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Call.feature
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Call.feature
@@ -27,7 +27,7 @@ Feature: Step - call()
When iterated to list
Then the result should be unordered
| result |
- | tinker.search |
+ | tinker.search.text |
| tinker.degree.centrality |
Scenario: g_callXlistX
@@ -39,34 +39,34 @@ Feature: Step - call()
When iterated to list
Then the result should be unordered
| result |
- | tinker.search |
+ | tinker.search.text |
| tinker.degree.centrality |
Scenario: g_callXlistX_withXstring_stringX
Given the empty graph
And the traversal of
"""
- g.call("--list").with("service", "tinker.search")
+ g.call("--list").with("service", "tinker.search.text")
"""
When iterated to list
Then the result should be unordered
| result |
- | tinker.search |
+ | tinker.search.text |
Scenario: g_callXlistX_withXstring_traversalX
Given the empty graph
And the traversal of
"""
- g.call("--list").with("service", __.constant("tinker.search"))
+ g.call("--list").with("service", __.constant("tinker.search.text"))
"""
When iterated to list
Then the result should be unordered
| result |
- | tinker.search |
+ | tinker.search.text |
Scenario: g_callXlist_mapX
Given the empty graph
- And using the parameter xx1 defined as "m[{\"service\": \"tinker.search\"}]"
+ And using the parameter xx1 defined as "m[{\"service\": \"tinker.search.text\"}]"
And the traversal of
"""
g.call("--list", xx1)
@@ -74,18 +74,18 @@ Feature: Step - call()
When iterated to list
Then the result should be unordered
| result |
- | tinker.search |
+ | tinker.search.text |
Scenario: g_callXlist_traversalX
Given the empty graph
And the traversal of
"""
- g.call("--list", __.project("service").by(__.constant("tinker.search")))
+ g.call("--list", __.project("service").by(__.constant("tinker.search.text")))
"""
When iterated to list
Then the result should be unordered
| result |
- | tinker.search |
+ | tinker.search.text |
# The parameterized xx1 map will fail, but just passing in the map will pass, need to check
Scenario: g_callXlist_map_traversalX
@@ -93,19 +93,19 @@ Feature: Step - call()
And using the parameter xx1 defined as "m[{\"x\": \"y\"}]"
And the traversal of
"""
- g.call("--list", xx1, __.project("service").by(__.constant("tinker.search")))
+ g.call("--list", xx1, __.project("service").by(__.constant("tinker.search.text")))
"""
When iterated to list
Then the result should be unordered
| result |
- | tinker.search |
+ | tinker.search.text |
Scenario: g_callXsearch_mapX
Given the modern graph
And using the parameter xx1 defined as "m[{\"search\": \"mar\"}]"
And the traversal of
"""
- g.call("tinker.search", xx1).element()
+ g.call("tinker.search.text", xx1).element()
"""
When iterated to list
Then the result should be unordered
@@ -116,7 +116,7 @@ Feature: Step - call()
Given the modern graph
And the traversal of
"""
- g.call("tinker.search", __.project("search").by(__.constant("vada"))).element()
+ g.call("tinker.search.text", __.project("search").by(__.constant("vada"))).element()
"""
When iterated to list
Then the result should be unordered
@@ -127,7 +127,7 @@ Feature: Step - call()
Given the modern graph
And the traversal of
"""
- g.call("tinker.search").with("search", "vada").element()
+ g.call("tinker.search.text").with("search", "vada").element()
"""
When iterated to list
Then the result should be unordered
@@ -138,7 +138,7 @@ Feature: Step - call()
Given the modern graph
And the traversal of
"""
- g.call("tinker.search").with("search", __.constant("vada")).element()
+ g.call("tinker.search.text").with("search", __.constant("vada")).element()
"""
When iterated to list
Then the result should be unordered
@@ -150,7 +150,7 @@ Feature: Step - call()
And using the parameter xx1 defined as "m[{\"search\": \"mar\"}]"
And the traversal of
"""
- g.call("tinker.search", xx1).with("type", "Vertex").element()
+ g.call("tinker.search.text", xx1).with("type", "Vertex").element()
"""
When iterated to list
Then the result should be unordered
@@ -162,7 +162,7 @@ Feature: Step - call()
And using the parameter xx1 defined as "m[{\"search\": \"mar\"}]"
And the traversal of
"""
- g.call("tinker.search", xx1).with("type", "Edge").element()
+ g.call("tinker.search.text", xx1).with("type", "Edge").element()
"""
When iterated to list
Then the result should be empty
@@ -172,7 +172,7 @@ Feature: Step - call()
And using the parameter xx1 defined as "m[{\"search\": \"mar\"}]"
And the traversal of
"""
- g.call("tinker.search", xx1).with("type", "VertexProperty").element()
+ g.call("tinker.search.text", xx1).with("type", "VertexProperty").element()
"""
When iterated to list
Then the result should be empty
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
index fb0b3c76f4..b0a793a814 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
@@ -19,37 +19,28 @@
package org.apache.tinkerpop.gremlin.tinkergraph.services;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.structure.service.Service;
import org.apache.tinkerpop.gremlin.structure.util.CloseableIterator;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.AbstractTinkerGraph;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerHelper;
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIndexElement;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.util.Collections;
-import java.util.Iterator;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.LongStream;
import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.KEY;
import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.TOP_K;
import static org.apache.tinkerpop.gremlin.util.CollectionUtil.asMap;
/**
- *
+ * Service to utilize a {@code TinkerVertexIndex} to do a vector search.
*/
public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServiceFactory<Element, Map<String, Object>> implements Service<Element, Map<String, Object>> {
- public static final String NAME = "tinker.search.vector.topKByVertex";
+ public static final String NAME = "tinker.search.vector.topKByElement";
public interface Params {
/**
@@ -91,16 +82,38 @@ public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServi
if (isStart) {
throw new UnsupportedOperationException(Exceptions.cannotStartTraversal);
}
+
+ if (!params.containsKey(KEY)) {
+ throw new IllegalArgumentException("The parameter map must contain the key where the embedding is: " + KEY);
+ }
+
return this;
}
@Override
public CloseableIterator<Map<String,Object>> execute(final ServiceCallContext ctx, final Traverser.Admin<Element> in, final Map params) {
final String key = (String) params.get(KEY);
- final int k = (int) params.getOrDefault(TOP_K, 10);
+
+ // add 1 because we always filter 1 out of the index because it will return a match on itself
+ final int k = (int) params.getOrDefault(TOP_K, 10) + 1;
final Element e = in.get();
+
+ // if the current element does not have the specified key, then return no results
+ if (!e.keys().contains(key))
+ return CloseableIterator.empty();
+
final float[] embedding = e.value(key);
- return CloseableIterator.of(graph.findNearestVertices(key, embedding, k).stream().map(TinkerIndexElement::toMap).iterator());
+ if (e instanceof Vertex) {
+ return CloseableIterator.of(graph.findNearestVertices(key, embedding, k).stream()
+ .filter(tie -> !tie.getElement().equals(e))
+ .map(TinkerIndexElement::toMap).iterator());
+ } else if (e instanceof Edge) {
+ return CloseableIterator.of(graph.findNearestEdges(key, embedding, k).stream()
+ .filter(tie -> !tie.getElement().equals(e))
+ .map(TinkerIndexElement::toMap).iterator());
+ } else {
+ return CloseableIterator.empty();
+ }
}
@Override
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerIndex.java
index 80c50266db..b799e7f428 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerIndex.java
@@ -34,7 +34,7 @@ import java.util.Set;
*
* @author Valentyn Kahamlyk
*/
-public abstract class AbstractTinkerIndex<T extends Element> {
+abstract class AbstractTinkerIndex<T extends Element> {
protected final Class<T> indexClass;
protected final AbstractTinkerGraph graph;
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java
index 7826d402e8..9141513daf 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java
@@ -27,7 +27,7 @@ import java.util.List;
*
* @param <T> the type of elements stored in the vector index
*/
-public abstract class AbstractTinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T> {
+abstract class AbstractTinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T> {
/**
* Default number of nearest neighbors to return
*/
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
index b92ab58688..177378b620 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
@@ -97,7 +97,6 @@ public class TinkerGraph extends AbstractTinkerGraph {
if (graphLocation != null) loadGraph();
serviceRegistry = new TinkerServiceRegistry(this);
- serviceRegistry.registerService(new TinkerServiceRegistry(this));
configuration.getList(String.class, GREMLIN_TINKERGRAPH_SERVICE, Collections.emptyList()).forEach(serviceClass ->
serviceRegistry.registerService(instantiate(serviceClass)));
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexElement.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexElement.java
index d8e43afb4c..24fb22d144 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexElement.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexElement.java
@@ -18,9 +18,14 @@
*/
package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+import org.apache.tinkerpop.gremlin.structure.Element;
+
import java.util.HashMap;
import java.util.Map;
+/**
+ * A container object that holds an {@link Element} with a "distance" as determined by a vector index.
+ */
public class TinkerIndexElement<T> {
private final T element;
private final float distance;
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphServiceTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphServiceTest.java
index e8e2e2bffc..e44e9362f6 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphServiceTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphServiceTest.java
@@ -25,10 +25,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerDegreeCentralityFactory;
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerServiceRegistry;
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerTextSearchFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory;
import org.apache.tinkerpop.gremlin.util.function.TriFunction;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
@@ -38,6 +40,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -69,8 +72,12 @@ public class TinkerGraphServiceTest {
final TinkerGraph graph = TinkerFactory.createModern();
final GraphTraversalSource g = graph.traversal();
+ static final Map<String,Object> indexConfig = new HashMap<String,Object>() {{
+ put(TinkerVectorIndex.CONFIG_DIMENSION, 3);
+ }};
+
@Before
- public void registerServices() {
+ public void setup() {
graph.getServiceRegistry().registerService(new TinkerTextSearchFactory(graph));
graph.getServiceRegistry().registerService(new TinkerDegreeCentralityFactory(graph));
}
@@ -81,31 +88,31 @@ public class TinkerGraphServiceTest {
@Test
public void g_call() throws Exception {
/*
- * Tinkergraph has one registered service by default ("tinker.search").
+ * TinkerGraph has one registered service by default ("tinker.search").
*/
assertArrayEquals(new String[] {
- "tinker.search",
- "tinker.degree.centrality"
+ TinkerTextSearchFactory.NAME,
+ TinkerDegreeCentralityFactory.NAME,
}, toResultStrings(
g.call()
));
assertArrayEquals(new String[] {
- "tinker.search",
- "tinker.degree.centrality"
+ TinkerTextSearchFactory.NAME,
+ TinkerDegreeCentralityFactory.NAME,
}, toResultStrings(
g.call("--list")
));
- checkResult("tinker.search",
- g.call("--list").with("service", "tinker.search"));
+ checkResult(TinkerTextSearchFactory.NAME,
+ g.call("--list").with("service", TinkerTextSearchFactory.NAME));
- checkResult("{\"name\":\"tinker.search\",\"type:[requirements]:\":{\"Start\":[]}," +
+ checkResult("{\"name\":\"" + TinkerTextSearchFactory.NAME + "\",\"type:[requirements]:\":{\"Start\":[]}," +
"\"params\":"+new ObjectMapper().writeValueAsString(TinkerTextSearchFactory.Params.DESCRIBE)+"}",
- g.call("--list").with("service", "tinker.search").with("verbose"));
+ g.call("--list").with("service", TinkerTextSearchFactory.NAME).with("verbose"));
}
/**
@@ -118,7 +125,7 @@ public class TinkerGraphServiceTest {
*/
assertEquals("[path[vp[name->marko], v[1]]]", toResultString(
- g.call("tinker.search", asMap("search", "mar"))
+ g.call(TinkerTextSearchFactory.NAME, asMap("search", "mar"))
.element().path()
));
@@ -128,7 +135,7 @@ public class TinkerGraphServiceTest {
*/
assertEquals("[path[vp[name->vadas], v[2]]]", toResultString(
- g.call("tinker.search", (Traversal) __.project("search").by(V(2).values("name")))
+ g.call(TinkerTextSearchFactory.NAME, (Traversal) __.project("search").by(V(2).values("name")))
.element().path()
));
@@ -143,7 +150,7 @@ public class TinkerGraphServiceTest {
"path[p[weight->0.2], e[12][6-created->3]]"
}, toResultStrings(
- g.call("tinker.search").with("search", __.constant("2"))
+ g.call(TinkerTextSearchFactory.NAME).with("search", __.constant("2"))
.element().path()
));
@@ -157,7 +164,7 @@ public class TinkerGraphServiceTest {
"path[vp[age->32], v[4]]",
}, toResultStrings(
- g.call("tinker.search").with("search", __.constant("2")).with("type", "Vertex")
+ g.call(TinkerTextSearchFactory.NAME).with("search", __.constant("2")).with("type", "Vertex")
.element().path()
));
@@ -175,7 +182,7 @@ public class TinkerGraphServiceTest {
"{vertex=v[6], degree=0}",
}, toResultStrings(
- g.V().as("v").call("tinker.degree.centrality")
+ g.V().as("v").call(TinkerDegreeCentralityFactory.NAME)
.project("vertex", "degree").by(select("v")).by()
));
@@ -189,14 +196,14 @@ public class TinkerGraphServiceTest {
"{vertex=peter, degree=1}",
}, toResultStrings(
- g.V().as("v").call("tinker.degree.centrality").with("direction", Direction.OUT)
+ g.V().as("v").call(TinkerDegreeCentralityFactory.NAME).with("direction", Direction.OUT)
.project("vertex", "degree").by(select("v").values("name")).by()
));
- checkResult("lop", g.V().where(__.call("tinker.degree.centrality").is(3)).values("name"));
- checkResults(Arrays.asList("vadas","josh","ripple"), g.V().where(__.call("tinker.degree.centrality").is(1)).values("name"));
- checkResult(0l, g.V().where(__.call("tinker.degree.centrality").is(100)).count());
+ checkResult("lop", g.V().where(__.call(TinkerDegreeCentralityFactory.NAME).is(3)).values("name"));
+ checkResults(Arrays.asList("vadas","josh","ripple"), g.V().where(__.call(TinkerDegreeCentralityFactory.NAME).is(1)).values("name"));
+ checkResult(0l, g.V().where(__.call(TinkerDegreeCentralityFactory.NAME).is(100)).count());
}
/**
@@ -445,6 +452,145 @@ public class TinkerGraphServiceTest {
checkResults(Arrays.asList(4, 2), g.V().call(serviceName, asMap(LambdaServiceFactory.Options.TYPE, Type.Barrier, LambdaServiceFactory.Options.CHUNK_SIZE, 4)));
}
+ @Test
+ public void g_V_callXvector_topKByVertex_key_embeddingX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ final Vertex vAlice = gv.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob").property("embedding", new float[]{0.05f, 1.0f, 0.0f}).next();
+ final Vertex vCharlie = gv.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).next();
+ final Vertex vDave = gv.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).next();
+
+ final Map<String,Object> m = new HashMap<String,Object>() {{
+ put("key", "embedding");
+ }};
+ final List<Object> list = gv.V(vAlice).call(TinkerVectorSearchFactory.NAME, m).toList();
+
+ final List<Map<String,Object>> expected = new ArrayList<>();
+ expected.add(asMap("distance", 0.006116271f, "element", vDave));
+ expected.add(asMap("distance", 0.9500624f, "element", vBob));
+ expected.add(asMap("distance", 1.0f, "element", vCharlie));
+
+ // Use a custom comparison to ensure the lists are equal
+ assertEquals(expected.size(), list.size());
+ for (int i = 0; i < expected.size(); i++) {
+ assertEquals(expected.get(i).get("distance"), ((Map) list.get(i)).get("distance"));
+ assertEquals(expected.get(i).get("element"), ((Map) list.get(i)).get("element"));
+ }
+ }
+
+ @Test
+ public void g_E_callXvector_topKByEdge_key_embeddingX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ final Vertex vAlice = gv.addV("person").property("name", "Alice").next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob").next();
+ final Vertex vCharlie = gv.addV("person").property("name", "Charlie").next();
+
+ final Edge e1 = gv.addE("knows").from(vAlice).to(vBob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Edge e2 = gv.addE("knows").from(vAlice).to(vCharlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).next();
+ final Edge e3 = gv.addE("knows").from(vBob).to(vCharlie).property("embedding", new float[]{0.5f, 0.5f, 0.0f}).next();
+
+ final Map<String, Object> m = new HashMap<String, Object>() {{
+ put("key", "embedding");
+ }};
+ final List<Object> list = gv.E(e1).call(TinkerVectorSearchFactory.NAME, m).toList();
+
+ final List<Map<String, Object>> expected = new ArrayList<>();
+ expected.add(asMap("distance", 0.29289323f, "element", e3));
+ expected.add(asMap("distance", 1.0f, "element", e2));
+
+ // Use a custom comparison to ensure the lists are equal
+ assertEquals(expected.size(), list.size());
+ for (int i = 0; i < expected.size(); i++) {
+ assertEquals(expected.get(i).get("distance"), ((Map) list.get(i)).get("distance"));
+ assertEquals(expected.get(i).get("element"), ((Map) list.get(i)).get("element"));
+ }
+ }
+
+ @Test
+ public void g_V_callXvector_topKByVertex_key_embedding_topK_1X() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ final Vertex vAlice = gv.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+ final Vertex vBob = gv.addV("person").property("name", "Bob").property("embedding", new float[]{0.05f, 1.0f, 0.0f}).next();
+ final Vertex vCharlie = gv.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).next();
+ final Vertex vDave = gv.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).next();
+
+ final Map<String,Object> m = new HashMap<String,Object>() {{
+ put("key", "embedding");
+ put("topK", 1);
+ }};
+ final List<Object> list = gv.V(vAlice).call(TinkerVectorSearchFactory.NAME, m).toList();
+
+ final List<Map<String,Object>> expected = new ArrayList<>();
+ expected.add(asMap("distance", 0.006116271f, "element", vDave));
+
+ // Use a custom comparison to ensure the lists are equal
+ assertEquals(expected.size(), list.size());
+ for (int i = 0; i < expected.size(); i++) {
+ assertEquals(expected.get(i).get("distance"), ((Map) list.get(i)).get("distance"));
+ assertEquals(expected.get(i).get("element"), ((Map) list.get(i)).get("element"));
+ }
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void g_V_callXvector_missing_keyX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ final Vertex vAlice = gv.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+
+ // Missing key parameter should cause a IllegalArgumentException when trying to access it
+ final Map<String,Object> emptyParams = new HashMap<>();
+ gv.V(vAlice).call(TinkerVectorSearchFactory.NAME, emptyParams).toList();
+ }
+
+ @Test
+ public void g_V_callXvector_nonexistent_propertyX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ final Vertex vAlice = gv.addV("person").property("name", "Alice").next(); // No embedding property
+
+ // Referencing a non-existent property should return no results
+ final Map<String,Object> params = new HashMap<String,Object>() {{
+ put("key", "embedding");
+ }};
+
+ assertEquals(0, gv.V(vAlice).call(TinkerVectorSearchFactory.NAME, params).count().next().intValue());
+ }
+
+ @Test
+ public void g_V_properties_callXvector_nonexistent_propertyX() {
+ final TinkerGraph graf = TinkerGraph.open();
+ graf.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graf));
+ graf.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final GraphTraversalSource gv = graf.traversal();
+
+ final Vertex vAlice = gv.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).next();
+
+ final Map<String,Object> params = new HashMap<String,Object>() {{
+ put("key", "embedding");
+ }};
+
+ // Referencing things other than vertex or edge should return no results
+ assertEquals(0, gv.V(vAlice).properties().call(TinkerVectorSearchFactory.NAME, params).count().next().intValue());
+ }
+
private String toResultString(final Traversal traversal) {
return (String) IteratorUtils.stream(traversal).map(Object::toString).collect(Collectors.joining(",", "[", "]"));
}
(tinkerpop) 06/10: Resize index
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 566c19621bd4dc7d534f4e5957736b48b6b19aef
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Tue May 6 13:57:52 2025 -0400
Resize index
---
.../reference/implementations-tinkergraph.asciidoc | 43 ++++---
.../tinkergraph/structure/TinkerVectorIndex.java | 133 ++++++++++++++++-----
.../structure/TinkerGraphVectorIndexTest.java | 85 ++++++++++++-
3 files changed, 208 insertions(+), 53 deletions(-)
diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc b/docs/src/reference/implementations-tinkergraph.asciidoc
index c5aeeafa49..6cdcfd30eb 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -298,8 +298,7 @@ Here's a complete example:
[gremlin-groovy]
----
graph.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graph)) <1>
-indexConfig = [:]
-indexConfig.put(TinkerVectorIndex.CONFIG_DIMENSION, 3) <2>
+indexConfig = [dimension: 3] <2>
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate()
g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate()
@@ -322,6 +321,7 @@ Vector indices can also be created for edges:
[gremlin-groovy]
----
+graph.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graph))
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig)
alice = g.V().has("name", "Alice").next()
bob = g.V().has("name", "Bob").next()
@@ -346,9 +346,8 @@ You can specify the distance function when creating the vector index:
[gremlin-groovy]
----
-indexConfig = [:]
-indexConfig.put(TinkerVectorIndex.CONFIG_DIMENSION, 3)
-indexConfig.put(TinkerVectorIndex.CONFIG_DISTANCE_TYPE, TinkerIndexType.Vector.EUCLIDEAN)
+graph.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graph))
+indexConfig = [dimension: 3, distanceType: TinkerIndexType.Vector.EUCLIDEAN]
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
----
@@ -358,29 +357,35 @@ These options are specified when creating a vector index:
[width="100%",cols="2,5,2",options="header"]
|=========================================================
|Configuration Option |Description |Default Value
-|`CONFIG_DIMENSION` |The dimension of the vector embeddings. This is a required parameter and must match the length of the vector embeddings stored in the graph. |N/A (Required)
-|`CONFIG_DISTANCE_TYPE` |The distance function to use for similarity calculations. Must be one of the `TinkerIndexType.Vector` enum values (COSINE, EUCLIDEAN, MANHATTAN, INNER_PRODUCT, BRAY_CURTIS, CANBERRA, CORRELATION). |COSINE
-|`CONFIG_M` |The maximum number of connections per node in the HNSW graph. Higher values provide better search quality at the cost of increased memory usage and index build time. |16
-|`CONFIG_EF_CONSTRUCTION` |The size of the dynamic candidate list during index construction. Higher values improve index quality at the cost of longer build times. |200
-|`CONFIG_EF` |The size of the dynamic candidate list during search. Higher values improve search accuracy at the cost of slower search times. |10
-|`CONFIG_MAX_ITEMS` |The maximum number of items that can be stored in the index. |100
+|`dimension` |The dimension of the vector embeddings. This is a required parameter and must match the length of the vector embeddings stored in the graph. |N/A (Required)
+|`distanceType` |The distance function to use for similarity calculations. Must be one of the `TinkerIndexType.Vector` enum values (COSINE, EUCLIDEAN, MANHATTAN, INNER_PRODUCT, BRAY_CURTIS, CANBERRA, CORRELATION). |COSINE
+|`growthRate`| The rate at which the index will automatically increase in size once it is full. If set to `0` the index will not grow automatically and will throw `SizeLimitExceededException` when its maximum size is reached. |0.10
+|`m` |The maximum number of connections per node in the HNSW graph. Higher values provide better search quality at the cost of increased memory usage and index build time. |16
+|`efConstruction` |The size of the dynamic candidate list during index construction. Higher values improve index quality at the cost of longer build times. |200
+|`ef` |The size of the dynamic candidate list during search. Higher values improve search accuracy at the cost of slower search times. |10
+|`maxItems` |The maximum number of items expected to be stored in the index. Use in conjuction with `growthRate`. |10000
|=========================================================
Here's an example of creating a vector index with custom configuration options:
[gremlin-groovy]
----
-// create a vector index with custom configuration
-indexConfig = [:]
-indexConfig.put(TinkerVectorIndex.CONFIG_DIMENSION, 128)
-indexConfig.put(TinkerVectorIndex.CONFIG_DISTANCE_TYPE, TinkerIndexType.Vector.COSINE)
-indexConfig.put(TinkerVectorIndex.CONFIG_M, 32)
-indexConfig.put(TinkerVectorIndex.CONFIG_EF_CONSTRUCTION, 300)
-indexConfig.put(TinkerVectorIndex.CONFIG_EF, 20)
-indexConfig.put(TinkerVectorIndex.CONFIG_MAX_ITEMS, 1000)
+graph.getServiceRegistry().registerService(new TinkerVectorSearchFactory(graph))
+indexConfig = [
+ dimension : 128,
+ distance : TinkerIndexType.Vector.COSINE,
+ growthRate : 0.15,
+ m : 32,
+ efConstruction : 300,
+ ef : 20,
+ maxItems : 1000
+]
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
----
+TIP: Constants for all the configuration values can be found in `TinkerVectorIndex`. They are prefixed with "CONFIG_".
+For example, "dimension" can be referenced as `TinkerVectorIndex.CONFIG_DIMENSION`.
+
[[tinkergraph-gremlin-tx]]
=== Transactions
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
index 90317fb70c..becbaad03f 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.tinkergraph.structure;
import com.github.jelmerk.hnswlib.core.Item;
import com.github.jelmerk.hnswlib.core.SearchResult;
import com.github.jelmerk.hnswlib.core.hnsw.HnswIndex;
+import com.github.jelmerk.hnswlib.core.hnsw.SizeLimitExceededException;
import com.github.jelmerk.hnswlib.core.Index;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -44,7 +45,12 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
/**
* Map of property key to vector index
*/
- protected Map<String, Index<Object, float[], ElementItem, Float>> vectorIndices = new ConcurrentHashMap<>();
+ private final Map<String, Index<Object, float[], ElementItem, Float>> vectorIndices = new ConcurrentHashMap<>();
+
+ /**
+ * Map of property key to growth rate
+ */
+ private final Map<String, Double> growthRates = new ConcurrentHashMap<>();
/**
* Default M parameter for HNSW index
@@ -64,7 +70,12 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
/**
* Default maximum number of items in the index
*/
- private static final int DEFAULT_MAX_ITEMS = 100;
+ private static final int DEFAULT_MAX_ITEMS = 10000;
+
+ /**
+ * Default growth rate for the index when it reaches capacity (10%)
+ */
+ private static final double DEFAULT_GROWTH_RATE = 0.1;
/**
* Configuration key for the dimension of the vector
@@ -96,6 +107,11 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
*/
public static final String CONFIG_DISTANCE_FUNCTION = "distanceFunction";
+ /**
+ * Configuration key for the growth rate of the index when it reaches capacity
+ */
+ public static final String CONFIG_GROWTH_RATE = "growthRate";
+
/**
* Creates a new vector index for the specified graph and element class.
*
@@ -178,6 +194,15 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
}
}
+ double growthRate = DEFAULT_GROWTH_RATE;
+ if (configuration.containsKey(CONFIG_GROWTH_RATE)) {
+ final Object growthObj = configuration.get(CONFIG_GROWTH_RATE);
+ if (growthObj instanceof Number) {
+ growthRate = ((Number) growthObj).doubleValue();
+ }
+ }
+ this.growthRates.put(key, growthRate);
+
// Create a new HNSW index for this property key
final Index<Object, float[], ElementItem, Float> index = HnswIndex
.newBuilder(dimension, vector.getDistanceFunction(), Float::compare, maxItems)
@@ -217,7 +242,8 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
final ElementItem item = new ElementItem(element.id(), vector, element);
- index.add(item);
+
+ addWithResize(key, index, item);
}
/**
@@ -291,7 +317,8 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
// If the element is not in the index, just ignore the exception
}
final ElementItem item = new ElementItem(element.id(), newValue, element);
- index.add(item);
+
+ addWithResize(key, index, item);
}
/**
@@ -305,37 +332,11 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
this.vectorIndices.remove(key);
}
- this.indexedKeys.remove(key);
- }
-
- /**
- * A class that wraps an element with its vector for use in the HNSW index.
- */
- private class ElementItem implements Item<Object, float[]>, Serializable {
- private final Object id;
- private final float[] vector;
- private final T element;
-
- public ElementItem(final Object id, final float[] vector, final T element) {
- this.id = id;
- this.vector = vector;
- this.element = element;
- }
-
- @Override
- public Object id() {
- return id;
- }
-
- @Override
- public float[] vector() {
- return vector;
+ if (this.growthRates.containsKey(key)) {
+ this.growthRates.remove(key);
}
- @Override
- public int dimensions() {
- return vector.length;
- }
+ this.indexedKeys.remove(key);
}
// AbstractTinkerIndex implementation methods
@@ -375,4 +376,70 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
updateIndex(key, (float[]) newValue, element);
}
}
+
+ /**
+ * Helper method to add an item to the index with automatic resizing if needed.
+ *
+ * @param key the property key
+ * @param index the vector index
+ * @param item the item to add
+ */
+ private void addWithResize(final String key, final Index<Object, float[], ElementItem, Float> index,
+ final ElementItem item) {
+ try {
+ index.add(item);
+ } catch (SizeLimitExceededException e) {
+ // Get the growth rate for this index
+ final Double growthRate = this.growthRates.getOrDefault(key, 0.0d);
+
+ // If growth rate is 0 or not set, rethrow the exception
+ if (growthRate <= 0) {
+ throw e;
+ }
+
+ // Calculate new size based on growth rate
+ final int currentSize = ((HnswIndex<Object, float[], ElementItem, Float>) index).getMaxItemCount();
+ final int newSize = currentSize + (int) Math.ceil(currentSize * growthRate);
+
+ // Resize the index
+ ((HnswIndex<Object, float[], ElementItem, Float>) index).resize(newSize);
+
+ // Try adding the item again
+ index.add(item);
+ } catch (Exception e) {
+ // If it's not a size limit exception, rethrow it
+ throw e;
+ }
+ }
+
+
+ /**
+ * A class that wraps an element with its vector for use in the HNSW index.
+ */
+ private class ElementItem implements Item<Object, float[]>, Serializable {
+ private final Object id;
+ private final float[] vector;
+ private final T element;
+
+ public ElementItem(final Object id, final float[] vector, final T element) {
+ this.id = id;
+ this.vector = vector;
+ this.element = element;
+ }
+
+ @Override
+ public Object id() {
+ return id;
+ }
+
+ @Override
+ public float[] vector() {
+ return vector;
+ }
+
+ @Override
+ public int dimensions() {
+ return vector.length;
+ }
+ }
}
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
index daa4630766..f84806283b 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
@@ -26,6 +26,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import com.github.jelmerk.hnswlib.core.hnsw.SizeLimitExceededException;
import java.util.Arrays;
import java.util.Collection;
@@ -505,6 +506,88 @@ public class TinkerGraphVectorIndexTest {
assertEquals(0, nearest.size());
}
+ @Test
+ public void shouldGrowIndexWhenCapacityReached() {
+ // Skip this test for TinkerTransactionGraph as it handles transactions differently
+ if (graph instanceof TinkerTransactionGraph) {
+ return;
+ }
+
+ final GraphTraversalSource g = traversal().with(graph);
+
+ // Create a small index with only 5 items capacity and 50% growth rate
+ final Map<String, Object> smallIndexConfig = new HashMap<>(indexConfig);
+ smallIndexConfig.put(TinkerVectorIndex.CONFIG_MAX_ITEMS, 5);
+ smallIndexConfig.put(TinkerVectorIndex.CONFIG_GROWTH_RATE, 0.5); // 50% growth
+
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, smallIndexConfig);
+
+ // Add 5 vertices (fills the index to capacity)
+ for (int i = 0; i < 5; i++) {
+ g.addV("person").property("name", "Person" + i)
+ .property("embedding", new float[]{(float)i, 0.0f, 0.0f}).iterate();
+ }
+ tryCommitChanges(graph);
+
+ // Add one more vertex with a very distinctive vector - this should trigger the index growth
+ g.addV("person").property("name", "PersonExtra")
+ .property("embedding", new float[]{10.0f, 0.0f, 0.0f}).iterate();
+ tryCommitChanges(graph);
+
+ // Verify we can find all 6 vertices
+ final List<TinkerVertex> allVertices = graph.findNearestVerticesOnly("embedding", new float[]{0.0f, 0.0f, 0.0f}, 10);
+ assertEquals(6, allVertices.size());
+
+ // Verify the extra vertex exists in the results
+ boolean foundExtra = false;
+ for (TinkerVertex vertex : allVertices) {
+ if ("PersonExtra".equals(vertex.value("name"))) {
+ foundExtra = true;
+ break;
+ }
+ }
+ assertThat("Should find the extra vertex", foundExtra, is(true));
+ }
+
+ @Test
+ public void shouldThrowExceptionWhenGrowthRateIsZero() {
+ // Skip this test for TinkerTransactionGraph as it handles transactions differently
+ if (graph instanceof TinkerTransactionGraph) {
+ return;
+ }
+
+ final GraphTraversalSource g = traversal().with(graph);
+
+ // Create a small index with only 5 items capacity and 0 growth rate
+ final Map<String, Object> smallIndexConfig = new HashMap<>(indexConfig);
+ smallIndexConfig.put(TinkerVectorIndex.CONFIG_MAX_ITEMS, 5);
+ smallIndexConfig.put(TinkerVectorIndex.CONFIG_GROWTH_RATE, 0.0); // No growth
+
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, smallIndexConfig);
+
+ // Add 5 vertices (fills the index to capacity)
+ for (int i = 0; i < 5; i++) {
+ g.addV("person").property("name", "Person" + i)
+ .property("embedding", new float[]{(float)i, 0.0f, 0.0f}).iterate();
+ }
+ tryCommitChanges(graph);
+
+ try {
+ // Add one more vertex - this should throw SizeLimitExceededException
+ g.addV("person").property("name", "PersonExtra")
+ .property("embedding", new float[]{5.0f, 0.0f, 0.0f}).iterate();
+ tryCommitChanges(graph);
+ fail("Should have thrown SizeLimitExceededException");
+ } catch (Exception e) {
+ // Verify that the exception is caused by SizeLimitExceededException
+ Throwable cause = e;
+ while (cause != null && !(cause instanceof SizeLimitExceededException)) {
+ cause = cause.getCause();
+ }
+ assertNotNull("Expected SizeLimitExceededException", cause);
+ }
+ }
+
private void tryCommitChanges(final Graph graph) {
if (graph.features().graph().supportsTransactions())
graph.tx().commit();
@@ -514,4 +597,4 @@ public class TinkerGraphVectorIndexTest {
if (graph.features().graph().supportsTransactions())
graph.tx().rollback();
}
-}
\ No newline at end of file
+}
(tinkerpop) 01/10: Intro vector search via HNSW
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 36e90a12611ef2d08c9213c3c6d54663e22f7a12
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Wed Apr 30 14:08:02 2025 -0400
Intro vector search via HNSW
---
tinkergraph-gremlin/pom.xml | 5 +
.../tinkergraph/structure/AbstractTinkerGraph.java | 21 +-
.../tinkergraph/structure/AbstractTinkerIndex.java | 16 +-
.../gremlin/tinkergraph/structure/TinkerGraph.java | 109 +++++-
.../gremlin/tinkergraph/structure/TinkerIndex.java | 4 +-
.../tinkergraph/structure/TinkerIndexHelper.java | 63 +++-
.../tinkergraph/structure/TinkerIndexType.java | 66 ++++
.../structure/TinkerTransactionGraph.java | 8 +-
.../structure/TinkerTransactionalIndex.java | 4 +-
.../tinkergraph/structure/TinkerVectorIndex.java | 383 +++++++++++++++++++++
.../structure/TinkerGraphVectorIndexTest.java | 249 ++++++++++++++
11 files changed, 902 insertions(+), 26 deletions(-)
diff --git a/tinkergraph-gremlin/pom.xml b/tinkergraph-gremlin/pom.xml
index 47c5c1c1f3..024fce3a03 100644
--- a/tinkergraph-gremlin/pom.xml
+++ b/tinkergraph-gremlin/pom.xml
@@ -35,6 +35,11 @@ limitations under the License.
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.github.jelmerk</groupId>
+ <artifactId>hnswlib-core</artifactId>
+ <version>1.2.1</version>
+ </dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java
index 34ad59357a..ef2f65af01 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java
@@ -38,6 +38,7 @@ import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerServiceRegistry;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@@ -71,6 +72,8 @@ public abstract class AbstractTinkerGraph implements Graph {
protected TinkerGraphComputerView graphComputerView = null;
protected AbstractTinkerIndex<TinkerVertex> vertexIndex = null;
protected AbstractTinkerIndex<TinkerEdge> edgeIndex = null;
+ protected TinkerVectorIndex<TinkerVertex> vertexVectorIndex = null;
+ protected TinkerVectorIndex<TinkerEdge> edgeVectorIndex = null;
protected IdManager<Vertex> vertexIdManager;
protected IdManager<Edge> edgeIdManager;
@@ -266,6 +269,8 @@ public abstract class AbstractTinkerGraph implements Graph {
this.currentId.set(-1L);
this.vertexIndex = null;
this.edgeIndex = null;
+ this.vertexVectorIndex = null;
+ this.edgeVectorIndex = null;
this.graphComputerView = null;
this.vertexProperties.clear();
}
@@ -396,9 +401,19 @@ public abstract class AbstractTinkerGraph implements Graph {
*/
public <E extends Element> Set<String> getIndexedKeys(final Class<E> elementClass) {
if (Vertex.class.isAssignableFrom(elementClass)) {
- return null == this.vertexIndex ? Collections.emptySet() : this.vertexIndex.getIndexedKeys();
+ Set<String> keys = new HashSet<>();
+ if (this.vertexIndex != null)
+ keys.addAll(this.vertexIndex.getIndexedKeys());
+ if (this.vertexVectorIndex != null)
+ keys.addAll(this.vertexVectorIndex.getIndexedKeys());
+ return keys;
} else if (Edge.class.isAssignableFrom(elementClass)) {
- return null == this.edgeIndex ? Collections.emptySet() : this.edgeIndex.getIndexedKeys();
+ Set<String> keys = new HashSet<>();
+ if (this.edgeIndex != null)
+ keys.addAll(this.edgeIndex.getIndexedKeys());
+ if (this.edgeVectorIndex != null)
+ keys.addAll(this.edgeVectorIndex.getIndexedKeys());
+ return keys;
} else {
throw new IllegalArgumentException("Class is not indexable: " + elementClass);
}
@@ -575,7 +590,7 @@ public abstract class AbstractTinkerGraph implements Graph {
return true;
}
},
-
+
/**
* Manages identifiers of type {@code String}.
*/
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerIndex.java
index 877e926c51..80c50266db 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerIndex.java
@@ -21,8 +21,10 @@ package org.apache.tinkerpop.gremlin.tinkergraph.structure;
import org.apache.tinkerpop.gremlin.structure.Element;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -85,16 +87,24 @@ public abstract class AbstractTinkerIndex<T extends Element> {
public abstract void autoUpdate(final String key, final Object newValue, final Object oldValue, final T element);
/**
- * Create new index
+ * Create new index with no configuration.
* @param key property key
*/
- public abstract void createKeyIndex(final String key);
+ public void createIndex(final String key) {
+ createIndex(key, Collections.emptyMap());
+ }
+
+ /**
+ * Create new index with a specified configuration.
+ * @param key property key
+ */
+ public abstract void createIndex(final String key, final Map<String, Object> configuration);
/**
* Drop index
* @param key property key
*/
- public abstract void dropKeyIndex(final String key);
+ public abstract void dropIndex(final String key);
/**
* Get all index keys for Graph
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
index 28f3120e3b..a54df6a858 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
@@ -35,6 +35,7 @@ import org.apache.tinkerpop.gremlin.tinkergraph.process.traversal.strategy.optim
import org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerServiceRegistry;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -371,11 +372,10 @@ public class TinkerGraph extends AbstractTinkerGraph {
}
-
///////////// GRAPH SPECIFIC INDEXING METHODS ///////////////
/**
- * Create an index for said element class ({@link Vertex} or {@link Edge}) and said property key.
+ * Create a default index for said element class ({@link Vertex} or {@link Edge}) and said property key.
* Whenever an element has the specified key mutated, the index is updated.
* When the index is created, all existing elements are indexed to ensure that they are captured by the index.
*
@@ -384,14 +384,43 @@ public class TinkerGraph extends AbstractTinkerGraph {
* @param <E> The type of the element class
*/
public <E extends Element> void createIndex(final String key, final Class<E> elementClass) {
- if (Vertex.class.isAssignableFrom(elementClass)) {
- if (null == this.vertexIndex) this.vertexIndex = new TinkerIndex<>(this, TinkerVertex.class);
- this.vertexIndex.createKeyIndex(key);
- } else if (Edge.class.isAssignableFrom(elementClass)) {
- if (null == this.edgeIndex) this.edgeIndex = new TinkerIndex<>(this, TinkerEdge.class);
- this.edgeIndex.createKeyIndex(key);
+ createIndex(TinkerIndexType.DEFAULT, key, elementClass, Collections.emptyMap());
+ }
+
+ /**
+ * Create an index for said element class ({@link Vertex} or {@link Edge}) and said property key with the given
+ * configuration options. Whenever an element has the specified key mutated, the index is updated. When the index
+ * is created, all existing elements are indexed to ensure that they are captured by the index.
+ *
+ * @param indexType the type of the index
+ * @param key the property key to index
+ * @param elementClass the element class to index
+ * @param configuration the configuration options
+ * @param <E> The type of the element class
+ */
+ public <E extends Element> void createIndex(final TinkerIndexType indexType, final String key,
+ final Class<E> elementClass, final Map<String, Object> configuration) {
+ if (TinkerIndexType.VECTOR == indexType) {
+ if (Vertex.class.isAssignableFrom(elementClass)) {
+ if (null == this.vertexVectorIndex) this.vertexVectorIndex = new TinkerVectorIndex<>(this, TinkerVertex.class);
+ this.vertexVectorIndex.createIndex(key, configuration);
+ } else if (Edge.class.isAssignableFrom(elementClass)) {
+ if (null == this.edgeVectorIndex) this.edgeVectorIndex = new TinkerVectorIndex<>(this, TinkerEdge.class);
+ this.edgeVectorIndex.createIndex(key, configuration);
+ } else {
+ throw new IllegalArgumentException("Class is not indexable: " + elementClass);
+ }
} else {
- throw new IllegalArgumentException("Class is not indexable: " + elementClass);
+ // Create a standard index
+ if (Vertex.class.isAssignableFrom(elementClass)) {
+ if (null == this.vertexIndex) this.vertexIndex = new TinkerIndex<>(this, TinkerVertex.class);
+ this.vertexIndex.createIndex(key);
+ } else if (Edge.class.isAssignableFrom(elementClass)) {
+ if (null == this.edgeIndex) this.edgeIndex = new TinkerIndex<>(this, TinkerEdge.class);
+ this.edgeIndex.createIndex(key);
+ } else {
+ throw new IllegalArgumentException("Class is not indexable: " + elementClass);
+ }
}
}
@@ -404,11 +433,69 @@ public class TinkerGraph extends AbstractTinkerGraph {
*/
public <E extends Element> void dropIndex(final String key, final Class<E> elementClass) {
if (Vertex.class.isAssignableFrom(elementClass)) {
- if (null != this.vertexIndex) this.vertexIndex.dropKeyIndex(key);
+ if (null != this.vertexIndex) this.vertexIndex.dropIndex(key);
+ if (null != this.vertexVectorIndex) this.vertexVectorIndex.dropIndex(key);
} else if (Edge.class.isAssignableFrom(elementClass)) {
- if (null != this.edgeIndex) this.edgeIndex.dropKeyIndex(key);
+ if (null != this.edgeIndex) this.edgeIndex.dropIndex(key);
+ if (null != this.edgeVectorIndex) this.edgeVectorIndex.dropIndex(key);
} else {
throw new IllegalArgumentException("Class is not indexable: " + elementClass);
}
}
+
+ /**
+ * Find the nearest vertices to the given vector in the vector index for the specified property key.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of vertices sorted by distance
+ */
+ public List<Vertex> findNearestVertices(final String key, final float[] vector, final int k) {
+ if (null == this.vertexVectorIndex)
+ return Collections.emptyList();
+ return new ArrayList<>(this.vertexVectorIndex.findNearest(key, vector, k));
+ }
+
+ /**
+ * Find the nearest vertices to the given vector in the vector index for the specified property key.
+ * Uses the default number of nearest neighbors.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of vertices sorted by distance
+ */
+ public List<Vertex> findNearestVertices(final String key, final float[] vector) {
+ if (null == this.vertexVectorIndex)
+ return Collections.emptyList();
+ return new ArrayList<>(this.vertexVectorIndex.findNearest(key, vector));
+ }
+
+ /**
+ * Find the nearest edges to the given vector in the vector index for the specified property key.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of edges sorted by distance
+ */
+ public List<Edge> findNearestEdges(final String key, final float[] vector, final int k) {
+ if (null == this.edgeVectorIndex)
+ return Collections.emptyList();
+ return new ArrayList<>(this.edgeVectorIndex.findNearest(key, vector, k));
+ }
+
+ /**
+ * Find the nearest edges to the given vector in the vector index for the specified property key.
+ * Uses the default number of nearest neighbors.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of edges sorted by distance
+ */
+ public List<Edge> findNearestEdges(final String key, final float[] vector) {
+ if (null == this.edgeVectorIndex)
+ return Collections.emptyList();
+ return new ArrayList<>(this.edgeVectorIndex.findNearest(key, vector));
+ }
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndex.java
index 366bc71b4e..8b4ef39fb1 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndex.java
@@ -118,7 +118,7 @@ final class TinkerIndex<T extends Element> extends AbstractTinkerIndex<T> {
}
@Override
- public void createKeyIndex(final String key) {
+ public void createIndex(final String key, final Map<String,Object> configuration) {
if (null == key)
throw Graph.Exceptions.argumentCanNotBeNull("key");
if (key.isEmpty())
@@ -138,7 +138,7 @@ final class TinkerIndex<T extends Element> extends AbstractTinkerIndex<T> {
}
@Override
- public void dropKeyIndex(final String key) {
+ public void dropIndex(final String key) {
if (this.index.containsKey(key))
this.index.remove(key).clear();
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexHelper.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexHelper.java
index b4a9e7e79c..7c37b59757 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexHelper.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexHelper.java
@@ -23,7 +23,56 @@ import java.util.List;
public final class TinkerIndexHelper {
- private TinkerIndexHelper() {
+ private TinkerIndexHelper() {}
+
+ /**
+ * Find nearest neighbors in the vertex vector index.
+ *
+ * @param graph the graph
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of vertices sorted by distance
+ */
+ public static List<TinkerVertex> findNearestVertices(final AbstractTinkerGraph graph, final String key, final float[] vector, final int k) {
+ return null == graph.vertexVectorIndex ? Collections.emptyList() : graph.vertexVectorIndex.findNearest(key, vector, k);
+ }
+
+ /**
+ * Find nearest neighbors in the vertex vector index with default k.
+ *
+ * @param graph the graph
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of vertices sorted by distance
+ */
+ public static List<TinkerVertex> findNearestVertices(final AbstractTinkerGraph graph, final String key, final float[] vector) {
+ return null == graph.vertexVectorIndex ? Collections.emptyList() : graph.vertexVectorIndex.findNearest(key, vector);
+ }
+
+ /**
+ * Find nearest neighbors in the edge vector index.
+ *
+ * @param graph the graph
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of edges sorted by distance
+ */
+ public static List<TinkerEdge> findNearestEdges(final AbstractTinkerGraph graph, final String key, final float[] vector, final int k) {
+ return null == graph.edgeVectorIndex ? Collections.emptyList() : graph.edgeVectorIndex.findNearest(key, vector, k);
+ }
+
+ /**
+ * Find nearest neighbors in the edge vector index with default k.
+ *
+ * @param graph the graph
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of edges sorted by distance
+ */
+ public static List<TinkerEdge> findNearestEdges(final AbstractTinkerGraph graph, final String key, final float[] vector) {
+ return null == graph.edgeVectorIndex ? Collections.emptyList() : graph.edgeVectorIndex.findNearest(key, vector);
}
public static List<TinkerVertex> queryVertexIndex(final AbstractTinkerGraph graph, final String key, final Object value) {
@@ -38,35 +87,47 @@ public final class TinkerIndexHelper {
final AbstractTinkerGraph graph = (AbstractTinkerGraph) edge.graph();
if (graph.edgeIndex != null)
graph.edgeIndex.autoUpdate(key, newValue, oldValue, edge);
+ if (graph.edgeVectorIndex != null && newValue instanceof float[])
+ graph.edgeVectorIndex.autoUpdate(key, newValue, oldValue, edge);
}
public static void autoUpdateIndex(final TinkerVertex vertex, final String key, final Object newValue, final Object oldValue) {
final AbstractTinkerGraph graph = (AbstractTinkerGraph) vertex.graph();
if (graph.vertexIndex != null)
graph.vertexIndex.autoUpdate(key, newValue, oldValue, vertex);
+ if (graph.vertexVectorIndex != null && newValue instanceof float[])
+ graph.vertexVectorIndex.autoUpdate(key, newValue, oldValue, vertex);
}
public static void removeElementIndex(final TinkerVertex vertex) {
final AbstractTinkerGraph graph = (AbstractTinkerGraph) vertex.graph();
if (graph.vertexIndex != null)
graph.vertexIndex.removeElement(vertex);
+ if (graph.vertexVectorIndex != null)
+ graph.vertexVectorIndex.removeElement(vertex);
}
public static void removeElementIndex(final TinkerEdge edge) {
final AbstractTinkerGraph graph = (AbstractTinkerGraph) edge.graph();
if (graph.edgeIndex != null)
graph.edgeIndex.removeElement(edge);
+ if (graph.edgeVectorIndex != null)
+ graph.edgeVectorIndex.removeElement(edge);
}
public static void removeIndex(final TinkerVertex vertex, final String key, final Object value) {
final AbstractTinkerGraph graph = (AbstractTinkerGraph) vertex.graph();
if (graph.vertexIndex != null)
graph.vertexIndex.remove(key, value, vertex);
+ if (graph.vertexVectorIndex != null && value instanceof float[])
+ graph.vertexVectorIndex.remove(key, value, vertex);
}
public static void removeIndex(final TinkerEdge edge, final String key, final Object value) {
final AbstractTinkerGraph graph = (AbstractTinkerGraph) edge.graph();
if (graph.edgeIndex != null)
graph.edgeIndex.remove(key, value, edge);
+ if (graph.edgeVectorIndex != null && value instanceof float[])
+ graph.edgeVectorIndex.remove(key, value, edge);
}
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexType.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexType.java
new file mode 100644
index 0000000000..84004345e2
--- /dev/null
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexType.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+
+import com.github.jelmerk.hnswlib.core.DistanceFunction;
+import com.github.jelmerk.hnswlib.core.DistanceFunctions;
+
+/**
+ * Enum for the different types of indices supported by TinkerGraph
+ */
+public enum TinkerIndexType {
+ /**
+ * Standard key-based index
+ */
+ DEFAULT,
+
+ /**
+ * Vector index for similarity search
+ */
+ VECTOR;
+
+ /**
+ * Distance functions for vector index.
+ */
+ public enum Vector implements VectorDistance<float[], Float> {
+
+ COSINE(DistanceFunctions.FLOAT_COSINE_DISTANCE),
+ EUCLIDEAN(DistanceFunctions.FLOAT_EUCLIDEAN_DISTANCE),
+ MANHATTAN(DistanceFunctions.FLOAT_MANHATTAN_DISTANCE),
+ INNER_PRODUCT(DistanceFunctions.FLOAT_INNER_PRODUCT),
+ BRAY_CURTIS(DistanceFunctions.FLOAT_BRAY_CURTIS_DISTANCE),
+ CANBERRA(DistanceFunctions.FLOAT_CANBERRA_DISTANCE),
+ CORRELATION(DistanceFunctions.FLOAT_CORRELATION_DISTANCE);
+
+ private final DistanceFunction<float[], Float> distanceFunction;
+
+ Vector(final DistanceFunction<float[], Float> distanceFunction) {
+ this.distanceFunction = distanceFunction;
+ }
+
+ @Override
+ public DistanceFunction<float[], Float> getDistanceFunction() {
+ return distanceFunction;
+ }
+ }
+
+ interface VectorDistance<V, T> {
+ DistanceFunction<V, T> getDistanceFunction();
+ }
+}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java
index 3e6931a1d8..f4cd761a2c 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionGraph.java
@@ -476,10 +476,10 @@ public final class TinkerTransactionGraph extends AbstractTinkerGraph {
public <E extends Element> void createIndex(final String key, final Class<E> elementClass) {
if (Vertex.class.isAssignableFrom(elementClass)) {
if (null == this.vertexIndex) this.vertexIndex = new TinkerTransactionalIndex<>(this, TinkerVertex.class);
- this.vertexIndex.createKeyIndex(key);
+ this.vertexIndex.createIndex(key);
} else if (Edge.class.isAssignableFrom(elementClass)) {
if (null == this.edgeIndex) this.edgeIndex = new TinkerTransactionalIndex<>(this, TinkerEdge.class);
- this.edgeIndex.createKeyIndex(key);
+ this.edgeIndex.createIndex(key);
} else {
throw new IllegalArgumentException("Class is not indexable: " + elementClass);
}
@@ -494,9 +494,9 @@ public final class TinkerTransactionGraph extends AbstractTinkerGraph {
*/
public <E extends Element> void dropIndex(final String key, final Class<E> elementClass) {
if (Vertex.class.isAssignableFrom(elementClass)) {
- if (null != this.vertexIndex) this.vertexIndex.dropKeyIndex(key);
+ if (null != this.vertexIndex) this.vertexIndex.dropIndex(key);
} else if (Edge.class.isAssignableFrom(elementClass)) {
- if (null != this.edgeIndex) this.edgeIndex.dropKeyIndex(key);
+ if (null != this.edgeIndex) this.edgeIndex.dropIndex(key);
} else {
throw new IllegalArgumentException("Class is not indexable: " + elementClass);
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionalIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionalIndex.java
index d23dcb591a..0edfdaaaa3 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionalIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionalIndex.java
@@ -171,7 +171,7 @@ final class TinkerTransactionalIndex<T extends TinkerElement> extends AbstractTi
}
@Override
- public void createKeyIndex(final String key) {
+ public void createIndex(final String key, final Map<String,Object> configuration) {
if (null == key)
throw Graph.Exceptions.argumentCanNotBeNull("key");
if (key.isEmpty())
@@ -192,7 +192,7 @@ final class TinkerTransactionalIndex<T extends TinkerElement> extends AbstractTi
}
@Override
- public void dropKeyIndex(final String key) {
+ public void dropIndex(final String key) {
if (index.containsKey(key))
index.remove(key).clear();
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
new file mode 100644
index 0000000000..a31c4148cd
--- /dev/null
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
@@ -0,0 +1,383 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+
+import com.github.jelmerk.hnswlib.core.DistanceFunction;
+import com.github.jelmerk.hnswlib.core.DistanceFunctions;
+import com.github.jelmerk.hnswlib.core.Item;
+import com.github.jelmerk.hnswlib.core.SearchResult;
+import com.github.jelmerk.hnswlib.core.hnsw.HnswIndex;
+import com.github.jelmerk.hnswlib.core.Index;
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+/**
+ * A vector index implementation for TinkerGraph using hnswlib.
+ *
+ * @param <T> the element type (Vertex or Edge)
+ */
+final class TinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T> {
+
+ /**
+ * Map of property key to vector index
+ */
+ protected Map<String, Index<Object, float[], ElementItem, Float>> vectorIndices = new ConcurrentHashMap<>();
+
+ /**
+ * Default number of nearest neighbors to return
+ */
+ private static final int DEFAULT_K = 10;
+
+ /**
+ * Default M parameter for HNSW index
+ */
+ private static final int DEFAULT_M = 16;
+
+ /**
+ * Default ef construction parameter for HNSW index
+ */
+ private static final int DEFAULT_EF_CONSTRUCTION = 200;
+
+ /**
+ * Default ef parameter for HNSW index
+ */
+ private static final int DEFAULT_EF = 10;
+
+ /**
+ * Default maximum number of items in the index
+ */
+ private static final int DEFAULT_MAX_ITEMS = 100;
+
+ /**
+ * Configuration key for the dimension of the vector
+ */
+ public static final String CONFIG_DIMENSION = "dimension";
+
+ /**
+ * Configuration key for the M parameter of the HNSW index
+ */
+ public static final String CONFIG_M = "m";
+
+ /**
+ * Configuration key for the ef construction parameter of the HNSW index
+ */
+ public static final String CONFIG_EF_CONSTRUCTION = "efConstruction";
+
+ /**
+ * Configuration key for the ef parameter of the HNSW index
+ */
+ public static final String CONFIG_EF = "ef";
+
+ /**
+ * Configuration key for the maximum number of items in the index
+ */
+ public static final String CONFIG_MAX_ITEMS = "maxItems";
+
+ /**
+ * Configuration key for the distance function of the HNSW index
+ */
+ public static final String CONFIG_DISTANCE_FUNCTION = "distanceFunction";
+
+ /**
+ * Configuration key for the default number of nearest neighbors to return
+ */
+ public static final String CONFIG_DEFAULT_K = "defaultK";
+
+ /**
+ * Creates a new vector index for the specified graph and element class.
+ *
+ * @param graph the graph
+ * @param indexClass the element class
+ */
+ public TinkerVectorIndex(final TinkerGraph graph, final Class<T> indexClass) {
+ super(graph, indexClass);
+ }
+
+ /**
+ * Creates a vector index for the specified property key with the given configuration options.
+ *
+ * @param key the property key
+ * @param configuration the configuration options
+ */
+ @Override
+ public void createIndex(final String key, final Map<String, Object> configuration) {
+ if (null == key)
+ throw Graph.Exceptions.argumentCanNotBeNull("key");
+ if (key.isEmpty())
+ throw new IllegalArgumentException("The key for the index cannot be an empty string");
+
+ // Get dimension from configuration or throw exception if not provided
+ if (!configuration.containsKey(CONFIG_DIMENSION))
+ throw new IllegalArgumentException("The dimension must be provided in the configuration");
+
+ final int dimension;
+ final Object dimObj = configuration.get(CONFIG_DIMENSION);
+ if (dimObj instanceof Number) {
+ dimension = ((Number) dimObj).intValue();
+ } else {
+ throw new IllegalArgumentException("The dimension must be a number");
+ }
+
+ if (dimension <= 0)
+ throw new IllegalArgumentException("The dimension must be greater than 0");
+
+ if (this.indexedKeys.contains(key))
+ return;
+ this.indexedKeys.add(key);
+
+ int m = DEFAULT_M;
+ if (configuration.containsKey(CONFIG_M)) {
+ final Object mObj = configuration.get(CONFIG_M);
+ if (mObj instanceof Number) {
+ m = ((Number) mObj).intValue();
+ }
+ }
+
+ int efConstruction = DEFAULT_EF_CONSTRUCTION;
+ if (configuration.containsKey(CONFIG_EF_CONSTRUCTION)) {
+ final Object efObj = configuration.get(CONFIG_EF_CONSTRUCTION);
+ if (efObj instanceof Number) {
+ efConstruction = ((Number) efObj).intValue();
+ }
+ }
+
+ int ef = DEFAULT_EF;
+ if (configuration.containsKey(CONFIG_EF)) {
+ final Object efObj = configuration.get(CONFIG_EF);
+ if (efObj instanceof Number) {
+ ef = ((Number) efObj).intValue();
+ }
+ }
+
+ int maxItems = DEFAULT_MAX_ITEMS;
+ if (configuration.containsKey(CONFIG_MAX_ITEMS)) {
+ final Object maxObj = configuration.get(CONFIG_MAX_ITEMS);
+ if (maxObj instanceof Number) {
+ maxItems = ((Number) maxObj).intValue();
+ }
+ }
+
+ TinkerIndexType.Vector vector = TinkerIndexType.Vector.COSINE;
+ if (configuration.containsKey(CONFIG_DISTANCE_FUNCTION)) {
+ final Object vec = configuration.get(CONFIG_DISTANCE_FUNCTION);
+ if (vec instanceof TinkerIndexType.Vector) {
+ vector = ((TinkerIndexType.Vector) vec);
+ }
+ }
+
+ // Create a new HNSW index for this property key
+ final Index<Object, float[], ElementItem, Float> index = HnswIndex
+ .newBuilder(dimension, vector.getDistanceFunction(), Float::compare, maxItems)
+ .withM(m)
+ .withEfConstruction(efConstruction)
+ .withEf(ef)
+ .withRemoveEnabled()
+ .build();
+
+ this.vectorIndices.put(key, index);
+
+ // Index existing elements
+ (Vertex.class.isAssignableFrom(this.indexClass) ?
+ ((TinkerGraph) this.graph).vertices.values().parallelStream() :
+ ((TinkerGraph) this.graph).edges.values().parallelStream())
+ .map(e -> new Object[]{((T) e).property(key), e})
+ .filter(a -> ((Property) a[0]).isPresent())
+ .forEach(a -> {
+ // values for the key that don't match the dimensions of the index won't be added
+ final Object value = ((Property) a[0]).value();
+ if (value instanceof float[] && ((float[]) value).length == dimension) {
+ this.addToIndex(key, (float[]) value, (T) a[1]);
+ }
+ });
+ }
+
+ /**
+ * Adds an element with a vector to the index.
+ *
+ * @param key the property key
+ * @param vector the vector
+ * @param element the element
+ */
+ public void addToIndex(final String key, final float[] vector, final T element) {
+ if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
+ return;
+
+ final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
+ final ElementItem item = new ElementItem(element.id(), vector, element);
+ index.add(item);
+ }
+
+ /**
+ * Searches for nearest neighbors in the vector index.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of elements sorted by distance
+ */
+ public List<T> findNearest(final String key, final float[] vector, final int k) {
+ if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
+ return Collections.emptyList();
+
+ final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
+ final List<SearchResult<ElementItem, Float>> nearest = index.findNearest(vector, k);
+ return nearest.stream().map(sr -> sr.item().element).collect(Collectors.toList());
+ }
+
+ /**
+ * Searches for nearest neighbors in the vector index with the default k.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of elements sorted by distance
+ */
+ public List<T> findNearest(final String key, final float[] vector) {
+ return findNearest(key, vector, DEFAULT_K);
+ }
+
+ /**
+ * Removes an element from the vector index.
+ *
+ * @param key the property key
+ * @param element the element
+ */
+ public void removeFromIndex(final String key, final T element) {
+ if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
+ return;
+
+ final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
+ try {
+ index.remove(element.id(), 0);
+ } catch (Exception e) {
+ // If the element is not in the index, just ignore the exception
+ }
+ }
+
+ /**
+ * Updates the vector index when an element's property changes.
+ *
+ * @param key the property key
+ * @param newValue the new vector value
+ * @param element the element
+ */
+ public void updateIndex(final String key, final float[] newValue, final T element) {
+ if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
+ return;
+
+ final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
+ try {
+ index.remove(element.id(), 0);
+ } catch (Exception e) {
+ // If the element is not in the index, just ignore the exception
+ }
+ final ElementItem item = new ElementItem(element.id(), newValue, element);
+ index.add(item);
+ }
+
+ /**
+ * Drops the vector index for the specified property key.
+ *
+ * @param key the property key
+ */
+ @Override
+ public void dropIndex(final String key) {
+ if (this.vectorIndices.containsKey(key)) {
+ this.vectorIndices.remove(key);
+ }
+
+ this.indexedKeys.remove(key);
+ }
+
+ /**
+ * A class that wraps an element with its vector for use in the HNSW index.
+ */
+ private class ElementItem implements Item<Object, float[]>, Serializable {
+ private final Object id;
+ private final float[] vector;
+ private final T element;
+
+ public ElementItem(final Object id, final float[] vector, final T element) {
+ this.id = id;
+ this.vector = vector;
+ this.element = element;
+ }
+
+ @Override
+ public Object id() {
+ return id;
+ }
+
+ @Override
+ public float[] vector() {
+ return vector;
+ }
+
+ @Override
+ public int dimensions() {
+ return vector.length;
+ }
+ }
+
+ // AbstractTinkerIndex implementation methods
+
+ @Override
+ public List<T> get(final String key, final Object value) {
+ // This method is for regular indices, not vector indices
+ return Collections.emptyList();
+ }
+
+ @Override
+ public long count(final String key, final Object value) {
+ // This method is for regular indices, not vector indices
+ return 0;
+ }
+
+ @Override
+ public void remove(final String key, final Object value, final T element) {
+ // For vector indices, we use removeFromIndex
+ if (value instanceof float[]) {
+ removeFromIndex(key, element);
+ }
+ }
+
+ @Override
+ public void removeElement(final T element) {
+ if (this.indexClass.isAssignableFrom(element.getClass())) {
+ for (String key : this.indexedKeys) {
+ removeFromIndex(key, element);
+ }
+ }
+ }
+
+ @Override
+ public void autoUpdate(final String key, final Object newValue, final Object oldValue, final T element) {
+ if (this.indexedKeys.contains(key) && newValue instanceof float[]) {
+ updateIndex(key, (float[]) newValue, element);
+ }
+ }
+}
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
new file mode 100644
index 0000000000..6b8267be55
--- /dev/null
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
@@ -0,0 +1,249 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Tests for TinkerGraph vector index functionality.
+ */
+public class TinkerGraphVectorIndexTest {
+
+ private static final Map<String,Object> indexConfig = new HashMap<String,Object>() {{
+ put(TinkerVectorIndex.CONFIG_DIMENSION, 3);
+ }};
+
+ @Test
+ public void shouldCreateEdgeVectorIndex() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
+ assertThat(graph.getIndexedKeys(Edge.class), hasItem("embedding"));
+ }
+
+ @Test
+ public void shouldCreateVectorIndex() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
+ assertThat(graph.getIndexedKeys(Vertex.class), hasItem("embedding"));
+ }
+
+ @Test
+ public void shouldFindNearestVertices() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate();
+ g.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
+
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
+
+ final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(2, nearest.size());
+ assertEquals("Alice", nearest.get(0).value("name"));
+ assertEquals("Dave", nearest.get(1).value("name"));
+ }
+
+ @Test
+ public void shouldUpdateVectorIndex() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
+
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
+
+ // Update a vertex property
+ g.V().has("name", "Bob").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
+
+ final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(2, nearest.size());
+ assertEquals("Alice", nearest.get(0).value("name"));
+ assertEquals("Bob", nearest.get(1).value("name"));
+ }
+
+ @Test
+ public void shouldRemoveFromVectorIndex() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate();
+
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
+
+ // Remove a vertex
+ g.V().has("name", "Bob").drop().iterate();
+
+ final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{0.0f, 1.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(2, nearest.size());
+ assertThat(nearest.stream().noneMatch(v -> v.value("name").equals("Bob")), is(true));
+ }
+
+ @Test
+ public void shouldDropVectorIndex() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
+
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
+ assertThat(graph.getIndexedKeys(Vertex.class), hasItem("embedding"));
+
+ // Drop index
+ graph.dropIndex("embedding", Vertex.class);
+ assertThat(graph.getIndexedKeys(Vertex.class), not(hasItem("embedding")));
+
+ // Search for nearest neighbors should return empty list
+ final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(0, nearest.size());
+ }
+
+ @Test
+ public void shouldFindNearestEdges() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final Vertex alice = g.addV("person").property("name", "Alice").next();
+ final Vertex bob = g.addV("person").property("name", "Bob").next();
+ final Vertex charlie = g.addV("person").property("name", "Charlie").next();
+ final Vertex dave = g.addV("person").property("name", "Dave").next();
+ g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).property("strength", 0.8f).iterate();
+ g.addE("knows").from(bob).to(charlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 0.6f).iterate();
+ g.addE("knows").from(charlie).to(dave).property("embedding", new float[]{0.0f, 0.0f, 1.0f}).property("strength", 0.7f).iterate();
+ g.addE("knows").from(alice).to(dave).property("embedding", new float[]{0.9f, 0.1f, 0.0f}).property("strength", 0.9f).iterate();
+
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
+
+ final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(2, nearest.size());
+ assertEquals(0.8f, (float) nearest.get(0).value("strength"), 0.0001f);
+ assertEquals(0.9f, (float) nearest.get(1).value("strength"), 0.0001f);
+ }
+
+ @Test
+ public void shouldUpdateEdgeVectorIndex() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final Vertex alice = g.addV("person").property("name", "Alice").next();
+ final Vertex bob = g.addV("person").property("name", "Bob").next();
+ g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).property("strength", 0.8f).iterate();
+ final Edge edge = g.addE("knows").from(bob).to(alice).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 0.6f).next();
+
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
+
+ // Update an edge property
+ g.E(edge.id()).property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
+
+ final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(2, nearest.size());
+ assertEquals(0.8f, (float) nearest.get(0).value("strength"), 0.0001f);
+ assertEquals(0.6f, (float) nearest.get(1).value("strength"), 0.0001f);
+ }
+
+ @Test
+ public void shouldRemoveEdgeFromVectorIndex() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final Vertex alice = g.addV("person").property("name", "Alice").next();
+ final Vertex bob = g.addV("person").property("name", "Bob").next();
+ final Vertex charlie = g.addV("person").property("name", "Charlie").next();
+ g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).property("strength", 0.8f).iterate();
+ final Edge edge = g.addE("knows").from(bob).to(charlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 0.6f).next();
+ g.addE("knows").from(charlie).to(alice).property("embedding", new float[]{0.0f, 0.0f, 1.0f}).property("strength", 0.7f).iterate();
+
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+
+ // Remove an edge
+ g.E(edge.id()).drop().iterate();
+
+ final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{0.0f, 1.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(2, nearest.size());
+ assertThat(nearest.stream().noneMatch(e -> e.value("strength").equals(0.6f)), is(true));
+ }
+
+ @Test
+ public void shouldDropEdgeVectorIndex() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+ final Vertex alice = g.addV("person").property("name", "Alice").next();
+ final Vertex bob = g.addV("person").property("name", "Bob").next();
+ g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).property("strength", 0.8f).iterate();
+ g.addE("knows").from(bob).to(alice).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 0.6f).iterate();
+
+ graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
+ assertThat(graph.getIndexedKeys(Edge.class), hasItem("embedding"));
+
+ // Drop index
+ graph.dropIndex("embedding", Edge.class);
+ assertThat(graph.getIndexedKeys(Edge.class), not(hasItem("embedding")));
+
+ // Search for nearest neighbors should return empty list
+ final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(0, nearest.size());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowExceptionWhenVectorDimensionExceedsConfigured() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+
+ // Create a vector index with dimension 3
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+
+ // Try to add a vertex with a vector of dimension 4 (exceeds configured dimension 3)
+ g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f, 0.0f}).iterate();
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowExceptionWhenVectorDimensionIsSmallerThanConfigured() {
+ final TinkerGraph graph = TinkerGraph.open();
+ final GraphTraversalSource g = traversal().withEmbedded(graph);
+
+ // Create a vector index with dimension 3
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+
+ // Try to add a vertex with a vector of dimension 2 (smaller than configured dimension 3)
+ g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f}).iterate();
+ }
+}
(tinkerpop) 03/10: return distances with element
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 00fb9a57e5fc5920efa9cde0fc15ad74e111d354
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Fri May 2 16:13:47 2025 -0400
return distances with element
---
.../services/TinkerTextSearchFactory.java | 2 +-
.../services/TinkerVectorSearchFactory.java | 110 +++++++++++
.../tinkergraph/structure/AbstractTinkerGraph.java | 71 ++++++-
.../structure/AbstractTinkerVectorIndex.java | 31 ++-
.../gremlin/tinkergraph/structure/TinkerGraph.java | 1 +
.../tinkergraph/structure/TinkerIndexElement.java | 47 +++++
.../tinkergraph/structure/TinkerIndexHelper.java | 8 +-
.../structure/TinkerTransactionVectorIndex.java | 17 +-
.../tinkergraph/structure/TinkerVectorIndex.java | 22 ++-
.../structure/TinkerGraphVectorIndexTest.java | 208 +++++++++++++++++++--
10 files changed, 471 insertions(+), 46 deletions(-)
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerTextSearchFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerTextSearchFactory.java
index b9675856e6..cdb1582493 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerTextSearchFactory.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerTextSearchFactory.java
@@ -41,7 +41,7 @@ import static org.apache.tinkerpop.gremlin.util.CollectionUtil.asMap;
*/
public class TinkerTextSearchFactory<I, R> extends TinkerServiceRegistry.TinkerServiceFactory<I, R> implements Service<I, R> {
- public static final String NAME = "tinker.search";
+ public static final String NAME = "tinker.search.text";
public interface Params {
/**
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
new file mode 100644
index 0000000000..fb0b3c76f4
--- /dev/null
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/services/TinkerVectorSearchFactory.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.services;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.service.Service;
+import org.apache.tinkerpop.gremlin.structure.util.CloseableIterator;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.AbstractTinkerGraph;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerHelper;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIndexElement;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.LongStream;
+
+import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.KEY;
+import static org.apache.tinkerpop.gremlin.tinkergraph.services.TinkerVectorSearchFactory.Params.TOP_K;
+import static org.apache.tinkerpop.gremlin.util.CollectionUtil.asMap;
+
+/**
+ *
+ */
+public class TinkerVectorSearchFactory extends TinkerServiceRegistry.TinkerServiceFactory<Element, Map<String, Object>> implements Service<Element, Map<String, Object>> {
+
+ public static final String NAME = "tinker.search.vector.topKByVertex";
+
+ public interface Params {
+ /**
+ * Specify the key storing the embedding
+ */
+ String KEY = "key";
+ /**
+ * Number of results to return
+ */
+ String TOP_K = "topK";
+
+ Map DESCRIBE = asMap(
+ KEY, "Specify they key storing the embedding for the vector search",
+ TOP_K, "Number of results to return (optional, defaults to 10)"
+ );
+ }
+
+ public TinkerVectorSearchFactory(final AbstractTinkerGraph graph) {
+ super(graph, NAME);
+ }
+
+ @Override
+ public Type getType() {
+ return Type.Streaming;
+ }
+
+ @Override
+ public Map describeParams() {
+ return Params.DESCRIBE;
+ }
+
+ @Override
+ public Set<Type> getSupportedTypes() {
+ return Collections.singleton(Type.Streaming);
+ }
+
+ @Override
+ public Service<Element, Map<String, Object>> createService(final boolean isStart, final Map params) {
+ if (isStart) {
+ throw new UnsupportedOperationException(Exceptions.cannotStartTraversal);
+ }
+ return this;
+ }
+
+ @Override
+ public CloseableIterator<Map<String,Object>> execute(final ServiceCallContext ctx, final Traverser.Admin<Element> in, final Map params) {
+ final String key = (String) params.get(KEY);
+ final int k = (int) params.getOrDefault(TOP_K, 10);
+ final Element e = in.get();
+ final float[] embedding = e.value(key);
+ return CloseableIterator.of(graph.findNearestVertices(key, embedding, k).stream().map(TinkerIndexElement::toMap).iterator());
+ }
+
+ @Override
+ public void close() {}
+
+}
+
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java
index 5ace0fd93a..0989e172d3 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerGraph.java
@@ -45,7 +45,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Stream;
@@ -304,10 +303,37 @@ public abstract class AbstractTinkerGraph implements Graph {
* @param k the number of nearest neighbors to return
* @return a list of vertices sorted by distance
*/
- public List<Vertex> findNearestVertices(final String key, final float[] vector, final int k) {
+ public List<TinkerIndexElement<TinkerVertex>> findNearestVertices(final String key, final float[] vector, final int k) {
if (null == this.vertexVectorIndex)
throw new IllegalStateException("Vector index not created for vertices on key: '" + key + "'");
- return new ArrayList<>(this.vertexVectorIndex.findNearest(key, vector, k));
+ return this.vertexVectorIndex.findNearest(key, vector, k);
+ }
+
+ /**
+ * Find the nearest vertices to the given vector in the vector index for the specified property key.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of vertices sorted by distance
+ */
+ public List<TinkerIndexElement<TinkerVertex>> findNearestVertices(final String key, final float[] vector) {
+ if (null == this.vertexVectorIndex)
+ throw new IllegalStateException("Vector index not created for vertices on key: '" + key + "'");
+ return this.vertexVectorIndex.findNearest(key, vector);
+ }
+
+ /**
+ * Find the nearest vertices to the given vector in the vector index for the specified property key.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of vertices sorted by distance
+ */
+ public List<TinkerVertex> findNearestVerticesOnly(final String key, final float[] vector, final int k) {
+ if (null == this.vertexVectorIndex)
+ throw new IllegalStateException("Vector index not created for vertices on key: '" + key + "'");
+ return this.vertexVectorIndex.findNearestElements(key, vector, k);
}
/**
@@ -318,10 +344,37 @@ public abstract class AbstractTinkerGraph implements Graph {
* @param vector the query vector
* @return a list of vertices sorted by distance
*/
- public List<Vertex> findNearestVertices(final String key, final float[] vector) {
+ public List<TinkerVertex> findNearestVerticesOnly(final String key, final float[] vector) {
if (null == this.vertexVectorIndex)
throw new IllegalStateException("Vector index not created for vertices on key: '" + key + "'");
- return new ArrayList<>(this.vertexVectorIndex.findNearest(key, vector));
+ return this.vertexVectorIndex.findNearestElements(key, vector);
+ }
+
+ /**
+ * Find the nearest edges to the given vector in the vector index for the specified property key.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of vertices sorted by distance
+ */
+ public List<TinkerIndexElement<TinkerEdge>> findNearestEdges(final String key, final float[] vector, final int k) {
+ if (null == this.edgeVectorIndex)
+ throw new IllegalStateException("Vector index not created for edges on key: '" + key + "'");
+ return this.edgeVectorIndex.findNearest(key, vector, k);
+ }
+
+ /**
+ * Find the nearest edges to the given vector in the vector index for the specified property key.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of vertices sorted by distance
+ */
+ public List<TinkerIndexElement<TinkerEdge>> findNearestEdges(final String key, final float[] vector) {
+ if (null == this.edgeVectorIndex)
+ throw new IllegalStateException("Vector index not created for edges on key: '" + key + "'");
+ return this.edgeVectorIndex.findNearest(key, vector);
}
/**
@@ -332,10 +385,10 @@ public abstract class AbstractTinkerGraph implements Graph {
* @param k the number of nearest neighbors to return
* @return a list of edges sorted by distance
*/
- public List<Edge> findNearestEdges(final String key, final float[] vector, final int k) {
+ public List<TinkerEdge> findNearestEdgesOnly(final String key, final float[] vector, final int k) {
if (null == this.edgeVectorIndex)
throw new IllegalStateException("Vector index not created for edges on key: '" + key + "'");
- return new ArrayList<>(this.edgeVectorIndex.findNearest(key, vector, k));
+ return new ArrayList<>(this.edgeVectorIndex.findNearestElements(key, vector, k));
}
/**
@@ -346,10 +399,10 @@ public abstract class AbstractTinkerGraph implements Graph {
* @param vector the query vector
* @return a list of edges sorted by distance
*/
- public List<Edge> findNearestEdges(final String key, final float[] vector) {
+ public List<TinkerEdge> findNearestEdgesOnly(final String key, final float[] vector) {
if (null == this.edgeVectorIndex)
throw new IllegalStateException("Vector index not created for edges on key: '" + key + "'");
- return new ArrayList<>(this.edgeVectorIndex.findNearest(key, vector));
+ return new ArrayList<>(this.edgeVectorIndex.findNearestElements(key, vector));
}
///////////// Utility methods ///////////////
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java
index 3a4e67cb25..7826d402e8 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/AbstractTinkerVectorIndex.java
@@ -21,12 +21,17 @@ package org.apache.tinkerpop.gremlin.tinkergraph.structure;
import org.apache.tinkerpop.gremlin.structure.Element;
import java.util.List;
+
/**
* Base class for representing a vector index for performing nearest neighbor searches.
*
* @param <T> the type of elements stored in the vector index
*/
public abstract class AbstractTinkerVectorIndex<T extends Element> extends AbstractTinkerIndex<T> {
+ /**
+ * Default number of nearest neighbors to return
+ */
+ private static final int DEFAULT_K = 10;
protected AbstractTinkerVectorIndex(final AbstractTinkerGraph graph, final Class<T> indexClass) {
super(graph, indexClass);
@@ -40,7 +45,7 @@ public abstract class AbstractTinkerVectorIndex<T extends Element> extends Abstr
* @param k the number of nearest neighbors to return
* @return a list of elements sorted by distance
*/
- public abstract List<T> findNearest(final String key, final float[] vector, final int k);
+ public abstract List<TinkerIndexElement<T>> findNearest(final String key, final float[] vector, final int k);
/**
* Searches for nearest neighbors in the vector index with the default k.
@@ -49,6 +54,28 @@ public abstract class AbstractTinkerVectorIndex<T extends Element> extends Abstr
* @param vector the query vector
* @return a list of elements sorted by distance
*/
- public abstract List<T> findNearest(final String key, final float[] vector);
+ public List<TinkerIndexElement<T>> findNearest(final String key, final float[] vector) {
+ return findNearest(key, vector, DEFAULT_K);
+ }
+ /**
+ * Searches for nearest neighbors in the vector index.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @param k the number of nearest neighbors to return
+ * @return a list of elements sorted by distance
+ */
+ public abstract List<T> findNearestElements(final String key, final float[] vector, final int k);
+
+ /**
+ * Searches for nearest neighbors in the vector index with the default k.
+ *
+ * @param key the property key
+ * @param vector the query vector
+ * @return a list of elements sorted by distance
+ */
+ public List<T> findNearestElements(final String key, final float[] vector) {
+ return findNearestElements(key, vector, DEFAULT_K);
+ }
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
index 177378b620..b92ab58688 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
@@ -97,6 +97,7 @@ public class TinkerGraph extends AbstractTinkerGraph {
if (graphLocation != null) loadGraph();
serviceRegistry = new TinkerServiceRegistry(this);
+ serviceRegistry.registerService(new TinkerServiceRegistry(this));
configuration.getList(String.class, GREMLIN_TINKERGRAPH_SERVICE, Collections.emptyList()).forEach(serviceClass ->
serviceRegistry.registerService(instantiate(serviceClass)));
}
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexElement.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexElement.java
new file mode 100644
index 0000000000..d8e43afb4c
--- /dev/null
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexElement.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class TinkerIndexElement<T> {
+ private final T element;
+ private final float distance;
+
+ public TinkerIndexElement(final T element, final float distance) {
+ this.element = element;
+ this.distance = distance;
+ }
+
+ public T getElement() {
+ return element;
+ }
+
+ public float getDistance() {
+ return distance;
+ }
+
+ public Map<String, Object> toMap() {
+ return new HashMap<String, Object>() {{
+ put("element", element);
+ put("distance", distance);
+ }};
+ }
+}
\ No newline at end of file
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexHelper.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexHelper.java
index 7c37b59757..0a4c2c2758 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexHelper.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIndexHelper.java
@@ -35,7 +35,7 @@ public final class TinkerIndexHelper {
* @return a list of vertices sorted by distance
*/
public static List<TinkerVertex> findNearestVertices(final AbstractTinkerGraph graph, final String key, final float[] vector, final int k) {
- return null == graph.vertexVectorIndex ? Collections.emptyList() : graph.vertexVectorIndex.findNearest(key, vector, k);
+ return null == graph.vertexVectorIndex ? Collections.emptyList() : graph.vertexVectorIndex.findNearestElements(key, vector, k);
}
/**
@@ -47,7 +47,7 @@ public final class TinkerIndexHelper {
* @return a list of vertices sorted by distance
*/
public static List<TinkerVertex> findNearestVertices(final AbstractTinkerGraph graph, final String key, final float[] vector) {
- return null == graph.vertexVectorIndex ? Collections.emptyList() : graph.vertexVectorIndex.findNearest(key, vector);
+ return null == graph.vertexVectorIndex ? Collections.emptyList() : graph.vertexVectorIndex.findNearestElements(key, vector);
}
/**
@@ -60,7 +60,7 @@ public final class TinkerIndexHelper {
* @return a list of edges sorted by distance
*/
public static List<TinkerEdge> findNearestEdges(final AbstractTinkerGraph graph, final String key, final float[] vector, final int k) {
- return null == graph.edgeVectorIndex ? Collections.emptyList() : graph.edgeVectorIndex.findNearest(key, vector, k);
+ return null == graph.edgeVectorIndex ? Collections.emptyList() : graph.edgeVectorIndex.findNearestElements(key, vector, k);
}
/**
@@ -72,7 +72,7 @@ public final class TinkerIndexHelper {
* @return a list of edges sorted by distance
*/
public static List<TinkerEdge> findNearestEdges(final AbstractTinkerGraph graph, final String key, final float[] vector) {
- return null == graph.edgeVectorIndex ? Collections.emptyList() : graph.edgeVectorIndex.findNearest(key, vector);
+ return null == graph.edgeVectorIndex ? Collections.emptyList() : graph.edgeVectorIndex.findNearestElements(key, vector);
}
public static List<TinkerVertex> queryVertexIndex(final AbstractTinkerGraph graph, final String key, final Object value) {
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java
index 111d4fcb7b..864a8242ba 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerTransactionVectorIndex.java
@@ -240,24 +240,31 @@ final class TinkerTransactionVectorIndex<T extends TinkerElement> extends Abstra
* @param k the number of nearest neighbors to return
* @return a list of elements sorted by distance
*/
- public List<T> findNearest(final String key, final float[] vector, final int k) {
+ public List<TinkerIndexElement<T>> findNearest(final String key, final float[] vector, final int k) {
if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
throw new IllegalArgumentException("The key '" + key + "' is not indexed");
final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
final List<SearchResult<ElementItem, Float>> nearest = index.findNearest(vector, k);
- return nearest.stream().map(sr -> sr.item().element).collect(Collectors.toList());
+ return nearest.stream().map(sr ->
+ new TinkerIndexElement<>(sr.item().element, sr.distance())).collect(Collectors.toList());
}
/**
- * Searches for nearest neighbors in the vector index with the default k.
+ * Searches for nearest neighbors in the vector index.
*
* @param key the property key
* @param vector the query vector
+ * @param k the number of nearest neighbors to return
* @return a list of elements sorted by distance
*/
- public List<T> findNearest(final String key, final float[] vector) {
- return findNearest(key, vector, DEFAULT_K);
+ public List<T> findNearestElements(final String key, final float[] vector, final int k) {
+ if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
+ throw new IllegalArgumentException("The key '" + key + "' is not indexed");
+
+ final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
+ final List<SearchResult<ElementItem, Float>> nearest = index.findNearest(vector, k);
+ return nearest.stream().map(sr -> sr.item().element).collect(Collectors.toList());
}
/**
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
index f280d0a3fb..90317fb70c 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerVectorIndex.java
@@ -46,11 +46,6 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
*/
protected Map<String, Index<Object, float[], ElementItem, Float>> vectorIndices = new ConcurrentHashMap<>();
- /**
- * Default number of nearest neighbors to return
- */
- private static final int DEFAULT_K = 10;
-
/**
* Default M parameter for HNSW index
*/
@@ -233,24 +228,31 @@ final class TinkerVectorIndex<T extends Element> extends AbstractTinkerVectorInd
* @param k the number of nearest neighbors to return
* @return a list of elements sorted by distance
*/
- public List<T> findNearest(final String key, final float[] vector, final int k) {
+ public List<TinkerIndexElement<T>> findNearest(final String key, final float[] vector, final int k) {
if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
throw new IllegalArgumentException("The key '" + key + "' is not indexed");
final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
final List<SearchResult<ElementItem, Float>> nearest = index.findNearest(vector, k);
- return nearest.stream().map(sr -> sr.item().element).collect(Collectors.toList());
+ return nearest.stream().map(sr ->
+ new TinkerIndexElement<>(sr.item().element, sr.distance())).collect(Collectors.toList());
}
/**
- * Searches for nearest neighbors in the vector index with the default k.
+ * Searches for nearest neighbors in the vector index.
*
* @param key the property key
* @param vector the query vector
+ * @param k the number of nearest neighbors to return
* @return a list of elements sorted by distance
*/
- public List<T> findNearest(final String key, final float[] vector) {
- return findNearest(key, vector, DEFAULT_K);
+ public List<T> findNearestElements(final String key, final float[] vector, final int k) {
+ if (!this.indexedKeys.contains(key) || !this.vectorIndices.containsKey(key))
+ throw new IllegalArgumentException("The key '" + key + "' is not indexed");
+
+ final Index<Object, float[], ElementItem, Float> index = this.vectorIndices.get(key);
+ final List<SearchResult<ElementItem, Float>> nearest = index.findNearest(vector, k);
+ return nearest.stream().map(sr -> sr.item().element).collect(Collectors.toList());
}
/**
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
index 0b1d63af86..daa4630766 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphVectorIndexTest.java
@@ -36,6 +36,7 @@ import java.util.Map;
import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.number.OrderingComparison.lessThanOrEqualTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
@@ -53,7 +54,7 @@ public class TinkerGraphVectorIndexTest {
@Parameterized.Parameter
public AbstractTinkerGraph graph;
- @Parameterized.Parameters
+ @Parameterized.Parameters(name = "{0}")
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][]{
{TinkerGraph.open()},
@@ -91,7 +92,7 @@ public class TinkerGraphVectorIndexTest {
graph.createIndex(TinkerIndexType.VECTOR,"embedding", Vertex.class, indexConfig);
- final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ final List<TinkerVertex> nearest = graph.findNearestVerticesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
assertNotNull(nearest);
assertEquals(2, nearest.size());
assertEquals("Alice", nearest.get(0).value("name"));
@@ -111,7 +112,7 @@ public class TinkerGraphVectorIndexTest {
g.V().has("name", "Bob").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
tryCommitChanges(graph);
- final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ final List<TinkerVertex> nearest = graph.findNearestVerticesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
assertNotNull(nearest);
assertEquals(2, nearest.size());
assertEquals("Alice", nearest.get(0).value("name"));
@@ -132,7 +133,7 @@ public class TinkerGraphVectorIndexTest {
g.V().has("name", "Bob").drop().iterate();
tryCommitChanges(graph);
- final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{0.0f, 1.0f, 0.0f}, 2);
+ final List<TinkerVertex> nearest = graph.findNearestVerticesOnly("embedding", new float[]{0.0f, 1.0f, 0.0f}, 2);
assertNotNull(nearest);
assertEquals(2, nearest.size());
assertThat(nearest.stream().noneMatch(v -> v.value("name").equals("Bob")), is(true));
@@ -153,7 +154,7 @@ public class TinkerGraphVectorIndexTest {
assertThat(graph.getIndexedKeys(Vertex.class).contains("embedding"), is(false));
try {
- graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ graph.findNearestVerticesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
fail("Should have thrown exception since the index was removed");
} catch (IllegalArgumentException ex) { }
}
@@ -173,7 +174,7 @@ public class TinkerGraphVectorIndexTest {
graph.createIndex(TinkerIndexType.VECTOR,"embedding", Edge.class, indexConfig);
- final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ final List<TinkerEdge> nearest = graph.findNearestEdgesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
assertNotNull(nearest);
assertEquals(2, nearest.size());
assertEquals(0.8f, (float) nearest.get(0).value("strength"), 0.0001f);
@@ -195,7 +196,7 @@ public class TinkerGraphVectorIndexTest {
g.E(edge.id()).property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
tryCommitChanges(graph);
- final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ final List<TinkerEdge> nearest = graph.findNearestEdgesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
assertNotNull(nearest);
assertEquals(2, nearest.size());
assertEquals(0.8f, (float) nearest.get(0).value("strength"), 0.0001f);
@@ -219,7 +220,7 @@ public class TinkerGraphVectorIndexTest {
g.E(edge.id()).drop().iterate();
tryCommitChanges(graph);
- final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{0.0f, 1.0f, 0.0f}, 2);
+ final List<TinkerEdge> nearest = graph.findNearestEdgesOnly("embedding", new float[]{0.0f, 1.0f, 0.0f}, 2);
assertNotNull(nearest);
assertEquals(2, nearest.size());
assertThat(nearest.stream().noneMatch(e -> e.value("strength").equals(0.6f)), is(true));
@@ -242,7 +243,7 @@ public class TinkerGraphVectorIndexTest {
assertThat(graph.getIndexedKeys(Edge.class).contains("embedding"), is(false));
try {
- graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ graph.findNearestEdgesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
fail("Should have thrown exception since the index was removed");
} catch (IllegalArgumentException ex) { }
}
@@ -285,7 +286,7 @@ public class TinkerGraphVectorIndexTest {
tryRollbackChanges(graph);
// Bob's embedding should still be [0.0f, 1.0f, 0.0f]
- final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{0.0f, 1.0f, 0.0f}, 1);
+ final List<TinkerVertex> nearest = graph.findNearestVerticesOnly("embedding", new float[]{0.0f, 1.0f, 0.0f}, 1);
assertNotNull(nearest);
assertEquals(1, nearest.size());
assertEquals("Bob", nearest.get(0).value("name"));
@@ -294,7 +295,7 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldHandleEmptyGraphForNearestVertices() {
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
- final List<Vertex> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ final List<TinkerVertex> nearest = graph.findNearestVerticesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
assertNotNull(nearest);
assertEquals(0, nearest.size());
}
@@ -302,31 +303,208 @@ public class TinkerGraphVectorIndexTest {
@Test
public void shouldHandleEmptyGraphForNearestEdges() {
graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
- final List<Edge> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ final List<TinkerEdge> nearest = graph.findNearestEdgesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
assertNotNull(nearest);
assertEquals(0, nearest.size());
}
@Test(expected = IllegalStateException.class)
public void shouldThrowExceptionWhenIndexNotCreatedForNearestVertices() {
- graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ graph.findNearestVerticesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
}
@Test(expected = IllegalStateException.class)
public void shouldThrowExceptionWhenIndexNotCreatedForNearestEdges() {
- graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ graph.findNearestEdgesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
}
@Test(expected = IllegalStateException.class)
public void shouldThrowExceptionWhenIndexNotCreatedForNearestVerticesNoDefaultCount() {
- graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f});
+ graph.findNearestVerticesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f});
}
@Test(expected = IllegalStateException.class)
public void shouldThrowExceptionWhenIndexNotCreatedForNearestEdgesNoDefaultCount() {
+ graph.findNearestEdgesOnly("embedding", new float[]{1.0f, 0.0f, 0.0f});
+ }
+
+ @Test
+ public void shouldFindNearestVerticesWithDefaultK() {
+ final GraphTraversalSource g = traversal().with(graph);
+ g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate();
+ g.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
+
+ tryCommitChanges(graph);
+
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+
+ final List<TinkerIndexElement<TinkerVertex>> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f});
+ assertNotNull(nearest);
+ assertEquals(4, nearest.size());
+
+ // Sort by distance first, then by "strength" to ensure deterministic order
+ nearest.sort((e1, e2) -> {
+ int distanceComparison = Float.compare(e1.getDistance(), e2.getDistance());
+ if (distanceComparison != 0) return distanceComparison;
+ return e1.getElement().value("name").toString().compareTo(e2.getElement().value("name"));
+ });
+
+ assertEquals("Alice", nearest.get(0).getElement().value("name"));
+ assertEquals("Dave", nearest.get(1).getElement().value("name"));
+ assertEquals("Bob", nearest.get(2).getElement().value("name"));
+ assertEquals("Charlie", nearest.get(3).getElement().value("name"));
+
+ // ensure that the finds are descending order given distance
+ for (int i = 0; i < nearest.size() - 1; i++) {
+ assertThat(nearest.get(i).getDistance(), is(lessThanOrEqualTo(nearest.get(i + 1).getDistance())));
+ }
+ }
+
+ @Test
+ public void shouldFindNearestVerticesWithSpecifiedK() {
+ final GraphTraversalSource g = traversal().with(graph);
+ g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate();
+ g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate();
+ g.addV("person").property("name", "Dave").property("embedding", new float[]{0.9f, 0.1f, 0.0f}).iterate();
+
+ tryCommitChanges(graph);
+
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+
+ final List<TinkerIndexElement<TinkerVertex>> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(2, nearest.size());
+ assertEquals("Alice", nearest.get(0).getElement().value("name"));
+ assertEquals("Dave", nearest.get(1).getElement().value("name"));
+
+ // ensure that the finds are descending order given distance
+ for (int i = 0; i < nearest.size() - 1; i++) {
+ assertThat(nearest.get(i).getDistance(), is(lessThanOrEqualTo(nearest.get(i + 1).getDistance())));
+ }
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void shouldThrowExceptionWhenIndexNotCreatedForFindNearestVertices() {
+ graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f});
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void shouldThrowExceptionWhenIndexNotCreatedForFindNearestVerticesWithK() {
+ graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ }
+
+ @Test
+ public void shouldHandleEmptyGraphForFindNearestVertices() {
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final List<TinkerIndexElement<TinkerVertex>> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f});
+ assertNotNull(nearest);
+ assertEquals(0, nearest.size());
+ }
+
+ @Test
+ public void shouldHandleEmptyGraphForFindNearestVerticesWithK() {
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig);
+ final List<TinkerIndexElement<TinkerVertex>> nearest = graph.findNearestVertices("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(0, nearest.size());
+ }
+
+ @Test
+ public void shouldFindNearestEdgesWithDefaultK() {
+ final GraphTraversalSource g = traversal().with(graph);
+ final Vertex alice = g.addV("person").property("name", "Alice").next();
+ final Vertex bob = g.addV("person").property("name", "Bob").next();
+ final Vertex charlie = g.addV("person").property("name", "Charlie").next();
+ final Vertex dave = g.addV("person").property("name", "Dave").next();
+ g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).property("strength", 8).iterate();
+ g.addE("knows").from(bob).to(charlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 6).iterate();
+ g.addE("knows").from(charlie).to(dave).property("embedding", new float[]{0.0f, 0.0f, 1.0f}).property("strength", 7).iterate();
+ g.addE("knows").from(alice).to(dave).property("embedding", new float[]{0.9f, 0.1f, 0.0f}).property("strength", 9).iterate();
+
+ tryCommitChanges(graph);
+
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+
+ final List<TinkerIndexElement<TinkerEdge>> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f});
+ assertNotNull(nearest);
+ assertEquals(4, nearest.size());
+
+ // Sort by distance first, then by "strength" to ensure deterministic order
+ nearest.sort((e1, e2) -> {
+ int distanceComparison = Float.compare(e1.getDistance(), e2.getDistance());
+ if (distanceComparison != 0) return distanceComparison;
+ return Integer.compare((int) e1.getElement().value("strength"), (int) e2.getElement().value("strength"));
+ });
+
+ // Assert the sorted results
+ assertEquals(8, (int) nearest.get(0).getElement().value("strength"));
+ assertEquals(9, (int) nearest.get(1).getElement().value("strength"));
+ assertEquals(6, (int) nearest.get(2).getElement().value("strength"));
+ assertEquals(7, (int) nearest.get(3).getElement().value("strength"));
+
+ // Validate distances are in non-decreasing order
+ for (int i = 0; i < nearest.size() - 1; i++) {
+ assertThat(nearest.get(i).getDistance(), is(lessThanOrEqualTo(nearest.get(i + 1).getDistance())));
+ }
+ }
+
+ @Test
+ public void shouldFindNearestEdgesWithSpecifiedK() {
+ final GraphTraversalSource g = traversal().with(graph);
+ final Vertex alice = g.addV("person").property("name", "Alice").next();
+ final Vertex bob = g.addV("person").property("name", "Bob").next();
+ final Vertex charlie = g.addV("person").property("name", "Charlie").next();
+ final Vertex dave = g.addV("person").property("name", "Dave").next();
+ g.addE("knows").from(alice).to(bob).property("embedding", new float[]{1.0f, 0.0f, 0.0f}).property("strength", 8).iterate();
+ g.addE("knows").from(bob).to(charlie).property("embedding", new float[]{0.0f, 1.0f, 0.0f}).property("strength", 6).iterate();
+ g.addE("knows").from(charlie).to(dave).property("embedding", new float[]{0.0f, 0.0f, 1.0f}).property("strength", 7).iterate();
+ g.addE("knows").from(alice).to(dave).property("embedding", new float[]{0.9f, 0.1f, 0.0f}).property("strength", 9).iterate();
+
+ tryCommitChanges(graph);
+
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+
+ final List<TinkerIndexElement<TinkerEdge>> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(2, nearest.size());
+ assertEquals(8, (int) nearest.get(0).getElement().value("strength"));
+ assertEquals(9, (int) nearest.get(1).getElement().value("strength"));
+
+ // Validate distances are in non-decreasing order
+ for (int i = 0; i < nearest.size() - 1; i++) {
+ assertThat(nearest.get(i).getDistance(), is(lessThanOrEqualTo(nearest.get(i + 1).getDistance())));
+ }
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void shouldThrowExceptionWhenIndexNotCreatedForFindNearestEdges() {
graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f});
}
+ @Test(expected = IllegalStateException.class)
+ public void shouldThrowExceptionWhenIndexNotCreatedForFindNearestEdgesWithK() {
+ graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ }
+
+ @Test
+ public void shouldHandleEmptyGraphForFindNearestEdges() {
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+ final List<TinkerIndexElement<TinkerEdge>> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f});
+ assertNotNull(nearest);
+ assertEquals(0, nearest.size());
+ }
+
+ @Test
+ public void shouldHandleEmptyGraphForFindNearestEdgesWithK() {
+ graph.createIndex(TinkerIndexType.VECTOR, "embedding", Edge.class, indexConfig);
+ final List<TinkerIndexElement<TinkerEdge>> nearest = graph.findNearestEdges("embedding", new float[]{1.0f, 0.0f, 0.0f}, 2);
+ assertNotNull(nearest);
+ assertEquals(0, nearest.size());
+ }
+
private void tryCommitChanges(final Graph graph) {
if (graph.features().graph().supportsTransactions())
graph.tx().commit();
(tinkerpop) 10/10: Moved Tinker vector search index to 4.0.0
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-3158
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 53a5eb8899c78542982f1b56832733164949c47c
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Tue Jun 2 08:36:37 2026 -0400
Moved Tinker vector search index to 4.0.0
---
docs/src/upgrade/release-4.x.x.asciidoc | 45 +++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/docs/src/upgrade/release-4.x.x.asciidoc b/docs/src/upgrade/release-4.x.x.asciidoc
index aa14264ca0..d9ed8ce883 100644
--- a/docs/src/upgrade/release-4.x.x.asciidoc
+++ b/docs/src/upgrade/release-4.x.x.asciidoc
@@ -41,6 +41,51 @@ anonymized form. The original gremlator.com was a prototype built by TinkerPop c
previous implementation required Java and a running Gremlin Server, whereas the new version runs entirely in the
browser with no server infrastructure needed.
+==== TinkerGraph Vector Index
+
+Vector search enables finding similar items based on their semantic meaning rather than exact keyword matches, which is
+essential for modern applications like recommendation systems, image search, and natural language processing.
+TinkerGraph now supports vector indexing and similarity search through a dedicated vector index implementation and the
+`call()` step, allowing efficient nearest neighbor searches on both vertices and edges.
+
+The vector index in TinkerGraph is implemented using HNSW (Hierarchical Navigable Small World), a state-of-the-art
+algorithm for approximate nearest neighbor search that provides excellent performance for high-dimensional vector data.
+To use this feature, you need to create a vector index, add elements with vector embeddings, and then perform searches
+using the `call()` step.
+
+Here's a basic example using Groovy:
+
+[source,groovy]
+----
+// Create a graph and register the vector search service
+graph = TinkerGraph.open()
+g = traversal().with(graph)
+graph.getServiceRegistry().registerService(new TinkerVectorSearchByElementFactory(graph))
+
+// Create a vector index with dimension 3
+indexConfig = [dimension: 3]
+graph.createIndex(TinkerIndexType.VECTOR, "embedding", Vertex.class, indexConfig)
+
+// Add vertices with vector embeddings
+g.addV("person").property("name", "Alice").property("embedding", new float[]{1.0f, 0.0f, 0.0f}).iterate()
+g.addV("person").property("name", "Bob").property("embedding", new float[]{0.0f, 1.0f, 0.0f}).iterate()
+g.addV("person").property("name", "Charlie").property("embedding", new float[]{0.0f, 0.0f, 1.0f}).iterate()
+
+// Perform a vector search using the call() step
+params = [key: "embedding", topK: 2]
+g.V().has("name", "Alice").call("tinker.search.vector.topKByElement", params)
+----
+
+The `call()` step returns a list of maps, each containing the matching element and its distance from the query vector:
+
+[source,text]
+----
+==>[distance:0.9500624, element:v[2]]
+==>[distance:1.0, element:v[3]]
+----
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-3158[TINKERPOP-3158]
+
==== Removed `uuid` Dependency in gremlin-javascript
The `uuid` npm package has been removed from `gremlin-javascript`. UUID generation now uses the built-in