Skip to content

Commit

Permalink
feat: update OCL to v2023.4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
targos committed Apr 5, 2023
1 parent 9da9811 commit a886ff4
Show file tree
Hide file tree
Showing 45 changed files with 2,453 additions and 1,736 deletions.
64 changes: 32 additions & 32 deletions __tests__/__snapshots__/conformers.js.snap
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`ConformerGenerator should generate conformers 1`] = `
"
"#1
Actelion Java MolfileCreator 1.0
15 14 0 0 0 0 0 0 0 0999 V2000
0.0209 -2.5358 6.9912 C 0 0 0 0 0 0 0 0 0 0 0 0
0.4019 -1.6934 5.6364 O 0 0 0 0 0 0 0 0 0 0 0 0
0.2666 -0.0439 5.7657 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7123 0.7908 4.2081 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.4234 0.4480 3.0453 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.1832 1.1036 1.6138 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.9350 -2.1387 7.5082 H 0 0 0 0 0 0 0 0 0 0 0 0
0.8873 -2.5457 7.7647 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.1686 -3.6460 6.6492 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.8241 0.2442 6.0545 H 0 0 0 0 0 0 0 0 0 0 0 0
0.9037 0.3671 6.6327 H 0 0 0 0 0 0 0 0 0 0 0 0
0.7892 1.9248 4.3812 H 0 0 0 0 0 0 0 0 0 0 0 0
1.7629 0.4125 3.8524 H 0 0 0 0 0 0 0 0 0 0 0 0
0.7009 0.8284 1.1579 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.9561 0.8636 0.9815 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.5770 2.5000 -2.1185 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.9333 3.2322 -3.4776 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.8935 2.1799 -4.2575 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2507 2.2660 -3.4812 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.3324 1.6314 -1.9352 O 0 0 0 0 0 0 0 0 0 0 0 0
-1.4253 -0.0302 -2.0151 N 0 0 0 0 0 0 0 0 0 0 0 0
-5.2007 1.5768 -2.4320 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.7235 2.1678 -1.4110 H 0 0 0 0 0 0 0 0 0 0 0 0
-5.2609 3.2524 -1.5646 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.8052 2.4732 -5.3736 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.3008 1.1001 -4.1756 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.9084 3.3711 -3.4304 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.4952 1.6598 -4.1123 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.7255 -0.4000 -1.1042 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.5034 -0.4157 -2.2514 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 3 1 0 0 0 0
3 4 1 0 0 0 0
Expand All @@ -39,25 +39,25 @@ M END
`;

exports[`ConformerGenerator should generate conformers 2`] = `
"
"#2
Actelion Java MolfileCreator 1.0
15 14 0 0 0 0 0 0 0 0999 V2000
1.9089 -2.2937 5.8792 C 0 0 0 0 0 0 0 0 0 0 0 0
0.4019 -1.6934 5.6364 O 0 0 0 0 0 0 0 0 0 0 0 0
0.2666 -0.0439 5.7657 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7123 0.7908 4.2081 C 0 0 0 0 0 0 0 0 0 0 0 0
0.5603 2.4347 4.3914 O 0 0 0 0 0 0 0 0 0 0 0 0
1.7021 3.1562 5.2356 N 0 0 0 0 0 0 0 0 0 0 0 0
2.4428 -1.8047 6.7817 H 0 0 0 0 0 0 0 0 0 0 0 0
2.5852 -2.1850 4.9413 H 0 0 0 0 0 0 0 0 0 0 0 0
1.7771 -3.4431 6.0962 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.8241 0.2442 6.0545 H 0 0 0 0 0 0 0 0 0 0 0 0
0.9037 0.3671 6.6327 H 0 0 0 0 0 0 0 0 0 0 0 0
1.7868 0.5114 3.9093 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.0017 0.4248 3.3540 H 0 0 0 0 0 0 0 0 0 0 0 0
2.6525 3.0566 4.8460 H 0 0 0 0 0 0 0 0 0 0 0 0
1.4966 4.1586 5.3228 H 0 0 0 0 0 0 0 0 0 0 0 0
-5.4499 3.1652 -4.1799 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.9333 3.2322 -3.4776 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.8935 2.1799 -4.2575 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2507 2.2660 -3.4812 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.5676 3.7618 -3.7899 O 0 0 0 0 0 0 0 0 0 0 0 0
0.9379 3.8478 -3.0815 N 0 0 0 0 0 0 0 0 0 0 0 0
-5.3836 3.5091 -5.2830 H 0 0 0 0 0 0 0 0 0 0 0 0
-5.8544 2.0819 -4.1363 H 0 0 0 0 0 0 0 0 0 0 0 0
-6.1706 3.8654 -3.6045 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.8052 2.4732 -5.3736 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.3008 1.1001 -4.1756 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.5761 1.4326 -3.9186 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.3564 2.1134 -2.3401 H 0 0 0 0 0 0 0 0 0 0 0 0
1.2462 4.8280 -3.0515 H 0 0 0 0 0 0 0 0 0 0 0 0
1.6088 3.2972 -3.6302 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 3 1 0 0 0 0
3 4 1 0 0 0 0
Expand Down
32 changes: 16 additions & 16 deletions __tests__/__snapshots__/force-field-mmff94.js.snap
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`ForceFieldMMFF94 should generate force field 1`] = `
"
"#1
Actelion Java MolfileCreator 1.0
15 14 0 0 0 0 0 0 0 0999 V2000
0.3531 -2.1287 6.8340 C 0 0 0 0 0 0 0 0 0 0 0 0
0.6562 -1.5101 5.5910 O 0 0 0 0 0 0 0 0 0 0 0 0
0.2639 -0.1332 5.5764 C 0 0 0 0 0 0 0 0 0 0 0 0
0.6454 0.4978 4.2405 C 0 0 0 0 0 0 0 0 0 0 0 0
2.0674 0.6836 4.2007 O 0 0 0 0 0 0 0 0 0 0 0 0
2.4060 1.3845 2.9656 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.7236 -2.0955 7.0261 H 0 0 0 0 0 0 0 0 0 0 0 0
0.8967 -1.6395 7.6479 H 0 0 0 0 0 0 0 0 0 0 0 0
0.6670 -3.1747 6.7838 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.8220 -0.0770 5.7099 H 0 0 0 0 0 0 0 0 0 0 0 0
0.7633 0.3915 6.3988 H 0 0 0 0 0 0 0 0 0 0 0 0
0.3480 -0.1520 3.4095 H 0 0 0 0 0 0 0 0 0 0 0 0
0.1551 1.4736 4.1458 H 0 0 0 0 0 0 0 0 0 0 0 0
3.0103 2.1262 3.3223 H 0 0 0 0 0 0 0 0 0 0 0 0
3.0309 0.7055 2.5268 H 0 0 0 0 0 0 0 0 0 0 0 0
-4.3423 2.6153 -2.3397 C 0 0 0 0 0 0 0 0 0 0 0 0
-3.8783 2.9630 -3.6364 O 0 0 0 0 0 0 0 0 0 0 0 0
-2.8566 2.0874 -4.1292 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.4746 2.4010 -3.5536 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.0233 3.6899 -3.9928 O 0 0 0 0 0 0 0 0 0 0 0 0
-0.2808 3.5370 -5.2408 N 0 0 0 0 0 0 0 0 0 0 0 0
-4.7361 1.5945 -2.3324 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.5480 2.7187 -1.5962 H 0 0 0 0 0 0 0 0 0 0 0 0
-5.1522 3.2997 -2.0724 H 0 0 0 0 0 0 0 0 0 0 0 0
-2.8395 2.2197 -5.2160 H 0 0 0 0 0 0 0 0 0 0 0 0
-3.1330 1.0464 -3.9263 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.7528 1.6241 -3.8346 H 0 0 0 0 0 0 0 0 0 0 0 0
-1.5055 2.4375 -2.4612 H 0 0 0 0 0 0 0 0 0 0 0 0
0.5834 4.0318 -5.0129 H 0 0 0 0 0 0 0 0 0 0 0 0
-0.8047 4.1683 -5.8509 H 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0
2 3 1 0 0 0 0
3 4 1 0 0 0 0
Expand Down
1 change: 0 additions & 1 deletion __tests__/__snapshots__/library.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ exports[`prototype properties of ConformerGenerator 1`] = `
"getOCL",
"getOneConformerAsMolecule",
"getPotentialConformerCount",
"getPreviousConformerContribution",
"initializeConformers",
"molecules",
]
Expand Down
2 changes: 1 addition & 1 deletion __tests__/__snapshots__/reaction.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ exports[`Reaction class should load and create RXN files 1`] = `
"$RXN
OCL_RXN_V1.0:gJX@@eKU@@ gGQHDHaInfh@!gJX@@eKU@@ fHdP@@##!ROvp@[C}c@FNZz@@ !R_\`CW?Hc|_\`BH_Ykh@@ !ROvp@[C}c@FNZz@@ !RGP@@##
OCL_RXN_V1.0:gGQHDHaInfh@ gJX@@eKU@@!gJX@@eKU@@ fHdP@@##!R_\`CW?Hc|_\`BH_Ykh@@ !ROvp@[C}c@FNZz@@ !ROvp@[C}c@FNZz@@ !RGP@@##
2 2
$MOL
CC(C)C(=O)Cl.CCNCC>>CCNCC.Cl
Expand Down
2 changes: 0 additions & 2 deletions __tests__/conformers.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,11 @@ describe('ConformerGenerator', () => {
const gen = new ConformerGenerator(1);
expect(gen.getPotentialConformerCount()).toBe(1);
expect(gen.getConformerCount()).toBe(0);
expect(gen.getPreviousConformerContribution()).toBe(1);
gen.initializeConformers(mol);
expect(gen.getPotentialConformerCount()).toBeGreaterThan(1);

const conf1 = gen.getNextConformerAsMolecule();
expect(gen.getConformerCount()).toBe(1);
expect(gen.getPreviousConformerContribution()).toBeCloseTo(0.17, 2);
const conf1Molfile = conf1.toMolfile();
expect(conf1Molfile).toMatchSnapshot();

Expand Down
2 changes: 1 addition & 1 deletion openchemlib
Submodule openchemlib updated 47 files
+2 −2 pom.xml
+251 −0 src/main/java/com/actelion/research/calc/histogram/LongHistogram.java
+2 −63 src/main/java/com/actelion/research/chem/AbstractDepictor.java
+32 −32 src/main/java/com/actelion/research/chem/Coordinates.java
+66 −0 src/main/java/com/actelion/research/chem/ExtendedMolecule.java
+10 −1 src/main/java/com/actelion/research/chem/RingCollection.java
+10 −9 src/main/java/com/actelion/research/chem/SmilesParser.java
+26 −27 src/main/java/com/actelion/research/chem/conf/BondAngleSet.java
+46 −25 src/main/java/com/actelion/research/chem/conf/Conformer.java
+1 −1 src/main/java/com/actelion/research/chem/conf/TorsionDescriptor.java
+8 −4 src/main/java/com/actelion/research/chem/io/RXNFileCreator.java
+13 −12 src/main/java/com/actelion/research/chem/mcs/ExhaustiveFragmentGeneratorBonds.java
+4 −13 src/main/java/com/actelion/research/chem/mcs/RunBondVector2IdCode.java
+1 −6 src/main/java/com/actelion/research/chem/phesa/DescriptorHandlerShape.java
+8 −6 src/main/java/com/actelion/research/chem/properties/complexity/BitArray128.java
+9 −2 src/main/java/com/actelion/research/chem/properties/complexity/BitArray128Factory.java
+26 −34 src/main/java/com/actelion/research/chem/properties/complexity/ContainerBitArray.java
+6 −21 src/main/java/com/actelion/research/chem/properties/complexity/ContainerFragBondsSolutions.java
+51 −34 src/main/java/com/actelion/research/chem/properties/complexity/ExhaustiveFragmentsStatistics.java
+13 −1 src/main/java/com/actelion/research/chem/properties/complexity/FragmentDefinedByBondsIdCode.java
+2 −3 src/main/java/com/actelion/research/chem/properties/complexity/MolecularComplexityCalculator.java
+16 −4 src/main/java/com/actelion/research/chem/properties/fractaldimension/FractalDimensionMolecule.java
+14 −0 src/main/java/com/actelion/research/util/Formatter.java
+475 −0 src/main/java/org/openmolecules/chem/conf/gen/BaseConformer.java
+29 −6 src/main/java/org/openmolecules/chem/conf/gen/ConformerDiagnostics.java
+201 −185 src/main/java/org/openmolecules/chem/conf/gen/ConformerGenerator.java
+95 −30 src/main/java/org/openmolecules/chem/conf/gen/ConformerSetDiagnostics.java
+4 −4 src/main/java/org/openmolecules/chem/conf/gen/RigidFragment.java
+38 −18 src/main/java/org/openmolecules/chem/conf/gen/RigidFragmentProvider.java
+108 −501 src/main/java/org/openmolecules/chem/conf/gen/RotatableBond.java
+35 −39 src/main/java/org/openmolecules/chem/conf/gen/TorsionSet.java
+10 −11 src/main/java/org/openmolecules/chem/conf/gen/TorsionSetEliminationRule.java
+156 −0 src/main/java/org/openmolecules/chem/conf/gen/TorsionSetEncoder.java
+162 −196 src/main/java/org/openmolecules/chem/conf/gen/TorsionSetStrategy.java
+4 −4 src/main/java/org/openmolecules/chem/conf/gen/TorsionSetStrategyAdaptiveRandom.java
+17 −16 src/main/java/org/openmolecules/chem/conf/gen/TorsionSetStrategyLikelySystematic.java
+10 −9 src/main/java/org/openmolecules/chem/conf/gen/TorsionSetStrategyRandom.java
+28 −0 src/main/java/org/openmolecules/chem/conf/gen/TorsionSetWithEliminationRuleStrain.java
+7 −3 src/main/java/org/openmolecules/chem/conf/so/AxialStereoRule.java
+82 −7 src/main/java/org/openmolecules/chem/conf/so/ConformationRule.java
+419 −208 src/main/java/org/openmolecules/chem/conf/so/ConformationSelfOrganizer.java
+81 −51 src/main/java/org/openmolecules/chem/conf/so/DistanceRule.java
+19 −79 src/main/java/org/openmolecules/chem/conf/so/PlaneRule.java
+40 −57 src/main/java/org/openmolecules/chem/conf/so/SelfOrganizedConformer.java
+9 −8 src/main/java/org/openmolecules/chem/conf/so/StraightLineRule.java
+19 −10 src/main/java/org/openmolecules/chem/conf/so/TetrahedralStereoRule.java
+19 −9 src/main/java/org/openmolecules/chem/conf/so/TorsionRule.java
142 changes: 116 additions & 26 deletions scripts/openchemlib/classes.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ const changed = [
'@org/openmolecules/chem/conf/gen/ConformerSetDiagnostics',
changeConformerSetDiagnostics,
],
['@org/openmolecules/chem/conf/gen/BaseConformer', changeBaseConformer],
[
'@org/openmolecules/chem/conf/gen/ConformerGenerator',
changeConformerGenerator,
],
[
'@org/openmolecules/chem/conf/so/SelfOrganizedConformer',
changeSelfOrganizedConformer,
],
['@org/openmolecules/chem/conf/gen/RigidFragmentCache', removeCacheIO],
['chem/ChemistryHelper', removePrintf],
['chem/Coordinates', removeToStringSpaceDelimited],
Expand Down Expand Up @@ -244,38 +253,63 @@ function removeToStringSpaceDelimited(code) {
return code.replaceAll(methodRegExp('toStringSpaceDelimited'), '');
}

function replaceChecked(code, from, to) {
if (code.indexOf(from) === -1) {
throw new Error(`Cannot find ${from} in code`);
}
return code.replace(from, to);
}

function removeSlice(code, start, end) {
const startIdx = code.indexOf(start);
if (startIdx === -1) {
throw new Error(`did not find index for: ${start}`);
}
const endIdx = code.indexOf(end, startIdx + start.length);
if (endIdx === -1) {
throw new Error(`did not find index for: ${end}`);
}
return code.substr(0, startIdx) + code.substr(endIdx + end.length);
}

function changeInventorFragment(code) {
return code.replace(
return replaceChecked(
code,
'mGlobalAtom.clone();',
'Arrays.copyOf(mGlobalAtom, mGlobalAtom.length);',
);
}

function removeCloneInfos(code) {
return code.replace(
return replaceChecked(
code,
'infos[a] = m.infos[i].clone();',
'// infos[a] = m.infos[i].clone();',
);
}

function changeTautomerHelper(code) {
code = code.replace(
code = replaceChecked(
code,
'import java.util',
'import java.util.Arrays;\nimport java.util',
);
code = code.replace(
code = replaceChecked(
code,
'mRegionDCount.clone();',
'Arrays.copyOf(mRegionDCount, mRegionDCount.length);',
);
code = code.replace(
code = replaceChecked(
code,
'mRegionTCount.clone();',
'Arrays.copyOf(mRegionTCount, mRegionTCount.length);',
);
return code;
}

function changeTextDrawingObject(code) {
return code.replace(
return replaceChecked(
code,
'detail.append(String.format(" size=\\"%.4f\\"", new Double(mSize)));',
'detail.append(" size=\\""+mSize+"\\"");',
);
Expand All @@ -296,7 +330,7 @@ function changeGenericEditorArea(code) {
}

function changeCustomAtomDialogBuilder(code) {
code = code.replace('e.getSource() instanceof JTextField', 'false');
code = replaceChecked(code, 'e.getSource() instanceof JTextField', 'false');
return code;
}

Expand All @@ -314,28 +348,25 @@ function changeIntVec(code) {
return code;
}

function removeSlice(code, start, end) {
const startIdx = code.indexOf(start);
if (startIdx === -1) {
throw new Error(`did not find index for: ${start}`);
}
const endIdx = code.indexOf(end, startIdx + start.length);
if (endIdx === -1) {
throw new Error(`did not find index for: ${end}`);
}
return code.substr(0, startIdx) + code.substr(endIdx + end.length);
}

function removeRXNStringFormat(code) {
return code.replace(
return replaceChecked(
code,
'theWriter.write(String.format("M V30 COUNTS %d %d"+NL,rcnt,pcnt));',
'theWriter.write("M V30 COUNTS "+rcnt+" "+pcnt+NL,rcnt,pcnt);',
);
}

function changeMolecule(code) {
code = code.replace('stream.writeLong(mAtomQueryFeatures[atom]);', '');
code = code.replace('mAtomQueryFeatures[atom] = stream.readLong();', '');
code = replaceChecked(
code,
'stream.writeLong(mAtomQueryFeatures[atom]);',
'',
);
code = replaceChecked(
code,
'mAtomQueryFeatures[atom] = stream.readLong();',
'',
);
return code;
}

Expand Down Expand Up @@ -393,7 +424,8 @@ private void init(int mode) {
`;

function changeTorsionDB(code) {
code = code.replace(
code = replaceChecked(
code,
'util.TreeMap;',
'util.TreeMap;\nimport com.actelion.research.chem.conf.TorsionDBData;',
);
Expand Down Expand Up @@ -442,7 +474,8 @@ private static void initialize() {
`;

function changeBondLengthSet(code) {
code = code.replace(
code = replaceChecked(
code,
'chem.StereoMolecule;',
'chem.StereoMolecule;\nimport com.actelion.research.chem.conf.TorsionDBData;',
);
Expand All @@ -466,6 +499,58 @@ function changeConformerSetDiagnostics(code) {
return code;
}

function changeBaseConformer(code) {
code = replaceChecked(
code,
'import java.util.ArrayList;',
'import java.util.Arrays;\nimport java.util.ArrayList;',
);
code = replaceChecked(
code,
'mTorsion[bondIndex] = rotatableBond[bondIndex].getDefaultTorsions().clone();',
'short[] torsions = rotatableBond[bondIndex].getDefaultTorsions();\n mTorsion[bondIndex] = Arrays.copyOf(torsions, torsions.length);',
);
code = replaceChecked(
code,
'mFrequency[bondIndex] = rotatableBond[bondIndex].getDefaultFrequencies().clone();',
'short[] frequencies = rotatableBond[bondIndex].getDefaultFrequencies();\n mFrequency[bondIndex] = Arrays.copyOf(frequencies, frequencies.length);',
);
code = replaceChecked(
code,
'\n mTorsion[bondIndex] = rotatableBond[bondIndex].getDefaultTorsions().clone();',
'',
);
return code;
}

function changeConformerGenerator(code) {
code = replaceChecked(
code,
'fragmentPermutation.clone()',
'Arrays.copyOf(fragmentPermutation, fragmentPermutation.length)',
);
return code;
}

function changeSelfOrganizedConformer(code) {
code = replaceChecked(
code,
'import java.util.ArrayList;',
'import java.util.Arrays;\nimport java.util.ArrayList;',
);
code = replaceChecked(
code,
'conformer.mAtomStrain.clone()',
'Arrays.copyOf(conformer.mAtomStrain, conformer.mAtomStrain.length)',
);
code = replaceChecked(
code,
'conformer.mRuleStrain.clone()',
'Arrays.copyOf(conformer.mRuleStrain, conformer.mRuleStrain.length)',
);
return code;
}

function removeCacheIO(code) {
code = removeSlice(
code,
Expand Down Expand Up @@ -503,8 +588,13 @@ function removeCacheIO(code) {
}

function changeCsv(code) {
code = code.replace('java.io.InputStreamReader;', 'java.io.StringReader;');
code = code.replace(
code = replaceChecked(
code,
'java.io.InputStreamReader;',
'java.io.StringReader;',
);
code = replaceChecked(
code,
'br = new BufferedReader(new InputStreamReader(Csv.class.getResourceAsStream(path)));',
'br = new BufferedReader(new StringReader(path));',
);
Expand Down
Loading

0 comments on commit a886ff4

Please sign in to comment.