@kent-tokyo/chematic 1.1.3 → 1.1.5

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/README.md CHANGED
@@ -4,7 +4,7 @@ WebAssembly bindings for [chematic](https://github.com/kent-tokyo/chematic), a p
4
4
 
5
5
  Published to npm as [`@kent-tokyo/chematic`](https://www.npmjs.com/package/@kent-tokyo/chematic).
6
6
 
7
- The current workspace line is 1.1.3. The binding keeps bounded parsing,
7
+ The current workspace line is 1.1.5. The binding keeps bounded parsing,
8
8
  typed failures, and opt-in `embed_pipeline_v2_json`; 3D/MMFF94 behavior remains
9
9
  Experimental and is not a claim of full RDKit parity.
10
10
 
@@ -454,6 +454,18 @@ export class MolHandle {
454
454
  * weights use zero-based molecule atom order.
455
455
  */
456
456
  rdkit_align_json(probe_coords_json: string, reference_coords_json: string, atom_map_json: string | null | undefined, weights_json: string | null | undefined, reflect: boolean, max_iterations: number): string;
457
+ /**
458
+ * RDKit `GetAllConformerBestRMS` as a JSON number array in
459
+ * `(1,0), (2,0), (2,1), ...` order. Atom mappings are computed once for
460
+ * the entire batch.
461
+ */
462
+ rdkit_all_conformer_best_rms_json(conformers_json: string, max_matches: number, symmetrize: boolean, weights_json?: string | null): string;
463
+ /**
464
+ * RDKit 2026.09.1 `GetAllConformerBestRMSToRef` as a JSON number array
465
+ * in reference-major order. Atom mappings are computed once for the
466
+ * entire Cartesian product.
467
+ */
468
+ rdkit_all_conformer_best_rms_to_reference_json(reference: MolHandle, probe_conformers_json: string, reference_conformers_json: string, max_matches: number, symmetrize: boolean, weights_json?: string | null): string;
457
469
  /**
458
470
  * RDKit `GetBestAlignmentTransform` as JSON, bounded by `max_matches`.
459
471
  */
@@ -468,6 +480,15 @@ export class MolHandle {
468
480
  * diagonal and lower bounds below it. At most 512 atoms are accepted.
469
481
  */
470
482
  rdkit_bounds_matrix_json(set15bounds: boolean, do_triangle_smoothing: boolean, use_macrocycle_14_config: boolean): string;
483
+ /**
484
+ * Distance-geometry bounds with user bond-length, angle and torsion
485
+ * constraints injected before triangle smoothing.
486
+ *
487
+ * `constraintsJson` contains optional camelCase arrays `bondLengths`,
488
+ * `bondAngles`, and `torsions`; atom indices are zero based. Lengths use
489
+ * angstrom and angles use degrees.
490
+ */
491
+ rdkit_bounds_matrix_with_constraints_json(constraints_json: string, set15bounds: boolean, do_triangle_smoothing: boolean, use_macrocycle_14_config: boolean): string;
471
492
  /**
472
493
  * RDKit `CalcRMS`, bounded by `max_matches <= 1_000_000`.
473
494
  */
@@ -480,11 +501,21 @@ export class MolHandle {
480
501
  * RDKit-compatible CXSMARTS.
481
502
  */
482
503
  rdkit_cx_smarts(): string;
504
+ /**
505
+ * Checked 3D matrix in prepared RDKit atom order. JSON has one [x,y,z]
506
+ * row per prepared atom; malformed/nonfinite/unrepresentable input refuses.
507
+ */
508
+ rdkit_distance_matrix_3d_checked_json(coords_json: string, use_atom_wts: boolean): string;
483
509
  /**
484
510
  * Seeded RDKit ETKDGv3 coordinates as JSON. Call on an
485
511
  * explicit-hydrogen molecule. At most 512 atoms are accepted.
486
512
  */
487
513
  rdkit_embed_json(random_seed: number, max_iterations: number): string;
514
+ /**
515
+ * Seeded ETKDG embedding using constraints injected before triangle
516
+ * smoothing. Returns one `[x,y,z]` row per atom as JSON.
517
+ */
518
+ rdkit_embed_with_constraints_json(constraints_json: string, random_seed: number, max_iterations: number): string;
488
519
  /**
489
520
  * RDKit MolHash by case-insensitive function name.
490
521
  */
@@ -1261,6 +1292,18 @@ export function erg_vec_json(mol: MolHandle): string;
1261
1292
  */
1262
1293
  export function estate_indices_json(mol: MolHandle): string;
1263
1294
 
1295
+ /**
1296
+ * Decode an RDKit atom code as stable JSON.
1297
+ *
1298
+ * Returns `{"symbol":"C","branchCount":3,"piElectronCount":1}`.
1299
+ */
1300
+ export function explain_rdkit_atom_code_json(code: number): string;
1301
+
1302
+ /**
1303
+ * Decode a decimal legacy RDKit torsion code as stable JSON.
1304
+ */
1305
+ export function explain_rdkit_topological_torsion_code_json(code_decimal: string, size: number): string;
1306
+
1264
1307
  /**
1265
1308
  * Extract an extxyz frame's coordinates, cell, per-atom properties and
1266
1309
  * frame metadata as JSON, in the SAME atom order [`mol_from_extxyz`]
@@ -1955,6 +1998,12 @@ export function mol_block_stereo_diagnostics_json(mol_block: string): string;
1955
1998
  */
1956
1999
  export function mol_block_stereo_loss_json(mol: MolHandle): string;
1957
2000
 
2001
+ /**
2002
+ * Project explicit CCD topology. Unassigned stereo annotations require
2003
+ * explicit loss consent; coordinates remain in parse_ccd_json's record.
2004
+ */
2005
+ export function mol_from_ccd(text: string, allow_stereo_loss: boolean): MolHandle;
2006
+
1958
2007
  /**
1959
2008
  * Only the first molecular fragment in the document is returned.
1960
2009
  * Returns a JS error if the document cannot be parsed.
@@ -2297,6 +2346,12 @@ export function orca_output_to_json(text: string): string;
2297
2346
  */
2298
2347
  export function pains_matches_json(mol: MolHandle): string;
2299
2348
 
2349
+ /**
2350
+ * One CCD template including source IDs, charges, explicit bonds, optional
2351
+ * coordinates and unassigned stereo labels. No atom_site bond perception.
2352
+ */
2353
+ export function parse_ccd_json(text: string): string;
2354
+
2300
2355
  /**
2301
2356
  * Inspect strictly validated CJSON with exact source and opaque field paths.
2302
2357
  */
@@ -2318,6 +2373,11 @@ export function parse_cxsmarts_json(s: string): string;
2318
2373
  */
2319
2374
  export function parse_cxsmiles_json(s: string): string;
2320
2375
 
2376
+ /**
2377
+ * Inspect the bounded HIN record, including literal aromatic bonds and charges.
2378
+ */
2379
+ export function parse_hin_record_json(text: string): string;
2380
+
2321
2381
  /**
2322
2382
  * Inspect partial charges, atom types and source retention for MOL2.
2323
2383
  */
@@ -2444,6 +2504,17 @@ export function preflight_smiles_json(smiles: string, width: number, height: num
2444
2504
  */
2445
2505
  export function prepare_rdkit_ecfp4(mol: MolHandle): PreparedRdkitEcfp4Handle;
2446
2506
 
2507
+ /**
2508
+ * Amino-acid-only mmCIF projection in the same schema as
2509
+ * [`protein_from_pdb_json`].
2510
+ */
2511
+ export function protein_from_mmcif_json(text: string): string;
2512
+
2513
+ /**
2514
+ * Amino-acid-only PDB projection as stable JSON.
2515
+ */
2516
+ export function protein_from_pdb_json(text: string): string;
2517
+
2447
2518
  /**
2448
2519
  * Coordinates (Å) plus molecular charge/multiplicity from a QCSchema
2449
2520
  * `qcschema_molecule` document, in the SAME atom order
@@ -2490,6 +2561,14 @@ export function qcschema_validate_atomic_result(json: string): string;
2490
2561
  */
2491
2562
  export function random_smiles_json(smiles: string, count: number, seed: bigint): string;
2492
2563
 
2564
+ /**
2565
+ * RDKit atom-pair atom code for one atom.
2566
+ *
2567
+ * `branch_subtract` is normally 0 for atom-pair diagnostics, 1 for a
2568
+ * torsion endpoint, and 2 for an interior torsion atom.
2569
+ */
2570
+ export function rdkit_atom_code(mol: MolHandle, atom_index: number, branch_subtract: number): number;
2571
+
2493
2572
  /**
2494
2573
  * RDKit-bit-exact ECFP4 (radius=2, 2048 bits, `useChirality=false`, `useBondTypes=true`,
2495
2574
  * RDKit's default atom invariant) as a bit-packed byte vector (256 bytes = 2048 bits).
@@ -2590,6 +2669,21 @@ export function rdkit_path_bitvec(mol: MolHandle): Uint8Array;
2590
2669
  */
2591
2670
  export function rdkit_rdk_bitvec(mol: MolHandle): Uint8Array;
2592
2671
 
2672
+ /**
2673
+ * RDKit 2026.09.1 RDKFingerprint with `ignoreAtoms`: every branched path
2674
+ * containing one of `ignored_atoms` is excluded. Invalid indices return a JS
2675
+ * error; an empty list is bit-identical to [`rdkit_rdk_bitvec`].
2676
+ */
2677
+ export function rdkit_rdk_bitvec_ignoring_atoms(mol: MolHandle, ignored_atoms: Uint32Array): Uint8Array;
2678
+
2679
+ /**
2680
+ * Pack a JSON array of atom indices into RDKit's legacy torsion code.
2681
+ *
2682
+ * The decimal string return type avoids losing precision in JavaScript's
2683
+ * `number` type for codes above 2^53.
2684
+ */
2685
+ export function rdkit_topological_torsion_path_code_decimal(mol: MolHandle, path_json: string): string;
2686
+
2593
2687
  /**
2594
2688
  * Compute the opt-in RDKit-compatible hashed topological-torsion fingerprint
2595
2689
  * as a bit-packed byte vector (256 bytes = 2048 bits). This remains separate
@@ -2699,6 +2793,11 @@ export function ring_families_json(mol: MolHandle): string;
2699
2793
  */
2700
2794
  export function roundtrip_cjson_record(text: string): string;
2701
2795
 
2796
+ /**
2797
+ * Validate a single HIN record and retain exact source text and line endings.
2798
+ */
2799
+ export function roundtrip_hin_record(text: string): string;
2800
+
2702
2801
  /**
2703
2802
  * Validate one MOL2 record and preserve its exact source, including metadata.
2704
2803
  */
@@ -3427,6 +3526,8 @@ export interface InitOutput {
3427
3526
  readonly enumerate_tautomers_json: (a: number) => [number, number];
3428
3527
  readonly erg_vec_json: (a: number) => [number, number];
3429
3528
  readonly estate_indices_json: (a: number) => [number, number];
3529
+ readonly explain_rdkit_atom_code_json: (a: number) => [number, number];
3530
+ readonly explain_rdkit_topological_torsion_code_json: (a: number, b: number, c: number) => [number, number, number, number];
3430
3531
  readonly extxyz_frame_json: (a: number, b: number) => [number, number, number, number];
3431
3532
  readonly extxyz_frames_batch_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3432
3533
  readonly fcfp4_bitvec: (a: number) => [number, number];
@@ -3501,6 +3602,7 @@ export interface InitOutput {
3501
3602
  readonly mol_block_from_smiles: (a: number, b: number) => [number, number, number, number];
3502
3603
  readonly mol_block_stereo_diagnostics_json: (a: number, b: number) => [number, number, number, number];
3503
3604
  readonly mol_block_stereo_loss_json: (a: number) => [number, number];
3605
+ readonly mol_from_ccd: (a: number, b: number, c: number) => [number, number, number];
3504
3606
  readonly mol_from_cdxml: (a: number, b: number) => [number, number, number];
3505
3607
  readonly mol_from_cjson: (a: number, b: number) => [number, number, number];
3506
3608
  readonly mol_from_cml: (a: number, b: number) => [number, number, number];
@@ -3597,13 +3699,18 @@ export interface InitOutput {
3597
3699
  readonly molhandle_qed: (a: number) => number;
3598
3700
  readonly molhandle_randic_index: (a: number) => number;
3599
3701
  readonly molhandle_rdkit_align_json: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => [number, number, number, number];
3702
+ readonly molhandle_rdkit_all_conformer_best_rms_json: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
3703
+ readonly molhandle_rdkit_all_conformer_best_rms_to_reference_json: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number, number, number];
3600
3704
  readonly molhandle_rdkit_best_alignment_json: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number];
3601
3705
  readonly molhandle_rdkit_best_rms: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number];
3602
3706
  readonly molhandle_rdkit_bounds_matrix_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3707
+ readonly molhandle_rdkit_bounds_matrix_with_constraints_json: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
3603
3708
  readonly molhandle_rdkit_calc_rms: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number];
3604
3709
  readonly molhandle_rdkit_chiral_centers_json: (a: number, b: number) => [number, number, number, number];
3605
3710
  readonly molhandle_rdkit_cx_smarts: (a: number) => [number, number, number, number];
3711
+ readonly molhandle_rdkit_distance_matrix_3d_checked_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3606
3712
  readonly molhandle_rdkit_embed_json: (a: number, b: number, c: number) => [number, number, number, number];
3713
+ readonly molhandle_rdkit_embed_with_constraints_json: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
3607
3714
  readonly molhandle_rdkit_mol_hash: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3608
3715
  readonly molhandle_rdkit_morgan_bit_info_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3609
3716
  readonly molhandle_rdkit_murcko_scaffold: (a: number) => [number, number, number, number];
@@ -3638,9 +3745,11 @@ export interface InitOutput {
3638
3745
  readonly orca_input_to_json: (a: number, b: number) => [number, number, number, number];
3639
3746
  readonly orca_output_to_json: (a: number, b: number) => [number, number, number, number];
3640
3747
  readonly pains_matches_json: (a: number) => [number, number];
3748
+ readonly parse_ccd_json: (a: number, b: number) => [number, number, number, number];
3641
3749
  readonly parse_cjson_record_json: (a: number, b: number) => [number, number, number, number];
3642
3750
  readonly parse_cxsmarts_json: (a: number, b: number) => [number, number, number, number];
3643
3751
  readonly parse_cxsmiles_json: (a: number, b: number) => [number, number, number, number];
3752
+ readonly parse_hin_record_json: (a: number, b: number) => [number, number, number, number];
3644
3753
  readonly parse_mol2_record_json: (a: number, b: number) => [number, number, number, number];
3645
3754
  readonly parse_smiles: (a: number, b: number) => [number, number, number];
3646
3755
  readonly pdb_coords_json: (a: number, b: number) => [number, number];
@@ -3657,10 +3766,13 @@ export interface InitOutput {
3657
3766
  readonly preflight_smiles_json: (a: number, b: number, c: number, d: number) => [number, number];
3658
3767
  readonly prepare_rdkit_ecfp4: (a: number) => [number, number, number];
3659
3768
  readonly preparedrdkitecfp4handle_bitvec: (a: number) => [number, number];
3769
+ readonly protein_from_mmcif_json: (a: number, b: number) => [number, number, number, number];
3770
+ readonly protein_from_pdb_json: (a: number, b: number) => [number, number, number, number];
3660
3771
  readonly qcschema_molecule_coords_json: (a: number, b: number) => [number, number, number, number];
3661
3772
  readonly qcschema_validate_atomic_input: (a: number, b: number) => [number, number, number, number];
3662
3773
  readonly qcschema_validate_atomic_result: (a: number, b: number) => [number, number, number, number];
3663
3774
  readonly random_smiles_json: (a: number, b: number, c: number, d: bigint) => [number, number, number, number];
3775
+ readonly rdkit_atom_code: (a: number, b: number, c: number) => [number, number, number];
3664
3776
  readonly rdkit_ecfp4_bitvec: (a: number) => [number, number, number, number];
3665
3777
  readonly rdkit_ecfp4_detail_json: (a: number) => [number, number, number, number];
3666
3778
  readonly rdkit_ecfp_config_bitvec: (a: number, b: number, c: number) => [number, number, number, number];
@@ -3673,6 +3785,8 @@ export interface InitOutput {
3673
3785
  readonly rdkit_nearest_neighbors_json: (a: number, b: number, c: number, d: number, e: number) => [number, number];
3674
3786
  readonly rdkit_path_bitvec: (a: number) => [number, number];
3675
3787
  readonly rdkit_rdk_bitvec: (a: number) => [number, number];
3788
+ readonly rdkit_rdk_bitvec_ignoring_atoms: (a: number, b: number, c: number) => [number, number, number, number];
3789
+ readonly rdkit_topological_torsion_path_code_decimal: (a: number, b: number, c: number) => [number, number, number, number];
3676
3790
  readonly rdkit_torsion_bitvec: (a: number) => [number, number];
3677
3791
  readonly rdkitreadresult_coords_json: (a: number) => [number, number, number, number];
3678
3792
  readonly rdkitreadresult_molecule: (a: number) => number;
@@ -3692,6 +3806,7 @@ export interface InitOutput {
3692
3806
  readonly rgroup_decompose_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3693
3807
  readonly ring_families_json: (a: number) => [number, number, number, number];
3694
3808
  readonly roundtrip_cjson_record: (a: number, b: number) => [number, number, number, number];
3809
+ readonly roundtrip_hin_record: (a: number, b: number) => [number, number, number, number];
3695
3810
  readonly roundtrip_mol2_record: (a: number, b: number) => [number, number, number, number];
3696
3811
  readonly roundtrip_mol_v3000_block: (a: number, b: number) => [number, number, number, number];
3697
3812
  readonly run_reactants: (a: number, b: number, c: number, d: number) => [number, number, number, number];
package/chematic_wasm.js CHANGED
@@ -1092,6 +1092,75 @@ export class MolHandle {
1092
1092
  wasm.__wbindgen_free(deferred6_0, deferred6_1, 1);
1093
1093
  }
1094
1094
  }
1095
+ /**
1096
+ * RDKit `GetAllConformerBestRMS` as a JSON number array in
1097
+ * `(1,0), (2,0), (2,1), ...` order. Atom mappings are computed once for
1098
+ * the entire batch.
1099
+ * @param {string} conformers_json
1100
+ * @param {number} max_matches
1101
+ * @param {boolean} symmetrize
1102
+ * @param {string | null} [weights_json]
1103
+ * @returns {string}
1104
+ */
1105
+ rdkit_all_conformer_best_rms_json(conformers_json, max_matches, symmetrize, weights_json) {
1106
+ let deferred4_0;
1107
+ let deferred4_1;
1108
+ try {
1109
+ const ptr0 = passStringToWasm0(conformers_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1110
+ const len0 = WASM_VECTOR_LEN;
1111
+ var ptr1 = isLikeNone(weights_json) ? 0 : passStringToWasm0(weights_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1112
+ var len1 = WASM_VECTOR_LEN;
1113
+ const ret = wasm.molhandle_rdkit_all_conformer_best_rms_json(this.__wbg_ptr, ptr0, len0, max_matches, symmetrize, ptr1, len1);
1114
+ var ptr3 = ret[0];
1115
+ var len3 = ret[1];
1116
+ if (ret[3]) {
1117
+ ptr3 = 0; len3 = 0;
1118
+ throw takeFromExternrefTable0(ret[2]);
1119
+ }
1120
+ deferred4_0 = ptr3;
1121
+ deferred4_1 = len3;
1122
+ return getStringFromWasm0(ptr3, len3);
1123
+ } finally {
1124
+ wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);
1125
+ }
1126
+ }
1127
+ /**
1128
+ * RDKit 2026.09.1 `GetAllConformerBestRMSToRef` as a JSON number array
1129
+ * in reference-major order. Atom mappings are computed once for the
1130
+ * entire Cartesian product.
1131
+ * @param {MolHandle} reference
1132
+ * @param {string} probe_conformers_json
1133
+ * @param {string} reference_conformers_json
1134
+ * @param {number} max_matches
1135
+ * @param {boolean} symmetrize
1136
+ * @param {string | null} [weights_json]
1137
+ * @returns {string}
1138
+ */
1139
+ rdkit_all_conformer_best_rms_to_reference_json(reference, probe_conformers_json, reference_conformers_json, max_matches, symmetrize, weights_json) {
1140
+ let deferred5_0;
1141
+ let deferred5_1;
1142
+ try {
1143
+ _assertClass(reference, MolHandle);
1144
+ const ptr0 = passStringToWasm0(probe_conformers_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1145
+ const len0 = WASM_VECTOR_LEN;
1146
+ const ptr1 = passStringToWasm0(reference_conformers_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1147
+ const len1 = WASM_VECTOR_LEN;
1148
+ var ptr2 = isLikeNone(weights_json) ? 0 : passStringToWasm0(weights_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1149
+ var len2 = WASM_VECTOR_LEN;
1150
+ const ret = wasm.molhandle_rdkit_all_conformer_best_rms_to_reference_json(this.__wbg_ptr, reference.__wbg_ptr, ptr0, len0, ptr1, len1, max_matches, symmetrize, ptr2, len2);
1151
+ var ptr4 = ret[0];
1152
+ var len4 = ret[1];
1153
+ if (ret[3]) {
1154
+ ptr4 = 0; len4 = 0;
1155
+ throw takeFromExternrefTable0(ret[2]);
1156
+ }
1157
+ deferred5_0 = ptr4;
1158
+ deferred5_1 = len4;
1159
+ return getStringFromWasm0(ptr4, len4);
1160
+ } finally {
1161
+ wasm.__wbindgen_free(deferred5_0, deferred5_1, 1);
1162
+ }
1163
+ }
1095
1164
  /**
1096
1165
  * RDKit `GetBestAlignmentTransform` as JSON, bounded by `max_matches`.
1097
1166
  * @param {string} probe_coords_json
@@ -1174,6 +1243,39 @@ export class MolHandle {
1174
1243
  wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
1175
1244
  }
1176
1245
  }
1246
+ /**
1247
+ * Distance-geometry bounds with user bond-length, angle and torsion
1248
+ * constraints injected before triangle smoothing.
1249
+ *
1250
+ * `constraintsJson` contains optional camelCase arrays `bondLengths`,
1251
+ * `bondAngles`, and `torsions`; atom indices are zero based. Lengths use
1252
+ * angstrom and angles use degrees.
1253
+ * @param {string} constraints_json
1254
+ * @param {boolean} set15bounds
1255
+ * @param {boolean} do_triangle_smoothing
1256
+ * @param {boolean} use_macrocycle_14_config
1257
+ * @returns {string}
1258
+ */
1259
+ rdkit_bounds_matrix_with_constraints_json(constraints_json, set15bounds, do_triangle_smoothing, use_macrocycle_14_config) {
1260
+ let deferred3_0;
1261
+ let deferred3_1;
1262
+ try {
1263
+ const ptr0 = passStringToWasm0(constraints_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1264
+ const len0 = WASM_VECTOR_LEN;
1265
+ const ret = wasm.molhandle_rdkit_bounds_matrix_with_constraints_json(this.__wbg_ptr, ptr0, len0, set15bounds, do_triangle_smoothing, use_macrocycle_14_config);
1266
+ var ptr2 = ret[0];
1267
+ var len2 = ret[1];
1268
+ if (ret[3]) {
1269
+ ptr2 = 0; len2 = 0;
1270
+ throw takeFromExternrefTable0(ret[2]);
1271
+ }
1272
+ deferred3_0 = ptr2;
1273
+ deferred3_1 = len2;
1274
+ return getStringFromWasm0(ptr2, len2);
1275
+ } finally {
1276
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
1277
+ }
1278
+ }
1177
1279
  /**
1178
1280
  * RDKit `CalcRMS`, bounded by `max_matches <= 1_000_000`.
1179
1281
  * @param {string} probe_coords_json
@@ -1241,6 +1343,33 @@ export class MolHandle {
1241
1343
  wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
1242
1344
  }
1243
1345
  }
1346
+ /**
1347
+ * Checked 3D matrix in prepared RDKit atom order. JSON has one [x,y,z]
1348
+ * row per prepared atom; malformed/nonfinite/unrepresentable input refuses.
1349
+ * @param {string} coords_json
1350
+ * @param {boolean} use_atom_wts
1351
+ * @returns {string}
1352
+ */
1353
+ rdkit_distance_matrix_3d_checked_json(coords_json, use_atom_wts) {
1354
+ let deferred3_0;
1355
+ let deferred3_1;
1356
+ try {
1357
+ const ptr0 = passStringToWasm0(coords_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1358
+ const len0 = WASM_VECTOR_LEN;
1359
+ const ret = wasm.molhandle_rdkit_distance_matrix_3d_checked_json(this.__wbg_ptr, ptr0, len0, use_atom_wts);
1360
+ var ptr2 = ret[0];
1361
+ var len2 = ret[1];
1362
+ if (ret[3]) {
1363
+ ptr2 = 0; len2 = 0;
1364
+ throw takeFromExternrefTable0(ret[2]);
1365
+ }
1366
+ deferred3_0 = ptr2;
1367
+ deferred3_1 = len2;
1368
+ return getStringFromWasm0(ptr2, len2);
1369
+ } finally {
1370
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
1371
+ }
1372
+ }
1244
1373
  /**
1245
1374
  * Seeded RDKit ETKDGv3 coordinates as JSON. Call on an
1246
1375
  * explicit-hydrogen molecule. At most 512 atoms are accepted.
@@ -1266,6 +1395,34 @@ export class MolHandle {
1266
1395
  wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
1267
1396
  }
1268
1397
  }
1398
+ /**
1399
+ * Seeded ETKDG embedding using constraints injected before triangle
1400
+ * smoothing. Returns one `[x,y,z]` row per atom as JSON.
1401
+ * @param {string} constraints_json
1402
+ * @param {number} random_seed
1403
+ * @param {number} max_iterations
1404
+ * @returns {string}
1405
+ */
1406
+ rdkit_embed_with_constraints_json(constraints_json, random_seed, max_iterations) {
1407
+ let deferred3_0;
1408
+ let deferred3_1;
1409
+ try {
1410
+ const ptr0 = passStringToWasm0(constraints_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1411
+ const len0 = WASM_VECTOR_LEN;
1412
+ const ret = wasm.molhandle_rdkit_embed_with_constraints_json(this.__wbg_ptr, ptr0, len0, random_seed, max_iterations);
1413
+ var ptr2 = ret[0];
1414
+ var len2 = ret[1];
1415
+ if (ret[3]) {
1416
+ ptr2 = 0; len2 = 0;
1417
+ throw takeFromExternrefTable0(ret[2]);
1418
+ }
1419
+ deferred3_0 = ptr2;
1420
+ deferred3_1 = len2;
1421
+ return getStringFromWasm0(ptr2, len2);
1422
+ } finally {
1423
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
1424
+ }
1425
+ }
1269
1426
  /**
1270
1427
  * RDKit MolHash by case-insensitive function name.
1271
1428
  * @param {string} _function
@@ -3496,6 +3653,53 @@ export function estate_indices_json(mol) {
3496
3653
  }
3497
3654
  }
3498
3655
 
3656
+ /**
3657
+ * Decode an RDKit atom code as stable JSON.
3658
+ *
3659
+ * Returns `{"symbol":"C","branchCount":3,"piElectronCount":1}`.
3660
+ * @param {number} code
3661
+ * @returns {string}
3662
+ */
3663
+ export function explain_rdkit_atom_code_json(code) {
3664
+ let deferred1_0;
3665
+ let deferred1_1;
3666
+ try {
3667
+ const ret = wasm.explain_rdkit_atom_code_json(code);
3668
+ deferred1_0 = ret[0];
3669
+ deferred1_1 = ret[1];
3670
+ return getStringFromWasm0(ret[0], ret[1]);
3671
+ } finally {
3672
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
3673
+ }
3674
+ }
3675
+
3676
+ /**
3677
+ * Decode a decimal legacy RDKit torsion code as stable JSON.
3678
+ * @param {string} code_decimal
3679
+ * @param {number} size
3680
+ * @returns {string}
3681
+ */
3682
+ export function explain_rdkit_topological_torsion_code_json(code_decimal, size) {
3683
+ let deferred3_0;
3684
+ let deferred3_1;
3685
+ try {
3686
+ const ptr0 = passStringToWasm0(code_decimal, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
3687
+ const len0 = WASM_VECTOR_LEN;
3688
+ const ret = wasm.explain_rdkit_topological_torsion_code_json(ptr0, len0, size);
3689
+ var ptr2 = ret[0];
3690
+ var len2 = ret[1];
3691
+ if (ret[3]) {
3692
+ ptr2 = 0; len2 = 0;
3693
+ throw takeFromExternrefTable0(ret[2]);
3694
+ }
3695
+ deferred3_0 = ptr2;
3696
+ deferred3_1 = len2;
3697
+ return getStringFromWasm0(ptr2, len2);
3698
+ } finally {
3699
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
3700
+ }
3701
+ }
3702
+
3499
3703
  /**
3500
3704
  * Extract an extxyz frame's coordinates, cell, per-atom properties and
3501
3705
  * frame metadata as JSON, in the SAME atom order [`mol_from_extxyz`]
@@ -5270,6 +5474,23 @@ export function mol_block_stereo_loss_json(mol) {
5270
5474
  }
5271
5475
  }
5272
5476
 
5477
+ /**
5478
+ * Project explicit CCD topology. Unassigned stereo annotations require
5479
+ * explicit loss consent; coordinates remain in parse_ccd_json's record.
5480
+ * @param {string} text
5481
+ * @param {boolean} allow_stereo_loss
5482
+ * @returns {MolHandle}
5483
+ */
5484
+ export function mol_from_ccd(text, allow_stereo_loss) {
5485
+ const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
5486
+ const len0 = WASM_VECTOR_LEN;
5487
+ const ret = wasm.mol_from_ccd(ptr0, len0, allow_stereo_loss);
5488
+ if (ret[2]) {
5489
+ throw takeFromExternrefTable0(ret[1]);
5490
+ }
5491
+ return MolHandle.__wrap(ret[0]);
5492
+ }
5493
+
5273
5494
  /**
5274
5495
  * Only the first molecular fragment in the document is returned.
5275
5496
  * Returns a JS error if the document cannot be parsed.
@@ -6160,6 +6381,33 @@ export function pains_matches_json(mol) {
6160
6381
  }
6161
6382
  }
6162
6383
 
6384
+ /**
6385
+ * One CCD template including source IDs, charges, explicit bonds, optional
6386
+ * coordinates and unassigned stereo labels. No atom_site bond perception.
6387
+ * @param {string} text
6388
+ * @returns {string}
6389
+ */
6390
+ export function parse_ccd_json(text) {
6391
+ let deferred3_0;
6392
+ let deferred3_1;
6393
+ try {
6394
+ const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
6395
+ const len0 = WASM_VECTOR_LEN;
6396
+ const ret = wasm.parse_ccd_json(ptr0, len0);
6397
+ var ptr2 = ret[0];
6398
+ var len2 = ret[1];
6399
+ if (ret[3]) {
6400
+ ptr2 = 0; len2 = 0;
6401
+ throw takeFromExternrefTable0(ret[2]);
6402
+ }
6403
+ deferred3_0 = ptr2;
6404
+ deferred3_1 = len2;
6405
+ return getStringFromWasm0(ptr2, len2);
6406
+ } finally {
6407
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
6408
+ }
6409
+ }
6410
+
6163
6411
  /**
6164
6412
  * Inspect strictly validated CJSON with exact source and opaque field paths.
6165
6413
  * @param {string} text
@@ -6244,6 +6492,32 @@ export function parse_cxsmiles_json(s) {
6244
6492
  }
6245
6493
  }
6246
6494
 
6495
+ /**
6496
+ * Inspect the bounded HIN record, including literal aromatic bonds and charges.
6497
+ * @param {string} text
6498
+ * @returns {string}
6499
+ */
6500
+ export function parse_hin_record_json(text) {
6501
+ let deferred3_0;
6502
+ let deferred3_1;
6503
+ try {
6504
+ const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
6505
+ const len0 = WASM_VECTOR_LEN;
6506
+ const ret = wasm.parse_hin_record_json(ptr0, len0);
6507
+ var ptr2 = ret[0];
6508
+ var len2 = ret[1];
6509
+ if (ret[3]) {
6510
+ ptr2 = 0; len2 = 0;
6511
+ throw takeFromExternrefTable0(ret[2]);
6512
+ }
6513
+ deferred3_0 = ptr2;
6514
+ deferred3_1 = len2;
6515
+ return getStringFromWasm0(ptr2, len2);
6516
+ } finally {
6517
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
6518
+ }
6519
+ }
6520
+
6247
6521
  /**
6248
6522
  * Inspect partial charges, atom types and source retention for MOL2.
6249
6523
  * @param {string} text
@@ -6609,6 +6883,59 @@ export function prepare_rdkit_ecfp4(mol) {
6609
6883
  return PreparedRdkitEcfp4Handle.__wrap(ret[0]);
6610
6884
  }
6611
6885
 
6886
+ /**
6887
+ * Amino-acid-only mmCIF projection in the same schema as
6888
+ * [`protein_from_pdb_json`].
6889
+ * @param {string} text
6890
+ * @returns {string}
6891
+ */
6892
+ export function protein_from_mmcif_json(text) {
6893
+ let deferred3_0;
6894
+ let deferred3_1;
6895
+ try {
6896
+ const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
6897
+ const len0 = WASM_VECTOR_LEN;
6898
+ const ret = wasm.protein_from_mmcif_json(ptr0, len0);
6899
+ var ptr2 = ret[0];
6900
+ var len2 = ret[1];
6901
+ if (ret[3]) {
6902
+ ptr2 = 0; len2 = 0;
6903
+ throw takeFromExternrefTable0(ret[2]);
6904
+ }
6905
+ deferred3_0 = ptr2;
6906
+ deferred3_1 = len2;
6907
+ return getStringFromWasm0(ptr2, len2);
6908
+ } finally {
6909
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
6910
+ }
6911
+ }
6912
+
6913
+ /**
6914
+ * Amino-acid-only PDB projection as stable JSON.
6915
+ * @param {string} text
6916
+ * @returns {string}
6917
+ */
6918
+ export function protein_from_pdb_json(text) {
6919
+ let deferred3_0;
6920
+ let deferred3_1;
6921
+ try {
6922
+ const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
6923
+ const len0 = WASM_VECTOR_LEN;
6924
+ const ret = wasm.protein_from_pdb_json(ptr0, len0);
6925
+ var ptr2 = ret[0];
6926
+ var len2 = ret[1];
6927
+ if (ret[3]) {
6928
+ ptr2 = 0; len2 = 0;
6929
+ throw takeFromExternrefTable0(ret[2]);
6930
+ }
6931
+ deferred3_0 = ptr2;
6932
+ deferred3_1 = len2;
6933
+ return getStringFromWasm0(ptr2, len2);
6934
+ } finally {
6935
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
6936
+ }
6937
+ }
6938
+
6612
6939
  /**
6613
6940
  * Coordinates (Å) plus molecular charge/multiplicity from a QCSchema
6614
6941
  * `qcschema_molecule` document, in the SAME atom order
@@ -6741,6 +7068,25 @@ export function random_smiles_json(smiles, count, seed) {
6741
7068
  }
6742
7069
  }
6743
7070
 
7071
+ /**
7072
+ * RDKit atom-pair atom code for one atom.
7073
+ *
7074
+ * `branch_subtract` is normally 0 for atom-pair diagnostics, 1 for a
7075
+ * torsion endpoint, and 2 for an interior torsion atom.
7076
+ * @param {MolHandle} mol
7077
+ * @param {number} atom_index
7078
+ * @param {number} branch_subtract
7079
+ * @returns {number}
7080
+ */
7081
+ export function rdkit_atom_code(mol, atom_index, branch_subtract) {
7082
+ _assertClass(mol, MolHandle);
7083
+ const ret = wasm.rdkit_atom_code(mol.__wbg_ptr, atom_index, branch_subtract);
7084
+ if (ret[2]) {
7085
+ throw takeFromExternrefTable0(ret[1]);
7086
+ }
7087
+ return ret[0] >>> 0;
7088
+ }
7089
+
6744
7090
  /**
6745
7091
  * RDKit-bit-exact ECFP4 (radius=2, 2048 bits, `useChirality=false`, `useBondTypes=true`,
6746
7092
  * RDKit's default atom invariant) as a bit-packed byte vector (256 bytes = 2048 bits).
@@ -7014,6 +7360,58 @@ export function rdkit_rdk_bitvec(mol) {
7014
7360
  return v1;
7015
7361
  }
7016
7362
 
7363
+ /**
7364
+ * RDKit 2026.09.1 RDKFingerprint with `ignoreAtoms`: every branched path
7365
+ * containing one of `ignored_atoms` is excluded. Invalid indices return a JS
7366
+ * error; an empty list is bit-identical to [`rdkit_rdk_bitvec`].
7367
+ * @param {MolHandle} mol
7368
+ * @param {Uint32Array} ignored_atoms
7369
+ * @returns {Uint8Array}
7370
+ */
7371
+ export function rdkit_rdk_bitvec_ignoring_atoms(mol, ignored_atoms) {
7372
+ _assertClass(mol, MolHandle);
7373
+ const ptr0 = passArray32ToWasm0(ignored_atoms, wasm.__wbindgen_malloc);
7374
+ const len0 = WASM_VECTOR_LEN;
7375
+ const ret = wasm.rdkit_rdk_bitvec_ignoring_atoms(mol.__wbg_ptr, ptr0, len0);
7376
+ if (ret[3]) {
7377
+ throw takeFromExternrefTable0(ret[2]);
7378
+ }
7379
+ var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
7380
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
7381
+ return v2;
7382
+ }
7383
+
7384
+ /**
7385
+ * Pack a JSON array of atom indices into RDKit's legacy torsion code.
7386
+ *
7387
+ * The decimal string return type avoids losing precision in JavaScript's
7388
+ * `number` type for codes above 2^53.
7389
+ * @param {MolHandle} mol
7390
+ * @param {string} path_json
7391
+ * @returns {string}
7392
+ */
7393
+ export function rdkit_topological_torsion_path_code_decimal(mol, path_json) {
7394
+ let deferred3_0;
7395
+ let deferred3_1;
7396
+ try {
7397
+ _assertClass(mol, MolHandle);
7398
+ const ptr0 = passStringToWasm0(path_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
7399
+ const len0 = WASM_VECTOR_LEN;
7400
+ const ret = wasm.rdkit_topological_torsion_path_code_decimal(mol.__wbg_ptr, ptr0, len0);
7401
+ var ptr2 = ret[0];
7402
+ var len2 = ret[1];
7403
+ if (ret[3]) {
7404
+ ptr2 = 0; len2 = 0;
7405
+ throw takeFromExternrefTable0(ret[2]);
7406
+ }
7407
+ deferred3_0 = ptr2;
7408
+ deferred3_1 = len2;
7409
+ return getStringFromWasm0(ptr2, len2);
7410
+ } finally {
7411
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
7412
+ }
7413
+ }
7414
+
7017
7415
  /**
7018
7416
  * Compute the opt-in RDKit-compatible hashed topological-torsion fingerprint
7019
7417
  * as a bit-packed byte vector (256 bytes = 2048 bits). This remains separate
@@ -7305,6 +7703,32 @@ export function roundtrip_cjson_record(text) {
7305
7703
  }
7306
7704
  }
7307
7705
 
7706
+ /**
7707
+ * Validate a single HIN record and retain exact source text and line endings.
7708
+ * @param {string} text
7709
+ * @returns {string}
7710
+ */
7711
+ export function roundtrip_hin_record(text) {
7712
+ let deferred3_0;
7713
+ let deferred3_1;
7714
+ try {
7715
+ const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
7716
+ const len0 = WASM_VECTOR_LEN;
7717
+ const ret = wasm.roundtrip_hin_record(ptr0, len0);
7718
+ var ptr2 = ret[0];
7719
+ var len2 = ret[1];
7720
+ if (ret[3]) {
7721
+ ptr2 = 0; len2 = 0;
7722
+ throw takeFromExternrefTable0(ret[2]);
7723
+ }
7724
+ deferred3_0 = ptr2;
7725
+ deferred3_1 = len2;
7726
+ return getStringFromWasm0(ptr2, len2);
7727
+ } finally {
7728
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
7729
+ }
7730
+ }
7731
+
7308
7732
  /**
7309
7733
  * Validate one MOL2 record and preserve its exact source, including metadata.
7310
7734
  * @param {string} text
Binary file
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "Kentaro Tanabe (kent-tokyo) <kent-tokyo@users.noreply.github.com>"
6
6
  ],
7
7
  "description": "WebAssembly bindings for chematic — use chematic from JavaScript/TypeScript",
8
- "version": "1.1.3",
8
+ "version": "1.1.5",
9
9
  "license": "MIT OR Apache-2.0",
10
10
  "repository": {
11
11
  "type": "git",