Skip to content

Commit

Permalink
[fix] fix SQLite3KeyValueStore
Browse files Browse the repository at this point in the history
  • Loading branch information
ShuntaroAoki committed Aug 6, 2024
1 parent 49ed198 commit 61bd21f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 28 deletions.
40 changes: 17 additions & 23 deletions bdpy/dataform/kvs.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def __init__(self, path: _path_t, keys: Optional[List[str]] = None):
new_db = not os.path.exists(self._path)

# Connect to DB
self._conn = sqlite3.connect(self._path, isolation_level="EXCLUSIVE")
self._conn = sqlite3.connect(self._path, isolation_level="EXCLUSIVE", timeout=60)

# Enable foreign key
cursor = self._conn.cursor()
Expand Down Expand Up @@ -83,16 +83,6 @@ def set(self, value: _array_t, **kwargs) -> None:

where = self._generate_where(**kwargs)

insert_instances = ', '.join([
f"('{inst}', (SELECT id FROM key_names WHERE name = '{key}'))"
for key, inst in kwargs.items()
])

insert_members = ', '.join([
f"((SELECT id FROM key_value_store WHERE rowid = (SELECT * FROM kvs_last_inserted_rowid)), (SELECT ki.id FROM key_instances AS ki JOIN key_names AS kn ON ki.key_name_id = kn.id WHERE kn.name = '{key}' AND ki.name = '{inst}'))"
for key, inst in kwargs.items()
])

self._conn.execute(
f"""
CREATE TABLE tmp AS
Expand All @@ -109,8 +99,7 @@ def set(self, value: _array_t, **kwargs) -> None:
self._conn.execute("CREATE TABLE kvs_last_inserted_rowid (rowid INTEGER);")
self._conn.execute(
"""
CREATE TRIGGER kvs_insert
AFTER INSERT ON key_value_store
CREATE TRIGGER kvs_insert AFTER INSERT ON key_value_store
BEGIN
DELETE FROM kvs_last_inserted_rowid;
INSERT INTO kvs_last_inserted_rowid (rowid) VALUES (new.rowid);
Expand All @@ -121,20 +110,25 @@ def set(self, value: _array_t, **kwargs) -> None:
sql_update = "UPDATE key_value_store SET value = ? WHERE id = (SELECT key_value_store_id FROM tmp LIMIT 1) AND (SELECT COUNT(*) FROM tmp) = 1;"
self._conn.execute(sql_update, (_v,))

sql_insert_inst = f"""
INSERT OR IGNORE INTO key_instances (name, key_name_id)
VALUES {insert_instances};
"""
insert_instances = ', '.join([
f"('{inst}', (SELECT id FROM key_names WHERE name = '{key}'))"
for key, inst in kwargs.items()
])
sql_insert_inst = f"INSERT OR IGNORE INTO key_instances (name, key_name_id) VALUES {insert_instances};"
self._conn.execute(sql_insert_inst)

sql_insert_kvs = "INSERT INTO key_value_store (value) SELECT ? WHERE (SELECT COUNT(*) FROM tmp) = 0;"
self._conn.execute(sql_insert_kvs, (_v,))

sql_insert_kgm = f"""
INSERT OR IGNORE INTO key_group_members (key_value_store_id, key_instance_id)
VALUES {insert_members};
"""
self._conn.execute(sql_insert_kgm)
for key, inst in kwargs.items():
sql_insert_kgm = f"""
INSERT OR IGNORE INTO key_group_members (key_value_store_id, key_instance_id)
SELECT
(SELECT id FROM key_value_store WHERE rowid = (SELECT * FROM kvs_last_inserted_rowid)),
(SELECT ki.id FROM key_instances AS ki JOIN key_names AS kn ON ki.key_name_id = kn.id WHERE kn.name = '{key}' AND ki.name = '{inst}')
WHERE (SELECT COUNT(*) FROM tmp) = 0;
"""
self._conn.execute(sql_insert_kgm)

self._conn.execute("DROP TABLE tmp;")
self._conn.execute("DROP TABLE kvs_last_inserted_rowid;")
Expand Down Expand Up @@ -264,7 +258,7 @@ def _init_empty_db(self) -> None:
"""
CREATE TABLE IF NOT EXISTS key_instances (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
name TEXT UNIQUE,
key_name_id INTEGER,
FOREIGN KEY (key_name_id) REFERENCES key_names(id)
)
Expand Down
10 changes: 5 additions & 5 deletions tests/dataform/test_kvs.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def _init_test_db(self, db_path):
"""
CREATE TABLE IF NOT EXISTS key_instances (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
name TEXT UNIQUE,
key_name_id INTEGER,
FOREIGN KEY (key_name_id) REFERENCES key_names(id)
)
Expand All @@ -43,10 +43,10 @@ def _init_test_db(self, db_path):
)
""",
# Insert keys
"INSERT INTO key_names (name) VALUES ('layer')",
"INSERT INTO key_names (name) VALUES ('subject')",
"INSERT INTO key_names (name) VALUES ('roi')",
"INSERT INTO key_names (name) VALUES ('metric')",
"INSERT OR IGNORE INTO key_names (name) VALUES ('layer')",
"INSERT OR IGNORE INTO key_names (name) VALUES ('subject')",
"INSERT OR IGNORE INTO key_names (name) VALUES ('roi')",
"INSERT OR IGNORE INTO key_names (name) VALUES ('metric')",
]
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
Expand Down

4 comments on commit 61bd21f

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCoverMissing
bdpy/bdata
   bdata.py39919551%79, 104, 109, 113, 118, 122, 132–134, 190, 233–239, 252–262, 276–277, 310, 314, 318–356, 405–411, 419–420, 425–426, 443–450, 468–469, 475, 508, 539, 548, 560, 589–598, 610, 625, 661, 683–691, 696–729, 738, 750–757, 761–767, 771–799, 803–824, 828–862, 866–868, 872–874, 878–887
   featureselector.py641281%62–67, 69–74
   metadata.py67199%84
   utils.py1133767%71, 82, 85–86, 95, 127–173, 201, 246, 258, 263
bdpy/dataform
   datastore.py1078521%59–75, 90–93, 97–98, 102–113, 116–119, 122–127, 131–132, 137–158, 190–197, 222–259, 262–265
   features.py29816545%31–32, 43–46, 90–92, 101–103, 107, 111, 115, 119, 152–153, 157–161, 168–197, 214–215, 224–225, 232–236, 274, 288, 305–319, 323, 327, 331, 335, 339, 343, 347, 351, 355, 359, 364–394, 398–418, 422–462, 465, 470–477, 491–493, 496–499, 502–505, 508–512, 515–516, 536–549
   kvs.py1463775%21, 24, 155, 157, 163, 167–184, 206, 228–235, 239–247
   pd.py9544%25–27, 43–44
   sparse.py67790%29, 52–58, 74, 109, 123
   utils.py12120%3–18
bdpy/dataset
   utils.py45450%3–98
bdpy/distcomp
   distcomp.py921880%33, 35, 49, 53, 55, 66–70, 74, 76, 81–82, 89–93, 97
bdpy/dl
   caffe.py60600%4–129
bdpy/dl/torch
   base.py432444%31–41, 48, 54, 60, 63, 73–83, 90, 96, 102, 105
   dataset.py74740%1–195
   models.py33322632%148–169, 297–316, 327–331, 345–350, 442–494, 515–517, 528–587, 611–614, 625–684, 708–711, 722–771, 790–793, 804–853, 872–875
   torch.py1215555%188–225, 228, 231–243, 246–281
bdpy/dl/torch/domain
   core.py46296%47, 63
   feature_domain.py24196%30
   image_domain.py64198%179
bdpy/evals
   metrics.py954553%49–53, 82–112, 130–142, 151–152, 157, 172–179
bdpy/feature
   feature.py30293%69–70
bdpy/fig
   __init__.py440%6–9
   draw_group_image_set.py90900%3–182
   fig.py88880%16–164
   makeplots.py3363360%1–729
   tile_images.py59590%1–193
bdpy/ml
   crossvalidation.py592754%47–48, 113–114, 117–118, 138, 164–196
   learning.py3119669%43–44, 48, 52, 59, 91–104, 109–125, 128, 158–170, 184–209, 293, 309, 313–315, 318–319, 329, 339–340, 345–346, 356–364, 367–368, 376, 411–418, 439, 452, 460, 469, 501–503, 542, 555, 558, 567, 576, 581, 602
   model.py14012014%29–39, 54–70, 86–144, 156–169, 184–222, 225, 230–250, 254–258, 271–285
   searchlight.py161319%32–51
bdpy/mri
   fmriprep.py4974519%25–34, 38, 44–62, 65–75, 78–89, 92–160, 163–194, 230–360, 367–380, 384, 388–390, 394, 398–400, 410–434, 437–454, 457–464, 471–472, 475–491, 494, 498, 502–815, 819–831, 842–862
   glm.py403610%46–95
   image.py241921%29–54
   load_epi.py281836%36–50, 56–63, 82–88
   load_mri.py191616%16–36
   roi.py24821712%37–100, 165–235, 241–314, 320–387, 399–466, 473–499
   spm.py15813912%26–155, 162–166, 170, 174–179, 183–300
bdpy/opendata
   __init__.py110%1
   openneuro.py2102100%1–329
bdpy/pipeline
   config.py36294%37–38
bdpy/preproc
   interface.py521669%111–123, 148–157
   preprocessor.py1296947%35, 44, 112–114, 121–128, 138–189, 196–227
   select_top.py23196%55
bdpy/recon
   utils.py55550%4–146
bdpy/recon/torch
   icnn.py1611610%15–478
bdpy/recon/torch/modules
   critic.py44295%58, 132
   encoder.py29197%29
   generator.py72593%47, 52, 68, 128, 309
   latent.py34391%16, 21, 32
bdpy/recon/torch/task
   inversion.py831088%19, 37, 42, 47, 54, 59, 64, 69, 93, 207
bdpy/stats
   corr.py43393%57, 68, 102
bdpy/task
   callback.py71494%114, 161, 166, 234
   core.py16194%50
bdpy/util
   info.py473623%19–79
   utils.py36878%60, 116–121, 140–142
TOTAL5654342639% 

Tests Skipped Failures Errors Time
202 0 💤 0 ❌ 0 🔥 18.011s ⏱️

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCoverMissing
bdpy/bdata
   bdata.py39919551%79, 104, 109, 113, 118, 122, 132–134, 190, 233–239, 252–262, 276–277, 310, 314, 318–356, 405–411, 419–420, 425–426, 443–450, 468–469, 475, 508, 539, 548, 560, 589–598, 610, 625, 661, 683–691, 696–729, 738, 750–757, 761–767, 771–799, 803–824, 828–862, 866–868, 872–874, 878–887
   featureselector.py641281%62–67, 69–74
   metadata.py67199%84
   utils.py1133767%71, 82, 85–86, 95, 127–173, 201, 246, 258, 263
bdpy/dataform
   datastore.py1078521%59–75, 90–93, 97–98, 102–113, 116–119, 122–127, 131–132, 137–158, 190–197, 222–259, 262–265
   features.py29816545%31–32, 43–46, 90–92, 101–103, 107, 111, 115, 119, 152–153, 157–161, 168–197, 214–215, 224–225, 232–236, 274, 288, 305–319, 323, 327, 331, 335, 339, 343, 347, 351, 355, 359, 364–394, 398–418, 422–462, 465, 470–477, 491–493, 496–499, 502–505, 508–512, 515–516, 536–549
   kvs.py1463775%21, 24, 155, 157, 163, 167–184, 206, 228–235, 239–247
   pd.py9544%25–27, 43–44
   sparse.py67790%29, 52–58, 74, 109, 123
   utils.py12120%3–18
bdpy/dataset
   utils.py45450%3–98
bdpy/distcomp
   distcomp.py921880%33, 35, 49, 53, 55, 66–70, 74, 76, 81–82, 89–93, 97
bdpy/dl
   caffe.py60600%4–129
bdpy/dl/torch
   base.py432444%31–41, 48, 54, 60, 63, 73–83, 90, 96, 102, 105
   dataset.py74740%1–195
   models.py33322632%148–169, 297–316, 327–331, 345–350, 442–494, 515–517, 528–587, 611–614, 625–684, 708–711, 722–771, 790–793, 804–853, 872–875
   torch.py1215555%188–225, 228, 231–243, 246–281
bdpy/dl/torch/domain
   core.py46296%47, 63
   feature_domain.py24196%30
   image_domain.py64198%179
bdpy/evals
   metrics.py954553%49–53, 82–112, 130–142, 151–152, 157, 172–179
bdpy/feature
   feature.py30293%69–70
bdpy/fig
   __init__.py440%6–9
   draw_group_image_set.py90900%3–182
   fig.py88880%16–164
   makeplots.py3363360%1–729
   tile_images.py59590%1–193
bdpy/ml
   crossvalidation.py592754%47–48, 113–114, 117–118, 138, 164–196
   learning.py3119669%43–44, 48, 52, 59, 91–104, 109–125, 128, 158–170, 184–209, 293, 309, 313–315, 318–319, 329, 339–340, 345–346, 356–364, 367–368, 376, 411–418, 439, 452, 460, 469, 501–503, 542, 555, 558, 567, 576, 581, 602
   model.py14012014%29–39, 54–70, 86–144, 156–169, 184–222, 225, 230–250, 254–258, 271–285
   searchlight.py161319%32–51
bdpy/mri
   fmriprep.py4974519%25–34, 38, 44–62, 65–75, 78–89, 92–160, 163–194, 230–360, 367–380, 384, 388–390, 394, 398–400, 410–434, 437–454, 457–464, 471–472, 475–491, 494, 498, 502–815, 819–831, 842–862
   glm.py403610%46–95
   image.py241921%29–54
   load_epi.py281836%36–50, 56–63, 82–88
   load_mri.py191616%16–36
   roi.py24821712%37–100, 165–235, 241–314, 320–387, 399–466, 473–499
   spm.py15813912%26–155, 162–166, 170, 174–179, 183–300
bdpy/opendata
   __init__.py110%1
   openneuro.py2102100%1–329
bdpy/pipeline
   config.py36294%37–38
bdpy/preproc
   interface.py521669%111–123, 148–157
   preprocessor.py1296947%35, 44, 112–114, 121–128, 138–189, 196–227
   select_top.py23196%55
bdpy/recon
   utils.py55550%4–146
bdpy/recon/torch
   icnn.py1611610%15–478
bdpy/recon/torch/modules
   critic.py44295%58, 132
   encoder.py29197%29
   generator.py72593%47, 52, 68, 128, 309
   latent.py34391%16, 21, 32
bdpy/recon/torch/task
   inversion.py831088%19, 37, 42, 47, 54, 59, 64, 69, 93, 207
bdpy/stats
   corr.py43393%57, 68, 102
bdpy/task
   callback.py71494%114, 161, 166, 234
   core.py16194%50
bdpy/util
   info.py473623%19–79
   utils.py36878%60, 116–121, 140–142
TOTAL5654342639% 

Tests Skipped Failures Errors Time
202 0 💤 0 ❌ 0 🔥 16.973s ⏱️

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCoverMissing
bdpy/bdata
   bdata.py40019651%79, 104, 109, 113, 118, 122, 132–134, 190, 233–239, 252–262, 276–277, 310, 314, 318–356, 405–411, 419–420, 425–426, 443–450, 468–469, 475, 508, 539, 548, 560, 589–598, 610, 625, 661, 683–691, 696–729, 738, 750–757, 761–767, 771–799, 803–824, 828–862, 866–868, 872–874, 878–887
   featureselector.py641281%62–67, 69–74
   metadata.py67199%84
   utils.py1133767%71, 82, 85–86, 95, 127–173, 201, 246, 258, 263
bdpy/dataform
   datastore.py1078521%59–75, 90–93, 97–98, 102–113, 116–119, 122–127, 131–132, 137–158, 190–197, 222–259, 262–265
   features.py29816545%31–32, 43–46, 90–92, 101–103, 107, 111, 115, 119, 152–153, 157–161, 168–197, 214–215, 224–225, 232–236, 274, 288, 305–319, 323, 327, 331, 335, 339, 343, 347, 351, 355, 359, 364–394, 398–418, 422–462, 465, 470–477, 491–493, 496–499, 502–505, 508–512, 515–516, 536–549
   kvs.py1463775%21, 24, 155, 157, 163, 167–184, 206, 228–235, 239–247
   pd.py9544%25–27, 43–44
   sparse.py67790%29, 52–58, 74, 109, 123
   utils.py12120%3–18
bdpy/dataset
   utils.py45450%3–98
bdpy/distcomp
   distcomp.py921880%33, 35, 49, 53, 55, 66–70, 74, 76, 81–82, 89–93, 97
bdpy/dl
   caffe.py60600%4–129
bdpy/dl/torch
   base.py432444%31–41, 48, 54, 60, 63, 73–83, 90, 96, 102, 105
   dataset.py74740%1–195
   models.py33322632%148–169, 297–316, 327–331, 345–350, 442–494, 515–517, 528–587, 611–614, 625–684, 708–711, 722–771, 790–793, 804–853, 872–875
   torch.py1215555%188–225, 228, 231–243, 246–281
bdpy/dl/torch/domain
   core.py46296%47, 63
   feature_domain.py24196%30
   image_domain.py64198%179
bdpy/evals
   metrics.py954553%49–53, 82–112, 130–142, 151–152, 157, 172–179
bdpy/feature
   feature.py30293%69–70
bdpy/fig
   __init__.py440%6–9
   draw_group_image_set.py88880%3–182
   fig.py88880%16–164
   makeplots.py3363360%1–729
   tile_images.py59590%1–193
bdpy/ml
   crossvalidation.py592754%47–48, 113–114, 117–118, 138, 164–196
   learning.py3129769%43–44, 48, 52, 59, 91–104, 109–125, 128, 158–170, 184–209, 293, 309, 313–315, 318–319, 329, 339–340, 345–346, 356–364, 367–368, 376, 410–418, 439, 452, 460, 469, 501–503, 542, 555, 558, 567, 576, 581, 602
   model.py14012014%29–39, 54–70, 86–144, 156–169, 184–222, 225, 230–250, 254–258, 271–285
   searchlight.py161319%32–51
bdpy/mri
   fmriprep.py4974529%25–34, 38, 44–62, 65–75, 78–89, 92–160, 163–194, 230–360, 367–380, 384, 388–390, 394, 398–400, 410–434, 437–454, 457–464, 471–472, 475–491, 494, 498, 502–815, 819–831, 842–862, 866
   glm.py403610%46–95
   image.py241921%29–54
   load_epi.py281836%36–50, 56–63, 82–88
   load_mri.py191616%16–36
   roi.py24821712%37–100, 165–235, 241–314, 320–387, 399–466, 473–499
   spm.py15813912%26–155, 162–166, 170, 174–179, 183–300
bdpy/opendata
   __init__.py110%1
   openneuro.py2102100%1–329
bdpy/pipeline
   config.py36294%37–38
bdpy/preproc
   interface.py521669%111–123, 148–157
   preprocessor.py1296947%35, 44, 112–114, 121–128, 138–189, 196–227
   select_top.py23196%55
bdpy/recon
   utils.py55550%4–146
bdpy/recon/torch
   icnn.py1611610%15–478
bdpy/recon/torch/modules
   critic.py44295%58, 132
   encoder.py29197%29
   generator.py72593%47, 52, 68, 128, 309
   latent.py34391%16, 21, 32
bdpy/recon/torch/task
   inversion.py831088%19, 37, 42, 47, 54, 59, 64, 69, 93, 207
bdpy/stats
   corr.py43393%57, 68, 102
bdpy/task
   callback.py71396%161, 166, 234
   core.py16194%50
bdpy/util
   info.py473623%19–79
   utils.py36878%60, 116–121, 140–142
TOTAL5654342639% 

Tests Skipped Failures Errors Time
202 0 💤 0 ❌ 0 🔥 17.645s ⏱️

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCoverMissing
bdpy/bdata
   bdata.py40019651%79, 104, 109, 113, 118, 122, 132–134, 190, 233–239, 252–262, 276–277, 310, 314, 318–356, 405–411, 419–420, 425–426, 443–450, 468–469, 475, 508, 539, 548, 560, 589–598, 610, 625, 661, 683–691, 696–729, 738, 750–757, 761–767, 771–799, 803–824, 828–862, 866–868, 872–874, 878–887
   featureselector.py641281%62–67, 69–74
   metadata.py67199%84
   utils.py1133767%71, 82, 85–86, 95, 127–173, 201, 246, 258, 263
bdpy/dataform
   datastore.py1078521%59–75, 90–93, 97–98, 102–113, 116–119, 122–127, 131–132, 137–158, 190–197, 222–259, 262–265
   features.py29816545%31–32, 43–46, 90–92, 101–103, 107, 111, 115, 119, 152–153, 157–161, 168–197, 214–215, 224–225, 232–236, 274, 288, 305–319, 323, 327, 331, 335, 339, 343, 347, 351, 355, 359, 364–394, 398–418, 422–462, 465, 470–477, 491–493, 496–499, 502–505, 508–512, 515–516, 536–549
   kvs.py1463775%21, 24, 155, 157, 163, 167–184, 206, 228–235, 239–247
   pd.py9544%25–27, 43–44
   sparse.py67790%29, 52–58, 74, 109, 123
   utils.py12120%3–18
bdpy/dataset
   utils.py45450%3–98
bdpy/distcomp
   distcomp.py921880%33, 35, 49, 53, 55, 66–70, 74, 76, 81–82, 89–93, 97
bdpy/dl
   caffe.py60600%4–129
bdpy/dl/torch
   base.py432444%31–41, 48, 54, 60, 63, 73–83, 90, 96, 102, 105
   dataset.py74740%1–195
   models.py33322632%148–169, 297–316, 327–331, 345–350, 442–494, 515–517, 528–587, 611–614, 625–684, 708–711, 722–771, 790–793, 804–853, 872–875
   torch.py1215555%188–225, 228, 231–243, 246–281
bdpy/dl/torch/domain
   core.py46296%47, 63
   feature_domain.py24196%30
   image_domain.py64198%179
bdpy/evals
   metrics.py954553%49–53, 82–112, 130–142, 151–152, 157, 172–179
bdpy/feature
   feature.py30293%69–70
bdpy/fig
   __init__.py440%6–9
   draw_group_image_set.py88880%3–182
   fig.py88880%16–164
   makeplots.py3363360%1–729
   tile_images.py59590%1–193
bdpy/ml
   crossvalidation.py592754%47–48, 113–114, 117–118, 138, 164–196
   learning.py3129769%43–44, 48, 52, 59, 91–104, 109–125, 128, 158–170, 184–209, 293, 309, 313–315, 318–319, 329, 339–340, 345–346, 356–364, 367–368, 376, 410–418, 439, 452, 460, 469, 501–503, 542, 555, 558, 567, 576, 581, 602
   model.py14012014%29–39, 54–70, 86–144, 156–169, 184–222, 225, 230–250, 254–258, 271–285
   searchlight.py161319%32–51
bdpy/mri
   fmriprep.py4974529%25–34, 38, 44–62, 65–75, 78–89, 92–160, 163–194, 230–360, 367–380, 384, 388–390, 394, 398–400, 410–434, 437–454, 457–464, 471–472, 475–491, 494, 498, 502–815, 819–831, 842–862, 866
   glm.py403610%46–95
   image.py241921%29–54
   load_epi.py281836%36–50, 56–63, 82–88
   load_mri.py191616%16–36
   roi.py24821712%37–100, 165–235, 241–314, 320–387, 399–466, 473–499
   spm.py15813912%26–155, 162–166, 170, 174–179, 183–300
bdpy/opendata
   __init__.py110%1
   openneuro.py2102100%1–329
bdpy/pipeline
   config.py36294%37–38
bdpy/preproc
   interface.py521669%111–123, 148–157
   preprocessor.py1296947%35, 44, 112–114, 121–128, 138–189, 196–227
   select_top.py23196%55
bdpy/recon
   utils.py55550%4–146
bdpy/recon/torch
   icnn.py1611610%15–478
bdpy/recon/torch/modules
   critic.py44295%58, 132
   encoder.py29197%29
   generator.py72593%47, 52, 68, 128, 309
   latent.py34391%16, 21, 32
bdpy/recon/torch/task
   inversion.py831088%19, 37, 42, 47, 54, 59, 64, 69, 93, 207
bdpy/stats
   corr.py43393%57, 68, 102
bdpy/task
   callback.py71396%161, 166, 234
   core.py16194%50
bdpy/util
   info.py473623%19–79
   utils.py36878%60, 116–121, 140–142
TOTAL5654342639% 

Tests Skipped Failures Errors Time
202 0 💤 0 ❌ 0 🔥 17.817s ⏱️

Please sign in to comment.