@kent-tokyo/chematic 1.1.2 → 1.1.4

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.2. The binding keeps bounded parsing,
7
+ The current workspace line is 1.1.4. 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
 
@@ -261,6 +261,13 @@ export class MolHandle {
261
261
  * (TPSA ≤ 131.6 Ų and LogP ≤ 5.88).
262
262
  */
263
263
  egan_passes(): boolean;
264
+ /**
265
+ * Seeded ETKDGv3 coordinates using the exact sixth-order torsion
266
+ * gradient tracked by RDKit issue #8715. At most 512 atoms are accepted.
267
+ * The result may intentionally differ from `rdkit_embed_json` for
268
+ * molecules with a non-zero sixth-order experimental torsion term.
269
+ */
270
+ etkdg_embed_corrected_json(random_seed: number, max_iterations: number): string;
264
271
  /**
265
272
  * Monoisotopic (exact) mass.
266
273
  */
@@ -447,6 +454,18 @@ export class MolHandle {
447
454
  * weights use zero-based molecule atom order.
448
455
  */
449
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;
450
469
  /**
451
470
  * RDKit `GetBestAlignmentTransform` as JSON, bounded by `max_matches`.
452
471
  */
@@ -1160,6 +1179,15 @@ export function edit_cdxml_document_json_v1(document_json: string, edit_json: st
1160
1179
  */
1161
1180
  export function edit_reaction_document_json_v1(document_json: string, edit_json: string): string;
1162
1181
 
1182
+ /**
1183
+ * EEM partial charges from caller-supplied 3D coordinates.
1184
+ *
1185
+ * Returns `{"charges":[...]}`. Unlike RDKit 2026.09.1 and earlier (issue
1186
+ * #9688), ionic charges sum to the molecule's formal charge rather than its
1187
+ * negation. Errors are returned as `{"error":"..."}`.
1188
+ */
1189
+ export function eem_charges_json(mol: MolHandle, coords_json: string): string;
1190
+
1163
1191
  /**
1164
1192
  * Run `embed_ensemble_v2` on `mol`'s own atom order (never canonicalizes/
1165
1193
  * reparses, same convention as `embed_pipeline_v2_json`). See the module doc
@@ -1245,6 +1273,18 @@ export function erg_vec_json(mol: MolHandle): string;
1245
1273
  */
1246
1274
  export function estate_indices_json(mol: MolHandle): string;
1247
1275
 
1276
+ /**
1277
+ * Decode an RDKit atom code as stable JSON.
1278
+ *
1279
+ * Returns `{"symbol":"C","branchCount":3,"piElectronCount":1}`.
1280
+ */
1281
+ export function explain_rdkit_atom_code_json(code: number): string;
1282
+
1283
+ /**
1284
+ * Decode a decimal legacy RDKit torsion code as stable JSON.
1285
+ */
1286
+ export function explain_rdkit_topological_torsion_code_json(code_decimal: string, size: number): string;
1287
+
1248
1288
  /**
1249
1289
  * Extract an extxyz frame's coordinates, cell, per-atom properties and
1250
1290
  * frame metadata as JSON, in the SAME atom order [`mol_from_extxyz`]
@@ -2428,6 +2468,17 @@ export function preflight_smiles_json(smiles: string, width: number, height: num
2428
2468
  */
2429
2469
  export function prepare_rdkit_ecfp4(mol: MolHandle): PreparedRdkitEcfp4Handle;
2430
2470
 
2471
+ /**
2472
+ * Amino-acid-only mmCIF projection in the same schema as
2473
+ * [`protein_from_pdb_json`].
2474
+ */
2475
+ export function protein_from_mmcif_json(text: string): string;
2476
+
2477
+ /**
2478
+ * Amino-acid-only PDB projection as stable JSON.
2479
+ */
2480
+ export function protein_from_pdb_json(text: string): string;
2481
+
2431
2482
  /**
2432
2483
  * Coordinates (Å) plus molecular charge/multiplicity from a QCSchema
2433
2484
  * `qcschema_molecule` document, in the SAME atom order
@@ -2474,6 +2525,14 @@ export function qcschema_validate_atomic_result(json: string): string;
2474
2525
  */
2475
2526
  export function random_smiles_json(smiles: string, count: number, seed: bigint): string;
2476
2527
 
2528
+ /**
2529
+ * RDKit atom-pair atom code for one atom.
2530
+ *
2531
+ * `branch_subtract` is normally 0 for atom-pair diagnostics, 1 for a
2532
+ * torsion endpoint, and 2 for an interior torsion atom.
2533
+ */
2534
+ export function rdkit_atom_code(mol: MolHandle, atom_index: number, branch_subtract: number): number;
2535
+
2477
2536
  /**
2478
2537
  * RDKit-bit-exact ECFP4 (radius=2, 2048 bits, `useChirality=false`, `useBondTypes=true`,
2479
2538
  * RDKit's default atom invariant) as a bit-packed byte vector (256 bytes = 2048 bits).
@@ -2574,6 +2633,21 @@ export function rdkit_path_bitvec(mol: MolHandle): Uint8Array;
2574
2633
  */
2575
2634
  export function rdkit_rdk_bitvec(mol: MolHandle): Uint8Array;
2576
2635
 
2636
+ /**
2637
+ * RDKit 2026.09.1 RDKFingerprint with `ignoreAtoms`: every branched path
2638
+ * containing one of `ignored_atoms` is excluded. Invalid indices return a JS
2639
+ * error; an empty list is bit-identical to [`rdkit_rdk_bitvec`].
2640
+ */
2641
+ export function rdkit_rdk_bitvec_ignoring_atoms(mol: MolHandle, ignored_atoms: Uint32Array): Uint8Array;
2642
+
2643
+ /**
2644
+ * Pack a JSON array of atom indices into RDKit's legacy torsion code.
2645
+ *
2646
+ * The decimal string return type avoids losing precision in JavaScript's
2647
+ * `number` type for codes above 2^53.
2648
+ */
2649
+ export function rdkit_topological_torsion_path_code_decimal(mol: MolHandle, path_json: string): string;
2650
+
2577
2651
  /**
2578
2652
  * Compute the opt-in RDKit-compatible hashed topological-torsion fingerprint
2579
2653
  * as a bit-packed byte vector (256 bytes = 2048 bits). This remains separate
@@ -2705,6 +2779,8 @@ export function roundtrip_mol_v3000_block(block: string): string;
2705
2779
  * `reactants_smiles`: pipe-separated SMILES, one per reactant slot in the SMIRKS.
2706
2780
  * Returns a JSON array of arrays: `[["product_smi", …], …]`.
2707
2781
  * Returns a JS error on parse failure or arity mismatch.
2782
+ * Product-template E/Z is resolved after all reactants are assembled, so an
2783
+ * unspecified product double bond does not depend on reactant order.
2708
2784
  */
2709
2785
  export function run_reactants(smirks: string, reactants_smiles: string): string;
2710
2786
 
@@ -3401,6 +3477,7 @@ export interface InitOutput {
3401
3477
  readonly edit_cdxml_document_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3402
3478
  readonly edit_cdxml_document_json_v1: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3403
3479
  readonly edit_reaction_document_json_v1: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3480
+ readonly eem_charges_json: (a: number, b: number, c: number) => [number, number];
3404
3481
  readonly embed_ensemble_v2_json: (a: number, b: number, c: number) => [number, number];
3405
3482
  readonly embed_pipeline_v2_json: (a: number, b: number, c: number) => [number, number];
3406
3483
  readonly enumerate_library_2way: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
@@ -3408,6 +3485,8 @@ export interface InitOutput {
3408
3485
  readonly enumerate_tautomers_json: (a: number) => [number, number];
3409
3486
  readonly erg_vec_json: (a: number) => [number, number];
3410
3487
  readonly estate_indices_json: (a: number) => [number, number];
3488
+ readonly explain_rdkit_atom_code_json: (a: number) => [number, number];
3489
+ readonly explain_rdkit_topological_torsion_code_json: (a: number, b: number, c: number) => [number, number, number, number];
3411
3490
  readonly extxyz_frame_json: (a: number, b: number) => [number, number, number, number];
3412
3491
  readonly extxyz_frames_batch_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
3413
3492
  readonly fcfp4_bitvec: (a: number) => [number, number];
@@ -3535,6 +3614,7 @@ export interface InitOutput {
3535
3614
  readonly molhandle_depict_svg: (a: number) => [number, number];
3536
3615
  readonly molhandle_depict_svg_opts: (a: number, b: number) => [number, number];
3537
3616
  readonly molhandle_egan_passes: (a: number) => number;
3617
+ readonly molhandle_etkdg_embed_corrected_json: (a: number, b: number, c: number) => [number, number, number, number];
3538
3618
  readonly molhandle_exact_mass: (a: number) => number;
3539
3619
  readonly molhandle_formal_charge_sum: (a: number) => number;
3540
3620
  readonly molhandle_formula: (a: number) => [number, number];
@@ -3577,6 +3657,8 @@ export interface InitOutput {
3577
3657
  readonly molhandle_qed: (a: number) => number;
3578
3658
  readonly molhandle_randic_index: (a: number) => number;
3579
3659
  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];
3660
+ 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];
3661
+ 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];
3580
3662
  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];
3581
3663
  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];
3582
3664
  readonly molhandle_rdkit_bounds_matrix_json: (a: number, b: number, c: number, d: number) => [number, number, number, number];
@@ -3637,10 +3719,13 @@ export interface InitOutput {
3637
3719
  readonly preflight_smiles_json: (a: number, b: number, c: number, d: number) => [number, number];
3638
3720
  readonly prepare_rdkit_ecfp4: (a: number) => [number, number, number];
3639
3721
  readonly preparedrdkitecfp4handle_bitvec: (a: number) => [number, number];
3722
+ readonly protein_from_mmcif_json: (a: number, b: number) => [number, number, number, number];
3723
+ readonly protein_from_pdb_json: (a: number, b: number) => [number, number, number, number];
3640
3724
  readonly qcschema_molecule_coords_json: (a: number, b: number) => [number, number, number, number];
3641
3725
  readonly qcschema_validate_atomic_input: (a: number, b: number) => [number, number, number, number];
3642
3726
  readonly qcschema_validate_atomic_result: (a: number, b: number) => [number, number, number, number];
3643
3727
  readonly random_smiles_json: (a: number, b: number, c: number, d: bigint) => [number, number, number, number];
3728
+ readonly rdkit_atom_code: (a: number, b: number, c: number) => [number, number, number];
3644
3729
  readonly rdkit_ecfp4_bitvec: (a: number) => [number, number, number, number];
3645
3730
  readonly rdkit_ecfp4_detail_json: (a: number) => [number, number, number, number];
3646
3731
  readonly rdkit_ecfp_config_bitvec: (a: number, b: number, c: number) => [number, number, number, number];
@@ -3653,6 +3738,8 @@ export interface InitOutput {
3653
3738
  readonly rdkit_nearest_neighbors_json: (a: number, b: number, c: number, d: number, e: number) => [number, number];
3654
3739
  readonly rdkit_path_bitvec: (a: number) => [number, number];
3655
3740
  readonly rdkit_rdk_bitvec: (a: number) => [number, number];
3741
+ readonly rdkit_rdk_bitvec_ignoring_atoms: (a: number, b: number, c: number) => [number, number, number, number];
3742
+ readonly rdkit_topological_torsion_path_code_decimal: (a: number, b: number, c: number) => [number, number, number, number];
3656
3743
  readonly rdkit_torsion_bitvec: (a: number) => [number, number];
3657
3744
  readonly rdkitreadresult_coords_json: (a: number) => [number, number, number, number];
3658
3745
  readonly rdkitreadresult_molecule: (a: number) => number;
package/chematic_wasm.js CHANGED
@@ -635,6 +635,33 @@ export class MolHandle {
635
635
  const ret = wasm.molhandle_egan_passes(this.__wbg_ptr);
636
636
  return ret !== 0;
637
637
  }
638
+ /**
639
+ * Seeded ETKDGv3 coordinates using the exact sixth-order torsion
640
+ * gradient tracked by RDKit issue #8715. At most 512 atoms are accepted.
641
+ * The result may intentionally differ from `rdkit_embed_json` for
642
+ * molecules with a non-zero sixth-order experimental torsion term.
643
+ * @param {number} random_seed
644
+ * @param {number} max_iterations
645
+ * @returns {string}
646
+ */
647
+ etkdg_embed_corrected_json(random_seed, max_iterations) {
648
+ let deferred2_0;
649
+ let deferred2_1;
650
+ try {
651
+ const ret = wasm.molhandle_etkdg_embed_corrected_json(this.__wbg_ptr, random_seed, max_iterations);
652
+ var ptr1 = ret[0];
653
+ var len1 = ret[1];
654
+ if (ret[3]) {
655
+ ptr1 = 0; len1 = 0;
656
+ throw takeFromExternrefTable0(ret[2]);
657
+ }
658
+ deferred2_0 = ptr1;
659
+ deferred2_1 = len1;
660
+ return getStringFromWasm0(ptr1, len1);
661
+ } finally {
662
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
663
+ }
664
+ }
638
665
  /**
639
666
  * Monoisotopic (exact) mass.
640
667
  * @returns {number}
@@ -1065,6 +1092,75 @@ export class MolHandle {
1065
1092
  wasm.__wbindgen_free(deferred6_0, deferred6_1, 1);
1066
1093
  }
1067
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
+ }
1068
1164
  /**
1069
1165
  * RDKit `GetBestAlignmentTransform` as JSON, bounded by `max_matches`.
1070
1166
  * @param {string} probe_coords_json
@@ -3235,6 +3331,32 @@ export function edit_reaction_document_json_v1(document_json, edit_json) {
3235
3331
  }
3236
3332
  }
3237
3333
 
3334
+ /**
3335
+ * EEM partial charges from caller-supplied 3D coordinates.
3336
+ *
3337
+ * Returns `{"charges":[...]}`. Unlike RDKit 2026.09.1 and earlier (issue
3338
+ * #9688), ionic charges sum to the molecule's formal charge rather than its
3339
+ * negation. Errors are returned as `{"error":"..."}`.
3340
+ * @param {MolHandle} mol
3341
+ * @param {string} coords_json
3342
+ * @returns {string}
3343
+ */
3344
+ export function eem_charges_json(mol, coords_json) {
3345
+ let deferred2_0;
3346
+ let deferred2_1;
3347
+ try {
3348
+ _assertClass(mol, MolHandle);
3349
+ const ptr0 = passStringToWasm0(coords_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
3350
+ const len0 = WASM_VECTOR_LEN;
3351
+ const ret = wasm.eem_charges_json(mol.__wbg_ptr, ptr0, len0);
3352
+ deferred2_0 = ret[0];
3353
+ deferred2_1 = ret[1];
3354
+ return getStringFromWasm0(ret[0], ret[1]);
3355
+ } finally {
3356
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
3357
+ }
3358
+ }
3359
+
3238
3360
  /**
3239
3361
  * Run `embed_ensemble_v2` on `mol`'s own atom order (never canonicalizes/
3240
3362
  * reparses, same convention as `embed_pipeline_v2_json`). See the module doc
@@ -3443,6 +3565,53 @@ export function estate_indices_json(mol) {
3443
3565
  }
3444
3566
  }
3445
3567
 
3568
+ /**
3569
+ * Decode an RDKit atom code as stable JSON.
3570
+ *
3571
+ * Returns `{"symbol":"C","branchCount":3,"piElectronCount":1}`.
3572
+ * @param {number} code
3573
+ * @returns {string}
3574
+ */
3575
+ export function explain_rdkit_atom_code_json(code) {
3576
+ let deferred1_0;
3577
+ let deferred1_1;
3578
+ try {
3579
+ const ret = wasm.explain_rdkit_atom_code_json(code);
3580
+ deferred1_0 = ret[0];
3581
+ deferred1_1 = ret[1];
3582
+ return getStringFromWasm0(ret[0], ret[1]);
3583
+ } finally {
3584
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
3585
+ }
3586
+ }
3587
+
3588
+ /**
3589
+ * Decode a decimal legacy RDKit torsion code as stable JSON.
3590
+ * @param {string} code_decimal
3591
+ * @param {number} size
3592
+ * @returns {string}
3593
+ */
3594
+ export function explain_rdkit_topological_torsion_code_json(code_decimal, size) {
3595
+ let deferred3_0;
3596
+ let deferred3_1;
3597
+ try {
3598
+ const ptr0 = passStringToWasm0(code_decimal, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
3599
+ const len0 = WASM_VECTOR_LEN;
3600
+ const ret = wasm.explain_rdkit_topological_torsion_code_json(ptr0, len0, size);
3601
+ var ptr2 = ret[0];
3602
+ var len2 = ret[1];
3603
+ if (ret[3]) {
3604
+ ptr2 = 0; len2 = 0;
3605
+ throw takeFromExternrefTable0(ret[2]);
3606
+ }
3607
+ deferred3_0 = ptr2;
3608
+ deferred3_1 = len2;
3609
+ return getStringFromWasm0(ptr2, len2);
3610
+ } finally {
3611
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
3612
+ }
3613
+ }
3614
+
3446
3615
  /**
3447
3616
  * Extract an extxyz frame's coordinates, cell, per-atom properties and
3448
3617
  * frame metadata as JSON, in the SAME atom order [`mol_from_extxyz`]
@@ -6556,6 +6725,59 @@ export function prepare_rdkit_ecfp4(mol) {
6556
6725
  return PreparedRdkitEcfp4Handle.__wrap(ret[0]);
6557
6726
  }
6558
6727
 
6728
+ /**
6729
+ * Amino-acid-only mmCIF projection in the same schema as
6730
+ * [`protein_from_pdb_json`].
6731
+ * @param {string} text
6732
+ * @returns {string}
6733
+ */
6734
+ export function protein_from_mmcif_json(text) {
6735
+ let deferred3_0;
6736
+ let deferred3_1;
6737
+ try {
6738
+ const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
6739
+ const len0 = WASM_VECTOR_LEN;
6740
+ const ret = wasm.protein_from_mmcif_json(ptr0, len0);
6741
+ var ptr2 = ret[0];
6742
+ var len2 = ret[1];
6743
+ if (ret[3]) {
6744
+ ptr2 = 0; len2 = 0;
6745
+ throw takeFromExternrefTable0(ret[2]);
6746
+ }
6747
+ deferred3_0 = ptr2;
6748
+ deferred3_1 = len2;
6749
+ return getStringFromWasm0(ptr2, len2);
6750
+ } finally {
6751
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
6752
+ }
6753
+ }
6754
+
6755
+ /**
6756
+ * Amino-acid-only PDB projection as stable JSON.
6757
+ * @param {string} text
6758
+ * @returns {string}
6759
+ */
6760
+ export function protein_from_pdb_json(text) {
6761
+ let deferred3_0;
6762
+ let deferred3_1;
6763
+ try {
6764
+ const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
6765
+ const len0 = WASM_VECTOR_LEN;
6766
+ const ret = wasm.protein_from_pdb_json(ptr0, len0);
6767
+ var ptr2 = ret[0];
6768
+ var len2 = ret[1];
6769
+ if (ret[3]) {
6770
+ ptr2 = 0; len2 = 0;
6771
+ throw takeFromExternrefTable0(ret[2]);
6772
+ }
6773
+ deferred3_0 = ptr2;
6774
+ deferred3_1 = len2;
6775
+ return getStringFromWasm0(ptr2, len2);
6776
+ } finally {
6777
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
6778
+ }
6779
+ }
6780
+
6559
6781
  /**
6560
6782
  * Coordinates (Å) plus molecular charge/multiplicity from a QCSchema
6561
6783
  * `qcschema_molecule` document, in the SAME atom order
@@ -6688,6 +6910,25 @@ export function random_smiles_json(smiles, count, seed) {
6688
6910
  }
6689
6911
  }
6690
6912
 
6913
+ /**
6914
+ * RDKit atom-pair atom code for one atom.
6915
+ *
6916
+ * `branch_subtract` is normally 0 for atom-pair diagnostics, 1 for a
6917
+ * torsion endpoint, and 2 for an interior torsion atom.
6918
+ * @param {MolHandle} mol
6919
+ * @param {number} atom_index
6920
+ * @param {number} branch_subtract
6921
+ * @returns {number}
6922
+ */
6923
+ export function rdkit_atom_code(mol, atom_index, branch_subtract) {
6924
+ _assertClass(mol, MolHandle);
6925
+ const ret = wasm.rdkit_atom_code(mol.__wbg_ptr, atom_index, branch_subtract);
6926
+ if (ret[2]) {
6927
+ throw takeFromExternrefTable0(ret[1]);
6928
+ }
6929
+ return ret[0] >>> 0;
6930
+ }
6931
+
6691
6932
  /**
6692
6933
  * RDKit-bit-exact ECFP4 (radius=2, 2048 bits, `useChirality=false`, `useBondTypes=true`,
6693
6934
  * RDKit's default atom invariant) as a bit-packed byte vector (256 bytes = 2048 bits).
@@ -6961,6 +7202,58 @@ export function rdkit_rdk_bitvec(mol) {
6961
7202
  return v1;
6962
7203
  }
6963
7204
 
7205
+ /**
7206
+ * RDKit 2026.09.1 RDKFingerprint with `ignoreAtoms`: every branched path
7207
+ * containing one of `ignored_atoms` is excluded. Invalid indices return a JS
7208
+ * error; an empty list is bit-identical to [`rdkit_rdk_bitvec`].
7209
+ * @param {MolHandle} mol
7210
+ * @param {Uint32Array} ignored_atoms
7211
+ * @returns {Uint8Array}
7212
+ */
7213
+ export function rdkit_rdk_bitvec_ignoring_atoms(mol, ignored_atoms) {
7214
+ _assertClass(mol, MolHandle);
7215
+ const ptr0 = passArray32ToWasm0(ignored_atoms, wasm.__wbindgen_malloc);
7216
+ const len0 = WASM_VECTOR_LEN;
7217
+ const ret = wasm.rdkit_rdk_bitvec_ignoring_atoms(mol.__wbg_ptr, ptr0, len0);
7218
+ if (ret[3]) {
7219
+ throw takeFromExternrefTable0(ret[2]);
7220
+ }
7221
+ var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
7222
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
7223
+ return v2;
7224
+ }
7225
+
7226
+ /**
7227
+ * Pack a JSON array of atom indices into RDKit's legacy torsion code.
7228
+ *
7229
+ * The decimal string return type avoids losing precision in JavaScript's
7230
+ * `number` type for codes above 2^53.
7231
+ * @param {MolHandle} mol
7232
+ * @param {string} path_json
7233
+ * @returns {string}
7234
+ */
7235
+ export function rdkit_topological_torsion_path_code_decimal(mol, path_json) {
7236
+ let deferred3_0;
7237
+ let deferred3_1;
7238
+ try {
7239
+ _assertClass(mol, MolHandle);
7240
+ const ptr0 = passStringToWasm0(path_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
7241
+ const len0 = WASM_VECTOR_LEN;
7242
+ const ret = wasm.rdkit_topological_torsion_path_code_decimal(mol.__wbg_ptr, ptr0, len0);
7243
+ var ptr2 = ret[0];
7244
+ var len2 = ret[1];
7245
+ if (ret[3]) {
7246
+ ptr2 = 0; len2 = 0;
7247
+ throw takeFromExternrefTable0(ret[2]);
7248
+ }
7249
+ deferred3_0 = ptr2;
7250
+ deferred3_1 = len2;
7251
+ return getStringFromWasm0(ptr2, len2);
7252
+ } finally {
7253
+ wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
7254
+ }
7255
+ }
7256
+
6964
7257
  /**
6965
7258
  * Compute the opt-in RDKit-compatible hashed topological-torsion fingerprint
6966
7259
  * as a bit-packed byte vector (256 bytes = 2048 bits). This remains separate
@@ -7316,6 +7609,8 @@ export function roundtrip_mol_v3000_block(block) {
7316
7609
  * `reactants_smiles`: pipe-separated SMILES, one per reactant slot in the SMIRKS.
7317
7610
  * Returns a JSON array of arrays: `[["product_smi", …], …]`.
7318
7611
  * Returns a JS error on parse failure or arity mismatch.
7612
+ * Product-template E/Z is resolved after all reactants are assembled, so an
7613
+ * unspecified product double bond does not depend on reactant order.
7319
7614
  * @param {string} smirks
7320
7615
  * @param {string} reactants_smiles
7321
7616
  * @returns {string}
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.2",
8
+ "version": "1.1.4",
9
9
  "license": "MIT OR Apache-2.0",
10
10
  "repository": {
11
11
  "type": "git",