From 0db661c82243903024762ce852249f2a6485e0c1 Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Fri, 13 Sep 2024 21:05:56 -0700 Subject: [PATCH 01/11] Changes assertion citations to match output, testing CI --- tests/test_clients.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_clients.py b/tests/test_clients.py index f389b802..c24e6672 100644 --- a/tests/test_clients.py +++ b/tests/test_clients.py @@ -66,7 +66,7 @@ " Samuel G. Rodriques, and Andrew D. White. Paperqa:" " retrieval-augmented generative agent for scientific research. ArXiv," " Dec 2023. URL: https://doi.org/10.48550/arxiv.2312.07559," - " doi:10.48550/arxiv.2312.07559. This article has 23 citations." + " doi:10.48550/arxiv.2312.07559. This article has 25 citations." ), "is_oa": None, }, @@ -90,7 +90,7 @@ " White, and Philippe Schwaller. Augmenting large language models with" " chemistry tools. Nature Machine Intelligence, 6:525-535, May 2024." " URL: https://doi.org/10.1038/s42256-024-00832-8," - " doi:10.1038/s42256-024-00832-8. This article has 191 citations and is" + " doi:10.1038/s42256-024-00832-8. This article has 196 citations and is" " from a domain leading peer-reviewed journal." ), "is_oa": True, From 092e7c4be018affba32b235508e8f6dcaf486a86 Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Fri, 13 Sep 2024 22:28:54 -0700 Subject: [PATCH 02/11] Ignore specific citation count in UT, build helper function for other UTs --- tests/test_clients.py | 13 ++++++++++--- tests/utils/paper_helpers.py | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 tests/utils/paper_helpers.py diff --git a/tests/test_clients.py b/tests/test_clients.py index c24e6672..2f7b9c5e 100644 --- a/tests/test_clients.py +++ b/tests/test_clients.py @@ -19,6 +19,7 @@ from paperqa.clients.journal_quality import JournalQualityPostProcessor from paperqa.clients.retractions import RetrationDataPostProcessor +from utils.paper_helpers import compare_formatted_citations @pytest.mark.vcr @pytest.mark.parametrize( @@ -66,7 +67,7 @@ " Samuel G. Rodriques, and Andrew D. White. Paperqa:" " retrieval-augmented generative agent for scientific research. ArXiv," " Dec 2023. URL: https://doi.org/10.48550/arxiv.2312.07559," - " doi:10.48550/arxiv.2312.07559. This article has 25 citations." + " doi:10.48550/arxiv.2312.07559. This article has 23 citations." ), "is_oa": None, }, @@ -90,7 +91,7 @@ " White, and Philippe Schwaller. Augmenting large language models with" " chemistry tools. Nature Machine Intelligence, 6:525-535, May 2024." " URL: https://doi.org/10.1038/s42256-024-00832-8," - " doi:10.1038/s42256-024-00832-8. This article has 196 citations and is" + " doi:10.1038/s42256-024-00832-8. This article has 191 citations and is" " from a domain leading peer-reviewed journal." ), "is_oa": True, @@ -112,11 +113,17 @@ async def test_title_search(paper_attributes: dict[str, str]) -> None: ), ) details = await client.query(title=paper_attributes["title"]) + + # compares the citation without the specific number of citations + assert compare_formatted_citations( + paper_attributes['formatted_citation'], details.formatted_citation + ), "Formatted citation does not match except for citation count." + assert set(details.other["client_source"]) == set( # type: ignore[union-attr] paper_attributes["source"] ), "Should have the correct source" for key, value in paper_attributes.items(): - if key not in {"is_oa", "source"}: + if key not in {"is_oa", "source", "formatted_citation"}: assert getattr(details, key) == value, f"Should have the correct {key}" elif key == "is_oa": assert ( diff --git a/tests/utils/paper_helpers.py b/tests/utils/paper_helpers.py new file mode 100644 index 00000000..deebff16 --- /dev/null +++ b/tests/utils/paper_helpers.py @@ -0,0 +1,18 @@ +import re + +def compare_formatted_citations(expected: str, actual: str) -> bool: + """ + Compares two formatted citation strings; ignoring the citation_count value. + + :param expected: The expected formatted citation string. + :param actual: The actual formatted citation string. + :return: True if the citations match except for the citation count, False otherwise. + """ + # https://regex101.com/r/lCN8ET/1 + citation_pattern = r"(This article has )\d+( citations?)" + + # between group 1 and 2, replace with the character "n" + expected_cleaned = re.sub(citation_pattern, r"\1n\2", expected).strip() + actual_cleaned = re.sub(citation_pattern, r"\1n\2", actual).strip() + + return expected_cleaned == actual_cleaned From 013afde11cc18405f7df02c41f16beb1f320ff9d Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Fri, 13 Sep 2024 22:37:42 -0700 Subject: [PATCH 03/11] Small grammar adjustment --- tests/test_clients.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_clients.py b/tests/test_clients.py index 2f7b9c5e..56fb4fd8 100644 --- a/tests/test_clients.py +++ b/tests/test_clients.py @@ -117,7 +117,7 @@ async def test_title_search(paper_attributes: dict[str, str]) -> None: # compares the citation without the specific number of citations assert compare_formatted_citations( paper_attributes['formatted_citation'], details.formatted_citation - ), "Formatted citation does not match except for citation count." + ), "Formatted citation should match" assert set(details.other["client_source"]) == set( # type: ignore[union-attr] paper_attributes["source"] From 669988b5e6f62f8b02bf07e9f2febac858060a70 Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Sat, 14 Sep 2024 00:56:25 -0700 Subject: [PATCH 04/11] change implementation, update UTs, cleanup, lint --- paperqa/types.py | 2 ++ tests/test_clients.py | 42 ++++++++++++++++++++++++++++++------ tests/utils/paper_helpers.py | 18 ---------------- 3 files changed, 37 insertions(+), 25 deletions(-) delete mode 100644 tests/utils/paper_helpers.py diff --git a/paperqa/types.py b/paperqa/types.py index 036a8116..23b72657 100644 --- a/paperqa/types.py +++ b/paperqa/types.py @@ -344,6 +344,8 @@ class DocDetails(Doc): "http://dx.doi.org/", } AUTHOR_NAMES_TO_REMOVE: ClassVar[Collection[str]] = {"et al", "et al."} + # https://regex101.com/r/ihzNqt/1 + CITATION_COUNT_REGEX_PATTERN: ClassVar[str] = r"This article has \d+ citations?" @field_validator("key") @classmethod diff --git a/tests/test_clients.py b/tests/test_clients.py index 56fb4fd8..6397ffe8 100644 --- a/tests/test_clients.py +++ b/tests/test_clients.py @@ -1,6 +1,7 @@ from __future__ import annotations import logging +import re from collections.abc import Collection, Sequence from typing import Any, cast from unittest.mock import patch @@ -18,8 +19,8 @@ from paperqa.clients.client_models import MetadataPostProcessor, MetadataProvider from paperqa.clients.journal_quality import JournalQualityPostProcessor from paperqa.clients.retractions import RetrationDataPostProcessor +from paperqa.types import DocDetails -from utils.paper_helpers import compare_formatted_citations @pytest.mark.vcr @pytest.mark.parametrize( @@ -113,12 +114,39 @@ async def test_title_search(paper_attributes: dict[str, str]) -> None: ), ) details = await client.query(title=paper_attributes["title"]) - - # compares the citation without the specific number of citations - assert compare_formatted_citations( - paper_attributes['formatted_citation'], details.formatted_citation - ), "Formatted citation should match" - + + # matches the citation pattern, not the specific citation count + # search because the count will be somewhere in the middle of the string + expected_citation_format = re.search( + DocDetails.CITATION_COUNT_REGEX_PATTERN, + paper_attributes["formatted_citation"], + ) + actual_citation_format = re.search( + DocDetails.CITATION_COUNT_REGEX_PATTERN, + details.formatted_citation, # type: ignore[union-attr] + ) + assert ( + expected_citation_format is not None + ), "Expected string should match the citation pattern" + assert ( + actual_citation_format is not None + ), "Actual string should match the citation pattern" + + expected_remaining = ( + paper_attributes["formatted_citation"][: expected_citation_format.start()] + + paper_attributes["formatted_citation"][expected_citation_format.end() :] + ) + + actual_remaining = ( + details.formatted_citation[: actual_citation_format.start()] # type: ignore[union-attr] + + details.formatted_citation[actual_citation_format.end() :] # type: ignore[union-attr] + ) + + # Assert that the parts of the strings outside the citation count are identical + assert ( + expected_remaining == actual_remaining + ), "Formatted citation text should match except for citation count" + assert set(details.other["client_source"]) == set( # type: ignore[union-attr] paper_attributes["source"] ), "Should have the correct source" diff --git a/tests/utils/paper_helpers.py b/tests/utils/paper_helpers.py deleted file mode 100644 index deebff16..00000000 --- a/tests/utils/paper_helpers.py +++ /dev/null @@ -1,18 +0,0 @@ -import re - -def compare_formatted_citations(expected: str, actual: str) -> bool: - """ - Compares two formatted citation strings; ignoring the citation_count value. - - :param expected: The expected formatted citation string. - :param actual: The actual formatted citation string. - :return: True if the citations match except for the citation count, False otherwise. - """ - # https://regex101.com/r/lCN8ET/1 - citation_pattern = r"(This article has )\d+( citations?)" - - # between group 1 and 2, replace with the character "n" - expected_cleaned = re.sub(citation_pattern, r"\1n\2", expected).strip() - actual_cleaned = re.sub(citation_pattern, r"\1n\2", actual).strip() - - return expected_cleaned == actual_cleaned From 533fe9aae89a86b67f9da05592b1b625b5da4593 Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Sat, 14 Sep 2024 14:04:59 -0700 Subject: [PATCH 05/11] Simplify regex expression, simplify test, add clarifying comment --- paperqa/types.py | 4 ++-- tests/test_clients.py | 31 ++++++++----------------------- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/paperqa/types.py b/paperqa/types.py index 23b72657..ce83e7e2 100644 --- a/paperqa/types.py +++ b/paperqa/types.py @@ -344,8 +344,8 @@ class DocDetails(Doc): "http://dx.doi.org/", } AUTHOR_NAMES_TO_REMOVE: ClassVar[Collection[str]] = {"et al", "et al."} - # https://regex101.com/r/ihzNqt/1 - CITATION_COUNT_REGEX_PATTERN: ClassVar[str] = r"This article has \d+ citations?" + # https://regex101.com/r/3LE9Mt/1 + CITATION_COUNT_REGEX_PATTERN: ClassVar[str] = r"(This article has )\d+( citations?)" @field_validator("key") @classmethod diff --git a/tests/test_clients.py b/tests/test_clients.py index 6397ffe8..89868084 100644 --- a/tests/test_clients.py +++ b/tests/test_clients.py @@ -113,44 +113,29 @@ async def test_title_search(paper_attributes: dict[str, str]) -> None: client_list, ), ) - details = await client.query(title=paper_attributes["title"]) - # matches the citation pattern, not the specific citation count - # search because the count will be somewhere in the middle of the string - expected_citation_format = re.search( + details = await client.query(title=paper_attributes["title"]) + expected_citation_str = re.sub( DocDetails.CITATION_COUNT_REGEX_PATTERN, + r"\1n\2", paper_attributes["formatted_citation"], ) - actual_citation_format = re.search( + actual_citation_str = re.sub( DocDetails.CITATION_COUNT_REGEX_PATTERN, + r"\1n\2", details.formatted_citation, # type: ignore[union-attr] ) - assert ( - expected_citation_format is not None - ), "Expected string should match the citation pattern" - assert ( - actual_citation_format is not None - ), "Actual string should match the citation pattern" - - expected_remaining = ( - paper_attributes["formatted_citation"][: expected_citation_format.start()] - + paper_attributes["formatted_citation"][expected_citation_format.end() :] - ) - - actual_remaining = ( - details.formatted_citation[: actual_citation_format.start()] # type: ignore[union-attr] - + details.formatted_citation[actual_citation_format.end() :] # type: ignore[union-attr] - ) - # Assert that the parts of the strings outside the citation count are identical + # Assert that the normalized strings are identical assert ( - expected_remaining == actual_remaining + expected_citation_str == actual_citation_str ), "Formatted citation text should match except for citation count" assert set(details.other["client_source"]) == set( # type: ignore[union-attr] paper_attributes["source"] ), "Should have the correct source" for key, value in paper_attributes.items(): + # Equality check all attributes but the ones in the below set if key not in {"is_oa", "source", "formatted_citation"}: assert getattr(details, key) == value, f"Should have the correct {key}" elif key == "is_oa": From 5ff40229d6afa04aa851fde3fa8a1e1cea77baa2 Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:19:55 -0700 Subject: [PATCH 06/11] remove vestigial print statemen --- paperqa/types.py | 1 - 1 file changed, 1 deletion(-) diff --git a/paperqa/types.py b/paperqa/types.py index 03716879..fab0566c 100644 --- a/paperqa/types.py +++ b/paperqa/types.py @@ -565,7 +565,6 @@ def formatted_citation(self) -> str: or self.citation_count is None or self.source_quality is None ): - print(f"citation: {self.citation}, citation_count: {self.citation_count}") raise ValueError( "Citation, citationCount, and sourceQuality are not set -- do you need" " to call `hydrate`?" From c23161ebd6c620492b8a275559a63da3f5af1cfb Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:33:30 -0700 Subject: [PATCH 07/11] lint --- paperqa/types.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/paperqa/types.py b/paperqa/types.py index fab0566c..447dfb77 100644 --- a/paperqa/types.py +++ b/paperqa/types.py @@ -604,9 +604,8 @@ def repopulate_doc_id_from_doi(self) -> None: if self.doi: self.doc_id = encode_id(self.doi) - def __add__( - self, other: DocDetails | int - ) -> DocDetails: # pylint: disable=too-many-branches + # pylint: disable=too-many-branches + def __add__(self, other: DocDetails | int) -> DocDetails: """Merge two DocDetails objects together.""" # control for usage w. Python's sum() function if isinstance(other, int): @@ -656,9 +655,12 @@ def __add__( # get the latest data if self_value is None or other_value is None: merged_data[field] = ( - # if self_value is 0, it's evaluated as falsy and will fallback to other_value even if other_value is None + # if self_value is 0, it's evaluated as falsy and will fallback, + # to other_value even if other_value is None # 0 is a valid value here - self_value if self_value is not None else other_value + self_value + if self_value is not None + else other_value ) else: merged_data[field] = max(self_value, other_value) From 88671f71e2f36f2a1ae85841bcbcecb2d5a5e3c7 Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:43:15 -0700 Subject: [PATCH 08/11] correctly disable rule --- paperqa/types.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/paperqa/types.py b/paperqa/types.py index 447dfb77..6a32a327 100644 --- a/paperqa/types.py +++ b/paperqa/types.py @@ -604,8 +604,7 @@ def repopulate_doc_id_from_doi(self) -> None: if self.doi: self.doc_id = encode_id(self.doi) - # pylint: disable=too-many-branches - def __add__(self, other: DocDetails | int) -> DocDetails: + def __add__(self, other: DocDetails | int) -> DocDetails: # noqa: PLR0912 """Merge two DocDetails objects together.""" # control for usage w. Python's sum() function if isinstance(other, int): From 5f86258f878315cdbbd5355c785a3cb3e3757d66 Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:58:44 -0700 Subject: [PATCH 09/11] Add clarifying comment --- paperqa/types.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/paperqa/types.py b/paperqa/types.py index 6a32a327..91047731 100644 --- a/paperqa/types.py +++ b/paperqa/types.py @@ -652,6 +652,10 @@ def __add__(self, other: DocDetails | int) -> DocDetails: # noqa: PLR0912 elif field in {"citation_count", "year", "publication_date"}: # get the latest data + # this conditional is written in a way to handle if multiple doc objects + # are provided, we'll use the highest value + # if there's only one valid value, we'll use that regardless even if + # that value is 0 if self_value is None or other_value is None: merged_data[field] = ( # if self_value is 0, it's evaluated as falsy and will fallback, From 5d8e38caf6b4960de609f5732ba47cb59457ddfa Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:35:07 -0700 Subject: [PATCH 10/11] main version of journalquality --- ...ssref_journalquality_fields_filtering.yaml | 338 ------------------ 1 file changed, 338 deletions(-) diff --git a/tests/cassettes/test_crossref_journalquality_fields_filtering.yaml b/tests/cassettes/test_crossref_journalquality_fields_filtering.yaml index 01a524ed..9094fa61 100644 --- a/tests/cassettes/test_crossref_journalquality_fields_filtering.yaml +++ b/tests/cassettes/test_crossref_journalquality_fields_filtering.yaml @@ -397,342 +397,4 @@ interactions: status: code: 200 message: OK - - request: - body: null - headers: {} - method: GET - uri: https://api.crossref.org/works?mailto=example@papercrow.ai&query.title=Beta-Blocker+Interruption+or+Continuation+after+Myocardial+Infarction&rows=1&select=DOI,author,container-title,title - response: - body: - string: - '{"status":"ok","message-type":"work-list","message-version":"1.0.0","message":{"facets":{},"total-results":1782625,"items":[{"DOI":"10.1056\/nejmoa2404204","author":[{"ORCID":"http:\/\/orcid.org\/0000-0002-1901-2808","authenticated-orcid":false,"given":"Johanne","family":"Silvain","sequence":"first","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Guillaume","family":"Cayla","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Emile","family":"Ferrari","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Gr\u00e9goire","family":"Range","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Etienne","family":"Puymirat","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Nicolas","family":"Delarche","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Paul","family":"Guedeney","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Thomas","family":"Cuisset","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Fabrice","family":"Ivanes","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Thibault","family":"Lhermusier","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Thibault","family":"Petroni","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Gilles","family":"Lemesle","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Fran\u00e7ois","family":"Bresoles","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Jean-No\u00ebl","family":"Labeque","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Thibaut","family":"Pommier","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Jean-Guillaume","family":"Dillinger","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Florence","family":"Leclercq","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Franck","family":"Boccara","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Pascal","family":"Lim","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Timoth\u00e9e","family":"Besseyre - des Horts","sequence":"additional","affiliation":[{"name":"From Sorbonne Universit\u00e9, - ACTION Group, INSERM Unit\u00e9 Mixte de Recherche (UMRS) 1166, H\u00f4pital - Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance Publique\u2013H\u00f4pitaux - de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), the Department of Cardiology, - H\u00f4pital Europ\u00e9en Georges Pompidou, AP-HP, Universit\u00e9 Paris - Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular Trials) (G.L.), - the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, H\u00f4pital - Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the Cardiology - Department, H\u00f4pital Saint..."}]},{"given":"Thierry","family":"Fourme","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Fran\u00e7ois","family":"Jourda","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Alain","family":"Furber","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Benoit","family":"Lattuca","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Nassim","family":"Redjimi","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"ORCID":"http:\/\/orcid.org\/0000-0003-3134-6875","authenticated-orcid":false,"given":"Christophe","family":"Thuaire","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"ORCID":"http:\/\/orcid.org\/0000-0001-5910-3002","authenticated-orcid":false,"given":"Pierre","family":"Deharo","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Niki","family":"Procopi","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Raphaelle","family":"Dumaine","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Michel","family":"Slama","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Laurent","family":"Payot","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Mohamad","family":"El - Kasty","sequence":"additional","affiliation":[{"name":"From Sorbonne Universit\u00e9, - ACTION Group, INSERM Unit\u00e9 Mixte de Recherche (UMRS) 1166, H\u00f4pital - Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance Publique\u2013H\u00f4pitaux - de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), the Department of Cardiology, - H\u00f4pital Europ\u00e9en Georges Pompidou, AP-HP, Universit\u00e9 Paris - Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular Trials) (G.L.), - the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, H\u00f4pital - Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the Cardiology - Department, H\u00f4pital Saint..."}]},{"given":"Karim","family":"Aacha","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Abdourahmane","family":"Diallo","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Eric","family":"Vicaut","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]},{"given":"Gilles","family":"Montalescot","sequence":"additional","affiliation":[{"name":"From - Sorbonne Universit\u00e9, ACTION Group, INSERM Unit\u00e9 Mixte de Recherche - (UMRS) 1166, H\u00f4pital Piti\u00e9\u2013Salp\u00eatri\u00e8re Assistance - Publique\u2013H\u00f4pitaux de Paris (AP-HP) (J.S., P.G., N.P., K.A., G.M.), - the Department of Cardiology, H\u00f4pital Europ\u00e9en Georges Pompidou, - AP-HP, Universit\u00e9 Paris Cit\u00e9 (E.P.), FACT (French Alliance for Cardiovascular - Trials) (G.L.), the Department of Cardiology, Universit\u00e9 Paris Cit\u00e9, - H\u00f4pital Lariboisi\u00e8re, AP-HP, INSERM Unit\u00e9 942 (J.-G.D.), the - Cardiology Department, H\u00f4pital Saint..."}]}],"container-title":["New - England Journal of Medicine"],"title":["Beta-Blocker Interruption or Continuation - after Myocardial Infarction"]}],"items-per-page":1,"query":{"start-index":0,"search-terms":null}}}' - headers: - Access-Control-Allow-Headers: - - X-Requested-With, Accept, Accept-Encoding, Accept-Charset, Accept-Language, - Accept-Ranges, Cache-Control - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Link - Connection: - - close - Content-Encoding: - - gzip - Content-Length: - - "1356" - Content-Type: - - application/json - Date: - - Mon, 16 Sep 2024 16:00:11 GMT - Server: - - Jetty(9.4.40.v20210413) - Vary: - - Accept-Encoding - permissions-policy: - - interest-cohort=() - x-api-pool: - - plus - x-rate-limit-interval: - - 1s - x-rate-limit-limit: - - "150" - x-ratelimit-interval: - - 1s - x-ratelimit-limit: - - "150" - status: - code: 200 - message: OK version: 1 From 281a8492fa4cd686c0c3b46abf10b9cfe9edc0a5 Mon Sep 17 00:00:00 2001 From: Tyler Nadolski <122555266+nadolskit@users.noreply.github.com> Date: Mon, 16 Sep 2024 12:56:15 -0700 Subject: [PATCH 11/11] Update paperqa/types.py Co-authored-by: James Braza --- paperqa/types.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/paperqa/types.py b/paperqa/types.py index 91047731..43ce8106 100644 --- a/paperqa/types.py +++ b/paperqa/types.py @@ -658,11 +658,8 @@ def __add__(self, other: DocDetails | int) -> DocDetails: # noqa: PLR0912 # that value is 0 if self_value is None or other_value is None: merged_data[field] = ( - # if self_value is 0, it's evaluated as falsy and will fallback, - # to other_value even if other_value is None - # 0 is a valid value here self_value - if self_value is not None + if self_value is not None # Dance around 0 else other_value ) else: