ソースを参照

Merge pull request #820 from molstar/cantor-mol-script

add cantor-pairing functions to mol-script
Alexander Rose 1 年間 前
コミット
e34d1242a9

+ 3 - 0
CHANGELOG.md

@@ -23,6 +23,9 @@ Note that since we don't clearly distinguish between a public and private interf
 - Support `ignoreHydrogens` in interactions representation
 - Add hydroxyproline (HYP) commonly present in collagen molecules to the list of amino acids
 - Fix assemblies for Archive PDB files (do not generate unique `label_asym_id` if `REMARK 350` is present)
+- Add additional functions to `core.math` in `mol-script`
+    - `cantorPairing`, `sortedCantorPairing`, `invertCantorPairing`,
+    - `trunc`, `sign`
 
 ## [v3.34.0] - 2023-04-16
 

+ 6 - 4
src/mol-script/language/symbol-table/core.ts

@@ -46,10 +46,6 @@ export const TTargs = Arguments.Dictionary({
     1: Argument(Type.Num)
 });
 
-const XX = { test: Argument(Type.Str) };
-const t: Arguments.PropTypes<typeof XX> = 0 as any;
-t.test;
-
 const type = {
     '@header': 'Types',
     bool: symbol(Arguments.Dictionary({ 0: Argument(Type.AnyValue) }), Type.Bool, 'Convert a value to boolean.'),
@@ -116,10 +112,16 @@ const math = {
     min: binOp(Type.Num),
     max: binOp(Type.Num),
 
+    cantorPairing: binRel(Type.Num, Type.Num),
+    sortedCantorPairing: binRel(Type.Num, Type.Num),
+    invertCantorPairing: symbol(Arguments.Dictionary({ 0: Argument(Type.Num) }), Types.List(Type.Num)),
+
     floor: unaryOp(Type.Num),
     ceil: unaryOp(Type.Num),
     roundInt: unaryOp(Type.Num),
+    trunc: unaryOp(Type.Num),
     abs: unaryOp(Type.Num),
+    sign: unaryOp(Type.Num),
     sqrt: unaryOp(Type.Num),
     cbrt: unaryOp(Type.Num),
     sin: unaryOp(Type.Num),

+ 7 - 1
src/mol-script/runtime/query/table.ts

@@ -12,7 +12,7 @@ import { ElementSymbol, BondType, SecondaryStructureType } from '../../../mol-mo
 import { SetUtils } from '../../../mol-util/set';
 import { upperCaseAny } from '../../../mol-util/string';
 import { VdwRadius, AtomWeight, AtomNumber } from '../../../mol-model/structure/model/properties/atomic';
-import { cantorPairing } from '../../../mol-data/util';
+import { cantorPairing, invertCantorPairing, sortedCantorPairing } from '../../../mol-data/util';
 import { bundleElementImpl, bundleGenerator } from '../../../mol-model/structure/query/queries/internal';
 import { arrayEqual } from '../../../mol-util/array';
 
@@ -118,10 +118,16 @@ const symbols = [
         return ret;
     }),
 
+    C(MolScript.core.math.cantorPairing, (ctx, v) => cantorPairing(v[0](ctx), v[1](ctx))),
+    C(MolScript.core.math.sortedCantorPairing, (ctx, v) => sortedCantorPairing(v[0](ctx), v[1](ctx))),
+    C(MolScript.core.math.invertCantorPairing, (ctx, v) => invertCantorPairing([0, 0], v[0](ctx))),
+
     C(MolScript.core.math.floor, (ctx, v) => Math.floor(v[0](ctx))),
     C(MolScript.core.math.ceil, (ctx, v) => Math.ceil(v[0](ctx))),
     C(MolScript.core.math.roundInt, (ctx, v) => Math.round(v[0](ctx))),
+    C(MolScript.core.math.trunc, (ctx, v) => Math.trunc(v[0](ctx))),
     C(MolScript.core.math.abs, (ctx, v) => Math.abs(v[0](ctx))),
+    C(MolScript.core.math.sign, (ctx, v) => Math.sign(v[0](ctx))),
     C(MolScript.core.math.sqrt, (ctx, v) => Math.sqrt(v[0](ctx))),
     C(MolScript.core.math.cbrt, (ctx, v) => Math.cbrt(v[0](ctx))),
     C(MolScript.core.math.sin, (ctx, v) => Math.sin(v[0](ctx))),

+ 5 - 0
src/mol-script/script/mol-script/symbols.ts

@@ -54,10 +54,15 @@ export const SymbolTable = [
         Alias(MolScript.core.math.mod, 'mod'),
         Alias(MolScript.core.math.min, 'min'),
         Alias(MolScript.core.math.max, 'max'),
+        Alias(MolScript.core.math.cantorPairing, 'cantor-pairing'),
+        Alias(MolScript.core.math.sortedCantorPairing, 'sorted-cantor-pairing'),
+        Alias(MolScript.core.math.invertCantorPairing, 'invert-cantor-pairing'),
         Alias(MolScript.core.math.floor, 'floor'),
         Alias(MolScript.core.math.ceil, 'ceil'),
         Alias(MolScript.core.math.roundInt, 'round'),
+        Alias(MolScript.core.math.trunc, 'trunc'),
         Alias(MolScript.core.math.abs, 'abs'),
+        Alias(MolScript.core.math.sign, 'sign'),
         Alias(MolScript.core.math.sqrt, 'sqrt'),
         Alias(MolScript.core.math.cbrt, 'cbrt'),
         Alias(MolScript.core.math.sin, 'sin'),