rowingdata 3.8.1__tar.gz → 3.8.3__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.
- {rowingdata-3.8.1/rowingdata.egg-info → rowingdata-3.8.3}/PKG-INFO +45 -21
- {rowingdata-3.8.1 → rowingdata-3.8.3}/README.rst +22 -20
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/data/fit_export_spec.json +16 -11
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/fitwrite.py +201 -127
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/fitwrite_spec.py +8 -3
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/otherparsers.py +113 -10
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/rowingdata.py +11 -3
- {rowingdata-3.8.1 → rowingdata-3.8.3/rowingdata.egg-info}/PKG-INFO +45 -21
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata.egg-info/requires.txt +3 -1
- {rowingdata-3.8.1 → rowingdata-3.8.3}/setup.py +2 -2
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/testtcx.tcx +1 -1
- {rowingdata-3.8.1 → rowingdata-3.8.3}/tests/test_fit_instroke_export.py +17 -73
- {rowingdata-3.8.1 → rowingdata-3.8.3}/tests/test_fit_standard.py +148 -34
- {rowingdata-3.8.1 → rowingdata-3.8.3}/tests/test_rowingdata.py +16 -19
- {rowingdata-3.8.1 → rowingdata-3.8.3}/LICENSE +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/MANIFEST.in +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/bin/crewnerddata.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/bin/crewnerddata.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/bin/testdata.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/.buildinfo +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_images/2x20min.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_images/editrower.JPG +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_images/greghoc.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_images/image001.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_images/otwlogbook.JPG +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_images/otwscreenshot.JPG +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_images/screenshot.JPG +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_images/screenshotlogbook.JPG +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_images/woensdag.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_sources/index.txt +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_sources/modules.txt +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_sources/rowingdata.txt +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/ajax-loader.gif +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/alabaster.css +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/basic.css +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/comment-bright.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/comment-close.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/comment.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/custom.css +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/doctools.js +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/down-pressed.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/down.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/file.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/jquery-1.11.1.js +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/jquery.js +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/minus.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/plus.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/pygments.css +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/searchtools.js +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/underscore-1.3.1.js +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/underscore.js +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/up-pressed.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/up.png +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/_static/websupport.js +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/genindex.html +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/index.html +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/modules.html +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/objects.inv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/py-modindex.html +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/rowingdata.html +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/search.html +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/docs/_build/html/searchindex.js +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/__init__.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/__main__.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/boatedit.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/checkdatafiles.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/copystats.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/crewnerdplot.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/crewnerdplottime.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/csvparsers.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/ergdataplot.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/ergdataplottime.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/ergdatatotcx.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/ergstickplot.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/ergstickplottime.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/ergsticktotcx.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/fit_garmin_bridge.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/fit_transcode.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/gpxtools.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/gpxwrite.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/konkatenaadje.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/laptesting.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/obsolete.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/painsled_desktop_plot.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/painsled_desktop_plottime.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/painsled_desktop_toc2.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/painsledplot.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/painsledplottime.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/painsledtoc2.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/roweredit.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/rowproplot.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/rowproplottime.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/speedcoachplot.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/speedcoachplottime.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/speedcoachtoc2.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/tcxplot.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/tcxplot_nogeo.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/tcxplottime.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/tcxplottime_nogeo.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/tcxtoc2.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/tcxtools.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/trainingparser.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/utils.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/windcorrected.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata/writetcx.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata.egg-info/SOURCES.txt +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata.egg-info/dependency_links.txt +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata.egg-info/not-zip-safe +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/rowingdata.egg-info/top_level.txt +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/setup.cfg +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/2016-03-25-0758.CSV +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/2016-03-25-0758_data.CSV +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/2x20min_o.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/2x2km.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/3km_cd_o.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/3x250m.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/EUBoatCoach.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/EmpowerSpeedCoachForce.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/NKEmporfromgreg.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/NKLiNKv130.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/NoHR.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/PainsledForce.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/RP_interval.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/RP_interval.csv_o.CSV +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/RP_testdata.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/SpdCoach2_imp_inconsistent.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/SpdCoachAmbiguous.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/SpeedCoach GPS Workout.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/SpeedCoach2Link_interval.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/SpeedCoach2Linkv1.27.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/SpeedCoach2v2.12.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/Speedcoach2example.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/aritmo.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/bc1.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/bc2.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/bc3.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/boatcoach.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/boatcoach_fixed_distance.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/boatcoach_otw.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/correctedpainsled.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/cottwich.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/coxmate.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/crewnerd_interval.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/crewnerddata.CSV +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/crewnerddata.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/crewnerddata_o.CSV +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/cumvalues.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/ergdata_example.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/ergdata_example.csv_o.CSV +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/ergstick.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/ergstick.csv_o.CSV +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/ergstick2.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/ergstick_o.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/example.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/example_data.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/faketcx.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/float.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/herodata.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/humon.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/impeller_empower.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/invalidchar.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/kinomap.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/mystery.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/nk_logbook.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/painsled.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/painsled_desktop_example.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/painsled_out_data.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/painsled_to_csv_20160221-105218_erg-400150318_760465m.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/quiske_per_stroke_left.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/quiske_per_stroke_new.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/quiske_per_stroke_right.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/quiske_per_stroke_seat.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/recover.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/ritmointervals.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rowingdata_eth.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rowinginmotionexample.TCX +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rowinginmotionexample.TCX_o.CSV +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rowperfect.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rowpro5.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rowpro_carrick.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rp3_curve.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rp3intervals.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rp3intervals2.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/rp_out.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/smartrow.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/smartrow_intervals.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/spdcoach2noheader.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/speedcoach2test2.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/speedcoach3test3.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/speedcoachexample.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/speedcoachexample.csv_o.CSV +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/strava_export.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/summarytest.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/testdata.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/testdata_part1.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/testdata_part2.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/testdatasummary.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/testlapidx.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/testtcs_210614.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/testtcx_210614.tcx +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata/tim.csv +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/testdata//345/210/222/350/210/271.csv" +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/tests/test_fit_transcode.py +0 -0
- {rowingdata-3.8.1 → rowingdata-3.8.3}/tests/testparser.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rowingdata
|
|
3
|
-
Version: 3.8.
|
|
3
|
+
Version: 3.8.3
|
|
4
4
|
Summary: The rowingdata library to create colorful plots from CrewNerd, Painsled and other rowing data tools
|
|
5
5
|
Home-page: https://github.com/sanderroosendaal/rowingdata
|
|
6
6
|
Author: Sander Roosendaal
|
|
@@ -9,6 +9,28 @@ License: MIT
|
|
|
9
9
|
Keywords: rowing ergometer concept2
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
11
|
License-File: LICENSE
|
|
12
|
+
Requires-Dist: Cython
|
|
13
|
+
Requires-Dist: numpy
|
|
14
|
+
Requires-Dist: scipy
|
|
15
|
+
Requires-Dist: matplotlib
|
|
16
|
+
Requires-Dist: pandas
|
|
17
|
+
Requires-Dist: fitparse
|
|
18
|
+
Requires-Dist: fit-tool>=0.9.14
|
|
19
|
+
Requires-Dist: arrow>=1.0.2
|
|
20
|
+
Requires-Dist: python-dateutil
|
|
21
|
+
Requires-Dist: docopt
|
|
22
|
+
Requires-Dist: tqdm
|
|
23
|
+
Requires-Dist: rowingphysics>=0.2.3
|
|
24
|
+
Requires-Dist: iso8601
|
|
25
|
+
Requires-Dist: lxml>=6.1.0
|
|
26
|
+
Requires-Dist: xmltodict
|
|
27
|
+
Requires-Dist: nose_parameterized
|
|
28
|
+
Requires-Dist: timezonefinder
|
|
29
|
+
Requires-Dist: pycairo
|
|
30
|
+
Requires-Dist: tk
|
|
31
|
+
Requires-Dist: requests
|
|
32
|
+
Requires-Dist: polars
|
|
33
|
+
Requires-Dist: pytz
|
|
12
34
|
|
|
13
35
|
**************
|
|
14
36
|
Rowingdata
|
|
@@ -533,7 +555,7 @@ The available data fields are
|
|
|
533
555
|
* 'cum_dist'
|
|
534
556
|
|
|
535
557
|
Oarlock parsers (NK Logbook) may add: ``catch``, ``finish``,
|
|
536
|
-
``slip``, ``wash``, ``peakforceangle``, ``
|
|
558
|
+
``slip``, ``wash``, ``peakforceangle``, ``effectiveArc``.
|
|
537
559
|
|
|
538
560
|
If imported from TCX, Rowpro, or other tools, some data fields may not contain
|
|
539
561
|
useful information.
|
|
@@ -545,7 +567,7 @@ rowingdata CSV Columns
|
|
|
545
567
|
This section describes the dataframe schema used by the ``rowingdata`` class.
|
|
546
568
|
It is this package's own column layout, not a vendor-neutral standard. For a
|
|
547
569
|
cross-vendor interchange format, see the Rowing Data Standard at
|
|
548
|
-
https://github.com/
|
|
570
|
+
https://github.com/Rowing-Industry-Trade-Association/rowing-data-standard, which rowingdata
|
|
549
571
|
targets when exporting FIT.
|
|
550
572
|
|
|
551
573
|
Any parser implementation feeding the ``rowingdata`` class should produce at
|
|
@@ -578,12 +600,12 @@ The standard field names are:
|
|
|
578
600
|
* ' ElapsedTime (sec)'
|
|
579
601
|
|
|
580
602
|
Optional (Oarlock/NK Logbook): ``catch``/``catchAngle``, ``finish``/``finishAngle``,
|
|
581
|
-
``slip``, ``wash``, ``peakforceangle``, ``
|
|
603
|
+
``slip``, ``wash``, ``peakforceangle``, ``effectiveArc``.
|
|
582
604
|
|
|
583
605
|
Planned for dual oarlock (port/starboard symmetry): ``catch_port``, ``catch_starboard``,
|
|
584
606
|
``finish_port``, ``finish_starboard``, ``slip_port``, ``slip_starboard``, ``wash_port``,
|
|
585
607
|
``wash_starboard``, ``peakforceangle_port``, ``peakforceangle_starboard``,
|
|
586
|
-
``
|
|
608
|
+
``effectiveArc_port``, ``effectiveArc_starboard``. See *Dual oarlock
|
|
587
609
|
(port/starboard)* below. **Note:** rowingdata does not yet implement parsing or
|
|
588
610
|
export for these per-side columns.
|
|
589
611
|
|
|
@@ -826,10 +848,9 @@ Oarlock scalars (OTW rigging)
|
|
|
826
848
|
-----------------------------
|
|
827
849
|
|
|
828
850
|
Field names: 'catch' / 'catchAngle', 'finish' / 'finishAngle', 'slip',
|
|
829
|
-
'wash', 'peakforceangle', '
|
|
851
|
+
'wash', 'peakforceangle', 'effectiveArc'
|
|
830
852
|
|
|
831
|
-
Units: degrees for angles
|
|
832
|
-
source: NK Logbook uses these columns).
|
|
853
|
+
Units: degrees for angles and for effectiveArc.
|
|
833
854
|
|
|
834
855
|
These fields come from NK Logbook (Oarlock) and similar OTW
|
|
835
856
|
measurement systems. They describe rigging geometry and blade angles:
|
|
@@ -842,12 +863,11 @@ measurement systems. They describe rigging geometry and blade angles:
|
|
|
842
863
|
* **slip** – blade slip angle.
|
|
843
864
|
* **wash** – wash/backwash angle.
|
|
844
865
|
* **peakforceangle** – oar angle at peak force (same 0° = perpendicular convention).
|
|
845
|
-
* **
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
they serve different purposes.
|
|
866
|
+
* **effectiveArc** – the part of the stroke arc that is effective: catch to
|
|
867
|
+
finish, less slip and wash (degrees). The Rowing Data Standard replaced the
|
|
868
|
+
earlier effective *length* (a lever length in mm) with this arc. Files written
|
|
869
|
+
against earlier drafts carry ``EffectiveLength``; it is read into the
|
|
870
|
+
``effectiveLength`` column (metres) and is not converted into an arc.
|
|
851
871
|
|
|
852
872
|
Dual oarlock (port/starboard)
|
|
853
873
|
..............................
|
|
@@ -951,12 +971,16 @@ Unreleased
|
|
|
951
971
|
----------
|
|
952
972
|
|
|
953
973
|
- **Breaking change to exported FIT file contents.** FIT export now follows the
|
|
954
|
-
Rowing Data Standard (https://github.com/
|
|
955
|
-
|
|
956
|
-
not: the developer application ID is now the standard UUID,
|
|
957
|
-
|
|
958
|
-
``AverageBoatSpeed`` uses scale
|
|
959
|
-
|
|
974
|
+
Rowing Data Standard (https://github.com/Rowing-Industry-Trade-Association/rowing-data-standard,
|
|
975
|
+
current ``main``). The ``exporttofit`` API is unchanged, but the bytes it
|
|
976
|
+
writes are not: the developer application ID is now the standard UUID,
|
|
977
|
+
``DriveLength`` is encoded in millimetres rather than metres,
|
|
978
|
+
``AverageBoatSpeed`` uses scale 100, ``EffectiveLength`` is replaced by
|
|
979
|
+
``EffectiveArc`` in degrees (IDs 16, 210, 211; the ``effectiveLength*``
|
|
980
|
+
columns are no longer exported, use ``effectiveArc*``), the force fields are
|
|
981
|
+
named ``AverageDriveForce`` and ``PeakDriveForce``, stroke rate is written as
|
|
982
|
+
native ``cadence256``, stroke work uses field ID 19, and no value is written
|
|
983
|
+
as the FIT invalid value (255 / 65535 / 32767): measurements clip one below it. Consumers that hardcoded the previous rowingdata
|
|
960
984
|
application ID or the old metre-based scales must be updated. ``FITParser``
|
|
961
985
|
still reads files written by rowingdata 3.7.3 and earlier.
|
|
962
986
|
- In-stroke curve fields are emitted under a separate, private application ID,
|
|
@@ -964,7 +988,7 @@ Unreleased
|
|
|
964
988
|
carry no interoperable meaning.
|
|
965
989
|
- Removed ``docs/FIT_STANDARD.md`` and ``docs/FIT_STANDARD.pdf``. The standard is
|
|
966
990
|
maintained by a committee at
|
|
967
|
-
https://github.com/
|
|
991
|
+
https://github.com/Rowing-Industry-Trade-Association/rowing-data-standard, which is the single
|
|
968
992
|
source of truth; this repository no longer ships a copy.
|
|
969
993
|
|
|
970
994
|
0.97.x
|
|
@@ -521,7 +521,7 @@ The available data fields are
|
|
|
521
521
|
* 'cum_dist'
|
|
522
522
|
|
|
523
523
|
Oarlock parsers (NK Logbook) may add: ``catch``, ``finish``,
|
|
524
|
-
``slip``, ``wash``, ``peakforceangle``, ``
|
|
524
|
+
``slip``, ``wash``, ``peakforceangle``, ``effectiveArc``.
|
|
525
525
|
|
|
526
526
|
If imported from TCX, Rowpro, or other tools, some data fields may not contain
|
|
527
527
|
useful information.
|
|
@@ -533,7 +533,7 @@ rowingdata CSV Columns
|
|
|
533
533
|
This section describes the dataframe schema used by the ``rowingdata`` class.
|
|
534
534
|
It is this package's own column layout, not a vendor-neutral standard. For a
|
|
535
535
|
cross-vendor interchange format, see the Rowing Data Standard at
|
|
536
|
-
https://github.com/
|
|
536
|
+
https://github.com/Rowing-Industry-Trade-Association/rowing-data-standard, which rowingdata
|
|
537
537
|
targets when exporting FIT.
|
|
538
538
|
|
|
539
539
|
Any parser implementation feeding the ``rowingdata`` class should produce at
|
|
@@ -566,12 +566,12 @@ The standard field names are:
|
|
|
566
566
|
* ' ElapsedTime (sec)'
|
|
567
567
|
|
|
568
568
|
Optional (Oarlock/NK Logbook): ``catch``/``catchAngle``, ``finish``/``finishAngle``,
|
|
569
|
-
``slip``, ``wash``, ``peakforceangle``, ``
|
|
569
|
+
``slip``, ``wash``, ``peakforceangle``, ``effectiveArc``.
|
|
570
570
|
|
|
571
571
|
Planned for dual oarlock (port/starboard symmetry): ``catch_port``, ``catch_starboard``,
|
|
572
572
|
``finish_port``, ``finish_starboard``, ``slip_port``, ``slip_starboard``, ``wash_port``,
|
|
573
573
|
``wash_starboard``, ``peakforceangle_port``, ``peakforceangle_starboard``,
|
|
574
|
-
``
|
|
574
|
+
``effectiveArc_port``, ``effectiveArc_starboard``. See *Dual oarlock
|
|
575
575
|
(port/starboard)* below. **Note:** rowingdata does not yet implement parsing or
|
|
576
576
|
export for these per-side columns.
|
|
577
577
|
|
|
@@ -814,10 +814,9 @@ Oarlock scalars (OTW rigging)
|
|
|
814
814
|
-----------------------------
|
|
815
815
|
|
|
816
816
|
Field names: 'catch' / 'catchAngle', 'finish' / 'finishAngle', 'slip',
|
|
817
|
-
'wash', 'peakforceangle', '
|
|
817
|
+
'wash', 'peakforceangle', 'effectiveArc'
|
|
818
818
|
|
|
819
|
-
Units: degrees for angles
|
|
820
|
-
source: NK Logbook uses these columns).
|
|
819
|
+
Units: degrees for angles and for effectiveArc.
|
|
821
820
|
|
|
822
821
|
These fields come from NK Logbook (Oarlock) and similar OTW
|
|
823
822
|
measurement systems. They describe rigging geometry and blade angles:
|
|
@@ -830,12 +829,11 @@ measurement systems. They describe rigging geometry and blade angles:
|
|
|
830
829
|
* **slip** – blade slip angle.
|
|
831
830
|
* **wash** – wash/backwash angle.
|
|
832
831
|
* **peakforceangle** – oar angle at peak force (same 0° = perpendicular convention).
|
|
833
|
-
* **
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
they serve different purposes.
|
|
832
|
+
* **effectiveArc** – the part of the stroke arc that is effective: catch to
|
|
833
|
+
finish, less slip and wash (degrees). The Rowing Data Standard replaced the
|
|
834
|
+
earlier effective *length* (a lever length in mm) with this arc. Files written
|
|
835
|
+
against earlier drafts carry ``EffectiveLength``; it is read into the
|
|
836
|
+
``effectiveLength`` column (metres) and is not converted into an arc.
|
|
839
837
|
|
|
840
838
|
Dual oarlock (port/starboard)
|
|
841
839
|
..............................
|
|
@@ -939,12 +937,16 @@ Unreleased
|
|
|
939
937
|
----------
|
|
940
938
|
|
|
941
939
|
- **Breaking change to exported FIT file contents.** FIT export now follows the
|
|
942
|
-
Rowing Data Standard (https://github.com/
|
|
943
|
-
|
|
944
|
-
not: the developer application ID is now the standard UUID,
|
|
945
|
-
|
|
946
|
-
``AverageBoatSpeed`` uses scale
|
|
947
|
-
|
|
940
|
+
Rowing Data Standard (https://github.com/Rowing-Industry-Trade-Association/rowing-data-standard,
|
|
941
|
+
current ``main``). The ``exporttofit`` API is unchanged, but the bytes it
|
|
942
|
+
writes are not: the developer application ID is now the standard UUID,
|
|
943
|
+
``DriveLength`` is encoded in millimetres rather than metres,
|
|
944
|
+
``AverageBoatSpeed`` uses scale 100, ``EffectiveLength`` is replaced by
|
|
945
|
+
``EffectiveArc`` in degrees (IDs 16, 210, 211; the ``effectiveLength*``
|
|
946
|
+
columns are no longer exported, use ``effectiveArc*``), the force fields are
|
|
947
|
+
named ``AverageDriveForce`` and ``PeakDriveForce``, stroke rate is written as
|
|
948
|
+
native ``cadence256``, stroke work uses field ID 19, and no value is written
|
|
949
|
+
as the FIT invalid value (255 / 65535 / 32767): measurements clip one below it. Consumers that hardcoded the previous rowingdata
|
|
948
950
|
application ID or the old metre-based scales must be updated. ``FITParser``
|
|
949
951
|
still reads files written by rowingdata 3.7.3 and earlier.
|
|
950
952
|
- In-stroke curve fields are emitted under a separate, private application ID,
|
|
@@ -952,7 +954,7 @@ Unreleased
|
|
|
952
954
|
carry no interoperable meaning.
|
|
953
955
|
- Removed ``docs/FIT_STANDARD.md`` and ``docs/FIT_STANDARD.pdf``. The standard is
|
|
954
956
|
maintained by a committee at
|
|
955
|
-
https://github.com/
|
|
957
|
+
https://github.com/Rowing-Industry-Trade-Association/rowing-data-standard, which is the single
|
|
956
958
|
source of truth; this repository no longer ships a copy.
|
|
957
959
|
|
|
958
960
|
0.97.x
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
3
|
-
"
|
|
2
|
+
"version": 4,
|
|
3
|
+
"protocol_version": 1,
|
|
4
|
+
"handle_force_curve_field_id": 60,
|
|
5
|
+
"_comment": "Authoritative FIT developer field definitions for rowingdata fitwrite. Field IDs, scales and units must match the Rowing Data Standard registry at https://github.com/Rowing-Industry-Trade-Association/rowing-data-standard (registry/field-ids.md); that repository is the source of truth, this file is only rowingdata's machine-readable copy of the subset it emits. v2: mm precision for DriveLength/PeakForcePositionAbs (scale 1000); StrokeRate dev field (93); instroke curve Y-scale registry. v4: main of 2026-10-31: AverageBoatSpeed scale 100; EffectiveLength -> EffectiveArc (deg, scale 10; 16, 210, 211); force fields named without the N suffix. v3: standard draft 0.1: WorkoutState holds FIT intensity values; StrokeState (96); SlipThreshold/WashThreshold (94/95); HandleForceCurve fixed at 60; fields 4, 5 and 93 are not in the standard and are read-only (group legacy).",
|
|
4
6
|
"instroke_dynamic": {
|
|
5
7
|
"summary_start": 20,
|
|
6
8
|
"summary_id_padding": "ceil_to_10",
|
|
@@ -48,22 +50,25 @@
|
|
|
48
50
|
{"field_id": 1, "group": "rowing", "fit_name": "StrokeDriveTime", "base_type": "UINT16", "size": 2, "scale": 1, "units": "ms", "df_columns": [" DriveTime (ms)"]},
|
|
49
51
|
{"field_id": 2, "group": "rowing", "fit_name": "DragFactor", "base_type": "UINT16", "size": 2, "scale": 1, "units": "", "df_columns": [" DragFactor"]},
|
|
50
52
|
{"field_id": 3, "group": "rowing", "fit_name": "StrokeRecoveryTime", "base_type": "UINT16", "size": 2, "scale": 1, "units": "ms", "df_columns": [" StrokeRecoveryTime (ms)"]},
|
|
51
|
-
{"field_id": 4, "group": "
|
|
52
|
-
{"field_id": 5, "group": "
|
|
53
|
-
{"field_id": 6, "group": "rowing", "fit_name": "
|
|
54
|
-
{"field_id": 7, "group": "rowing", "fit_name": "
|
|
55
|
-
{"field_id": 8, "group": "rowing", "fit_name": "AverageBoatSpeed", "base_type": "UINT16", "size": 2, "scale":
|
|
53
|
+
{"field_id": 4, "group": "legacy", "fit_name": "AverageDriveForceLbs", "base_type": "UINT16", "size": 2, "scale": 10, "units": "lbs", "df_columns": [" AverageDriveForce (lbs)"]},
|
|
54
|
+
{"field_id": 5, "group": "legacy", "fit_name": "PeakDriveForceLbs", "base_type": "UINT16", "size": 2, "scale": 10, "units": "lbs", "df_columns": [" PeakDriveForce (lbs)"]},
|
|
55
|
+
{"field_id": 6, "group": "rowing", "fit_name": "AverageDriveForce", "base_type": "UINT16", "size": 2, "scale": 10, "units": "N", "df_columns": [" AverageDriveForce (N)"]},
|
|
56
|
+
{"field_id": 7, "group": "rowing", "fit_name": "PeakDriveForce", "base_type": "UINT16", "size": 2, "scale": 10, "units": "N", "df_columns": [" PeakDriveForce (N)"]},
|
|
57
|
+
{"field_id": 8, "group": "rowing", "fit_name": "AverageBoatSpeed", "base_type": "UINT16", "size": 2, "scale": 100, "units": "m/s", "df_columns": [" AverageBoatSpeed (m/s)"]},
|
|
56
58
|
{"field_id": 9, "group": "rowing", "fit_name": "WorkoutState", "base_type": "UINT8", "size": 1, "scale": 1, "units": "", "df_columns": [" WorkoutState"]},
|
|
57
59
|
{"field_id": 10, "group": "metadata", "fit_name": "RecordingStrategy", "base_type": "UINT8", "size": 1, "scale": 1, "units": "", "df_columns": [], "message_type": "session"},
|
|
60
|
+
{"field_id": 94, "group": "metadata", "fit_name": "SlipThreshold", "base_type": "UINT16", "size": 2, "scale": 1, "units": "N", "df_columns": [], "message_type": "session"},
|
|
61
|
+
{"field_id": 95, "group": "metadata", "fit_name": "WashThreshold", "base_type": "UINT16", "size": 2, "scale": 1, "units": "N", "df_columns": [], "message_type": "session"},
|
|
58
62
|
{"field_id": 19, "group": "rowing", "fit_name": "StrokeWork", "base_type": "UINT16", "size": 2, "scale": 1, "units": "J", "df_columns": [" WorkPerStroke (joules)", "driveenergy"]},
|
|
59
|
-
{"field_id":
|
|
63
|
+
{"field_id": 96, "group": "rowing", "fit_name": "StrokeState", "base_type": "UINT8", "size": 1, "scale": 1, "units": "", "df_columns": [" StrokeState"]},
|
|
64
|
+
{"field_id": 93, "group": "legacy", "fit_name": "StrokeRate", "base_type": "UINT16", "size": 2, "scale": 100, "units": "spm", "df_columns": [" Cadence (stokes/min)"]},
|
|
60
65
|
|
|
61
66
|
{"field_id": 11, "group": "oarlock", "fit_name": "Catch", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["catch", " catch", "catchAngle"]},
|
|
62
67
|
{"field_id": 12, "group": "oarlock", "fit_name": "Finish", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["finish", " finish", "finishAngle"]},
|
|
63
68
|
{"field_id": 13, "group": "oarlock", "fit_name": "Slip", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["slip", " slip"]},
|
|
64
69
|
{"field_id": 14, "group": "oarlock", "fit_name": "Wash", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["wash", " wash"]},
|
|
65
70
|
{"field_id": 15, "group": "oarlock", "fit_name": "PeakForceAngle", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["peakforceangle", " peakforceangle"]},
|
|
66
|
-
{"field_id": 16, "group": "oarlock", "fit_name": "
|
|
71
|
+
{"field_id": 16, "group": "oarlock", "fit_name": "EffectiveArc", "base_type": "UINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["effectiveArc", " effectiveArc", "effective arc"]},
|
|
67
72
|
|
|
68
73
|
{"field_id": 200, "group": "oarlock_dual", "dual_pair": "catch", "side": "port", "fit_name": "CatchPort", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["catch_port", "catchAngle_port"]},
|
|
69
74
|
{"field_id": 201, "group": "oarlock_dual", "dual_pair": "catch", "side": "starboard", "fit_name": "CatchStarboard", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["catch_starboard", "catchAngle_starboard"]},
|
|
@@ -75,8 +80,8 @@
|
|
|
75
80
|
{"field_id": 207, "group": "oarlock_dual", "dual_pair": "wash", "side": "starboard", "fit_name": "WashStarboard", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["wash_starboard"]},
|
|
76
81
|
{"field_id": 208, "group": "oarlock_dual", "dual_pair": "peakforceangle", "side": "port", "fit_name": "PeakForceAnglePort", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["peakforceangle_port"]},
|
|
77
82
|
{"field_id": 209, "group": "oarlock_dual", "dual_pair": "peakforceangle", "side": "starboard", "fit_name": "PeakForceAngleStarboard", "base_type": "SINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["peakforceangle_starboard"]},
|
|
78
|
-
{"field_id": 210, "group": "oarlock_dual", "dual_pair": "
|
|
79
|
-
{"field_id": 211, "group": "oarlock_dual", "dual_pair": "
|
|
83
|
+
{"field_id": 210, "group": "oarlock_dual", "dual_pair": "effectiveArc", "side": "port", "fit_name": "EffectiveArcPort", "base_type": "UINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["effectiveArc_port"]},
|
|
84
|
+
{"field_id": 211, "group": "oarlock_dual", "dual_pair": "effectiveArc", "side": "starboard", "fit_name": "EffectiveArcStarboard", "base_type": "UINT16", "size": 2, "scale": 10, "units": "deg", "df_columns": ["effectiveArc_starboard"]},
|
|
80
85
|
|
|
81
86
|
{"field_id": 17, "group": "peak_position", "fit_name": "PeakForcePositionNorm", "base_type": "UINT16", "size": 2, "scale": 1, "units": "", "df_columns": ["rel_peak_force_pos", "PeakForcePositionNorm", "% of Stroke Complete When Peak Force Is Reached"], "transformer": "peak_norm", "clip_uint16_max": 10000},
|
|
82
87
|
{"field_id": 18, "group": "peak_position", "fit_name": "PeakForcePositionAbs", "base_type": "UINT16", "size": 2, "scale": 1, "units": "mm", "df_columns": ["peak_force_pos", "PeakForcePositionAbs"], "transformer": "peak_abs"},
|