{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D11","name":"Test Reliability","shortDescription":{"text":"Test Reliability"},"helpUri":"https://codehealth.canine.dev/dimensions/D11"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A07:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"],"owasp":"A07:2025"}},{"id":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D18","name":"Solution Shape","shortDescription":{"text":"Solution Shape"},"helpUri":"https://codehealth.canine.dev/dimensions/D18"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D23","name":"Boundary Type-Coupling","shortDescription":{"text":"Boundary Type-Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D23"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D27","name":"Navigability","shortDescription":{"text":"Navigability"},"helpUri":"https://codehealth.canine.dev/dimensions/D27"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A07:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"],"owasp":"A07:2025"}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A05:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"],"owasp":"A05:2025"}},{"id":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"A03:2025","toolComponent":{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"],"owasp":"A03:2025"}},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D44","name":"Platform End-of-Life","shortDescription":{"text":"Platform End-of-Life"},"helpUri":"https://codehealth.canine.dev/dimensions/D44"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX3","name":"Project dependency cycles","shortDescription":{"text":"Project dependency cycles"},"helpUri":"https://codehealth.canine.dev/dimensions/AX3"},{"id":"AX4","name":"Dependency direction","shortDescription":{"text":"Dependency direction"},"helpUri":"https://codehealth.canine.dev/dimensions/AX4"},{"id":"AX5","name":"Architecture \u0026 structure","shortDescription":{"text":"Architecture \u0026 structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AX5"},{"id":"AX6","name":"Interface segregation","shortDescription":{"text":"Interface segregation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX6"},{"id":"AX8","name":"Test isolation","shortDescription":{"text":"Test isolation"},"helpUri":"https://codehealth.canine.dev/dimensions/AX8"},{"id":"AXB1","name":"Runtime evidence locked \u2014 no reproducible boot","shortDescription":{"text":"Runtime evidence locked \u2014 no reproducible boot"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB1"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"DM1","name":"Aggregate boundaries","shortDescription":{"text":"Aggregate boundaries"},"helpUri":"https://codehealth.canine.dev/dimensions/DM1"},{"id":"DM11","name":"Constructible invalid state","shortDescription":{"text":"Constructible invalid state"},"helpUri":"https://codehealth.canine.dev/dimensions/DM11"},{"id":"DM12","name":"Ambient inputs in the domain","shortDescription":{"text":"Ambient inputs in the domain"},"helpUri":"https://codehealth.canine.dev/dimensions/DM12"},{"id":"DM4","name":"Rich vs anemic model","shortDescription":{"text":"Rich vs anemic model"},"helpUri":"https://codehealth.canine.dev/dimensions/DM4"},{"id":"DM5","name":"Encapsulated state","shortDescription":{"text":"Encapsulated state"},"helpUri":"https://codehealth.canine.dev/dimensions/DM5"},{"id":"DM6","name":"Domain \u2194 infrastructure boundary","shortDescription":{"text":"Domain \u2194 infrastructure boundary"},"helpUri":"https://codehealth.canine.dev/dimensions/DM6"},{"id":"DM8","name":"Value-object opportunities","shortDescription":{"text":"Value-object opportunities"},"helpUri":"https://codehealth.canine.dev/dimensions/DM8"},{"id":"DM9","name":"Scattered domain decisions","shortDescription":{"text":"Scattered domain decisions"},"helpUri":"https://codehealth.canine.dev/dimensions/DM9"},{"id":"ED5","name":"Idempotency","shortDescription":{"text":"Idempotency"},"helpUri":"https://codehealth.canine.dev/dimensions/ED5"},{"id":"GD1","name":"Unfinished \u0026 placeholder code","shortDescription":{"text":"Unfinished \u0026 placeholder code"},"helpUri":"https://codehealth.canine.dev/dimensions/GD1"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"PF2","name":"Allocation hygiene","shortDescription":{"text":"Allocation hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/PF2"},{"id":"SC1","name":"Supply-chain hygiene","shortDescription":{"text":"Supply-chain hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/SC1"},{"id":"X10","name":"Duplicated predicate","shortDescription":{"text":"Duplicated predicate"},"helpUri":"https://codehealth.canine.dev/dimensions/X10"},{"id":"X28","name":"Index access outside its own emptiness guard","shortDescription":{"text":"Index access outside its own emptiness guard"},"helpUri":"https://codehealth.canine.dev/dimensions/X28"},{"id":"X6","name":"Hand-rolled structured-format parsing","shortDescription":{"text":"Hand-rolled structured-format parsing"},"helpUri":"https://codehealth.canine.dev/dimensions/X6"},{"id":"X7","name":"Silent fallback defaults","shortDescription":{"text":"Silent fallback defaults"},"helpUri":"https://codehealth.canine.dev/dimensions/X7"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D4","level":"warning","message":{"text":"Near-duplicate member pair (40 shared lines): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:50-139 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:432-521 \u2014 These two members are variants of one another: 40 of their lines are already reported as duplicated blocks below, spread through both bodies rather than gathered into one. Read them as a single construct written twice. The repair is at the members\u0027 grain \u2014 factor the shared pipeline into one implementation the two call with their differences as parameters or as an injected step, or, where the difference is systematic (sync against async, one transport against another), generate one from the other. Extracting the individual blocks below is not the same fix: it leaves the two bodies in place and the next edit still has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"d48fab189dd15b18c135fcf2853e07154a0468e7fea016f1650c91aead8fd6d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (45 corresponding lines): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:170-214 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:552-596 \u2014 These two members are one piece of code written twice and then edited apart: 45 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"91da273d2d760ee5b243f56f6bf4d0c0500ee6af80532754c858bd2ba4b8fdb9"}},{"ruleId":"D4","level":"warning","message":{"text":"Edited copy of a member (38 corresponding lines): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:222-259 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:604-641 \u2014 These two members are one piece of code written twice and then edited apart: 38 consecutive lines correspond almost exactly, broken only by small local edits. Most of that correspondence is NOT reported as duplicated blocks below \u2014 the edits cut it into fragments and only the largest of them clear the block floor, so the rows below understate it. The repair is at the members\u0027 grain \u2014 factor the shared implementation into one the two call with their differences as parameters or as an injected step, or, where the difference is systematic (an extra return value, one transport against another), generate one from the other. Left alone, the next edit has to be made twice and the two will drift further apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":222}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1d4b8e350dbc6d9d1f5f68bfa76de10f5c4e8a7bfe6da9e7dc1340b0c0a492f"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): src/DeepLearning4VB/org/datavec/api/writable/ByteWritable.vb:80-94 | src/DeepLearning4VB/org/datavec/api/writable/DoubleWritable.vb:78-92 | src/DeepLearning4VB/org/datavec/api/writable/FloatWritable.vb:79-93 | src/DeepLearning4VB/org/datavec/api/writable/IntWritable.vb:80-94 | src/DeepLearning4VB/org/datavec/api/writable/LongWritable.vb:80-94 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/writable/ByteWritable.vb"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"3112223819a28efd902deac221aff8c8c2cd37b8a4cb73e20016e3a2bf2c90a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (5 members, 50\u002B identical tokens): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformBoolOp.vb:110-122 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformFloatOp.vb:95-107 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformSameOp.vb:105-117 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformStrictOp.vb:94-112 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/MaxOut.vb:104-120 \u2014 These 5 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 5 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 5 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformBoolOp.vb"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"27adcc5c0a03c6a888948eba87ce28db003bd62aae0252e9a2eb1d5e2b015368"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb:49-68 | src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb:73-92 | src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb:97-116 | src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb:121-140 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"f42be518c1b3710a94118a3d221e666babfea18bab9bee96852a1c2ee5a4f1e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb:151-158 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceFloatOp.vb:169-181 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb:146-153 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceSameOp.vb:151-160 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f6fc2798fa38b08f3f90e30736935374a932a5be745d2b8cef9c536fb685d10"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb:216-256 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb:189-226 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv3DConfig.vb:240-289 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling2DConfig.vb:226-272 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"33eec364b8dd9178f513413d3605311f1fc6c438aff879c9e11a43d3c4f0f03a"}},{"ruleId":"D4","level":"warning","message":{"text":"Members sharing a duplicated core (4 members, 50\u002B identical tokens): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttention.vb:79-91 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttentionBp.vb:63-72 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/MultiHeadDotProductAttention.vb:78-90 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/MultiHeadDotProductAttentionBp.vb:63-72 \u2014 These 4 members share a duplicated core: a run of at least 50 identical tokens appears in every one of them. That run is NOT broken out as duplicated-block rows below \u2014 it is what admitted this row, and the blocks below cover only the part of it that clears the block floor, so they understate the correspondence. Read the members as one construct written 4 times. The repair is at the members\u0027 grain \u2014 factor the shared implementation out once and have all of them call it with their differences as parameters or as an injected step, or, where the difference is systematic, generate them from one template. Extracting the individual blocks below is not the same fix: it leaves every body in place and the next edit still has to be made 4 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttention.vb"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"52bc83c293f1995da223a8a0690f54d15ec2d2d208a1fe3e01b5d2c3e5a8072a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (43 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb:340-382 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/BaseConvolutionConfig.vb:116-158 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/BaseConvolutionConfig.vb\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 58 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b2b29cb2c4bceafb073efd87a9106742ecca796583a449b5caa0fd3f302af9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (39 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb:281-319 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling3DConfig.vb:250-288 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling3DConfig.vb\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"34adbd214ea0e48997c304feffdf9ea59913827d5edc44527d07b53138aaa6f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (25\u201327 lines \u00D7 3): src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/DoubleAnalysisCounter.vb:113-139 | src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/IntegerAnalysisCounter.vb:126-150 | src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/LongAnalysisCounter.vb:119-143 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/IntegerAnalysisCounter.vb\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/LongAnalysisCounter.vb\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/DoubleAnalysisCounter.vb"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15bc3af25075e137098455575e900dec40381684419293f9442d53893071da9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/condition/BooleanCondition.vb:124-147 | src/DeepLearning4VB/org/datavec/api/transform/condition/BooleanCondition.vb:158-181 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/condition/BooleanCondition.vb"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"7424f9ad3765482684b23713f924b91da1f2f1f42c878c09fc30a5495a3ca330"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (24 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/condition/BooleanCondition.vb:185-208 | src/DeepLearning4VB/org/datavec/api/transform/condition/BooleanCondition.vb:220-243 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/condition/BooleanCondition.vb"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbfeb20b8e2917e591b2fc8c538ed212ddd71e63e3fbeed89739baba023421fb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (23 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/transform/doubletransform/DoubleMathFunctionTransform.vb:45-67 | src/DeepLearning4VB/org/datavec/api/transform/transform/floattransform/FloatMathFunctionTransform.vb:65-87 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060src/DeepLearning4VB/org/datavec/api/transform/transform/doubletransform/DoubleMathFunctionTransform.vb:69\u0060 calls \u0060signum\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/transform/floattransform/FloatMathFunctionTransform.vb:89\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/doubletransform/DoubleMathFunctionTransform.vb"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8718c151dd327126397568b588cac0a01d3710bf72927df412b3487b59cfa8df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb:220-240 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb:193-213 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling2DConfig.vb:230-250 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"08c129e90a81c64cd53dad20a734d527d2ed934be1682c8c4c43b3c641c88589"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/transform/doubletransform/DoubleMathOpTransform.vb:67-88 | src/DeepLearning4VB/org/datavec/api/transform/transform/floattransform/FloatMathOpTransform.vb:67-88 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/doubletransform/DoubleMathOpTransform.vb"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"0467012090bda4140da611504833252cc4d3b9d3a5f2f244f0073479b4a96991"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/transform/integer/IntegerMathOpTransform.vb:66-87 | src/DeepLearning4VB/org/datavec/api/transform/transform/longtransform/LongMathOpTransform.vb:66-87 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/integer/IntegerMathOpTransform.vb"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"72945127994d3633e761ad8a937aa1d9c174c6f64fa820ed51f2f4d19e963635"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 4): src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb:49-68 | src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb:73-92 | src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb:97-116 | src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb:121-140 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/condition/ConditionOp.vb"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac47b88cf0dd192ecdf0d622ed44ad5c7cbb6815e38676b2d2448bb8478b1989"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:120-139 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:502-521 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"570fde7323b6b56c8f1a7d02b6dcf32659ae2ab63c95a8de0083b79f85ef231b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/shape/LongShapeDescriptor.vb:72-87 | src/DeepLearning4VB/org/nd4vb/linalg/api/shape/ShapeDescriptor.vb:65-80 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/shape/LongShapeDescriptor.vb"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aaec7fc28054234df184e0818b638c26e73bc472237f3c1c3728513c6018a07"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb:404-420 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb:432-448 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"a52c000cfd412a30717105ca5cec40b6de9d4b7af0a750c623d0e4aa2d50bf59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb:536-552 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb:573-589 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"39b9ee415a1ff76051581a5b748cde3a9d6e052c955cfbe03f3620f429d9c393"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:77-91 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:459-473 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4e16f7acc49e8cbac999d5d756ebc9471d6a7c6892062e25a7ac4ffdaefc50a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 5): src/DeepLearning4VB/org/datavec/api/writable/ByteWritable.vb:80-94 | src/DeepLearning4VB/org/datavec/api/writable/DoubleWritable.vb:78-92 | src/DeepLearning4VB/org/datavec/api/writable/FloatWritable.vb:79-93 | src/DeepLearning4VB/org/datavec/api/writable/IntWritable.vb:80-94 | src/DeepLearning4VB/org/datavec/api/writable/LongWritable.vb:80-94 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 5 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/writable/ByteWritable.vb"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f9b186b77f498dbc694ad986839aa94d77f2a8bbb16896ca2f109cef727f23f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:4000-4014 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/DynamicCustomOp.vb:694-708 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/recurrent/weights/RNNWeights.vb:40-54 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb"},"region":{"startLine":4000}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5d641d57ffd2dbb5c31c57059eced32d10fe83dcc3ea2e28a75e2f891fe682c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb:239-252 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb:212-225 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv3DConfig.vb:275-288 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb:253\u0060 calls \u0060Equals\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb:226\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d7e4a6c65f47a35936bb50cc97399ea39d8386cc8030db28aaec1da4752d656"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb:252-266 | src/DeepLearning4VB/org/datavec/api/transform/sequence/window/TimeWindowFunction.vb:224-238 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/sequence/window/TimeWindowFunction.vb\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ae0da30faa7622cb4488c90c497464ea682da52c120c94df4803b76fda2684a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:3223-3237 | src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:3263-3277 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb"},"region":{"startLine":3223}}}],"partialFingerprints":{"codehealthFindingId/v1":"f354ef80d2de3b9d248520a12eb2b06703bbe5781e0335ce30f0dfcaac870297"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:200-214 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:582-596 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd185e1a574d021f3bdc6449c35d54e6049a6f3131d1b54ca3013bd277c2fc92"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:245-259 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:627-641 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8154934e296082f550bf71a1b5e7ccab0615d346b90430456dd70ddb599a095"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DeConv3D.vb:104-117 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DeConv3DDerivative.vb:75-88 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DeConv3DTF.vb:78-91 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DeConv3D.vb"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"4abb059508cce857c152bdfeb95d9aa58689e09664a264532be30fa924e2ab95"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/analysis/histogram/DoubleHistogramCounter.vb:63-76 | src/DeepLearning4VB/org/datavec/api/transform/analysis/histogram/StringHistogramCounter.vb:64-77 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/histogram/DoubleHistogramCounter.vb"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"83fe1577321e45a0e252d99be7097fdc2d1d4661367a3aa53c9a2bee9f23f718"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/categorical/CategoricalQualityAddFunction.vb:48-59 | src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/time/TimeQualityAddFunction.vb:48-59 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/categorical/CategoricalQualityAddFunction.vb"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e49fee601b8800204e2a203ace47af451c601e6ba77904370d6b393a3bc2c15"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/ops/AggregatorImpls.vb:496-507 | src/DeepLearning4VB/org/datavec/api/transform/ops/AggregatorImpls.vb:580-591 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/ops/AggregatorImpls.vb"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"60aacede3457e1a30eefaff5915fc9805e4904355619babc97765523d07641b8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb:132-144 | src/DeepLearning4VB/org/datavec/api/transform/sequence/window/TimeWindowFunction.vb:115-127 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/sequence/window/TimeWindowFunction.vb\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb:145\u0060 calls \u0060convert\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/sequence/window/TimeWindowFunction.vb:128\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"a37479ec96c4f57aa3c1f2ff385ef38dd5934c05d465ec2c3ffae862bed0f42a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/transform/doubletransform/DoubleMathFunctionTransform.vb:70-82 | src/DeepLearning4VB/org/datavec/api/transform/transform/floattransform/FloatMathFunctionTransform.vb:88-100 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060src/DeepLearning4VB/org/datavec/api/transform/transform/doubletransform/DoubleMathFunctionTransform.vb:69\u0060 calls \u0060signum\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/transform/floattransform/FloatMathFunctionTransform.vb:87\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/doubletransform/DoubleMathFunctionTransform.vb"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b4986ef4aa2e35b76c425463d7be56a1f7cff6ffadd0b84b08c337c7631e9dc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/ui/components/RenderableComponentHistogram.vb:99-109 | src/DeepLearning4VB/org/datavec/api/transform/ui/components/RenderableComponentLineChart.vb:128-138 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/ui/components/RenderableComponentHistogram.vb"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a4b4998995b18e7b87da16fdebcd31c69516ed7f6145902634011828aefdca1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:2797-2810 | src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:2820-2833 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb"},"region":{"startLine":2797}}}],"partialFingerprints":{"codehealthFindingId/v1":"f128332af18f7cc1e77f2c65a3c8367dfef02d61b217fbdd8fe4b97a5bd0bd1c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb:98-110 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling3DConfig.vb:67-79 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling3DConfig.vb\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d9ebbfe4231a5efd2ca549a58fd42375cc717367fb5ebf6b4540158d2e02bba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/ops/AggregatorImpls.vb:477-489 | src/DeepLearning4VB/org/datavec/api/transform/ops/AggregatorImpls.vb:561-573 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/ops/AggregatorImpls.vb"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e355890be5a933e67c485613219ca7f446d79218638b36efd97fdb3fb4055df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToIntegerTransform.vb:40-52 | src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToOneHotTransform.vb:41-53 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToIntegerTransform.vb"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed0bd5ddec3f17dc4112cbfc2b1daeacdd65b447a84375f8fd8fd169d7d2b3cf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb:64-75 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling3DConfig.vb:47-58 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling3DConfig.vb\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Note what the matched lines are: every one of them assigns one field to another, so the block is a hand-written mapper between two data shapes rather than behaviour with a helper inside it. Extracting one shared function only works if both sites map the SAME pair of types in the same direction \u2014 check that first, because inverse or differently-typed mappers have no single function they can both call. Where they do not, the moves that exist are a generated or reflective mapper, a common embedded/base type the fields live on once, or accepting the run and covering it with a test that fails when a field is added to one side only."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3af9e70858fa35774054c6c3f75e2d8cdb222ba8cddf11aef89d45a6f4d9122"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/integer/IntegerQualityAddFunction.vb:55-63 | src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/longq/LongQualityAddFunction.vb:55-63 | src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/real/RealQualityAddFunction.vb:57-65 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/integer/IntegerQualityAddFunction.vb"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"9bee4fb7f83bbfb9c8a4119fabf15a57fbbe51c21753fb9f23d27c3304a07d67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ElementWiseKernels.vb:40-50 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ElementWiseKernels.vb:116-126 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ElementWiseKernels.vb:194-204 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ElementWiseKernels.vb"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"26997a5740f4e3ba05bff880c5ac439c0ce68c6cf88c7e592ea68635060bd9bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/metadata/IntegerMetaData.vb:113-123 | src/DeepLearning4VB/org/datavec/api/transform/metadata/LongMetaData.vb:119-129 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/metadata/IntegerMetaData.vb"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9e14d70537f89e57759f959625c2d1331564fff63900abc02385924d06a65ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/schema/Schema.vb:327-337 | src/DeepLearning4VB/org/datavec/api/transform/schema/SequenceSchema.vb:108-118 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/schema/Schema.vb"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c72f86a4444fe73232432208b70d9ef21b6a64c66d768bd668a09dfdd24172a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/schema/SequenceSchema.vb:162-172 | src/DeepLearning4VB/org/datavec/api/transform/schema/SequenceSchema.vb:192-202 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060src/DeepLearning4VB/org/datavec/api/transform/schema/SequenceSchema.vb:160\u0060 calls \u0060record\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/schema/SequenceSchema.vb:191\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/schema/SequenceSchema.vb"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ef2dd7f92f23050f96f76d844e42e85012abea96ff150ed17d63c6adaa92316"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb:83-94 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb:66-77 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa77865cca049b69ed43e533dc8596e5659e17f2f1386ceb8cf4581d2b536150"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttention.vb:80-91 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/MultiHeadDotProductAttention.vb:79-90 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttention.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/MultiHeadDotProductAttention.vb\u0060 as WHOLE FILES: 86% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 2 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttention.vb"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"58e8b7e9cdd1b2ba68443a632317a9c48b85df3e02df7fa9573fa6e7c3b9220c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:1525-1536 | src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:1543-1553 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb"},"region":{"startLine":1525}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbba71317cc2f8dfbf614384f21ee254efc28270f5da76c986d1cab3a0667bd9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DeConv2D.vb:104-112 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DeConv2DTF.vb:92-100 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Pooling2D.vb:116-124 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Pooling2D.vb:114\u0060 calls \u0060getType\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DeConv2D.vb:103\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DeConv2D.vb"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"14d9184dcfefa080aca91dd1d5f3c752f7f98a544dfddb594dd6f58f78347251"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/JavaCompat/Arrays.vb:148-152 | src/DeepLearning4VB/org/datavec/api/transform/serde/JavaJsonWriter.vb:183-187 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/JavaCompat/Arrays.vb"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"c34397a45fc98a0f832f7954126c71a5ebe40b440f87c5860aef9fe55aceb6f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:1851-1860 | src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:1913-1924 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb"},"region":{"startLine":1851}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b8ae05a10825d22ea587e7d04563b1693809132742531f854e89741561b9430"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:1875-1884 | src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:1939-1950 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb"},"region":{"startLine":1875}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f635c111aae20c7755a3a737700eedf6acd0c91acd96a9d52fc740ba0f12a0b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/shape/Shape.vb:174-183 | src/DeepLearning4VB/org/nd4vb/linalg/api/shape/Shape.vb:206-215 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/shape/Shape.vb"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"04db5f5a406027da33cb59ee9493924beabba77057afa7d039d433f379288ba3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/indexing/Indices.vb:293-301 | src/DeepLearning4VB/org/nd4vb/linalg/indexing/Indices.vb:318-326 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/indexing/Indices.vb"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cd2cb926f8af193d99beee7426c71c95bb3ea1104937e6b03fe7718c2084b9e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/records/reader/impl/FileRecordReader.vb:210-218 | src/DeepLearning4VB/org/datavec/api/records/reader/impl/jackson/JacksonRecordReader.vb:151-160 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060src/DeepLearning4VB/org/datavec/api/records/reader/impl/FileRecordReader.vb:208\u0060 calls \u0060invokeListeners\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/records/reader/impl/jackson/JacksonRecordReader.vb:150\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/records/reader/impl/FileRecordReader.vb"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"c092abea9c42bbcdd7a56fe3168bfba12e7731961f3f6746cb83970dde550020"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceFloatOp.vb:169-176 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceSameOp.vb:151-158 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceFloatOp.vb"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8f284054e9c6bba29e9b2455901b0872a402300b521daa71c13fcc4cc286af8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/FirstIndex.vb:147-155 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/LastIndex.vb:162-170 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/FirstIndex.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/LastIndex.vb\u0060 as WHOLE FILES: 82% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 2 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/FirstIndex.vb"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e012d144e26207e5b54744d09d4826326ef62a675b3775b1d2704e56f52846a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Im2col.vb:73-81 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Im2colBp.vb:59-67 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Im2col.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Im2colBp.vb\u0060 as WHOLE FILES: 87% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Im2col.vb"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ba70fb38498c1bd717d58e8795b4556971176bc315914d7e3b586c867e88a3e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttentionBp.vb:64-70 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/MultiHeadDotProductAttentionBp.vb:64-70 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttentionBp.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/MultiHeadDotProductAttentionBp.vb\u0060 as WHOLE FILES: 89% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 2 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttentionBp.vb"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbaf3f19ef8da2d79c803ecb40c8e851e62417bdecd85cd68714219c23bf569a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/shape/Shape.vb:1005-1013 | src/DeepLearning4VB/org/nd4vb/linalg/api/shape/Shape.vb:1020-1028 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/shape/Shape.vb"},"region":{"startLine":1005}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a2533daa74d30530e3f9351db59dea94b92d4a925a464c93169af9991314a58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:300-308 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:310-318 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b6d4e2061bfb09f4bf3cf6580772dd6d37b11d87225a8de3f5180d6eefe923"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:682-690 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:692-700 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8f6ab1da6bed626acccde7c175fba91aabdd8f15833a462d0fdfdc170bf325c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:175-183 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:247-258 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f4331ae4bc3d6b82b72447dc047f549cb0d5b45f05413b27643cb14aa3ad06b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttention.vb:80-86 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttentionBp.vb:64-70 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/MultiHeadDotProductAttention.vb:79-85 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/MultiHeadDotProductAttentionBp.vb:64-70 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttention.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/MultiHeadDotProductAttention.vb\u0060 as WHOLE FILES: 86% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 2 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DotProductAttention.vb"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"342371a93709df6f461797dc5cb5ccaf5666ffc0560c74ce2696ca6615de8ea7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb:83-89 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb:66-72 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling2DConfig.vb:70-76 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling2DConfig.vb:78\u0060 calls \u0060ret\u0060, \u0060ToString\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb:91\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf476b8f103730d75f8f4057ee6f4e71b9a964d9c5e79b2ef8a3878dc25be437"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/split/FileSplit.vb:162-169 | src/DeepLearning4VB/org/datavec/api/split/NumberedFileInputSplit.vb:80-87 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/split/FileSplit.vb"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"525d31fc01d9f5863b639ef42c797666e7c8044484ffab0ae9e58fd3f9820af9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/metadata/DoubleMetaData.vb:157-163 | src/DeepLearning4VB/org/datavec/api/transform/metadata/FloatMetaData.vb:157-163 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/metadata/DoubleMetaData.vb"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"27686a88b2b3e6fc238f2ad8b35c45dc37fe494c50dde987f47ba5c252f06b21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb:315-322 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/BaseConvolutionConfig.vb:99-106 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/BaseConvolutionConfig.vb\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 58 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"2432fd9f4a94ec1fcff4c8805666e7825217c71a1ada8fdb5c5c8785d65f70ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/blas/params/GemmParams.vb:162-168 | src/DeepLearning4VB/org/nd4vb/linalg/api/blas/params/GemvParameters.vb:84-90 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/blas/params/GemmParams.vb"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"641f830444a17553aaa3b3a35e1ac20492a86abec16c1f9f669f042316801abf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseOp.vb:214-221 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/BaseConvolutionConfig.vb:87-94 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseOp.vb"},"region":{"startLine":214}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ea11d64c9fdb182b32c49510ce15c119f8985b616536b747385e40b53ce4f57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb:133-139 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb:128-134 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 136 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"00fded93b7bac68616b65af939a8a173a696c607a345bc03a7f204dec115a356"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb:151-157 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb:146-152 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 136 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"65071e14ccdca2320a16f952e7d786bfbfb263e61798d8e2ed507631d27a0283"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (4\u20138 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb:317-320 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/OpExecutionerUtil.vb:161-168 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/OpExecutionerUtil.vb:179-186 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d11d8614c7ed83058cc25c5d7e21dca42837c70a38510edd2276909fc493b68"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/FirstIndex.vb:133-139 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/LastIndex.vb:148-154 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/FirstIndex.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/LastIndex.vb\u0060 as WHOLE FILES: 82% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 2 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/indexaccum/FirstIndex.vb"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"02799e7b03ad5e73545bff2db0ad8888bdda5f76e63f44c86f478ef5dece23d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb:151-157 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceFloatOp.vb:169-176 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb:146-152 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceSameOp.vb:151-158 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 136 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"79fd2eaf1b9d5b4d2e7f2e4428214426013b6da9f5a0d478aa321b5f954795c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb:300-306 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseOp.vb:214-220 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/BaseConvolutionConfig.vb:87-93 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/BaseConvolutionConfig.vb\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 58 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb:308\u0060 calls \u0060CLng\u0060, \u0060DirectCast\u0060, \u0060If\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseOp.vb:221\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/autodiff/functions/DifferentialFunction.vb"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7f44e70dbdfa5d0a5c18c149db8298002c8308d5adcae519bafe0c22563cc85"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/util/NDArrayUtil.vb:42-47 | src/DeepLearning4VB/org/nd4vb/linalg/util/NDArrayUtil.vb:56-61 | src/DeepLearning4VB/org/nd4vb/linalg/util/NDArrayUtil.vb:69-74 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/util/NDArrayUtil.vb"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"28cd5417fc15f2d3f0fdfe33726e439855f1a0b3488f4e102df3c98ce5b7c724"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/JavaCompat/JavaString.vb:90-96 | src/DeepLearning4VB/JavaCompat/JavaString.vb:99-105 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/JavaCompat/JavaString.vb"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"77d1459e21735150300bdc56545c932b4162f08adbe9515449c6f2d749626e5a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/ui/components/RenderableComponentHistogram.vb:70-75 | src/DeepLearning4VB/org/datavec/api/transform/ui/components/RenderableComponentLineChart.vb:83-88 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/ui/components/RenderableComponentHistogram.vb"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"52d4035b3caccc55bbe02ce40aa195c115c5e83fa9a9eb08ff1c0a1433bf274a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/datavec/local/transforms/LocalTransformExecutor.vb:427-436 | src/DeepLearning4VB/org/datavec/local/transforms/LocalTransformExecutor.vb:439-445 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/local/transforms/LocalTransformExecutor.vb"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5366c3f289dc7341034572552b4d36d7f9db96d59689ecca49213424708ed53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/blas/impl/BaseLapack.vb:293-298 | src/DeepLearning4VB/org/nd4vb/linalg/api/blas/impl/BaseLapack.vb:317-322 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/blas/impl/BaseLapack.vb"},"region":{"startLine":293}}}],"partialFingerprints":{"codehealthFindingId/v1":"e04533b198133be7d9734cbc7544a8be264d78e742fa3947afed45373c52163c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:67-71 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:129-133 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:126\u0060 calls \u0060CheckNumericOperand\u0060, \u0060CheckSameLength\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:65\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc89b5d6ed78f95ac0387617827a522090961ba6391e3b4b635a92de004dcd14"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/ManagedOpExecutioner.vb:350-357 | src/DeepLearning4VB/org/nd4vb/linalg/managed/ManagedOpExecutioner.vb:476-482 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/ManagedOpExecutioner.vb"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"45ccfd822cf4d3eec00ed5df461ec1941e83f8c02f7b9d3703b5ce4854783c30"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb:135-140 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb:130-135 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceSameOp.vb:135-140 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 136 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"f302a7e801068bd30b9a64860da327675a249d09b92383184b4acb0d1bd9ac20"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/records/reader/impl/inmemory/InMemoryRecordReader.vb:247-252 | src/DeepLearning4VB/org/datavec/api/records/reader/impl/inmemory/InMemorySequenceRecordReader.vb:293-298 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/datavec/api/records/reader/impl/inmemory/InMemoryRecordReader.vb\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/records/reader/impl/inmemory/InMemorySequenceRecordReader.vb\u0060 as WHOLE FILES: 86% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/records/reader/impl/inmemory/InMemoryRecordReader.vb"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5d564b06e6f276a5c594e43c9d1d8f880512793e8592dc3d71f4a6729de2be8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/analysis/DataAnalysis.vb:70-75 | src/DeepLearning4VB/org/datavec/api/transform/quality/DataQualityAnalysis.vb:74-79 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/DataAnalysis.vb"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"075015620ce6edbdc67ac7f5ef26dea8bac7bf0b6932c5748a066332a27b98f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/sequence/expansion/BaseSequenceExpansionTransform.vb:226-231 | src/DeepLearning4VB/org/datavec/api/transform/stringreduce/StringReducer.vb:235-240 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/sequence/expansion/BaseSequenceExpansionTransform.vb"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aff96a9862b6866602d73a1a8302bfca729f71e5ec1d87c00e1caeaf6118b4b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToOneHotTransform.vb:188-193 | src/DeepLearning4VB/org/datavec/api/transform/transform/integer/IntegerToOneHotTransform.vb:178-183 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToOneHotTransform.vb"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9b0292e082e76355535b8b8bb14f563971df3d44fec016ff6db432da6eda7f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/datavec/local/transforms/AnalyzeLocal.vb:185-190 | src/DeepLearning4VB/org/datavec/local/transforms/AnalyzeLocal.vb:226-231 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/local/transforms/AnalyzeLocal.vb"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e4c9d8e2bcdf0521aaac31631053567bc8aa720173c24a22c62f1d5f149df01"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/IndexReduceKernels.vb:107-112 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/SummaryStatsKernels.vb:113-118 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/IndexReduceKernels.vb:107\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/IndexReduceKernels.vb"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"0de1a59485f5b786df4d13dd3377bb80a7ff6df16a4852f7deb7cbb8724d202f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:94-98 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb:476-480 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ManagedBlas.Level3.vb"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd35352828a12a2a61aec31eb4e863336979e326dbb61fa44b39638bb7a1e017"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:393-397 | src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:425-429 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:393\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:422\u0060 calls \u0060Double\u0060, \u0060CInt\u0060, \u0060InnerStrides\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb:391\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/kernels/ReduceKernels.vb"},"region":{"startLine":393}}}],"partialFingerprints":{"codehealthFindingId/v1":"3569a9443546dcb7e0ed1b7432d852c6b5f9dadb04046e9e1dca70c479e196ff"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u20135 lines \u00D7 5): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformBoolOp.vb:110-114 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformFloatOp.vb:95-99 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformSameOp.vb:105-109 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformStrictOp.vb:94-96 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/MaxOut.vb:104-108 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 5 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 5 times. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformBoolOp.vb"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c20f434c5482c8ff80b12949f42f4cb79d946a27e843bee42bbf9500f5fed53"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/IntegerAnalysisCounter.vb:258-262 | src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/LongAnalysisCounter.vb:251-255 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/IntegerAnalysisCounter.vb\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/LongAnalysisCounter.vb\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/IntegerAnalysisCounter.vb"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bc8c980f575ab82f692cd97710e6a84a9065fa33e15742496fe03805961007d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb:271-275 | src/DeepLearning4VB/org/datavec/api/transform/sequence/window/TimeWindowFunction.vb:242-246 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/sequence/window/TimeWindowFunction.vb\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 33 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fac0c11ffcac5b7f6d866fc052ec81fb1a0c90df16cec6716b991ccedfc27bc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/datavec/local/transforms/LocalTransformExecutor.vb:292-296 | src/DeepLearning4VB/org/datavec/local/transforms/LocalTransformExecutor.vb:300-304 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/local/transforms/LocalTransformExecutor.vb"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"d70af1fa90ea230b72f914543b1a2f8b7592815e24c84295324ea8740e233ef2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseBroadcastOp.vb:180-184 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseScalarOp.vb:187-191 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseBroadcastOp.vb"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"d52f6b93810184e0802ddb18eea01216affb3fe95f49e4b3b019a8af7f85e108"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Conv1D.vb:83-87 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Conv1DDerivative.vb:79-83 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Conv1D.vb"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"f33143289dfcdf6f94df121c8b1742f23ca208b761d91c0dba97c4b512ca7cc1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb:334-350 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling3DConfig.vb:303-319 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling3DConfig.vb\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 81 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv3DConfig.vb"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"41dac99e5e62a75c75d8f6f47da36402aedfc33b533b0393db42706ed2805252"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): src/DeepLearning4VB/org/datavec/api/exceptions/DataVecException.vb:31-43 | src/DeepLearning4VB/org/datavec/api/exceptions/UnknownFormatException.vb:36-44 | src/DeepLearning4VB/org/datavec/api/io/converters/WritableConverterException.vb:34-42 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/datavec/api/exceptions/DataVecException.vb\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/exceptions/UnknownFormatException.vb\u0060 as WHOLE FILES: 84% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/exceptions/DataVecException.vb"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"88628179d4a195c497d8786a9787bf940509e8fd86eafb3c4a649364ee6277b4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (39 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/QualityAnalysisAddFunction.vb:51-89 | src/DeepLearning4VB/org/datavec/local/transforms/analysis/aggregate/AnalysisAddFunction.vb:44-84 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/QualityAnalysisAddFunction.vb"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2496a483b9a2f090c60e452857832eea8814548147fb37eec5d935253dcdd9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (3\u2013102 lines \u00D7 5): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb:163-165 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb:159-161 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/custom/BaseDynamicCustomBoolReduction.vb:40-141 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/custom/BaseDynamicCustomIndexReduction.vb:173-175 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/custom/BaseDynamicCustomLongReduction.vb:40-147 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 136 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb:168\u0060 calls \u0060emptyValue\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceLongOp.vb:164\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceBoolOp.vb"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"140195e00b8da422c6418182bbb064297e7d0ac87bb3c769457f0591fb9aba3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/exception/ND4VBException.vb:33-42 | src/DeepLearning4VB/org/nd4vb/linalg/workspace/ND4VBWorkspaceException.vb:17-25 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/exception/ND4VBException.vb"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"9967c82e1f4c8017eff9bedc54b8bd3cab74f2c45881d69813680a5a41504017"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/records/reader/impl/csv/CSVRecordReader.vb:191-198 | src/DeepLearning4VB/org/datavec/api/records/reader/impl/regex/RegexLineRecordReader.vb:122-129 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/records/reader/impl/csv/CSVRecordReader.vb"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d4d219974a63bf9ca627c3aca1416c356a9d63d7aebab230a01537002ab4c4a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/IntegerAnalysisCounter.vb:58-64 | src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/LongAnalysisCounter.vb:59-65 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/IntegerAnalysisCounter.vb\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/LongAnalysisCounter.vb\u0060 as WHOLE FILES: this scan already matched 3 separate duplicated blocks between them, totalling at least 39 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Note what the matched lines are: every one of them assigns one field to another, so the block is a hand-written mapper between two data shapes rather than behaviour with a helper inside it. Extracting one shared function only works if both sites map the SAME pair of types in the same direction \u2014 check that first, because inverse or differently-typed mappers have no single function they can both call. Where they do not, the moves that exist are a generated or reflective mapper, a common embedded/base type the fields live on once, or accepting the run and covering it with a test that fails when a field is added to one side only."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/counter/IntegerAnalysisCounter.vb"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ee5196a4b2529e7203eb8be4e4f34db2cb2732f8db84ed2257437896b3ff808"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/serde/JsonMappers.vb:434-440 | src/DeepLearning4VB/org/nd4vb/common/config/ND4VBClassLoading.vb:168-174 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/serde/JsonMappers.vb"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"f628ef6b1ab2905c927deabe6594ff1c1713355ef9060f7a92929272fa658863"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 6): src/DeepLearning4VB/org/datavec/api/transform/transform/BaseColumnsMathOpTransform.vb:137-141 | src/DeepLearning4VB/org/datavec/api/transform/transform/column/ReorderColumnsTransform.vb:129-133 | src/DeepLearning4VB/org/datavec/api/transform/transform/condition/ConditionalCopyValueTransform.vb:103-107 | src/DeepLearning4VB/org/datavec/api/transform/transform/condition/ConditionalReplaceValueTransform.vb:93-97 | src/DeepLearning4VB/org/datavec/api/transform/transform/condition/ConditionalReplaceValueTransformWithDefault.vb:117-121 | src/DeepLearning4VB/org/datavec/api/transform/transform/string/ConcatenateStringColumns.vb:104-108 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 6 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 6 times."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/BaseColumnsMathOpTransform.vb"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecf247b700c342dc7f26152a2bd056fd438a084f3c67d8927fceac8e76f48dcb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/transform/BaseColumnTransform.vb:85-98 | src/DeepLearning4VB/org/datavec/api/transform/transform/string/StringListToCategoricalSetTransform.vb:133-161 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/BaseColumnTransform.vb"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef75af8e697f85f592170677562ea9dfa7b8f6a5bf6cd7325496658d7e22569b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 6): src/DeepLearning4VB/org/datavec/api/transform/transform/BaseColumnTransform.vb:157-162 | src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/PivotTransform.vb:219-224 | src/DeepLearning4VB/org/datavec/api/transform/transform/condition/ConditionalCopyValueTransform.vb:125-130 | src/DeepLearning4VB/org/datavec/api/transform/transform/condition/ConditionalReplaceValueTransform.vb:118-123 | src/DeepLearning4VB/org/datavec/api/transform/transform/condition/ConditionalReplaceValueTransformWithDefault.vb:134-139 | src/DeepLearning4VB/org/datavec/api/transform/transform/parse/ParseDoubleTransform.vb:68-73 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 6 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 6 times. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/PivotTransform.vb:227\u0060 calls \u0060toString\u0060 and \u0060src/DeepLearning4VB/org/datavec/api/transform/transform/condition/ConditionalCopyValueTransform.vb:133\u0060 does not \u2014 after which the two agree again for 3 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/BaseColumnTransform.vb"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd7f203d64caa581f6e4cb69ca06706c481412d1691fe9e846d6d03cd8ea2705"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): src/DeepLearning4VB/org/datavec/api/transform/transform/BaseTransform.vb:57-61 | src/DeepLearning4VB/org/datavec/api/transform/transform/column/AddConstantColumnTransform.vb:89-93 | src/DeepLearning4VB/org/datavec/api/transform/transform/column/DuplicateColumnsTransform.vb:127-131 | src/DeepLearning4VB/org/datavec/api/transform/transform/time/DeriveColumnsFromTimeTransform.vb:181-185 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 4 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 4 times. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/BaseTransform.vb"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"97378f93984e13d35d7ec3e41c6d9b55febd5918362ede1c0ffd79a2e204b793"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToIntegerTransform.vb:104-120 | src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToOneHotTransform.vb:129-152 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToIntegerTransform.vb"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"a30605804508103b557da8800969227bbbb7f7dc7f28ecf3bcf93a6eb1b32adf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToOneHotTransform.vb:103-122 | src/DeepLearning4VB/org/datavec/api/transform/transform/integer/IntegerToOneHotTransform.vb:95-114 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/categorical/CategoricalToOneHotTransform.vb"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"9cfcc78627f44c0f26ab51084cff133d0abdffaa25c905c6f2f6ef7216d93e1c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:1573-1578 | src/DeepLearning4VB/org/nd4vb/linalg/api/shape/Shape.vb:1270-1274 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb"},"region":{"startLine":1573}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2c6e360aecaae1ef47533db8da3652e1115823f3ff5c6e5617df64c2d2818ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb:1682-1686 | src/DeepLearning4VB/org/nd4vb/linalg/util/LongUtils.vb:45-49 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/util/ArrayUtil.vb"},"region":{"startLine":1682}}}],"partialFingerprints":{"codehealthFindingId/v1":"68a12556f79f90011369ee4358a7fed9696d163c3ef034518aaea902bca84a47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseBroadcastBoolOp.vb:141-146 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseBroadcastOp.vb:137-142 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseBroadcastBoolOp.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseBroadcastOp.vb\u0060 as WHOLE FILES: 84% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseBroadcastBoolOp.vb"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"73c6d4586f60351a4bd5c3442c4061dc696e1b9ce5f7cc53463a65c18bd1ce12"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceFloatOp.vb:124-129 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/summarystats/Variance.vb:450-454 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseReduceFloatOp.vb"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"58a153c4005d3a114d2885d8c49439cb4a3a98866b1e15bee0aafe90038ee2e9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseScalarBoolOp.vb:99-105 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformBoolOp.vb:130-134 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformFloatOp.vb:115-119 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformSameOp.vb:125-129 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 4 call sites, so a change lands once. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseScalarBoolOp.vb"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"69991807b1747834cb127a7651daaba07fd609fe1b42e650cf2fe1e3bd8e4d0f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/image/ResizeArea.vb:105-109 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/image/ResizeBilinear.vb:111-115 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/image/ResizeArea.vb"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"f64815f24e18d4fcb07db5e7ac6eedc6859a7dcaeb78978bee2406fc4fcc55d8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DepthToSpace.vb:68-72 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/SpaceToDepth.vb:68-72 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DepthToSpace.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/SpaceToDepth.vb\u0060 as WHOLE FILES: 82% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DepthToSpace.vb"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"f70e937c2e27450e92a17183f0742ed8cfaa52da2e750d61ecf169daa1e2dbc3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DepthwiseConv2D.vb:109-118 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DepthwiseConv2DBp.vb:78-87 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/DepthwiseConv2D.vb"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"40623dbe6fad4e4d201d26841e897f16bf7f27dba4a187498a956ab67143f378"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumProdBp.vb:50-56 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumSumBp.vb:50-56 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumProdBp.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumSumBp.vb\u0060 as WHOLE FILES: 95% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 2 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just after the matched lines, \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumProdBp.vb:59\u0060 calls \u0060New\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumSumBp.vb:60\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumProdBp.vb"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5bb9c17247e881f14b68721764c0603303346beaf9007d0e613c134b8f3efcf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumProdBp.vb:85-89 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumSumBp.vb:85-90 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumProdBp.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumSumBp.vb\u0060 as WHOLE FILES: 95% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 2 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. \u2605 These copies have DRIFTED, and that is worth reading before extracting anything: just before the matched lines, \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumSumBp.vb:81\u0060 calls \u0060New\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumProdBp.vb:80\u0060 does not \u2014 after which the two agree again for 2 more lines. One of those two behaviours is the intended one and the other is what a copy-paste left behind, so decide which BEFORE unifying them: extracting the shared part will silently settle it, and if the copy that skips the call is the wrong one, that bug is already live."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/bp/CumProdBp.vb"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e83c07b723d8ae582035ddc36f1c7dcd3bcbe090b4f82a75d4754c4e489cab7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/Create.vb:130-136 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/OnesLike.vb:118-124 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/ZerosLike.vb:118-124 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from all 3 call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/Create.vb"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"f52eb55f0c23c1954b13fc0694c45dd30d744c3872e250312bbfc20bf2dc5ee3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/MergeMax.vb:90-96 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/MergeSum.vb:100-106 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/ParallelStack.vb:83-89 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/Stack.vb:135-141 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/MergeMax.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/MergeSum.vb\u0060 as WHOLE FILES: 85% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/MergeMax.vb"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"6587d261e137502ecc160c3ade0b9be04230feab86c7c04af8bb89efdf799f84"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/comparison/CompareAndReplace.vb:97-102 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/comparison/CompareAndSet.vb:164-169 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/comparison/CompareAndReplace.vb"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"700ded890df0bbec59028630ca1e53c70e4040b1f91bb34d755619478bf30837"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 4): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/segment/UnsortedSegmentMax.vb:73-77 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/segment/UnsortedSegmentMean.vb:69-73 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/segment/UnsortedSegmentMin.vb:73-77 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/segment/UnsortedSegmentSum.vb:73-78 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/segment/UnsortedSegmentMax.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/segment/UnsortedSegmentMean.vb\u0060 as WHOLE FILES: 86% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/segment/UnsortedSegmentMax.vb"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a25dfdd5dde904f41941fd8c82e84958ed23f178fe5e1e30c637c3eef2fd93c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb:261-267 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb:231-237 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling2DConfig.vb:277-283 \u2014 before extracting anything, compare \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb\u0060 and \u0060src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/DeConv2DConfig.vb\u0060 as WHOLE FILES: this scan already matched 5 separate duplicated blocks between them, totalling at least 61 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Conv2DConfig.vb"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"66bfafbfcfab51103c291c6c9a32ec863365b1484439f16d1b2727dd08635c7f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Conv1D.vb:99-103 | src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Conv1DDerivative.vb:95-99 \u2014 the copies sit in sibling files of one directory, so a shared home is within easy reach: extract the block into a single shared function the call sites can all reach \u2014 a file they already depend on, or a new one alongside them \u2014 and call it from both call sites, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/Conv1D.vb"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"b13440e8493a3ae078634b2b29e8db5b83d9ca5926750e346ac21ef49038ff33"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): tools/porting/convert_ops.py:478-482 | tools/porting/convert_ops.py:506-510 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tools/porting/convert_ops.py"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7f8012b551a8194219754468096bb87ceeec46f03f4d4078f6026b6c57b8be8"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DefaultOpExecutioner (LCOM4 12): DefaultOpExecutioner\u0027s methods fall into 12 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 12 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"502aa0f18656cff6b9fa4fd1fa4dfbd227ca22767c2af6ef74095017c773a209"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Builder (LCOM4 8): Builder\u0027s methods fall into 8 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 8 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/columns/StringAnalysis.vb"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"d16f8c295263447765d45c8035c18c4b334804f968dce00d183124d770230646"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Builder (LCOM4 8): Builder\u0027s methods fall into 8 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 8 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/ui/components/RenderableComponentTable.vb"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"d99f06e7f44be7be823c0537252564fe076656c795e31d4f9052fd5d732d639a"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Builder (LCOM4 6): Builder\u0027s methods fall into 6 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 6 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/records/mapper/RecordMapper.vb"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"f888f674139b2b2ee306718bd2dfac46f2175f7cab0e846bc50396ce71345c48"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Builder (LCOM4 5): Builder\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/columns/BytesAnalysis.vb"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"57c60af453fe85717bca1e2e297e5a8232c21868d1f93e03d0d9dc75e89aafad"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Builder (LCOM4 5): Builder\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/sequence/window/OverlappingTimeWindowFunction.vb"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ca11d7f1d5a4b21a2d30406fd370a914cade7541099a8c605370c34d453606e"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Builder (LCOM4 5): Builder\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/sequence/window/TimeWindowFunction.vb"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"1edebcf506693e8782f972f747b37b8090494597069c5a24e60106b9fa1eff6a"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Builder (LCOM4 5): Builder\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/stringreduce/StringReducer.vb"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"eefb9bdcf3793ffae9a6832f141faf79bb59d8ae66801c6310f6a645a830ee15"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: Builder (LCOM4 5): Builder\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/ui/components/RenderableComponentLineChart.vb"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab817fc7fd35981876205a46c855b3f85026155f0d93300e4eaa359f3ba2e574"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: BaseOpContext (LCOM4 5): BaseOpContext\u0027s methods fall into 5 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 5 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseOpContext.vb"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"39b0f99058f9878c9201d31932d279782aa303f6e4dd6428609c083a5dc8c540"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: FileSplit (LCOM4 4): FileSplit\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/split/FileSplit.vb"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0d1126c775521212d55371f787a8d6c5835cbfaed0b7f6885f12223456895ba"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: BaseScalarBoolOp (LCOM4 4): BaseScalarBoolOp\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseScalarBoolOp.vb"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"332cf0a40ed405a58756ddfe9e0c965b2d83c9bc896e58923aefc7bc76f47600"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: BaseScalarOp (LCOM4 4): BaseScalarOp\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseScalarOp.vb"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b1736a954e4ad3192203e82c9e1fe481b7e40577065ae98dcc6b963ab480fa9"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: DynamicCustomOp (LCOM4 4): DynamicCustomOp\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/DynamicCustomOp.vb"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1f76943553ad346fb733bff7e9bc12e279042042c86a2f1561064b16dbb902a"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ManagedOpExecutioner (LCOM4 4): ManagedOpExecutioner\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/ManagedOpExecutioner.vb"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccc8105d766ad591c9db8a0f2de5aad9fd0165c323b4b0f7653a65429069fbbf"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: ManagedMemoryManager (LCOM4 4): ManagedMemoryManager\u0027s methods fall into 4 groups that share no field and call none of each other, against a bar of more than 3 for this run (LCOM4, configurable \u2014 your repository\u0027s bar is the one quoted here). Each group is a set of methods reachable from one another through shared fields or direct calls, so 4 groups means the type has that many internally-connected clusters with nothing tying them together. Types whose shape makes a high count expected \u2014 and which would otherwise dominate this list \u2014 are excluded before this row is raised, so this is a genuine split candidate rather than a metric reading. It is still a shape, not a defect: confirm the groups match responsibilities you can name before splitting."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/managed/memory/ManagedMemoryManager.vb"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8c6f4054d308680d0fe8fc5fbf0512306e49ff05bb5885699d32a71a628a3b9"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured \u2014 no coverage collector is wired up: Coverage NOT MEASURED: \u0060--collect:\u0022XPlat Code Coverage\u0022\u0060 names a data collector that ships in the \u0060coverlet.collector\u0060 package, and this repository wires up none \u2014 no test project references it and no runsettings declares one. The absence of coverage here is therefore not evidence about the suite or about our analyzer environment: without a collector, \u0060--collect\u0060 produces nothing even from a suite that builds and passes. Add a \u0060coverlet.collector\u0060 PackageReference to the test project(s) (or commit the Cobertura/OpenCover/lcov report your CI produces) and real coverage will be measured. It is excluded from the score rather than counted as a near-zero defect."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62e63e619c28f057e129f2997c965d32a457366a9ce18ca019ffb6bdfba85c99"}},{"ruleId":"D12","level":"warning","message":{"text":"Deprecated: MSTest.TestAdapter: MSTest.TestAdapter 3.6.4 \u2014 Legacy"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/DeepLearning4VB.Tests/DeepLearning4VB.Tests.vbproj"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee87da37b644f339f553a0b6c3bf2f114f23a951f9421d14ed870e71f7ad60e3"}},{"ruleId":"D12","level":"warning","message":{"text":"Deprecated: MSTest.TestFramework: MSTest.TestFramework 3.6.4 \u2014 Legacy"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"tests/DeepLearning4VB.Tests/DeepLearning4VB.Tests.vbproj"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"b69cdd194a49be37271a696938cb22ebf3e9388aead8d7b5e3d69a29082d5e0d"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Record it through whatever this codebase already uses to report problems, or let it propagate. Where swallowing one specific failure really is correct \u2014 as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 catch exactly that exception type and write down WHY in a comment on the catch. Both are needed: a comment on a catch-all still swallows every failure nobody anticipated, and a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/conf/Configuration.vb"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b3d6a01acb791b28348041a82cf28cb24c06629912bc57fe0395dd2eff7dca9"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Record it through whatever this codebase already uses to report problems, or let it propagate. Where swallowing one specific failure really is correct \u2014 as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 catch exactly that exception type and write down WHY in a comment on the catch. Both are needed: a comment on a catch-all still swallows every failure nobody anticipated, and a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/records/reader/impl/csv/CSVSequenceRecordReader.vb"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3de963caf63f9ccbb9aab558175fbc9dd04a1dc7ec5e85bced60903ff2963e5"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Record it through whatever this codebase already uses to report problems, or let it propagate. Where swallowing one specific failure really is correct \u2014 as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 catch exactly that exception type and write down WHY in a comment on the catch. Both are needed: a comment on a catch-all still swallows every failure nobody anticipated, and a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/records/reader/impl/jackson/JacksonLineSequenceRecordReader.vb"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"cec42d4d92f4f8ef6f7cd1ec4ab1ffb537e2c61d03b842790be7f3854cc22f44"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Record it through whatever this codebase already uses to report problems, or let it propagate. Where swallowing one specific failure really is correct \u2014 as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 catch exactly that exception type and write down WHY in a comment on the catch. Both are needed: a comment on a catch-all still swallows every failure nobody anticipated, and a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/serde/JsonMappers.vb"},"region":{"startLine":332}}}],"partialFingerprints":{"codehealthFindingId/v1":"899d4e7aaa57c027dd34ec4966652dd6ad8a9becb42da59980c36b820ad768d6"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Record it through whatever this codebase already uses to report problems, or let it propagate. Where swallowing one specific failure really is correct \u2014 as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 catch exactly that exception type and write down WHY in a comment on the catch. Both are needed: a comment on a catch-all still swallows every failure nobody anticipated, and a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/serde/JsonMappers.vb"},"region":{"startLine":401}}}],"partialFingerprints":{"codehealthFindingId/v1":"e43b12bc685cd5c1ccd378def59a29f15e237f1eaabad4991bc36f07434dc382"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Record it through whatever this codebase already uses to report problems, or let it propagate. Where swallowing one specific failure really is correct \u2014 as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 catch exactly that exception type and write down WHY in a comment on the catch. Both are needed: a comment on a catch-all still swallows every failure nobody anticipated, and a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/time/StringToTimeTransform.vb"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"35158d50e9c8dbc8bd50af836bd7ed19f55c4a66e678ec9d9834a2636f429f28"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Record it through whatever this codebase already uses to report problems, or let it propagate. Where swallowing one specific failure really is correct \u2014 as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 catch exactly that exception type and write down WHY in a comment on the catch. Both are needed: a comment on a catch-all still swallows every failure nobody anticipated, and a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/config/ND4VBClassLoading.vb"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"a295d6b4b754c22de199400d5415440508b78648b36f4088fb8de26cca5764ae"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Record it through whatever this codebase already uses to report problems, or let it propagate. Where swallowing one specific failure really is correct \u2014 as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 catch exactly that exception type and write down WHY in a comment on the catch. Both are needed: a comment on a catch-all still swallows every failure nobody anticipated, and a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/resources/Downloader.vb"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9db392d2a0591bdd96af7da88d7870af0af470f5e39f712bf1beea4272316a0"}},{"ruleId":"D17","level":"error","message":{"text":"EmptyCatchBlock: empty catch block \u2014 the error is discarded with nothing recorded, so a failure here leaves no trace anywhere. Record it through whatever this codebase already uses to report problems, or let it propagate. Where swallowing one specific failure really is correct \u2014 as it often is on a teardown/dispose path where throwing would mask the original failure \u2014 catch exactly that exception type and write down WHY in a comment on the catch. Both are needed: a comment on a catch-all still swallows every failure nobody anticipated, and a note that only restates the swallow (\u0022ignored\u0022, \u0022do nothing\u0022) is read as no explanation at all."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/resources/strumpf/ResourceFile.vb"},"region":{"startLine":220}}}],"partialFingerprints":{"codehealthFindingId/v1":"a742949dd98643c4b193f18da50905d6b723f541ad527c7b07e2e9ce082e9f71"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO handle multi file case... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/records/reader/impl/csv/CSVNLinesSequenceRecordReader.vb"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"f49210e152bad02bf5215b2d4203be9ac87512ea9ee06ad6cd3c5e8daa050df8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO this won\u0027t work if regex allows for a newline \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/records/reader/impl/regex/RegexSequenceRecordReader.vb"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"22db87d72cc34f940c83afd9bcf60570b4349ce7da25a07df549ea5fe86fc6c5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/analysis/quality/QualityAnalysisAddFunction.vb"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"6013ccc4b564f7c96ffd00950ad30cf276e4606a10b119ef165012edfa3ba8de"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/local/transforms/analysis/histogram/HistogramAddFunction.vb"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5ac751294aa63fa49a0c14b074306367f76aae5f32f649bb75f57cb443f7612"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E setKeyColumns"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/join/Join.vb"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"3894e8bb7651c86a69cce52782a85a5556b2de32ed99a4f3de54ac3304dd1f11"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E setKeyColumnsLeft"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/join/Join.vb"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"b876fdb84a3c1892c99f63c6361f15d6a4610b2d17f3e11d70275e35aa240994"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E setKeyColumnsRight"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/join/Join.vb"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"faa74925ea38a755ebc8e06814b8ea6c0de827867bf08ad1a160565377cbf883"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO safter to copy here... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/column/DuplicateColumnsTransform.vb"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"1345ca793cd2c5bd3f3bf5bba4d30760e22536ebb5b340f6bae806c47a689cf2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: ranges... if it\u0027s a day, we know it must be 1 to 31, etc... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/transform/transform/time/DeriveColumnsFromTimeTransform.vb"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0bd784b8b6a404ec06669f594365cdcf411f14e6f9f523832e969bb8edce442"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E ClassPathResource"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/util/ClassPathResource.vb"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e934394b01e1e26d6336b157bec58910d28e3ea4027c70768fd78429de859f1"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E .ctor"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/util/ClassPathResource.vb"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"af90da217a80bcdc1e3b94c337fb781e7dd69d0b7ec3180593b52481bbc2c38c"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E ReflectionUtils"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/util/ReflectionUtils.vb"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"36fbc0af900109239194df1d8a165a134bbdf9d9df48fab17ae8a1663ac62602"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #Disable Warning SYSLIB0050 \u2014 the disable is closed again below, so its scope is not the problem; what it records is no reason: there is nothing on the directive line, and no ordinary comment attached to it either side. A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited and it outlives the code it was written for. Put the reason on the directive line \u2014 what makes this site legitimately different \u2014 or fix what the rule is pointing at and delete the pair. A rationale in the member\u0027s documentation comment does not clear this row and is not meant to: it explains the member to its callers, and the next person to touch the suppression is not reading it for that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/common/util/ObjectGraphSerializer.vb"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"53d24b8e4637274c251d8f95eff7618483778b54692b4e0025c0ca40ba504a98"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027     TODO: consider doing this in place to save memory. This implies U is taken out first \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/blas/impl/BaseLapack.vb"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"807e83682d3aae58d62b0b07d36d991782cc93d789fd7d5ebc505620c8544668"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: add nrm2 for half, as call to appropriate NativeOp\u003CHALF\u003E \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/blas/impl/BaseLevel1.vb"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ffef0647b82f2f86f45c7d0d71b3dcd30eb8bb66f6b8910ea94c80382d6636d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: provide optimized GEMV kernel eventually \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/blas/impl/BaseLevel2.vb"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"add3bbde707397663af83f3b94522aef2bdcb9541306dc288e1940c22f58ac25"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: \u0027 FIXME (Java): this is BAD. it takes too long to work, and it breaks general equals contract \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/buffer/BaseDataBuffer.vb"},"region":{"startLine":746}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bfd89887878f250db0fb925981307209ab0a118791fe6c6682c82806f08d974"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: \u0027 FIXME: long! \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/iter/LinearIndexLookup.vb"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2b6934c0b34dfe1624df26657181af864b539f8301d877c2873e39565ed3e03"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: Unused untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"835b355c71edb763bbe4304f40b80cf845ef2a73737bd1d03b02e23a1c59aa0e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: Unused untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"26f17c77d89cd45fb99a2ce7e55e96a1f21482ddb36988e9d9554312b62a483d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: Unused untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"077e80fc215605868a8950bb9e9267cf6d88dd84bc66baf0f186ed37d669034e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: Unused untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":1874}}}],"partialFingerprints":{"codehealthFindingId/v1":"8629f3720d26084eba13278848f044a5c96e76898982e95b63e422e09c92115f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: Unused untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":2231}}}],"partialFingerprints":{"codehealthFindingId/v1":"02f37b5365e60e9da9f5851c094b806e6dfd8233481be851f0928820bfb8f3d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: Unused untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":2238}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8b66b5324e73ee59433e04ee45a0a47f721f223a25fe6f80ad05ffdac869545"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: Unused untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":2273}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf4e6a836656245ff0f6381fe40cbc1e96d803aa3dbcc33ff9299848080b0e0b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: Unused untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":2280}}}],"partialFingerprints":{"codehealthFindingId/v1":"ded8f9f4d4273cc93685b0ccba17d9915b8b3650a0e7c06afcacf678ca71bd31"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: revisit after #8166 is resolved."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"992a3e1044b10cf522143ddf3e4f083059aa970cac1f6dd008e4ad3b08258024"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: revisit after #8166 is resolved."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"357500f46ed05847f7c73a7fc3b92a39aa7c1bf568a2647eb3f44255b922aece"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: unused / untested method. (only used to forward calls from putWhere(Number,INDArray ,Condition). \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":619}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a25df2b01f2aaaaf92864804e71ff81d983c1fe9209abfacad7f3e8da62eb07"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: unused / untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":628}}}],"partialFingerprints":{"codehealthFindingId/v1":"58e8ef699f4bdde917374863f54ac20227d5f8478e44f327ce6798ccb70a80db"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: unused / untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":645}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddff34bdff58cdde8d6b2460f7a3cfc902c492bb158be6d21f679002d43e4aff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: unused / untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":653}}}],"partialFingerprints":{"codehealthFindingId/v1":"406bdcebb21e59a69660d513c40dde690c55142524c10e01017240a641977855"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: unused / untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e7ba853b632cf7fc843c82465ea7fb8599f03d4375199803f2b38c977b2e9d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: unused / untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":963}}}],"partialFingerprints":{"codehealthFindingId/v1":"a997a5eb30f57c9d727c1f3d58612584698e6ac32af20466462509ccfb7f6ed1"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: unused / untested method. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":1020}}}],"partialFingerprints":{"codehealthFindingId/v1":"7426955806d8dc2c115ce56c450fa93b0b6fe568d060020ddb199aa9c66aef61"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: unused / untested method. (only used to forward calls from  other putWhereWithMask implementations. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":637}}}],"partialFingerprints":{"codehealthFindingId/v1":"e630b9969f16f1031deecf417782024c209d7b5b308d801378ddc989dbb287bd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO: unused / untested method. only used recursively. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf1ade89f0eea5d97cf60c8507c861a4bcab8015e6845c2cb6591204615d0a9a"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E repmat"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":793}}}],"partialFingerprints":{"codehealthFindingId/v1":"a87dd71edf03e90ee958ab6726842f78369e1f3c660777f84d8ef09be65e41d2"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO is this what we want for all cases? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/BaseTransformFloatOp.vb"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"897c20000713706e2b1ebdd25ffb26575257e6492eadeebbc692331dc8f857ed"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: \u0027 FIXME: Remove this method, after we\u0027ll add support for \u003Cint\u003E dtype operations \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"81afebd66c9f537b11573fe520b8fb9c7daf1a161805c43f16c9d2903f99008f"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E setProfilingMode"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"56679f806dc62a258c25b0395d44b9eb850afcc379d7fd1f15f4c7736d9aed22"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E getProfilingMode"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/DefaultOpExecutioner.vb"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c78198f04deadc43f4851b55710db9c7589a6b538efb232de97e9c335d0c291"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO allow this to be configured \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/controlflow/Where.vb"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"124346e32d8641817a890daa9d359611ab93e9959e8f0f6f2558245b2c2b55c6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO check other args? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling2DConfig.vb"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"58cfab1f1fc51f1744d884087bee1557622c95cd1a4ca98fa1fefaf62d24ab83"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO check other args \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/layers/convolution/config/Pooling3DConfig.vb"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ef8409802a39902b45abb9bf8cc552b6204dd8e85052b8d899b33aeea74623d"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: \u0027 FIXME \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce/SufficientStatistics.vb"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6e491f851a7a17489a62d9dafca1f41474742fea4e4f8cc8014575784b00d1f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027Output data type: always float. TODO let\u0027s allow configuration... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/reduce3/BaseReduce3Op.vb"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"286bc7c3ac3ba9946392b662e162021c63bd6061eb36cbba191f1d3fcd6dec3e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO TF allows customizing int or long \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/ShapeN.vb"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"264f0f95763d9aaca911d5b752ca40818102ce3516f9cc8816709447271fe8cd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: libnd4j currently doesn\u0027t support \u0022num\u0022, number of outputs is inferred. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/Unstack.vb"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"e89195ebab29da17cab86a93c0574a4dc9bf2653a5d93742e34b8e8309834599"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO work out exactly what this second output is for (it\u0027s used in TensorArrayWrite for example... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/shape/tensorops/TensorArray.vb"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ec5312b37962f7879c964f2301f006e3a1d619e10ae4d074b11b7eff39376a5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO MAKE CONFIGURABLE \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/HistogramFixedWidth.vb"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcf85cef18c21de76ff715cd6b02944ddda66e955eae8d13a3515ac0dfa07776"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: Still check. y cannot be null, must be same shape as x. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/Assign.vb"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b27f8ba308db6a2d5f5e3e1aedfa7682cf2fa1df809ea81853e586940c1944b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO; This needs fixing. \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/DynamicPartition.vb"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"10c6211ebeb68c2be75e96c887c4859dad4ba49af068c5bccd868338d8958f19"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO make this configurable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/ListDiff.vb"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a1828d0d808a42aef60806dddc841d884d2b7dce51a0f24c0fde7e8a3c15231"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO make thit configurable \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/TopK.vb"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"719adb05617de9024a22af53a1b904f5cbc351dbac62e03acc628f12652e15cc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO TF output tensor has same type as input... but that doesn\u0027t make sense integer input types... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/custom/segment/SegmentMean.vb"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8b2ea8f90c73deed59ecf420f593558a451ce44beba39b85c83cfa374a52037"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO Allow customizing output type \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/impl/transforms/segment/UnsortedSegmentSum.vb"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"324b48dd8089f21fc2a0f082c78df72706ba8d4b261c7af610b373e95a4a1606"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: \u0027 FIXME: why the hell we need this? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/random/compat/RandomStandardNormal.vb"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ec188284846b0b8fabe1638b6e79ba24c40402dc1b4c8b297286cae9515af35"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO MAKE CONFIGUREABLE - https://github.com/eclipse/deeplearning4j/issues/6854"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/random/compat/RandomStandardNormal.vb"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"72cd949b119b7ef4c198fff4d19e2e82b7db45dbf9d882926068a82fd683f53f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO MAKE CONFIGUREABLE - https://github.com/eclipse/deeplearning4j/issues/6854"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/random/custom/RandomBernoulli.vb"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4dc11436cc5d191541440381a2901c2dc638e9694f0c4bbcdadca42c2b3e6f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO MAKE CONFIGUREABLE - https://github.com/eclipse/deeplearning4j/issues/6854"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/random/custom/RandomExponential.vb"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"15007598886f85b67d6ea041f01baa6d685ca04373f741f236f8e4ca4c63fb2b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO MAKE CONFIGUREABLE - https://github.com/eclipse/deeplearning4j/issues/6854"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/random/custom/RandomNormal.vb"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"ece478b4e723c3a5a6f00858cc029aeb96773e3710f9aa03c31a761f4d42565b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO MAKE CONFIGUREABLE - https://github.com/eclipse/deeplearning4j/issues/6854"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/random/impl/BernoulliDistribution.vb"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"a41d8cd227763c5bfdb08056e849179154902005ff8f62e476999d30af9ae6ac"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO MAKE CONFIGUREABLE - https://github.com/eclipse/deeplearning4j/issues/6854"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/random/impl/BinomialDistribution.vb"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"8af2d544150250df50ff8d9005ff8dabe18b7fa79ffc344605b09a43736c5024"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO MAKE CONFIGUREABLE - https://github.com/eclipse/deeplearning4j/issues/6854"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/random/impl/TruncatedNormalDistribution.vb"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"031bd1d6d0f4ce092de6c2653f2ca6248dfbb108f4279776eb0e984900df887f"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO MAKE CONFIGUREABLE - https://github.com/eclipse/deeplearning4j/issues/6854"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/random/impl/UniformDistribution.vb"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"64888e60a20b142a2a8ff14aa23ccae7bc17c62091fa0c3c94e914a876a47961"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E getOffset"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/shape/Shape.vb"},"region":{"startLine":967}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd56257274a0010f513c16f676fa16215703cea8116d224873f22f03f143bbfa"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: change this to fill shapeInfo \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/cache/TadDescriptor.vb"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"99539e4155b3386b5d86ccfb490513ca77aa8e2ad990ecce35a0d54aef436ddf"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: eventually we want FLOAT16 here \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/compression/CompressionUtils.vb"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"5af905ffa714252169bbd82116ae29d6a9f2028ad7c0fa36033b9ce2d332a216"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: \u0027 FIXME (Java): get rid of direct variable access eventually!!1 \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/env/impl/NDArrayUnpackAction.vb"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd5d15609a20aea410854f60a90b967a2e35dd580ea1ef5fedebc6adb471e54b"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: \u0027 FIXME: LONG \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/indexing/Indices.vb"},"region":{"startLine":249}}}],"partialFingerprints":{"codehealthFindingId/v1":"8128bddd9e7de23bd0e5655fb5b19debded9d5b98d49a4b4623a292fb97f4771"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO: to be implemented \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/profiler/OpProfiler.vb"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0c78c0bb98fe95a6dcc43c3fc1c02afc856d2e09162cad92933c5936d595073"}},{"ruleId":"D17","level":"warning","message":{"text":"HackComment: \u0027hack fix for slice issue with \u0027f\u0027 order \u2014 a workaround marked in source: record what it is compensating for and what would allow its removal (the upstream fix, the API it is waiting on, the invariant it restores), so the next reader can judge whether it is still needed rather than rediscovering why it is there."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/string/NDArrayStrings.vb"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"749f49d68d89043f4ca7825f5c300089624512292c864c7bc1a35198543f5b63"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #Disable Warning BC40008 \u2014 the disable is closed again below, so its scope is not the problem; what it records is no reason: there is nothing on the directive line, and no ordinary comment attached to it either side. A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited and it outlives the code it was written for. Put the reason on the directive line \u2014 what makes this site legitimately different \u2014 or fix what the rule is pointing at and delete the pair. A rationale in the member\u0027s documentation comment does not clear this row and is not meant to: it explains the member to its callers, and the next person to touch the suppression is not reading it for that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/util/FeatureUtil.vb"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"10102fade17b948ebfcdce7647ab6d4371a1a673315947d95ec76b27003bf778"}},{"ruleId":"D17","level":"warning","message":{"text":"BarePragmaDisable: #Disable Warning BC40008 \u2014 the disable is closed again below, so its scope is not the problem; what it records is no reason: there is nothing on the directive line, and no ordinary comment attached to it either side. A suppression is a decision somebody made, and without the reason the next reader cannot tell a considered exception from an unexamined one, so it is never revisited and it outlives the code it was written for. Put the reason on the directive line \u2014 what makes this site legitimately different \u2014 or fix what the rule is pointing at and delete the pair. A rationale in the member\u0027s documentation comment does not clear this row and is not meant to: it explains the member to its callers, and the next person to touch the suppression is not reading it for that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/util/FeatureUtil.vb"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"beb3066fafd740ea4c9e117b51aa7e12c13a4f47ef0ab753004e26b2ce408d90"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E NDArrayUtil"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/util/NDArrayUtil.vb"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7fdfc88a5f54efe09660438a9de98448a9c62b39be444e76c5f9e8e5405887b"}},{"ruleId":"D17","level":"warning","message":{"text":"ObsoleteWithCallers: \u003CObsolete\u003E toNDArray"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/util/NDArrayUtil.vb"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8202884c15ba8ce437c1a0b460655b075468592e2d2b25de0632b9c630db2e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO let\u0027s do this without reading the whole thing into memory - check header \u002B length... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/util/Nd4vbValidator.vb"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"848b292a9af5f792151fe7381673917759f17b12136cdbc0d9213ebb8d358328"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO let\u0027s do this without reading the whole thing into memory - check header \u002B length... \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/util/Nd4vbValidator.vb"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb27166c4c259eb7e68b7e1199a766255ac61ffe00dac5653475933535bf8fec"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027TODO let\u0027s do this without reading whole thing into memory \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/util/Nd4vbValidator.vb"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"508a65a96f3812b613259d359bb2ac0d40a24e0f699cc05b14239a0d7cc0234f"}},{"ruleId":"D18","level":"warning","message":{"text":"Build failed: The target solution did not build cleanly (errors: 68), which caps Solution Shape at 3/10 \u2014 the most basic shape signal is that it compiles. First errors: BC30518: Overload resolution failed because no accessible \u0027createUninitialized\u0027 can be called with these arguments:; BC30518: Overload resolution failed because no accessible \u0027create\u0027 can be called with these arguments:; BC30456: \u0027Random\u0027 is not a member of \u0027Nd4vb\u0027.; BC30002: Type \u0027ManagedNDArray\u0027 is not defined.; BC30456: \u0027factory\u0027 is not a member of \u0027Nd4vb\u0027.."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"24ff41d1fc14d3a19b969001a7e9697d13d34fc0453d84646f56c980eff97f2b"}},{"ruleId":"D19","level":"note","message":{"text":"Documentation: no architecture or design documentation: The PHASE2_DESIGN.md architecture doc is excellent but it is not referenced in any document, leaving readers who skim the root README unable to find where the managed ND4VB tensor engine and its op-inventory tables are documented. Link PHASE2_DESIGN.md from the root README so a reader can navigate directly to the design of the managed backend."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"README.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"086460f2da112d94904fac5439f54a7780bc7778ff9375a067e428a1cc9a8a4c"}},{"ruleId":"D26","level":"note","message":{"text":"Split DeepLearning4VB(net481): A deep learning framework whose namespaces are all ops implementations and data APIs for one domain, so it is a huge grab-bag. Suggested: "},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ba8e9e6894668a9d1fbacb284b90002f55f0c12d2e943d2478d336e0e0def6bf"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Table(Of R, C, V) (19 members): \u0060Table(Of R, C, V)\u0060 declares 19 members: \u0060contains\u0060, \u0060containsRow\u0060, \u0060containsColumn\u0060, \u0060containsValue\u0060, \u0060get\u0060, \u0060isEmpty\u0060, \u0060size\u0060, \u0060clear\u0060, \u0060put\u0060, \u0060putAll\u0060, \u0060remove\u0060, \u0060row\u0060, \u0060column\u0060, \u0060cellSet\u0060, \u0060rowKeySet\u0060, \u0060columnKeySet\u0060, \u0060values\u0060, \u0060rowMap\u0060, \u0060columnMap\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/JavaCompat/Table.vb"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"d01786deba688691e382a2b18ba9f623a96501d8f0538c2075abf82b07e12109"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: RecordReader (16 members): \u0060RecordReader\u0060 declares 16 members under just 12 distinct name(s): \u0060initialize\u0060, \u0060initialize\u0060, \u0060batchesSupported\u0060, \u0060next\u0060, \u0060next\u0060, \u0060hasNext\u0060, \u0060Labels\u0060, \u0060reset\u0060, \u0060resetSupported\u0060, \u0060record\u0060, \u0060nextRecord\u0060, \u0060loadFromMetaData\u0060, \u0060loadFromMetaData\u0060, \u0060Listeners\u0060, \u0060setListeners\u0060, \u0060setListeners\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. That is an OVERLOAD SET, not 16 separate responsibilities: a caller binds to 12 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 16 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/datavec/api/records/reader/RecordReader.vb"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"41a15c5f64409b656122bfc504cece139b90dde4ff82d97ae81b3d1716ec488b"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Level1 (19 members): \u0060Level1\u0060 declares 19 members under just 13 distinct name(s): \u0060dot\u0060, \u0060dot\u0060, \u0060nrm2\u0060, \u0060asum\u0060, \u0060asum\u0060, \u0060iamax\u0060, \u0060iamax\u0060, \u0060iamax\u0060, \u0060iamin\u0060, \u0060swap\u0060, \u0060copy\u0060, \u0060copy\u0060, \u0060axpy\u0060, \u0060axpy\u0060, \u0060rotg\u0060, \u0060rot\u0060, \u0060rotmg\u0060, \u0060scal\u0060, \u0060supportsDataBufferL1Ops\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. That is an OVERLOAD SET, not 19 separate responsibilities: a caller binds to 13 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 19 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/blas/Level1.vb"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"535fd3603791971f5dcf183c09a925842c2ee60d335028052b12646b1068271b"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Level2 (16 members): \u0060Level2\u0060 declares 16 members: \u0060gemv\u0060, \u0060gbmv\u0060, \u0060ger\u0060, \u0060sbmv\u0060, \u0060spmv\u0060, \u0060spr\u0060, \u0060spr2\u0060, \u0060symv\u0060, \u0060syr\u0060, \u0060syr2\u0060, \u0060tbmv\u0060, \u0060tbsv\u0060, \u0060tpmv\u0060, \u0060tpsv\u0060, \u0060trmv\u0060, \u0060trsv\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/blas/Level2.vb"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2216d0699a2aac27558c6b1e893a86a6a0f0e9565bbc93b832dd78d929b22b9"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: DataBuffer (76 members): \u0060DataBuffer\u0060 declares 76 members: \u0060GenerationId\u0060, \u0060sameUnderlyingData\u0060, \u0060read\u0060, \u0060write\u0060, \u0060array\u0060, \u0060dirty\u0060, \u0060underlyingDataBuffer\u0060, \u0060originalDataBuffer\u0060, \u0060copyAtStride\u0060, \u0060getAllocationMode\u0060, \u0060persist\u0060, \u0060isPersist\u0060, \u0060unPersist\u0060, \u0060ElementSize\u0060, \u0060removeReferencing\u0060, \u0060references\u0060, \u0060addReferencing\u0060, \u0060assign\u0060, \u0060assign\u0060, \u0060assign\u0060, \u0060assign\u0060, \u0060getDoublesAt\u0060, \u0060getFloatsAt\u0060, \u0060getIntsAt\u0060, \u0060getLongsAt\u0060, \u0060getDoublesAt\u0060, \u0060getFloatsAt\u0060, \u0060getIntsAt\u0060, \u0060getLongsAt\u0060, \u0060assign\u0060, \u0060assign\u0060, \u0060setData\u0060, \u0060setData\u0060, \u0060setData\u0060, \u0060setData\u0060, \u0060setData\u0060, \u0060setData\u0060, \u0060setData\u0060, \u0060asBytes\u0060, \u0060dataType\u0060, and 36 more. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 76 declarations carry 51 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 51 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/buffer/DataBuffer.vb"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e19ddd44b44a30a29df74193342de6cad74d088a0cc99002a2789cb3698e008"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: DataBufferFactory (126 members): \u0060DataBufferFactory\u0060 declares 126 members: \u0060setAllocationMode\u0060, \u0060allocationMode\u0060, \u0060create\u0060, \u0060create\u0060, \u0060createDouble\u0060, \u0060createSame\u0060, \u0060createSame\u0060, \u0060createFloat\u0060, \u0060createInt\u0060, \u0060createDouble\u0060, \u0060createFloat\u0060, \u0060createInt\u0060, \u0060createDouble\u0060, \u0060createDouble\u0060, \u0060createDouble\u0060, \u0060createFloat\u0060, \u0060createFloat\u0060, \u0060createInt\u0060, \u0060createDouble\u0060, \u0060createFloat\u0060, \u0060createFloat\u0060, \u0060createInt\u0060, \u0060createDouble\u0060, \u0060createFloat\u0060, \u0060createInt\u0060, \u0060createDouble\u0060, \u0060createFloat\u0060, \u0060createInt\u0060, \u0060createDouble\u0060, \u0060createFloat\u0060, \u0060createInt\u0060, \u0060createDouble\u0060, \u0060createDouble\u0060, \u0060createDouble\u0060, \u0060createFloat\u0060, \u0060createFloat\u0060, \u0060createFloat\u0060, \u0060create\u0060, \u0060create\u0060, \u0060createInt\u0060, and 86 more. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 126 declarations carry 23 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 23 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/buffer/factory/DataBufferFactory.vb"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa9f5d7370599ca5c50f92497f124a1d333bb8c2f99955cd59e1559c131fb3ec"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: MemoryManager (20 members): \u0060MemoryManager\u0060 declares 20 members: \u0060CurrentWorkspace\u0060, \u0060notifyScopeEntered\u0060, \u0060notifyScopeLeft\u0060, \u0060invokeGcOccasionally\u0060, \u0060invokeGc\u0060, \u0060togglePeriodicGc\u0060, \u0060toggleAveraging\u0060, \u0060PeriodicGcActive\u0060, \u0060LastGcTime\u0060, \u0060OccasionalGcFrequency\u0060, \u0060AverageLoopTime\u0060, \u0060AutoGcWindow\u0060, \u0060collect\u0060, \u0060purgeCaches\u0060, \u0060memcpy\u0060, \u0060memset\u0060, \u0060scopeOutOfWorkspaces\u0060, \u0060BandwidthUse\u0060, \u0060allocatedMemory\u0060, \u0060releaseCurrentContext\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/memory/MemoryManager.vb"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"37611eff9cf4f94a806e39c2e7765a74c13d053262d131ffa128acad7dfb2ce8"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: MemoryWorkspace (25 members): \u0060MemoryWorkspace\u0060 declares 25 members: \u0060WorkspaceConfiguration\u0060, \u0060WorkspaceType\u0060, \u0060Id\u0060, \u0060DeviceId\u0060, \u0060ThreadId\u0060, \u0060GenerationId\u0060, \u0060PrimaryOffset\u0060, \u0060notifyScopeEntered\u0060, \u0060notifyScopeBorrowed\u0060, \u0060notifyScopeLeft\u0060, \u0060ScopeActive\u0060, \u0060initializeWorkspace\u0060, \u0060destroyWorkspace\u0060, \u0060destroyWorkspace\u0060, \u0060toggleWorkspaceUse\u0060, \u0060ThisCycleAllocations\u0060, \u0060enableDebug\u0060, \u0060LastCycleAllocations\u0060, \u0060MaxCycleAllocations\u0060, \u0060CurrentSize\u0060, \u0060close\u0060, \u0060ParentWorkspace\u0060, \u0060tagOutOfScopeUse\u0060, \u0060PreviousWorkspace\u0060, \u0060CurrentOffset\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 25 declarations carry 24 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 24 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/memory/MemoryWorkspace.vb"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"89da6f412f0a8fdce3810221de725efef9438d63acf2adfe48e3abacba0621be"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: MemoryWorkspaceManager (24 members): \u0060MemoryWorkspaceManager\u0060 declares 24 members: \u0060UUID\u0060, \u0060DebugMode\u0060, \u0060DefaultWorkspaceConfiguration\u0060, \u0060createNewWorkspace\u0060, \u0060createNewWorkspace\u0060, \u0060createNewWorkspace\u0060, \u0060createNewWorkspace\u0060, \u0060WorkspaceForCurrentThread\u0060, \u0060getWorkspaceForCurrentThread\u0060, \u0060getWorkspaceForCurrentThread\u0060, \u0060setWorkspaceForCurrentThread\u0060, \u0060destroyWorkspace\u0060, \u0060destroyAllWorkspacesForCurrentThread\u0060, \u0060destroyWorkspace\u0060, \u0060AndActivateWorkspace\u0060, \u0060getAndActivateWorkspace\u0060, \u0060getAndActivateWorkspace\u0060, \u0060checkIfWorkspaceExists\u0060, \u0060checkIfWorkspaceExistsAndActive\u0060, \u0060scopeOutOfWorkspaces\u0060, \u0060printAllocationStatisticsForCurrentThread\u0060, \u0060AllWorkspacesIdsForCurrentThread\u0060, \u0060AllWorkspacesForCurrentThread\u0060, \u0060anyWorkspaceActiveForCurrentThread\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 24 declarations carry 18 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 18 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/memory/MemoryWorkspaceManager.vb"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"05adf79bdcaf48701234c347efae467142a69be0cc2cb4d9b84daf503a31a1d9"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: INDArray (343 members): \u0060INDArray\u0060 declares 343 members: \u0060shapeInfoToString\u0060, \u0060shapeInfoDataBuffer\u0060, \u0060View\u0060, \u0060Sparse\u0060, \u0060Compressed\u0060, \u0060markAsCompressed\u0060, \u0060rank\u0060, \u0060stride\u0060, \u0060elementWiseStride\u0060, \u0060getDoubleUnsafe\u0060, \u0060getString\u0060, \u0060putScalarUnsafe\u0060, \u0060vectorsAlongDimension\u0060, \u0060vectorAlongDimension\u0060, \u0060tensorsAlongDimension\u0060, \u0060tensorAlongDimension\u0060, \u0060cumsumi\u0060, \u0060cumsum\u0060, \u0060assign\u0060, \u0060assignIf\u0060, \u0060replaceWhere\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060lt\u0060, \u0060putScalar\u0060, \u0060putScalar\u0060, \u0060eps\u0060, \u0060eq\u0060, \u0060gt\u0060, \u0060gte\u0060, \u0060lte\u0060, \u0060lt\u0060, and 303 more. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 343 declarations carry 216 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 216 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ndarray/INDArray.vb"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"4593bc575293dfa1ed5559f3c8b98cc3d3169ecff369824d4f812bf8aa93af4b"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: CustomOp (41 members): \u0060CustomOp\u0060 declares 41 members: \u0060opName\u0060, \u0060opHash\u0060, \u0060InplaceCall\u0060, \u0060outputArguments\u0060, \u0060inputArguments\u0060, \u0060iArgs\u0060, \u0060tArgs\u0060, \u0060bArgs\u0060, \u0060dArgs\u0060, \u0060addTArgument\u0060, \u0060sArgs\u0060, \u0060addIArgument\u0060, \u0060addIArgument\u0060, \u0060addBArgument\u0060, \u0060addDArgument\u0060, \u0060removeIArgument\u0060, \u0060addSArgument\u0060, \u0060removeSArgument\u0060, \u0060getSArgument\u0060, \u0060getBArgument\u0060, \u0060getIArgument\u0060, \u0060numIArguments\u0060, \u0060removeTArgument\u0060, \u0060getTArgument\u0060, \u0060numTArguments\u0060, \u0060numBArguments\u0060, \u0060numDArguments\u0060, \u0060numSArguments\u0060, \u0060addInputArgument\u0060, \u0060removeInputArgument\u0060, \u0060getInputArgument\u0060, \u0060numInputArguments\u0060, \u0060addOutputArgument\u0060, \u0060removeOutputArgument\u0060, \u0060getOutputArgument\u0060, \u0060numOutputArguments\u0060, \u0060calculateOutputShape\u0060, \u0060calculateOutputShape\u0060, \u0060Descriptor\u0060, \u0060assertValidForExecution\u0060, and 1 more. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 41 declarations carry 39 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 39 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/CustomOp.vb"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"0aea3ffa0701aa1a5f0531726066e10cdb6d8a7b9f8b99ba0859ca448985786c"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: OpContext (32 members): \u0060OpContext\u0060 declares 32 members: \u0060setIArguments\u0060, \u0060getIArguments\u0060, \u0060numIArguments\u0060, \u0060setTArguments\u0060, \u0060getTArguments\u0060, \u0060numTArguments\u0060, \u0060setDArguments\u0060, \u0060getDArguments\u0060, \u0060numDArguments\u0060, \u0060setBArguments\u0060, \u0060getBArguments\u0060, \u0060numBArguments\u0060, \u0060setRngStates\u0060, \u0060RngStates\u0060, \u0060setInputArray\u0060, \u0060setInputArrays\u0060, \u0060setInputArrays\u0060, \u0060getInputArrays\u0060, \u0060numInputArguments\u0060, \u0060getInputArray\u0060, \u0060setOutputArray\u0060, \u0060setOutputArrays\u0060, \u0060setOutputArrays\u0060, \u0060getOutputArrays\u0060, \u0060getOutputArray\u0060, \u0060numOutputArguments\u0060, \u0060markInplace\u0060, \u0060allowHelpers\u0060, \u0060shapeFunctionOverride\u0060, \u0060getExecutionMode\u0060, \u0060setExecutionMode\u0060, \u0060purge\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 32 declarations carry 30 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 30 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/OpContext.vb"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0e585fbe5a7cf665b8a3e5f65c63bc2c6afeac3a86858a0df71db190376eaf3"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Aggregate (17 members): \u0060Aggregate\u0060 declares 17 members: \u0060name\u0060, \u0060opNum\u0060, \u0060FinalResult\u0060, \u0060Arguments\u0060, \u0060Shapes\u0060, \u0060IndexingArguments\u0060, \u0060RealArguments\u0060, \u0060IntArrayArguments\u0060, \u0060maxArguments\u0060, \u0060maxShapes\u0060, \u0060maxIntArrays\u0060, \u0060maxIntArraySize\u0060, \u0060maxIndexArguments\u0060, \u0060maxRealArguments\u0060, \u0060RequiredBatchMemorySize\u0060, \u0060SharedMemorySize\u0060, \u0060ThreadsPerInstance\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/aggregates/Aggregate.vb"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ad7907845095b30e55575e00a6bfb558c137133e723cf6afc1719f18bdd0ab3"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: OpExecutioner (61 members): \u0060OpExecutioner\u0060 declares 61 members: \u0060Verbose\u0060, \u0060Debug\u0060, \u0060type\u0060, \u0060LastOp\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060execAndReturn\u0060, \u0060execAndReturn\u0060, \u0060execAndReturn\u0060, \u0060execAndReturn\u0060, \u0060execAndReturn\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060execAndReturn\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060exec\u0060, \u0060EnvironmentInformation\u0060, \u0060setProfilingMode\u0060, \u0060getProfilingMode\u0060, \u0060ProfilingConfig\u0060, \u0060TADManager\u0060, \u0060printEnvironmentInformation\u0060, \u0060push\u0060, \u0060commit\u0060, \u0060thresholdEncode\u0060, \u0060thresholdEncode\u0060, \u0060thresholdDecode\u0060, \u0060bitmapEncode\u0060, \u0060bitmapEncode\u0060, \u0060bitmapDecode\u0060, \u0060CustomOperations\u0060, \u0060execAndReturn\u0060, \u0060exec\u0060, and 21 more. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 61 declarations carry 34 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 34 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/executioner/OpExecutioner.vb"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1a09d0e9212dc4406664de3ac8a5b31fff0dc9310d310adaa6b0f5b3df8a4c9"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Random (35 members): \u0060Random\u0060 declares 35 members under just 14 distinct name(s): \u0060setSeed\u0060, \u0060getSeed\u0060, \u0060setSeed\u0060, \u0060setSeed\u0060, \u0060nextBytes\u0060, \u0060nextInt\u0060, \u0060nextInt\u0060, \u0060nextInt\u0060, \u0060nextLong\u0060, \u0060nextBoolean\u0060, \u0060nextFloat\u0060, \u0060nextDouble\u0060, \u0060nextGaussian\u0060, \u0060nextGaussian\u0060, \u0060nextGaussian\u0060, \u0060nextGaussian\u0060, \u0060nextGaussian\u0060, \u0060nextDouble\u0060, \u0060nextDouble\u0060, \u0060nextDouble\u0060, \u0060nextDouble\u0060, \u0060nextFloat\u0060, \u0060nextFloat\u0060, \u0060nextFloat\u0060, \u0060nextFloat\u0060, \u0060nextInt\u0060, \u0060nextInt\u0060, \u0060nextInt\u0060, \u0060nextInt\u0060, \u0060Position\u0060, \u0060reSeed\u0060, \u0060reSeed\u0060, \u0060rootState\u0060, \u0060nodeState\u0060, \u0060setStates\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. That is an OVERLOAD SET, not 35 separate responsibilities: a caller binds to 14 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 35 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/rng/Random.vb"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"e72c4a5cc8eae50d0cb93be526ffb6b8a91337f8409155a16a8bb92f4ff675f7"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Distribution (18 members): \u0060Distribution\u0060 declares 18 members under just 13 distinct name(s): \u0060probability\u0060, \u0060density\u0060, \u0060cumulativeProbability\u0060, \u0060cumulativeProbability\u0060, \u0060inverseCumulativeProbability\u0060, \u0060NumericalMean\u0060, \u0060NumericalVariance\u0060, \u0060SupportLowerBound\u0060, \u0060SupportUpperBound\u0060, \u0060SupportLowerBoundInclusive\u0060, \u0060SupportUpperBoundInclusive\u0060, \u0060SupportConnected\u0060, \u0060reseedRandomGenerator\u0060, \u0060sample\u0060, \u0060sample\u0060, \u0060sample\u0060, \u0060sample\u0060, \u0060sample\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. That is an OVERLOAD SET, not 18 separate responsibilities: a caller binds to 13 operation(s) and uses the overload it selected, so the Interface-Segregation harm does NOT apply on the caller\u0027s side and splitting this into role-interfaces would scatter one operation without relieving anything. The burden that does remain is the IMPLEMENTER\u0027s \u2014 all 18 signatures must be written and kept in step. Reduce it by collapsing overloads (optional or default parameters, or an options object) rather than by segregating the interface."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/rng/distribution/Distribution.vb"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"cae5b74dd0b711293941515b8085c350d553326a5eccc7f98aaf3801ea996d1c"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: BlasWrapper (39 members): \u0060BlasWrapper\u0060 declares 39 members: \u0060swap\u0060, \u0060level1\u0060, \u0060level2\u0060, \u0060level3\u0060, \u0060lapack\u0060, \u0060scal\u0060, \u0060scal\u0060, \u0060copy\u0060, \u0060axpy\u0060, \u0060axpy\u0060, \u0060axpy\u0060, \u0060dot\u0060, \u0060nrm2\u0060, \u0060asum\u0060, \u0060iamax\u0060, \u0060gemv\u0060, \u0060gemv\u0060, \u0060gemv\u0060, \u0060ger\u0060, \u0060ger\u0060, \u0060ger\u0060, \u0060gesv\u0060, \u0060checkInfo\u0060, \u0060sysv\u0060, \u0060syev\u0060, \u0060syevx\u0060, \u0060syevx\u0060, \u0060syevd\u0060, \u0060syevr\u0060, \u0060syevr\u0060, \u0060syevr\u0060, \u0060posv\u0060, \u0060geev\u0060, \u0060sygvd\u0060, \u0060gelsd\u0060, \u0060geqrf\u0060, \u0060ormqr\u0060, \u0060saxpy\u0060, \u0060saxpy\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 39 declarations carry 28 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 28 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/factory/BlasWrapper.vb"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca22593dac8ece89d78e9d4305788d2627c076c572e543afb8634ab199381113"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: Environment (28 members): \u0060Environment\u0060 declares 28 members: \u0060blasMajorVersion\u0060, \u0060blasMinorVersion\u0060, \u0060blasPatchVersion\u0060, \u0060Verbose\u0060, \u0060Debug\u0060, \u0060Profiling\u0060, \u0060DetectingLeaks\u0060, \u0060DebugAndVerbose\u0060, \u0060LeaksDetector\u0060, \u0060helpersAllowed\u0060, \u0060allowHelpers\u0060, \u0060tadThreshold\u0060, \u0060setTadThreshold\u0060, \u0060elementwiseThreshold\u0060, \u0060setElementwiseThreshold\u0060, \u0060maxThreads\u0060, \u0060setMaxThreads\u0060, \u0060maxMasterThreads\u0060, \u0060setMaxMasterThreads\u0060, \u0060MaxPrimaryMemory\u0060, \u0060MaxSpecialMemory\u0060, \u0060MaxDeviceMemory\u0060, \u0060CPU\u0060, \u0060setGroupLimit\u0060, \u0060setDeviceLimit\u0060, \u0060getGroupLimit\u0060, \u0060getDeviceLimit\u0060, \u0060getDeviceCouner\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/factory/Environment.vb"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"e85f5752690591d52ff5d5aba14b7341612cba02dfefe041e49df992fb80909c"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: NDArrayFactory (195 members): \u0060NDArrayFactory\u0060 declares 195 members: \u0060blas\u0060, \u0060lapack\u0060, \u0060level1\u0060, \u0060level2\u0060, \u0060level3\u0060, \u0060createBlas\u0060, \u0060createLevel1\u0060, \u0060createLevel2\u0060, \u0060createLevel3\u0060, \u0060createLapack\u0060, \u0060setOrder\u0060, \u0060setDType\u0060, \u0060create\u0060, \u0060order\u0060, \u0060dtype\u0060, \u0060toFlattened\u0060, \u0060toFlattened\u0060, \u0060toFlattened\u0060, \u0060bilinearProducts\u0060, \u0060toFlattened\u0060, \u0060toFlattened\u0060, \u0060eye\u0060, \u0060rot90\u0060, \u0060rot\u0060, \u0060reverse\u0060, \u0060arange\u0060, \u0060copy\u0060, \u0060rand\u0060, \u0060rand\u0060, \u0060rand\u0060, \u0060appendBias\u0060, \u0060create\u0060, \u0060create\u0060, \u0060concat\u0060, \u0060specialConcat\u0060, \u0060pullRows\u0060, \u0060pullRows\u0060, \u0060pullRows\u0060, \u0060pullRows\u0060, \u0060shuffle\u0060, and 155 more. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 195 declarations carry 47 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 47 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/factory/NDArrayFactory.vb"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"37b8806edd9ec49c78efdf798d9ebf208340cb1b08af56b160be16db7c71b7dd"}},{"ruleId":"AX6","level":"note","message":{"text":"Fat interface: WorkspaceMgr(Of T) (24 members): \u0060WorkspaceMgr(Of T)\u0060 declares 24 members: \u0060setWorkspaceName\u0060, \u0060getWorkspaceName\u0060, \u0060setWorkspace\u0060, \u0060setConfiguration\u0060, \u0060getConfiguration\u0060, \u0060ScopedOutFor\u0060, \u0060isScopedOut\u0060, \u0060hasConfiguration\u0060, \u0060notifyScopeEntered\u0060, \u0060notifyScopeEntered\u0060, \u0060notifyScopeBorrowed\u0060, \u0060isWorkspaceOpen\u0060, \u0060assertOpen\u0060, \u0060assertNotOpen\u0060, \u0060assertCurrentWorkspace\u0060, \u0060leverageTo\u0060, \u0060validateArrayLocation\u0060, \u0060create\u0060, \u0060create\u0060, \u0060createUninitialized\u0060, \u0060createUninitialized\u0060, \u0060dup\u0060, \u0060dup\u0060, \u0060castTo\u0060. Counted as the author wrote them \u2014 a property is ONE member and its get/set accessors are not counted separately, and an event counts once. Those 24 declarations carry 20 distinct name(s), so part of the width is overloading rather than separate responsibilities \u2014 but 20 operations clears the \u003E15 bar on its own, so the row is about responsibilities, not signatures. A wide interface forces every implementer and caller to depend on methods they don\u0027t use (the Interface-Segregation \u0027I\u0027 in SOLID). Split it into focused role-interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/workspace/WorkspaceMgr.vb"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"febf7251e375656273ccd9209f6f8b7567b4087f0ca1132bea64cf05850c69e3"}},{"ruleId":"DM11","level":"warning","message":{"text":"Constructible in an invalid state: AggregateAxpy: \u0060AggregateAxpy\u0060\u0027s public constructor takes \u0060alpha\u0060 as raw primitives, and neither of the two things that would make that safe was found. What was searched, so you can tell an absence from a miss: for VALIDATION, the constructor body was scanned for \u0060throw\u0060, \u0060Guard.\u0060, \u0060Ensure.\u0060, \u0060ArgumentNullException\u0060, \u0060ArgumentException\u0060, \u0060CheckRule\u0060 or \u0060Requires.\u0060 \u2014 a guard reached through a helper method those tokens do not name is not seen; for a FACTORY, only this type\u0027s OWN static members were read, and only names beginning \u0060Create\u0060, \u0060Of\u0060, \u0060From\u0060, \u0060New\u0060 or \u0060Build\u0060 \u2014 one inherited from a base type, one on a companion builder, or one called \u0060Parse\u0060, \u0060Make\u0060 or \u0060Rehydrate\u0060 is not seen. If either exists, this row is wrong. If neither does, a caller can build a \u0060AggregateAxpy\u0060 that breaks the rules it exists to enforce, and every rule downstream then has to cope with a state the model said was impossible. Guard in the constructor, take value objects that validate themselves, or make the constructor private behind a \u0060Create\u0060 that can refuse."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/aggregates/impl/AggregateAxpy.vb"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c506919042c867263c061db94f11a410be397a2226aa939513fcd1ddc601335"}},{"ruleId":"DM11","level":"warning","message":{"text":"Constructible in an invalid state: AggregateGEMM: \u0060AggregateGEMM\u0060\u0027s public constructor takes \u0060Order\u0060, \u0060TransA\u0060, \u0060TransB\u0060, \u0060M\u0060, \u2026 as raw primitives, and neither of the two things that would make that safe was found. What was searched, so you can tell an absence from a miss: for VALIDATION, the constructor body was scanned for \u0060throw\u0060, \u0060Guard.\u0060, \u0060Ensure.\u0060, \u0060ArgumentNullException\u0060, \u0060ArgumentException\u0060, \u0060CheckRule\u0060 or \u0060Requires.\u0060 \u2014 a guard reached through a helper method those tokens do not name is not seen; for a FACTORY, only this type\u0027s OWN static members were read, and only names beginning \u0060Create\u0060, \u0060Of\u0060, \u0060From\u0060, \u0060New\u0060 or \u0060Build\u0060 \u2014 one inherited from a base type, one on a companion builder, or one called \u0060Parse\u0060, \u0060Make\u0060 or \u0060Rehydrate\u0060 is not seen. If either exists, this row is wrong. If neither does, a caller can build a \u0060AggregateGEMM\u0060 that breaks the rules it exists to enforce, and every rule downstream then has to cope with a state the model said was impossible. Guard in the constructor, take value objects that validate themselves, or make the constructor private behind a \u0060Create\u0060 that can refuse."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/aggregates/impl/AggregateGEMM.vb"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e88e90a11d16a075f3286c871d9cd4a256b13ce26777d995b58728ac00aa4d"}},{"ruleId":"DM4","level":"warning","message":{"text":"Anemic entity: AggregateAxpy: \u0060AggregateAxpy\u0060 is an aggregate/entity with 2 data propert(ies) but no state-changing behaviour (only data and queries) \u2014 the business logic lives in a service."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/aggregates/impl/AggregateAxpy.vb"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1c004efd46df74815633094b74246c01cf4dc19c0667717ad5698cec0026112"}},{"ruleId":"DM4","level":"warning","message":{"text":"Anemic entity: AggregateGEMM: \u0060AggregateGEMM\u0060 is an aggregate/entity with 2 data propert(ies) but no state-changing behaviour (only data and queries) \u2014 the business logic lives in a service."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/DeepLearning4VB/org/nd4vb/linalg/api/ops/aggregates/impl/AggregateGEMM.vb"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f4b3283e9b093ddad3136e880fedf9dfd22e6ce5532711e5845cd1c50f73d01"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"M4","level":"note","message":{"text":"README/code drift: README advertises a microservices architecture, but the repo is a single project with no service manifests \u2014 searched for: \u0060microservice\u0060, \u0060service-mesh\u0060, \u0060istio\u0060. Each was matched case- and separator-insensitively against file and directory NAMES anywhere in the tree, and against the CONTENTS of manifest and configuration files (package.json and other *.json, *.csproj, *.props, *.sln/*.slnx, *.yml, *.toml, *.config, tool configs such as eslint.config.js, Dockerfile); the README\u0027s own prose never counts, so a claim is never refuted by merely being made. Nothing outside that search was read \u2014 a footprint living only in a submodule, in a file type not listed here, or under a name none of those terms matches is not seen, and this row is then wrong."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"README.md"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"343bbbd51ceb8de7a9ff88d79f7c797abf9b5921f8727b67b4d0f4f8a22c5e49"}},{"ruleId":"P1","level":"warning","message":{"text":"No CI pipeline: No CI workflow found (.github/workflows, azure-pipelines.yml, .gitlab-ci.yml, \u2026) \u2014 changes aren\u0027t gated by an automated build/test."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"44f01af96e50474fba2df84d95ddf4f7e1d34c29c307830b9efc9057daa6b670"}},{"ruleId":"P3","level":"note","message":{"text":"No SAST: No static application security testing detected. For this repository\u0027s stack, add a Roslyn security analyzer package referenced from the project (the analyzer packages do analyse VB.NET), plus gitleaks for committed secrets \u2014 CodeQL has no VB.NET extractor, so its csharp pack would extract nothing from this tree and then report it clean \u2014 this repository has no CI pipeline yet, so run it locally to clear the existing findings, then make it a step of the first workflow you add so a regression fails the build. What was searched, so you can tell an absence from a miss: the 0 CI workflow file(s) in this repository, and the scanner and linter configuration checked in beside them. A scan that runs outside CI, one configured in your forge\u0027s web UI rather than in a committed file, or a tool whose name is none of those this check carries, is not seen \u2014 if that is your case the row is wrong, and saying so is more useful than adding a second scanner."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6e54424179c892f03ef2fd003130ac4bd43f39bbf3b1ca0a0143e25acb80ec87"}},{"ruleId":"SC1","level":"warning","message":{"text":"NuGet dependencies are not locked: No packages.lock.json and no central package management \u2014 restores aren\u0027t reproducible or pinned (SSDF PW.4.4). Enable \u003CRestorePackagesWithLockFile\u003Etrue\u003C/RestorePackagesWithLockFile\u003E (commit the lockfile) or adopt Directory.Packages.props. Advisory \u2014 never scored."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0a97b4f69ccac509400ece7eedefb06d3ede0522cd4d8bcb5c068bea719545a6"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Improper Neutralization of Special Elements used in a Command (\u0027Command Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in a Command (\u0027Command Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)","shortDescription":{"text":"Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)","shortDescription":{"text":"Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Improper Control of Generation of Code (\u0027Code Injection\u0027)","shortDescription":{"text":"Improper Control of Generation of Code (\u0027Code Injection\u0027)"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]},{"name":"OWASP Top 10","guid":"7d1f0c2e-4b6a-4e39-9a51-0b2e8c3d5f61","version":"2025","organization":"OWASP Foundation","informationUri":"https://top10.owasp.org/2025/","isComprehensive":false,"shortDescription":{"text":"The OWASP Top 10:2025 web application security risks."},"taxa":[{"id":"A03:2025","guid":"168e227c-7735-2e57-bc6e-997affe644c5","name":"Software Supply Chain Failures","shortDescription":{"text":"Software Supply Chain Failures"},"helpUri":"https://top10.owasp.org/2025/A03_2025-Software_Supply_Chain_Failures/"},{"id":"A05:2025","guid":"87e86033-3231-8458-8e4a-5cb82743553a","name":"Injection","shortDescription":{"text":"Injection"},"helpUri":"https://top10.owasp.org/2025/A05_2025-Injection/"},{"id":"A07:2025","guid":"334ddd78-539d-d35c-83dd-253647eb7eaf","name":"Authentication Failures","shortDescription":{"text":"Authentication Failures"},"helpUri":"https://top10.owasp.org/2025/A07_2025-Authentication_Failures/"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":0,"secretScannerRunsExcluded":0}}}]}