From bca7277e93db6d2fa602ec73b275d5dd7d835d9f Mon Sep 17 00:00:00 2001 From: Nino Tarantino Date: Mon, 20 Jul 2026 21:07:58 -0500 Subject: [PATCH 1/2] Remove duplicate binary files Removed a bunch of PDFs which were generated from other binary files that already exist in the repo, like docx and ppt files. --- docs/CML_Coding_Standards.pdf | Bin 131 -> 0 bytes .../docs/mass_body_detach_impulsive.pdf | Bin 131 -> 0 bytes .../docs/accumulated_absolute_deltas.pdf | Bin 131 -> 0 bytes .../docs/scalar_integrable_object.pdf | Bin 131 -> 0 bytes .../docs/integrable_object.pdf | Bin 131 -> 0 bytes .../mass/dynamic_mass/docs/dynamic_mass.pdf | Bin 131 -> 0 bytes .../docs/mass_body_dispersed_init.pdf | Bin 131 -> 0 bytes .../docs/mass_body_distribute_comp_to_core.pdf | Bin 131 -> 0 bytes .../docs/mass_derivative_dynamics.pdf | Bin 132 -> 0 bytes .../atmos_rel_state/docs/atmos_rel_state.pdf | Bin 131 -> 0 bytes .../docs/earth_moon_rotating_frame.pdf | Bin 131 -> 0 bytes .../earth_moon_rotating_frame_presentation.pdf | Bin 131 -> 0 bytes .../docs/extended_planetary_derived_state.pdf | Bin 132 -> 0 bytes ...ed_planetary_derived_state_presentation_VV.pdf | Bin 131 -> 0 bytes .../orb_elem_subset/docs/orb_elem_subset.pdf | Bin 131 -> 0 bytes .../docs/pointing_ref_frame.pdf | Bin 131 -> 0 bytes .../docs/pointing_ref_frame_presentation.pdf | Bin 131 -> 0 bytes .../state_descriptors/range/docs/range.pdf | Bin 131 -> 0 bytes .../separation_state/docs/separation_state.pdf | Bin 131 -> 0 bytes .../docs/simple_planet_rel_state.pdf | Bin 131 -> 0 bytes .../docs/correlated_state_dispersion.pdf | Bin 131 -> 0 bytes .../state_initialize/docs/state_initialize.pdf | Bin 131 -> 0 bytes .../docs/target_relative_parameters.pdf | Bin 131 -> 0 bytes .../contact/docs/contact_state_override.pdf | Bin 131 -> 0 bytes .../contact/docs/contact_state_override_VV.pdf | Bin 131 -> 0 bytes .../twist_sway/docs/Twist_sway.pdf | Bin 132 -> 0 bytes .../apsides_predictor/docs/apsides_predictor.pdf | Bin 131 -> 0 bytes .../impact_point/docs/impact_point.pdf | Bin 131 -> 0 bytes .../atmos/atmos_exec/docs/atmos_exec.pdf | Bin 131 -> 0 bytes .../atmos/atmos_exec/docs/atmos_exec_V&V.pdf | Bin 132 -> 0 bytes .../atmos/atmos_exec/docs/atmos_exec_delta_VV.pdf | Bin 131 -> 0 bytes .../atmosphere_models/DRWP_atmos/docs/DRWP_VV.pdf | Bin 131 -> 0 bytes .../first_order_hold/docs/first_order_hold.pdf | Bin 131 -> 0 bytes models/environment/atmos/gust/docs/gust.pdf | Bin 131 -> 0 bytes models/environment/atmos/gust/docs/gust_VV.pdf | Bin 131 -> 0 bytes .../lagged_atmosphere/docs/lagged_atmosphere.pdf | Bin 131 -> 0 bytes .../docs/lagged_atmosphere_VV.pdf | Bin 131 -> 0 bytes .../docs/eclipse_calculator.pdf | Bin 131 -> 0 bytes .../docs/planet_planet_state.pdf | Bin 131 -> 0 bytes .../gravity/fast_gravity/docs/fast_gravity.pdf | Bin 131 -> 0 bytes .../docs/gravity_fidelity_manager.pdf | Bin 130 -> 0 bytes .../piston_thruster/docs/piston_thruster.pdf | Bin 131 -> 0 bytes .../docs/mass_body_detach_with_springs.pdf | Bin 131 -> 0 bytes models/fhw/effectors/springs/docs/springs.pdf | Bin 131 -> 0 bytes models/fhw/effectors/vent/docs/vent.pdf | Bin 131 -> 0 bytes .../fhw/effectors/vent/docs/vent_presentation.pdf | Bin 131 -> 0 bytes models/interactions/aero/docs/aero.pdf | Bin 131 -> 0 bytes .../subsonic_wake/docs/subsonic_wake.pdf | Bin 131 -> 0 bytes models/tools/unit_test/models/docs/unit_test.pdf | Bin 131 -> 0 bytes models/utilities/bin_counter/docs/bin_counter.pdf | Bin 132 -> 0 bytes .../bin_counter/docs/bin_counter_presentation.pdf | Bin 131 -> 0 bytes models/utilities/buffers/docs/buffers.pdf | Bin 131 -> 0 bytes .../utilities/cml_message/docs/cml_message_VV.pdf | Bin 131 -> 0 bytes .../utilities/color_string/docs/color_string.pdf | Bin 131 -> 0 bytes .../docs/color_string_presentation.pdf | Bin 131 -> 0 bytes .../constraint_check/docs/constraint_check.pdf | Bin 131 -> 0 bytes .../double_to_words/docs/double_to_words.pdf | Bin 131 -> 0 bytes .../double_to_words/docs/double_to_words_C.pdf | Bin 130 -> 0 bytes .../enhanced_logging/docs/enhanced_logging.pdf | Bin 131 -> 0 bytes .../math_utils/docs/math_utils_presentation.pdf | Bin 131 -> 0 bytes .../subscriptions/docs/subscriptions.pdf | Bin 131 -> 0 bytes .../docs/subscriptions_presentation.pdf | Bin 131 -> 0 bytes .../trick_logging/docs/trick_logging.pdf | Bin 130 -> 0 bytes .../docs/commandable_action.pdf | Bin 131 -> 0 bytes .../compound_events/docs/compound_events.pdf | Bin 131 -> 0 bytes .../docs/dummy_vehicle_launcher.pdf | Bin 131 -> 0 bytes .../events_manager/docs/events_manager.pdf | Bin 132 -> 0 bytes 67 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/CML_Coding_Standards.pdf delete mode 100644 models/dynamics/actions/mass_body_detach_impulsive/docs/mass_body_detach_impulsive.pdf delete mode 100644 models/dynamics/integration/accumulated_absolute_deltas/docs/accumulated_absolute_deltas.pdf delete mode 100644 models/dynamics/integration/scalar_integrable_object/docs/scalar_integrable_object.pdf delete mode 100644 models/dynamics/integration/vector3_integrable_object/docs/integrable_object.pdf delete mode 100644 models/dynamics/mass/dynamic_mass/docs/dynamic_mass.pdf delete mode 100644 models/dynamics/mass/mass_body_dispersed_init/docs/mass_body_dispersed_init.pdf delete mode 100644 models/dynamics/mass/mass_body_distribute_comp_to_core/docs/mass_body_distribute_comp_to_core.pdf delete mode 100644 models/dynamics/mass_derivative_dynamics/docs/mass_derivative_dynamics.pdf delete mode 100644 models/dynamics/state_descriptors/atmos_rel_state/docs/atmos_rel_state.pdf delete mode 100644 models/dynamics/state_descriptors/earth_moon_rotating_frame/docs/earth_moon_rotating_frame.pdf delete mode 100644 models/dynamics/state_descriptors/earth_moon_rotating_frame/docs/earth_moon_rotating_frame_presentation.pdf delete mode 100644 models/dynamics/state_descriptors/extended_planetary_derived_state/docs/extended_planetary_derived_state.pdf delete mode 100644 models/dynamics/state_descriptors/extended_planetary_derived_state/docs/extended_planetary_derived_state_presentation_VV.pdf delete mode 100644 models/dynamics/state_descriptors/orb_elem_subset/docs/orb_elem_subset.pdf delete mode 100644 models/dynamics/state_descriptors/pointing_ref_frame/docs/pointing_ref_frame.pdf delete mode 100644 models/dynamics/state_descriptors/pointing_ref_frame/docs/pointing_ref_frame_presentation.pdf delete mode 100644 models/dynamics/state_descriptors/range/docs/range.pdf delete mode 100644 models/dynamics/state_descriptors/separation_state/docs/separation_state.pdf delete mode 100644 models/dynamics/state_descriptors/simple_planet_rel_state/docs/simple_planet_rel_state.pdf delete mode 100644 models/dynamics/state_initialize/correlated_state_dispersion/docs/correlated_state_dispersion.pdf delete mode 100644 models/dynamics/state_initialize/state_initialize/docs/state_initialize.pdf delete mode 100644 models/dynamics/state_initialize/target_relative_parameters/docs/target_relative_parameters.pdf delete mode 100644 models/dynamics/state_overrides/contact/docs/contact_state_override.pdf delete mode 100644 models/dynamics/state_overrides/contact/docs/contact_state_override_VV.pdf delete mode 100644 models/dynamics/state_overrides/twist_sway/docs/Twist_sway.pdf delete mode 100644 models/dynamics/state_predictors/apsides_predictor/docs/apsides_predictor.pdf delete mode 100644 models/dynamics/state_predictors/impact_point/docs/impact_point.pdf delete mode 100644 models/environment/atmos/atmos_exec/docs/atmos_exec.pdf delete mode 100644 models/environment/atmos/atmos_exec/docs/atmos_exec_V&V.pdf delete mode 100644 models/environment/atmos/atmos_exec/docs/atmos_exec_delta_VV.pdf delete mode 100644 models/environment/atmos/atmosphere_models/DRWP_atmos/docs/DRWP_VV.pdf delete mode 100644 models/environment/atmos/first_order_hold/docs/first_order_hold.pdf delete mode 100644 models/environment/atmos/gust/docs/gust.pdf delete mode 100644 models/environment/atmos/gust/docs/gust_VV.pdf delete mode 100644 models/environment/atmos/lagged_atmosphere/docs/lagged_atmosphere.pdf delete mode 100644 models/environment/atmos/lagged_atmosphere/docs/lagged_atmosphere_VV.pdf delete mode 100644 models/environment/eclipse_calculator/docs/eclipse_calculator.pdf delete mode 100644 models/environment/ephemerides/planet_planet_state/docs/planet_planet_state.pdf delete mode 100644 models/environment/gravity/fast_gravity/docs/fast_gravity.pdf delete mode 100644 models/environment/gravity/gravity_fidelity_manager/docs/gravity_fidelity_manager.pdf delete mode 100644 models/fhw/effectors/piston_thruster/docs/piston_thruster.pdf delete mode 100644 models/fhw/effectors/springs/docs/mass_body_detach_with_springs.pdf delete mode 100644 models/fhw/effectors/springs/docs/springs.pdf delete mode 100644 models/fhw/effectors/vent/docs/vent.pdf delete mode 100644 models/fhw/effectors/vent/docs/vent_presentation.pdf delete mode 100644 models/interactions/aero/docs/aero.pdf delete mode 100644 models/interactions/subsonic_wake/docs/subsonic_wake.pdf delete mode 100644 models/tools/unit_test/models/docs/unit_test.pdf delete mode 100644 models/utilities/bin_counter/docs/bin_counter.pdf delete mode 100644 models/utilities/bin_counter/docs/bin_counter_presentation.pdf delete mode 100644 models/utilities/buffers/docs/buffers.pdf delete mode 100644 models/utilities/cml_message/docs/cml_message_VV.pdf delete mode 100644 models/utilities/color_string/docs/color_string.pdf delete mode 100644 models/utilities/color_string/docs/color_string_presentation.pdf delete mode 100644 models/utilities/constraint_check/docs/constraint_check.pdf delete mode 100644 models/utilities/double_to_words/docs/double_to_words.pdf delete mode 100644 models/utilities/double_to_words/docs/double_to_words_C.pdf delete mode 100644 models/utilities/enhanced_logging/docs/enhanced_logging.pdf delete mode 100644 models/utilities/math_utils/docs/math_utils_presentation.pdf delete mode 100644 models/utilities/subscriptions/docs/subscriptions.pdf delete mode 100644 models/utilities/subscriptions/docs/subscriptions_presentation.pdf delete mode 100644 models/utilities/trick_logging/docs/trick_logging.pdf delete mode 100644 models/vehicle_management/commandable_action/docs/commandable_action.pdf delete mode 100644 models/vehicle_management/compound_events/docs/compound_events.pdf delete mode 100644 models/vehicle_management/dummy_vehicle_launcher/docs/dummy_vehicle_launcher.pdf delete mode 100644 models/vehicle_management/events_manager/docs/events_manager.pdf diff --git a/docs/CML_Coding_Standards.pdf b/docs/CML_Coding_Standards.pdf deleted file mode 100644 index 3f16d5f7baef76d80aef0403a72e022cab8eaa90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?!4U!>3;@7CRnUM(APLHK0|A5?l^el(SiSCN&+?vqymVXZn7c9ezAleCxBu;v zHW^Pdk0R!@YV@pUi;n#+f-KjX0DY(dDnqczrs|0}Lbe>emvAG9jv`wiU~$>UM1VnZ MQnP=HMnVjzegga_O#lD@ diff --git a/models/dynamics/actions/mass_body_detach_impulsive/docs/mass_body_detach_impulsive.pdf b/models/dynamics/actions/mass_body_detach_impulsive/docs/mass_body_detach_impulsive.pdf deleted file mode 100644 index 71afd9f4ab4bb2d3bd9106d8599d4dd1d03a24c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN_$qmCG5CFhGRnS1p&4Rn(SOQWKtSt5;)yJ=q=E5(H`Qd%7gLWaFV?ADtw%dN@ zt<1Ne1BWECzAjG diff --git a/models/dynamics/integration/accumulated_absolute_deltas/docs/accumulated_absolute_deltas.pdf b/models/dynamics/integration/accumulated_absolute_deltas/docs/accumulated_absolute_deltas.pdf deleted file mode 100644 index ff5503ea58b43fef22a3599eb99eb9b3c95c6adf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?NfN>!5CFhCuiyg)7-m@V8n~O3JjbT>z0KRBjP-y0 z@GAYO$C*W6X6fxvqwW@Ib0JAFM-(dA2OlwcVg`y9U4)%d4k*Z&z&a2{F#yOy3CLL! Nc^U1Sm4RRhmLKOPCV2n= diff --git a/models/dynamics/integration/vector3_integrable_object/docs/integrable_object.pdf b/models/dynamics/integration/vector3_integrable_object/docs/integrable_object.pdf deleted file mode 100644 index 3b6f4a2dcb532a68494910020a41a2a2d1611e84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?K@x&63GZzXrFLwX54goaP9@YRHKgVGN6jf+aJO2|+Z43?PosV3{;>042_dIx!6@ Nu9mNLGzo{%{Q%$lCV~I} diff --git a/models/dynamics/mass/dynamic_mass/docs/dynamic_mass.pdf b/models/dynamics/mass/dynamic_mass/docs/dynamic_mass.pdf deleted file mode 100644 index 630f2fcab7e8851419140b50beb6fc7cf3db946f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?OA^8$3;@tQr{DsXe`0$Z5{NLPwj;C)Pp@zDuKF2$f9p2qF*ai!ecqljmjCUf zh4+^kM`d$4wfCY&%Ra$Y!G+ahjush+Mb?}$*+L#j93xwd-U}jBOd*ObaJRK&MIWW$C+q+K diff --git a/models/dynamics/mass/mass_body_dispersed_init/docs/mass_body_dispersed_init.pdf b/models/dynamics/mass/mass_body_dispersed_init/docs/mass_body_dispersed_init.pdf deleted file mode 100644 index b454be9e87a9d222c31d37da4c679479834c9416..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?%MrpL5CG6SRnUN8`R}G1ARx@BWL(U_>h)dTRo^`3OZK%+-j%wKb$c}4{`XJb z%6uw5Yf+aLa~zU;GCu5(jYUeyIwaJd0>p-<)JVqbfH5_1TR9+D^ac|;jV{+3nn#KR ND0qCUv9(KcW)430_ytr;C7#F`Cp-1meY NNzDE&(wP_oh#xSnC_exI diff --git a/models/dynamics/mass_derivative_dynamics/docs/mass_derivative_dynamics.pdf b/models/dynamics/mass_derivative_dynamics/docs/mass_derivative_dynamics.pdf deleted file mode 100644 index c79709a520aa8418d89e802539263bb9b20d9a41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmWN?%MrpL5CG6SRnUNeU4BctA+QKDDjC5XtX|*cUHqPXykuMJoV!x@zHW~?xBu;P zY8pH3>u*u#JjO2Nqs`m%KGy&B z9y3Y;@4d!uzZN?Z~nMJbSi4z(y(M Nu#EOCf;>o>Dr32< z$74zTZN@IioS=Hkden$MY@8tr5~FoOl$_^+X$|B6m>D6KkS#@TIZ_be0{39ikzYal NRcf@KXp5eR)F0oaCVT(@ diff --git a/models/dynamics/state_descriptors/extended_planetary_derived_state/docs/extended_planetary_derived_state.pdf b/models/dynamics/state_descriptors/extended_planetary_derived_state/docs/extended_planetary_derived_state.pdf deleted file mode 100644 index 63314e7244ce091838ffcb83e868cc23d997541a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmWN?$q~XJ6adhBs-OYGUs%%(t1zRI5zN8r^!45CFhjRnUONdpzn!+;N5(+h`0@;OebtlfBA!wEhuw&SPv+KHGe}c&xYe z%q#Y{97jQU>7_RkqwWU$<~S3$08Sf312#bcqcFzIA)(I^gCb%~oOK|jBEwFO{XGm& O$jfNIBCOLkq~#A7NhlNm diff --git a/models/dynamics/state_descriptors/orb_elem_subset/docs/orb_elem_subset.pdf b/models/dynamics/state_descriptors/orb_elem_subset/docs/orb_elem_subset.pdf deleted file mode 100644 index a904dbab8d56220c1212c1f90624cf5b3efa614d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN|yAi`65CGAfDrmrh<9DEL1RRDL+h`0@;Ob4V^P;`!J6iwnI_EidA)akMUS({{ zdc`gEw-_fSaRciu^HC3F-HuKkN@heK$!Uv-Qm#MrsM` Pi{7!(e#8Nk_JREY)9fZw diff --git a/models/dynamics/state_descriptors/pointing_ref_frame/docs/pointing_ref_frame.pdf b/models/dynamics/state_descriptors/pointing_ref_frame/docs/pointing_ref_frame.pdf deleted file mode 100644 index b4f7f96bd6c3bc247462472f525305df5665a82d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?K@!3s3;@7;U%>|~1t)~`HzWjMMx`UP2Vbvy*-Jm8^|z^W9%Hxm(dO-0#`?dW zyh?xBaj4kKExlzkYVr_vLP;A1keEnfiFestPE0XK1}FfjuzC(fkjMpO@+B)}<%H1z NFQa|cgy<1)`2jcHD7^px diff --git a/models/dynamics/state_descriptors/pointing_ref_frame/docs/pointing_ref_frame_presentation.pdf b/models/dynamics/state_descriptors/pointing_ref_frame/docs/pointing_ref_frame_presentation.pdf deleted file mode 100644 index cb49c833c951845d5607595cad9a141f74ba6a3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN_K@Ni;5CFhCuiyg}0dW_9!!AoDX^Sc7p|7u}N#>GoukEAvF^;|&^Q`0XDt)@$ zPnx*BO+SRqWmT(L_dU6=Zcv2TEzWX6jE)LnDIiFKh-pTjX^yxS@^A-bpIHK|*~gHH O!Kz+=q8AHbz4`+{dMJhf diff --git a/models/dynamics/state_descriptors/range/docs/range.pdf b/models/dynamics/state_descriptors/range/docs/range.pdf deleted file mode 100644 index 366c2c2a352ddc06a06fc265390733d600edd45b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN`yAi`63;@vHQ?NkHUm$OTFa++B;ES+}OdnUTcvtyyA0N@?Jb07x+2`X`dA)5X zt$Dm9A0^96FQe~*TQVLti-~N=1|32`v^s*!45CFiODrmssIUY&f0CyN>Y@_iZ1+LzTHrR{4+{Z_@IS<~IdiMEvRbFn} znU^x&iVrI4GGcU;+>-TS_kcymtZfaD$cIW;uIWvoSm4LSfp28-FR O5!@!Y|45p6mluCHP$)?N diff --git a/models/dynamics/state_descriptors/simple_planet_rel_state/docs/simple_planet_rel_state.pdf b/models/dynamics/state_descriptors/simple_planet_rel_state/docs/simple_planet_rel_state.pdf deleted file mode 100644 index e9bab2e3ff44a7f66402967acabb7152a1ff6ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN`O%B2!5J2I5Pr(H&Gr|KLaST0h#jJ&UZf z^&8jJUs_I1`og8RtfYoJZ3hGkNK9xp$Yi4DjA-&6Ji8o;lS##SM+m`jK|5iKH^~9) O32a=X{aE1~WS2krQYRq* diff --git a/models/dynamics/state_initialize/correlated_state_dispersion/docs/correlated_state_dispersion.pdf b/models/dynamics/state_initialize/correlated_state_dispersion/docs/correlated_state_dispersion.pdf deleted file mode 100644 index d6818a94d4d57e22f3fbf4ee05c8eca5e7d0b43f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?%MrpL5CG6SRnUMTEU+x;X88#-DjC5XtX|*cUFALdc*(ZbIS-}oecc{)ZvWdS zZfQK#JWEoS7Nci58-v4xS?e7m1yi$SA4A1rvZfMpVy_diHIy9ydc(A1D497?1?SQD Nh+_6{k(MBU6F(w4C*A-6 diff --git a/models/dynamics/state_initialize/state_initialize/docs/state_initialize.pdf b/models/dynamics/state_initialize/state_initialize/docs/state_initialize.pdf deleted file mode 100644 index 932258dd5a974e04d9a5097dea17e1934c9b3b11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?K@!3s3;@78uiyig5J)Qh4Fw|1sC0z(;OliSdzH^<{jKYq$JmT{w0V2VSpL^@ zUs8XWag<~(t9r|N)QH5}o*We>=LPpD#8AW$Nw^bvhKM$=QY@z6#Cr08K8Fa55LX75 Nf*S2xw1<_E)DQe>Cei=^ diff --git a/models/dynamics/state_initialize/target_relative_parameters/docs/target_relative_parameters.pdf b/models/dynamics/state_initialize/target_relative_parameters/docs/target_relative_parameters.pdf deleted file mode 100644 index 2026f104365155af7ec49765573120ddcf1f2b53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?%MrpL5CG6SRnUN8`7TK}uq?uiN=7gTtJimV7r$p8FWJ^Q=b_ZSuiK-}?SK2^ zjmA^WlSy4#j9%ny$@p+&>m3B0eKd{;ZDFrr54n)GxMK>Hp_GoukADKV;p_e`dP>0Rr-9p zpJ~qRt@|NaU!YpuroKlcUabq(qp$~qF;H;AxRpp?bBbWekar~{66b+=xvONr&9KB} O!R%D8Kbbs(LsEa*1tzut diff --git a/models/dynamics/state_overrides/contact/docs/contact_state_override_VV.pdf b/models/dynamics/state_overrides/contact/docs/contact_state_override_VV.pdf deleted file mode 100644 index fc7f760dadcd8a02c4637adb6e80bc660ead04e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?K@!3s3;@78uiyigK!BG12GStRsB{eW;OliSd+}TPc?1*n NRZ0J{Mz^8|^#kh5Cg}hG diff --git a/models/dynamics/state_overrides/twist_sway/docs/Twist_sway.pdf b/models/dynamics/state_overrides/twist_sway/docs/Twist_sway.pdf deleted file mode 100644 index 74ddf77ca074527090a667b876e2cb4561d76f21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmWN?OA^8$5Cy<}PQe8X1L2$7yue_nQb{>63s0}T>5Jde$4l+!dC02uy`Q&7lllMt z+2%5yS`IGyGSlc)$qwtox>0f#8KwmSQA`WW5?ugSa)=Gt+0rVQLbSdG-aHimmYYvt OKS}?xT5>kl$LR+=rYLy; diff --git a/models/dynamics/state_predictors/apsides_predictor/docs/apsides_predictor.pdf b/models/dynamics/state_predictors/apsides_predictor/docs/apsides_predictor.pdf deleted file mode 100644 index 2a70b062462a742442d83246a8ea4294765e0b1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN{K@x)?3;@78uiyg}i6nx*2@wi2ZE*^E=u`=8w4USlLSw|E^_)%ZS(f#?`Zua>YV2|q#>S>ZY8zAohfd#|zMlTAUn}*~?dN&e;{CInkJn~> z>wa;+*0;AqSAT=6MLOFl#CgHM8IgoFOvC_L!kA^kaZZr}CfzU-w9R>#ViXdQ$hyJ+ P%)$;OliSd&ztB?MC)of1 diff --git a/models/environment/atmos/atmosphere_models/DRWP_atmos/docs/DRWP_VV.pdf b/models/environment/atmos/atmosphere_models/DRWP_atmos/docs/DRWP_VV.pdf deleted file mode 100644 index 1027993755f2d3bd188b4646fde03316d9683857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN}OA^8$3;@tQr{DsX2ISY<5J-d>m5!-hczU~fyLZw@#(e939J_4BJjQW*vMiVV zi%Xp^BRf@df|{dg>Bai6VS^Q7&YbSZ4zU1Lb}3Rsuxv{K_5hW!prh5tY^hKSEkn*O Nq^M;4NW1HRr2adzC|Lji diff --git a/models/environment/atmos/first_order_hold/docs/first_order_hold.pdf b/models/environment/atmos/first_order_hold/docs/first_order_hold.pdf deleted file mode 100644 index 7d92aa58b17deff618c8326f66fd4943d5eb98da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?OA^8$3;@u5Pr(H&pAtfP8$yFHqtX%V!qe;9yi4Ar^_Qx1o@3Yg-sbI5#`?d0 zc+LH($0=D~cIoXroj4t9IfSy(evzBXz>Cz0#Xte7zk3ZF%WO=UMWmPXa<*- O7+8(=E7}19TJ;CrohG>e diff --git a/models/environment/atmos/lagged_atmosphere/docs/lagged_atmosphere.pdf b/models/environment/atmos/lagged_atmosphere/docs/lagged_atmosphere.pdf deleted file mode 100644 index f12651e3640acef848780713f29c6344793a6a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?NfN>!5CFh?UcmPUDiD3pX8QpO!6(E3 diff --git a/models/environment/atmos/lagged_atmosphere/docs/lagged_atmosphere_VV.pdf b/models/environment/atmos/lagged_atmosphere/docs/lagged_atmosphere_VV.pdf deleted file mode 100644 index 7c10bbbfc48f283ed44bd10570c04d5cbc40b700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN`OA^8$3;@u5Pr(H&@`v6gO^7g~(lOYDr?;!OcxU}cA8*y>JY>`Q(dX^SvR=0D zzT$XkIV$SYETfZ>1~$Zv96O&gKw+0W8BBm=IB?B-3^t+5H5p2^6d*F*gTM05DPxY2 O?IQhGl?$bWvit!wVklk! diff --git a/models/environment/eclipse_calculator/docs/eclipse_calculator.pdf b/models/environment/eclipse_calculator/docs/eclipse_calculator.pdf deleted file mode 100644 index 647f5c626920b363b63f31391321468b33f12d14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?%MrpL6ac_GRnUOpVIV-d;e8NhR5C(xuzKCgUh)~OzjdAS7`ri#HgC@|mjCs{ zh5E~kL&#iK^~QSCeD~WPOK=_nd(0dYNn*fEEGR4tDWGNN1B+XcVv$IcfzUBRa+?6F M(Y~TBM7x6e0cwaTq5uE@ diff --git a/models/environment/ephemerides/planet_planet_state/docs/planet_planet_state.pdf b/models/environment/ephemerides/planet_planet_state/docs/planet_planet_state.pdf deleted file mode 100644 index bfcb3ffdb0a646bc876d0d4d34714973b6cfa9d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?NfN>!5CFhCuiyiQ8MZ)v!!ig}Dk%qZ@b%i4zUa+kzGPqPrWKTZrTeqDjuy=1JQ| OU<8jZNxeJcg7^Uvo+pX` diff --git a/models/environment/gravity/fast_gravity/docs/fast_gravity.pdf b/models/environment/gravity/fast_gravity/docs/fast_gravity.pdf deleted file mode 100644 index d55e02d3ff7756e2883231c8a1dfb521f0022732..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?K@!3s3;@78uiyg~S^`P?nn~f+^B9|R_jcYMWlaC; zhbQSzH;ydsnoVzNN8Oj0w!|u^ksu%hAW=Yulzb>FF|rhxMR!!nkg-Tyxum>MSv@Q5 NLT0pYwjp^8V16bND1iU~ diff --git a/models/environment/gravity/gravity_fidelity_manager/docs/gravity_fidelity_manager.pdf b/models/environment/gravity/gravity_fidelity_manager/docs/gravity_fidelity_manager.pdf deleted file mode 100644 index f8086ddad7bd00f18fe97701f978de3c2daf334d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmWN?!4bkB5CFhGRnUL|E^t7)fjbapR5F5jSiSCNukxOKykuMJoQG2PzHW~?xBu;v zHyTeh&qC@lVsw_XC2)8|(3F6(VI4f$iWMz8m#O$l94bMwA;(x4gXR)yc7QwV*5=6Q Ny_o%5WPoU#_yGnIC+7eF diff --git a/models/fhw/effectors/piston_thruster/docs/piston_thruster.pdf b/models/fhw/effectors/piston_thruster/docs/piston_thruster.pdf deleted file mode 100644 index 976842ebe8b1d3a3dbec6eaefbf40de6d535e6b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN^K@x)?3;@78ukZsE5Rl++NQjl0wm1!X=5(p{1P5B8kDjie1@bvmN@2YPZ^QHTF9N~mB2EF1j&X|~5Fn-f4GFm= diff --git a/models/fhw/effectors/vent/docs/vent.pdf b/models/fhw/effectors/vent/docs/vent.pdf deleted file mode 100644 index 242f9e0a7dbf0ddfe007d6e78f5e80592ef3eb2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN{xe>!45CFhjRnUONap-u|&G8v#Y@;zqfvdNoP4>#)(fUW!IghbR`E2v?Dr3E^ zXINu@%W>o=FSYcR#Hfs9cCT4camj;qHUfi%?24gaqb6duK7fjekhKNgd_bp>bnu89 OI#kPOzbx+R3@m@@CMI+M diff --git a/models/fhw/effectors/vent/docs/vent_presentation.pdf b/models/fhw/effectors/vent/docs/vent_presentation.pdf deleted file mode 100644 index ec1f1d62e37cef443ba9dacb35f016cf3768139a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?%MrpL5CG6SRnUOpvn+&k11u}dsAL3luzG!$ch&do<0ac#=RB0U_jP;l-2S&u z-pY8YdDfyXBSt4VTe9d69X;1TdUwp2D8#Ho^xgp$wgzG($DkPr(w>7SOIWq%z)TU4 NjF|mfC77VC6+aGRC$|6q diff --git a/models/interactions/aero/docs/aero.pdf b/models/interactions/aero/docs/aero.pdf deleted file mode 100644 index 785326b33a26c97c612dc6ad8d44128ecbe6e428..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?K@!3s3;@78uiyigk`fC24J1UEQRxWw;OliSdzJTS{iW-i=QxbHw|RTWSpL^f zUZ_9KI18D}s@_=13;@u*r|<$52!xNfAs7lXZFL%S(bLz}TfK|F()Z8Y#yDhE>e=BR%S?OUW@#DFuWSr>n~bf73DAbXVG9&1Rd2|;{T)r|t9y?NcVo diff --git a/models/tools/unit_test/models/docs/unit_test.pdf b/models/tools/unit_test/models/docs/unit_test.pdf deleted file mode 100644 index 0cb404f800bab76b9bde4bdfc8861f6346cc53e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN_Ne;sx3;@78uiyg>HpXQ64QoMao2Vu^^!3eYq`Ash`u@>vj6*hKo_#!CRi@i^ z#wqP@BS%T*Lbdm-r3K4=V@jE!@=8c#V@8ZzDlCx@z&Yl%QnU~#dEjV0<|W({>`YMR NY?bt1(TL6wsz2q|Ce#1` diff --git a/models/utilities/bin_counter/docs/bin_counter.pdf b/models/utilities/bin_counter/docs/bin_counter.pdf deleted file mode 100644 index e0dd91a33db17ec227bfb83928e11765f06c4d52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmWNHNe;sx5Ww!df)6w>6Sm|xK!$?UmZ(E==!45CFiODrmq04vt6N9G_vvHX4HzxOywvWUum_eSCOZ>zKO`&%Pe7I=9<) z#x0Gvm`6$CQf&0hXCpwnV~y6C7z|43GgRw?FO*P{MW?kRP}vz3q3B5R&dLW$5kV0U Ol*(rR6%JmabL!5CFhCuiyiQW!RG648tH)siXvR@b%i4zW6=+c*(ZbIS-}oecc{)ZvWdS zZ#152o=oa8V)PBjw<@WY$oaVlI@(1wyP; NoS6N~(!>DZ#SbztDG~qx diff --git a/models/utilities/cml_message/docs/cml_message_VV.pdf b/models/utilities/cml_message/docs/cml_message_VV.pdf deleted file mode 100644 index 02d4fc7ce93914def640c2939def31e91cef3757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?%MrpL6ac_GRnUNe5Fn6lcprorm5dK_uzKCgUi_9mUb@YB%3;jC&)cKQ^1ppx z!SOV5GMZ~uqm!0aT!;r34~fBgh#OSKeJfabCG>$)jR^JWYQNbqZcJD8y|Lz$RU&%x#sLmD%AkHVhRPQDdn_Pvfct33tZerIfFw&n+PJp Nu}J^2vLTs>%MTnBC$s!5J1sAr{DsHsX;ooVdw}|Dk&SY@bt3!i&y`m5BKqwZO)T-r5=6Wo(FHM z?VGnUUW!jD>M~;VD!C==!|p7gMkEA(phe6OON=gSOLs!;mv~od$V3?`6q6uSpx`5- OOJoK2AIUWa6T~0t|0hNO diff --git a/models/utilities/constraint_check/docs/constraint_check.pdf b/models/utilities/constraint_check/docs/constraint_check.pdf deleted file mode 100644 index 665ff90779da2695efd2cc3a2d24abd0fe8a1d13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN_OAf*y5CG6Ur{Dq>hX3?7Fo2M#G(x-Z^mg@<>AWC^!HB diff --git a/models/utilities/double_to_words/docs/double_to_words.pdf b/models/utilities/double_to_words/docs/double_to_words.pdf deleted file mode 100644 index 6a50a6e6fe0809cb6417e0e51e2ed036135128b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?NfN>!5CFhCuiyiQeMx>Z1A|bdl5#KyU$1@Xi{3ouOZK%+K9stTb$c}4{`U`V zWj+<3RMcg}9941$8{&a`rW{OiNJ%$aVlfR{%Lak02K3$o)U?|~n80WUvEXhgRMIVn NDtLTJ8l7G8;s-ooD6s$l diff --git a/models/utilities/double_to_words/docs/double_to_words_C.pdf b/models/utilities/double_to_words/docs/double_to_words_C.pdf deleted file mode 100644 index 405be0d9363312f2fd51bc6f7f356fec6edeb72d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmWN@OA>=13;@u*r|<$566EJ?NQ{-4wm1#C=;`a~y-U7Y+h^Q+KXftXS^ML)>2$lF zG;w^wzb=a3}CxTVa#5HUf#E0!gtvgU%>!At;N NaM1dbF-1f>`~lspCu9Hs diff --git a/models/utilities/enhanced_logging/docs/enhanced_logging.pdf b/models/utilities/enhanced_logging/docs/enhanced_logging.pdf deleted file mode 100644 index 3cf2b05404a224db61f96c7eac933baa3870e99b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN`%MHUI5CG9TRnS0;`Lpf@mL(u1!3x-iR3A?Bq`B!kTL17m=Q$1`o^3u}Wo)bU zN*ngK7$>2)CF?EoQKPc%plAce;GjrDM(qed$x9Ur8E^)2OfLHnP^wJiBx=2!V14Z| N0UPZ{-0oJo!2T~yD0Bb- diff --git a/models/utilities/math_utils/docs/math_utils_presentation.pdf b/models/utilities/math_utils/docs/math_utils_presentation.pdf deleted file mode 100644 index 4bafa87adb22ddef8de0e9111a50e2609e802cec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?NfN>!5CFh?UcmGC(VuD(fWtiInS{R@oe+)qOq;k z>)3LCi*aHWw`9E)K5A0d?dWtsuu#Yw=e_os7L%1gKI9MxltC9w0vA!nRKTo9lRi`; OgTzMrAy?5ujO-8kxF?1H diff --git a/models/utilities/subscriptions/docs/subscriptions_presentation.pdf b/models/utilities/subscriptions/docs/subscriptions_presentation.pdf deleted file mode 100644 index aa9ced31d853d0567737b1f16a01eb6f80a4da24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?OA^8$3;@u5Pr(H&1)GrcHhfZHMx|qD7oJ|<=3Vm9*59U%ap-34qmA2h*ZF@v z)13Ru>LJ-)ZtATVtpLk%t7#jOZP37GEe9 Nn6!Px+#M0D(+}!3ChhVD_T0MbBH|IUzD+LLwiR M*^Ks8OB9IA4+6y};Q#;t diff --git a/models/vehicle_management/commandable_action/docs/commandable_action.pdf b/models/vehicle_management/commandable_action/docs/commandable_action.pdf deleted file mode 100644 index fe22dfa69aaffca5710a046a7fe5d4eebb63c5d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN?%MHUI3;@tOQ?Nk8CxAn?vB4CiwnT;G(CM4Q)4TXPTK~v8=P`Dro^3u}Wi0pg zq$TyY8V4tJ8PQvoqoVa;PsUqj#F&eRjmj2L8;lrIwglv~3(?-lInn_kD1e|%uZGaIQ;= diff --git a/models/vehicle_management/dummy_vehicle_launcher/docs/dummy_vehicle_launcher.pdf b/models/vehicle_management/dummy_vehicle_launcher/docs/dummy_vehicle_launcher.pdf deleted file mode 100644 index 737300f47af4c329f28fe162c208b63d4497b315..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmWN@$q~aK3;@7CRnS1pVFZ@DK^%dZBzPk1N2-rsyI1*gA0OG~Ja|{?+2`X`dAV&T zEorE7{F(6Mq7&3BkH@3Dj}o$n Date: Tue, 21 Jul 2026 13:41:57 -0500 Subject: [PATCH 2/2] Convert coding standards to reStructuredText --- CONTRIBUTING.md | 6 +- docs/CML_Coding_Standards.docx | 3 - docs/CML_Coding_Standards.rst | 545 +++++++++++++++++++++++++++++++++ 3 files changed, 548 insertions(+), 6 deletions(-) delete mode 100644 docs/CML_Coding_Standards.docx create mode 100644 docs/CML_Coding_Standards.rst diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9056389c..b6bb9a86 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ The Common Model Library accepts new models and updates to existing models from NASA simulation-developing groups and any other groups to whom CML provides value. Before -submitting changes, please look at our [coding standards](docs/CML_Coding_Standards.pdf) +submitting changes, please look at our [coding standards](docs/CML_Coding_Standards.rst) in the `docs` folder. If you're using an older version of CML, please also double check that the changes you're proposing have not already been integrated into CML in a more recent release. @@ -58,7 +58,7 @@ When submitting a new model to CML, you must provide: Models must meet NPR 7150.2 Class A, B, C, or D to be accepted into CML. Additionally, all new models must have unit tests which cover at least 90% of source code lines and -must be submitted alongside documentation which adequately describes the model. See the [coding standards](docs/CML_Coding_Standards.pdf) for more information. +must be submitted alongside documentation which adequately describes the model. See the [coding standards](docs/CML_Coding_Standards.rst) for more information. Models must also provide sufficient value to CML to be accepted. Trivial models which contain only a handful of lines of code can add a large maintenance burden to the CML team @@ -111,4 +111,4 @@ You may use AI tools when contributing to CML, subject to the following guidelin Before marking a pull request as ready for review, please ensure that any AI-generated code, documentation, and tests adhere to our contribution guidelines and coding -standards. \ No newline at end of file +standards. diff --git a/docs/CML_Coding_Standards.docx b/docs/CML_Coding_Standards.docx deleted file mode 100644 index 3d5be12f..00000000 --- a/docs/CML_Coding_Standards.docx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a258b78eab5dcb4d0bd93713e1c6595cc3736efcb8accff135c3b71510e7a34 -size 96548 diff --git a/docs/CML_Coding_Standards.rst b/docs/CML_Coding_Standards.rst new file mode 100644 index 00000000..d4eb3535 --- /dev/null +++ b/docs/CML_Coding_Standards.rst @@ -0,0 +1,545 @@ +============================================= + Common Model Library (CML) Coding Standards +============================================= + +.. list-table:: Revision History + :widths: 30 30 70 + + * - Identifier + - Release date + - Description + * - v0.1 (Baseline) + - 03/31/2026 + - Initial CML coding standards + * - v0.2 + - 07/21/2026 + - Changed GitLab references to GitHub and converted to reStructuredText + +.. table:: + :align: center + :width: 100% + + +----------------+---------------+ + | Prepared by | Approved by | + +================+===============+ + | Nino Tarantino | Daniel Jordan | + | | | + | CML Maintainer | CML Lead | + | | | + | 03/31/2026 | 03/31/2026 | + +----------------+---------------+ + +.. contents:: Table of Contents + +Introduction +============ + +This document provides the formal code standards that are used within the Common Model Library (CML) team. The coding +standards in this document are designed to protect the reliability, maintainability, and usability of the library while +avoiding overly restrictive standards that may prevent some simulation teams from easily contributing their models to +CML. These standards are written based on generally accepted best practices in industry as well as lessons learned from +experienced developers in the Trick-based simulation field at NASA JSC. These standards are expected to mature and +develop over time. + +Purpose +------- + +Coding standards are used in large software development projects because they provide multiple benefits to the +organization developing the software application. These benefits are seen as critical for the CML team developing and +maintaining complex and high-fidelity time-domain simulation models used for spacecraft analysis. + +Scope +----- + +The coding standards listed in this document apply only to the developed code associated with models under the control +of the CML team. These coding standards do not apply to external packages such as Trick, JEOD, or any other third-party +dependency. + +Change Authority/Responsibility +------------------------------- + +Proposed changes to this document shall be submitted as a GitHub issue or via email to the CML team for consideration +and disposition with the team lead. + +Applicable Documents +-------------------- + +The following documents include specifications, models, standards, guidelines, handbooks, and other special +publications. The documents listed in this product are applicable to the extent specified herein. + +.. list-table:: + :widths: 30 30 70 + :header-rows: 1 + + * - Document Number + - Document Revision + - Document Title + * - NASA-STD-7009 + - A.1 + - Standard for Models and Simulations + * - NPR 7150.2 + - C + - NASA Software Engineering Requirements + +Reference Documents +------------------- + +The following documents contain supplemental information to guide the user in the application of this document. + +.. list-table:: + :widths: 50 50 50 + + * - Document Number + - Document Revision + - Document Title + * - + - + - + +Coding Standards +================ + +This section describes the coding standards and how they apply to the software development workflow. The purpose of +having coding standards is to ensure that a project's code base not only functions correctly but is also readable +modifiable, and maintainable. The code that comes into the library must be easily reviewable and not threaten the +stability of the library itself. With these goals in mind, the CML Coding Standards fall in two categories: + +- `Model coding standards `_ – These coding standards should be met upon a developer’s Pull + Request Review. These standards are intended to ensure the quality, stability, and cohesiveness of CML. + Non-compliances will be identified in the review and evaluated for risk to integration into the library. +- `Best practice coding standards `_ – These coding standards should be met as early as + possible but are not required to be met upon a developer’s Pull Request Review. These standards are intended to + ensure that the codebase follows modern best practices. Non-compliances will be evaluated for risk to the library and + documented in a follow-on GitHub issue for future resolution if necessary. + +Application and Enforcement +--------------------------- + +New models submitted to CML must first pass through a Pull Request Review. During the review, the submitting group +provides CML with the NASA NPR 7150.2 classification of the model and evidence of NASA-STD-7009 compliance. The CML team +will review the documentation provided and will check the models submitted for adherence to the coding standards. Many +of the model coding standards are checked with assistance from automated tooling, which reduces the amount of manual +review necessary. + +Updates to existing CML code will also be checked for adherence to the coding standards during a Pull Request Review. +Unlike a new model submission, NPR 7150.2 and NASA-STD-7009 documentation is not required unless the model’s +classification has changed. + +Model Coding Standards +---------------------- + +These standards cover the attributes of the source code required for CML models and must be met before acceptance of the +source code into the main branch of the CML codebase. + +Model Coding Standards are broken into categories depending on the language used. CML-MCS-GENERAL standards apply to all +code, regardless of language. CML-MCS-CPP standards apply to C++ code. CML-MCS-PYTHON standards apply to Python code. + +**CML-MCS-GENERAL-1**: All Trick-based simulation model code shall be written in the C++ programming language ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Trick simulation models should be written in C++. Other programming languages, such as C, are not allowed +to be used for model implementation. Autocoded models from MATLAB or Simulink source are not considered to have been +written in C++. + +**Enforcement**: Static analysis and Pull Request Review. + +**CML-MCS-GENERAL-2**: All scripts required to maintain model code must be committed at the time of Pull Request Review ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Some models may contain data or other content that was automatically generated by means of a script. +These scripts must also be committed and live alongside the model so that the model may be properly maintained. + +**Enforcement**: Pull Request Review. + +**CML-MCS-GENERAL-3**: Source code shall not contain ITAR, EAR, or CUI data ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: CML is an open-source project and must not contain sensitive data. + +**Enforcement**: Pull Request Review. + +**CML-MCS-GENERAL-4**: Source code shall be formatted in accordance with a common stylesheet +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Consistent codebases are easier to use and maintain. Automated code formatting ensures that the git +history contains only impactful changes to the code rather than formatting tweaks. The specific formatting +enforcement tool and stylesheet may differ between languages. + +**Enforcement**: Static analysis operating off of a common stylesheet available to developers and users. + +**CML-MCS-GENERAL-5**: Commented-out code shall only be allowed when accompanied by an associated project issue, point of contact email address, and current date ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Commented-out code should be rare. When it is included in the codebase, there should be an expectation +that the code will be un-commented or removed by a certain date. + +**Enforcement**: Pull Request Review. + +**Example** + +.. code-block:: cpp + + // TODO jane.doe@nasa.gov 01/01/2000: uncomment when addressing issue #1. + //my_type.nonexistent_field = 1; + +**CML-MCS-CPP-1**: Source code shall live within the “cml” C++ namespace +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Namespaces prevent name collisions between CML-defined types and the types defined by consumers of the +CML library. + +**Enforcement**: Pull Request Review. + +**Example** + +.. code-block:: cpp + + namespace cml { + + struct MyType { + }; + + void my_function(int my_param); + + } + +**CML-MCS-CPP-2**: Header files shall direct Trick to place generated interface code in the “cml” Python module via the Trick header “PYTHON MODULE” directive +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Trick provides the option to generate Python interface code into a specific Python module rather than in +the global “trick” scope. This prevents name collisions between CML-defined types and the types defined by Trick or +consumers of the CML library. + +**Enforcement**: Static analysis. + +**Example** + +.. code-block:: cpp + + /* PURPOSE: (My purpose) + * + * PYTHON_MODULE: (cml) + */ + +**CML-MCS-CPP-3**: Source code shall use the .hh file extension for headers and the .cc file extension for source files ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Consistent codebases are easier to use and maintain. + +**Enforcement**: Static analysis. + +**CML-MCS-CPP-4**: Functions and types limited in scope to the implementation details of a module shall be placed in an unnamed namespace within the corresponding module source file ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Exposing internal implementation details in public headers slows down Trick interface code generation and +may confuse users. Unnamed namespaces are the modern equivalent to static functions and types declared at the file-level. + +**Enforcement**: Pull Request Review. + +**Example** + +.. code-block:: cpp + + // Within myfile.cc + namespace { + + void some_local_function() { + } + + } + +**CML-MCS-CPP-5**: Structs shall be used only for passive objects with all public fields that have no invariants +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Structs are widely understood by the C++ community to carry data with no invariants. Although structs may +have protected or private fields, if such encapsulation is necessary, then classes should be used. + +**Enforcement**: Pull Request Review. + +**Examples** + +.. code-block:: cpp + + struct JustSomeData { + int int_data {}; + double double_data {1.0}; + std::string string_data {"Some Data"}; + }; + + class EncapsulationNecessary { + public: + void set_coefficient_of_friction(double coefficient_of_friction_in) { + if (coefficient_of_friction_in >= 0.0) { + coefficient_of_friction = coefficient_of_friction_in; + } else { + throw_some_error(); + } + } + + private: + double coefficient_of_friction {}; + }; + +**CML-MCS-CPP-6**: Source code shall compile with no warnings ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Compiler warnings signify that something may be wrong with the code and should rarely be ignored. + +**Enforcement**: Automated builds in GitHub Actions treat warnings as errors. + +**CML-MCS-CPP-7**: Source code shall pass review by linters without generating any warnings ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Linters such as ``cppcheck`` and ``clang-tidy`` are widely used in industry and provide meaningful +feedback on potential code quality issues. These warnings should rarely be ignored. + +**Enforcement**: Linters are run in a GitHub Action and produce a failing result upon detecting an error. + +**CML-MCS-CPP-8**: Source code shall have associated unit tests which cover at least 90% of lines with meaningful tests ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Inadequately tested code is prone to introducing regressions and is not fit for use within high-fidelity +spacecraft simulations. + +**Enforcement**: Manual review of code coverage artifacts generated in a GitHub Action during Pull Request Review. + +**CML-MCS-CPP-9**: Source code shall compile using the ISO/IEC 14882 C++17 standard ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: A reasonably recent version of the C++ language should be used by all models to leverage new language +features and maintain interoperability with other open-source libraries. + +**Enforcement**: All toolchains use the minimum supported C++ standard. + +**CML-MCS-CPP-10**: Source code shall have associated documentation which includes, at minimum, the model’s public API, a users’ guide, assumptions and limitations, and details about prior verification and validation activities ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Code without documentation cannot be effectively maintained or used. + +**Enforcement**: Pull Request Review. + +**CML-MCS-PYTHON-1**: Source code shall not call exec(), eval(), or otherwise evaluate an arbitrary string as Python code ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Exceptions thrown within code evaluated by ``exec()`` or other related functions do not provide meaningful +debugging information. These functions also introduce security concerns into the codebase. Use modules and functions +instead of ``exec(open())``. + +**Enforcement**: Pull Request Review. + +**Example, wrong** + +.. code-block:: python + + exec(open("Modified_data/utils.py").read()) + some_function_from_utils() + +**Example, correct** + +.. code-block:: python + + from Modified_data.utils import some_function_from_utils + some_function_from_utils() + +**CML-MCS-PYTHON-2**: Methods which accept keyword arguments shall document all allowable keyword arguments ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Users should not have to read implementation details to determine which keyword arguments are accepted by +a function. + +**Enforcement**: Pull Request Review. + +**Example** + +.. code-block:: python + + def myfunc(*args, **kwargs) -> None: + """Does a few things. + + Keyword arguments: + ------------------ + foo : An instance of Foo + bar : A numeric type such as an int or float + baz : A string-like type + """ + implementation(*args, **kwargs) + +Best Practice Coding Standards +------------------------------ + +These standards cover best practice for the code within CML. These standards are not required to be met at the time of +integration into the main CML branch but should be met as soon as possible afterwards. Like the +`Model Coding Standards `_, CML Best Practice Coding Standards are grouped by programming +language. + +**CML-BP-CPP-1**: Do not define macros +++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Macros cannot be put into a namespace and can be difficult to debug. Use function templates and inline +variables instead. + +**Example, wrong** + +.. code-block:: cpp + + #define ADD_ONE(input) (input + 1) + + #define SPEED_OF_LIGHT 299792458.0 + +**Example, correct** + +.. code-block:: cpp + + template + constexpr Type add_one(const Type& input) { + return input + 1; + } + + inline constexpr double SPEED_OF_LIGHT = 299792458.0; + +**CML-BP-CPP-2**: Do not invoke undefined behavior +++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: The outputs of a program which invokes undefined behavior are suspect. + +**Note**: Most undefined behavior will be caught by static analysis tools and will be required to be addressed during +Pull Request Review. + +**CML-BP-CPP-3**: Do not use global variables ++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Global variables often lead to “spaghetti code” which is difficult to maintain and understand. + +**CML-BP-CPP-4**: Do not use the “new” or “delete” keywords ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: The Trick Memory Manager should be used to allocate memory which must be logged or otherwise available +for Trick-specific purposes. Otherwise, smart pointers provided by the C++ standard library should be used for +dynamic memory management. Both of these options provide automated cleanup of the allocated memory. + +**Example, wrong** + +.. code-block:: cpp + + double* my_vector = new double[num_elements]; + +**Example, correct** using the Trick memory manager + +.. code-block:: cpp + + auto* my_vector = static_cast(trick_TMM->declare_var("double", num_elements)); + +**Example, correct** using smart pointers + +.. code-block:: cpp + + auto my_vector = std:make_unique(num_elements); + +**CML-BP-CPP-5**: Do not allocate significant memory in scheduled simulation jobs ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Trick scheduled jobs are often intended to be run at high frequencies for high-fidelity spacecraft +analysis. Frequently reallocating memory during such jobs introduces performance bottlenecks and is a symptom of bad +design. Some reallocation may be expected during certain simulation events, but most memory allocation should occur +during simulation initialization. + +**CML-BP-CPP-6**: Favor composition over inheritance +++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Frequent use of inheritance can make a codebase difficult to understand. Often, composition allows for +easier code maintenance and testability. + +**CML-BP-PYTHON-1**: Use docstrings ++++++++++++++++++++++++++++++++++++ + +**Rationale**: Python docstrings help users use Python code correctly and are recommended by PEP 257. + +**Example** + +.. code-block:: python + + def foo(bar) -> None: + """Foos a bar.""" + +**CML-BP-PYTHON-2**: Use type annotations ++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Type annotations help address one of the biggest shortcomings of dynamically typed languages, where the +types allowed as inputs or expected as outputs from functions are not always easy to deduce. + +**Example** + +.. code-block:: python + + def connect(port: int, hostname: str) -> StatusCode: + """Attempt to connect to a port on a host.""" + return implementation(port, hostname) + +**CML-BP-PYTHON-3**: Functions should always return the same number of items, preferably only one item +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Functions which return a variable number of arguments depending on the logic path taken are brittle and +require users to understand the inner workings of the function which they are accessing. + +**CML-BP-PYTHON-4**: Do not use classes in code intended for use in Trick input files ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +**Rationale**: Classes are designed to hold state and provide access control to data, while Trick input files are +designed to be a purely procedural interface to a simulation. Frequent overuse of classes in Trick input files has +proven repeatedly to negatively impact code usability and maintainability. Use free functions instead. + +Coding Standards Waiver +----------------------- + +Waivers to any coding standard may be granted on a case-by-case basis when it can be demonstrated that the following +criteria are both met: +1. Safeguards are in place to ensure that the exception does not create a risk to the overall project. +2. The effort required to bring the code to a satisfactory standard would be excessive. + +The request for a waiver is made during Pull Request Review. The request may be in the form of a PowerPoint +presentation, a memo, or any other format capable of conveying the following information: +- Violation (with code) +- Options for mitigation/resolution +- Rationale why the violation is acceptable +- Evaluation of risk to accepting the waiver + +If the waiver is granted, the request must be updated to reflect the approver, date of approval, and this information +must be recorded with the model documentation. The complete list of waivers will be maintained separately for CML +maintenance and metrics purposes. If the waiver is denied, the developer is directed to resolve the violation. + +Appendix A: Acronyms and Abbreviations +====================================== + +.. list-table:: + :widths: 30 70 + + * - Acronym + - Abbreviation + * - CML + - Common Model Library + * - CUI + - Controlled Unclassified Information + * - EAR + - Export Administration Regulations + * - ITAR + - International Traffic in Arms Regulations + * - JEOD + - Johnson Space Center Engineering Orbital Dynamics + * - JSC + - Johnson Space Center + +Appendix B: Glossary of Terms +============================= + +.. list-table:: + :widths: 30 70 + + * - Term + - Description + * - Trick + - An open-source C++/Python driven simulation development framework. See https://github.com/nasa/trick for more + information. + * - Pull Request Review + - When code is ready to be reviewed and accepted into the main production branch of CML, a pull request is opened. + The Pull Request Review is the process by which the code is assessed for compliance with CML's code standards and + other NASA standards by the CML team. \ No newline at end of file