semantic-complexity 0.0.2-1895c257 → 0.0.3-38ef2e6f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -1
- package/dist/index.js.map +1 -1
- package/dist/tensor/canonical.d.ts +53 -0
- package/dist/tensor/canonical.d.ts.map +1 -0
- package/dist/tensor/canonical.js +178 -0
- package/dist/tensor/canonical.js.map +1 -0
- package/dist/tensor/index.d.ts +22 -0
- package/dist/tensor/index.d.ts.map +1 -0
- package/dist/tensor/index.js +22 -0
- package/dist/tensor/index.js.map +1 -0
- package/dist/tensor/matrix.d.ts +62 -0
- package/dist/tensor/matrix.d.ts.map +1 -0
- package/dist/tensor/matrix.js +171 -0
- package/dist/tensor/matrix.js.map +1 -0
- package/dist/tensor/scoring.d.ts +73 -0
- package/dist/tensor/scoring.d.ts.map +1 -0
- package/dist/tensor/scoring.js +206 -0
- package/dist/tensor/scoring.js.map +1 -0
- package/dist/tensor/types.d.ts +176 -0
- package/dist/tensor/types.d.ts.map +1 -0
- package/dist/tensor/types.js +15 -0
- package/dist/tensor/types.js.map +1 -0
- package/package.json +5 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* semantic-complexity - Multi-dimensional code complexity analyzer
|
|
2
|
+
* semantic-complexity - Multi-dimensional code complexity analyzer (v0.0.3)
|
|
3
3
|
*
|
|
4
4
|
* Core 엔진 모듈
|
|
5
|
+
*
|
|
6
|
+
* v0.0.3 Features:
|
|
7
|
+
* - Second-order tensor: score = v^T M v + <v, w>
|
|
8
|
+
* - ε-regularization for convergence
|
|
9
|
+
* - Module-type canonical profiles
|
|
10
|
+
* - Hodge decomposition of complexity space
|
|
5
11
|
*/
|
|
6
12
|
export type { SourceLocation, FunctionInfo, ParameterInfo, ComplexityResult, ComplexityDetail, ComplexityContributor, FileAnalysisResult, ImportInfo, ImportSpecifier, ExportInfo, DependencyNode, CallNode, CallEdge, AnalysisContext, ProjectInfo, AnalysisOptions, DimensionalComplexity, DimensionalWeights, ExtendedComplexityResult, } from './types.js';
|
|
7
13
|
export { DEFAULT_OPTIONS } from './types.js';
|
|
@@ -14,6 +20,11 @@ export { MODULE_TYPE_INFO, DEFAULT_META_WEIGHTS, LEVEL_RANGES, CANONICAL_PROFILE
|
|
|
14
20
|
export type { GateType, GateInfo, ViolationSeverity, Violation, DeltaAnalysis, DeltaThresholds, GateDecision, GateResult, GatePipelineResult, } from './gates/index.js';
|
|
15
21
|
export { GATE_RESPONSIBILITIES, GATE_INFO, DEFAULT_DELTA_THRESHOLDS, calculateDelta, calculateDeltaPercent, detectViolations, analyzeDelta, checkGate, runGatePipeline, createSnapshot, } from './gates/index.js';
|
|
16
22
|
export { calculateSecurity, calculateContext, calculateBehavior, toMetaDimensions, calculateMetaWeightedSum, normalizeMetaDimensions, metaDistance, addMetaDimensions, subtractMetaDimensions, ZERO_META, } from './metrics/meta.js';
|
|
23
|
+
export type { Vector5D, ModuleType as TensorModuleType, Matrix5x5, TensorScore, ConvergenceStatus as TensorConvergenceStatus, ConvergenceAnalysis, HodgeDecomposition, ComplexityLevel, DeviationResult, RefactoringRecommendation, CanonicalBounds, } from './tensor/index.js';
|
|
24
|
+
export { IDX_CONTROL, IDX_NESTING, IDX_STATE, IDX_ASYNC, IDX_COUPLING, DEFAULT_MATRIX, MODULE_MATRICES, DEFAULT_WEIGHTS, CANONICAL_5D_PROFILES, } from './tensor/index.js';
|
|
25
|
+
export { getInteractionMatrix, vectorToArray, arrayToVector, zeroVector, vectorNorm, dotProduct, quadraticForm, isPositiveSemidefinite, euclideanDistance, mahalanobisDistance, } from './tensor/index.js';
|
|
26
|
+
export { calculateTensorScore, convergenceScore, estimateLipschitz, analyzeConvergence as analyzeTensorConvergence, hodgeDecomposition, classifyComplexityLevel, recommendRefactoring, isSafe, needsReview, isViolation, } from './tensor/index.js';
|
|
27
|
+
export { getCanonicalProfile, getProfileCentroid, isWithinCanonicalBounds, getViolationDimensions, isOrphan, analyzeDeviation, findBestModuleType as findBestTensorModuleType, } from './tensor/index.js';
|
|
17
28
|
import type { FileAnalysisResult } from './types.js';
|
|
18
29
|
/**
|
|
19
30
|
* 파일 경로로 복잡도 분석
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* semantic-complexity - Multi-dimensional code complexity analyzer
|
|
2
|
+
* semantic-complexity - Multi-dimensional code complexity analyzer (v0.0.3)
|
|
3
3
|
*
|
|
4
4
|
* Core 엔진 모듈
|
|
5
|
+
*
|
|
6
|
+
* v0.0.3 Features:
|
|
7
|
+
* - Second-order tensor: score = v^T M v + <v, w>
|
|
8
|
+
* - ε-regularization for convergence
|
|
9
|
+
* - Module-type canonical profiles
|
|
10
|
+
* - Hodge decomposition of complexity space
|
|
5
11
|
*/
|
|
6
12
|
export { DEFAULT_OPTIONS } from './types.js';
|
|
7
13
|
// AST
|
|
@@ -16,6 +22,14 @@ export { MODULE_TYPE_INFO, DEFAULT_META_WEIGHTS, LEVEL_RANGES, CANONICAL_PROFILE
|
|
|
16
22
|
export { GATE_RESPONSIBILITIES, GATE_INFO, DEFAULT_DELTA_THRESHOLDS, calculateDelta, calculateDeltaPercent, detectViolations, analyzeDelta, checkGate, runGatePipeline, createSnapshot, } from './gates/index.js';
|
|
17
23
|
// Meta Dimensions (v0.0.2)
|
|
18
24
|
export { calculateSecurity, calculateContext, calculateBehavior, toMetaDimensions, calculateMetaWeightedSum, normalizeMetaDimensions, metaDistance, addMetaDimensions, subtractMetaDimensions, ZERO_META, } from './metrics/meta.js';
|
|
25
|
+
// Tensor constants
|
|
26
|
+
export { IDX_CONTROL, IDX_NESTING, IDX_STATE, IDX_ASYNC, IDX_COUPLING, DEFAULT_MATRIX, MODULE_MATRICES, DEFAULT_WEIGHTS, CANONICAL_5D_PROFILES, } from './tensor/index.js';
|
|
27
|
+
// Tensor matrix operations
|
|
28
|
+
export { getInteractionMatrix, vectorToArray, arrayToVector, zeroVector, vectorNorm, dotProduct, quadraticForm, isPositiveSemidefinite, euclideanDistance, mahalanobisDistance, } from './tensor/index.js';
|
|
29
|
+
// Tensor scoring
|
|
30
|
+
export { calculateTensorScore, convergenceScore, estimateLipschitz, analyzeConvergence as analyzeTensorConvergence, hodgeDecomposition, classifyComplexityLevel, recommendRefactoring, isSafe, needsReview, isViolation, } from './tensor/index.js';
|
|
31
|
+
// Tensor canonical profiles
|
|
32
|
+
export { getCanonicalProfile, getProfileCentroid, isWithinCanonicalBounds, getViolationDimensions, isOrphan, analyzeDeviation, findBestModuleType as findBestTensorModuleType, } from './tensor/index.js';
|
|
19
33
|
// ─── Convenience Functions ───────────────────────────────────────
|
|
20
34
|
import * as fs from 'node:fs';
|
|
21
35
|
import { parseSourceFile } from './ast/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0BH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM;AACN,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,UAAU;AACV,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,eAAe,EACf,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,QAAQ;AACR,OAAO,EACL,eAAe,EACf,SAAS,EACT,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,UAAU;AACV,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmBpE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAe9B,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,eAAe,EACf,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,2BAA2B;AAC3B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,SAAS,GACV,MAAM,mBAAmB,CAAC;AAmB3B,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,2BAA2B;AAC3B,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,iBAAiB;AACjB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,IAAI,wBAAwB,EAC9C,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,WAAW,EACX,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,4BAA4B;AAC5B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,IAAI,wBAAwB,GAC/C,MAAM,mBAAmB,CAAC;AAE3B,oEAAoE;AAEpE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,QAAQ,GAAG,UAAU;IAErB,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Canonical Profiles and Deviation Analysis
|
|
3
|
+
*
|
|
4
|
+
* Φ: ModuleType → CanonicalProfile
|
|
5
|
+
* δ(v, Φ(τ)) = ‖v - Φ(τ)‖_M (Mahalanobis-like distance)
|
|
6
|
+
*/
|
|
7
|
+
import type { Vector5D, ModuleType, DeviationResult } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Canonical profile bounds for a module type
|
|
10
|
+
*/
|
|
11
|
+
export interface CanonicalBounds {
|
|
12
|
+
control: [number, number];
|
|
13
|
+
nesting: [number, number];
|
|
14
|
+
state: [number, number];
|
|
15
|
+
async: [number, number];
|
|
16
|
+
coupling: [number, number];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Canonical profiles per module type (based on v0.0.3 spec)
|
|
20
|
+
*/
|
|
21
|
+
export declare const CANONICAL_5D_PROFILES: Record<ModuleType, CanonicalBounds>;
|
|
22
|
+
/**
|
|
23
|
+
* Get canonical profile for module type
|
|
24
|
+
*/
|
|
25
|
+
export declare function getCanonicalProfile(moduleType: ModuleType): CanonicalBounds;
|
|
26
|
+
/**
|
|
27
|
+
* Calculate centroid of canonical profile
|
|
28
|
+
*/
|
|
29
|
+
export declare function getProfileCentroid(profile: CanonicalBounds): Vector5D;
|
|
30
|
+
/**
|
|
31
|
+
* Check if vector is within canonical bounds
|
|
32
|
+
*/
|
|
33
|
+
export declare function isWithinCanonicalBounds(vector: Vector5D, profile: CanonicalBounds): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get dimensions that violate canonical bounds
|
|
36
|
+
*/
|
|
37
|
+
export declare function getViolationDimensions(vector: Vector5D, profile: CanonicalBounds): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Check if vector is orphan (outside ALL canonical regions)
|
|
40
|
+
*/
|
|
41
|
+
export declare function isOrphan(vector: Vector5D): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Analyze deviation from canonical form
|
|
44
|
+
*/
|
|
45
|
+
export declare function analyzeDeviation(vector: Vector5D, moduleType?: ModuleType): DeviationResult;
|
|
46
|
+
/**
|
|
47
|
+
* Find the best fitting module type for a vector
|
|
48
|
+
*/
|
|
49
|
+
export declare function findBestModuleType(vector: Vector5D): {
|
|
50
|
+
type: ModuleType;
|
|
51
|
+
distance: number;
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=canonical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/tensor/canonical.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQxE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,UAAU,EAAE,eAAe,CA2CrE,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAE3E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAQrE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,eAAe,GACvB,MAAM,EAAE,CAaV;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CASlD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,QAAQ,EAChB,UAAU,GAAE,UAAsB,GACjC,eAAe,CA2CjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAsB3F"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Canonical Profiles and Deviation Analysis
|
|
3
|
+
*
|
|
4
|
+
* Φ: ModuleType → CanonicalProfile
|
|
5
|
+
* δ(v, Φ(τ)) = ‖v - Φ(τ)‖_M (Mahalanobis-like distance)
|
|
6
|
+
*/
|
|
7
|
+
import { getInteractionMatrix, euclideanDistance, mahalanobisDistance, vectorToArray, } from './matrix.js';
|
|
8
|
+
/**
|
|
9
|
+
* Canonical profiles per module type (based on v0.0.3 spec)
|
|
10
|
+
*/
|
|
11
|
+
export const CANONICAL_5D_PROFILES = {
|
|
12
|
+
api: {
|
|
13
|
+
control: [0, 5], // low: thin controllers
|
|
14
|
+
nesting: [0, 3], // low: flat structure
|
|
15
|
+
state: [0, 2], // low: stateless preferred
|
|
16
|
+
async: [0, 3], // low: simple I/O
|
|
17
|
+
coupling: [0, 3], // low: explicit deps
|
|
18
|
+
},
|
|
19
|
+
lib: {
|
|
20
|
+
control: [0, 10], // medium: algorithmic complexity ok
|
|
21
|
+
nesting: [0, 5], // medium: some depth acceptable
|
|
22
|
+
state: [0, 2], // low: pure functions preferred
|
|
23
|
+
async: [0, 2], // low: sync preferred
|
|
24
|
+
coupling: [0, 2], // low: minimal deps
|
|
25
|
+
},
|
|
26
|
+
app: {
|
|
27
|
+
control: [0, 10], // medium: business logic
|
|
28
|
+
nesting: [0, 5], // medium: reasonable depth
|
|
29
|
+
state: [0, 8], // medium: stateful ok
|
|
30
|
+
async: [0, 8], // medium: async workflows
|
|
31
|
+
coupling: [0, 5], // low: controlled deps
|
|
32
|
+
},
|
|
33
|
+
web: {
|
|
34
|
+
control: [0, 8], // medium: UI logic
|
|
35
|
+
nesting: [0, 10], // higher: component hierarchy
|
|
36
|
+
state: [0, 5], // medium: UI state
|
|
37
|
+
async: [0, 5], // medium: data fetching
|
|
38
|
+
coupling: [0, 3], // low: component isolation
|
|
39
|
+
},
|
|
40
|
+
deploy: {
|
|
41
|
+
control: [0, 3], // low: simple scripts
|
|
42
|
+
nesting: [0, 2], // low: flat
|
|
43
|
+
state: [0, 2], // low: idempotent
|
|
44
|
+
async: [0, 2], // low: sequential
|
|
45
|
+
coupling: [0, 3], // low: explicit config
|
|
46
|
+
},
|
|
47
|
+
unknown: {
|
|
48
|
+
control: [0, 15], // permissive
|
|
49
|
+
nesting: [0, 10],
|
|
50
|
+
state: [0, 10],
|
|
51
|
+
async: [0, 10],
|
|
52
|
+
coupling: [0, 10],
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Get canonical profile for module type
|
|
57
|
+
*/
|
|
58
|
+
export function getCanonicalProfile(moduleType) {
|
|
59
|
+
return CANONICAL_5D_PROFILES[moduleType] ?? CANONICAL_5D_PROFILES.unknown;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Calculate centroid of canonical profile
|
|
63
|
+
*/
|
|
64
|
+
export function getProfileCentroid(profile) {
|
|
65
|
+
return {
|
|
66
|
+
control: (profile.control[0] + profile.control[1]) / 2,
|
|
67
|
+
nesting: (profile.nesting[0] + profile.nesting[1]) / 2,
|
|
68
|
+
state: (profile.state[0] + profile.state[1]) / 2,
|
|
69
|
+
async: (profile.async[0] + profile.async[1]) / 2,
|
|
70
|
+
coupling: (profile.coupling[0] + profile.coupling[1]) / 2,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if vector is within canonical bounds
|
|
75
|
+
*/
|
|
76
|
+
export function isWithinCanonicalBounds(vector, profile) {
|
|
77
|
+
return (vector.control >= profile.control[0] && vector.control <= profile.control[1] &&
|
|
78
|
+
vector.nesting >= profile.nesting[0] && vector.nesting <= profile.nesting[1] &&
|
|
79
|
+
vector.state >= profile.state[0] && vector.state <= profile.state[1] &&
|
|
80
|
+
vector.async >= profile.async[0] && vector.async <= profile.async[1] &&
|
|
81
|
+
vector.coupling >= profile.coupling[0] && vector.coupling <= profile.coupling[1]);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get dimensions that violate canonical bounds
|
|
85
|
+
*/
|
|
86
|
+
export function getViolationDimensions(vector, profile) {
|
|
87
|
+
const violations = [];
|
|
88
|
+
const dims = ['control', 'nesting', 'state', 'async', 'coupling'];
|
|
89
|
+
for (const dim of dims) {
|
|
90
|
+
const value = vector[dim];
|
|
91
|
+
const [min, max] = profile[dim];
|
|
92
|
+
if (value < min || value > max) {
|
|
93
|
+
violations.push(dim);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return violations;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if vector is orphan (outside ALL canonical regions)
|
|
100
|
+
*/
|
|
101
|
+
export function isOrphan(vector) {
|
|
102
|
+
for (const moduleType of Object.keys(CANONICAL_5D_PROFILES)) {
|
|
103
|
+
if (moduleType === 'unknown')
|
|
104
|
+
continue;
|
|
105
|
+
const profile = CANONICAL_5D_PROFILES[moduleType];
|
|
106
|
+
if (isWithinCanonicalBounds(vector, profile)) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Analyze deviation from canonical form
|
|
114
|
+
*/
|
|
115
|
+
export function analyzeDeviation(vector, moduleType = 'unknown') {
|
|
116
|
+
const profile = getCanonicalProfile(moduleType);
|
|
117
|
+
const centroid = getProfileCentroid(profile);
|
|
118
|
+
const matrix = getInteractionMatrix(moduleType);
|
|
119
|
+
// Calculate distances
|
|
120
|
+
const eucDist = euclideanDistance(vector, centroid);
|
|
121
|
+
const mahDist = mahalanobisDistance(vector, centroid, matrix);
|
|
122
|
+
// Max dimension deviation
|
|
123
|
+
const arr = vectorToArray(vector);
|
|
124
|
+
const centArr = vectorToArray(centroid);
|
|
125
|
+
const maxDev = Math.max(...arr.map((v, i) => Math.abs(v - centArr[i])));
|
|
126
|
+
// Normalize to 0-1 scale (assuming max reasonable deviation is 50)
|
|
127
|
+
const normDev = Math.min(1.0, mahDist / 50.0);
|
|
128
|
+
// Check canonical bounds
|
|
129
|
+
const withinBounds = isWithinCanonicalBounds(vector, profile);
|
|
130
|
+
const violations = getViolationDimensions(vector, profile);
|
|
131
|
+
const orphan = isOrphan(vector);
|
|
132
|
+
let status;
|
|
133
|
+
if (withinBounds) {
|
|
134
|
+
status = 'canonical';
|
|
135
|
+
}
|
|
136
|
+
else if (orphan) {
|
|
137
|
+
status = 'orphan';
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
status = 'deviated';
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
euclideanDistance: Math.round(eucDist * 1000) / 1000,
|
|
144
|
+
mahalanobisDistance: Math.round(mahDist * 1000) / 1000,
|
|
145
|
+
maxDimensionDeviation: Math.round(maxDev * 1000) / 1000,
|
|
146
|
+
normalizedDeviation: Math.round(normDev * 1000) / 1000,
|
|
147
|
+
isCanonical: withinBounds,
|
|
148
|
+
isOrphan: orphan,
|
|
149
|
+
moduleType,
|
|
150
|
+
vector,
|
|
151
|
+
violationDimensions: violations,
|
|
152
|
+
status,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Find the best fitting module type for a vector
|
|
157
|
+
*/
|
|
158
|
+
export function findBestModuleType(vector) {
|
|
159
|
+
let bestType = 'unknown';
|
|
160
|
+
let bestDist = Infinity;
|
|
161
|
+
for (const moduleType of Object.keys(CANONICAL_5D_PROFILES)) {
|
|
162
|
+
if (moduleType === 'unknown')
|
|
163
|
+
continue;
|
|
164
|
+
const profile = CANONICAL_5D_PROFILES[moduleType];
|
|
165
|
+
const centroid = getProfileCentroid(profile);
|
|
166
|
+
const matrix = getInteractionMatrix(moduleType);
|
|
167
|
+
const dist = mahalanobisDistance(vector, centroid, matrix);
|
|
168
|
+
if (dist < bestDist) {
|
|
169
|
+
bestDist = dist;
|
|
170
|
+
bestType = moduleType;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
type: bestType,
|
|
175
|
+
distance: Math.round(bestDist * 1000) / 1000,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/tensor/canonical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Tensor-based Complexity Analysis
|
|
3
|
+
*
|
|
4
|
+
* Second-order tensor framework for multi-dimensional code complexity.
|
|
5
|
+
*
|
|
6
|
+
* Mathematical foundation:
|
|
7
|
+
* score = v^T M v + <v, w> + ε‖v‖²
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - 5D complexity vector: [Control, Nesting, State, Async, Coupling]
|
|
11
|
+
* - Interaction matrix M for dimension cross-effects
|
|
12
|
+
* - ε-regularization for convergence guarantee
|
|
13
|
+
* - Module-type canonical profiles
|
|
14
|
+
* - Hodge decomposition of complexity space
|
|
15
|
+
*/
|
|
16
|
+
export type { Vector5D, ModuleType, Matrix5x5, TensorScore, ConvergenceStatus, ConvergenceAnalysis, HodgeDecomposition, ComplexityLevel, DeviationResult, RefactoringRecommendation, } from './types.js';
|
|
17
|
+
export { IDX_CONTROL, IDX_NESTING, IDX_STATE, IDX_ASYNC, IDX_COUPLING, } from './types.js';
|
|
18
|
+
export { DEFAULT_MATRIX, MODULE_MATRICES, getInteractionMatrix, vectorToArray, arrayToVector, zeroVector, vectorNorm, dotProduct, quadraticForm, isPositiveSemidefinite, euclideanDistance, mahalanobisDistance, } from './matrix.js';
|
|
19
|
+
export { DEFAULT_WEIGHTS, calculateTensorScore, convergenceScore, estimateLipschitz, analyzeConvergence, hodgeDecomposition, classifyComplexityLevel, recommendRefactoring, isSafe, needsReview, isViolation, } from './scoring.js';
|
|
20
|
+
export type { CanonicalBounds } from './canonical.js';
|
|
21
|
+
export { CANONICAL_5D_PROFILES, getCanonicalProfile, getProfileCentroid, isWithinCanonicalBounds, getViolationDimensions, isOrphan, analyzeDeviation, findBestModuleType, } from './canonical.js';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tensor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,YAAY,EACV,QAAQ,EACR,UAAU,EACV,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,WAAW,EACX,WAAW,GACZ,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Tensor-based Complexity Analysis
|
|
3
|
+
*
|
|
4
|
+
* Second-order tensor framework for multi-dimensional code complexity.
|
|
5
|
+
*
|
|
6
|
+
* Mathematical foundation:
|
|
7
|
+
* score = v^T M v + <v, w> + ε‖v‖²
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - 5D complexity vector: [Control, Nesting, State, Async, Coupling]
|
|
11
|
+
* - Interaction matrix M for dimension cross-effects
|
|
12
|
+
* - ε-regularization for convergence guarantee
|
|
13
|
+
* - Module-type canonical profiles
|
|
14
|
+
* - Hodge decomposition of complexity space
|
|
15
|
+
*/
|
|
16
|
+
export { IDX_CONTROL, IDX_NESTING, IDX_STATE, IDX_ASYNC, IDX_COUPLING, } from './types.js';
|
|
17
|
+
// Matrix operations
|
|
18
|
+
export { DEFAULT_MATRIX, MODULE_MATRICES, getInteractionMatrix, vectorToArray, arrayToVector, zeroVector, vectorNorm, dotProduct, quadraticForm, isPositiveSemidefinite, euclideanDistance, mahalanobisDistance, } from './matrix.js';
|
|
19
|
+
// Scoring
|
|
20
|
+
export { DEFAULT_WEIGHTS, calculateTensorScore, convergenceScore, estimateLipschitz, analyzeConvergence, hodgeDecomposition, classifyComplexityLevel, recommendRefactoring, isSafe, needsReview, isViolation, } from './scoring.js';
|
|
21
|
+
export { CANONICAL_5D_PROFILES, getCanonicalProfile, getProfileCentroid, isWithinCanonicalBounds, getViolationDimensions, isOrphan, analyzeDeviation, findBestModuleType, } from './canonical.js';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tensor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,oBAAoB;AACpB,OAAO,EACL,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,UAAU;AACV,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,WAAW,EACX,WAAW,GACZ,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Interaction Matrix for Second-Order Tensor Analysis
|
|
3
|
+
*
|
|
4
|
+
* M[i,j] represents the interaction strength between dimensions i and j.
|
|
5
|
+
* - Diagonal: self-interaction (typically 1.0)
|
|
6
|
+
* - Off-diagonal: cross-dimension interaction
|
|
7
|
+
*/
|
|
8
|
+
import type { Matrix5x5, ModuleType, Vector5D } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Default interaction matrix (symmetric, positive semi-definite)
|
|
11
|
+
*/
|
|
12
|
+
export declare const DEFAULT_MATRIX: Matrix5x5;
|
|
13
|
+
/**
|
|
14
|
+
* Module-type specific interaction matrices
|
|
15
|
+
*/
|
|
16
|
+
export declare const MODULE_MATRICES: Record<ModuleType, Matrix5x5>;
|
|
17
|
+
/**
|
|
18
|
+
* Get interaction matrix for module type
|
|
19
|
+
*/
|
|
20
|
+
export declare function getInteractionMatrix(moduleType: ModuleType): Matrix5x5;
|
|
21
|
+
/**
|
|
22
|
+
* Convert Vector5D to array
|
|
23
|
+
*/
|
|
24
|
+
export declare function vectorToArray(v: Vector5D): number[];
|
|
25
|
+
/**
|
|
26
|
+
* Create Vector5D from array
|
|
27
|
+
*/
|
|
28
|
+
export declare function arrayToVector(arr: number[]): Vector5D;
|
|
29
|
+
/**
|
|
30
|
+
* Create zero vector
|
|
31
|
+
*/
|
|
32
|
+
export declare function zeroVector(): Vector5D;
|
|
33
|
+
/**
|
|
34
|
+
* Calculate L2 norm of vector
|
|
35
|
+
*/
|
|
36
|
+
export declare function vectorNorm(v: Vector5D): number;
|
|
37
|
+
/**
|
|
38
|
+
* Calculate dot product of two vectors
|
|
39
|
+
*/
|
|
40
|
+
export declare function dotProduct(v1: Vector5D, v2: Vector5D): number;
|
|
41
|
+
/**
|
|
42
|
+
* Calculate quadratic form: v^T M v
|
|
43
|
+
*
|
|
44
|
+
* This captures dimension interactions.
|
|
45
|
+
*/
|
|
46
|
+
export declare function quadraticForm(v: Vector5D, matrix: Matrix5x5): number;
|
|
47
|
+
/**
|
|
48
|
+
* Check if matrix is positive semi-definite using diagonal dominance
|
|
49
|
+
* (conservative approximation)
|
|
50
|
+
*/
|
|
51
|
+
export declare function isPositiveSemidefinite(matrix: Matrix5x5): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Euclidean distance between two vectors
|
|
54
|
+
*/
|
|
55
|
+
export declare function euclideanDistance(v1: Vector5D, v2: Vector5D): number;
|
|
56
|
+
/**
|
|
57
|
+
* Mahalanobis-like distance using interaction matrix
|
|
58
|
+
*
|
|
59
|
+
* δ(v, target) = sqrt((v - target)^T M (v - target))
|
|
60
|
+
*/
|
|
61
|
+
export declare function mahalanobisDistance(v: Vector5D, target: Vector5D, matrix: Matrix5x5): number;
|
|
62
|
+
//# sourceMappingURL=matrix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix.d.ts","sourceRoot":"","sources":["../../src/tensor/matrix.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SAO5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,CA0CzD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAEtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,EAAE,CAEnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,CAWrD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,QAAQ,CAErC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAG9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,CAI7D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CASpE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAajE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,CAKpE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,QAAQ,EACX,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,SAAS,GAChB,MAAM,CAUR"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Interaction Matrix for Second-Order Tensor Analysis
|
|
3
|
+
*
|
|
4
|
+
* M[i,j] represents the interaction strength between dimensions i and j.
|
|
5
|
+
* - Diagonal: self-interaction (typically 1.0)
|
|
6
|
+
* - Off-diagonal: cross-dimension interaction
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Default interaction matrix (symmetric, positive semi-definite)
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_MATRIX = [
|
|
12
|
+
// C N S A Λ
|
|
13
|
+
[1.0, 0.3, 0.2, 0.2, 0.3], // Control
|
|
14
|
+
[0.3, 1.0, 0.4, 0.8, 0.2], // Nesting × Async ↑
|
|
15
|
+
[0.2, 0.4, 1.0, 0.5, 0.9], // State × Coupling ↑↑
|
|
16
|
+
[0.2, 0.8, 0.5, 1.0, 0.4], // Async × Nesting ↑
|
|
17
|
+
[0.3, 0.2, 0.9, 0.4, 1.0], // Coupling × State ↑↑
|
|
18
|
+
];
|
|
19
|
+
/**
|
|
20
|
+
* Module-type specific interaction matrices
|
|
21
|
+
*/
|
|
22
|
+
export const MODULE_MATRICES = {
|
|
23
|
+
api: [
|
|
24
|
+
// API: Coupling interactions are critical
|
|
25
|
+
[1.0, 0.2, 0.3, 0.2, 0.4],
|
|
26
|
+
[0.2, 1.0, 0.3, 0.6, 0.2],
|
|
27
|
+
[0.3, 0.3, 1.0, 0.4, 1.5], // State × Coupling ↑↑↑
|
|
28
|
+
[0.2, 0.6, 0.4, 1.0, 0.5],
|
|
29
|
+
[0.4, 0.2, 1.5, 0.5, 1.0], // Coupling × State ↑↑↑
|
|
30
|
+
],
|
|
31
|
+
lib: [
|
|
32
|
+
// LIB: Control/Nesting interactions are important
|
|
33
|
+
[1.0, 1.2, 0.2, 0.2, 0.2], // Control × Nesting ↑
|
|
34
|
+
[1.2, 1.0, 0.3, 0.5, 0.2], // Nesting × Control ↑
|
|
35
|
+
[0.2, 0.3, 1.0, 0.3, 0.6],
|
|
36
|
+
[0.2, 0.5, 0.3, 1.0, 0.3],
|
|
37
|
+
[0.2, 0.2, 0.6, 0.3, 1.0],
|
|
38
|
+
],
|
|
39
|
+
app: [
|
|
40
|
+
// APP: State/Async interactions are critical
|
|
41
|
+
[1.0, 0.3, 0.3, 0.3, 0.3],
|
|
42
|
+
[0.3, 1.0, 0.5, 0.9, 0.2], // Nesting × Async ↑
|
|
43
|
+
[0.3, 0.5, 1.0, 1.3, 0.7], // State × Async ↑↑
|
|
44
|
+
[0.3, 0.9, 1.3, 1.0, 0.4], // Async × State ↑↑
|
|
45
|
+
[0.3, 0.2, 0.7, 0.4, 1.0],
|
|
46
|
+
],
|
|
47
|
+
web: [
|
|
48
|
+
// WEB: Nesting is most important (component hierarchy)
|
|
49
|
+
[1.0, 0.5, 0.2, 0.4, 0.2],
|
|
50
|
+
[0.5, 1.5, 0.3, 0.6, 0.2], // Nesting self-weight ↑
|
|
51
|
+
[0.2, 0.3, 1.0, 0.3, 0.5],
|
|
52
|
+
[0.4, 0.6, 0.3, 1.0, 0.3],
|
|
53
|
+
[0.2, 0.2, 0.5, 0.3, 1.0],
|
|
54
|
+
],
|
|
55
|
+
deploy: [
|
|
56
|
+
// DEPLOY: All interactions should be minimal
|
|
57
|
+
[1.0, 0.1, 0.1, 0.1, 0.2],
|
|
58
|
+
[0.1, 1.0, 0.1, 0.1, 0.1],
|
|
59
|
+
[0.1, 0.1, 1.0, 0.1, 0.3],
|
|
60
|
+
[0.1, 0.1, 0.1, 1.0, 0.2],
|
|
61
|
+
[0.2, 0.1, 0.3, 0.2, 1.0],
|
|
62
|
+
],
|
|
63
|
+
unknown: DEFAULT_MATRIX,
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Get interaction matrix for module type
|
|
67
|
+
*/
|
|
68
|
+
export function getInteractionMatrix(moduleType) {
|
|
69
|
+
return MODULE_MATRICES[moduleType] ?? DEFAULT_MATRIX;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Convert Vector5D to array
|
|
73
|
+
*/
|
|
74
|
+
export function vectorToArray(v) {
|
|
75
|
+
return [v.control, v.nesting, v.state, v.async, v.coupling];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create Vector5D from array
|
|
79
|
+
*/
|
|
80
|
+
export function arrayToVector(arr) {
|
|
81
|
+
if (arr.length !== 5) {
|
|
82
|
+
throw new Error('Vector5D requires exactly 5 values');
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
control: arr[0],
|
|
86
|
+
nesting: arr[1],
|
|
87
|
+
state: arr[2],
|
|
88
|
+
async: arr[3],
|
|
89
|
+
coupling: arr[4],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create zero vector
|
|
94
|
+
*/
|
|
95
|
+
export function zeroVector() {
|
|
96
|
+
return { control: 0, nesting: 0, state: 0, async: 0, coupling: 0 };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Calculate L2 norm of vector
|
|
100
|
+
*/
|
|
101
|
+
export function vectorNorm(v) {
|
|
102
|
+
const arr = vectorToArray(v);
|
|
103
|
+
return Math.sqrt(arr.reduce((sum, x) => sum + x * x, 0));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Calculate dot product of two vectors
|
|
107
|
+
*/
|
|
108
|
+
export function dotProduct(v1, v2) {
|
|
109
|
+
const a1 = vectorToArray(v1);
|
|
110
|
+
const a2 = vectorToArray(v2);
|
|
111
|
+
return a1.reduce((sum, x, i) => sum + x * a2[i], 0);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Calculate quadratic form: v^T M v
|
|
115
|
+
*
|
|
116
|
+
* This captures dimension interactions.
|
|
117
|
+
*/
|
|
118
|
+
export function quadraticForm(v, matrix) {
|
|
119
|
+
const arr = vectorToArray(v);
|
|
120
|
+
let result = 0;
|
|
121
|
+
for (let i = 0; i < 5; i++) {
|
|
122
|
+
for (let j = 0; j < 5; j++) {
|
|
123
|
+
result += arr[i] * matrix[i][j] * arr[j];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if matrix is positive semi-definite using diagonal dominance
|
|
130
|
+
* (conservative approximation)
|
|
131
|
+
*/
|
|
132
|
+
export function isPositiveSemidefinite(matrix) {
|
|
133
|
+
for (let i = 0; i < 5; i++) {
|
|
134
|
+
let rowSum = 0;
|
|
135
|
+
for (let j = 0; j < 5; j++) {
|
|
136
|
+
if (i !== j) {
|
|
137
|
+
rowSum += Math.abs(matrix[i][j]);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (matrix[i][i] < rowSum) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Euclidean distance between two vectors
|
|
148
|
+
*/
|
|
149
|
+
export function euclideanDistance(v1, v2) {
|
|
150
|
+
const a1 = vectorToArray(v1);
|
|
151
|
+
const a2 = vectorToArray(v2);
|
|
152
|
+
const sumSquares = a1.reduce((sum, x, i) => sum + Math.pow(x - a2[i], 2), 0);
|
|
153
|
+
return Math.sqrt(sumSquares);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Mahalanobis-like distance using interaction matrix
|
|
157
|
+
*
|
|
158
|
+
* δ(v, target) = sqrt((v - target)^T M (v - target))
|
|
159
|
+
*/
|
|
160
|
+
export function mahalanobisDistance(v, target, matrix) {
|
|
161
|
+
const diff = {
|
|
162
|
+
control: v.control - target.control,
|
|
163
|
+
nesting: v.nesting - target.nesting,
|
|
164
|
+
state: v.state - target.state,
|
|
165
|
+
async: v.async - target.async,
|
|
166
|
+
coupling: v.coupling - target.coupling,
|
|
167
|
+
};
|
|
168
|
+
const result = quadraticForm(diff, matrix);
|
|
169
|
+
return Math.sqrt(Math.abs(result));
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=matrix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../src/tensor/matrix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Tensor-based Complexity Scoring
|
|
3
|
+
*
|
|
4
|
+
* score = v^T M v + <v, w> + ε‖v‖²
|
|
5
|
+
*/
|
|
6
|
+
import type { TensorScore, Vector5D, ModuleType, ConvergenceAnalysis, HodgeDecomposition, ComplexityLevel, RefactoringRecommendation } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Default linear weights
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEFAULT_WEIGHTS: Vector5D;
|
|
11
|
+
/**
|
|
12
|
+
* Calculate tensor-based complexity score
|
|
13
|
+
*
|
|
14
|
+
* @param vector - 5D complexity vector
|
|
15
|
+
* @param moduleType - Module type for context-aware analysis
|
|
16
|
+
* @param epsilon - Regularization parameter (default: 2.0)
|
|
17
|
+
* @param weights - Linear weights (default: DEFAULT_WEIGHTS)
|
|
18
|
+
*/
|
|
19
|
+
export declare function calculateTensorScore(vector: Vector5D, moduleType?: ModuleType, epsilon?: number, weights?: Vector5D): TensorScore;
|
|
20
|
+
/**
|
|
21
|
+
* Calculate convergence score
|
|
22
|
+
*
|
|
23
|
+
* Returns:
|
|
24
|
+
* < 0: Safe zone (converged)
|
|
25
|
+
* 0-1: ε-neighborhood (review needed)
|
|
26
|
+
* > 1: Violation zone
|
|
27
|
+
*/
|
|
28
|
+
export declare function convergenceScore(current: number, threshold: number, epsilon: number): number;
|
|
29
|
+
/**
|
|
30
|
+
* Estimate Lipschitz constant from two points
|
|
31
|
+
*
|
|
32
|
+
* k = |f(x) - f(y)| / |x - y|
|
|
33
|
+
* For contraction mapping, we need k < 1
|
|
34
|
+
*/
|
|
35
|
+
export declare function estimateLipschitz(v1: Vector5D, v2: Vector5D, score1: number, score2: number): number;
|
|
36
|
+
/**
|
|
37
|
+
* Analyze convergence status
|
|
38
|
+
*/
|
|
39
|
+
export declare function analyzeConvergence(score: number, threshold?: number, epsilon?: number, options?: {
|
|
40
|
+
prevVector?: Vector5D;
|
|
41
|
+
currVector?: Vector5D;
|
|
42
|
+
prevScore?: number;
|
|
43
|
+
isOscillating?: boolean;
|
|
44
|
+
}): ConvergenceAnalysis;
|
|
45
|
+
/**
|
|
46
|
+
* Hodge decomposition of complexity vector
|
|
47
|
+
*
|
|
48
|
+
* - H^{2,0} (holomorphic): Control + Nesting → Local algorithmic
|
|
49
|
+
* - H^{0,2} (anti-holomorphic): State + Coupling → Global structural
|
|
50
|
+
* - H^{1,1} (harmonic): Async → Mixed/balanced
|
|
51
|
+
*/
|
|
52
|
+
export declare function hodgeDecomposition(vector: Vector5D, weights?: Vector5D): HodgeDecomposition;
|
|
53
|
+
/**
|
|
54
|
+
* Classify complexity score into level
|
|
55
|
+
*/
|
|
56
|
+
export declare function classifyComplexityLevel(score: number): ComplexityLevel;
|
|
57
|
+
/**
|
|
58
|
+
* Generate refactoring recommendations based on vector analysis
|
|
59
|
+
*/
|
|
60
|
+
export declare function recommendRefactoring(vector: Vector5D, weights?: Vector5D): RefactoringRecommendation[];
|
|
61
|
+
/**
|
|
62
|
+
* Check if in safe zone (below threshold - ε)
|
|
63
|
+
*/
|
|
64
|
+
export declare function isSafe(score: TensorScore): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Check if needs review (in ε-neighborhood)
|
|
67
|
+
*/
|
|
68
|
+
export declare function needsReview(score: TensorScore): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Check if violates threshold
|
|
71
|
+
*/
|
|
72
|
+
export declare function isViolation(score: TensorScore): boolean;
|
|
73
|
+
//# sourceMappingURL=scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/tensor/scoring.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,mBAAmB,EAEnB,kBAAkB,EAClB,eAAe,EACf,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAUpB;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,QAM7B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,QAAQ,EAChB,UAAU,GAAE,UAAsB,EAClC,OAAO,GAAE,MAAY,EACrB,OAAO,GAAE,QAA0B,GAClC,WAAW,CAwBb;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAYD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,EACZ,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAa,EACxB,OAAO,GAAE,MAAY,EACrB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GACA,mBAAmB,CAyBrB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,EAChB,OAAO,GAAE,QAA0B,GAClC,kBAAkB,CAqBpB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAMtE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,QAAQ,EAChB,OAAO,GAAE,QAA0B,GAClC,yBAAyB,EAAE,CAqC7B;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAEvD"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Tensor-based Complexity Scoring
|
|
3
|
+
*
|
|
4
|
+
* score = v^T M v + <v, w> + ε‖v‖²
|
|
5
|
+
*/
|
|
6
|
+
import { getInteractionMatrix, quadraticForm, dotProduct, vectorNorm, vectorToArray, } from './matrix.js';
|
|
7
|
+
/**
|
|
8
|
+
* Default linear weights
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_WEIGHTS = {
|
|
11
|
+
control: 1.0,
|
|
12
|
+
nesting: 1.5,
|
|
13
|
+
state: 2.0,
|
|
14
|
+
async: 2.5,
|
|
15
|
+
coupling: 3.0,
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Calculate tensor-based complexity score
|
|
19
|
+
*
|
|
20
|
+
* @param vector - 5D complexity vector
|
|
21
|
+
* @param moduleType - Module type for context-aware analysis
|
|
22
|
+
* @param epsilon - Regularization parameter (default: 2.0)
|
|
23
|
+
* @param weights - Linear weights (default: DEFAULT_WEIGHTS)
|
|
24
|
+
*/
|
|
25
|
+
export function calculateTensorScore(vector, moduleType = 'unknown', epsilon = 2.0, weights = DEFAULT_WEIGHTS) {
|
|
26
|
+
// Get interaction matrix for module type
|
|
27
|
+
const matrix = getInteractionMatrix(moduleType);
|
|
28
|
+
// Calculate components
|
|
29
|
+
const linear = dotProduct(vector, weights);
|
|
30
|
+
const quadratic = quadraticForm(vector, matrix) * 0.1; // Scale factor
|
|
31
|
+
const raw = linear + quadratic;
|
|
32
|
+
// ε-regularization
|
|
33
|
+
const normSquared = Math.pow(vectorNorm(vector), 2);
|
|
34
|
+
const regularization = epsilon * normSquared * 0.01; // Scale factor
|
|
35
|
+
const regularized = raw + regularization;
|
|
36
|
+
return {
|
|
37
|
+
linear: Math.round(linear * 100) / 100,
|
|
38
|
+
quadratic: Math.round(quadratic * 100) / 100,
|
|
39
|
+
raw: Math.round(raw * 100) / 100,
|
|
40
|
+
regularization: Math.round(regularization * 100) / 100,
|
|
41
|
+
regularized: Math.round(regularized * 100) / 100,
|
|
42
|
+
epsilon,
|
|
43
|
+
moduleType,
|
|
44
|
+
vector,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Calculate convergence score
|
|
49
|
+
*
|
|
50
|
+
* Returns:
|
|
51
|
+
* < 0: Safe zone (converged)
|
|
52
|
+
* 0-1: ε-neighborhood (review needed)
|
|
53
|
+
* > 1: Violation zone
|
|
54
|
+
*/
|
|
55
|
+
export function convergenceScore(current, threshold, epsilon) {
|
|
56
|
+
if (epsilon === 0) {
|
|
57
|
+
return current > threshold - epsilon ? Infinity : 0;
|
|
58
|
+
}
|
|
59
|
+
const target = threshold - epsilon;
|
|
60
|
+
return (current - target) / epsilon;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Determine convergence status from score
|
|
64
|
+
*/
|
|
65
|
+
function getConvergenceStatus(convScore, isOscillating = false) {
|
|
66
|
+
if (isOscillating)
|
|
67
|
+
return 'oscillating';
|
|
68
|
+
if (convScore < 0)
|
|
69
|
+
return 'safe';
|
|
70
|
+
if (convScore < 1)
|
|
71
|
+
return 'review';
|
|
72
|
+
return 'violation';
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Estimate Lipschitz constant from two points
|
|
76
|
+
*
|
|
77
|
+
* k = |f(x) - f(y)| / |x - y|
|
|
78
|
+
* For contraction mapping, we need k < 1
|
|
79
|
+
*/
|
|
80
|
+
export function estimateLipschitz(v1, v2, score1, score2) {
|
|
81
|
+
const a1 = vectorToArray(v1);
|
|
82
|
+
const a2 = vectorToArray(v2);
|
|
83
|
+
// Calculate vector distance
|
|
84
|
+
const vDist = Math.sqrt(a1.reduce((sum, x, i) => sum + Math.pow(x - a2[i], 2), 0));
|
|
85
|
+
if (vDist < 1e-10)
|
|
86
|
+
return 0;
|
|
87
|
+
// Calculate score distance
|
|
88
|
+
const sDist = Math.abs(score1 - score2);
|
|
89
|
+
return sDist / vDist;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Analyze convergence status
|
|
93
|
+
*/
|
|
94
|
+
export function analyzeConvergence(score, threshold = 10.0, epsilon = 2.0, options) {
|
|
95
|
+
const target = threshold - epsilon;
|
|
96
|
+
const convScore = convergenceScore(score, threshold, epsilon);
|
|
97
|
+
// Estimate Lipschitz constant if vectors provided
|
|
98
|
+
let lipschitzEstimate = 0;
|
|
99
|
+
if (options?.prevVector && options?.currVector && options?.prevScore !== undefined) {
|
|
100
|
+
lipschitzEstimate = estimateLipschitz(options.prevVector, options.currVector, options.prevScore, score);
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
score,
|
|
104
|
+
threshold,
|
|
105
|
+
epsilon,
|
|
106
|
+
convergenceScore: Math.round(convScore * 1000) / 1000,
|
|
107
|
+
status: getConvergenceStatus(convScore, options?.isOscillating),
|
|
108
|
+
distanceToTarget: Math.round((score - target) * 100) / 100,
|
|
109
|
+
distanceToThreshold: Math.round((threshold - score) * 100) / 100,
|
|
110
|
+
lipschitzEstimate: Math.round(lipschitzEstimate * 1000) / 1000,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Hodge decomposition of complexity vector
|
|
115
|
+
*
|
|
116
|
+
* - H^{2,0} (holomorphic): Control + Nesting → Local algorithmic
|
|
117
|
+
* - H^{0,2} (anti-holomorphic): State + Coupling → Global structural
|
|
118
|
+
* - H^{1,1} (harmonic): Async → Mixed/balanced
|
|
119
|
+
*/
|
|
120
|
+
export function hodgeDecomposition(vector, weights = DEFAULT_WEIGHTS) {
|
|
121
|
+
// Algorithmic: Control + Nesting
|
|
122
|
+
const algorithmic = vector.control * weights.control + vector.nesting * weights.nesting;
|
|
123
|
+
// Architectural: State + Coupling
|
|
124
|
+
const architectural = vector.state * weights.state + vector.coupling * weights.coupling;
|
|
125
|
+
// Balanced: Async (bridges both worlds)
|
|
126
|
+
const balanced = vector.async * weights.async;
|
|
127
|
+
const total = algorithmic + architectural + balanced;
|
|
128
|
+
const balanceRatio = total > 0 ? balanced / total : 0;
|
|
129
|
+
return {
|
|
130
|
+
algorithmic: Math.round(algorithmic * 100) / 100,
|
|
131
|
+
architectural: Math.round(architectural * 100) / 100,
|
|
132
|
+
balanced: Math.round(balanced * 100) / 100,
|
|
133
|
+
total: Math.round(total * 100) / 100,
|
|
134
|
+
balanceRatio: Math.round(balanceRatio * 1000) / 1000,
|
|
135
|
+
isHarmonic: balanceRatio >= 0.3,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Classify complexity score into level
|
|
140
|
+
*/
|
|
141
|
+
export function classifyComplexityLevel(score) {
|
|
142
|
+
if (score < 2)
|
|
143
|
+
return 'minimal';
|
|
144
|
+
if (score < 5)
|
|
145
|
+
return 'low';
|
|
146
|
+
if (score < 10)
|
|
147
|
+
return 'medium';
|
|
148
|
+
if (score < 20)
|
|
149
|
+
return 'high';
|
|
150
|
+
return 'extreme';
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Generate refactoring recommendations based on vector analysis
|
|
154
|
+
*/
|
|
155
|
+
export function recommendRefactoring(vector, weights = DEFAULT_WEIGHTS) {
|
|
156
|
+
const dimensions = ['control', 'nesting', 'state', 'async', 'coupling'];
|
|
157
|
+
const arr = vectorToArray(vector);
|
|
158
|
+
const wArr = vectorToArray(weights);
|
|
159
|
+
// Calculate weighted contributions
|
|
160
|
+
const weighted = arr.map((v, i) => v * wArr[i]);
|
|
161
|
+
const total = weighted.reduce((sum, w) => sum + w, 0);
|
|
162
|
+
if (total === 0)
|
|
163
|
+
return [];
|
|
164
|
+
// Calculate contributions and sort by weight
|
|
165
|
+
const contributions = dimensions.map((dim, i) => ({
|
|
166
|
+
dimension: dim,
|
|
167
|
+
weighted: weighted[i],
|
|
168
|
+
percentage: weighted[i] / total,
|
|
169
|
+
}));
|
|
170
|
+
contributions.sort((a, b) => b.weighted - a.weighted);
|
|
171
|
+
// Generate recommendations for top contributors
|
|
172
|
+
const actions = {
|
|
173
|
+
control: 'Extract complex conditionals into separate functions',
|
|
174
|
+
nesting: 'Flatten nested structures using early returns or guard clauses',
|
|
175
|
+
state: 'Reduce state mutations; consider immutable patterns',
|
|
176
|
+
async: 'Simplify async flow; reduce callback nesting',
|
|
177
|
+
coupling: 'Extract dependencies; use dependency injection',
|
|
178
|
+
};
|
|
179
|
+
return contributions
|
|
180
|
+
.filter(c => c.percentage >= 0.1) // Only dimensions contributing >= 10%
|
|
181
|
+
.map(c => ({
|
|
182
|
+
dimension: c.dimension,
|
|
183
|
+
priority: Math.min(5, Math.floor(c.percentage * 10) + 1),
|
|
184
|
+
action: actions[c.dimension],
|
|
185
|
+
expectedImpact: Math.round(c.weighted * 0.3 * 100) / 100, // Assume 30% reduction
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Check if in safe zone (below threshold - ε)
|
|
190
|
+
*/
|
|
191
|
+
export function isSafe(score) {
|
|
192
|
+
return score.regularized < 8.0; // threshold(10) - ε(2)
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Check if needs review (in ε-neighborhood)
|
|
196
|
+
*/
|
|
197
|
+
export function needsReview(score) {
|
|
198
|
+
return score.regularized >= 8.0 && score.regularized < 10.0;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if violates threshold
|
|
202
|
+
*/
|
|
203
|
+
export function isViolation(score) {
|
|
204
|
+
return score.regularized >= 10.0;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/tensor/scoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Tensor Types
|
|
3
|
+
*
|
|
4
|
+
* Mathematical foundation:
|
|
5
|
+
* score^(2) = v^T M v + <v, w>
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 5-dimensional complexity vector
|
|
9
|
+
*/
|
|
10
|
+
export interface Vector5D {
|
|
11
|
+
control: number;
|
|
12
|
+
nesting: number;
|
|
13
|
+
state: number;
|
|
14
|
+
async: number;
|
|
15
|
+
coupling: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Module type for context-aware analysis
|
|
19
|
+
*/
|
|
20
|
+
export type ModuleType = 'api' | 'lib' | 'app' | 'web' | 'deploy' | 'unknown';
|
|
21
|
+
/**
|
|
22
|
+
* Dimension indices
|
|
23
|
+
*/
|
|
24
|
+
export declare const IDX_CONTROL = 0;
|
|
25
|
+
export declare const IDX_NESTING = 1;
|
|
26
|
+
export declare const IDX_STATE = 2;
|
|
27
|
+
export declare const IDX_ASYNC = 3;
|
|
28
|
+
export declare const IDX_COUPLING = 4;
|
|
29
|
+
/**
|
|
30
|
+
* 5x5 Interaction Matrix
|
|
31
|
+
*/
|
|
32
|
+
export type Matrix5x5 = [
|
|
33
|
+
[
|
|
34
|
+
number,
|
|
35
|
+
number,
|
|
36
|
+
number,
|
|
37
|
+
number,
|
|
38
|
+
number
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
number,
|
|
42
|
+
number,
|
|
43
|
+
number,
|
|
44
|
+
number,
|
|
45
|
+
number
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
number,
|
|
49
|
+
number,
|
|
50
|
+
number,
|
|
51
|
+
number,
|
|
52
|
+
number
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
number,
|
|
56
|
+
number,
|
|
57
|
+
number,
|
|
58
|
+
number,
|
|
59
|
+
number
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
number,
|
|
63
|
+
number,
|
|
64
|
+
number,
|
|
65
|
+
number,
|
|
66
|
+
number
|
|
67
|
+
]
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Tensor score result
|
|
71
|
+
*/
|
|
72
|
+
export interface TensorScore {
|
|
73
|
+
/** Linear component: <v, w> */
|
|
74
|
+
linear: number;
|
|
75
|
+
/** Quadratic component: v^T M v */
|
|
76
|
+
quadratic: number;
|
|
77
|
+
/** Raw score: linear + quadratic */
|
|
78
|
+
raw: number;
|
|
79
|
+
/** Regularization term: ε‖v‖² */
|
|
80
|
+
regularization: number;
|
|
81
|
+
/** Final regularized score */
|
|
82
|
+
regularized: number;
|
|
83
|
+
/** Epsilon value used */
|
|
84
|
+
epsilon: number;
|
|
85
|
+
/** Module type used */
|
|
86
|
+
moduleType: ModuleType;
|
|
87
|
+
/** Complexity vector */
|
|
88
|
+
vector: Vector5D;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Convergence status
|
|
92
|
+
*/
|
|
93
|
+
export type ConvergenceStatus = 'safe' | 'review' | 'violation' | 'oscillating';
|
|
94
|
+
/**
|
|
95
|
+
* Convergence analysis result
|
|
96
|
+
*/
|
|
97
|
+
export interface ConvergenceAnalysis {
|
|
98
|
+
/** Current score */
|
|
99
|
+
score: number;
|
|
100
|
+
/** Threshold value */
|
|
101
|
+
threshold: number;
|
|
102
|
+
/** Epsilon value */
|
|
103
|
+
epsilon: number;
|
|
104
|
+
/** Convergence score: (score - target) / ε */
|
|
105
|
+
convergenceScore: number;
|
|
106
|
+
/** Status based on convergence score */
|
|
107
|
+
status: ConvergenceStatus;
|
|
108
|
+
/** Distance to target (threshold - ε) */
|
|
109
|
+
distanceToTarget: number;
|
|
110
|
+
/** Distance to threshold */
|
|
111
|
+
distanceToThreshold: number;
|
|
112
|
+
/** Lipschitz constant estimate */
|
|
113
|
+
lipschitzEstimate: number;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Hodge decomposition result
|
|
117
|
+
*
|
|
118
|
+
* H^k(Code) = ⊕_{p+q=k} H^{p,q}(Code)
|
|
119
|
+
*/
|
|
120
|
+
export interface HodgeDecomposition {
|
|
121
|
+
/** H^{2,0}: Control + Nesting (algorithmic) */
|
|
122
|
+
algorithmic: number;
|
|
123
|
+
/** H^{0,2}: State + Coupling (architectural) */
|
|
124
|
+
architectural: number;
|
|
125
|
+
/** H^{1,1}: Async (balanced/harmonic) */
|
|
126
|
+
balanced: number;
|
|
127
|
+
/** Total complexity */
|
|
128
|
+
total: number;
|
|
129
|
+
/** Balance ratio: balanced / total */
|
|
130
|
+
balanceRatio: number;
|
|
131
|
+
/** Is in harmonic state (well-balanced) */
|
|
132
|
+
isHarmonic: boolean;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Complexity level classification
|
|
136
|
+
*/
|
|
137
|
+
export type ComplexityLevel = 'minimal' | 'low' | 'medium' | 'high' | 'extreme';
|
|
138
|
+
/**
|
|
139
|
+
* Deviation from canonical form result
|
|
140
|
+
*/
|
|
141
|
+
export interface DeviationResult {
|
|
142
|
+
/** Euclidean distance to canonical centroid */
|
|
143
|
+
euclideanDistance: number;
|
|
144
|
+
/** Mahalanobis-like distance using interaction matrix */
|
|
145
|
+
mahalanobisDistance: number;
|
|
146
|
+
/** Maximum deviation in any dimension */
|
|
147
|
+
maxDimensionDeviation: number;
|
|
148
|
+
/** Normalized deviation (0-1 scale) */
|
|
149
|
+
normalizedDeviation: number;
|
|
150
|
+
/** Whether vector is within canonical bounds */
|
|
151
|
+
isCanonical: boolean;
|
|
152
|
+
/** Whether vector is outside ALL canonical regions */
|
|
153
|
+
isOrphan: boolean;
|
|
154
|
+
/** Module type used for comparison */
|
|
155
|
+
moduleType: ModuleType;
|
|
156
|
+
/** Current vector */
|
|
157
|
+
vector: Vector5D;
|
|
158
|
+
/** Dimensions that violate canonical bounds */
|
|
159
|
+
violationDimensions: string[];
|
|
160
|
+
/** Status: canonical | deviated | orphan */
|
|
161
|
+
status: 'canonical' | 'deviated' | 'orphan';
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Refactoring recommendation
|
|
165
|
+
*/
|
|
166
|
+
export interface RefactoringRecommendation {
|
|
167
|
+
/** Dimension to address */
|
|
168
|
+
dimension: string;
|
|
169
|
+
/** Priority (1-5, higher = more urgent) */
|
|
170
|
+
priority: number;
|
|
171
|
+
/** Recommended action */
|
|
172
|
+
action: string;
|
|
173
|
+
/** Expected impact on score */
|
|
174
|
+
expectedImpact: number;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tensor/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.0.3: Tensor Types
|
|
3
|
+
*
|
|
4
|
+
* Mathematical foundation:
|
|
5
|
+
* score^(2) = v^T M v + <v, w>
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Dimension indices
|
|
9
|
+
*/
|
|
10
|
+
export const IDX_CONTROL = 0;
|
|
11
|
+
export const IDX_NESTING = 1;
|
|
12
|
+
export const IDX_STATE = 2;
|
|
13
|
+
export const IDX_ASYNC = 3;
|
|
14
|
+
export const IDX_COUPLING = 4;
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tensor/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3B,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "semantic-complexity",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3-38ef2e6f",
|
|
4
4
|
"description": "Multi-dimensional code complexity analyzer",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -33,6 +33,10 @@
|
|
|
33
33
|
"./gates": {
|
|
34
34
|
"types": "./dist/gates/index.d.ts",
|
|
35
35
|
"import": "./dist/gates/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./tensor": {
|
|
38
|
+
"types": "./dist/tensor/index.d.ts",
|
|
39
|
+
"import": "./dist/tensor/index.js"
|
|
36
40
|
}
|
|
37
41
|
},
|
|
38
42
|
"files": [
|