psdi-data-conversion 0.0.37__py3-none-any.whl → 0.0.39__py3-none-any.whl

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.
Files changed (30) hide show
  1. psdi_data_conversion/app.py +64 -14
  2. psdi_data_conversion/constants.py +6 -5
  3. psdi_data_conversion/converter.py +20 -13
  4. psdi_data_conversion/converters/base.py +75 -68
  5. psdi_data_conversion/converters/c2x.py +14 -0
  6. psdi_data_conversion/converters/openbabel.py +12 -11
  7. psdi_data_conversion/database.py +361 -115
  8. psdi_data_conversion/dist.py +2 -1
  9. psdi_data_conversion/file_io.py +1 -2
  10. psdi_data_conversion/log_utility.py +1 -1
  11. psdi_data_conversion/main.py +152 -70
  12. psdi_data_conversion/static/content/index-versions/psdi-common-footer.html +12 -8
  13. psdi_data_conversion/static/content/psdi-common-footer.html +12 -8
  14. psdi_data_conversion/static/data/data.json +617 -3
  15. psdi_data_conversion/static/javascript/convert.js +54 -6
  16. psdi_data_conversion/static/javascript/convert_common.js +16 -2
  17. psdi_data_conversion/static/javascript/data.js +36 -4
  18. psdi_data_conversion/static/javascript/format.js +22 -9
  19. psdi_data_conversion/static/styles/format.css +7 -0
  20. psdi_data_conversion/templates/index.htm +57 -48
  21. psdi_data_conversion/testing/constants.py +3 -0
  22. psdi_data_conversion/testing/conversion_callbacks.py +4 -3
  23. psdi_data_conversion/testing/conversion_test_specs.py +44 -20
  24. psdi_data_conversion/testing/gui.py +362 -294
  25. psdi_data_conversion/testing/utils.py +38 -19
  26. {psdi_data_conversion-0.0.37.dist-info → psdi_data_conversion-0.0.39.dist-info}/METADATA +88 -4
  27. {psdi_data_conversion-0.0.37.dist-info → psdi_data_conversion-0.0.39.dist-info}/RECORD +30 -30
  28. {psdi_data_conversion-0.0.37.dist-info → psdi_data_conversion-0.0.39.dist-info}/WHEEL +0 -0
  29. {psdi_data_conversion-0.0.37.dist-info → psdi_data_conversion-0.0.39.dist-info}/entry_points.txt +0 -0
  30. {psdi_data_conversion-0.0.37.dist-info → psdi_data_conversion-0.0.39.dist-info}/licenses/LICENSE +0 -0
@@ -6,12 +6,12 @@ This module defines general classes and methods used for unit tests.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- from dataclasses import dataclass, field
10
- from collections.abc import Callable, Iterable
11
- from math import isclose
12
9
  import os
13
10
  import shlex
14
11
  import sys
12
+ from collections.abc import Callable, Iterable
13
+ from dataclasses import dataclass, field
14
+ from math import isclose
15
15
  from tempfile import TemporaryDirectory
16
16
  from typing import Any
17
17
  from unittest.mock import patch
@@ -23,6 +23,7 @@ import psdi_data_conversion
23
23
  from psdi_data_conversion.constants import CONVERTER_DEFAULT, GLOBAL_LOG_FILENAME, LOG_NONE, OUTPUT_LOG_EXT
24
24
  from psdi_data_conversion.converter import run_converter
25
25
  from psdi_data_conversion.converters.openbabel import COORD_GEN_KEY, COORD_GEN_QUAL_KEY
26
+ from psdi_data_conversion.database import get_format_info
26
27
  from psdi_data_conversion.dist import LINUX_LABEL, get_dist
27
28
  from psdi_data_conversion.file_io import is_archive, split_archive_ext
28
29
  from psdi_data_conversion.main import main as data_convert_main
@@ -125,9 +126,12 @@ class ConversionTestSpec:
125
126
  filename: str | Iterable[str] = "nacl.cif"
126
127
  """The name of the input file, relative to the input test data location, or a list thereof"""
127
128
 
128
- to_format: str | Iterable[str] = "pdb"
129
+ to_format: str | int | Iterable[str | int] = "pdb"
129
130
  """The format to test converting the input file to, or a list thereof"""
130
131
 
132
+ from_format: str | int | Iterable[str | int] | None = None
133
+ """The format of the input file, when it needs to be explicitly specified"""
134
+
131
135
  converter_name: str | Iterable[str] = CONVERTER_DEFAULT
132
136
  """The name of the converter to be used for the test, or a list thereof"""
133
137
 
@@ -233,9 +237,12 @@ class SingleConversionTestSpec:
233
237
  filename: str
234
238
  """The name of the input file, relative to the input test data location"""
235
239
 
236
- to_format: str
240
+ to_format: str | int
237
241
  """The format to test converting the input file to"""
238
242
 
243
+ from_format: str | int | None = None
244
+ """The format of the input file, when it needs to be explicitly specified"""
245
+
239
246
  converter_name: str | Iterable[str] = CONVERTER_DEFAULT
240
247
  """The name of the converter to be used for the test"""
241
248
 
@@ -257,11 +264,12 @@ class SingleConversionTestSpec:
257
264
  @property
258
265
  def out_filename(self) -> str:
259
266
  """The unqualified name of the output file which should have been created by the conversion."""
267
+ to_format_name = get_format_info(self.to_format, which=0).name
260
268
  if not is_archive(self.filename):
261
- return f"{os.path.splitext(self.filename)[0]}.{self.to_format}"
269
+ return f"{os.path.splitext(self.filename)[0]}.{to_format_name}"
262
270
  else:
263
271
  filename_base, ext = split_archive_ext(os.path.basename(self.filename))
264
- return f"{filename_base}-{self.to_format}{ext}"
272
+ return f"{filename_base}-{to_format_name}{ext}"
265
273
 
266
274
  @property
267
275
  def log_filename(self) -> str:
@@ -327,6 +335,7 @@ def _run_single_test_conversion_with_library(test_spec: SingleConversionTestSpec
327
335
  if test_spec.expect_success:
328
336
  run_converter(filename=qualified_in_filename,
329
337
  to_format=test_spec.to_format,
338
+ from_format=test_spec.from_format,
330
339
  name=test_spec.converter_name,
331
340
  upload_dir=input_dir,
332
341
  download_dir=output_dir,
@@ -336,6 +345,7 @@ def _run_single_test_conversion_with_library(test_spec: SingleConversionTestSpec
336
345
  with pytest.raises(Exception) as exc_info:
337
346
  run_converter(filename=qualified_in_filename,
338
347
  to_format=test_spec.to_format,
348
+ from_format=test_spec.from_format,
339
349
  name=test_spec.converter_name,
340
350
  upload_dir=input_dir,
341
351
  download_dir=output_dir,
@@ -358,7 +368,8 @@ def _run_single_test_conversion_with_library(test_spec: SingleConversionTestSpec
358
368
  captured_stderr=stderr,
359
369
  exc_info=exc_info)
360
370
  callback_msg = test_spec.callback(test_info)
361
- assert not callback_msg, callback_msg
371
+ if callback_msg:
372
+ pytest.fail(callback_msg)
362
373
 
363
374
 
364
375
  def run_test_conversion_with_cla(test_spec: ConversionTestSpec):
@@ -413,6 +424,7 @@ def _run_single_test_conversion_with_cla(test_spec: SingleConversionTestSpec,
413
424
  if test_spec.expect_success:
414
425
  run_converter_through_cla(filename=qualified_in_filename,
415
426
  to_format=test_spec.to_format,
427
+ from_format=test_spec.from_format,
416
428
  name=test_spec.converter_name,
417
429
  input_dir=input_dir,
418
430
  output_dir=output_dir,
@@ -423,6 +435,7 @@ def _run_single_test_conversion_with_cla(test_spec: SingleConversionTestSpec,
423
435
  with pytest.raises(SystemExit) as exc_info:
424
436
  run_converter_through_cla(filename=qualified_in_filename,
425
437
  to_format=test_spec.to_format,
438
+ from_format=test_spec.from_format,
426
439
  name=test_spec.converter_name,
427
440
  input_dir=input_dir,
428
441
  output_dir=output_dir,
@@ -452,7 +465,8 @@ def _run_single_test_conversion_with_cla(test_spec: SingleConversionTestSpec,
452
465
  captured_stdout=stdout,
453
466
  captured_stderr=stderr)
454
467
  callback_msg = test_spec.callback(test_info)
455
- assert not callback_msg, callback_msg
468
+ if callback_msg:
469
+ pytest.fail(callback_msg)
456
470
 
457
471
 
458
472
  def run_converter_through_cla(filename: str,
@@ -461,6 +475,7 @@ def run_converter_through_cla(filename: str,
461
475
  input_dir: str,
462
476
  output_dir: str,
463
477
  log_file: str,
478
+ from_format: str | None = None,
464
479
  **conversion_kwargs):
465
480
  """Runs a test conversion through the command-line interface
466
481
 
@@ -483,17 +498,21 @@ def run_converter_through_cla(filename: str,
483
498
  The desired name of the log file
484
499
  conversion_kwargs : Any
485
500
  Additional arguments describing the conversion
501
+ from_format : str | None
502
+ The format of the input file, when it needs to be explicitly specified, otherwise None
486
503
  """
487
504
 
488
505
  # Start the argument string with the arguments we will always include
489
506
  arg_string = f"{filename} -i {input_dir} -t {to_format} -o {output_dir} -w {name} --log-file {log_file}"
490
507
 
491
- # For each argument in the conversion kwargs, convert it to the appropriate argument to be provided to the
492
- # argument string
508
+ # For from_format and each argument in the conversion kwargs, convert it to the appropriate argument to be provided
509
+ # to the argument string
510
+
511
+ if from_format:
512
+ arg_string += f" -f {from_format}"
513
+
493
514
  for key, val in conversion_kwargs.items():
494
- if key == "from_format":
495
- arg_string += f" -f {val}"
496
- elif key == "log_mode":
515
+ if key == "log_mode":
497
516
  if val == LOG_NONE:
498
517
  arg_string += " -q"
499
518
  else:
@@ -506,8 +525,8 @@ def run_converter_through_cla(filename: str,
506
525
  arg_string += " --strict"
507
526
  elif key == "max_file_size":
508
527
  if val != 0:
509
- assert False, ("Test specification imposes a maximum file size, which isn't compatible with the "
510
- "command-line application.")
528
+ pytest.fail("Test specification imposes a maximum file size, which isn't compatible with the "
529
+ "command-line application.")
511
530
  elif key == "data":
512
531
  for subkey, subval in val.items():
513
532
  if subkey == "from_flags":
@@ -526,10 +545,10 @@ def run_converter_through_cla(filename: str,
526
545
  # Handled alongside COORD_GEN_KEY above
527
546
  pass
528
547
  else:
529
- assert False, (f"The key 'data[\"{subkey}\"]' was passed to `conversion_kwargs` but could not be "
530
- "interpreted")
548
+ pytest.fail(f"The key 'data[\"{subkey}\"]' was passed to `conversion_kwargs` but could not be "
549
+ "interpreted")
531
550
  else:
532
- assert False, f"The key '{key}' was passed to `conversion_kwargs` but could not be interpreted"
551
+ pytest.fail(f"The key '{key}' was passed to `conversion_kwargs` but could not be interpreted")
533
552
 
534
553
  run_with_arg_string(arg_string)
535
554
 
@@ -1,13 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: psdi_data_conversion
3
- Version: 0.0.37
3
+ Version: 0.0.39
4
4
  Summary: Chemistry file format conversion service, provided by PSDI
5
5
  Project-URL: Homepage, https://data-conversion.psdi.ac.uk/
6
6
  Project-URL: Documentation, https://psdi-uk.github.io/psdi-data-conversion/
7
- Project-URL: Repository, https://github.com/PSDI-UK/psdi-data-conversion
8
7
  Project-URL: Issues, https://github.com/PSDI-UK/psdi-data-conversion/issues
9
8
  Project-URL: Changelog, https://github.com/PSDI-UK/psdi-data-conversion/blob/main/CHANGELOG.md
10
- Project-URL: Download, https://github.com/PSDI-UK/psdi-data-conversion/releases/latest
11
9
  Author: Ray Whorley, Don Cruickshank, Tom Underwood
12
10
  Author-email: Samantha Pearman-Kanza <s.pearman-kanza@soton.ac.uk>, Bryan Gillis <7204836+brgillis@users.noreply.github.com>
13
11
  License: Apache License
@@ -245,7 +243,7 @@ Description-Content-Type: text/markdown
245
243
 
246
244
  # PSDI Data Conversion
247
245
 
248
- Version: Pre-release 2024-02-27
246
+ Version: Pre-release 2024-04-14
249
247
 
250
248
  This is the repository for the PSDI PF2 Chemistry File Format Conversion project. The goal of this project is to provide utilities to assist in converting files between the many different file formats used in chemistry, providing information on what converters are available for a given conversion and the expected quality of it, and providing multiple interfaces to perform these conversions. These interfaces are:
251
249
 
@@ -281,6 +279,10 @@ This is the repository for the PSDI PF2 Chemistry File Format Conversion project
281
279
  - [Troubleshooting](#troubleshooting)
282
280
  - [OSError: [Errno 24] Too many open files](#oserror-errno-24-too-many-open-files)
283
281
  - [Errors running c2x or Atomsk converters](#errors-running-c2x-or-atomsk-converters)
282
+ - [A supported conversion fails](#a-supported-conversion-fails)
283
+ - [Input file is malformatted or corrupt](#input-file-is-malformatted-or-corrupt)
284
+ - [Input file's format is misidentified](#input-files-format-is-misidentified)
285
+ - [Other known issues](#other-known-issues)
284
286
  - [Licensing](#licensing)
285
287
  - [Contributors](#contributors)
286
288
  - [Funding](#funding)
@@ -473,6 +475,24 @@ options] [-s/--strict] [--nc/--no-check] [-q/--quiet] [-g/--log-file <log file n
473
475
 
474
476
  Call `psdi-data-convert -h` for details on each of these options.
475
477
 
478
+ Note that some requested conversions may involve ambiguous formats which share the same extension. In this case, the application will print a warning and list possible matching formats, with a disambiguating name that can be used to specify which one. For instance, the `c2x` converter can convert into two variants of the `pdb` format, and if you ask it to convert to `pdb` without specifying which one, you'll see:
479
+
480
+ ```
481
+ ERROR: Extension 'pdb' is ambiguous and must be defined by ID. Possible formats and their IDs are:
482
+ 9: pdb-0 (Protein Data Bank)
483
+ 259: pdb-1 (Protein Data Bank with atoms numbered)
484
+ ```
485
+
486
+ This provides the IDs ("9" and "259") and disambiguating names ("pdb-0" and "pdb-1") for the matching formats. Either can be used in the call to the converter, e.g.:
487
+
488
+ ```bash
489
+ psdi-data-conversion nacl.cif -t 9 -w c2x
490
+ # Or equivalently:
491
+ psdi-data-conversion nacl.cif -t pdb-0 -w c2x
492
+ ```
493
+
494
+ The "<format>-0" pattern can be used with any format, even if it's unambiguous, and will be interpreted as the first instance of the format in the database with valid conversions. Note that as the database expands in future versions and more valid conversions are added, these disambiguated names may change, so it is recommended to use the format's ID in scripts and with the library to ensure consistency between versions of this package.
495
+
476
496
  #### Requesting Information on Possible Conversions
477
497
 
478
498
  The script can also be used to get information on possible conversions by providing the `-l/--list` argument:
@@ -547,6 +567,8 @@ Where `filename` is the name of the file to convert (either fully-qualified or r
547
567
 
548
568
  See the method's documentation via `help(run_converter)` after importing it for further details on usage.
549
569
 
570
+ Note that as with running the application through the command-line, some extra care may be needed in the case that the input or output format is ambiguous - see the [Data Conversion](#data-conversion) section above for more details on this. As with running through the command-line, a format's ID or disambiguated name must be used in the case of ambiguity.
571
+
550
572
  #### `constants`
551
573
 
552
574
  This package defines most constants used in the package. It may be imported via:
@@ -608,6 +630,8 @@ Once installed, the command-line script `psdi-data-convert-gui` will be made ava
608
630
  In case of problems when using Chrome, try opening Chrome from the command line:
609
631
  open -a "Google Chrome.app" --args --allow-file-access-from-files
610
632
 
633
+ The local version has some customisable options for running it, which can can be seen by running `psdi-data-convert-gui --help`. Most of these are only useful for development, but one notable setting is `--max-file-size-ob`, which sets the maximum allowed filesize for conversions with the Open Babel converter in megabytes. This is set to 1 MB by default, since Open Babel has a known bug which causes it to hang indefinitely for some conversions over this size (such as from large `mmcif` files). This can be set to a higher value (or to 0 to disable the limit) if the user wishes to disable this safeguard.
634
+
611
635
  ## Extending Functionality
612
636
 
613
637
  The Python library and CLA are written to make it easy to extend the functionality of this package to use other file format converters. This can be done by downloading or cloning the project's source from it's GitHub Repository (https://github.com/PSDI-UK/psdi-data-conversion), editing the code to add your converter following the guidance in the "[Adding File Format Converters](https://github.com/PSDI-UK/psdi-data-conversion/blob/main/CONTRIBUTING.md#adding-file-format-converters)" section of CONTRIBUTING.md to integrate it with the Python code, and installing the modified package on your system via:
@@ -691,6 +715,66 @@ Alternatively, you can run your own versions of the `c2x` and `atomsk` binaries
691
715
 
692
716
  On the other hand, it's possible that an error of this sort will occur if you have a non-working binary of one of these converters in your `$PATH`. If this might be the case, you can try removing it and see if the prepackaged binary works for you, or else recompile it to try to fix errors.
693
717
 
718
+ ### A supported conversion fails
719
+
720
+ Here we'll go over some of the most common reasons that a supported conversion might fail, and what can be done to fix the issue.
721
+
722
+ #### Input file is malformatted or corrupt
723
+
724
+ Usually if there is a problem with the input file, the error message you receive should indicate some difficulty reading it. If the error message indicates this might be the issue, try the following:
725
+
726
+ Check the validity of the input file, ideally using another tool which can read in a file of its type, and confirm that it can be read successfully. This doesn't guarantee that the file is valid, as some utilities are tolerant to some formatting errors, but if you get an error here, then you know the issue is with the file. If the file can be read by another utility, see if the conversion you're attempting is supported by another converter - it might be that the file has a negligible issue that another converter is able to ignore.
727
+
728
+ If you've confirmed that the input file is malformatted or corrupt, see if it's possible to regenerate it or fix it manually. There may be a bug in the program which generated it - if this is under your control, check the format's documentation to help fix it. Otherwise, you can see if you can use the format's documentation as a guide to manually fix the file.
729
+
730
+ #### Input file's format is misidentified
731
+
732
+ If you've followed the steps in the previous section and confirmed that the input file is valid, but you're still having issues with it, one possibility is that this application is misidentifying the file's format. This can happen if you've given the file an extension which isn't expected of its format, or in rare cases where an extension is shared by multiple formats.
733
+
734
+ To remedy this, try explicitly specifying the format, rather than letting the application guess it from the extension. You can see all supported formats by running `psdi-data-convert -l`, and then get details on one with `psdi-data-convert -l -f <format>` to confirm that it's the correct format. You can then call the conversion script with the argument `-f <format>`, or within Python make a call to the library with `run_converter(..., from_format=<format>)` to specify the format.
735
+
736
+ `<format>` here can be the standard extension of the format (in the case of unambiguous extensions), its ID, or its disambiguated name. To give an example which explains what each of these are, let's say you have an MDL MOL file you wish to convert to XYZ, so you get information about it and possible converters with `psdi-data-convert -l -f mol -t xyz`:
737
+
738
+ ```base
739
+ $ psdi-data-convert -l -f mol
740
+ WARNING: Format 'mol' is ambiguous and could refer to multiple formats. It may be necessary to explicitly specify which
741
+ you want to use when calling this script, e.g. with '-f mol-0' - see the disambiguated names in the list below:
742
+
743
+ 18: mol-0 (MDL MOL)
744
+ 216: mol-1 (MOLDY)
745
+
746
+ 20: xyz (XYZ cartesian coordinates)
747
+
748
+ The following registered converters can convert from mol-0 to xyz:
749
+
750
+ Open Babel
751
+ c2x
752
+
753
+ For details on input/output flags and options allowed by a converter for this conversion, call:
754
+ psdi-data-convert -l <converter name> -f mol-0 -t xyz
755
+
756
+ The following registered converters can convert from mol-1 to xyz:
757
+
758
+ Atomsk
759
+
760
+ For details on input/output flags and options allowed by a converter for this conversion, call:
761
+ psdi-data-convert -l <converter name> -f mol-1 -t xyz
762
+ ```
763
+
764
+ This output indicates that the application is aware of two formats which share the `mol` extension: MDL MOL and MOLDY. It lists the ID, disambiguated name, and description of each: ID `18` and disambiguated name `mol-0` for MDL MOL, and ID `216` and disambiguated name `mol-1` for MOLDY. The XYZ format, on the other hand, is unambiguous, and only lists the standard extension for it as its disambiguated name (although `xyz-0` will be accepted without error as well).
765
+
766
+ The program then lists converters which can handle the requested conversion, revealing a potential pitfall: The Open Babel and c2x converters can convert from MDL MOL to XYZ, which the Atomsk converter can convert from MOLDY to XYZ. If you don't specify which format you're converting from, the script might assume you meant to use the other one, if that's the only one compatible with the converter you've requested (or with the default converter, Open Babel, if you didn't explicitly request one). So to be careful here, it's best to specify this input format unambiguously.
767
+
768
+ Since in this example you have an MDL MOL file, you would use `-f 18` or `-f mol-0` to explicitly specify it in the command-line, or similarly provide one of these to the `from_format` argument of `run_converter` within Python. The application will then properly handle it, including alerting you if you request a conversion that isn't supported by your requested converter (e.g. if you request a conversion of this MDL MOL file to XYZ with Atomsk).
769
+
770
+ Important note: The disambiguated name is generated dynamically and isn't stored in the database, and in rare cases may change for some formats in future versions of this application which expand support to more formats and conversions. For uses which require forward-compatibility with future versions of this application, the ID should be used instead.
771
+
772
+ #### Other known issues
773
+
774
+ Through testing, we've identified some other conversion issues, which we list here:
775
+
776
+ - Open Babel will indefinitely hang when attempting to convert large files (more than ~1 MB) of certain types (such as `mmcif`). This is an issue with the converter itself and not our application, which we hope will be fixed in a future version. If this occurs, the job will have to be forcibly terminated. CTRL+C will fail to terminate it, but it can be stopped with CTRL+Z, then terminated with `kill %N`, where N is the number listed beside the job when it is stopped (usually 1). The conversion should then be attempted with another supported converter.
777
+
694
778
  ## Licensing
695
779
 
696
780
  This project is provided under the Apache License version 2.0, the terms of which can be found in the file `LICENSE`.
@@ -1,12 +1,12 @@
1
1
  psdi_data_conversion/__init__.py,sha256=urMsTqsTHTch1q4rMT9dgGnrvdPFMP9B8r-6Kr8H5sE,404
2
- psdi_data_conversion/app.py,sha256=POsNNY3KAfRp6_irBLM_c1ZDsS5qygcOF9I5dB3aYe4,12196
3
- psdi_data_conversion/constants.py,sha256=jh9-EqTt3E5I5H5axpANjQI_JuVeqsACoUVHuw6RX8Y,7351
4
- psdi_data_conversion/converter.py,sha256=f5Uos26M3KfDFQ-zoEOJVs0lEASkYRQyXrR0B9MhDmU,22906
5
- psdi_data_conversion/database.py,sha256=WMOdz6T2b2XuE_d-Ex_v5oRi-TDEHcku_yT04en4GoE,44274
6
- psdi_data_conversion/dist.py,sha256=Ju6BcEuLrB738diTbK6HX6ZBiZ40Ctq1exj44nSCMlE,2292
7
- psdi_data_conversion/file_io.py,sha256=UXxNxTl_EabQ96UrLp4b38ctkYhXV_KIHJeTuyRBVpM,8857
8
- psdi_data_conversion/log_utility.py,sha256=WIgQp0pMsFtJJZKgIhStBNnjLzC6gEIodQAoXji5ht0,8789
9
- psdi_data_conversion/main.py,sha256=90vCObJSG7Xxi_iyx2awskOt8RT9_Erel9rT8uz0n78,38203
2
+ psdi_data_conversion/app.py,sha256=A1TUVYuHUJKbtBXC0MbCDwyNcZgCYLDWyt_2lPLETK0,14212
3
+ psdi_data_conversion/constants.py,sha256=JWYC2gXsEi6bBl_NdEBh5nLZ7qX2LZZV_DutfEHJ8qo,7390
4
+ psdi_data_conversion/converter.py,sha256=A9u_xnzQ_OFp_rttttBNwZNA4d56Fdbm9FpjgyCroUA,23211
5
+ psdi_data_conversion/database.py,sha256=tgqUxW75eaWiEsiHNI7pUfMTIKmB23zrprSZ3ZDpO3Y,55967
6
+ psdi_data_conversion/dist.py,sha256=LOcKEP7H7JA9teX1m-5awuBi69gmdhtUit7yxtCTOZ8,2293
7
+ psdi_data_conversion/file_io.py,sha256=LvdPmnYL_7Xlcr-7LJjUbbky4gKiqTTvPRzdbtvQaJo,8794
8
+ psdi_data_conversion/log_utility.py,sha256=CHAq-JvBnTKaE0SHK5hM5j2dTbfSli4iUc3hsf6dBhc,8789
9
+ psdi_data_conversion/main.py,sha256=NaV5Pqe-8qYn7ybgok3t6RuRK1H_9ip68UWpV7DRgO0,41773
10
10
  psdi_data_conversion/security.py,sha256=wjdrMre29TpkF2NqrsXJ5sschSAnDzqLYTLUcNR21Qw,902
11
11
  psdi_data_conversion/bin/LICENSE_ATOMSK,sha256=-Ay6SFTAf9x-OaRAiOgMNoutfUMLHx5jQQA1HqZ6p7I,34886
12
12
  psdi_data_conversion/bin/LICENSE_C2X,sha256=-Ay6SFTAf9x-OaRAiOgMNoutfUMLHx5jQQA1HqZ6p7I,34886
@@ -16,9 +16,9 @@ psdi_data_conversion/bin/mac/atomsk,sha256=pqExRdkR8NSqSasHZjE74R_CiM6Dkr_yvfyak
16
16
  psdi_data_conversion/bin/mac/c2x,sha256=dI-bBoQ6uqc6KMYKJaq0x7ejJgOf_wysTxQA5BrF8AY,2581960
17
17
  psdi_data_conversion/converters/__init__.py,sha256=15Ldt06eyZ0bgNPB4qg419U0Zcjt6TUCTzjCBo8EIzM,210
18
18
  psdi_data_conversion/converters/atomsk.py,sha256=_V33me1e4HW0-YXvdE-z6PdwtSK2gYV6QZf5d8aPqH4,1523
19
- psdi_data_conversion/converters/base.py,sha256=aPxYhI4cbE74K_erMjtP2XJ695atILvsr1qASsRWios,35505
20
- psdi_data_conversion/converters/c2x.py,sha256=RjvOUxrb7R09s58p1kQKhICVUvozNJc4bvhQGkk89Ng,1498
21
- psdi_data_conversion/converters/openbabel.py,sha256=BGEXPdOfm5QNO67gymH8PrmW88pMvXF8_9fosz3_Bcg,13150
19
+ psdi_data_conversion/converters/base.py,sha256=gYZ-2f693_YBgJdlXFUZOpjVhB8PAbkbLFkOS9BFg9Q,36022
20
+ psdi_data_conversion/converters/c2x.py,sha256=jDA84H8Jpz--ajTWNWX6K6oMfOMMbMxkA31-VnGi0gU,2019
21
+ psdi_data_conversion/converters/openbabel.py,sha256=OYppOMfnvxmVgRY5vUkcVokWn-bQSSeG8MOFqN1MCIY,13224
22
22
  psdi_data_conversion/scripts/atomsk.sh,sha256=N_NMO5q8sI3Lt1TerC-xcKbMI0kfscAudy5UAbY0uR0,804
23
23
  psdi_data_conversion/scripts/c2x.sh,sha256=F48jhgtgouKKZDQ9p6tCCNBN5bPuidBq2GcTurdWzQc,770
24
24
  psdi_data_conversion/static/content/accessibility.htm,sha256=5mzlPM-d5KBoOuvuBTmer5QEI9lWQSd7FPH1KFn_7B0,14187
@@ -29,13 +29,13 @@ psdi_data_conversion/static/content/documentation.htm,sha256=1GiEjlDCP0kJ3CKkx3l
29
29
  psdi_data_conversion/static/content/download.htm,sha256=DQKWEuq_Bjv2TyV6DnPXnHrSOBvGYRHOU-m6YOwfsh4,4727
30
30
  psdi_data_conversion/static/content/feedback.htm,sha256=fZrhn4Egs9g6ygqPzV6ZG9ndYK02VdALNVNXRsZ716k,1788
31
31
  psdi_data_conversion/static/content/header-links.html,sha256=7B2bHa7dLfSZ4hPMvVJ3kR0niVAOO3FtHJo0K6m1oP4,693
32
- psdi_data_conversion/static/content/psdi-common-footer.html,sha256=CM9F6AXM1LVMLvTP51xTzOicEelSXlyXQyN-BjrQAJk,3933
32
+ psdi_data_conversion/static/content/psdi-common-footer.html,sha256=Qo6ecItnjqngIu1Kyg8YOptqjraMFxyJTYu3wiW5Wuw,4080
33
33
  psdi_data_conversion/static/content/psdi-common-header.html,sha256=vRAgLGKE_RhXgBUQnarxnpkGl9j2Qeedqqo3VNDVGdk,1825
34
34
  psdi_data_conversion/static/content/report.htm,sha256=CRwlF7a7QvAjHsajuehWOtLxbo-JAjqrS_Q-I4BWxzs,4549
35
35
  psdi_data_conversion/static/content/index-versions/header-links.html,sha256=WN9oZL7hLtH_yv5PvX3Ky7_YGrNvQL_RQ5eU8DB50Rg,764
36
- psdi_data_conversion/static/content/index-versions/psdi-common-footer.html,sha256=zzizo_YEPhvH3_jNPFkFoKZA0TnIG6EXzQOsgooU1K8,3989
36
+ psdi_data_conversion/static/content/index-versions/psdi-common-footer.html,sha256=nFZtEObp-X73p95oTOAvqzoPwjsEJD5dKUDhUPDCcj4,4136
37
37
  psdi_data_conversion/static/content/index-versions/psdi-common-header.html,sha256=IXmvdlArY-60b7HgvKjcNF3eSmEmTImX7Hdasswyi5s,1907
38
- psdi_data_conversion/static/data/data.json,sha256=_3o3BFEmnWGhoGMaviJsu-U9dJnk_tH9Wf0g-eDVWuU,3630027
38
+ psdi_data_conversion/static/data/data.json,sha256=1nljosxtwbLRfIIIa6-GHJnhvzhB759oEGvVQ18QP_4,3647095
39
39
  psdi_data_conversion/static/img/colormode-toggle-dm.svg,sha256=Q85ODwU67chZ77lyT9gITtnmqzJEycFmz35dJuqaPXE,502
40
40
  psdi_data_conversion/static/img/colormode-toggle-lm.svg,sha256=sIKXsNmLIXU4fSuuqrN0r-J4Hd3NIqoiXNT3mdq5-Fo,1155
41
41
  psdi_data_conversion/static/img/psdi-icon-dark.svg,sha256=-hYXxegsw67i0qqAOYCx-I-ZPyG04wG0aBVTKoZQlL0,69747
@@ -62,26 +62,26 @@ psdi_data_conversion/static/img/ukri-logo-darktext.png,sha256=3UgghERAmFdnre0Ffc
62
62
  psdi_data_conversion/static/img/ukri-logo-lighttext.png,sha256=ptIQwIGGdVsO2rTximo9QjtJFH9DpkJcAs1glwKFjwo,25579
63
63
  psdi_data_conversion/static/javascript/accessibility.js,sha256=kbnWHeBNPrTLrnYRjMEUmiOcCXM2bORYIRfzUB03TAE,7208
64
64
  psdi_data_conversion/static/javascript/common.js,sha256=3YZdwfq54OPl-xIImTwjbXqxKqlrAaEbeac0cAHvScU,1720
65
- psdi_data_conversion/static/javascript/convert.js,sha256=UfrqaO7VNiLeed-d92O_jpKXRa63-0tCb_e-rqjTdFM,9074
66
- psdi_data_conversion/static/javascript/convert_common.js,sha256=o4KHIlYToC3AfOa8MTzbPaNDjPEesyvUy50AVgTRxvI,11000
65
+ psdi_data_conversion/static/javascript/convert.js,sha256=xWd0V9wyPD6t2ltTbaAQqqnvneU6_VEdMhVyg7UUo6c,10453
66
+ psdi_data_conversion/static/javascript/convert_common.js,sha256=nr0UTAPv2hahqCjl_JzxoOAtsyKIsk6qDXO6cItmChg,11369
67
67
  psdi_data_conversion/static/javascript/convertato.js,sha256=faSvfm9HWT3i8piqEDq8OfekiPo3jCV2vKT_VjdzwmE,3555
68
68
  psdi_data_conversion/static/javascript/convertc2x.js,sha256=TTqC9B2FD_q3RcPE2GJh6yAhocQyJLRfQsbSWzm2g3U,3550
69
- psdi_data_conversion/static/javascript/data.js,sha256=davPYzCif_28FRpToQOYsoBgxpy6EMPWnBGQw0xKZrw,6111
70
- psdi_data_conversion/static/javascript/format.js,sha256=phFbU087hTJAvELR2nbLYZH9VQQDjmgBglknHSuF1ZI,20751
69
+ psdi_data_conversion/static/javascript/data.js,sha256=ZM5PkPqiq8aUaB0ARWLK4TVSuxJKAFAAxlF1-7BsJ1g,6915
70
+ psdi_data_conversion/static/javascript/format.js,sha256=S-ovNuqOSfS-RYDhFxxCDpTKFKdxOWAYvJuzeEPcXB0,21260
71
71
  psdi_data_conversion/static/javascript/load_accessibility.js,sha256=jTLfmubEmko2bJ_MKWMkmYxUeBxotozc-0-ua69CYJo,3265
72
72
  psdi_data_conversion/static/javascript/psdi-common.js,sha256=I0QqGQ7l_rA4KEfenQTfPc-uOXXp8sxMh_NHL3EkFm4,6231
73
73
  psdi_data_conversion/static/javascript/report.js,sha256=BHH5UOhXJtB6J_xk_y6woquNKt5W9hCrQapxKtGG1eA,12470
74
- psdi_data_conversion/static/styles/format.css,sha256=HKgKkepZtY0NCtKm4JlsuchDL_vymBQ0pRnmfVE8L30,3097
74
+ psdi_data_conversion/static/styles/format.css,sha256=PaQkUVxQfXI9nbJ-7YsN1tNIcLXfwXk8wJC-zht8nRA,3269
75
75
  psdi_data_conversion/static/styles/psdi-common.css,sha256=09VY-lldoZCrohuqPKnd9fvDget5g9ybi6uh13pYeY0,17249
76
- psdi_data_conversion/templates/index.htm,sha256=7jQYw0oUzV0RSTcYg66MvhPWHf03napHokfFuf-W2Fs,6258
76
+ psdi_data_conversion/templates/index.htm,sha256=wuHECSzTwVwmaGg55RnYunsaSFCYBmxf6_P4OygTNEQ,6824
77
77
  psdi_data_conversion/testing/__init__.py,sha256=Xku7drtLTYLLPsd403eC0LIEa_iohVifyeyAITy2w7U,135
78
- psdi_data_conversion/testing/constants.py,sha256=6k6U3WQ9bJeC_P4Sj_zaLaymyI937b5fZtDCsZpfxmE,411
79
- psdi_data_conversion/testing/conversion_callbacks.py,sha256=8Lu6_tkNk5hh0bx-CX8i1aBH6i2CtEs0PZkiqObFdlM,18777
80
- psdi_data_conversion/testing/conversion_test_specs.py,sha256=Bgs-qVvnzqqes38HwhiOlum-Ufl18Efpp090GYTpwYY,24228
81
- psdi_data_conversion/testing/gui.py,sha256=PQgsykZHDantUPgZY--rY9REb4rWukn8QwUMXsafdWo,15752
82
- psdi_data_conversion/testing/utils.py,sha256=OZ0fmsHFgoRAH7rVYDfFnGzorXO3cg6RhIFB0fujHc8,25229
83
- psdi_data_conversion-0.0.37.dist-info/METADATA,sha256=Dnum9-66pizoE3r1JtosgbI9kzPJLishRrc8RWCv2KA,39767
84
- psdi_data_conversion-0.0.37.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
85
- psdi_data_conversion-0.0.37.dist-info/entry_points.txt,sha256=xL7XTzaPRr2E67WhOD1M1Q-76hB8ausQlnNiHzuZQPA,123
86
- psdi_data_conversion-0.0.37.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
87
- psdi_data_conversion-0.0.37.dist-info/RECORD,,
78
+ psdi_data_conversion/testing/constants.py,sha256=BtIafruSobZ9cFY0VW5Bu209eiftnN8b3ObouZBrFQU,521
79
+ psdi_data_conversion/testing/conversion_callbacks.py,sha256=ATR-_BsYCUN8KyOyUjfdWCELzySxLN5jOI0JyrQnmHQ,18858
80
+ psdi_data_conversion/testing/conversion_test_specs.py,sha256=jFik-m-jxNZzZhyfiJVIj7CT4ML8pM4dm7Trs2d0hgg,25602
81
+ psdi_data_conversion/testing/gui.py,sha256=ul7ixYANIzmOG2ZNOZmQO6wsHmGHdiBGAlw-KuoN0j8,19085
82
+ psdi_data_conversion/testing/utils.py,sha256=YrFxjyiIx1seph0j7jCUgAVm6HvXY9QJjx0MvNJRbfw,26134
83
+ psdi_data_conversion-0.0.39.dist-info/METADATA,sha256=QVdwrTA_MdZyiQNOgE2cuVEUh_zA_zs3s9LxQFVY9r4,48116
84
+ psdi_data_conversion-0.0.39.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
85
+ psdi_data_conversion-0.0.39.dist-info/entry_points.txt,sha256=xL7XTzaPRr2E67WhOD1M1Q-76hB8ausQlnNiHzuZQPA,123
86
+ psdi_data_conversion-0.0.39.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
87
+ psdi_data_conversion-0.0.39.dist-info/RECORD,,