fullflow 2.0.2__tar.gz → 2.0.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.
Files changed (109) hide show
  1. {fullflow-2.0.2 → fullflow-2.0.3}/CHANGELOG.md +12 -0
  2. {fullflow-2.0.2 → fullflow-2.0.3}/PKG-INFO +1 -1
  3. {fullflow-2.0.2 → fullflow-2.0.3}/pyproject.toml +1 -1
  4. {fullflow-2.0.2 → fullflow-2.0.3}/pyproject.toml.orig +1 -1
  5. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/Sequence.py +18 -6
  6. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/__init__.py +1 -1
  7. {fullflow-2.0.2 → fullflow-2.0.3}/tests/test_imports.py +1 -1
  8. {fullflow-2.0.2 → fullflow-2.0.3}/LICENSE +0 -0
  9. {fullflow-2.0.2 → fullflow-2.0.3}/README.md +0 -0
  10. {fullflow-2.0.2 → fullflow-2.0.3}/THIRD_PARTY_LICENSES.md +0 -0
  11. {fullflow-2.0.2 → fullflow-2.0.3}/docs/system_reference.md +0 -0
  12. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/0state_basics.py +0 -0
  13. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/1state_bounds_tracking.py +0 -0
  14. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/2balance_basic.py +0 -0
  15. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/3balance_multiple.py +0 -0
  16. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/4composition_mixer.py +0 -0
  17. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/5composition_splitter.py +0 -0
  18. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/6lookup_function.py +0 -0
  19. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/7lookup_class_chaining.py +0 -0
  20. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/8map_manual.py +0 -0
  21. {fullflow-2.0.2 → fullflow-2.0.3}/examples/general/9map_hdf5.py +0 -0
  22. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/0function_lookup.py +0 -0
  23. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/1simple_pipe.py +0 -0
  24. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/2compressible_flow.py +0 -0
  25. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/3custom_component.py +0 -0
  26. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/4cavitating_venturi.py +0 -0
  27. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/5heat_exchanger.py +0 -0
  28. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/6flow_splitter.py +0 -0
  29. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/7flow_mixer.py +0 -0
  30. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/8turbopump.py +0 -0
  31. {fullflow-2.0.2 → fullflow-2.0.3}/examples/steady_state/9equilibrium_nozzle.py +0 -0
  32. {fullflow-2.0.2 → fullflow-2.0.3}/examples/testing/1test_data_anchoring.py +0 -0
  33. {fullflow-2.0.2 → fullflow-2.0.3}/examples/testing/2sensor_events.py +0 -0
  34. {fullflow-2.0.2 → fullflow-2.0.3}/examples/testing/3sequences_and_commands.py +0 -0
  35. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/10custom_component.py +0 -0
  36. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/11heat_transfer.py +0 -0
  37. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/12heat_exchanger.py +0 -0
  38. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/13force_steady_heat_transfer.py +0 -0
  39. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/14force_steady_fluid.py +0 -0
  40. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/15piston_cylinder.py +0 -0
  41. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/16balloon.py +0 -0
  42. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/17relief_valve.py +0 -0
  43. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/18combustion_nozzle.py +0 -0
  44. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/19cavitating_venturi.py +0 -0
  45. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/1simple_pipe.py +0 -0
  46. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/20gas_turbine.py +0 -0
  47. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/21heatsink_tca.py +0 -0
  48. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/22water_hammer.py +0 -0
  49. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/23pid_throttle.py +0 -0
  50. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/24sudden_valve_opening.py +0 -0
  51. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/25engine_startup.py +0 -0
  52. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/2node_inertia.py +0 -0
  53. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/3shock_tube.py +0 -0
  54. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/4copv_blowdown.py +0 -0
  55. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/5bang_bang_control.py +0 -0
  56. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/6pump_transient.py +0 -0
  57. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/7flow_mixer.py +0 -0
  58. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/8flow_splitter.py +0 -0
  59. {fullflow-2.0.2 → fullflow-2.0.3}/examples/transient/9model_options.py +0 -0
  60. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Exceptions.py +0 -0
  61. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Exports/EXPORTS.md +0 -0
  62. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Exports/HDF5.py +0 -0
  63. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Exports/__init__.py +0 -0
  64. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/STEADY_STATE_SOLVER.md +0 -0
  65. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/TRANSIENT_SOLVER.md +0 -0
  66. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/__init__.py +0 -0
  67. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/balance_filtering.py +0 -0
  68. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/equations.py +0 -0
  69. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/__init__.py +0 -0
  70. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/diagnostics.py +0 -0
  71. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/evaluation.py +0 -0
  72. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/models.py +0 -0
  73. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/operations.py +0 -0
  74. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/results.py +0 -0
  75. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/runtime.py +0 -0
  76. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/settings.py +0 -0
  77. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/solver.py +0 -0
  78. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/steady_state/statistics.py +0 -0
  79. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/transient/__init__.py +0 -0
  80. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/transient/diagnostics.py +0 -0
  81. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/transient/evaluation.py +0 -0
  82. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/transient/models.py +0 -0
  83. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/transient/operations.py +0 -0
  84. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/transient/results.py +0 -0
  85. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/transient/runtime.py +0 -0
  86. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/transient/settings.py +0 -0
  87. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/Solvers/transient/solver.py +0 -0
  88. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Balance.py +0 -0
  89. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Component.py +0 -0
  90. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/Actuators.py +0 -0
  91. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/Composition.py +0 -0
  92. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/CompressibleFlow.py +0 -0
  93. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/Controllers.py +0 -0
  94. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/ConvectionCoefficients.py +0 -0
  95. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/FrictionFactors.py +0 -0
  96. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/GeneralFlow.py +0 -0
  97. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/HeatTransfer.py +0 -0
  98. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/Lookup.py +0 -0
  99. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/Maps.py +0 -0
  100. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/Nodes.py +0 -0
  101. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/RocketPerformance.py +0 -0
  102. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/Sensor.py +0 -0
  103. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/Turbomachinery.py +0 -0
  104. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Components/__init__.py +0 -0
  105. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Model.py +0 -0
  106. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/Network.py +0 -0
  107. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/SYSTEM.md +0 -0
  108. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/State.py +0 -0
  109. {fullflow-2.0.2 → fullflow-2.0.3}/src/fullflow/System/__init__.py +0 -0
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.3
4
+
5
+ ### Sequence inputs
6
+
7
+ * Normalized State-like `Sequence(function=..., inputs=...)` values through their
8
+ canonical `.as_state()` representation when available.
9
+ * Fixed Lookup input attributes used by function-based Sequences so controller
10
+ logic reads the previous accepted timestep value instead of the current
11
+ nonlinear trial value.
12
+ * Preserved existing behavior for direct `State` inputs, plain constants, and
13
+ list/tuple input containers.
14
+
3
15
  ## 2.0.2
4
16
 
5
17
  * Updated the FullPlot dependency to `fullplot>=0.1.1`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fullflow
3
- Version: 2.0.2
3
+ Version: 2.0.3
4
4
  Summary: Python-native fluid, thermal, propulsion, control, and transient network simulation.
5
5
  Keywords: fluid-dynamics,fluid-network,network-analysis,thermodynamics,thermal-analysis,heat-transfer,propulsion,rocket-propulsion,rocket-engine,compressible-flow,turbomachinery,control-systems,transient-simulation,simulation,engineering,scientific-computing
6
6
  Author: Saaketh Ramoju
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fullflow"
3
- version = "2.0.2"
3
+ version = "2.0.3"
4
4
  description = "Python-native fluid, thermal, propulsion, control, and transient network simulation."
5
5
  readme = "README.md"
6
6
  license = "GPL-3.0-only"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fullflow"
3
- version = "2.0.2"
3
+ version = "2.0.3"
4
4
  description = "Python-native fluid, thermal, propulsion, control, and transient network simulation."
5
5
  readme = "README.md"
6
6
  license = "GPL-3.0-only"
@@ -930,17 +930,29 @@ class Sequence(Component):
930
930
  return np.interp(t, self.times.value, self.values.value)
931
931
 
932
932
  @staticmethod
933
- def _normalize_inputs(inputs):
933
+ def _normalize_input(value):
934
+ if isinstance(value, State):
935
+ return value
936
+
937
+ as_state = getattr(type(value), "as_state", None)
938
+ if callable(as_state):
939
+ return as_state(value)
940
+
941
+ return value
942
+
943
+ @classmethod
944
+ def _normalize_inputs(cls, inputs):
934
945
  if inputs is None:
935
946
  return []
936
947
 
937
948
  if is_state_like(inputs):
938
- return [inputs]
939
-
940
- if isinstance(inputs, (list, tuple)):
941
- return list(inputs)
949
+ inputs = [inputs]
950
+ elif isinstance(inputs, (list, tuple)):
951
+ inputs = list(inputs)
952
+ else:
953
+ inputs = [inputs]
942
954
 
943
- return [inputs]
955
+ return [cls._normalize_input(value) for value in inputs]
944
956
 
945
957
  def _network_time(self):
946
958
  if not hasattr(self.network, "time"):
@@ -2,7 +2,7 @@
2
2
  FullFlow: fluid, thermal, and propulsion network simulation.
3
3
  """
4
4
 
5
- __version__ = "2.0.2"
5
+ __version__ = "2.0.3"
6
6
 
7
7
  from fullflow.System import *
8
8
  from fullflow.Solvers import *
@@ -3,4 +3,4 @@ def test_fullflow_imports():
3
3
  import fullflow.System
4
4
  import fullflow.Solvers
5
5
 
6
- assert fullflow.__version__ == "2.0.2"
6
+ assert fullflow.__version__ == "2.0.3"
File without changes
File without changes