gammasimtools 0.23.0__py3-none-any.whl → 0.24.0__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 (59) hide show
  1. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/METADATA +1 -1
  2. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/RECORD +59 -58
  3. simtools/_version.py +2 -2
  4. simtools/application_control.py +4 -4
  5. simtools/applications/convert_geo_coordinates_of_array_elements.py +1 -1
  6. simtools/applications/db_add_file_to_db.py +2 -2
  7. simtools/applications/db_add_simulation_model_from_repository_to_db.py +1 -1
  8. simtools/applications/db_add_value_from_json_to_db.py +2 -2
  9. simtools/applications/db_development_tools/write_array_elements_positions_to_repository.py +1 -1
  10. simtools/applications/db_generate_compound_indexes.py +1 -1
  11. simtools/applications/db_get_array_layouts_from_db.py +2 -2
  12. simtools/applications/db_get_file_from_db.py +1 -1
  13. simtools/applications/db_get_parameter_from_db.py +1 -1
  14. simtools/applications/db_inspect_databases.py +4 -2
  15. simtools/applications/db_upload_model_repository.py +1 -1
  16. simtools/applications/derive_ctao_array_layouts.py +1 -1
  17. simtools/applications/generate_array_config.py +1 -1
  18. simtools/applications/maintain_simulation_model_add_production.py +11 -21
  19. simtools/applications/production_generate_grid.py +1 -1
  20. simtools/applications/submit_array_layouts.py +2 -2
  21. simtools/applications/validate_camera_fov.py +1 -1
  22. simtools/applications/validate_cumulative_psf.py +2 -2
  23. simtools/applications/validate_optics.py +1 -1
  24. simtools/configuration/commandline_parser.py +7 -9
  25. simtools/configuration/configurator.py +1 -1
  26. simtools/corsika/corsika_config.py +2 -4
  27. simtools/data_model/model_data_writer.py +1 -1
  28. simtools/data_model/schema.py +36 -34
  29. simtools/db/db_handler.py +61 -294
  30. simtools/db/db_model_upload.py +1 -1
  31. simtools/db/mongo_db.py +535 -0
  32. simtools/dependencies.py +33 -8
  33. simtools/layout/array_layout.py +7 -7
  34. simtools/layout/array_layout_utils.py +3 -3
  35. simtools/model/array_model.py +36 -67
  36. simtools/model/calibration_model.py +12 -9
  37. simtools/model/model_parameter.py +196 -159
  38. simtools/model/model_repository.py +159 -35
  39. simtools/model/model_utils.py +3 -3
  40. simtools/model/site_model.py +59 -27
  41. simtools/model/telescope_model.py +21 -13
  42. simtools/ray_tracing/mirror_panel_psf.py +4 -4
  43. simtools/ray_tracing/psf_parameter_optimisation.py +1 -1
  44. simtools/reporting/docs_auto_report_generator.py +1 -1
  45. simtools/reporting/docs_read_parameters.py +3 -2
  46. simtools/schemas/simulation_models_info.schema.yml +2 -1
  47. simtools/simtel/simtel_config_writer.py +97 -20
  48. simtools/simulator.py +2 -1
  49. simtools/testing/assertions.py +50 -6
  50. simtools/testing/validate_output.py +4 -8
  51. simtools/utils/value_conversion.py +10 -5
  52. simtools/version.py +24 -0
  53. simtools/visualization/plot_pixels.py +1 -1
  54. simtools/visualization/plot_psf.py +1 -1
  55. simtools/visualization/plot_tables.py +1 -1
  56. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/WHEEL +0 -0
  57. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/entry_points.txt +0 -0
  58. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/licenses/LICENSE +0 -0
  59. {gammasimtools-0.23.0.dist-info → gammasimtools-0.24.0.dist-info}/top_level.txt +0 -0
@@ -186,7 +186,7 @@ class ModelDataWriter:
186
186
  ValueError
187
187
  If parameter with the same version exists in the database.
188
188
  """
189
- db = db_handler.DatabaseHandler(mongo_db_config=db_config)
189
+ db = db_handler.DatabaseHandler(db_config=db_config)
190
190
  try:
191
191
  db.get_model_parameter(
192
192
  parameter=parameter_name,
@@ -4,12 +4,9 @@ import logging
4
4
  from pathlib import Path
5
5
 
6
6
  import jsonschema
7
- from packaging.specifiers import SpecifierSet
8
- from packaging.version import Version
9
7
  from referencing import Registry, Resource
10
8
 
11
9
  import simtools.utils.general as gen
12
- from simtools import version
13
10
  from simtools.constants import (
14
11
  METADATA_JSON_SCHEMA,
15
12
  MODEL_PARAMETER_METASCHEMA,
@@ -17,8 +14,10 @@ from simtools.constants import (
17
14
  SCHEMA_PATH,
18
15
  )
19
16
  from simtools.data_model import format_checkers
17
+ from simtools.dependencies import get_software_version
20
18
  from simtools.io import ascii_handler
21
19
  from simtools.utils import names
20
+ from simtools.version import check_version_constraint
22
21
 
23
22
  _logger = logging.getLogger(__name__)
24
23
 
@@ -96,7 +95,7 @@ def get_model_parameter_schema_version(schema_version=None):
96
95
 
97
96
 
98
97
  def validate_dict_using_schema(
99
- data, schema_file=None, json_schema=None, ignore_software_version=False
98
+ data, schema_file=None, json_schema=None, ignore_software_version=False, offline=False
100
99
  ):
101
100
  """
102
101
  Validate a data dictionary against a schema.
@@ -124,7 +123,7 @@ def validate_dict_using_schema(
124
123
  if json_schema is None:
125
124
  json_schema = load_schema(schema_file, get_schema_version_from_data(data))
126
125
 
127
- _validate_deprecation_and_version(data, ignore_software_version)
126
+ validate_deprecation_and_version(data, ignore_software_version=ignore_software_version)
128
127
 
129
128
  validator = jsonschema.Draft6Validator(
130
129
  schema=json_schema,
@@ -137,6 +136,16 @@ def validate_dict_using_schema(
137
136
  except jsonschema.exceptions.ValidationError as exc:
138
137
  _logger.error(f"Validation failed using schema: {json_schema} for data: {data}")
139
138
  raise exc
139
+
140
+ if not offline:
141
+ _validate_meta_schema_url(data)
142
+
143
+ _logger.debug(f"Successful validation of data using schema ({json_schema.get('name')})")
144
+ return data
145
+
146
+
147
+ def _validate_meta_schema_url(data):
148
+ """Validate meta_schema_url if present in data."""
140
149
  if (
141
150
  isinstance(data, dict)
142
151
  and data.get("meta_schema_url")
@@ -144,9 +153,6 @@ def validate_dict_using_schema(
144
153
  ):
145
154
  raise FileNotFoundError(f"Meta schema URL does not exist: {data['meta_schema_url']}")
146
155
 
147
- _logger.debug(f"Successful validation of data using schema ({json_schema.get('name')})")
148
- return data
149
-
150
156
 
151
157
  def _retrieve_yaml_schema_from_uri(uri):
152
158
  """Load schema from a file URI."""
@@ -307,9 +313,7 @@ def _add_array_elements(key, schema):
307
313
  return schema
308
314
 
309
315
 
310
- def _validate_deprecation_and_version(
311
- data, software_name="simtools", ignore_software_version=False
312
- ):
316
+ def validate_deprecation_and_version(data, software_name=None, ignore_software_version=False):
313
317
  """
314
318
  Check if data contains deprecated parameters or version mismatches.
315
319
 
@@ -317,39 +321,37 @@ def _validate_deprecation_and_version(
317
321
  ----------
318
322
  data: dict
319
323
  Data dictionary to check.
320
- software_name: str
321
- Name of the software to check version against.
324
+ software_name: str or None
325
+ Name of the software to check version against. If None, use complete list
322
326
  ignore_software_version: bool
323
327
  If True, ignore software version check.
324
328
  """
325
329
  if not isinstance(data, dict):
326
330
  return
327
331
 
332
+ data_name = data.get("name", "<unknown>")
333
+
328
334
  if data.get("deprecated", False):
329
335
  note = data.get("deprecation_note", "(no deprecation note provided)")
330
- _logger.warning(f"Data is deprecated. Note: {note}")
336
+ _logger.warning(f"Data for {data_name} is deprecated. Note: {note}")
331
337
 
332
- def check_version(sw):
333
- constraint = sw.get("version")
334
- if constraint is None:
335
- return
336
- constraint = constraint.strip()
337
- spec = SpecifierSet(constraint, prereleases=True)
338
- if Version(version.__version__) in spec:
338
+ for sw in data.get("simulation_software", []):
339
+ name, constraint = sw.get("name"), sw.get("version")
340
+ if not name or not constraint:
341
+ continue
342
+ if software_name is not None and name.lower() != software_name.lower():
343
+ continue
344
+
345
+ software_version = get_software_version(name)
346
+ if check_version_constraint(software_version, constraint):
339
347
  _logger.debug(
340
- f"Version {version.__version__} of {software_name} matches constraint {constraint}."
348
+ f"{data_name}: version {software_version} of {name} matches "
349
+ f"constraint {constraint}."
341
350
  )
351
+ continue
352
+
353
+ msg = f"{data_name}: version {software_version} of {name} does not match {constraint}."
354
+ if ignore_software_version:
355
+ _logger.warning(f"{msg}, but version check is ignored.")
342
356
  else:
343
- msg = (
344
- f"Version {version.__version__} of {software_name} "
345
- f"does not match constraint {constraint}."
346
- )
347
- if ignore_software_version:
348
- _logger.warning(f"{msg}, but version check is ignored.")
349
- return
350
357
  raise ValueError(msg)
351
-
352
- for sw in data.get("simulation_software", []):
353
- if sw.get("name") == software_name:
354
- check_version(sw)
355
- break