{"added_deps_external":[],"added_deps_external_complete":[],"removed_deps":[],"removed_deps_external":[],"removed_deps_external_complete":[],"added_deps":[{"used_role":"NewExternal","upstream_impact":"0.0","user_role":"Production","used":"/sgraph/External/Python/urllib/parse","type":"import","user":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py"},{"used_role":"Production","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/src> sgraph/selement.py/SElement","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py","test_to_prod_coupling_impact":"0.42421603202819824"},{"used_role":"Production","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/src> sgraph/sgraph.py/SGraph","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py","test_to_prod_coupling_impact":"0.180505339987576"},{"used_role":"ExistingExternal","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/External/PythonLibs/ast","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py"},{"used_role":"Production","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/src> sgraph/selementassociation.py/SElementAssociation","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py","test_to_prod_coupling_impact":"0.42421603202819824"},{"used_role":"ExistingExternal","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/External/PythonLibs/Usual dependencies","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py"},{"used_role":"ExistingExternal","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/External/Python/Usual dependencies","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py"},{"used_role":"NewExternal","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/External/PythonLibs/textwrap","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py"},{"used_role":"ExistingExternal","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/External/PythonLibs/inspect","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py"},{"used_role":"ExistingExternal","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/External/PythonLibs/Usual dependencies","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py"},{"used_role":"Production","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py","test_to_prod_coupling_impact":"0.18058545887470245"},{"used_role":"Production","upstream_impact":"0.0","user_role":"Production","coupling_impact":"0.0","used":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/source_qualified_purl","type":"func_ref","user":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/elem_as_bom_data"},{"used_role":"Production","upstream_impact":"0.0","user_role":"Production","coupling_impact":"0.0","used":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/package_source_of","type":"func_ref","user":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/elem_as_bom_data"},{"used_role":"Production","upstream_impact":"0.0","user_role":"Production","coupling_impact":"0.0","used":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/purl_without_qualifiers","type":"func_ref","user":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/merge_component_evidence"},{"used_role":"NewExternal","imported_as":"urlsplit","upstream_impact":"0.0","user_role":"Production","used":"/sgraph/External/PythonLibs/urllib","type":"import_ref","user":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/package_source_of"},{"used_role":"NewExternal","imported_as":"urlunsplit","upstream_impact":"0.0","user_role":"Production","used":"/sgraph/External/PythonLibs/urllib","type":"import_ref","user":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/package_source_of"},{"used_role":"NewExternal","imported_as":"urlsplit","upstream_impact":"0.0","user_role":"Production","used":"/sgraph/External/PythonLibs/urllib","type":"import_ref","user":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/source_qualified_purl"},{"used_role":"NewExternal","imported_as":"quote","upstream_impact":"0.0","user_role":"Production","used":"/sgraph/External/PythonLibs/urllib","type":"import_ref","user":"/sgraph/sgraph/src> sgraph/converters/sbom_cyclonedx_generator.py/source_qualified_purl"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/components_of","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/model_with","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/lodash_from_two_checkouts"},{"used_role":"Production","imported_as":"SElement","upstream_impact":"0.0","user_role":"Test","test_to_prod_directed_unique_association":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py --> /sgraph/sgraph/src> sgraph/sgraph.py/SElement","used":"/sgraph/sgraph/src> sgraph/sgraph.py/SElement","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/lodash_from_two_checkouts","test_to_prod_coupling_impact":"0.680505339987576"},{"used_role":"Production","imported_as":"SElement","upstream_impact":"0.0","user_role":"Test","test_to_prod_directed_unique_association":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py --> /sgraph/sgraph/src> sgraph/sgraph.py/SElement","used":"/sgraph/sgraph/src> sgraph/sgraph.py/SElement","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/model_with","test_to_prod_coupling_impact":"0.680505339987576"},{"used_role":"Production","imported_as":"SGraph","upstream_impact":"0.0","user_role":"Test","test_to_prod_directed_unique_association":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py --> /sgraph/sgraph/src> sgraph/sgraph.py/SGraph","used":"/sgraph/sgraph/src> sgraph/sgraph.py/SGraph","type":"import","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/model_with","test_to_prod_coupling_impact":"0.680505339987576"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAPrivateSourceIsQualified/test_a_package_from_a_private_npm_registry_says_so"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAPrivateSourceIsQualified/test_a_package_from_a_private_npm_registry_says_so"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAPrivateSourceIsQualified/test_a_package_from_a_private_nuget_feed_says_so"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAPurlThatAlreadyOpensASubpath/test_a_git_shaped_version_gets_no_qualifier"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAPurlThatAlreadyOpensASubpath/test_a_git_shaped_version_gets_no_qualifier"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAVersionlessPurl/test_the_qualifier_follows_the_name_with_no_stray_at"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAnUnknownSourceStatesNothing/test_a_source_that_is_not_an_http_url"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAnUnknownSourceStatesNothing/test_a_source_that_is_not_an_http_url"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAnUnknownSourceStatesNothing/test_an_empty_attribute"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAnUnknownSourceStatesNothing/test_an_empty_attribute"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAnUnknownSourceStatesNothing/test_no_attribute"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestAnUnknownSourceStatesNothing/test_no_attribute"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/emitted_purl_types","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestEveryEmittedTypeIsClassified/test_each_type_is_in_exactly_one_table"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/emitted_purl_types","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestEveryEmittedTypeIsClassified/test_the_derivation_sees_every_branch"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestIdentityIsNotAffected/test_the_bom_ref_keeps_the_unqualified_purl"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestIdentityIsNotAffected/test_the_component_type_is_still_read_from_the_purl_type"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestNothingSecretIsPublished/test_a_port_that_is_the_scheme_default_is_dropped"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestNothingSecretIsPublished/test_a_port_that_is_the_scheme_default_is_dropped"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestNothingSecretIsPublished/test_query_and_fragment_are_dropped"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestNothingSecretIsPublished/test_query_and_fragment_are_dropped"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestNothingSecretIsPublished/test_the_port_is_kept"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestNothingSecretIsPublished/test_the_port_is_kept"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestNothingSecretIsPublished/test_user_info_is_dropped"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestNothingSecretIsPublished/test_user_info_is_dropped"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestThePublicRegistryIsNotQualified/test_a_default_host_of_another_type_is_not_a_default_here"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestThePublicRegistryIsNotQualified/test_npm"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestThePublicRegistryIsNotQualified/test_nuget_as_a_restore_records_it"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestThePublicRegistryIsNotQualified/test_the_other_spellings_of_a_default_registry"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestThePublicRegistryIsNotQualified/test_the_other_spellings_of_a_default_registry"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestThePublicRegistryIsNotQualified/test_the_property_still_says_where_it_came_from"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestThePublicRegistryIsNotQualified/test_the_property_still_says_where_it_came_from"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTheValueIsEncodedAsTheStandardRequires/test_an_already_escaped_path_is_escaped_again"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/component_for","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTheValueIsEncodedAsTheStandardRequires/test_separators_in_the_path_are_encoded"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTwoSourcesForOnePackage/test_a_disagreement_drops_the_source_rather_than_choosing"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/lodash_from_two_checkouts","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTwoSourcesForOnePackage/test_a_disagreement_drops_the_source_rather_than_choosing"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTwoSourcesForOnePackage/test_agreement_survives_the_merge"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/lodash_from_two_checkouts","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTwoSourcesForOnePackage/test_agreement_survives_the_merge"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTwoSourcesForOnePackage/test_silence_on_one_side_does_not_corroborate_the_other"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/lodash_from_two_checkouts","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTwoSourcesForOnePackage/test_silence_on_one_side_does_not_corroborate_the_other"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/source_property","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTwoSourcesForOnePackage/test_two_spellings_of_one_registry_agree"},{"used_role":"Test","upstream_impact":"0.0","user_role":"Test","used":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/lodash_from_two_checkouts","type":"func_ref","user":"/sgraph/sgraph/tests/converters/test_package_source_provenance.py/TestTwoSourcesForOnePackage/test_two_spellings_of_one_registry_agree"}],"code_rank":{"code_rank_global_base":86.06958898563335,"code_rank_global_head":86.20032717445665,"code_rank_local_head":121.28050361182483,"code_rank_local_base":123.6145602111405}}