lsst-pipe-base 29.2025.2600__tar.gz → 29.2025.2800__tar.gz

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 (148) hide show
  1. {lsst_pipe_base-29.2025.2600/python/lsst_pipe_base.egg-info → lsst_pipe_base-29.2025.2800}/PKG-INFO +1 -1
  2. lsst_pipe_base-29.2025.2800/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +1509 -0
  3. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/quantum_graph_skeleton.py +5 -5
  4. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/tests/mocks/_data_id_match.py +16 -0
  5. lsst_pipe_base-29.2025.2800/python/lsst/pipe/base/version.py +2 -0
  6. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800/python/lsst_pipe_base.egg-info}/PKG-INFO +1 -1
  7. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst_pipe_base.egg-info/SOURCES.txt +1 -0
  8. lsst_pipe_base-29.2025.2800/tests/test_qg_builder_dimensions.py +307 -0
  9. lsst_pipe_base-29.2025.2600/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +0 -930
  10. lsst_pipe_base-29.2025.2600/python/lsst/pipe/base/version.py +0 -2
  11. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/COPYRIGHT +0 -0
  12. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/LICENSE +0 -0
  13. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/MANIFEST.in +0 -0
  14. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/README.md +0 -0
  15. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/bsd_license.txt +0 -0
  16. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/CHANGES.rst +0 -0
  17. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/creating-a-pipeline.rst +0 -0
  18. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/creating-a-pipelinetask.rst +0 -0
  19. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/creating-a-task.rst +0 -0
  20. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/index.rst +0 -0
  21. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/task-framework-overview.rst +0 -0
  22. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/task-retargeting-howto.rst +0 -0
  23. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/testing-a-pipeline-task.rst +0 -0
  24. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/testing-pipelines-with-mocks.rst +0 -0
  25. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/doc/lsst.pipe.base/working-with-pipeline-graphs.rst +0 -0
  26. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/gpl-v3.0.txt +0 -0
  27. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/pyproject.toml +0 -0
  28. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/__init__.py +0 -0
  29. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/__init__.py +0 -0
  30. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/__init__.py +0 -0
  31. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/_datasetQueryConstraints.py +0 -0
  32. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/_dataset_handle.py +0 -0
  33. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/_instrument.py +0 -0
  34. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/_observation_dimension_packer.py +0 -0
  35. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/_quantumContext.py +0 -0
  36. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/_status.py +0 -0
  37. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/_task_metadata.py +0 -0
  38. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/automatic_connection_constants.py +0 -0
  39. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/caching_limited_butler.py +0 -0
  40. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/cli/__init__.py +0 -0
  41. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/cli/_get_cli_subcommands.py +0 -0
  42. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/cli/cmd/__init__.py +0 -0
  43. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/cli/cmd/commands.py +0 -0
  44. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/cli/opt/__init__.py +0 -0
  45. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/cli/opt/arguments.py +0 -0
  46. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/cli/opt/options.py +0 -0
  47. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/config.py +0 -0
  48. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/configOverrides.py +0 -0
  49. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/connectionTypes.py +0 -0
  50. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/connections.py +0 -0
  51. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/dot_tools.py +0 -0
  52. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/executionButlerBuilder.py +0 -0
  53. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/execution_reports.py +0 -0
  54. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/formatters/__init__.py +0 -0
  55. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/formatters/pexConfig.py +0 -0
  56. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/graph/__init__.py +0 -0
  57. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/graph/_implDetails.py +0 -0
  58. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/graph/_loadHelpers.py +0 -0
  59. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/graph/_versionDeserializers.py +0 -0
  60. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/graph/graph.py +0 -0
  61. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/graph/graphSummary.py +0 -0
  62. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/graph/quantumNode.py +0 -0
  63. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/mermaid_tools.py +0 -0
  64. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline.py +0 -0
  65. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipelineIR.py +0 -0
  66. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipelineTask.py +0 -0
  67. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/__init__.py +0 -0
  68. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/__main__.py +0 -0
  69. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/_dataset_types.py +0 -0
  70. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/_edges.py +0 -0
  71. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/_exceptions.py +0 -0
  72. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/_mapping_views.py +0 -0
  73. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/_nodes.py +0 -0
  74. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/_pipeline_graph.py +0 -0
  75. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/_task_subsets.py +0 -0
  76. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/_tasks.py +0 -0
  77. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/expressions.py +0 -0
  78. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/io.py +0 -0
  79. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/__init__.py +0 -0
  80. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/_dot.py +0 -0
  81. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/_formatting.py +0 -0
  82. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/_layout.py +0 -0
  83. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/_merge.py +0 -0
  84. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/_mermaid.py +0 -0
  85. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/_options.py +0 -0
  86. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/_printer.py +0 -0
  87. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/_show.py +0 -0
  88. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py +0 -0
  89. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/prerequisite_helpers.py +0 -0
  90. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/py.typed +0 -0
  91. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/quantum_graph_builder.py +0 -0
  92. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/quantum_provenance_graph.py +0 -0
  93. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/script/__init__.py +0 -0
  94. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/script/register_instrument.py +0 -0
  95. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py +0 -0
  96. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/script/transfer_from_graph.py +0 -0
  97. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/script/utils.py +0 -0
  98. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/script/zip_from_graph.py +0 -0
  99. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/struct.py +0 -0
  100. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/task.py +0 -0
  101. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/taskFactory.py +0 -0
  102. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/testUtils.py +0 -0
  103. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/tests/__init__.py +0 -0
  104. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/tests/mocks/__init__.py +0 -0
  105. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/tests/mocks/_pipeline_task.py +0 -0
  106. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/tests/mocks/_storage_class.py +0 -0
  107. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/tests/no_dimensions.py +0 -0
  108. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/tests/pipelineStepTester.py +0 -0
  109. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/tests/simpleQGraph.py +0 -0
  110. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/tests/util.py +0 -0
  111. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst/pipe/base/utils.py +0 -0
  112. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst_pipe_base.egg-info/dependency_links.txt +0 -0
  113. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst_pipe_base.egg-info/entry_points.txt +0 -0
  114. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst_pipe_base.egg-info/requires.txt +0 -0
  115. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst_pipe_base.egg-info/top_level.txt +0 -0
  116. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/python/lsst_pipe_base.egg-info/zip-safe +0 -0
  117. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/setup.cfg +0 -0
  118. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_adjust_all_quanta.py +0 -0
  119. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_caching_limited_butler.py +0 -0
  120. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_cliCmdRegisterInstrument.py +0 -0
  121. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_configOverrides.py +0 -0
  122. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_config_formatter.py +0 -0
  123. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_connections.py +0 -0
  124. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_dataid_match.py +0 -0
  125. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_dataset_handle.py +0 -0
  126. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_dot_tools.py +0 -0
  127. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_dynamic_connections.py +0 -0
  128. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_executionButler.py +0 -0
  129. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_execution_reports.py +0 -0
  130. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_graphBuilder.py +0 -0
  131. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_init_output_run.py +0 -0
  132. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_instrument.py +0 -0
  133. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_mermaid.py +0 -0
  134. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_pipeline.py +0 -0
  135. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_pipelineIR.py +0 -0
  136. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_pipelineLoadSubset.py +0 -0
  137. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_pipelineTask.py +0 -0
  138. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_pipeline_graph.py +0 -0
  139. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_pipeline_graph_expressions.py +0 -0
  140. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_quantumGraph.py +0 -0
  141. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_quantum_provenance_graph.py +0 -0
  142. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_quantum_success_caveats.py +0 -0
  143. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_script_utils.py +0 -0
  144. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_struct.py +0 -0
  145. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_task.py +0 -0
  146. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_taskmetadata.py +0 -0
  147. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_testUtils.py +0 -0
  148. {lsst_pipe_base-29.2025.2600 → lsst_pipe_base-29.2025.2800}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-pipe-base
3
- Version: 29.2025.2600
3
+ Version: 29.2025.2800
4
4
  Summary: Pipeline infrastructure for the Rubin Science Pipelines.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License: BSD 3-Clause License